aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/buildrelease.yml22
-rw-r--r--CHANGELOG.md76
-rw-r--r--FEATURES.md105
-rw-r--r--README.md68
-rw-r--r--gradle.properties2
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java17
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java7
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java176
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/InGameOverlayRendererMixin.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java32
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java54
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java18
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Http.java14
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java2
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_ca.json3
-rw-r--r--src/main/resources/assets/skyblocker/lang/en_us.json3
-rw-r--r--src/main/resources/assets/skyblocker/lang/es_es.json1
-rw-r--r--src/main/resources/assets/skyblocker/lang/fr_fr.json41
-rw-r--r--src/main/resources/assets/skyblocker/lang/ja_jp.json1
-rw-r--r--src/main/resources/assets/skyblocker/lang/ko_kr.json1
-rw-r--r--src/main/resources/assets/skyblocker/lang/pt_br.json8
-rw-r--r--src/main/resources/assets/skyblocker/lang/ru_ru.json1
-rw-r--r--src/main/resources/assets/skyblocker/lang/tr_tr.json1
-rw-r--r--src/main/resources/assets/skyblocker/lang/zh_cn.json30
-rw-r--r--src/main/resources/assets/skyblocker/textures/gui/item_protection.pngbin0 -> 235 bytes
31 files changed, 532 insertions, 186 deletions
diff --git a/.github/workflows/buildrelease.yml b/.github/workflows/buildrelease.yml
index b062d079..8dca761f 100644
--- a/.github/workflows/buildrelease.yml
+++ b/.github/workflows/buildrelease.yml
@@ -42,12 +42,13 @@ jobs:
CHANGELOG=$(sed '/___/Q' CHANGELOG.md)
CHANGELOG=$(echo "$CHANGELOG" | sed 1d)
- CHANGELOGtmp="${CHANGELOG//'%'/'%25'}"
- CHANGELOGtmp="${CHANGELOGtmp//$'\n'/'%0A'}"
- CHANGELOGtmp="${CHANGELOGtmp//$'\r'/'%0D'}"
-
# changelog for Github release
- echo "changelog=$CHANGELOGtmp" >> $GITHUB_OUTPUT
+ delimiter="$(openssl rand -hex 8)"
+ {
+ echo "changelog<<${delimiter}"
+ echo "$CHANGELOGtmp"
+ echo "${delimiter}"
+ } >> $GITHUB_OUTPUT
#echo "Changelog:\n$CHANGELOG" # for debugging
@@ -61,12 +62,13 @@ jobs:
# Store the highlight_section in the CHANGELOG variable
CHANGELOG=$(echo -n "$highlight_section")
- CHANGELOG="${CHANGELOG//'%'/'%25'}"
- CHANGELOG="${CHANGELOG//$'\n'/'%0A'}"
- CHANGELOG="${CHANGELOG//$'\r'/'%0D'}"
-
# changelog for rest
- echo "changelog_highlight=$CHANGELOG" >> $GITHUB_OUTPUT
+ delimiter="$(openssl rand -hex 8)"
+ {
+ echo "changelog_highlight<<${delimiter}"
+ echo "$CHANGELOG"
+ echo "${delimiter}"
+ } >> $GITHUB_OUTPUT
- uses: actions/github-script@v7
id: fname
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6b05e805..19e396b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,79 @@
+# Release 1.18.0
+
+## Highlight
+* **New Dungeon Solvers**:
+ * Silverfish Solvers by @kevinthegreat1
+ * Ice Fill Solvers by @kevinthegreat1
+ * Boulder Solver by @LifeIsAParadox
+* **Crystal Hollows Feature**:
+ * Crystal Hollows Map by @olim88 and @AzureAaron
+ * Waypoints for special locations by @olim88 and @AzureAaron
+ * Powder HUD by @olim88 and @AzureAaron
+ * Mithril
+ * Gemstone
+* **Kuudra Features** by @AzureAaron
+ * Kuudra waypoints
+ * No arrow poison warning
+ * Low arrow poison warning
+* **Search overlays for bz and ah** by @olim88
+* **End HUD Widget** by @viciscat
+ * Zealots
+ * *Since last eye*
+ * *Total zealots kills*
+ * *Avg kills per eye*
+ * Endstone Protector
+ * *stage*
+ * *Location*
+* **Garden Features**:
+ * Visitor helper by @esteban4567890
+ * easy way to buy items that visitors require from bazaar by clicking the text
+ * Disable title and chat messages for Melon/Pumpkin Dicer by @Ghost-3
+* **Improve Item Protection feature** by @LifeIsAParadox
+ * protect item with shortcut "v"
+ * indicator in form of a star
+
+## What's Changed
+* Nothing to see here by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/526
+* Crystal hollows fetures by @olim88 in https://github.com/SkyblockerMod/Skyblocker/pull/523
+* Beacon Highlighter performance fix + Fix fire sales widget by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/521
+* Fix chest value not getting price data under certain circumstances by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/522
+* Update mayor cache every 20 minutes by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/525
+* Update IF conflict by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/529
+* Remove 1.20.2 from version selection menu in issue templates by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/530
+* Add the missing starter commission to the Dwarven HUD. by @Kaluub in https://github.com/SkyblockerMod/Skyblocker/pull/532
+* Kuudra Features by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/519
+* Disable title and chat messages for Melon/Pumpkin Dicer by @Ghost-3 in https://github.com/SkyblockerMod/Skyblocker/pull/534
+* Add Visitor helper by @esteban4567890 in https://github.com/SkyblockerMod/Skyblocker/pull/535
+* Search overlays for bz and ah by @olim88 in https://github.com/SkyblockerMod/Skyblocker/pull/537
+* Add End HUD Widget by @viciscat in https://github.com/SkyblockerMod/Skyblocker/pull/524
+* Boulder Solver by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/540
+* Item Quality (dungeon drops) by @Fluboxer in https://github.com/SkyblockerMod/Skyblocker/pull/541
+* Treasure Hoarder Puncher Commission fix by @Ghost-3 in https://github.com/SkyblockerMod/Skyblocker/pull/542
+* center table components in tabhud by @btwonion in https://github.com/SkyblockerMod/Skyblocker/pull/543
+* Check all door blocks and fix fairy room door by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/536
+* Show the diff in the Powders widget by @Ghost-3 in https://github.com/SkyblockerMod/Skyblocker/pull/544
+* Add Item Floor Tier to tooltip by @Fluboxer in https://github.com/SkyblockerMod/Skyblocker/pull/546
+* Better location management by @Ghost-3 in https://github.com/SkyblockerMod/Skyblocker/pull/547
+* Small search overlay changes by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/548
+* Fix powder hud not updating when commissions hud is disabled by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/550
+* Improve secrets caching behaviour by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/545
+* Spider's Den Server Widget by @Ghost-3 in https://github.com/SkyblockerMod/Skyblocker/pull/553
+* Fix beacon highlights persisting after the boss dies by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/554
+* use mod-publish-plugin by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/556
+* Add Silverfish and Ice Fill Solvers by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/533
+* Fix discoveries index by @kevinthegreat1 in https://github.com/SkyblockerMod/Skyblocker/pull/557
+* Support the local memory cache for the API by @AzureAaron in https://github.com/SkyblockerMod/Skyblocker/pull/558
+* 4 small changes by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/561
+* Improve Item Protection feature by @LifeIsAParadox in https://github.com/SkyblockerMod/Skyblocker/pull/562
+
+## New Contributors
+* @olim88 made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/523
+* @Ghost-3 made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/534
+* @esteban4567890 made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/535
+* @Fluboxer made their first contribution in https://github.com/SkyblockerMod/Skyblocker/pull/541
+
+**Full Changelog**: https://github.com/SkyblockerMod/Skyblocker/compare/v1.17.0...v1.18.0
+___
# Release 1.17.0
## Highlight
diff --git a/FEATURES.md b/FEATURES.md
index b442a56f..987c4fd9 100644
--- a/FEATURES.md
+++ b/FEATURES.md
@@ -5,16 +5,19 @@
- **Starred Mob Glow**
- **Croesus Helper**
- **Puzzle Solver:**
- - *Three Weirdos*
- - *Blaze*
- - *Creeper Beams*
- - *Quiz - Ouro the Omniscient*
- - *Tic Tac Toe*
- - *Waterboard*
- - *Terminal:*
- - *Order*
- - *Coloured Items*
- - *Item Name*
+ - *Three Weirdos*
+ - *Blaze*
+ - *Creeper Beams*
+ - *Quiz - Ouro the Omniscient*
+ - *Tic Tac Toe*
+ - *Waterboard*
+ - *Silverfish*
+ - *Ice Fill*
+ - *Boulder*
+ - Terminal:
+ - *Order*
+ - *Coloured Items*
+ - *Item Name*
- **Rare Drop Special Effects**
- **Chest Profit Calculator**
- **F3/M3 Fire Freeze Staff Timer**
@@ -27,6 +30,16 @@
- **resourcepack recoloring textures in dungeons**
- **score title and sound**
+### Kuudra Features
+- **Kuudra waypoints**
+ - *Supplies*
+ - *Supply Piles*
+ - *Fuel Cells*
+ - *Safe Spots*
+ - *Pearl*
+- **No arrow poison warning**
+- **Low arrow poison warning**
+
### Item and Armor Customization:
- *Item Renaming*
- *Custom Armor Dye Colors*
@@ -34,17 +47,25 @@
### Health and Status Bars:
- **Bars:**
- - *Health and absorption*
- - *Mana*
- - *Defense*
- - *XP*
+ - *Health and absorption*
+ - *Mana*
+ - *Defense*
+ - *XP*
-### Dwarven Mines:
+### Dwarven Mines / Crystal Hollows:
- **Dwarven Mines Solver:**
- - *Fetchur*
- - *Puzzler*
+ - Fetchur
+ - Puzzler
+- **Crystal Hollows**
+ - Crystal Hollows Map
+ - *Shows players location in Crystal Hollows*
+ - *Highlights important waypoints in Crystal Hollows*
+ - Crystal Hollows Waypoints
+ - *Shows waypoints for special locations*
+ - *Find locations in chat messages*
- **Commission HUD**
- - *Provides information on Dwarven Mines quests*
+ - *Provides information on Dwarven Mines quests*
+- **Powder HUD**
### Rift Features:
- **Mirrorverse Waypoints**
@@ -64,6 +85,11 @@
- Beacon Highlighting
- Nukekubi Head Highlighting
+### Garden Features:
+- **Visitor Helper**
+ - buy items that visitors require from bazaar by clicking the text
+- **Disable title and chat messages for Melon/Pumpkin Dicer**
+
### Visual Enhancements:
- **Fancy Tab HUD:** Fully configurable with a resource pack.
- **1.8 Hitbox for Lever and Farmland**
@@ -74,37 +100,48 @@
- Circle or Square
- **Item Cooldown Display**
- **Configure Fire-Overlay Height**
+- **End HUD Widget**
+ - Zealots
+ - *Since last eye*
+ - *Total zealots kills*
+ - *Avg kills per eye*
+ - Endstone Protector
+ - *stage*
+ - *Location*
### User Interface Enhancements:
+- **Search overlays for bz and ah**
- **Attribute Shard Info Display**
- **Drill Fuel and Pickonimbus 2000 in Item Durability Bar**
- **Hotbar Slot Lock Keybind:** Select the hotbar slot you want to lock/unlock and press the lock button.
- **Item Tooltip:** (Provides information on)
- - *NPC Prices*
- - *Motes Prices*
- - *bazaar (average, lowest bin)*
- - *Auction House*
- - *Museum*
- - *Exotic Armor Identifier*
+ - *NPC Sell Prices*
+ - *Motes Prices*
+ - *bazaar (average, lowest bin)*
+ - *Auction House*
+ - *Museum*
+ - *Exotic Armor Identifier*
+ - *Item Quality*
+ - **
- **Quicknav:** (Fully customizeable) Fast navigation between pets, armor, enderchest, skill, collection, crafting, enchant, anvil, warp dungeon, and warp hub.
- **Recipe Book:** Lists all Skyblock items in the vanilla recipe book, allowing you to see the recipe of the item.
- **Backpack Preview:** After clicking your backpack or enderchest once, you can hover over the backpack or enderchest and hold Shift to preview its contents.
### Barn Features:
- **Barn Solver:**
- - *Treasure Hunter*
- - *Hungry Hiker*
+ - *Treasure Hunter*
+ - *Hungry Hiker*
### Chat Features:
- **Hide Messages:**
- - *Ability Cooldown*
- - *Heal*
- - *Aspect of the End (AOTE)*
- - *Implosion*
- - *Molten Wave*
- - *`/show command`*
- - *Teleport Pad Messages*
- - *Sky Mall*
+ - *Ability Cooldown*
+ - *Heal*
+ - *Aspect of the End (AOTE)*
+ - *Implosion*
+ - *Molten Wave*
+ - *`/show command`*
+ - *Teleport Pad Messages*
+ - *Sky Mall*
### Miscellaneous Solvers:
- **Experiments Solvers**
diff --git a/README.md b/README.md
index bee317ba..5e9cee0f 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,10 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in
- *Quiz - Ouro the Omniscient*
- *Tic Tac Toe*
- *Waterboard*
- - *Terminal:*
+ - *Silverfish*
+ - *Ice Fill*
+ - *Boulder*
+ - Terminal:
- *Order*
- *Coloured Items*
- *Item Name*
@@ -47,6 +50,16 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in
- **resourcepack recoloring textures in dungeons**
- **score title and sound**
+### Kuudra Features
+- **Kuudra waypoints**
+ - *Supplies*
+ - *Supply Piles*
+ - *Fuel Cells*
+ - *Safe Spots*
+ - *Pearl*
+- **No arrow poison warning**
+- **Low arrow poison warning**
+
### Item and Armor Customization:
- *Item Renaming*
- *Custom Armor Dye Colors*
@@ -59,19 +72,20 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in
- *Defense*
- *XP*
-### Dwarven Mines:
+### Dwarven Mines / Crystal Hollows:
- **Dwarven Mines Solver:**
- - *Fetchur*
- - *Puzzler*
-- **Commission/Powder HUD**
+ - Fetchur
+ - Puzzler
+- **Crystal Hollows**
+ - Crystal Hollows Map
+ - *Shows players location in Crystal Hollows*
+ - *Highlights important waypoints in Crystal Hollows*
+ - Crystal Hollows Waypoints
+ - *Shows waypoints for special locations*
+ - *Find locations in chat messages*
+- **Commission HUD**
- *Provides information on Dwarven Mines quests*
- - *Provides information on powder amounts*
-- **Crystal Hollows Waypoints**
- - *show waypoints for special location*
- - *find locations in chat messages*
-- **Crystal Hollows Map HUD**
- - *Shows players location in crystal hollows*
- - *Shows important waypoints in crystal hollows*
+- **Powder HUD**
### Rift Features:
- **Mirrorverse Waypoints**
@@ -91,6 +105,11 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in
- Beacon Highlighting
- Nukekubi Head Highlighting
+### Garden Features:
+- **Visitor Helper**
+ - buy items that visitors require from bazaar by clicking the text
+- **Disable title and chat messages for Melon/Pumpkin Dicer**
+
### Visual Enhancements:
- **Fancy Tab HUD:** Fully configurable with a resource pack.
- **1.8 Hitbox for Lever and Farmland**
@@ -101,18 +120,29 @@ Installation guide is [here](https://github.com/SkyblockerMod/Skyblocker/wiki/in
- Circle or Square
- **Item Cooldown Display**
- **Configure Fire-Overlay Height**
+- **End HUD Widget**
+ - Zealots
+ - *Since last eye*
+ - *Total zealots kills*
+ - *Avg kills per eye*
+ - Endstone Protector
+ - *stage*
+ - *Location*
### User Interface Enhancements:
+- **Search overlays for bz and ah**
- **Attribute Shard Info Display**
- **Drill Fuel and Pickonimbus 2000 in Item Durability Bar**
- **Hotbar Slot Lock Keybind:** Select the hotbar slot you want to lock/unlock and press the lock button.
- **Item Tooltip:** (Provides information on)
- - *NPC Prices*
+ - *NPC Sell Prices*
- *Motes Prices*
- *bazaar (average, lowest bin)*
- *Auction House*
- *Museum*
- *Exotic Armor Identifier*
+ - *Item Quality*
+ - **
- **Quicknav:** (Fully customizeable) Fast navigation between pets, armor, enderchest, skill, collection, crafting, enchant, anvil, warp dungeon, and warp hub.
- **Recipe Book:** Lists all Skyblock items in the vanilla recipe book, allowing you to see the recipe of the item.
- **Backpack Preview:** After clicking your backpack or enderchest once, you can hover over the backpack or enderchest and hold Shift to preview its contents.
@@ -223,9 +253,15 @@ information.
|:--------------------------------------------------------------------------------------------------------:|:--------------------------------------------------------------------------------------------------------:|----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|
| [Grayray75](https://github.com/Grayray75) | [alexiayaa](https://github.com/alexiayaa) | [KhafraDev](https://github.com/KhafraDev) | [btwonion](https://github.com/btwonion) |
-| [<img alt="KhafraDev" src="https://github.com/Kaluub.png" width="100">](https://github.com/Kaluub) | [<img alt="KhafraDev" src="https://github.com/Emirlol.png" width="100">](https://github.com/Emirlol) | [<img alt="KhafraDev" src="https://github.com/Thsgun.png" width="100">](https://github.com/Thsgun) |
-|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
-| [Kaluub](https://github.com/Kaluub) | [Emirlol](https://github.com/Emirlol) | [Thsgun](https://github.com/Thsgun) |
+
+| [<img alt="KhafraDev" src="https://github.com/Kaluub.png" width="100">](https://github.com/Kaluub) | [<img alt="KhafraDev" src="https://github.com/Emirlol.png" width="100">](https://github.com/Emirlol) | [<img alt="KhafraDev" src="https://github.com/LegendaryLilac.png" width="100">](https://github.com/LegendaryLilac) | [<img alt="KhafraDev" src="https://github.com/olim88.png" width="100">](https://github.com/olim88) |
+|----------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
+| [Kaluub](https://github.com/Kaluub) | [Emirlol](https://github.com/Emirlol) | [LegendaryLilac](https://github.com/LegendaryLilac) | [olim88](https://github.com/olim88) |
+
+| [<img alt="Ghost-3" src="https://github.com/Ghost-3.png" width="100">](https://github.com/Ghost-3) | [<img alt="esteban4567890" src="https://github.com/esteban4567890.png" width="100">](https://github.com/esteban4567890) | [<img alt="Fluboxer" src="https://github.com/Fluboxer.png" width="100">](https://github.com/Fluboxer) |
+|----------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
+| [Ghost-3](https://github.com/Ghost-3) | [esteban4567890](https://github.com/esteban4567890) | [Fluboxer](https://github.com/Fluboxer) |
+
### Translators
diff --git a/gradle.properties b/gradle.properties
index 07340c99..6cf73016 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -34,7 +34,7 @@ jgit_version = 6.8.0.202311291450-r
commons_math_version = 3.6.1
# Mod Properties
-mod_version = 1.17.0
+mod_version = 1.18.0
maven_group = de.hysky
archives_base_name = skyblocker
modrinth_id=y6DuFGwJ
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index dca41bd1..36ef5a4f 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -18,6 +18,7 @@ import de.hysky.skyblocker.skyblock.dwarven.CrystalsLocationsManager;
import de.hysky.skyblocker.skyblock.dwarven.DwarvenHud;
import de.hysky.skyblocker.skyblock.end.BeaconHighlighter;
import de.hysky.skyblocker.skyblock.end.TheEnd;
+import de.hysky.skyblocker.skyblock.garden.VisitorHelper;
import de.hysky.skyblocker.skyblock.item.*;
import de.hysky.skyblocker.skyblock.item.tooltip.BackpackPreview;
import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip;
@@ -139,6 +140,7 @@ public class SkyblockerMod implements ClientModInitializer {
ItemProtection.init();
CreeperBeams.init();
Boulder.init();
+ VisitorHelper.init();
ItemRarityBackgrounds.init();
MuseumItemCache.init();
SecretsTracker.init();
diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
index 713a9fbd..b4e520e2 100644
--- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java
@@ -178,9 +178,6 @@ public class SkyblockerConfig {
public boolean dungeonQuality = true;
@SerialEntry
- public boolean visitorHelper = true;
-
- @SerialEntry
public TabHudConf tabHud = new TabHudConf();
@SerialEntry
@@ -468,10 +465,10 @@ public class SkyblockerConfig {
public static class FlameOverlay {
@SerialEntry
- public float flameHeight = 0f;
+ public int flameHeight = 100;
@SerialEntry
- public float flameOpacity = 0f;
+ public int flameOpacity = 100;
}
public static class SearchOverlay {
@@ -1094,6 +1091,9 @@ public class SkyblockerConfig {
public static class Garden {
@SerialEntry
public boolean dicerTitlePrevent = true;
+
+ @SerialEntry
+ public boolean visitorHelper = true;
}
public static class Slayer {
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
index 8a7d832c..afd688d8 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
@@ -86,13 +86,6 @@ public class GeneralCategory {
newValue -> config.general.dungeonQuality = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
- .option(Option.<Boolean>createBuilder()
- .name(Text.translatable("text.autoconfig.skyblocker.option.general.visitorHelper"))
- .binding(defaults.general.visitorHelper,
- () -> config.general.visitorHelper,
- newValue -> config.general.visitorHelper = newValue)
- .controller(ConfigUtils::createBooleanController)
- .build())
//Tab Hud
.group(OptionGroup.createBuilder()
@@ -642,19 +635,21 @@ public class GeneralCategory {
.group(OptionGroup.createBuilder()
.name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay"))
.collapsed(true)
- .option(Option.<Float>createBuilder()
+ .option(Option.<Integer>createBuilder()
.name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight.@Tooltip")))
.binding(defaults.general.flameOverlay.flameHeight,
() -> config.general.flameOverlay.flameHeight,
newValue -> config.general.flameOverlay.flameHeight = newValue)
- .controller(opt -> FloatSliderControllerBuilder.create(opt).range(0.0f, 0.5f).step(0.01f))
+ .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1))
.build())
- .option(Option.<Float>createBuilder()
+ .option(Option.<Integer>createBuilder()
.name(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity"))
+ .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity.@Tooltip")))
.binding(defaults.general.flameOverlay.flameOpacity,
() -> config.general.flameOverlay.flameOpacity,
newValue -> config.general.flameOverlay.flameOpacity = newValue)
- .controller(opt -> FloatSliderControllerBuilder.create(opt).range(0.0f, 0.8f).step(0.1f))
+ .controller(opt -> IntegerSliderControllerBuilder.create(opt).range(0, 100).step(1))
.build())
.build())
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
index 75c83a9b..d97513f8 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/LocationsCategory.java
@@ -153,6 +153,13 @@ public class LocationsCategory {
newValue -> config.locations.garden.dicerTitlePrevent = newValue)
.controller(ConfigUtils::createBooleanController)
.build())
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("text.autoconfig.skyblocker.option.general.visitorHelper"))
+ .binding(defaults.locations.garden.visitorHelper,
+ () -> config.locations.garden.visitorHelper,
+ newValue -> config.locations.garden.visitorHelper = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
.build())
.build();
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
index 8a1af570..7d2f849e 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.mixin;
import com.llamalad7.mixinextras.sugar.Local;
+import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver;
@@ -16,11 +17,9 @@ import de.hysky.skyblocker.skyblock.item.tooltip.CompactorDeletorPreview;
import de.hysky.skyblocker.utils.ItemUtils;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
-import net.minecraft.client.MinecraftClient;
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.item.TooltipContext;
import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -29,6 +28,7 @@ import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
@@ -42,6 +42,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Map;
+import java.util.Set;
import java.util.regex.Matcher;
@Mixin(HandledScreen.class)
@@ -52,6 +53,34 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
@Unique
private static final int OUT_OF_BOUNDS_SLOT = -999;
+ @Unique
+ private static final Identifier ITEM_PROTECTION = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/item_protection.png");
+
+ @Unique
+ private static final Set<String> FILLER_ITEMS = Set.of(
+ " ", // Empty menu item
+ "Locked Page",
+ "Quick Crafting Slot",
+ "Locked Backpack Slot 2", //Regular expressions won't be utilized here since the search by contains is based on plain text rather than regex syntax
+ "Locked Backpack Slot 3",
+ "Locked Backpack Slot 4",
+ "Locked Backpack Slot 5",
+ "Locked Backpack Slot 6",
+ "Locked Backpack Slot 7",
+ "Locked Backpack Slot 8",
+ "Locked Backpack Slot 9",
+ "Locked Backpack Slot 10",
+ "Locked Backpack Slot 11",
+ "Locked Backpack Slot 12",
+ "Locked Backpack Slot 13",
+ "Locked Backpack Slot 14",
+ "Locked Backpack Slot 15",
+ "Locked Backpack Slot 16",
+ "Locked Backpack Slot 17",
+ "Locked Backpack Slot 18",
+ "Preparing"
+ );
+
@Shadow
@Nullable
protected Slot focusedSlot;
@@ -66,22 +95,21 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
@Inject(at = @At("HEAD"), method = "keyPressed")
public void skyblocker$keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable<Boolean> cir) {
- 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, client.player);
+ if (this.client != null && this.focusedSlot != null && keyCode != 256) {
+ //wiki lookup
+ if (!this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && WikiLookup.wikiLookup.matchesKey(keyCode, scanCode)) {
+ WikiLookup.openWiki(this.focusedSlot, client.player);
+ }
+ //item protection
+ if (!this.client.options.inventoryKey.matchesKey(keyCode, scanCode) && ItemProtection.itemProtection.matchesKey(keyCode, scanCode)) {
+ ItemProtection.handleKeyPressed(this.focusedSlot.getStack());
+ }
}
}
- @Inject(at = @At("RETURN"), method = "render")
- public void skyblocker$renderScreen(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
- if (!Utils.isOnSkyblock()) return;
-
- if (SkyblockerConfigManager.get().general.visitorHelper && (Utils.getLocationRaw().equals("garden") && !getTitle().getString().contains("Logbook") || getTitle().getString().startsWith("Bazaar")))
- VisitorHelper.renderScreen(this.getTitle().getString(), context, textRenderer, handler, mouseX, mouseY);
- }
-
@Inject(at = @At("HEAD"), method = "mouseClicked")
public void skyblocker$mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) {
- if (SkyblockerConfigManager.get().general.visitorHelper && (Utils.getLocationRaw().equals("garden") && !getTitle().getString().contains("Logbook") || getTitle().getString().startsWith("Bazaar")))
+ if (SkyblockerConfigManager.get().locations.garden.visitorHelper && (Utils.getLocationRaw().equals("garden") && !getTitle().getString().contains("Logbook") || getTitle().getString().startsWith("Bazaar")))
VisitorHelper.onMouseClicked(mouseX, mouseY, button, this.textRenderer);
}
@@ -121,6 +149,9 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
return skyblocker$experimentSolvers$getStack(slot, stack);
}
+ /**
+ * Redirects getStack calls to account for different stacks in experiment solvers.
+ */
@Unique
private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, @NotNull ItemStack stack) {
ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver();
@@ -131,81 +162,84 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
return stack;
}
- @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 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) {
- 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) && chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) {
- chronomatronSolver.setState(ExperimentSolver.State.END);
- }
- } else if (experimentSolver instanceof SuperpairsSolver superpairsSolver) {
- superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex());
- superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY);
- } 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().map(Map.Entry::getKey).ifPresentOrElse(ultrasequencerSolver::setUltrasequencerNextSlot, () -> ultrasequencerSolver.setState(ExperimentSolver.State.END));
- }
- }
- }
- }
-
/**
* The naming of this method in yarn is half true, its mostly to handle slot/item interactions (which are mouse or keyboard clicks)
* For example, using the drop key bind while hovering over an item will invoke this method to drop the players item
*/
- @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At("HEAD"), cancellable = true)
- private void skyblocker$onSlotInteract(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) {
- if (Utils.isOnSkyblock()) {
- // When you try and drop the item by picking it up then clicking outside of the screen
- if (slotId == OUT_OF_BOUNDS_SLOT) {
- ItemStack cursorStack = this.handler.getCursorStack();
-
- if (ItemProtection.isItemProtected(cursorStack)) ci.cancel();
- }
-
- if (slot != null) {
- // When you click your drop key while hovering over an item
- if (actionType == SlotActionType.THROW) {
- ItemStack stack = 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"), cancellable = true)
+ private void skyblocker$onSlotClick(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) {
+ if (!Utils.isOnSkyblock()) return;
- if (ItemProtection.isItemProtected(stack)) ci.cancel();
- }
+ // Item Protection
+ // When you try and drop the item by picking it up then clicking outside the screen
+ if (slotId == OUT_OF_BOUNDS_SLOT && ItemProtection.isItemProtected(this.handler.getCursorStack())) {
+ ci.cancel();
+ return;
+ }
- //Prevent salvaging
- if (this.getTitle().getString().equals("Salvage Items")) {
- ItemStack stack = slot.getStack();
+ if (slot == null) return;
+ String title = getTitle().getString();
+ ItemStack stack = skyblocker$experimentSolvers$getStack(slot, slot.getStack());
+ ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver();
- if (ItemProtection.isItemProtected(stack)) ci.cancel();
+ // Prevent clicks on filler items
+ if (SkyblockerConfigManager.get().general.hideEmptyTooltips && FILLER_ITEMS.contains(stack.getName().getString()) &&
+ // Allow clicks in Ultrasequencer and Superpairs
+ (!UltrasequencerSolver.INSTANCE.getName().matcher(title).matches() || SkyblockerConfigManager.get().general.experiments.enableUltrasequencerSolver)) {
+ ci.cancel();
+ return;
+ }
+ // Item Protection
+ // When you click your drop key while hovering over an item
+ if (actionType == SlotActionType.THROW && ItemProtection.isItemProtected(stack)) {
+ ci.cancel();
+ return;
+ }
+ // Prevent salvaging
+ if (title.equals("Salvage Items") && ItemProtection.isItemProtected(stack)) {
+ ci.cancel();
+ return;
+ }
+ if (this.handler instanceof GenericContainerScreenHandler genericContainerScreenHandler && genericContainerScreenHandler.getRows() == 6) {
+ VisitorHelper.onSlotClick(slot, slotId, title);
+
+ // Prevent selling to NPC shops
+ ItemStack sellStack = this.handler.slots.get(49).getStack();
+ if (sellStack.getName().getString().equals("Sell Item") || ItemUtils.getNbtTooltip(sellStack, text -> text.contains("buyback")) != null) {
+ if (slotId != 49 && ItemProtection.isItemProtected(stack)) {
+ ci.cancel();
+ return;
}
+ }
+ }
-
- if (this.client != null && this.handler instanceof GenericContainerScreenHandler genericContainerScreenHandler && genericContainerScreenHandler.getRows() == 6) {
- VisitorHelper.onSlotClick(slot, slotId, this.getTitle().getString());
-
- //Prevent selling to NPC shops
- ItemStack sellItem = this.handler.slots.get(49).getStack();
-
- if (sellItem.getName().getString().equals("Sell Item") || skyblocker$doesLoreContain(sellItem, this.client, "buyback")) {
- ItemStack stack = slot.getStack();
-
- if (ItemProtection.isItemProtected(stack)) ci.cancel();
- }
+ // Experiment Solvers
+ if (currentSolver instanceof ExperimentSolver experimentSolver && experimentSolver.getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) {
+ if (experimentSolver instanceof ChronomatronSolver chronomatronSolver) {
+ Item item = chronomatronSolver.getChronomatronSlots().get(chronomatronSolver.getChronomatronCurrentOrdinal());
+ if ((stack.isOf(item) || ChronomatronSolver.TERRACOTTA_TO_GLASS.get(stack.getItem()) == item) && chronomatronSolver.incrementChronomatronCurrentOrdinal() >= chronomatronSolver.getChronomatronSlots().size()) {
+ chronomatronSolver.setState(ExperimentSolver.State.END);
}
+ } else if (experimentSolver instanceof SuperpairsSolver superpairsSolver) {
+ superpairsSolver.setSuperpairsPrevClickedSlot(slot.getIndex());
+ superpairsSolver.setSuperpairsCurrentSlot(ItemStack.EMPTY);
+ } 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().map(Map.Entry::getKey).ifPresentOrElse(ultrasequencerSolver::setUltrasequencerNextSlot, () -> ultrasequencerSolver.setState(ExperimentSolver.State.END));
}
+ return;
}
}
- //TODO make this a util method somewhere else, eventually
- private static boolean skyblocker$doesLoreContain(ItemStack stack, MinecraftClient client, String searchString) {
- return stack.getTooltip(client.player, TooltipContext.BASIC).stream().map(Text::getString).anyMatch(line -> line.contains(searchString));
- }
-
@Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V"))
private void skyblocker$drawItemRarityBackground(DrawContext context, Slot slot, CallbackInfo ci) {
if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds)
ItemRarityBackgrounds.tryDraw(slot.getStack(), context, slot.x, slot.y);
+ // Item protection
+ if (ItemProtection.isItemProtected(slot.getStack())) {
+ RenderSystem.enableBlend();
+ context.drawTexture(ITEM_PROTECTION, slot.x, slot.y, 0, 0, 16, 16, 16, 16);
+ RenderSystem.disableBlend();
+ }
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
index 88be60cd..5e3daf3c 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/InGameHudMixin.java
@@ -3,6 +3,7 @@ package de.hysky.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
+import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.FancyStatusBars;
import de.hysky.skyblocker.skyblock.dungeon.DungeonMap;
@@ -10,6 +11,7 @@ import de.hysky.skyblocker.skyblock.dungeon.DungeonScore;
import de.hysky.skyblocker.skyblock.dungeon.DungeonScoreHUD;
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
import de.hysky.skyblocker.skyblock.item.ItemCooldowns;
+import de.hysky.skyblocker.skyblock.item.ItemProtection;
import de.hysky.skyblocker.skyblock.item.ItemRarityBackgrounds;
import de.hysky.skyblocker.utils.Utils;
import net.fabricmc.api.EnvType;
@@ -38,6 +40,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public abstract class InGameHudMixin {
@Unique
private static final Supplier<Identifier> SLOT_LOCK_ICON = () -> SkyblockerConfigManager.get().general.itemProtection.slotLockStyle.tex;
+
+ @Unique
+ private static final Identifier ITEM_PROTECTION = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/item_protection.png");
@Unique
private static final Pattern DICER_TITLE_BLACKLIST = Pattern.compile(".+? DROP!");
@@ -56,12 +61,19 @@ public abstract class InGameHudMixin {
@Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/InGameHud;renderHotbarItem(Lnet/minecraft/client/gui/DrawContext;IIFLnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;I)V", ordinal = 0))
public void skyblocker$renderHotbarItemLockOrRarityBg(float tickDelta, DrawContext context, CallbackInfo ci, @Local(ordinal = 4, name = "m") int index, @Local(ordinal = 5, name = "n") int x, @Local(ordinal = 6, name = "o") int y, @Local PlayerEntity player) {
if (Utils.isOnSkyblock()) {
+ // slot lock
if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) ItemRarityBackgrounds.tryDraw(player.getInventory().main.get(index), context, x, y);
if (HotbarSlotLock.isLocked(index)) {
RenderSystem.enableBlend();
context.drawTexture(SLOT_LOCK_ICON.get(), x, y, 0, 0, 16, 16, 16, 16);
RenderSystem.disableBlend();
}
+ //item protection
+ if (ItemProtection.isItemProtected(player.getInventory().main.get(index))){
+ RenderSystem.enableBlend();
+ context.drawTexture(ITEM_PROTECTION, x, y, 0, 0, 16, 16, 16, 16);
+ RenderSystem.disableBlend();
+ }
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/InGameOverlayRendererMixin.java b/src/main/java/de/hysky/skyblocker/mixin/InGameOverlayRendererMixin.java
index b957603a..4775ce2d 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/InGameOverlayRendererMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/InGameOverlayRendererMixin.java
@@ -11,12 +11,12 @@ public class InGameOverlayRendererMixin {
@ModifyArg(method = "renderFireOverlay", index = 2, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/BufferBuilder;vertex(Lorg/joml/Matrix4f;FFF)Lnet/minecraft/client/render/VertexConsumer;"))
private static float configureFlameHeight(float y) {
- return y - SkyblockerConfigManager.get().general.flameOverlay.flameHeight;
+ return y - (0.5f - ((float) SkyblockerConfigManager.get().general.flameOverlay.flameHeight / 200.0f));
}
@ModifyArg(method = "renderFireOverlay", index = 3, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexConsumer;color(FFFF)Lnet/minecraft/client/render/VertexConsumer;"))
private static float configureFlameOpacity(float opacity) {
- return opacity - SkyblockerConfigManager.get().general.flameOverlay.flameOpacity;
+ return opacity - (0.8f - ((float) SkyblockerConfigManager.get().general.flameOverlay.flameOpacity / 125.0f));
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java b/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java
index cf8aab78..dd671b2e 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/MinecraftClientMixin.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.mixin;
import de.hysky.skyblocker.skyblock.item.HotbarSlotLock;
+import de.hysky.skyblocker.skyblock.item.ItemProtection;
import de.hysky.skyblocker.utils.JoinWorldPlaceholderScreen;
import de.hysky.skyblocker.utils.ReconfiguringPlaceholderScreen;
import de.hysky.skyblocker.utils.Utils;
@@ -34,6 +35,7 @@ public abstract class MinecraftClientMixin {
public void skyblocker$handleInputEvents(CallbackInfo ci) {
if (Utils.isOnSkyblock()) {
HotbarSlotLock.handleInputEvents(player);
+ ItemProtection.handleHotbarKeyPressed(player);
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
index 746235b7..4e87b237 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
@@ -12,9 +12,10 @@ import java.util.List;
import java.util.Map;
public class UltrasequencerSolver extends ExperimentSolver {
+ public static final UltrasequencerSolver INSTANCE = new UltrasequencerSolver();
private int ultrasequencerNextSlot;
- public UltrasequencerSolver() {
+ private UltrasequencerSolver() {
super("^Ultrasequencer \\(\\w+\\)$");
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
index 3c049f69..4fd9eeb3 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/VisitorHelper.java
@@ -1,13 +1,17 @@
package de.hysky.skyblocker.skyblock.garden;
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.utils.NEURepoManager;
+import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import io.github.moulberry.repo.data.NEUItem;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
@@ -32,11 +36,20 @@ public class VisitorHelper {
private static final Map<String, ItemStack> itemCache = new HashMap<>();
private static final int TEXT_START_X = 4;
private static final int TEXT_START_Y = 4;
+ private static final int TEXT_INDENT = 8;
private static final int LINE_SPACING = 3;
+ public static void init() {
+ ScreenEvents.BEFORE_INIT.register((client, screen, scaledWidth, scaledHeight) -> {
+ String title = screen.getTitle().getString();
+ if (SkyblockerConfigManager.get().locations.garden.visitorHelper && screen instanceof HandledScreen<?> handledScreen && (Utils.getLocationRaw().equals("garden") && !title.contains("Logbook") || title.startsWith("Bazaar"))) {
+ ScreenEvents.afterRender(screen).register((screen_, context, mouseX, mouseY, delta) -> renderScreen(title, context, client.textRenderer, handledScreen.getScreenHandler(), mouseX, mouseY));
+ }
+ });
+ }
+
public static void renderScreen(String title, DrawContext context, TextRenderer textRenderer, ScreenHandler handler, int mouseX, int mouseY) {
- if (handler.getCursorStack() == ItemStack.EMPTY)
- processVisitorItem(title, handler);
+ if (handler.getCursorStack() == ItemStack.EMPTY) processVisitorItem(title, handler);
drawScreenItems(context, textRenderer, mouseX, mouseY);
}
@@ -51,9 +64,9 @@ public class VisitorHelper {
for (Object2IntMap.Entry<String> itemEntry : visitorEntry.getValue().object2IntEntrySet()) {
String itemText = itemEntry.getKey();
- textWidth = textRenderer.getWidth(itemText);
+ textWidth = textRenderer.getWidth(itemText + " x" + itemEntry.getIntValue());
- if (isMouseOverText(mouseX, mouseY, TEXT_START_X, yPosition, textWidth, textHeight)) {
+ if (isMouseOverText(mouseX, mouseY, TEXT_START_X + TEXT_INDENT, yPosition, textWidth, textHeight)) {
MessageScheduler.INSTANCE.sendMessageAfterCooldown("/bz " + itemText);
return;
}
@@ -107,6 +120,8 @@ public class VisitorHelper {
}
private static void drawScreenItems(DrawContext context, TextRenderer textRenderer, int mouseX, int mouseY) {
+ context.getMatrices().push();
+ context.getMatrices().translate(0, 0, 200);
int index = 0;
for (Map.Entry<String, Object2IntMap<String>> visitorEntry : itemMap.entrySet()) {
String visitorName = visitorEntry.getKey();
@@ -117,6 +132,7 @@ public class VisitorHelper {
index = drawItemEntryWithHover(context, textRenderer, itemEntry, index, mouseX, mouseY);
}
}
+ context.getMatrices().pop();
}
private static int drawItemEntryWithHover(DrawContext context, TextRenderer textRenderer, Map.Entry<String, Integer> itemEntry, int index, int mouseX, int mouseY) {
@@ -145,15 +161,19 @@ public class VisitorHelper {
private static void drawItemEntryWithHover(DrawContext context, TextRenderer textRenderer, ItemStack stack, int amount, int index, int mouseX, int mousseY) {
Text text = Serialization.fromJson(stack.getSubNbt("display").getString("Name")).append(" x" + amount);
- drawTextWithOptionalUnderline(context, textRenderer, text, TEXT_START_X + 8, TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)), mouseX, mousseY);
- context.drawItem(stack, TEXT_START_X + 10 + textRenderer.getWidth(text), TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)) - textRenderer.fontHeight + 5);
+ drawTextWithOptionalUnderline(context, textRenderer, text, TEXT_START_X + TEXT_INDENT, TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)), mouseX, mousseY);
+ // drawItem adds 150 to the z, which puts our z at 350, above the item in the slot (250) and their text (300) and below the cursor stack (382) and their text (432)
+ context.drawItem(stack, TEXT_START_X + TEXT_INDENT + 2 + textRenderer.getWidth(text), TEXT_START_Y + (index * (LINE_SPACING + textRenderer.fontHeight)) - textRenderer.fontHeight + 5);
}
private static void drawTextWithOptionalUnderline(DrawContext context, TextRenderer textRenderer, Text text, int x, int y, int mouseX, int mouseY) {
+ context.getMatrices().push();
+ context.getMatrices().translate(0, 0, 150); // This also puts our z at 350
context.drawText(textRenderer, text, x, y, -1, true);
if (isMouseOverText(mouseX, mouseY, x, y, textRenderer.getWidth(text), textRenderer.fontHeight)) {
context.drawHorizontalLine(x, x + textRenderer.getWidth(text), y + textRenderer.fontHeight, -1);
}
+ context.getMatrices().pop();
}
private static boolean isMouseOverText(double mouseX, double mouseY, int x, int y, int width, int height) {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
index 2d929c28..7e04652c 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/ItemProtection.java
@@ -10,13 +10,25 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.client.option.KeyBinding;
import net.minecraft.command.CommandRegistryAccess;
+import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.text.Text;
+import org.lwjgl.glfw.GLFW;
public class ItemProtection {
+ public static KeyBinding itemProtection;
public static void init() {
+ itemProtection = KeyBindingHelper.registerKeyBinding(new KeyBinding(
+ "key.itemProtection",
+ GLFW.GLFW_KEY_V,
+ "key.categories.skyblocker"
+ ));
ClientCommandRegistrationCallback.EVENT.register(ItemProtection::registerCommand);
}
@@ -61,4 +73,46 @@ public class ItemProtection {
return Command.SINGLE_SUCCESS;
}
+
+ public static void handleKeyPressed(ItemStack heldItem) {
+ PlayerEntity playerEntity = MinecraftClient.getInstance().player;
+ if (playerEntity == null){
+ return;
+ }
+ if (!Utils.isOnSkyblock()) {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.unableToProtect")));
+ return;
+ }
+
+ if (heldItem.isEmpty()) {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.noItemUuid")));
+ return;
+ }
+
+ String itemUuid = ItemUtils.getItemUuid(heldItem);
+ if (!itemUuid.isEmpty()) {
+ ObjectOpenHashSet<String> protectedItems = SkyblockerConfigManager.get().general.protectedItems;
+
+ if (!protectedItems.contains(itemUuid)) {
+ protectedItems.add(itemUuid);
+ SkyblockerConfigManager.save();
+
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.added", heldItem.getName())));
+ } else {
+ protectedItems.remove(itemUuid);
+ SkyblockerConfigManager.save();
+
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.removed", heldItem.getName())));
+ }
+ } else {
+ playerEntity.sendMessage(Constants.PREFIX.get().append(Text.translatable("skyblocker.itemProtection.noItemUuid")));
+ }
+ }
+
+ public static void handleHotbarKeyPressed(ClientPlayerEntity player) {
+ while (itemProtection.wasPressed()) {
+ ItemStack heldItem = player.getMainHandStack();
+ handleKeyPressed(heldItem);
+ }
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
index d5be7eee..fbef1bcb 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/ItemTooltip.java
@@ -51,7 +51,7 @@ public class ItemTooltip {
boolean bazaarOpened = lines.stream().anyMatch(each -> each.getString().contains("Buy price:") || each.getString().contains("Sell price:"));
if (TooltipInfoType.NPC.isTooltipEnabledAndHasOrNullWarning(internalID)) {
- lines.add(Text.literal(String.format("%-21s", "NPC Price:"))
+ lines.add(Text.literal(String.format("%-21s", "NPC Sell Price:"))
.formatted(Formatting.YELLOW)
.append(getCoinsMessage(TooltipInfoType.NPC.getData().get(internalID).getAsDouble(), count)));
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
index 6f40f5a8..309ba9ca 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/tabhud/widget/DungeonSecretWidget.java
@@ -1,16 +1,19 @@
package de.hysky.skyblocker.skyblock.tabhud.widget;
import de.hysky.skyblocker.skyblock.tabhud.util.Ico;
+import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListMgr;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import java.util.regex.Pattern;
+
// this widget shows info about the secrets of the dungeon
public class DungeonSecretWidget extends Widget {
- private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE,
- Formatting.BOLD);
+ private static final MutableText TITLE = Text.literal("Discoveries").formatted(Formatting.DARK_PURPLE, Formatting.BOLD);
+ private static final Pattern DISCOVERIES = Pattern.compile("Discoveries: (\\d+)");
public DungeonSecretWidget() {
super(TITLE, Formatting.DARK_PURPLE.getColorValue());
@@ -18,9 +21,12 @@ public class DungeonSecretWidget extends Widget {
@Override
public void updateContent() {
- this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31);
- this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32);
-
+ if (PlayerListMgr.regexAt(31, DISCOVERIES) != null) {
+ this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 32);
+ this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 33);
+ } else {
+ this.addSimpleIcoText(Ico.CHEST, "Secrets:", Formatting.YELLOW, 31);
+ this.addSimpleIcoText(Ico.SKULL, "Crypts:", Formatting.YELLOW, 32);
+ }
}
-
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/Http.java b/src/main/java/de/hysky/skyblocker/utils/Http.java
index 17079d15..58deced2 100644
--- a/src/main/java/de/hysky/skyblocker/utils/Http.java
+++ b/src/main/java/de/hysky/skyblocker/utils/Http.java
@@ -53,7 +53,7 @@ public class Http {
String body = new String(decodedInputStream.readAllBytes());
HttpHeaders headers = response.headers();
- return new ApiResponse(body, response.statusCode(), getCacheStatus(headers), getAge(headers));
+ return new ApiResponse(body, response.statusCode(), getCacheStatuses(headers), getAge(headers));
}
public static HttpHeaders sendHeadRequest(String url) throws IOException, InterruptedException {
@@ -115,12 +115,12 @@ public class Http {
}
/**
- * Returns the cache status of the resource
+ * Returns the cache statuses of the resource. All possible cache status values conform to Cloudflare's.
*
- * @see <a href="https://developers.cloudflare.com/cache/concepts/default-cache-behavior/#cloudflare-cache-responses">Cloudflare Cache Docs</a>
+ * @see <a href="https://developers.cloudflare.com/cache/concepts/cache-responses/">Cloudflare Cache Docs</a>
*/
- private static String getCacheStatus(HttpHeaders headers) {
- return headers.firstValue("CF-Cache-Status").orElse("UNKNOWN");
+ private static String[] getCacheStatuses(HttpHeaders headers) {
+ return new String[] { headers.firstValue("CF-Cache-Status").orElse("UNKNOWN"), headers.firstValue("Local-Cache-Status").orElse("UNKNOWN") };
}
private static int getAge(HttpHeaders headers) {
@@ -128,7 +128,7 @@ public class Http {
}
//TODO If ever needed, we could just replace cache status with the response headers and go from there
- public record ApiResponse(String content, int statusCode, String cacheStatus, int age) implements AutoCloseable {
+ public record ApiResponse(String content, int statusCode, String[] cacheStatuses, int age) implements AutoCloseable {
public boolean ok() {
return statusCode == 200;
@@ -139,7 +139,7 @@ public class Http {
}
public boolean cached() {
- return cacheStatus.equals("HIT");
+ return cacheStatuses[0].equals("HIT") || cacheStatuses[1].equals("HIT");
}
@Override
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
index a81c25f7..460f34dd 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolverManager.java
@@ -44,7 +44,7 @@ public class ContainerSolverManager {
new CroesusProfit(),
new ChronomatronSolver(),
new SuperpairsSolver(),
- new UltrasequencerSolver()
+ UltrasequencerSolver.INSTANCE
};
}
diff --git a/src/main/resources/assets/skyblocker/lang/en_ca.json b/src/main/resources/assets/skyblocker/lang/en_ca.json
index 416f9d9b..0ff8018b 100644
--- a/src/main/resources/assets/skyblocker/lang/en_ca.json
+++ b/src/main/resources/assets/skyblocker/lang/en_ca.json
@@ -31,5 +31,6 @@
"skyblocker.tips.customArmorDyeColors": "Apply a custom dye colour to your leather armour with /skyblocker custom dyeColor",
"skyblocker.tips.customArmorTrims": "You can set custom armour trims on your armour using /skyblocker custom armorTrim.",
"text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle": "Enable Livid Colour Title",
- "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip": "Display the livid colour in the title during the Livid boss fight."
+ "text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip": "Display the livid colour in the title during the Livid boss fight.",
+ "skyblocker.end.hud.protectorLocations.center": "Centre"
}
diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json
index 63ff4fca..f5875feb 100644
--- a/src/main/resources/assets/skyblocker/lang/en_us.json
+++ b/src/main/resources/assets/skyblocker/lang/en_us.json
@@ -5,6 +5,7 @@
"key.skyblocker.defaultTgl": "Switch tab HUD to default view",
"key.skyblocker.toggleA": "Toggle tab HUD to screen A",
"key.wikiLookup": "Wiki Lookup",
+ "key.itemProtection": "Protect Item",
"text.skyblocker.open": "Open",
"text.skyblocker.quit_config": "Changes Not Saved",
@@ -132,7 +133,9 @@
"text.autoconfig.skyblocker.option.general.teleportOverlay.enableWitherImpact": "Enable Wither Impact Overlay",
"text.autoconfig.skyblocker.option.general.flameOverlay": "Flame Overlay",
"text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight": "Flame Height",
+ "text.autoconfig.skyblocker.option.general.flameOverlay.flameHeight.@Tooltip": "100% default height\n0% off",
"text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity": "Flame Opacity",
+ "text.autoconfig.skyblocker.option.general.flameOverlay.flameOpacity.@Tooltip": "100% default opacity\n0% off",
"text.autoconfig.skyblocker.option.general.searchOverlay": "Search Overlay",
"text.autoconfig.skyblocker.option.general.searchOverlay.enableBazaar": "Enable For Bazaar",
"text.autoconfig.skyblocker.option.general.searchOverlay.enableBazaar.@Tooltip": "Show custom search overlay when searching in bazaar.",
diff --git a/src/main/resources/assets/skyblocker/lang/es_es.json b/src/main/resources/assets/skyblocker/lang/es_es.json
index 297afc81..d74ac193 100644
--- a/src/main/resources/assets/skyblocker/lang/es_es.json
+++ b/src/main/resources/assets/skyblocker/lang/es_es.json
@@ -63,7 +63,6 @@
"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.category.messages": "Mensajes",
"text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "Deshabilitado",
"text.autoconfig.skyblocker.option.messages.chatFilterResult.FILTER": "Filtro",
diff --git a/src/main/resources/assets/skyblocker/lang/fr_fr.json b/src/main/resources/assets/skyblocker/lang/fr_fr.json
index 7c71081f..679f2507 100644
--- a/src/main/resources/assets/skyblocker/lang/fr_fr.json
+++ b/src/main/resources/assets/skyblocker/lang/fr_fr.json
@@ -49,7 +49,6 @@
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "Décoder les requêtes de Fetchur",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Résoudre le puzzle de Puzzler",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "ATH mine des nains",
- "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Activé",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Activer l'arrière-plan",
"text.autoconfig.skyblocker.category.messages": "Messages",
"text.autoconfig.skyblocker.option.messages.hideAbility": "Cacher le rechargement des capacités",
@@ -112,6 +111,42 @@
"key.skyblocker.toggleB": "Basculer l'onglet HUD vers l'écran B",
"key.skyblocker.toggleA": "Basculer l'onglet HUD vers l'écran A",
"text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts": "Activer les Raccourcis",
- "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts.@Tooltip": "Marche seulement sur Hypixel. Edite les raccourcis avec \"/skyblocker shortcuts\". Au moins une des options suivantes doit être activée pour que ceci prenne effet.",
- "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts": "Activer les Commandes Raccourcis"
+ "text.autoconfig.skyblocker.option.general.shortcuts.enableShortcuts.@Tooltip": "Marche partout, même en Vanilla ! Edite les raccourcis avec \"/skyblocker shortcuts\". Au moins une des options suivantes doit être activée pour que ceci prenne effet.",
+ "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts": "Activer les Commandes Raccourcis",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual": "Aide pour le Rituel Mythologique",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual.enableMythologicalRitualHelper": "Activer l'aide du Rituel Mythologique",
+ "text.autoconfig.skyblocker.option.general.itemCooldown.enableItemCooldowns": "Activer le Temps de Recharge de l'item",
+ "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts": "Activer les Raccourcis d'Argument de Commande",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumInfo": "Activer l'Info du Musée",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableObtainedDate": "Activer Date Obtenue",
+ "text.autoconfig.skyblocker.option.general.fairySouls.highlightOnlyNearbySouls": "Accentuer seulement les fairy souls proches",
+ "text.autoconfig.skyblocker.option.general.fairySouls.highlightFoundSouls": "Accentuer les fairy souls trouvées",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableExoticTooltip": "Activer l'info-bulle exotique",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableExoticTooltip.@Tooltip": "Affiche le type d'exotique en dessous du nom de l'item si une pièce d'armure est exotique.",
+ "text.autoconfig.skyblocker.option.general.etherwarpOverlay": "Overlay de l'Etherwarp",
+ "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandArgShortcuts.@Tooltip": "Raccourcis qui remplacent un ou plus de mot(s)/argument(s) d'une commande qui a plusieurs mots/arguments. Edite les raccourcis avec \"/skyblocker shortcuts\". Les raccourcis doivent être activés pour que ceci prenne effet.",
+ "text.autoconfig.skyblocker.option.general.fairySouls.highlightOnlyNearbySouls.@Tooltip": "Lorsque cette option est activée, seules les fairy souls situées dans un rayon de 50 blocs sont mises en évidence",
+ "text.autoconfig.skyblocker.option.general.tabHud.plainPlayerNames.@Tooltip": "Activer pour afficher les pseudos des joueurs sans aucune mise en forme sur les îles publiques.",
+ "text.autoconfig.skyblocker.option.general.waypoints.enableWaypoints": "Activer les Waypoints",
+ "text.autoconfig.skyblocker.option.general.waypoints": "Waypoints",
+ "text.autoconfig.skyblocker.option.general.waypoints.waypointType": "Type de Waypoint",
+ "text.skyblocker.open": "Ouvrir",
+ "text.skyblocker.quit_config": "Les modifications ne sont pas sauvegardées",
+ "text.skyblocker.quit_config_sure": "Êtes-vous sur de vouloir arrêter d'éditer la config ? Vos changements ne seront pas sauvegardés !",
+ "text.autoconfig.skyblocker.option.general.tabHud.nameSorting": "Méthode de tri des Pseudos des Joueurs",
+ "text.autoconfig.skyblocker.option.general.itemTooltip.enableMuseumInfo.@Tooltip": "If cet item est donnable au musée, alors la catégorie de cet item dans le musée sera affiché. Il affiche aussi un marqueur indiquant si vous avez donné l'item a votre musée ou non (Cadeaux pas pris en charge pour l'instant).\n\nAssurez vous d'activer l'API du musée pour des informations précises !",
+ "text.autoconfig.skyblocker.option.general.shortcuts.config": "Configuration des raccourcis...",
+ "text.skyblocker.quit_discard": "Quitter et Abandonner les Modifications",
+ "text.autoconfig.skyblocker.option.general.shortcuts.enableCommandShortcuts.@Tooltip": "Raccourcis pour les commandes d'un seul mot. Edite les raccourcis avec \"/skyblocker shortcuts\". Les raccourcis doivent être activés pour que ceci prenne effet.",
+ "text.autoconfig.skyblocker.option.general.quiverWarning": "Avertissement du Carquois",
+ "text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarningAfterDungeon": "Activer l'Avertissement du Carquois après un Donjon",
+ "text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarning": "Activer l'Avertissement du Carquois",
+ "text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarningInDungeons": "Activer l'Avertissement du Carquois en Donjons",
+ "text.autoconfig.skyblocker.option.general.tabHud.nameSorting.@Tooltip": "Ordre alphabétique tri les pseudos alphabétiquement alors que Par défaut n'a pas d'ordre particulier.",
+ "text.autoconfig.skyblocker.option.general.compactorDeletorPreview": "Activer l'Aperçu du Compacteur/Supprimeur",
+ "text.autoconfig.skyblocker.option.general.enableTips": "Activer les Conseils",
+ "text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip": "Waypoint : Affiche une accentuation et faisceau de beacon.\n\nWaypoint avec contour : Affiche un waypoint ET un contour.\n\nAccentuation : Affiche seulement une accentuation.\n\nAccentuation avec contour : Affiche une accentuation ET un contour.\n\nContour : Affiche seulement un contour.",
+ "text.autoconfig.skyblocker.option.general.waypoints.waypointType.generalNote": "\n\n\nCette option ne s'applique pas a tout les waypoints. Certains waypoints comme les waypoints pour secrets ont leur propre configuration.",
+ "text.autoconfig.skyblocker.option.general.tabHud.plainPlayerNames": "Noms de Joueurs Clairs",
+ "text.autoconfig.skyblocker.option.general.itemInfoDisplay": "Affichage des infos d'item"
}
diff --git a/src/main/resources/assets/skyblocker/lang/ja_jp.json b/src/main/resources/assets/skyblocker/lang/ja_jp.json
index 7448b95c..19e8a52c 100644
--- a/src/main/resources/assets/skyblocker/lang/ja_jp.json
+++ b/src/main/resources/assets/skyblocker/lang/ja_jp.json
@@ -46,7 +46,6 @@
"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.category.messages": "メッセージ",
"text.autoconfig.skyblocker.option.messages.hideAbility": "アビリティのクールダウンを非表示にする",
diff --git a/src/main/resources/assets/skyblocker/lang/ko_kr.json b/src/main/resources/assets/skyblocker/lang/ko_kr.json
index d5357715..4fa1e135 100644
--- a/src/main/resources/assets/skyblocker/lang/ko_kr.json
+++ b/src/main/resources/assets/skyblocker/lang/ko_kr.json
@@ -62,7 +62,6 @@
"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.category.messages": "메시지",
"text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "비활성화됨",
diff --git a/src/main/resources/assets/skyblocker/lang/pt_br.json b/src/main/resources/assets/skyblocker/lang/pt_br.json
index 02e52b02..ac7e0a6c 100644
--- a/src/main/resources/assets/skyblocker/lang/pt_br.json
+++ b/src/main/resources/assets/skyblocker/lang/pt_br.json
@@ -171,7 +171,7 @@
"text.autoconfig.skyblocker.option.general.wikiLookup.officialWiki.@Tooltip": "Usar a wiki oficial em vez da wiki do Fandom.",
"text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgrounds": "Fundos de Raridade de Item",
"text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgrounds.@Tooltip": "Mostra um fundo colorido atrás de um item, a cor representa a raridade do item.",
- "text.autoconfig.skyblocker.option.locations.dungeons.mapScreen": "Configuração da posição do mapa da dungeon...",
+ "text.autoconfig.skyblocker.option.locations.dungeons.mapScreen": "Configuração da posição do Mapa da Dungeon e Pontuação...",
"text.autoconfig.skyblocker.option.locations.dungeons.solveThreeWeirdos": "Guia para Puzzle dos Three Weridos",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[0]": "Simples: Exibe nome e porcentagem.",
"text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.neutralThreshold": "Limite neutro",
@@ -201,7 +201,6 @@
"text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText": "Texto da cor do Livid",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "Guia para puzzle do Puzzler",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Interface da mina dos anões",
- "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Ativado",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style": "Estilo para a interface",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[2]": "\nClássico: Exibe nome e porcentagem em uma caixa super simples.",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Ativar fundo",
@@ -283,5 +282,8 @@
"text.autoconfig.skyblocker.option.quickNav.button.clickEvent": "Evento ao clicar",
"text.autoconfig.skyblocker.option.general.waypoints.enableWaypoints": "Ativar Waypoints",
"text.autoconfig.skyblocker.option.general.waypoints.waypointType": "Tipo de Waypoint",
- "text.autoconfig.skyblocker.option.general.waypoints.waypointType.generalNote": "\n\n\nEssa opção não aplica para todos os waypoints. Alguns waypoints como waypoints secretos tem seu próprio opção de tipo de waypoint."
+ "text.autoconfig.skyblocker.option.general.waypoints.waypointType.generalNote": "\n\n\nEssa opção não aplica para todos os waypoints. Alguns waypoints como waypoints secretos tem seu próprio opção de tipo de waypoint.",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual": "Assistente de Ritual Mitológico",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual.enableMythologicalRitualHelper": "Ativar Assistente de Ritual Mitológico",
+ "text.autoconfig.skyblocker.option.general.enableTips": "Ativar Dicas"
}
diff --git a/src/main/resources/assets/skyblocker/lang/ru_ru.json b/src/main/resources/assets/skyblocker/lang/ru_ru.json
index b84ae0fe..00bf4025 100644
--- a/src/main/resources/assets/skyblocker/lang/ru_ru.json
+++ b/src/main/resources/assets/skyblocker/lang/ru_ru.json
@@ -89,7 +89,6 @@
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[0]": "Упрощенный: Показывает название и процент выполнения.",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.style.@Tooltip[2]": "\nКлассический: Показывает название и процент выполнения в простом тёмном квадрате.",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enableBackground": "Включить Фон",
- "text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud.enabled": "Включить",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.dwarvenHud": "Dwarven HUD (Интерфейс Гномьих Шахт)",
"text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "Выглядит лучше, когда включены полоски Skyblocker (здоровья, маны и т.д.)",
"text.autoconfig.skyblocker.option.locations.barn": "Barn (Ферма)",
diff --git a/src/main/resources/assets/skyblocker/lang/tr_tr.json b/src/main/resources/assets/skyblocker/lang/tr_tr.json
index b46463fb..000bf1a3 100644
--- a/src/main/resources/assets/skyblocker/lang/tr_tr.json
+++ b/src/main/resources/assets/skyblocker/lang/tr_tr.json
@@ -39,7 +39,6 @@
"text.autoconfig.skyblocker.option.messages.hideMana.@Tooltip": "FancyBar ile daha iyi bir deneyim sunar",
"text.autoconfig.skyblocker.option.general.hideEmptyTooltips": "Menülerdeki boş eşya açıklamalarını gizle",
"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",
diff --git a/src/main/resources/assets/skyblocker/lang/zh_cn.json b/src/main/resources/assets/skyblocker/lang/zh_cn.json
index 4d058bf1..c5d3bccb 100644
--- a/src/main/resources/assets/skyblocker/lang/zh_cn.json
+++ b/src/main/resources/assets/skyblocker/lang/zh_cn.json
@@ -64,7 +64,6 @@
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solveFetchur": "解决Fetchur的迷题",
"text.autoconfig.skyblocker.option.locations.dwarvenMines.solvePuzzler": "解决Puzzler的迷题",
"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.category.messages": "消息",
"text.autoconfig.skyblocker.option.messages.chatFilterResult.PASS": "禁用",
@@ -157,5 +156,32 @@
"text.autoconfig.skyblocker.option.general.waypoints.waypointType": "路径点类型",
"text.skyblocker.open": "开启",
"text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup": "启用 wiki 查阅功能",
- "text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup.@Tooltip": "指针悬停于物品之下按 F4 键打开 wiki 相关条目"
+ "text.autoconfig.skyblocker.option.general.wikiLookup.enableWikiLookup.@Tooltip": "指针悬停于物品之下按 F4 键打开 wiki 相关条目",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual": "神话仪式助手",
+ "text.autoconfig.skyblocker.option.general.mythologicalRitual.enableMythologicalRitualHelper": "开启神话仪式助手",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enablePearlWaypoints": "启用珍珠路径点",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableAotvWaypoints": "启用瞬息之刃路径点",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableFairySoulWaypoints": "启用仙女之魂路径点",
+ "text.autoconfig.skyblocker.option.locations.spidersDen.relics": "遗物助手",
+ "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage": "启用地牢 %d 分数提示信息",
+ "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip": "在地牢中达到 %d 分时发送提示信息",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableEntranceWaypoints": "启用入口路径点",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableChestWaypoints": "启用箱子路径点",
+ "text.autoconfig.skyblocker.option.general.itemCooldown": "物品冷却提示",
+ "text.autoconfig.skyblocker.option.general.itemCooldown.enableItemCooldowns": "启用物品冷却提示",
+ "text.autoconfig.skyblocker.option.general.specialEffects.rareDungeonDropEffects.@Tooltip": "为地牢稀有掉落添加特殊的视觉效果!",
+ "text.autoconfig.skyblocker.option.locations.spidersDen": "蜘蛛巢穴",
+ "text.autoconfig.skyblocker.option.locations.spidersDen.relics.enableRelicsHelper": "启用遗物助手",
+ "text.autoconfig.skyblocker.option.locations.spidersDen.relics.highlightFoundRelics": "高亮已发现的遗物",
+ "text.autoconfig.skyblocker.option.general.compactorDeletorPreview": "启用个人压缩器/删除器预览",
+ "text.autoconfig.skyblocker.option.general.itemInfoDisplay.itemRarityBackgrounds.@Tooltip": "将物品背景颜色改为其稀有度所对应的颜色",
+ "text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore": "地牢分数",
+ "skyblocker.wikiLookup.noArticleFound": "§r无法找到此物品的 wiki 相关条目...",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableWitherWaypoints": "启用凋灵精粹路径点",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableBatWaypoints": "启用蝙蝠路径点",
+ "text.autoconfig.skyblocker.option.general.betterPartyFinder": "更好的组队查找",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableRoomMatching.@Tooltip": "关闭此选项可节省约20MB左右的内存,但是秘密路径点和§l部分谜题助手功能§r需要启用该选项",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableItemWaypoints": "启用物品路径点",
+ "text.autoconfig.skyblocker.option.general.quiverWarning.enableQuiverWarningAfterDungeon": "在地牢结束后启用箭袋提示",
+ "text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableLeverWaypoints": "启用拉杆路径点"
}
diff --git a/src/main/resources/assets/skyblocker/textures/gui/item_protection.png b/src/main/resources/assets/skyblocker/textures/gui/item_protection.png
new file mode 100644
index 00000000..b76fe034
--- /dev/null
+++ b/src/main/resources/assets/skyblocker/textures/gui/item_protection.png
Binary files differ