/// /// import { SoopyGui, SoopyRenderEvent } from "../../../guimanager"; import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement"; import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement"; import renderLibs from "../../../guimanager/renderLibs"; import Feature from "../../featureClass/class"; import ToggleSetting from "../settings/settingThings/toggle"; class AgentThings extends Feature { constructor() { super() } onEnable(){ this.initVariables() this.nearPlayerData = [] while(this.nearPlayerData.length < 100){this.nearPlayerData.push({})} this.recordNearestPlayers = new ToggleSetting("Record nearby players", "You can then view this data with /nearplayers", true, "record_near_players", this) this.registerStep(false, 1, this.step) this.nearPlayersGui = new SoopyGui().setOpenCommand("nearplayers") this.nearPlayersGuiBox = new SoopyBoxElement().setLocation(0.25, 0.25, 0.5, 0.5) this.nearPlayersGui.element.addChild(this.nearPlayersGuiBox) this.nearPlayersRenderElement = new SoopyGuiElement() this.nearPlayersGuiBox.addChild(this.nearPlayersRenderElement) let selected = undefined let selectedDist = undefined let lastXY = 0 this.nearPlayersRenderElement.addEvent(new SoopyRenderEvent().setHandler((mouseX, mouseY)=>{ let moved = lastXY !== mouseX+mouseY lastXY = mouseX+mouseY let x = this.nearPlayersRenderElement.location.getXExact() let y = this.nearPlayersRenderElement.location.getYExact() let width = this.nearPlayersRenderElement.location.getWidthExact() let height = this.nearPlayersRenderElement.location.getHeightExact() x+=width*0.125 y+=height*0.125 width*=0.75 height*=0.75 Renderer.drawLine(Renderer.color(0, 0, 0), x, y+height, x+width, y+height, 2)//bottom axis line Renderer.drawLine(Renderer.color(0, 0, 0), x, y, x, y+height, 2)//left axis line renderLibs.drawStringCentered("&0100s ago", x, y+height+6, Renderer.screen.getWidth()/1000) renderLibs.drawStringCentered("&050s ago", x+width/2, y+height+6, Renderer.screen.getWidth()/1000) renderLibs.drawStringCentered("&0Now", x+width, y+height+6, Renderer.screen.getWidth()/1000) //bottom axis markers renderLibs.drawStringCenteredVertically("&025m away", x+3-Renderer.getStringWidth("&025m away")*Renderer.screen.getWidth()/1000, y, Renderer.screen.getWidth()/1000) renderLibs.drawStringCenteredVertically("&020m away", x+3-Renderer.getStringWidth("&020m away")*Renderer.screen.getWidth()/1000, y+height/5*1, Renderer.screen.getWidth()/1000) renderLibs.drawStringCenteredVertically("&010m away", x+3-Renderer.getStringWidth("&010m away")*Renderer.screen.getWidth()/1000, y+height/5*3, Renderer.screen.getWidth()/1000) renderLibs.drawStringCenteredVertically("&00m away", x+3-Renderer.getStringWidth("&00m away")*Renderer.screen.getWidth()/1000, y+height-6, Renderer.screen.getWidth()/1000) if(moved){ selected = undefined selectedDist = undefined } let lastUuids = [] this.nearPlayerData.forEach((data, i)=>{ let newLastUuids = [] Object.keys(data).forEach(uuid=>{ newLastUuids.push(uuid) lastUuids = lastUuids.filter(a=>a!==uuid) let dist = data[uuid].distance let oldDist = this.nearPlayerData[i-1]?.[uuid]?.distance || 25 let thisX = x+(i)/100*width let thisY = y+height-(dist/25)*height if(moved && (thisX-mouseX)**2 + (thisY-mouseY)**2 < 3){ selected = uuid selectedDist = dist } if(i !== 0){ Renderer.drawLine(Renderer.color(0, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 1) } Renderer.drawRect(Renderer.color(0, 0, 0), thisX-1, thisY-1, 3, 3) }) lastUuids.forEach(uuid=>{ let dist = 25 let oldDist = this.nearPlayerData[i-1]?.[uuid]?.distance || 25 let thisX = x+(i)/100*width let thisY = y+height-(dist/25)*height if(i !== 0){ Renderer.drawLine(Renderer.color(0, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 1) } }) lastUuids = newLastUuids }) if(selected){ width = this.nearPlayersRenderElement.location.getWidthExact() height = this.nearPlayersRenderElement.location.getHeightExact() width*=0.75 height*=0.75 renderLibs.scizzorFast(0,0,Renderer.screen.getWidth(), Renderer.screen.getHeight()) let selectedIgn = undefined let lastRenderedSelected = false this.nearPlayerData.forEach((data, i)=>{ if(data[selected]){ lastRenderedSelected = true selectedIgn = data[selected].name let dist = data[selected].distance let oldDist = this.nearPlayerData[i-1]?.[selected]?.distance || 25 let thisX = x+(i)/100*width let thisY = y+height-(dist/25)*height if(i !== 0){ Renderer.drawLine(Renderer.color(255, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 3) } }else{ if(lastRenderedSelected){ lastRenderedSelected = false let dist = 25 let oldDist = this.nearPlayerData[i-1]?.[selected]?.distance || 25 let thisX = x+(i)/100*width let thisY = y+height-(dist/25)*height if(i !== 0){ Renderer.drawLine(Renderer.color(255, 0, 0), x+(i-1)/100*width, y+height-(oldDist/25)*height, thisX, thisY, 3) } } } }) let width = Math.max(Renderer.getStringWidth(selectedIgn)*2, Renderer.getStringWidth("Distance: " + selectedDist.toFixed(1)))+8 let height = 32 renderLibs.drawBox([255, 255, 255], mouseX+10, mouseY-height/2, width,height, 3) renderLibs.drawString("&0" + selectedIgn, mouseX+14, mouseY-height/2+3, 2) renderLibs.drawString("&0Distance: &7" + selectedDist.toFixed(1) , mouseX+14, mouseY-height/2+21, 1) } })) } step(){ if(!this.recordNearestPlayers.getValue()) return let thisSecondPlayerData = {} World.getAllPlayers().forEach(p=>{ let distSq = (p.getX()-Player.getX())**2+(p.getY()-Player.getY())**2+(p.getZ()-Player.getZ())**2 if(distSq < 25*25 && distSq !== 0){ thisSecondPlayerData[p.getUUID().toString()] = {name: p.getName(), distance: Math.sqrt(distSq)} } }) this.nearPlayerData.push(thisSecondPlayerData) if(this.nearPlayerData.length > 100) this.nearPlayerData.shift() } initVariables(){ this.recordNearestPlayers = undefined this.nearPlayerData = undefined this.nearPlayersGui = undefined this.nearPlayersGuiBox = undefined this.nearPlayersRenderElement = undefined } onDisable(){ this.nearPlayersGui.delete() this.initVariables() } } module.exports = { class: new AgentThings() }