aboutsummaryrefslogtreecommitdiff
path: root/default-plugin/src/main/java/me/shedaniel/rei/plugin/common
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2024-04-17 03:02:10 +0900
committershedaniel <daniel@shedaniel.me>2024-04-17 03:02:10 +0900
commitc8aac81ec745aca534b301185af61c7b35d35025 (patch)
treeb245df3e01c2ed78fa3597631bd8c326e9cb6add /default-plugin/src/main/java/me/shedaniel/rei/plugin/common
parente29f11ef35729271299b7f23218e3c29e5e4bde3 (diff)
parent1ada31ed1507733e0a45d51f3b5c9a198af4bd58 (diff)
downloadRoughlyEnoughItems-c8aac81ec745aca534b301185af61c7b35d35025.tar.gz
RoughlyEnoughItems-c8aac81ec745aca534b301185af61c7b35d35025.tar.bz2
RoughlyEnoughItems-c8aac81ec745aca534b301185af61c7b35d35025.zip
Merge remote-tracking branch 'origin/13.x-1.20.2' into 14.x-1.20.4
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/anvil/AnvilRecipe.java11
-rw-r--r--default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java55
2 files changed, 60 insertions, 6 deletions
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/AnvilRecipe.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/AnvilRecipe.java
index ba4f70458..694868145 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/AnvilRecipe.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/AnvilRecipe.java
@@ -28,6 +28,7 @@ import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.Nullable;
import java.util.List;
+import java.util.OptionalInt;
public class AnvilRecipe {
@Nullable
@@ -35,12 +36,18 @@ public class AnvilRecipe {
private final List<ItemStack> leftInput;
private final List<ItemStack> rightInputs;
private final List<ItemStack> outputs;
+ private final OptionalInt cost;
public AnvilRecipe(@Nullable ResourceLocation id, List<ItemStack> leftInput, List<ItemStack> rightInputs, List<ItemStack> outputs) {
+ this(id, leftInput, rightInputs, outputs, OptionalInt.empty());
+ }
+
+ public AnvilRecipe(@Nullable ResourceLocation id, List<ItemStack> leftInput, List<ItemStack> rightInputs, List<ItemStack> outputs, OptionalInt cost) {
this.id = id;
this.leftInput = leftInput;
this.rightInputs = rightInputs;
this.outputs = outputs;
+ this.cost = cost;
}
public ResourceLocation getId() {
@@ -58,4 +65,8 @@ public class AnvilRecipe {
public List<ItemStack> getOutputs() {
return outputs;
}
+
+ public OptionalInt getCost() {
+ return cost;
+ }
}
diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
index 0c2b5e655..befc8d143 100644
--- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
+++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/common/displays/anvil/DefaultAnvilDisplay.java
@@ -28,14 +28,20 @@ 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.plugin.common.BuiltinPlugin;
+import net.minecraft.client.Minecraft;
+import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
+import net.minecraft.world.entity.player.Inventory;
+import net.minecraft.world.inventory.AnvilMenu;
+import net.minecraft.world.item.ItemStack;
+import org.apache.commons.lang3.tuple.Pair;
+import org.jetbrains.annotations.ApiStatus;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
public class DefaultAnvilDisplay extends BasicDisplay {
+ private final OptionalInt cost;
+
public DefaultAnvilDisplay(AnvilRecipe recipe) {
this(
Arrays.asList(
@@ -43,12 +49,22 @@ public class DefaultAnvilDisplay extends BasicDisplay {
EntryIngredients.ofItemStacks(recipe.getRightInputs())
),
Collections.singletonList(EntryIngredients.ofItemStacks(recipe.getOutputs())),
- Optional.ofNullable(recipe.getId())
+ Optional.ofNullable(recipe.getId()),
+ recipe.getCost()
);
}
public DefaultAnvilDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location) {
+ this(inputs, outputs, location, OptionalInt.empty());
+ }
+
+ public DefaultAnvilDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, CompoundTag tag) {
+ this(inputs, outputs, location, tag.contains("Cost") ? OptionalInt.of(tag.getInt("Cost")) : OptionalInt.empty());
+ }
+
+ public DefaultAnvilDisplay(List<EntryIngredient> inputs, List<EntryIngredient> outputs, Optional<ResourceLocation> location, OptionalInt cost) {
super(inputs, outputs, location);
+ this.cost = cost;
}
@Override
@@ -56,7 +72,34 @@ public class DefaultAnvilDisplay extends BasicDisplay {
return BuiltinPlugin.ANVIL;
}
+ public OptionalInt getCost() {
+ return cost;
+ }
+
public static BasicDisplay.Serializer<DefaultAnvilDisplay> serializer() {
- return BasicDisplay.Serializer.ofSimple(DefaultAnvilDisplay::new);
+ return BasicDisplay.Serializer.of(DefaultAnvilDisplay::new, (display, tag) -> {
+ if (display.getCost().isPresent()) {
+ tag.putInt("Cost", display.getCost().getAsInt());
+ }
+ });
+ }
+
+ @ApiStatus.Experimental
+ @ApiStatus.Internal
+ public static Optional<Pair<ItemStack, Integer>> calculateOutput(ItemStack left, ItemStack right) {
+ try {
+ if (Minecraft.getInstance().player == null) return Optional.empty();
+ AnvilMenu menu = new AnvilMenu(0, new Inventory(Minecraft.getInstance().player));
+ menu.setItem(0, menu.incrementStateId(), left);
+ menu.setItem(1, menu.incrementStateId(), right);
+ ItemStack output = menu.getSlot(2).getItem().copy();
+ if (!output.isEmpty()) {
+ return Optional.of(Pair.of(output, menu.getCost()));
+ } else {
+ return Optional.empty();
+ }
+ } catch (Throwable ignored) {
+ return Optional.empty();
+ }
}
}