aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-04-16 02:13:21 +0900
committershedaniel <daniel@shedaniel.me>2024-04-16 02:13:21 +0900
commitd0cbdaec7d80bc667d21e1a9a8805b075296abef (patch)
tree333d0edcde8752b26021f01d29289f4559ffb2b0 /default-plugin/src/main
parent7717b20cd2f41731bf94ce4c8ee44d3ed63e86f7 (diff)
downloadRoughlyEnoughItems-d0cbdaec7d80bc667d21e1a9a8805b075296abef.tar.gz
RoughlyEnoughItems-d0cbdaec7d80bc667d21e1a9a8805b075296abef.tar.bz2
RoughlyEnoughItems-d0cbdaec7d80bc667d21e1a9a8805b075296abef.zip
Properly display smithing trim recipes
Diffstat (limited to 'default-plugin/src/main')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java5
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java81
2 files changed, 41 insertions, 45 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
index 2f902826c..8db9c6837 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java
@@ -27,10 +27,7 @@ import com.google.common.collect.*;
import dev.architectury.event.EventResult;
import dev.architectury.networking.NetworkManager;
import dev.architectury.platform.Platform;
-import it.unimi.dsi.fastutil.objects.Object2FloatMap;
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
-import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
-import it.unimi.dsi.fastutil.objects.ReferenceSet;
import me.shedaniel.math.Rectangle;
import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
import me.shedaniel.rei.api.client.favorites.FavoriteEntryType;
@@ -309,7 +306,7 @@ public class DefaultClientPlugin implements REIClientPlugin, BuiltinClientPlugin
registry.registerRecipeFiller(StonecutterRecipe.class, RecipeType.STONECUTTING, DefaultStoneCuttingDisplay::new);
registry.registerRecipeFiller(LegacyUpgradeRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::new);
registry.registerRecipeFiller(SmithingTransformRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::new);
- registry.registerRecipeFiller(SmithingTrimRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::new);
+ registry.registerRecipesFiller(SmithingTrimRecipe.class, RecipeType.SMITHING, DefaultSmithingDisplay::from);
registry.registerFiller(AnvilRecipe.class, DefaultAnvilDisplay::new);
registry.registerFiller(BrewingRecipe.class, DefaultBrewingDisplay::new);
registry.registerFiller(TagKey.class, tagKey -> {
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
index 67210568b..5e2b2e5fc 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java
@@ -27,11 +27,11 @@ import me.shedaniel.rei.api.common.category.CategoryIdentifier;
import me.shedaniel.rei.api.common.display.basic.BasicDisplay;
import me.shedaniel.rei.api.common.entry.EntryIngredient;
import me.shedaniel.rei.api.common.util.EntryIngredients;
+import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
import net.minecraft.core.Holder;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceLocation;
-import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.armortrim.*;
import net.minecraft.world.item.crafting.LegacyUpgradeRecipe;
@@ -40,9 +40,9 @@ import net.minecraft.world.item.crafting.SmithingTransformRecipe;
import net.minecraft.world.item.crafting.SmithingTrimRecipe;
import org.jetbrains.annotations.ApiStatus;
+import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
-import java.util.function.Supplier;
public class DefaultSmithingDisplay extends BasicDisplay {
public DefaultSmithingDisplay(LegacyUpgradeRecipe recipe) {
@@ -67,7 +67,7 @@ public class DefaultSmithingDisplay extends BasicDisplay {
);
}
- @ApiStatus.Experimental
+ @Deprecated(forRemoval = true)
public DefaultSmithingDisplay(SmithingTrimRecipe recipe) {
this(
recipe,
@@ -79,44 +79,43 @@ public class DefaultSmithingDisplay extends BasicDisplay {
);
}
-// @ApiStatus.Experimental
-// public DefaultSmithingDisplay(SmithingTrimRecipe recipe) {
-// this(
-// List.of(
-// EntryIngredients.ofIngredient(recipe.template),
-// EntryIngredients.ofIngredient(recipe.base),
-// EntryIngredients.ofIngredient(recipe.addition)
-// ),
-// List.of(EntryIngredients.ofItemStacks(((Supplier<List<ItemStack>>) () -> {
-// RegistryAccess registryAccess = BasicDisplay.registryAccess();
-// ItemStack[] templateItems = recipe.template.getItems();
-// ItemStack[] baseItems = recipe.base.getItems();
-// if (templateItems.length != 0) {
-// Holder.Reference<TrimPattern> trimPattern = TrimPatterns.getFromTemplate(registryAccess, templateItems[0])
-// .orElse(null);
-// if (trimPattern != null) {
-// for (ItemStack additionItem : recipe.addition.getItems()) {
-// Holder.Reference<TrimMaterial> trimMaterial = TrimMaterials.getFromIngredient(registryAccess, additionItem)
-// .orElse(null);
-// if (trimMaterial != null) {
-// Optional<ArmorTrim> trim = ArmorTrim.getTrim(registryAccess, itemStack);
-// if (trim.isEmpty() || !trim.get().hasPatternAndMaterial(trimPattern, trimMaterial)) {
-// ItemStack itemStack2 = itemStack.copy();
-// itemStack2.setCount(1);
-// ArmorTrim armorTrim = new ArmorTrim((Holder) optional.get(), (Holder) optional2.get());
-// if (ArmorTrim.setTrim(registryAccess, itemStack2, armorTrim)) {
-// return itemStack2;
-// }
-// }
-// }
-// }
-// }
-// }
-// return List.of(recipe.getResultItem(registryAccess));
-// }).get())),
-// Optional.ofNullable(recipe.getId())
-// );
-// }
+ @ApiStatus.Experimental
+ public static List<DefaultSmithingDisplay> from(SmithingTrimRecipe recipe) {
+ RegistryAccess registryAccess = BasicDisplay.registryAccess();
+ List<DefaultSmithingDisplay> displays = new ArrayList<>();
+ for (ItemStack templateItem : recipe.template.getItems()) {
+ Holder.Reference<TrimPattern> trimPattern = TrimPatterns.getFromTemplate(registryAccess, templateItem)
+ .orElse(null);
+ if (trimPattern == null) continue;
+
+ for (ItemStack additionStack : recipe.addition.getItems()) {
+ Holder.Reference<TrimMaterial> trimMaterial = TrimMaterials.getFromIngredient(registryAccess, additionStack)
+ .orElse(null);
+ if (trimMaterial == null) continue;
+
+ ArmorTrim armorTrim = new ArmorTrim(trimMaterial, trimPattern);
+ EntryIngredient.Builder baseItems = EntryIngredient.builder(), outputItems = EntryIngredient.builder();
+ for (ItemStack item : recipe.base.getItems()) {
+ Optional<ArmorTrim> trim = ArmorTrim.getTrim(registryAccess, item);
+ if (trim.isEmpty() || !trim.get().hasPatternAndMaterial(trimPattern, trimMaterial)) {
+ ItemStack newItem = item.copy();
+ newItem.setCount(1);
+ if (ArmorTrim.setTrim(registryAccess, newItem, armorTrim)) {
+ baseItems.add(EntryStacks.of(item.copy()));
+ outputItems.add(EntryStacks.of(newItem));
+ }
+ }
+ }
+ displays.add(new DefaultSmithingDisplay(List.of(
+ EntryIngredients.of(templateItem),
+ baseItems.build(),
+ EntryIngredients.of(additionStack)
+ ), List.of(outputItems.build()),
+ Optional.ofNullable(recipe.getId())));
+ }
+ }
+ return displays;
+ }
public DefaultSmithingDisplay(SmithingRecipe recipe, List<EntryIngredient> inputs) {
this(