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

142 lines
4.0 KiB
JavaScript

console.info("[SOCIETY] magicRope.js loaded");
const canTeleportDown = (level, player, blockPos) => {
let scannedBlock;
let airAbove = false;
let successBlock = 0;
for (let i = 5; i < 15; i++) {
scannedBlock = level.getBlock(blockPos.offset(0, -i, 0));
if (
["minecraft:air", "minecraft:cave_air", "minecraft:cave_vines_plant"].includes(
scannedBlock.id
)
) {
if (airAbove) {
successBlock = i;
} else airAbove = true;
} else if (airAbove) airAbove = false;
}
if (successBlock > 0) {
player.teleportTo(level, blockPos.x, blockPos.y - successBlock, blockPos.z, [], 0.0, 0.0);
return true;
}
return false;
};
const canTeleportSide = (level, player, blockPos) => {
let scannedBlock;
let successBlock;
let xOffset = 0;
let zOffset = 0;
if (player.facing == "north") zOffset = -1;
if (player.facing == "south") zOffset = 1;
if (player.facing == "east") xOffset = 1;
if (player.facing == "west") xOffset = -1;
for (let i = 5; i < 40; i++) {
scannedBlock = level.getBlock(blockPos.offset(i * xOffset, 0, i * zOffset));
if (scannedBlock) {
if (
["minecraft:air", "minecraft:cave_air", "minecraft:cave_vines_plant"].includes(
level.getBlock(scannedBlock.getPos().above()).id
)
) {
successBlock = scannedBlock.pos;
}
}
}
if (successBlock) {
player.teleportTo(level, successBlock.x, successBlock.y, successBlock.z, [], 0.0, 0.0);
return true;
}
return false;
};
ItemEvents.rightClicked("society:magic_rope", (e) => {
const { level, server, item, player } = e;
let errorText;
if (level.dimension !== "society:skull_cavern") {
errorText = Text.translatable("item.society.magic_rope.invalid_dimension");
} else {
if (canTeleportDown(level, player, player.onPos)) {
item.count--;
server.runCommandSilent(
`playsound minecraft:entity.enderman.teleport block @a ${player.x} ${player.y} ${player.z}`
);
global.addItemCooldown(player, item, 150);
} else errorText = Text.translatable("item.society.magic_rope.no_room_below");
}
if (errorText) {
global.addItemCooldown(player, item, 2);
global.renderUiText(
player,
server,
{
magicRopeMessage: {
type: "text",
x: 0,
y: -90,
text: `${errorText.toJson()}`,
color: "#FF5555",
alignX: "center",
alignY: "bottom",
},
magicRopeMessageShadow: {
type: "text",
x: 1,
z: -1,
y: -89,
text: `${errorText.toJson()}`,
color: "#000000",
alignX: "center",
alignY: "bottom",
},
},
global.mainUiElementIds
);
}
});
BlockEvents.rightClicked((e) => {
const { level, server, item, player, block } = e;
let errorText;
if (item.id == "society:magic_tunnel")
if (level.dimension !== "society:skull_cavern") {
errorText = Text.translatable("item.society.magic_rope.invalid_dimension");
} else {
if (canTeleportSide(level, player, block.pos)) {
item.count--;
server.runCommandSilent(
`playsound minecraft:entity.enderman.teleport block @a ${player.x} ${player.y} ${player.z}`
);
global.addItemCooldown(player, item, 150);
} else errorText = Text.translatable("item.society.magic_rope.no_room_side");
}
if (errorText) {
global.addItemCooldown(player, item, 2);
global.renderUiText(
player,
server,
{
magicRopeMessage: {
type: "text",
x: 0,
y: -90,
text: `${errorText.toJson()}`,
color: "#FF5555",
alignX: "center",
alignY: "bottom",
},
magicRopeMessageShadow: {
type: "text",
x: 1,
z: -1,
y: -89,
text: `${errorText.toJson()}`,
color: "#000000",
alignX: "center",
alignY: "bottom",
},
},
global.mainUiElementIds
);
}
});