Skip to content

Commit 637ce91

Browse files
committed
Finish built-in serializers and recipe sync
1 parent 9c0b1f6 commit 637ce91

25 files changed

+315
-303
lines changed

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

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,13 @@
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.data.json.MiniaturizationPatternLoader;
8-
import net.minecraft.block.Blocks;
97
import net.minecraft.item.ItemGroup;
108
import net.minecraft.item.ItemStack;
11-
import net.minecraft.item.Items;
129
import net.minecraftforge.common.MinecraftForge;
13-
import net.minecraftforge.event.AddReloadListenerEvent;
1410
import net.minecraftforge.eventbus.api.IEventBus;
1511
import net.minecraftforge.fml.ModLoadingContext;
1612
import net.minecraftforge.fml.common.Mod;
1713
import net.minecraftforge.fml.config.ModConfig;
18-
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
19-
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
20-
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
2114
import org.apache.logging.log4j.LogManager;
2215
import org.apache.logging.log4j.Logger;
2316

@@ -32,23 +25,13 @@ public class CompactCrafting
3225
public static ItemGroup ITEM_GROUP = new ItemGroup(MOD_ID) {
3326
@Override
3427
public ItemStack createIcon() {
35-
// TODO: Change this to the crafter item
36-
return new ItemStack(Items.ENDER_PEARL);
28+
return new ItemStack(Registration.FIELD_PROJECTOR_ITEM.get());
3729
}
3830
};
3931

4032
public CompactCrafting() {
41-
IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus();
4233
IEventBus forgeBus = MinecraftForge.EVENT_BUS;
4334

44-
// Register the setup method for modloading
45-
modBus.addListener(this::setup);
46-
47-
// Register the doClientStuff method for modloading
48-
modBus.addListener(this::doClientStuff);
49-
50-
forgeBus.addListener(this::addReloadListenerEvent);
51-
5235
forgeBus.register(this);
5336
forgeBus.register(RenderTickCounter.class);
5437
forgeBus.register(ClientSetup.class);
@@ -59,21 +42,4 @@ public CompactCrafting() {
5942

6043
Registration.init();
6144
}
62-
63-
private void setup(final FMLCommonSetupEvent event)
64-
{
65-
// some preinit code
66-
LOGGER.info("HELLO FROM PREINIT");
67-
LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
68-
}
69-
70-
private void doClientStuff(final FMLClientSetupEvent event) {
71-
// do something that can only be done on the client
72-
LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings);
73-
}
74-
75-
private void addReloadListenerEvent(final AddReloadListenerEvent e)
76-
{
77-
e.addListener(new MiniaturizationPatternLoader());
78-
}
7945
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.robotgryphon.compactcrafting.core.Registration;
44
import com.robotgryphon.compactcrafting.crafting.EnumCraftingState;
55
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
6-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
76
import net.minecraft.block.BlockState;
87
import net.minecraft.block.Blocks;
98
import net.minecraft.entity.item.ItemEntity;
@@ -80,7 +79,9 @@ public void read(BlockState state, CompoundNBT compound) {
8079

8180
if(compound.contains("recipe")) {
8281
ResourceLocation recipeId = new ResourceLocation(compound.getString("recipe"));
83-
this.recipe = MiniaturizationRecipeManager.get(recipeId).orElse(null);
82+
world.getRecipeManager()
83+
.getRecipe(recipeId)
84+
.ifPresent(recipe -> this.recipe = (MiniaturizationRecipe) recipe);
8485
}
8586
}
8687

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
1111
import com.robotgryphon.compactcrafting.field.ProjectorHelper;
1212
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
13-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
1413
import com.robotgryphon.compactcrafting.world.ProjectionFieldSavedData;
1514
import com.robotgryphon.compactcrafting.world.ProjectorFieldData;
1615
import net.minecraft.block.BlockState;
@@ -25,7 +24,6 @@
2524
import net.minecraft.world.server.ServerWorld;
2625

2726
import java.awt.*;
28-
import java.util.Collection;
2927
import java.util.List;
3028
import java.util.Optional;
3129
import java.util.Set;
@@ -210,10 +208,13 @@ public void doRecipeScan() {
210208
return;
211209
}
212210

213-
Collection<MiniaturizationRecipe> entries = MiniaturizationRecipeManager.getAll();
211+
List<MiniaturizationRecipe> recipes = world.getRecipeManager()
212+
.getRecipesForType(Registration.MINIATURIZATION_RECIPE_TYPE)
213+
.stream().map(r -> (MiniaturizationRecipe) r)
214+
.collect(Collectors.toList());
214215

