From 73487378784ebe8e10492ceddaef66912a8a71e6 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 7 Jul 2024 11:26:06 -0400 Subject: [PATCH 1/4] Emulate entrySet on dynamic resources model registry Related: #429 --- .../dynresources/ModelBakeEventHelper.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java index a206bcfa..ca38593b 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/dynresources/ModelBakeEventHelper.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.forge.dynresources; import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterators; import com.google.common.collect.Sets; import com.google.common.graph.GraphBuilder; import com.google.common.graph.MutableGraph; @@ -19,9 +20,11 @@ import org.embeddedt.modernfix.ModernFix; import org.embeddedt.modernfix.util.ForwardingInclDefaultsMap; import org.jetbrains.annotations.Nullable; +import java.util.AbstractSet; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -158,6 +161,11 @@ public class ModelBakeEventHelper { return ourModelLocations.contains(key) || super.containsKey(key); } + @Override + public Set> entrySet() { + return new DynamicModelEntrySet(this, ourModelLocations); + } + @Override public void replaceAll(BiFunction function) { ModernFix.LOGGER.warn("Mod '{}' is calling replaceAll on the model registry. Some hacks will be used to keep this fast, but they may not be 100% compatible.", modId); @@ -185,4 +193,61 @@ public class ModelBakeEventHelper { } }; } + + private static class DynamicModelEntrySet extends AbstractSet> { + private final Map modelRegistry; + private final Set modelLocations; + + private DynamicModelEntrySet(Map modelRegistry, Set modelLocations) { + this.modelRegistry = modelRegistry; + this.modelLocations = modelLocations; + } + + @Override + public Iterator> iterator() { + return Iterators.transform(Iterators.unmodifiableIterator(this.modelLocations.iterator()), DynamicModelEntry::new); + } + + @Override + public boolean contains(Object o) { + if(o instanceof Map.Entry entry) { + return modelRegistry.containsKey(entry.getKey()); + } else { + return false; + } + } + + @Override + public int size() { + return modelRegistry.size(); + } + + @Override + public boolean removeAll(Collection c) { + throw new UnsupportedOperationException(); + } + + private class DynamicModelEntry implements Map.Entry { + private final ResourceLocation location; + + private DynamicModelEntry(ResourceLocation location) { + this.location = location; + } + + @Override + public ResourceLocation getKey() { + return this.location; + } + + @Override + public BakedModel getValue() { + return modelRegistry.get(this.location); + } + + @Override + public BakedModel setValue(BakedModel value) { + return modelRegistry.put(this.location, value); + } + } + } } From bc7aa5539c351d65e1e5b2b87b7c767367f4be52 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 7 Jul 2024 20:52:06 -0400 Subject: [PATCH 2/4] Do not spin the watchdog thread while server is booting --- .../java/org/embeddedt/modernfix/world/IntegratedWatchdog.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java b/common/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java index 24305aa5..b5e5e827 100644 --- a/common/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java +++ b/common/src/main/java/org/embeddedt/modernfix/world/IntegratedWatchdog.java @@ -38,6 +38,9 @@ public class IntegratedWatchdog extends Thread { return; } if(lastTickStart.getAsLong() < 0) { + try { + Thread.sleep(10000); + } catch(InterruptedException ignored) {} continue; } long curTime = Util.getMillis(); From edddba6991e08a89c53ffcb87b5524bb8487b14d Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 16 Jul 2024 18:58:21 -0400 Subject: [PATCH 3/4] Fix searching in latest JEI --- common/build.gradle | 2 +- .../modernfix/searchtree/JEIBackedSearchTree.java | 12 ++++++------ forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index b8323bc4..726d676d 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -6,7 +6,7 @@ architectury { common(rootProject.enabled_platforms.split(",")) } -ext.jei_minecraft_version = "1.19.4" /* temporary, till 1.20 releases */ +ext.jei_minecraft_version = "1.20.1" /* temporary, till 1.20 releases */ dependencies { // We depend on fabric loader here to use the fabric @Environment annotations and get the mixin dependencies diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java index 1c7ecd41..43a044ed 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java @@ -1,6 +1,5 @@ package org.embeddedt.modernfix.searchtree; -import com.google.common.collect.ImmutableList; import mezz.jei.api.ingredients.ITypedIngredient; import mezz.jei.gui.ingredients.IngredientFilter; import mezz.jei.gui.ingredients.IngredientFilterApi; @@ -18,6 +17,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; /** * Uses JEI to handle search tree lookups. @@ -72,19 +72,19 @@ public class JEIBackedSearchTree extends DummySearchTree { private List searchJEI(IngredientFilter filter, String pSearchText) { if(!pSearchText.equals(lastSearchText)) { listCache.clear(); - List> ingredients; + Stream> ingredients; String finalSearchTerm = filteringByTag ? ("$" + pSearchText) : pSearchText; try { - ingredients = (List>)getIngredientListUncached.invokeExact(filter, finalSearchTerm); + ingredients = (Stream>)getIngredientListUncached.invokeExact(filter, finalSearchTerm); } catch(Throwable e) { ModernFix.LOGGER.error("Error searching", e); - ingredients = ImmutableList.of(); + ingredients = Stream.empty(); } - for(ITypedIngredient ingredient : ingredients) { + ingredients.forEach(ingredient -> { if(ingredient.getIngredient() instanceof ItemStack) { listCache.add((ItemStack)ingredient.getIngredient()); } - } + }); lastSearchText = pSearchText; } return listCache; diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 1f6bdc70..6e0074a5 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -57,6 +57,6 @@ side = "BOTH" modId = "jei" mandatory = false # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange = "[13,)" +versionRange = "[15.8.0.11,)" ordering = "BEFORE" side = "CLIENT" diff --git a/gradle.properties b/gradle.properties index 8b807342..eb860025 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ enabled_platforms=fabric,forge forge_version=1.20.1-47.1.3 parchment_version=2023.07.09 refined_storage_version=4392788 -jei_version=13.1.0.2 +jei_version=15.8.0.11 rei_version=11.0.597 ctm_version=1.20.1-1.1.8+4 kubejs_version=1902.6.0-build.142 From 66ef30449a84c29186dd4c857eedb9d5e378fafb Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:45:53 -0400 Subject: [PATCH 4/4] Collect JEI ingredients to list first to avoid concurrency issues --- .../org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java index 43a044ed..92ced347 100644 --- a/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java +++ b/common/src/main/java/org/embeddedt/modernfix/searchtree/JEIBackedSearchTree.java @@ -80,7 +80,7 @@ public class JEIBackedSearchTree extends DummySearchTree { ModernFix.LOGGER.error("Error searching", e); ingredients = Stream.empty(); } - ingredients.forEach(ingredient -> { + ingredients.toList().forEach(ingredient -> { if(ingredient.getIngredient() instanceof ItemStack) { listCache.add((ItemStack)ingredient.getIngredient()); }