From 28025895e0da1e6079264dbfe951e7fd9bf069d8 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 11 Aug 2019 23:28:33 +0800 Subject: Scrollable Entry List? --- .../me/shedaniel/rei/impl/EntryRegistryImpl.java | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java (limited to 'src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java') diff --git a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java new file mode 100644 index 000000000..327a0111e --- /dev/null +++ b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java @@ -0,0 +1,66 @@ +/* + * Roughly Enough Items by Danielshe. + * Licensed under the MIT License. + */ + +package me.shedaniel.rei.impl; + +import com.google.common.collect.Lists; +import me.shedaniel.rei.api.Entry; +import me.shedaniel.rei.api.EntryRegistry; +import net.minecraft.fluid.Fluid; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.DefaultedList; + +import java.util.Collections; +import java.util.List; +import java.util.TreeSet; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; + +public class EntryRegistryImpl implements EntryRegistry { + + private final CopyOnWriteArrayList entries = Lists.newCopyOnWriteArrayList(); + + @Override + public List getEntryList() { + return Collections.unmodifiableList(entries); + } + + @SuppressWarnings("deprecation") + @Override + public List getModifiableEntryList() { + return entries; + } + + @Override + public ItemStack[] getAllStacksFromItem(Item item) { + DefaultedList list = DefaultedList.create(); + list.add(item.getStackForRender()); + item.appendStacks(item.getGroup(), list); + TreeSet stackSet = list.stream().collect(Collectors.toCollection(() -> new TreeSet((p1, p2) -> ItemStack.areEqualIgnoreDamage(p1, p2) ? 0 : 1))); + return Lists.newArrayList(stackSet).toArray(new ItemStack[0]); + } + + @Override + public void registerItemStack(Item afterItem, ItemStack stack) { + if (!stack.isEmpty() && !alreadyContain(stack)) + if (afterItem == null || afterItem.equals(Items.AIR)) + entries.add(Entry.create(stack)); + else { + int last = entries.size(); + for (int i = 0; i < entries.size(); i++) + if (entries.get(i).getEntryType() == Entry.Type.ITEM && entries.get(i).getItemStack().getItem().equals(afterItem)) + last = i + 1; + entries.add(last, Entry.create(stack)); + } + } + + @Override + public void registerFluid(Fluid fluid) { + entries.add(Entry.create(fluid)); + } + +} -- cgit