Skip to content

Commit ac03234

Browse files
committed
Added rename crafting recipe for variant holding items.
Signed-off-by: LtxPgm <ltxprogrammer@outlook.com>
1 parent 1a837fb commit ac03234

8 files changed

Lines changed: 188 additions & 1 deletion

File tree

‎src/main/java/net/ltxprogrammer/changed/init/ChangedRecipeSerializers.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import net.ltxprogrammer.changed.Changed;
44
import net.ltxprogrammer.changed.recipe.InfuserRecipe;
55
import net.ltxprogrammer.changed.recipe.ContainerFillingRecipe;
6+
import net.ltxprogrammer.changed.recipe.NameVariantRecipe;
67
import net.ltxprogrammer.changed.recipe.PurifierRecipe;
78
import net.minecraft.world.item.crafting.RecipeSerializer;
89
import net.minecraftforge.registries.DeferredRegister;
@@ -16,4 +17,5 @@ public class ChangedRecipeSerializers {
1617
public static RegistryObject<RecipeSerializer<PurifierRecipe>> PURIFIER_RECIPE = REGISTRY.register("purifier", PurifierRecipe.Serializer::new);
1718

1819
public static RegistryObject<RecipeSerializer<ContainerFillingRecipe>> CONTAINER_FILL_RECIPE = REGISTRY.register("crafting_container_fill", ContainerFillingRecipe.Serializer::new);
20+
public static RegistryObject<RecipeSerializer<NameVariantRecipe>> NAME_VARIANT_RECIPE = REGISTRY.register("name_variant", NameVariantRecipe.Serializer::new);
1921
}

‎src/main/java/net/ltxprogrammer/changed/item/Syringe.java‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import net.minecraft.advancements.CriteriaTriggers;
1313
import net.minecraft.core.BlockPos;
1414
import net.minecraft.nbt.CompoundTag;
15+
import net.minecraft.nbt.NbtUtils;
1516
import net.minecraft.network.chat.Component;
1617
import net.minecraft.resources.ResourceLocation;
1718
import net.minecraft.server.level.ServerPlayer;
@@ -87,7 +88,10 @@ else if (tag.contains("ownerName"))
8788
}
8889

