Files
jgl_sunlit_patch/kubejs/server_scripts/blockEvents/hoeAoe.js
T
2026-07-31 10:34:32 +09:00

77 lines
2.0 KiB
JavaScript

console.info("[SOCIETY] hoeAoe.js loaded");
const hoeTiers = new Map([
["minecraft:stone_hoe", 0.2],
["minecraft:iron_hoe", 0.5],
["minecraft:golden_hoe", 1],
["minecraft:diamond_hoe", 2],
["oreganized:electrum_hoe", 3],
["minecraft:netherite_hoe", 3],
["aquaculture:neptunium_hoe", 3],
["botania:elementium_hoe", 3],
["botania:manasteel_hoe", 2],
]);
const hoeFarmland = new Map([
["aquaculture:neptunium_hoe", "dew_drop_farmland_growth:hydrating_farmland"],
["botania:elementium_hoe", "dew_drop_farmland_growth:hydrating_farmland"],
]);
const tryTill = (level, player, pos, farmland) => {
if (!level.getBlock(pos).hasTag("minecraft:dirt")) return false;
const above = level.getBlock(pos.above()).id;
if (
above !== "minecraft:air" &&
above !== "minecraft:water" &&
above !== "minecraft:flowing_water"
)
return false;
level.getBlock(pos).set(farmland || "minecraft:farmland");
player.swing();
player.server.runCommandSilent(
`playsound minecraft:item.hoe.till block @a ${player.x} ${player.y} ${player.z}`
);
return true;
};
BlockEvents.rightClicked(
[
"minecraft:dirt",
"minecraft:rooted_dirt",
"minecraft:coarse_dirt",
"minecraft:dirt_path",
"minecraft:grass_block",
],
(e) => {
const { item, block, player, level } = e;
const id = `${item.id}`;
const hoe = hoeTiers.get(id);
if (!hoe) return;
const farmland = hoeFarmland.get(id);
if (!player.crouching) {
tryTill(level, player, block.pos, farmland);
e.cancel();
return;
}
if (hoe < 1) {
const distance = hoe > 0.2 ? 3 : 2;
let pos = block.pos;
for (let i = 0; i < distance; i++) {
tryTill(level, player, pos, farmland);
pos = global.getFacing(player.facing, pos);
}
} else {
const { x, y, z } = block;
for (let pos of BlockPos.betweenClosed(
new BlockPos(x - hoe, y, z - hoe),
[x + hoe, y, z + hoe]
)) {
tryTill(level, player, pos, farmland);
}
}
global.addItemCooldown(player, item, 40);
}
);