diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-08-28 04:27:25 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-08-28 16:12:05 +0800 |
| commit | 88472ebfdce663fb3cbc5448cfa1137358ed9b16 (patch) | |
| tree | 1f0220f9df63c3cc4006320d4f1e73bedab8326b /runtime | |
| parent | 8a0601c75fa2462494ed949797f04243fe9cb10e (diff) | |
| download | RoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.tar.gz RoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.tar.bz2 RoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.zip | |
Fix #500
Diffstat (limited to 'runtime')
7 files changed, 51 insertions, 31 deletions
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 @@ -123,8 +123,14 @@ public class RoughlyEnoughItemsCore { } try { for (PluginManager<? extends REIPlugin<?>> instance : PluginManager.getActiveInstances()) { + instance.view().pre(); + } + for (PluginManager<? extends REIPlugin<?>> instance : PluginManager.getActiveInstances()) { instance.startReload(stage); } + for (PluginManager<? extends REIPlugin<?>> 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<CategoryIdentifier<?>> categories = ScreenRegistry.getInstance().handleClickArea((Class<Screen>) 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 @@ -75,6 +75,11 @@ public class CategoryRegistryImpl implements CategoryRegistry { } @Override + public <T extends Display> Optional<CategoryConfiguration<T>> tryGet(CategoryIdentifier<T> category) { + return Optional.ofNullable((CategoryConfiguration<T>) this.categories.get(category)); + } + + @Override public <T extends Display> void configure(CategoryIdentifier<T> category, Consumer<CategoryConfiguration<T>> action) { if (this.categories.containsKey(category)) { action.accept(get(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<REIClientPlugin> implements DisplayRegistry { + private final WeakHashMap<Display, Object> displaysBase = new WeakHashMap<>(); private final Map<CategoryIdentifier<?>, List<Display>> displays = new ConcurrentHashMap<>(); private final Map<CategoryIdentifier<?>, List<DynamicDisplayGenerator<?>>> displayGenerators = new ConcurrentHashMap<>(); private final List<DynamicDisplayGenerator<?>> globalDisplayGenerators = new ArrayList<>(); @@ -66,25 +68,17 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi } @Override - public void add(Display display) { + public void add(Display display, @Nullable Object origin) { displays.computeIfAbsent(display.getCategoryIdentifier(), location -> 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<CategoryIdentifier<?>, List<Display>> getAll() { return Collections.unmodifiableMap(displays); @@ -166,10 +160,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi List<Recipe<?>> allSortedRecipes = getAllSortedRecipes(); for (int i = allSortedRecipes.size() - 1; i >= 0; i--) { Recipe<?> recipe = allSortedRecipes.get(i); - Collection<Display> displays = tryFillDisplay(recipe); - for (Display display : displays) { - registerDisplay(0, display); - } + add(recipe); } } } @@ -206,6 +197,12 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl<REIClientPlugi return null; } + @Override + @Nullable + public Object getDisplayOrigin(Display display) { + return displaysBase.get(display); + } + private static record DisplayFiller<D extends Display>( Predicate<Object> 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 @@ -150,6 +150,24 @@ public class PluginManagerImpl<P extends REIPlugin<?>> implements PluginManager< } @Override + public void pre() { + List<P> plugins = new ArrayList<>(getPlugins().toList()); + plugins.sort(Comparator.comparingDouble(P::getPriority).reversed()); + Collections.reverse(plugins); + MutablePair<Stopwatch, String> sectionData = new MutablePair<>(Stopwatch.createUnstarted(), ""); + pluginSection(sectionData, "pre-register", plugins, REIPlugin::preRegister); + } + + @Override + public void post() { + List<P> plugins = new ArrayList<>(getPlugins().toList()); + plugins.sort(Comparator.comparingDouble(P::getPriority).reversed()); + Collections.reverse(plugins); + MutablePair<Stopwatch, String> sectionData = new MutablePair<>(Stopwatch.createUnstarted(), ""); + pluginSection(sectionData, "post-register", plugins, REIPlugin::postRegister); + } + + @Override public void startReload(ReloadStage stage) { try { reloading = true; @@ -170,19 +188,11 @@ public class PluginManagerImpl<P extends REIPlugin<?>> 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<P> 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<P> 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<List<ItemStack>> input = menuInfo.getInputs(menuInfoContext); IntList intList = hasItems(menu, menuInfo, display, input); |
