aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-api/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'RoughlyEnoughItems-api/src/main/java')
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java4
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ClientHelper.java23
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ConfigObject.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryRegistry.java20
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java302
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/FocusedStackProvider.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/LiveRecipeGenerator.java4
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/OverlayDecider.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/RecipeCategory.java10
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/RecipeDisplay.java7
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/RecipeHelper.java28
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/Renderer.java20
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/TextRepresentable.java7
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/TransferRecipeDisplay.java3
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/AbstractEntryRenderer.java6
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/AbstractRenderer.java16
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/BatchEntryRenderer.java38
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/BuiltinEntryTypes.java14
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/ComparisonContext.java36
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryDefinition.java55
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryRenderer.java15
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryStacks.java164
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryType.java25
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryTypeBridge.java11
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/EntryTypeRegistry.java24
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/entry/VanillaEntryTypes.java12
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/favorites/FavoriteEntry.java3
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fluid/FluidSupportProvider.java7
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/fractions/Fraction.java186
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/plugins/REIPluginV0.java8
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/subsets/SubsetsRegistry.java12
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/widgets/Slot.java6
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/config/AppearanceTheme.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/config/ConfigButtonPosition.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/config/DisplayPanelLocation.java2
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/entries/RecipeRenderer.java (renamed from RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/entries/RecipeEntry.java)12
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeRenderer.java (renamed from RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/gui/entries/SimpleRecipeEntry.java)45
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/Internals.java25
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/impl/RenderingEntry.java71
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/CollectionUtils.java29
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/EntryStackCompoundList.java21
-rw-r--r--RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/utils/EntryStackList.java20
42 files changed, 700 insertions, 601 deletions
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java
index 057ac2613..f0d3b112a 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/BuiltinPlugin.java
@@ -62,9 +62,9 @@ public interface BuiltinPlugin {
void registerBrewingRecipe(Ingredient input, Ingredient ingredient, ItemStack output);
- void registerInformation(List<EntryStack> entryStacks, Component name, UnaryOperator<List<Component>> textBuilder);
+ void registerInformation(List<? extends EntryStack<?>> entryStacks, Component name, UnaryOperator<List<Component>> textBuilder);
- default void registerInformation(EntryStack entryStack, Component name, UnaryOperator<List<Component>> textBuilder) {
+ default void registerInformation(EntryStack<?> entryStack, Component name, UnaryOperator<List<Component>> textBuilder) {
registerInformation(Collections.singletonList(entryStack), name, textBuilder);
}
}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ClientHelper.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ClientHelper.java
index ddb17e63f..36b61033a 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ClientHelper.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ClientHelper.java
@@ -35,7 +35,6 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -76,11 +75,7 @@ public interface ClientHelper {
* @param stack the stack to cheat in
* @return whether it failed
*/
- boolean tryCheatingEntry(EntryStack stack);
-
- default boolean tryCheatingStack(ItemStack stack) {
- return tryCheatingEntry(EntryStack.create(stack));
- }
+ boolean tryCheatingEntry(EntryStack<?> stack);
/**
* Gets the mod from an item
@@ -190,13 +185,13 @@ public interface ClientHelper {
@NotNull Set<ResourceLocation> getCategories();
- ViewSearchBuilder addRecipesFor(EntryStack stack);
+ ViewSearchBuilder addRecipesFor(EntryStack<?> stack);
- @NotNull List<EntryStack> getRecipesFor();
+ @NotNull List<EntryStack<?>> getRecipesFor();
- ViewSearchBuilder addUsagesFor(EntryStack stack);
+ ViewSearchBuilder addUsagesFor(EntryStack<?> stack);
- @NotNull List<EntryStack> getUsagesFor();
+ @NotNull List<EntryStack<?>> getUsagesFor();
ViewSearchBuilder setPreferredOpenedCategory(@Nullable ResourceLocation category);
@@ -205,15 +200,15 @@ public interface ClientHelper {
ViewSearchBuilder fillPreferredOpenedCategory();
- ViewSearchBuilder setInputNotice(@Nullable EntryStack stack);
+ ViewSearchBuilder setInputNotice(@Nullable EntryStack<?> stack);
@Nullable
- EntryStack getInputNotice();
+ EntryStack<?> getInputNotice();
- ViewSearchBuilder setOutputNotice(@Nullable EntryStack stack);
+ ViewSearchBuilder setOutputNotice(@Nullable EntryStack<?> stack);
@Nullable
- EntryStack getOutputNotice();
+ EntryStack<?> getOutputNotice();
@NotNull
Map<RecipeCategory<?>, List<RecipeDisplay>> buildMap();
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ConfigObject.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ConfigObject.java
index d193b1bc4..d8210bbc2 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ConfigObject.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/ConfigObject.java
@@ -139,7 +139,7 @@ public interface ConfigObject {
@ApiStatus.Experimental
List<FavoriteEntry> getFavoriteEntries();
- List<EntryStack> getFilteredStacks();
+ List<EntryStack<?>> getFilteredStacks();
@ApiStatus.Experimental
boolean shouldAsyncSearch();
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryRegistry.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryRegistry.java
index 369862794..d93701e09 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryRegistry.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryRegistry.java
@@ -50,10 +50,10 @@ public interface EntryRegistry {
}
@NotNull
- Stream<EntryStack> getEntryStacks();
+ Stream<EntryStack<?>> getEntryStacks();
@NotNull
- List<EntryStack> getPreFilteredList();
+ List<EntryStack<?>> getPreFilteredList();
@ApiStatus.Experimental
void refilter();
@@ -70,7 +70,7 @@ public interface EntryRegistry {
@NotNull
ItemStack[] getAllStacksFromItem(@NotNull Item item);
- default void registerEntry(@NotNull EntryStack stack) {
+ default void registerEntry(@NotNull EntryStack<?> stack) {
registerEntryAfter(null, stack);
}
@@ -80,7 +80,7 @@ public interface EntryRegistry {
* @param afterEntry the stack to put after
* @param stack the stack to register
*/
- void registerEntryAfter(@Nullable EntryStack afterEntry, @NotNull EntryStack stack);
+ void registerEntryAfter(@Nullable EntryStack<?> afterEntry, @NotNull EntryStack<?> stack);
/**
* Registers multiple stacks to the item list
@@ -88,7 +88,7 @@ public interface EntryRegistry {
* @param afterStack the stack to put after
* @param stacks the stacks to register
*/
- default void registerEntriesAfter(@Nullable EntryStack afterStack, @NotNull EntryStack... stacks) {
+ default void registerEntriesAfter(@Nullable EntryStack<?> afterStack, @NotNull EntryStack<?>... stacks) {
registerEntriesAfter(afterStack, Arrays.asList(stacks));
}
@@ -98,14 +98,14 @@ public interface EntryRegistry {
* @param afterStack the stack to put after
* @param stacks the stacks to register
*/
- void registerEntriesAfter(@Nullable EntryStack afterStack, @NotNull Collection<@NotNull ? extends EntryStack> stacks);
+ void registerEntriesAfter(@Nullable EntryStack<?> afterStack, @NotNull Collection<@NotNull ? extends EntryStack<?>> stacks);
/**
* Registers multiple stacks to the item list
*
* @param stacks the stacks to register
*/
- default void registerEntries(@NotNull EntryStack... stacks) {
+ default void registerEntries(@NotNull EntryStack<?>... stacks) {
registerEntriesAfter(null, stacks);
}
@@ -115,11 +115,11 @@ public interface EntryRegistry {
* @param stack the stack to check
* @return whether the stack has been registered
*/
- boolean alreadyContain(EntryStack stack);
+ boolean alreadyContain(EntryStack<?> stack);
@ApiStatus.Experimental
- void removeEntry(EntryStack stack);
+ void removeEntry(EntryStack<?> stack);
@ApiStatus.Experimental
- void removeEntryIf(Predicate<EntryStack> stackPredicate);
+ void removeEntryIf(Predicate<EntryStack<?>> stackPredicate);
}
diff --git a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
index fb117d3b8..19204804f 100644
--- a/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
+++ b/RoughlyEnoughItems-api/src/main/java/me/shedaniel/rei/api/EntryStack.java
@@ -23,145 +23,57 @@
package me.shedaniel.rei.api;
-import com.google.common.collect.ImmutableList;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
-import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.serialization.Dynamic;
import com.mojang.serialization.JsonOps;
-import me.shedaniel.math.Point;
-import me.shedaniel.math.Rectangle;
-import me.shedaniel.rei.api.fluid.FluidSupportProvider;
-import me.shedaniel.rei.api.fractions.Fraction;
-import me.shedaniel.rei.api.widgets.Tooltip;
+import me.shedaniel.architectury.utils.Fraction;
+import me.shedaniel.rei.api.entry.ComparisonContext;
+import me.shedaniel.rei.api.entry.EntryDefinition;
+import me.shedaniel.rei.api.entry.EntryRenderer;
+import me.shedaniel.rei.api.entry.EntryType;
import me.shedaniel.rei.impl.Internals;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.resources.language.I18n;
-import net.minecraft.core.Registry;
-import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
import net.minecraft.nbt.TagParser;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.GsonHelper;
-import net.minecraft.world.item.Item;
-import net.minecraft.world.item.ItemStack;
-import net.minecraft.world.item.crafting.Ingredient;
-import net.minecraft.world.level.ItemLike;
-import net.minecraft.world.level.material.Fluid;
+import net.minecraft.util.Unit;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
import java.util.function.Function;
import java.util.function.Supplier;
-import java.util.stream.Stream;
@Environment(EnvType.CLIENT)
-public interface EntryStack extends TextRepresentable {
-
- static EntryStack empty() {
+public interface EntryStack<T> extends TextRepresentable, Renderer {
+ static EntryStack<Unit> empty() {
return Internals.getEntryStackProvider().empty();
}
- static EntryStack create(Fluid fluid) {
- return Internals.getEntryStackProvider().fluid(fluid);
- }
-
- static EntryStack create(Fluid fluid, int amount) {
- return create(fluid, Fraction.ofWhole(amount));
- }
-
- static EntryStack create(Fluid fluid, double amount) {
- return create(fluid, Fraction.from(amount));
- }
-
- static EntryStack create(Fluid fluid, Fraction amount) {
- return Internals.getEntryStackProvider().fluid(fluid, amount);
- }
-
- static EntryStack create(ItemStack stack) {
- return Internals.getEntryStackProvider().item(stack);
- }
-
- static EntryStack create(ItemLike item) {
- return create(new ItemStack(item));
- }
-
- static List<EntryStack> ofItems(Collection<ItemLike> stacks) {
- if (stacks.size() == 0) return Collections.emptyList();
- if (stacks.size() == 1) return Collections.singletonList(create(stacks.iterator().next()));
- EntryStack[] result = new EntryStack[stacks.size()];
- int i = 0;
- for (ItemLike stack : stacks) {
- result[i] = create(stack);
- i++;
- }
- return Arrays.asList(result);
- }
-
- static List<EntryStack> ofItemStacks(Collection<ItemStack> stacks) {
- if (stacks.size() == 0) return Collections.emptyList();
- if (stacks.size() == 1) {
- ItemStack stack = stacks.iterator().next();
- if (stack.isEmpty()) return Collections.emptyList();
- return Collections.singletonList(create(stack));
- }
- List<EntryStack> result = new ArrayList<>(stacks.size());
- for (ItemStack stack : stacks) {
- result.add(create(stack));
- }
- return ImmutableList.copyOf(result);
- }
-
- static List<EntryStack> ofIngredient(Ingredient ingredient) {
- if (ingredient.isEmpty()) return Collections.emptyList();
- ItemStack[] matchingStacks = ingredient.getItems();
- if (matchingStacks.length == 0) return Collections.emptyList();
- if (matchingStacks.length == 1) return Collections.singletonList(create(matchingStacks[0]));
- List<EntryStack> result = new ArrayList<>(matchingStacks.length);
- for (ItemStack matchingStack : matchingStacks) {
- if (!matchingStack.isEmpty())
- result.add(create(matchingStack));
- }
- return ImmutableList.copyOf(result);
+ static <T> EntryStack<T> of(EntryDefinition<T> definition, T value) {
+ return Internals.getEntryStackProvider().of(definition, value);
}
- static List<List<EntryStack>> ofIngredients(List<Ingredient> ingredients) {
- if (ingredients.size() == 0) return Collections.emptyList();
- if (ingredients.size() == 1) {
- Ingredient ingredient = ingredients.get(0);
- if (ingredient.isEmpty()) return Collections.emptyList();
- return Collections.singletonList(ofIngredient(ingredient));
- }
- boolean emptyFlag = true;
- List<List<EntryStack>> result = new ArrayList<>(ingredients.size());
- for (int i = ingredients.size() - 1; i >= 0; i--) {
- Ingredient ingredient = ingredients.get(i);
- if (emptyFlag && ingredient.isEmpty()) continue;
- result.add(0, ofIngredient(ingredient));
- emptyFlag = false;
- }
- return ImmutableList.copyOf(result);
+ static <T> EntryStack<T> of(EntryType<T> type, T value) {
+ return of(type.getDefinition(), value);
}
@ApiStatus.Internal
- static EntryStack readFromJson(JsonElement jsonElement) {
+ static EntryStack<?> readFromJson(JsonElement jsonElement) {
try {
JsonObject obj = jsonElement.getAsJsonObject();
- switch (GsonHelper.getAsString(obj, "type")) {
- case "stack":
- return EntryStack.create(ItemStack.of(TagParser.parseTag(obj.get("nbt").getAsString())));
- case "item":
- return EntryStack.create(ItemStack.of((CompoundTag) Dynamic.convert(JsonOps.INSTANCE, NbtOps.INSTANCE, obj)));
- case "fluid":
- return EntryStack.create(Registry.FLUID.get(ResourceLocation.tryParse(obj.get("id").getAsString())));
- case "empty":
- return EntryStack.empty();
- default:
- throw new IllegalArgumentException("Invalid Entry Type!");
- }
+ EntryType<Object> type = EntryType.deferred(new ResourceLocation(GsonHelper.getAsString(obj, "type")));
+ Object o = type.getDefinition().fromTag(TagParser.parseTag(obj.toString()));
+ return EntryStack.of(type, o);
} catch (Exception e) {
e.printStackTrace();
return EntryStack.empty();
@@ -172,158 +84,69 @@ public interface EntryStack extends TextRepresentable {
@Nullable
default JsonElement toJson() {
try {
- switch (getType()) {
- case ITEM:
- JsonObject obj1 = Dynamic.convert(NbtOps.INSTANCE, JsonOps.INSTANCE, getItemStack().save(new CompoundTag())).getAsJsonObject();
- obj1.addProperty("type", "item");
- return obj1;
- case FLUID:
- Optional<ResourceLocation> optionalIdentifier = getIdentifier();
- if (!optionalIdentifier.isPresent())
- throw new NullPointerException("Invalid Fluid: " + toString());
- JsonObject obj2 = new JsonObject();
- obj2.addProperty("type", "fluid");
- obj2.addProperty("id", optionalIdentifier.get().toString());
- return obj2;
- case EMPTY:
- JsonObject obj3 = new JsonObject();
- obj3.addProperty("type", "empty");
- return obj3;
- default:
- throw new IllegalArgumentException("Invalid Entry Type!");
- }
+ JsonObject object = Dynamic.convert(NbtOps.INSTANCE, JsonOps.INSTANCE, getDefinition().toTag(this, getValue())).getAsJsonObject();
+ object.addProperty("type", getType().getId().toString());
+ return object;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
- static Stream<EntryStack> copyItemToFluids(EntryStack stack) {
- return FluidSupportProvider.getInstance().itemToFluids(stack);
- }
+ @NotNull
+ EntryDefinition<T> getDefinition();
- Optional<ResourceLocation> getIdentifier();
-
- EntryStack.Type getType();
-
- default int getAmount() {
- return getAccurateAmount().intValue();
+ @NotNull
+ default EntryType<T> getType() {
+ return getDefinition().getType();
}
- Fraction getAccurateAmount();
-
- default double getFloatingAmount() {
- return getAccurateAmount().doubleValue();
+ @NotNull
+ default Class<T> getValueType() {
+ return getDefinition().getValueType();
}
- default void setAmount(int amount) {
- setAmount(Fraction.ofWhole(amount));
+ @NotNull
+ default EntryRenderer<T> getRenderer() {
+ return getDefinition().getRenderer();
}
- default void setFloatingAmount(double amount) {
- setAmount(Fraction.from(amount));
- }
+ Optional<ResourceLocation> getIdentifier();
+
+ Fraction getAmount();
void setAmount(Fraction amount);
boolean isEmpty();
- EntryStack copy();
+ EntryStack<T> copy();
@ApiStatus.Internal
- default EntryStack rewrap() {
+ default EntryStack<T> rewrap() {
return copy();
}
- Object getObject();
-
- boolean equals(EntryStack stack, boolean ignoreTags, boolean ignoreAmount);
+ @Deprecated
+ int hashCode();
- boolean equalsIgnoreTagsAndAmount(EntryStack stack);
+ int hash(ComparisonContext context);
- boolean equalsIgnoreTags(EntryStack stack);
+ boolean equals(EntryStack<T> other, ComparisonContext context);
- boolean equalsIgnoreAmount(EntryStack stack);
+ @Deprecated
+ boolean equals(Object o);
- boolean equalsAll(EntryStack stack);
+ T getValue();
- /**
- * {@link #hashCode()} for {@link #equalsAll(EntryStack)}.
- */
- default int hashOfAll() {
- return hashCode();
- }
+ <R> EntryStack<T> setting(Settings<R> settings, R value);
- /**
- * {@link #hashCode()} for {@link #equalsIgnoreAmount(EntryStack)}
- */
- default int hashIgnoreAmount() {
- return hashCode();
- }
+ <R> EntryStack<T> removeSetting(Settings<R> settings);
- /**
- * {@link #hashCode()} for {@link #equalsIgnoreTags(EntryStack)}
- */
- default int hashIgnoreTags() {
- return hashCode();
- }
+ EntryStack<T> clearSettings();
- /**
- * {@link #hashCode()} for {@link #equalsIgnoreTagsAndAmount(EntryStack)}
- */
- default int hashIgnoreAmountAndTags() {
- return hashCode();
- }
+ <R> R get(Settings<R> settings);
- 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;
- }
-
- <T> EntryStack setting(Settings<T> settings, T value);
-
- <T> EntryStack removeSetting(Settings<T> settings);
-
- EntryStack clearSettings();
-
- default <T> EntryStack addSetting(Settings<T> settings, T value) {
- return setting(settings, value);
- }
-
- <T> T get(Settings<T> settings);
-
- @Nullable
- default Tooltip getTooltip(Point mouse) {
- return null;
- }
-
- void render(PoseStack matrices, Rectangle bounds, int mouseX, int mouseY, float delta);
-
- enum Type {
- ITEM,
- FLUID,
- EMPTY,
- RENDER
- }
-
- class Settings<T> {
+ class Settings<R> {
@ApiStatus.Internal
private static final List<Settings<?>> SETTINGS = new ArrayList<>();
@@ -335,26 +158,26 @@ public interface EntryStack extends TextRepresentable {
public static final Settings<Supplier<Boolean>> TOOLTIP_ENABLED = new Settings<>(TRUE);
public static final Settings<Supplier<Boolean>> TOOLTIP_APPEND_MOD = new Settings<>(TRUE);
public static final Settings<Supplier<Boolean>> RENDER_COUNTS = new Settings<>(TRUE);
- public static final Settings<Function<EntryStack, List<Component>>> TOOLTIP_APPEND_EXTRA = new Settings<>(stack -> Collections.emptyList());
- public static final Settings<Function<EntryStack, String>> COUNTS = new Settings<>(stack -> null);
+ public static final Sett