Skip to content

Commit 373add3

Browse files
committed
Initial loading of recipes from datapacks; does not have comps yet
No catalysts or block state information is loaded yet
1 parent c0abf3a commit 373add3

20 files changed

+496
-193
lines changed

recipes/diamond_block.json

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

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.robotgryphon.compactcrafting.client.ClientSetup;
44
import com.robotgryphon.compactcrafting.client.render.RenderTickCounter;
55
import com.robotgryphon.compactcrafting.core.Registration;
6-
import com.robotgryphon.compactcrafting.recipes.RecipeLoader;
6+
import com.robotgryphon.compactcrafting.recipes.json.MiniaturizationPatternLoader;
77
import net.minecraft.block.Blocks;
88
import net.minecraft.item.ItemGroup;
99
import net.minecraft.item.ItemStack;
@@ -70,6 +70,6 @@ private void doClientStuff(final FMLClientSetupEvent event) {
7070

7171
private void addReloadListenerEvent(final AddReloadListenerEvent e)
7272
{
73-
e.addListener(new RecipeLoader());
73+
e.addListener(new MiniaturizationPatternLoader());
7474
}
7575
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
88
import com.robotgryphon.compactcrafting.field.ProjectorHelper;
99
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
10+
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
1011
import com.robotgryphon.compactcrafting.world.ProjectionFieldSavedData;
1112
import com.robotgryphon.compactcrafting.world.ProjectorFieldData;
1213
import net.minecraft.block.BlockState;
@@ -19,7 +20,6 @@
1920
import net.minecraft.util.math.AxisAlignedBB;
2021
import net.minecraft.util.math.BlockPos;
2122
import net.minecraft.world.server.ServerWorld;
22-
import net.minecraftforge.fml.RegistryObject;
2323

2424
import java.util.Collection;
2525
import java.util.List;
@@ -186,7 +186,7 @@ public void doRecipeScan() {
186186
return;
187187
}
188188

189-
Collection<RegistryObject<MiniaturizationRecipe>> entries = Registration.MINIATURIZATION_RECIPES.getEntries();
189+
Collection<MiniaturizationRecipe> entries = MiniaturizationRecipeManager.getAll();
190190

191191
// If there are no registered recipes, then we obv can't match anything - exit early
192192
if (entries.isEmpty()) {
@@ -209,7 +209,6 @@ public void doRecipeScan() {
209209
// ===========================================================================================================
210210
Set<MiniaturizationRecipe> recipesBoundFitted = entries
211211
.stream()
212-
.map(RegistryObject::get)
213212
.filter(recipe -> recipe.fitsInDimensions(fieldBlocks.getFilledBounds()))
214213
.collect(Collectors.toSet());
215214

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

Lines changed: 43 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,17 @@
44
import com.robotgryphon.compactcrafting.blocks.FieldProjectorBlock;
55
import com.robotgryphon.compactcrafting.blocks.FieldProjectorTile;
66
import com.robotgryphon.compactcrafting.items.FieldProjectorItem;
7-
import com.robotgryphon.compactcrafting.recipes.IRecipeLayer;
8-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
9-
import com.robotgryphon.compactcrafting.recipes.MixedComponentRecipeLayer;
107
import net.minecraft.block.Block;
11-
import net.minecraft.block.Blocks;
128
import net.minecraft.block.material.Material;
139
import net.minecraft.item.Item;
14-
import net.minecraft.item.ItemStack;
15-
import net.minecraft.item.Items;
1610
import net.minecraft.tileentity.TileEntityType;
17-
import net.minecraft.util.math.BlockPos;
1811
import net.minecraftforge.common.ToolType;
1912
import net.minecraftforge.eventbus.api.IEventBus;
2013
import net.minecraftforge.fml.RegistryObject;
2114
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
2215
import net.minecraftforge.registries.DeferredRegister;
2316
import net.minecraftforge.registries.ForgeRegistries;
24-
import net.minecraftforge.registries.RegistryBuilder;
2517

26-
import java.util.Collections;
27-
import java.util.HashSet;
28-
import java.util.Set;
2918
import java.util.function.Supplier;
3019

3120
import static com.robotgryphon.compactcrafting.CompactCrafting.MOD_ID;
@@ -38,7 +27,6 @@ public class Registration {
3827
private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID);
3928
private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
4029
private static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, MOD_ID);
41-
public static final DeferredRegister<MiniaturizationRecipe> MINIATURIZATION_RECIPES = DeferredRegister.create(MiniaturizationRecipe.class, MOD_ID);
4230

4331
// ================================================================================================================
4432
// PROPERTIES
@@ -79,49 +67,49 @@ public class Registration {
7967
// ================================================================================================================
8068
// MINIATURIZATION RECIPES
8169
// ================================================================================================================
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-
});
70+
// public static final RegistryObject<MiniaturizationRecipe> SIMPLE_RECIPE = MINIATURIZATION_RECIPES.register("simple", () ->
71+
// {
72+
// MiniaturizationRecipe rec = new MiniaturizationRecipe();
73+
//
74+
// Set<BlockPos> glassColl = new HashSet<>();
75+
// Set<BlockPos> handleColl = new HashSet<>();
76+
//
77+
// BlockPos[] glass = new BlockPos[]{
78+
// new BlockPos(3, 0, 0),
79+
// new BlockPos(4, 0, 0),
80+
// new BlockPos(2, 0, 1),
81+
// new BlockPos(5, 0, 1),
82+
// new BlockPos(2, 0, 2),
83+
// new BlockPos(5, 0, 2),
84+
// new BlockPos(3, 0, 3),
85+
// new BlockPos(4, 0, 3)
86+
// };
87+
//
88+
// BlockPos[] handle = new BlockPos[]{
89+
// new BlockPos(2, 0, 3),
90+
// new BlockPos(1, 0, 4),
91+
// new BlockPos(0, 0, 5)
92+
// };
93+
//
94+
// Collections.addAll(glassColl, glass);
95+
// Collections.addAll(handleColl, handle);
96+
//
97+
// MixedComponentRecipeLayer mixed = new MixedComponentRecipeLayer();
98+
// mixed.addMultiple("S", handleColl);
99+
// mixed.addMultiple("G", glassColl);
100+
//
101+
// rec.setLayers(new IRecipeLayer[]{mixed});
102+
//
103+
// rec.catalyst = Items.ANVIL;
104+
// rec.outputs = new ItemStack[]{
105+
// new ItemStack(Items.CRYING_OBSIDIAN, 11)
106+
// };
107+
//
108+
// rec.addComponent("S", Blocks.STONE.getDefaultState());
109+
// rec.addComponent("G", Blocks.GLASS.getDefaultState());
110+
//
111+
// return rec;
112+
// });
125113

126114
// ================================================================================================================
127115
// INITIALIZATION
@@ -132,11 +120,5 @@ public static void init() {
132120
BLOCKS.register(eventBus);
133121
ITEMS.register(eventBus);
134122
TILE_ENTITIES.register(eventBus);
135-
136-
String nanoIsLazy = "miniaturization_recipes";
137-
MINIATURIZATION_RECIPES.makeRegistry(nanoIsLazy, () -> new RegistryBuilder<MiniaturizationRecipe>()
138-
.tagFolder(nanoIsLazy));
139-
140-
MINIATURIZATION_RECIPES.register(eventBus);
141123
}
142124
}

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

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.robotgryphon.compactcrafting.field.FieldProjectionSize;
44
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
5+
import com.robotgryphon.compactcrafting.recipes.layers.IFixedLayerDimensions;
6+
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
57
import com.robotgryphon.compactcrafting.util.BlockSpaceUtil;
68
import net.minecraft.block.BlockState;
79
import net.minecraft.item.Item;
@@ -31,7 +33,7 @@ public class MiniaturizationRecipe extends ForgeRegistryEntry<MiniaturizationRec
3133
* Contains a mapping of all known components in the recipe.
3234
* Vanilla style; C = CHARCOAL_BLOCK
3335
*/
34-
private Map<String, BlockState> components;
36+
private final Map<String, BlockState> components;
3537

