From 9685459ce775981dfd92f969e499c6fb937f604c Mon Sep 17 00:00:00 2001 From: Vasco Lavos Date: Tue, 9 Apr 2024 11:13:10 +0100 Subject: [PATCH] Theoretical attempt at mitigating #4 --- .../zeta/config/ZetaGeneralConfig.java | 6 +++ .../zeta/registry/CreativeTabManager.java | 52 ++++++++++++++----- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/violetmoon/zeta/config/ZetaGeneralConfig.java b/src/main/java/org/violetmoon/zeta/config/ZetaGeneralConfig.java index b690a81..3ecc06e 100644 --- a/src/main/java/org/violetmoon/zeta/config/ZetaGeneralConfig.java +++ b/src/main/java/org/violetmoon/zeta/config/ZetaGeneralConfig.java @@ -47,6 +47,12 @@ public class ZetaGeneralConfig { @Config(description = "Set to true to make the Zeta big worldgen features generate as spheres rather than unique shapes. It's faster, but won't look as cool") public static boolean useFastWorldgen = false; + @Config(description = "Set to true to enable verbose logging of creative tab logic, for debugging purposes") + public static boolean enableCreativeVerboseLogging = false; + + @Config(description = "Set to true to force all creative tab additions to be added to the end of the creative tabs rather than the middle, as a failsafe") + public static boolean forceCreativeTabAppends = false; + private ZetaGeneralConfig() { // NO-OP } diff --git a/src/main/java/org/violetmoon/zeta/registry/CreativeTabManager.java b/src/main/java/org/violetmoon/zeta/registry/CreativeTabManager.java index f09f2db..de30275 100644 --- a/src/main/java/org/violetmoon/zeta/registry/CreativeTabManager.java +++ b/src/main/java/org/violetmoon/zeta/registry/CreativeTabManager.java @@ -9,8 +9,10 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Supplier; import org.violetmoon.zeta.Zeta; +import org.violetmoon.zeta.config.ZetaGeneralConfig; import org.violetmoon.zeta.module.IDisableable; import com.google.common.collect.HashMultimap; @@ -115,7 +117,19 @@ public static void buildContents(BuildCreativeModeTabContentsEvent event) { for(ItemLike item : add.appendToEnd) acceptItem(event, item); - + + if(ZetaGeneralConfig.forceCreativeTabAppends) { + for(ItemSet itemset : add.appendInFront.keySet()) + for(ItemLike item : itemset.items) + acceptItem(event, item); + for(ItemSet itemset : add.appendBehind.keySet()) + for(ItemLike item : itemset.items) + acceptItem(event, item); + + return; + } + + MutableHashedLinkedMap entries = event.getEntries(); Map front = new LinkedHashMap<>(add.appendInFront); @@ -129,13 +143,19 @@ public static void buildContents(BuildCreativeModeTabContentsEvent event) { while(true) { boolean missed = false; + logVerbose(() -> "front empty=" + front.isEmpty() + " / behind empty=" + behind.isEmpty()); + if(!front.isEmpty()) missed = appendNextTo(tabKey, entries, front, false, failsafing); if(!behind.isEmpty()) missed |= appendNextTo(tabKey, entries, behind, true, failsafing); - if(missed) + if(missed) { + int fMisses = misses; + logVerbose(() -> "Missed " + fMisses + "times out of " + failsafe); + misses++; + } // arbitrary failsafe, should never happen if(misses > failsafe) { @@ -145,7 +165,7 @@ public static void buildContents(BuildCreativeModeTabContentsEvent event) { if(misses > printThreshold) failsafing = true; - if(front.isEmpty() && behind.isEmpty()) + if(front.isEmpty() && behind.isEmpty()) return; } } @@ -168,8 +188,9 @@ private static void acceptItem(BuildCreativeModeTabContentsEvent event, ItemLike else event.accept(item); } - + private static void addToEntries(ItemStack target, MutableHashedLinkedMap entries, ItemLike item, boolean behind) { + logVerbose(() -> "adding target=" + item + " next to " + item + " with behind=" + behind); if(!isItemEnabled(item)) return; @@ -192,6 +213,7 @@ private static void addToEntries(ItemStack target, MutableHashedLinkedMap tabKey, MutableHashedLinkedMap entries, Map map, boolean behind, boolean log) { + logVerbose(() -> "appendNextTo " + tabKey + " / behind=" + behind); Collection coll = map.keySet(); if(coll.isEmpty()) throw new RuntimeException("Tab collection is empty, this should never happen."); @@ -205,18 +227,23 @@ private static boolean appendNextTo(ResourceKey tabKey, Mutable map.remove(firstSet); - if(!isItemEnabled(firstSetItem) || target == null) + if(!isItemEnabled(firstSetItem) || target == null) { + logVerbose(() -> "hit early false return"); return false; + } + + if(!itemLikeCache.containsKey(target)) + itemLikeCache.put(target, target.asItem()); + Item targetItem = itemLikeCache.get(target); for(Entry entry : entries) { ItemStack stack = entry.getKey(); Item item = stack.getItem(); - if(!itemLikeCache.containsKey(target)) - itemLikeCache.put(target, target.asItem()); - Item targetItem = itemLikeCache.get(target); + logVerbose(() -> "Comparing item " + item + " to our target " + targetItem); if(item == targetItem) { + logVerbose(() -> "Matched"); for(int i = 0; i < firstSet.items.size(); i++) { int j = i; if(!behind) @@ -233,6 +260,11 @@ private static boolean appendNextTo(ResourceKey tabKey, Mutable map.put(firstSet, target); return true; } + + private static void logVerbose(Supplier s) { + if(ZetaGeneralConfig.enableCreativeVerboseLogging) + Zeta.GLOBAL_LOG.warn(s.get()); + } private static class CreativeTabAdditions { @@ -250,10 +282,6 @@ public ItemSet(ItemLike item) { items.add(item); } - public boolean isFresh() { - return items.size() == 1; - } - } public interface AppendsUniquely extends ItemLike {