Skip to content

Commit 2269792

Browse files
committed
Add SingleBlockModifier to machine pattern
- This ensures future retrieval of the BlockInformation at the position already has the modifier as an available block Related #144
1 parent dfad691 commit 2269792

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/main/java/hellfirepvp/modularmachinery/common/machine/DynamicMachine.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ private static List<BlockPos> buildPermutations(List<Integer> avX, List<Integer>
247247
return out;
248248
}
249249

250-
private static void addModifierWithPattern(DynamicMachine machine, SingleBlockModifierReplacement mod, JsonObject part) throws JsonParseException {
250+
private static void addModifierWithPattern(DynamicMachine machine, TaggedPositionBlockArray pattern, SingleBlockModifierReplacement mod, JsonObject part) throws JsonParseException {
251251
List<Integer> avX = new ArrayList<>();
252252
List<Integer> avY = new ArrayList<>();
253253
List<Integer> avZ = new ArrayList<>();
@@ -259,6 +259,10 @@ private static void addModifierWithPattern(DynamicMachine machine, SingleBlockMo
259259
if (permutation.getX() == 0 && permutation.getY() == 0 && permutation.getZ() == 0) {
260260
continue; //We're not going to overwrite the controller.
261261
}
262+
// Clone the block info, we don't want to modify the canonical instance.
263+
BlockArray.BlockInformation info = pattern.getPattern().get(permutation).copy();
264+
info.addMatchingStates(mod.getBlockInformation().getMatchingStates());
265+
pattern.addBlock(permutation, info);
262266
machine.modifiers.putIfAbsent(permutation, Lists.newArrayList());
263267
machine.modifiers.get(permutation).add(mod.setPos(permutation));
264268
}
@@ -375,7 +379,7 @@ public DynamicMachine deserialize(JsonElement json, Type typeOfT, JsonDeserializ
375379

376380
// Modifiers
377381
if (root.has("modifiers")) {
378-
addModifiers(context, root, machine);
382+
addModifiers(context, root, machine, machine.pattern);
379383
}
380384

381385
// DynamicPatterns
@@ -550,7 +554,7 @@ private static void setMaxSize(final JsonObject jsonPattern, final DynamicPatter
550554
}
551555
}
552556

553-
private static void addModifiers(final JsonDeserializationContext context, final JsonObject root, final DynamicMachine machine) {
557+
private static void addModifiers(final JsonDeserializationContext context, final JsonObject root, final DynamicMachine machine, final TaggedPositionBlockArray pattern) {
554558
JsonElement partModifiers = root.get("modifiers");
555559
if (!partModifiers.isJsonArray()) {
556560
throw new JsonParseException("'modifiers' has to be an array of modifiers!");
@@ -561,7 +565,7 @@ private static void addModifiers(final JsonDeserializationContext context, final
561565
if (!modifier.isJsonObject()) {
562566
throw new JsonParseException("Elements of 'modifiers' have to be objects!");
563567
}
564-
addModifierWithPattern(machine, context.deserialize(modifier.getAsJsonObject(), SingleBlockModifierReplacement.class), modifier.getAsJsonObject());
568+
addModifierWithPattern(machine, pattern, context.deserialize(modifier.getAsJsonObject(), SingleBlockModifierReplacement.class), modifier.getAsJsonObject());
565569
}
566570
}
567571

0 commit comments

Comments
 (0)