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

117 lines
3.9 KiB
JavaScript

console.info("[SOCIETY] dragontoothAxe.js loaded");
const Vec3 = Java.loadClass("net.minecraft.world.phys.Vec3");
const breakAxe = (item, server, player) => {
if (!player.stages.has("dragonslayer")) {
item.count--;
server.runCommandSilent(
`playsound minecraft:entity.warden.sonic_boom block @a ${player.x} ${player.y} ${player.z}`
);
server.runCommandSilent(
global.getEmbersTextAPICommand(player.username, `{anchor:"BOTTOM_CENTER",background:1,wrap:220,align:"BOTTOM_CENTER",color:"#FF5555",offsetY:-60}`, 240, Text.translatable("item.society.dragontooth_axe.no_skill_broken").toJson())
);
}
};
const galaxySmashRadius = 3;
ItemEvents.firstLeftClicked((e) => {
const { hand, item, player, level, server } = e;
if (hand == "OFF_HAND") return;
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe") {
breakAxe(item, server, player);
if (player.cooldowns.isOnCooldown(item) || !player.stages.has("galaxy_smash") || !player.isCrouching()) return;
for (let pos of BlockPos.betweenClosed(
new BlockPos(player.x - galaxySmashRadius, player.y - 1, player.z - galaxySmashRadius),
[player.x + galaxySmashRadius, player.y + 1, player.z + galaxySmashRadius]
)) {
if (pos.y === Math.round(player.y)) {
level.spawnParticles(
"supplementaries:bomb_smoke",
true,
pos.x,
pos.y + 0.5,
pos.z,
0.5 * rnd(0, 2),
0.1 * rnd(-1.25, 1),
0.5 * rnd(0, 2),
4,
0.01
);
}
}
let damageableMobs = level
.getEntitiesWithin(player.boundingBox.inflate(galaxySmashRadius + 0.5))
.filter((entity) => entity.isMonster());
let hammerDamage = player.potionEffects.isActive("minecraft:strength") ? 20 : 15;
damageableMobs.forEach((target) => {
target.isAttackable() && target.attack(hammerDamage);
level.spawnParticles(
"species:ichor",
true,
target.x,
target.y + 1.5,
target.z,
0.2 * rnd(1, 4),
0.1 * rnd(1, 4),
0.2 * rnd(1, 4),
5,
0.3
);
});
server.runCommandSilent(
`playsound quark:entity.toretoise.angry block @a ${player.x} ${player.y} ${player.z}`
);
server.runCommandSilent(
`playsound minecraft:entity.ender_dragon.hurt block @a ${player.x} ${player.y} ${player.z}`
);
global.addItemCooldown(player, item, 200);
}
});
ItemEvents.rightClicked((e) => {
const { hand, item, player, level, server } = e;
if (hand == "OFF_HAND") return;
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe") {
breakAxe(item, server, player);
if (player.cooldowns.isOnCooldown(item) || !player.stages.has("handleshot") || !player.isCrouching()) return;
let arrow = level
.getBlock(player.x, player.y + 1, player.z)
.createEntity("minecraft:arrow");
arrow.y = arrow.y + 1;
let speed = 5.0;
let motionX = player.lookAngle.x() * speed;
let motionY = player.lookAngle.y() * speed;
let motionZ = player.lookAngle.z() * speed;
arrow.setDeltaMovement(new Vec3(motionX, motionY, motionZ));
arrow.spawn();
level.spawnParticles(
"supplementaries:bomb_smoke",
true,
player.x,
player.y + 0.5,
player.z,
0.9 * rnd(0, 3),
0.1 * rnd(-1.25, 1),
0.9 * rnd(0, 3),
20,
0.01
);
server.runCommandSilent(
`playsound minecraft:entity.ghast.shoot block @a ${player.x} ${player.y} ${player.z}`
);
server.runCommandSilent(
`playsound minecraft:entity.ender_dragon.hurt block @a ${player.x} ${player.y} ${player.z}`
);
global.addItemCooldown(player, item, 80);
}
});
BlockEvents.leftClicked((e) => {
const { hand, item, player, server } = e;
if (hand == "OFF_HAND") return;
if (hand == "MAIN_HAND" && item.id === "society:dragontooth_axe")
breakAxe(item, server, player);
});