///
///
import Feature from "../../featureClass/class";
import * as renderUtils from "../../utils/renderUtils";
import HudTextElement from "../hud/HudTextElement";
import LocationSetting from "../settings/settingThings/location";
import ToggleSetting from "../settings/settingThings/toggle";
class DungeonSolvers extends Feature {
constructor() {
super()
}
onEnable(){
this.initVariables()
this.lividData = {}
this.lividData.lividColor = {
"Vendetta": "&f",
"Crossed": "&d",
"Hockey": "&c",
"Doctor": "&7",
"Frog": "&2",
"Smile": "&a",
"Scream": "&1",
"Purple": "&5",
"Arcade": "&e"
}
this.onWorldLoad()
this.lividFindEnabled = new ToggleSetting("Correct livid finder", "Finds the real livid to kill in the f5 boss fight", true, "livid_find_enabled", this)
this.lividFindHud = new ToggleSetting("Show Livid Hp", "Shows the nametag of the correct livid", true, "livid_hud_enabled", this).requires(this.lividFindEnabled)
this.lividHpElement = new HudTextElement()
.setToggleSetting(this.lividFindHud)
.setLocationSetting(new LocationSetting("Correct Livid Hp Location", "Allows you to edit the location of the correct livid hp text", "livid_hp_location", this, [10, 50, 1, 1])
.requires(this.lividFindHud)
.editTempText("§r§e﴾ §c§lLivid§r §a7M§c❤ §e﴿§r"))
this.lividFindChat = new ToggleSetting("Say correct livid in chat", "Sends the correct livid in chat", false, "livid_chat_enabled", this).requires(this.lividFindEnabled)
this.lividFindBox = new ToggleSetting("Put a box around the correct livid", "This helps to locate it in the group", true, "livid_box_enabled", this).requires(this.lividFindEnabled)
this.lividFindNametags = new ToggleSetting("Hide the nametags of incorrect livids", "This helps to locate it in the group", true, "livid_nametags_enabled", this).requires(this.lividFindEnabled)
this.hudElements.push(this.lividHpElement)
this.registerStep(true, 2, this.step)
this.registerEvent("worldLoad", this.onWorldLoad)
this.registerEvent("renderOverlay", this.renderHud)
this.registerEvent("renderWorld", this.renderWorld)
// this.registerEvent("renderEntity", this.renderEntity)
this.renderEntityEvent = undefined
}
renderWorld(ticks){
if(this.lividFindBox.getValue()){
if(this.lividData.correctLividEntity){
renderUtils.drawBoxAtEntity(this.lividData.correctLividEntity, 255, 0, 0, 0.75, -2, ticks)
}
}
}
renderEntity(entity, position, ticks, event){
if(this.lividFindNametags.getValue()){
if(this.lividData.correctLividEntity){
if(entity.getName().includes("Livid") && entity.getName().includes("❤") && entity.getUUID() !== this.lividData.correctLividEntity.getUUID()){
cancel(event)
}
}
}
}
renderHud(){
for(let element of this.hudElements){
element.render()
}
}
onWorldLoad(){
this.lividData.correctLividColor = undefined
this.lividData.correctLividColorHP = undefined
this.lividData.sayLividColors = []
this.lividData.sayLividColors2 = []
this.lividData.correctLividEntity = undefined
this.lividHpElement && this.lividHpElement.setText("")
}
step(){ //2fps
if(this.lividFindEnabled.getValue() && (this.FeatureManager.features["dataLoader"].class.dungeonFloor === "F5")){ //TODO: fix on M5 (detect correct livid based on roof color)
World.getAllEntities().forEach(entity => {
let entityName = entity.getName()
if (/(?:Vendetta|Crossed|Hockey|Doctor|Frog|Smile|Scream|Purple|Arcade) Livid/g.test(entityName)) {
let lividName = entityName.replace(" Livid", "")
if (!this.lividData.sayLividColors2.includes(lividName)) {
this.lividData.sayLividColors2.push(lividName)
if (this.lividData.sayLividColors2.length === 1) {
this.lividData.correctLividColor = lividName
}
if (this.lividData.sayLividColors2.length === 9) {
if(this.lividFindChat.getValue()){
ChatLib.chat(this.FeatureManager.messagePrefix + "Correct livid is: " + this.lividData.lividColor[lividName] + lividName)
}
this.lividData.correctLividColor = lividName
}
}
return;
}
if (entityName.includes("Livid") && entityName.includes("❤")) {
if (!this.lividData.sayLividColors.includes(entityName.substr(0, 3))) {
this.lividData.sayLividColors.push(entityName.substr(0, 3))
if (this.lividData.sayLividColors.length === 9) {
this.lividData.correctLividColorHP = entityName.substr(0, 3)
}
if (this.lividData.sayLividColors.length === 1) {
this.lividData.correctLividColorHP = entityName.substr(0, 3)
}
}
if (this.lividData.sayLividColors.length === 1) {
if (entityName.includes("Livid") && entityName.includes("❤")) {
this.lividHpElement.setText(entityName)
}
} else {
if (this.lividData.correctLividColorHP !== undefined) {
// if (this.lividData.correctLividColor === "Arcade") {
// this.lividHpElement.setText("Unknown Health (Yellow Livid)")
// } else {
if (entityName.includes(this.lividData.correctLividColorHP)) {
this.lividHpElement.setText(entityName)
this.lividData.correctLividEntity = entity
}
// }
}
}
}
})
}
if(this.lividData.correctLividEntity){
if(!this.renderEntityEvent){
this.renderEntityEvent = this.registerEvent("renderEntity", this.renderEntity)
}
}else{
if(this.renderEntityEvent){
this.unregisterEvent(this.renderEntityEvent)
}
}
}
initVariables(){
this.lividFindEnabled = undefined
this.lividData = undefined
this.hudElements = []
}
onDisable(){
this.initVariables()
}
}
module.exports = {
class: new DungeonSolvers()
}