aboutsummaryrefslogtreecommitdiff
path: root/features/dungeonMap/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'features/dungeonMap/index.js')
-rw-r--r--features/dungeonMap/index.js160
1 files changed, 116 insertions, 44 deletions
diff --git a/features/dungeonMap/index.js b/features/dungeonMap/index.js
index 93027b3..4a8d783 100644
--- a/features/dungeonMap/index.js
+++ b/features/dungeonMap/index.js
@@ -1,7 +1,11 @@
/// <reference types="../../../CTAutocomplete" />
/// <reference lib="es2015" />
+
+const Color = Java.type("java.awt.Color")
+
import Feature from "../../featureClass/class";
import { f, m } from "../../../mappings/mappings";
+import renderLibs from "../../../guimanager/renderLibs";
const BufferedImage = Java.type("java.awt.image.BufferedImage")
class DungeonMap extends Feature {
@@ -16,28 +20,64 @@ class DungeonMap extends Feature {
onEnable(){
this.initVariables()
+
+ this.MAP_QUALITY_SCALE = 2
+ this.IMAGE_SIZE = 128*this.MAP_QUALITY_SCALE
+
this.defaultPlayerImage = new Image("skull-steve","https://cravatar.eu/avatar/dc8c39647b294e03ae9ed13ebd65dd29")
this.playerImages = {}
this.mapDataPlayers = {}
this.offset = []
this.mapScale = 1
- this.puzzles = []
+ this.puzzles = {}
this.puzzlesTab = []
+ this.roomWidth = 1
this.newPuzzlesTab = []
+ 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.mapImage = new Image(this.renderImage)
+
+ this.mapLocation = [10,10]
+ this.mapRenderScale = 128/this.IMAGE_SIZE
// this.registerEvent("tick", this.tick)
- this.registerStep(true, 5, this.step)
+ this.registerStep(true, 3, this.step)
this.registerEvent("renderOverlay", this.renderOverlay)
this.registerEvent("worldLoad", this.worldLoad)
+
+ this.running = true
+ this.registerEvent("gameUnload", ()=>{
+ this.running = false
+ })
+
+ new Thread(()=>{
+ while(this.running){
+ if(this.isInDungeon()){
+ let startedUpdatingTime = Date.now()
+ // console.log("Updating map...")
+ this.updateMapImage()
+ // console.log("Finished updating map")
+ let time = Date.now()-startedUpdatingTime
+
+ if(time< 300)Thread.sleep(300-time)
+ }else{
+ Thread.sleep(1000)
+ }
+ }
+ }).start()
+
+ this.registerChat("&r&r&r &r&cThe Catacombs &r&8- &r&eFloor ${*} Stats&r", ()=>{
+ this.puzzles = {}
+ })
}
worldLoad(){
this.mortLocation = undefined
- this.playerImages = {}
+ // this.playerImages = {}
this.mapDataPlayers = {}
this.offset = []
this.mapScale = 1
- this.puzzles = []
+ this.puzzles = {}
this.puzzlesTab = []
this.newPuzzlesTab = []
}
@@ -45,12 +85,28 @@ class DungeonMap extends Feature {
renderOverlay(){
if(this.isInDungeon()){
if(this.mapImage){
- this.mapImage.draw(50,50)
+ this.mapImage.draw(...this.mapLocation, this.mapRenderScale*this.IMAGE_SIZE, this.mapRenderScale*this.IMAGE_SIZE)
this.drawPlayersLocations()
+
+ this.drawOtherMisc()
}
}
}
+
+ drawOtherMisc(){
+ Object.keys(this.puzzles).forEach(loc=>{
+ let x = loc%128
+ let y = Math.floor(loc/128)
+
+ let lines = this.puzzles[loc].split(" ")
+
+ lines.forEach((l, i)=>{
+ renderLibs.drawStringCentered("&0&l" + l, x+this.mapLocation[0]+this.roomWidth/2*this.mapRenderScale*2-l.length/2*this.mapRenderScale*2, y+this.mapLocation[1]+this.roomWidth/3*this.mapRenderScale*2+i*6*this.mapRenderScale*2-((lines.length-1)*3+4)*this.mapRenderScale*2, this.mapRenderScale*2)
+ })
+
+ })
+ }
drawPlayersLocations(){
@@ -69,30 +125,31 @@ class DungeonMap extends Feature {
}
}
- Renderer.translate(this.mapDataPlayers[uuid].x+50+this.offset[0], this.mapDataPlayers[uuid].y+50+this.offset[1])
+
+ let renderX = this.mapDataPlayers[uuid].x/128*this.mapRenderScale*this.IMAGE_SIZE//*16/this.roomWidth
+ let renderY = this.mapDataPlayers[uuid].y/128*this.mapRenderScale*this.IMAGE_SIZE//*16/this.roomWidth
+
+ Renderer.translate(renderX+this.mapLocation[0]+this.offset[0]/128*this.mapRenderScale*this.IMAGE_SIZE, renderY+this.mapLocation[1]+this.offset[1]/128*this.mapRenderScale*this.IMAGE_SIZE)
Renderer.rotate(this.mapDataPlayers[uuid].rot)
this.getImageForPlayer(uuid).draw(-5,-5, 10, 10)
})
}
step(){
+ // console.log("asjbfoasbgp")
TabList.getNames().forEach(name=>{
- name = ChatLib.removeFormatting(name).split()
- if(name[1].trim() === "[✦]" && !name[0].includes("???") && !this.puzzlesTab.includes(name[0].trim())){
- this.newPuzzlesTab.push(name[0].trim())
- this.puzzlesTab.push(name[0].trim())
+ name = ChatLib.removeFormatting(name).trim().split(" ")
+ let end = name.pop()
+ if(end !== "[✦]") return
+ name = name.join(" ").trim().replace(":", "")
+ if(name.length > 1 && !name.includes("?") && !this.puzzlesTab.includes(name)){
+ this.newPuzzlesTab.push(name)
+ this.puzzlesTab.push(name)
}
})
-
- if(this.isInDungeon()){
- this.updateMapImage()
- }else{
- this.mapImage = undefined
- }
}
updateMapImage(){
-
World.getAllPlayers().forEach(player=>{
this.mapDataPlayers[Player.getUUID().toString()] = {
x: player.getX()/this.mapScale,
@@ -111,13 +168,11 @@ class DungeonMap extends Feature {
})
}
- let IMAGE_SIZE = 128
- let newImage = new BufferedImage(IMAGE_SIZE,IMAGE_SIZE, BufferedImage.TYPE_INT_RGB)
- let graphics = newImage.getGraphics()
+ let graphics = this.renderImage.getGraphics()
- graphics.fillRect(0,0,IMAGE_SIZE,IMAGE_SIZE)
+ // graphics.setColor(new Color(Renderer.color(255, 255, 255, 255)))
+ graphics.fillRect(0,0,this.IMAGE_SIZE,this.IMAGE_SIZE)
- let mapImage = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB)
let mapData
try {
let item = Player.getInventory().getStackInSlot(8)
@@ -125,7 +180,8 @@ class DungeonMap extends Feature {
} catch (error) {
}
if(mapData){
- mapData[f.mapDecorations].forEach((icon, vec4b) => {
+ let deco = mapData[f.mapDecorations]
+ deco.forEach((icon, vec4b) => {
let x = vec4b.func_176112_b()
let y = vec4b.func_176113_c()
let rot = vec4b.func_176111_d()
@@ -158,9 +214,10 @@ class DungeonMap extends Feature {
if(bytes[i] !== 0){
let j = bytes[i]&255
- let color = net.minecraft.block.material.MapColor[f.mapColorArray][j>>2][m.getMapColor](j & 3);
- mapImage.setRGB(x, y, color)
- newImage.setRGB(x, y, color)
+ let color = new Color(net.minecraft.block.material.MapColor[f.mapColorArray][j>>2][m.getMapColor.MapColor](j & 3))
+ // this.invMapImage.setRGB(x, y, color)
+ graphics.setColor(color)
+ graphics.fillRect(x*this.MAP_QUALITY_SCALE, y*this.MAP_QUALITY_SCALE, this.MAP_QUALITY_SCALE, this.MAP_QUALITY_SCALE)
}
x++
if(x >= 128){
@@ -181,19 +238,28 @@ class DungeonMap extends Feature {
//finding room offsets
let roomOffsets
- let mortLocationOnMap = undefined
- let roomWidth = 0
+ let roomWidth1 = 0
+ let roomWidth2 = 0
for(let x = 0;x<128;x++){
for(let y = 0;y<128;y++){
- if(bytes[x+y*128] === 30 && bytes[(x-1)+(y-1)*128] === 0){
- roomWidth++
+ if(bytes[x+y*128] === 30 && bytes[(x-1)+(y)*128] === 0){
+ roomWidth1++
}
}
- if(roomWidth > 0) break;
+ if(roomWidth1 > 0) break;
+ }
+ for(let x = 0;x<128;x++){
+ for(let y = 0;y<128;y++){
+ if(bytes[y+x*128] === 30 && bytes[(y)+(x-1)*128] === 0){
+ roomWidth2++
+ }
+ }
+ if(roomWidth2 > 0) break;
}
- roomWidth = Math.floor(roomWidth*5/4)
+ let roomWidth = Math.floor(Math.max(roomWidth1, roomWidth2)*5/4)
this.mapScale = 32/roomWidth
+ let mortLocationOnMap
for(let x = 0;x<128;x++){
for(let y = 0;y<128;y++){
if(bytes[x+y*128] === 30 && bytes[(x-1)+(y-1)*128] === 0){
@@ -209,7 +275,7 @@ class DungeonMap extends Feature {
break
}
}
- if(mortLocationOnMap) break
+ // if(mortLocationOnMap) break
//bottom
for(let i = 0;i<roomWidth;i++){
if(bytes[(i+x-3)+(y+roomWidth-3)*128] !== 0){
@@ -233,8 +299,9 @@ class DungeonMap extends Feature {
break
}
+ // mortLocationOnMap = mortLocationOnMap*16/this.roomWidth
if(bytes[x+y*128] === 66 && bytes[(x-1)+(y)*128] === 0 && bytes[(x)+(y-1)*128] === 0){
- if(!this.puzzles[x+y*128]){
+ if(!this.puzzles[x+y*128] && this.newPuzzlesTab.length > 0){
this.puzzles[x+y*128] = this.newPuzzlesTab.shift()
}
}
@@ -243,30 +310,33 @@ class DungeonMap extends Feature {
}
if(roomOffsets){
- for(let x = 0;x<128;x++){
- for(let y = 0;y<128;y++){
- if((x-roomOffsets[0])%roomWidth===0 || (y-roomOffsets[1])%roomWidth===0){
- newImage.setRGB(x, y, 0)
- }
- }
- }
+ // for(let x = 0;x<128;x++){
+ // for(let y = 0;y<128;y++){
+ // if((x-roomOffsets[0])%roomWidth===0 || (y-roomOffsets[1])%roomWidth===0){
+ // this.renderImage.setRGB(x*this.MAP_QUALITY_SCALE, y*this.MAP_QUALITY_SCALE, Renderer.color(0,0,0))
+ // }
+ // }
+ // }
if(mortLocationOnMap && this.mortLocation){
this.offset = [mortLocationOnMap[0]-this.mortLocation[0]/this.mapScale, mortLocationOnMap[1]-this.mortLocation[1]/this.mapScale]
- newImage.setRGB(mortLocationOnMap[0], mortLocationOnMap[1], Renderer.color(255, 0, 0))
+ // this.renderImage.setRGB(mortLocationOnMap[0], mortLocationOnMap[1], Renderer.color(255, 0, 0))
}
}
// console.log(bytes[Math.floor(Player.getX()/this.mapScale+this.offset[0])+Math.floor(Player.getZ()/this.mapScale + this.offset[1])*128])
+ this.roomWidth = roomWidth
}
-
- this.mapImage = new Image(newImage)
+ let newMapImageThing = new Image(this.renderImage)
+ this.mapImage = newMapImageThing
+ // this.mapImage.setImage(this.renderImage)
}
getImageForPlayer(uuid){
+ if(!this.playerImages) return this.defaultPlayerImage
uuid = uuid.replace(/-/g, "")
if(this.playerImages[uuid] === "Loading") return this.defaultPlayerImage
if(this.playerImages[uuid]) return this.playerImages[uuid]
@@ -288,10 +358,12 @@ class DungeonMap extends Feature {
this.puzzlesTab = undefined
this.mapScale = undefined
this.newPuzzlesTab = undefined
+ this.renderImage = undefined
}
onDisable(){
this.initVariables()
+ this.running = false
}
}