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 ); } });