Skip to content

Commit ef8eaaf

Browse files
committed
able to create custom recipe type, trying to implement recipe type to polym_table
1 parent 8f23aa0 commit ef8eaaf

File tree

7 files changed

+117
-53
lines changed

7 files changed

+117
-53
lines changed
Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.junnio.polycoin.block;
22

3+
import com.junnio.polycoin.recipe.PolymTableCraftingRecipe;
34
import net.minecraft.entity.player.PlayerEntity;
45
import net.minecraft.entity.player.PlayerInventory;
56
import net.minecraft.inventory.CraftingResultInventory;
@@ -19,54 +20,12 @@
1920

2021
import java.util.Optional;
2122

22-
public class PolymTableScreenHandler extends CraftingScreenHandler {
23+
public class PolymTableScreenHandler extends CraftingScreenHandler {
2324
private final PlayerEntity customPlayer;
2425
private final ScreenHandlerContext customContext;
2526
public PolymTableScreenHandler(int syncId, PlayerInventory playerInventory, ScreenHandlerContext context) {
2627
super(syncId, playerInventory, context);
2728
this.customPlayer = playerInventory.player;
2829
this.customContext = context;
2930
}
30-
31-
32-
@Override
33-
public boolean canUse(PlayerEntity player) {
34-
return true;
35-
}
36-
@Override
37-
public void onContentChanged(Inventory inventory) {
38-
customContext.run((world, pos) -> {
39-
if (world instanceof ServerWorld serverWorld) {
40-
updateResult(this, serverWorld, customPlayer, this.craftingInventory, this.craftingResultInventory, null);
41-
}
42-
});
43-
}
44-
45-
// This method overrides vanilla result crafting
46-
public static void updateResult(ScreenHandler handler, ServerWorld world, PlayerEntity player,
47-
RecipeInputInventory craftingInventory,
48-
CraftingResultInventory resultInventory,
49-
RecipeEntry<CraftingRecipe> recipe) {
50-
ItemStack itemStack = ItemStack.EMPTY;
51-
ServerPlayerEntity serverPlayerEntity = (ServerPlayerEntity)player;
52-
CraftingRecipeInput craftingRecipeInput = craftingInventory.createRecipeInput();
53-
resultInventory.setStack(0, itemStack);
54-
handler.setPreviousTrackedSlot(0, itemStack);
55-
Optional<RecipeEntry<CraftingRecipe>> optional = world.getServer().getRecipeManager().getFirstMatch(RecipeType.CRAFTING, craftingRecipeInput, world, recipe);
56-
if (optional.isPresent()) {
57-
RecipeEntry<CraftingRecipe> recipeEntry = (RecipeEntry<CraftingRecipe>)optional.get();
58-
CraftingRecipe craftingRecipe = recipeEntry.value();
59-
if (resultInventory.shouldCraftRecipe(serverPlayerEntity, recipeEntry)) {
60-
ItemStack itemStack2 = craftingRecipe.craft(craftingRecipeInput, world.getRegistryManager());
61-
if (itemStack2.isItemEnabled(world.getEnabledFeatures())) {
62-
itemStack = itemStack2;
63-
}
64-
}
65-
}
66-
if (player instanceof ServerPlayerEntity serverPlayer) {
67-
serverPlayer.networkHandler.sendPacket(
68-
new ScreenHandlerSlotUpdateS2CPacket(handler.syncId, handler.nextRevision(), 0, itemStack)
69-
);
70-
}
71-
}
7231
}

src/main/java/com/junnio/polycoin/recipe/ModRecipes.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99

1010
public class ModRecipes {
1111
public static void initialize(){
12-
12+
PoLymCoin.LOGGER.info("Registering Custom Recipes for " + PoLymCoin.MOD_ID);
1313
}
14+
public static final RecipeSerializer<PolymTableCraftingRecipe> POLYM_CRAFTING_SERIALIZER = Registry.register(
15+
Registries.RECIPE_SERIALIZER, Identifier.of(PoLymCoin.MOD_ID, "polym_table"),
16+
new PolymTableCraftingRecipe.Serializer());
17+
public static final RecipeType<PolymTableCraftingRecipe> POLYM_CRAFTING_TYPE = Registry.register(
18+
Registries.RECIPE_TYPE, Identifier.of(PoLymCoin.MOD_ID, "polym_table"), new RecipeType<PolymTableCraftingRecipe>() {
19+
@Override
20+
public String toString() {
21+
return "polym_table";
22+
}
23+
});
1424
}

src/main/java/com/junnio/polycoin/recipe/PolymRecipe.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/main/java/com/junnio/polycoin/recipe/PolymRecipeType.java

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.junnio.polycoin.recipe;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import net.minecraft.item.ItemStack;
6+
import net.minecraft.network.RegistryByteBuf;
7+
import net.minecraft.network.codec.PacketCodec;
8+
import net.minecraft.recipe.*;
9+
import net.minecraft.recipe.book.RecipeBookCategory;
10+
import net.minecraft.registry.RegistryWrapper;
11+
import net.minecraft.world.World;
12+
13+
public record PolymTableCraftingRecipe (Ingredient inputItem, ItemStack output) implements Recipe<PolymTableCraftingRecipeInput> {
14+
@Override
15+
public boolean matches(PolymTableCraftingRecipeInput input, World world) {
16+
if (!(input instanceof PolymTableCraftingRecipeInput)) {
17+
return false;
18+
}
19+
if(world.isClient()) {
20+
return false;
21+
}
22+
return inputItem.test(input.getStackInSlot(0));
23+
}
24+
25+
@Override
26+
public ItemStack craft(PolymTableCraftingRecipeInput input, RegistryWrapper.WrapperLookup registries) {
27+
return output.copy();
28+
}
29+
30+
@Override
31+
public RecipeSerializer<? extends Recipe<PolymTableCraftingRecipeInput>> getSerializer() {
32+
return ModRecipes.POLYM_CRAFTING_SERIALIZER;
33+
}
34+
35+
@Override
36+
public RecipeType<? extends Recipe<PolymTableCraftingRecipeInput>> getType() {
37+
return ModRecipes.POLYM_CRAFTING_TYPE;
38+
}
39+
40+
@Override
41+
public IngredientPlacement getIngredientPlacement() {
42+
return null;
43+
}
44+
45+
@Override
46+
public RecipeBookCategory getRecipeBookCategory() {
47+
return null;
48+
}
49+
50+
public static class Serializer implements RecipeSerializer<PolymTableCraftingRecipe> {
51+
public static final MapCodec<PolymTableCraftingRecipe> CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group(
52+
Ingredient.CODEC.fieldOf("ingredient").forGetter(PolymTableCraftingRecipe::inputItem),
53+
ItemStack.CODEC.fieldOf("result").forGetter(PolymTableCraftingRecipe::output)
54+
).apply(inst, PolymTableCraftingRecipe::new));
55+
56+
public static final PacketCodec<RegistryByteBuf, PolymTableCraftingRecipe> STREAM_CODEC =
57+
PacketCodec.tuple(
58+
Ingredient.PACKET_CODEC, PolymTableCraftingRecipe::inputItem,
59+
ItemStack.PACKET_CODEC, PolymTableCraftingRecipe::output,
60+
PolymTableCraftingRecipe::new);
61+
62+
@Override
63+
public MapCodec<PolymTableCraftingRecipe> codec() {
64+
return CODEC;
65+
}
66+
67+
@Override
68+
public PacketCodec<RegistryByteBuf, PolymTableCraftingRecipe> packetCodec() {
69+
return STREAM_CODEC;
70+
}
71+
}
72+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.junnio.polycoin.recipe;
2+
3+
import net.minecraft.item.ItemStack;
4+
import net.minecraft.recipe.input.RecipeInput;
5+
6+
public record PolymTableCraftingRecipeInput (ItemStack input) implements RecipeInput {
7+
@Override
8+
public ItemStack getStackInSlot(int slot) {
9+
return input;
10+
}
11+
12+
@Override
13+
public int size() {
14+
return 1;
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"type": "minecraft:crafting_shaped",
3+
"pattern": [
4+
"###",
5+
"DDD",
6+
"###"
7+
],
8+
"key": {
9+
"#": "minecraft:amethyst_cluster",
10+
"D": "minecraft:diamond"
11+
},
12+
"result": {
13+
"id": "polymcoin:copper_big_coin",
14+
"count": 1
15+
}
16+
}

0 commit comments

Comments
 (0)