Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
CrackedMatter committed Nov 9, 2023
1 parent ee91d0b commit 7bf7a35
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 18 deletions.
33 changes: 15 additions & 18 deletions src/server/tools/superpickaxe_tool.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import { Dimension, Player } from "@minecraft/server";
import { Dimension, Player, Vector3 } from "@minecraft/server";
import { PlayerSession } from "../sessions.js";
import { Tool } from "./base_tool.js";
import { Tools } from "./tool_manager.js";
import { Server, Vector } from "@notbeer-api";
import { Server, Vector, regionIterateBlocks } from "@notbeer-api";
import { getWorldHeightLimits, locToString } from "server/util.js";
import config from "config.js";

class SuperPickaxeTool extends Tool {
noDelay = true;
permission = "worldedit.superpickaxe";

break = function () { /* pass */ };

hit = function* (self: SuperPickaxeTool, player: Player, session: PlayerSession, loc: Vector): Generator<void> {
const { mode, range } = session.superPickaxe;
break = function* (self: SuperPickaxeTool, player: Player, session: PlayerSession, loc: Vector): Generator<void> {
const dimension = player.dimension;
const typeId = dimension.getBlock(loc).typeId;
if (typeId == "minecraft:air") return;
const { mode, range } = session.superPickaxe;
if (mode == "single") {
destroyBlock(dimension, loc, config.superPickaxeDrop);
return;
Expand All @@ -25,11 +25,14 @@ class SuperPickaxeTool extends Tool {
const max = loc.add(range);
min.y = Math.max(min.y, limits[0]);
max.y = Math.min(max.y, limits[1]);
destroyBlocks(dimension, min, max, config.superPickaxeManyDrop);
for (const block of regionIterateBlocks(min, max)) {
if (dimension.getBlock(block).typeId == typeId) {
destroyBlock(dimension, block, config.superPickaxeManyDrop);
}
yield;
}
return;
}
const typeId = dimension.getBlock(loc).typeId;
if (typeId == "minecraft:air") return;
const rangeSqr = range * range;
const queue: Vector[] = [loc];
const visited = new Set<string>();
Expand All @@ -47,6 +50,8 @@ class SuperPickaxeTool extends Tool {
}
};

hit = this.break;

constructor() {
super();
}
Expand All @@ -62,18 +67,10 @@ Tools.register(SuperPickaxeTool, "superpickaxe", [
return session.superPickaxe.enabled;
});

function destroyBlock(dimension: Dimension, loc: Vector, drop: boolean) {
function destroyBlock(dimension: Dimension, loc: Vector3, drop: boolean) {
if (drop) {
Server.runCommand(`setblock ${loc.x} ${loc.y} ${loc.z} air destroy`, dimension);
} else {
dimension.getBlock(loc).setType("minecraft:air");
}
}

function destroyBlocks(dimension: Dimension, start: Vector, end: Vector, drop: boolean) {
if (drop) {
Server.runCommand(`fill ${start.x} ${start.y} ${start.z} ${end.x} ${end.y} ${end.z} air destroy`, dimension);
} else {
dimension.fillBlocks(start, end, "minecraft:air");
}
}
8 changes: 8 additions & 0 deletions worldedit_settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@
"description": "The maximum brush radius allowed.",
"default": 12
},
"superPickaxeDrop": {
"description": "Whether blocks broken by the super pickaxe in \"single\" mode drop.",
"default": true
},
"superPickaxeManyDrop": {
"description": "Whether blocks broken by the super pickaxe in \"area\" and \"recursive\" mode drop.",
"default": false
},
"defaultChangeLimit": {
"description": "The default amount of blocks that can be \"potentially\" affected within a single operation.",
"default": -1
Expand Down

0 comments on commit 7bf7a35

Please sign in to comment.