Skip to content

Commit d351bbd

Browse files
committed
Basic pattern loader, fix particle spawning on field clear
1 parent 047a2ff commit d351bbd

File tree

7 files changed

+52
-28
lines changed

7 files changed

+52
-28
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,8 @@ private void tickCrafting() {
241241
if (world == null || world.isRemote())
242242
return;
243243

244-
List<ItemEntity> catalystEntities = getCatalystsInField(fieldBounds, currentRecipe.catalyst.getItem());
244+
// We grow the bounds check here a little to support patterns that are exactly the size of the field
245+
List<ItemEntity> catalystEntities = getCatalystsInField(fieldBounds.grow(0.25), currentRecipe.catalyst.getItem());
245246
if (catalystEntities.size() > 0) {
246247
// We dropped a catalyst item in
247248
// At this point, we had a valid recipe and a valid catalyst entity

src/main/java/com/robotgryphon/compactcrafting/client/render/FieldProjectorRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ private void renderProjectionCube(FieldProjectorTile tile, MatrixStack mx, IRend
265265

266266
IVertexBuilder builder = buffers.getBuffer(RenderTypesExtensions.PROJECTION_FIELD_RENDERTYPE);
267267

268-
double expansion = 0.0001;
268+
double expansion = 0.005;
269269
AxisAlignedBB slightlyBiggerBecauseFoxes = cube
270270
.expand(expansion, expansion, expansion)
271271
.expand(-expansion, -expansion, -expansion);

src/main/java/com/robotgryphon/compactcrafting/field/FieldProjection.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.robotgryphon.compactcrafting.field;
22

33
import com.robotgryphon.compactcrafting.blocks.FieldProjectorBlock;
4+
import net.minecraft.block.Blocks;
45
import net.minecraft.particles.ParticleTypes;
56
import net.minecraft.util.Direction;
67
import net.minecraft.util.math.AxisAlignedBB;
78
import net.minecraft.util.math.BlockPos;
89
import net.minecraft.world.IWorld;
910
import net.minecraft.world.IWorldReader;
11+
import net.minecraft.world.server.ServerWorld;
1012

1113
import java.util.Collections;
1214
import java.util.Comparator;
@@ -127,10 +129,13 @@ public void clearBlocks(IWorld world) {
127129
.map(BlockPos::toImmutable)
128130
.sorted(Comparator.comparingInt(BlockPos::getY).reversed())
129131
.forEach(blockPos -> {
130-
world.destroyBlock(blockPos, false);
131-
world.addParticle(ParticleTypes.LARGE_SMOKE,
132-
blockPos.getX() + 0.5f, blockPos.getY() + 0.5f, blockPos.getZ() + 0.5f,
133-
0d, 0.05D, 0D);
132+
world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 7);
133+
134+
if(world instanceof ServerWorld) {
135+
((ServerWorld) world).spawnParticle(ParticleTypes.LARGE_SMOKE,
136+
blockPos.getX() + 0.5f, blockPos.getY() + 0.5f, blockPos.getZ() + 0.5f,
137+
1,0d, 0.05D, 0D, 0.25d);
138+
}
134139
});
135140
}
136141
}

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

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

33
import com.google.gson.*;
4-
import com.mojang.datafixers.util.Pair;
5-
import com.mojang.serialization.JsonOps;
64
import com.robotgryphon.compactcrafting.CompactCrafting;
75
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
86
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
@@ -55,27 +53,33 @@ protected void apply(Map<ResourceLocation, JsonElement> objectIn, IResourceManag
5553

5654
loadCatalyst(recipe, root);
5755

56+
loadOutputs(recipe, root);
57+
5858
MiniaturizationRecipeManager.add(rl, recipe);
5959
}
6060
}
6161

