142 lines
4.0 KiB
JavaScript
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
|
|
);
|
|
}
|
|
});
|