From 88472ebfdce663fb3cbc5448cfa1137358ed9b16 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 +++++ .../rei/impl/client/gui/ScreenOverlayImpl.java | 2 +- .../impl/client/gui/widget/InternalWidgets.java | 2 +- .../registry/category/CategoryRegistryImpl.java | 5 ++++ .../registry/display/DisplayRegistryImpl.java | 31 ++++++++++------------ .../rei/impl/common/plugins/PluginManagerImpl.java | 26 ++++++++++++------ .../autocrafting/DefaultCategoryHandler.java | 10 ++++--- 7 files changed, 51 insertions(+), 31 deletions(-) (limited to 'runtime') diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index d6f6ac5a1..6bab2c9d8 100644 --- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -122,9 +122,15 @@ public class RoughlyEnoughItemsCore { return; } try { + for (PluginManager> instance : PluginManager.getActiveInstances()) { + instance.view().pre(); + } for (PluginManager> instance : PluginManager.getActiveInstances()) { instance.startReload(stage); } + 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/ScreenOverlayImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java index b6dc4028d..b8525b6dc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java @@ -511,7 +511,7 @@ public class ScreenOverlayImpl extends ScreenOverlay { }; Set> categories = ScreenRegistry.getInstance().handleClickArea((Class) screen.getClass(), context); if (categories != null && !categories.isEmpty()) { - Component collect = CollectionUtils.mapAndJoinToComponent(categories, identifier -> CategoryRegistry.getInstance().get(identifier).getCategory().getTitle(), new ImmutableTextComponent(", ")); + Component collect = CollectionUtils.mapAndJoinToComponent(categories, identifier -> CategoryRegistry.getInstance().tryGet(identifier).map(config -> config.getCategory().getTitle()).orElse(new ImmutableTextComponent(identifier.toString())), new ImmutableTextComponent(", ")); Tooltip.create(new TranslatableComponent("text.rei.view_recipes_for", collect)).queue(); } } 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/category/CategoryRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/category/CategoryRegistryImpl.java index 1e03b2ce7..ad1aaa431 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/category/CategoryRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/category/CategoryRegistryImpl.java @@ -74,6 +74,11 @@ public class CategoryRegistryImpl implements CategoryRegistry { return (CategoryConfiguration) Objects.requireNonNull(this.categories.get(category), category.toString()); } + @Override + public Optional> tryGet(CategoryIdentifier category) { + return Optional.ofNullable((CategoryConfiguration) this.categories.get(category)); + } + @Override public void configure(CategoryIdentifier category, Consumer> action) { if (this.categories.containsKey(category)) { 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 4d57df4e6..e638f14fd 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 @@ -37,6 +37,7 @@ import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.impl.common.registry.RecipeManagerContextImpl; import net.minecraft.world.item.crafting.Recipe; import org.apache.commons.lang3.mutable.MutableInt; +import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -44,6 +45,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<>(); @@ -66,25 +68,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); @@ -166,10 +160,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); } } } @@ -206,6 +197,12 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl( Predicate predicate, 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 48e818d32..82bc8f518 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 @@ -149,6 +149,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(ReloadStage stage) { try { @@ -170,19 +188,11 @@ public class PluginManagerImpl

> implements PluginManager< RoughlyEnoughItemsCore.LOGGER.info("Reloading Plugin Manager [%s] stage [%s], registered %d plugins: %s", pluginClass.getSimpleName(), stage.toString(), plugins.size(), CollectionUtils.mapAndJoinToString(plugins, REIPlugin::getPluginProviderName, ", ")); Collections.reverse(plugins); - if (stage == ReloadStage.START) { - 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, plugin -> reloadable.acceptPlugin(plugin, stage)); } - if (stage == ReloadStage.END) { - pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister); - } - for (Reloadable

reloadable : reloadables) { Class reloadableClass = reloadable.getClass(); try (SectionClosable endReload = section(sectionData, "end-reload-" + MoreObjects.firstNonNull(reloadableClass.getSimpleName(), reloadableClass.getName()))) { 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 2efe420a9..14f50a0d7 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,8 +55,7 @@ import java.util.List; public class DefaultCategoryHandler implements TransferHandler { @Override public Result handle(Context context) { - if (!(context.getDisplay() instanceof SimpleGridMenuDisplay display)) - return Result.createNotApplicable(); + Display display = context.getDisplay(); AbstractContainerScreen containerScreen = context.getContainerScreen(); if (containerScreen == null) { return Result.createNotApplicable(); @@ -71,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