aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2024-07-26 15:15:12 +0800
committerGitHub <noreply@github.com>2024-07-26 15:15:12 +0800
commit8288c1b0da604db3242dd848c3a66e0c7f0edc88 (patch)
tree0f29c27291685e6974eebf8f683814f7c13af5ba /src/main/java/de/hysky
parentf53edcc01a94be3da0e83d2fc0fe4d13f58f13da (diff)
parent8f27eb76273fe8424d44c2a1e08e45454e76b77c (diff)
downloadSkyblocker-8288c1b0da604db3242dd848c3a66e0c7f0edc88.tar.gz
Skyblocker-8288c1b0da604db3242dd848c3a66e0c7f0edc88.tar.bz2
Skyblocker-8288c1b0da604db3242dd848c3a66e0c7f0edc88.zip
Merge pull request #812 from LifeIsAParadox/Quicknav-and-livid-fix
emi/rei, Quicknav, livid and nukekubi head (eman boss head) fix
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java95
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java26
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java39
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java19
10 files changed, 157 insertions, 53 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index 9d5f2b0f..ad7d4350 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -203,7 +203,6 @@ public class SkyblockerMod implements ClientModInitializer {
Scheduler.INSTANCE.scheduleCyclic(Utils::update, 20);
Scheduler.INSTANCE.scheduleCyclic(DiscordRPCManager::updateDataAndPresence, 200);
- Scheduler.INSTANCE.scheduleCyclic(LividColor::update, 10);
Scheduler.INSTANCE.scheduleCyclic(BackpackPreview::tick, 50);
Scheduler.INSTANCE.scheduleCyclic(DwarvenHud::update, 40);
Scheduler.INSTANCE.scheduleCyclic(CrystalsHud::update, 40);
diff --git a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java
index c02300ec..9d5a2a46 100644
--- a/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java
+++ b/src/main/java/de/hysky/skyblocker/compatibility/emi/SkyblockerEMIPlugin.java
@@ -24,7 +24,7 @@ public class SkyblockerEMIPlugin implements EmiPlugin {
public void register(EmiRegistry registry) {
ItemRepository.getItemsStream().map(EmiStack::of).forEach(emiStack -> {
registry.addEmiStack(emiStack);
- registry.setDefaultComparison(emiStack, Comparison.compareNbt());
+ registry.setDefaultComparison(emiStack, Comparison.compareComponents());
});
registry.addCategory(SKYBLOCK);
registry.addWorkstation(SKYBLOCK, EmiStack.of(Items.CRAFTING_TABLE));
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
index 017e9186..3365cf4e 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java
@@ -202,6 +202,14 @@ public class DungeonsCategory {
.name(Text.translatable("skyblocker.config.dungeons.livid"))
.collapsed(true)
.option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableSolidColor.@Tooltip")))
+ .binding(defaults.dungeons.livid.enableSolidColor,
+ () -> config.dungeons.livid.enableSolidColor,
+ newValue -> config.dungeons.livid.enableSolidColor = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorGlow.@Tooltip")))
.binding(defaults.dungeons.livid.enableLividColorGlow,
@@ -210,6 +218,14 @@ public class DungeonsCategory {
.controller(ConfigUtils::createBooleanController)
.build())
.option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorBoundingBox.@Tooltip")))
+ .binding(defaults.dungeons.livid.enableLividColorBoundingBox,
+ () -> config.dungeons.livid.enableLividColorBoundingBox,
+ newValue -> config.dungeons.livid.enableLividColorBoundingBox = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+ .option(Option.<Boolean>createBuilder()
.name(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText"))
.description(OptionDescription.of(Text.translatable("skyblocker.config.dungeons.livid.enableLividColorText.@Tooltip")))
.binding(defaults.dungeons.livid.enableLividColorText,
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
index 1a0cad9d..6a622ae6 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/DungeonsConfig.java
@@ -112,7 +112,13 @@ public class DungeonsConfig {
public static class Livid {
@SerialEntry
- public boolean enableLividColorGlow = true;
+ public boolean enableSolidColor = false;
+
+ @SerialEntry
+ public boolean enableLividColorGlow = false;
+
+ @SerialEntry
+ public boolean enableLividColorBoundingBox = true;
@SerialEntry
public boolean enableLividColorText = true;
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
index 42810b60..b6a035aa 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java
@@ -1,23 +1,24 @@
package de.hysky.skyblocker.skyblock.dungeon;
-import de.hysky.skyblocker.config.SkyblockerConfig;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.config.configs.DungeonsConfig;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager;
import de.hysky.skyblocker.utils.Constants;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
-import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents;
+import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.registry.Registries;
import net.minecraft.text.MutableText;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.BlockPos;
import java.util.Map;
-import java.util.Set;
public class LividColor {
private static final Map<Block, Formatting> WOOL_TO_FORMATTING = Map.of(
@@ -42,39 +43,55 @@ public class LividColor {
"Doctor Livid", Formatting.GRAY,
"Vendetta Livid", Formatting.WHITE
);
- public static final Set<String> LIVID_NAMES = Set.copyOf(LIVID_TO_FORMATTING.keySet());
public static final DungeonsConfig.Livid CONFIG = SkyblockerConfigManager.get().dungeons.livid;
- private static int tenTicks = 0;
- private static Formatting color;
+ private static Formatting color = Formatting.AQUA;
+ private static Block lastColor = Blocks.AIR;
+
+ private static boolean isInitialized = false;
+ /**
+ * The correct livid may change color in M5, so we use the entity id to track the correct original livid.
+ */
+ private static boolean correctLividIdFound = false;
+ private static int correctLividId = 0;
+ private static final long OFFSET_DURATION = 2000;
+ private static long toggleTime = 0;
public static void init() {
- ClientReceiveMessageEvents.GAME.register((message, overlay) -> {
- DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
- if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && message.getString().equals("[BOSS] Livid: I respect you for making it to here, but I'll be your undoing.")) {
- tenTicks = 8;
- }
- });
+ ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> LividColor.reset());
+ WorldRenderEvents.AFTER_ENTITIES.register(LividColor::update);
}
- public static void update() {
+ private static void update(WorldRenderContext context) {
+ DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
+ if (!(config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow || config.enableLividColorBoundingBox)) return;
+
MinecraftClient client = MinecraftClient.getInstance();
- if (tenTicks != 0) {
- DungeonsConfig.Livid config = SkyblockerConfigManager.get().dungeons.livid;
- if ((config.enableLividColorText || config.enableLividColorTitle || config.enableLividColorGlow) && Utils.isInDungeons() && client.world != null) {
- if (tenTicks == 1) {
- onLividColorFound(client, Blocks.RED_WOOL);
- return;
- }
- Block color = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock();
- if (WOOL_TO_FORMATTING.containsKey(color) && !color.equals(Blocks.RED_WOOL)) {
- onLividColorFound(client, color);
- return;
- }
- tenTicks--;
- } else {
- tenTicks = 0;
+
+ if (!(Utils.isInDungeons() && DungeonManager.isInBoss() && client.player != null && client.world != null)) return;
+
+ Block currentColor = client.world.getBlockState(new BlockPos(5, 110, 42)).getBlock();
+ if (!(WOOL_TO_FORMATTING.containsKey(currentColor) && !currentColor.equals(lastColor))) return;
+
+ if (!isInitialized && client.player.hasStatusEffect(StatusEffects.BLINDNESS)) {
+ toggleTime = System.currentTimeMillis();
+ isInitialized = true;
+ } else if (isInitialized && System.currentTimeMillis() - toggleTime >= OFFSET_DURATION) {
+ onLividColorFound(client, currentColor);
+ if (!correctLividIdFound) {
+ String lividName = LIVID_TO_FORMATTING.entrySet().stream()
+ .filter(entry -> entry.getValue() == color)
+ .map(Map.Entry::getKey)
+ .findFirst()
+ .orElse("unknown");
+ client.world.getPlayers().stream()
+ .filter(entity -> entity.getName().getString().equals(lividName))
+ .findFirst()
+ .ifPresent(entity -> correctLividId = entity.getId());
+ correctLividIdFound = true;
}
+ lastColor = currentColor;
}
+
}
private static void onLividColorFound(MinecraftClient client, Block color) {
@@ -91,7 +108,6 @@ public class LividColor {
client.inGameHud.setDefaultTitleFade();
client.inGameHud.setTitle(message);
}
- tenTicks = 0;
}
public static boolean allowGlow() {
@@ -102,8 +118,27 @@ public class LividColor {
return SkyblockerConfigManager.get().dungeons.livid.enableLividColorGlow && color == LIVID_TO_FORMATTING.get(name);
}
+ public static boolean shouldDrawBoundingBox(String name) {
+ return SkyblockerConfigManager.get().dungeons.livid.enableLividColorBoundingBox && color == LIVID_TO_FORMATTING.get(name);
+ }
+
@SuppressWarnings("DataFlowIssue")
public static int getGlowColor(String name) {
- return LIVID_TO_FORMATTING.containsKey(name) ? LIVID_TO_FORMATTING.get(name).getColorValue() : Formatting.WHITE.getColorValue();
+ if (SkyblockerConfigManager.get().dungeons.livid.enableSolidColor) return Formatting.RED.getColorValue();
+ if (LIVID_TO_FORMATTING.containsKey(name)) return LIVID_TO_FORMATTING.get(name).getColorValue();
+ return Formatting.WHITE.getColorValue();
+ }
+
+ public static int getCorrectLividId() {
+ return correctLividId;
+ }
+
+ private static void reset() {
+ lastColor = Blocks.AIR;
+ toggleTime = 0;
+ isInitialized = false;
+ correctLividIdFound = false;
+ correctLividId = 0;
+ color = Formatting.AQUA;
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
index 095c5d10..f005fc06 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobBoundingBoxes.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.skyblock.entity;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.dungeon.LividColor;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.FrustumUtils;
import de.hysky.skyblocker.utils.render.RenderHelper;
@@ -31,6 +32,7 @@ public class MobBoundingBoxes {
return switch (entity) {
case PlayerEntity _p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes;
+ case PlayerEntity p when entity.getId() == LividColor.getCorrectLividId() -> LividColor.shouldDrawBoundingBox(name);
case ArmorStandEntity _armorStand -> false;
// Regular Mobs
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
index 81e328ca..0438a8ce 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.skyblock.entity;
+import com.google.common.collect.Streams;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager;
import de.hysky.skyblocker.skyblock.dungeon.LividColor;
@@ -14,7 +15,6 @@ import net.minecraft.entity.mob.EndermanEntity;
import net.minecraft.entity.mob.ZombieEntity;
import net.minecraft.entity.passive.BatEntity;
import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.item.ItemStack;
import net.minecraft.predicate.entity.EntityPredicates;
import net.minecraft.util.Formatting;
import net.minecraft.util.math.Box;
@@ -23,6 +23,10 @@ import net.minecraft.world.World;
import java.util.List;
public class MobGlow {
+ /**
+ * The Nukekubi head texture id is eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3.
+ */
+ public static final String NUKEKUBI_HEAD_TEXTURE = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0=";
public static boolean shouldMobGlow(Entity entity) {
Box box = entity.getBoundingBox();
@@ -36,7 +40,7 @@ public class MobGlow {
return switch (entity) {
// Minibosses
case PlayerEntity p when name.equals("Lost Adventurer") || name.equals("Shadow Assassin") || name.equals("Diamond Guy") -> SkyblockerConfigManager.get().dungeons.starredMobGlow;
- case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.shouldGlow(name);
+ case PlayerEntity p when entity.getId() == LividColor.getCorrectLividId() -> LividColor.shouldGlow(name);
// Bats
case BatEntity b -> SkyblockerConfigManager.get().dungeons.starredMobGlow || SkyblockerConfigManager.get().dungeons.starredMobBoundingBoxes;
@@ -49,7 +53,6 @@ public class MobGlow {
};
}
-
return switch (entity) {
// Rift
case PlayerEntity p when Utils.isInTheRift() && !entity.isInvisible() && name.equals("Blobbercyst ") -> SkyblockerConfigManager.get().otherLocations.rift.blobbercystGlow;
@@ -111,26 +114,21 @@ public class MobGlow {
case PlayerEntity p when name.equals("Lost Adventurer") -> 0xfee15c;
case PlayerEntity p when name.equals("Shadow Assassin") -> 0x5b2cb2;
case PlayerEntity p when name.equals("Diamond Guy") -> 0x57c2f7;
- case PlayerEntity p when LividColor.LIVID_NAMES.contains(name) -> LividColor.getGlowColor(name);
+ case PlayerEntity p when entity.getId() == LividColor.getCorrectLividId() -> LividColor.getGlowColor(name);
case PlayerEntity p when name.equals("Blobbercyst ") -> Formatting.GREEN.getColorValue();
case EndermanEntity enderman when TheEnd.isSpecialZealot(enderman) -> Formatting.RED.getColorValue();
- case ArmorStandEntity armorStand when isNukekubiHead(armorStand) -> 0x990099;
+ case ArmorStandEntity armorStand when isNukekubiHead(armorStand) -> Formatting.GREEN.getColorValue();
case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena -> DojoManager.getColor();
default -> 0xf57738;
};
}
+ /**
+ * Compares the armor items of an armor stand to the Nukekubi head texture to determine if it is a Nukekubi head.
+ */
private static boolean isNukekubiHead(ArmorStandEntity entity) {
- for (ItemStack armorItem : entity.getArmorItems()) {
- // eb07594e2df273921a77c101d0bfdfa1115abed5b9b2029eb496ceba9bdbb4b3 is texture id for the nukekubi head,
- // compare against it to exclusively find armorstands that are nukekubi heads
- // get the texture of the nukekubi head item itself and compare it
- String texture = ItemUtils.getHeadTexture(armorItem);
-
- return texture.contains("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWIwNzU5NGUyZGYyNzM5MjFhNzdjMTAxZDBiZmRmYTExMTVhYmVkNWI5YjIwMjllYjQ5NmNlYmE5YmRiYjRiMyJ9fX0=");
- }
- return false;
+ return Streams.stream(entity.getArmorItems()).map(ItemUtils::getHeadTexture).anyMatch(headTexture -> headTexture.contains(NUKEKUBI_HEAD_TEXTURE));
}
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java
index 66d7f6e1..5b020fd4 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/slottext/adders/CollectionAdder.java
@@ -15,7 +15,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CollectionAdder extends SimpleSlotTextAdder {
- private static final Pattern COLLECTION = Pattern.compile("^[\\w ]+ (?<level>[IVXLCDM]+)$");
+ private static final Pattern COLLECTION = Pattern.compile("^[\\w -]+ (?<level>[IVXLCDM]+)$");
public CollectionAdder() {
super("^\\w+ Collections");
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
index f7f33d0f..75c25e58 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java
@@ -18,10 +18,16 @@ import net.minecraft.util.Identifier;
@Environment(value = EnvType.CLIENT)
public class QuickNavButton extends ClickableWidget {
private final int index;
- private boolean toggled;
+ private final boolean toggled;
+ private boolean temporaryToggled = false;
private final String command;
private final ItemStack icon;
+ private static final long TOGGLE_DURATION = 1000;
+ private long toggleTime;
+
+ private float alpha = 1.0f;
+
/**
* Checks if the current tab is a top tab based on its index.
*
@@ -32,7 +38,7 @@ public class QuickNavButton extends ClickableWidget {
}
public boolean toggled() {
- return toggled;
+ return toggled || temporaryToggled;
}
/**
@@ -49,6 +55,7 @@ public class QuickNavButton extends ClickableWidget {
this.toggled = toggled;
this.command = command;
this.icon = icon;
+ this.toggleTime = 0;
}
private void updateCoordinates() {
@@ -71,10 +78,12 @@ public class QuickNavButton extends ClickableWidget {
*/
@Override
public void onClick(double mouseX, double mouseY) {
- if (!this.toggled) {
- this.toggled = true;
+ if (!this.temporaryToggled) {
+ this.temporaryToggled = true;
+ this.toggleTime = System.currentTimeMillis();
MessageScheduler.INSTANCE.sendMessageAfterCooldown(command);
// TODO : add null check with log error
+ this.alpha = 0.5f;
}
}
@@ -93,14 +102,34 @@ public class QuickNavButton extends ClickableWidget {
this.updateCoordinates();
RenderSystem.disableDepthTest();
+ if (this.temporaryToggled && System.currentTimeMillis() - this.toggleTime >= TOGGLE_DURATION) {
+ this.temporaryToggled = false; // Reset toggled state
+ }
+ //"animation"
+ if (this.alpha < 1.0f) {
+ this.alpha += 0.05f;
+ if (this.alpha > 1.0f) {
+ this.alpha = 1.0f;
+ }
+ }
+
+ //"animation"
+ RenderSystem.enableBlend();
+ RenderSystem.defaultBlendFunc();
+ RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, this.alpha);
+
// Construct the texture identifier based on the index and toggled state
- Identifier tabTexture = Identifier.ofVanilla("container/creative_inventory/tab_" + (isTopTab() ? "top" : "bottom") + "_" + (toggled ? "selected" : "unselected") + "_" + (index % 7 + 1));
+ Identifier tabTexture = Identifier.ofVanilla("container/creative_inventory/tab_" + (isTopTab() ? "top" : "bottom") + "_" + (toggled() ? "selected" : "unselected") + "_" + (index % 7 + 1));
// Render the button texture
context.drawGuiTexture(tabTexture, this.getX(), this.getY(), this.width, this.height);
// Render the button icon
int yOffset = this.index < 7 ? 1 : -1;
context.drawItem(this.icon, this.getX() + 5, this.getY() + 8 + yOffset);
+ //prevent "fading animation" on not quicknav stuff
+ RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
+ RenderSystem.disableBlend();
+
RenderSystem.enableDepthTest();
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java
index f8716ca4..0ecfe623 100644
--- a/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java
+++ b/src/main/java/de/hysky/skyblocker/utils/NEURepoManager.java
@@ -2,6 +2,7 @@ package de.hysky.skyblocker.utils;
import com.mojang.brigadier.Command;
import de.hysky.skyblocker.SkyblockerMod;
+import de.hysky.skyblocker.events.SkyblockEvents;
import de.hysky.skyblocker.skyblock.itemlist.ItemRepository;
import de.hysky.skyblocker.utils.scheduler.Scheduler;
import io.github.moulberry.repo.NEURepository;
@@ -9,6 +10,7 @@ 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.entity.player.PlayerEntity;
+import net.minecraft.network.packet.s2c.play.SynchronizeRecipesS2CPacket;
import net.minecraft.text.Text;
import org.apache.commons.lang3.function.Consumers;
import org.eclipse.jgit.api.Git;
@@ -49,6 +51,23 @@ public class NEURepoManager {
}))
)
);
+ SkyblockEvents.JOIN.register(NEURepoManager::handleRecipeSynchronization);
+ }
+
+ /**
+ * load the recipe manually because Hypixel doesn't send any vanilla recipes to the client
+ */
+ private static void handleRecipeSynchronization() {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.world != null && client.getNetworkHandler() != null) {
+ SynchronizeRecipesS2CPacket packet = new SynchronizeRecipesS2CPacket(List.of());
+
+ try {
+ client.getNetworkHandler().onSynchronizeRecipes(packet);
+ } catch (Exception e) {
+ LOGGER.info("[Skyblocker] recipe sync error" , e);
+ }
+ }
}
public static boolean isLoading() {