Skip to content

Commit fbf2276

Browse files
committed
Refactor recipe packages and organize
1 parent a8d21e2 commit fbf2276

19 files changed

+165
-149
lines changed

src/main/java/com/robotgryphon/compactcrafting/config/ClientConfig.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,13 @@ private static void generateConfig() {
2727
.comment("Projector Settings")
2828
.push("projectors");
2929

30+
String sep = System.lineSeparator();
31+
3032
PROJECTOR_COLOR = builder
31-
.comment("The color for the projector fields. (HEX format, default #FF6A00)")
33+
.comment(
34+
"The color for the projector fields. (HEX format)",
35+
"Examples: Orange - #FF6A00, Violet - #32174D, Green - #00A658, Blue - #3A7FE1"
36+
)
3237
.define("projectorColor", "#FF6A00");
3338

3439
builder.pop();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import com.robotgryphon.compactcrafting.field.FieldProjectionSize;
44
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
55
import com.robotgryphon.compactcrafting.recipes.exceptions.MiniaturizationRecipeException;
6-
import com.robotgryphon.compactcrafting.recipes.layers.IDynamicRecipeLayer;
7-
import com.robotgryphon.compactcrafting.recipes.layers.IFixedLayerDimensions;
6+
import com.robotgryphon.compactcrafting.recipes.layers.dim.IDynamicRecipeLayer;
7+
import com.robotgryphon.compactcrafting.recipes.layers.dim.IRigidRecipeLayer;
88
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
99
import com.robotgryphon.compactcrafting.util.BlockSpaceUtil;
1010
import net.minecraft.block.BlockState;
@@ -56,8 +56,8 @@ private void recalculateDimensions() {
5656

5757
for (IRecipeLayer layer : this.layers) {
5858
// We only need to worry about fixed-dimension layers; the fluid layers will adapt
59-
if (layer instanceof IFixedLayerDimensions) {
60-
AxisAlignedBB dimensions = ((IFixedLayerDimensions) layer).getDimensions();
59+
if (layer instanceof IRigidRecipeLayer) {
60+
AxisAlignedBB dimensions = ((IRigidRecipeLayer) layer).getDimensions();
6161
if (dimensions.getXSize() > x)
6262
x = (int) Math.ceil(dimensions.getXSize());
6363

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

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package com.robotgryphon.compactcrafting.recipes;
22

3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonElement;
5+
import com.google.gson.JsonObject;
6+
import com.google.gson.JsonParseException;
37
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
48
import com.robotgryphon.compactcrafting.util.BlockSpaceUtil;
59
import net.minecraft.util.math.AxisAlignedBB;
610
import net.minecraft.util.math.BlockPos;
711

12+
import java.util.Collections;
13+
import java.util.HashMap;
14+
import java.util.Map;
815
import java.util.stream.Stream;
916

1017
public abstract class RecipeHelper {
@@ -19,4 +26,72 @@ public static BlockPos[] normalizeFieldPositions(MiniaturizationFieldBlockData f
1926
.map(BlockPos::toImmutable)
2027
.toArray(BlockPos[]::new);
2128
}
29+
30+
/**
31+
* Assumes an array is on the Z axis; meant to convert a single array to a map for collective
32+
* adding.
33+
*
34+
* @param array
35+
* @return
36+
*/
37+
public static Map<BlockPos, String> convertSingleArrayToMap(String[] array, int x) {
38+
HashMap<BlockPos, String> map = new HashMap<>();
39+
for (int z = 0; z < array.length; z++) {
40+
String val = array[z];
41+
BlockPos relative = new BlockPos(x, 0, z);
42+
map.put(relative, val);
43+
}
44+
45+
return map;
46+
}
47+
48+
public static Map<BlockPos, String> convertMultiArrayToMap(String[][] array) {
49+
HashMap<BlockPos, String> map = new HashMap<>();
50+
51+
// Loop through top level
52+
for (int x = 0; x < array.length; x++) {
53+
String[] zValues = array[x];
54+
map.putAll(convertSingleArrayToMap(zValues, x));
55+
}
56+
57+
return map;
58+
}
59+
60+
public static Map<String, Integer> getComponentCounts(Map<BlockPos, String> map) {
61+
Map<String, Integer> counts = new HashMap<>();
62+
63+
map.forEach((key, value) -> {
64+
counts.putIfAbsent(value, 0);
65+
int prev = counts.get(value);
66+
counts.replace(value, prev + 1);
67+
});
68+
69+
return counts;
70+
}
71+
72+
public static Map<BlockPos, String> getComponentMapFromPattern(JsonObject layer) {
73+
if(!layer.has("pattern"))
74+
return Collections.emptyMap();
75+
76+
JsonArray layerPattern = layer.get("pattern").getAsJsonArray();
77+
int zSize = layerPattern.size();
78+
79+
String[][] mappedToArray = new String[zSize][];
80+
81+
for(int z = 0; z < zSize; z++) {
82+
JsonElement jsonElement = layerPattern.get(z);
83+
if(!jsonElement.isJsonArray())
84+
throw new JsonParseException("Mixed layer definition got a non-array in its pattern definition.");
85+
86+
JsonArray el = jsonElement.getAsJsonArray();
87+
String[] xValues = new String[el.size()];
88+
for(int x = 0; x < el.size(); x++) {
89+
xValues[x] = el.get(x).getAsString();
90+
}
91+
92+
mappedToArray[z] = xValues;
93+
}
94+
95+
return convertMultiArrayToMap(mappedToArray);
96+
}
2297
}

src/main/java/com/robotgryphon/compactcrafting/recipes/json/RecipeLoadingException.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/exceptions/RecipeLoadingException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.robotgryphon.compactcrafting.recipes.json;
1+
package com.robotgryphon.compactcrafting.recipes.exceptions;
22

33
public class RecipeLoadingException extends Throwable {
44

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

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import com.robotgryphon.compactcrafting.CompactCrafting;
55
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
66
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
7-
import com.robotgryphon.compactcrafting.recipes.layers.IDynamicRecipeLayer;
87
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
8+
import com.robotgryphon.compactcrafting.recipes.layers.dim.IDynamicRecipeLayer;
9+
import com.robotgryphon.compactcrafting.recipes.json.layers.LayerDeserializer;
10+
import com.robotgryphon.compactcrafting.util.JsonUtil;
911
import net.minecraft.block.BlockState;
1012
import net.minecraft.client.resources.JsonReloadListener;
1113
import net.minecraft.item.ItemStack;
@@ -78,7 +80,7 @@ private boolean loadOutputs(MiniaturizationRecipe recipe, JsonObject root) {
7880
continue;
7981

8082
JsonObject op = output.getAsJsonObject();
81-
Optional<ItemStack> oStack = RecipeLoaderUtil.getItemStack(op);
83+
Optional<ItemStack> oStack = JsonUtil.getItemStack(op);
8284
if(!oStack.isPresent())
8385
continue;
8486

@@ -95,7 +97,7 @@ private boolean loadCatalyst(MiniaturizationRecipe recipe, JsonObject root) {
9597
}
9698

9799
JsonObject catalyst = root.getAsJsonObject("catalyst");
98-
Optional<ItemStack> stack = RecipeLoaderUtil.getItemStack(catalyst);
100+
Optional<ItemStack> stack = JsonUtil.getItemStack(catalyst);
99101
if(!stack.isPresent())
100102
return false;
101103

@@ -159,14 +161,19 @@ private boolean loadComponents(MiniaturizationRecipe recipe, JsonObject root) {
159161

160162
for(Map.Entry<String, JsonElement> component : components.entrySet()) {
161163
String key = component.getKey();
162-
Optional<BlockState> state = RecipeLoaderUtil.extractComponentDefinition(key, component.getValue());
163-
164-
if(key.isEmpty() || !state.isPresent()) {
165-
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}; definition not found.", key);
166-
continue;
164+
JsonElement bsElement = component.getValue();
165+
if(bsElement.isJsonObject()) {
166+
Optional<BlockState> state = JsonUtil.getBlockState(bsElement.getAsJsonObject());
167+
168+
if (key.isEmpty() || !state.isPresent()) {
169+
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}; definition not found.", key);
170+
continue;
171+
}
172+
173+
recipe.addComponent(key, state.get());
174+
} else {
175+
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}; not a JSON object. Cannot decode.", key);
167176
}
168-
169-
recipe.addComponent(key, state.get());
170177
}
171178

172179
return true;

src/main/java/com/robotgryphon/compactcrafting/recipes/json/RecipeLoaderUtil.java

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

src/main/java/com/robotgryphon/compactcrafting/recipes/json/loaders/FilledLayerLoader.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/json/layers/FilledLayerLoader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.robotgryphon.compactcrafting.recipes.json.loaders;
1+
package com.robotgryphon.compactcrafting.recipes.json.layers;
22

33
import com.google.gson.JsonObject;
44
import com.google.gson.JsonParseException;
5-
import com.robotgryphon.compactcrafting.recipes.layers.FilledComponentRecipeLayer;
5+
import com.robotgryphon.compactcrafting.recipes.layers.impl.FilledComponentRecipeLayer;
66
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
77

88
public class FilledLayerLoader implements ILayerLoader {

src/main/java/com/robotgryphon/compactcrafting/recipes/json/loaders/HollowLayerLoader.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/json/layers/HollowLayerLoader.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.robotgryphon.compactcrafting.recipes.json.loaders;
1+
package com.robotgryphon.compactcrafting.recipes.json.layers;
22

33
import com.google.gson.JsonObject;
4-
import com.robotgryphon.compactcrafting.recipes.json.RecipeLoadingException;
5-
import com.robotgryphon.compactcrafting.recipes.layers.HollowComponentRecipeLayer;
4+
import com.robotgryphon.compactcrafting.recipes.exceptions.RecipeLoadingException;
5+
import com.robotgryphon.compactcrafting.recipes.layers.impl.HollowComponentRecipeLayer;
66
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
77

88
public class HollowLayerLoader implements ILayerLoader {

src/main/java/com/robotgryphon/compactcrafting/recipes/json/loaders/ILayerLoader.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/json/layers/ILayerLoader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package com.robotgryphon.compactcrafting.recipes.json.loaders;
1+
package com.robotgryphon.compactcrafting.recipes.json.layers;
22

33
import com.google.gson.JsonObject;
4-
import com.robotgryphon.compactcrafting.recipes.json.RecipeLoadingException;
4+
import com.robotgryphon.compactcrafting.recipes.exceptions.RecipeLoadingException;
55
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
66

77
public interface ILayerLoader {

src/main/java/com/robotgryphon/compactcrafting/recipes/json/LayerDeserializer.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/json/layers/LayerDeserializer.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
package com.robotgryphon.compactcrafting.recipes.json;
1+
package com.robotgryphon.compactcrafting.recipes.json.layers;
22

33
import com.google.gson.*;
44
import com.robotgryphon.compactcrafting.CompactCrafting;
5-
import com.robotgryphon.compactcrafting.recipes.json.loaders.FilledLayerLoader;
6-
import com.robotgryphon.compactcrafting.recipes.json.loaders.HollowLayerLoader;
7-
import com.robotgryphon.compactcrafting.recipes.json.loaders.ILayerLoader;
8-
import com.robotgryphon.compactcrafting.recipes.json.loaders.MixedLayerLoader;
5+
import com.robotgryphon.compactcrafting.recipes.exceptions.RecipeLoadingException;
96
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
107

118
import java.lang.reflect.Type;

0 commit comments

Comments
 (0)