From a7403ce5c153a369ad8076316ae2bc20482b67a7 Mon Sep 17 00:00:00 2001 From: Eldrinn-Elantey <46845681+Eldrinn-Elantey@users.noreply.github.com> Date: Sun, 10 May 2026 16:43:03 +0400 Subject: [PATCH 1/2] Remove TConstruct slot support from grave auto-equip --- dependencies.gradle | 2 - .../openblocks/common/GraveAutoEquip.java | 62 ------------------- .../common/GraveInventorySnapshot.java | 28 --------- .../openblocks/common/GraveSlotOrigin.java | 1 - 4 files changed, 93 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 24ca7ba59..80b87f1b4 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -11,11 +11,9 @@ dependencies { compileOnly("com.github.GTNewHorizons:Baubles-Expanded:2.2.13-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:AdventureBackpack2:1.4.19-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:Minecraft-Backpack-Mod:2.6.11-GTNH:dev") { transitive = false } - compileOnly("com.github.GTNewHorizons:TinkersConstruct:1.14.58-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:Baubles-Expanded:2.2.13-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:AdventureBackpack2:1.4.19-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:Minecraft-Backpack-Mod:2.6.11-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:waila:1.19.23:dev") { transitive = true } - devOnlyNonPublishable("com.github.GTNewHorizons:TinkersConstruct:1.14.58-GTNH:dev") { transitive = true } devOnlyNonPublishable("com.github.GTNewHorizons:HoloInventory:2.5.12-GTNH:dev") { transitive = true } } diff --git a/src/main/java/openblocks/common/GraveAutoEquip.java b/src/main/java/openblocks/common/GraveAutoEquip.java index 230f96702..fef9c5fce 100644 --- a/src/main/java/openblocks/common/GraveAutoEquip.java +++ b/src/main/java/openblocks/common/GraveAutoEquip.java @@ -20,8 +20,6 @@ public static boolean tryRestoreToOrigin(EntityPlayer player, ItemStack stack, G return restoreToMain(player, stack, origin.slot); case GraveSlotOrigin.INV_ARMOR: return restoreToArmor(player, stack, origin.slot); - case GraveSlotOrigin.INV_TCONSTRUCT: - return restoreToTConstruct(player, stack, origin.slot); case GraveSlotOrigin.INV_BAUBLES: return restoreToBaubles(player, stack, origin.slot); case GraveSlotOrigin.INV_ADVENTURE_BACKPACK: @@ -56,28 +54,6 @@ private static boolean restoreToArmor(EntityPlayer player, ItemStack stack, int return true; } - private static boolean restoreToTConstruct(EntityPlayer player, ItemStack stack, int slot) { - try { - Class.forName("tconstruct.armor.player.TPlayerStats"); - } catch (ClassNotFoundException ignored) { - return false; - } - return TConstructRestoreHelper.restore(player, stack, slot); - } - - private static final class TConstructRestoreHelper { - - static boolean restore(EntityPlayer player, ItemStack stack, int slot) { - tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); - if (stats == null) return false; - tconstruct.armor.player.ArmorExtended armor = stats.armor; - if (slot < 0 || slot >= armor.getSizeInventory()) return false; - if (armor.getStackInSlot(slot) != null) return false; - armor.setInventorySlotContents(slot, stack.copy()); - return true; - } - } - private static boolean restoreToBaubles(EntityPlayer player, ItemStack stack, int slot) { try { Class.forName("baubles.api.IBauble"); @@ -150,12 +126,6 @@ static boolean restore(EntityPlayer player, ItemStack stack) { public static ItemStack tryEquipOrDrop(EntityPlayer player, ItemStack stack) { if (stack == null) return null; - try { - if (tryEquipTConstructAccessory(player, stack)) return null; - } catch (Exception e) { - Log.warn("GraveAutoEquip: error equipping tconstruct accessory %s: %s", stack.getDisplayName(), e); - } - try { if (tryEquipVanillaArmor(player, stack)) return null; } catch (Exception e) { @@ -183,38 +153,6 @@ public static ItemStack tryEquipOrDrop(EntityPlayer player, ItemStack stack) { return stack; } - // ------------------------------------------------------------------------- - // Tinkers' Construct accessories (soft dependency) — must run BEFORE vanilla armor - // ------------------------------------------------------------------------- - - private static boolean tryEquipTConstructAccessory(EntityPlayer player, ItemStack stack) { - try { - Class.forName("tconstruct.library.accessory.IAccessory"); - } catch (ClassNotFoundException ignored) { - return false; - } - return TConstructAccessoryHelper.equip(player, stack); - } - - private static final class TConstructAccessoryHelper { - - static boolean equip(EntityPlayer player, ItemStack stack) { - if (!(stack.getItem() instanceof tconstruct.library.accessory.IAccessory)) return false; - tconstruct.library.accessory.IAccessory accessory = (tconstruct.library.accessory.IAccessory) stack - .getItem(); - tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); - if (stats == null) return false; - tconstruct.armor.player.ArmorExtended armor = stats.armor; - for (int i = 0; i < armor.getSizeInventory(); i++) { - if (armor.getStackInSlot(i) == null && accessory.canEquipAccessory(stack, i)) { - armor.setInventorySlotContents(i, stack.copy()); - return true; - } - } - return false; - } - } - // ------------------------------------------------------------------------- // Vanilla armor // ------------------------------------------------------------------------- diff --git a/src/main/java/openblocks/common/GraveInventorySnapshot.java b/src/main/java/openblocks/common/GraveInventorySnapshot.java index 3c30de0ab..996152027 100644 --- a/src/main/java/openblocks/common/GraveInventorySnapshot.java +++ b/src/main/java/openblocks/common/GraveInventorySnapshot.java @@ -30,7 +30,6 @@ public OriginatedStack(GraveSlotOrigin origin, ItemStack stack) { public GraveInventorySnapshot(EntityPlayer player) { captureMain(player); captureArmor(player); - captureTConstruct(player); captureBaubles(player); captureAdventureBackpack(player); captureMcBackpack(player); @@ -52,33 +51,6 @@ private void captureArmor(EntityPlayer player) { } } - private void captureTConstruct(EntityPlayer player) { - try { - Class.forName("tconstruct.armor.player.TPlayerStats"); - } catch (ClassNotFoundException ignored) { - return; - } - try { - TConstructCaptureHelper.capture(player, entries); - } catch (Exception e) { - Log.warn("GraveInventorySnapshot: failed to capture TConstruct slots: %s", e); - } - } - - private static final class TConstructCaptureHelper { - - static void capture(EntityPlayer player, List out) { - tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); - if (stats == null) return; - tconstruct.armor.player.ArmorExtended armor = stats.armor; - for (int i = 0; i < armor.getSizeInventory(); i++) { - ItemStack stack = armor.getStackInSlot(i); - if (stack != null) - out.add(new OriginatedStack(new GraveSlotOrigin(GraveSlotOrigin.INV_TCONSTRUCT, i), stack)); - } - } - } - private void captureBaubles(EntityPlayer player) { try { Class.forName("baubles.api.IBauble"); diff --git a/src/main/java/openblocks/common/GraveSlotOrigin.java b/src/main/java/openblocks/common/GraveSlotOrigin.java index 9a36ea704..2ad93126c 100644 --- a/src/main/java/openblocks/common/GraveSlotOrigin.java +++ b/src/main/java/openblocks/common/GraveSlotOrigin.java @@ -6,7 +6,6 @@ public class GraveSlotOrigin { public static final String INV_MAIN = "main"; public static final String INV_ARMOR = "armor"; - public static final String INV_TCONSTRUCT = "tconstruct"; public static final String INV_BAUBLES = "baubles"; public static final String INV_ADVENTURE_BACKPACK = "adventurebackpack"; public static final String INV_MC_BACKPACK = "mcbackpack"; From cfa125ed34b834715314d87d1f36d0886b863e02 Mon Sep 17 00:00:00 2001 From: Eldrinn-Elantey <46845681+Eldrinn-Elantey@users.noreply.github.com> Date: Sun, 10 May 2026 19:04:07 +0400 Subject: [PATCH 2/2] Keep TConstruct slot support but skip it when the inventory tab is disabled --- dependencies.gradle | 2 + .../openblocks/common/GraveAutoEquip.java | 80 +++++++++++++++++++ .../common/GraveInventorySnapshot.java | 33 ++++++++ .../openblocks/common/GraveSlotOrigin.java | 1 + 4 files changed, 116 insertions(+) diff --git a/dependencies.gradle b/dependencies.gradle index 80b87f1b4..4b831fe1c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -11,9 +11,11 @@ dependencies { compileOnly("com.github.GTNewHorizons:Baubles-Expanded:2.2.13-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:AdventureBackpack2:1.4.19-GTNH:dev") { transitive = false } compileOnly("com.github.GTNewHorizons:Minecraft-Backpack-Mod:2.6.11-GTNH:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:TinkersConstruct:1.14.58-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:Baubles-Expanded:2.2.13-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:AdventureBackpack2:1.4.19-GTNH:dev") { transitive = false } devOnlyNonPublishable("com.github.GTNewHorizons:Minecraft-Backpack-Mod:2.6.11-GTNH:dev") { transitive = false } + devOnlyNonPublishable("com.github.GTNewHorizons:TinkersConstruct:1.14.58-GTNH:dev") { transitive = true } devOnlyNonPublishable("com.github.GTNewHorizons:waila:1.19.23:dev") { transitive = true } devOnlyNonPublishable("com.github.GTNewHorizons:HoloInventory:2.5.12-GTNH:dev") { transitive = true } } diff --git a/src/main/java/openblocks/common/GraveAutoEquip.java b/src/main/java/openblocks/common/GraveAutoEquip.java index fef9c5fce..1d96aae3c 100644 --- a/src/main/java/openblocks/common/GraveAutoEquip.java +++ b/src/main/java/openblocks/common/GraveAutoEquip.java @@ -20,6 +20,8 @@ public static boolean tryRestoreToOrigin(EntityPlayer player, ItemStack stack, G return restoreToMain(player, stack, origin.slot); case GraveSlotOrigin.INV_ARMOR: return restoreToArmor(player, stack, origin.slot); + case GraveSlotOrigin.INV_TCONSTRUCT: + return restoreToTConstruct(player, stack, origin.slot); case GraveSlotOrigin.INV_BAUBLES: return restoreToBaubles(player, stack, origin.slot); case GraveSlotOrigin.INV_ADVENTURE_BACKPACK: @@ -126,6 +128,12 @@ static boolean restore(EntityPlayer player, ItemStack stack) { public static ItemStack tryEquipOrDrop(EntityPlayer player, ItemStack stack) { if (stack == null) return null; + try { + if (tryEquipTConstructAccessory(player, stack)) return null; + } catch (Exception e) { + Log.warn("GraveAutoEquip: error equipping tconstruct accessory %s: %s", stack.getDisplayName(), e); + } + try { if (tryEquipVanillaArmor(player, stack)) return null; } catch (Exception e) { @@ -153,6 +161,78 @@ public static ItemStack tryEquipOrDrop(EntityPlayer player, ItemStack stack) { return stack; } + // ------------------------------------------------------------------------- + // Tinkers' Construct accessories (soft dependency) — skipped when tab is disabled + // ------------------------------------------------------------------------- + + private static boolean isTConstructTabEnabled() { + try { + Class.forName("tconstruct.util.config.PHConstruct"); + } catch (ClassNotFoundException ignored) { + return false; + } + return TConstructConfigHelper.isTabEnabled(); + } + + private static final class TConstructConfigHelper { + + static boolean isTabEnabled() { + return tconstruct.util.config.PHConstruct.enableTinkerInventoryTab; + } + } + + private static boolean tryEquipTConstructAccessory(EntityPlayer player, ItemStack stack) { + if (!isTConstructTabEnabled()) return false; + try { + Class.forName("tconstruct.library.accessory.IAccessory"); + } catch (ClassNotFoundException ignored) { + return false; + } + return TConstructAccessoryHelper.equip(player, stack); + } + + private static final class TConstructAccessoryHelper { + + static boolean equip(EntityPlayer player, ItemStack stack) { + if (!(stack.getItem() instanceof tconstruct.library.accessory.IAccessory)) return false; + tconstruct.library.accessory.IAccessory accessory = (tconstruct.library.accessory.IAccessory) stack + .getItem(); + tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); + if (stats == null) return false; + tconstruct.armor.player.ArmorExtended armor = stats.armor; + for (int i = 0; i < armor.getSizeInventory(); i++) { + if (armor.getStackInSlot(i) == null && accessory.canEquipAccessory(stack, i)) { + armor.setInventorySlotContents(i, stack.copy()); + return true; + } + } + return false; + } + } + + private static boolean restoreToTConstruct(EntityPlayer player, ItemStack stack, int slot) { + if (!isTConstructTabEnabled()) return false; + try { + Class.forName("tconstruct.armor.player.TPlayerStats"); + } catch (ClassNotFoundException ignored) { + return false; + } + return TConstructRestoreHelper.restore(player, stack, slot); + } + + private static final class TConstructRestoreHelper { + + static boolean restore(EntityPlayer player, ItemStack stack, int slot) { + tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); + if (stats == null) return false; + tconstruct.armor.player.ArmorExtended armor = stats.armor; + if (slot < 0 || slot >= armor.getSizeInventory()) return false; + if (armor.getStackInSlot(slot) != null) return false; + armor.setInventorySlotContents(slot, stack.copy()); + return true; + } + } + // ------------------------------------------------------------------------- // Vanilla armor // ------------------------------------------------------------------------- diff --git a/src/main/java/openblocks/common/GraveInventorySnapshot.java b/src/main/java/openblocks/common/GraveInventorySnapshot.java index 996152027..9afa231d9 100644 --- a/src/main/java/openblocks/common/GraveInventorySnapshot.java +++ b/src/main/java/openblocks/common/GraveInventorySnapshot.java @@ -30,6 +30,7 @@ public OriginatedStack(GraveSlotOrigin origin, ItemStack stack) { public GraveInventorySnapshot(EntityPlayer player) { captureMain(player); captureArmor(player); + captureTConstruct(player); captureBaubles(player); captureAdventureBackpack(player); captureMcBackpack(player); @@ -51,6 +52,38 @@ private void captureArmor(EntityPlayer player) { } } + private void captureTConstruct(EntityPlayer player) { + try { + Class.forName("tconstruct.util.config.PHConstruct"); + } catch (ClassNotFoundException ignored) { + return; + } + try { + if (!TConstructCaptureHelper.isTabEnabled()) return; + TConstructCaptureHelper.capture(player, entries); + } catch (Exception e) { + Log.warn("GraveInventorySnapshot: failed to capture TConstruct slots: %s", e); + } + } + + private static final class TConstructCaptureHelper { + + static boolean isTabEnabled() { + return tconstruct.util.config.PHConstruct.enableTinkerInventoryTab; + } + + static void capture(EntityPlayer player, List out) { + tconstruct.armor.player.TPlayerStats stats = tconstruct.armor.player.TPlayerStats.get(player); + if (stats == null) return; + tconstruct.armor.player.ArmorExtended armor = stats.armor; + for (int i = 0; i < armor.getSizeInventory(); i++) { + ItemStack stack = armor.getStackInSlot(i); + if (stack != null) + out.add(new OriginatedStack(new GraveSlotOrigin(GraveSlotOrigin.INV_TCONSTRUCT, i), stack)); + } + } + } + private void captureBaubles(EntityPlayer player) { try { Class.forName("baubles.api.IBauble"); diff --git a/src/main/java/openblocks/common/GraveSlotOrigin.java b/src/main/java/openblocks/common/GraveSlotOrigin.java index 2ad93126c..9a36ea704 100644 --- a/src/main/java/openblocks/common/GraveSlotOrigin.java +++ b/src/main/java/openblocks/common/GraveSlotOrigin.java @@ -6,6 +6,7 @@ public class GraveSlotOrigin { public static final String INV_MAIN = "main"; public static final String INV_ARMOR = "armor"; + public static final String INV_TCONSTRUCT = "tconstruct"; public static final String INV_BAUBLES = "baubles"; public static final String INV_ADVENTURE_BACKPACK = "adventurebackpack"; public static final String INV_MC_BACKPACK = "mcbackpack";