aboutsummaryrefslogtreecommitdiff
path: root/default-plugin
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-19 19:16:12 +0800
committershedaniel <daniel@shedaniel.me>2021-03-19 19:16:12 +0800
commitd21a84ac2e07fe30685f1d703481425b0f01c93d (patch)
tree4089e62da73a4346de41b486603c3316f0201cc8 /default-plugin
parent43ae584e12c7ed0755301eb34223f644a717183e (diff)
downloadRoughlyEnoughItems-d21a84ac2e07fe30685f1d703481425b0f01c93d.tar.gz
RoughlyEnoughItems-d21a84ac2e07fe30685f1d703481425b0f01c93d.tar.bz2
RoughlyEnoughItems-d21a84ac2e07fe30685f1d703481425b0f01c93d.zip
Implement ItemComparatorRegistry as a replacement for previous check tags and check amount flags
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'default-plugin')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java86
1 files changed, 29 insertions, 57 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
index 6c547468a..121ca47ba 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java
@@ -31,19 +31,20 @@ import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
import me.shedaniel.architectury.hooks.FluidStackHooks;
import me.shedaniel.architectury.platform.Platform;
+import me.shedaniel.architectury.utils.NbtType;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.REIHelper;
import me.shedaniel.rei.api.favorites.FavoriteEntry;
import me.shedaniel.rei.api.favorites.FavoriteEntryType;
import me.shedaniel.rei.api.fluid.FluidSupportProvider;
import me.shedaniel.rei.api.ingredient.EntryIngredient;
-import me.shedaniel.rei.api.ingredient.EntryStack;
+import me.shedaniel.rei.api.ingredient.entry.comparison.ItemComparator;
+import me.shedaniel.rei.api.ingredient.entry.comparison.ItemComparatorRegistry;
import me.shedaniel.rei.api.ingredient.util.EntryIngredients;
import me.shedaniel.rei.api.ingredient.util.EntryStacks;
import me.shedaniel.rei.api.plugins.BuiltinPlugin;
import me.shedaniel.rei.api.plugins.REIPlugin;
import me.shedaniel.rei.api.registry.category.CategoryRegistry;
-import me.shedaniel.rei.api.registry.display.Display;
import me.shedaniel.rei.api.registry.display.DisplayRegistry;
import me.shedaniel.rei.api.registry.entry.EntryRegistry;
import me.shedaniel.rei.api.registry.screen.DisplayBoundsProvider;
@@ -98,6 +99,8 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.*;
import net.minecraft.client.gui.screens.recipebook.RecipeUpdateListener;
import net.minecraft.core.Registry;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TranslatableComponent;
import net.minecraft.resources.ResourceLocation;
@@ -111,19 +114,19 @@ import net.minecraft.world.item.alchemy.Potion;
import net.minecraft.world.item.alchemy.PotionBrewing;
import net.minecraft.world.item.alchemy.PotionUtils;
import net.minecraft.world.item.crafting.*;
-import net.minecraft.world.item.enchantment.Enchantment;
-import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.GameType;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.ComposterBlock;
import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity;
import net.minecraft.world.level.material.Fluid;
+import net.minecraft.world.level.material.FluidState;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.ApiStatus;
import java.util.*;
-import java.util.function.IntConsumer;
+import java.util.function.Function;
+import java.util.function.ToLongFunction;
import java.util.function.UnaryOperator;
import java.util.stream.Stream;
@@ -181,43 +184,37 @@ public class DefaultPlugin implements REIPlugin, BuiltinPlugin {
@Override
public void registerEntries(EntryRegistry registry) {
for (Item item : Registry.ITEM) {
- List<ItemStack> stacks = null;
try {
- stacks = registry.appendStacksForItem(item);
+ registry.registerEntries(EntryStacks.ofItemStacks(registry.appendStacksForItem(item)));
} catch (Exception ignored) {
- }
- if (stacks != null) {
- for (ItemStack stack : stacks) {
- registry.registerEntry(EntryStacks.of(stack));
- }
- } else
registry.registerEntry(EntryStacks.of(item));
- }
- EntryStack<ItemStack> stack = EntryStacks.of(Items.ENCHANTED_BOOK);
- List<EntryStack<?>> enchantments = new ArrayList<>();
- for (Enchantment enchantment : Registry.ENCHANTMENT) {
- IntConsumer consumer = level -> {
- Map<Enchantment, Integer> map = new HashMap<>();
- map.put(enchantment, level);
- ItemStack itemStack = new ItemStack(Items.ENCHANTED_BOOK);
- EnchantmentHelper.setEnchantments(map, itemStack);
- enchantments.add(EntryStacks.of(itemStack).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE));
- };
- if (enchantment.getMaxLevel() - enchantment.getMinLevel() >= 10) {
- consumer.accept(enchantment.getMinLevel());
- consumer.accept(enchantment.getMaxLevel());
- } else {
- for (int i = enchantment.getMinLevel(); i <= enchantment.getMaxLevel(); i++) consumer.accept(i);
}
}
- registry.registerEntriesAfter(stack, enchantments);
for (Fluid fluid : Registry.FLUID) {
- if (!fluid.defaultFluidState().isEmpty() && fluid.defaultFluidState().isSource())
+ FluidState state = fluid.defaultFluidState();
+ if (!state.isEmpty() && state.isSource()) {
registry.registerEntry(EntryStacks.of(fluid));
+ }
}
}
@Override
+ public void registerItemComparators(ItemComparatorRegistry registry) {
+ ToLongFunction<net.minecraft.nbt.Tag> nbtHasher = ItemComparator.nbtHasher();
+ Function<ItemStack, ListTag> enchantmentTag = stack -> {
+ CompoundTag tag = stack.getTag();
+ if (tag == null) return null;
+ if (!tag.contains("Enchantments", NbtType.LIST)) return null;
+ return tag.getList("Enchantments", NbtType.COMPOUND);
+ };
+ registry.register(stack -> nbtHasher.applyAsLong(enchantmentTag.apply(stack)), Items.ENCHANTED_BOOK);
+ registry.registerNbt(Items.POTION);
+ registry.registerNbt(Items.SPLASH_POTION);
+ registry.registerNbt(Items.LINGERING_POTION);
+ registry.registerNbt(Items.TIPPED_ARROW);
+ }
+
+ @Override
public void registerCategories(CategoryRegistry registry) {
registry.register(
new DefaultCraftingCategory(),
@@ -320,7 +317,7 @@ public class DefaultPlugin implements REIPlugin, BuiltinPlugin {
ItemStack outputStack = new ItemStack(Items.TIPPED_ARROW, 8);
PotionUtils.setPotion(outputStack, potion);
PotionUtils.setCustomEffects(outputStack, PotionUtils.getCustomEffects(itemStack));
- EntryIngredient output = EntryIngredient.of(EntryStacks.of(outputStack).setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE));
+ EntryIngredient output = EntryIngredient.of(EntryStacks.of(outputStack));
registry.registerDisplay(new DefaultCustomDisplay(null, input, output));
}
});
@@ -378,31 +375,6 @@ public class DefaultPlugin implements REIPlugin, BuiltinPlugin {
}
@Override
- public void postRegister() {
- // TODO Turn this into an API
- // Sit tight! This will be a fast journey!
- long time = System.currentTimeMillis();
- EntryRegistry.getInstance().getEntryStacks().forEach(this::applyPotionTransformer);
- for (List<Display> displays : DisplayRegistry.getInstance().getAllDisplays().values()) {
- for (Display display : displays) {
- for (List<? extends EntryStack<?>> entries : display.getInputEntries())
- for (EntryStack<?> stack : entries)
- applyPotionTransformer(stack);
- for (List<? extends EntryStack<?>> entries : display.getResultingEntries())
- for (EntryStack<?> stack : entries)
- applyPotionTransformer(stack);
- }
- }
- time = System.currentTimeMillis() - time;
- LOGGER.info("Applied Check Tags for potion in %dms.", time);
- }
-
- private void applyPotionTransformer(EntryStack<?> stack) {
- if (stack.getValue() instanceof PotionItem)
- stack.setting(EntryStack.Settings.CHECK_TAGS, EntryStack.Settings.TRUE);
- }
-
- @Override
public void registerExclusionZones(ExclusionZones zones) {
zones.register(EffectRenderingInventoryScreen.class, new DefaultPotionEffectExclusionZones());
zones.register(RecipeUpdateListener.class, new DefaultRecipeBookExclusionZones());