Skip to content

Commit 2bbd4d8

Browse files
committed
Initial multiplayer recipe sync - no data, just IDs
1 parent b6715e0 commit 2bbd4d8

18 files changed

+326
-120
lines changed

src/main/java/com/robotgryphon/compactcrafting/CompactCrafting.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.robotgryphon.compactcrafting.client.render.RenderTickCounter;
55
import com.robotgryphon.compactcrafting.config.ClientConfig;
66
import com.robotgryphon.compactcrafting.core.Registration;
7-
import com.robotgryphon.compactcrafting.recipes.json.MiniaturizationPatternLoader;
7+
import com.robotgryphon.compactcrafting.recipes.data.json.MiniaturizationPatternLoader;
88
import net.minecraft.block.Blocks;
99
import net.minecraft.item.ItemGroup;
1010
import net.minecraft.item.ItemStack;

src/main/java/com/robotgryphon/compactcrafting/blocks/FieldCraftingPreviewTile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public void read(BlockState state, CompoundNBT compound) {
8888
public CompoundNBT write(CompoundNBT compound) {
8989
super.write(compound);
9090
if(recipe != null) {
91-
compound.putString("recipe", recipe.getRegistryName().toString());
91+
compound.putString("recipe", recipe.getId().toString());
9292
}
9393

9494
compound.putInt("progress", craftingProgress);

src/main/java/com/robotgryphon/compactcrafting/blocks/FieldProjectorBlock.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public ActionResultType onBlockActivated(BlockState state, World world, BlockPos
103103
Optional<BlockPos> oppositeProjector = tile.getOppositeProjector();
104104
if(!oppositeProjector.isPresent()) {
105105
// Spawn particle in valid places
106-
107106
ProjectorHelper.getValidOppositePositions(world, pos)
108107
.forEach(opp -> {
109108
((ServerWorld) world).spawnParticle(ParticleTypes.BARRIER,

src/main/java/com/robotgryphon/compactcrafting/compat/jei/JeiMiniaturizationCraftingCategory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public void setRecipe(IRecipeLayout recipeLayout, MiniaturizationRecipe recipe,
151151

152152
addOutputSlots(recipe, GUTTER_X, OFFSET_Y, guiItemStacks, numComponentSlots);
153153
} catch (Exception ex) {
154-
CompactCrafting.LOGGER.error(recipe.getRegistryName());
154+
CompactCrafting.LOGGER.error(recipe.getId());
155155
CompactCrafting.LOGGER.error(ex);
156156
}
157157

src/main/java/com/robotgryphon/compactcrafting/compat/jei/JeiMiniaturizationPlugin.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import com.robotgryphon.compactcrafting.CompactCrafting;
44
import com.robotgryphon.compactcrafting.core.Registration;
5-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
6-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
5+
import com.robotgryphon.compactcrafting.recipes.data.base.RecipeBase;
76
import mezz.jei.api.IModPlugin;
87
import mezz.jei.api.JeiPlugin;
98
import mezz.jei.api.registration.IGuiHandlerRegistration;
109
import mezz.jei.api.registration.IRecipeCatalystRegistration;
1110
import mezz.jei.api.registration.IRecipeCategoryRegistration;
1211
import mezz.jei.api.registration.IRecipeRegistration;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.world.ClientWorld;
1314
import net.minecraft.item.ItemStack;
15+
import net.minecraft.item.crafting.RecipeManager;
1416
import net.minecraft.util.ResourceLocation;
1517

16-
import java.util.Collection;
18+
import java.util.List;
1719

1820
@JeiPlugin
1921
public class JeiMiniaturizationPlugin implements IModPlugin {
@@ -41,8 +43,11 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
4143

4244
@Override
4345
public void registerRecipes(IRecipeRegistration registration) {
44-
Collection<MiniaturizationRecipe> miniaturizationRecipes = MiniaturizationRecipeManager.getAll();
45-
46-
registration.addRecipes(miniaturizationRecipes, JeiMiniaturizationCraftingCategory.UID);
46+
ClientWorld w = Minecraft.getInstance().world;
47+
RecipeManager rm = w == null ? null : w.getRecipeManager();
48+
if(rm != null) {
49+
List<RecipeBase> miniRecipes = rm.getRecipesForType(Registration.MINIATURIZATION_RECIPE_TYPE);
50+
registration.addRecipes(miniRecipes, JeiMiniaturizationCraftingCategory.UID);
51+
}
4752
}
4853
}

src/main/java/com/robotgryphon/compactcrafting/core/Registration.java

Lines changed: 15 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
import com.robotgryphon.compactcrafting.blocks.FieldProjectorBlock;
77
import com.robotgryphon.compactcrafting.blocks.FieldProjectorTile;
88
import com.robotgryphon.compactcrafting.items.FieldProjectorItem;
9+
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
10+
import com.robotgryphon.compactcrafting.recipes.data.MiniaturizationRecipeSerializer;
11+
import com.robotgryphon.compactcrafting.recipes.data.base.BaseRecipeType;
912
import net.minecraft.block.AbstractBlock;
1013
import net.minecraft.block.Block;
1114
import net.minecraft.block.Blocks;
1215
import net.minecraft.block.material.Material;
1316
import net.minecraft.item.Item;
17+
import net.minecraft.item.crafting.IRecipeSerializer;
1418
import net.minecraft.tileentity.TileEntityType;
19+
import net.minecraft.util.ResourceLocation;
1520
import net.minecraftforge.common.ToolType;
1621
import net.minecraftforge.eventbus.api.IEventBus;
1722
import net.minecraftforge.fml.RegistryObject;
@@ -31,6 +36,7 @@ public class Registration {
3136
private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID);
3237
private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
3338
private static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, MOD_ID);
39+
private static final DeferredRegister<IRecipeSerializer<?>> RECIPES = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, MOD_ID);
3440

3541
// ================================================================================================================
3642
// PROPERTIES
@@ -79,49 +85,11 @@ public class Registration {
7985
// ================================================================================================================
8086
// MINIATURIZATION RECIPES
8187
// ================================================================================================================
82-
// public static final RegistryObject<MiniaturizationRecipe> SIMPLE_RECIPE = MINIATURIZATION_RECIPES.register("simple", () ->
83-
// {
84-
// MiniaturizationRecipe rec = new MiniaturizationRecipe();
85-
//
86-
// Set<BlockPos> glassColl = new HashSet<>();
87-
// Set<BlockPos> handleColl = new HashSet<>();
88-
//
89-
// BlockPos[] glass = new BlockPos[]{
90-
// new BlockPos(3, 0, 0),
91-
// new BlockPos(4, 0, 0),
92-
// new BlockPos(2, 0, 1),
93-
// new BlockPos(5, 0, 1),
94-
// new BlockPos(2, 0, 2),
95-
// new BlockPos(5, 0, 2),
96-
// new BlockPos(3, 0, 3),
97-
// new BlockPos(4, 0, 3)
98-
// };
99-
//
100-
// BlockPos[] handle = new BlockPos[]{
101-
// new BlockPos(2, 0, 3),
102-
// new BlockPos(1, 0, 4),
103-
// new BlockPos(0, 0, 5)
104-
// };
105-
//
106-
// Collections.addAll(glassColl, glass);
107-
// Collections.addAll(handleColl, handle);
108-
//
109-
// MixedComponentRecipeLayer mixed = new MixedComponentRecipeLayer();
110-
// mixed.addMultiple("S", handleColl);
111-
// mixed.addMultiple("G", glassColl);
112-
//
113-
// rec.setLayers(new IRecipeLayer[]{mixed});
114-
//
115-
// rec.catalyst = Items.ANVIL;
116-
// rec.outputs = new ItemStack[]{
117-
// new ItemStack(Items.CRYING_OBSIDIAN, 11)
118-
// };
119-
//
120-
// rec.addComponent("S", Blocks.STONE.getDefaultState());
121-
// rec.addComponent("G", Blocks.GLASS.getDefaultState());
122-
//
123-
// return rec;
124-
// });
88+
public static final RegistryObject<IRecipeSerializer<MiniaturizationRecipe>> MINIATURIZATION_SERIALIZER = RECIPES.register("miniaturization", MiniaturizationRecipeSerializer::new);
89+
90+
public static final ResourceLocation MINIATURIZATION_RECIPE_TYPE_ID = new ResourceLocation(MOD_ID, "miniaturization_recipe");
91+
92+
public static final BaseRecipeType<MiniaturizationRecipe> MINIATURIZATION_RECIPE_TYPE = new BaseRecipeType<>(MINIATURIZATION_RECIPE_TYPE_ID);
12593

12694
// ================================================================================================================
12795
// INITIALIZATION
@@ -132,5 +100,9 @@ public static void init() {
132100
BLOCKS.register(eventBus);
133101
ITEMS.register(eventBus);
134102
TILE_ENTITIES.register(eventBus);
103+
RECIPES.register(eventBus);
104+
105+
// Recipe Types (Forge Registry setup does not call this yet)
106+
MINIATURIZATION_RECIPE_TYPE.register();
135107
}
136108
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package com.robotgryphon.compactcrafting.recipes;
2+
3+
import net.minecraft.entity.player.PlayerEntity;
4+
import net.minecraft.inventory.IInventory;
5+
import net.minecraft.item.ItemStack;
6+
7+
public class FakeInventory implements IInventory {
8+
/**
9+
* Returns the number of slots in the inventory.
10+
*/
11+
@Override
12+
public int getSizeInventory() {
13+
return 0;
14+
}
15+
16+
@Override
17+
public boolean isEmpty() {
18+
return true;
19+
}
20+
21+
/**
22+
* Returns the stack in the given slot.
23+
*
24+
* @param index
25+
*/
26+
@Override
27+
public ItemStack getStackInSlot(int index) {
28+
return ItemStack.EMPTY;
29+
}
30+
31+
/**
32+
* Removes up to a specified number of items from an inventory slot and returns them in a new stack.
33+
*
34+
* @param index
35+
* @param count
36+
*/
37+
@Override
38+
public ItemStack decrStackSize(int index, int count) {
39+
return ItemStack.EMPTY;
40+
}
41+
42+
/**
43+
* Removes a stack from the given slot and returns it.
44+
*
45+
* @param index
46+
*/
47+
@Override
48+
public ItemStack removeStackFromSlot(int index) {
49+
return ItemStack.EMPTY;
50+
}
51+
52+
/**
53+
* Sets the given item stack to the specified slot in the inventory (can be crafting or armor sections).
54+
*
55+
* @param index
56+
* @param stack
57+
*/
58+
@Override
59+
public void setInventorySlotContents(int index, ItemStack stack) { }
60+
61+
/**
62+
* For tile entities, ensures the chunk containing the tile entity is saved to disk later - the game won't think it
63+
* hasn't changed and skip it.
64+
*/
65+
@Override
66+
public void markDirty() { }
67+
68+
/**
69+
* Don't rename this method to canInteractWith due to conflicts with Container
70+
*
71+
* @param player
72+
*/
73+
@Override
74+
public boolean isUsableByPlayer(PlayerEntity player) {
75+
return false;
76+
}
77+
78+
@Override
79+
public void clear() { }
80+
}

src/main/java/com/robotgryphon/compactcrafting/recipes/MiniaturizationRecipe.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.robotgryphon.compactcrafting.recipes;
22

3+
import com.robotgryphon.compactcrafting.core.Registration;
34
import com.robotgryphon.compactcrafting.field.FieldProjectionSize;
45
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
6+
import com.robotgryphon.compactcrafting.recipes.data.base.RecipeBase;
57
import com.robotgryphon.compactcrafting.recipes.exceptions.MiniaturizationRecipeException;
8+
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
69
import com.robotgryphon.compactcrafting.recipes.layers.dim.IDynamicRecipeLayer;
710
import com.robotgryphon.compactcrafting.recipes.layers.dim.IRigidRecipeLayer;
8-
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
911
import com.robotgryphon.compactcrafting.util.BlockSpaceUtil;
1012
import net.minecraft.block.BlockState;
1113
import net.minecraft.item.ItemStack;
14+
import net.minecraft.item.crafting.IRecipeSerializer;
15+
import net.minecraft.item.crafting.IRecipeType;
1216
import net.minecraft.util.Direction;
1317
import net.minecraft.util.ResourceLocation;
1418
import net.minecraft.util.Rotation;
@@ -20,7 +24,7 @@
2024
import java.util.*;
2125
import java.util.stream.Stream;
2226

23-
public class MiniaturizationRecipe {
27+
public class MiniaturizationRecipe extends RecipeBase {
2428

2529
private ResourceLocation registryName;
2630
private IRecipeLayer[] layers;
@@ -272,10 +276,6 @@ public Optional<IRecipeLayer> getLayer(int y) {
272276
return Optional.of(this.layers[y]);
273277
}
274278

275-
public ResourceLocation getRegistryName() {
276-
return registryName;
277-
}
278-
279279
public Set<String> getComponentKeys() {
280280
return this.components.keySet();
281281
}
@@ -317,6 +317,21 @@ public void setFluidDimensions(AxisAlignedBB dimensions) throws MiniaturizationR
317317
}
318318

319319
public int getTicks() {
320-
return 200;
320+
return 1;
321+
}
322+
323+
@Override
324+
public ResourceLocation getId() {
325+
return this.registryName;
326+
}
327+
328+
@Override
329+
public IRecipeSerializer<?> getSerializer() {
330+
return Registration.MINIATURIZATION_SERIALIZER.get();
331+
}
332+
333+
@Override
334+
public IRecipeType<?> getType() {
335+
return Registration.MINIATURIZATION_RECIPE_TYPE;
321336
}
322337
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.robotgryphon.compactcrafting.recipes.data;
2+
3+
import com.google.gson.JsonObject;
4+
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
5+
import com.robotgryphon.compactcrafting.recipes.data.json.MiniaturizationRecipeJsonSerializer;
6+
import net.minecraft.item.crafting.IRecipeSerializer;
7+
import net.minecraft.network.PacketBuffer;
8+
import net.minecraft.util.ResourceLocation;
9+
import net.minecraftforge.registries.ForgeRegistryEntry;
10+
11+
import javax.annotation.Nullable;
12+
import java.util.Optional;
13+
14+
public class MiniaturizationRecipeSerializer extends ForgeRegistryEntry<IRecipeSerializer<?>>
15+
implements IRecipeSerializer<MiniaturizationRecipe> {
16+
17+
@Override
18+
public MiniaturizationRecipe read(ResourceLocation recipeId, JsonObject json) {
19+
Optional<MiniaturizationRecipe> attempt = MiniaturizationRecipeJsonSerializer.deserialize(json, recipeId);
20+
return attempt.orElse(null);
21+
}
22+
23+
@Nullable
24+
@Override
25+
public MiniaturizationRecipe read(ResourceLocation recipeId, PacketBuffer buffer) {
26+
MiniaturizationRecipe recipe = new MiniaturizationRecipe(recipeId);
27+
28+
return recipe;
29+
}
30+
31+
@Override
32+
public void write(PacketBuffer buffer, MiniaturizationRecipe recipe) {
33+
34+
}
35+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.robotgryphon.compactcrafting.recipes.data.base;
2+
3+
import net.minecraft.item.crafting.IRecipeType;
4+
import net.minecraft.util.ResourceLocation;
5+
import net.minecraft.util.registry.Registry;
6+
7+
public class BaseRecipeType<T extends RecipeBase> implements IRecipeType<RecipeBase> {
8+
private final ResourceLocation registryName;
9+
10+
public BaseRecipeType(ResourceLocation location) {
11+
this.registryName = location;
12+
}
13+
14+
@Override
15+
public String toString() {
16+
return registryName.toString();
17+
}
18+
19+
public void register() {
20+
Registry.register(Registry.RECIPE_TYPE, registryName, this);
21+
}
22+
}

0 commit comments

Comments
 (0)