From 118ea6f24289185d33dcc9359493ff697ef87051 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 28 Aug 2021 04:27:25 +0800 Subject: Fix #500 --- .../me/shedaniel/rei/RoughlyEnoughItemsCore.java | 6 ++++ .../impl/client/gui/widget/InternalWidgets.java | 2 +- .../registry/display/DisplayRegistryImpl.java | 41 ++++++++++------------ .../rei/impl/common/plugins/PluginManagerImpl.java | 20 +++++++++-- .../autocrafting/DefaultCategoryHandler.java | 11 +++--- 5 files changed, 50 insertions(+), 30 deletions(-) (limited to 'runtime/src/main/java') diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index 448af4174..840c3b34a 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -114,9 +114,15 @@ public class RoughlyEnoughItemsCore { public static void _reloadPlugins() { try { + for (PluginManager> instance : PluginManager.getActiveInstances()) { + instance.view().pre(); + } for (PluginManager> instance : PluginManager.getActiveInstances()) { instance.startReload(); } + for (PluginManager> instance : PluginManager.getActiveInstances()) { + instance.view().post(); + } } catch (Throwable throwable) { throwable.printStackTrace(); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java index 6cc34b3b1..8df053102 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java @@ -177,7 +177,7 @@ public final class InternalWidgets { } } if (Minecraft.getInstance().options.advancedItemTooltips && displaySupplier.get().getDisplayLocation().isPresent()) { - str.add(new TranslatableComponent("text.rei.recipe_id", new TextComponent(displaySupplier.get().getDisplayLocation().get().toString()).withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.GRAY)); + str.add(new TranslatableComponent("text.rei.recipe_id", "", new TextComponent(displaySupplier.get().getDisplayLocation().get().toString()).withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.GRAY)); } return str.toArray(new Component[0]); }); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java index 0af7766f4..f267274dc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java @@ -38,6 +38,7 @@ import me.shedaniel.rei.impl.common.registry.RecipeManagerContextImpl; import net.minecraft.world.item.crafting.Recipe; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.mutable.MutableInt; +import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -45,6 +46,7 @@ import java.util.function.Function; import java.util.function.Predicate; public class DisplayRegistryImpl extends RecipeManagerContextImpl implements DisplayRegistry { + private final WeakHashMap displaysBase = new WeakHashMap<>(); private final Map, List> displays = new ConcurrentHashMap<>(); private final Map, List>> displayGenerators = new ConcurrentHashMap<>(); private final List> globalDisplayGenerators = new ArrayList<>(); @@ -67,25 +69,17 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl new ArrayList<>()) .add(display); displayCount.increment(); - } - - @Override - public void add(Object object) { - for (Display display : tryFillDisplay(object)) { - add(display); + if (origin != null) { + synchronized (displaysBase) { + displaysBase.put(display, origin); + } } } - public void registerDisplay(int index, Display display) { - displays.computeIfAbsent(display.getCategoryIdentifier(), location -> new ArrayList<>()) - .add(index, display); - displayCount.increment(); - } - @Override public Map, List> getAll() { return Collections.unmodifiableMap(displays); @@ -167,10 +161,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl> allSortedRecipes = getAllSortedRecipes(); for (int i = allSortedRecipes.size() - 1; i >= 0; i--) { Recipe recipe = allSortedRecipes.get(i); - Collection displays = tryFillDisplay(recipe); - for (Display display : displays) { - registerDisplay(0, display); - } + add(recipe); } } } @@ -207,26 +198,32 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl { private final Predicate predicate; private final Function mappingFunction; - + public DisplayFiller(Predicate predicate, Function mappingFunction) { this.predicate = predicate; this.mappingFunction = mappingFunction; } - + @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof DisplayFiller)) return false; - + DisplayFiller that = (DisplayFiller) o; - + if (!Objects.equals(predicate, that.predicate)) return false; return Objects.equals(mappingFunction, that.mappingFunction); } - + @Override public int hashCode() { int result = predicate != null ? predicate.hashCode() : 0; diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java index 0c43edeee..5225c1afb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java @@ -148,6 +148,24 @@ public class PluginManagerImpl

> implements PluginManager< } } + @Override + public void pre() { + List

plugins = new ArrayList<>(getPlugins().toList()); + plugins.sort(Comparator.comparingDouble(P::getPriority).reversed()); + Collections.reverse(plugins); + MutablePair sectionData = new MutablePair<>(Stopwatch.createUnstarted(), ""); + pluginSection(sectionData, "pre-register", plugins, REIPlugin::preRegister); + } + + @Override + public void post() { + List

plugins = new ArrayList<>(getPlugins().toList()); + plugins.sort(Comparator.comparingDouble(P::getPriority).reversed()); + Collections.reverse(plugins); + MutablePair sectionData = new MutablePair<>(Stopwatch.createUnstarted(), ""); + pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister); + } + @Override public void startReload() { try { @@ -169,12 +187,10 @@ public class PluginManagerImpl

> implements PluginManager< RoughlyEnoughItemsCore.LOGGER.info("Reloading Plugin Manager [%s], registered %d plugins: %s", pluginClass.getSimpleName(), plugins.size(), CollectionUtils.mapAndJoinToString(plugins, REIPlugin::getPluginProviderName, ", ")); Collections.reverse(plugins); - pluginSection(sectionData, "pre-register", plugins, REIPlugin::preRegister); for (Reloadable

reloadable : getReloadables()) { Class reloadableClass = reloadable.getClass(); pluginSection(sectionData, "reloadable-plugin-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()), plugins, reloadable::acceptPlugin); } - pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister); for (Reloadable

reloadable : reloadables) { Class reloadableClass = reloadable.getClass(); diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java index 98fa3ea3f..0e6e3c4d1 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java @@ -32,7 +32,6 @@ import me.shedaniel.rei.api.client.ClientHelper; import me.shedaniel.rei.api.client.registry.transfer.TransferHandler; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.display.Display; -import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; import me.shedaniel.rei.api.common.transfer.RecipeFinder; import me.shedaniel.rei.api.common.transfer.info.MenuInfo; import me.shedaniel.rei.api.common.transfer.info.MenuInfoContext; @@ -56,9 +55,7 @@ import java.util.List; public class DefaultCategoryHandler implements TransferHandler { @Override public Result handle(Context context) { - if (!(context.getDisplay() instanceof SimpleGridMenuDisplay)) - return Result.createNotApplicable(); - SimpleGridMenuDisplay display = (SimpleGridMenuDisplay) context.getDisplay(); + Display display = context.getDisplay(); AbstractContainerScreen containerScreen = context.getContainerScreen(); if (containerScreen == null) { return Result.createNotApplicable(); @@ -72,7 +69,11 @@ public class DefaultCategoryHandler implements TransferHandler { try { menuInfo.validate(menuInfoContext); } catch (MenuTransferException e) { - return Result.createFailed(e.getError()); + if (e.isApplicable()) { + return Result.createFailed(e.getError()); + } else { + return Result.createNotApplicable(); + } } List> input = menuInfo.getInputs(menuInfoContext); IntList intList = hasItems(menu, menuInfo, display, input); -- cgit