From 1ef38b61dcd2ca97c16e95f1cd83081f9229cbd7 Mon Sep 17 00:00:00 2001 From: Matthieu Laqua Date: Mon, 22 May 2023 17:47:52 +0200 Subject: [PATCH] Update item comparing mechanism to fix #4, bump mod version to 1.1.5 --- gradle.properties | 2 +- .../one/laqua/waig/client/CompassHud.java | 21 ++++++++++++------- .../laqua/waig/client/config/WaigConfig.java | 12 +++++------ .../waig/mixin/CombinedInventoryAccessor.java | 17 +++++++++++++++ src/main/resources/waig.mixins.json | 3 ++- 5 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 src/main/java/one/laqua/waig/mixin/CombinedInventoryAccessor.java diff --git a/gradle.properties b/gradle.properties index 05e001c..3fd4380 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version = 0.14.17 fabric_version = 0.75.1+1.19.3 # Mod Properties -mod_version = 1.1.4 +mod_version = 1.1.5 maven_group = one.laqua archives_base_name = waig diff --git a/src/main/java/one/laqua/waig/client/CompassHud.java b/src/main/java/one/laqua/waig/client/CompassHud.java index 4afc44d..8a73353 100644 --- a/src/main/java/one/laqua/waig/client/CompassHud.java +++ b/src/main/java/one/laqua/waig/client/CompassHud.java @@ -6,10 +6,11 @@ import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import one.laqua.waig.client.config.WaigConfig; import one.laqua.waig.mixin.BossBarHudAccessor; +import one.laqua.waig.mixin.CombinedInventoryAccessor; +import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; @@ -20,9 +21,7 @@ public class CompassHud { private static final String compass_text_triple = compass_text_simple + compass_text_simple + compass_text_simple; private static final int oneSideLength = 20; - private static final Set compass_stacks = WaigConfig.getCompassItems().stream() - .map(Item::getDefaultStack) - .collect(Collectors.toSet()); + private static final Set compass_stacks = WaigConfig.getCompassItems(); private static boolean visible = true; @@ -44,16 +43,22 @@ public static void onHudRender(MatrixStack matrices, float v) { // nothing to check in this case, just continue } case INVENTORY -> { - boolean containsCompass = compass_stacks.stream() - .anyMatch(itemStack -> p.getInventory().contains(itemStack)); + Set compassIds = new HashSet<>(compass_stacks); + Set inventory = ((CombinedInventoryAccessor) p.getInventory()).getCombinedInventory() + .stream().flatMap(defaultedList -> defaultedList.stream() + .map(e -> Item.getRawId(e.getItem()))) + .collect(Collectors.toSet()); + + compassIds.retainAll(inventory); + boolean containsCompass = !compassIds.isEmpty(); if (!containsCompass) { return; } } case HAND -> { - boolean holdsCompass = WaigConfig.getCompassItems().contains(p.getOffHandStack().getItem()) - || WaigConfig.getCompassItems().contains(p.getMainHandStack().getItem()); + boolean holdsCompass = WaigConfig.getCompassItems().contains(Item.getRawId(p.getOffHandStack().getItem())) + || WaigConfig.getCompassItems().contains(Item.getRawId(p.getMainHandStack().getItem())); if (!holdsCompass) { return; diff --git a/src/main/java/one/laqua/waig/client/config/WaigConfig.java b/src/main/java/one/laqua/waig/client/config/WaigConfig.java index 70e6230..8560702 100644 --- a/src/main/java/one/laqua/waig/client/config/WaigConfig.java +++ b/src/main/java/one/laqua/waig/client/config/WaigConfig.java @@ -26,13 +26,13 @@ public class WaigConfig { private static final String DEFAULT_COMPASS_ID = "minecraft:compass"; private static HudShowMode hudShowMode = HudShowMode.ALWAYS; - private static Set compassItems = Set.of(Items.COMPASS); + private static Set compassItems = Set.of(Item.getRawId(Items.COMPASS)); public static HudShowMode getHudShowMode() { return hudShowMode; } - public static Set getCompassItems() { + public static Set getCompassItems() { return compassItems; } @@ -74,7 +74,7 @@ public static boolean readConfigFile() { if (key.equals(KEY_COMPASS_ITEMS)) { String[] potentialItems = pieces[1].strip().toLowerCase().split(","); - Set configItems = Arrays.stream(potentialItems) + Set configItems = Arrays.stream(potentialItems) .filter(potentialItemId -> potentialItemId.contains(":")) .map(potentialItemId -> { String[] idPieces = potentialItemId.split(":"); @@ -87,15 +87,15 @@ public static boolean readConfigFile() { WaigClient.log(Level.ERROR, "The config value '" + potentialItemId + "' " + "contains illegal characters and cannot be parsed into an item. Please " + "check the config file for errors. Ignoring this value."); - return Items.AIR; + return Item.getRawId(Items.AIR); } Identifier itemIdentifier = new Identifier(idPieces[0].strip(), idPieces[1].strip()); // this will need updating on Minecraft versions >=1.19.3, see https://fabricmc.net/wiki/tutorial:registry - return Registries.ITEM.get(itemIdentifier); + return Item.getRawId(Registries.ITEM.get(itemIdentifier)); }) - .filter(item -> !item.equals(Items.AIR)) + .filter(item -> !item.equals(Item.getRawId(Items.AIR))) .collect(Collectors.toSet()); if (!configItems.isEmpty()) { WaigConfig.compassItems = configItems; diff --git a/src/main/java/one/laqua/waig/mixin/CombinedInventoryAccessor.java b/src/main/java/one/laqua/waig/mixin/CombinedInventoryAccessor.java new file mode 100644 index 0000000..2ce5ad9 --- /dev/null +++ b/src/main/java/one/laqua/waig/mixin/CombinedInventoryAccessor.java @@ -0,0 +1,17 @@ +package one.laqua.waig.mixin; + +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DefaultedList; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(PlayerInventory.class) +public interface CombinedInventoryAccessor { + + @Accessor + List> getCombinedInventory(); + +} diff --git a/src/main/resources/waig.mixins.json b/src/main/resources/waig.mixins.json index 546f0af..6f3842f 100644 --- a/src/main/resources/waig.mixins.json +++ b/src/main/resources/waig.mixins.json @@ -4,7 +4,8 @@ "package": "one.laqua.waig.mixin", "compatibilityLevel": "JAVA_16", "mixins": [ - "BossBarHudAccessor" + "BossBarHudAccessor", + "CombinedInventoryAccessor" ], "client": [], "injectors": {