From fe45b4db2fc8e3f26c89df23a988615c7a80cd2e Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 00:50:30 +0200 Subject: fix lang files --- .../resources/assets/skyblocker/lang/es_ES.json | 148 ---------------- .../resources/assets/skyblocker/lang/es_es.json | 148 ++++++++++++++++ .../resources/assets/skyblocker/lang/ja_JP.json | 74 -------- .../resources/assets/skyblocker/lang/ja_jp.json | 74 ++++++++ .../resources/assets/skyblocker/lang/ko_KR.json | 189 --------------------- .../resources/assets/skyblocker/lang/ko_kr.json | 189 +++++++++++++++++++++ .../resources/assets/skyblocker/lang/nb_NO.json | 164 ------------------ .../resources/assets/skyblocker/lang/nb_no.json | 164 ++++++++++++++++++ .../resources/assets/skyblocker/lang/nn_NO.json | 16 -- .../resources/assets/skyblocker/lang/nn_no.json | 16 ++ .../resources/assets/skyblocker/lang/tr_TR.json | 71 -------- .../resources/assets/skyblocker/lang/tr_tr.json | 71 ++++++++ 12 files changed, 662 insertions(+), 662 deletions(-) delete mode 100644 src/main/resources/assets/skyblocker/lang/es_ES.json create mode 100644 src/main/resources/assets/skyblocker/lang/es_es.json delete mode 100644 src/main/resources/assets/skyblocker/lang/ja_JP.json create mode 100644 src/main/resources/assets/skyblocker/lang/ja_jp.json delete mode 100644 src/main/resources/assets/skyblocker/lang/ko_KR.json create mode 100644 src/main/resources/assets/skyblocker/lang/ko_kr.json delete mode 100644 src/main/resources/assets/skyblocker/lang/nb_NO.json create mode 100644 src/main/resources/assets/skyblocker/lang/nb_no.json delete mode 100644 src/main/resources/assets/skyblocker/lang/nn_NO.json create mode 100644 src/main/resources/assets/skyblocker/lang/nn_no.json delete mode 100644 src/main/resources/assets/skyblocker/lang/tr_TR.json create mode 100644 src/main/resources/assets/skyblocker/lang/tr_tr.json (limited to 'src') diff --git a/src/main/resources/assets/skyblocker/lang/es_ES.json b/src/main/resources/assets/skyblocker/lang/es_ES.json deleted file mode 100644 index 7c5ea062..00000000 --- a/src/main/resources/assets/skyblocker/lang/es_ES.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "Bloqueo de Slot (Hotbar)", - "key.wikiLookup": "Búsqueda en la Wiki", - "text.autoconfig.skyblocker.title": "Ajustes de Skyblocker", - "text.autoconfig.skyblocker.category.general": "General", - "text.autoconfig.skyblocker.option.general.bars": "Salud, Mana, Defensa & Barra de XP", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Habilitar Barras", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Configurar Posición de Barras", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Capa 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Capa 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Derecha", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deshabilitado", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Posición de la Barra de Salud", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Puedes elegir cuantos días de precio promedio sera", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Precio de 1 día", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Precio de 3 días", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo", - "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", - "skyblocker.itemTooltip.noData": "§cSin Información", - "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", - "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", - "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", - "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", - "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", - "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", - "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", - "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida", - "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet", - "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos", - "text.autoconfig.skyblocker.category.locations": "Localizaciones", - "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "Mensajes", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)", - "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE", - "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!", - "skyblocker.update.update_link": " §2§nHas Click Aquí§r", - "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.", - "skyblocker.update.hover_text": "Abrir Modrinth", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.", - "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8", - "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9", - "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz", - "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz" -} diff --git a/src/main/resources/assets/skyblocker/lang/es_es.json b/src/main/resources/assets/skyblocker/lang/es_es.json new file mode 100644 index 00000000..7c5ea062 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/es_es.json @@ -0,0 +1,148 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "Bloqueo de Slot (Hotbar)", + "key.wikiLookup": "Búsqueda en la Wiki", + "text.autoconfig.skyblocker.title": "Ajustes de Skyblocker", + "text.autoconfig.skyblocker.category.general": "General", + "text.autoconfig.skyblocker.option.general.bars": "Salud, Mana, Defensa & Barra de XP", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Habilitar Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Configurar Posición de Barras", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Capa 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Capa 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Derecha", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deshabilitado", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Posición de la Barra de Salud", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Posición de la Barra de Mana", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Posición de la Barra de Defensa", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Posición de la Barra de Experiencia", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Ver la previsualización de la mochila sin sostener Shift", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Habilitar Precios de NPC", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Habilitar Precios Promedio de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Tipo Promedio", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Puedes elegir cuantos días de precio promedio sera", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Precio de 1 día", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Precio de 3 días", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Ambos", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Habilitar el precio mas bajo de BIN", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Habilitar los precios de compra/venta del Bazar", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Habilitar Fecha del Museo", + "text.autoconfig.skyblocker.option.general.hitbox": "Cajas de Colisión", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Habilitar la Caja de Colisión de la 1.8 para la tierra de cultivo", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Habilitar la Caja de Colisión de la 1.8 para la palanca", + "skyblocker.itemTooltip.noData": "§cSin Información", + "text.autoconfig.skyblocker.category.richPresence": "Discord Rich Presence", + "text.autoconfig.skyblocker.option.richPresence.info": "Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "CARTERA", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "LOCALIZACIÓN", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Ciclar Información de Skyblock", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Habilitado", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Mensaje Personalizado", + "text.autoconfig.skyblocker.category.quickNav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.quickNav.button1": "Botón 1", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button3": "Botón 3", + "text.autoconfig.skyblocker.option.quickNav.button4": "Botón 4", + "text.autoconfig.skyblocker.option.quickNav.button5": "Botón 5", + "text.autoconfig.skyblocker.option.quickNav.button6": "Botón 6", + "text.autoconfig.skyblocker.option.quickNav.button7": "Botón 7", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Ocultar el mensaje de Implosion", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Ocultar Mensajes de Combos", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Obscurece los cofres que ya han sido abiertos.", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Habilitar Fondo", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Habilitar Navegación Rápida", + "text.autoconfig.skyblocker.option.general.quicknav": "Navegación Rápida", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Información extra de los objetos", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEl precio en la información en los objetos se actualiza cada 60 segundos. De lo contrario revisa lastest.log", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Este valor no importa si estas ciclando", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button2": "Botón 2", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.messages.hideAds": "Ocultar anuncios del Chat Publico", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Ocultar mensajes del Pad de Teletransporte", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Ocultar mensajes del Autopet", + "text.autoconfig.skyblocker.option.general.itemList": "Lista de Objetos", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Habilitar la Lista de Objetos", + "text.autoconfig.skyblocker.category.locations": "Localizaciones", + "text.autoconfig.skyblocker.option.locations.dungeons": "Mazmorras", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Ayuda con Croesus", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Habilitar Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Escala del Mapa", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Resuelve el Acertijo de \"Los Tres Chiflados\"", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Resuelve el Acertijo del Blaze", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Resuelve el Acertijo de Trivia", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Minas Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Habilitar Combustible del Taladro", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Resolver Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interfaz de Dwarven", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Habilitado", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "Mensajes", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Mover a la barra de acción", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Ocultar Mensaje de Enfriamiento (Cooldown)", + "text.autoconfig.skyblocker.option.messages.hideHeal": "Ocultar Mensajes de Curación", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "Ocultar Mensajes de la AOTE", + "text.autoconfig.skyblocker.option.messages.hideMana": "Ocultar los Mensajes del Consumo de Maná de la Barra de Acción", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Da una mejor experiencia con FancyBar", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2¡Hay Una nueva versión disponible!", + "skyblocker.update.update_link": " §2§nHas Click Aquí§r", + "skyblocker.update.update_message_end": " §aPara conocer mas sobre las nuevas características.", + "skyblocker.update.hover_text": "Abrir Modrinth", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Notificaciones sobre actualizaciones", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2¡Se añadió tu API key automáticamente!", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cLa actualización del repositorio local fallo. Elimina los archivos manualmente y reinicia el juego.", + "text.autoconfig.skyblocker.option.quickNav.button11": "Botón 11", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8": "Botón 8", + "text.autoconfig.skyblocker.option.quickNav.button9": "Botón 9", + "text.autoconfig.skyblocker.option.quickNav.button10": "Botón 10", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "Titulo de la Interfaz", + "text.autoconfig.skyblocker.option.quickNav.button12": "Botón 12", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Nombre del objeto", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "Titulo de la Interfaz" +} diff --git a/src/main/resources/assets/skyblocker/lang/ja_JP.json b/src/main/resources/assets/skyblocker/lang/ja_JP.json deleted file mode 100644 index 954647c7..00000000 --- a/src/main/resources/assets/skyblocker/lang/ja_JP.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "ホットバースロットのロック", - "key.wikiLookup": "Wikiのページを開く", - "text.autoconfig.skyblocker.title": "Skyblockerの設定", - "text.autoconfig.skyblocker.category.general": "一般", - "text.autoconfig.skyblocker.option.general.bars": "体力,マナ,ディフェンス,経験値のバー", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "バーを有効にする", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "バーの位置を変える", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "体力バーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "マナバーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "ディフェンスバーの位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "経験値バーの位置", - "text.autoconfig.skyblocker.option.general.quicknav": "クイックナビ", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "クイックナビを有効にする", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shiftキーを押さずにバックパックのプレビューを見る", - "text.autoconfig.skyblocker.option.general.itemTooltip": "アイテムの詳細情報", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC売りの値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "binオークションの平均の値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均の取り方", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "何日間の平均の値段を表示するか選べます", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "最安価の表示を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "バザーでの売り買いの値段を表示する", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "ミュージアムに寄付したか、またその日を表示する", - "text.autoconfig.skyblocker.option.general.hitbox": "ヒットボックス", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "バージョン1.8での作物のヒットボックスを使う", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "バージョン1.8でのレバーのヒットボックスを使う", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b]§cツールチップ上のアイテムの値段は最大60秒ごとに更新されます。されていない場合はlatest.logを確認してください", - "text.autoconfig.skyblocker.category.richPresence": "discordに自分のゲームアクティビティを表示する", - "text.autoconfig.skyblocker.option.richPresence.info": "skyblockの情報", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "この値はあなたがサイクリングしている場合は重要ではありません", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "円状のskyblockの情報", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "有効", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "カスタムメッセージ", - "text.autoconfig.skyblocker.option.general.itemList": "アイテムリスト", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "アイテムリストを有効にする", - "text.autoconfig.skyblocker.category.locations": "場所", - "text.autoconfig.skyblocker.option.locations.dungeons": "ダンジョン", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "ダンジョンのマップ表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "嘘つきを当てるパズルのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "ブレイズパズルのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "クイズのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "F7のターミナルソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "select Coloredのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Click in Orderのソルバー", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Starts Withのソルバー", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "ドワーフマイン", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "ドリルの燃料表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchurの要求アイテムの表示", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler Puzzleのソルバー", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "ドワーフマインでのHUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "有効", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "バックグラウンド表示を有効にする", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "メッセージ", - "text.autoconfig.skyblocker.option.messages.hideAbility": "アビリティのクールダウンを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideHeal": "回復メッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTEのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosionのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Waveのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAds": "全体チャットの宣伝を非表示にする", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "テレポートパッドのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Comboのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopetのメッセージを非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMana": "マナの使用表示をアクションバーから非表示にする", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBarでより良くできます", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2新しいバージョンがあります!", - "skyblocker.update.update_link": " §2§nここをクリック§r", - "skyblocker.update.update_message_end": " §a最新の機能を体験しましょう.", - "skyblocker.update.hover_text": "Modrinthを開く", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "アップデート通知", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2あなたのAPI keyを設定しました!" -} diff --git a/src/main/resources/assets/skyblocker/lang/ja_jp.json b/src/main/resources/assets/skyblocker/lang/ja_jp.json new file mode 100644 index 00000000..954647c7 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/ja_jp.json @@ -0,0 +1,74 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "ホットバースロットのロック", + "key.wikiLookup": "Wikiのページを開く", + "text.autoconfig.skyblocker.title": "Skyblockerの設定", + "text.autoconfig.skyblocker.category.general": "一般", + "text.autoconfig.skyblocker.option.general.bars": "体力,マナ,ディフェンス,経験値のバー", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "バーを有効にする", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "バーの位置を変える", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "体力バーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "マナバーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "ディフェンスバーの位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "経験値バーの位置", + "text.autoconfig.skyblocker.option.general.quicknav": "クイックナビ", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "クイックナビを有効にする", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shiftキーを押さずにバックパックのプレビューを見る", + "text.autoconfig.skyblocker.option.general.itemTooltip": "アイテムの詳細情報", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC売りの値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "binオークションの平均の値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "平均の取り方", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "何日間の平均の値段を表示するか選べます", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "最安価の表示を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "バザーでの売り買いの値段を表示する", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "ミュージアムに寄付したか、またその日を表示する", + "text.autoconfig.skyblocker.option.general.hitbox": "ヒットボックス", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "バージョン1.8での作物のヒットボックスを使う", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "バージョン1.8でのレバーのヒットボックスを使う", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b]§cツールチップ上のアイテムの値段は最大60秒ごとに更新されます。されていない場合はlatest.logを確認してください", + "text.autoconfig.skyblocker.category.richPresence": "discordに自分のゲームアクティビティを表示する", + "text.autoconfig.skyblocker.option.richPresence.info": "skyblockの情報", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "この値はあなたがサイクリングしている場合は重要ではありません", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "円状のskyblockの情報", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "有効", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "カスタムメッセージ", + "text.autoconfig.skyblocker.option.general.itemList": "アイテムリスト", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "アイテムリストを有効にする", + "text.autoconfig.skyblocker.category.locations": "場所", + "text.autoconfig.skyblocker.option.locations.dungeons": "ダンジョン", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "ダンジョンのマップ表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "嘘つきを当てるパズルのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "ブレイズパズルのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "クイズのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "F7のターミナルソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "select Coloredのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Click in Orderのソルバー", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Starts Withのソルバー", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "ドワーフマイン", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "ドリルの燃料表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchurの要求アイテムの表示", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler Puzzleのソルバー", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "ドワーフマインでのHUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "有効", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "バックグラウンド表示を有効にする", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "メッセージ", + "text.autoconfig.skyblocker.option.messages.hideAbility": "アビリティのクールダウンを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideHeal": "回復メッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTEのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosionのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Waveのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAds": "全体チャットの宣伝を非表示にする", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "テレポートパッドのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Comboのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopetのメッセージを非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMana": "マナの使用表示をアクションバーから非表示にする", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBarでより良くできます", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2新しいバージョンがあります!", + "skyblocker.update.update_link": " §2§nここをクリック§r", + "skyblocker.update.update_message_end": " §a最新の機能を体験しましょう.", + "skyblocker.update.hover_text": "Modrinthを開く", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "アップデート通知", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2あなたのAPI keyを設定しました!" +} diff --git a/src/main/resources/assets/skyblocker/lang/ko_KR.json b/src/main/resources/assets/skyblocker/lang/ko_KR.json deleted file mode 100644 index 93930cc1..00000000 --- a/src/main/resources/assets/skyblocker/lang/ko_KR.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "key.categories.skyblocker": "Skyblocker", - "key.hotbarSlotLock": "슬롯 고정 (핫바)", - "key.wikiLookup": "위키에서 찾기", - "text.autoconfig.skyblocker.title": "Skyblocker 설정", - "text.autoconfig.skyblocker.category.general": "일반", - "text.autoconfig.skyblocker.option.general.bars": "체력, 마나, 방어력 및 경험치 바", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "바 활성화", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "바 위치 조정", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "레이어 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "레이어 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "우측", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "비활성화", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "체력바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "마나바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "방어력바 위치", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "경험치바 위치", - "text.autoconfig.skyblocker.option.general.quicknav": "즐겨찾기", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "즐겨찾기 활성화", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift 를 누르지 않고 백팩 미리보기", - "text.autoconfig.skyblocker.option.general.itemTooltip": "아이템 툴팁", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "평균 BIN 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "평균 종류", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "얼마나 많은 일수의 평균가를 표시할지 선택합니다", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1일 평균가", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3일 평균가", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "둘 다", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "최저 BIN 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Bazaar 매매 가격 활성화", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Museum 과 날짜 활성화", - "text.autoconfig.skyblocker.option.general.hitbox": "히트박스", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 농지 히트박스 활성화", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 레버 히트박스 활성화", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §c아이템 가격 툴팁이 최대 60초 이내에 갱신됩니다. 갱신되지 않을 시 latest.log 를 확인하세요.", - "skyblocker.itemTooltip.noData": "§c데이터 없음", - "text.autoconfig.skyblocker.category.richPresence": "디스코드 Rich Presence", - "text.autoconfig.skyblocker.option.richPresence.info": "스카이블록 정보", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "PURSE", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "위치", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "이 값은 순환중일 시 중요하지 않습니다", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "스카이블록 정보 순환", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "활성화됨", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "사용자 지정 메시지", - "text.autoconfig.skyblocker.category.quickNav": "즐겨찾기", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "즐겨찾기 활성화", - "text.autoconfig.skyblocker.option.quickNav.button1": "버튼 1", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button2": "버튼 2", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button3": "버튼 3", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button4": "버튼 4", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button5": "버튼 5", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button6": "버튼 6", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button7": "버튼 7", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button8": "버튼 8", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button9": "버튼 9", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button10": "버튼 10", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button11": "버튼 11", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "클릑 이벤트", - "text.autoconfig.skyblocker.option.quickNav.button12": "버튼 12", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "렌더", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "아이템", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "아이템 이름", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "아이템 개수", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI 제목", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "클릭 이벤트", - "text.autoconfig.skyblocker.option.general.itemList": "아이템 목록", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "아이템 목록 활성화", - "text.autoconfig.skyblocker.category.locations": "위치", - "text.autoconfig.skyblocker.option.locations.dungeons": "던전", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "크로이소스 도우미", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "이미 열린 상자는 회색으로 표시됩니다.", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "지도 활성화", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "지도 크기", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Three Weirdos 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "블레이즈 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Trivia 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "터미널 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "색상 선택 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "클릭 순서대로 해결", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "해결 시작", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "드릴 연료 활성화", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur 해결", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler 퍼즐 해결", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "활성화됨", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "배경 활성화", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.category.messages": "메시지", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "비활성화됨", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "필터", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "액션바로 이동", - "text.autoconfig.skyblocker.option.messages.hideAbility": "어빌리티 쿨다운 가리기", - "text.autoconfig.skyblocker.option.messages.hideHeal": "체력 회복 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAds": "전체 채팅에서 광고 가리기", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideCombo": "콤보 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMana": "액션바에서 마나 사용 메시지 가리기", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar 로 더 나은 기능을 사용합니다", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2새로운 버전이 사용 가능합니다!", - "skyblocker.update.update_link": " §2§n여기§r", - "skyblocker.update.update_message_end": " §a를 클릭하여 최신 기능에 대해 알아보세요.", - "skyblocker.update.hover_text": "Modrinth 열기", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "업데이트 알림", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2자동으로 API 키를 설정했습니다!" -} diff --git a/src/main/resources/assets/skyblocker/lang/ko_kr.json b/src/main/resources/assets/skyblocker/lang/ko_kr.json new file mode 100644 index 00000000..93930cc1 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/ko_kr.json @@ -0,0 +1,189 @@ +{ + "key.categories.skyblocker": "Skyblocker", + "key.hotbarSlotLock": "슬롯 고정 (핫바)", + "key.wikiLookup": "위키에서 찾기", + "text.autoconfig.skyblocker.title": "Skyblocker 설정", + "text.autoconfig.skyblocker.category.general": "일반", + "text.autoconfig.skyblocker.option.general.bars": "체력, 마나, 방어력 및 경험치 바", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "바 활성화", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "바 위치 조정", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "레이어 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "레이어 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "우측", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "비활성화", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "체력바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "마나바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "방어력바 위치", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "경험치바 위치", + "text.autoconfig.skyblocker.option.general.quicknav": "즐겨찾기", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "즐겨찾기 활성화", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift 를 누르지 않고 백팩 미리보기", + "text.autoconfig.skyblocker.option.general.itemTooltip": "아이템 툴팁", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "평균 BIN 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "평균 종류", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "얼마나 많은 일수의 평균가를 표시할지 선택합니다", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1일 평균가", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3일 평균가", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "둘 다", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "최저 BIN 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Bazaar 매매 가격 활성화", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Museum 과 날짜 활성화", + "text.autoconfig.skyblocker.option.general.hitbox": "히트박스", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 농지 히트박스 활성화", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 레버 히트박스 활성화", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §c아이템 가격 툴팁이 최대 60초 이내에 갱신됩니다. 갱신되지 않을 시 latest.log 를 확인하세요.", + "skyblocker.itemTooltip.noData": "§c데이터 없음", + "text.autoconfig.skyblocker.category.richPresence": "디스코드 Rich Presence", + "text.autoconfig.skyblocker.option.richPresence.info": "스카이블록 정보", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "PURSE", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "위치", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "이 값은 순환중일 시 중요하지 않습니다", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "스카이블록 정보 순환", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "활성화됨", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "사용자 지정 메시지", + "text.autoconfig.skyblocker.category.quickNav": "즐겨찾기", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "즐겨찾기 활성화", + "text.autoconfig.skyblocker.option.quickNav.button1": "버튼 1", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button2": "버튼 2", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button3": "버튼 3", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button4": "버튼 4", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button5": "버튼 5", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button6": "버튼 6", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button7": "버튼 7", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button8": "버튼 8", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button9": "버튼 9", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button10": "버튼 10", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button11": "버튼 11", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "클릑 이벤트", + "text.autoconfig.skyblocker.option.quickNav.button12": "버튼 12", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "렌더", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "아이템", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "아이템 이름", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "아이템 개수", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI 제목", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "클릭 이벤트", + "text.autoconfig.skyblocker.option.general.itemList": "아이템 목록", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "아이템 목록 활성화", + "text.autoconfig.skyblocker.category.locations": "위치", + "text.autoconfig.skyblocker.option.locations.dungeons": "던전", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "크로이소스 도우미", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "이미 열린 상자는 회색으로 표시됩니다.", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "지도 활성화", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "지도 크기", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Three Weirdos 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "블레이즈 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Trivia 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "터미널 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "색상 선택 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "클릭 순서대로 해결", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "해결 시작", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dwarven Mines", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "드릴 연료 활성화", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur 해결", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler 퍼즐 해결", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "활성화됨", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "배경 활성화", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.category.messages": "메시지", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "비활성화됨", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "필터", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "액션바로 이동", + "text.autoconfig.skyblocker.option.messages.hideAbility": "어빌리티 쿨다운 가리기", + "text.autoconfig.skyblocker.option.messages.hideHeal": "체력 회복 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAds": "전체 채팅에서 광고 가리기", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideCombo": "콤보 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMana": "액션바에서 마나 사용 메시지 가리기", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar 로 더 나은 기능을 사용합니다", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2새로운 버전이 사용 가능합니다!", + "skyblocker.update.update_link": " §2§n여기§r", + "skyblocker.update.update_message_end": " §a를 클릭하여 최신 기능에 대해 알아보세요.", + "skyblocker.update.hover_text": "Modrinth 열기", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "업데이트 알림", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2자동으로 API 키를 설정했습니다!" +} diff --git a/src/main/resources/assets/skyblocker/lang/nb_NO.json b/src/main/resources/assets/skyblocker/lang/nb_NO.json deleted file mode 100644 index 0f96ebb6..00000000 --- a/src/main/resources/assets/skyblocker/lang/nb_NO.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "key.wikiLookup": "Wiki-oppslag", - "text.autoconfig.skyblocker.title": "Skyblocker-innstillinger", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver barer", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høyre", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Forsvarsbar posisjon", - "text.autoconfig.skyblocker.option.general.quicknav": "Hurtignavigasjon", - "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Aktiver hurtignavigasjon", - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Vis forhåndsvisning av ryggsekk uten å holde Shift nede", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Verktøytips for Gjenstad", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Aktiver NPC-pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Aktiver Avg. BIN Pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Gjennomsnittlig type", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Pris for 1 dag", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Pris for 3 dager", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Begge", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Aktiver laveste BIN-pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Aktiver Bazaar kjøp/salg Pris", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Aktiver museum og dato", - "text.autoconfig.skyblocker.option.general.hitbox": "Treffbokser", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Aktiver 1.8 treffboks for avlinger", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Aktiver 1.8 spak Treffboks", - "skyblocker.itemTooltip.noData": "§cIngen data", - "text.autoconfig.skyblocker.category.richPresence": "Discord-rik tilstedeværelse", - "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock-informasjon", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "VESKE", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "PLASSERING", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Denne verdien har ikke noe å si hvis du cycling", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Cycle Skyblock Informasjon", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktivert", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Egendefinert melding", - "text.autoconfig.skyblocker.category.quickNav": "Rask navigering", - "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Aktiver hurtignavigering", - "text.autoconfig.skyblocker.option.quickNav.button1.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button1.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button2": "Knapp 2", - "text.autoconfig.skyblocker.option.quickNav.button2.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button2.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button3": "Knapp 3", - "text.autoconfig.skyblocker.option.quickNav.button3.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button4": "Knapp 4", - "text.autoconfig.skyblocker.option.quickNav.button4.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button4.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button5": "Knapp 5", - "text.autoconfig.skyblocker.option.quickNav.button5.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button5.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "Gjenstand Teller", - "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", - "key.categories.skyblocker": "SkyBlocker", - "key.hotbarSlotLock": "Slot lås (Hotbar)", - "text.autoconfig.skyblocker.category.general": "Generelt", - "text.autoconfig.skyblocker.option.general.bars": "Helse, mana, forsvar og XP-barer", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar stilling", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Du kan velge hvor mange dager med gjennomsnittspris som skal være", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cVareprisinformasjon på verktøytips fornyes om maks 60 sekunder. Hvis ikke, sjekk latest.log", - "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand", - "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste", - "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet", - "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6", - "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde", - "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7", - "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8", - "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8", - "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn", - "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand", - "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1", - "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering", - "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn", - "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde", - "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", - "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel", - "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse", - "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste", - "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", - "text.autoconfig.skyblocker.category.locations": "Lokasjoner", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper", - "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.", - "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart", - "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering", - "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet", - "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge", - "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med", - "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD" -} diff --git a/src/main/resources/assets/skyblocker/lang/nb_no.json b/src/main/resources/assets/skyblocker/lang/nb_no.json new file mode 100644 index 00000000..0f96ebb6 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nb_no.json @@ -0,0 +1,164 @@ +{ + "key.wikiLookup": "Wiki-oppslag", + "text.autoconfig.skyblocker.title": "Skyblocker-innstillinger", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høyre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Forsvarsbar posisjon", + "text.autoconfig.skyblocker.option.general.quicknav": "Hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Aktiver hurtignavigasjon", + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Vis forhåndsvisning av ryggsekk uten å holde Shift nede", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Verktøytips for Gjenstad", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "Aktiver NPC-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Aktiver Avg. BIN Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Gjennomsnittlig type", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "Pris for 1 dag", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "Pris for 3 dager", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "Begge", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "Aktiver laveste BIN-pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Aktiver Bazaar kjøp/salg Pris", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Aktiver museum og dato", + "text.autoconfig.skyblocker.option.general.hitbox": "Treffbokser", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "Aktiver 1.8 treffboks for avlinger", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "Aktiver 1.8 spak Treffboks", + "skyblocker.itemTooltip.noData": "§cIngen data", + "text.autoconfig.skyblocker.category.richPresence": "Discord-rik tilstedeværelse", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock-informasjon", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "VESKE", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "BITS", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "PLASSERING", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Denne verdien har ikke noe å si hvis du cycling", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Cycle Skyblock Informasjon", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktivert", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Egendefinert melding", + "text.autoconfig.skyblocker.category.quickNav": "Rask navigering", + "text.autoconfig.skyblocker.option.quickNav.enableQuickNav": "Aktiver hurtignavigering", + "text.autoconfig.skyblocker.option.quickNav.button1.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button1.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button1.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button1.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button1.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button1.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button2": "Knapp 2", + "text.autoconfig.skyblocker.option.quickNav.button2.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button2.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button2.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button2.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button2.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button2.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button2.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button3": "Knapp 3", + "text.autoconfig.skyblocker.option.quickNav.button3.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button3.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button3.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button3.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button3.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button3.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button4": "Knapp 4", + "text.autoconfig.skyblocker.option.quickNav.button4.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button4.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button4.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button4.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button4.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button5": "Knapp 5", + "text.autoconfig.skyblocker.option.quickNav.button5.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button5.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button5.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button5.item.count": "Gjenstand Teller", + "text.autoconfig.skyblocker.option.quickNav.button5.item.nbt": "NBT", + "key.categories.skyblocker": "SkyBlocker", + "key.hotbarSlotLock": "Slot lås (Hotbar)", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars": "Helse, mana, forsvar og XP-barer", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar stilling", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Du kan velge hvor mange dager med gjennomsnittspris som skal være", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cVareprisinformasjon på verktøytips fornyes om maks 60 sekunder. Hvis ikke, sjekk latest.log", + "text.autoconfig.skyblocker.option.quickNav.button1": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button1.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button3.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button4.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button6.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button6.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12.item": "Gjenstand", + "text.autoconfig.skyblocker.option.general.itemList.enableItemList": "Aktiver gjenstad liste", + "text.autoconfig.skyblocker.option.locations.dungeons.blazesolver": "Løs Blaze-puslespillet", + "text.autoconfig.skyblocker.option.quickNav.button5.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button5.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button6": "Knapp 6", + "text.autoconfig.skyblocker.option.quickNav.button6.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button6.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button6.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button6.item.count": "Gjenstand mengde", + "text.autoconfig.skyblocker.option.quickNav.button6.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7": "Knapp 7", + "text.autoconfig.skyblocker.option.quickNav.button7.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button7.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button7.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button7.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button7.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button7.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button8": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button8.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button8.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button8.item.itemName": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button8.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button8.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9": "Knapp 8", + "text.autoconfig.skyblocker.option.quickNav.button9.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button9.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button9.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.count": "Gjenstand navn", + "text.autoconfig.skyblocker.option.quickNav.button9.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button9.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button9.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button10": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button10.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button10.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button10.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button10.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button10.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button10.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button11.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button11.item": "Gjenstand", + "text.autoconfig.skyblocker.option.quickNav.button11.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button11.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button11.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button11.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button11.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.quickNav.button12": "Knapp 1", + "text.autoconfig.skyblocker.option.quickNav.button12.render": "Rendering", + "text.autoconfig.skyblocker.option.quickNav.button12.item.itemName": "Gjenstand Navn", + "text.autoconfig.skyblocker.option.quickNav.button12.item.count": "Gjenstand Mengde", + "text.autoconfig.skyblocker.option.quickNav.button12.item.nbt": "NBT", + "text.autoconfig.skyblocker.option.quickNav.button12.uiTitle": "UI Tittel", + "text.autoconfig.skyblocker.option.quickNav.button12.clickEvent": "Klikk hendelse", + "text.autoconfig.skyblocker.option.general.itemList": "Gjenstand liste", + "text.autoconfig.skyblocker.option.locations.dungeons": "Dungeons", + "text.autoconfig.skyblocker.category.locations": "Lokasjoner", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper": "Croesus Hjelper", + "text.autoconfig.skyblocker.option.locations.dungeons.croesusHelper.@Tooltip": "Grå ut kister som allerede er åpnet.", + "text.autoconfig.skyblocker.option.locations.dungeons.enableMap": "Aktiver kart", + "text.autoconfig.skyblocker.option.locations.dungeons.mapScaling": "Kart skalering", + "text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Løs Three Weirdos-puslespillet", + "text.autoconfig.skyblocker.option.locations.dungeons.solveTrivia": "Solve the Blaze puzzle", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals": "Terminalløser", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveColor": "Løsning Velg farget", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveOrder": "Løs klikk i rekkefølge", + "text.autoconfig.skyblocker.option.locations.dungeons.terminals.solveStartsWith": "Løsning starter med", + "text.autoconfig.skyblocker.option.locations.dwarvenMines": "Dverggruver", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.enableDrillFuel": "Aktiver Drill Fuel", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Løse Fetchur", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Løs Puzzler Puzzle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dverg-HUD" +} diff --git a/src/main/resources/assets/skyblocker/lang/nn_NO.json b/src/main/resources/assets/skyblocker/lang/nn_NO.json deleted file mode 100644 index cd7ed912..00000000 --- a/src/main/resources/assets/skyblocker/lang/nn_NO.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "key.hotbarSlotLock": "Slotslås (Hotbar)", - "key.wikiLookup": "Wiki Opslag", - "text.autoconfig.skyblocker.title": "Skyblocker Innstillinger", - "text.autoconfig.skyblocker.category.general": "Generelt", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", - "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høgre", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar-posisjon", - "key.categories.skyblocker": "SkyBlocker", - "text.autoconfig.skyblocker.option.general.bars": "Liv, mana, forsvar og XP-bar", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver bar", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner" -} diff --git a/src/main/resources/assets/skyblocker/lang/nn_no.json b/src/main/resources/assets/skyblocker/lang/nn_no.json new file mode 100644 index 00000000..cd7ed912 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/nn_no.json @@ -0,0 +1,16 @@ +{ + "key.hotbarSlotLock": "Slotslås (Hotbar)", + "key.wikiLookup": "Wiki Opslag", + "text.autoconfig.skyblocker.title": "Skyblocker Innstillinger", + "text.autoconfig.skyblocker.category.general": "Generelt", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER1": "Lag 1", + "text.autoconfig.skyblocker.option.general.bars.barpositions.LAYER2": "Lag 2", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "Høgre", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Deaktivert", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Helsebar posisjon", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar-posisjon", + "key.categories.skyblocker": "SkyBlocker", + "text.autoconfig.skyblocker.option.general.bars": "Liv, mana, forsvar og XP-bar", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Aktiver bar", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Konfigurer barposisjoner" +} diff --git a/src/main/resources/assets/skyblocker/lang/tr_TR.json b/src/main/resources/assets/skyblocker/lang/tr_TR.json deleted file mode 100644 index 1b07aff8..00000000 --- a/src/main/resources/assets/skyblocker/lang/tr_TR.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift'e basmadan sırt çantası ön izlemesini görüntüleyin", - "text.autoconfig.skyblocker.option.general.itemTooltip": "Eşya Açıklamaları", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Ort. BIN fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Ortalama Türü", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1 günlük", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3 günlük", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "İkisi de", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Pazar alış/satış fiyatını göster", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Müze ve tarih bilgisini göster", - "text.autoconfig.skyblocker.option.general.hitbox": "Hitbox'lar", - "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEşya açıklamasındaki ürün fiyat bilgisi en fazla 60 saniye içinde yenilenecektir. Aksi takdirde latest.log dosyasını kontrol edin", - "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 tarım hitboxlarını etkinleştir", - "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 şalter hitboxunu etkinleştir", - "skyblocker.itemTooltip.noData": "§cVeri yok", - "text.autoconfig.skyblocker.category.richPresence": "Discord Özel Durumu", - "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock bilgisi", - "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Cüzdan", - "text.autoconfig.skyblocker.option.richPresence.info.BITS": "Bit", - "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Konum", - "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Eğer döngüyü açtıysanız bu değer geçersiz kalır", - "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Skyblock bilgilerini döngüye al", - "text.autoconfig.skyblocker.option.richPresence.customMessage": "Özel mesaj", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur'un mesajını çöz", - "skyblocker.fishing.reelNow": "Şimdi sarıl!", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Devre dışı", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtrele", - "text.autoconfig.skyblocker.option.messages.hideAbility": "Yetenek bekleme süresini filtrele", - "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Aksiyon barına taşı", - "text.autoconfig.skyblocker.option.messages.hideHeal": "İyileştirme mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave mesajını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAds": "Genel sohbetteki reklamları filtrele", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideCombo": "Kombo mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet mesajlarını filtrele", - "text.autoconfig.skyblocker.option.messages.hideMana": "Aksiyon barındaki mana tüketimlerini gizle", - "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Güncelleme Bildirimleri", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2API anahtarınız otomatik olarak kaydedildi!", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Arka planı göster", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Etkinleştir", - "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Kaç günlük ortalamanın gösterileceğini seçebilirsiniz", - "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "En düşük BIN fiyatını göster", - "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktif", - "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Yeni bir sürüm mevcut!", - "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler'ın bulmacasını çöz", - "key.hotbarSlotLock": "Slot Kilidi (Araç Çubuğu)", - "key.wikiLookup": "Wiki Araması", - "text.autoconfig.skyblocker.title": "Skyblocker Ayarları", - "text.autoconfig.skyblocker.category.general": "Genel", - "text.autoconfig.skyblocker.option.general.bars": "Can, Mana, Defans ve XP Barları", - "text.autoconfig.skyblocker.option.general.bars.enableBars": "Barları Etkinleştir", - "text.autoconfig.skyblocker.option.general.bars.barpositions": "Bar Konumları", - "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Devre dışı", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Can barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defans barı konumu", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Tecrübe barı konumu", - "key.categories.skyblocker": "Skyblocker", - "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cYerel depo güncellenemedi. Dosyaları manuel olarak silip oyunu tekrar başlatın.", - "text.autoconfig.skyblocker.option.general.fishing": "Balık Tutma Yardımcısı", - "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Balık tutma yardımcısını aktifleştir", - "text.autoconfig.skyblocker.category.messages": "Mesajlar", - "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion mesajını filtrele" -} diff --git a/src/main/resources/assets/skyblocker/lang/tr_tr.json b/src/main/resources/assets/skyblocker/lang/tr_tr.json new file mode 100644 index 00000000..1b07aff8 --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/tr_tr.json @@ -0,0 +1,71 @@ +{ + "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "Shift'e basmadan sırt çantası ön izlemesini görüntüleyin", + "text.autoconfig.skyblocker.option.general.itemTooltip": "Eşya Açıklamaları", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableNPCPrice": "NPC fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableAvgBIN": "Ort. BIN fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg": "Ortalama Türü", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.ONE_DAY": "1 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.THREE_DAY": "3 günlük", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.BOTH": "İkisi de", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableBazaarPrice": "Pazar alış/satış fiyatını göster", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumDate": "Müze ve tarih bilgisini göster", + "text.autoconfig.skyblocker.option.general.hitbox": "Hitbox'lar", + "skyblocker.itemTooltip.nullMessage": "§b[§6Skyblocker§b] §cEşya açıklamasındaki ürün fiyat bilgisi en fazla 60 saniye içinde yenilenecektir. Aksi takdirde latest.log dosyasını kontrol edin", + "text.autoconfig.skyblocker.option.general.hitbox.oldFarmlandHitbox": "1.8 tarım hitboxlarını etkinleştir", + "text.autoconfig.skyblocker.option.general.hitbox.oldLeverHitbox": "1.8 şalter hitboxunu etkinleştir", + "skyblocker.itemTooltip.noData": "§cVeri yok", + "text.autoconfig.skyblocker.category.richPresence": "Discord Özel Durumu", + "text.autoconfig.skyblocker.option.richPresence.info": "Skyblock bilgisi", + "text.autoconfig.skyblocker.option.richPresence.info.PURSE": "Cüzdan", + "text.autoconfig.skyblocker.option.richPresence.info.BITS": "Bit", + "text.autoconfig.skyblocker.option.richPresence.info.LOCATION": "Konum", + "text.autoconfig.skyblocker.option.richPresence.info.@Tooltip": "Eğer döngüyü açtıysanız bu değer geçersiz kalır", + "text.autoconfig.skyblocker.option.richPresence.cycleMode": "Skyblock bilgilerini döngüye al", + "text.autoconfig.skyblocker.option.richPresence.customMessage": "Özel mesaj", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Fetchur'un mesajını çöz", + "skyblocker.fishing.reelNow": "Şimdi sarıl!", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Devre dışı", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtrele", + "text.autoconfig.skyblocker.option.messages.hideAbility": "Yetenek bekleme süresini filtrele", + "text.autoconfig.skyblocker.option.messages.chatFilterResult.ACTION_BAR": "Aksiyon barına taşı", + "text.autoconfig.skyblocker.option.messages.hideHeal": "İyileştirme mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "AOTE mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMoltenWave": "Molten Wave mesajını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAds": "Genel sohbetteki reklamları filtrele", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "Teleport Pad mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideCombo": "Kombo mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "Autopet mesajlarını filtrele", + "text.autoconfig.skyblocker.option.messages.hideMana": "Aksiyon barındaki mana tüketimlerini gizle", + "text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar", + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Güncelleme Bildirimleri", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2API anahtarınız otomatik olarak kaydedildi!", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.y": "Y", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.x": "X", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Arka planı göster", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Etkinleştir", + "text.autoconfig.skyblocker.option.general.itemTooltip.avg.@Tooltip": "Kaç günlük ortalamanın gösterileceğini seçebilirsiniz", + "text.autoconfig.skyblocker.option.general.itemTooltip.enableLowestBIN": "En düşük BIN fiyatını göster", + "text.autoconfig.skyblocker.option.richPresence.enableRichPresence": "Aktif", + "skyblocker.update.update_message": "§b[§6Skyblocker§b] §2Yeni bir sürüm mevcut!", + "text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Puzzler'ın bulmacasını çöz", + "key.hotbarSlotLock": "Slot Kilidi (Araç Çubuğu)", + "key.wikiLookup": "Wiki Araması", + "text.autoconfig.skyblocker.title": "Skyblocker Ayarları", + "text.autoconfig.skyblocker.category.general": "Genel", + "text.autoconfig.skyblocker.option.general.bars": "Can, Mana, Defans ve XP Barları", + "text.autoconfig.skyblocker.option.general.bars.enableBars": "Barları Etkinleştir", + "text.autoconfig.skyblocker.option.general.bars.barpositions": "Bar Konumları", + "text.autoconfig.skyblocker.option.general.bars.barpositions.NONE": "Devre dışı", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "Can barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defans barı konumu", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Tecrübe barı konumu", + "key.categories.skyblocker": "Skyblocker", + "skyblocker.updaterepository.failed": "§b[§6Skyblocker§b] §cYerel depo güncellenemedi. Dosyaları manuel olarak silip oyunu tekrar başlatın.", + "text.autoconfig.skyblocker.option.general.fishing": "Balık Tutma Yardımcısı", + "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Balık tutma yardımcısını aktifleştir", + "text.autoconfig.skyblocker.category.messages": "Mesajlar", + "text.autoconfig.skyblocker.option.messages.hideImplosion": "Implosion mesajını filtrele" +} -- cgit From 5d7e3a16f76682473ff483d8cdf23e441702cc31 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sat, 10 Jun 2023 01:42:22 +0200 Subject: add new contributor to readme and mod desc. --- FEATURES.md | 16 +++++++++------ README.md | 42 +++++++++++++++++++++++++++++--------- src/main/resources/fabric.mod.json | 2 +- 3 files changed, 43 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/FEATURES.md b/FEATURES.md index 1cd95a1e..2224465e 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -2,14 +2,15 @@ * Hide Messages: Ability Cooldown, Heal, AOTE, Implosion, Molten Wave, Teleport Pad Messages * Dungeon Minimap * Dungeon Puzzle Solver: - * Three Weirdos - * Blaze - * Croesus - * F7 Terminal: Order, Color, Name + * Three Weirdos + * Blaze + * Croesus + * F7 Terminal: Order, Color, Name * Dwarven Mines Solver: Fetchur, Puzzler +* Barn Solver: Treasurehunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) -* price tooltip: npc, bazaar (avg, lbin), ah, museum +* Price tooltip: npc, bazaar (avg, lbin), ah, museum * reparty: write /rp to reparty * Wiki Lookup: press f4 to open the wiki page about the held item * Discord Rich Presence: Allows user to show either their Piggy, Bits, or location. Along with a custom message @@ -20,4 +21,7 @@ hold shift to preview * Update notification * Commission HUD: Dwarven Mines quests -* 1.8 hitbox for lever and farmland \ No newline at end of file +* 1.8 hitbox for lever and farmland +* Custom Tab HUD +* Roughly enough items (REI) Support +* Fishing Helper \ No newline at end of file diff --git a/README.md b/README.md index 59e8a7fa..88720029 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,10 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in * Croesus * F7 Terminal: Order, Color, Name * Dwarven Mines Solver: Fetchur, Puzzler +* Barn Solver: Treasurehunter, Hungry Hiker * Drill Fuel in Item Durability Bar * Hotbar Slot Lock Keybind (Select the hotbar slot you want to lock/unlock and press the lockbutton) -* price tooltip: npc, bazaar (avg, lbin), ah, museum +* Price tooltip: npc, bazaar (avg, lbin), ah, museum * reparty: write /rp to reparty * Wiki Lookup: press f4 to open the wiki page about the held item * Discord Rich Presence: Allows user to show either their Piggy, Bits, or location. Along with a custom message @@ -40,11 +41,22 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in * Update notification * Commission HUD: Dwarven Mines quests * 1.8 hitbox for lever and farmland +* Custom Tab HUD +* Roughly enough items (REI) Support +* Fishing Helper ___ +## Commands +| command | option | comment | +|:----------------------------:|:--------------------:|:--------------------------------------| +| /skyblocker config | | open config menu (modMenu not needed) | +| /skyblocker options | | open config menu (modMenu not needed) | +| /skyblocker hud | dwarven / dungeonmap | move dwarven or dungeonmap | + +--- ## Images
@@ -81,18 +93,28 @@ information. | [Zailer43](https://github.com/Zailer43) | [TacoMonkey11](https://github.com/TacoMonkey11) | [KonaeAkira](https://github.com/KonaeAkira) | [Fix3dll](https://github.com/Fix3dll) | | [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [MiraculixxT](https://github.com/MiraculixxT) | -|:--------------------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------| -| [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [ADON15c](https://github.com/MiraculixxT) | +|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------:| +| [ADON15c](https://github.com/ADON15c) | [TheColdPot](https://github.com/TheColdPot) | [Julienraptor01](https://github.com/Julienraptor01) | [MiraculixxT](https://github.com/MiraculixxT) | + +| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | [msg-programs](https://github.com/msg-programs) | +|:--------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------:| +| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | [msg-programs](https://github.com/msg-programs) | -| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | -|:--------------------------------------------------------------------------------------------------:|-------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------| -| [catandA](https://github.com/catandA) | [kevinthegreat1](https://github.com/kevinthegreat1) | [AzureAaron](https://github.com/AzureAaron) | +| [lantice3720](https://github.com/lantice3720) | +|:-----------------------------------------------------------------------------------------------------| +| [lantice3720](https://github.com/lantice3720) | ### Translators -German ([LifeIsAParadox](https://github.com/LifeIsAParadox)) \ +German ([LifeIsAParadox](https://github.com/LifeIsAParadox) & [msg-programs](https://github.com/msg-programs)) \ Indonesian ([null2264](https://github.com/null2264)) \ -Russian ([HyperSoop](https://github.com/HyperSoop)) \ +Russian ([HyperSoop](https://github.com/HyperSoop) & [Azuremane](https://github.com/Azuremane)) \ French ([edgarogh](https://github.com/edgarogh) & [Julienraptor01](https://github.com/Julienraptor01)) \ -Japanese ([hirochisan](https://github.com/@irochisan)) \ -Chinese ([catandA](https://github.com/catandA)) +Japanese ([hirochisan](https://github.com/hirochisan)) \ +Chinese ([catandA](https://github.com/catandA)) \ +Korean ([lantice3720](https://github.com/lantice3720)) \ +Spanish ([IngeSebastian](https://github.com/IngeSebastian)) \ +Norwegian Bokmål ([KdGaming0](https://github.com/KdGaming0)) \ +Norwegian Nynorsk ([KdGaming0](https://github.com/KdGaming0)) \ +Turkish ([Fix3dll](https://github.com/Fix3dll)) \ +Chinese (Simplified) ([catandA](https://github.com/catandA) & [PumpkinXD](https://github.com/PumpkinXD)) \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 2044b170..14c1e6f1 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -5,7 +5,7 @@ "name": "Skyblocker", "description": "Hypixel Skyblock Mod", "authors": ["xMrVizzy", "d3dx9", "LifeIsAParadox"], - "contributors": ["ExternalTime", "Zailer43", "TacoMonkey", "KonaeAkira", "Fix3dll", "null2264", "HyperSoop", "edgarogh", "TheColdPot", "Julienraptor01", "ADON15c", "catandA", "kevinthegreat1", "AzureAaron"], + "contributors": ["ExternalTime", "Zailer43", "TacoMonkey", "KonaeAkira", "Fix3dll", "null2264", "HyperSoop", "edgarogh", "TheColdPot", "Julienraptor01", "ADON15c", "catandA", "kevinthegreat1", "AzureAaron", "msg-programs", "lantice3720"], "contact": { "homepage": "https://hysky.de", "sources": "https://github.com/SkyblockerMod/Skyblocker", -- cgit From a1573035470922daf368f74bb2aa1c41431c0c97 Mon Sep 17 00:00:00 2001 From: Yasin Date: Sun, 11 Jun 2023 19:24:51 +0200 Subject: Rename zh_Hant.json to zh_tw.json --- .../resources/assets/skyblocker/lang/zh_Hant.json | 24 ---------------------- .../resources/assets/skyblocker/lang/zh_tw.json | 24 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 24 deletions(-) delete mode 100644 src/main/resources/assets/skyblocker/lang/zh_Hant.json create mode 100644 src/main/resources/assets/skyblocker/lang/zh_tw.json (limited to 'src') diff --git a/src/main/resources/assets/skyblocker/lang/zh_Hant.json b/src/main/resources/assets/skyblocker/lang/zh_Hant.json deleted file mode 100644 index 3613757e..00000000 --- a/src/main/resources/assets/skyblocker/lang/zh_Hant.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "text.autoconfig.skyblocker.title": "Skyblocker設定", - "text.autoconfig.skyblocker.category.general": "一般設定", - "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "血量條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "魔力條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "防禦條位置", - "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "經驗条位置", - "key.wikiLookup": "查閱Wiki", - "key.hotbarSlotLock": "鎖定快捷欄", - "key.categories.skyblocker": "Skyblocker", - "text.autoconfig.skyblocker.option.messages.hideAOTE": "隱藏終焉之貌的提示訊息", - "text.autoconfig.skyblocker.option.messages.hideAds": "从公頻訊息中隱藏廣告", - "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隱藏傳送點訊息", - "text.autoconfig.skyblocker.option.messages.hideCombo": "隱藏連殺訊息", - "text.autoconfig.skyblocker.option.messages.hideAutopet": "隱藏自動寵物訊息", - "skyblocker.update.hover_text": "打開Modrinth", - "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隱藏選單玻璃物品資訊\"", - "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2已自动設定你的API金鑰!", - "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷欄右側", - "text.autoconfig.skyblocker.option.messages.hideAbility": "隱藏技能冷卻", - "text.autoconfig.skyblocker.option.messages.hideHeal": "隱藏治療訊息", - "text.autoconfig.skyblocker.option.messages.hideMana": "在動作欄中隱藏魔力消耗的提示訊息", - "text.autoconfig.skyblocker.option.general.bars": "血量,魔力,防御以及經驗計量條" -} diff --git a/src/main/resources/assets/skyblocker/lang/zh_tw.json b/src/main/resources/assets/skyblocker/lang/zh_tw.json new file mode 100644 index 00000000..3613757e --- /dev/null +++ b/src/main/resources/assets/skyblocker/lang/zh_tw.json @@ -0,0 +1,24 @@ +{ + "text.autoconfig.skyblocker.title": "Skyblocker設定", + "text.autoconfig.skyblocker.category.general": "一般設定", + "text.autoconfig.skyblocker.option.general.bars.barpositions.healthBarPosition": "血量條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "魔力條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "防禦條位置", + "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "經驗条位置", + "key.wikiLookup": "查閱Wiki", + "key.hotbarSlotLock": "鎖定快捷欄", + "key.categories.skyblocker": "Skyblocker", + "text.autoconfig.skyblocker.option.messages.hideAOTE": "隱藏終焉之貌的提示訊息", + "text.autoconfig.skyblocker.option.messages.hideAds": "从公頻訊息中隱藏廣告", + "text.autoconfig.skyblocker.option.messages.hideTeleportPad": "隱藏傳送點訊息", + "text.autoconfig.skyblocker.option.messages.hideCombo": "隱藏連殺訊息", + "text.autoconfig.skyblocker.option.messages.hideAutopet": "隱藏自動寵物訊息", + "skyblocker.update.hover_text": "打開Modrinth", + "text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "隱藏選單玻璃物品資訊\"", + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2已自动設定你的API金鑰!", + "text.autoconfig.skyblocker.option.general.bars.barpositions.RIGHT": "快捷欄右側", + "text.autoconfig.skyblocker.option.messages.hideAbility": "隱藏技能冷卻", + "text.autoconfig.skyblocker.option.messages.hideHeal": "隱藏治療訊息", + "text.autoconfig.skyblocker.option.messages.hideMana": "在動作欄中隱藏魔力消耗的提示訊息", + "text.autoconfig.skyblocker.option.general.bars": "血量,魔力,防御以及經驗計量條" +} -- cgit From 826a6d8fd9a38c794eb70b7a71aa969dfddd685c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 17 Jun 2023 00:01:19 -0400 Subject: Add sound notification to fishing helper --- src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java index 790b27bf..d82464e1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FishingHelper.java @@ -8,8 +8,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket; +import net.minecraft.sound.SoundEvent; import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; import net.minecraft.util.TypedActionResult; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; @@ -51,6 +53,7 @@ public class FishingHelper { if (Math.abs(normalYawVector.x * soundToFishHook.z - normalYawVector.z * soundToFishHook.x) < 0.2D && Math.abs(normalYawVector.dotProduct(soundToFishHook)) < 4D && player.getPos().squaredDistanceTo(packet.getX(), packet.getY(), packet.getZ()) > 1D) { client.inGameHud.setTitleTicks(0, 10, 5); client.inGameHud.setTitle(Text.translatable("skyblocker.fishing.reelNow").formatted(Formatting.GREEN)); + player.playSound(SoundEvent.of(new Identifier("minecraft", "entity.experience_orb.pickup")), 100f, 0.1f); reset(); } } else { -- cgit From b28a20421348c3385022deeb3cb1ea0ea74928af Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 May 2023 01:54:39 -0400 Subject: 1.20 Port The game launches successfully without any crashes! --- gradle.properties | 8 +-- .../skyblocker/gui/ContainerSolverManager.java | 13 ++--- .../skyblocker/mixin/DrawContextMixin.java | 60 ++++++++++++++++++++++ .../skyblocker/mixin/HandledScreenMixin.java | 13 +++-- .../xmrvizzy/skyblocker/mixin/InGameHudMixin.java | 32 ++++++------ .../skyblocker/mixin/ItemRendererMixin.java | 60 ---------------------- .../skyblocker/mixin/PlayerListHudMixin.java | 8 +-- .../me/xmrvizzy/skyblocker/mixin/ScreenMixin.java | 24 --------- .../skyblocker/skyblock/BackpackPreview.java | 17 +++--- .../skyblocker/skyblock/FancyStatusBars.java | 37 ++++++------- .../skyblocker/skyblock/dungeon/DungeonMap.java | 8 ++- .../skyblock/dungeon/DungeonMapConfigScreen.java | 12 ++--- .../skyblocker/skyblock/dwarven/DwarvenHud.java | 32 ++++++------ .../skyblock/dwarven/DwarvenHudConfigScreen.java | 11 ++-- .../skyblock/itemlist/ItemListWidget.java | 24 ++++----- .../skyblock/itemlist/ResultButtonWidget.java | 27 ++++++---- .../skyblock/itemlist/SearchResultsWidget.java | 23 +++++---- .../skyblock/quicknav/QuickNavButton.java | 20 ++++---- .../skyblocker/skyblock/tabhud/screens/Screen.java | 5 +- .../skyblocker/skyblock/tabhud/widget/Widget.java | 37 ++++++------- .../tabhud/widget/component/Component.java | 5 +- .../widget/component/IcoFatTextComponent.java | 10 ++-- .../tabhud/widget/component/IcoTextComponent.java | 8 +-- .../widget/component/PlainTextComponent.java | 6 +-- .../tabhud/widget/component/PlayerComponent.java | 11 ++-- .../tabhud/widget/component/ProgressComponent.java | 15 +++--- .../tabhud/widget/component/TableComponent.java | 9 ++-- .../me/xmrvizzy/skyblocker/utils/ToastBuilder.java | 16 +++--- src/main/resources/fabric.mod.json | 4 +- src/main/resources/skyblocker.mixins.json | 6 +-- 30 files changed, 272 insertions(+), 289 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java (limited to 'src') diff --git a/gradle.properties b/gradle.properties index 64c5e5cd..7b8af977 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,19 +2,19 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.19.4 -yarn_mappings=1.19.4+build.2 +minecraft_version=1.20-pre1 +yarn_mappings=1.20-pre1+build.4 loader_version=0.14.19 #Fabric api ## 1.19.4 -fabric_api_version=0.81.1+1.19.4 +fabric_api_version=0.80.2+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) clothconfig_version=10.0.96 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) -mod_menu_version=6.1.0-rc.4 +mod_menu_version=7.0.0-beta.2 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) rei_version=11.0.597 diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index e4ff229d..354e7e3a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -8,7 +8,7 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; @@ -24,7 +24,7 @@ import java.util.regex.Pattern; /** * Manager class for {@link ContainerSolver}s like terminal solvers and experiment solvers. To add a new gui solver, extend {@link ContainerSolver} and register it in {@link #ContainerSolverManager()}. */ -public class ContainerSolverManager extends DrawableHelper { +public class ContainerSolverManager { private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); private final ContainerSolver[] solvers; private ContainerSolver currentSolver = null; @@ -43,10 +43,11 @@ public class ContainerSolverManager extends DrawableHelper { public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { - ScreenEvents.afterRender(screen).register((screen1, matrices, mouseX, mouseY, delta) -> { + ScreenEvents.afterRender(screen).register((screen1, context, mouseX, mouseY, delta) -> { + MatrixStack matrices = context.getMatrices(); matrices.push(); matrices.translate(((HandledScreenAccessor) genericContainerScreen).getX(), ((HandledScreenAccessor) genericContainerScreen).getY(), 300); - onDraw(matrices, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); + onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); matrices.pop(); }); onSetScreen(genericContainerScreen); @@ -83,7 +84,7 @@ public class ContainerSolverManager extends DrawableHelper { highlights = null; } - public void onDraw(MatrixStack matrices, List slots) { + public void onDraw(DrawContext context, List slots) { if (currentSolver == null) return; if (highlights == null) @@ -93,7 +94,7 @@ public class ContainerSolverManager extends DrawableHelper { for (ColorHighlight highlight : highlights) { Slot slot = slots.get(highlight.slot()); int color = highlight.color(); - fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); + context.fillGradient(slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); } RenderSystem.colorMask(true, true, true, true); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java new file mode 100644 index 00000000..ccbeaca2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -0,0 +1,60 @@ +package me.xmrvizzy.skyblocker.mixin; + +import java.awt.Color; +import java.util.regex.Pattern; + +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.blaze3d.systems.RenderSystem; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.ItemUtils; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.util.math.ColorHelper; + +@Mixin(DrawContext.class) +public abstract class DrawContextMixin { + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) + public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { + + if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { + if (!stack.isEmpty()) { + NbtCompound tag = stack.getNbt(); + if (tag != null && tag.contains("ExtraAttributes")) { + if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { + float current = 3000.0F; + float max = 3000.0F; + + for (String line : ItemUtils.getTooltipStrings(stack)) { + if (line.contains("Fuel: ")) { + String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); + String[] split = clear.split("/"); + current = Integer.parseInt(split[0]); + max = Integer.parseInt(split[1]) * 1000; + break; + } + } + + DrawContext context = ((DrawContext) (Object) this); + + RenderSystem.disableDepthTest(); + float hue = Math.max(0.0F, 1.0F - (max - current) / max); + int width = Math.round(current / max * 13.0F); + Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); + context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); + context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + RenderSystem.enableDepthTest(); + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 2d200a86..30aa1ed2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -3,9 +3,10 @@ package me.xmrvizzy.skyblocker.mixin; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.screen.slot.Slot; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; @@ -36,12 +37,18 @@ public abstract class HandledScreenMixin extends Screen { } @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) - public void skyblocker$drawMouseOverTooltip(MatrixStack matrices, int x, int y, CallbackInfo ci) { + public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { + //Hide Empty Tooltips + Text stackName = focusedSlot.getStack().getName(); + String strName = stackName.getString(); + if(this.focusedSlot != null && Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + + //Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { if (this.focusedSlot.inventory == this.client.player.getInventory()) return; - if (BackpackPreview.renderPreview(matrices, this.focusedSlot.getIndex(), x, y)) ci.cancel(); + if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java index e17795ab..335737a1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/InGameHudMixin.java @@ -1,6 +1,5 @@ package me.xmrvizzy.skyblocker.mixin; -import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.FancyStatusBars; @@ -10,13 +9,14 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -26,7 +26,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Environment(EnvType.CLIENT) @Mixin(InGameHud.class) -public abstract class InGameHudMixin extends DrawableHelper { +public abstract class InGameHudMixin { + //@Shadow + //@Final + //private static Identifier ICONS = new Identifier("textures/gui/icons.png"); @Unique private static final Identifier SLOT_LOCK = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/slot_lock.png"); @Unique @@ -35,7 +38,7 @@ public abstract class InGameHudMixin extends DrawableHelper { @Unique private final FancyStatusBars statusBars = new FancyStatusBars(); @Unique - private MatrixStack hotbarMatrices; + private DrawContext hotbarContext; @Unique private int hotbarSlotIndex; @@ -62,45 +65,44 @@ public abstract class InGameHudMixin extends DrawableHelper { } @Inject(method = "renderHotbar", at = @At("HEAD")) - public void skyblocker$renderHotbar(float f, MatrixStack matrices, CallbackInfo ci) { + public void skyblocker$renderHotbar(float f, DrawContext context, CallbackInfo ci) { if (Utils.isOnSkyblock()) { - hotbarMatrices = matrices; + hotbarContext = context; hotbarSlotIndex = 0; } } @Inject(method = "renderHotbarItem", at = @At("HEAD")) - public void skyblocker$renderHotbarItem(MatrixStack matrices, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { + public void skyblocker$renderHotbarItem(DrawContext context, int i, int j, float f, PlayerEntity player, ItemStack stack, int seed, CallbackInfo ci) { if (Utils.isOnSkyblock()) { if (HotbarSlotLock.isLocked(hotbarSlotIndex)) { - RenderSystem.setShaderTexture(0, SLOT_LOCK); - DrawableHelper.drawTexture(hotbarMatrices, i, j, 0, 0, 16, 16); + hotbarContext.drawTexture(SLOT_LOCK, i, j, 0, 0, 16, 16); } hotbarSlotIndex++; } } @Inject(method = "renderExperienceBar", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderExperienceBar(MatrixStack matrices, int x, CallbackInfo ci) { + private void skyblocker$renderExperienceBar(DrawContext context, int x, CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } @Inject(method = "renderStatusBars", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderStatusBars(MatrixStack matrices, CallbackInfo ci) { + private void skyblocker$renderStatusBars(DrawContext context, CallbackInfo ci) { if (!Utils.isOnSkyblock()) return; - if (statusBars.render(matrices, scaledWidth, scaledHeight)) + if (statusBars.render(context, scaledWidth, scaledHeight)) ci.cancel(); if (Utils.isInDungeons() && SkyblockerConfig.get().locations.dungeons.enableMap) - DungeonMap.render(matrices); + DungeonMap.render(context.getMatrices()); - RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE); + //RenderSystem.setShaderTexture(0, ICONS); } @Inject(method = "renderMountHealth", at = @At("HEAD"), cancellable = true) - private void skyblocker$renderMountHealth(MatrixStack matrices, CallbackInfo ci) { + private void skyblocker$renderMountHealth(DrawContext context, CallbackInfo ci) { if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.bars.enableBars) ci.cancel(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java deleted file mode 100644 index 26bafc14..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ItemRendererMixin.java +++ /dev/null @@ -1,60 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import java.awt.Color; -import java.util.regex.Pattern; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import com.mojang.blaze3d.systems.RenderSystem; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.ItemUtils; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.util.math.ColorHelper; - -@Mixin(ItemRenderer.class) -public abstract class ItemRendererMixin { - @Inject(method = "renderGuiItemOverlay(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) - public void skyblocker$renderItemBar(MatrixStack matrices, TextRenderer renderer, ItemStack stack, int x, int y, @Nullable String countLabel, CallbackInfo ci) { - - if (Utils.isOnSkyblock() && SkyblockerConfig.get().locations.dwarvenMines.enableDrillFuel) { - if (!stack.isEmpty()) { - NbtCompound tag = stack.getNbt(); - if (tag != null && tag.contains("ExtraAttributes")) { - if (tag.getCompound("ExtraAttributes").contains("drill_fuel")) { - float current = 3000.0F; - float max = 3000.0F; - - for (String line : ItemUtils.getTooltipStrings(stack)) { - if (line.contains("Fuel: ")) { - String clear = Pattern.compile("[^0-9 /]").matcher(line).replaceAll("").trim(); - String[] split = clear.split("/"); - current = Integer.parseInt(split[0]); - max = Integer.parseInt(split[1]) * 1000; - break; - } - } - - RenderSystem.disableDepthTest(); - float hue = Math.max(0.0F, 1.0F - (max - current) / max); - int width = Math.round(current / max * 13.0F); - Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - DrawableHelper.fill(matrices, x + 2, y + 13, x + 15, y + 15, 0xFF000000); - DrawableHelper.fill(matrices, x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); - RenderSystem.enableDepthTest(); - } - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java index b5403ae2..ef65190f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/PlayerListHudMixin.java @@ -13,9 +13,9 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.PlayerListHud; import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.text.Text; @@ -27,8 +27,8 @@ public class PlayerListHudMixin { @Shadow private Text footer; - @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) - public void skyblocker$renderTabHud(MatrixStack ms, int scaledW, Scoreboard sb, ScoreboardObjective sbo, + @Inject(at = @At("HEAD"), method = "render(Lnet/minecraft/client/gui/DrawContext;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V", cancellable = true) + public void skyblocker$renderTabHud(DrawContext context, int scaledW, Scoreboard sb, ScoreboardObjective sbo, CallbackInfo info) { if (!Utils.isOnSkyblock() @@ -47,7 +47,7 @@ public class PlayerListHudMixin { int h = MinecraftClient.getInstance().getWindow().getScaledHeight(); try { Screen screen = Screen.getCorrect(w, h, footer); - screen.render(ms); + screen.render(context); info.cancel(); } catch (Exception e) { TabHud.LOGGER.error("Drawing default hud. Reason: Screen exception {}", e); diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java deleted file mode 100644 index 9389b792..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ScreenMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package me.xmrvizzy.skyblocker.mixin; - -import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -import me.xmrvizzy.skyblocker.utils.Utils; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Screen.class) -public abstract class ScreenMixin { - @Inject(at = @At("HEAD"), method = "renderTooltip(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/item/ItemStack;II)V", cancellable = true) - public void skyblocker$renderTooltip(MatrixStack matrices, ItemStack itemStack, int x, int y, CallbackInfo ci) { - Text stackName = itemStack.getName(); - String strName = stackName.getString(); - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) { - ci.cancel(); - } - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index 4820bc0f..e35ef605 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -7,7 +7,7 @@ import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.network.PlayerListEntry; @@ -27,7 +27,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class BackpackPreview extends DrawableHelper { +public class BackpackPreview { private static final Identifier TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/inventory_background.png"); private static final BackpackPreview instance = new BackpackPreview(); private static final Pattern PROFILE_PATTERN = Pattern.compile("Profile: ([a-zA-Z]+)"); @@ -135,7 +135,7 @@ public class BackpackPreview extends DrawableHelper { } } - public static boolean renderPreview(MatrixStack matrices, int index, int mouseX, int mouseY) { + public static boolean renderPreview(DrawContext context, int index, int mouseX, int mouseY) { if (index >= 9 && index < 18) index -= 9; else if (index >= 27 && index < 45) index -= 18; else return false; @@ -149,12 +149,13 @@ public class BackpackPreview extends DrawableHelper { RenderSystem.disableDepthTest(); RenderSystem.setShaderTexture(0, TEXTURE); - BackpackPreview.drawTexture(matrices, x, y, 0, 0, 176, 7); + context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7); for (int i = 0; i < rows; ++i) - BackpackPreview.drawTexture(matrices, x, y + i * 18 + 7, 0, 7, 176, 18); - BackpackPreview.drawTexture(matrices, x, y + rows * 18 + 7, 0, 25, 176, 7); + context.drawTexture(TEXTURE, x, y + i * 18 + 7, 0, 7, 176, 18); + context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 25, 176, 7); RenderSystem.enableDepthTest(); + MatrixStack matrices = context.getMatrices(); ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer(); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; for (int i = 9; i < storage[index].size(); ++i) { @@ -162,8 +163,8 @@ public class BackpackPreview extends DrawableHelper { int itemY = y + (i - 9) / 9 * 18 + 8; matrices.push(); matrices.translate(0, 0, 200); - itemRenderer.renderInGui(matrices, storage[index].getStack(i), itemX, itemY); - itemRenderer.renderGuiItemOverlay(matrices, textRenderer, storage[index].getStack(i), itemX, itemY); + context.drawItem(storage[index].getStack(i), itemX, itemY); + context.drawItemInSlot(textRenderer, storage[index].getStack(i), itemX, itemY); matrices.pop(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java index 05b57410..6af06e6d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FancyStatusBars.java @@ -1,15 +1,13 @@ package me.xmrvizzy.skyblocker.skyblock; -import com.mojang.blaze3d.systems.RenderSystem; import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.util.Identifier; -public class FancyStatusBars extends DrawableHelper { +public class FancyStatusBars { private static final Identifier BARS = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/bars.png"); private final MinecraftClient client = MinecraftClient.getInstance(); @@ -39,7 +37,7 @@ public class FancyStatusBars extends DrawableHelper { return (100 * value) / max; } - public boolean render(MatrixStack matrices, int scaledWidth, int scaledHeight) { + public boolean render(DrawContext context, int scaledWidth, int scaledHeight) { var player = client.player; if (!SkyblockerConfig.get().general.bars.enableBars || player == null) return false; @@ -72,11 +70,10 @@ public class FancyStatusBars extends DrawableHelper { moveBar(i, configAnchorNum); } - RenderSystem.setShaderTexture(0, BARS); for (var bar : bars) - bar.draw(matrices); + bar.draw(context); for (var bar : bars) - bar.drawText(matrices); + bar.drawText(context); return true; } @@ -143,32 +140,32 @@ public class FancyStatusBars extends DrawableHelper { this.text = val; } - public void draw(MatrixStack matrices) { + public void draw(DrawContext context) { // Dont draw if anchorNum is outside of range if (anchorNum < 0 || anchorNum > 2) return; // Draw the icon for the bar - drawTexture(matrices, anchorsX[anchorNum] + offsetX, anchorsY[anchorNum], 0, v, 9, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX, anchorsY[anchorNum], 0, v, 9, 9); // Draw the background for the bar - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10, anchorsY[anchorNum], 10, v, 2, 9); for (int i = 2; i < bar_width - 2; i += 58) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, Math.min(58, bar_width - 2 - i), 9); - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 70, v, 2, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + i, anchorsY[anchorNum], 12, v, Math.min(58, bar_width - 2 - i), 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 10 + bar_width - 2, anchorsY[anchorNum], 70, v, 2, 9); // Draw the filled part of the bar for (int i = 0; i < fill.length; i++) { int fill_width = this.fill[i] * (bar_width - 2) / 100; if (fill_width >= 1) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i*60, v, 1, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11, anchorsY[anchorNum], 72 + i*60, v, 1, 9); for (int j = 1; j < fill_width - 1; j += 58) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i*60, v, Math.min(58, fill_width - 1 - j), 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + j, anchorsY[anchorNum], 73 + i*60, v, Math.min(58, fill_width - 1 - j), 9); if (fill_width == bar_width - 2) - drawTexture(matrices, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i*60, v, 1, 9); + context.drawTexture(BARS, anchorsX[anchorNum] + offsetX + 11 + fill_width - 1, anchorsY[anchorNum], 131 + i*60, v, 1, 9); } } - public void drawText(MatrixStack matrices) { + public void drawText(DrawContext context) { // Dont draw if anchorNum is outside of range if (anchorNum < 0 || anchorNum > 2) return; @@ -179,10 +176,10 @@ public class FancyStatusBars extends DrawableHelper { final int[] offsets = new int[]{-1, 1}; for (int i : offsets) { - textRenderer.draw(matrices, text, (float) (x + i), (float) y, 0); - textRenderer.draw(matrices, text, (float) x, (float) (y + i), 0); + context.drawText(textRenderer, text, x + i, y, 0, false); + context.drawText(textRenderer, text, x, y + i, 0, false); } - textRenderer.draw(matrices, text, (float) x, (float) y, text_color); + context.drawText(textRenderer, text, x, y, text_color, false); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java index e5441b5c..2a97d0ee 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMap.java @@ -2,14 +2,13 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import org.apache.commons.lang3.StringUtils; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.brigadier.Command; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.MapRenderer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; @@ -50,11 +49,10 @@ public class DungeonMap { } } - public static void renderHUDMap(MatrixStack matrices, int x, int y) { + public static void renderHUDMap(DrawContext context, int x, int y) { float scaling = SkyblockerConfig.get().locations.dungeons.mapScaling; int size = (int) (128 * scaling); - RenderSystem.setShaderTexture(0, MAP_BACKGROUND); - DrawableHelper.drawTexture(matrices, x, y, 0, 0, size, size, size, size); + context.drawTexture(MAP_BACKGROUND, x, y, 0, 0, size, size, size, size); } public static void init() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java index 8fba6a7a..ffd7a8b6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/DungeonMapConfigScreen.java @@ -5,8 +5,8 @@ import java.awt.Color; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; public class DungeonMapConfigScreen extends Screen { @@ -19,11 +19,11 @@ public class DungeonMapConfigScreen extends Screen { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); - renderBackground(matrices); - DungeonMap.renderHUDMap(matrices, hudX, hudY); - drawCenteredTextWithShadow(matrices, textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + renderBackground(context); + DungeonMap.renderHUDMap(context, hudX, hudY); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java index 15f9e58b..122f6c6c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHud.java @@ -6,7 +6,7 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -49,35 +49,35 @@ public class DwarvenHud { return 1; }))))); - HudRenderCallback.EVENT.register((matrixStack, tickDelta) -> { + HudRenderCallback.EVENT.register((context, tickDelta) -> { if (!SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enabled || client.options.playerListKey.isPressed() || client.player == null || commissionList.isEmpty()) { return; } - render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); + render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.x, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.y, commissionList); }); } - public static void render(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void render(DrawContext context, int hudX, int hudY, List commissions) { switch(SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.style) { - case SIMPLE -> renderSimple(matrixStack, hudX, hudY, commissions); - case FANCY -> renderFancy(matrixStack, hudX, hudY, commissions); - case CLASSIC -> renderClassic(matrixStack, hudX, hudY, commissions); + case SIMPLE -> renderSimple(context, hudX, hudY, commissions); + case FANCY -> renderFancy(context, hudX, hudY, commissions); + case CLASSIC -> renderClassic(context, hudX, hudY, commissions); } } - public static void renderClassic(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderClassic(DrawContext context, int hudX, int hudY, List commissions) { if (SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground) { - DrawableHelper.fill(matrixStack, hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); + context.fill(hudX, hudY, hudX + 200, hudY + (20 * commissions.size()), 0x64000000); } int y = 0; for (Commission commission : commissions) { - client.textRenderer - .drawWithShadow(matrixStack, + context + .drawTextWithShadow(client.textRenderer, Text.literal(commission.commission + ": ") .styled(style -> style.withColor(Formatting.AQUA)) .append(Text.literal(commission.progression) @@ -87,18 +87,18 @@ public class DwarvenHud { } } - public static void renderSimple(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderSimple(DrawContext context, int hudX, int hudY, List commissions) { CommsWidget cw = new CommsWidget(commissions, false); cw.setX(hudX); cw.setY(hudY); - cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } - public static void renderFancy(MatrixStack matrixStack, int hudX, int hudY, List commissions) { + public static void renderFancy(DrawContext context, int hudX, int hudY, List commissions) { CommsWidget cw = new CommsWidget(commissions, true); cw.setX(hudX); cw.setY(hudY); - cw.render(matrixStack, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); + cw.render(context, SkyblockerConfig.get().locations.dwarvenMines.dwarvenHud.enableBackground); } public static void update() { @@ -121,4 +121,4 @@ public class DwarvenHud { // steamroller tactics to get visibility from outside classes (CommsWidget) public static record Commission(String commission, String progression){} -} +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java index 2d0ba892..f91ed921 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/DwarvenHudConfigScreen.java @@ -3,6 +3,7 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; import me.shedaniel.autoconfig.AutoConfig; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.utils.RenderUtils; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -19,11 +20,11 @@ public class DwarvenHudConfigScreen extends Screen { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); - renderBackground(matrices); - DwarvenHud.render(matrices, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); - drawCenteredTextWithShadow(matrices, textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.render(context, mouseX, mouseY, delta); + renderBackground(context); + DwarvenHud.render(context, hudX, hudY, List.of(new DwarvenHud.Commission("Test Commission 1", "1%"), new DwarvenHud.Commission("Test Commission 2", "2%"))); + context.drawCenteredTextWithShadow(textRenderer, "Right Click To Reset Position", width / 2, height / 2, Color.GRAY.getRGB()); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index d9acc75c..99715e29 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -5,12 +5,11 @@ import me.xmrvizzy.skyblocker.mixin.RecipeBookWidgetAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; -import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.Selectable; import net.minecraft.client.gui.screen.recipebook.RecipeBookWidget; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.screen.AbstractRecipeScreenHandler; import net.minecraft.text.Text; @@ -46,27 +45,26 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void render(DrawContext context, int mouseX, int mouseY, float delta) { if (this.isOpen()) { - matrices.push(); + MatrixStack matrices = context.getMatrices(); + matrices.push(); matrices.translate(0.0D, 0.0D, 100.0D); - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, TEXTURE); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); int i = (this.parentWidth - 147) / 2 - this.leftOffset; int j = (this.parentHeight - 166) / 2; - DrawableHelper.drawTexture(matrices, i, j, 1, 1, 147, 166); + context.drawTexture(TEXTURE, i, j, 1, 1, 147, 166); this.searchField = ((RecipeBookWidgetAccessor)this).getSearchField(); if (!ItemRegistry.filesImported && !this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.literal("Loading...")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); + context.drawTextWithShadow(this.client.textRenderer, hintText, i + 25, j + 14, -1); } else if (!this.searchField.isFocused() && this.searchField.getText().isEmpty()) { Text hintText = (Text.translatable("gui.recipebook.search_hint")).formatted(Formatting.ITALIC).formatted(Formatting.GRAY); - drawTextWithShadow(matrices, this.client.textRenderer, hintText, i + 25, j + 14, -1); + context.drawTextWithShadow(this.client.textRenderer, hintText, i + 25, j + 14, -1); } else { - this.searchField.render(matrices, mouseX, mouseY, delta); + this.searchField.render(context, mouseX, mouseY, delta); } if (ItemRegistry.filesImported){ if (results == null) { @@ -75,16 +73,16 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select this.results = new SearchResultsWidget(this.client, x, y); } this.updateSearchResult(); - this.results.render(matrices, mouseX, mouseY, delta); + this.results.render(context, mouseX, mouseY, delta); } matrices.pop(); } } @Override - public void drawTooltip(MatrixStack matrices, int x, int y, int mouseX, int mouseY) { + public void drawTooltip(DrawContext context, int x, int y, int mouseX, int mouseY) { if (this.isOpen() && ItemRegistry.filesImported && results != null) { - this.results.drawTooltip(matrices, mouseX, mouseY); + this.results.drawTooltip(context, mouseX, mouseY); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java index 41e5469d..8b0fe91d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java @@ -1,17 +1,21 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import java.util.List; +import java.util.function.Function; +import java.util.ArrayList; +import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.text.OrderedText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -36,23 +40,26 @@ public class ResultButtonWidget extends ClickableWidget { } @Override - public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { MinecraftClient client = MinecraftClient.getInstance(); - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, BACKGROUND_TEXTURE); // this.drawTexture(matrices, this.x, this.y, 29, 206, this.width, this.height); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY(), 29, 206, this.getWidth(), this.getHeight()); + context.drawTexture(BACKGROUND_TEXTURE, this.getX(), this.getY(), 29, 206, this.getWidth(), this.getHeight()); // client.getItemRenderer().renderInGui(this.itemStack, this.x + 4, this.y + 4); - client.getItemRenderer().renderInGui(matrices, this.itemStack, this.getX() + 4, this.getY() + 4); + context.drawItem(this.itemStack, this.getX() + 4, this.getY() + 4); // client.getItemRenderer().renderGuiItemOverlay(client.textRenderer, itemStack, this.x + 4, this.y + 4); - client.getItemRenderer().renderGuiItemOverlay(matrices, client.textRenderer, itemStack, this.getX() + 4, this.getY() + 4); + context.drawItemInSlot(client.textRenderer, itemStack, this.getX() + 4, this.getY() + 4); } - public void renderTooltip(MatrixStack matrices, int mouseX, int mouseY) { + public void renderTooltip(DrawContext context, int mouseX, int mouseY) { MinecraftClient client = MinecraftClient.getInstance(); - List tooltip = client.currentScreen.getTooltipFromItem(this.itemStack); + List tooltip = client.currentScreen.getTooltipFromItem(client, this.itemStack); + List orderedTooltip = new ArrayList<>(); + + for(int i = 0; i < tooltip.size(); i++) orderedTooltip.add(tooltip.get(i).asOrderedText()); + // TODO : add null check with log error - client.currentScreen.renderTooltip(matrices, tooltip, mouseX, mouseY); + client.currentScreen.setTooltip(orderedTooltip); + client.currentScreen.renderWithTooltip(context, mouseX, mouseY, mouseY); } @Override diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java index ce53112b..058495a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/SearchResultsWidget.java @@ -2,6 +2,8 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Drawable; import net.minecraft.client.gui.widget.ToggleButtonWidget; import net.minecraft.client.util.math.MatrixStack; @@ -106,32 +108,33 @@ public class SearchResultsWidget implements Drawable { this.nextPageButton.active = this.currentPage < this.pageCount - 1; } - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void render(DrawContext context, int mouseX, int mouseY, float delta) { + TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; RenderSystem.disableDepthTest(); if (this.displayRecipes) { String craftText = this.recipeResults.get(this.currentPage).craftText; - this.client.textRenderer.drawWithShadow(matrices, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); + context.drawTextWithShadow(textRenderer, craftText, this.parentX + 11, this.parentY + 31, 0xffffffff); Text resultText = this.recipeResults.get(this.currentPage).result.getName(); - this.client.textRenderer.drawWithShadow(matrices, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); - this.client.textRenderer.drawWithShadow(matrices, "▶", this.parentX + 96, this.parentY + 90, 0xaaffffff); + context.drawTextWithShadow(textRenderer, resultText, this.parentX + 11, this.parentY + 43, 0xffffffff); + context.drawTextWithShadow(textRenderer, "▶", this.parentX + 96, this.parentY + 90, 0xaaffffff); } for (ResultButtonWidget button : resultButtons) - button.render(matrices, mouseX, mouseY, delta); + button.render(context, mouseX, mouseY, delta); if (this.pageCount > 1) { String string = (this.currentPage + 1) + "/" + this.pageCount; int dx = this.client.textRenderer.getWidth(string) / 2; - this.client.textRenderer.draw(matrices, string, this.parentX - dx + 73, this.parentY + 141, -1); + context.drawText(textRenderer, string, this.parentX - dx + 73, this.parentY + 141, -1, false); } - if (this.prevPageButton.active) this.prevPageButton.render(matrices, mouseX, mouseY, delta); - if (this.nextPageButton.active) this.nextPageButton.render(matrices, mouseX, mouseY, delta); + if (this.prevPageButton.active) this.prevPageButton.render(context, mouseX, mouseY, delta); + if (this.nextPageButton.active) this.nextPageButton.render(context, mouseX, mouseY, delta); RenderSystem.enableDepthTest(); } - public void drawTooltip(MatrixStack matrices, int mouseX, int mouseY) { + public void drawTooltip(DrawContext context, int mouseX, int mouseY) { RenderSystem.disableDepthTest(); for (ResultButtonWidget button : resultButtons) if (button.isMouseOver(mouseX, mouseY)) - button.renderTooltip(matrices, mouseX, mouseY); + button.renderTooltip(context, mouseX, mouseY); RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java index 7269840a..c02463a3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -7,7 +7,7 @@ import me.xmrvizzy.skyblocker.mixin.HandledScreenAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; @@ -64,41 +64,41 @@ public class QuickNavButton extends ClickableWidget { } @Override - public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) { + public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) { this.updateCoordinates(); - RenderSystem.setShaderTexture(0, BUTTON_TEXTURE); + MatrixStack matrices = context.getMatrices(); RenderSystem.disableDepthTest(); // render button background if (!this.toggled) { if (this.index >= 6) // this.drawTexture(matrices, this.x, this.y + 4, this.u, this.v + 4, this.width, this.height - 4); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY() + 4, this.u, this.v + 4, this.width, this.height - 4); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY() + 4, this.u, this.v + 4, this.width, this.height - 4); else // this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height - 4); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY() - 2, this.u, this.v, this.width, this.height - 4); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY() - 2, this.u, this.v, this.width, this.height - 4); // } else this.drawTexture(matrices, this.x, this.y, this.u, this.v, this.width, this.height); } else { matrices.push(); //Move the top buttons 2 pixels up if they're selected if (this.index < 6) matrices.translate(0f, -2f, 0f); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY(), this.u, this.v, this.width, this.height); + context.drawTexture(BUTTON_TEXTURE, this.getX(), this.getY(), this.u, this.v, this.width, this.height); matrices.pop(); } // render button icon if (!this.toggled) { if (this.index >= 6) // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 6); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 6); else // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 7); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 7); } else { if (this.index >= 6) // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 9); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 9); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 9); else // CLIENT.getItemRenderer().renderInGui(this.icon,this.x + 6, this.y + 6); - CLIENT.getItemRenderer().renderInGui(matrices, this.icon,this.getX() + 5, this.getY() + 6); + context.drawItem(this.icon,this.getX() + 5, this.getY() + 6); } RenderSystem.enableDepthTest(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 43b7f956..2ed15f27 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -23,6 +23,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScree import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.PlayerListScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerLocator; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @@ -98,9 +99,9 @@ public class Screen { } } - public void render(MatrixStack ms) { + public void render(DrawContext context) { for (Widget w : widgets) { - w.render(ms); + w.render(context); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java index 6b96c151..33f77933 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/Widget.java @@ -10,7 +10,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.Component; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; @@ -103,14 +103,15 @@ public abstract class Widget { /** * Draw this widget with a background */ - public final void render(MatrixStack ms) { - this.render(ms, true); + public final void render(DrawContext context) { + this.render(context, true); } /** * Draw this widget, possibly with a background */ - public final void render(MatrixStack ms, boolean hasBG) { + public final void render(DrawContext context, boolean hasBG) { + MatrixStack ms = context.getMatrices(); // not sure if this is the way to go, but it fixes Z-layer issues // like blocks being rendered behind the BG and the hotbar clipping into things @@ -123,9 +124,9 @@ public abstract class Widget { // move above other UI elements ms.translate(0, 0, 200); if (hasBG) { - DrawableHelper.fill(ms, x + 1, y, x + w - 1, y + h, COL_BG_BOX); - DrawableHelper.fill(ms, x, y + 1, x + 1, y + h - 1, COL_BG_BOX); - DrawableHelper.fill(ms, x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); + context.fill(x + 1, y, x + w - 1, y + h, COL_BG_BOX); + context.fill(x, y + 1, x + 1, y + h - 1, COL_BG_BOX); + context.fill(x + w - 1, y + 1, x + w, y + h - 1, COL_BG_BOX); } // move above background (if exists) ms.translate(0, 0, 100); @@ -133,19 +134,19 @@ public abstract class Widget { int strHeightHalf = Widget.txtRend.fontHeight / 2; int strAreaWidth = Widget.txtRend.getWidth(title) + 4; - txtRend.draw(ms, title, x + 8, y + 2, this.color); + context.drawText(txtRend, title, x + 8, y + 2, this.color, false); - this.drawHLine(ms, x + 2, y + 1 + strHeightHalf, 4); - this.drawHLine(ms, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); - this.drawHLine(ms, x + 2, y + h - 2, w - 4); + this.drawHLine(context, x + 2, y + 1 + strHeightHalf, 4); + this.drawHLine(context, x + 2 + strAreaWidth + 4, y + 1 + strHeightHalf, w - 4 - 4 - strAreaWidth); + this.drawHLine(context, x + 2, y + h - 2, w - 4); - this.drawVLine(ms, x + 1, y + 2 + strHeightHalf, h - 4 - strHeightHalf); - this.drawVLine(ms, x + w - 2, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + this.drawVLine(context, x + 1, y + 2 + strHeightHalf, h - 4 - strHeightHalf); + this.drawVLine(context, x + w - 2, y + 2 + strHeightHalf, h - 4 - strHeightHalf); int yOffs = y + BORDER_SZE_N; for (Component c : components) { - c.render(ms, x + BORDER_SZE_W, yOffs); + c.render(context, x + BORDER_SZE_W, yOffs); yOffs += c.getHeight() + Component.PAD_L; } // pop manipulations above @@ -153,12 +154,12 @@ public abstract class Widget { RenderSystem.disableDepthTest(); } - private void drawHLine(MatrixStack ms, int xpos, int ypos, int width) { - DrawableHelper.fill(ms, xpos, ypos, xpos + width, ypos + 1, this.color); + private void drawHLine(DrawContext context, int xpos, int ypos, int width) { + context.fill(xpos, ypos, xpos + width, ypos + 1, this.color); } - private void drawVLine(MatrixStack ms, int xpos, int ypos, int height) { - DrawableHelper.fill(ms, xpos, ypos, xpos + 1, ypos + height, this.color); + private void drawVLine(DrawContext context, int xpos, int ypos, int height) { + context.fill(xpos, ypos, xpos + 1, ypos + height, this.color); } /** diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java index 671b1f41..850cb3d2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/Component.java @@ -2,8 +2,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.render.item.ItemRenderer; -import net.minecraft.client.util.math.MatrixStack; /** * Abstract base class for a component that may be added to a Widget. @@ -15,12 +15,11 @@ public abstract class Component { public static final int PAD_L = 4; static TextRenderer txtRend = MinecraftClient.getInstance().textRenderer; - static ItemRenderer itmRend = MinecraftClient.getInstance().getItemRenderer(); // these should always be the content dimensions without any padding. int width, height; - public abstract void render(MatrixStack ms, int x, int y); + public abstract void render(DrawContext context, int x, int y); public int getWidth() { return this.width; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java index f845eba5..afd05c26 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoFatTextComponent.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -36,10 +36,10 @@ public class IcoFatTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, line1, x + ICO_DIM + PAD_L, y, 0xffffffff); - txtRend.draw(ms, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y + ICO_OFFS); + context.drawText(txtRend, line1, x + ICO_DIM + PAD_L, y, 0xffffffff, false); + context.drawText(txtRend, line2, x + ICO_DIM + PAD_L, y + txtRend.fontHeight + PAD_S, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java index 7a495a13..7ab92dd5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/IcoTextComponent.java @@ -1,7 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -32,9 +32,9 @@ public class IcoTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y); - txtRend.draw(ms, text, x + ICO_DIM + PAD_L, y + 5, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y); + context.drawText(txtRend, text, x + ICO_DIM + PAD_L, y + 5, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java index 265d11f1..34e0268b 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlainTextComponent.java @@ -1,6 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -23,8 +23,8 @@ public class PlainTextComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - txtRend.draw(ms, text, x + PAD_S, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawText(txtRend, text, x + PAD_S, y, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java index 18859080..fd66ec73 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/PlayerComponent.java @@ -1,10 +1,8 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import com.mojang.blaze3d.systems.RenderSystem; - +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.PlayerSkinDrawer; import net.minecraft.client.network.PlayerListEntry; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; /** @@ -27,10 +25,9 @@ public class PlayerComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - RenderSystem.setShaderTexture(0, tex); - PlayerSkinDrawer.draw(ms, x, y, SKIN_ICO_DIM); - txtRend.draw(ms, name, x + SKIN_ICO_DIM + PAD_S, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + PlayerSkinDrawer.draw(context, tex, x, y, SKIN_ICO_DIM); + context.drawText(txtRend, name, x + SKIN_ICO_DIM + PAD_S, y, 0xffffffff, false); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java index b9ebc0e9..a7cc8d12 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/ProgressComponent.java @@ -1,8 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -55,16 +54,16 @@ public class ProgressComponent extends Component { } @Override - public void render(MatrixStack ms, int x, int y) { - itmRend.renderGuiItemIcon(ms, ico, x, y + ICO_OFFS); - txtRend.draw(ms, desc, x + ICO_DIM + PAD_L, y, 0xffffffff); + public void render(DrawContext context, int x, int y) { + context.drawItem(ico, x, y + ICO_OFFS); + context.drawText(txtRend, desc, x + ICO_DIM + PAD_L, y, 0xffffffff, false); int barX = x + ICO_DIM + PAD_L; int barY = y + txtRend.fontHeight + PAD_S; int endOffsX = ((int) (this.barW * (this.pcnt / 100f))); - DrawableHelper.fill(ms, barX + endOffsX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); - DrawableHelper.fill(ms, barX, barY, barX + endOffsX, barY + BAR_HEIGHT, + context.fill(barX + endOffsX, barY, barX + this.barW, barY + BAR_HEIGHT, COL_BG_BAR); + context.fill(barX, barY, barX + endOffsX, barY + BAR_HEIGHT, this.color); - txtRend.drawWithShadow(ms, bar, barX + 3, barY + 2, 0xffffffff); + context.drawTextWithShadow(txtRend, bar, barX + 3, barY + 2, 0xffffffff); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java index 5d49be2c..30287dc0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/component/TableComponent.java @@ -1,7 +1,6 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawContext; /** * Meta-Component that consists of a grid of other components @@ -38,11 +37,11 @@ public class TableComponent extends Component { } @Override - public void render(MatrixStack ms, int xpos, int ypos) { + public void render(DrawContext context, int xpos, int ypos) { for (int x = 0; x < cols; x++) { for (int y = 0; y < rows; y++) { if (comps[x][y] != null) { - comps[x][y].render(ms, xpos + (x * cellW), ypos + y * cellH); + comps[x][y].render(context, xpos + (x * cellW), ypos + y * cellH); } } // add a line before the col if we're not drawing the first one @@ -51,7 +50,7 @@ public class TableComponent extends Component { int lineX2 = xpos + (x * cellW) - PAD_S; int lineY1 = ypos + 1; int lineY2 = ypos + this.height - PAD_S - 1; // not sure why but it looks correct - DrawableHelper.fill(ms, lineX1, lineY1, lineX2, lineY2, this.color); + context.fill(lineX1, lineY1, lineX2, lineY2, this.color); } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java index 7a0ad754..919975b0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/ToastBuilder.java @@ -3,11 +3,10 @@ package me.xmrvizzy.skyblocker.utils; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.render.GameRenderer; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.toast.Toast; import net.minecraft.client.toast.ToastManager; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; @Environment(value= EnvType.CLIENT) @@ -21,14 +20,13 @@ public class ToastBuilder implements Toast { } @Override - public Toast.Visibility draw(MatrixStack matrices, ToastManager manager, long startTime) { - RenderSystem.setShader(GameRenderer::getPositionTexProgram); - RenderSystem.setShaderTexture(0, TEXTURE); + public Toast.Visibility draw(DrawContext context, ToastManager manager, long startTime) { + TextRenderer textRenderer = manager.getClient().textRenderer; RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, this.getWidth(), this.getHeight()); - manager.getClient().textRenderer.draw(matrices, title, 7.0f, 7.0f, -11534256); - manager.getClient().textRenderer.draw(matrices, description, 7.0f, 18.0f, -16777216); + context.drawTexture(TEXTURE, 0, 0, 0, 0, this.getWidth(), this.getHeight()); + context.drawText(textRenderer, title, 7, 7, -11534256, false); + context.drawText(textRenderer, description, 7, 18, -16777216, false); return startTime >= 3000L ? Toast.Visibility.HIDE : Toast.Visibility.SHOW; } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 14c1e6f1..b407b737 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.19", - "fabric-api": ">=0.81.0+1.19.4", + "fabric-api": ">=0.80.2+1.20", "cloth-config2": "*", - "minecraft": "~1.19.4" + "minecraft": "~1.20-beta.1" }, "custom": { "modmenu": { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 6fa2596a..f8b39c93 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -6,20 +6,18 @@ "AccessorWorldRenderer", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", + "DrawContextMixin", "FarmlandBlockMixin", "GenericContainerScreenHandlerMixin", "HandledScreenAccessor", "HandledScreenMixin", "InGameHudMixin", "InventoryScreenMixin", - "ItemRendererMixin", "LeverBlockMixin", "MinecraftClientMixin", - "RecipeBookWidgetAccessor", - "HandledScreenAccessor", "PlayerListHudAccessor", "PlayerListHudMixin", - "ScreenMixin" + "RecipeBookWidgetAccessor" ], "injectors": { "defaultRequire": 1 -- cgit From dddb48315bd373b4e19f6a45da6ad21eacc26ff9 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Thu, 11 May 2023 01:57:03 -0400 Subject: Fix null check being useless --- .../java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 30aa1ed2..2638db7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -39,9 +39,11 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { //Hide Empty Tooltips - Text stackName = focusedSlot.getStack().getName(); - String strName = stackName.getString(); - if(this.focusedSlot != null && Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + if(this.focusedSlot != null) { + Text stackName = focusedSlot.getStack().getName(); + String strName = stackName.getString(); + if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); + } //Backpack Preview String title = this.getTitle().getString(); -- cgit From 866e3a036fadd35032917a66894a7a656fbbead5 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 17 May 2023 23:24:00 -0400 Subject: 1.20-pre2 --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/gradle.properties b/gradle.properties index 7b8af977..a905e0d5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre1 -yarn_mappings=1.20-pre1+build.4 +minecraft_version=1.20-pre2 +yarn_mappings=1.20-pre2+build.1 loader_version=0.14.19 #Fabric api ## 1.19.4 -fabric_api_version=0.80.2+1.20 +fabric_api_version=0.81.2+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b407b737..f9089c9a 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.19", - "fabric-api": ">=0.80.2+1.20", + "fabric-api": ">=0.81.2+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.1" + "minecraft": "~1.20-beta.2" }, "custom": { "modmenu": { -- cgit From c108bf1e72f52b011db493bd452022a7ae8901fc Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 20 May 2023 12:48:53 -0400 Subject: 1.20-pre4 --- gradle.properties | 4 ++-- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/gradle.properties b/gradle.properties index a905e0d5..29e15b0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre2 -yarn_mappings=1.20-pre2+build.1 +minecraft_version=1.20-pre4 +yarn_mappings=1.20-pre4+build.3 loader_version=0.14.19 #Fabric api diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f9089c9a..80588b7e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,7 +32,7 @@ "fabricloader": ">=0.14.19", "fabric-api": ">=0.81.2+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.2" + "minecraft": "~1.20-beta.4" }, "custom": { "modmenu": { -- cgit From 0a07a44eab9b65dd2fe5d2e3b69b6122b4cddd68 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 27 May 2023 04:15:00 -0400 Subject: 1.20-pre6 --- gradle.properties | 8 ++++---- src/main/resources/fabric.mod.json | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/gradle.properties b/gradle.properties index 29e15b0b..f5f10ba5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,13 +2,13 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.19.4 -minecraft_version=1.20-pre4 -yarn_mappings=1.20-pre4+build.3 -loader_version=0.14.19 +minecraft_version=1.20-pre6 +yarn_mappings=1.20-pre6+build.2 +loader_version=0.14.21 #Fabric api ## 1.19.4 -fabric_api_version=0.81.2+1.20 +fabric_api_version=0.82.1+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 80588b7e..fa0c44d8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -29,10 +29,10 @@ "skyblocker.mixins.json" ], "depends": { - "fabricloader": ">=0.14.19", - "fabric-api": ">=0.81.2+1.20", + "fabricloader": ">=0.14.21", + "fabric-api": ">=0.82.1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.4" + "minecraft": "~1.20-beta.6" }, "custom": { "modmenu": { -- cgit From ddf96fa87a28c8f2d664a31d0c5ffdaffc14f8c4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 5 Jun 2023 00:15:43 -0400 Subject: Trails and Talesify things! --- README.md | 2 +- gradle.properties | 10 +++++----- src/main/resources/fabric.mod.json | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/README.md b/README.md index 00a172d5..e5a78047 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Discord](https://img.shields.io/discord/879732108745125969?logo=discord&labelColor=cecece&color=7289DA&label=)](https://discord.com/invite/aNNJHQykck) [![modrinth statistic](https://img.shields.io/badge/buy%20me%20coffee-skyblocker?color=434B57&logo=kofi)](https://ko-fi.com/wohlhabend) -Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x +Hypixel Skyblock Mod for Minecraft 1.17.x + 1.18.x + 1.19.x + 1.20 Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/installation) diff --git a/gradle.properties b/gradle.properties index f5f10ba5..556932c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,14 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US # Fabric Properties (https://fabricmc.net/versions.html) -## 1.19.4 -minecraft_version=1.20-pre6 -yarn_mappings=1.20-pre6+build.2 +## 1.20 +minecraft_version=1.20-rc1 +yarn_mappings=1.20-rc1+build.2 loader_version=0.14.21 #Fabric api -## 1.19.4 -fabric_api_version=0.82.1+1.20 +## 1.20 +fabric_api_version=0.83.0+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fa0c44d8..661bfda5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,9 +30,9 @@ ], "depends": { "fabricloader": ">=0.14.21", - "fabric-api": ">=0.82.1.20", + "fabric-api": ">=0.83.0+1.20", "cloth-config2": "*", - "minecraft": "~1.20-beta.6" + "minecraft": "~1.20-rc.1" }, "custom": { "modmenu": { -- cgit From afe72f1857428dfdf7d9788992b5ff1b518c8a9c Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 12:03:54 -0400 Subject: 1.20 --- gradle.properties | 6 +++--- src/main/resources/fabric.mod.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/gradle.properties b/gradle.properties index 556932c1..3d1c4190 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx1G -Dfile.encoding=UTF-8 -Duser.language=en -Duser.countr # Fabric Properties (https://fabricmc.net/versions.html) ## 1.20 -minecraft_version=1.20-rc1 -yarn_mappings=1.20-rc1+build.2 +minecraft_version=1.20 +yarn_mappings=1.20+build.1 loader_version=0.14.21 #Fabric api @@ -12,7 +12,7 @@ fabric_api_version=0.83.0+1.20 # Dependencies ## Cloth Api (https://www.curseforge.com/minecraft/mc-mods/cloth-config/files) -clothconfig_version=10.0.96 +clothconfig_version=11.0.98 ## Mod Menu (https://www.curseforge.com/minecraft/mc-mods/modmenu/files) mod_menu_version=7.0.0-beta.2 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 661bfda5..ead46adc 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,7 +32,7 @@ "fabricloader": ">=0.14.21", "fabric-api": ">=0.83.0+1.20", "cloth-config2": "*", - "minecraft": "~1.20-rc.1" + "minecraft": "~1.20" }, "custom": { "modmenu": { -- cgit From fad36a20ca0b05dc1004c0453eeddc335b3848e4 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:01:52 -0400 Subject: Fix recipe book crash --- .../skyblocker/skyblock/itemlist/ResultButtonWidget.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java index 8b0fe91d..12636ce1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ResultButtonWidget.java @@ -9,6 +9,7 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.render.GameRenderer; @@ -52,14 +53,14 @@ public class ResultButtonWidget extends ClickableWidget { public void renderTooltip(DrawContext context, int mouseX, int mouseY) { MinecraftClient client = MinecraftClient.getInstance(); - List tooltip = client.currentScreen.getTooltipFromItem(client, this.itemStack); + List tooltip = Screen.getTooltipFromItem(client, this.itemStack); List orderedTooltip = new ArrayList<>(); - - for(int i = 0; i < tooltip.size(); i++) orderedTooltip.add(tooltip.get(i).asOrderedText()); - - // TODO : add null check with log error + + for(int i = 0; i < tooltip.size(); i++) { + orderedTooltip.add(tooltip.get(i).asOrderedText()); + } + client.currentScreen.setTooltip(orderedTooltip); - client.currentScreen.renderWithTooltip(context, mouseX, mouseY, mouseY); } @Override -- cgit From 9e142941684bb40fe48f7f68bcd456894d3acd57 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:13:24 -0400 Subject: Fix drill fuel Z layering --- .../java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index ccbeaca2..0c28491d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -5,6 +5,8 @@ import java.util.regex.Pattern; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -16,12 +18,15 @@ import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.util.math.ColorHelper; @Mixin(DrawContext.class) public abstract class DrawContextMixin { + @Shadow @Final private MatrixStack matrices; + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { @@ -44,13 +49,17 @@ public abstract class DrawContextMixin { } DrawContext context = ((DrawContext) (Object) this); - + matrices.push(); + matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); + float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + + matrices.pop(); RenderSystem.enableDepthTest(); } } -- cgit From 8278636bcf13450dfb0d505bd92d4355f7a85db8 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:21:29 -0400 Subject: Write drill fuel bar to gui overlay buffer --- src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index 0c28491d..32163c38 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -18,6 +18,7 @@ import me.xmrvizzy.skyblocker.utils.ItemUtils; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; @@ -56,8 +57,8 @@ public abstract class DrawContextMixin { float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - context.fill(x + 2, y + 13, x + 15, y + 15, 0xFF000000); - context.fill(x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); + context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); matrices.pop(); RenderSystem.enableDepthTest(); -- cgit From 4e00861a7a7bff86a6869cca69e820d118cf0375 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 7 Jun 2023 15:29:11 -0400 Subject: Replace double cast with shadow --- src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java index 32163c38..a8a490b8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/DrawContextMixin.java @@ -28,6 +28,10 @@ import net.minecraft.util.math.ColorHelper; public abstract class DrawContextMixin { @Shadow @Final private MatrixStack matrices; + @Shadow + public void fill(RenderLayer layer, int x1, int x2, int y1, int y2, int color) { + } + @Inject(method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V", at = @At("HEAD")) public void skyblocker$renderItemBar(TextRenderer textRenderer, ItemStack stack, int x, int y, @Nullable String countOverride, CallbackInfo ci) { @@ -49,7 +53,6 @@ public abstract class DrawContextMixin { } } - DrawContext context = ((DrawContext) (Object) this); matrices.push(); matrices.translate(0f, 0f, 200f); RenderSystem.disableDepthTest(); @@ -57,8 +60,8 @@ public abstract class DrawContextMixin { float hue = Math.max(0.0F, 1.0F - (max - current) / max); int width = Math.round(current / max * 13.0F); Color color = Color.getHSBColor(hue / 3.0F, 1.0F, 1.0F); - context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); - context.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); + this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 15, y + 15, 0xFF000000); + this.fill(RenderLayer.getGuiOverlay(), x + 2, y + 13, x + 2 + width, y + 14, ColorHelper.Argb.getArgb(color.getAlpha(), color.getRed(), color.getGreen(), color.getBlue())); matrices.pop(); RenderSystem.enableDepthTest(); -- cgit From 1f15c252969c6c09de7b4b11110b12eccf5e90da Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 17 Jun 2023 21:58:01 -0400 Subject: Improve Crimson Isle Tab HUD Fixed the reputation widget showing "Max -> Reputation" when you're at max reputation The faction quests text now retains its formatting to be more informative about whether you've not started, started or completed a quest --- .../skyblock/tabhud/util/PlayerListMgr.java | 37 ++++++++++++++++++++++ .../skyblock/tabhud/widget/QuestWidget.java | 14 +++++++- .../skyblock/tabhud/widget/ReputationWidget.java | 3 +- 3 files changed, 52 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 60915bc1..f797e6d0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +14,7 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.PlayerListEntry; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; /** @@ -93,6 +95,41 @@ public class PlayerListMgr { } return str; } + + /** + * Gets the display name at some index of the player list + * + * @return the text or null, if the display name is null + * + * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification + * for other stuff. you've been warned! + */ + public static Text textAt4FactionQuests(int idx) { + + if(playerList == null) { + return null; + } + + if(playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if(txt == null) { + return null; + } + + //Rebuild the text object to remove beginning space thats in all faction quest stuff + MutableText newTxt = Text.empty(); + + for(int i = 0; i < txt.getSiblings().size(); i++) { + Text current = txt.getSiblings().get(i); + String textToAppend = current.getString(); + newTxt.append(Text.literal((i == 0) ? StringUtils.removeStart(textToAppend, " ") : textToAppend ).setStyle(current.getStyle())); + } + + return newTxt; + } /** * Get the display name at some index of the player list as Text as seen in the diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index 5c89964e..d13513e4 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.tabhud.widget; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; import net.minecraft.text.MutableText; @@ -13,12 +14,23 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); + + /** + * @return the entry at idx with it's formatting preserved + */ + public static Text passthroughEntryText(int idx) { + Text txt = PlayerListMgr.textAt4FactionQuests(idx); + if(txt == null) { + return null; + } + return txt; + } public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 51; i < 56; i++) { - Text q = Widget.plainEntryText(i); + Text q = passthroughEntryText(i); IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java index c0379623..3685e0ca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/ReputationWidget.java @@ -54,8 +54,9 @@ public class ReputationWidget extends Widget { this.addComponent(new ProgressComponent()); } else { float pcnt = Float.parseFloat(prog.group("prog")); + Text reputationText = state.group("from").equals("Max") ? Text.literal("Max Reputation") : Text.literal(state.group("from") + " -> " + state.group("to")); ProgressComponent pc = new ProgressComponent(Ico.LANTERN, - Text.of(state.group("from") + " -> " + state.group("to")), rep, pcnt, + reputationText, rep, pcnt, Formatting.AQUA.getColorValue()); this.addComponent(pc); } -- cgit From 3c2ec1e9dc7dbcfff9f030619b0f088460841f21 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 18 Jun 2023 13:15:25 -0400 Subject: Small code changes --- .../skyblocker/skyblock/tabhud/util/PlayerListMgr.java | 2 +- .../skyblocker/skyblock/tabhud/widget/QuestWidget.java | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index f797e6d0..665fc981 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -104,7 +104,7 @@ public class PlayerListMgr { * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification * for other stuff. you've been warned! */ - public static Text textAt4FactionQuests(int idx) { + public static Text textAt(int idx) { if(playerList == null) { return null; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java index d13513e4..43b741ba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/QuestWidget.java @@ -14,23 +14,12 @@ public class QuestWidget extends Widget { private static final MutableText TITLE = Text.literal("Faction Quests").formatted(Formatting.AQUA, Formatting.BOLD); - - /** - * @return the entry at idx with it's formatting preserved - */ - public static Text passthroughEntryText(int idx) { - Text txt = PlayerListMgr.textAt4FactionQuests(idx); - if(txt == null) { - return null; - } - return txt; - } public QuestWidget() { super(TITLE, Formatting.AQUA.getColorValue()); for (int i = 51; i < 56; i++) { - Text q = passthroughEntryText(i); + Text q = PlayerListMgr.textAt(i); IcoTextComponent itc = new IcoTextComponent(Ico.BOOK, q); this.addComponent(itc); } -- cgit From f3dd77b530bc3fb0866b16eea334fdbe3b5642de Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:30:58 -0400 Subject: Improve documentation and trim trailing space --- .../skyblocker/skyblock/tabhud/util/PlayerListMgr.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 665fc981..82a4ae01 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -119,16 +119,22 @@ public class PlayerListMgr { return null; } - //Rebuild the text object to remove beginning space thats in all faction quest stuff - MutableText newTxt = Text.empty(); + //Rebuild the text object to remove leading space thats in all faction quest stuff (also removes trailing space just in case) + MutableText newText = Text.empty(); + int size = txt.getSiblings().size(); - for(int i = 0; i < txt.getSiblings().size(); i++) { + for(int i = 0; i < size; i++) { Text current = txt.getSiblings().get(i); String textToAppend = current.getString(); - newTxt.append(Text.literal((i == 0) ? StringUtils.removeStart(textToAppend, " ") : textToAppend ).setStyle(current.getStyle())); + + //Trim leading & trailing space - this can only be done at the start and end otherwise it'll produce malformed results + if(i == 0) textToAppend = StringUtils.removeStart(textToAppend, " "); + if(i == size - 1) textToAppend = StringUtils.removeEnd(textToAppend, " "); + + newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); } - return newTxt; + return newText; } /** -- cgit From bc8f4c4f75432a6e516c86990a1e6f52136b21a3 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Mon, 19 Jun 2023 23:31:55 -0400 Subject: Format file --- .../skyblock/tabhud/util/PlayerListMgr.java | 259 +++++++++++---------- 1 file changed, 130 insertions(+), 129 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 82a4ae01..5ace64ea 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -18,137 +18,138 @@ import net.minecraft.text.MutableText; import net.minecraft.text.Text; /** - * This class may be used to get data from the player list. - * It doesn't get its data every frame, instead, a scheduler is used to - * update the data this class is holding periodically. - * The list is sorted like in the vanilla game. + * This class may be used to get data from the player list. It doesn't get its + * data every frame, instead, a scheduler is used to update the data this class + * is holding periodically. The list is sorted like in the vanilla game. */ public class PlayerListMgr { - public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); - - private static List playerList; - - public static void updateList() { - - if (!Utils.isOnSkyblock()) { - return; - } - - ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); - - // check is needed, else game crash on server leave - if (cpnwh != null) { - playerList = cpnwh.getPlayerList() - .stream() - .sorted(PlayerListHudAccessor.getOrdering()) - .toList(); - } - } - - /** - * Get the display name at some index of the player list and apply a pattern to - * it - * - * @return the matcher if p fully matches, else null - */ - public static Matcher regexAt(int idx, Pattern p) { - - String str = PlayerListMgr.strAt(idx); - - if (str == null) { - return null; - } - - Matcher m = p.matcher(str); - if (!m.matches()) { - LOGGER.error("no match: \"{}\" against \"{}\"", str, p); - return null; - } else { - return m; - } - } - - /** - * Get the display name at some index of the player list as string - * - * @return the string or null, if the display name is null, empty or whitespace - * only - */ - public static String strAt(int idx) { - - if (playerList == null) { - return null; - } - - if (playerList.size() <= idx) { - return null; - } - - Text txt = playerList.get(idx).getDisplayName(); - if (txt == null) { - return null; - } - String str = txt.getString().trim(); - if (str.length() == 0) { - return null; - } - return str; - } - - /** - * Gets the display name at some index of the player list - * - * @return the text or null, if the display name is null - * - * @implNote currently designed specifically for crimson isles faction quests widget, might not work correctly without modification - * for other stuff. you've been warned! - */ - public static Text textAt(int idx) { - - if(playerList == null) { - return null; - } - - if(playerList.size() <= idx) { - return null; - } - - Text txt = playerList.get(idx).getDisplayName(); - if(txt == null) { - return null; - } - - //Rebuild the text object to remove leading space thats in all faction quest stuff (also removes trailing space just in case) - MutableText newText = Text.empty(); - int size = txt.getSiblings().size(); - - for(int i = 0; i < size; i++) { - Text current = txt.getSiblings().get(i); - String textToAppend = current.getString(); - - //Trim leading & trailing space - this can only be done at the start and end otherwise it'll produce malformed results - if(i == 0) textToAppend = StringUtils.removeStart(textToAppend, " "); - if(i == size - 1) textToAppend = StringUtils.removeEnd(textToAppend, " "); - - newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); - } - - return newText; - } - - /** - * Get the display name at some index of the player list as Text as seen in the - * game - * - * @return the PlayerListEntry at that index - */ - public static PlayerListEntry getRaw(int idx) { - return playerList.get(idx); - } - - public static int getSize() { - return playerList.size(); - } + public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Regex"); + + private static List playerList; + + public static void updateList() { + + if (!Utils.isOnSkyblock()) { + return; + } + + ClientPlayNetworkHandler cpnwh = MinecraftClient.getInstance().getNetworkHandler(); + + // check is needed, else game crash on server leave + if (cpnwh != null) { + playerList = cpnwh.getPlayerList().stream().sorted(PlayerListHudAccessor.getOrdering()).toList(); + } + } + + /** + * Get the display name at some index of the player list and apply a pattern to + * it + * + * @return the matcher if p fully matches, else null + */ + public static Matcher regexAt(int idx, Pattern p) { + + String str = PlayerListMgr.strAt(idx); + + if (str == null) { + return null; + } + + Matcher m = p.matcher(str); + if (!m.matches()) { + LOGGER.error("no match: \"{}\" against \"{}\"", str, p); + return null; + } else { + return m; + } + } + + /** + * Get the display name at some index of the player list as string + * + * @return the string or null, if the display name is null, empty or whitespace + * only + */ + public static String strAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + String str = txt.getString().trim(); + if (str.length() == 0) { + return null; + } + return str; + } + + /** + * Gets the display name at some index of the player list + * + * @return the text or null, if the display name is null + * + * @implNote currently designed specifically for crimson isles faction quests + * widget, might not work correctly without modification for other + * stuff. you've been warned! + */ + public static Text textAt(int idx) { + + if (playerList == null) { + return null; + } + + if (playerList.size() <= idx) { + return null; + } + + Text txt = playerList.get(idx).getDisplayName(); + if (txt == null) { + return null; + } + + // Rebuild the text object to remove leading space thats in all faction quest + // stuff (also removes trailing space just in case) + MutableText newText = Text.empty(); + int size = txt.getSiblings().size(); + + for (int i = 0; i < size; i++) { + Text current = txt.getSiblings().get(i); + String textToAppend = current.getString(); + + // Trim leading & trailing space - this can only be done at the start and end + // otherwise it'll produce malformed results + if (i == 0) + textToAppend = StringUtils.removeStart(textToAppend, " "); + if (i == size - 1) + textToAppend = StringUtils.removeEnd(textToAppend, " "); + + newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); + } + + return newText; + } + + /** + * Get the display name at some index of the player list as Text as seen in the + * game + * + * @return the PlayerListEntry at that index + */ + public static PlayerListEntry getRaw(int idx) { + return playerList.get(idx); + } + + public static int getSize() { + return playerList.size(); + } } -- cgit From 6dcbd5b6ceda32e6c347a2c0d40f9f522b9eaa02 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 19 Jun 2023 19:41:22 +0800 Subject: Fix DiscordRPC briefly showing --- .../skyblocker/discord/DiscordRPCManager.java | 26 +++++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 4fa5265f..1ac2f6d5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -18,26 +18,30 @@ public class DiscordRPCManager { public static long startTimeStamp; public static int cycleCount; - public static void init(){ + public static void init() { SkyblockEvents.LEAVE.register(DiscordIPC::stop); SkyblockEvents.JOIN.register(() -> { startTimeStamp = System.currentTimeMillis(); if (DiscordIPC.start(934607927837356052L, null)) { - DiscordIPC.setActivity(buildPresence()); - LOGGER.info("Discord RPC started"); + if (SkyblockerConfig.get().richPresence.enableRichPresence) { + DiscordIPC.setActivity(buildPresence()); + LOGGER.info("Discord RPC started successfully"); + } else { + LOGGER.info("Discord RPC started successfully but is currently disabled"); + } } else { LOGGER.error("Discord RPC failed to start"); } }); } - public static void update(){ + public static void update() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock"; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); } - if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()){ + if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()) { DiscordIPC.stop(); LOGGER.info("Discord RPC stopped"); return; @@ -46,7 +50,7 @@ public class DiscordRPCManager { DiscordIPC.setActivity(buildPresence()); } - public static RichPresence buildPresence(){ + public static RichPresence buildPresence() { RichPresence presence = new RichPresence(); presence.setLargeImage("skyblocker-default", null); presence.setStart(startTimeStamp); @@ -55,16 +59,16 @@ public class DiscordRPCManager { return presence; } - public static String getInfo(){ + public static String getInfo() { String info = null; - if (!SkyblockerConfig.get().richPresence.cycleMode){ - switch (SkyblockerConfig.get().richPresence.info){ + if (!SkyblockerConfig.get().richPresence.cycleMode) { + switch (SkyblockerConfig.get().richPresence.info) { case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); case LOCATION -> info = "⏣ " + Utils.getLocation(); } - } else if (SkyblockerConfig.get().richPresence.cycleMode){ - switch (cycleCount){ + } else if (SkyblockerConfig.get().richPresence.cycleMode) { + switch (cycleCount) { case 0 -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case 1 -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); case 2 -> info = "⏣ " + Utils.getLocation(); -- cgit From 8a5abeaec788dd5d17d8ddfb548a16fd2e8c5e43 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:08:38 +0800 Subject: Async DiscordRPC --- .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 2 +- .../skyblocker/discord/DiscordRPCManager.java | 67 ++++++++++++++++------ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 4 +- 3 files changed, 52 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index bfc5013b..189ecca3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -82,7 +82,7 @@ public class SkyblockerMod implements ClientModInitializer { containerSolverManager.init(); DungeonMap.init(); scheduler.scheduleCyclic(Utils::sbChecker, 20); - scheduler.scheduleCyclic(DiscordRPCManager::update, 100); + scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(LividColor::update, 10); scheduler.scheduleCyclic(BackpackPreview::tick, 50); diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 1ac2f6d5..f7ec2f33 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -11,43 +11,74 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DecimalFormat; +import java.util.concurrent.CompletableFuture; public class DiscordRPCManager { public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###,###.##"); public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Discord RPC"); + public static CompletableFuture updateTask; public static long startTimeStamp; public static int cycleCount; public static void init() { - SkyblockEvents.LEAVE.register(DiscordIPC::stop); + SkyblockEvents.LEAVE.register(DiscordRPCManager::initAndUpdatePresence); SkyblockEvents.JOIN.register(() -> { startTimeStamp = System.currentTimeMillis(); - if (DiscordIPC.start(934607927837356052L, null)) { - if (SkyblockerConfig.get().richPresence.enableRichPresence) { - DiscordIPC.setActivity(buildPresence()); - LOGGER.info("Discord RPC started successfully"); - } else { - LOGGER.info("Discord RPC started successfully but is currently disabled"); - } - } else { - LOGGER.error("Discord RPC failed to start"); - } + initAndUpdatePresence(true); }); } - public static void update() { + public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { SkyblockerConfig.get().richPresence.customMessage = "Playing Skyblock"; AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); } - if ((!Utils.isOnSkyblock() || !SkyblockerConfig.get().richPresence.enableRichPresence) && DiscordIPC.isConnected()) { - DiscordIPC.stop(); - LOGGER.info("Discord RPC stopped"); - return; - } if (SkyblockerConfig.get().richPresence.cycleMode) cycleCount = (cycleCount + 1) % 3; - DiscordIPC.setActivity(buildPresence()); + initAndUpdatePresence(); + } + + private static void initAndUpdatePresence() { + initAndUpdatePresence(false); + } + + /** + * Updates discord presence asynchronously. + *

+ * When the {@link #updateTask previous update} does not exist or {@link CompletableFuture#isDone() has completed}: + *

+ * Connects to discord if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled}, + * the player {@link Utils#isOnSkyblock() is on Skyblock}, and {@link DiscordIPC#isConnected() discord is not already connected}. + * Updates the presence if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is enabled} + * and the player {@link Utils#isOnSkyblock() is on Skyblock}. + * Stops the connection if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled} + * or the player {@link Utils#isOnSkyblock() is not on Skyblock} and {@link DiscordIPC#isConnected() discord is connected}. + * Saves the update task in {@link #updateTask} + * + * @param initialization whether this is the first time the presence is being updates. If {@code true}, a message will be logged + * if {@link SkyblockerConfig.RichPresence#enableRichPresence rich presence is disabled}. + */ + private static void initAndUpdatePresence(boolean initialization) { + if (updateTask == null || updateTask.isDone()) { + updateTask = CompletableFuture.runAsync(() -> { + if (SkyblockerConfig.get().richPresence.enableRichPresence && Utils.isOnSkyblock()) { + if (!DiscordIPC.isConnected()) { + if (DiscordIPC.start(934607927837356052L, null)) { + LOGGER.info("Discord RPC started successfully"); + } else { + LOGGER.error("Discord RPC failed to start"); + return; + } + } + DiscordIPC.setActivity(buildPresence()); + } else if (DiscordIPC.isConnected()) { + DiscordIPC.stop(); + LOGGER.info("Discord RPC stopped"); + } else if (initialization) { + LOGGER.info("Discord RPC is currently disabled"); + } + }); + } } public static RichPresence buildPresence() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 028386ab..a4e403fc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -52,13 +52,13 @@ public class Utils { isInjected = true; ItemTooltipCallback.EVENT.register(PriceInfoTooltip::onInjectTooltip); } - SkyblockEvents.JOIN.invoker().onSkyblockJoin(); isOnSkyblock = true; + SkyblockEvents.JOIN.invoker().onSkyblockJoin(); } } else if (isOnSkyblock) { - SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); isOnSkyblock = false; isInDungeons = false; + SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); } -- cgit From f7434efeae8f4ea0d193cdad11928f5a13eb6374 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Tue, 20 Jun 2023 12:25:22 +0800 Subject: Add docs --- .../me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index f7ec2f33..29a2c958 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -13,9 +13,15 @@ import org.slf4j.LoggerFactory; import java.text.DecimalFormat; import java.util.concurrent.CompletableFuture; +/** + * Manages the discord rich presence. Automatically connects to discord and displays a customizable activity when playing Skyblock. + */ public class DiscordRPCManager { public static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("###,###.##"); public static final Logger LOGGER = LoggerFactory.getLogger("Skyblocker Discord RPC"); + /** + * The update task used to avoid multiple update tasks running simultaneously. + */ public static CompletableFuture updateTask; public static long startTimeStamp; public static int cycleCount; @@ -28,6 +34,9 @@ public class DiscordRPCManager { }); } + /** + * Checks the {@link SkyblockerConfig.RichPresence#customMessage custom message}, updates {@link #cycleCount} if enabled, and updates rich presence. + */ public static void updateDataAndPresence() { // If the custom message is empty, discord will keep the last message, this is can serve as a default if the user doesn't want a custom message if (SkyblockerConfig.get().richPresence.customMessage.isEmpty()) { @@ -38,6 +47,9 @@ public class DiscordRPCManager { initAndUpdatePresence(); } + /** + * @see #initAndUpdatePresence(boolean) + */ private static void initAndUpdatePresence() { initAndUpdatePresence(false); } -- cgit From 027426aacac048b85cd310e9e3d4101e0156a917 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Mon, 22 May 2023 20:30:12 -0400 Subject: Add Fairy Souls Helper --- build.gradle | 3 + gradle.properties | 2 + .../java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 22 +-- .../skyblocker/config/SkyblockerConfig.java | 8 + .../accessor/BeaconBlockEntityRendererInvoker.java | 16 ++ .../xmrvizzy/skyblocker/skyblock/FairySouls.java | 184 +++++++++++++++++++++ .../skyblocker/skyblock/api/RepositoryUpdate.java | 62 ------- .../skyblocker/skyblock/dungeon/LividColor.java | 3 +- .../skyblocker/skyblock/itemlist/ItemRegistry.java | 75 ++------- .../skyblock/itemlist/ItemStackBuilder.java | 5 +- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 90 ++++++++++ .../me/xmrvizzy/skyblocker/utils/RenderHelper.java | 30 ++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 91 +++++++++- .../resources/assets/skyblocker/lang/en_us.json | 6 +- 14 files changed, 454 insertions(+), 143 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java delete mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java (limited to 'src') diff --git a/build.gradle b/build.gradle index 4d2dc8ef..83da3489 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,9 @@ dependencies { // https://mvnrepository.com/artifact/org.eclipse.jgit/org.eclipse.jgit used pull data from the NEU item repo include(implementation("org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r")) + // Renderer (https://github.com/0x3C50/Renderer) + include modImplementation("com.github.0x3C50:Renderer:${project.renderer_version}") + include(modImplementation ("meteordevelopment:discord-ipc:1.1")) } diff --git a/gradle.properties b/gradle.properties index 14a4fffc..d90dc6f2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,8 @@ clothconfig_version=11.0.99 mod_menu_version=7.0.1 ## REI (https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items/files) rei_version=12.0.625 +## Renderer (https://github.com/0x3C50/Renderer) +renderer_version = master-SNAPSHOT # Mod Properties mod_version = 1.10.0 diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 189ecca3..04ab384f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -1,14 +1,12 @@ package me.xmrvizzy.skyblocker; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import me.xmrvizzy.skyblocker.chat.ChatMessageListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.discord.DiscordRPCManager; import me.xmrvizzy.skyblocker.gui.ContainerSolverManager; -import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; -import me.xmrvizzy.skyblocker.skyblock.FishingHelper; -import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; -import me.xmrvizzy.skyblocker.skyblock.StatusBarTracker; -import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; +import me.xmrvizzy.skyblocker.skyblock.*; import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonBlaze; import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonMap; @@ -20,14 +18,14 @@ import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; import me.xmrvizzy.skyblocker.skyblock.quicknav.QuickNav; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; -import me.xmrvizzy.skyblocker.utils.MessageScheduler; -import me.xmrvizzy.skyblocker.utils.Scheduler; -import me.xmrvizzy.skyblocker.utils.UpdateChecker; -import me.xmrvizzy.skyblocker.utils.Utils; +import me.xmrvizzy.skyblocker.utils.*; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; +import java.nio.file.Path; + /** * Main class for Skyblocker which initializes features, registers events, and * manages ticks. This class will be instantiated by Fabric. Do not instantiate @@ -35,6 +33,8 @@ import net.minecraft.client.MinecraftClient; */ public class SkyblockerMod implements ClientModInitializer { public static final String NAMESPACE = "skyblocker"; + public static final Path CONFIG_DIR = FabricLoader.getInstance().getConfigDir().resolve(NAMESPACE); + public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); private static SkyblockerMod INSTANCE; @SuppressWarnings("deprecation") @@ -63,12 +63,13 @@ public class SkyblockerMod implements ClientModInitializer { @Override public void onInitializeClient() { ClientTickEvents.END_CLIENT_TICK.register(this::tick); + Utils.init(); HotbarSlotLock.init(); SkyblockerConfig.init(); PriceInfoTooltip.init(); WikiLookup.init(); ItemRegistry.init(); - RepositoryUpdate.init(); + NEURepo.init(); BackpackPreview.init(); QuickNav.init(); StatsCommand.init(); @@ -78,6 +79,7 @@ public class SkyblockerMod implements ClientModInitializer { DiscordRPCManager.init(); LividColor.init(); FishingHelper.init(); + FairySouls.init(); TabHud.init(); containerSolverManager.init(); DungeonMap.init(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index b1bc2001..f296e487 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -150,6 +150,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Fishing fishing = new Fishing(); + @ConfigEntry.Category("fairySouls") + @ConfigEntry.Gui.CollapsibleObject() + public FairySouls fairySouls = new FairySouls(); + @ConfigEntry.Category("itemList") @ConfigEntry.Gui.CollapsibleObject() public ItemList itemList = new ItemList(); @@ -219,6 +223,10 @@ public class SkyblockerConfig implements ConfigData { public boolean enableFishingHelper = true; } + public static class FairySouls { + public boolean enableFairySouls = true; + } + public static class Hitbox { public boolean oldFarmlandHitbox = true; public boolean oldLeverHitbox = false; diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java new file mode 100644 index 00000000..ff7c7cbc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/accessor/BeaconBlockEntityRendererInvoker.java @@ -0,0 +1,16 @@ +package me.xmrvizzy.skyblocker.mixin.accessor; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.client.util.math.MatrixStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(BeaconBlockEntityRenderer.class) +public interface BeaconBlockEntityRendererInvoker { + @SuppressWarnings("unused") + @Invoker("renderBeam") + static void renderBeam(MatrixStack matrices, VertexConsumerProvider vertexConsumers, float tickDelta, long worldTime, int yOffset, int maxY, float[] color) { + throw new IllegalStateException("Mixin invoker failed to apply."); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java new file mode 100644 index 00000000..4480c5e1 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -0,0 +1,184 @@ +package me.xmrvizzy.skyblocker.skyblock; + +import com.google.common.collect.ImmutableSet; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.utils.NEURepo; +import me.xmrvizzy.skyblocker.utils.RenderHelper; +import me.xmrvizzy.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.text.Text; +import net.minecraft.util.DyeColor; +import net.minecraft.util.math.BlockPos; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.*; +import java.util.concurrent.CompletableFuture; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class FairySouls { + private static final Logger LOGGER = LoggerFactory.getLogger(FairySouls.class); + private static CompletableFuture fairySoulsLoaded; + private static final Map> fairySouls = new HashMap<>(); + private static final Map>> foundFairies = new HashMap<>(); + + public static void init() { + fairySoulsLoaded = NEURepo.runAsyncAfterLoad(() -> { + try { + BufferedReader reader = new BufferedReader(new FileReader(NEURepo.LOCAL_REPO_DIR.resolve("constants").resolve("fairy_souls.json").toFile())); + for (Map.Entry fairySoulJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { + if (fairySoulJson.getKey().equals("//") || fairySoulJson.getKey().equals("Max Souls")) { + continue; + } + ImmutableSet.Builder fairySoulsForLocation = ImmutableSet.builder(); + for (JsonElement fairySoul : fairySoulJson.getValue().getAsJsonArray().asList()) { + fairySoulsForLocation.add(parseBlockPos(fairySoul)); + } + fairySouls.put(fairySoulJson.getKey(), fairySoulsForLocation.build()); + } + reader = new BufferedReader(new FileReader(SkyblockerMod.CONFIG_DIR.resolve("found_fairy_souls.json").toFile())); + for (Map.Entry foundFairiesForProfileJson : JsonParser.parseReader(reader).getAsJsonObject().asMap().entrySet()) { + Map> foundFairiesForProfile = new HashMap<>(); + for (Map.Entry foundFairiesForLocationJson : foundFairiesForProfileJson.getValue().getAsJsonObject().asMap().entrySet()) { + Set foundFairiesForLocation = new HashSet<>(); + for (JsonElement foundFairy : foundFairiesForLocationJson.getValue().getAsJsonArray().asList()) { + foundFairiesForLocation.add(parseBlockPos(foundFairy)); + } + foundFairiesForProfile.put(foundFairiesForLocationJson.getKey(), foundFairiesForLocation); + } + foundFairies.put(foundFairiesForProfileJson.getKey(), foundFairiesForProfile); + } + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + LOGGER.error("Failed to load found fairy souls."); + } catch (Exception e) { + e.printStackTrace(); + } + }); + ClientLifecycleEvents.CLIENT_STOPPING.register(FairySouls::saveFoundFairySouls); + WorldRenderEvents.AFTER_TRANSLUCENT.register(FairySouls::render); + ClientReceiveMessageEvents.GAME.register(FairySouls::onChatMessage); + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(literal(SkyblockerMod.NAMESPACE) + .then(literal("fairySouls") + .then(literal("markAllInCurrentIslandFound").executes(context -> { + FairySouls.markAllFairiesFound(); + context.getSource().sendFeedback(Text.translatable("skyblocker.fairySouls.markAllFound")); + return 1; + })) + .then(literal("markAllInCurrentIslandMissing").executes(context -> { + FairySouls.markAllFairiesNotFound(); + context.getSource().sendFeedback(Text.translatable("skyblocker.fairySouls.markAllMissing")); + return 1; + }))))); + } + + private static BlockPos parseBlockPos(JsonElement posJson) { + String[] posArray = posJson.getAsString().split(","); + return new BlockPos(Integer.parseInt(posArray[0]), Integer.parseInt(posArray[1]), Integer.parseInt(posArray[2])); + } + + public static void saveFoundFairySouls(MinecraftClient client) { + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(SkyblockerMod.CONFIG_DIR.resolve("found_fairy_souls.json").toFile())); + JsonObject foundFairiesJson = new JsonObject(); + for (Map.Entry>> foundFairiesForProfile : foundFairies.entrySet()) { + JsonObject foundFairiesForProfileJson = new JsonObject(); + for (Map.Entry> foundFairiesForLocation : foundFairiesForProfile.getValue().entrySet()) { + JsonArray foundFairiesForLocationJson = new JsonArray(); + for (BlockPos foundFairy : foundFairiesForLocation.getValue()) { + foundFairiesForLocationJson.add(foundFairy.getX() + "," + foundFairy.getY() + "," + foundFairy.getZ()); + } + foundFairiesForProfileJson.add(foundFairiesForLocation.getKey(), foundFairiesForLocationJson); + } + foundFairiesJson.add(foundFairiesForProfile.getKey(), foundFairiesForProfileJson); + } + SkyblockerMod.GSON.toJson(foundFairiesJson, writer); + writer.close(); + } catch (IOException e) { + LOGGER.error("Failed to write found fairy souls to file."); + } + } + + public static void render(WorldRenderContext context) { + if (!SkyblockerConfig.get().general.fairySouls.enableFairySouls) { + return; + } + if (!fairySoulsLoaded.isDone()) { + LOGGER.warn("Fairy souls are not loaded yet."); + return; + } + if (!fairySouls.containsKey(Utils.getLocationRaw())) { + return; + } + for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { + float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + } + } + + private static boolean isFairySoulNotFound(BlockPos fairySoul) { + Map> foundFairiesForProfile = foundFairies.get(Utils.getProfile()); + if (foundFairiesForProfile == null) { + return true; + } + Set foundFairiesForProfileAndLocation = foundFairiesForProfile.get(Utils.getLocationRaw()); + if (foundFairiesForProfileAndLocation == null) { + return true; + } + return !foundFairiesForProfileAndLocation.contains(fairySoul); + } + + public static void onChatMessage(Text text, boolean overlay) { + String message = text.getString(); + if (message.equals("You have already found that Fairy Soul!") || message.equals("SOUL! You found a Fairy Soul!")) { + markClosestFairyFound(); + } + } + + private static void markClosestFairyFound() { + PlayerEntity player = MinecraftClient.getInstance().player; + if (player == null) { + LOGGER.warn("Failed to mark closest fairy soul as found because player is null."); + return; + } + fairySouls.get(Utils.getLocationRaw()).stream().filter(FairySouls::isFairySoulNotFound).min(Comparator.comparingDouble(fairySoul -> fairySoul.getSquaredDistance(player.getPos()))).ifPresent(fairySoul -> { + initializeFoundFairiesForCurrentProfileAndLocation(); + foundFairies.get(Utils.getProfile()).get(Utils.getLocationRaw()).add(fairySoul); + }); + } + + public static void markAllFairiesFound() { + initializeFoundFairiesForCurrentProfileAndLocation(); + foundFairies.get(Utils.getProfile()).get(Utils.getLocationRaw()).addAll(fairySouls.get(Utils.getLocationRaw())); + } + + public static void markAllFairiesNotFound() { + Map> foundFairiesForProfile = foundFairies.get(Utils.getProfile()); + if (foundFairiesForProfile != null) { + foundFairiesForProfile.remove(Utils.getLocationRaw()); + } + } + + private static void initializeFoundFairiesForCurrentProfileAndLocation() { + initializeFoundFairiesForProfileAndLocation(Utils.getProfile(), Utils.getLocationRaw()); + } + + private static void initializeFoundFairiesForProfileAndLocation(String profile, String location) { + foundFairies.computeIfAbsent(profile, profileKey -> new HashMap<>()); + foundFairies.get(profile).computeIfAbsent(location, locationKey -> new HashSet<>()); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java deleted file mode 100644 index e08cb1c0..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/RepositoryUpdate.java +++ /dev/null @@ -1,62 +0,0 @@ -package me.xmrvizzy.skyblocker.skyblock.api; - -import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; -import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; -import net.minecraft.client.MinecraftClient; -import net.minecraft.text.Text; - -import java.io.File; -import java.nio.file.Files; -import java.util.concurrent.CompletableFuture; - -public class RepositoryUpdate { - public static final MinecraftClient client = MinecraftClient.getInstance(); - - /** - * Adds command to update repository manually from ingame. - *

- * TODO A button could be added to the settings menu that will trigger this command. - */ - public static void init(){ - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register( - ClientCommandManager.literal("skyblocker") - .then(ClientCommandManager.literal("updaterepository") - .executes(context -> { - updateRepository(); - return 1; - }) - ) - ) - ); - - } - - public static void updateRepository() { - CompletableFuture.runAsync(() -> { - try { - ItemRegistry.filesImported = false; - File dir = ItemRegistry.LOCAL_ITEM_REPO_DIR.toFile(); - recursiveDelete(dir); - } catch (Exception ex) { - if (client.player != null) - client.player.sendMessage( - Text.translatable("skyblocker.updaterepository.failed") - , false - ); - return; - } - - ItemRegistry.init(); - }); - } - - private static void recursiveDelete(File dir) { - if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath())) { - for (File child : dir.listFiles()) { - recursiveDelete(child); - } - } - dir.delete(); - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java index 276a41b6..4701c485 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/LividColor.java @@ -11,11 +11,10 @@ public class LividColor { private static int tenTicks = 0; public static void init() { - ClientReceiveMessageEvents.ALLOW_GAME.register((message, overlay) -> { + ClientReceiveMessageEvents.GAME.register((message, overlay) -> { if (SkyblockerConfig.get().locations.dungeons.lividColor.enableLividColor && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) { tenTicks = 8; } - return true; }); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index d9f3b473..13ca356a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -2,32 +2,23 @@ package me.xmrvizzy.skyblocker.skyblock.itemlist; import com.google.gson.JsonObject; import com.google.gson.JsonParser; - -import me.xmrvizzy.skyblocker.skyblock.api.RepositoryUpdate; -import net.fabricmc.loader.api.FabricLoader; +import me.xmrvizzy.skyblocker.utils.NEURepo; import net.minecraft.client.MinecraftClient; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.text.Text; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.PullResult; -import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; -import java.util.concurrent.CompletableFuture; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class ItemRegistry { - private static final Logger LOGGER = LoggerFactory.getLogger(ItemRegistry.class); - protected static final String REMOTE_ITEM_REPO = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO"; - public static final Path LOCAL_ITEM_REPO_DIR = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/item-repo"); - - protected static final Path ITEM_LIST_DIR = LOCAL_ITEM_REPO_DIR.resolve("items"); + protected static final Path ITEM_LIST_DIR = NEURepo.LOCAL_REPO_DIR.resolve("items"); protected static final List items = new ArrayList<>(); protected static final Map itemsMap = new HashMap<>(); @@ -36,52 +27,8 @@ public class ItemRegistry { public static boolean filesImported = false; public static void init() { - CompletableFuture.runAsync(ItemRegistry::updateItemRepo) - .whenComplete((result, ex) -> { - if (ex == null) { - ItemStackBuilder.init(); - importItemFiles(); - } - else { - LOGGER.error("[Skyblocker-ItemRegistry] " + ex); - } - }); - } - - private static void updateItemRepo() { - Git git; - if (!Files.isDirectory(LOCAL_ITEM_REPO_DIR)) { - try { - git = Git.cloneRepository() - .setURI(REMOTE_ITEM_REPO) - .setDirectory(LOCAL_ITEM_REPO_DIR.toFile()) - .setBranchesToClone(List.of("refs/heads/master")) - .setBranch("refs/heads/master") - .call(); - git.close(); - LOGGER.info("[Skyblocker Repository Update] Repository updated."); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - try { - git = Git.open(LOCAL_ITEM_REPO_DIR.toFile()); - PullResult pull = git.pull().setRebase(true).call(); - git.close(); - - if (pull.getRebaseResult() == null) { - LOGGER.info("[Skyblocker Repository Update] No update result"); - } else if (pull.getRebaseResult().getStatus().isSuccessful()) { - LOGGER.info("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); - } else if (!pull.getRebaseResult().getStatus().isSuccessful()) { - LOGGER.warn("[Skyblocker Repository Update] Status: " + pull.getRebaseResult().getStatus().name()); - } - } catch (RepositoryNotFoundException e) { - RepositoryUpdate.updateRepository(); - } catch (Exception e) { - e.printStackTrace(); - } - } + NEURepo.runAsyncAfterLoad(ItemStackBuilder::loadPetNums); + NEURepo.runAsyncAfterLoad(ItemRegistry::importItemFiles); } private static void importItemFiles() { @@ -119,8 +66,7 @@ public class ItemRegistry { if (lhsFamilyName.equals(rhsFamilyName)) { if (lhsInternalName.length() != rhsInternalName.length()) return lhsInternalName.length() - rhsInternalName.length(); - else - return lhsInternalName.compareTo(rhsInternalName); + else return lhsInternalName.compareTo(rhsInternalName); } return lhsFamilyName.compareTo(rhsFamilyName); }); @@ -147,8 +93,7 @@ public class ItemRegistry { public static List getRecipes(String internalName) { List result = new ArrayList<>(); for (SkyblockCraftingRecipe recipe : recipes) - if (getInternalName(recipe.result).equals(internalName)) - result.add(recipe); + if (getInternalName(recipe.result).equals(internalName)) result.add(recipe); for (SkyblockCraftingRecipe recipe : recipes) for (ItemStack ingredient : recipe.grid) if (!ingredient.getItem().equals(Items.AIR) && getInternalName(ingredient).equals(internalName)) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java index b2d909a8..d420d54f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemStackBuilder.java @@ -4,6 +4,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.utils.NEURepo; import net.minecraft.item.ItemStack; import net.minecraft.nbt.*; import net.minecraft.text.Text; @@ -16,10 +17,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class ItemStackBuilder { - private final static Path PETNUMS_PATH = ItemRegistry.LOCAL_ITEM_REPO_DIR.resolve("constants/petnums.json"); + private final static Path PETNUMS_PATH = NEURepo.LOCAL_REPO_DIR.resolve("constants/petnums.json"); private static JsonObject petNums; - public static void init() { + public static void loadPetNums() { try { petNums = JsonParser.parseString(Files.readString(PETNUMS_PATH)).getAsJsonObject(); } catch (Exception e) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java new file mode 100644 index 00000000..027cfa7a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -0,0 +1,90 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.xmrvizzy.skyblocker.SkyblockerMod; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager; +import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.errors.RepositoryNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +public class NEURepo { + private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); + public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; + public static final Path LOCAL_REPO_DIR = SkyblockerMod.CONFIG_DIR.resolve("item-repo"); + private static final CompletableFuture REPO_INITIALIZED = initRepository(); + + /** + * Adds command to update repository manually from ingame. + *

+ * TODO A button could be added to the settings menu that will trigger this command. + */ + public static void init() { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> + dispatcher.register(ClientCommandManager.literal(SkyblockerMod.NAMESPACE) + .then(ClientCommandManager.literal("updaterepository").executes(context -> { + deleteAndDownloadRepository(); + return 1; + })))); + } + + public static CompletableFuture initRepository() { + return CompletableFuture.runAsync(() -> { + try { + if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { + try (Git localRepo = Git.open(NEURepo.LOCAL_REPO_DIR.toFile())) { + localRepo.pull().setRebase(true).call(); + LOGGER.info("[Skyblocker] NEU Repository Updated"); + } + } else { + Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); + LOGGER.info("[Skyblocker] NEU Repository Downloaded"); + } + } catch (RepositoryNotFoundException e) { + LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + deleteAndDownloadRepository(); + } catch (Exception e) { + LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + } + }); + } + + public static void deleteAndDownloadRepository() { + CompletableFuture.runAsync(() -> { + try { + ItemRegistry.filesImported = false; + File dir = NEURepo.LOCAL_REPO_DIR.toFile(); + recursiveDelete(dir); + } catch (Exception ex) { + if (MinecraftClient.getInstance().player != null) + MinecraftClient.getInstance().player.sendMessage(Text.translatable("skyblocker.updaterepository.failed"), false); + return; + } + initRepository(); + }); + } + + @SuppressWarnings("ResultOfMethodCallIgnored") + private static void recursiveDelete(File dir) { + File[] children; + if (dir.isDirectory() && !Files.isSymbolicLink(dir.toPath()) && (children = dir.listFiles()) != null) { + for (File child : children) { + recursiveDelete(child); + } + } + dir.delete(); + } + + public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { + return REPO_INITIALIZED.thenRunAsync(runnable); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java new file mode 100644 index 00000000..79308dc3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/RenderHelper.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.utils; + +import me.x150.renderer.render.Renderer3d; +import me.xmrvizzy.skyblocker.mixin.accessor.BeaconBlockEntityRendererInvoker; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +import java.awt.*; + +public class RenderHelper { + public static void renderFilledThroughWallsWithBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + renderFilledThroughWalls(context, pos, colorComponents, alpha); + renderBeaconBeam(context, pos, colorComponents); + } + + public static void renderFilledThroughWalls(WorldRenderContext context, BlockPos pos, float[] colorComponents, float alpha) { + Renderer3d.renderThroughWalls(); + Renderer3d.renderFilled(context.matrixStack(), new Color(colorComponents[0], colorComponents[1], colorComponents[2], alpha), Vec3d.of(pos), new Vec3d(1, 1, 1)); + Renderer3d.stopRenderThroughWalls(); + } + + public static void renderBeaconBeam(WorldRenderContext context, BlockPos pos, float[] colorComponents) { + context.matrixStack().push(); + context.matrixStack().translate(pos.getX() - context.camera().getPos().x, pos.getY() - context.camera().getPos().y, pos.getZ() - context.camera().getPos().z); + BeaconBlockEntityRendererInvoker.renderBeam(context.matrixStack(), context.consumers(), context.tickDelta(), context.world().getTime(), 0, BeaconBlockEntityRenderer.MAX_BEAM_HEIGHT, colorComponents); + context.matrixStack().pop(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index a4e403fc..40c96660 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -1,13 +1,21 @@ package me.xmrvizzy.skyblocker.utils; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; import net.minecraft.scoreboard.Team; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import java.util.ArrayList; @@ -21,6 +29,14 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + private static String profile = ""; + private static String server = ""; + private static String gameType = ""; + private static String locationRaw = ""; + private static String map = ""; + private static long clientWorldJoinTime = 0; + private static boolean sentLocRaw = false; + private static long lastLocRaw = 0; public static boolean isOnSkyblock() { return isOnSkyblock; @@ -34,6 +50,31 @@ public class Utils { return isInjected; } + public static String getProfile() { + return profile; + } + + public static String getServer() { + return server; + } + + public static String getGameType() { + return gameType; + } + + public static String getLocationRaw() { + return locationRaw; + } + + public static String getMap() { + return map; + } + + public static void init() { + ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); + ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + } + public static void sbChecker() { MinecraftClient client = MinecraftClient.getInstance(); List sidebar; @@ -61,13 +102,14 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateLocRaw(); } public static String getLocation() { String location = null; List sidebarLines = getSidebar(); try { - if( sidebarLines != null) { + if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; } @@ -149,4 +191,51 @@ public class Utils { return null; } } + + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { + clientWorldJoinTime = System.currentTimeMillis(); + resetLocRawInfo(); + } + + private static void updateLocRaw() { + if (isOnSkyblock) { + long currentTime = System.currentTimeMillis(); + if (!sentLocRaw && currentTime > clientWorldJoinTime + 1000 && currentTime > lastLocRaw + 15000) { + SkyblockerMod.getInstance().messageScheduler.sendMessageAfterCooldown("/locraw"); + sentLocRaw = true; + lastLocRaw = currentTime; + } + } else { + resetLocRawInfo(); + } + } + + public static boolean onChatMessage(Text text, boolean overlay) { + String message = text.getString(); + if (message.startsWith("{\"server\":") && message.endsWith("}")) { + JsonObject locRaw = JsonParser.parseString(message).getAsJsonObject(); + if (locRaw.has("server")) { + server = locRaw.get("server").getAsString(); + if (locRaw.has("gameType")) { + gameType = locRaw.get("gameType").getAsString(); + } + if (locRaw.has("mode")) { + locationRaw = locRaw.get("mode").getAsString(); + } + if (locRaw.has("map")) { + map = locRaw.get("map").getAsString(); + } + return !sentLocRaw; + } + } + return true; + } + + private static void resetLocRawInfo() { + sentLocRaw = false; + server = ""; + gameType = ""; + locationRaw = ""; + map = ""; + } } \ No newline at end of file diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 858507fe..b40dd52e 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -22,6 +22,8 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", + "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", + "text.autoconfig.skyblocker.option.general.fairySouls.enableFairySoulsHelper": "Enable Fairy Souls Helper", "text.autoconfig.skyblocker.option.general.quicknav": "Quicknav", "text.autoconfig.skyblocker.option.general.quicknav.enableQuicknav": "Enable Quicknav", "text.autoconfig.skyblocker.option.general.backpackPreviewWithoutShift": "View backpack preview without holding Shift", @@ -222,5 +224,7 @@ "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!", - "skyblocker.fishing.reelNow": "Reel in now!" + "skyblocker.fishing.reelNow": "Reel in now!", + "skyblocker.fairySouls.markAllFound": "Marked all fairy souls in the current island as found", + "skyblocker.fairySouls.markAllMissing": "Marked all fairy souls in the current island as missing" } -- cgit From 131d3afe215d1236a46c209569f6b4b0c5bb493e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 17:47:49 -0400 Subject: Add BeaconBlockEntityRendererInvoker to skyblocker.mixins.json --- src/main/resources/skyblocker.mixins.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index f8b39c93..253e42d7 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -17,7 +17,8 @@ "MinecraftClientMixin", "PlayerListHudAccessor", "PlayerListHudMixin", - "RecipeBookWidgetAccessor" + "RecipeBookWidgetAccessor", + "accessor.BeaconBlockEntityRendererInvoker" ], "injectors": { "defaultRequire": 1 -- cgit From 3ecd4afc187a69c174fa4dfa1622e705700f674c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 17:58:00 -0400 Subject: Add profile updating from player list --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 40c96660..6f238b44 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -11,6 +11,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.network.PlayerListEntry; import net.minecraft.scoreboard.Scoreboard; import net.minecraft.scoreboard.ScoreboardObjective; import net.minecraft.scoreboard.ScoreboardPlayerScore; @@ -26,6 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { + private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; @@ -102,6 +104,7 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); + updateFromPlayerList(client); updateLocRaw(); } @@ -192,6 +195,21 @@ public class Utils { } } + private static void updateFromPlayerList(MinecraftClient client) { + if (client.getNetworkHandler() == null) { + return; + } + for (PlayerListEntry playerListEntry : client.getNetworkHandler().getPlayerList()) { + if (playerListEntry.getDisplayName() == null) { + continue; + } + String name = playerListEntry.getDisplayName().getString(); + if (name.startsWith(PROFILE_PREFIX)) { + profile = name.substring(PROFILE_PREFIX.length()); + } + } + } + public static void onClientWorldJoin(ClientPlayNetworkHandler handler, PacketSender sender, MinecraftClient client) { clientWorldJoinTime = System.currentTimeMillis(); resetLocRawInfo(); -- cgit From 284518527393aa3363c15119c41d28f863122e37 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:03:56 -0400 Subject: Abstract different checking methods in Utils --- src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java | 4 ++-- .../java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java index 04ab384f..add81791 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerMod.java @@ -81,9 +81,9 @@ public class SkyblockerMod implements ClientModInitializer { FishingHelper.init(); FairySouls.init(); TabHud.init(); - containerSolverManager.init(); DungeonMap.init(); - scheduler.scheduleCyclic(Utils::sbChecker, 20); + containerSolverManager.init(); + scheduler.scheduleCyclic(Utils::update, 20); scheduler.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 100); scheduler.scheduleCyclic(DungeonBlaze::update, 4); scheduler.scheduleCyclic(LividColor::update, 10); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java index e35ef605..d89a18e0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/BackpackPreview.java @@ -50,7 +50,7 @@ public class BackpackPreview { } public static void tick() { - Utils.sbChecker(); // force update isOnSkyblock to prevent crash on disconnect + Utils.update(); // force update isOnSkyblock to prevent crash on disconnect if (Utils.isOnSkyblock()) { // save all dirty storages saveStorage(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 6f238b44..887476f2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -77,8 +77,14 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } - public static void sbChecker() { + public static void update() { MinecraftClient client = MinecraftClient.getInstance(); + updateFromScoreboard(client); + updateFromPlayerList(client); + updateLocRaw(); + } + + public static void updateFromScoreboard(MinecraftClient client) { List sidebar; if (client.world == null || client.isInSingleplayer() || (sidebar = getSidebar()) == null) { @@ -104,8 +110,6 @@ public class Utils { SkyblockEvents.LEAVE.invoker().onSkyblockLeave(); } isInDungeons = isOnSkyblock && string.contains("The Catacombs"); - updateFromPlayerList(client); - updateLocRaw(); } public static String getLocation() { -- cgit From 08fa8669d4ff3ec098688a3e85b58ee8e9e0eea4 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 18:08:02 -0400 Subject: Add docs to Utils and NEURepo --- .../java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 8 ++++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 33 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 027cfa7a..0de6cecd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -17,6 +17,9 @@ import java.nio.file.Path; import java.util.List; import java.util.concurrent.CompletableFuture; +/** + * Initializes the NEU repo, which contains item metadata and fairy souls location data. Clones the repo if it does not exist and checks for updates. Use {@link #runAsyncAfterLoad(Runnable)} to run code after the repo is initialized. + */ public class NEURepo { private static final Logger LOGGER = LoggerFactory.getLogger(NEURepo.class); public static final String REMOTE_REPO_URL = "https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO.git"; @@ -84,6 +87,11 @@ public class NEURepo { dir.delete(); } + /** + * Runs the given runnable after the NEU repo is initialized. + * @param runnable the runnable to run + * @return a completable future of the given runnable + */ public static CompletableFuture runAsyncAfterLoad(Runnable runnable) { return REPO_INITIALIZED.thenRunAsync(runnable); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 887476f2..1b5019a7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -31,6 +31,10 @@ public class Utils { private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; + /** + * The following fields store data returned from /locraw: {@link #profile}, {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}. + */ + @SuppressWarnings("JavadocDeclaration") private static String profile = ""; private static String server = ""; private static String gameType = ""; @@ -52,22 +56,37 @@ public class Utils { return isInjected; } + /** + * @return the profile parsed from the player list. + */ public static String getProfile() { return profile; } + /** + * @return the server parsed from /locraw. + */ public static String getServer() { return server; } + /** + * @return the game type parsed from /locraw. + */ public static String getGameType() { return gameType; } + /** + * @return the location raw parsed from /locraw. + */ public static String getLocationRaw() { return locationRaw; } + /** + * @return the map parsed from /locraw. + */ public static String getMap() { return map; } @@ -77,6 +96,9 @@ public class Utils { ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); } + /** + * Updates all the fields stored in this class from the sidebar, player list, and /locraw. + */ public static void update() { MinecraftClient client = MinecraftClient.getInstance(); updateFromScoreboard(client); @@ -84,6 +106,9 @@ public class Utils { updateLocRaw(); } + /** + * Updates {@link #isOnSkyblock}, {@link #isInDungeons}, and {@link #isInjected} from the scoreboard. + */ public static void updateFromScoreboard(MinecraftClient client) { List sidebar; @@ -219,6 +244,9 @@ public class Utils { resetLocRawInfo(); } + /** + * Sends /locraw to the server if the player is on skyblock and on a new island. + */ private static void updateLocRaw() { if (isOnSkyblock) { long currentTime = System.currentTimeMillis(); @@ -232,6 +260,11 @@ public class Utils { } } + /** + * Parses the /locraw reply from the server + * + * @return not display the message in chat is the command is sent by the mod + */ public static boolean onChatMessage(Text text, boolean overlay) { String message = text.getString(); if (message.startsWith("{\"server\":") && message.endsWith("}")) { -- cgit From d1bdb78708bfd7f289b59e17dd0b225c1aedd9a2 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Thu, 25 May 2023 20:13:03 -0400 Subject: Fix fairy souls option name --- src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java | 2 +- src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index f296e487..31887a90 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -224,7 +224,7 @@ public class SkyblockerConfig implements ConfigData { } public static class FairySouls { - public boolean enableFairySouls = true; + public boolean enableFairySoulsHelper = false; } public static class Hitbox { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index 4480c5e1..ff3c7fae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -114,7 +114,7 @@ public class FairySouls { } public static void render(WorldRenderContext context) { - if (!SkyblockerConfig.get().general.fairySouls.enableFairySouls) { + if (!SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper) { return; } if (!fairySoulsLoaded.isDone()) { -- cgit From a0d504d9e2ffa95bbd2d9d99e546a44572417de9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 31 May 2023 08:31:57 +0800 Subject: Updated NEU repo error handling --- src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 5 ++--- .../me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java | 4 +++- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 7 +++++-- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index ff3c7fae..838b2a55 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -63,10 +63,9 @@ public class FairySouls { } reader.close(); } catch (IOException e) { - e.printStackTrace(); - LOGGER.error("Failed to load found fairy souls."); + LOGGER.error("Failed to load found fairy souls", e); } catch (Exception e) { - e.printStackTrace(); + LOGGER.error("Encountered unknown exception loading fairy souls", e); } }); ClientLifecycleEvents.CLIENT_STOPPING.register(FairySouls::saveFoundFairySouls); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java index 13ca356a..dc63e351 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemRegistry.java @@ -36,7 +36,9 @@ public class ItemRegistry { File dir = ITEM_LIST_DIR.toFile(); File[] files = dir.listFiles(); - assert files != null; + if (files == null) { + return; + } for (File file : files) { Path path = ITEM_LIST_DIR.resolve(file.getName()); try { diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 0de6cecd..5254feb1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -7,6 +7,7 @@ import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallba import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.TransportException; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,11 +53,13 @@ public class NEURepo { Git.cloneRepository().setURI(REMOTE_REPO_URL).setDirectory(NEURepo.LOCAL_REPO_DIR.toFile()).setBranchesToClone(List.of("refs/heads/master")).setBranch("refs/heads/master").call().close(); LOGGER.info("[Skyblocker] NEU Repository Downloaded"); } + } catch (TransportException e){ + LOGGER.error("[Skyblocker] Transport operation failed. Most likely unable to connect to the remote NEU repo on github", e); } catch (RepositoryNotFoundException e) { - LOGGER.warn("Local NEU Repository not found or corrupted, downloading new one", e); + LOGGER.warn("[Skyblocker] Local NEU Repository not found or corrupted, downloading new one", e); deleteAndDownloadRepository(); } catch (Exception e) { - LOGGER.error("Encountered unknown exception while initializing NEU Repository", e); + LOGGER.error("[Skyblocker] Encountered unknown exception while initializing NEU Repository", e); } }); } -- cgit From 5f8683ab480d9efadbe1b39c006bcc33ae68458e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:51:19 +0800 Subject: Narrowed access to methods --- src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java index 5254feb1..29b39aa3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/NEURepo.java @@ -41,7 +41,7 @@ public class NEURepo { })))); } - public static CompletableFuture initRepository() { + private static CompletableFuture initRepository() { return CompletableFuture.runAsync(() -> { try { if (Files.isDirectory(NEURepo.LOCAL_REPO_DIR)) { @@ -64,7 +64,7 @@ public class NEURepo { }); } - public static void deleteAndDownloadRepository() { + private static void deleteAndDownloadRepository() { CompletableFuture.runAsync(() -> { try { ItemRegistry.filesImported = false; -- cgit From 3f7d97daa8b531c6bbb2019106947575cbe0b89a Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:25:22 +0800 Subject: Fix profile detection --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 1b5019a7..94ead7c1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -27,7 +27,7 @@ import java.util.List; * Utility variables and methods for retrieving Skyblock related information. */ public class Utils { - private static final String PROFILE_PREFIX = "§r§e§lProfile: §r§a"; + private static final String PROFILE_PREFIX = "Profile: "; private static boolean isOnSkyblock = false; private static boolean isInDungeons = false; private static boolean isInjected = false; -- cgit From 8dbfca923398ce1c5c279fcdd07371d4624b2f5e Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:55:11 +0800 Subject: Refactor rendering checks --- .../me/xmrvizzy/skyblocker/skyblock/FairySouls.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java index 838b2a55..ccffdcca 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/FairySouls.java @@ -113,19 +113,11 @@ public class FairySouls { } public static void render(WorldRenderContext context) { - if (!SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper) { - return; - } - if (!fairySoulsLoaded.isDone()) { - LOGGER.warn("Fairy souls are not loaded yet."); - return; - } - if (!fairySouls.containsKey(Utils.getLocationRaw())) { - return; - } - for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { - float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); - RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + if (SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper && fairySoulsLoaded.isDone() && fairySouls.containsKey(Utils.getLocationRaw())) { + for (BlockPos fairySoul : fairySouls.get(Utils.getLocationRaw())) { + float[] colorComponents = isFairySoulNotFound(fairySoul) ? DyeColor.GREEN.getColorComponents() : DyeColor.RED.getColorComponents(); + RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, fairySoul, colorComponents, 0.5F); + } } } -- cgit From 272131e0c082493e0df12b510012460f07a88694 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sun, 18 Jun 2023 11:39:09 +0800 Subject: Fix cancel game message incompatibility --- src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 94ead7c1..90939fe8 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -94,6 +94,7 @@ public class Utils { public static void init() { ClientPlayConnectionEvents.JOIN.register(Utils::onClientWorldJoin); ClientReceiveMessageEvents.ALLOW_GAME.register(Utils::onChatMessage); + ClientReceiveMessageEvents.GAME_CANCELED.register(Utils::onChatMessage); // Somehow this works even though onChatMessage returns a boolean } /** -- cgit From 4a1075ce0e7c7bb53179820c44f639ce79fe7404 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:34:16 +0800 Subject: Add Chronomatron Solver --- .../skyblocker/config/SkyblockerConfig.java | 10 ++ .../me/xmrvizzy/skyblocker/gui/ColorHighlight.java | 15 +++ .../xmrvizzy/skyblocker/gui/ContainerSolver.java | 21 +++- .../skyblocker/gui/ContainerSolverManager.java | 20 +++- .../skyblocker/mixin/HandledScreenMixin.java | 45 +++++++- .../skyblocker/skyblock/dungeon/CroesusHelper.java | 4 +- .../skyblock/dungeon/terminal/ColorTerminal.java | 4 +- .../skyblock/dungeon/terminal/OrderTerminal.java | 4 +- .../dungeon/terminal/StartsWithTerminal.java | 4 +- .../skyblock/experiment/ChronomatronSolver.java | 126 +++++++++++++++++++++ .../skyblock/experiment/ExperimentSolver.java | 59 ++++++++++ .../skyblock/experiment/SuperpairsSolver.java | 44 +++++++ .../skyblock/experiment/UltrasequencerSolver.java | 40 +++++++ 13 files changed, 378 insertions(+), 18 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 31887a90..5621a258 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -146,6 +146,10 @@ public class SkyblockerConfig implements ConfigData { @ConfigEntry.Gui.CollapsibleObject() public Bars bars = new Bars(); + @ConfigEntry.Category("experiments") + @ConfigEntry.Gui.CollapsibleObject() + public Experiments experiments = new Experiments(); + @ConfigEntry.Category("fishing") @ConfigEntry.Gui.CollapsibleObject() public Fishing fishing = new Fishing(); @@ -219,6 +223,12 @@ public class SkyblockerConfig implements ConfigData { } } + public static class Experiments { + public boolean enableChronomatronSolver = true; + public boolean enableSuperpairsSolver = true; + public boolean enableUltrasequencerSolver = true; + } + public static class Fishing { public boolean enableFishingHelper = true; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java index 5120ceac..d0bd68ae 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java @@ -1,4 +1,19 @@ package me.xmrvizzy.skyblocker.gui; public record ColorHighlight(int slot, int color) { + public static ColorHighlight red(int slot) { + return new ColorHighlight(slot, ContainerSolver.RED_HIGHLIGHT); + } + + public static ColorHighlight yellow(int slot) { + return new ColorHighlight(slot, ContainerSolver.YELLOW_HIGHLIGHT); + } + + public static ColorHighlight green(int slot) { + return new ColorHighlight(slot, ContainerSolver.GREEN_HIGHLIGHT); + } + + public static ColorHighlight gray(int slot) { + return new ColorHighlight(slot, ContainerSolver.GRAY_HIGHLIGHT); + } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java index 84de64eb..e52855a2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java @@ -1,5 +1,6 @@ package me.xmrvizzy.skyblocker.gui; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; import java.util.List; @@ -11,22 +12,30 @@ import java.util.regex.Pattern; */ public abstract class ContainerSolver { private final Pattern CONTAINER_NAME; - protected final static int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; - protected final static int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + protected static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; + protected static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; + protected static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + protected static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; - public ContainerSolver(String containerName) { + protected ContainerSolver(String containerName) { CONTAINER_NAME = Pattern.compile(containerName); } - public abstract boolean isEnabled(); + protected abstract boolean isEnabled(); public Pattern getName() { return CONTAINER_NAME; } - public abstract List getColors(String[] groups, Map slots); + protected void start(GenericContainerScreen screen) { + } + + protected void reset() { + } + + protected abstract List getColors(String[] groups, Map slots); - public void trimEdges(Map slots, int rows) { + protected void trimEdges(Map slots, int rows) { for (int i = 0; i < rows; i++) { slots.remove(9 * i); slots.remove(9 * i + 8); diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 354e7e3a..43bf32d7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -6,6 +6,9 @@ import me.xmrvizzy.skyblocker.skyblock.dungeon.CroesusHelper; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.ColorTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.OrderTerminal; import me.xmrvizzy.skyblocker.skyblock.dungeon.terminal.StartsWithTerminal; +import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.DrawContext; @@ -36,10 +39,17 @@ public class ContainerSolverManager { new ColorTerminal(), new OrderTerminal(), new StartsWithTerminal(), - new CroesusHelper() + new CroesusHelper(), + new ChronomatronSolver(), + new SuperpairsSolver(), + new UltrasequencerSolver() }; } + public ContainerSolver getCurrentSolver() { + return currentSolver; + } + public void init() { ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (Utils.isOnSkyblock() && screen instanceof GenericContainerScreen genericContainerScreen) { @@ -50,6 +60,7 @@ public class ContainerSolverManager { onDraw(context, genericContainerScreen.getScreenHandler().slots.subList(0, genericContainerScreen.getScreenHandler().getRows() * 9)); matrices.pop(); }); + ScreenEvents.remove(screen).register(screen1 -> clearScreen()); onSetScreen(genericContainerScreen); } else { clearScreen(); @@ -67,16 +78,19 @@ public class ContainerSolverManager { if (matcher.matches()) { currentSolver = solver; groups = new String[matcher.groupCount()]; - for (int i = 0; i < groups.length; i++) + for (int i = 0; i < groups.length; i++) { groups[i] = matcher.group(i + 1); + } + currentSolver.start(screen); return; } } } - currentSolver = null; + clearScreen(); } public void clearScreen() { + currentSolver.reset(); currentSolver = null; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 2638db7e..b8df488c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -1,19 +1,27 @@ package me.xmrvizzy.skyblocker.mixin; +import me.xmrvizzy.skyblocker.SkyblockerMod; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; import me.xmrvizzy.skyblocker.skyblock.BackpackPreview; +import me.xmrvizzy.skyblocker.skyblock.experiment.ChronomatronSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.ExperimentSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.SuperpairsSolver; +import me.xmrvizzy.skyblocker.skyblock.experiment.UltrasequencerSolver; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -44,7 +52,7 @@ public abstract class HandledScreenMixin extends Screen { String strName = stackName.getString(); if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); } - + //Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); @@ -53,4 +61,39 @@ public abstract class HandledScreenMixin extends Screen { if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } } + + @Redirect(method = {"drawSlot", "drawMouseoverTooltip"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + private ItemStack skyblocker$experimentSolvers$getStack(Slot slot) { + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { + ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex()); + return itemStack == null ? slot.getStack() : itemStack; + } + return slot.getStack(); + } + + @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V")) + private void skyblockmod_onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { + if (slot != null) { + ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); + if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { + if (currentSolver instanceof ChronomatronSolver chronomatronSolver) { + Item item = chronomatronSolver.getChronomatronSlots().get(chronomatronSolver.getChronomatronCurrentOrdinal()); + if (slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) { + if (chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { + chronomatronSolver.setState(ExperimentSolver.State.END); + } + } + } else if (currentSolver instanceof SuperpairsSolver superpairsSolver) { + superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex()); + superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); + } else if (currentSolver instanceof UltrasequencerSolver ultrasequencerSolver) { + if (slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { + int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); + } + } + } + } + } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index ec3655f0..5e7ca95f 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -14,12 +14,12 @@ public class CroesusHelper extends ContainerSolver { public CroesusHelper() { super("^Croesus$"); } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.croesusHelper; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 0bfc0d60..30376254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -27,13 +27,13 @@ public class ColorTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { targetColor = null; return SkyblockerConfig.get().locations.dungeons.terminals.solveColor; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java index 1cf0dcfc..3b4e1c50 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/OrderTerminal.java @@ -21,14 +21,14 @@ public class OrderTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { orderedSlots = null; currentNum = 0; return SkyblockerConfig.get().locations.dungeons.terminals.solveOrder; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { if(orderedSlots == null && !orderSlots(slots)) return Collections.emptyList(); while(currentNum < PANES_NUM && Items.LIME_STAINED_GLASS_PANE.equals(slots.get(orderedSlots[currentNum]).getItem())) diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index 26d2a2c4..a836a679 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -15,12 +15,12 @@ public class StartsWithTerminal extends ContainerSolver { } @Override - public boolean isEnabled() { + protected boolean isEnabled() { return SkyblockerConfig.get().locations.dungeons.terminals.solveStartsWith; } @Override - public List getColors(String[] groups, Map slots) { + protected List getColors(String[] groups, Map slots) { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java new file mode 100644 index 00000000..ee88b98f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -0,0 +1,126 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import com.google.common.collect.ImmutableMap; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; + +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ChronomatronSolver extends ExperimentSolver { + public static final ImmutableMap TERRACOTTA_TO_GLASS = ImmutableMap.ofEntries( + new AbstractMap.SimpleImmutableEntry<>(Items.RED_TERRACOTTA, Items.RED_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.ORANGE_TERRACOTTA, Items.ORANGE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.YELLOW_TERRACOTTA, Items.YELLOW_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIME_TERRACOTTA, Items.LIME_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.GREEN_TERRACOTTA, Items.GREEN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.CYAN_TERRACOTTA, Items.CYAN_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.LIGHT_BLUE_TERRACOTTA, Items.LIGHT_BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.BLUE_TERRACOTTA, Items.BLUE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PURPLE_TERRACOTTA, Items.PURPLE_STAINED_GLASS), + new AbstractMap.SimpleImmutableEntry<>(Items.PINK_TERRACOTTA, Items.PINK_STAINED_GLASS) + ); + + private final List chronomatronSlots = new ArrayList<>(); + private int chronomatronChainLengthCount; + private int chronomatronCurrentSlot; + private int chronomatronCurrentOrdinal; + + public ChronomatronSolver() { + super("^Chronomatron \\("); + } + + public List getChronomatronSlots() { + return chronomatronSlots; + } + + public int getChronomatronCurrentOrdinal() { + return chronomatronCurrentOrdinal; + } + + public int incrementChronomatronCurrentOrdinal() { + return ++chronomatronCurrentOrdinal; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableChronomatronSolver; + } + + @Override + protected void tick(Screen screen) { + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (chronomatronCurrentSlot == 0) { + for (int index = 10; index < 43; index++) { + if (inventory.getStack(index).hasEnchantments()) { + if (chronomatronSlots.size() <= chronomatronChainLengthCount) { + chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); + state = State.WAIT; + } else { + chronomatronChainLengthCount++; + } + chronomatronCurrentSlot = index; + return; + } + } + } else if (!inventory.getStack(chronomatronCurrentSlot).hasEnchantments()) { + chronomatronCurrentSlot = 0; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + chronomatronChainLengthCount = 0; + chronomatronCurrentOrdinal = 0; + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } + } + + @Override + protected List getColors(String[] groups, Map slots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; + } + + @Override + protected void reset() { + super.reset(); + chronomatronSlots.clear(); + chronomatronChainLengthCount = 0; + chronomatronCurrentSlot = 0; + chronomatronCurrentOrdinal = 0; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java new file mode 100644 index 00000000..91eabcfe --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -0,0 +1,59 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ContainerSolver; +import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.item.ItemStack; + +import java.util.HashMap; +import java.util.Map; + +public abstract class ExperimentSolver extends ContainerSolver { + public enum State { + REMEMBER, WAIT, SHOW, END + } + + protected State state = State.REMEMBER; + protected final Map slots = new HashMap<>(); + + protected ExperimentSolver(String containerName) { + super(containerName); + } + + public State getState() { + return state; + } + + public void setState(State state) { + this.state = state; + } + + public Map getSlots() { + return slots; + } + + @Override + protected final boolean isEnabled() { + return isEnabled(SkyblockerConfig.get().general.experiments); + } + + protected abstract boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig); + + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + state = State.REMEMBER; + ScreenEvents.afterTick(screen).register(this::tick); + } + + @Override + protected void reset() { + super.reset(); + state = State.REMEMBER; + slots.clear(); + } + + protected abstract void tick(Screen screen); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java new file mode 100644 index 00000000..5a5993bc --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class SuperpairsSolver extends ExperimentSolver { + private int superpairsPrevClickedSlot; + private ItemStack superpairsCurrentSlot; + private final Set superpairsDuplicatedSlots = new HashSet<>(); + + public SuperpairsSolver() { + super("^Superpairs \\("); + } + + public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { + this.superpairsPrevClickedSlot = superpairsPrevClickedSlot; + } + + public void setSuperpairsCurrentSlot(ItemStack superpairsCurrentSlot) { + this.superpairsCurrentSlot = superpairsCurrentSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableSuperpairsSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java new file mode 100644 index 00000000..8ea44bce --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.experiment; + +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import me.xmrvizzy.skyblocker.gui.ColorHighlight; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemStack; + +import java.util.List; +import java.util.Map; + +public class UltrasequencerSolver extends ExperimentSolver { + private int ultrasequencerNextSlot; + + public UltrasequencerSolver() { + super("^Ultrasequencer \\("); + } + + public int getUltrasequencerNextSlot() { + return ultrasequencerNextSlot; + } + + public void setUltrasequencerNextSlot(int ultrasequencerNextSlot) { + this.ultrasequencerNextSlot = ultrasequencerNextSlot; + } + + @Override + protected boolean isEnabled(SkyblockerConfig.Experiments experimentsConfig) { + return experimentsConfig.enableUltrasequencerSolver; + } + + @Override + protected void tick(Screen screen) { + + } + + @Override + protected List getColors(String[] groups, Map slots) { + return null; + } +} -- cgit From 8cf9c0835c5ed1567acf10f6e22766212f33dbc6 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:46:46 +0800 Subject: Add Superpairs and Ultrasequencer Solver --- .../skyblock/experiment/SuperpairsSolver.java | 43 +++++++++++++++--- .../skyblock/experiment/UltrasequencerSolver.java | 51 +++++++++++++++++++++- 2 files changed, 85 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 5a5993bc..117bcdf3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -3,12 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; public class SuperpairsSolver extends ExperimentSolver { private int superpairsPrevClickedSlot; @@ -34,11 +33,41 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { + if (state == State.SHOW) { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { + reset(); + } else if (slots.get(superpairsPrevClickedSlot) == null) { + ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); + if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { + slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + slots.put(superpairsPrevClickedSlot, itemStack); + superpairsCurrentSlot = itemStack; + } + } + } + } else { + reset(); + } } @Override - protected List getColors(String[] groups, Map slots) { - return null; + protected List getColors(String[] groups, Map displaySlots) { + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : displaySlots.entrySet()){ + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = slots.get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } + } + } + return highlights; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 8ea44bce..edda257c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -3,8 +3,11 @@ package me.xmrvizzy.skyblocker.skyblock.experiment; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.gui.ColorHighlight; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -30,11 +33,55 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { - + if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { + switch (state) { + case REMEMBER -> { + Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); + if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { + for (int index = 9; index < 45; index++) { + ItemStack itemStack = inventory.getStack(index); + String name = itemStack.getName().getString(); + if (name.matches("\\d+")) { + if (name.equals("1")) { + ultrasequencerNextSlot = index; + } + slots.put(index, itemStack); + } + } + state = State.WAIT; + } + } + case WAIT -> { + if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { + state = State.SHOW; + } + } + case END -> { + String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); + if (!name.startsWith("Timer: ")) { + if (name.equals("Remember the pattern!")) { + slots.clear(); + state = State.REMEMBER; + } else { + reset(); + } + } + } + } + } else { + reset(); + } } @Override protected List getColors(String[] groups, Map slots) { - return null; + List highlights = new ArrayList<>(); + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + if (index == ultrasequencerNextSlot) { + highlights.add(ColorHighlight.green(index)); + } + } + return highlights; } } -- cgit From 9f302adedceb0ab4f8ecd23cbb416f454fb688af Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:49:38 +0800 Subject: Fix mixin method name --- src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index b8df488c..753ae986 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -73,7 +73,7 @@ public abstract class HandledScreenMixin extends Screen { } @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V")) - private void skyblockmod_onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { + private void skyblocker$experimentSolvers$onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { if (slot != null) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { -- cgit From e9c2a6916ff744c935c4330c259b641159ec9b80 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 16:56:15 +0800 Subject: Fix Superpairs Solver initial state and refactor Experiment Solver fields to private --- .../skyblock/experiment/ChronomatronSolver.java | 8 ++++---- .../skyblocker/skyblock/experiment/ExperimentSolver.java | 4 ++-- .../skyblocker/skyblock/experiment/SuperpairsSolver.java | 16 +++++++++++----- .../skyblock/experiment/UltrasequencerSolver.java | 12 ++++++------ 4 files changed, 23 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index ee88b98f..1a6f0b55 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -58,7 +58,7 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Chronomatron (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (chronomatronCurrentSlot == 0) { @@ -66,7 +66,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (inventory.getStack(index).hasEnchantments()) { if (chronomatronSlots.size() <= chronomatronChainLengthCount) { chronomatronSlots.add(TERRACOTTA_TO_GLASS.get(inventory.getStack(index).getItem())); - state = State.WAIT; + setState(State.WAIT); } else { chronomatronChainLengthCount++; } @@ -80,7 +80,7 @@ public class ChronomatronSolver extends ExperimentSolver { } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { @@ -89,7 +89,7 @@ public class ChronomatronSolver extends ExperimentSolver { if (name.equals("Remember the pattern!")) { chronomatronChainLengthCount = 0; chronomatronCurrentOrdinal = 0; - state = State.REMEMBER; + setState(State.REMEMBER); } else { reset(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java index 91eabcfe..5dad908e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ExperimentSolver.java @@ -15,8 +15,8 @@ public abstract class ExperimentSolver extends ContainerSolver { REMEMBER, WAIT, SHOW, END } - protected State state = State.REMEMBER; - protected final Map slots = new HashMap<>(); + private State state = State.REMEMBER; + private final Map slots = new HashMap<>(); protected ExperimentSolver(String containerName) { super(containerName); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index 117bcdf3..f40b0fa0 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -31,17 +31,23 @@ public class SuperpairsSolver extends ExperimentSolver { return experimentsConfig.enableSuperpairsSolver; } + @Override + protected void start(GenericContainerScreen screen) { + super.start(screen); + setState(State.SHOW); + } + @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) { - if (state == State.SHOW) { + if (getState() == State.SHOW) { if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) { reset(); - } else if (slots.get(superpairsPrevClickedSlot) == null) { + } else if (getSlots().get(superpairsPrevClickedSlot) == null) { ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot); if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) { - slots.entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); - slots.put(superpairsPrevClickedSlot, itemStack); + getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey())); + getSlots().put(superpairsPrevClickedSlot, itemStack); superpairsCurrentSlot = itemStack; } } @@ -57,7 +63,7 @@ public class SuperpairsSolver extends ExperimentSolver { for (Map.Entry indexStack : displaySlots.entrySet()){ int index = indexStack.getKey(); ItemStack displayStack = indexStack.getValue(); - ItemStack stack = slots.get(index); + ItemStack stack = getSlots().get(index); if (stack != null && !ItemStack.areEqual(stack, displayStack)) { if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { highlights.add(ColorHighlight.green(index)); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index edda257c..90968fe2 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -34,7 +34,7 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected void tick(Screen screen) { if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) { - switch (state) { + switch (getState()) { case REMEMBER -> { Inventory inventory = genericContainerScreen.getScreenHandler().getInventory(); if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) { @@ -45,23 +45,23 @@ public class UltrasequencerSolver extends ExperimentSolver { if (name.equals("1")) { ultrasequencerNextSlot = index; } - slots.put(index, itemStack); + getSlots().put(index, itemStack); } } - state = State.WAIT; + setState(State.WAIT); } } case WAIT -> { if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) { - state = State.SHOW; + setState(State.SHOW); } } case END -> { String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString(); if (!name.startsWith("Timer: ")) { if (name.equals("Remember the pattern!")) { - slots.clear(); - state = State.REMEMBER; + getSlots().clear(); + setState(State.REMEMBER); } else { reset(); } -- cgit From 631dd509925041c8ca6b63687fec565ecdff585d Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 16 Jun 2023 23:34:51 +0800 Subject: Fix currentSolver null crash and refactor mixin --- .../me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java | 6 ++++-- .../me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 14 +++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java index 43bf32d7..0c27704d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolverManager.java @@ -90,8 +90,10 @@ public class ContainerSolverManager { } public void clearScreen() { - currentSolver.reset(); - currentSolver = null; + if (currentSolver != null) { + currentSolver.reset(); + currentSolver = null; + } } public void markDirty() { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 753ae986..6d523343 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -19,8 +19,10 @@ import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @@ -62,7 +64,17 @@ public abstract class HandledScreenMixin extends Screen { } } - @Redirect(method = {"drawSlot", "drawMouseoverTooltip"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + @Redirect(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0)) + private ItemStack skyblocker$experimentSolvers$replaceTooltipDisplayStack(Slot slot) { + return skyblocker$experimentSolvers$getStack(slot); + } + + @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 10), ordinal = 0) + private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, MatrixStack matrices, Slot slot) { + return skyblocker$experimentSolvers$getStack(slot); + } + + @Unique private ItemStack skyblocker$experimentSolvers$getStack(Slot slot) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { -- cgit From 28699078b09780e9447b72b2859bba46b0e8dca9 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 12:52:19 +0800 Subject: Fix solver detection and highlights --- .../skyblock/experiment/ChronomatronSolver.java | 16 +++++++------ .../skyblock/experiment/SuperpairsSolver.java | 26 ++++++++++++---------- .../skyblock/experiment/UltrasequencerSolver.java | 11 ++------- 3 files changed, 25 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java index 1a6f0b55..40793169 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/ChronomatronSolver.java @@ -35,7 +35,7 @@ public class ChronomatronSolver extends ExperimentSolver { private int chronomatronCurrentOrdinal; public ChronomatronSolver() { - super("^Chronomatron \\("); + super("^Chronomatron \\(\\w+\\)$"); } public List getChronomatronSlots() { @@ -104,12 +104,14 @@ public class ChronomatronSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - ItemStack stack = indexStack.getValue(); - Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); - if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { - highlights.add(ColorHighlight.green(index)); + if (getState() == State.SHOW && chronomatronSlots.size() > chronomatronCurrentOrdinal) { + for (Map.Entry indexStack : slots.entrySet()) { + int index = indexStack.getKey(); + ItemStack stack = indexStack.getValue(); + Item item = chronomatronSlots.get(chronomatronCurrentOrdinal); + if (stack.isOf(item) || TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) { + highlights.add(ColorHighlight.green(index)); + } } } return highlights; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java index f40b0fa0..9f6e8b2a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/SuperpairsSolver.java @@ -15,7 +15,7 @@ public class SuperpairsSolver extends ExperimentSolver { private final Set superpairsDuplicatedSlots = new HashSet<>(); public SuperpairsSolver() { - super("^Superpairs \\("); + super("^Superpairs \\(\\w+\\)$"); } public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) { @@ -60,17 +60,19 @@ public class SuperpairsSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map displaySlots) { List highlights = new ArrayList<>(); - for (Map.Entry indexStack : displaySlots.entrySet()){ - int index = indexStack.getKey(); - ItemStack displayStack = indexStack.getValue(); - ItemStack stack = getSlots().get(index); - if (stack != null && !ItemStack.areEqual(stack, displayStack)) { - if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { - highlights.add(ColorHighlight.green(index)); - } else if (superpairsDuplicatedSlots.contains(index)) { - highlights.add(ColorHighlight.yellow(index)); - } else { - highlights.add(ColorHighlight.red(index)); + if (getState() == State.SHOW) { + for (Map.Entry indexStack : displaySlots.entrySet()) { + int index = indexStack.getKey(); + ItemStack displayStack = indexStack.getValue(); + ItemStack stack = getSlots().get(index); + if (stack != null && !ItemStack.areEqual(stack, displayStack)) { + if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) { + highlights.add(ColorHighlight.green(index)); + } else if (superpairsDuplicatedSlots.contains(index)) { + highlights.add(ColorHighlight.yellow(index)); + } else { + highlights.add(ColorHighlight.red(index)); + } } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java index 90968fe2..45d6c0c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/experiment/UltrasequencerSolver.java @@ -15,7 +15,7 @@ public class UltrasequencerSolver extends ExperimentSolver { private int ultrasequencerNextSlot; public UltrasequencerSolver() { - super("^Ultrasequencer \\("); + super("^Ultrasequencer \\(\\w+\\)$"); } public int getUltrasequencerNextSlot() { @@ -75,13 +75,6 @@ public class UltrasequencerSolver extends ExperimentSolver { @Override protected List getColors(String[] groups, Map slots) { - List highlights = new ArrayList<>(); - for (Map.Entry indexStack : slots.entrySet()) { - int index = indexStack.getKey(); - if (index == ultrasequencerNextSlot) { - highlights.add(ColorHighlight.green(index)); - } - } - return highlights; + return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>(); } } -- cgit From 2825aa0dd980f1909941cea87e37d47b9c80efab Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 16:35:36 +0800 Subject: Refactor ColorHighlight --- .../java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java | 13 +++++++++---- .../java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java | 10 +++------- .../xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java | 9 ++++++--- .../skyblocker/skyblock/dungeon/terminal/ColorTerminal.java | 13 ++++++------- .../skyblock/dungeon/terminal/StartsWithTerminal.java | 7 ++++--- 5 files changed, 28 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java index d0bd68ae..4367e6e7 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ColorHighlight.java @@ -1,19 +1,24 @@ package me.xmrvizzy.skyblocker.gui; public record ColorHighlight(int slot, int color) { + private static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; + private static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; + private static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; + private static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + public static ColorHighlight red(int slot) { - return new ColorHighlight(slot, ContainerSolver.RED_HIGHLIGHT); + return new ColorHighlight(slot, RED_HIGHLIGHT); } public static ColorHighlight yellow(int slot) { - return new ColorHighlight(slot, ContainerSolver.YELLOW_HIGHLIGHT); + return new ColorHighlight(slot, YELLOW_HIGHLIGHT); } public static ColorHighlight green(int slot) { - return new ColorHighlight(slot, ContainerSolver.GREEN_HIGHLIGHT); + return new ColorHighlight(slot, GREEN_HIGHLIGHT); } public static ColorHighlight gray(int slot) { - return new ColorHighlight(slot, ContainerSolver.GRAY_HIGHLIGHT); + return new ColorHighlight(slot, GRAY_HIGHLIGHT); } } \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java index e52855a2..c5e3cf09 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java +++ b/src/main/java/me/xmrvizzy/skyblocker/gui/ContainerSolver.java @@ -11,20 +11,16 @@ import java.util.regex.Pattern; * Abstract class for gui solvers. Extend this class to add a new gui solver, like terminal solvers or experiment solvers. */ public abstract class ContainerSolver { - private final Pattern CONTAINER_NAME; - protected static final int RED_HIGHLIGHT = 64 << 24 | 255 << 16; - protected static final int YELLOW_HIGHLIGHT = 128 << 24 | 255 << 16 | 255 << 8; - protected static final int GREEN_HIGHLIGHT = 128 << 24 | 64 << 16 | 196 << 8 | 64; - protected static final int GRAY_HIGHLIGHT = 128 << 24 | 64 << 16 | 64 << 8 | 64; + private final Pattern containerName; protected ContainerSolver(String containerName) { - CONTAINER_NAME = Pattern.compile(containerName); + this.containerName = Pattern.compile(containerName); } protected abstract boolean isEnabled(); public Pattern getName() { - return CONTAINER_NAME; + return containerName; } protected void start(GenericContainerScreen screen) { diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java index 5e7ca95f..2d868782 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/CroesusHelper.java @@ -11,7 +11,9 @@ import java.util.Map; public class CroesusHelper extends ContainerSolver { - public CroesusHelper() { super("^Croesus$"); } + public CroesusHelper() { + super("^Croesus$"); + } @Override protected boolean isEnabled() { @@ -23,8 +25,9 @@ public class CroesusHelper extends ContainerSolver { List highlights = new ArrayList<>(); for (Map.Entry entry : slots.entrySet()) { ItemStack stack = entry.getValue(); - if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) - highlights.add(new ColorHighlight(entry.getKey(), GRAY_HIGHLIGHT)); + if (stack != null && stack.getNbt() != null && stack.getNbt().toString().contains("opened")) { + highlights.add(ColorHighlight.gray(entry.getKey())); + } } return highlights; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java index 30376254..add30907 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/ColorTerminal.java @@ -6,7 +6,6 @@ import me.xmrvizzy.skyblocker.gui.ContainerSolver; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -// import net.minecraft.registry.Registry; import net.minecraft.registry.Registries; import net.minecraft.util.DyeColor; import net.minecraft.util.Identifier; @@ -37,17 +36,18 @@ public class ColorTerminal extends ContainerSolver { trimEdges(slots, 6); List highlights = new ArrayList<>(); String colorString = groups[0]; - if(targetColor == null) { + if (targetColor == null) { targetColor = colorFromName.get(colorString); - if(targetColor == null) { + if (targetColor == null) { LOGGER.error("[Skyblocker] Couldn't find dye color corresponding to \"" + colorString + "\""); return Collections.emptyList(); } } - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack itemStack = slot.getValue(); - if(!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!itemStack.hasEnchantments() && targetColor.equals(itemColor.get(itemStack.getItem()))) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } @@ -63,7 +63,6 @@ public class ColorTerminal extends ContainerSolver { itemColor = new HashMap<>(); for (DyeColor color : DyeColor.values()) for (String item : new String[]{"dye", "wool", "stained_glass", "terracotta"}) - // itemColor.put(Registry.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Registries.ITEM.get(new Identifier(color.getName() + '_' + item)), color); itemColor.put(Items.BONE_MEAL, DyeColor.WHITE); itemColor.put(Items.LAPIS_LAZULI, DyeColor.BLUE); diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java index a836a679..18326254 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/terminal/StartsWithTerminal.java @@ -24,10 +24,11 @@ public class StartsWithTerminal extends ContainerSolver { trimEdges(slots, 6); String prefix = groups[0]; List highlights = new ArrayList<>(); - for(Map.Entry slot : slots.entrySet()) { + for (Map.Entry slot : slots.entrySet()) { ItemStack stack = slot.getValue(); - if(!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) - highlights.add(new ColorHighlight(slot.getKey(), GREEN_HIGHLIGHT)); + if (!stack.hasEnchantments() && stack.getName().getString().startsWith(prefix)) { + highlights.add(ColorHighlight.green(slot.getKey())); + } } return highlights; } -- cgit From d4f787a86da7cada1b02463ee137a2aab334c590 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Sat, 17 Jun 2023 17:41:12 +0800 Subject: Add English localization --- src/main/resources/assets/skyblocker/lang/en_us.json | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index b40dd52e..f2eec8fd 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -20,6 +20,10 @@ "text.autoconfig.skyblocker.option.general.bars.barpositions.manaBarPosition": "Mana Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.defenceBarPosition": "Defence Bar Position", "text.autoconfig.skyblocker.option.general.bars.barpositions.experienceBarPosition": "Experience Bar Position", + "text.autoconfig.skyblocker.option.general.experiments": "Experiments Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableChronomatronSolver": "Enable Chronomatron Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableSuperpairsSolver": "Enable Superpairs Solver", + "text.autoconfig.skyblocker.option.general.experiments.enableUltrasequencerSolver": "Enable Ultrasequencer Solver", "text.autoconfig.skyblocker.option.general.fishing": "Fishing Helper", "text.autoconfig.skyblocker.option.general.fishing.enableFishingHelper": "Enable Fishing Helper", "text.autoconfig.skyblocker.option.general.fairySouls": "Fairy Souls Helper", -- cgit From 28d137d777ad1e78043f4639d8fbadd0d3392d2c Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:08:33 +0800 Subject: Fix HandledScreenMixin for 1.20 --- .../xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 6d523343..b715560e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -13,6 +13,9 @@ import me.xmrvizzy.skyblocker.utils.Utils; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.inventory.SimpleInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; import net.minecraft.screen.slot.SlotActionType; import net.minecraft.text.Text; @@ -48,14 +51,15 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { - //Hide Empty Tooltips - if(this.focusedSlot != null) { + // Hide Empty Tooltips + if (this.focusedSlot != null) { Text stackName = focusedSlot.getStack().getName(); String strName = stackName.getString(); - if(Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) ci.cancel(); - } + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) + ci.cancel(); + } - //Backpack Preview + // Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { @@ -69,8 +73,8 @@ public abstract class HandledScreenMixin extends Screen { return skyblocker$experimentSolvers$getStack(slot); } - @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 10), ordinal = 0) - private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, MatrixStack matrices, Slot slot) { + @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 4), ordinal = 0) + private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, DrawContext context, Slot slot) { return skyblocker$experimentSolvers$getStack(slot); } -- cgit From e4b5090141ff10983c0d443d0f21b0c60d27f049 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:10:26 +0800 Subject: Add null checks --- src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index b715560e..431880e5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -42,7 +42,7 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - if (this.focusedSlot != null) { + if (this.client != null && this.focusedSlot != null) { if (keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode)) { if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(this.focusedSlot); } @@ -62,7 +62,7 @@ public abstract class HandledScreenMixin extends Screen { // Backpack Preview String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (shiftDown && title.equals("Storage") && this.focusedSlot != null) { + if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && title.equals("Storage")) { if (this.focusedSlot.inventory == this.client.player.getInventory()) return; if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); } -- cgit From 9da77e918acd36fa21181db43a80c6ac9429e489 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 21 Jun 2023 18:20:41 +0800 Subject: Refactor HandledScreenMixin --- .../skyblocker/mixin/HandledScreenMixin.java | 37 ++++++++-------------- 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java index 431880e5..aefe11c6 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/HandledScreenMixin.java @@ -42,29 +42,22 @@ public abstract class HandledScreenMixin extends Screen { @Inject(at = @At("HEAD"), method = "keyPressed") public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - if (this.client != null && this.focusedSlot != null) { - if (keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode)) { - if (WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) WikiLookup.openWiki(this.focusedSlot); - } + if (this.client != null && this.focusedSlot != null && keyCode != 256 && !this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) { + WikiLookup.openWiki(this.focusedSlot); } } @Inject(at = @At("HEAD"), method = "drawMouseoverTooltip", cancellable = true) public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) { // Hide Empty Tooltips - if (this.focusedSlot != null) { - Text stackName = focusedSlot.getStack().getName(); - String strName = stackName.getString(); - if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && strName.equals(" ")) - ci.cancel(); + if (Utils.isOnSkyblock() && SkyblockerConfig.get().general.hideEmptyTooltips && this.focusedSlot != null && focusedSlot.getStack().getName().getString().equals(" ")) { + ci.cancel(); } // Backpack Preview - String title = this.getTitle().getString(); boolean shiftDown = SkyblockerConfig.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && title.equals("Storage")) { - if (this.focusedSlot.inventory == this.client.player.getInventory()) return; - if (BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) ci.cancel(); + if (this.client != null && this.client.player != null && this.focusedSlot != null && shiftDown && this.getTitle().getString().equals("Storage") && this.focusedSlot.inventory != this.client.player.getInventory() && BackpackPreview.renderPreview(context, this.focusedSlot.getIndex(), x, y)) { + ci.cancel(); } } @@ -93,21 +86,17 @@ public abstract class HandledScreenMixin extends Screen { if (slot != null) { ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver(); if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) { - if (currentSolver instanceof ChronomatronSolver chronomatronSolver) { + if (experimentSolver instanceof ChronomatronSolver chronomatronSolver) { Item item = chronomatronSolver.getChronomatronSlots().get(chronomatronSolver.getChronomatronCurrentOrdinal()); - if (slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) { - if (chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { - chronomatronSolver.setState(ExperimentSolver.State.END); - } + if ((slot.getStack().isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(slot.getStack().getItem()) == item) && chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) { + chronomatronSolver.setState(ExperimentSolver.State.END); } - } else if (currentSolver instanceof SuperpairsSolver superpairsSolver) { + } else if (experimentSolver instanceof SuperpairsSolver superpairsSolver) { superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex()); superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY); - } else if (currentSolver instanceof UltrasequencerSolver ultrasequencerSolver) { - if (slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { - int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; - ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); - } + } else if (experimentSolver instanceof UltrasequencerSolver ultrasequencerSolver && slot.getIndex() == ultrasequencerSolver.getUltrasequencerNextSlot()) { + int count = ultrasequencerSolver.getSlots().get(ultrasequencerSolver.getUltrasequencerNextSlot()).getCount() + 1; + ultrasequencerSolver.getSlots().entrySet().stream().filter(entry -> entry.getValue().getCount() == count).findAny().ifPresentOrElse((entry) -> ultrasequencerSolver.setUltrasequencerNextSlot(entry.getKey()), () -> ultrasequencerSolver.setState(ExperimentSolver.State.END)); } } } -- cgit From 0a3c3d61b749172464665634b392b1f68a32288e Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 23 Jun 2023 14:27:42 -0400 Subject: Added Rift Tab Hud + 1 Rift related fix --- .../skyblocker/discord/DiscordRPCManager.java | 4 +- .../skyblocker/skyblock/tabhud/screens/Screen.java | 4 + .../screens/genericInfo/GenericRiftInfoScreen.java | 38 ++++++++++ .../skyblock/tabhud/screens/main/RiftScreen.java | 28 +++++++ .../skyblocker/skyblock/tabhud/util/Ico.java | 5 ++ .../skyblock/tabhud/util/PlayerListMgr.java | 13 +++- .../skyblock/tabhud/util/PlayerLocator.java | 3 + .../tabhud/widget/rift/AdvertisementWidget.java | 26 +++++++ .../tabhud/widget/rift/GoodToKnowWidget.java | 46 +++++++++++ .../tabhud/widget/rift/RiftProfileWidget.java | 19 +++++ .../tabhud/widget/rift/RiftProgressWidget.java | 88 ++++++++++++++++++++++ .../tabhud/widget/rift/RiftServerInfoWidget.java | 26 +++++++ .../tabhud/widget/rift/RiftStatsWidget.java | 41 ++++++++++ .../skyblock/tabhud/widget/rift/ShenWidget.java | 20 +++++ .../java/me/xmrvizzy/skyblocker/utils/Utils.java | 3 +- 15 files changed, 357 insertions(+), 7 deletions(-) create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java create mode 100644 src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java index 29a2c958..325f271a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java +++ b/src/main/java/me/xmrvizzy/skyblocker/discord/DiscordRPCManager.java @@ -108,13 +108,13 @@ public class DiscordRPCManager { switch (SkyblockerConfig.get().richPresence.info) { case BITS -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case PURSE -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); - case LOCATION -> info = "⏣ " + Utils.getLocation(); + case LOCATION -> info = Utils.getLocation(); } } else if (SkyblockerConfig.get().richPresence.cycleMode) { switch (cycleCount) { case 0 -> info = "Bits: " + DECIMAL_FORMAT.format(Utils.getBits()); case 1 -> info = "Purse: " + DECIMAL_FORMAT.format(Utils.getPurse()); - case 2 -> info = "⏣ " + Utils.getLocation(); + case 2 -> info = Utils.getLocation(); } } return info; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java index 2ed15f27..6d06c637 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/Screen.java @@ -6,6 +6,7 @@ import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.tabhud.TabHud; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GardenInfoScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericInfoScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo.GenericRiftInfoScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.CrimsonIsleScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonHubScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.DungeonScreen; @@ -17,6 +18,7 @@ import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HomeServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.HubServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.MineServerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.ParkServerScreen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main.RiftScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.DungeonPlayerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.GuestPlayerScreen; import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.playerList.HomePlayerScreen; @@ -51,6 +53,7 @@ public class Screen { private static Screen correctGenericScrn(int w, int h, Text footer) { return switch (PlayerLocator.getPlayerLocation()) { case GARDEN -> new GardenInfoScreen(w, h, footer); // ok + case THE_RIFT -> new GenericRiftInfoScreen(w, h, footer); case UNKNOWN -> new EmptyScreen(w, h, footer); // ok default -> new GenericInfoScreen(w, h, footer); // ok }; @@ -78,6 +81,7 @@ public class Screen { case DUNGEON -> new DungeonScreen(w, h, footer); // ok case CRIMSON_ISLE -> new CrimsonIsleScreen(w, h, footer); case GARDEN -> new GardenScreen(w, h, footer); // ok + case THE_RIFT -> new RiftScreen(w, h, footer); case UNKNOWN -> new EmptyScreen(w, h, footer); // ok default -> new GenericServerScreen(w, h, footer); // ok }; diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java new file mode 100644 index 00000000..9821b5a3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/genericInfo/GenericRiftInfoScreen.java @@ -0,0 +1,38 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.genericInfo; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProfileWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftStatsWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.ShenWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.CookieWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.AdvertisementWidget; +import net.minecraft.text.Text; + +public class GenericRiftInfoScreen extends Screen { + + public GenericRiftInfoScreen(int w, int h, Text footer) { + super(w, h); + + String f = footer.getString(); + + RiftProfileWidget profile = new RiftProfileWidget(); + RiftStatsWidget stats = new RiftStatsWidget(); + ShenWidget shen = new ShenWidget(); + + CookieWidget cookie = new CookieWidget(f); + AdvertisementWidget advertisement = new AdvertisementWidget(); + + this.stackWidgetsH(stats, advertisement); + this.stackWidgetsH(profile, shen, cookie); + + this.offCenterL(stats); + this.offCenterL(advertisement); + + this.offCenterR(profile); + this.offCenterR(shen); + this.offCenterR(cookie); + + this.addWidgets(profile, stats, shen, cookie, advertisement); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java new file mode 100644 index 00000000..d63bcf62 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/screens/main/RiftScreen.java @@ -0,0 +1,28 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.screens.main; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.screens.Screen; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftProgressWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.GoodToKnowWidget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift.RiftServerInfoWidget; + + +import net.minecraft.text.Text; + +public class RiftScreen extends Screen { + + public RiftScreen(int w, int h, Text footer) { + super(w, h); + + RiftProgressWidget rftProg = new RiftProgressWidget(); + GoodToKnowWidget gtk = new GoodToKnowWidget(); + RiftServerInfoWidget si = new RiftServerInfoWidget(); + + this.stackWidgetsH(si, gtk); + this.stackWidgetsH(rftProg); + this.offCenterL(si); + this.offCenterL(gtk); + this.offCenterR(rftProg); + this.addWidgets(si, gtk, rftProg); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java index ca767617..97237769 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/Ico.java @@ -52,4 +52,9 @@ public class Ico { public static final ItemStack SAPLING = new ItemStack(Items.OAK_SAPLING); public static final ItemStack MILESTONE = new ItemStack(Items.LODESTONE); public static final ItemStack PICKAXE = new ItemStack(Items.IRON_PICKAXE); + public static final ItemStack NETHER_STAR = new ItemStack(Items.NETHER_STAR); + public static final ItemStack HEART_OF_THE_SEA = new ItemStack(Items.HEART_OF_THE_SEA); + public static final ItemStack EXPERIENCE_BOTTLE = new ItemStack(Items.EXPERIENCE_BOTTLE); + public static final ItemStack PINK_DYE = new ItemStack(Items.PINK_DYE); + public static final ItemStack ENCHANTED_BOOK = new ItemStack(Items.ENCHANTED_BOOK); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java index 5ace64ea..ee4319dc 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerListMgr.java @@ -98,8 +98,8 @@ public class PlayerListMgr { * @return the text or null, if the display name is null * * @implNote currently designed specifically for crimson isles faction quests - * widget, might not work correctly without modification for other - * stuff. you've been warned! + * widget and the rift widgets, might not work correctly without + * modification for other stuff. you've been warned! */ public static Text textAt(int idx) { @@ -128,13 +128,18 @@ public class PlayerListMgr { // Trim leading & trailing space - this can only be done at the start and end // otherwise it'll produce malformed results if (i == 0) - textToAppend = StringUtils.removeStart(textToAppend, " "); + textToAppend = textToAppend.stripLeading(); if (i == size - 1) - textToAppend = StringUtils.removeEnd(textToAppend, " "); + textToAppend = textToAppend.stripTrailing(); newText.append(Text.literal(textToAppend).setStyle(current.getStyle())); } + // Avoid returning an empty component - Rift advertisements needed this + if (newText.getString().length() == 0) { + return null; + } + return newText; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java index d7abdfc2..c2f14d3c 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/util/PlayerLocator.java @@ -25,6 +25,7 @@ public class PlayerLocator { JERRY, GARDEN, INSTANCED, + THE_RIFT, UNKNOWN } @@ -82,6 +83,8 @@ public class PlayerLocator { return Location.GARDEN; case "Instanced": return Location.INSTANCED; + case "The Rift": + return Location.THE_RIFT; default: return Location.UNKNOWN; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java new file mode 100644 index 00000000..61c79c26 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class AdvertisementWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public AdvertisementWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + + for(int i = 73; i < 80; i++) { + Text text = PlayerListMgr.textAt(i); + if(text != null) this.addComponent(new PlainTextComponent(text)); + } + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java new file mode 100644 index 00000000..ca95f811 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java @@ -0,0 +1,46 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class GoodToKnowWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Good To Know").formatted(Formatting.BLUE, Formatting.BOLD); + + public GoodToKnowWidget() { + super(TITLE, Formatting.BLUE.getColorValue()); + + //After you progress further the tab adds more info so we need to be careful of that + //In beginning it only shows montezuma, then timecharms and enigma souls are added + Text pos49 = PlayerListMgr.textAt(49); //Can be times visited rift + Text pos51 = PlayerListMgr.textAt(51); //Can be lifetime motes or visited rift + Text pos53 = PlayerListMgr.textAt(53); //Can be lifetime motes + + int visitedRiftPos = 0; + int lifetimeMotesPos = 0; + + //Check each position to see what is or isn't there so we don't try adding invalid components + if(pos49.getString().contains("times")) visitedRiftPos = 49; + if(pos51.getString().contains("Motes")) lifetimeMotesPos = 51; + if(pos51.getString().contains("times")) visitedRiftPos = 51; + if(pos53.getString().contains("Motes")) lifetimeMotesPos = 53; + + Text timesVisitedRift = (visitedRiftPos == 51) ? pos51 : (visitedRiftPos == 49) ? pos49 : null; + Text lifetimeMotesEarned = (lifetimeMotesPos == 53) ? pos53 : (lifetimeMotesPos == 51) ? pos51 : null; + + if(visitedRiftPos != 0) { + this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, Text.literal("Visited Rift: ").append(timesVisitedRift))); + } + + if(lifetimeMotesPos != 0) { + this.addComponent(new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); + } + + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java new file mode 100644 index 00000000..5460de49 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProfileWidget.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class RiftProfileWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Profile").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public RiftProfileWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + this.addSimpleIcoText(Ico.SIGN, "Profile:", Formatting.GREEN, 61); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java new file mode 100644 index 00000000..615d3cb0 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java @@ -0,0 +1,88 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.ProgressComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.math.MathHelper; + +public class RiftProgressWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Rift Progress").formatted(Formatting.BLUE, Formatting.BOLD); + + private static final Pattern TIMECHARMS_PATTERN = Pattern.compile("Timecharms: (?[0-9]+)\\/(?[0-9]+)"); + private static final Pattern ENIGMA_SOULS_PATTERN = Pattern.compile("Enigma Souls: (?[0-9]+)\\/(?[0-9]+)"); + private static final Pattern MONTEZUMA_PATTERN = Pattern.compile("Montezuma: (?[0-9]+)\\/(?[0-9]+)"); + + public RiftProgressWidget() { + super(TITLE, Formatting.BLUE.getColorValue()); + + //After you progress further the tab adds more info so we need to be careful of that + //In beginning it only shows montezuma, then timecharms and enigma souls are added + String pos45 = PlayerListMgr.strAt(45); //Can be Montezuma or Timecharms + String pos46 = PlayerListMgr.strAt(46); //Can be Enigma Souls or Empty + String pos47 = PlayerListMgr.strAt(47); //Can be Montezuma or "Good to know" heading + + boolean hasTimecharms = false; + boolean hasEnigmaSouls = false; + int montezumaPos = 0; + + //Check each position to see what is or isn't there so we don't try adding invalid components + if(pos45.contains("Timecharms")) hasTimecharms = true; + if(pos46.contains("Enigma Souls")) hasEnigmaSouls = true; + + //Small ternary to account for positions, defaults to -1 if it for some reason does not exist (which shouldn't be the case!) + montezumaPos = (pos47.contains("Montezuma")) ? 47 : (pos45.contains("Montezuma")) ? 45 : -1; + + if(hasTimecharms) { + Matcher m = PlayerListMgr.regexAt(45, TIMECHARMS_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + if(hasEnigmaSouls) { + Matcher m = PlayerListMgr.regexAt(46, ENIGMA_SOULS_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + if(montezumaPos != -1) { + Matcher m = PlayerListMgr.regexAt(montezumaPos, MONTEZUMA_PATTERN); + + int current = Integer.parseInt(m.group("current")); + int total = Integer.parseInt(m.group("total")); + float pcnt = ((float) current / (float) total) * 100f; + Text progressText = Text.literal(current + "/" + total); + + ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, pcntToCol(pcnt)); + + this.addComponent(pc); + } + + this.pack(); + } + + private static int pcntToCol(float pcnt) { + return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java new file mode 100644 index 00000000..2ac2a35d --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftServerInfoWidget.java @@ -0,0 +1,26 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +/** + * Special version of the server info widget for the rift! + * + */ +public class RiftServerInfoWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Server Info").formatted(Formatting.LIGHT_PURPLE, Formatting.BOLD); + + public RiftServerInfoWidget() { + super(TITLE, Formatting.LIGHT_PURPLE.getColorValue()); + + this.addSimpleIcoText(Ico.MAP, "Area:", Formatting.LIGHT_PURPLE, 41); + this.addSimpleIcoText(Ico.NTAG, "Server ID:", Formatting.GRAY, 42); + + this.pack(); + } + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java new file mode 100644 index 00000000..ef5876f2 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftStatsWidget.java @@ -0,0 +1,41 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.Ico; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.IcoTextComponent; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.TableComponent; + +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class RiftStatsWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Stats").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public RiftStatsWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + Text riftDamage = Widget.simpleEntryText(64, "RDG", Formatting.DARK_PURPLE); + IcoTextComponent rdg = new IcoTextComponent(Ico.DIASWORD, riftDamage); + + Text speed = Widget.simpleEntryText(65, "SPD", Formatting.WHITE); + IcoTextComponent spd = new IcoTextComponent(Ico.SUGAR, speed); + + Text intelligence = Widget.simpleEntryText(66, "INT", Formatting.AQUA); + IcoTextComponent intel = new IcoTextComponent(Ico.ENCHANTED_BOOK, intelligence); + + Text manaRegen = Widget.simpleEntryText(67, "MRG", Formatting.AQUA); + IcoTextComponent mrg = new IcoTextComponent(Ico.DIAMOND, manaRegen); + + TableComponent tc = new TableComponent(2, 2, Formatting.AQUA.getColorValue()); + tc.addToCell(0, 0, rdg); + tc.addToCell(0, 1, spd); + tc.addToCell(1, 0, intel); + tc.addToCell(1, 1, mrg); + + this.addComponent(tc); + this.pack(); + } + +} \ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java new file mode 100644 index 00000000..5dcc08c0 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/ShenWidget.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.skyblock.tabhud.widget.rift; + +import me.xmrvizzy.skyblocker.skyblock.tabhud.util.PlayerListMgr; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.Widget; +import me.xmrvizzy.skyblocker.skyblock.tabhud.widget.component.PlainTextComponent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class ShenWidget extends Widget { + + private static final MutableText TITLE = Text.literal("Shen's Countdown").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + public ShenWidget() { + super(TITLE, Formatting.DARK_AQUA.getColorValue()); + + this.addComponent(new PlainTextComponent(Text.literal(PlayerListMgr.strAt(70)))); + this.pack(); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java index 90939fe8..d961ba7e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java +++ b/src/main/java/me/xmrvizzy/skyblocker/utils/Utils.java @@ -145,9 +145,10 @@ public class Utils { if (sidebarLines != null) { for (String sidebarLine : sidebarLines) { if (sidebarLine.contains("⏣")) location = sidebarLine; + if (sidebarLine.contains("ф")) location = sidebarLine; //Rift } if (location == null) location = "Unknown"; - location = location.replace('⏣', ' ').strip(); + location = location.strip(); } } catch (IndexOutOfBoundsException e) { e.printStackTrace(); -- cgit From 0cd67350de6b4b127322ed703a0bab3a18ac2f04 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sat, 24 Jun 2023 01:04:34 -0400 Subject: Reformat files --- .../tabhud/widget/rift/AdvertisementWidget.java | 15 ++-- .../tabhud/widget/rift/GoodToKnowWidget.java | 55 ++++++++------- .../tabhud/widget/rift/RiftProgressWidget.java | 79 ++++++++++++---------- 3 files changed, 84 insertions(+), 65 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java index 61c79c26..287b25b1 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/AdvertisementWidget.java @@ -8,18 +8,19 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class AdvertisementWidget extends Widget { - - private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, Formatting.BOLD); + + private static final MutableText TITLE = Text.literal("Advertisement").formatted(Formatting.DARK_AQUA, + Formatting.BOLD); public AdvertisementWidget() { super(TITLE, Formatting.DARK_AQUA.getColorValue()); - - - for(int i = 73; i < 80; i++) { + + for (int i = 73; i < 80; i++) { Text text = PlayerListMgr.textAt(i); - if(text != null) this.addComponent(new PlainTextComponent(text)); + if (text != null) + this.addComponent(new PlainTextComponent(text)); } - + this.pack(); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java index ca95f811..667bc154 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/GoodToKnowWidget.java @@ -9,38 +9,47 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; public class GoodToKnowWidget extends Widget { - + private static final MutableText TITLE = Text.literal("Good To Know").formatted(Formatting.BLUE, Formatting.BOLD); - + public GoodToKnowWidget() { super(TITLE, Formatting.BLUE.getColorValue()); - - //After you progress further the tab adds more info so we need to be careful of that - //In beginning it only shows montezuma, then timecharms and enigma souls are added - Text pos49 = PlayerListMgr.textAt(49); //Can be times visited rift - Text pos51 = PlayerListMgr.textAt(51); //Can be lifetime motes or visited rift - Text pos53 = PlayerListMgr.textAt(53); //Can be lifetime motes - + + // After you progress further the tab adds more info so we need to be careful of + // that + // In beginning it only shows montezuma, then timecharms and enigma souls are + // added + Text pos49 = PlayerListMgr.textAt(49); // Can be times visited rift + Text pos51 = PlayerListMgr.textAt(51); // Can be lifetime motes or visited rift + Text pos53 = PlayerListMgr.textAt(53); // Can be lifetime motes + int visitedRiftPos = 0; int lifetimeMotesPos = 0; - - //Check each position to see what is or isn't there so we don't try adding invalid components - if(pos49.getString().contains("times")) visitedRiftPos = 49; - if(pos51.getString().contains("Motes")) lifetimeMotesPos = 51; - if(pos51.getString().contains("times")) visitedRiftPos = 51; - if(pos53.getString().contains("Motes")) lifetimeMotesPos = 53; - + + // Check each position to see what is or isn't there so we don't try adding + // invalid components + if (pos49.getString().contains("times")) + visitedRiftPos = 49; + if (pos51.getString().contains("Motes")) + lifetimeMotesPos = 51; + if (pos51.getString().contains("times")) + visitedRiftPos = 51; + if (pos53.getString().contains("Motes")) + lifetimeMotesPos = 53; + Text timesVisitedRift = (visitedRiftPos == 51) ? pos51 : (visitedRiftPos == 49) ? pos49 : null; Text lifetimeMotesEarned = (lifetimeMotesPos == 53) ? pos53 : (lifetimeMotesPos == 51) ? pos51 : null; - - if(visitedRiftPos != 0) { - this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, Text.literal("Visited Rift: ").append(timesVisitedRift))); + + if (visitedRiftPos != 0) { + this.addComponent(new IcoTextComponent(Ico.EXPERIENCE_BOTTLE, + Text.literal("Visited Rift: ").append(timesVisitedRift))); } - - if(lifetimeMotesPos != 0) { - this.addComponent(new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); + + if (lifetimeMotesPos != 0) { + this.addComponent( + new IcoTextComponent(Ico.PINK_DYE, Text.literal("Lifetime Earned: ").append(lifetimeMotesEarned))); } - + this.pack(); } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java index 615d3cb0..9ce12e76 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/tabhud/widget/rift/RiftProgressWidget.java @@ -13,75 +13,84 @@ import net.minecraft.util.Formatting; import net.minecraft.util.math.MathHelper; public class RiftProgressWidget extends Widget { - + private static final MutableText TITLE = Text.literal("Rift Progress").formatted(Formatting.BLUE, Formatting.BOLD); - + private static final Pattern TIMECHARMS_PATTERN = Pattern.compile("Timecharms: (?[0-9]+)\\/(?[0-9]+)"); private static final Pattern ENIGMA_SOULS_PATTERN = Pattern.compile("Enigma Souls: (?[0-9]+)\\/(?[0-9]+)"); private static final Pattern MONTEZUMA_PATTERN = Pattern.compile("Montezuma: (?[0-9]+)\\/(?[0-9]+)"); public RiftProgressWidget() { super(TITLE, Formatting.BLUE.getColorValue()); - - //After you progress further the tab adds more info so we need to be careful of that - //In beginning it only shows montezuma, then timecharms and enigma souls are added - String pos45 = PlayerListMgr.strAt(45); //Can be Montezuma or Timecharms - String pos46 = PlayerListMgr.strAt(46); //Can be Enigma Souls or Empty - String pos47 = PlayerListMgr.strAt(47); //Can be Montezuma or "Good to know" heading - + + // After you progress further the tab adds more info so we need to be careful of + // that + // In beginning it only shows montezuma, then timecharms and enigma souls are + // added + String pos45 = PlayerListMgr.strAt(45); // Can be Montezuma or Timecharms + String pos46 = PlayerListMgr.strAt(46); // Can be Enigma Souls or Empty + String pos47 = PlayerListMgr.strAt(47); // Can be Montezuma or "Good to know" heading + boolean hasTimecharms = false; boolean hasEnigmaSouls = false; int montezumaPos = 0; - - //Check each position to see what is or isn't there so we don't try adding invalid components - if(pos45.contains("Timecharms")) hasTimecharms = true; - if(pos46.contains("Enigma Souls")) hasEnigmaSouls = true; - - //Small ternary to account for positions, defaults to -1 if it for some reason does not exist (which shouldn't be the case!) + + // Check each position to see what is or isn't there so we don't try adding + // invalid components + if (pos45.contains("Timecharms")) + hasTimecharms = true; + if (pos46.contains("Enigma Souls")) + hasEnigmaSouls = true; + + // Small ternary to account for positions, defaults to -1 if it for some reason + // does not exist (which shouldn't be the case!) montezumaPos = (pos47.contains("Montezuma")) ? 47 : (pos45.contains("Montezuma")) ? 45 : -1; - - if(hasTimecharms) { + + if (hasTimecharms) { Matcher m = PlayerListMgr.regexAt(45, TIMECHARMS_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.NETHER_STAR, Text.literal("Timecharms"), progressText, + pcnt, pcntToCol(pcnt)); + this.addComponent(pc); } - - if(hasEnigmaSouls) { + + if (hasEnigmaSouls) { Matcher m = PlayerListMgr.regexAt(46, ENIGMA_SOULS_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.HEART_OF_THE_SEA, Text.literal("Enigma Souls"), + progressText, pcnt, pcntToCol(pcnt)); + this.addComponent(pc); } - - if(montezumaPos != -1) { + + if (montezumaPos != -1) { Matcher m = PlayerListMgr.regexAt(montezumaPos, MONTEZUMA_PATTERN); - + int current = Integer.parseInt(m.group("current")); int total = Integer.parseInt(m.group("total")); float pcnt = ((float) current / (float) total) * 100f; Text progressText = Text.literal(current + "/" + total); - - ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, pcntToCol(pcnt)); - + + ProgressComponent pc = new ProgressComponent(Ico.BONE, Text.literal("Montezuma"), progressText, pcnt, + pcntToCol(pcnt)); + this.addComponent(pc); } - + this.pack(); } - + private static int pcntToCol(float pcnt) { return MathHelper.hsvToRgb(pcnt / 300f, 0.9f, 0.9f); } -- cgit From a09b4d0bf3db598ada645c10122500191cb07daa Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 25 Jun 2023 05:36:05 -0400 Subject: Fix recipe book search field not being selectable (#187) --- .../java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java index 99715e29..3a1f91d3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/itemlist/ItemListWidget.java @@ -91,8 +91,10 @@ public class ItemListWidget extends RecipeBookWidget implements Drawable, Select if (this.isOpen() && !this.client.player.isSpectator() && ItemRegistry.filesImported && results != null) { if (this.searchField != null && this.searchField.mouseClicked(mouseX, mouseY, button)) { this.results.closeRecipeView(); + this.searchField.setFocused(true); return true; } else + this.searchField.setFocused(false); return this.results.mouseClicked(mouseX, mouseY, button); } else return false; -- cgit From 9d71ef0f17197db692a45be9be3866d4573c9621 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 25 Jun 2023 05:36:58 -0400 Subject: Fix chat ad filter (#188) --- .../xmrvizzy/skyblocker/chat/filters/AdFilter.java | 46 +++++++++++----------- .../skyblocker/chat/filters/AdFilterTest.java | 18 ++++----- 2 files changed, 32 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index 5f9f463d..67734438 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -9,30 +9,30 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public class AdFilter extends ChatPatternListener { - private static final Pattern[] AD_FILTERS = new Pattern[]{ - Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), - Pattern.compile("(.)\\1{7,}"), - Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), - }; + private static final Pattern[] AD_FILTERS = new Pattern[] { + Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), + Pattern.compile("(.)\\1{7,}"), + Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), }; - public AdFilter() { - // Groups: - // 1. Player name - // 2. Message - super("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$"); - } + public AdFilter() { + // Groups: + // 1. Player name + // 2. Message + // (?:§8\[[§fadbc0-9]+§8\] )?§[67abc](?:\[[§A-Za-z0-9+]+\] )?([A-Za-z0-9_]+)§[f7]: (.+) + super("(?:§8\\[[§fadbc0-9]+§8\\] )?§[67abc](?:\\[[§A-Za-z0-9+]+\\] )?([A-Za-z0-9_]+)§[f7]: (.+)"); + } - @Override - public boolean onMatch(Text _message, Matcher matcher) { - String message = matcher.group(2); - for (Pattern adFilter : AD_FILTERS) - if (adFilter.matcher(message).find()) - return true; - return false; - } + @Override + public boolean onMatch(Text _message, Matcher matcher) { + String message = matcher.group(2); + for (Pattern adFilter : AD_FILTERS) + if (adFilter.matcher(message).find()) + return true; + return false; + } - @Override - protected ChatFilterResult state() { - return SkyblockerConfig.get().messages.hideAds; - } + @Override + protected ChatFilterResult state() { + return SkyblockerConfig.get().messages.hideAds; + } } \ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java index 73fb5dbd..a769dca2 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java @@ -14,47 +14,47 @@ class AdFilterTest extends ChatPatternListenerTest { @Test void noRank() { - assertMatches("§7Advertiser§7: advertisement"); + assertMatches("§8[§a86§8] §7Advertiser§7: advertisement"); } @Test void vip() { - assertMatches("§a[VIP] Advertiser§f: advertisement"); + assertMatches("§8[§b280§8] §a[VIP] Advertiser§f: advertisement"); } @Test void mvp() { - assertMatches("§b[MVP§c+§b] Advertiser§f: advertisement"); + assertMatches("§8[§d256§8] §b[MVP§c+§b] Advertiser§f: advertisement"); } @Test void plusPlus() { - assertMatches("§6[MVP§c++§6] Advertiser§f: advertisement"); + assertMatches("§8[§6222§8] §6[MVP§c++§6] Advertiser§f: advertisement"); } @Test void capturesMessage() { - assertGroup("§b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump"); + assertGroup("§8[§c325§8] §b[MVP§c+§b] b2dderr§f: buying prismapump", 2, "buying prismapump"); } @Test void simpleAd() { - assertFilters("§b[MVP§c+§b] b2dderr§f: buying prismapump"); + assertFilters("§8[§c320§8] §b[MVP§c+§b] b2dderr§f: buying prismapump"); } @Test void uppercaseAd() { - assertFilters("§a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); + assertFilters("§8[§f70§8] §a[VIP] Tecnoisnoob§f: SELLING REJUVENATE 5 Book on ah!"); } @Test void characterSpam() { - assertFilters("§a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); + assertFilters("§8[§9144§8] §a[VIP] Benyyy_§f: Hey, Visit my Island, i spent lots of time to build it! I also made donate room! <<<<<<<<<<<<<<<<<<<"); } @Test void notAd() { - Matcher matcher = listener.pattern.matcher("§a[VIP] NotMatching§f: This message shouldn't match!"); + Matcher matcher = listener.pattern.matcher("§8[§6200§8] §a[VIP] NotMatching§f: This message shouldn't match!"); assertTrue(matcher.matches()); assertFalse(listener.onMatch(null, matcher)); } -- cgit