diff --git a/build.gradle b/build.gradle index a3a2175..a5dc6af 100644 --- a/build.gradle +++ b/build.gradle @@ -21,7 +21,7 @@ apply plugin: 'eclipse' apply plugin: 'maven-publish' apply plugin: 'org.spongepowered.mixin' -version = '1.16.5-0.1.65-B' + getVersionNumber() +version = '1.16.5-0.1.66-B' + getVersionNumber() group = 'com.ticticboooom.mods.mm' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'MasterfulMachinery' java.toolchain.languageVersion = JavaLanguageVersion.of(8) // Mojang ships Java 8 to end users, so your mod should target Java 8. diff --git a/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineStructureRecipeCategory.java b/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineStructureRecipeCategory.java index 7ab1b43..daa4941 100644 --- a/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineStructureRecipeCategory.java +++ b/src/main/java/com/ticticboooom/mods/mm/client/jei/category/MachineStructureRecipeCategory.java @@ -9,6 +9,7 @@ import com.ticticboooom.mods.mm.client.util.GuiBlockRenderBuilder; import com.ticticboooom.mods.mm.data.MachineStructureRecipe; import com.ticticboooom.mods.mm.data.model.structure.MachineStructureBlockPos; import com.ticticboooom.mods.mm.data.model.structure.MachineStructurePort; +import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeData; import com.ticticboooom.mods.mm.data.model.structure.MachineStructureRecipeKeyModel; import com.ticticboooom.mods.mm.helper.GLScissor; import com.ticticboooom.mods.mm.helper.RLUtils; @@ -195,13 +196,15 @@ public class MachineStructureRecipeCategory implements IRecipeCategory tag = BlockTags.getCollection().getTagByID(resourceLocation); - Integer index = this.variantIndices.get(part.getPos()); + Integer index = this.variantIndices.get(model.getPos()); Block block = tag.getAllElements().get(index); if (this.tickTimer == 0) { - this.variantIndices.put(part.getPos(), (index + 1) % tag.getAllElements().size()); + this.variantIndices.put(model.getPos(), (index + 1) % tag.getAllElements().size()); } if (block != null) { @@ -229,10 +232,10 @@ public class MachineStructureRecipeCategory implements IRecipeCategory> ports = port.isInput() ? MMLoader.IPORT_BLOCKS : MMLoader.OPORT_BLOCKS; - Integer index = this.variantIndices.get(part.getPos()); + Integer index = this.variantIndices.get(model.getPos()); String controllerId = port.getControllerId().get(index); if (this.tickTimer == 0) { - this.variantIndices.put(part.getPos(), (index + 1) % port.getControllerId().size()); + this.variantIndices.put(model.getPos(), (index + 1) % port.getControllerId().size()); } String type = port.getType(); MachinePortBlock block = null; diff --git a/src/main/java/com/ticticboooom/mods/mm/data/MachineStructureRecipe.java b/src/main/java/com/ticticboooom/mods/mm/data/MachineStructureRecipe.java index 569f789..a03f35c 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/MachineStructureRecipe.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/MachineStructureRecipe.java @@ -63,9 +63,9 @@ public class MachineStructureRecipe implements IRecipe { BlockPos rotatedPos1 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.CLOCKWISE_180); BlockPos rotatedPos2 = new BlockPos(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()).rotate(Rotation.COUNTERCLOCKWISE_90); - rotated.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos.getX(), rotatedPos.getY(), rotatedPos.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort())); - rotated1.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos1.getX(), rotatedPos1.getY(), rotatedPos1.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort())); - rotated2.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos2.getX(), rotatedPos2.getY(), rotatedPos2.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort())); + rotated.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos.getX(), rotatedPos.getY(), rotatedPos.getZ()), model.getData())); + rotated1.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos1.getX(), rotatedPos1.getY(), rotatedPos1.getZ()), model.getData())); + rotated2.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(rotatedPos2.getX(), rotatedPos2.getY(), rotatedPos2.getZ()), model.getData())); } this.models = new ArrayList<>(); @@ -85,7 +85,7 @@ public class MachineStructureRecipe implements IRecipe { List mirrored = new ArrayList<>(); for (MachineStructureRecipeKeyModel model : models) { BlockPos mirroredPos = new BlockPos(-model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()); - mirrored.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(mirroredPos.getX(), mirroredPos.getY(), mirroredPos.getZ()), model.getTag(), model.getBlock(), model.getProperties(), model.getPort())); + mirrored.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(mirroredPos.getX(), mirroredPos.getY(), mirroredPos.getZ()), model.getData())); } return mirrored; } @@ -135,51 +135,56 @@ public class MachineStructureRecipe implements IRecipe { public boolean innerBlockMatch(BlockPos controllerPos, World world, MachineStructureRecipeKeyModel model) { - BlockPos pos = controllerPos.add(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()); - BlockState blockState = world.getBlockState(pos); - boolean valid = false; - if (!model.getTag().equals("")) { - String[] split = model.getTag().split(":"); - if (split.length != 2) { - MM.LOG.fatal("too many : (colons) in structure tag: {}", model.getTag()); - return false; - } - ITag tag = BlockTags.getCollection().get(new ResourceLocation(split[0], split[1])); - if (tag == null) { - MM.LOG.fatal("no existing block tag for structure tag: {}", model.getTag()); - return false; - } - valid = tag.contains(blockState.getBlock()); - } else if (!model.getBlock().equals("")) { - valid = blockState.getBlock().getRegistryName().toString().equals(model.getBlock()); - } else if (model.getPort() != null) { - MachineStructurePort structurePort = model.getPort(); - TileEntity portBlockEntity = world.getTileEntity(pos); - if (portBlockEntity instanceof IMachinePortTile && blockState.getBlock() instanceof MachinePortBlock) { - IMachinePortTile portTile = (IMachinePortTile) portBlockEntity; - MachinePortBlock portBlock = ((MachinePortBlock) blockState.getBlock()); - if (portTile.isInput() == structurePort.isInput() && - portBlock.getPortTypeId().equals(RLUtils.toRL(structurePort.getType()))) { - List controllerIds = structurePort.getControllerId() != null ? structurePort.getControllerId() : this.controllerId; - valid = controllerIds.contains(portBlock.getControllerId()); + //List toMatch = matcher.getData() == null ? Collections.singletonList(matcher) : matcher.getData(); + + for (MachineStructureRecipeData data : model.getData()) { + BlockPos pos = controllerPos.add(model.getPos().getX(), model.getPos().getY(), model.getPos().getZ()); + BlockState blockState = world.getBlockState(pos); + boolean valid = false; + if (!data.getTag().equals("")) { + String[] split = data.getTag().split(":"); + if (split.length != 2) { + MM.LOG.fatal("too many : (colons) in structure tag: {}", data.getTag()); + continue; + } + ITag tag = BlockTags.getCollection().get(new ResourceLocation(split[0], split[1])); + if (tag == null) { + MM.LOG.fatal("no existing block tag for structure tag: {}", data.getTag()); + continue; + } + valid = tag.contains(blockState.getBlock()); + } else if (!data.getBlock().equals("")) { + valid = blockState.getBlock().getRegistryName().toString().equals(data.getBlock()); + } else if (data.getPort() != null) { + MachineStructurePort structurePort = data.getPort(); + TileEntity portBlockEntity = world.getTileEntity(pos); + if (portBlockEntity instanceof IMachinePortTile && blockState.getBlock() instanceof MachinePortBlock) { + IMachinePortTile portTile = (IMachinePortTile) portBlockEntity; + MachinePortBlock portBlock = ((MachinePortBlock) blockState.getBlock()); + if (portTile.isInput() == structurePort.isInput() && + portBlock.getPortTypeId().equals(RLUtils.toRL(structurePort.getType()))) { + List controllerIds = structurePort.getControllerId() != null ? structurePort.getControllerId() : this.controllerId; + valid = controllerIds.contains(portBlock.getControllerId()); + } } } - } - if (!valid) { - return false; - } + if (!valid) { + continue; + } - if (model.getProperties() == null) { - return true; - } + if (data.getProperties() == null) { + return true; + } - - for (Map.Entry stringStringEntry : model.getProperties().entrySet()) { - for (Map.Entry, Comparable> propertyEntry : blockState.getValues().entrySet()) { - if (propertyEntry.getKey().getName().equals(stringStringEntry.getKey())) { - Optional o = propertyEntry.getKey().parseValue(stringStringEntry.getValue()); - return propertyEntry.getValue().equals(o.get()); + for (Map.Entry stringStringEntry : data.getProperties().entrySet()) { + for (Map.Entry, Comparable> propertyEntry : blockState.getValues().entrySet()) { + if (propertyEntry.getKey().getName().equals(stringStringEntry.getKey())) { + Optional o = propertyEntry.getKey().parseValue(stringStringEntry.getValue()); + if (propertyEntry.getValue().equals(o.get())) { + return true; + } + } } } } @@ -262,9 +267,11 @@ public class MachineStructureRecipe implements IRecipe { private List getResult(JsonObject legend, List> layout) throws InvalidStructureDefinitionException { HashMap model = new HashMap<>(); for (Map.Entry entry : legend.entrySet()) { + DataResult> apply = JsonOps.INSTANCE.withDecoder(MachineStructureRecipeLegendModel.CODEC).apply(entry.getValue()); - MachineStructureRecipeLegendModel first = apply.result().get().getFirst(); - model.put(entry.getKey().charAt(0), first); + MachineStructureRecipeLegendModel legendModel = apply.result().get().getFirst(); + + model.put(entry.getKey().charAt(0), legendModel); } ArrayList result = new ArrayList<>(); Vector3i controllerPos = getControllerPos(layout); @@ -283,7 +290,12 @@ public class MachineStructureRecipe implements IRecipe { } MachineStructureRecipeLegendModel machineStructureRecipeLegendModel = model.get(c); BlockPos pos = new BlockPos(x, y, z).subtract(new BlockPos(controllerPos)); - result.add(new MachineStructureRecipeKeyModel(new MachineStructureBlockPos(pos.getX(), pos.getY(), pos.getZ()), machineStructureRecipeLegendModel.getTag(), machineStructureRecipeLegendModel.getBlock(), machineStructureRecipeLegendModel.getProperties(), machineStructureRecipeLegendModel.getPort())); + + result.add(new MachineStructureRecipeKeyModel( + new MachineStructureBlockPos(pos.getX(), pos.getY(), pos.getZ()), + machineStructureRecipeLegendModel.getData() + )); + } z++; } @@ -341,6 +353,7 @@ public class MachineStructureRecipe implements IRecipe { buf.writeString(recipe.id); buf.writeString(recipe.name); try { + List model = recipe.getModels().get(0); buf.func_240629_a_(MachineStructureObject.CODEC, new MachineStructureObject(recipe.getModels().get(0))); } catch (Exception e) { e.printStackTrace(); @@ -364,26 +377,8 @@ public class MachineStructureRecipe implements IRecipe { private void validateStructure(List models, List controllerId, String id, ResourceLocation rl) throws InvalidStructureDefinitionException { for (MachineStructureRecipeKeyModel model : models) { - if (!model.getBlock().equals("")) { - if (RLUtils.isRL(model.getBlock())) { - if (!ForgeRegistries.BLOCKS.containsKey(RLUtils.toRL(model.getBlock()))) { - throw new InvalidStructureDefinitionException("Block: " + model.getBlock() + " is not an existing block in the game"); - } - } else { - throw new InvalidStructureDefinitionException("Block: " + model.getBlock() + " is defined but not a valid block id (ResourceLocation)"); - } - } else if (!model.getTag().equals("")) { - if (!RLUtils.isRL(model.getTag())) { - throw new InvalidStructureDefinitionException("Block Tag: " + model.getBlock() + " is defined but not a valid block tag id (ResourceLocation)"); - } - } else if (model.getPort() != null) { - if (!MMPorts.PORTS.containsKey(RLUtils.toRL(model.getPort().getType()))) { - throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port type id (ResourceLocation)"); - } else if (!controllerId.containsAll(model.getPort().getControllerId())) { - throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port controller id specified (ResourceLocation)"); - } - } else { - throw new InvalidStructureDefinitionException("You must define at least 1 'block' or 'tag' per port within the 'data' object"); + for (MachineStructureRecipeData data : model.getData()) { + validateModelData(data, controllerId); } } @@ -397,5 +392,29 @@ public class MachineStructureRecipe implements IRecipe { } } } + + private void validateModelData(MachineStructureRecipeData model, List controllerId) throws InvalidStructureDefinitionException { + if (!model.getBlock().equals("")) { + if (RLUtils.isRL(model.getBlock())) { + if (!ForgeRegistries.BLOCKS.containsKey(RLUtils.toRL(model.getBlock()))) { + throw new InvalidStructureDefinitionException("Block: " + model.getBlock() + " is not an existing block in the game"); + } + } else { + throw new InvalidStructureDefinitionException("Block: " + model.getBlock() + " is defined but not a valid block id (ResourceLocation)"); + } + } else if (!model.getTag().equals("")) { + if (!RLUtils.isRL(model.getTag())) { + throw new InvalidStructureDefinitionException("Block Tag: " + model.getBlock() + " is defined but not a valid block tag id (ResourceLocation)"); + } + } else if (model.getPort() != null) { + if (!MMPorts.PORTS.containsKey(RLUtils.toRL(model.getPort().getType()))) { + throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port type id (ResourceLocation)"); + } else if (!controllerId.containsAll(model.getPort().getControllerId())) { + throw new InvalidStructureDefinitionException("Port: " + model.getPort() + " is defined but not a valid port controller id specified (ResourceLocation)"); + } + } else { + throw new InvalidStructureDefinitionException("You must define at least 1 'block' or 'tag' per port within the 'data' object"); + } + } } } diff --git a/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeData.java b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeData.java new file mode 100644 index 0000000..b450d71 --- /dev/null +++ b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeData.java @@ -0,0 +1,26 @@ +package com.ticticboooom.mods.mm.data.model.structure; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Map; +import java.util.Optional; + +@Getter +@AllArgsConstructor +public class MachineStructureRecipeData { + + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( + Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)), + Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)), + Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("props").forGetter(z -> Optional.ofNullable(z.properties)), + MachineStructurePort.CODEC.optionalFieldOf("port").forGetter(z -> Optional.ofNullable(z.port)) + ).apply(x, (tag, block, props, port) -> new MachineStructureRecipeData(tag.orElse(""), block.orElse(""), props.orElse(null), port.orElse(null)))); + + private final String tag; + private final String block; + private final Map properties; + private final MachineStructurePort port; +} diff --git a/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeKeyModel.java b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeKeyModel.java index b431e2c..c584bf4 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeKeyModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeKeyModel.java @@ -1,27 +1,27 @@ package com.ticticboooom.mods.mm.data.model.structure; +import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import lombok.AllArgsConstructor; import lombok.Getter; -import java.util.Map; -import java.util.Optional; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; @Getter @AllArgsConstructor public class MachineStructureRecipeKeyModel { + public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( MachineStructureBlockPos.CODEC.fieldOf("pos").forGetter(z -> z.pos), - Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)), - Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)), - Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("nbt").forGetter(z -> Optional.ofNullable(z.properties)), - MachineStructurePort.CODEC.optionalFieldOf("port").forGetter(z -> Optional.ofNullable(z.port)) - ).apply(x, (w0, w, y, z, z0) -> new MachineStructureRecipeKeyModel(w0, w.orElse(""), y.orElse(""), z.orElse(null), z0.orElse(null)))); - private MachineStructureBlockPos pos; - private final String tag; - private final String block; - private final Map properties; - private final MachineStructurePort port; + Codec.either(MachineStructureRecipeData.CODEC, Codec.list(MachineStructureRecipeData.CODEC)).xmap( + either -> either.map(Collections::singletonList, Function.identity()), + data -> data.size() == 1 ? Either.left(data.get(0)) : Either.right(data) + ).fieldOf("data").forGetter(z -> z.data) + ).apply(x, MachineStructureRecipeKeyModel::new)); + private MachineStructureBlockPos pos; + private final List data; } diff --git a/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeLegendModel.java b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeLegendModel.java index 5144761..e3368f6 100644 --- a/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeLegendModel.java +++ b/src/main/java/com/ticticboooom/mods/mm/data/model/structure/MachineStructureRecipeLegendModel.java @@ -1,26 +1,24 @@ package com.ticticboooom.mods.mm.data.model.structure; +import com.mojang.datafixers.util.Either; import com.mojang.serialization.Codec; -import com.mojang.serialization.codecs.RecordCodecBuilder; +import com.mojang.serialization.DataResult; import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.Setter; -import java.util.Map; -import java.util.Optional; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; @Getter @AllArgsConstructor public class MachineStructureRecipeLegendModel { - public static final Codec CODEC = RecordCodecBuilder.create(x -> x.group( - Codec.STRING.optionalFieldOf("tag").forGetter(z -> Optional.of(z.tag)), - Codec.STRING.optionalFieldOf("block").forGetter(z -> Optional.of(z.block)), - Codec.unboundedMap(Codec.STRING, Codec.STRING).optionalFieldOf("props").forGetter(z -> Optional.ofNullable(z.properties)), - MachineStructurePort.CODEC.optionalFieldOf("port").forGetter(z -> Optional.ofNullable(z.port)) - ).apply(x, (w, y, z, z0) -> new MachineStructureRecipeLegendModel(w.orElse(""), y.orElse(""), z.orElse(null), z0.orElse(null)))); - private final String tag; - private final String block; - @Setter - private Map properties; - private final MachineStructurePort port; + + public static final Codec CODEC = + Codec.either(MachineStructureRecipeData.CODEC, Codec.list(MachineStructureRecipeData.CODEC)).xmap( + either -> either.map(Collections::singletonList, Function.identity()), + data -> data.size() == 1 ? Either.left(data.get(0)) : Either.right(data) + ).comapFlatMap(data -> DataResult.success(new MachineStructureRecipeLegendModel(data)), model -> model.data); + + private final List data; } diff --git a/src/test/resources/data/mm/recipes/structures/test_fe.json b/src/test/resources/data/mm/recipes/structures/test_fe.json index 7c54d49..9f16b62 100644 --- a/src/test/resources/data/mm/recipes/structures/test_fe.json +++ b/src/test/resources/data/mm/recipes/structures/test_fe.json @@ -1,19 +1,19 @@ { - "type": "masterfulmachinery:machine_structure", - "id": "test_energy", - "controllerId": "basic", - "name": "Test Energy", - "layout": [ - [ - "1C2" - ] - ], - "legend": { - "1": { - "block": "masterfulmachinery:basic_simple_port_energy_input" - }, - "2": { - "block": "masterfulmachinery:basic_simple_port_energy_output" + "type": "masterfulmachinery:machine_structure", + "id": "test_energy", + "controllerId": "basic", + "name": "Test Energy", + "layout": [ + [ + "1C2" + ] + ], + "legend": { + "1": { + "block": "masterfulmachinery:basic_simple_port_energy_input" + }, + "2": { + "block": "masterfulmachinery:basic_simple_port_energy_output" + } } - } } \ No newline at end of file diff --git a/src/test/resources/data/mm/recipes/structures/test_fluid.json b/src/test/resources/data/mm/recipes/structures/test_fluid.json index 56beaef..3fa5fc0 100644 --- a/src/test/resources/data/mm/recipes/structures/test_fluid.json +++ b/src/test/resources/data/mm/recipes/structures/test_fluid.json @@ -1,19 +1,19 @@ { - "type": "masterfulmachinery:machine_structure", - "id": "test_fluids", - "controllerId": "basic", - "name": "Test Fluids", - "layout": [ - [ - "1C2" - ] - ], - "legend": { - "1": { - "block": "masterfulmachinery:basic_simple_port_fluids_input" - }, - "2": { - "block": "masterfulmachinery:basic_simple_port_fluids_output" + "type": "masterfulmachinery:machine_structure", + "id": "test_fluids", + "controllerId": "basic", + "name": "Test Fluids", + "layout": [ + [ + "1C2" + ] + ], + "legend": { + "1": { + "block": "masterfulmachinery:basic_simple_port_fluids_input" + }, + "2": { + "block": "masterfulmachinery:basic_simple_port_fluids_output" + } } - } } \ No newline at end of file diff --git a/src/test/resources/data/mm/recipes/structures/test_multi_legend.json b/src/test/resources/data/mm/recipes/structures/test_multi_legend.json new file mode 100644 index 0000000..b4a0225 --- /dev/null +++ b/src/test/resources/data/mm/recipes/structures/test_multi_legend.json @@ -0,0 +1,38 @@ +{ + "type": "masterfulmachinery:machine_structure", + "id": "test_multi_legend", + "controllerId": "basic", + "name": "Test Multi Legend", + "layout": [ + [ + "12C34" + ] + ], + "legend": { + "1": { + "block": "masterfulmachinery:basic_simple_port_items_input" + }, + "2": { + "block": "masterfulmachinery:basic_simple_port_create_rotation_input" + }, + "3": [ + { + "block": "minecraft:stone" + }, + { + "tag": "minecraft:planks" + } + ], + "4": [ + { + "block": "minecraft:glowstone" + }, + { + "block": "minecraft:piston", + "props": { + "extended": "true" + } + } + ] + } +} diff --git a/version.properties b/version.properties index 7ac71bc..13cabe4 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -#Fri Aug 12 14:32:26 UTC 2022 -VERSION_CODE=989 +#Sat Aug 13 11:52:53 UTC 2022 +VERSION_CODE=1019