aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-08-28 04:27:25 +0800
committershedaniel <daniel@shedaniel.me>2021-08-28 16:12:05 +0800
commit88472ebfdce663fb3cbc5448cfa1137358ed9b16 (patch)
tree1f0220f9df63c3cc4006320d4f1e73bedab8326b /runtime
parent8a0601c75fa2462494ed949797f04243fe9cb10e (diff)
downloadRoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.tar.gz
RoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.tar.bz2
RoughlyEnoughItems-88472ebfdce663fb3cbc5448cfa1137358ed9b16.zip
Fix #500
Diffstat (limited to 'runtime')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/ScreenOverlayImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/InternalWidgets.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/category/CategoryRegistryImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java31
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/plugins/PluginManagerImpl.java26
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/autocrafting/DefaultCategoryHandler.java10
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);