diff options
Diffstat (limited to 'RoughlyEnoughItems-api/src/main/java')
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 |
