diff options
Diffstat (limited to 'features/dungeonRoutes')
-rw-r--r-- | features/dungeonRoutes/index.js | 481 | ||||
-rw-r--r-- | features/dungeonRoutes/metadata.json | 8 | ||||
-rw-r--r-- | features/dungeonRoutes/routesData.json | 1296 |
3 files changed, 0 insertions, 1785 deletions
diff --git a/features/dungeonRoutes/index.js b/features/dungeonRoutes/index.js deleted file mode 100644 index e84bd2b..0000000 --- a/features/dungeonRoutes/index.js +++ /dev/null @@ -1,481 +0,0 @@ -/// <reference types="../../../CTAutocomplete" /> -/// <reference lib="es2015" /> -import { m } from "../../../mappings/mappings"; -import Feature from "../../featureClass/class"; -import { drawBoxAtBlock, drawBoxAtBlock2, drawFilledBox, drawLine, drawLinePoints } from "../../utils/renderUtils"; -import { calculateDistanceQuick } from "../../utils/utils"; -import SettingBase from "../settings/settingThings/settingBase"; - -const EntityItem = Java.type("net.minecraft.entity.item.EntityItem") - -const EnumParticleTypes = Java.type('net.minecraft.util.EnumParticleTypes'); - -class DungeonRoutes extends Feature { - constructor() { - super() - } - - onEnable() { - if (Player.getUUID().toString() !== "dc8c3964-7b29-4e03-ae9e-d13ebd65dd29") { - new SettingBase("Coming soontm", "maby", undefined, "coming_soontm", this) - return - } - - this.recordingData = [] - this.currentActionIndex = 0 - this.lastLocationUpdatedTime = Date.now() - - this.registerEvent("soundPlay", this.playSound) - this.registerEvent("worldLoad", this.worldLoad) - this.registerEvent("playerInteract", this.playerInteract) - this.registerForge(net.minecraftforge.event.entity.EntityJoinWorldEvent, this.entityJoinWorldEvent) - let packetRecieved = this.registerCustom("packetReceived", this.pickupItem) - - try { - packetRecieved.trigger.setPacketClasses([net.minecraft.network.play.server.S0DPacketCollectItem]) - } catch (e) { }//older ct version - - this.registerStep(true, 5, () => { - let roomId = this.getCurrentRoomId() - if (this.lastRoomId !== roomId) { - this.lastRoomId = roomId - this.recordingData = [] - - this.currRoomData = this.getRoomWorldData() - - this.currentRouteDisplay = this.routesIndexMap.get(this.fullRoomData[this.idMap.get(roomId)].index)?.data - ChatLib.chat(JSON.stringify(this.currentRouteDisplay, undefined, 2)) - } - - if (!this.recordRoute) return - if (!this.recordingData[this.recordingData.length - 1]) return - let locs = this.recordingData[this.recordingData.length - 1].locations - if (locs.length === 0 - || Math.ceil(Player.getX()) !== locs[locs.length - 1][0] - || Math.ceil(Player.getY()) !== locs[locs.length - 1][1] - || Math.ceil(Player.getZ()) !== locs[locs.length - 1][2]) { - - this.addRecordingPoint("locations", [Math.ceil(Player.getX()), Math.ceil(Player.getY()), Math.ceil(Player.getZ())]) - } - }) - - this.registerEvent("renderWorld", () => { - if (this.recordingData && this.recordingData[this.recordingData.length - 1]) { - this.recordingData[this.recordingData.length - 1].etherwarps.forEach((loc) => { - drawFilledBox(loc[0], loc[1] - 1, loc[2], 1, 1, 1, 0, 0, 50 / 255, true) - drawBoxAtBlock(loc[0] - 0.5, loc[1] - 1, loc[2] - 0.5, 1, 0, 0, 1, 1, 1) - }) - this.recordingData[this.recordingData.length - 1].mines.forEach((loc) => { - drawFilledBox(loc[0], loc[1] - 0.5, loc[2], 1, 1, 0, 1, 0, 50 / 255, true) - }) - this.recordingData[this.recordingData.length - 1].tnts.forEach((loc) => { - drawFilledBox(loc[0], loc[1] - 0.5, loc[2], 1, 1, 1, 0, 0, 50 / 255, true) - }) - this.recordingData[this.recordingData.length - 1].interacts.forEach((data) => { - let loc = data.loc - drawFilledBox(loc[0], loc[1], loc[2], 1, 1, 0, 0, 1, 50 / 255, true) - drawBoxAtBlock(loc[0] - 0.5, loc[1], loc[2] - 0.5, 0, 0, 1, 1, 1, 1) - }) - let locs = this.recordingData[this.recordingData.length - 1].locations - if (locs.length >= 2) drawLinePoints(locs.map(a => [a[0] - 0.5, a[1] + 0.1, a[2] - 0.5]), 0, 0, 255, 2, false) - } - - if (this.currRoomData) { - if (this.currentRouteDisplay) { - this.currentRouteDisplay[this.currentActionIndex].etherwarps.forEach(loc => { - let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2]) - drawFilledBox(coords[0], coords[1], coords[2], 1, 1, 1, 0, 0, 50 / 255, true) - drawBoxAtBlock(coords[0] - 0.5, coords[1], coords[2] - 0.5, 1, 0, 0, 1, 1, 1) - }) - this.currentRouteDisplay[this.currentActionIndex].mines.forEach(loc => { - let coords = this.toRoomCoordinates(loc[0], loc[1] - 0.5, loc[2]) - drawBoxAtBlock(coords[0] - 0.5, coords[1], coords[2] - 0.5, 1, 1, 0, 1, 1, 50 / 255) - }) - this.currentRouteDisplay[this.currentActionIndex].tnts.forEach(loc => { - let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2]) - drawBoxAtBlock(coords[0] - 0.5, coords[1] + 0.5, coords[2] - 0.5, 1, 1, 255, 1, 1, 50 / 255) - }) - this.currentRouteDisplay[this.currentActionIndex].interacts.forEach((data) => { - let coords = this.toRoomCoordinates(data.loc[0], data.loc[1], data.loc[2]) - drawFilledBox(coords[0], coords[1], coords[2], 1, 1, 0, 0, 1, 50 / 255, true) - drawBoxAtBlock(coords[0] - 0.5, coords[1], coords[2] - 0.5, 0, 0, 1, 1, 1, 1) - }) - - // if (this.currentRouteDisplay.locations.length >= 2) drawLinePoints(this.currentRouteDisplay.locations.map(a => this.toRoomCoordinates(...a)).map(a => [a[0] - 0.5, a[1] + 0.1, a[2] - 0.5]), 0, 0, 255, 2, false) - - } - } - - }) - - this.tempItemIdLocs = new Map() - - this.idMap = new Map() - this.routesIndexMap = new Map() - this.fullRoomData = JSON.parse(FileLib.read("SoopyV2", "data/roomdata.json")) - this.fullRoutesData = JSON.parse(FileLib.read("SoopyV2", "features/dungeonRoutes/routesData.json")) - this.fullRoomData.forEach((d, i) => { - d.id.forEach(id => { - this.idMap.set(id, i) - }) - this.idMap.set(d.index, i) - }) - this.fullRoutesData.forEach((d, i) => { - this.routesIndexMap.set(d.index, d) - }) - this.lastRoomId = undefined - - this.currRoomData = undefined - this.currentRouteDisplay = undefined - - this.registerCommand("roomid", (...name) => { - ChatLib.chat(JSON.stringify(this.getCurrentRoomData(), undefined, 2)) - ChatLib.chat(JSON.stringify(this.getRoomWorldData(), undefined, 2)) - }) - this.recordRoute = false - - this.registerCommand("startroute", (...name) => { - this.recordRoute = true - this.recordingData = [] - this.addRecordingPoint() - ChatLib.chat(this.FeatureManager.messagePrefix + "Started recording route!") - }) - - this.registerCommand("saveroute", () => { - let data = { - index: this.fullRoomData[this.idMap.get(this.lastRoomId)].index, - data: this.recordingData.map(a => { - a.etherwarps = a.etherwarps.map(a => this.fromRoomCoordinates(a[0], a[1], a[2])) - a.mines = a.mines.map(a => this.fromRoomCoordinates(a[0], a[1], a[2])) - a.locations = a.locations.map(a => this.fromRoomCoordinates(...a)) - a.interacts = a.interacts.map(b => { - b.loc = this.fromRoomCoordinates(...b.loc) - return b - }) - a.tnts = a.tnts.map(a => this.fromRoomCoordinates(a[0], a[1], a[2])) - - return a - }) - } - // this.recordingData.push({ - // etherwarps: [], - // mines: [], - // locations: [], - // interacts: [], - // tnts: [] - // }) - - ChatLib.chat(JSON.stringify(data, undefined, 4)) - ChatLib.chat(this.FeatureManager.messagePrefix + "Saved route!") - this.recordRoute = false - }) - - this.registerStep(true, 5, () => { - if (this.currRoomData) { - if (this.currentRouteDisplay) { - - if (this.currentRouteDisplay[this.currentActionIndex].locations.length >= 2) this.drawLineMultipleParticles(this.currentRouteDisplay[this.currentActionIndex].locations.map(a => this.toRoomCoordinates(a[0], a[1], a[2]))) - - } - } - }) - } - - addRecordingPoint(type, point) { - if (type) { - this.recordingData[this.recordingData.length - 1][type].push(point) - } - if (!type || type === "interacts") { - this.recordingData.push({ - etherwarps: [], - mines: [], - locations: [], - interacts: [], - tnts: [] - }) - } - } - drawLineMultipleParticles(locations) { - let lastLoc = undefined - locations.forEach(loc => { - if (!lastLoc) { - lastLoc = loc - return - } - - this.drawLineParticles(lastLoc, loc) - lastLoc = loc - }) - } - - drawLineParticles(loc1, loc2) { - let distance = Math.hypot(...loc1.map((a, i) => a - loc2[i])) - let maxPoints = Math.ceil(distance * 1) - for (let i = 0; i < maxPoints; i++) { - let actualI = i + Math.random() - let a = actualI / maxPoints - let loc = [loc1[0] * a + loc2[0] * (1 - a) - 0.5, loc1[1] * a + loc2[1] * (1 - a) + 0.1, loc1[2] * a + loc2[2] * (1 - a) - 0.5] - - let a2 = (actualI + 0.02) / maxPoints - let loc3 = [loc1[0] * a2 + loc2[0] * (1 - a2) - 0.5, loc1[1] * a2 + loc2[1] * (1 - a2) + 0.1, loc1[2] * a2 + loc2[2] * (1 - a2) - 0.5] - loc3 = loc3.map((a, i) => loc[i] - a) - - this.spawnParticleAtLocation(loc, loc3, "FLAME") - } - } - - spawnParticleAtLocation(loc, velo, particle) { - let particleType = EnumParticleTypes.valueOf(particle); - let idField = particleType.getClass().getDeclaredField('field_179372_R'); - idField.setAccessible(true); - let id = idField.get(particleType); - - Client.getMinecraft().field_71438_f.func_174974_b( - id, // particleID - true, // shouldIgnoreRange - loc[0], // x - loc[1], // y - loc[2], // z - velo[0], // speedX - velo[1], // speedY - velo[2], // speedZ - ); - } - - toRoomCoordinates(x, y, z) { //From relative coords to world coords - if (!this.currRoomData) return null - - if (this.currRoomData.rotation === 2) { - z *= -1; - [x, z] = [z, x] - } else if (this.currRoomData.rotation === 3) { - x *= -1 - z *= -1 - } else if (this.currRoomData.rotation === 4) { - x *= -1; - [x, z] = [z, x] - } - - return [this.currRoomData.cx + x, y, this.currRoomData.cy + z] - } - fromRoomCoordinates(x, y, z) { //from world coords to relative coords - if (!this.currRoomData) return null - - x -= this.currRoomData.cx - z -= this.currRoomData.cy - - if (this.currRoomData.rotation === 2) { - [x, z] = [z, x] - z *= -1 - } else if (this.currRoomData.rotation === 3) { - x *= -1 - z *= -1 - } else if (this.currRoomData.rotation === 4) { - [x, z] = [z, x] - x *= -1 - } - - return [x, y, z] - } - - getRotation(x, y, width, height, roofY) { - let currRoomData = this.getCurrentRoomData() - if (!currRoomData) return -1 - - if (currRoomData.shape !== "L") { - if (this.getTopBlockAt(x, y, roofY) === 11) return 1 - if (this.getTopBlockAt(x + width, y, roofY) === 11) return 2 - if (this.getTopBlockAt(x + width, y + height, roofY) === 11) return 3 - if (this.getTopBlockAt(x, y + height, roofY) === 11) return 4 - } else { - let one = this.getTopBlockAt2(x + width / 2 + 1, y + height / 2, roofY) - let two = this.getTopBlockAt2(x + width / 2 - 1, y + height / 2, roofY) - let three = this.getTopBlockAt2(x + width / 2, y + height / 2 + 1, roofY) - let four = this.getTopBlockAt2(x + width / 2, y + height / 2 - 1, roofY) - - if (one === 0 && three === 0) return 1 - if (two === 0 && three === 0) return 2 - if (one === 0 && four === 0) return 3 - if (two === 0 && four === 0) return 4 - } - - return -1 - } - - getRoomWorldData() { - let x = Math.floor((Player.getX() + 8) / 32) * 32 - 8 - let y = Math.floor((Player.getZ() + 8) / 32) * 32 - 8 - let width = 30 - let height = 30 - - let roofY = this.getRoofAt(x, y) - - while (World.getBlockStateAt(new BlockPos(x - 1, roofY, y)).getBlockId() !== 0) { - x -= 32 - width += 32 - } - while (World.getBlockStateAt(new BlockPos(x, roofY, y - 1)).getBlockId() !== 0) { - y -= 32 - height += 32 - } - while (World.getBlockStateAt(new BlockPos(x - 1, roofY, y)).getBlockId() !== 0) { //second iteration incase of L shape - x -= 32 - width += 32 - } - while (World.getBlockStateAt(new BlockPos(x + width + 1, roofY, y)).getBlockId() !== 0) { - width += 32 - } - while (World.getBlockStateAt(new BlockPos(x, roofY, y + height + 1)).getBlockId() !== 0) { - height += 32 - } - while (World.getBlockStateAt(new BlockPos(x + width, roofY, y + height + 1)).getBlockId() !== 0) { //second iteration incase of L shape - height += 32 - } - while (World.getBlockStateAt(new BlockPos(x + width + 1, roofY, y + height)).getBlockId() !== 0) { //second iteration incase of L shape - width += 32 - } - while (World.getBlockStateAt(new BlockPos(x + width, roofY, y - 1)).getBlockId() !== 0) {//second iteration incase of L shape - y -= 32 - height += 32 - } - while (World.getBlockStateAt(new BlockPos(x - 1, roofY, y + height)).getBlockId() !== 0) { //third iteration incase of L shape - x -= 32 - width += 32 - } - - - return { - x, - y, - width, - height, - cx: x + width / 2, - cy: y + height / 2, - rotation: this.getRotation(x, y, width, height, roofY) - } - } - - getRoofAt(x, z) { - let y = 255 - while (y > 0 && World.getBlockStateAt(new BlockPos(x, y, z)).getBlockId() === 0) y-- - - return y - } - - getTopBlockAt(x, z, y) { - if (!y) y = this.getHeightAt(x, z) - - return World.getBlockStateAt(new BlockPos(x, y, z)).getMetadata() - } - getTopBlockAt2(x, z, y) { - if (!y) y = this.getHeightAt(x, z) - - return World.getBlockStateAt(new BlockPos(x, y, z)).getBlockId() - } - - getCurrentRoomData() { - let roomId = this.idMap.get(this.getCurrentRoomId()) - if (roomId === undefined) return null - - return this.fullRoomData[roomId] - } - - getCurrentRoomId() { - let id = Scoreboard.getLineByIndex(Scoreboard.getLines().length - 1).getName().trim().split(" ").pop() - - return id - } - - worldLoad() { - - } - - entityJoinWorldEvent(event) { - if (event.entity instanceof EntityItem) { - // console.log("Blaze joined world") - let e = new Entity(event.entity) - let pos = [e.getX(), e.getY(), e.getZ()] - - this.tempItemIdLocs.set(event.entity[m.getEntityId.Entity](), pos) - // console.log(event.entity[m.getEntityId.Entity]()) - } - } - - pickupItem(packet) { - let packetType = new String(packet.class.getSimpleName()).valueOf() - if (packetType === "S0DPacketCollectItem") { - let pos = this.tempItemIdLocs.get(packet[m.getCollectedItemEntityID]()) - - let data = this.currentRouteDisplay[this.currentActionIndex].interacts[0] - if (data && data.type === "item") { - let coords = this.toRoomCoordinates(data.loc[0], data.loc[1], data.loc[2]) - if (calculateDistanceQuick(pos, coords) < 2) { - if (this.currentRouteDisplay.length >= this.currentActionIndex) { - this.currentActionIndex++ - } - } - } - - if (!this.recordRoute) return - if (pos) this.addRecordingPoint("interacts", { loc: pos, type: "item" }) - } - } - - playerInteract(action, position, event) { - if (action.toString() !== "RIGHT_CLICK_BLOCK") return - - let pos = [Player.lookingAt().getX() + 0.5, Player.lookingAt().getY(), Player.lookingAt().getZ() + 0.5] - - let id = Player.lookingAt().getType().getID() - if (id !== 54 && id !== 144 && id !== 69) return - - - let data = this.currentRouteDisplay[this.currentActionIndex].interacts[0] - if (data && data.type === "interact") { - let coords = this.toRoomCoordinates(data.loc[0], data.loc[1], data.loc[2]) - console.log(coords.join(","), pos.join(",")) - if (coords.join(",") === pos.join(",")) { - if (this.currentRouteDisplay.length > this.currentActionIndex) { - this.currentActionIndex++ - } - } - } - - if (!this.recordRoute) return - this.addRecordingPoint("interacts", { loc: pos, type: "interact" }) - } - - playSound(pos, name, volume, pitch, categoryName, event) { - if (!this.recordRoute) return - - let loc = [pos.x, pos.y, pos.z] - let nameSplitted = name.split(".") - if (name === "mob.enderdragon.hit") { //etherwarp - this.addRecordingPoint("etherwarps", loc) - } - if (name === "random.explode" && pitch !== 1) { //tnt OR MIGHT BE spirit scepter - this.addRecordingPoint("tnts", loc) - } - if (name === "mob.bat.death") { - this.addRecordingPoint("interacts", { loc: loc, type: "bat" }) - } - if (nameSplitted[0] === "dig") { //mining block - if (!this.recordingData[this.recordingData.length - 1].mines.some(a => - a[0] === pos[0] - && a[1] === pos[1] - && a[2] === pos[2] - )) { - this.addRecordingPoint("mines", loc) - } - } - } - - onDisable() { - - } - -} - -module.exports = { - class: new DungeonRoutes() -} diff --git a/features/dungeonRoutes/metadata.json b/features/dungeonRoutes/metadata.json deleted file mode 100644 index c2f2a63..0000000 --- a/features/dungeonRoutes/metadata.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Dungeon Routes", - "description": "Routes for dungeons (Coming soontm maby)", - "isHidden": false, - "isTogglable": true, - "defaultEnabled": true, - "sortA": 0 -}
\ No newline at end of file diff --git a/features/dungeonRoutes/routesData.json b/features/dungeonRoutes/routesData.json deleted file mode 100644 index d701fc7..0000000 --- a/features/dungeonRoutes/routesData.json +++ /dev/null @@ -1,1296 +0,0 @@ -[ - { - "index": 84, - "data": [ - { - "etherwarps": [ - [ - 23.5, - 83, - 12.5 - ] - ], - "mines": [], - "locations": [ - [ - -4, - 68, - 16 - ], - [ - 23, - 83, - 13 - ], - [ - 24, - 84, - 13 - ], - [ - 24, - 85, - 13 - ], - [ - 25, - 85, - 13 - ], - [ - 25, - 84, - 12 - ], - [ - 25, - 84, - 11 - ], - [ - 26, - 84, - 11 - ], - [ - 27, - 84, - 9 - ], - [ - 26, - 84, - 6 - ], - [ - 23, - 84, - 5 - ], - [ - 19, - 84, - 5 - ], - [ - 19, - 85, - 5 - ] - ], - "interacts": [ - { - "loc": [ - 17.5, - 84, - 5.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [ - [ - -1.5, - 85, - 23.5 - ] - ], - "mines": [ - [ - -2.5, - 84.5, - 23.5 - ] - ], - "locations": [ - [ - 19, - 85, - 5 - ], - [ - 21, - 85, - 5 - ], - [ - 22, - 84, - 5 - ], - [ - 25, - 84, - 7 - ], - [ - 26, - 84, - 10 - ], - [ - 25, - 84, - 13 - ], - [ - 24, - 85, - 13 - ], - [ - 24, - 84, - 14 - ], - [ - 23, - 83, - 14 - ], - [ - -2, - 85, - 24 - ], - [ - -2, - 84, - 24 - ], - [ - -3, - 84, - 24 - ], - [ - -6, - 84, - 24 - ], - [ - -8, - 83, - 24 - ], - [ - -8, - 81, - 24 - ], - [ - -8, - 84, - 24 - ], - [ - -11, - 83, - 24 - ], - [ - -15, - 83, - 24 - ], - [ - -18, - 83, - 24 - ], - [ - -21, - 83, - 25 - ] - ], - "interacts": [ - { - "loc": [ - -21.5, - 83, - 25.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [ - [ - -18.5, - 91, - 24.5 - ], - [ - -9.5, - 83, - 2.5 - ] - ], - "mines": [], - "locations": [ - [ - -21, - 83, - 25 - ], - [ - -19, - 92, - 25 - ], - [ - -19, - 91, - 25 - ], - [ - -17, - 91, - 22 - ], - [ - -17, - 91, - 21 - ], - [ - -15, - 91, - 18 - ], - [ - -16, - 91, - 21 - ], - [ - -16, - 91, - 19 - ], - [ - -15, - 90, - 17 - ], - [ - -15, - 88, - 16 - ], - [ - -14, - 86, - 13 - ], - [ - -15, - 86, - 10 - ], - [ - -15, - 84, - 8 - ], - [ - -15, - 83, - 6 - ], - [ - -16, - 83, - 4 - ], - [ - -10, - 84, - 3 - ], - [ - -10, - 83, - 3 - ], - [ - -8, - 83, - 3 - ] - ], - "interacts": [ - { - "loc": [ - -4.5, - 84, - 1.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [ - [ - -4.5, - 88, - 1.5 - ], - [ - -4.5, - 92, - 1.5 - ] - ], - "mines": [], - "locations": [ - [ - -8, - 83, - 3 - ], - [ - -5, - 89, - 2 - ], - [ - -5, - 88, - 2 - ], - [ - -5, - 92, - 2 - ] - ], - "interacts": [ - { - "loc": [ - -4.5, - 93, - 1.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [], - "mines": [], - "locations": [ - [ - -5, - 92, - 2 - ], - [ - -8, - 92, - 2 - ], - [ - -11, - 92, - 1 - ], - [ - -11, - 96, - 1 - ], - [ - -11, - 97, - 1 - ], - [ - -13, - 96, - 1 - ], - [ - -13, - 97, - 1 - ], - [ - -13, - 96, - 1 - ], - [ - -13, - 92, - 1 - ], - [ - -13, - 92, - 2 - ], - [ - -13, - 92, - 1 - ], - [ - -13, - 93, - 1 - ], - [ - -13, - 92, - 1 - ] - ], - "interacts": [ - { - "loc": [ - -16.5, - 92, - 0.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [ - [ - -6.5, - 91, - 8.5 - ] - ], - "mines": [], - "locations": [ - [ - -13, - 92, - 1 - ], - [ - -13, - 93, - 1 - ], - [ - -13, - 93, - 2 - ], - [ - -14, - 92, - 2 - ], - [ - -15, - 92, - 2 - ], - [ - -16, - 92, - 2 - ], - [ - -18, - 92, - 3 - ], - [ - -18, - 92, - 4 - ], - [ - -18, - 92, - 5 - ], - [ - -18, - 93, - 5 - ], - [ - -18, - 94, - 5 - ], - [ - -18, - 93, - 8 - ], - [ - -18, - 92, - 9 - ], - [ - -18, - 90, - 10 - ], - [ - -18, - 87, - 11 - ], - [ - -18, - 84, - 11 - ], - [ - -18, - 83, - 11 - ], - [ - -7, - 91, - 9 - ], - [ - -8, - 91, - 8 - ], - [ - -8, - 93, - 8 - ], - [ - -8, - 92, - 8 - ], - [ - -10, - 92, - 10 - ], - [ - -10, - 90, - 10 - ], - [ - -10, - 87, - 11 - ], - [ - -8, - 86, - 11 - ], - [ - -7, - 85, - 12 - ], - [ - -7, - 83, - 12 - ], - [ - -5, - 83, - 10 - ], - [ - -1, - 83, - 11 - ], - [ - 3, - 83, - 12 - ], - [ - 7, - 83, - 12 - ], - [ - 9, - 82, - 12 - ], - [ - 11, - 80, - 13 - ], - [ - 12, - 77, - 13 - ], - [ - 13, - 73, - 14 - ], - [ - 14, - 68, - 14 - ], - [ - 15, - 62, - 15 - ], - [ - 15, - 55, - 15 - ], - [ - 15, - 48, - 16 - ], - [ - 13, - 46, - 16 - ], - [ - 10, - 46, - 17 - ], - [ - 7, - 46, - 17 - ], - [ - 3, - 46, - 17 - ], - [ - -1, - 46, - 16 - ], - [ - -6, - 46, - 16 - ], - [ - -9, - 45, - 15 - ], - [ - -12, - 45, - 14 - ], - [ - -17, - 47, - 13 - ], - [ - -20, - 48, - 11 - ], - [ - -23, - 48, - 10 - ], - [ - -24, - 49, - 10 - ], - [ - -24, - 48, - 10 - ], - [ - -24, - 47, - 10 - ], - [ - -25, - 48, - 10 - ], - [ - -25, - 47, - 10 - ], - [ - -25, - 36, - 10 - ], - [ - -25, - 35, - 10 - ], - [ - -25, - 34, - 10 - ], - [ - -25, - 33, - 10 - ], - [ - -14, - 29, - 10 - ], - [ - -14, - 28, - 10 - ] - ], - "interacts": [ - { - "loc": [ - -9.5, - 28, - 9.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [], - "mines": [], - "locations": [ - [ - -14, - 28, - 10 - ], - [ - -25, - 34, - 10 - ], - [ - -25, - 35, - 10 - ], - [ - -25, - 36, - 10 - ], - [ - -25, - 47, - 10 - ], - [ - -25, - 48, - 10 - ], - [ - -24, - 48, - 10 - ], - [ - -24, - 49, - 10 - ], - [ - -23, - 48, - 10 - ], - [ - -21, - 48, - 10 - ], - [ - -20, - 47, - 10 - ], - [ - -19, - 47, - 11 - ], - [ - -20, - 47, - 10 - ], - [ - -20, - 47, - 9 - ], - [ - -14, - 48, - 1 - ], - [ - -13, - 48, - 0 - ], - [ - -14, - 49, - -3 - ], - [ - -15, - 49, - -7 - ], - [ - -15, - 49, - -11 - ], - [ - -14, - 49, - -15 - ], - [ - -13, - 49, - -19 - ], - [ - -13, - 49, - -23 - ], - [ - -13, - 50, - -24 - ], - [ - -13, - 50, - -26 - ], - [ - -13, - 50, - -28 - ], - [ - -11, - 50, - -27 - ], - [ - -9, - 50, - -27 - ] - ], - "interacts": [ - { - "loc": [ - -3.5, - 50, - -26.5 - ], - "type": "interact" - } - ], - "tnts": [] - }, - { - "etherwarps": [], - "mines": [], - "locations": [ - [ - -9, - 50, - -27 - ], - [ - -10, - 50, - -28 - ], - [ - -11, - 50, - -29 - ], - [ - -13, - 50, - -26 - ], - [ - -13, - 50, - -24 - ], - [ - -14, - 50, - -22 - ], - [ - -16, - 50, - -20 - ], - [ - -18, - 49, - -19 - ], - [ - -21, - 50, - -16 - ], - [ - -23, - 52, - -14 - ], - [ - -25, - 53, - -10 - ], - [ - -26, - 55, - -8 - ], - [ - -26, - 55, - -5 - ], - [ - -26, - 55, - -3 - ], - [ - -24, - 55, - -3 - ], - [ - -20, - 55, - -3 - ], - [ - -17, - 55, - -2 - ], - [ - -13, - 55, - -2 - ], - [ - -10, - 55, - -3 - ], - [ - -9, - 55, - -2 - ], - [ - -9, - 67, - -7 - ], - [ - -9, - 66, - -7 - ], - [ - -9, - 68, - -9 - ], - [ - -9, - 69, - -12 - ], - [ - -10, - 69, - -16 - ], - [ - -14, - 69, - -17 - ], - [ - -16, - 69, - -17 - ], - [ - -17, - 69, - -17 - ], - [ - -18, - 69, - -16 - ] - ], - "interacts": [], - "tnts": [] - } - ] - }, - { - "index": 12, - "data": [ - { - "etherwarps": [ - [ - 2.5, - 80, - -1.5 - ] - ], - "mines": [ - [ - 1.5, - 83.5, - -0.5 - ] - ], - "locations": [ - [ - -7, - 69, - 3 - ], - [ - -6, - 69, - 3 - ], - [ - -3, - 69, - 0 - ], - [ - -1, - 69, - -2 - ], - [ - 0, - 69, - -4 - ], - [ - 1, - 69, - -5 - ], - [ - 3, - 69, - -7 - ], - [ - 3, - 69, - -10 - ], - [ - 5, - 69, - -12 - ], - [ - 8, - 69, - -12 - ], - [ - 11, - 69, - -10 - ], - [ - 11, - 69, - -8 - ], - [ - 11, - 69, - -9 - ], - [ - 10, - 69, - -12 - ], - [ - 7, - 69, - -12 - ], - [ - 3, - 69, - -11 - ], - [ - 2, - 69, - -8 - ], - [ - 1, - 69, - -4 - ], - [ - 1, - 69, - -3 - ], - [ - 2, - 69, - -3 - ], - [ - 2, - 80, - -1 - ], - [ - 1, - 80, - 0 - ], - [ - 1, - 80, - 1 - ], - [ - 1, - 80, - 0 - ], - [ - 1, - 80, - 1 - ], - [ - 0, - 80, - 3 - ], - [ - -1, - 78, - 5 - ], - [ - -2, - 76, - 5 - ], - [ - -3, - 75, - 5 - ], - [ - -4, - 73, - 5 - ], - [ - -4, - 70, - 5 - ], - [ - -5, - 69, - 5 - ] - ], - "interacts": [], - "tnts": [ - [ - 3.5, - 70.5, - -7.5 - ] - ] - } - ] - } -]
\ No newline at end of file |