62+
private boolean loadOutputs(MiniaturizationRecipe recipe, JsonObject root) {
63+
if(!root.has("outputs")) {
64+
CompactCrafting.LOGGER.warn("Warning: Recipe does not have outputs defined; not skipping here, but the recipe will not give anything!");
65+
return false;
66+
}
67+
68+
JsonArray outputs = root.getAsJsonArray("outputs");
69+
return false;
70+
}
71+
6272
private boolean loadCatalyst(MiniaturizationRecipe recipe, JsonObject root) {
6373
if(!root.has("catalyst")) {
6474
CompactCrafting.LOGGER.warn("Catalyst entry not found for recipe {}; skipping rest of recipe loading.", recipe.getRegistryName());
6575
return false;
6676
}
6777

6878
JsonObject catalyst = root.getAsJsonObject("catalyst");
69-
70-
Optional<ItemStack> stack = ItemStack.CODEC.decode(JsonOps.INSTANCE, catalyst)
71-
.get()
72-
.ifRight(err -> CompactCrafting.LOGGER.warn("Failed to load itemstack for catalyst: {}", err.message()))
73-
.mapLeft(Pair::getFirst)
74-
.left();
75-
79+
Optional<ItemStack> stack = RecipeLoaderUtil.getItemStack(catalyst);
7680
if(!stack.isPresent())
7781
return false;
78-
82+
7983
ItemStack c = stack.get();
8084

8185
if(c.getCount() != 1) {
@@ -116,7 +120,7 @@ private void loadComponents(JsonObject root, MiniaturizationRecipe recipe) {
116120

117121
components.entrySet().forEach(component -> {
118122
String key = component.getKey();
119-
Optional<BlockState> state = extractComponentDefinition(key, component.getValue());
123+
Optional<BlockState> state = RecipeLoaderUtil.extractComponentDefinition(key, component.getValue());
120124

121125
if(key.isEmpty() || !state.isPresent()) {
122126
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}; definition not found.", key);
@@ -127,11 +131,4 @@ private void loadComponents(JsonObject root, MiniaturizationRecipe recipe) {
127131
});
128132
}
129133

130-
private Optional<BlockState> extractComponentDefinition(String key, JsonElement definition) {
131-
JsonObject comp = definition.getAsJsonObject();
132-
return BlockState.CODEC.decode(JsonOps.INSTANCE, comp)
133-
.get().ifRight(error -> {
134-
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}: {}", key, error.message());
135-
}).mapLeft(Pair::getFirst).left();
136-
}
137134
}

src/main/java/com/robotgryphon/compactcrafting/util/RecipeLoaderUtil.java renamed to src/main/java/com/robotgryphon/compactcrafting/recipes/json/RecipeLoaderUtil.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
1-
package com.robotgryphon.compactcrafting.util;
1+
package com.robotgryphon.compactcrafting.recipes.json;
22

33
import com.google.gson.JsonArray;
44
import com.google.gson.JsonElement;
55
import com.google.gson.JsonObject;
66
import com.google.gson.JsonParseException;
7+
import com.mojang.datafixers.util.Pair;
8+
import com.mojang.serialization.JsonOps;
9+
import com.robotgryphon.compactcrafting.CompactCrafting;
10+
import net.minecraft.block.BlockState;
11+
import net.minecraft.item.ItemStack;
712
import net.minecraft.util.math.BlockPos;
813

914
import java.util.Collections;
1015
import java.util.HashMap;
1116
import java.util.Map;
17+
import java.util.Optional;
1218

1319
public class RecipeLoaderUtil {
1420

@@ -79,4 +85,20 @@ public static Map<BlockPos, String> getComponentMapFromPattern(JsonObject layer)
7985

8086
return convertMultiArrayToMap(mappedToArray);
8187
}
88+
89+
public static Optional<ItemStack> getItemStack(JsonObject stack) {
90+
return ItemStack.CODEC.decode(JsonOps.INSTANCE, stack)
91+
.get()
92+
.ifRight(err -> CompactCrafting.LOGGER.warn("Failed to load itemstack from JSON: {}", err.message()))
93+
.mapLeft(Pair::getFirst)
94+
.left();
95+
}
96+
97+
public static Optional<BlockState> extractComponentDefinition(String key, JsonElement definition) {
98+
JsonObject comp = definition.getAsJsonObject();
99+
return BlockState.CODEC.decode(JsonOps.INSTANCE, comp)
100+
.get().ifRight(error -> {
101+
CompactCrafting.LOGGER.warn("Failed to process blockstate for component {}: {}", key, error.message());
102+
}).mapLeft(Pair::getFirst).left();
103+
}
82104
}

src/main/java/com/robotgryphon/compactcrafting/recipes/json/loaders/MixedLayerLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.google.gson.JsonParseException;
55
import com.robotgryphon.compactcrafting.recipes.layers.IRecipeLayer;
66
import com.robotgryphon.compactcrafting.recipes.layers.MixedComponentRecipeLayer;
7-
import com.robotgryphon.compactcrafting.util.RecipeLoaderUtil;
7+
import com.robotgryphon.compactcrafting.recipes.json.RecipeLoaderUtil;
88
import net.minecraft.util.math.BlockPos;
99

1010
import java.util.Map;

src/test/java/com/robotgryphon/compactcrafting/util/RecipeLoaderUtilTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.robotgryphon.compactcrafting.util;
22

3+
import com.robotgryphon.compactcrafting.recipes.json.RecipeLoaderUtil;
34
import net.minecraft.util.math.BlockPos;
45
import org.junit.jupiter.api.Test;
56

67
import java.util.Arrays;
78
import java.util.Map;
89

9-
import static org.junit.jupiter.api.Assertions.*;
10-
1110
class RecipeLoaderUtilTest {
1211

1312
@Test

0 commit comments

Comments
 (0)