aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main/java/me/shedaniel/rei/plugin/common
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-09-17 14:06:55 +0800
committershedaniel <daniel@shedaniel.me>2024-09-17 14:10:43 +0800
commitccf3dcd60aa6c1d079dd57c59d9a89c2ca60b1e7 (patch)
tree2fc4f5f476dfd64519c413bf56559fae8a4f1d63 /default-plugin/src/main/java/me/shedaniel/rei/plugin/common
parent97adf5d548ddb76d94e1c0542573cd21b7c6827c (diff)
parentb666943c4f14cfc6a8f1db7d3ac7fa2c7c0519da (diff)
downloadRoughlyEnoughItems-ccf3dcd60aa6c1d079dd57c59d9a89c2ca60b1e7.tar.gz
RoughlyEnoughItems-ccf3dcd60aa6c1d079dd57c59d9a89c2ca60b1e7.tar.bz2
RoughlyEnoughItems-ccf3dcd60aa6c1d079dd57c59d9a89c2ca60b1e7.zip
Merge remote-tracking branch 'origin/11.x-1.19.4' into 12.x-1.20
# Conflicts: # default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java # fabric/src/main/resources/roughlyenoughitems.accessWidener # forge/src/main/resources/META-INF/accesstransformer.cfg
Diffstat (limited to 'default-plugin/src/main/java/me/shedaniel/rei/plugin/common')
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/DefaultSmithingDisplay.java76
1 files changed, 59 insertions, 17 deletions
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 0c45a469b..7b610b9b7 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
@@ -26,6 +26,8 @@ package me.shedaniel.rei.plugin.common.displays;
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.entry.EntryStack;
+import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes;
import me.shedaniel.rei.api.common.util.EntryIngredients;
import me.shedaniel.rei.api.common.util.EntryStacks;
import me.shedaniel.rei.plugin.common.BuiltinPlugin;
@@ -38,12 +40,16 @@ import net.minecraft.world.item.crafting.SmithingRecipe;
import net.minecraft.world.item.crafting.SmithingTransformRecipe;
import net.minecraft.world.item.crafting.SmithingTrimRecipe;
import org.jetbrains.annotations.ApiStatus;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class DefaultSmithingDisplay extends BasicDisplay {
+ @Nullable
+ private final SmithingRecipeType type;
+
@ApiStatus.Experimental
public DefaultSmithingDisplay(SmithingTransformRecipe recipe) {
this(
@@ -82,25 +88,15 @@ public class DefaultSmithingDisplay extends BasicDisplay {
.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));
- }
- }
- }
+ EntryIngredient baseIngredient = EntryIngredients.ofIngredient(recipe.base);
+ EntryIngredient templateOutput = baseIngredient.isEmpty() ? EntryIngredient.empty()
+ : getTrimmingOutput(registryAccess, EntryStacks.of(templateItem), baseIngredient.get(0), EntryStacks.of(additionStack));
+
displays.add(new DefaultSmithingDisplay(List.of(
EntryIngredients.of(templateItem),
- baseItems.build(),
+ baseIngredient,
EntryIngredients.of(additionStack)
- ), List.of(outputItems.build()),
- Optional.ofNullable(recipe.getId())));
+ ), List.of(templateOutput), SmithingRecipeType.TRIM, Optional.ofNullable(recipe.getId())));
}
}
return displays;
@@ -115,7 +111,13 @@ public class DefaultSmithingDisplay extends BasicDisplay {
}
public DefaultSmithingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location) {
+ this(inputs, outputs, null, location);
+ }
+
+ @ApiStatus.Experimental
+ public DefaultSmithingDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, @Nullable SmithingRecipeType type, Optional<ResourceLocation> location) {
super(inputs, outputs, location);
+ this.type = type;
}
@Override
@@ -123,7 +125,47 @@ public class DefaultSmithingDisplay extends BasicDisplay {
return BuiltinPlugin.SMITHING;
}
+ @ApiStatus.Experimental
+ @Nullable
+ public SmithingRecipeType getType() {
+ return type;
+ }
+
public static BasicDisplay.Serializer<DefaultSmithingDisplay> serializer() {
- return BasicDisplay.Serializer.ofSimple(DefaultSmithingDisplay::new);
+ return BasicDisplay.Serializer.of((input, output, id, tag) -> {
+ SmithingRecipeType type = tag.contains("Type") ? SmithingRecipeType.valueOf(tag.getString("Type")) : null;
+ return new DefaultSmithingDisplay(input, output, type, id);
+ }, (display, tag) -> {
+ if (display.type != null) tag.putString("Type", display.type.name());
+ });
+ }
+
+ @ApiStatus.Experimental
+ public enum SmithingRecipeType {
+ TRIM,
+ TRANSFORM
+ }
+
+ @ApiStatus.Experimental
+ @ApiStatus.Internal
+ public static EntryIngredient getTrimmingOutput(RegistryAccess registryAccess, EntryStack<?> template, EntryStack<?> base, EntryStack<?> addition) {
+ if (template.getType() != VanillaEntryTypes.ITEM || base.getType() != VanillaEntryTypes.ITEM || addition.getType() != VanillaEntryTypes.ITEM) return EntryIngredient.empty();
+ ItemStack templateItem = template.castValue();
+ ItemStack baseItem = base.castValue();
+ ItemStack additionItem = addition.castValue();
+ Holder.Reference<TrimPattern> trimPattern = TrimPatterns.getFromTemplate(registryAccess, templateItem)
+ .orElse(null);
+ if (trimPattern == null) return EntryIngredient.empty();
+ Holder.Reference<TrimMaterial> trimMaterial = TrimMaterials.getFromIngredient(registryAccess, additionItem)
+ .orElse(null);
+ if (trimMaterial == null) return EntryIngredient.empty();
+ ArmorTrim armorTrim = new ArmorTrim(trimMaterial, trimPattern);
+ Optional<ArmorTrim> trim = ArmorTrim.getTrim(registryAccess, baseItem);
+ if (trim.isPresent() && trim.get().hasPatternAndMaterial(trimPattern, trimMaterial)) return EntryIngredient.empty();
+ ItemStack newItem = baseItem.copy();
+ newItem.setCount(1);
+ if (ArmorTrim.setTrim(registryAccess, newItem, armorTrim)) {
+ return EntryIngredients.of(newItem);
+ } else return EntryIngredient.empty();
}
}