aboutsummaryrefslogtreecommitdiff
path: root/features
diff options
context:
space:
mode:
Diffstat (limited to 'features')
-rw-r--r--features/changeLogGUI/index.js4
-rw-r--r--features/dungeonMap/index.js180
-rw-r--r--features/dungeonRoutes/index.js262
-rw-r--r--features/dungeonRoutes/routesData.json6543
-rw-r--r--features/dungeonSolvers/index.js69
-rw-r--r--features/fpsImproveGui/index.js58
-rw-r--r--features/fpsImproveGui/metadata.json8
-rw-r--r--features/globalSettings/index.js24
8 files changed, 858 insertions, 6290 deletions
diff --git a/features/changeLogGUI/index.js b/features/changeLogGUI/index.js
index 6b50fdb..d370b50 100644
--- a/features/changeLogGUI/index.js
+++ b/features/changeLogGUI/index.js
@@ -24,7 +24,7 @@ class ChangeLogGui extends Feature {
onEnable() {
this.initVariables()
-
+
this.ChangelogPage = new ChangelogPage()
this.latestAnnouncedVersion = this.ChangelogPage.currVersionId
@@ -168,7 +168,7 @@ class ChangelogPage extends GuiPage {
this.openSidebarPage(this.updatingSidebar)
}
-
+
downloadUpdate() {
new Thread(() => {
this.updatingSidebarConfirmPage.location.location.x.set(-1, 500)
diff --git a/features/dungeonMap/index.js b/features/dungeonMap/index.js
index 7a9b7cb..68adf7e 100644
--- a/features/dungeonMap/index.js
+++ b/features/dungeonMap/index.js
@@ -40,6 +40,7 @@ class DungeonMap extends Feature {
this.mapBackground = new ToggleSetting("Map Background And Border", "Puts a grey background behind the map + Black border", true, "dmap_background", this)
this.showMapInBoss = new ToggleSetting("Keep showing the map in the dungeon boss room", "This will center the map when in boss to still be usefull", true, "dmap_enable_boss", this)
this.borderedHeads = new ToggleSetting("Add a black border around heads on map", "", false, "dmap_border_head", this)
+ this.roomsecrets = new ToggleSetting("Shows secretscompleted/total secrets in room", "(works best when all of party is using soopy map)", false, "roomsecrets", this)
this.brBox = new ToggleSetting("Box around doors in br", "In map category because it uses map to find location (no esp)", true, "dmap_door", this)
this.spiritLeapOverlay = new ToggleSetting("Spirit leap overlay", "Cool overlay for the spirit leap menu", true, "spirit_leap_overlay", this)
// this.spiritLeapOverlay = new ToggleSetting("Spirit leap overlay", "Cool overlay for the spirit leap menu", true, "spirit_leap_overlay", this).requires(this.spiritLeapOverlay)
@@ -61,6 +62,8 @@ class DungeonMap extends Feature {
this.mortLocationOnMap = undefined
this.brBoxLoc = undefined
this.keys = 0
+
+ this.roomDataStuff = new Map()
// this.invMapImage = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB)
// this.renderImage = new BufferedImage(this.IMAGE_SIZE, this.IMAGE_SIZE, BufferedImage.TYPE_INT_ARGB)
this.mapData = undefined
@@ -177,8 +180,29 @@ class DungeonMap extends Feature {
this.registerChat("&r&r&r &r&cThe Catacombs &r&8- &r&eFloor ${*} Stats&r", () => {
this.puzzles = {}
})
+
+ let lastXY = ""
+ let registerActionBar = this.registerCustom("actionbar", (curr, max) => {
+ let loc = this.getRoomXYWorld()
+
+ if (lastXY !== loc.join(",")) {
+ lastXY = loc.join(",")
+ return
+ }
+ if (curr === max) curr = "&a" + curr
+ if (this.roomDataStuff.get(loc.join(",")) !== curr + " " + max) {
+ this.roomDataStuff.set(loc.join(","), curr + " " + max)
+
+ socketConnection.sendDungeonData2(this.people, [loc.join(","), curr + " " + max])
+ }
+ })
+ registerActionBar.trigger.setCriteria('&7${curr}/${max} Secrets').setParameter('contains');
}
+ updateDungeonMapData2(data) {
+ // console.log("Recieved: " + JSON.stringify(data, undefined, 2))
+ this.roomDataStuff.set(data[0], data[1])
+ }
worldLoad() {
this.dungeonBrBoxElm.stopRender()
this.mortLocation = undefined
@@ -192,6 +216,7 @@ class DungeonMap extends Feature {
this.bloodOpened = false
this.keys = 0
this.idToPlayer = {}
+ this.roomDataStuff.clear()
}
renderOverlay() {
@@ -285,11 +310,16 @@ class DungeonMap extends Feature {
Client.getMinecraft().field_71460_t.func_147701_i().func_148250_a(this.mapData, true);
GlStateManager.func_179121_F(); //GlStateManager.pop()
}
+ try {
+ this.drawOtherMisc(x + xOff, y + yOff, size, scale)
- this.drawOtherMisc(x + xOff, y + yOff, size, scale)
-
- this.drawPlayersLocations(x + xOff, y + yOff, size, scale)
+ this.drawPlayersLocations(x + xOff, y + yOff, size, scale)
+ this.drawOtherMisc2(x + xOff, y + yOff, size, scale)
+ } catch (e) {
+ console.error(e)
+ console.error(e.stack)
+ }
renderLibs.stopScizzor()
if (this.mapBackground.getValue()) Renderer.drawRect(Renderer.color(0, 0, 0), x, y, size, 2)
@@ -300,7 +330,7 @@ class DungeonMap extends Feature {
}
}
- drawOtherMisc(x2, y2, size2, scale) {
+ drawOtherMisc(x2, y2, size, scale) {
if (this.currDungeonBossImage) return
if (this.mapIcons.getValue()) {
Object.keys(this.puzzles).forEach(loc => {
@@ -320,6 +350,32 @@ class DungeonMap extends Feature {
}
}
+ drawOtherMisc2(x2, y2, size, scale) {
+ if (this.currDungeonBossImage) return
+ if (this.roomsecrets.getValue()) {
+ for (let ent of this.roomDataStuff.entries()) {
+ let [loc, val] = ent
+ let [x, y] = loc.split(",")
+
+ let val2 = ChatLib.removeFormatting(val)
+
+ let renderX = (parseInt(x) + 16) / this.mapScale / 128 * size + this.offset[0] / 128 * size
+ let renderY = (parseInt(y) + 16) / this.mapScale / 128 * size + this.offset[1] / 128 * size
+
+ Renderer.translate(0, 0, 1000)
+ renderLibs.drawStringCentered("§0" + val2, x2 + renderX + scale * 1.25, y2 + renderY - 2 * scale * 1.25, scale * 1.25)
+ Renderer.translate(0, 0, 1000)
+ renderLibs.drawStringCentered("§0" + val2, x2 + renderX - scale * 1.25, y2 + renderY - 2 * scale * 1.25, scale * 1.25)
+ Renderer.translate(0, 0, 1000)
+ renderLibs.drawStringCentered("§0" + val2, x2 + renderX, y2 + renderY + scale * 1.25 - 2 * scale * 1.25, scale * 1.25)
+ Renderer.translate(0, 0, 1000)
+ renderLibs.drawStringCentered("§0" + val2, x2 + renderX, y2 + renderY - scale * 1.25 - 2 * scale * 1.25, scale * 1.25)
+ Renderer.translate(0, 0, 1000)
+ renderLibs.drawStringCentered("§f" + val, x2 + renderX, y2 + renderY - 2 * scale * 1.25, scale * 1.25)
+ }
+ }
+ }
+
drawPlayersLocations(x, y, size, scale) {
let uuidToPlayer = {}
@@ -381,6 +437,95 @@ class DungeonMap extends Feature {
this.getImageForPlayer(uuid).draw(-5, -5, 10, 10)
}
+ getRoomXYWorld() {
+ let roomData = this.getRoomWorldData()
+ if (roomData.rotation === 4) {
+ return [roomData.x, roomData.y + 32]
+ }
+
+ return [roomData.x, roomData.y]
+ }
+
+ getRotation(x, y, width, height, roofY) {
+ let one = this.getTopBlockAt(x + width / 2 + 1, y + height / 2, roofY)
+ let two = this.getTopBlockAt(x + width / 2 - 1, y + height / 2, roofY)
+ let three = this.getTopBlockAt(x + width / 2, y + height / 2 + 1, roofY)
+ let four = this.getTopBlockAt(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 //4 IS SO TOXIK HGOLY HEL I HATE L SHAPE ROOMS WHY DO THIS TO ME
+
+ 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)).getBlockId()
+ }
+
step() {
if (!World.getWorld()) return
if (!this.isInDungeon()) return
@@ -707,6 +852,32 @@ class DungeonMap extends Feature {
});
} catch (e) { }
}
+
+
+ if (this.offset && this.offset.length === 2) {
+ for (let ent of this.roomDataStuff.entries()) {
+ let [loc] = ent
+ let [x, y] = loc.split(",")
+
+ let renderX = Math.round((parseInt(x) + 16) / this.mapScale + this.offset[0]) // / 128 * size
+ let renderY = Math.round((parseInt(y) + 16) / this.mapScale + this.offset[1])// / 128 * size
+ // console.log(renderX, renderY)
+ let isGreen = false
+ for (let i = 0; i < 10; i++) {
+ if (bytes[renderX + i + (renderY + i) * 128] === 30
+ || bytes[renderX + i + 1 + (renderY + i) * 128] === 30) {
+ isGreen = true
+ }
+ }
+ console.log(ent[1], isGreen)
+ if (isGreen) {
+ let total = ent[1].split(" ")[1]
+ ent[1] = "&a" + total + " " + total
+ console.log(ent[1])
+ }
+ console.log(ent[1], isGreen)
+ }
+ }
// if (!this.renderImage) return
// let newMapImageThing = new Image(this.renderImage)
@@ -776,6 +947,7 @@ class DungeonMap extends Feature {
this.dungeonBrBoxElm.stopRender()
this.initVariables()
this.running = false
+ this.roomDataStuff.clear()
}
}
diff --git a/features/dungeonRoutes/index.js b/features/dungeonRoutes/index.js
index 1c49dab..a7d8691 100644
--- a/features/dungeonRoutes/index.js
+++ b/features/dungeonRoutes/index.js
@@ -7,6 +7,7 @@ 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() {
@@ -19,13 +20,8 @@ class DungeonRoutes extends Feature {
return
}
- this.actionId = 0
-
- this.recentEtherwarps = []
- this.recentMines = []
- this.recentLocations = []
- this.recentInteracts = []
- this.recentTnts = []
+ this.recordingData = []
+ this.currentActionIndex = 0
this.lastLocationUpdatedTime = Date.now()
this.registerEvent("soundPlay", this.playSound)
@@ -42,68 +38,69 @@ class DungeonRoutes extends Feature {
let roomId = this.getCurrentRoomId()
if (this.lastRoomId !== roomId) {
this.lastRoomId = roomId
- this.actionId = 0
- this.recentEtherwarps = []
- this.recentMines = []
- this.recentLocations = []
- this.recentTnts = []
- this.recentInteracts = []
+ this.recordingData = []
this.currRoomData = this.getRoomWorldData()
- this.currentRouteDisplay = this.routesIndexMap.get(this.fullRoomData[this.idMap.get(roomId)].index)
+ 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.recentLocations.length === 0
- || Math.ceil(Player.getX()) !== this.recentLocations[this.recentLocations.length - 1].loc[0]
- || Math.ceil(Player.getY()) !== this.recentLocations[this.recentLocations.length - 1].loc[1]
- || Math.ceil(Player.getZ()) !== this.recentLocations[this.recentLocations.length - 1].loc[2]) {
-
- this.recentLocations.push({ loc: [Math.ceil(Player.getX()), Math.ceil(Player.getY()), Math.ceil(Player.getZ())], id: this.actionId++ })
+ 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", () => {
- this.recentEtherwarps.forEach(({ loc }) => {
- drawFilledBox(loc.x, loc.y - 1, loc.z, 1, 1, 1, 0, 0, 50 / 255, true)
- drawBoxAtBlock(loc.x - 0.5, loc.y - 1, loc.z - 0.5, 1, 0, 0, 1, 1, 1)
- })
- this.recentMines.forEach(({ loc }) => {
- drawFilledBox(loc.x, loc.y - 0.5, loc.z, 1, 1, 0, 1, 0, 50 / 255, true)
- })
- this.recentTnts.forEach(({ loc }) => {
- drawFilledBox(loc.x, loc.y - 0.5, loc.z, 1, 1, 1, 0, 0, 50 / 255, true)
- })
- this.recentInteracts.forEach(({ loc }) => {
- drawFilledBox(loc.x, loc.y, loc.z, 1, 1, 0, 0, 1, 50 / 255, true)
- drawBoxAtBlock(loc.x - 0.5, loc.y, loc.z - 0.5, 0, 0, 1, 1, 1, 1)
- })
- if (this.recentLocations.length >= 2) drawLinePoints(this.recentLocations.map(a => [a.loc[0] - 0.5, a.loc[1] + 0.1, a.loc[2] - 0.5]), 0, 0, 255, 2, false)
+ 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(({ 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) {
+ drawBoxAtBlock(...this.toRoomCoordinates(0, 70, 0), 1, 0, 0, 1, 1, 1)
if (this.currentRouteDisplay) {
- this.currentRouteDisplay.etherwarps.forEach(loc => {
+ this.currentRouteDisplay[this.currentActionIndex].etherwarps.forEach(loc => {
let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
- drawFilledBox(coords[0] + 0.5, coords[1], coords[2] + 0.5, 1, 1, 1, 0, 0, 50 / 255, true)
- drawBoxAtBlock(coords[0], coords[1], coords[2], 1, 0, 0, 1, 1, 1)
+ 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.mines.forEach(loc => {
+ this.currentRouteDisplay[this.currentActionIndex].mines.forEach(loc => {
let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
- drawFilledBox(coords[0] + 0.5, coords[1] + 0.5, coords[2] + 0.5, 1, 1, 0, 255, 0, 50 / 255, true)
+ drawFilledBox(coords[0], coords[1] + 0.5, coords[2], 1, 1, 0, 255, 0, 50 / 255, true)
})
- this.currentRouteDisplay.tnts.forEach(loc => {
+ this.currentRouteDisplay[this.currentActionIndex].tnts.forEach(loc => {
let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
- drawFilledBox(coords[0] + 0.5, coords[1] + 0.5, coords[2] + 0.5, 1, 1, 255, 0, 0, 50 / 255, true)
+ drawFilledBox(coords[0], coords[1] + 0.5, coords[2] + 0.5, 1, 1, 255, 0, 0, 50 / 255, true)
})
- this.currentRouteDisplay.interacts.forEach(loc => {
- let coords = this.toRoomCoordinates(loc[0], loc[1], loc[2])
- drawFilledBox(coords[0] + 0.5, coords[1], coords[2] + 0.5, 1, 1, 0, 0, 1, 50 / 255, true)
+ 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], coords[1], coords[2], 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)
+ // 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)
}
}
@@ -138,28 +135,128 @@ class DungeonRoutes extends Feature {
this.registerCommand("startroute", (...name) => {
this.recordRoute = true
- this.recentEtherwarps = []
- this.recentMines = []
- this.recentLocations = []
- this.recentInteracts = []
- this.recentTnts = []
+ 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,
- etherwarps: this.recentEtherwarps.map(ether => this.fromRoomCoordinates(ether.loc.x - 0.5, ether.loc.y, ether.loc.z - 0.5)),
- mines: this.recentMines.map(ether => this.fromRoomCoordinates(ether.loc.x - 0.5, ether.loc.y, ether.loc.z - 0.5)),
- locations: this.recentLocations.map(ether => this.fromRoomCoordinates(ether.loc[0], ether.loc[1], ether.loc[2])),
- interacts: this.recentInteracts.map(ether => this.fromRoomCoordinates(ether.loc.x - 0.5, ether.loc.y, ether.loc.z - 0.5)),
- tnts: this.recentTnts.map(ether => this.fromRoomCoordinates(ether.loc.x - 0.5, ether.loc.y, ether.loc.z - 0.5)),
+ data: this.recordingData.map(a => {
+ a.etherwarps = a.etherwarps.map(a => this.fromRoomCoordinates(a[0] + 0.5, a[1], a[2] + 0.5))
+ a.mines = a.mines.map(a => this.fromRoomCoordinates(a[0] + 0.5, a[1], a[2] + 0.5))
+ a.locations = a.locations.map(a => this.fromRoomCoordinates(...a))
+ a.interacts = a.interacts.map(b => {
+ b.pos = this.fromRoomCoordinates(...b.pos)
+ return b
+ })
+ a.tnts = a.tnts.map(a => this.fromRoomCoordinates(a[0] + 0.5, a[1], a[2] + 0.5))
+
+ 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) {
+ // this.currentRouteDisplay.etherwarps.forEach(loc => {
+ // let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
+ // drawFilledBox(coords[0] + 0.5, coords[1], coords[2] + 0.5, 1, 1, 1, 0, 0, 50 / 255, true)
+ // drawBoxAtBlock(coords[0], coords[1], coords[2], 1, 0, 0, 1, 1, 1)
+ // })
+ // this.currentRouteDisplay.mines.forEach(loc => {
+ // let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
+ // drawFilledBox(coords[0] + 0.5, coords[1] + 0.5, coords[2] + 0.5, 1, 1, 0, 255, 0, 50 / 255, true)
+ // })
+ // this.currentRouteDisplay.tnts.forEach(loc => {
+ // let coords = this.toRoomCoordinates(loc[0], loc[1] - 1, loc[2])
+ // drawFilledBox(coords[0] + 0.5, coords[1] + 0.5, coords[2] + 0.5, 1, 1, 255, 0, 0, 50 / 255, true)
+ // })
+ // this.currentRouteDisplay.interacts.forEach(loc => {
+ // let coords = this.toRoomCoordinates(loc[0], loc[1], loc[2])
+ // drawFilledBox(coords[0] + 0.5, coords[1], coords[2] + 0.5, 1, 1, 0, 0, 1, 50 / 255, true)
+ // drawBoxAtBlock(coords[0], coords[1], coords[2], 0, 0, 1, 1, 1, 1)
+ // })
+
+ 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 === "interact") {
+ 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
@@ -208,14 +305,14 @@ class DungeonRoutes extends Feature {
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.getTopBlockAt(x + width / 2 + 1, y + height / 2, roofY)
- let two = this.getTopBlockAt(x + width / 2 - 1, y + height / 2, roofY)
- let three = this.getTopBlockAt(x + width / 2, y + height / 2 + 1, roofY)
- let four = this.getTopBlockAt(x + width / 2, y + height / 2 - 1, roofY)
+ 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 && three === 0) return 3
+ if (one === 0 && four === 0) return 3
if (two === 0 && four === 0) return 4
}
@@ -251,6 +348,17 @@ class DungeonRoutes extends Feature {
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 {
@@ -276,6 +384,11 @@ class DungeonRoutes extends Feature {
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())
@@ -291,11 +404,7 @@ class DungeonRoutes extends Feature {
}
worldLoad() {
- this.recentEtherwarps = []
- this.recentMines = []
- this.recentLocations = []
- this.recentInteracts = []
- this.recentTnts = []
+
}
entityJoinWorldEvent(event) {
@@ -315,7 +424,7 @@ class DungeonRoutes extends Feature {
if (packetType === "S0DPacketCollectItem") {
let pos = this.tempItemIdLocs.get(packet[m.getCollectedItemEntityID]())
- if (pos) this.recentInteracts.push({ loc: pos, id: this.actionId++ })
+ if (pos) this.addRecordingPoint("interacts", { loc: pos, type: "item" })
}
}
@@ -328,29 +437,30 @@ class DungeonRoutes extends Feature {
let id = Player.lookingAt().getType().getID()
if (id !== 54 && id !== 144 && id !== 69) return
- this.recentInteracts.push({ loc: pos, id: this.actionId++ })
+ 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.recentEtherwarps.push({ loc: pos, id: this.actionId++ })
+ this.addRecordingPoint("etherwarps", loc)
}
if (name === "random.explode" && pitch !== 1) { //tnt OR MIGHT BE spirit scepter
- this.recentTnts.push({ loc: pos, id: this.actionId++ })
+ this.addRecordingPoint("tnts", loc)
}
if (name === "mob.bat.death") {
- this.recentInteracts.push({ loc: pos, id: this.actionId++ })
+ this.addRecordingPoint("interacts", { loc: loc, type: "bat" })
}
if (nameSplitted[0] === "dig") { //mining block
- if (!this.recentMines.some(a =>
- a.loc.x === pos.x
- && a.loc.y === pos.y
- && a.loc.z === pos.z
+ if (!this.recordingData[this.recordingData.length - 1].mines.some(a =>
+ a[0] === pos[0]
+ && a[1] === pos[1]
+ && a[2] === pos[2]
)) {
- this.recentMines.push({ loc: pos, id: this.actionId++ })
+ this.addRecordingPoint("mines", loc)
}
}
}
diff --git a/features/dungeonRoutes/routesData.json b/features/dungeonRoutes/routesData.json
index 2a6db6c..ed64acf 100644
--- a/features/dungeonRoutes/routesData.json
+++ b/features/dungeonRoutes/routesData.json
@@ -1,6200 +1,353 @@
[
{
- "index": 0,
- "etherwarps": [
- [
- -8,
- 76,
- 14
- ],
- [
- -13,
- 71,
- 5
- ],
- [
- 13,
- 73,
- 9
- ]
+ "index": 86,
+ "data": [
+ {
+ "etherwarps": [
+ [
+ 10.5,
+ 82,
+ -20.5
+ ],
+ [
+ 8.5,
+ 82,
+ 19.5
+ ],
+ [
+ 12.5,
+ 93,
+ 21.5
+ ]
+ ],
+ "mines": [
+ [
+ 4.5,
+ 82.5,
+ -19.5
+ ]
+ ],
+ "locations": [
+ [
+ 18,
+ 69,
+ -25
+ ],
+ [
+ 16,
+ 69,
+ -24
+ ],
+ [
+ 15,
+ 69,
+ -24
+ ],
+ [
+ 14,
+ 69,
+ -24
+ ],
+ [
+ 14,
+ 67,
+ -24
+ ],
+ [
+ 14,
+ 64,
+ -24
+ ],
+ [
+ 14,
+ 61,
+ -24
+ ],
+ [
+ 11,
+ 82,
+ -20
+ ],
+ [
+ 10,
+ 82,
+ -20
+ ],
+ [
+ 9,
+ 82,
+ -20
+ ],
+ [
+ 8,
+ 82,
+ -19
+ ],
+ [
+ 7,
+ 82,
+ -19
+ ],
+ [
+ 6,
+ 82,
+ -19
+ ],
+ [
+ 6,
+ 83,
+ -19
+ ],
+ [
+ 5,
+ 82,
+ -19
+ ],
+ [
+ 5,
+ 80,
+ -19
+ ],
+ [
+ 5,
+ 78,
+ -19
+ ],
+ [
+ 5,
+ 74,
+ -19
+ ],
+ [
+ 5,
+ 72,
+ -19
+ ],
+ [
+ 4,
+ 69,
+ -19
+ ],
+ [
+ 5,
+ 69,
+ -19
+ ],
+ [
+ 7,
+ 69,
+ -16
+ ],
+ [
+ 8,
+ 71,
+ -16
+ ],
+ [
+ 9,
+ 71,
+ -15
+ ],
+ [
+ 9,
+ 72,
+ -2
+ ],
+ [
+ 9,
+ 71,
+ -1
+ ],
+ [
+ 9,
+ 68,
+ 0
+ ],
+ [
+ 8,
+ 65,
+ 1
+ ],
+ [
+ 4,
+ 70,
+ 12
+ ],
+ [
+ -1,
+ 71,
+ 22
+ ],
+ [
+ -1,
+ 69,
+ 22
+ ],
+ [
+ -1,
+ 69,
+ 23
+ ],
+ [
+ 0,
+ 69,
+ 25
+ ],
+ [
+ 0,
+ 69,
+ 26
+ ],
+ [
+ 0,
+ 69,
+ 27
+ ],
+ [
+ 0,
+ 69,
+ 25
+ ],
+ [
+ 1,
+ 69,
+ 22
+ ],
+ [
+ 3,
+ 69,
+ 21
+ ],
+ [
+ 8,
+ 69,
+ 20
+ ],
+ [
+ 9,
+ 69,
+ 20
+ ],
+ [
+ 9,
+ 82,
+ 20
+ ],
+ [
+ 11,
+ 82,
+ 19
+ ],
+ [
+ 12,
+ 82,
+ 19
+ ],
+ [
+ 13,
+ 94,
+ 22
+ ],
+ [
+ 13,
+ 93,
+ 22
+ ],
+ [
+ 15,
+ 93,
+ 23
+ ],
+ [
+ 17,
+ 91,
+ 23
+ ],
+ [
+ 17,
+ 89,
+ 23
+ ],
+ [
+ 18,
+ 85,
+ 23
+ ],
+ [
+ 18,
+ 82,
+ 23
+ ],
+ [
+ 17,
+ 82,
+ 22
+ ],
+ [
+ 15,
+ 82,
+ 18
+ ],
+ [
+ 13,
+ 82,
+ 14
+ ],
+ [
+ 11,
+ 82,
+ 11
+ ],
+ [
+ 10,
+ 80,
+ 9
+ ],
+ [
+ 9,
+ 77,
+ 8
+ ],
+ [
+ 8,
+ 73,
+ 6
+ ],
+ [
+ 8,
+ 68,
+ 5
+ ],
+ [
+ 6,
+ 65,
+ 3
+ ],
+ [
+ 2,
+ 65,
+ 2
+ ],
+ [
+ 0,
+ 65,
+ 1
+ ]
+ ],
+ "interacts": [],
+ "tnts": [
+ [
+ 12.5,
+ 69.5,
+ -24.5
+ ],
+ [
+ 0.5,
+ 70.5,
+ 25.5
+ ]
+ ]
+ }
]
- },
- {
- "index": 128,
- "etherwarps": [
- [
- 2,
- 72,
- 3
- ],
- [
- 0,
- 91,
- -10
- ],
- [
- 8,
- 72,
- -9
- ]
- ]
- },
- {
- "index": 127,
- "etherwarps": [
- [
- 0,
- 77,
- -12
- ],
- [
- 0,
- 80,
- 14
- ],
- [
- -12,
- 72,
- 0
- ]
- ]
- },
- {
- "index": 95,
- "etherwarps": [],
- "mines": [
- [
- -18,
- 51.5,
- 22
- ],
- [
- -18,
- 52.5,
- 22
- ]
- ],
- "locations": [
- [
- -11,
- 69,
- 4
- ],
- [
- -12,
- 69,
- 5
- ],
- [
- -13,
- 69,
- 5
- ],
- [
- -13,
- 69,
- 6
- ],
- [
- -13,
- 69,
- 7
- ],
- [
- -13,
- 69,
- 8
- ],
- [
- -13,
- 68,
- 8
- ],
- [
- -13,
- 65,
- 8
- ],
- [
- -12,
- 62,
- 9
- ],
- [
- -12,
- 57,
- 9
- ],
- [
- -12,
- 56,
- 11
- ],
- [
- -10,
- 56,
- 15
- ],
- [
- -10,
- 58,
- 14
- ],
- [
- -9,
- 58,
- 14
- ],
- [
- -9,
- 57,
- 14
- ],
- [
- -8,
- 57,
- 15
- ],
- [
- -7,
- 57,
- 15
- ],
- [
- -9,
- 57,
- 16
- ],
- [
- -11,
- 57,
- 17
- ],
- [
- -12,
- 56,
- 18
- ],
- [
- -12,
- 53,
- 18
- ],
- [
- -12,
- 50,
- 19
- ],
- [
- -13,
- 50,
- 22
- ],
- [
- -14,
- 50,
- 23
- ],
- [
- -15,
- 50,
- 23
- ],
- [
- -14,
- 50,
- 24
- ],
- [
- -13,
- 50,
- 23
- ],
- [
- -13,
- 50,
- 20
- ],
- [
- -12,
- 50,
- 19
- ],
- [
- -13,
- 50,
- 19
- ],
- [
- -13,
- 51,
- 16
- ],
- [
- -13,
- 51,
- 15
- ],
- [
- -15,
- 51,
- 4
- ],
- [
- -15,
- 50,
- 3
- ],
- [
- -16,
- 48,
- -6
- ],
- [
- -16,
- 48,
- -5
- ],
- [
- -16,
- 48,
- -8
- ],
- [
- -16,
- 48,
- -17
- ],
- [
- -15,
- 47,
- -20
- ],
- [
- -14,
- 47,
- -22
- ],
- [
- -12,
- 48,
- -25
- ],
- [
- -12,
- 47,
- -25
- ],
- [
- -10,
- 47,
- -24
- ],
- [
- -9,
- 47,
- -24
- ],
- [
- -9,
- 47,
- -23
- ],
- [
- -8,
- 47,
- -22
- ],
- [
- -6,
- 47,
- -22
- ],
- [
- -5,
- 47,
- -22
- ],
- [
- -5,
- 46,
- -22
- ],
- [
- -5,
- 46,
- -23
- ],
- [
- -7,
- 47,
- -23
- ],
- [
- -9,
- 47,
- -24
- ],
- [
- -11,
- 47,
- -24
- ],
- [
- -15,
- 47,
- -22
- ],
- [
- -17,
- 47,
- -20
- ],
- [
- -18,
- 46,
- -19
- ],
- [
- -18,
- 46,
- -18
- ],
- [
- -18,
- 59,
- -15
- ],
- [
- -18,
- 72,
- -12
- ],
- [
- -18,
- 85,
- -9
- ],
- [
- -18,
- 83,
- -8
- ],
- [
- -17,
- 80,
- -8
- ],
- [
- -16,
- 76,
- -8
- ],
- [
- -9,
- 90,
- -7
- ],
- [
- -9,
- 89,
- -7
- ],
- [
- -2,
- 95,
- -7
- ],
- [
- -2,
- 94,
- -7
- ],
- [
- -1,
- 93,
- -7
- ],
- [
- -4,
- 92,
- -7
- ],
- [
- -7,
- 92,
- -6
- ],
- [
- -9,
- 91,
- -5
- ],
- [
- -11,
- 88,
- -4
- ],
- [
- -14,
- 84,
- 1
- ],
- [
- -15,
- 85,
- 3
- ],
- [
- -15,
- 86,
- 3
- ],
- [
- -15,
- 86,
- 5
- ],
- [
- -15,
- 85,
- 8
- ],
- [
- -15,
- 83,
- 9
- ],
- [
- -15,
- 80,
- 11
- ],
- [
- -15,
- 69,
- 17
- ]
- ],
- "interacts": [
- [
- -20,
- 52,
- 23
- ],
- [
- 2,
- 92,
- -7
- ]
- ],
- "tnts": []
- },
- {
- "index": 75,
- "etherwarps": [
- [
- -54,
- 76,
- 6
- ],
- [
- -60,
- 74,
- -12
- ]
- ],
- "mines": [
- [
- -60,
- 74.5,
- -12
- ],
- [
- -60,
- 73.5,
- -12
- ],
- [
- -60,
- 72.5,
- -12
- ],
- [
- -60,
- 71.5,
- -12
- ]
- ],
- "locations": [
- [
- -51,
- 69,
- -3
- ],
- [
- -53,
- 77,
- 5
- ],
- [
- -53,
- 76,
- 5
- ],
- [
- -54,
- 76,
- 8
- ],
- [
- -56,
- 76,
- 10
- ],
- [
- -59,
- 76,
- 10
- ],
- [
- -60,
- 76,
- 10
- ],
- [
- -60,
- 76,
- 11
- ],
- [
- -59,
- 76,
- 10
- ],
- [
- -57,
- 76,
- 9
- ],
- [
- -57,
- 76,
- 10
- ],
- [
- -55,
- 76,
- 11
- ],
- [
- -53,
- 76,
- 9
- ],
- [
- -53,
- 76,
- 8
- ],
- [
- -53,
- 76,
- 7
- ],
- [
- -53,
- 76,
- 6
- ],
- [
- -54,
- 76,
- 5
- ],
- [
- -59,
- 75,
- -13
- ],
- [
- -59,
- 74,
- -13
- ],
- [
- -59,
- 73,
- -13
- ],
- [
- -59,
- 72,
- -13
- ],
- [
- -59,
- 69,
- -13
- ],
- [
- -59,
- 67,
- -13
- ],
- [
- -59,
- 65,
- -13
- ],
- [
- -57,
- 65,
- -11
- ],
- [
- -58,
- 65,
- -12
- ],
- [
- -59,
- 65,
- -12
- ],
- [
- -59,
- 65,
- -13
- ],
- [
- -61,
- 65,
- -13
- ],
- [
- -61,
- 66,
- -12
- ],
- [
- -61,
- 74,
- -12
- ],
- [
- -60,
- 75,
- -12
- ],
- [
- -61,
- 73,
- -12
- ],
- [
- -48,
- 78,
- -12
- ],
- [
- -49,
- 78,
- -12
- ],
- [
- -40,
- 83,
- -12
- ],
- [
- -41,
- 84,
- -12
- ],
- [
- -39,
- 83,
- -12
- ],
- [
- -36,
- 82,
- -12
- ],
- [
- -32,
- 82,
- -12
- ],
- [
- -13,
- 82,
- -10
- ],
- [
- -10,
- 82,
- -10
- ],
- [
- -6,
- 82,
- -10
- ],
- [
- -1,
- 82,
- -10
- ],
- [
- 15,
- 82,
- -10
- ],
- [
- 18,
- 82,
- -10
- ],
- [
- 22,
- 82,
- -10
- ],
- [
- 31,
- 82,
- -10
- ],
- [
- 30,
- 82,
- -10
- ],
- [
- 32,
- 82,
- -10
- ],
- [
- 35,
- 82,
- -10
- ],
- [
- 41,
- 83,
- -9
- ],
- [
- 44,
- 83,
- -8
- ],
- [
- 48,
- 83,
- -8
- ],
- [
- 50,
- 84,
- -5
- ],
- [
- 51,
- 85,
- -2
- ],
- [
- 52,
- 84,
- 0
- ],
- [
- 51,
- 93,
- 9
- ],
- [
- 51,
- 92,
- 9
- ],
- [
- 51,
- 92,
- 8
- ],
- [
- 53,
- 92,
- 6
- ],
- [
- 53,
- 91,
- 5
- ],
- [
- 54,
- 89,
- 4
- ],
- [
- 54,
- 86,
- 4
- ],
- [
- 55,
- 83,
- 3
- ]
- ],
- "interacts": [
- [
- -56,
- 65,
- -8
- ],
- [
- 50,
- 92,
- 13
- ],
- [
- 50,
- 92,
- 13
- ]
- ],
- "tnts": [
- [
- -54,
- 76.5,
- 6
- ],
- [
- 38.25,
- 83.375,
- -9.125
- ]
- ]
- },
- {
- "index": 93,
- "etherwarps": [],
- "mines": [
- [
- 39,
- 76.5,
- -1
- ],
- [
- 40,
- 76.5,
- -1
- ]
- ],
- "locations": [
- [
- -24,
- 69,
- -9
- ],
- [
- -26,
- 69,
- -8
- ],
- [
- -28,
- 69,
- -5
- ],
- [
- -28,
- 69,
- -1
- ],
- [
- -26,
- 69,
- 3
- ],
- [
- -27,
- 69,
- 6
- ],
- [
- -29,
- 69,
- 8
- ],
- [
- -33,
- 69,
- 8
- ],
- [
- -34,
- 69,
- 7
- ],
- [
- -35,
- 69,
- 5
- ],
- [
- -35,
- 70,
- 5
- ],
- [
- -35,
- 60,
- 5
- ],
- [
- -35,
- 60,
- 4
- ],
- [
- -35,
- 60,
- 2
- ],
- [
- -35,
- 60,
- -1
- ],
- [
- -35,
- 60,
- -2
- ],
- [
- -35,
- 60,
- -3
- ],
- [
- -35,
- 60,
- -4
- ],
- [
- -34,
- 60,
- -1
- ],
- [
- -34,
- 60,
- 2
- ],
- [
- -35,
- 60,
- 5
- ],
- [
- -35,
- 61,
- 5
- ],
- [
- -35,
- 69,
- 5
- ],
- [
- -34,
- 69,
- 7
- ],
- [
- -32,
- 69,
- 10
- ],
- [
- -29,
- 69,
- 11
- ],
- [
- -26,
- 69,
- 9
- ],
- [
- -26,
- 69,
- 5
- ],
- [
- -26,
- 69,
- 1
- ],
- [
- -27,
- 69,
- -3
- ],
- [
- -27,
- 69,
- -7
- ],
- [
- -24,
- 69,
- -8
- ],
- [
- -20,
- 69,
- -8
- ],
- [
- -17,
- 69,
- -5
- ],
- [
- -13,
- 70,
- -6
- ],
- [
- -11,
- 70,
- -9
- ],
- [
- -12,
- 70,
- -11
- ],
- [
- -12,
- 71,
- -11
- ],
- [
- -12,
- 70,
- -11
- ],
- [
- -11,
- 70,
- -11
- ],
- [
- -8,
- 70,
- -10
- ],
- [
- -4,
- 71,
- -8
- ],
- [
- 0,
- 71,
- -7
- ],
- [
- 2,
- 71,
- -8
- ],
- [
- 4,
- 69,
- -9
- ],
- [
- 7,
- 69,
- -8
- ],
- [
- 9,
- 69,
- -6
- ],
- [
- 16,
- 69,
- -1
- ],
- [
- 19,
- 69,
- 1
- ],
- [
- 22,
- 69,
- 1
- ],
- [
- 23,
- 69,
- -1
- ],
- [
- 23,
- 71,
- -1
- ],
- [
- 23,
- 70,
- -1
- ],
- [
- 23,
- 70,
- -3
- ],
- [
- 23,
- 61,
- -3
- ],
- [
- 23,
- 60,
- -3
- ],
- [
- 23,
- 60,
- -2
- ],
- [
- 23,
- 60,
- 9
- ],
- [
- 23,
- 60,
- 12
- ],
- [
- 23,
- 62,
- 5
- ],
- [
- 23,
- 60,
- 5
- ],
- [
- 24,
- 61,
- 5
- ],
- [
- 24,
- 60,
- 5
- ],
- [
- 23,
- 60,
- 5
- ],
- [
- 23,
- 61,
- 5
- ],
- [
- 23,
- 60,
- 5
- ],
- [
- 23,
- 60,
- 3
- ],
- [
- 23,
- 60,
- -1
- ],
- [
- 23,
- 61,
- -3
- ],
- [
- 23,
- 70,
- -3
- ],
- [
- 23,
- 71,
- -3
- ],
- [
- 23,
- 70,
- -2
- ],
- [
- 22,
- 70,
- -1
- ],
- [
- 22,
- 69,
- -1
- ],
- [
- 20,
- 69,
- 1
- ],
- [
- 17,
- 69,
- 1
- ],
- [
- 15,
- 69,
- -2
- ],
- [
- 15,
- 69,
- -3
- ],
- [
- 16,
- 69,
- -2
- ],
- [
- 25,
- 77,
- -2
- ],
- [
- 26,
- 77,
- -2
- ],
- [
- 28,
- 75,
- -2
- ],
- [
- 31,
- 76,
- -2
- ],
- [
- 34,
- 75,
- -2
- ],
- [
- 35,
- 75,
- -2
- ],
- [
- 34,
- 75,
- -2
- ],
- [
- 33,
- 75,
- -2
- ],
- [
- 35,
- 75,
- -2
- ],
- [
- 36,
- 75,
- -2
- ],
- [
- 37,
- 75,
- -2
- ],
- [
- 38,
- 75,
- -2
- ],
- [
- 39,
- 75,
- -2
- ],
- [
- 38,
- 75,
- -2
- ],
- [
- 38,
- 75,
- -3
- ],
- [
- 37,
- 75,
- -4
- ],
- [
- 36,
- 75,
- -4
- ],
- [
- 34,
- 75,
- -3
- ],
- [
- 33,
- 75,
- -3
- ]
- ],
- "interacts": [
- [
- -36,
- 60,
- -6
- ],
- [
- 22,
- 60,
- 14
- ],
- [
- 43,
- 77,
- -1
- ],
- [
- 43,
- 77,
- -1
- ],
- [
- 43,
- 77,
- -1
- ]
- ],
- "tnts": [
- [
- 34,
- 75.5,
- -1
- ]
- ]
- },
- {
- "index": 77,
- "etherwarps": [
- [
- -24,
- 71,
- 6
- ],
- [
- 18,
- 78,
- -24
- ],
- [
- 21,
- 79,
- -39
- ],
- [
- 25,
- 96,
- 8
- ]
- ],
- "mines": [],
- "locations": [
- [
- -14,
- 69,
- 3
- ],
- [
- -14,
- 69,
- -1
- ],
- [
- -12,
- 69,
- -5
- ],
- [
- -9,
- 69,
- -9
- ],
- [
- -7,
- 69,
- -10
- ],
- [
- -7,
- 71,
- -9
- ],
- [
- -7,
- 70,
- -9
- ],
- [
- -7,
- 71,
- -9
- ],
- [
- -7,
- 70,
- -9
- ],
- [
- -5,
- 70,
- -9
- ],
- [
- -3,
- 70,
- -9
- ],
- [
- -2,
- 70,
- -9
- ],
- [
- -4,
- 70,
- -8
- ],
- [
- -6,
- 70,
- -8
- ],
- [
- -7,
- 69,
- -8
- ],
- [
- -7,
- 69,
- -9
- ],
- [
- -11,
- 69,
- -9
- ],
- [
- -13,
- 69,
- -7
- ],
- [
- -13,
- 69,
- -5
- ],
- [
- -13,
- 69,
- -2
- ],
- [
- -16,
- 69,
- 0
- ],
- [
- -18,
- 69,
- 1
- ],
- [
- -21,
- 69,
- 2
- ],
- [
- -23,
- 69,
- 3
- ],
- [
- -23,
- 71,
- 7
- ],
- [
- -23,
- 71,
- 8
- ],
- [
- -23,
- 71,
- 11
- ],
- [
- -23,
- 70,
- 11
- ],
- [
- -23,
- 69,
- 11
- ],
- [
- -24,
- 69,
- 11
- ],
- [
- -25,
- 69,
- 11
- ],
- [
- -26,
- 69,
- 11
- ],
- [
- -27,
- 69,
- 11
- ],
- [
- -27,
- 70,
- 11
- ],
- [
- -27,
- 71,
- 11
- ],
- [
- -27,
- 70,
- 11
- ],
- [
- -27,
- 71,
- 11
- ],
- [
- -27,
- 72,
- 11
- ],
- [
- -27,
- 71,
- 11
- ],
- [
- -27,
- 70,
- 11
- ],
- [
- -26,
- 70,
- 11
- ],
- [
- -25,
- 69,
- 11
- ],
- [
- -24,
- 69,
- 11
- ],
- [
- -23,
- 69,
- 11
- ],
- [
- -22,
- 69,
- 11
- ],
- [
- -19,
- 69,
- 10
- ],
- [
- -16,
- 69,
- 10
- ],
- [
- -13,
- 69,
- 11
- ],
- [
- -9,
- 69,
- 11
- ],
- [
- -6,
- 69,
- 11
- ],
- [
- -4,
- 69,
- 9
- ],
- [
- -4,
- 69,
- 8
- ],
- [
- -4,
- 69,
- 7
- ],
- [
- -4,
- 69,
- 5
- ],
- [
- -4,
- 69,
- 6
- ],
- [
- -3,
- 69,
- 8
- ],
- [
- -3,
- 69,
- 10
- ],
- [
- 1,
- 70,
- 11
- ],
- [
- 5,
- 70,
- 11
- ],
- [
- 9,
- 70,
- 10
- ],
- [
- 13,
- 70,
- 7
- ],
- [
- 15,
- 69,
- 3
- ],
- [
- 16,
- 69,
- -2
- ],
- [
- 15,
- 69,
- -6
- ],
- [
- 16,
- 69,
- -10
- ],
- [
- 16,
- 70,
- -15
- ],
- [
- 17,
- 69,
- -19
- ],
- [
- 17,
- 70,
- -24
- ],
- [
- 17,
- 70,
- -27
- ],
- [
- 17,
- 69,
- -28
- ],
- [
- 19,
- 70,
- -26
- ],
- [
- 21,
- 69,
- -22
- ],
- [
- 23,
- 69,
- -18
- ],
- [
- 26,
- 69,
- -18
- ],
- [
- 27,
- 69,
- -19
- ],
- [
- 27,
- 59,
- -19
- ],
- [
- 25,
- 59,
- -20
- ],
- [
- 23,
- 59,
- -20
- ],
- [
- 21,
- 59,
- -19
- ],
- [
- 23,
- 59,
- -20
- ],
- [
- 21,
- 59,
- -20
- ],
- [
- 22,
- 59,
- -20
- ],
- [
- 25,
- 59,
- -20
- ],
- [
- 26,
- 59,
- -20
- ],
- [
- 27,
- 59,
- -20
- ],
- [
- 27,
- 59,
- -19
- ],
- [
- 27,
- 60,
- -19
- ],
- [
- 27,
- 59,
- -19
- ],
- [
- 27,
- 60,
- -18
- ],
- [
- 27,
- 70,
- -19
- ],
- [
- 27,
- 72,
- -19
- ],
- [
- 27,
- 70,
- -19
- ],
- [
- 26,
- 69,
- -18
- ],
- [
- 23,
- 69,
- -18
- ],
- [
- 22,
- 69,
- -20
- ],
- [
- 21,
- 69,
- -22
- ],
- [
- 20,
- 69,
- -23
- ],
- [
- 19,
- 79,
- -23
- ],
- [
- 19,
- 78,
- -23
- ],
- [
- 19,
- 78,
- -24
- ],
- [
- 18,
- 78,
- -27
- ],
- [
- 18,
- 78,
- -29
- ],
- [
- 17,
- 78,
- -29
- ],
- [
- 14,
- 78,
- -30
- ],
- [
- 13,
- 78,
- -31
- ],
- [
- 10,
- 78,
- -31
- ],
- [
- 7,
- 78,
- -31
- ],
- [
- 4,
- 80,
- -31
- ],
- [
- 4,
- 79,
- -31
- ],
- [
- 5,
- 79,
- -31
- ],
- [
- 7,
- 79,
- -31
- ],
- [
- 11,
- 78,
- -32
- ],
- [
- 15,
- 78,
- -33
- ],
- [
- 17,
- 78,
- -35
- ],
- [
- 17,
- 78,
- -36
- ],
- [
- 18,
- 78,
- -37
- ],
- [
- 22,
- 80,
- -38
- ],
- [
- 22,
- 79,
- -38
- ],
- [
- 23,
- 79,
- -38
- ],
- [
- 27,
- 79,
- -38
- ],
- [
- 28,
- 78,
- -38
- ],
- [
- 27,
- 78,
- -38
- ],
- [
- 27,
- 78,
- -36
- ],
- [
- 27,
- 79,
- -25
- ],
- [
- 27,
- 78,
- -24
- ],
- [
- 23,
- 78,
- -24
- ],
- [
- 20,
- 78,
- -21
- ],
- [
- 17,
- 78,
- -17
- ],
- [
- 16,
- 79,
- -13
- ],
- [
- 15,
- 79,
- -11
- ],
- [
- 15,
- 79,
- -10
- ],
- [
- 12,
- 86,
- -4
- ],
- [
- 11,
- 86,
- -2
- ],
- [
- 9,
- 93,
- 2
- ],
- [
- 9,
- 91,
- 2
- ],
- [
- 9,
- 89,
- 3
- ],
- [
- 8,
- 90,
- 7
- ],
- [
- 4,
- 89,
- 8
- ],
- [
- 7,
- 89,
- 8
- ],
- [
- 11,
- 90,
- 8
- ],
- [
- 16,
- 90,
- 9
- ],
- [
- 18,
- 89,
- 9
- ],
- [
- 26,
- 97,
- 9
- ],
- [
- 26,
- 96,
- 9
- ],
- [
- 27,
- 96,
- 9
- ],
- [
- 27,
- 95,
- 9
- ],
- [
- 27,
- 93,
- 9
- ],
- [
- 27,
- 90,
- 9
- ],
- [
- 24,
- 89,
- 9
- ],
- [
- 20,
- 89,
- 8
- ],
- [
- 16,
- 89,
- 5
- ],
- [
- 12,
- 89,
- 1
- ],
- [
- 11,
- 89,
- -2
- ],
- [
- 10,
- 88,
- -4
- ],
- [
- 10,
- 85,
- -5
- ],
- [
- 10,
- 82,
- -6
- ],
- [
- 18,
- 80,
- 1
- ],
- [
- 18,
- 75,
- 1
- ],
- [
- 17,
- 73,
- 0
- ],
- [
- 17,
- 71,
- 0
- ],
- [
- 16,
- 69,
- -3
- ],
- [
- 16,
- 69,
- -6
- ],
- [
- 17,
- 70,
- -11
- ],
- [
- 17,
- 70,
- -16
- ],
- [
- 17,
- 69,
- -21
- ],
- [
- 17,
- 70,
- -25
- ],
- [
- 17,
- 70,
- -27
- ]
- ],
- "interacts": [
- [
- -29,
- 69,
- 10
- ],
- [
- -29,
- 76,
- 10
- ],
- [
- -29,
- 76,
- 10
- ],
- [
- -5,
- 69,
- 2
- ],
- [
- 16,
- 69,
- -32
- ],
- [
- 25,
- 78,
- -39
- ],
- [
- 1,
- 91,
- 7
- ],
- [
- 16,
- 69,
- -32
- ]
- ],
- "tnts": [
- [
- -5,
- 69.5,
- 7
- ],
- [
- 12,
- 78.5,
- -31
- ]
- ]
- },
- {
- "index": 64,
- "etherwarps": [
- [
- 19,
- 83,
- -13
- ]
- ],
- "mines": [
- [
- 18,
- 84.5,
- -13
- ],
- [
- 18,
- 83.5,
- -13
- ],
- [
- 16,
- 82.5,
- -13
- ],
- [
- -7,
- 70.5,
- -23
- ],
- [
- -7,
- 69.5,
- -23
- ]
- ],
- "locations": [
- [
- -11,
- 69,
- 15
- ],
- [
- -13,
- 69,
- 15
- ],
- [
- -14,
- 69,
- 15
- ],
- [
- -14,
- 69,
- 16
- ],
- [
- -14,
- 69,
- 17
- ],
- [
- -14,
- 69,
- 15
- ],
- [
- -14,
- 69,
- 14
- ],
- [
- -15,
- 87,
- 11
- ],
- [
- -15,
- 85,
- 10
- ],
- [
- -16,
- 82,
- 10
- ],
- [
- -17,
- 80,
- 8
- ],
- [
- -21,
- 80,
- 7
- ],
- [
- -22,
- 80,
- 6
- ],
- [
- -24,
- 80,
- 6
- ],
- [
- -25,
- 81,
- 6
- ],
- [
- -25,
- 82,
- 6
- ],
- [
- -25,
- 81,
- 6
- ],
- [
- -24,
- 81,
- 6
- ],
- [
- -23,
- 80,
- 4
- ],
- [
- -23,
- 80,
- 1
- ],
- [
- -23,
- 81,
- 0
- ],
- [
- -23,
- 80,
- 0
- ],
- [
- -22,
- 80,
- 0
- ],
- [
- -21,
- 80,
- 2
- ],
- [
- -21,
- 80,
- 4
- ],
- [
- -20,
- 80,
- 5
- ],
- [
- -18,
- 80,
- 7
- ],
- [
- -16,
- 80,
- 5
- ],
- [
- -16,
- 80,
- 4
- ],
- [
- -18,
- 80,
- 3
- ],
- [
- -17,
- 80,
- 2
- ],
- [
- -16,
- 80,
- 2
- ],
- [
- -16,
- 80,
- 0
- ],
- [
- -16,
- 80,
- -2
- ],
- [
- -16,
- 80,
- -4
- ],
- [
- -15,
- 80,
- -11
- ],
- [
- -14,
- 80,
- -21
- ],
- [
- -13,
- 80,
- -20
- ],
- [
- -13,
- 80,
- -17
- ],
- [
- -10,
- 80,
- -14
- ],
- [
- -6,
- 80,
- -14
- ],
- [
- -3,
- 80,
- -12
- ],
- [
- -2,
- 80,
- -8
- ],
- [
- 1,
- 80,
- -6
- ],
- [
- 3,
- 81,
- -5
- ],
- [
- 12,
- 82,
- -6
- ],
- [
- 14,
- 82,
- -6
- ],
- [
- 15,
- 81,
- -6
- ],
- [
- 16,
- 81,
- -6
- ],
- [
- 19,
- 81,
- -6
- ],
- [
- 23,
- 81,
- -7
- ],
- [
- 24,
- 81,
- -9
- ],
- [
- 26,
- 81,
- -14
- ],
- [
- 27,
- 82,
- -15
- ],
- [
- 27,
- 83,
- -15
- ],
- [
- 27,
- 82,
- -15
- ],
- [
- 27,
- 83,
- -15
- ],
- [
- 27,
- 82,
- -15
- ],
- [
- 20,
- 84,
- -14
- ],
- [
- 20,
- 83,
- -14
- ],
- [
- 17,
- 83,
- -14
- ],
- [
- 16,
- 82,
- -14
- ],
- [
- 18,
- 83,
- -14
- ],
- [
- 18,
- 81,
- -14
- ],
- [
- 18,
- 83,
- -14
- ],
- [
- 15,
- 83,
- -15
- ],
- [
- 14,
- 82,
- -15
- ],
- [
- 7,
- 76,
- -18
- ],
- [
- 7,
- 74,
- -19
- ],
- [
- 6,
- 71,
- -19
- ],
- [
- 6,
- 67,
- -20
- ],
- [
- 4,
- 65,
- -21
- ],
- [
- -4,
- 69,
- -25
- ],
- [
- -4,
- 69,
- -24
- ],
- [
- -5,
- 69,
- -22
- ],
- [
- -6,
- 69,
- -20
- ],
- [
- -10,
- 69,
- -20
- ],
- [
- -15,
- 69,
- -19
- ],
- [
- -22,
- 69,
- -18
- ],
- [
- -24,
- 69,
- -18
- ],
- [
- -25,
- 69,
- -18
- ],
- [
- -25,
- 69,
- -19
- ],
- [
- -25,
- 69,
- -20
- ],
- [
- -25,
- 69,
- -21
- ],
- [
- -25,
- 69,
- -22
- ],
- [
- -25,
- 69,
- -23
- ],
- [
- -25,
- 69,
- -24
- ],
- [
- -25,
- 69,
- -25
- ],
- [
- -25,
- 69,
- -22
- ],
- [
- -25,
- 69,
- -20
- ],
- [
- -23,
- 69,
- -18
- ],
- [
- -20,
- 69,
- -16
- ],
- [
- -16,
- 69,
- -15
- ],
- [
- -15,
- 69,
- -13
- ],
- [
- -15,
- 69,
- -11
- ],
- [
- -16,
- 69,
- -7
- ],
- [
- -18,
- 69,
- -4
- ],
- [
- -18,
- 69,
- 1
- ],
- [
- -17,
- 69,
- 3
- ],
- [
- -17,
- 69,
- 6
- ],
- [
- -17,
- 69,
- 9
- ],
- [
- -17,
- 69,
- 14
- ],
- [
- -17,
- 69,
- 17
- ],
- [
- -17,
- 68,
- 19
- ],
- [
- -17,
- 65,
- 19
- ],
- [
- -17,
- 64,
- 19
- ],
- [
- -17,
- 63,
- 19
- ],
- [
- -17,
- 62,
- 19
- ],
- [
- -17,
- 61,
- 19
- ],
- [
- -17,
- 60,
- 19
- ],
- [
- -17,
- 59,
- 19
- ],
- [
- -17,
- 58,
- 19
- ],
- [
- -17,
- 59,
- 19
- ],
- [
- -17,
- 84,
- 19
- ],
- [
- -17,
- 82,
- 18
- ],
- [
- -17,
- 80,
- 18
- ],
- [
- -17,
- 76,
- 17
- ],
- [
- -17,
- 71,
- 16
- ],
- [
- -17,
- 69,
- 15
- ],
- [
- -16,
- 69,
- 12
- ],
- [
- -16,
- 69,
- 11
- ]
- ],
- "interacts": [
- [
- -25.75,
- 82,
- 1.75
- ],
- [
- 29,
- 83,
- -16
- ],
- [
- -9,
- 69,
- -24
- ],
- [
- -9,
- 69,
- -24
- ],
- [
- -26,
- 69,
- -27
- ],
- [
- -16,
- 57,
- 22
- ]
- ],
- "tnts": [
- [
- -18.75,
- 81.375,
- 10
- ],
- [
- 14,
- 81.5,
- -5
- ],
- [
- -8.125,
- 69,
- -19.125
- ],
- [
- -26,
- 69.5,
- -19
- ]
- ]
- },
- {
- "index": 87,
- "etherwarps": [
- [
- -16,
- 79,
- 15
- ],
- [
- -18,
- 80,
- 13
- ],
- [
- -19,
- 86,
- -14
- ],
- [
- -9,
- 61,
- 1
- ],
- [
- -13,
- 67,
- 0
- ]
- ],
- "mines": [
- [
- -18,
- 80.5,
- 12
- ],
- [
- -18,
- 79.5,
- 12
- ],
- [
- -18,
- 80.5,
- 11
- ],
- [
- -18,
- 79.5,
- 11
- ],
- [
- -18,
- 80.5,
- 10
- ],
- [
- -18,
- 79.5,
- 10
- ],
- [
- -18,
- 78.5,
- 8
- ],
- [
- -18,
- 78.5,
- 7
- ],
- [
- -20,
- 87.5,
- -15
- ],
- [
- -20,
- 86.5,
- -15
- ],
- [
- -20,
- 86.5,
- -14
- ],
- [
- -21,
- 86.5,
- -14
- ],
- [
- -21,
- 87.5,
- -14
- ],
- [
- -22,
- 86.5,
- -14
- ],
- [
- -22,
- 87.5,
- -14
- ],
- [
- -21,
- 87.5,
- -15
- ],
- [
- -21,
- 86.5,
- -15
- ],
- [
- -22,
- 86.5,
- -15
- ],
- [
- -22,
- 87.5,
- -15
- ]
- ],
- "locations": [
- [
- -19,
- 69,
- 18
- ],
- [
- -18,
- 69,
- 18
- ],
- [
- -17,
- 69,
- 17
- ],
- [
- -16,
- 69,
- 17
- ],
- [
- -14,
- 69,
- 16
- ],
- [
- -15,
- 79,
- 16
- ],
- [
- -16,
- 79,
- 17
- ],
- [
- -18,
- 79,
- 18
- ],
- [
- -17,
- 81,
- 14
- ],
- [
- -17,
- 80,
- 14
- ],
- [
- -17,
- 79,
- 14
- ],
- [
- -17,
- 79,
- 13
- ],
- [
- -17,
- 79,
- 11
- ],
- [
- -17,
- 79,
- 9
- ],
- [
- -17,
- 79,
- 8
- ],
- [
- -17,
- 79,
- 5
- ],
- [
- -17,
- 79,
- 1
- ],
- [
- -17,
- 79,
- -4
- ],
- [
- -17,
- 79,
- -8
- ],
- [
- -17,
- 79,
- -13
- ],
- [
- -17,
- 79,
- -15
- ],
- [
- -18,
- 77,
- -17
- ],
- [
- -18,
- 74,
- -19
- ],
- [
- -20,
- 69,
- -23
- ],
- [
- -20,
- 68,
- -23
- ],
- [
- -20,
- 66,
- -23
- ],
- [
- -20,
- 59,
- -23
- ],
- [
- -20,
- 59,
- -22
- ],
- [
- -18,
- 59,
- -21
- ],
- [
- -16,
- 59,
- -21
- ],
- [
- -15,
- 59,
- -21
- ],
- [
- -16,
- 59,
- -21
- ],
- [
- -19,
- 59,
- -20
- ],
- [
- -21,
- 59,
- -22
- ],
- [
- -21,
- 59,
- -23
- ],
- [
- -21,
- 59,
- -24
- ],
- [
- -19,
- 72,
- -26
- ],
- [
- -18,
- 72,
- -27
- ],
- [
- -18,
- 70,
- -27
- ],
- [
- -16,
- 69,
- -26
- ],
- [
- -15,
- 69,
- -23
- ],
- [
- -15,
- 69,
- -20
- ],
- [
- -14,
- 69,
- -17
- ],
- [
- -13,
- 69,
- -14
- ],
- [
- -12,
- 69,
- -12
- ],
- [
- -10,
- 70,
- -12
- ],
- [
- -9,
- 70,
- -12
- ],
- [
- -18,
- 87,
- -13
- ],
- [
- -18,
- 86,
- -13
- ],
- [
- -17,
- 86,
- -13
- ],
- [
- -17,
- 86,
- -12
- ],
- [
- -19,
- 86,
- -13
- ],
- [
- -18,
- 86,
- -13
- ],
- [
- -20,
- 86,
- -13
- ],
- [
- -18,
- 86,
- -13
- ],
- [
- -21,
- 86,
- -13
- ],
- [
- -19,
- 86,
- -13
- ],
- [
- -20,
- 86,
- -13
- ],
- [
- -19,
- 86,
- -13
- ],
- [
- -22,
- 86,
- -13
- ],
- [
- -18,
- 86,
- -13
- ],
- [
- -19,
- 86,
- -13
- ],
- [
- -17,
- 86,
- -12
- ],
- [
- -15,
- 86,
- -12
- ],
- [
- -14,
- 84,
- -12
- ],
- [
- -13,
- 82,
- -11
- ],
- [
- -12,
- 78,
- -11
- ],
- [
- -11,
- 73,
- -12
- ],
- [
- -10,
- 69,
- -12
- ],
- [
- -8,
- 69,
- -16
- ],
- [
- -10,
- 69,
- -13
- ],
- [
- -8,
- 69,
- -16
- ],
- [
- -5,
- 69,
- -19
- ],
- [
- -4,
- 69,
- -19
- ],
- [
- -5,
- 69,
- -19
- ],
- [
- -7,
- 69,
- -23
- ],
- [
- -5,
- 69,
- -25
- ],
- [
- -3,
- 70,
- -26
- ],
- [
- 1,
- 72,
- -26
- ],
- [
- 2,
- 73,
- -25
- ],
- [
- 0,
- 72,
- -25
- ],
- [
- -4,
- 84,
- -24
- ],
- [
- -8,
- 92,
- -23
- ],
- [
- -8,
- 91,
- -23
- ],
- [
- -8,
- 89,
- -23
- ],
- [
- -9,
- 86,
- -23
- ],
- [
- -11,
- 86,
- -23
- ],
- [
- -21,
- 86,
- -23
- ],
- [
- -25,
- 87,
- -22
- ],
- [
- -26,
- 87,
- -19
- ],
- [
- -26,
- 86,
- -17
- ],
- [
- -27,
- 86,
- -19
- ],
- [
- -26,
- 87,
- -21
- ],
- [
- -23,
- 88,
- -22
- ],
- [
- -22,
- 88,
- -23
- ],
- [
- -21,
- 87,
- -23
- ],
- [
- -10,
- 89,
- -23
- ],
- [
- -9,
- 88,
- -23
- ],
- [
- 2,
- 89,
- -24
- ],
- [
- 2,
- 87,
- -24
- ],
- [
- 2,
- 84,
- -24
- ],
- [
- 2,
- 80,
- -24
- ],
- [
- 1,
- 75,
- -24
- ],
- [
- 0,
- 72,
- -24
- ],
- [
- -3,
- 71,
- -24
- ],
- [
- -3,
- 70,
- -23
- ],
- [
- -4,
- 70,
- -22
- ],
- [
- -5,
- 69,
- -22
- ],
- [
- -7,
- 69,
- -20
- ],
- [
- -7,
- 69,
- -17
- ],
- [
- -7,
- 70,
- -12
- ],
- [
- -7,
- 71,
- -11
- ],
- [
- -6,
- 71,
- -11
- ],
- [
- -6,
- 69,
- -11
- ],
- [
- -7,
- 68,
- -9
- ],
- [
- -10,
- 68,
- -6
- ],
- [
- -12,
- 68,
- -6
- ],
- [
- -10,
- 68,
- -5
- ],
- [
- -9,
- 67,
- -4
- ],
- [
- -9,
- 67,
- -3
- ],
- [
- -8,
- 69,
- -1
- ],
- [
- -7,
- 69,
- 0
- ],
- [
- -6,
- 68,
- 0
- ],
- [
- -6,
- 68,
- 1
- ],
- [
- -4,
- 68,
- 4
- ],
- [
- -3,
- 68,
- 4
- ],
- [
- -3,
- 67,
- 4
- ],
- [
- -3,
- 67,
- 2
- ],
- [
- -2,
- 67,
- 2
- ],
- [
- -2,
- 66,
- 2
- ],
- [
- -2,
- 60,
- 2
- ],
- [
- -4,
- 60,
- 1
- ],
- [
- -4,
- 60,
- 2
- ],
- [
- -8,
- 62,
- 2
- ],
- [
- -10,
- 61,
- 2
- ],
- [
- -10,
- 60,
- 2
- ],
- [
- -11,
- 60,
- 2
- ],
- [
- -12,
- 60,
- 2
- ],
- [
- -12,
- 67,
- 1
- ],
- [
- -12,
- 68,
- 1
- ],
- [
- -12,
- 69,
- 1
- ],
- [
- -12,
- 68,
- 1
- ],
- [
- -16,
- 75,
- 1
- ],
- [
- -16,
- 74,
- 1
- ],
- [
- -16,
- 72,
- 1
- ],
- [
- -16,
- 69,
- 1
- ],
- [
- -15,
- 69,
- 1
- ]
- ],
- "interacts": [
- [
- -17,
- 79,
- 15
- ],
- [
- -17.09375,
- 80.5625,
- 14.9375
- ],
- [
- -13,
- 59,
- -24
- ],
- [
- -12.75,
- 61.5,
- -21.125
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -25,
- 86,
- -15
- ],
- [
- -17,
- 61,
- 1
- ]
- ],
- "tnts": [
- [
- -18,
- 69.5,
- 16
- ],
- [
- -21,
- 68.5,
- -24
- ],
- [
- -19,
- 86.5,
- -14
- ],
- [
- -3.25,
- 94.75,
- -26.5
- ],
- [
- -8.375,
- 70,
- -23.75
- ]
- ]
- },
- {
- "index": 83,
- "etherwarps": [
- [
- 5,
- 86,
- 6
- ],
- [
- 2,
- 84,
- 2
- ],
- [
- 30,
- 83,
- -1
- ]
- ],
- "mines": [
- [
- 8,
- 70.5,
- -9
- ]
- ],
- "locations": [
- [
- -12,
- 70,
- -2
- ],
- [
- -10,
- 70,
- -2
- ],
- [
- -6,
- 70,
- -2
- ],
- [
- -2,
- 70,
- -2
- ],
- [
- 2,
- 69,
- -4
- ],
- [
- 6,
- 69,
- -6
- ],
- [
- 7,
- 69,
- -9
- ],
- [
- 7,
- 69,
- -8
- ],
- [
- 7,
- 69,
- -5
- ],
- [
- 6,
- 70,
- -3
- ],
- [
- 6,
- 86,
- 5
- ],
- [
- 9,
- 86,
- 6
- ],
- [
- 11,
- 86,
- 6
- ],
- [
- 13,
- 86,
- 6
- ],
- [
- 10,
- 86,
- 6
- ],
- [
- 7,
- 86,
- 6
- ],
- [
- 5,
- 86,
- 5
- ],
- [
- 4,
- 86,
- 6
- ],
- [
- 3,
- 86,
- 6
- ],
- [
- 3,
- 85,
- 6
- ],
- [
- 3,
- 85,
- 1
- ],
- [
- 3,
- 84,
- 1
- ],
- [
- 3,
- 85,
- 0
- ],
- [
- 4,
- 85,
- 0
- ],
- [
- 31,
- 84,
- -2
- ],
- [
- 31,
- 83,
- -2
- ],
- [
- 30,
- 83,
- -3
- ],
- [
- 30,
- 82,
- -3
- ],
- [
- 29,
- 80,
- -4
- ],
- [
- 29,
- 77,
- -4
- ],
- [
- 29,
- 73,
- -5
- ],
- [
- 29,
- 69,
- -5
- ]
- ],
- "interacts": [
- [
- 7,
- 69,
- -10
- ],
- [
- 10,
- 70,
- -10
- ],
- [
- 13.0625,
- 86.78125,
- 7.15625
- ],
- [
- 32,
- 83,
- 0
- ]
- ],
- "tnts": []
- },
- {
- "index": 58,
- "etherwarps": [],
- "mines": [],
- "locations": [
- [
- -2,
- 69,
- -2
- ],
- [
- -2,
- 69,
- 0
- ],
- [
- -2,
- 69,
- 3
- ],
- [
- -3,
- 69,
- 2
- ],
- [
- -3,
- 69,
- 0
- ]
- ],
- "interacts": [
- [
- -5.28125,
- 69.6875,
- 7.0625
- ]
- ],
- "tnts": []
- },
- {
- "index": 126,
- "etherwarps": [],
- "mines": [
- [
- -8,
- 70.5,
- -9
- ],
- [
- -9,
- 70.5,
- -9
- ],
- [
- -9,
- 70.5,
- -8
- ],
- [
- -10,
- 70.5,
- -8
- ],
- [
- -10,
- 70.5,
- -7
- ],
- [
- -11,
- 70.5,
- -7
- ],
- [
- -11,
- 70.5,
- -6
- ],
- [
- -11,
- 71.5,
- -7
- ]
- ],
- "locations": [
- [
- 1,
- 69,
- -11
- ],
- [
- 0,
- 69,
- -11
- ],
- [
- -1,
- 69,
- -11
- ],
- [
- -2,
- 69,
- -10
- ],
- [
- -1,
- 69,
- -10
- ],
- [
- 0,
- 69,
- -11
- ],
- [
- -3,
- 69,
- -10
- ],
- [
- -6,
- 69,
- -10
- ],
- [
- -7,
- 69,
- -9
- ],
- [
- -5,
- 69,
- -11
- ],
- [
- -3,
- 69,
- -11
- ],
- [
- -2,
- 69,
- -10
- ],
- [
- 0,
- 69,
- -9
- ],
- [
- 3,
- 69,
- -10
- ],
- [
- 4,
- 69,
- -10
- ],
- [
- 1,
- 69,
- -10
- ],
- [
- -2,
- 69,
- -9
- ],
- [
- -3,
- 69,
- -9
- ],
- [
- -5,
- 69,
- -9
- ],
- [
- -7,
- 69,
- -9
- ],
- [
- -7,
- 69,
- -10
- ],
- [
- -5,
- 69,
- -12
- ],
- [
- -3,
- 69,
- -12
- ],
- [
- -3,
- 69,
- -11
- ],
- [
- -2,
- 69,
- -10
- ],
- [
- -1,
- 69,
- -10
- ],
- [
- 0,
- 69,
- -11
- ]
- ],
- "interacts": [
- [
- -11,
- 71,
- -6
- ]
- ],
- "tnts": [
- [
- -4,
- 69.5,
- -11
- ],
- [
- -8,
- 69.5,
- -10
- ],
- [
- -8,
- 69.5,
- -10
- ]
- ]
- },
- {
- "index": 51,
- "etherwarps": [
- [
- 4,
- 77,
- 10
- ]
- ],
- "mines": [
- [
- 9,
- 84.5,
- -7
- ],
- [
- 10,
- 84.5,
- -7
- ]
- ],
- "locations": [
- [
- -2,
- 68,
- 3
- ],
- [
- -2,
- 70,
- 3
- ],
- [
- -2,
- 68,
- 3
- ],
- [
- -6,
- 82,
- 7
- ],
- [
- -6,
- 80,
- 7
- ],
- [
- -8,
- 79,
- 8
- ],
- [
- -9,
- 78,
- 8
- ],
- [
- -9,
- 77,
- 8
- ],
- [
- -8,
- 77,
- 8
- ],
- [
- -8,
- 77,
- 9
- ],
- [
- 5,
- 78,
- 11
- ],
- [
- 5,
- 77,
- 11
- ],
- [
- 6,
- 77,
- 11
- ],
- [
- 7,
- 77,
- 10
- ],
- [
- 7,
- 78,
- 10
- ],
- [
- 8,
- 78,
- 9
- ],
- [
- 8,
- 79,
- 8
- ],
- [
- 8,
- 81,
- 6
- ],
- [
- 7,
- 83,
- 4
- ],
- [
- 8,
- 83,
- 2
- ],
- [
- 8,
- 83,
- -2
- ],
- [
- 8,
- 83,
- -4
- ],
- [
- 9,
- 83,
- -5
- ],
- [
- 9,
- 83,
- -6
- ],
- [
- 9,
- 83,
- -3
- ],
- [
- 8,
- 83,
- 0
- ],
- [
- 9,
- 83,
- 3
- ],
- [
- 10,
- 83,
- 6
- ],
- [
- 11,
- 82,
- 7
- ],
- [
- 11,
- 79,
- 8
- ],
- [
- 11,
- 78,
- 9
- ],
- [
- 11,
- 78,
- 8
- ],
- [
- 11,
- 78,
- 7
- ],
- [
- 11,
- 77,
- 7
- ],
- [
- 11,
- 75,
- 7
- ],
- [
- 11,
- 75,
- 8
- ],
- [
- 11,
- 73,
- 8
- ],
- [
- 11,
- 71,
- 8
- ],
- [
- 11,
- 69,
- 8
- ],
- [
- 10,
- 69,
- 8
- ],
- [
- 10,
- 69,
- 9
- ],
- [
- 10,
- 69,
- 10
- ],
- [
- 10,
- 69,
- 11
- ],
- [
- 9,
- 69,
- 10
- ],
- [
- 9,
- 69,
- 9
- ],
- [
- 10,
- 69,
- 6
- ],
- [
- 10,
- 69,
- 5
- ],
- [
- 10,
- 69,
- 4
- ],
- [
- 10,
- 69,
- 3
- ],
- [
- 10,
- 69,
- 2
- ],
- [
- 10,
- 69,
- 1
- ],
- [
- 10,
- 69,
- 0
- ],
- [
- 11,
- 69,
- -1
- ],
- [
- 11,
- 69,
- -2
- ],
- [
- 8,
- 69,
- -1
- ],
- [
- 5,
- 69,
- -1
- ],
- [
- 4,
- 69,
- 0
- ]
- ],
- "interacts": [
- [
- -9,
- 77,
- 9
- ],
- [
- 11,
- 84,
- -7
- ],
- [
- 11,
- 85.8125,
- -6.96875
- ],
- [
- 12,
- 69,
- 9
- ],
- [
- 6,
- 69,
- 9
- ],
- [
- 9,
- 70,
- 13
- ]
- ],
- "tnts": [
- [
- 10,
- 75.5,
- 7
- ],
- [
- 10,
- 69.5,
- -3
- ]
- ]
- },
- {
- "index": 70,
- "etherwarps": [
- [
- 24,
- 58,
- 9
- ]
- ],
- "mines": [
- [
- 0,
- 69.5,
- -9
- ],
- [
- 0,
- 66.5,
- -10
- ],
- [
- 0,
- 65.5,
- -10
- ]
- ],
- "locations": [
- [
- -3,
- 70,
- -11
- ],
- [
- -2,
- 70,
- -11
- ],
- [
- -1,
- 70,
- -10
- ],
- [
- 1,
- 70,
- -10
- ],
- [
- 1,
- 69,
- -10
- ],
- [
- 1,
- 68,
- -10
- ],
- [
- 1,
- 67,
- -10
- ],
- [
- 1,
- 67,
- -11
- ],
- [
- 1,
- 66,
- -11
- ],
- [
- 1,
- 65,
- -11
- ],
- [
- 1,
- 62,
- -11
- ],
- [
- 1,
- 59,
- -11
- ],
- [
- 0,
- 58,
- -11
- ],
- [
- -3,
- 58,
- -11
- ],
- [
- -8,
- 58,
- -11
- ],
- [
- -12,
- 58,
- -11
- ],
- [
- -16,
- 58,
- -11
- ],
- [
- -21,
- 58,
- -10
- ],
- [
- -23,
- 58,
- -7
- ],
- [
- -22,
- 58,
- -4
- ],
- [
- -23,
- 58,
- 1
- ],
- [
- -23,
- 59,
- 5
- ],
- [
- -24,
- 61,
- 7
- ],
- [
- -25,
- 62,
- 11
- ],
- [
- -26,
- 62,
- 12
- ],
- [
- -27,
- 61,
- 12
- ],
- [
- -27,
- 60,
- 12
- ],
- [
- -27,
- 59,
- 12
- ],
- [
- -27,
- 58,
- 12
- ],
- [
- -27,
- 57,
- 12
- ],
- [
- -28,
- 56,
- 12
- ],
- [
- -28,
- 56,
- 9
- ],
- [
- -28,
- 56,
- 7
- ],
- [
- -26,
- 55,
- 7
- ],
- [
- -24,
- 53,
- 7
- ],
- [
- -23,
- 50,
- 7
- ],
- [
- -12,
- 50,
- 9
- ],
- [
- -11,
- 49,
- 9
- ],
- [
- -10,
- 49,
- 9
- ],
- [
- -7,
- 49,
- 9
- ],
- [
- -5,
- 49,
- 9
- ],
- [
- -4,
- 49,
- 10
- ],
- [
- -3,
- 49,
- 9
- ],
- [
- -1,
- 49,
- 9
- ],
- [
- 0,
- 49,
- 10
- ],
- [
- -1,
- 49,
- 10
- ],
- [
- -2,
- 49,
- 10
- ],
- [
- -3,
- 49,
- 10
- ],
- [
- -3,
- 49,
- 11
- ],
- [
- -3,
- 49,
- 10
- ],
- [
- -2,
- 49,
- 9
- ],
- [
- -1,
- 49,
- 9
- ],
- [
- 1,
- 49,
- 8
- ],
- [
- 2,
- 49,
- 8
- ],
- [
- 3,
- 49,
- 9
- ],
- [
- 4,
- 49,
- 10
- ],
- [
- 5,
- 49,
- 11
- ],
- [
- 5,
- 49,
- 12
- ],
- [
- 5,
- 50,
- 12
- ],
- [
- 5,
- 51,
- 12
- ],
- [
- 5,
- 50,
- 12
- ],
- [
- 4,
- 49,
- 11
- ],
- [
- 5,
- 49,
- 11
- ],
- [
- 5,
- 49,
- 10
- ],
- [
- 5,
- 49,
- 9
- ],
- [
- 6,
- 49,
- 9
- ],
- [
- 7,
- 49,
- 9
- ],
- [
- 8,
- 49,
- 10
- ],
- [
- 8,
- 49,
- 9
- ],
- [
- 9,
- 49,
- 8
- ],
- [
- 10,
- 49,
- 8
- ],
- [
- 14,
- 49,
- 8
- ],
- [
- 16,
- 49,
- 8
- ],
- [
- 20,
- 49,
- 8
- ],
- [
- 24,
- 49,
- 8
- ],
- [
- 25,
- 49,
- 8
- ],
- [
- 26,
- 49,
- 8
- ],
- [
- 25,
- 58,
- 8
- ],
- [
- 21,
- 58,
- 9
- ],
- [
- 18,
- 58,
- 10
- ],
- [
- 15,
- 61,
- 10
- ],
- [
- 14,
- 62,
- 11
- ],
- [
- 11,
- 65,
- 11
- ],
- [
- 9,
- 67,
- 11
- ],
- [
- 7,
- 69,
- 10
- ],
- [
- 5,
- 69,
- 10
- ],
- [
- 4,
- 69,
- 10
- ]
- ],
- "interacts": [
- [
- 1,
- 67,
- -8
- ],
- [
- -25,
- 57,
- 13
- ],
- [
- -4.09375,
- 49.71875,
- 13.125
- ],
- [
- 4,
- 55,
- 14
- ],
- [
- 8,
- 49,
- 14
- ],
- [
- 28,
- 49,
- 9
- ]
- ],
- "tnts": [
- [
- -12,
- 50.5,
- 10
- ]
- ]
- },
- {
- "index": 4,
- "etherwarps": [
- [
- -11,
- 85,
- 3
- ]
- ],
- "mines": [],
- "locations": [
- [
- 0,
- 71,
- 1
- ],
- [
- -1,
- 71,
- 2
- ],
- [
- -3,
- 71,
- 1
- ],
- [
- -11,
- 85,
- -2
- ],
- [
- -12,
- 83,
- -2
- ],
- [
- -12,
- 81,
- -3
- ],
- [
- -12,
- 81,
- -5
- ],
- [
- -11,
- 81,
- -6
- ],
- [
- -11,
- 81,
- -7
- ],
- [
- -10,
- 81,
- -7
- ],
- [
- -10,
- 81,
- -8
- ],
- [
- -10,
- 81,
- -7
- ],
- [
- -11,
- 81,
- -7
- ],
- [
- -11,
- 81,
- -6
- ],
- [
- -12,
- 81,
- -4
- ],
- [
- -12,
- 81,
- -3
- ],
- [
- -12,
- 81,
- -2
- ],
- [
- -12,
- 85,
- 6
- ],
- [
- -12,
- 84,
- 8
- ],
- [
- -11,
- 83,
- 9
- ],
- [
- -8,
- 83,
- 10
- ],
- [
- -7,
- 83,
- 10
- ],
- [
- -7,
- 89,
- 10
- ],
- [
- -7,
- 88,
- 10
- ],
- [
- -7,
- 85,
- 10
- ],
- [
- -7,
- 83,
- 10
- ],
- [
- -6,
- 83,
- 10
- ],
- [
- -2,
- 83,
- 9
- ],
- [
- -1,
- 82,
- 8
- ],
- [
- -1,
- 81,
- 6
- ],
- [
- -3,
- 81,
- 2
- ],
- [
- -2,
- 81,
- -1
- ],
- [
- -1,
- 79,
- -2
- ],
- [
- -1,
- 76,
- -3
- ],
- [
- -1,
- 72,
- -4
- ],
- [
- -1,
- 71,
- -4
- ],
- [
- -1,
- 71,
- -3
- ],
- [
- -2,
- 71,
- 0
- ],
- [
- -2,
- 71,
- 1
- ],
- [
- -3,
- 71,
- 0
- ],
- [
- -5,
- 71,
- 0
- ],
- [
- -5,
- 71,
- -1
- ],
- [
- -5,
- 71,
- 0
- ],
- [
- -5,
- 71,
- 1
- ],
- [
- -5,
- 71,
- 2
- ],
- [
- -5,
- 71,
- 0
- ]
- ],
- "interacts": [
- [
- -8,
- 81,
- -13
- ],
- [
- -6.9375,
- 92.21875,
- 9.875
- ]
- ],
- "tnts": []
- },
- {
- "index": 81,
- "etherwarps": [
- [
- 35,
- 73,
- -12
- ],
- [
- 43,
- 80,
- -6
- ],
- [
- 26,
- 82,
- 1
- ]
- ],
- "mines": [
- [
- 16,
- 69.5,
- 10
- ]
- ],
- "locations": [
- [
- 16,
- 69,
- 8
- ],
- [
- 19,
- 69,
- 9
- ],
- [
- 23,
- 69,
- 9
- ],
- [
- 27,
- 69,
- 8
- ],
- [
- 30,
- 69,
- 5
- ],
- [
- 32,
- 69,
- 3
- ],
- [
- 32,
- 69,
- 2
- ],
- [
- 31,
- 69,
- 0
- ],
- [
- 31,
- 69,
- -1
- ],
- [
- 30,
- 69,
- -2
- ],
- [
- 36,
- 73,
- -11
- ],
- [
- 36,
- 74,
- -11
- ],
- [
- 36,
- 73,
- -11
- ],
- [
- 37,
- 73,
- -10
- ],
- [
- 39,
- 73,
- -9
- ],
- [
- 41,
- 73,
- -6
- ],
- [
- 42,
- 72,
- -6
- ],
- [
- 42,
- 70,
- -5
- ],
- [
- 42,
- 69,
- -5
- ],
- [
- 44,
- 69,
- -6
- ],
- [
- 45,
- 69,
- -7
- ],
- [
- 45,
- 69,
- -8
- ],
- [
- 44,
- 81,
- -5
- ],
- [
- 44,
- 80,
- -5
- ],
- [
- 42,
- 80,
- -4
- ],
- [
- 41,
- 81,
- -2
- ],
- [
- 40,
- 81,
- 0
- ],
- [
- 37,
- 81,
- 2
- ],
- [
- 35,
- 81,
- 2
- ],
- [
- 34,
- 81,
- 2
- ],
- [
- 27,
- 82,
- 2
- ],
- [
- 26,
- 82,
- 2
- ],
- [
- 25,
- 81,
- 2
- ],
- [
- 25,
- 81,
- 0
- ],
- [
- 23,
- 81,
- 0
- ],
- [
- 23,
- 82,
- 0
- ],
- [
- 23,
- 89,
- 0
- ],
- [
- 23,
- 88,
- 0
- ],
- [
- 22,
- 88,
- 0
- ],
- [
- 23,
- 87,
- 0
- ],
- [
- 23,
- 81,
- 0
- ],
- [
- 23,
- 82,
- 0
- ],
- [
- 24,
- 81,
- 0
- ],
- [
- 25,
- 81,
- 0
- ],
- [
- 25,
- 81,
- 2
- ],
- [
- 26,
- 81,
- 5
- ],
- [
- 26,
- 81,
- 6
- ],
- [
- 27,
- 82,
- 6
- ],
- [
- 28,
- 82,
- 6
- ],
- [
- 29,
- 80,
- 7
- ],
- [
- 29,
- 79,
- 7
- ],
- [
- 29,
- 74,
- 8
- ],
- [
- 29,
- 70,
- 8
- ],
- [
- 28,
- 69,
- 10
- ],
- [
- 25,
- 69,
- 10
- ],
- [
- 18,
- 70,
- 10
- ],
- [
- 16,
- 69,
- 10
- ],
- [
- 13,
- 69,
- 8
- ],
- [
- 9,
- 69,
- 8
- ],
- [
- 4,
- 69,
- 8
- ],
- [
- 0,
- 69,
- 6
- ],
- [
- -4,
- 69,
- 6
- ],
- [
- -13,
- 69,
- 6
- ],
- [
- -14,
- 69,
- 7
- ],
- [
- -19,
- 69,
- 9
- ],
- [
- -21,
- 69,
- 7
- ],
- [
- -20,
- 69,
- 2
- ],
- [
- -20,
- 69,
- 1
- ],
- [
- -17,
- 69,
- -2
- ],
- [
- -15,
- 69,
- -4
- ],
- [
- -12,
- 69,
- -4
- ],
- [
- -15,
- 69,
- -4
- ],
- [
- -19,
- 69,
- -4
- ],
- [
- -22,
- 69,
- -4
- ],
- [
- -23,
- 69,
- -3
- ],
- [
- -23,
- 69,
- -2
- ],
- [
- -21,
- 69,
- -2
- ],
- [
- -15,
- 93,
- -1
- ],
- [
- -15,
- 92,
- -1
- ],
- [
- -15,
- 93,
- -1
- ],
- [
- -15,
- 91,
- -1
- ],
- [
- -15,
- 89,
- -1
- ],
- [
- -14,
- 88,
- -1
- ],
- [
- -14,
- 89,
- -1
- ],
- [
- -14,
- 88,
- -1
- ],
- [
- -16,
- 88,
- -1
- ],
- [
- -18,
- 86,
- -1
- ],
- [
- -18,
- 84,
- 0
- ],
- [
- -19,
- 82,
- 0
- ],
- [
- -19,
- 81,
- 0
- ],
- [
- -19,
- 79,
- 0
- ],
- [
- -19,
- 75,
- 0
- ],
- [
- -19,
- 71,
- 0
- ],
- [
- -19,
- 69,
- 0
- ],
- [
- -20,
- 69,
- 0
- ],
- [
- -23,
- 69,
- 1
- ],
- [
- -25,
- 69,
- 1
- ]
- ],
- "interacts": [
- [
- 16,
- 69,
- 11
- ],
- [
- 40.03125,
- 69.125,
- -7.34375
- ],
- [
- 45,
- 69,
- -12
- ],
- [
- 25.46875,
- 81.40625,
- 1.625
- ],
- [
- 19.96875,
- 87.8125,
- -3.125
- ],
- [
- 19,
- 87,
- -1
- ],
- [
- 24.21875,
- 81.5,
- 0.28125
- ],
- [
- -12,
- 69,
- -4
- ],
- [
- -13,
- 93,
- -1.75
- ]
- ],
- "tnts": []
- },
- {
- "index": 63,
- "etherwarps": [],
- "mines": [
- [
- -19,
- 70.5,
- 0
- ],
- [
- -19,
- 70.5,
- -1
- ]
- ],
- "locations": [
- [
- -20,
- 69,
- -1
- ],
- [
- -19,
- 69,
- -1
- ],
- [
- -20,
- 69,
- -1
- ],
- [
- -21,
- 69,
- -1
- ]
- ],
- "interacts": [
- [
- -17,
- 69,
- -2
- ]
- ],
- "tnts": []
}
] \ No newline at end of file
diff --git a/features/dungeonSolvers/index.js b/features/dungeonSolvers/index.js
index 53d1d2d..2095e10 100644
--- a/features/dungeonSolvers/index.js
+++ b/features/dungeonSolvers/index.js
@@ -11,7 +11,9 @@ import { fetch } from "../../utils/networkUtils";
import { delay } from "../../utils/delayUtils";
import { Waypoint } from "../../utils/renderJavaUtils";
import { calculateDistanceQuick } from "../../utils/utils";
+import { drawLinePoints } from "../../utils/renderUtils";
+const MCBlock = Java.type("net.minecraft.block.Block");
const EntityBlaze = Java.type("net.minecraft.entity.monster.EntityBlaze");
let translate;
try {
@@ -82,6 +84,7 @@ class DungeonSolvers extends Feature {
this.hudElements.push(this.scoreElement);
this.blazeSolver = new ToggleSetting("Blaze Puzzle Solver", "Shows what order to kill the blazes in", true, "blaze_solver", this);
+ this.respawnTimerTerra = new ToggleSetting("Terracotter respawn timer", "", true, "f6_timer_thing", this);
this.lastDungFinishes = [];
this.lastDungExps = [];
@@ -345,6 +348,58 @@ class DungeonSolvers extends Feature {
//§r§6Soopyboo32§r§a activated a lever! (§r§c8§r§a/8)§r
//§r§6Soopyboo32§r§a completed a device! (§r§c3§r§a/8)§r
//§r§bBossmanLeo§r§a activated a terminal! (§r§c2§r§a/8)§r
+
+ this.inf6boss = false
+ this.registerStep(true, 1, () => {
+ this.inf6boss = this.getCurrentRoomId() === "sadan"
+ })
+
+ let packetRecieved = this.registerCustom("packetReceived", this.packetReceived).registeredWhen(() => this.inf6boss && this.respawnTimerTerra.getValue())
+
+ try {
+ packetRecieved.trigger.setPacketClasses([net.minecraft.network.play.server.S23PacketBlockChange, net.minecraft.network.play.server.S22PacketMultiBlockChange])
+ } catch (e) { }//older ct version
+
+ this.timersData = []
+ }
+ getCurrentRoomId() {
+ if (Scoreboard.getLines().length === 0) return
+ let id = ChatLib.removeFormatting(Scoreboard.getLineByIndex(Scoreboard.getLines().length - 1).getName()).trim().split(" ").pop()
+
+ return id
+ }
+ getBlockIdFromState(state) {
+ return MCBlock[m.getStateId](state)
+ }
+
+ packetReceived(packet, event) {
+ if (!this.inf6boss || !this.respawnTimerTerra.getValue()) return
+
+ let packetType = new String(packet.class.getSimpleName()).valueOf()
+ if (packetType === "S23PacketBlockChange") {
+ let position = new BlockPos(packet[m.getBlockPosition.S23PacketBlockChange]())
+ let blockState = this.getBlockIdFromState(packet[m.getBlockState.S23PacketBlockChange]())
+ let oldBlockState = this.getBlockIdFromState(World.getBlockStateAt(position))
+
+ if (oldBlockState === 0 && blockState === 4240 && this.inf6boss) {
+ this.timerThing(position)
+ }
+ }
+ if (packetType === "S22PacketMultiBlockChange") {
+ packet[m.getChangedBlocks]().forEach(b => {
+ let position = new BlockPos(b[m.getPos.S22PacketMultiBlockChange$BlockUpdateData]())
+ let blockState = this.getBlockIdFromState(b[m.getBlockState.S22PacketMultiBlockChange$BlockUpdateData]())
+ let oldBlockState = this.getBlockIdFromState(World.getBlockStateAt(position))
+
+ if (oldBlockState === 0 && blockState === 4240 && this.inf6boss) {
+ this.timerThing(position)
+ }
+ })
+ }
+ }
+
+ timerThing(position) {
+ this.timersData.push([position, Date.now() + 5000])
}
areaUpdated() {
@@ -610,6 +665,18 @@ class DungeonSolvers extends Feature {
}
}
}
+
+ let shifts = 0
+ for (let data of this.timersData) {
+ let [position, time] = data
+
+ if (Date.now() > time) {
+ shifts++
+ }
+
+ Tessellator.drawString(((time - Date.now()) / 1000).toFixed(1) + "s", position.getX(), position.getY() + 0.5, position.getZ(), Renderer.color(0, 255, 50), false, 0.025, false)
+ }
+ for (let i = 0; i < shifts; i++) this.timersData.shift()
}
renderEntity(entity, position, ticks, event) {
@@ -974,7 +1041,7 @@ class DungeonSolvers extends Feature {
step_5fps() {
if (this.IceSprayWarn.getValue()) {
World.getAllEntitiesOfType(net.minecraft.entity.item.EntityArmorStand).forEach((name) => {
- let MobName = name.getName()
+ let MobName = ChatLib.removeFormatting(name.getName())
if (MobName.includes("Ice Spray Wand") && name.getTicksExisted() <= 199) {
Client.showTitle(`&r&6&l[&b&l&kO&6&l] ${MobName.toUpperCase()} &6&l[&b&l&kO&6&l]`, "", 0, 40, 10);
ChatLib.chat(`&6&lRARE DROP! &r${MobName}`)
diff --git a/features/fpsImproveGui/index.js b/features/fpsImproveGui/index.js
new file mode 100644
index 0000000..8387dbd
--- /dev/null
+++ b/features/fpsImproveGui/index.js
@@ -0,0 +1,58 @@
+/// <reference types="../../../CTAutocomplete" />
+/// <reference lib="es2015" />
+import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
+import Feature from "../../featureClass/class";
+import GuiPage from "../soopyGui/GuiPage";
+import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement";
+import SoopyMarkdownElement from "../../../guimanager/GuiElement/SoopyMarkdownElement";
+import SoopyImageElement from "../../../guimanager/GuiElement/SoopyImageElement";
+import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
+import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
+import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
+import BoxWithText from "../../../guimanager/GuiElement/BoxWithText";
+import { fetch } from "../../utils/networkUtils";
+
+class FpsImproveGui extends Feature {
+ constructor() {
+ super()
+ }
+
+ onEnable() {
+ this.initVariables()
+
+ // this.GuiPage = new FpsPage()
+
+ }
+
+ initVariables() {
+ this.GuiPage = undefined
+ }
+
+ onDisable() {
+ this.initVariables()
+ }
+}
+
+
+class FpsPage extends GuiPage {
+ constructor() {
+ super(7)
+
+ this.name = "Fps Improve Tips"
+
+ this.pages = [this.newPage()]
+
+ // this.pages[0].addChild(this.streamsBox)
+
+ this.finaliseLoading()
+ }
+
+ onOpen() {
+ this.updateStreams()
+ }
+}
+
+
+module.exports = {
+ class: new FpsImproveGui()
+} \ No newline at end of file
diff --git a/features/fpsImproveGui/metadata.json b/features/fpsImproveGui/metadata.json
new file mode 100644
index 0000000..a292c1d
--- /dev/null
+++ b/features/fpsImproveGui/metadata.json
@@ -0,0 +1,8 @@
+{
+ "name": "Fps improvement tips",
+ "description": "May help",
+ "isHidden": true,
+ "isTogglable": false,
+ "defaultEnabled": true,
+ "sortA": 0
+} \ No newline at end of file
diff --git a/features/globalSettings/index.js b/features/globalSettings/index.js
index 2f9d3bc..c317eb4 100644
--- a/features/globalSettings/index.js
+++ b/features/globalSettings/index.js
@@ -42,7 +42,7 @@ class GlobalSettings extends Feature {
this.fixNeuNetworth = new ToggleSetting("Change networth in NEU pv to soopynw", "This should make it a lot more accurate", true, "neu_nw_override", this)
this.darkTheme = new ToggleSetting("Dark theme", "This might be scuffed because guis are still made in light theme", false, "dark_theme", this)
- this.linkPreview = new ToggleSetting("Link preview", "Shows a preview of where a link will take you", true, "link_preview", this)
+ // this.linkPreview = new ToggleSetting("Link preview", "Shows a preview of where a link will take you", true, "link_preview", this)
this.reportErrorsSetting = new ToggleSetting("Send module errors to soopy server", "This will allow me to more effectivly fix them", false, "privacy_send_errors", this)
@@ -119,7 +119,7 @@ class GlobalSettings extends Feature {
this.registerEvent("postGuiRender", () => {
if (Player.getContainer() && Player.getContainer().getName() === "Cookie Clicker v0.01" && Player.getContainer().getStackInSlot(13)) this.renderCookie()
- if (this.linkPreview.getValue() && Client.currentGui && Client.currentGui.get() && Client.currentGui.get().toString().startsWith("net.minecraft.client.gui.GuiConfirmOpenLink")) this.renderWebpage()
+ // if (this.linkPreview.getValue() && Client.currentGui && Client.currentGui.get() && Client.currentGui.get().toString().startsWith("net.minecraft.client.gui.GuiConfirmOpenLink")) this.renderWebpage()
})
this.registerStep(false, 1, () => {
if (Player.getContainer() && Player.getContainer().getName() === "Cookie Clicker v0.01" && Player.getContainer().getStackInSlot(13)) this.tickCookie()
@@ -138,18 +138,18 @@ class GlobalSettings extends Feature {
})
}
- renderWebpage() {
- let url = this.getField(Client.currentGui.get(), f.linkText)
+ // renderWebpage() {
+ // let url = this.getField(Client.currentGui.get(), f.linkText)
- let image = renderLibs.getImage("https://soopymc.my.to/api/soopyv2/webpage?webpage=" + url)
+ // let image = renderLibs.getImage("https://soopymc.my.to/api/soopyv2/webpage?webpage=" + url)
- if (image) {
- let scale = Renderer.screen.getHeight() * 0.5 / image.getTextureHeight()
- image.draw(Renderer.screen.getWidth() / 2 - image.getTextureWidth() * scale / 2, Renderer.screen.getHeight() / 2, scale * image.getTextureWidth(), scale * image.getTextureHeight())
- } else {
- Renderer.drawString("Loading website preview...", Renderer.screen.getWidth() / 2 - Renderer.getStringWidth("Loading website preview...") / 2, Renderer.screen.getHeight() * 3 / 4)
- }
- }
+ // if (image) {
+ // let scale = Renderer.screen.getHeight() * 0.5 / image.getTextureHeight()
+ // image.draw(Renderer.screen.getWidth() / 2 - image.getTextureWidth() * scale / 2, Renderer.screen.getHeight() / 2, scale * image.getTextureWidth(), scale * image.getTextureHeight())
+ // } else {
+ // Renderer.drawString("Loading website preview...", Renderer.screen.getWidth() / 2 - Renderer.getStringWidth("Loading website preview...") / 2, Renderer.screen.getHeight() * 3 / 4)
+ // }
+ // }
guiClicked(mouseX, mouseY, button, gui, event) {
if (gui.class.toString() === "class net.minecraft.client.gui.inventory.GuiChest" && Player.getContainer().getName() === "Cookie Clicker v0.01") {