aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-04-09 02:41:21 +0800
committershedaniel <daniel@shedaniel.me>2022-04-12 18:01:16 +0800
commit7fafa7d9bbb2483313d86f946653f3ad64b2db18 (patch)
tree21274b1a51fd59bf7649f03c4990b21e478f9b6e
parent0c73d4f3284e8706807deb53683d2c3d4f53372e (diff)
downloadRoughlyEnoughItems-7fafa7d9bbb2483313d86f946653f3ad64b2db18.tar.gz
RoughlyEnoughItems-7fafa7d9bbb2483313d86f946653f3ad64b2db18.tar.bz2
RoughlyEnoughItems-7fafa7d9bbb2483313d86f946653f3ad64b2db18.zip
Support for JEI 9.5, Close #821, Fix #807
-rw-r--r--.gitignore3
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java75
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/Internals.java6
-rw-r--r--api/src/main/java/me/shedaniel/rei/impl/common/InternalLogger.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Logger.java)11
-rwxr-xr-xbuild.gradle4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java86
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java32
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FileLogger.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Log4JLogger.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/logging/MultiLogger.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/logging/TransformingLogger.java54
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java4
-rw-r--r--runtime/src/main/resources/roughlyenoughitems.changes.json2
-rw-r--r--runtime/src/main/resources/roughlyenoughitems/2022.2/2022-02-18_01-30.png (renamed from runtime/src/main/resources/roughlyenoughitems/2022.1/2022-02-18_01-30.png)bin33618 -> 33618 bytes
-rw-r--r--runtime/src/main/resources/roughlyenoughitems/2022.2/2022-02-18_01-32.png (renamed from runtime/src/main/resources/roughlyenoughitems/2022.1/2022-02-18_01-32.png)bin9532 -> 9532 bytes
-rw-r--r--runtime/src/main/resources/roughlyenoughitems/2022.2/2022-02-18_09-05.png (renamed from runtime/src/main/resources/roughlyenoughitems/2022.1/2022-02-18_09-05.png)bin70861 -> 70861 bytes
-rw-r--r--runtime/src/main/resources/roughlyenoughitems/2022.2/changelog.md (renamed from runtime/src/main/resources/roughlyenoughitems/2022.1/changelog.md)4
18 files changed, 276 insertions, 32 deletions
diff --git a/.gitignore b/.gitignore
index 08a039b5a..104a492ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,4 +30,5 @@ private.properties
# Files from bad operating systems :^)
Thumbs.db
-.DS_Store \ No newline at end of file
+.DS_Store
+/.architectury-transformer/debug.log
diff --git a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
index 2b3091e12..dbca0d265 100644
--- a/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
+++ b/api/src/main/java/me/shedaniel/rei/api/client/view/ViewSearchBuilder.java
@@ -27,6 +27,7 @@ import me.shedaniel.rei.api.client.ClientHelper;
import me.shedaniel.rei.api.client.registry.category.CategoryRegistry;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
+import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.util.CollectionUtils;
import me.shedaniel.rei.impl.ClientInternals;
@@ -38,26 +39,89 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.stream.Stream;
public interface ViewSearchBuilder {
+ /**
+ * Creates a new {@link ViewSearchBuilder} for looking up displays.
+ */
static ViewSearchBuilder builder() {
return ClientInternals.createViewSearchBuilder();
}
+ /**
+ * Adds all displays from the given {@link DisplayCategory} to the search.
+ *
+ * @param category the category to add
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
ViewSearchBuilder addCategory(CategoryIdentifier<?> category);
+ /**
+ * Adds all displays from the given {@link DisplayCategory}s to the search.
+ *
+ * @param categories the categories to add
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
ViewSearchBuilder addCategories(Collection<CategoryIdentifier<?>> categories);
+ /**
+ * Adds all displays from all the {@link CategoryRegistry}s to the search.
+ *
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
default ViewSearchBuilder addAllCategories() {
return addCategories(CollectionUtils.map(CategoryRegistry.getInstance(), CategoryRegistry.CategoryConfiguration::getCategoryIdentifier));
}
+ /**
+ * Returns the set of {@link CategoryIdentifier}s that will be used to add all the {@link Display}s to the search.
+ *
+ * @return the set of {@link CategoryIdentifier}s
+ */
Set<CategoryIdentifier<?>> getCategories();
+ /**
+ * Filters the search to only include {@link Display}s that are in the given {@link CategoryIdentifier}.
+ *
+ * @param category the category to filter by
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
+ ViewSearchBuilder filterCategory(CategoryIdentifier<?> category);
+
+ /**
+ * Filters the search to only include {@link Display}s that are in the given {@link CategoryIdentifier}s.
+ *
+ * @param categories the categories to filter by
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
+ ViewSearchBuilder filterCategories(Collection<CategoryIdentifier<?>> categories);
+
+ /**
+ * Returns the set of {@link CategoryIdentifier}s that will be used to filter the search.
+ *
+ * @return the set of {@link CategoryIdentifier}s
+ */
+ Set<CategoryIdentifier<?>> getFilteringCategories();
+
+ /**
+ * Filters the search to only include {@link Display}s that are recipes for the given {@link EntryStack}.
+ *
+ * @param stack the stack to filter by
+ * @param <T> the type of the stack
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
<T> ViewSearchBuilder addRecipesFor(EntryStack<T> stack);
List<EntryStack<?>> getRecipesFor();
+ /**
+ * Filters the search to only include {@link Display}s that are usages for the given {@link EntryStack}.
+ *
+ * @param stack the stack to filter by
+ * @param <T> the type of the stack
+ * @return the {@link ViewSearchBuilder} for chaining
+ */
<T> ViewSearchBuilder addUsagesFor(EntryStack<T> stack);
List<EntryStack<?>> getUsagesFor();
@@ -70,6 +134,17 @@ public interface ViewSearchBuilder {
@ApiStatus.Internal
Map<DisplayCategory<?>, List<DisplaySpec>> buildMapInternal();
+ @ApiStatus.Experimental
+ Stream<DisplaySpec> streamDisplays();
+
+ boolean isMergingDisplays();
+
+ ViewSearchBuilder mergingDisplays(boolean mergingDisplays);
+
+ boolean isProcessingVisibilityHandlers();
+
+ ViewSearchBuilder processingVisibilityHandlers(boolean processingVisibilityHandlers);
+
default boolean open() {
return ClientHelper.getInstance().openView(this);
}
diff --git a/api/src/main/java/me/shedaniel/rei/impl/Internals.java b/api/src/main/java/me/shedaniel/rei/impl/Internals.java
index 7fa35af8b..1e64c2c57 100644
--- a/api/src/main/java/me/shedaniel/rei/impl/Internals.java
+++ b/api/src/main/java/me/shedaniel/rei/impl/Internals.java
@@ -34,6 +34,7 @@ import me.shedaniel.rei.api.common.plugins.PluginManager;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
import me.shedaniel.rei.api.common.plugins.REIServerPlugin;
import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry;
+import me.shedaniel.rei.impl.common.InternalLogger;
import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Unit;
@@ -53,6 +54,7 @@ public final class Internals {
private static Supplier<NbtHasherProvider> nbtHasherProvider = Internals::throwNotSetup;
private static Function<String, CategoryIdentifier<?>> categoryIdentifier = (object) -> throwNotSetup();
private static Supplier<MenuInfoRegistry> stubMenuInfoRegistry = Internals::throwNotSetup;
+ private static Supplier<InternalLogger> logger = Internals::throwNotSetup;
private static <T> T throwNotSetup() {
throw new AssertionError("REI Internals have not been initialized!");
@@ -111,6 +113,10 @@ public final class Internals {
return (CategoryIdentifier<T>) categoryIdentifier.apply(location);
}
+ public static InternalLogger getInternalLogger() {
+ return logger.get();
+ }
+
public interface EntryStackProvider {
EntryStack<Unit> empty();
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Logger.java b/api/src/main/java/me/shedaniel/rei/impl/common/InternalLogger.java
index f12bde464..40f81129c 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Logger.java
+++ b/api/src/main/java/me/shedaniel/rei/impl/common/InternalLogger.java
@@ -21,11 +21,18 @@
* SOFTWARE.
*/
-package me.shedaniel.rei.impl.common.logging;
+package me.shedaniel.rei.impl.common;
+import me.shedaniel.rei.impl.Internals;
import org.apache.logging.log4j.Level;
+import org.jetbrains.annotations.ApiStatus;
-public interface Logger {
+@ApiStatus.Internal
+public interface InternalLogger {
+ static InternalLogger getInstance() {
+ return Internals.getInternalLogger();
+ }
+
void throwException(Throwable throwable);
void log(Level level, String message);
diff --git a/build.gradle b/build.gradle
index b489c0f8c..58e4bb8ea 100755
--- a/build.gradle
+++ b/build.gradle
@@ -78,6 +78,10 @@ allprojects {
}
}
+["api", "default-plugin", "runtime"].forEach {
+ project(":fabric").evaluationDependsOn(":$it")
+}
+
subprojects {
group = rootProject.group
version = rootProject.version
diff --git a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 5681e6598..d1be18c87 100644
--- a/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/runtime/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -41,6 +41,7 @@ import me.shedaniel.rei.api.common.plugins.REIServerPlugin;
import me.shedaniel.rei.api.common.registry.ReloadStage;
import me.shedaniel.rei.api.common.transfer.info.MenuInfoRegistry;
import me.shedaniel.rei.impl.Internals;
+import me.shedaniel.rei.impl.common.InternalLogger;
import me.shedaniel.rei.impl.common.category.CategoryIdentifierImpl;
import me.shedaniel.rei.impl.common.display.DisplaySerializerRegistryImpl;
import me.shedaniel.rei.impl.common.entry.DeferringEntryTypeProviderImpl;
@@ -54,8 +55,8 @@ import me.shedaniel.rei.impl.common.entry.type.EntryTypeRegistryImpl;
import me.shedaniel.rei.impl.common.fluid.FluidSupportProviderImpl;
import me.shedaniel.rei.impl.common.logging.FileLogger;
import me.shedaniel.rei.impl.common.logging.Log4JLogger;
-import me.shedaniel.rei.impl.common.logging.Logger;
import me.shedaniel.rei.impl.common.logging.MultiLogger;
+import me.shedaniel.rei.impl.common.logging.TransformingLogger;
import me.shedaniel.rei.impl.common.logging.performance.PerformanceLogger;
import me.shedaniel.rei.impl.common.logging.performance.PerformanceLoggerImpl;
import me.shedaniel.rei.impl.common.plugins.PluginManagerImpl;
@@ -74,10 +75,10 @@ import java.util.function.UnaryOperator;
@ApiStatus.Internal
public class RoughlyEnoughItemsCore {
@ApiStatus.Internal
- public static final Logger LOGGER = new MultiLogger(ImmutableList.of(
+ public static final InternalLogger LOGGER = new TransformingLogger(new MultiLogger(ImmutableList.of(
new FileLogger(Platform.getGameFolder().resolve("logs/rei.log")),
new Log4JLogger(LogManager.getFormatterLogger("REI"))
- ));
+ )), message -> "[REI] " + message);
public static final PerformanceLogger PERFORMANCE_LOGGER = new PerformanceLoggerImpl();
static {
@@ -124,6 +125,7 @@ public class RoughlyEnoughItemsCore {
);
},
new MenuInfoRegistryImpl()), "serverPluginManager");
+ Internals.attachInstanceSupplier(LOGGER, "logger");
}
public static void _reloadPlugins(@Nullable ReloadStage stage) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
index 89568931a..f3b18ba39 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/ClientHelperImpl.java
@@ -31,7 +31,6 @@ import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
import me.shedaniel.rei.RoughlyEnoughItemsNetwork;
import me.shedaniel.rei.api.client.ClientHelper;
-import me.shedaniel.rei.api.client.REIRuntime;
import me.shedaniel.rei.api.client.config.ConfigManager;
import me.shedaniel.rei.api.client.config.ConfigObject;
import me.shedaniel.rei.api.client.gui.config.DisplayScreenType;
@@ -40,7 +39,6 @@ import me.shedaniel.rei.api.client.gui.widgets.Tooltip;
import me.shedaniel.rei.api.client.registry.display.DisplayCategory;
import me.shedaniel.rei.api.client.view.ViewSearchBuilder;
import me.shedaniel.rei.api.common.category.CategoryIdentifier;
-import me.shedaniel.rei.api.common.display.Display;
import me.shedaniel.rei.api.common.entry.EntryStack;
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.EntryStacks;
@@ -48,7 +46,6 @@ import me.shedaniel.rei.api.common.util.FormattingUtils;
import me.shedaniel.rei.impl.ClientInternals;
import me.shedaniel.rei.impl.client.gui.screen.CompositeDisplayViewingScreen;
import me.shedaniel.rei.impl.client.gui.screen.DefaultDisplayViewingScreen;
-import me.shedaniel.rei.impl.client.gui.screen.UncertainDisplayViewingScreen;
import me.shedaniel.rei.impl.client.view.ViewsImpl;
import me.shedaniel.rei.impl.display.DisplaySpec;
import net.fabricmc.api.EnvType;
@@ -70,6 +67,7 @@ import org.jetbrains.annotations.Nullable;
import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Supplier;
+import java.util.stream.Stream;
@ApiStatus.Internal
@Environment(EnvType.CLIENT)
@@ -302,14 +300,22 @@ public class ClientHelperImpl implements ClientHelper {
}
return this;
}
+
+ @Override
+ public Stream<DisplaySpec> streamDisplays() {
+ return buildMapInternal().values().stream().flatMap(Collection::stream);
+ }
}
public static final class ViewSearchBuilderImpl extends AbstractViewSearchBuilder {
+ private final Set<CategoryIdentifier<?>> filteringCategories = new HashSet<>();
private final Set<CategoryIdentifier<?>> categories = new HashSet<>();
private final List<EntryStack<?>> recipesFor = new ArrayList<>();
private final List<EntryStack<?>> usagesFor = new ArrayList<>();
@Nullable
private CategoryIdentifier<?> preferredOpenedCategory = null;
+ private boolean mergeDisplays = true;
+ private boolean processVisibilityHandlers = true;
private final Supplier<Map<DisplayCategory<?>, List<DisplaySpec>>> map = Suppliers.memoize(() -> ViewsImpl.buildMapFor(this));
@Override
@@ -364,10 +370,49 @@ public class ClientHelperImpl implements ClientHelper {
}
@Override
+ public ViewSearchBuilder filterCategory(CategoryIdentifier<?> category) {
+ this.filteringCategories.add(category);
+ return this;
+ }
+
+ @Override
+ public ViewSearchBuilder filterCategories(Collection<CategoryIdentifier<?>> categories) {
+ this.filteringCategories.addAll(categories);
+ return this;
+ }
+
+ @Override
+ public Set<CategoryIdentifier<?>> getFilteringCategories() {
+ return filteringCategories;
+ }
+
+ @Override
public Map<DisplayCategory<?>, List<DisplaySpec>> buildMapInternal() {
fillPreferredOpenedCategory();
return this.map.get();
}
+
+ @Override
+ public boolean isMergingDisplays() {
+ return mergeDisplays;
+ }
+
+ @Override
+ public ViewSearchBuilder mergingDisplays(boolean mergingDisplays) {
+ this.mergeDisplays = mergingDisplays;
+ return this;
+ }
+
+ @Override
+ public boolean isProcessingVisibilityHandlers() {
+ return processVisibilityHandlers;
+ }
+
+ @Override
+ public ViewSearchBuilder processingVisibilityHandlers(boolean processingVisibilityHandlers) {
+ this.processVisibilityHandlers = processingVisibilityHandlers;
+ return this;
+ }
}
public static final class LegacyWrapperViewSearchBuilder extends AbstractViewSearchBuilder {
@@ -399,6 +444,21 @@ public class ClientHelperImpl implements ClientHelper {
}
@Override
+ public ViewSearchBuilder filterCategory(CategoryIdentifier<?> category) {
+ return this;
+ }
+
+ @Override
+ public ViewSearchBuilder filterCategories(Collection<CategoryIdentifier<?>> categories) {
+ return this;
+ }
+
+ @Override
+ public Set<CategoryIdentifier<?>> getFilteringCategories() {
+ return Collections.emptySet();
+ }
+
+ @Override
public <T> ViewSearchBuilder addRecipesFor(EntryStack<T> stack) {
return this;
}
@@ -445,5 +505,25 @@ public class ClientHelperImpl implements ClientHelper {
fillPreferredOpenedCategory();
return this.map;
}
+
+ @Override
+ public boolean isMergingDisplays() {
+ return true;
+ }
+
+ @Override
+ public ViewSearchBuilder mergingDisplays(boolean mergingDisplays) {
+ return this;
+ }
+
+ @Override
+ public boolean isProcessingVisibilityHandlers() {
+ return false;
+ }
+
+ @Override
+ public ViewSearchBuilder processingVisibilityHandlers(boolean processingVisibilityHandlers) {
+ return this;
+ }
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
index df371c961..4b2ce42e1 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java
@@ -90,7 +90,9 @@ public class ViewsImpl implements Views {
}
Stopwatch stopwatch = Stopwatch.createStarted();
+ boolean processingVisibilityHandlers = builder.isProcessingVisibilityHandlers();
Set<CategoryIdentifier<?>> categories = builder.getCategories();
+ Set<CategoryIdentifier<?>> filteringCategories = builder.getFilteringCategories();
List<EntryStack<?>> recipesForStacks = builder.getRecipesFor();
List<EntryStack<?>> usagesForStacks = builder.getUsagesFor();
recipesForStacks = Stream.concat(recipesForStacks.stream(), recipesForStacks.stream().map(EntryStack::wildcard))
@@ -104,14 +106,15 @@ public class ViewsImpl implements Views {
Map<DisplayCategory<?>, List<Display>> result = Maps.newLinkedHashMap();
for (CategoryRegistry.CategoryConfiguration<?> categoryConfiguration : CategoryRegistry.getInstance()) {
DisplayCategory<?> category = categoryConfiguration.getCategory();
- if (CategoryRegistry.getInstance().isCategoryInvisible(category)) continue;
+ if (processingVisibilityHandlers && CategoryRegistry.getInstance().isCategoryInvisible(category)) continue;
CategoryIdentifier<?> categoryId = categoryConfiguration.getCategoryIdentifier();
+ if (!filteringCategories.isEmpty() && !filteringCategories.contains(categoryId)) continue;
List<Display> allRecipesFromCategory = displayRegistry.get((CategoryIdentifier<Display>) categoryId);
Set<Display> set = Sets.newLinkedHashSet();
if (categories.contains(categoryId)) {
for (Display display : allRecipesFromCategory) {
- if (displayRegistry.isDisplayVisible(display)) {
+ if (!processingVisibilityHandlers || displayRegistry.isDisplayVisible(display)) {
set.add(display);
}
}
@@ -121,7 +124,7 @@ public class ViewsImpl implements Views {
continue;
}
for (Display display : allRecipesFromCategory) {
- if (!displayRegistry.isDisplayVisible(display)) continue;
+ if (processingVisibilityHandlers && !displayRegistry.isDisplayVisible(display)) continue;
if (!recipesForStacks.isEmpty()) {
if (isRecipesFor(recipesForStacks, display)) {
set.add(display);
@@ -137,7 +140,11 @@ public class ViewsImpl implements Views {
}
for (EntryStack<?> usagesFor : usagesForStacks) {
if (isStackWorkStationOfCategory(categoryConfiguration, usagesFor)) {
- set.addAll(CollectionUtils.filterToSet(allRecipesFromCategory, displayRegistry::isDisplayVisible));
+ if (processingVisibilityHandlers) {
+ set.addAll(CollectionUtils.filterToSet(allRecipesFromCategory, displayRegistry::isDisplayVisible));
+ } else {
+ set.addAll(allRecipesFromCategory);
+ }
break;
}
}
@@ -151,7 +158,8 @@ public class ViewsImpl implements Views {
for (Map.Entry<CategoryIdentifier<?>, List<DynamicDisplayGenerator<?>>> entry : displayRegistry.getCategoryDisplayGenerators().entrySet()) {
CategoryIdentifier<?> categoryId = entry.getKey();
DisplayCategory<?> category = CategoryRegistry.getInstance().get(categoryId).getCategory();
- if (CategoryRegistry.getInstance().isCategoryInvisible(category)) continue;
+ if (processingVisibilityHandlers && CategoryRegistry.getInstance().isCategoryInvisible(category)) continue;
+ if (!filteringCategories.isEmpty() && !filteringCategories.contains(categoryId)) continue;
Set<Display> set = new LinkedHashSet<>();
generatorsCount += entry.getValue().size();
@@ -165,7 +173,9 @@ public class ViewsImpl implements Views {
}
Consumer<Display> displayConsumer = display -> {
- CollectionUtils.getOrPutEmptyList(result, CategoryRegistry.getInstance().get(display.getCategoryIdentifier()).getCategory()).add(display);
+ CategoryIdentifier<?> categoryIdentifier = display.getCategoryIdentifier();
+ if (!filteringCategories.isEmpty() && !filteringCategories.contains(categoryIdentifier)) return;
+ CollectionUtils.getOrPutEmptyList(result, CategoryRegistry.getInstance().get(categoryIdentifier).getCategory()).add(display);
};
for (DynamicDisplayGenerator<Display> generator : (List<DynamicDisplayGenerator<Display>>) (List<? extends DynamicDisplayGenerator<?>>) displayRegistry.getGlobalDisplayGenerators()) {
generatorsCount++;
@@ -174,7 +184,7 @@ public class ViewsImpl implements Views {
Map<DisplayCategory<?>, List<DisplaySpec>> resultSpeced = (Map<DisplayCategory<?>, List<DisplaySpec>>) (Map) new LinkedHashMap<>(result);
// optimize displays
- if (ConfigObject.getInstance().doMergeDisplayUnderOne()) {
+ if (builder.isMergingDisplays() && ConfigObject.getInstance().doMergeDisplayUnderOne()) {
for (Map.Entry<DisplayCategory<?>, List<Display>> entry : result.entrySet()) {
DisplayMerger<Display> merger = (DisplayMerger<Display>) entry.getKey().getDisplayMerger();
@@ -293,11 +303,13 @@ public class ViewsImpl implements Views {
}
private static <T extends Display> void generateLiveDisplays(DisplayRegistry displayRegistry, DynamicDisplayGenerator<T> generator, ViewSearchBuilder builder, Consumer<T> displayConsumer) {
+ boolean processingVisibilityHandlers = builder.isProcessingVisibilityHandlers();
+
for (EntryStack<?> stack : builder.getRecipesFor()) {
Optional<List<T>> recipeForDisplays = generator.getRecipeFor(stack);
if (recipeForDisplays.isPresent()) {
for (T display : recipeForDisplays.get()) {
- if (displayRegistry.isDisplayVisible(display)) {
+ if (!processingVisibilityHandlers || displayRegistry.isDisplayVisible(display)) {
displayConsumer.accept(display);
}
}
@@ -308,7 +320,7 @@ public class ViewsImpl implements Views {
Optional<List<T>> usageForDisplays = generator.getUsageFor(stack);
if (usageForDisplays.isPresent()) {
for (T display : usageForDisplays.get()) {
- if (displayRegistry.isDisplayVisible(display)) {
+ if (!processingVisibilityHandlers || displayRegistry.isDisplayVisible(display)) {
displayConsumer.accept(display);
}
}
@@ -318,7 +330,7 @@ public class ViewsImpl implements Views {
Optional<List<T>> displaysGenerated = generator.generate(builder);
if (displaysGenerated.isPresent()) {
for (T display : displaysGenerated.get()) {
- if (displayRegistry.isDisplayVisible(display)) {
+ if (!processingVisibilityHandlers || displayRegistry.isDisplayVisible(display)) {
displayConsumer.accept(display);
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FileLogger.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FileLogger.java
index d773113d7..b1eb4fe62 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FileLogger.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/FileLogger.java
@@ -23,6 +23,7 @@
package me.shedaniel.rei.impl.common.logging;
+import me.shedaniel.rei.impl.common.InternalLogger;
import org.apache.commons.io.output.NullOutputStream;
import org.apache.logging.log4j.Level;
@@ -33,7 +34,7 @@ import java.nio.file.Path;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-public class FileLogger implements Logger {
+public class FileLogger implements InternalLogger {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
private final Writer writer;
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Log4JLogger.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Log4JLogger.java
index 087d007b6..1db77dfe7 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Log4JLogger.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/Log4JLogger.java
@@ -23,9 +23,10 @@
package me.shedaniel.rei.impl.common.logging;
+import me.shedaniel.rei.impl.common.InternalLogger;
import org.apache.logging.log4j.Level;
-public class Log4JLogger implements Logger {
+public class Log4JLogger implements InternalLogger {
private final org.apache.logging.log4j.Logger logger;
public Log4JLogger(org.apache.logging.log4j.Logger logger) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/MultiLogger.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/MultiLogger.java
index e1148b013..9f3d6fbda 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/MultiLogger.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/MultiLogger.java
@@ -23,32 +23,33 @@
package me.shedaniel.rei.impl.common.logging;
+import me.shedaniel.rei.impl.common.InternalLogger;
import org.apache.logging.log4j.Level;
-public class MultiLogger implements Logger {
- private final Iterable<Logger> loggers;
+public class MultiLogger implements InternalLogger {
+ private final Iterable<InternalLogger> loggers;
- public MultiLogger(Iterable<Logger> loggers) {
+ public MultiLogger(Iterable<InternalLogger> loggers) {
this.loggers = loggers;
}
@Override
public void throwException(Throwable throwable) {
- for (Logger logger : loggers) {
+ for (InternalLogger logger : loggers) {
logger.throwException(throwable);
}
}
@Override
public void log(Level level, String message) {
- for (Logger logger : loggers) {
+ for (InternalLogger logger : loggers) {
logger.log(level, message);
}
}
@Override
public void log(Level level, String message, Throwable throwable) {
- for (Logger logger : loggers) {
+ for (InternalLogger logger : loggers) {
logger.log(level, message, throwable);
}
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/TransformingLogger.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/TransformingLogger.java
new file mode 100644
index 000000000..ed9678c00
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/logging/TransformingLogger.java
@@ -0,0 +1,54 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.impl.common.logging;
+
+import me.shedaniel.rei.impl.common.InternalLogger;
+import org.apache.logging.log4j.Level;
+
+import java.util.function.UnaryOperator;
+
+public class TransformingLogger implements InternalLogger {
+ private final InternalLogger logger;
+ private final UnaryOperator<String> transformer;
+
+ public TransformingLogger(InternalLogger logger, UnaryOperator<String> transformer) {
+ this.logger = logger;
+ this.transformer = transformer;
+ }
+
+ @Override
+ public void throwException(Throwable throwable) {
+ logger.throwException(throwable);
+ }
+
+ @Override
+ public void log(Level level, String message) {
+ logger.log(level, transformer.apply(message));
+ }
+
+ @Override
+ public void log(Level level, String message, Throwable throwable) {
+ logger.log(level, transformer.apply(message), throwable);
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/test/REITestPlugin.java b/runtime/src/main/j