Browse Source

Cleanup: Merge some tiny classes into Deduplicator

malte0811 4 years ago
parent
commit
e261f58f0b

+ 0 - 25
src/main/java/malte0811/ferritecore/impl/AndConditionImpl.java

@@ -1,25 +0,0 @@
-package malte0811.ferritecore.impl;
-
-import malte0811.ferritecore.util.PredicateHelper;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.client.renderer.model.multipart.ICondition;
-import net.minecraft.state.StateContainer;
-
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Predicate;
-
-public class AndConditionImpl {
-    private static final Map<List<Predicate<BlockState>>, Predicate<BlockState>> COMBINED_PREDICATE_CACHE = new ConcurrentHashMap<>();
-
-    public static Predicate<BlockState> getPredicate(
-            StateContainer<Block, BlockState> stateContainer, Iterable<? extends ICondition> conditions
-    ) {
-        return COMBINED_PREDICATE_CACHE.computeIfAbsent(
-                PredicateHelper.toCanonicalList(conditions, stateContainer),
-                listInt -> state -> listInt.stream().allMatch((predicate) -> predicate.test(state))
-        );
-    }
-}

+ 0 - 20
src/main/java/malte0811/ferritecore/impl/CachedOrPredicates.java

@@ -1,20 +0,0 @@
-package malte0811.ferritecore.impl;
-
-import net.minecraft.block.BlockState;
-
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Predicate;
-
-public class CachedOrPredicates {
-
-    public static final Map<List<Predicate<BlockState>>, Predicate<BlockState>> OR_PREDICATE_CACHE = new ConcurrentHashMap<>();
-
-    public static Predicate<BlockState> or(List<Predicate<BlockState>> list) {
-        return OR_PREDICATE_CACHE.computeIfAbsent(
-                list,
-                listInt -> state -> listInt.stream().anyMatch((predicate) -> predicate.test(state))
-        );
-    }
-}

+ 18 - 0
src/main/java/malte0811/ferritecore/impl/Deduplicator.java

@@ -28,6 +28,8 @@ public class Deduplicator {
     private static final Map<String, String> VARIANT_IDENTITIES = new ConcurrentHashMap<>();
     // Typedefs would be a nice thing to have
     private static final Map<List<Pair<Predicate<BlockState>, IBakedModel>>, MultipartBakedModel> KNOWN_MULTIPART_MODELS = new ConcurrentHashMap<>();
+    private static final Map<List<Predicate<BlockState>>, Predicate<BlockState>> OR_PREDICATE_CACHE = new ConcurrentHashMap<>();
+    private static final Map<List<Predicate<BlockState>>, Predicate<BlockState>> AND_PREDICATE_CACHE = new ConcurrentHashMap<>();
 
     public static String deduplicateVariant(String variant) {
         return VARIANT_IDENTITIES.computeIfAbsent(variant, Function.identity());
@@ -37,6 +39,20 @@ public class Deduplicator {
         return KNOWN_MULTIPART_MODELS.computeIfAbsent(selectors, MultipartBakedModel::new);
     }
 
+    public static Predicate<BlockState> or(List<Predicate<BlockState>> list) {
+        return OR_PREDICATE_CACHE.computeIfAbsent(
+                list,
+                listInt -> state -> listInt.stream().anyMatch((predicate) -> predicate.test(state))
+        );
+    }
+
+    public static Predicate<BlockState> and(List<Predicate<BlockState>> list) {
+        return AND_PREDICATE_CACHE.computeIfAbsent(
+                list,
+                listInt -> state -> listInt.stream().allMatch((predicate) -> predicate.test(state))
+        );
+    }
+
     @SubscribeEvent
     public static void registerReloadListener(ParticleFactoryRegisterEvent ev) {
         // Register the reload listener s.t. its "sync" part runs after the model loader reload
@@ -53,6 +69,8 @@ public class Deduplicator {
             ) {
                 VARIANT_IDENTITIES.clear();
                 KNOWN_MULTIPART_MODELS.clear();
+                OR_PREDICATE_CACHE.clear();
+                AND_PREDICATE_CACHE.clear();
             }
         });
     }

+ 1 - 1
src/main/java/malte0811/ferritecore/impl/PropertyValueConditionImpl.java

@@ -49,7 +49,7 @@ public class PropertyValueConditionImpl {
                             .collect(Collectors.toList());
                     // This line is the only functional change, but targeting it with anything but Overwrite appears to
                     // be impossible
-                    isMatchedState = CachedOrPredicates.or(PredicateHelper.canonize(subPredicates));
+                    isMatchedState = Deduplicator.or(PredicateHelper.canonize(subPredicates));
                 }
 
                 return invert ? isMatchedState.negate() : isMatchedState;

+ 3 - 2
src/main/java/malte0811/ferritecore/mixin/predicates/AndConditionMixin.java

@@ -1,6 +1,7 @@
 package malte0811.ferritecore.mixin.predicates;
 
-import malte0811.ferritecore.impl.AndConditionImpl;
+import malte0811.ferritecore.impl.Deduplicator;
+import malte0811.ferritecore.util.PredicateHelper;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
 import net.minecraft.client.renderer.model.multipart.AndCondition;
@@ -23,6 +24,6 @@ public class AndConditionMixin {
      */
     @Overwrite
     public Predicate<BlockState> getPredicate(StateContainer<Block, BlockState> stateContainer) {
-        return AndConditionImpl.getPredicate(stateContainer, conditions);
+        return Deduplicator.and(PredicateHelper.toCanonicalList(conditions, stateContainer));
     }
 }

+ 2 - 2
src/main/java/malte0811/ferritecore/mixin/predicates/OrConditionMixin.java

@@ -1,6 +1,6 @@
 package malte0811.ferritecore.mixin.predicates;
 
-import malte0811.ferritecore.impl.CachedOrPredicates;
+import malte0811.ferritecore.impl.Deduplicator;
 import malte0811.ferritecore.util.PredicateHelper;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
@@ -24,6 +24,6 @@ public class OrConditionMixin {
      */
     @Overwrite
     public Predicate<BlockState> getPredicate(StateContainer<Block, BlockState> stateContainer) {
-        return CachedOrPredicates.or(PredicateHelper.toCanonicalList(conditions, stateContainer));
+        return Deduplicator.or(PredicateHelper.toCanonicalList(conditions, stateContainer));
     }
 }