/* * Roughly Enough Items by Danielshe. * Licensed under the MIT License. */ package me.shedaniel.rei.api; import me.shedaniel.math.api.Rectangle; import me.shedaniel.rei.api.annotations.ToBeRemoved; import me.shedaniel.rei.gui.widget.QueuedTooltip; import me.shedaniel.rei.impl.EmptyEntryStack; import me.shedaniel.rei.impl.FluidEntryStack; import me.shedaniel.rei.impl.ItemEntryStack; import net.minecraft.block.Block; import net.minecraft.fluid.Fluid; import net.minecraft.item.Item; import net.minecraft.item.ItemConvertible; import net.minecraft.item.ItemStack; import net.minecraft.util.Identifier; import javax.annotation.Nullable; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; public interface EntryStack { static EntryStack empty() { return EmptyEntryStack.EMPTY; } static EntryStack create(Fluid fluid) { return create(fluid, 1000); } static EntryStack create(Fluid fluid, int amount) { return new FluidEntryStack(fluid, amount); } static EntryStack create(ItemStack stack) { return new ItemEntryStack(stack); } static EntryStack create(ItemConvertible item) { return new ItemEntryStack(new ItemStack(item)); } static EntryStack create(Block block) { return new ItemEntryStack(new ItemStack(block)); } Optional getIdentifier(); EntryStack.Type getType(); int getAmount(); void setAmount(int amount); boolean isEmpty(); @ToBeRemoved @Deprecated Entry toEntry(); EntryStack copy(); Object getObject(); boolean equals(EntryStack stack, boolean ignoreTags, boolean ignoreAmount); boolean equalsIgnoreTagsAndAmount(EntryStack stack); boolean equalsIgnoreTags(EntryStack stack); boolean equalsIgnoreAmount(EntryStack stack); boolean equalsAll(EntryStack stack); int getZ(); void setZ(int z); default ItemStack getItemStack() { if (getType() == Type.ITEM) return (ItemStack) getObject(); return null; } default Item getItem() { if (getType() == Type.ITEM) return ((ItemStack) getObject()).getItem(); return null; } default Fluid getFluid() { if (getType() == Type.FLUID) return (Fluid) getObject(); return null; } EntryStack setting(Settings settings, T value); EntryStack removeSetting(Settings settings); EntryStack clearSettings(); default EntryStack addSetting(Settings settings, T value) { return setting(settings, value); } ObjectHolder getSetting(Settings settings); @Nullable QueuedTooltip getTooltip(int mouseX, int mouseY); void render(Rectangle bounds, int mouseX, int mouseY, float delta); public static enum Type { ITEM, FLUID, EMPTY } public static class Settings { public static final Supplier TRUE = () -> true; public static final Supplier FALSE = () -> false; public static final Settings> RENDER = new Settings(TRUE); public static final Settings> CHECK_TAGS = new Settings(FALSE); public static final Settings> TOOLTIP_ENABLED = new Settings(TRUE); public static final Settings> TOOLTIP_APPEND_MOD = new Settings(TRUE); public static final Settings> RENDER_COUNTS = new Settings(TRUE); public static final Settings>> TOOLTIP_APPEND_EXTRA = new Settings>>(stack -> Collections.emptyList()); public static final Settings> COUNTS = new Settings>(stack -> null); private T defaultValue; public Settings(T defaultValue) { this.defaultValue = defaultValue; } public T getDefaultValue() { return defaultValue; } public static class Item { public static final Settings> RENDER_OVERLAY = new Settings(TRUE); private Item() { } } } }