117 lines
3.9 KiB
JavaScript
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);
|
|
});
|