aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/impl/common
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/impl/common')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java78
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java41
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java46
3 files changed, 122 insertions, 43 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java
new file mode 100644
index 000000000..1304e7c5d
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java
@@ -0,0 +1,78 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 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.entry.comparison;
+
+import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
+import me.shedaniel.rei.api.common.entry.comparison.EntryComparator;
+import me.shedaniel.rei.api.common.entry.comparison.EntryComparatorRegistry;
+import me.shedaniel.rei.api.common.plugins.REIPlugin;
+import net.minecraft.core.Registry;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.item.ItemStack;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.jetbrains.annotations.ApiStatus;
+
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+@ApiStatus.Internal
+public abstract class EntryComparatorRegistryImpl<T, S> implements EntryComparatorRegistry<T, S> {
+ private static final Logger LOGGER = LogManager.getLogger(EntryComparatorRegistryImpl.class);
+ private final Map<S, EntryComparator<T>> comparators = new IdentityHashMap<>();
+
+ @Override
+ public void register(EntryComparator<T> comparator, S entry) {
+ EntryComparator<T> put = this.comparators.put(entry, comparator);
+ if (put != null) {
+ LOGGER.warn("[REI] Overriding " + put + "entry comparator with " + comparator + "for " + entry + "! This may result in unwanted comparisons!");
+ }
+ }
+
+ @Override
+ public void startReload() {
+ comparators.clear();
+ }
+
+ public abstract S getEntry(T stack);
+
+ @Override
+ public long hashOf(ComparisonContext context, T stack) {
+ EntryComparator<T> comparator = comparators.get(getEntry(stack));
+ if (comparator != null) {
+ return comparator.hash(context, stack);
+ }
+ return 1;
+ }
+
+ @Override
+ public boolean containsComparator(S item) {
+ return comparators.containsKey(item);
+ }
+
+ @Override
+ public int comparatorSize() {
+ return this.comparators.size();
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java
new file mode 100644
index 000000000..67cceb6dd
--- /dev/null
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/FluidComparatorRegistryImpl.java
@@ -0,0 +1,41 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020, 2021 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.entry.comparison;
+
+import me.shedaniel.architectury.fluid.FluidStack;
+import me.shedaniel.rei.api.common.entry.comparison.FluidComparatorRegistry;
+import me.shedaniel.rei.api.common.plugins.REIPlugin;
+import net.minecraft.world.level.material.Fluid;
+
+public class FluidComparatorRegistryImpl extends EntryComparatorRegistryImpl<FluidStack, Fluid> implements FluidComparatorRegistry {
+ @Override
+ public Fluid getEntry(FluidStack stack) {
+ return stack.getFluid();
+ }
+
+ @Override
+ public void acceptPlugin(REIPlugin<?> plugin) {
+ plugin.registerFluidComparators(this);
+ }
+}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
index ed3eb1fba..e1c7b7a3b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/ItemComparatorRegistryImpl.java
@@ -23,59 +23,19 @@
package me.shedaniel.rei.impl.common.entry.comparison;
-import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext;
-import me.shedaniel.rei.api.common.entry.comparison.ItemComparator;
import me.shedaniel.rei.api.common.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.common.plugins.REIPlugin;
-import net.minecraft.core.Registry;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.jetbrains.annotations.ApiStatus;
-import java.util.IdentityHashMap;
-import java.util.Map;
-
-@ApiStatus.Internal
-public class ItemComparatorRegistryImpl implements ItemComparatorRegistry {
- private static final Logger LOGGER = LogManager.getLogger(ItemComparatorRegistryImpl.class);
- private final Map<Item, ItemComparator> comparators = new IdentityHashMap<>();
-
+public class ItemComparatorRegistryImpl extends EntryComparatorRegistryImpl<ItemStack, Item> implements ItemComparatorRegistry {
@Override
- public void register(ItemComparator comparator, Item item) {
- ItemComparator put = this.comparators.put(item, comparator);
- if (put != null) {
- LOGGER.warn("[REI] Overriding " + put + "item comparator with " + comparator + "for " + Registry.ITEM.getKey(item) + "! This may result in unwanted comparisons!");
- }
- }
-
- @Override
- public void startReload() {
- comparators.clear();
+ public Item getEntry(ItemStack stack) {
+ return stack.getItem();
}
@Override
public void acceptPlugin(REIPlugin<?> plugin) {
plugin.registerItemComparators(this);
}
-
- @Override
- public long hashOf(ComparisonContext context, ItemStack stack) {
- ItemComparator comparator = comparators.get(stack.getItem());
- if (comparator != null) {
- return comparator.hash(context, stack);
- }
- return 1;
- }
-
- @Override
- public boolean containsComparator(Item item) {
- return comparators.containsKey(item);
- }
-
- @Override
- public int comparatorSize() {
- return this.comparators.size();
- }
}