3638
public MiniaturizationRecipe() {
3739
this.layers = new IRecipeLayer[0];
@@ -52,12 +54,15 @@ private void recalculateDimensions() {
5254
int z = 0;
5355

5456
for (IRecipeLayer layer : this.layers) {
55-
AxisAlignedBB dimensions = layer.getDimensions();
56-
if (dimensions.getXSize() > x)
57-
x = (int) Math.ceil(dimensions.getXSize());
58-
59-
if (dimensions.getZSize() > z)
60-
z = (int) Math.ceil(dimensions.getZSize());
57+
// We only need to worry about fixed-dimension layers; the fluid layers will adapt
58+
if(layer instanceof IFixedLayerDimensions) {
59+
AxisAlignedBB dimensions = ((IFixedLayerDimensions) layer).getDimensions();
60+
if (dimensions.getXSize() > x)
61+
x = (int) Math.ceil(dimensions.getXSize());
62+
63+
if (dimensions.getZSize() > z)
64+
z = (int) Math.ceil(dimensions.getZSize());
65+
}
6166
}
6267

6368
this.dimensions = new AxisAlignedBB(Vector3d.ZERO, new Vector3d(x, height, z));
@@ -200,7 +205,7 @@ public boolean areLayerPositionsCorrect(IRecipeLayer layer, AxisAlignedBB fieldF
200205
return false;
201206

202207
int totalFilled = filledPositions.length;
203-
int requiredFilled = layer.getNumberFilledPositions();
208+
int requiredFilled = layer.getNumberFilledPositions(this.dimensions);
204209

205210
// Early exit if we don't have the correct number of blocks in the layer
206211
if (totalFilled != requiredFilled)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.robotgryphon.compactcrafting.recipes;
2+
3+
import net.minecraft.util.ResourceLocation;
4+
5+
import java.util.Collection;
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
public class MiniaturizationRecipeManager {
10+
private Map<ResourceLocation, MiniaturizationRecipe> recipes;
11+
12+
public static MiniaturizationRecipeManager INSTANCE = new MiniaturizationRecipeManager();
13+
14+
private MiniaturizationRecipeManager() {
15+
this.recipes = new HashMap<>();
16+
}
17+
18+
public static void clear() {
19+
INSTANCE.recipes.clear();
20+
}
21+
22+
public static void add(ResourceLocation rl, MiniaturizationRecipe recipe) {
23+
INSTANCE.recipes.putIfAbsent(rl, recipe);
24+
}
25+
26+
public static Collection<MiniaturizationRecipe> getAll() {
27+
return INSTANCE.recipes.values();
28+
}
29+
}

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

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.robotgryphon.compactcrafting.recipes.json;
2+
3+
import com.google.gson.*;
4+
import com.robotgryphon.compactcrafting.recipes.json.loaders.FilledLayerLoader;
5+
import com.robotgryphon.compactcrafting.recipes.json.loaders.ILayerLoader;
6+
import com.robotgryphon.compactcrafting.recipes.json.loaders.MixedLayerLoader;
7+
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
8+
9+
import java.lang.reflect.Type;
10+
import java.util.Optional;
11+
12+
public class LayerDeserializer implements JsonDeserializer<IRecipeLayer> {
13+
@Override
14+
public IRecipeLayer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
15+
JsonObject root = json.getAsJsonObject();
16+
17+
if(!root.has("type"))
18+
throw new JsonParseException("Layer definition missing 'type' property.");
19+
20+
Optional<ILayerLoader> loader = Optional.empty();
21+
String type = root.get("type").getAsString();
22+
switch(type.toLowerCase()) {
23+
case "mixed":
24+
// Mixed layer type, use that loader
25+
loader = Optional.of(new MixedLayerLoader());
26+
break;
27+
28+
case "filled":
29+
case "solid":
30+
// Filled layer type
31+
// Single or make new FilledLayerType?
32+
loader = Optional.of(new FilledLayerLoader());
33+
break;
34+
35+
case "hollow":
36+
// Hollow layer type
37+
loader = Optional.empty();
38+
break;
39+
40+
default:
41+
throw new JsonParseException("Unknown layer type '" + type + "'");
42+
}
43+
44+
return loader
45+
.map(iLayerLoader -> iLayerLoader.createLayerFromDefinition(root))
46+
.orElse(null);
47+
48+
}
49+
}

0 commit comments

Comments
 (0)