8990
public static void addVariantTooltip(ItemStack stack, List<Component> builder) {
90-
if (stack.getOrCreateTag().contains("form")) {
91+
if (stack.getOrCreateTag().contains("variantName")) {
92+
builder.add(Component.Serializer.fromJson(stack.getOrCreateTag().getString("variantName")));
93+
}
94+
else if (stack.getOrCreateTag().contains("form")) {
9195
builder.add(Component.translatable(getVariantDescriptionId(stack)));
9296
}
9397
}
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package net.ltxprogrammer.changed.recipe;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.JsonParseException;
6+
import net.ltxprogrammer.changed.init.ChangedRecipeSerializers;
7+
import net.minecraft.core.NonNullList;
8+
import net.minecraft.core.RegistryAccess;
9+
import net.minecraft.network.FriendlyByteBuf;
10+
import net.minecraft.resources.ResourceLocation;
11+
import net.minecraft.util.GsonHelper;
12+
import net.minecraft.util.Mth;
13+
import net.minecraft.world.inventory.CraftingContainer;
14+
import net.minecraft.world.item.Item;
15+
import net.minecraft.world.item.ItemStack;
16+
import net.minecraft.world.item.Items;
17+
import net.minecraft.world.item.crafting.*;
18+
import net.minecraft.world.level.Level;
19+
import net.minecraftforge.registries.ForgeRegistries;
20+
import org.jetbrains.annotations.NotNull;
21+
22+
import java.util.Set;
23+
24+
public class NameVariantRecipe implements CraftingRecipe {
25+
private final ResourceLocation id;
26+
final String group;
27+
final Item variantHoldingItem;
28+
final ItemStack displayItem;
29+
30+
public NameVariantRecipe(ResourceLocation id, String group, Item variantHoldingItem) {
31+
this.id = id;
32+
this.group = group;
33+
this.variantHoldingItem = variantHoldingItem;
34+
this.displayItem = new ItemStack(variantHoldingItem);
35+
this.displayItem.getOrCreateTag().putString("variantName", "Your name here");
36+
}
37+
38+
@Override
39+
public ResourceLocation getId() {
40+
return id;
41+
}
42+
43+
@Override
44+
public CraftingBookCategory category() {
45+
return CraftingBookCategory.MISC;
46+
}
47+
48+
@Override
49+
public boolean matches(CraftingContainer container, Level level) {
50+
int nameTagStacks = 0;
51+
int itemStacks = 0;
52+
53+
for(int j = 0; j < container.getContainerSize(); ++j) {
54+
ItemStack itemstack = container.getItem(j);
55+
if (!itemstack.isEmpty()) {
56+
if (itemstack.is(Items.NAME_TAG) && itemstack.hasCustomHoverName())
57+
++nameTagStacks;
58+
else if (itemstack.is(variantHoldingItem)) {
59+
++itemStacks;
60+
} else {
61+
return false;
62+
}
63+
}
64+
}
65+
66+
return nameTagStacks == 1 && itemStacks == 1;
67+
}
68+
69+
@Override
70+
public ItemStack assemble(CraftingContainer container, RegistryAccess registryAccess) {
71+
ItemStack variantHoldingStack = ItemStack.EMPTY;
72+
ItemStack nameTagStack = ItemStack.EMPTY;
73+
74+
for (int j = 0; j < container.getContainerSize(); ++j) {
75+
ItemStack itemstack = container.getItem(j);
76+
if (!itemstack.isEmpty()) {
77+
if (itemstack.is(Items.NAME_TAG))
78+
nameTagStack = itemstack;
79+
else if (itemstack.is(variantHoldingItem))
80+
variantHoldingStack = itemstack;
81+
}
82+
}
83+
84+
var copy = variantHoldingStack.copy();
85+
copy.getOrCreateTag().put("variantName", nameTagStack.getTagElement("display").get("Name"));
86+
return copy;
87+
}
88+
89+
@Override
90+
public ItemStack getResultItem(RegistryAccess registryAccess) {
91+
return displayItem;
92+
}
93+
94+
@Override
95+
public boolean canCraftInDimensions(int width, int height) {
96+
return width * height >= 2;
97+
}
98+
99+
@Override
100+
public RecipeSerializer<?> getSerializer() {
101+
return ChangedRecipeSerializers.NAME_VARIANT_RECIPE.get();
102+
}
103+
104+
@Override
105+
public @NotNull String getGroup() {
106+
return group;
107+
}
108+
109+
public static class Serializer implements RecipeSerializer<NameVariantRecipe> {
110+
public NameVariantRecipe fromJson(ResourceLocation id, JsonObject json) {
111+
String group = GsonHelper.getAsString(json, "group", "");
112+
Item variantHoldingItem = ForgeRegistries.ITEMS.getValue(ResourceLocation.parse(json.get("item").getAsString()));
113+
assert variantHoldingItem != null;
114+
return new NameVariantRecipe(id, group, variantHoldingItem);
115+
}
116+
117+
public NameVariantRecipe fromNetwork(ResourceLocation id, FriendlyByteBuf buffer) {
118+
String group = buffer.readUtf();
119+
Item item = ForgeRegistries.ITEMS.getValue(ResourceLocation.parse(buffer.readUtf()));
120+
return new NameVariantRecipe(id, group, item);
121+
}
122+
123+
public void toNetwork(FriendlyByteBuf buffer, NameVariantRecipe recipe) {
124+
buffer.writeUtf(recipe.group);
125+
buffer.writeUtf(ForgeRegistries.ITEMS.getKey(recipe.variantHoldingItem).toString());
126+
}
127+
}
128+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"parent": "minecraft:recipes/root",
3+
"rewards": {
4+
"recipes": [
5+
"changed:name_dark_latex_mask",
6+
"changed:name_latex_flask",
7+
"changed:name_latex_syringe",
8+
"changed:name_latex_tipped_arrow"
9+
]
10+
},
11+
"criteria": {
12+
"has_name_tag": {
13+
"trigger": "minecraft:inventory_changed",
14+
"conditions": {
15+
"items": [
16+
{
17+
"items": [
18+
"minecraft:name_tag"
19+
]
20+
}
21+
]
22+
}
23+
},
24+
"has_the_recipe": {
25+
"trigger": "minecraft:recipe_unlocked",
26+
"conditions": {
27+
"recipe": "changed:name_dark_latex_mask"
28+
}
29+
}
30+
},
31+
"requirements": [
32+
[
33+
"has_name_tag",
34+
"has_the_recipe"
35+
]
36+
]
37+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "changed:name_variant",
3+
"item": "changed:dark_latex_mask"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "changed:name_variant",
3+
"item": "changed:latex_flask"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "changed:name_variant",
3+
"item": "changed:latex_syringe"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "changed:name_variant",
3+
"item": "changed:latex_tipped_arrow"
4+
}

0 commit comments

Comments
 (0)