215216
// If there are no registered recipes, then we obv can't match anything - exit early
216-
if (entries.isEmpty()) {
217+
if (recipes.isEmpty()) {
217218
this.currentRecipe = null;
218219
updateCraftingState(EnumCraftingState.NOT_MATCHED);
219220
return;
@@ -233,7 +234,7 @@ public void doRecipeScan() {
233234
// ===========================================================================================================
234235
// RECIPE BEGIN
235236
// ===========================================================================================================
236-
Set<MiniaturizationRecipe> recipesBoundFitted = entries
237+
Set<MiniaturizationRecipe> recipesBoundFitted = recipes
237238
.stream()
238239
.filter(recipe -> recipe.fitsInDimensions(fieldBlocks.getFilledBounds()))
239240
.collect(Collectors.toSet());
@@ -287,7 +288,7 @@ private void tickCrafting() {
287288
BlockPos centerField = field.getCenterPosition();
288289
world.setBlockState(centerField, Registration.FIELD_CRAFTING_PREVIEW_BLOCK.get().getDefaultState());
289290
FieldCraftingPreviewTile tile = (FieldCraftingPreviewTile) world.getTileEntity(centerField);
290-
if(tile != null)
291+
if (tile != null)
291292
tile.setMasterProjector(this);
292293

293294
break;

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

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

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@
1010
import com.robotgryphon.compactcrafting.recipes.data.MiniaturizationRecipeSerializer;
1111
import com.robotgryphon.compactcrafting.recipes.data.base.BaseRecipeType;
1212
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.FilledLayerSerializer;
13+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.HollowLayerSerializer;
14+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.MixedLayerSerializer;
1315
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.RecipeLayerSerializer;
16+
import com.robotgryphon.compactcrafting.recipes.layers.impl.FilledComponentRecipeLayer;
17+
import com.robotgryphon.compactcrafting.recipes.layers.impl.HollowComponentRecipeLayer;
18+
import com.robotgryphon.compactcrafting.recipes.layers.impl.MixedComponentRecipeLayer;
1419
import net.minecraft.block.AbstractBlock;
1520
import net.minecraft.block.Block;
1621
import net.minecraft.block.Blocks;
@@ -109,10 +114,18 @@ public class Registration {
109114

110115
public static final BaseRecipeType<MiniaturizationRecipe> MINIATURIZATION_RECIPE_TYPE = new BaseRecipeType<>(MINIATURIZATION_RECIPE_TYPE_ID);
111116

112-
113-
public static final RegistryObject<RecipeLayerSerializer<?>> FILLED_LAYER_SERIALIZER =
117+
// ================================================================================================================
118+
// RECIPE LAYER SERIALIZERS
119+
// ================================================================================================================
120+
public static final RegistryObject<RecipeLayerSerializer<FilledComponentRecipeLayer>> FILLED_LAYER_SERIALIZER =
114121
RECIPE_LAYERS.register("filled", FilledLayerSerializer::new);
115122

123+
public static final RegistryObject<RecipeLayerSerializer<HollowComponentRecipeLayer>> HOLLOW_LAYER_SERIALIZER =
124+
RECIPE_LAYERS.register("hollow", HollowLayerSerializer::new);
125+
126+
public static final RegistryObject<RecipeLayerSerializer<MixedComponentRecipeLayer>> MIXED_LAYER_SERIALIZER =
127+
RECIPE_LAYERS.register("mixed", MixedLayerSerializer::new);
128+
116129
// ================================================================================================================
117130
// INITIALIZATION
118131
// ================================================================================================================

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ public void setFluidDimensions(AxisAlignedBB dimensions) throws MiniaturizationR
339339
}
340340

341341
public int getTicks() {
342-
return 1;
342+
return 200;
343343
}
344344

345345
@Override

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

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

src/main/java/com/robotgryphon/compactcrafting/recipes/data/MiniaturizationRecipeSerializer.java

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public MiniaturizationRecipe read(ResourceLocation recipeId, JsonObject json) {
3232
@Nullable
3333
@Override
3434
public MiniaturizationRecipe read(ResourceLocation recipeId, PacketBuffer buffer) {
35+
CompactCrafting.LOGGER.debug("Starting recipe read: {}", recipeId);
3536
MiniaturizationRecipe recipe = new MiniaturizationRecipe(recipeId);
3637

3738
CompoundNBT dim = buffer.readCompoundTag();
@@ -50,22 +51,35 @@ public MiniaturizationRecipe read(ResourceLocation recipeId, PacketBuffer buffer
5051
CompactCrafting.LOGGER.error(e);
5152
}
5253

53-
int numLayers = buffer.readInt();
54-
recipe.setLayers(new IRecipeLayer[numLayers]);
55-
for(int i = 0; i < numLayers; i++) {
56-
ResourceLocation layerType = buffer.readResourceLocation();
57-
if(Registration.RECIPE_SERIALIZERS.containsKey(layerType)) {
58-
RecipeLayerSerializer<?> serializer = Registration.RECIPE_SERIALIZERS.getValue(layerType);
59-
IRecipeLayer layer = serializer.readLayerData(buffer);
60-
if(layer instanceof IDynamicRecipeLayer)
61-
((IDynamicRecipeLayer) layer).setRecipeDimensions(dims);
62-
63-
recipe.setLayer(i, layer);
54+
CompactCrafting.LOGGER.debug("Done loading recipe meta, starting layer loading.");
55+
56+
try {
57+
int numLayers = buffer.readInt();
58+
recipe.setLayers(new IRecipeLayer[numLayers]);
59+
for (int i = 0; i < numLayers; i++) {
60+
ResourceLocation layerType = buffer.readResourceLocation();
61+
if (Registration.RECIPE_SERIALIZERS.containsKey(layerType)) {
62+
RecipeLayerSerializer<?> serializer = Registration.RECIPE_SERIALIZERS.getValue(layerType);
63+
IRecipeLayer layer = serializer.readLayerData(buffer);
64+
if (layer instanceof IDynamicRecipeLayer)
65+
((IDynamicRecipeLayer) layer).setRecipeDimensions(dims);
66+
67+
recipe.setLayer(i, layer);
68+
}
6469
}
6570
}
6671

72+
catch(Exception e) {
73+
CompactCrafting.LOGGER.error("Error loading layers.", e);
74+
}
75+
6776
try {
68-
recipe.setFluidDimensions(dims);
77+
/*
78+
* If all layers in the recipe are dynamically-sized, set the dimensions based on
79+
* what they are on the layer spec from the server (would be loaded from JSON)
80+
*/
81+
if(recipe.getLayers().allMatch(l -> l instanceof IDynamicRecipeLayer))
82+
recipe.setFluidDimensions(dims);
6983
} catch (MiniaturizationRecipeException e) {
7084
CompactCrafting.LOGGER.error("Unable to set fluid recipe dimensions.", e);
7185
}
@@ -90,6 +104,11 @@ public void write(PacketBuffer buffer, MiniaturizationRecipe recipe) {
90104
buffer.writeInt(numLayers);
91105

92106
recipe.getLayers().forEach(layer -> {
107+
if(layer == null) {
108+
buffer.writeResourceLocation(new ResourceLocation(CompactCrafting.MOD_ID, "blank"));
109+
return;
110+
}
111+
93112
RecipeLayerSerializer serializer = layer.getSerializer(layer);
94113
if(serializer != null)
95114
serializer.writeLayerData(layer, buffer);
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.robotgryphon.compactcrafting.recipes.data.json;
2+
3+
import com.google.gson.*;
4+
import com.robotgryphon.compactcrafting.CompactCrafting;
5+
import com.robotgryphon.compactcrafting.core.Registration;
6+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.RecipeLayerSerializer;
7+
import com.robotgryphon.compactcrafting.recipes.exceptions.RecipeLoadingException;
8+
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
9+
import net.minecraft.util.ResourceLocation;
10+
11+
import java.lang.reflect.Type;
12+
13+
public class LayerDeserializer implements JsonDeserializer<IRecipeLayer> {
14+
15+
@Override
16+
public IRecipeLayer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
17+
JsonObject root = json.getAsJsonObject();
18+
19+
if(!root.has("type"))
20+
throw new JsonParseException("Layer definition missing 'type' property.");
21+
22+
String type = root.get("type").getAsString();
23+
ResourceLocation layerType = new ResourceLocation(type);
24+
25+
if(!Registration.RECIPE_SERIALIZERS.containsKey(layerType))
26+
{
27+
CompactCrafting.LOGGER.error("Unknown layer type '" + type + "'");
28+
return null;
29+
}
30+
31+
RecipeLayerSerializer<?> serializer = Registration.RECIPE_SERIALIZERS.getValue(layerType);
32+
try {
33+
return serializer.readLayerData(root);
34+
} catch (RecipeLoadingException e) {
35+
CompactCrafting.LOGGER.error("Error while reading layer data.", e);
36+
return null;
37+
}
38+
}
39+
}

src/main/java/com/robotgryphon/compactcrafting/recipes/data/json/MiniaturizationPatternLoader.java

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

0 commit comments

Comments
 (0)