From ffb0a6413360b0579e7331d71dd934a7d0050d16 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 2 Jun 2021 16:12:20 +0800 Subject: Refactor DisplayFiller --- .../client/registry/display/DisplayRegistry.java | 12 ++++++++ .../registry/display/DisplayRegistryImpl.java | 34 ++++++++++------------ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java index 14204c920..36c726145 100644 --- a/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java +++ b/api/src/main/java/me/shedaniel/rei/api/client/registry/display/DisplayRegistry.java @@ -201,6 +201,18 @@ public interface DisplayRegistry extends RecipeManagerContext { */ void registerFiller(Class typeClass, Predicate predicate, Function filler); + /** + * Registers a display filler, to be filled during {@link #tryFillDisplay(Object)}. + *

+ * Vanilla {@link Recipe} are by default filled, display filters + * can be used to automatically generate displaies for vanilla {@link Recipe}. + * + * @param predicate the predicate of the object + * @param filler the filler, taking an object and returning a {@code D} + * @param the type of display + */ + void registerFiller(Predicate predicate, Function filler); + /** * Tries to fill displays from {@code T}. * 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 fb5186dc1..1d6ea4721 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 @@ -47,7 +47,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl, List>> displayGenerators = new ConcurrentHashMap<>(); private final List> globalDisplayGenerators = new ArrayList<>(); private final List visibilityPredicates = new ArrayList<>(); - private final List> fillers = new ArrayList<>(); + private final List> fillers = new ArrayList<>(); private final MutableInt displayCount = new MutableInt(0); public DisplayRegistryImpl() { @@ -133,7 +133,12 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl void registerFiller(Class typeClass, Predicate predicate, Function filler) { - fillers.add(new DisplayFiller<>(typeClass, (Predicate) predicate, filler)); + registerFiller(o -> typeClass.isInstance(o) && ((Predicate) predicate).test((T) o), o -> filler.apply((T) o)); + } + + @Override + public void registerFiller(Predicate predicate, Function filler) { + fillers.add(new DisplayFiller<>((Predicate) predicate, (Function) filler)); } @Override @@ -164,7 +169,7 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl Collection tryFillDisplay(T value) { if (value instanceof Display) return Collections.singleton((Display) value); List displays = null; - for (DisplayFiller filler : fillers) { + for (DisplayFiller filler : fillers) { Display display = tryFillDisplayGenerics(filler, value); if (display != null) { if (displays == null) displays = Collections.singletonList(display); @@ -180,10 +185,10 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl D tryFillDisplayGenerics(DisplayFiller filler, Object value) { + private D tryFillDisplayGenerics(DisplayFiller filler, Object value) { try { - if (filler.typeClass.isInstance(value) && filler.predicate.test((T) value)) { - return filler.mappingFunction.apply((T) value); + if (filler.predicate.test(value)) { + return filler.mappingFunction.apply(value); } } catch (Throwable e) { RoughlyEnoughItemsCore.LOGGER.error("Failed to fill displays!", e); @@ -192,16 +197,9 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl { - private final Class typeClass; - private final Predicate predicate; - - private final Function mappingFunction; - - public DisplayFiller(Class typeClass, Predicate predicate, Function mappingFunction) { - this.typeClass = typeClass; - this.predicate = predicate; - this.mappingFunction = mappingFunction; - } - } + private static record DisplayFiller( + Predicate predicate, + + Function mappingFunction + ) {} } -- cgit