From 4b59528b31612b6c32429c62933ba98a5e039a48 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Wed, 11 Sep 2024 00:23:14 +0100 Subject: [PATCH 01/46] Fix race in Contraption simplifiedEntityColliders update This issue is most obvious in elevators with multiple doors. When the collider gets invalidated multiple times in quick succession, multiple futures are created. If a future which was started before all door state updates were finalized completed after all other futures, the final simplifiedEntityColliders would be outdated and invalid (containing ghost doors, or in the case of an elevator in motion, missing door collisions). This commit addresses this issue in two ways: First by cancelling any existing future to ensure that any future which completes was started after the most recent invalidation. Second by removing the null assignment of simplifiedEntityColliderProvider from the future. This prevents the future from becoming null after a null check and before a cancellation (the only time where the null value matters). Cancelling a future twice is not an issue so there's no need to track if the future is null other than to avoid a null dereference. --- .../com/simibubi/create/content/contraptions/Contraption.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index f38e1c78e..d004d9ae2 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -1386,6 +1386,9 @@ public abstract class Contraption { private void gatherBBsOffThread() { getContraptionWorld(); + if (simplifiedEntityColliderProvider != null) { + simplifiedEntityColliderProvider.cancel(false); + } simplifiedEntityColliderProvider = CompletableFuture.supplyAsync(() -> { VoxelShape combinedShape = Shapes.empty(); for (Entry entry : blocks.entrySet()) { @@ -1402,7 +1405,6 @@ public abstract class Contraption { }) .thenAccept(r -> { simplifiedEntityColliders = Optional.of(r); - simplifiedEntityColliderProvider = null; }); } From ac61d249cce3b93a06b4e67f6ce2e3c1729ba933 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Mon, 16 Sep 2024 17:29:10 -0400 Subject: [PATCH 02/46] fix blocks having unsafe nbt values --- .../foundation/utility/NBTProcessors.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java index f685969c9..eab609906 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java @@ -58,7 +58,7 @@ public final class NBTProcessors { addProcessor(AllBlockEntityTypes.CREATIVE_CRATE.get(), itemProcessor("Filter")); addProcessor(AllBlockEntityTypes.PLACARD.get(), itemProcessor("Item")); } - + // Triggered by block tag, not BE type private static final UnaryOperator signProcessor = data -> { for (int i = 0; i < 4; ++i) @@ -86,14 +86,22 @@ public final class NBTProcessors { } public static ItemStack withUnsafeNBTDiscarded(ItemStack stack) { - if (stack.getTag() == null) + CompoundTag tag = stack.getTag(); + if (tag == null) return stack; ItemStack copy = stack.copy(); - stack.getTag() - .getAllKeys() + copy.setTag(withUnsafeNBTDiscarded(tag)); + return copy; + } + + public static CompoundTag withUnsafeNBTDiscarded(CompoundTag tag) { + if (tag == null) + return null; + CompoundTag copy = tag.copy(); + tag.getAllKeys() .stream() .filter(NBTProcessors::isUnsafeItemNBTKey) - .forEach(copy::removeTagKey); + .forEach(copy::remove); return copy; } @@ -136,7 +144,7 @@ public final class NBTProcessors { return signProcessor.apply(compound); if (blockEntity.onlyOpCanSetNbt()) return null; - return compound; + return withUnsafeNBTDiscarded(compound); } } From c59c749ed54d9769232d4b7b94e32fd9c90dd58d Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 4 Sep 2024 18:20:13 -0400 Subject: [PATCH 03/46] fix: items in ponders being culled incorrectly - Items shouldn't be culled in ponder worlds, the cullingFrustum is wrong and ponders are unpredictable --- .../create/content/kinetics/belt/BeltRenderer.java | 2 +- .../blockEntity/renderer/SafeBlockEntityRenderer.java | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java index cd5af645f..469a839f2 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltRenderer.java @@ -233,7 +233,7 @@ public class BeltRenderer extends SafeBlockEntityRenderer { be.getBlockPos().getZ()) .add(offsetVec); - if (this.shouldCullItem(itemPos)) { + if (this.shouldCullItem(itemPos, be.getLevel())) { continue; } diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/SafeBlockEntityRenderer.java b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/SafeBlockEntityRenderer.java index f26940d4c..d9b8d4c69 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/SafeBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/renderer/SafeBlockEntityRenderer.java @@ -2,10 +2,13 @@ package com.simibubi.create.foundation.blockEntity.renderer; import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.ponder.PonderWorld; + import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.AABB; @@ -28,7 +31,10 @@ public abstract class SafeBlockEntityRenderer implements .getBlock() == Blocks.AIR; } - public boolean shouldCullItem(Vec3 itemPos) { + public boolean shouldCullItem(Vec3 itemPos, Level level) { + if (level instanceof PonderWorld) + return false; + Frustum frustum = Minecraft.getInstance().levelRenderer.capturedFrustum != null ? Minecraft.getInstance().levelRenderer.capturedFrustum : Minecraft.getInstance().levelRenderer.cullingFrustum; From 84911a3de5b38153d96330224f7066a6dcc9d06d Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 6 Sep 2024 16:10:15 -0400 Subject: [PATCH 04/46] Fix #6906 --- .../com/simibubi/create/foundation/mixin/BlockItemMixin.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java index a9c6d514b..f4031bcb2 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java @@ -9,7 +9,6 @@ import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; @@ -22,7 +21,7 @@ public class BlockItemMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) private void create$fixDeployerPlacement(BlockPlaceContext pContext, CallbackInfoReturnable cir) { BlockState state = pContext.getLevel().getBlockState(((UseOnContextAccessor) pContext).create$getHitResult().getBlockPos()); - if (state != Blocks.AIR.defaultBlockState() && pContext.getPlayer() instanceof DeployerFakePlayer) { + if (!state.canBeReplaced() && pContext.getPlayer() instanceof DeployerFakePlayer) { cir.setReturnValue(InteractionResult.PASS); } } From 5905e8bc931434c7d178c83442f153eed315a2a7 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 12:48:36 +0200 Subject: [PATCH 05/46] Bringing the Cheat - Clipboards now validate their data item #6928 - Backport #6911 --- gradle.properties | 2 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../content/equipment/clipboard/ClipboardBlockEntity.java | 2 ++ .../com/simibubi/create/foundation/mixin/BlockItemMixin.java | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4c75a885b..6bb0ec39d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.5.1.h +mod_version = 0.5.1.i artifact_minecraft_version = 1.18.2 minecraft_version = 1.18.2 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index b4657f70f..145b1c4db 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -61,7 +61,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.5.1h"; + public static final String VERSION = "0.5.1i"; public static final Logger LOGGER = LogUtils.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/equipment/clipboard/ClipboardBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/clipboard/ClipboardBlockEntity.java index 7d1afe661..2537f6a88 100644 --- a/src/main/java/com/simibubi/create/content/equipment/clipboard/ClipboardBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/clipboard/ClipboardBlockEntity.java @@ -68,6 +68,8 @@ public class ClipboardBlockEntity extends SmartBlockEntity { protected void read(CompoundTag tag, boolean clientPacket) { super.read(tag, clientPacket); dataContainer = ItemStack.of(tag.getCompound("Item")); + if (!AllBlocks.CLIPBOARD.isIn(dataContainer)) + dataContainer = AllBlocks.CLIPBOARD.asStack(); if (clientPacket) DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> readClientSide(tag)); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java index f4031bcb2..afeaad404 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java @@ -21,7 +21,7 @@ public class BlockItemMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) private void create$fixDeployerPlacement(BlockPlaceContext pContext, CallbackInfoReturnable cir) { BlockState state = pContext.getLevel().getBlockState(((UseOnContextAccessor) pContext).create$getHitResult().getBlockPos()); - if (!state.canBeReplaced() && pContext.getPlayer() instanceof DeployerFakePlayer) { + if (!state.getMaterial().isReplaceable() && pContext.getPlayer() instanceof DeployerFakePlayer) { cir.setReturnValue(InteractionResult.PASS); } } From 8f5c91c1950e215a5987e2f6de6c427e13368583 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 13:22:12 +0200 Subject: [PATCH 06/46] I 2 didn't C the 'i' in that id - Fixed incorrect IC2 compatibility recipes #6917 #6916 --- src/generated/resources/.cache/cache | 10 +++++----- ...compat_ic2.json => ingot_aluminium_compat_ic2.json} | 4 ++-- ...compat_ic2.json => ingot_aluminium_compat_ic2.json} | 4 ++-- ...compat_ic2.json => ingot_aluminium_compat_ic2.json} | 2 +- ...compat_ic2.json => ingot_aluminium_compat_ic2.json} | 2 +- .../recipes/splashing/ic2/crushed_raw_aluminum.json | 2 +- .../create/foundation/data/recipe/CompatMetals.java | 6 ++++++ .../foundation/data/recipe/StandardRecipeGen.java | 2 +- .../foundation/data/recipe/WashingRecipeGen.java | 2 +- 9 files changed, 20 insertions(+), 14 deletions(-) rename src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (82%) rename src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (82%) rename src/generated/resources/data/create/recipes/blasting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (86%) rename src/generated/resources/data/create/recipes/smelting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (86%) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 5910315fa..56c7550b6 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -2359,7 +2359,7 @@ aec7192be51a921f7c2f9e52ca64e65cf92abf1f data/create/advancements/pipe_organ.jso abf054890da41c46221fddc2474e18d077b3c1a2 data/create/advancements/precision_mechanism.json 9eb2508128ae938f0e654f3b316aa324dd6a18e8 data/create/advancements/pulley_maxed.json 99361c643eb6fd9e0a97420f6b5d3df8bf7dbc3f data/create/advancements/recipes/building_blocks/andesite_from_stone_types_andesite_stonecutting.json -0989187987645c6b13ed453e0499a59962b8c767 data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_ic2.json +28d60ca8f6505017965426f65d842facafe44fec data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json 29a2f29f50306abaac8aa361102d3a30677fcd85 data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_immersiveengineering.json c6095aa02996b040d7a1ead9d32d720cd311ae7e data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_immersiveengineering.json 60e56e5c1d38762c04634f9c8e43c5e42a002046 data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_mekanism.json @@ -2389,7 +2389,7 @@ d252ea6ae1f88ab2286357d3a05a643eec7d92c3 data/create/advancements/recipes/buildi 78972bdf05d79e5357ff5771caa13d631e2c2740 data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json c8edb1be5163aaeebdd94f4c25ef45bf839200c0 data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json c70af1a552a80137cf25780b481387a585e551f3 data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json -96fdd3a575b158b657ddd0709a05ffa7ab4b0457 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_ic2.json +9a36450a9b8f0752202eb4dfb48d0c10051270c5 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json 4b86c2a3784cc837ab8b49c678517b53db188916 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_immersiveengineering.json cd59dee91b03d293a8e6501acc734261858cdb56 data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_immersiveengineering.json 80e276bd06ac555aa9203247a24f97c779cb80db data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_mekanism.json @@ -3864,7 +3864,7 @@ a133d4d2542c0b9309873d06a72e7efff4cee219 data/create/recipes/asurine_pillar_from 288d80210f7efb4664e2e9c9d9111049863e5f60 data/create/recipes/birch_window_pane.json 70b34d9573875b9bc15f8d71baac81ecd7c0ab60 data/create/recipes/blasting/copper_ingot_from_crushed.json 9f9f50e6f65d3077ee7c39403fffb31fea3bb408 data/create/recipes/blasting/gold_ingot_from_crushed.json -1002fb0e5f3ab0068c381ebc6488b868671d9f66 data/create/recipes/blasting/ingot_aluminum_compat_ic2.json +7f7f9f631e3c96af0446ad5d87ac47fb7f70d08d data/create/recipes/blasting/ingot_aluminium_compat_ic2.json 172904335190876e7b52bad7031b7d8f3fba426e data/create/recipes/blasting/ingot_aluminum_compat_immersiveengineering.json 9ba4fc584e7a275cf5b3785fead3dd21fd0d2172 data/create/recipes/blasting/ingot_lead_compat_immersiveengineering.json 020618b989b39ab6e6d5ce5fcf786afc23fb0dc0 data/create/recipes/blasting/ingot_lead_compat_mekanism.json @@ -5752,7 +5752,7 @@ daaa640dbfaa86685de636b89afe2fdd74cd0cf9 data/create/recipes/smelting/glass_pane 48bdeff8ca1ae7bf732fc870fb0fa294de56188a data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json 7035be7cce5a38c794d9cc872801329af81bac46 data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json a4fb256e4cc6cd9e450b054e8489f26655f6a1d2 data/create/recipes/smelting/gold_ingot_from_crushed.json -1d173fd2909e08c70d52051789e838757df6a1fa data/create/recipes/smelting/ingot_aluminum_compat_ic2.json +373278db29392d1a9823e71f09b28ed55789cd2b data/create/recipes/smelting/ingot_aluminium_compat_ic2.json 57996aea2f6456c936e248e4fd84fa5387fd3c4f data/create/recipes/smelting/ingot_aluminum_compat_immersiveengineering.json cadbfc99cab88f87a431cc8853e280d3871c4542 data/create/recipes/smelting/ingot_lead_compat_immersiveengineering.json 1b029da974db92f0bfa456c6aae9ffb709441ea7 data/create/recipes/smelting/ingot_lead_compat_mekanism.json @@ -5803,7 +5803,7 @@ fa9294fb2fbe22110ae122a616379b73ccf1d5c3 data/create/recipes/splashing/galospher c4d680eed98791fe45fa93aeeae9e8dbd508d6f5 data/create/recipes/splashing/gravel.json 7af4d9ae50af13da0d4fc814687f9586ff872798 data/create/recipes/splashing/gray_concrete_powder.json 23fb61c0e4bcca58fa7241db9cbef07bf4bd9a9b data/create/recipes/splashing/green_concrete_powder.json -82707bd9a72c35926ebf116fea1c4d9aea9a127a data/create/recipes/splashing/ic2/crushed_raw_aluminum.json +2c934a49e7766b12dd708e557a8b0ebc5600753b data/create/recipes/splashing/ic2/crushed_raw_aluminum.json f18f823c0274518a13da3be2850b916a6ece2900 data/create/recipes/splashing/ic2/crushed_raw_silver.json 71b4e6a4d62ec437f02bd2029455eb7ba5bb3943 data/create/recipes/splashing/ic2/crushed_raw_tin.json 8da1397c440f27a5af4cbfc169bcf74f83bf3c8a data/create/recipes/splashing/ic2/crushed_raw_uranium.json diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json similarity index 82% rename from src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json index 8d7973e25..6d99a0525 100644 --- a/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:blasting/ingot_aluminum_compat_ic2" + "create:blasting/ingot_aluminium_compat_ic2" ] }, "criteria": { @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:blasting/ingot_aluminum_compat_ic2" + "recipe": "create:blasting/ingot_aluminium_compat_ic2" } } }, diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json similarity index 82% rename from src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json index abf18f140..7abca1eaf 100644 --- a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json @@ -2,7 +2,7 @@ "parent": "minecraft:recipes/root", "rewards": { "recipes": [ - "create:smelting/ingot_aluminum_compat_ic2" + "create:smelting/ingot_aluminium_compat_ic2" ] }, "criteria": { @@ -21,7 +21,7 @@ "has_the_recipe": { "trigger": "minecraft:recipe_unlocked", "conditions": { - "recipe": "create:smelting/ingot_aluminum_compat_ic2" + "recipe": "create:smelting/ingot_aluminium_compat_ic2" } } }, diff --git a/src/generated/resources/data/create/recipes/blasting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json similarity index 86% rename from src/generated/resources/data/create/recipes/blasting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json index 326a58369..08f0c18dd 100644 --- a/src/generated/resources/data/create/recipes/blasting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json @@ -3,7 +3,7 @@ "ingredient": { "item": "create:crushed_raw_aluminum" }, - "result": "ic2:ingot_aluminum", + "result": "ic2:ingot_aluminium", "experience": 0.1, "cookingtime": 100, "conditions": [ diff --git a/src/generated/resources/data/create/recipes/smelting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json similarity index 86% rename from src/generated/resources/data/create/recipes/smelting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json index 6fb0e09de..92152e36c 100644 --- a/src/generated/resources/data/create/recipes/smelting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json @@ -3,7 +3,7 @@ "ingredient": { "item": "create:crushed_raw_aluminum" }, - "result": "ic2:ingot_aluminum", + "result": "ic2:ingot_aluminium", "experience": 0.1, "cookingtime": 200, "conditions": [ diff --git a/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json b/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json index 26e5bbfd3..8871bb3ca 100644 --- a/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json +++ b/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json @@ -7,7 +7,7 @@ ], "results": [ { - "item": "ic2:nugget_aluminum", + "item": "ic2:nugget_aluminium", "count": 9 } ], diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java b/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java index 5a87e23a5..bb1b7ea54 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/CompatMetals.java @@ -32,6 +32,12 @@ public enum CompatMetals { public String getName() { return name; } + + public String getName(Mods mod) { + if (this == ALUMINUM && mod == IC2) // include in mods.builder if this happens again + return "aluminium"; + return name; + } /** * These mods must provide an ingot and nugget variant of the corresponding metal. diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 1dae805e9..08cf018d2 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -1223,8 +1223,8 @@ public class StandardRecipeGen extends CreateRecipeProvider { } GeneratedRecipe blastModdedCrushedMetal(ItemEntry ingredient, CompatMetals metal) { - String metalName = metal.getName(); for (Mods mod : metal.getMods()) { + String metalName = metal.getName(mod); ResourceLocation ingot = mod.ingotOf(metalName); String modId = mod.getId(); create(ingot).withSuffix("_compat_" + modId) diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java index 6811c3607..4940ba3e6 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/WashingRecipeGen.java @@ -133,8 +133,8 @@ public class WashingRecipeGen extends ProcessingRecipeGen { } public GeneratedRecipe moddedCrushedOre(ItemEntry crushed, CompatMetals metal) { - String metalName = metal.getName(); for (Mods mod : metal.getMods()) { + String metalName = metal.getName(mod); ResourceLocation nugget = mod.nuggetOf(metalName); create(mod.getId() + "/" + crushed.getId() .getPath(), From a99f05d8b0da4188f4fc3da9bde6fad3ff015aac Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:56:13 +0200 Subject: [PATCH 07/46] Toolbugs - Attempt to improve handling of toolbox storage on contraptions #6940 --- .../content/contraptions/MountedStorage.java | 6 ++++++ .../equipment/toolbox/ToolboxInventory.java | 16 ++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/MountedStorage.java b/src/main/java/com/simibubi/create/content/contraptions/MountedStorage.java index ad9b0c859..3b86dafc6 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/MountedStorage.java +++ b/src/main/java/com/simibubi/create/content/contraptions/MountedStorage.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.contraptions; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllTags.AllBlockTags; +import com.simibubi.create.content.equipment.toolbox.ToolboxInventory; import com.simibubi.create.content.kinetics.crafter.MechanicalCrafterBlockEntity; import com.simibubi.create.content.logistics.crate.BottomlessItemHandler; import com.simibubi.create.content.logistics.vault.ItemVaultBlockEntity; @@ -177,6 +178,8 @@ public class MountedStorage { CompoundTag tag = handler.serializeNBT(); if (noFuel) NBTHelper.putMarker(tag, "NoFuel"); + if (handler instanceof ToolboxInventory) + NBTHelper.putMarker(tag, "Toolbox"); if (!(handler instanceof BottomlessItemHandler)) return tag; @@ -191,6 +194,9 @@ public class MountedStorage { storage.handler = new ItemStackHandler(); if (nbt == null) return storage; + if (nbt.contains("Toolbox")) + storage.handler = new ToolboxInventory(null); + storage.valid = true; storage.noFuel = nbt.contains("NoFuel"); diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxInventory.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxInventory.java index a9d69e9ca..bb16f4feb 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxInventory.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxInventory.java @@ -83,7 +83,7 @@ public class ToolboxInventory extends ItemStackHandler { } } settling = false; - blockEntity.sendData(); + notifyUpdate(); } @Override @@ -109,7 +109,7 @@ public class ToolboxInventory extends ItemStackHandler { if (!stack.isEmpty() && filters.get(compartment) .isEmpty()) { filters.set(compartment, ItemHandlerHelper.copyStackWithSize(stack, 1)); - blockEntity.sendData(); + notifyUpdate(); } } @@ -121,7 +121,7 @@ public class ToolboxInventory extends ItemStackHandler { if (!stack.isEmpty() && filters.get(compartment) .isEmpty()) { filters.set(compartment, ItemHandlerHelper.copyStackWithSize(stack, 1)); - blockEntity.sendData(); + notifyUpdate(); } } return insertItem; @@ -136,10 +136,9 @@ public class ToolboxInventory extends ItemStackHandler { @Override protected void onContentsChanged(int slot) { - if (!settling && !blockEntity.getLevel().isClientSide) + if (!settling && (blockEntity == null || !blockEntity.getLevel().isClientSide)) settle(slot / STACKS_PER_COMPARTMENT); - blockEntity.sendData(); - blockEntity.setChanged(); + notifyUpdate(); super.onContentsChanged(slot); } @@ -208,4 +207,9 @@ public class ToolboxInventory extends ItemStackHandler { return ItemHandlerHelper.canItemStacksStack(stack1, stack2); } + private void notifyUpdate() { + if (blockEntity != null) + blockEntity.notifyUpdate(); + } + } From 8e50ad4cfd286dcef741da4c47c5b5161972243a Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:43:50 +0200 Subject: [PATCH 08/46] Stack of Spades - Protect item handlers against invalid item stack sizes - Fix some held or dropped items not updating count when inserted into item handlers --- .../content/fluids/drain/ItemDrainItemHandler.java | 4 +++- .../create/content/kinetics/belt/BeltBlock.java | 2 ++ .../belt/transport/ItemHandlerBeltSegment.java | 5 ++++- .../kinetics/deployer/DeployerItemHandler.java | 4 +++- .../content/logistics/chute/ChuteItemHandler.java | 5 ++++- .../create/content/logistics/funnel/FunnelBlock.java | 2 +- .../logistics/tunnel/BrassTunnelItemHandler.java | 6 +++++- .../simibubi/create/foundation/item/ItemHelper.java | 12 ++++++++++++ 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainItemHandler.java b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainItemHandler.java index d69e16c55..44da916ea 100644 --- a/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainItemHandler.java +++ b/src/main/java/com/simibubi/create/content/fluids/drain/ItemDrainItemHandler.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.fluids.drain; import com.simibubi.create.content.fluids.transfer.GenericItemEmptying; import com.simibubi.create.content.kinetics.belt.transport.TransportedItemStack; +import com.simibubi.create.foundation.item.ItemHelper; import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; @@ -38,7 +39,8 @@ public class ItemDrainItemHandler implements IItemHandler { if (stack.getCount() > 1 && GenericItemEmptying.canItemBeEmptied(blockEntity.getLevel(), stack)) { returned = ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - 1); stack = ItemHandlerHelper.copyStackWithSize(stack, 1); - } + } else + returned = ItemHelper.limitCountToMaxStackSize(stack, simulate); if (!simulate) { TransportedItemStack heldItem = new TransportedItemStack(stack); diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java index 64c37cc2c..944e4a399 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltBlock.java @@ -218,6 +218,8 @@ public class BeltBlock extends HorizontalKineticBlock .copy(), false); if (remainder.isEmpty()) itemEntity.discard(); + else if (remainder.getCount() != itemEntity.getItem().getCount()) + itemEntity.setItem(remainder); }); return; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/transport/ItemHandlerBeltSegment.java b/src/main/java/com/simibubi/create/content/kinetics/belt/transport/ItemHandlerBeltSegment.java index 0a5248c5f..15f20c86d 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/transport/ItemHandlerBeltSegment.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/transport/ItemHandlerBeltSegment.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.kinetics.belt.transport; +import com.simibubi.create.foundation.item.ItemHelper; + import net.minecraft.world.item.ItemStack; import net.minecraftforge.items.IItemHandler; @@ -29,6 +31,7 @@ public class ItemHandlerBeltSegment implements IItemHandler { @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { if (this.beltInventory.canInsertAt(offset)) { + ItemStack remainder = ItemHelper.limitCountToMaxStackSize(stack, simulate); if (!simulate) { TransportedItemStack newStack = new TransportedItemStack(stack); newStack.insertedAt = offset; @@ -38,7 +41,7 @@ public class ItemHandlerBeltSegment implements IItemHandler { this.beltInventory.belt.setChanged(); this.beltInventory.belt.sendData(); } - return ItemStack.EMPTY; + return remainder; } return stack; } diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerItemHandler.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerItemHandler.java index ecabcf2ed..ac106c825 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerItemHandler.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerItemHandler.java @@ -1,6 +1,7 @@ package com.simibubi.create.content.kinetics.deployer; import com.simibubi.create.foundation.blockEntity.behaviour.filtering.FilteringBehaviour; +import com.simibubi.create.foundation.item.ItemHelper; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; @@ -52,9 +53,10 @@ public class DeployerItemHandler implements IItemHandlerModifiable { ItemStack held = getHeld(); if (held.isEmpty()) { + ItemStack remainder = ItemHelper.limitCountToMaxStackSize(stack, simulate); if (!simulate) set(stack); - return ItemStack.EMPTY; + return remainder; } if (!ItemHandlerHelper.canItemStacksStack(held, stack)) diff --git a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteItemHandler.java b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteItemHandler.java index 72a77ff01..7179a1d26 100644 --- a/src/main/java/com/simibubi/create/content/logistics/chute/ChuteItemHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/chute/ChuteItemHandler.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.logistics.chute; +import com.simibubi.create.foundation.item.ItemHelper; + import net.minecraft.world.item.ItemStack; import net.minecraftforge.items.IItemHandler; @@ -25,9 +27,10 @@ public class ChuteItemHandler implements IItemHandler { public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { if (!blockEntity.canAcceptItem(stack)) return stack; + ItemStack remainder = ItemHelper.limitCountToMaxStackSize(stack, simulate); if (!simulate) blockEntity.setItem(stack); - return ItemStack.EMPTY; + return remainder; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlock.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlock.java index d617c9e42..460819ad9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlock.java @@ -93,7 +93,7 @@ public abstract class FunnelBlock extends AbstractDirectionalFunnelBlock { withBlockEntityDo(worldIn, pos, be -> { ItemStack toInsert = heldItem.copy(); ItemStack remainder = tryInsert(worldIn, pos, toInsert, false); - if (!ItemStack.matches(remainder, toInsert)) + if (!ItemStack.matches(remainder, toInsert) || remainder.getCount() != heldItem.getCount()) player.setItemInHand(handIn, remainder); }); return InteractionResult.SUCCESS; diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BrassTunnelItemHandler.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BrassTunnelItemHandler.java index 430755c50..0db27450a 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BrassTunnelItemHandler.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BrassTunnelItemHandler.java @@ -1,5 +1,7 @@ package com.simibubi.create.content.logistics.tunnel; +import com.simibubi.create.foundation.item.ItemHelper; + import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.items.IItemHandler; @@ -33,9 +35,11 @@ public class BrassTunnelItemHandler implements IItemHandler { if (!blockEntity.canTakeItems()) return stack; + + ItemStack remainder = ItemHelper.limitCountToMaxStackSize(stack, simulate); if (!simulate) blockEntity.setStackToDistribute(stack, null); - return ItemStack.EMPTY; + return remainder; } @Override diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index 1f4e09d18..9ea14a53c 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -276,4 +276,16 @@ public class ItemHelper { } return -1; } + + public static ItemStack limitCountToMaxStackSize(ItemStack stack, boolean simulate) { + int count = stack.getCount(); + int max = stack.getMaxStackSize(); + if (count <= max) + return ItemStack.EMPTY; + ItemStack remainder = ItemHandlerHelper.copyStackWithSize(stack, count - max); + if (!simulate) + stack.setCount(max); + return remainder; + } + } From 034babf125667217716cb483f07a093bb6e6cd91 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:11:56 +0200 Subject: [PATCH 09/46] I have so much to show you - Prevent basins from endlessly queueing up particle information when no players are near #6837 --- .../create/content/processing/basin/BasinBlockEntity.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinBlockEntity.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinBlockEntity.java index 54db269a5..01592ee97 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinBlockEntity.java @@ -412,7 +412,8 @@ public class BasinBlockEntity extends SmartBlockEntity implements IHaveGoggleInf if (filter != null && !filter.test(itemStack)) continue; - visualizedOutputItems.add(IntAttached.withZero(itemStack)); + if (visualizedOutputItems.size() < 3) + visualizedOutputItems.add(IntAttached.withZero(itemStack)); update = true; remainder = ItemHandlerHelper.insertItemStacked(targetInv, itemStack.copy(), false); @@ -446,7 +447,8 @@ public class BasinBlockEntity extends SmartBlockEntity implements IHaveGoggleInf update = true; iterator.remove(); - visualizedOutputFluids.add(IntAttached.withZero(fluidStack)); + if (visualizedOutputFluids.size() < 3) + visualizedOutputFluids.add(IntAttached.withZero(fluidStack)); } } From 240f6619137c42848538108c9841129981f38a81 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:08:18 +0200 Subject: [PATCH 10/46] Bringing the Cheat, part II - Fixed signs retaining itemstack data in schematics when the mod "Amendments" is installed #6961 --- .../com/simibubi/create/foundation/utility/NBTProcessors.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java index 4496e5a27..e85f830f3 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java @@ -72,6 +72,8 @@ public final class NBTProcessors { if (textComponentHasClickEvent(stringTag.getAsString())) return null; } + if (data.contains("front_item") || data.contains("back_item")) + return null; // "Amendments" compat: sign data contains itemstacks return data; }; From f9d814a053191cc43b58cae03fdd2903f8271230 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Tue, 8 Oct 2024 11:34:56 -0400 Subject: [PATCH 11/46] Conditions for all! - Add ICondition support to shapeless recipes in StandardRecipeGen - Fixes #7021 --- .../82992cbf8f2794d83ac94034835eac0acd7915b9 | 8 +-- .../recipes/crafting/tree_fertilizer.json | 6 ++ .../data/recipe/StandardRecipeGen.java | 63 +++++++++++++------ 3 files changed, 54 insertions(+), 23 deletions(-) diff --git a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 index 2380111ec..13a17d3fb 100644 --- a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 +++ b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.358065 Create's Standard Recipes +// 1.20.1 2024-10-08T11:30:41.235223596 Create's Standard Recipes a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json 2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json 81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json @@ -202,9 +202,9 @@ dd7c250fa8e41cbaae65754f38b8861397718ae4 data/create/advancements/recipes/misc/c 05a4420a08df24680b8a7c5c94d9a7ad1d13c0df data/create/advancements/recipes/misc/crafting/materials/zinc_nugget_from_decompacting.json ec99015f13bb194dfb197ea0839cceaed5135148 data/create/advancements/recipes/misc/crafting/palettes/scorchia.json 541c3cb26e0cae9ffd3df94829e5f55a62240bd8 data/create/advancements/recipes/misc/crafting/schematics/empty_schematic.json -3e73c3336f3ab13365d439c491b2e2ce6de6e401 data/create/advancements/recipes/misc/crafting/schematics/schematicannon.json 6e0b7056d229fc949cc7386aa307d0870929f555 data/create/advancements/recipes/misc/crafting/schematics/schematic_and_quill.json f0d041509b3752b3ec6c4ce2b2c6eef9825a0685 data/create/advancements/recipes/misc/crafting/schematics/schematic_table.json +3e73c3336f3ab13365d439c491b2e2ce6de6e401 data/create/advancements/recipes/misc/crafting/schematics/schematicannon.json a8003bd4c06bdf5f2aa3d1789eab2445df9513be data/create/advancements/recipes/misc/crafting/tree_fertilizer.json 0ac95fd4b991a6c61c1d03cc6a6f2f345530f62a data/create/advancements/recipes/misc/smelting/bread.json 53cb4643430e3fd69f81c375f3e334a3d6014128 data/create/advancements/recipes/misc/smelting/copper_ingot_from_crushed.json @@ -448,10 +448,10 @@ cde25f253da4d9800fd8f879a7d208e40510df82 data/create/recipes/crafting/materials/ 11583ad28f32b7f22ffb71e180aface890d1d2d0 data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json d849fafedd10c68e6bc6dc1e5a85be82aae1b139 data/create/recipes/crafting/palettes/scorchia.json 611c4a553408e0b6ddfcf6ed35bc972bea14ffda data/create/recipes/crafting/schematics/empty_schematic.json -9a687ee9dab44c439ab669aa596117064fb13457 data/create/recipes/crafting/schematics/schematicannon.json 4a20356c9ce01ebfbcacbdc5d3c31094a5599a17 data/create/recipes/crafting/schematics/schematic_and_quill.json 4a297162a630b48407dbc8ff8ca713387dcd3206 data/create/recipes/crafting/schematics/schematic_table.json -dd2b5bfb7ebd836e8b5639894736c226f2cac8c0 data/create/recipes/crafting/tree_fertilizer.json +9a687ee9dab44c439ab669aa596117064fb13457 data/create/recipes/crafting/schematics/schematicannon.json +2cf06129b47d1a2b733619514dc9e8cf1d8967f2 data/create/recipes/crafting/tree_fertilizer.json 78526658ca5ccaa3729c967b5283069945d183b7 data/create/recipes/smelting/bread.json 04bb0c80f3b5a6fe86fc4a8ed5293fc74c2d9aba data/create/recipes/smelting/copper_ingot_from_crushed.json d5b29fa27977691c3c50eb36c28bfe33b8462d09 data/create/recipes/smelting/glass_from_framed_glass.json diff --git a/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json b/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json index f705b2e53..56bfafb78 100644 --- a/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json +++ b/src/generated/resources/data/create/recipes/crafting/tree_fertilizer.json @@ -1,6 +1,12 @@ { "type": "minecraft:crafting_shapeless", "category": "misc", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "upgrade_aquatic" + } + ], "ingredients": [ { "tag": "minecraft:small_flowers" diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java index 405fe0549..b7be3c7de 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/StandardRecipeGen.java @@ -59,6 +59,8 @@ import net.minecraftforge.common.crafting.conditions.ICondition; import net.minecraftforge.common.crafting.conditions.ModLoadedCondition; import net.minecraftforge.common.crafting.conditions.NotCondition; +import org.jetbrains.annotations.NotNull; + @SuppressWarnings("unused") public class StandardRecipeGen extends CreateRecipeProvider { @@ -1178,7 +1180,8 @@ public class StandardRecipeGen extends CreateRecipeProvider { .inBlastFurnace(), UA_TREE_FERTILIZER = create(AllItems.TREE_FERTILIZER::get).returns(2) - .whenModLoaded(Mods.UA.getId()).unlockedBy(() -> Items.BONE_MEAL) + .unlockedBy(() -> Items.BONE_MEAL) + .whenModLoaded(Mods.UA.getId()) .viaShapeless(b -> b.requires(Ingredient.of(ItemTags.SMALL_FLOWERS), 2) .requires(AllItemTags.UA_CORAL.tag).requires(Items.BONE_MEAL)) @@ -1375,7 +1378,12 @@ public class StandardRecipeGen extends CreateRecipeProvider { ShapelessRecipeBuilder b = builder.apply(ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, result.get(), amount)); if (unlockedBy != null) b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); - b.save(consumer, createLocation("crafting")); + + b.save(result -> { + consumer.accept( + !recipeConditions.isEmpty() ? new ConditionSupportingShapelessRecipeResult(result, recipeConditions) + : result); + }, createLocation("crafting")); }); } @@ -1478,10 +1486,10 @@ public class StandardRecipeGen extends CreateRecipeProvider { SimpleCookingRecipeBuilder b = builder.apply(SimpleCookingRecipeBuilder.generic(ingredient.get(), RecipeCategory.MISC, isOtherMod ? Items.DIRT : result.get(), exp, (int) (cookingTime * cookingTimeModifier), serializer)); - + if (unlockedBy != null) b.unlockedBy("has_item", inventoryTrigger(unlockedBy.get())); - + b.save(result -> { consumer.accept( isOtherMod ? new ModdedCookingRecipeResult(result, compatDatagenOutput, recipeConditions) @@ -1502,19 +1510,39 @@ public class StandardRecipeGen extends CreateRecipeProvider { super(p_i48262_1_); } - private static class ModdedCookingRecipeResult implements FinishedRecipe { + private record ModdedCookingRecipeResult(FinishedRecipe wrapped, ResourceLocation outputOverride, List conditions) implements FinishedRecipe { + @Override + public ResourceLocation getId() { + return wrapped.getId(); + } - private FinishedRecipe wrapped; - private ResourceLocation outputOverride; - private List conditions; + @Override + public RecipeSerializer getType() { + return wrapped.getType(); + } - public ModdedCookingRecipeResult(FinishedRecipe wrapped, ResourceLocation outputOverride, - List conditions) { - this.wrapped = wrapped; - this.outputOverride = outputOverride; - this.conditions = conditions; + @Override + public JsonObject serializeAdvancement() { + return wrapped.serializeAdvancement(); + } + + @Override + public ResourceLocation getAdvancementId() { + return wrapped.getAdvancementId(); + } + + @Override + public void serializeRecipeData(JsonObject object) { + wrapped.serializeRecipeData(object); + object.addProperty("result", outputOverride.toString()); + + JsonArray conds = new JsonArray(); + conditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); + object.add("conditions", conds); + } } + private record ConditionSupportingShapelessRecipeResult(FinishedRecipe wrapped, List conditions) implements FinishedRecipe { @Override public ResourceLocation getId() { return wrapped.getId(); @@ -1536,15 +1564,12 @@ public class StandardRecipeGen extends CreateRecipeProvider { } @Override - public void serializeRecipeData(JsonObject object) { - wrapped.serializeRecipeData(object); - object.addProperty("result", outputOverride.toString()); + public void serializeRecipeData(@NotNull JsonObject pJson) { + wrapped.serializeRecipeData(pJson); JsonArray conds = new JsonArray(); conditions.forEach(c -> conds.add(CraftingHelper.serialize(c))); - object.add("conditions", conds); + pJson.add("conditions", conds); } - } - } From b78688e944486aec5049bd2269ef8fcc14073b14 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sun, 6 Oct 2024 13:31:18 -0400 Subject: [PATCH 12/46] Fix memory leak with CapManipulationBehaviourBase Fixes #7023 --- .../crafter/MechanicalCrafterBlockEntity.java | 7 +++++++ .../logistics/funnel/FunnelBlockEntity.java | 6 ++++++ .../smartObserver/SmartObserverBlockEntity.java | 15 +++++++++++---- .../ThresholdSwitchBlockEntity.java | 7 +++++++ .../inventory/CapManipulationBehaviourBase.java | 4 ++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterBlockEntity.java index 4dc940a64..d646d30cc 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crafter/MechanicalCrafterBlockEntity.java @@ -120,6 +120,12 @@ public class MechanicalCrafterBlockEntity extends KineticBlockEntity { registerAwardables(behaviours, AllAdvancements.CRAFTER, AllAdvancements.CRAFTER_LAZY); } + @Override + public void invalidateCaps() { + inserting.removeListener(); + super.invalidateCaps(); + } + @Override public void onSpeedChanged(float previousSpeed) { super.onSpeedChanged(previousSpeed); @@ -132,6 +138,7 @@ public class MechanicalCrafterBlockEntity extends KineticBlockEntity { public void blockChanged() { removeBehaviour(InvManipulationBehaviour.TYPE); + inserting.removeListener(); inserting = new InvManipulationBehaviour(this, this::getTargetFace); attachBehaviourLate(inserting); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java index 00474106b..8ff868acd 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelBlockEntity.java @@ -273,6 +273,12 @@ public class FunnelBlockEntity extends SmartBlockEntity implements IHaveHovering registerAwardables(behaviours, AllAdvancements.FUNNEL); } + @Override + public void invalidateCaps() { + invManipulation.removeListener(); + super.invalidateCaps(); + } + private boolean supportsAmountOnFilter() { BlockState blockState = getBlockState(); boolean beltFunnelsupportsAmount = false; diff --git a/src/main/java/com/simibubi/create/content/redstone/smartObserver/SmartObserverBlockEntity.java b/src/main/java/com/simibubi/create/content/redstone/smartObserver/SmartObserverBlockEntity.java index e1c202639..34663ce88 100644 --- a/src/main/java/com/simibubi/create/content/redstone/smartObserver/SmartObserverBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/redstone/smartObserver/SmartObserverBlockEntity.java @@ -32,10 +32,10 @@ public class SmartObserverBlockEntity extends SmartBlockEntity { private FilteringBehaviour filtering; private InvManipulationBehaviour observedInventory; private TankManipulationBehaviour observedTank; - + private VersionedInventoryTrackerBehaviour invVersionTracker; private boolean sustainSignal; - + public int turnOffTicks = 0; public SmartObserverBlockEntity(BlockEntityType type, BlockPos pos, BlockState state) { @@ -56,13 +56,20 @@ public class SmartObserverBlockEntity extends SmartBlockEntity { behaviours.add(observedTank = new TankManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); } + @Override + public void invalidateCaps() { + observedInventory.removeListener(); + observedTank.removeListener(); + super.invalidateCaps(); + } + @Override public void tick() { super.tick(); - + if (level.isClientSide()) return; - + BlockState state = getBlockState(); if (turnOffTicks > 0) { turnOffTicks--; diff --git a/src/main/java/com/simibubi/create/content/redstone/thresholdSwitch/ThresholdSwitchBlockEntity.java b/src/main/java/com/simibubi/create/content/redstone/thresholdSwitch/ThresholdSwitchBlockEntity.java index 0163ed260..dcb42fb44 100644 --- a/src/main/java/com/simibubi/create/content/redstone/thresholdSwitch/ThresholdSwitchBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/redstone/thresholdSwitch/ThresholdSwitchBlockEntity.java @@ -233,6 +233,13 @@ public class ThresholdSwitchBlockEntity extends SmartBlockEntity { behaviours.add(observedTank = new TankManipulationBehaviour(this, towardBlockFacing).bypassSidedness()); } + @Override + public void invalidateCaps() { + observedInventory.removeListener(); + observedTank.removeListener(); + super.invalidateCaps(); + } + public float getLevelForDisplay() { return currentLevel == -1 ? 0 : currentLevel; } diff --git a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/inventory/CapManipulationBehaviourBase.java b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/inventory/CapManipulationBehaviourBase.java index 9b25a050a..e13de96b8 100644 --- a/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/inventory/CapManipulationBehaviourBase.java +++ b/src/main/java/com/simibubi/create/foundation/blockEntity/behaviour/inventory/CapManipulationBehaviourBase.java @@ -80,6 +80,10 @@ public abstract class CapManipulationBehaviourBase(this::onHandlerInvalidated, this)); + } + @Override public void lazyTick() { super.lazyTick(); From 9dba97761c2cf79dc7bc2b91378aec3e0d3573f3 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Sat, 28 Sep 2024 17:36:49 -0400 Subject: [PATCH 13/46] Add load conditions for botania compat recipes --- .../b256105d8411632b0d585496ea8944a751a08034 | 60 +++++++++---------- .../milling/compat/botania/black_petal.json | 6 ++ .../milling/compat/botania/blue_petal.json | 6 ++ .../milling/compat/botania/brown_petal.json | 6 ++ .../milling/compat/botania/cyan_petal.json | 6 ++ .../milling/compat/botania/gray_petal.json | 6 ++ .../milling/compat/botania/green_petal.json | 6 ++ .../compat/botania/light_blue_petal.json | 6 ++ .../compat/botania/light_gray_petal.json | 6 ++ .../milling/compat/botania/lime_petal.json | 6 ++ .../milling/compat/botania/magenta_petal.json | 6 ++ .../milling/compat/botania/orange_petal.json | 6 ++ .../milling/compat/botania/pink_petal.json | 6 ++ .../milling/compat/botania/purple_petal.json | 6 ++ .../milling/compat/botania/red_petal.json | 6 ++ .../milling/compat/botania/white_petal.json | 6 ++ .../milling/compat/botania/yellow_petal.json | 6 ++ .../data/recipe/MillingRecipeGen.java | 5 +- 18 files changed, 129 insertions(+), 32 deletions(-) diff --git a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 index e1fbae293..fa9f688fe 100644 --- a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 +++ b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.2901169 Create's Processing Recipes +// 1.20.1 2024-09-28T17:26:28.246107482 Create's Processing Recipes 3c94326fb730f68c1e44fe1e2ef09c9db6ffd92b data/create/recipes/compacting/andesite_from_flint.json 8d3d5b31f3601b9f681ff710e0545a483a1494c6 data/create/recipes/compacting/blaze_cake.json 8bd7f4e3a686ab520b2d55594d2018d0e9a50c91 data/create/recipes/compacting/chocolate.json @@ -97,18 +97,18 @@ df364151c75a7d84446b2c6213e339115bc9d298 data/create/recipes/crushing/diorite_re 9e89294e53a94a05af47948c21ad192ef18f7710 data/create/recipes/crushing/emerald_ore.json 9c3989fd9e72e21353803f475a08b8f199717c1f data/create/recipes/crushing/gilded_blackstone.json 3c4c78e3a7137022f8f6e90324af6c8f97050e80 data/create/recipes/crushing/glowstone.json -95b76da439260151355fff74b3b7398ce13d6968 data/create/recipes/crushing/golden_horse_armor.json b036b1654d2deec20aca95ff43b60c7d0b28b2fc data/create/recipes/crushing/gold_ore.json +95b76da439260151355fff74b3b7398ce13d6968 data/create/recipes/crushing/golden_horse_armor.json cc939ba59b95db1c7a034df6f9e656772074a5fd data/create/recipes/crushing/gravel.json 17ab2d789c9c2df122b6a96ab06bbe2c02592a93 data/create/recipes/crushing/iron_horse_armor.json c9a47b29ba75ba29c8cb630fe32c4bf2f1f1d1ae data/create/recipes/crushing/iron_ore.json 855b6655dea911724ee68d07b993f17440ac422e data/create/recipes/crushing/lapis_ore.json 492827ab3d55ca3edfef5eb006b1f77d62e1b446 data/create/recipes/crushing/lead_ore.json e170bc17a796c73a05d2d77a85c086cfaac55c31 data/create/recipes/crushing/leather_horse_armor.json -606ccdf3119a62ab461028192d191ffb10332e21 data/create/recipes/crushing/netherrack.json 07e8991a2161aab4dd73bb74900fd0c70aad2847 data/create/recipes/crushing/nether_gold_ore.json c7c0d94707c2858a87d01cff6b284d7fb85acdbe data/create/recipes/crushing/nether_quartz_ore.json 0380b9416b263de2ee6a6cd1f4064df2e243c047 data/create/recipes/crushing/nether_wart_block.json +606ccdf3119a62ab461028192d191ffb10332e21 data/create/recipes/crushing/netherrack.json d3534d606382ec7c1d34275c5f069543d0955906 data/create/recipes/crushing/nickel_ore.json 66f75530e30d8572bdbf4696a32edc5a7850ac00 data/create/recipes/crushing/obsidian.json 17cacb19493b9bbe7236b19a2a50a817c449a915 data/create/recipes/crushing/ochrum.json @@ -666,42 +666,42 @@ ddb27a32c1b01812db7cc317c962e35d794dae88 data/create/recipes/cutting/warped_hyph 7a01147d3c7d8fb9acb870b33e5a792328f88c3c data/create/recipes/deploying/cogwheel.json 1230f449873262e79585752d3430e5f7f383bcb2 data/create/recipes/deploying/large_cogwheel.json dc35369da8514a5650704fd39e84861cce084b5d data/create/recipes/deploying/waxed_copper_block_from_adding_wax.json -7b7d596cdaa4000222177b405c04c6e8906561b4 data/create/recipes/deploying/waxed_copper_shingles_from_adding_wax.json afbe0c612651ee90651ee7b39683c8baac2a115e data/create/recipes/deploying/waxed_copper_shingle_slab_from_adding_wax.json 66cd83c15d46692f27deaac280ef782bb2bd7909 data/create/recipes/deploying/waxed_copper_shingle_stairs_from_adding_wax.json -bcb9750b7c3504996d6177d5980128af018942a8 data/create/recipes/deploying/waxed_copper_tiles_from_adding_wax.json +7b7d596cdaa4000222177b405c04c6e8906561b4 data/create/recipes/deploying/waxed_copper_shingles_from_adding_wax.json eecd6194b0efc2bee321ba7fac7348cd3f5911ab data/create/recipes/deploying/waxed_copper_tile_slab_from_adding_wax.json dfc1f8f6b0d1b6d23c9125c97eba31dadc370904 data/create/recipes/deploying/waxed_copper_tile_stairs_from_adding_wax.json +bcb9750b7c3504996d6177d5980128af018942a8 data/create/recipes/deploying/waxed_copper_tiles_from_adding_wax.json e260cded2b746bd79afaaa1e086cf2f0faffde76 data/create/recipes/deploying/waxed_cut_copper_from_adding_wax.json 33e338242aff64f9d52169392d2eb8e617b8da5c data/create/recipes/deploying/waxed_cut_copper_slab_from_adding_wax.json 5f4671548b18634ae440d7c64c4c97e5e533601b data/create/recipes/deploying/waxed_cut_copper_stairs_from_adding_wax.json ff182d5c0c4b832ff566691d9b680c9039c55c16 data/create/recipes/deploying/waxed_exposed_copper_from_adding_wax.json -eff2e77f004873e695e419afc71a7011328d3de8 data/create/recipes/deploying/waxed_exposed_copper_shingles_from_adding_wax.json 5a7a622d5b340f83ba2d32fe53620744c5193a32 data/create/recipes/deploying/waxed_exposed_copper_shingle_slab_from_adding_wax.json b895ef423e64936b5d94ee54a6527316ed48d9d6 data/create/recipes/deploying/waxed_exposed_copper_shingle_stairs_from_adding_wax.json -9d566e599cc05aefde637faab1957813a5b6f3f7 data/create/recipes/deploying/waxed_exposed_copper_tiles_from_adding_wax.json +eff2e77f004873e695e419afc71a7011328d3de8 data/create/recipes/deploying/waxed_exposed_copper_shingles_from_adding_wax.json 582083e0fed8760cde2c53aa2b02237eb59a3df0 data/create/recipes/deploying/waxed_exposed_copper_tile_slab_from_adding_wax.json fec9d744770bfc517a72a2be45701aab6f3040b2 data/create/recipes/deploying/waxed_exposed_copper_tile_stairs_from_adding_wax.json +9d566e599cc05aefde637faab1957813a5b6f3f7 data/create/recipes/deploying/waxed_exposed_copper_tiles_from_adding_wax.json 0f18c91f36e3abae99a7dca72f3d80e59f03cf7d data/create/recipes/deploying/waxed_exposed_cut_copper_from_adding_wax.json 7ed36f4f3abfd37aec13a273b87d97c8ccc36cb4 data/create/recipes/deploying/waxed_exposed_cut_copper_slab_from_adding_wax.json 9cd5a6c71b5102ef2660e8a5c650cbd2c2327580 data/create/recipes/deploying/waxed_exposed_cut_copper_stairs_from_adding_wax.json 97b7b3f65807328d0a036cb66ee53d898504da77 data/create/recipes/deploying/waxed_oxidized_copper_from_adding_wax.json -bd37d658666b2912c07b6daa6adaff99a479223a data/create/recipes/deploying/waxed_oxidized_copper_shingles_from_adding_wax.json 07c82e555617f9d9166f2d2c9068ac421eb0b37a data/create/recipes/deploying/waxed_oxidized_copper_shingle_slab_from_adding_wax.json d0c7805681e3ed6a6bc5775d42c702af924e8785 data/create/recipes/deploying/waxed_oxidized_copper_shingle_stairs_from_adding_wax.json -41c879946a24ff330466476bdee9148859398842 data/create/recipes/deploying/waxed_oxidized_copper_tiles_from_adding_wax.json +bd37d658666b2912c07b6daa6adaff99a479223a data/create/recipes/deploying/waxed_oxidized_copper_shingles_from_adding_wax.json af72234311a9abf5c57c767c05274c466dceac53 data/create/recipes/deploying/waxed_oxidized_copper_tile_slab_from_adding_wax.json b35d22f891d1c9cab4340399e3426c96132b3fc7 data/create/recipes/deploying/waxed_oxidized_copper_tile_stairs_from_adding_wax.json +41c879946a24ff330466476bdee9148859398842 data/create/recipes/deploying/waxed_oxidized_copper_tiles_from_adding_wax.json 9d78f4d16273015d181be586f91e77f3b82ee18f data/create/recipes/deploying/waxed_oxidized_cut_copper_from_adding_wax.json 2a9c57a8ca9b013b7bc11d2588d4ba00b402f97f data/create/recipes/deploying/waxed_oxidized_cut_copper_slab_from_adding_wax.json 5670c074c0f1961a5e499953a49c7e3f1f617ebf data/create/recipes/deploying/waxed_oxidized_cut_copper_stairs_from_adding_wax.json 58679c5c37eaa5a52ef9e0f4f7cc695c58ddee96 data/create/recipes/deploying/waxed_weathered_copper_from_adding_wax.json -5817055c1cf3ae572ffbe2765f3e519fda4c3342 data/create/recipes/deploying/waxed_weathered_copper_shingles_from_adding_wax.json e962429c48ed12bb2d7b299719513c23a2088879 data/create/recipes/deploying/waxed_weathered_copper_shingle_slab_from_adding_wax.json 2321ea4ed39d09b12a80be8df2c7c1dc4c6d2c18 data/create/recipes/deploying/waxed_weathered_copper_shingle_stairs_from_adding_wax.json -b635490492a22f88e24003bffb09c4d5e3fa2d61 data/create/recipes/deploying/waxed_weathered_copper_tiles_from_adding_wax.json +5817055c1cf3ae572ffbe2765f3e519fda4c3342 data/create/recipes/deploying/waxed_weathered_copper_shingles_from_adding_wax.json d0fc937a3e7ae42fb1891b7b87adb2b57292e01d data/create/recipes/deploying/waxed_weathered_copper_tile_slab_from_adding_wax.json 6852ea4c7f27520fb3388ec641be4cb94d907199 data/create/recipes/deploying/waxed_weathered_copper_tile_stairs_from_adding_wax.json +b635490492a22f88e24003bffb09c4d5e3fa2d61 data/create/recipes/deploying/waxed_weathered_copper_tiles_from_adding_wax.json 9ab3ba5847c3abbc17c476436978141f2c039ce9 data/create/recipes/deploying/waxed_weathered_cut_copper_from_adding_wax.json 733dd94b46186c19fdecced5d8231e46ea612cf2 data/create/recipes/deploying/waxed_weathered_cut_copper_slab_from_adding_wax.json cd4c050e6ad9227bf293768f2d8b965c0ecafeab data/create/recipes/deploying/waxed_weathered_cut_copper_stairs_from_adding_wax.json @@ -724,8 +724,8 @@ ff16c74f09edbc67ed969f64270ca376bb8ea955 data/create/recipes/filling/compat/regi 12c19b46eec5bd371300dfcff5d2a9dd7169bb1b data/create/recipes/filling/glowstone.json afeb566e5f989c58d239a2f66084ce3d813d111a data/create/recipes/filling/grass_block.json 36d0f06ea9fa065ed85fc596e08725a2e6c8d4af data/create/recipes/filling/gunpowder.json -c07c662c2ba8d7e5c72437096acfd7fdb99704f3 data/create/recipes/filling/honeyed_apple.json c4e0373516bc98def80d0a13803cf980e3f905e0 data/create/recipes/filling/honey_bottle.json +c07c662c2ba8d7e5c72437096acfd7fdb99704f3 data/create/recipes/filling/honeyed_apple.json 3acf4a649751c23c8e39d649131939659c105a53 data/create/recipes/filling/redstone.json deab6ea169b756376d89ea2200e0387a865ed2fc data/create/recipes/filling/sweet_roll.json 788cce637f455ea33408e5be5b75ce0e4cc57c95 data/create/recipes/haunting/blackstone.json @@ -792,22 +792,22 @@ e383106ff8f877b5995e20c03af5e41e3db541d9 data/create/recipes/milling/compat/biom 213e079f32baa2879702b72bdf08f146877a0bb9 data/create/recipes/milling/compat/biomesoplenty/violet.json b3f041e005491582f055da15871891357908d998 data/create/recipes/milling/compat/biomesoplenty/wildflower.json d08c4fcebb79e2e02ac9cb4623124332a05ed661 data/create/recipes/milling/compat/biomesoplenty/wilted_lily.json -ca03746c39143de7867aeab2fb450fe0a67b69e3 data/create/recipes/milling/compat/botania/black_petal.json -3192777eeb363a55174a0eb58197ee686b2e02c7 data/create/recipes/milling/compat/botania/blue_petal.json -ee99c9bdcc4da8d160fc762ce7b394848d6a86d1 data/create/recipes/milling/compat/botania/brown_petal.json -1d8dab24913945268f819c24e132d8bb74f792c2 data/create/recipes/milling/compat/botania/cyan_petal.json -010a111f9810f142315bc94dfb1be03ee02508c4 data/create/recipes/milling/compat/botania/gray_petal.json -dee8b4c26d6b78aceeb8e5a264693dad4e81dbcb data/create/recipes/milling/compat/botania/green_petal.json -285a24e440d6a8cf34f2925a3eed7fa1d16e102b data/create/recipes/milling/compat/botania/light_blue_petal.json -3cc232966240394aaf5a3a5d16a3ceebd41597a0 data/create/recipes/milling/compat/botania/light_gray_petal.json -1225119a7dc1f69dfaf2cec32a0267b1d47ef72d data/create/recipes/milling/compat/botania/lime_petal.json -09e114685483329a78c3cecf8b312f16d26cd981 data/create/recipes/milling/compat/botania/magenta_petal.json -ae3e7eb55dda1846b8fd849ea1c8f1cbd37b9fca data/create/recipes/milling/compat/botania/orange_petal.json -bf13e9807a96efc1ef684f0129cc21110e44cc4c data/create/recipes/milling/compat/botania/pink_petal.json -7e0a167201b9c915579ede71ee7128bccdeee9c2 data/create/recipes/milling/compat/botania/purple_petal.json -4e7c1ae95f10bb3466dd542a2e04c726c599ecd9 data/create/recipes/milling/compat/botania/red_petal.json -28cbeb278022b2ac62cae2f3deaa65cb375c6456 data/create/recipes/milling/compat/botania/white_petal.json -dd1e35234c419b1576410a2590fd33d88c8bb9bd data/create/recipes/milling/compat/botania/yellow_petal.json +4994095300eabfe98a86036e7fbba6c12cddb078 data/create/recipes/milling/compat/botania/black_petal.json +3516555e62ce7d6f0b5a57375339e69b4de41f83 data/create/recipes/milling/compat/botania/blue_petal.json +deb37dcb4b323590fbb76f21732e5b9016028f7d data/create/recipes/milling/compat/botania/brown_petal.json +d831337c28b89ce25a2be50e06719ab3be9400b6 data/create/recipes/milling/compat/botania/cyan_petal.json +1ec99d5ee65becc6c921827956e26f286398b1ba data/create/recipes/milling/compat/botania/gray_petal.json +7bcbd91fae49452fe30966b350c6830ad5bb588c data/create/recipes/milling/compat/botania/green_petal.json +5819b1ff0c54851d4bf7c60228ce2e31b8d8ffee data/create/recipes/milling/compat/botania/light_blue_petal.json +94b6cb826923907527c57e079d08fb410720b008 data/create/recipes/milling/compat/botania/light_gray_petal.json +4fe3b309902b0d59971d351d6e4a8066908df195 data/create/recipes/milling/compat/botania/lime_petal.json +b8f8ea5d52ae9cbdd59d60aabbac660859190855 data/create/recipes/milling/compat/botania/magenta_petal.json +eab4d51ba92d5a2f172de76bca72cf2746359b68 data/create/recipes/milling/compat/botania/orange_petal.json +c8cf3978e3bf0ffeccd18c1b16ea26c5e1c18634 data/create/recipes/milling/compat/botania/pink_petal.json +9ee958eb5fb176902255aa606517a362670f3d60 data/create/recipes/milling/compat/botania/purple_petal.json +3239b0a1ef91f61ab32f42ac3935ee99316089c5 data/create/recipes/milling/compat/botania/red_petal.json +15afbebf247ea66e0b023ea84aa5c5dad8ac8466 data/create/recipes/milling/compat/botania/white_petal.json +9c500a9d6cadb4f673ca63de38c1d3713dab061c data/create/recipes/milling/compat/botania/yellow_petal.json c7d2b07396448628123b81e1f34a8b131aa99c83 data/create/recipes/milling/compat/buzzier_bees/buttercup.json 0c4a3c7da1e151868740db2037504e35a02af3d0 data/create/recipes/milling/compat/buzzier_bees/pink_clover.json 355e89a3e003ae65ff06a9277c05699220eec569 data/create/recipes/milling/compat/buzzier_bees/white_clover.json @@ -870,8 +870,8 @@ eb9606bbb2e4c6fb82b6607c8d5c23834d9e44a8 data/create/recipes/milling/compat/byg/ fda00f49b9a5758ee7d24f2aeab81a3cc690544a data/create/recipes/milling/compat/byg/yellow_tulip.json 2e6a7a1b0e8ab1d6e514a30a21d47b404cfdcd45 data/create/recipes/milling/compat/druidcraft/lavender.json 5be32cdd48cf7d9e3f8273fc3479d559070b9872 data/create/recipes/milling/compat/environmental/bird_of_paradise.json -102130e75ea8f2b8c99ad9641d293a4e588912cf data/create/recipes/milling/compat/environmental/bluebell.json 50df88584dd6086c0dbb23fb16b7f36fee381534 data/create/recipes/milling/compat/environmental/blue_delphinium.json +102130e75ea8f2b8c99ad9641d293a4e588912cf data/create/recipes/milling/compat/environmental/bluebell.json a4beb691042be811eee8a130ff023065620b20b9 data/create/recipes/milling/compat/environmental/cartwheel.json d1d388667f9c8a5666cc2a1ef2eb77716a0b18ed data/create/recipes/milling/compat/environmental/dianthus.json ee3d1989d4a1069909aaeb99374602d0e92d6dfc data/create/recipes/milling/compat/environmental/magenta_hibiscus.json @@ -1066,11 +1066,11 @@ cccf4ef0891992687dcb7ce5c644499d93210b8a data/create/recipes/splashing/sand.json 0ee6d52e8966b6189f2841bcdf41417df1ab072c data/create/recipes/splashing/stained_glass.json f241ec6a8ad063b28281c18e1fbb03c482d7af8b data/create/recipes/splashing/stained_glass_pane.json 712b367223067cc468346d2fa485779f1501d5ec data/create/recipes/splashing/supplementaries/blackboard.json +a8fd822419fbb47b37412742fe13a785ae147d21 data/create/recipes/splashing/the_vault/ornate_chain_rusty.json 43bcc2f22cca830f11a48f4b48f699001f4ffbb5 data/create/recipes/splashing/thermal/crushed_raw_lead.json 4bc875e07f963f417e0a427ca7a6f9f9a40213ac data/create/recipes/splashing/thermal/crushed_raw_nickel.json 0ceeb253b478dde532e4de01d1ff60ed09819388 data/create/recipes/splashing/thermal/crushed_raw_silver.json 5fa818c04cb65048be0246ade3946cc1e01a0772 data/create/recipes/splashing/thermal/crushed_raw_tin.json -a8fd822419fbb47b37412742fe13a785ae147d21 data/create/recipes/splashing/the_vault/ornate_chain_rusty.json 23d70b869e50a1e11df264f3640becac4ec9100d data/create/recipes/splashing/wheat_flour.json a883796342143a5f2b5bc68d230b725964abdb8f data/create/recipes/splashing/white_concrete_powder.json d09bcaa2334e05e6cce37b7342c7de84ce954bb9 data/create/recipes/splashing/wool.json diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/black_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/black_petal.json index 66f3fe09d..9e20ea920 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/black_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/black_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/black" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/blue_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/blue_petal.json index d47e82023..54aa19cb0 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/blue_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/blue_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/blue" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/brown_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/brown_petal.json index d1f3eb495..6fa6c006d 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/brown_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/brown_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/brown" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/cyan_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/cyan_petal.json index 05fe7d87b..8657058c8 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/cyan_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/cyan_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/cyan" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/gray_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/gray_petal.json index 9bb0bcd24..33d6c6bd6 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/gray_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/gray_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/gray" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/green_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/green_petal.json index ed4641482..11f11ac3c 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/green_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/green_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/green" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/light_blue_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/light_blue_petal.json index 595e18953..4368eecaf 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/light_blue_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/light_blue_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/light_blue" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/light_gray_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/light_gray_petal.json index 5b9a6bd52..0b6a6d876 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/light_gray_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/light_gray_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/light_gray" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/lime_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/lime_petal.json index 51bac8733..1ae7e3b14 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/lime_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/lime_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/lime" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/magenta_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/magenta_petal.json index 8001d8fd7..e85b7d3f6 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/magenta_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/magenta_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/magenta" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/orange_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/orange_petal.json index b0d9957e1..dd5bd028d 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/orange_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/orange_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/orange" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/pink_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/pink_petal.json index c875d311e..6dd6bae9f 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/pink_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/pink_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/pink" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/purple_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/purple_petal.json index 13ad6984c..815ccae3a 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/purple_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/purple_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/purple" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/red_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/red_petal.json index 0fee03469..fea0a0b68 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/red_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/red_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/red" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/white_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/white_petal.json index 0b8c714a9..de40fc9dc 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/white_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/white_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/white" diff --git a/src/generated/resources/data/create/recipes/milling/compat/botania/yellow_petal.json b/src/generated/resources/data/create/recipes/milling/compat/botania/yellow_petal.json index ea71b8e71..704b039ae 100644 --- a/src/generated/resources/data/create/recipes/milling/compat/botania/yellow_petal.json +++ b/src/generated/resources/data/create/recipes/milling/compat/botania/yellow_petal.json @@ -1,5 +1,11 @@ { "type": "create:milling", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "botania" + } + ], "ingredients": [ { "tag": "botania:petals/yellow" diff --git a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java index f6a50ac70..6b28a22d5 100644 --- a/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java +++ b/src/main/java/com/simibubi/create/foundation/data/recipe/MillingRecipeGen.java @@ -817,7 +817,8 @@ public class MillingRecipeGen extends ProcessingRecipeGen { create(Mods.BTN.recipeId(color + "_petal"), b -> b.duration(50) .require(AllTags.optionalTag(ForgeRegistries.ITEMS, new ResourceLocation(Mods.BTN.getId(), "petals/" + color))) - .output(Mods.MC, color + "_dye")); + .output(Mods.MC, color + "_dye") + .whenModLoaded(Mods.BTN.getId())); } return null; } @@ -850,7 +851,7 @@ public class MillingRecipeGen extends ProcessingRecipeGen { public MillingRecipeGen(PackOutput output) { super(output); } - + @Override protected AllRecipeTypes getRecipeType() { return AllRecipeTypes.MILLING; From 2828c88d80f3183616812525b00440e4ce6bf230 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 01:17:27 +0200 Subject: [PATCH 14/46] Multiblock Madness - Fixed moving single-tile tanks and vaults leading to corrupt nbt #6915 #6925 #6943 #6979 - Display links now check for click events in transferred components #6942 - Fixed negative values displayed on kinetic generator goggle overlay --- .../content/contraptions/Contraption.java | 4 ++ .../base/GeneratingKineticBlockEntity.java | 3 +- .../displayLink/source/DisplaySource.java | 7 ++++ .../displayLink/target/DisplayTarget.java | 4 ++ .../target/LecternDisplayTarget.java | 5 +++ .../displayLink/target/SignDisplayTarget.java | 5 +++ .../content/schematics/SchematicWorld.java | 22 ++++++++++ .../schematics/client/SchematicHandler.java | 3 ++ .../create/foundation/ponder/PonderWorld.java | 41 ++++++------------- .../foundation/utility/BlockHelper.java | 9 +++- .../foundation/utility/NBTProcessors.java | 29 ++++++++++++- 11 files changed, 97 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java index d004d9ae2..07ba16454 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/Contraption.java +++ b/src/main/java/com/simibubi/create/content/contraptions/Contraption.java @@ -1139,6 +1139,7 @@ public abstract class Contraption { if (blockEntity instanceof IMultiBlockEntityContainer) { if (tag.contains("LastKnownPos") || capturedMultiblocks.isEmpty()) { tag.put("LastKnownPos", NbtUtils.writeBlockPos(BlockPos.ZERO.below(Integer.MAX_VALUE - 1))); + tag.remove("Controller"); } } @@ -1195,6 +1196,9 @@ public abstract class Contraption { // swap nbt data to the new controller position StructureBlockInfo prevControllerInfo = blocks.get(controllerPos); StructureBlockInfo newControllerInfo = blocks.get(otherPos); + if (prevControllerInfo == null || newControllerInfo == null) + return; + blocks.put(otherPos, new StructureBlockInfo(newControllerInfo.pos, newControllerInfo.state, prevControllerInfo.nbt)); blocks.put(controllerPos, new StructureBlockInfo(prevControllerInfo.pos, prevControllerInfo.state, newControllerInfo.nbt)); }); diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/GeneratingKineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/GeneratingKineticBlockEntity.java index b11625687..724bab243 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/GeneratingKineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/GeneratingKineticBlockEntity.java @@ -73,9 +73,8 @@ public abstract class GeneratingKineticBlockEntity extends KineticBlockEntity { float speed = getTheoreticalSpeed(); if (speed != getGeneratedSpeed() && speed != 0) stressBase *= getGeneratedSpeed() / speed; - speed = Math.abs(speed); - float stressTotal = stressBase * speed; + float stressTotal = Math.abs(stressBase * speed); Lang.number(stressTotal) .translate("generic.unit.stress") diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/source/DisplaySource.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/source/DisplaySource.java index b5db5c057..544135261 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/source/DisplaySource.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/source/DisplaySource.java @@ -13,6 +13,7 @@ import com.simibubi.create.content.trains.display.FlapDisplayBlockEntity; import com.simibubi.create.content.trains.display.FlapDisplayLayout; import com.simibubi.create.foundation.gui.ModularGuiLineBuilder; import com.simibubi.create.foundation.utility.Components; +import com.simibubi.create.foundation.utility.NBTProcessors; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -38,6 +39,12 @@ public abstract class DisplaySource extends DisplayBehaviour { List text = provideText(context, stats); if (text.isEmpty()) text = EMPTY; + + if (activeTarget.requiresComponentSanitization()) + for (MutableComponent component : text) + if (NBTProcessors.textComponentHasClickEvent(component)) + return; // Naughty + activeTarget.acceptText(line, text, context); } diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/DisplayTarget.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/DisplayTarget.java index 7732f7be2..79b2e128a 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/DisplayTarget.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/DisplayTarget.java @@ -67,5 +67,9 @@ public abstract class DisplayTarget extends DisplayBehaviour { tag.remove("DisplayLink"); return false; } + + public boolean requiresComponentSanitization() { + return false; + } } diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/LecternDisplayTarget.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/LecternDisplayTarget.java index fdc087b4f..15ec2a072 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/LecternDisplayTarget.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/LecternDisplayTarget.java @@ -80,5 +80,10 @@ public class LecternDisplayTarget extends DisplayTarget { return written; } + + @Override + public boolean requiresComponentSanitization() { + return true; + } } diff --git a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/SignDisplayTarget.java b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/SignDisplayTarget.java index 77efd5436..21e4f224b 100644 --- a/src/main/java/com/simibubi/create/content/redstone/displayLink/target/SignDisplayTarget.java +++ b/src/main/java/com/simibubi/create/content/redstone/displayLink/target/SignDisplayTarget.java @@ -35,5 +35,10 @@ public class SignDisplayTarget extends DisplayTarget { public DisplayTargetStats provideStats(DisplayLinkContext context) { return new DisplayTargetStats(4, 15, this); } + + @Override + public boolean requiresComponentSanitization() { + return true; + } } diff --git a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java index 4bbca4a6f..c637a4473 100644 --- a/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/content/schematics/SchematicWorld.java @@ -10,6 +10,8 @@ import java.util.function.Predicate; import java.util.stream.Stream; import com.simibubi.create.Create; +import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer; +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.utility.BBHelper; import com.simibubi.create.foundation.utility.NBTProcessors; import com.simibubi.create.foundation.utility.worldWrappers.WrappedWorld; @@ -250,5 +252,25 @@ public class SchematicWorld extends WrappedWorld implements ServerLevelAccessor } throw new IllegalStateException("Cannot use IServerWorld#getWorld in a client environment"); } + + public void fixControllerBlockEntities() { + for (BlockEntity blockEntity : blockEntities.values()) { + if (!(blockEntity instanceof IMultiBlockEntityContainer multiBlockEntity)) + continue; + BlockPos lastKnown = multiBlockEntity.getLastKnownPos(); + BlockPos current = blockEntity.getBlockPos(); + if (lastKnown == null || current == null) + continue; + if (multiBlockEntity.isController()) + continue; + if (!lastKnown.equals(current)) { + BlockPos newControllerPos = multiBlockEntity.getController() + .offset(current.subtract(lastKnown)); + if (multiBlockEntity instanceof SmartBlockEntity sbe) + sbe.markVirtual(); + multiBlockEntity.setController(newControllerPos); + } + } + } } diff --git a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java index cbc9b1958..5cdfac880 100644 --- a/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java +++ b/src/main/java/com/simibubi/create/content/schematics/client/SchematicHandler.java @@ -168,6 +168,7 @@ public class SchematicHandler { schematic.placeInWorld(w, pos, pos, placementSettings, w.getRandom(), Block.UPDATE_CLIENTS); for (BlockEntity blockEntity : w.getBlockEntities()) blockEntity.setLevel(w); + w.fixControllerBlockEntities(); } catch (Exception e) { Minecraft.getInstance().player.displayClientMessage(Lang.translate("schematic.error") .component(), false); @@ -182,6 +183,7 @@ public class SchematicHandler { placementSettings.getMirror()); for (BlockEntity be : wMirroredFB.getRenderedBlockEntities()) transform.apply(be); + wMirroredFB.fixControllerBlockEntities(); placementSettings.setMirror(Mirror.LEFT_RIGHT); pos = BlockPos.ZERO.south(size.getZ() - 1); @@ -190,6 +192,7 @@ public class SchematicHandler { placementSettings.getMirror()); for (BlockEntity be : wMirroredLR.getRenderedBlockEntities()) transform.apply(be); + wMirroredLR.fixControllerBlockEntities(); renderers.get(0) .display(w); diff --git a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java index c719fa374..e6e6e8ccd 100644 --- a/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java +++ b/src/main/java/com/simibubi/create/foundation/ponder/PonderWorld.java @@ -14,7 +14,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.kinetics.belt.BeltBlock; import com.simibubi.create.content.kinetics.belt.BeltBlockEntity; import com.simibubi.create.content.schematics.SchematicWorld; -import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.mixin.accessor.ParticleEngineAccessor; import com.simibubi.create.foundation.ponder.element.WorldSectionElement; @@ -252,38 +251,22 @@ public class PonderWorld extends SchematicWorld { smartBlockEntity.markVirtual(); } + @Override public void fixControllerBlockEntities() { + super.fixControllerBlockEntities(); for (BlockEntity blockEntity : blockEntities.values()) { - - if (blockEntity instanceof BeltBlockEntity) { - BeltBlockEntity beltBlockEntity = (BeltBlockEntity) blockEntity; - if (!beltBlockEntity.isController()) + if (!(blockEntity instanceof BeltBlockEntity beltBlockEntity)) + continue; + if (!beltBlockEntity.isController()) + continue; + BlockPos controllerPos = blockEntity.getBlockPos(); + for (BlockPos blockPos : BeltBlock.getBeltChain(this, controllerPos)) { + BlockEntity blockEntity2 = getBlockEntity(blockPos); + if (!(blockEntity2 instanceof BeltBlockEntity)) continue; - BlockPos controllerPos = blockEntity.getBlockPos(); - for (BlockPos blockPos : BeltBlock.getBeltChain(this, controllerPos)) { - BlockEntity blockEntity2 = getBlockEntity(blockPos); - if (!(blockEntity2 instanceof BeltBlockEntity)) - continue; - BeltBlockEntity belt2 = (BeltBlockEntity) blockEntity2; - belt2.setController(controllerPos); - } + BeltBlockEntity belt2 = (BeltBlockEntity) blockEntity2; + belt2.setController(controllerPos); } - - if (blockEntity instanceof IMultiBlockEntityContainer) { - IMultiBlockEntityContainer multiBlockEntity = (IMultiBlockEntityContainer) blockEntity; - BlockPos lastKnown = multiBlockEntity.getLastKnownPos(); - BlockPos current = blockEntity.getBlockPos(); - if (lastKnown == null || current == null) - continue; - if (multiBlockEntity.isController()) - continue; - if (!lastKnown.equals(current)) { - BlockPos newControllerPos = multiBlockEntity.getController() - .offset(current.subtract(lastKnown)); - multiBlockEntity.setController(newControllerPos); - } - } - } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index 11a426e3f..a07dd895d 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -12,6 +12,7 @@ import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock; import com.simibubi.create.content.processing.burner.BlazeBurnerBlock.HeatLevel; import com.simibubi.create.foundation.blockEntity.IMergeableBE; +import com.simibubi.create.foundation.blockEntity.IMultiBlockEntityContainer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -19,6 +20,7 @@ import net.minecraft.core.Registry; import net.minecraft.core.SectionPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -316,8 +318,11 @@ public class BlockHelper { data.putInt("x", target.getX()); data.putInt("y", target.getY()); data.putInt("z", target.getZ()); - if (blockEntity instanceof KineticBlockEntity) - ((KineticBlockEntity) blockEntity).warnOfMovement(); + if (blockEntity instanceof KineticBlockEntity kbe) + kbe.warnOfMovement(); + if (blockEntity instanceof IMultiBlockEntityContainer imbe) + if (!imbe.isController()) + data.put("Controller", NbtUtils.writeBlockPos(imbe.getController())); blockEntity.load(data); } } diff --git a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java index eab609906..412108c1d 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java +++ b/src/main/java/com/simibubi/create/foundation/utility/NBTProcessors.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.utility; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.function.UnaryOperator; @@ -57,6 +58,24 @@ public final class NBTProcessors { }); addProcessor(AllBlockEntityTypes.CREATIVE_CRATE.get(), itemProcessor("Filter")); addProcessor(AllBlockEntityTypes.PLACARD.get(), itemProcessor("Item")); + addProcessor(AllBlockEntityTypes.CLIPBOARD.get(), data -> { + if (!data.contains("Item", Tag.TAG_COMPOUND)) + return data; + CompoundTag book = data.getCompound("Item"); + + if (!book.contains("tag", Tag.TAG_COMPOUND)) + return data; + CompoundTag itemData = book.getCompound("tag"); + + for (List entries : NBTHelper.readCompoundList(itemData.getList("Pages", Tag.TAG_COMPOUND), + pageTag -> NBTHelper.readCompoundList(pageTag.getList("Entries", Tag.TAG_COMPOUND), + tag -> tag.getString("Text")))) { + for (String entry : entries) + if (textComponentHasClickEvent(entry)) + return null; + } + return data; + }); } // Triggered by block tag, not BE type @@ -120,7 +139,13 @@ public final class NBTProcessors { } public static boolean textComponentHasClickEvent(String json) { - Component component = Component.Serializer.fromJson(json.isEmpty() ? "\"\"" : json); + return textComponentHasClickEvent(Component.Serializer.fromJson(json.isEmpty() ? "\"\"" : json)); + } + + public static boolean textComponentHasClickEvent(Component component) { + for (Component sibling : component.getSiblings()) + if (textComponentHasClickEvent(sibling)) + return true; return component != null && component.getStyle() != null && component.getStyle() .getClickEvent() != null; } @@ -144,7 +169,7 @@ public final class NBTProcessors { return signProcessor.apply(compound); if (blockEntity.onlyOpCanSetNbt()) return null; - return withUnsafeNBTDiscarded(compound); + return compound; } } From bc1ad5f52d93ef9126b11446976ba304a6de4654 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:07:19 +0200 Subject: [PATCH 15/46] Datagen --- .../12afe0d97856fb2040b8407470e6d13529994eaa | 2 +- .../455c485c9c8ef171bbc1ce4d435b3110ba1557ba | 2 +- .../6ec3b5a261c9ae3df674f7595dc66530ce54feb9 | 2 +- .../82992cbf8f2794d83ac94034835eac0acd7915b9 | 10 +++++----- .../8e794e243511ea3d808ffb90a97ef5ee71d8d5f9 | 2 +- .../b256105d8411632b0d585496ea8944a751a08034 | 4 ++-- .../c24b4d2b8d15abff51c78bd94f4403d9eae6c139 | 2 +- .../e0a39a97205b7149114f15de91b614248d05fd95 | 2 +- .../blasting/ingot_aluminium_compat_ic2.json | 20 +++++++++---------- .../smelting/ingot_aluminium_compat_ic2.json | 20 +++++++++---------- .../blasting/ingot_aluminium_compat_ic2.json | 18 ++++++++--------- .../smelting/ingot_aluminium_compat_ic2.json | 18 ++++++++--------- .../splashing/ic2/crushed_raw_aluminum.json | 16 +++++++-------- 13 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa b/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa index 87b990f7f..e988c048d 100644 --- a/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa +++ b/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa @@ -1,4 +1,4 @@ -// 1.19.2 2024-09-02T22:02:10.2051947 Create's Sequenced Assembly Recipes +// 1.19.2 2024-10-09T12:03:41.3844677 Create's Sequenced Assembly Recipes dbaca5a5aa312f3bc7b826e51e665d32e798a5d7 data/create/recipes/sequenced_assembly/precision_mechanism.json dacafdb106304d183b00e21fb01517ac45eca800 data/create/recipes/sequenced_assembly/sturdy_sheet.json 1274315b5c570722d6f5b2ed7f5e53fe01b6288a data/create/recipes/sequenced_assembly/track.json diff --git a/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba b/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba index 8095db564..f94b389c1 100644 --- a/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba +++ b/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba @@ -1,4 +1,4 @@ -// 1.19.2 2024-09-02T22:02:10.2066856 Create's Advancements +// 1.19.2 2024-10-09T12:03:41.3854644 Create's Advancements 2079ae09cf699108a8035ced7ca712fed4ab1577 data/create/advancements/andesite_alloy.json 082d3987c5e074ed50be4a94a6fdc17120af241b data/create/advancements/andesite_casing.json 4618109cfb4550fd8e19dc9d794ef24398b10a61 data/create/advancements/anvil_plough.json diff --git a/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 b/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 index a9030040f..cb676b15e 100644 --- a/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 +++ b/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 @@ -1,4 +1,4 @@ -// 1.19.2 2024-09-02T22:02:10.2804789 Create's Mechanical Crafting Recipes +// 1.19.2 2024-10-09T12:03:41.4004239 Create's Mechanical Crafting Recipes f076d64d9f30709bed34775136c9241097b28aa9 data/create/recipes/mechanical_crafting/crushing_wheel.json 694dca9dcff246bb7f560b3304fcc244c53217d5 data/create/recipes/mechanical_crafting/extendo_grip.json c03bc27f537e2d6531438bf58a17d977a7e16c7b data/create/recipes/mechanical_crafting/potato_cannon.json diff --git a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 index 455620bd8..9546884bb 100644 --- a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 +++ b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 @@ -1,5 +1,5 @@ -// 1.19.2 2024-09-02T22:02:10.2086711 Create's Standard Recipes -d8e72e6e42d9d5157b98e565b8889d048d4d20cf data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_ic2.json +// 1.19.2 2024-10-09T12:03:41.444307 Create's Standard Recipes +6800157e64a8e1322bad29199c30cf3334cc69f7 data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json ff6a181c36dba79ed4fe7945823f7529bd7913fe data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_immersiveengineering.json 106354a9eb7379a53eae40a1775f43bf67225919 data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_immersiveengineering.json bb548877a89f41e1bdfe987dd3ec05b6023daa81 data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_mekanism.json @@ -24,7 +24,7 @@ f0570274cf54c73b95d9665ea17432b63b2da525 data/create/advancements/recipes/buildi 7c5a7a087bc6644b0944fd37211d4e69a863a8c2 data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json e83398ba06339e3bd559b839c725de4f7535be5e data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json 94ebf2a541daade4b3b6a50e13c6306418025c77 data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json -c3190405474b5ba8d070f46aa3151c6da48cd81b data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_ic2.json +d84a85b7d72b12b33662773a6563309db89860cf data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json cf1480247e325842aca707d2cfd1ce58aa922f30 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_immersiveengineering.json fe585f32461cd784fda4832d727985a0e20e7cb3 data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_immersiveengineering.json 847d5dc5141fd0cea5763466c092507771909054 data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_mekanism.json @@ -246,7 +246,7 @@ d4012346e139ef643ac4c83713cbe6b5a5beac8a data/create/advancements/recipes/food/s ab7d109fd99b2e6b84941955529941eea15196af data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json d6b68a6fb4b7872f800585a8616cfe1ff1a0428c data/create/recipes/blasting/copper_ingot_from_crushed.json 2f24bbc0a6197232c7df975cefa76f8bededb2e3 data/create/recipes/blasting/gold_ingot_from_crushed.json -1440ff91b1a458d554876ad3596176f988ca0626 data/create/recipes/blasting/ingot_aluminum_compat_ic2.json +f2d3636e3c828538b957e974bc4f58191d2fac83 data/create/recipes/blasting/ingot_aluminium_compat_ic2.json 403992a2ecfe88e639c0165b78d41c3baea5fc83 data/create/recipes/blasting/ingot_aluminum_compat_immersiveengineering.json c48b2f2981a7a45629bcb9b9dc3fad9150dd39a5 data/create/recipes/blasting/ingot_lead_compat_immersiveengineering.json 10b1df3b14d2854e3d7948b27f0b8703fde48012 data/create/recipes/blasting/ingot_lead_compat_mekanism.json @@ -463,7 +463,7 @@ b43d736230229587b24693f4059c974c83c99832 data/create/recipes/smelting/glass_from ac8519dc87331facee57802dad374c0b32b8bf0c data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json 1cfea94ee0c921056a6aee8ca381be4f84b9e2e1 data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json 3a2656e86cdf82e99682242da9aa977031049ea1 data/create/recipes/smelting/gold_ingot_from_crushed.json -1f5b865d52bee67c37076bd623fde52d44c20df8 data/create/recipes/smelting/ingot_aluminum_compat_ic2.json +a30957a4b0b53fb2b62401847ab9efc0e23bd4d4 data/create/recipes/smelting/ingot_aluminium_compat_ic2.json b223054970e6571768319bb866d61635d726dce5 data/create/recipes/smelting/ingot_aluminum_compat_immersiveengineering.json 78467cf924ebeb24c53ef0ea10fca3eb180f914c data/create/recipes/smelting/ingot_lead_compat_immersiveengineering.json bd7bffd4bbd69abc1ee5e437c3f1098c075892fe data/create/recipes/smelting/ingot_lead_compat_mekanism.json diff --git a/src/generated/resources/.cache/8e794e243511ea3d808ffb90a97ef5ee71d8d5f9 b/src/generated/resources/.cache/8e794e243511ea3d808ffb90a97ef5ee71d8d5f9 index a8f73c926..065473c4e 100644 --- a/src/generated/resources/.cache/8e794e243511ea3d808ffb90a97ef5ee71d8d5f9 +++ b/src/generated/resources/.cache/8e794e243511ea3d808ffb90a97ef5ee71d8d5f9 @@ -1,4 +1,4 @@ -// 1.19.2 2024-09-02T22:02:10.2146561 Registrate Provider for create [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.19.2 2024-10-09T12:03:41.4014222 Registrate Provider for create [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json diff --git a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 index bd1ebf7ad..eb1c1fe65 100644 --- a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 +++ b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 @@ -1,4 +1,4 @@ -// 1.19.2 2024-09-02T22:02:10.2734972 Create's Processing Recipes +// 1.19.2 2024-10-09T12:03:41.3884566 Create's Processing Recipes 3c94326fb730f68c1e44fe1e2ef09c9db6ffd92b data/create/recipes/compacting/andesite_from_flint.json 8d3d5b31f3601b9f681ff710e0545a483a1494c6 data/create/recipes/compacting/blaze_cake.json 8bd7f4e3a686ab520b2d55594d2018d0e9a50c91 data/create/recipes/compacting/chocolate.json @@ -1102,7 +1102,7 @@ e3f12ec5d449caa54ebe1c453a89373492b8f48a data/create/recipes/splashing/endergeti 64535aaa3a5d4b98791337b1a8ce50ad3d39a8ac data/create/recipes/splashing/gravel.json dd9508767f68cc8b5cc2f642690961e0c22c9985 data/create/recipes/splashing/gray_concrete_powder.json 8908b452e6bc1290ebb8cfefc2c066460de93bff data/create/recipes/splashing/green_concrete_powder.json -869a639fd7069495693fd2106165b57ce674201b data/create/recipes/splashing/ic2/crushed_raw_aluminum.json +9764857ea6ee8d31ec37e6022f89dbe662e88591 data/create/recipes/splashing/ic2/crushed_raw_aluminum.json 6fd01478f838507f9e0daf7eb0a19e8315e03cb8 data/create/recipes/splashing/ic2/crushed_raw_silver.json b5a0a0fc79bf310965aa16e78044b3f6a8a9998f data/create/recipes/splashing/ic2/crushed_raw_tin.json 00b8d0c2577cc36da1c862234b61fb7d1cfe3e65 data/create/recipes/splashing/ic2/crushed_raw_uranium.json diff --git a/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 b/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 index 19f2ea123..1c2e850a3 100644 --- a/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 +++ b/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 @@ -1,2 +1,2 @@ -// 1.19.2 2024-09-02T22:02:10.2076734 Create's Custom Sounds +// 1.19.2 2024-10-09T12:03:41.3874594 Create's Custom Sounds bcfd9320f8ed54f3282b1757a41da0d1753e1754 assets/create/sounds.json diff --git a/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 b/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 index 93885c8a2..64425656c 100644 --- a/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 +++ b/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 @@ -1,2 +1,2 @@ -// 1.19.2 2024-09-02T22:02:10.2814764 Create's Recipe Serializer Tags +// 1.19.2 2024-10-09T12:03:41.3884566 Create's Recipe Serializer Tags 0d8718f7383761bc5d7bc45306ed266ebf25dc1d data/create/tags/recipe_serializer/automation_ignore.json diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json index 6d99a0525..8ca9199a1 100644 --- a/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "create:blasting/ingot_aluminium_compat_ic2" - ] - }, "criteria": { "has_item": { - "trigger": "minecraft:inventory_changed", "conditions": { "items": [ { @@ -16,13 +10,14 @@ ] } ] - } + }, + "trigger": "minecraft:inventory_changed" }, "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", "conditions": { "recipe": "create:blasting/ingot_aluminium_compat_ic2" - } + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ @@ -30,5 +25,10 @@ "has_item", "has_the_recipe" ] - ] + ], + "rewards": { + "recipes": [ + "create:blasting/ingot_aluminium_compat_ic2" + ] + } } \ No newline at end of file diff --git a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json index 7abca1eaf..90aaeeac5 100644 --- a/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json @@ -1,13 +1,7 @@ { "parent": "minecraft:recipes/root", - "rewards": { - "recipes": [ - "create:smelting/ingot_aluminium_compat_ic2" - ] - }, "criteria": { "has_item": { - "trigger": "minecraft:inventory_changed", "conditions": { "items": [ { @@ -16,13 +10,14 @@ ] } ] - } + }, + "trigger": "minecraft:inventory_changed" }, "has_the_recipe": { - "trigger": "minecraft:recipe_unlocked", "conditions": { "recipe": "create:smelting/ingot_aluminium_compat_ic2" - } + }, + "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ @@ -30,5 +25,10 @@ "has_item", "has_the_recipe" ] - ] + ], + "rewards": { + "recipes": [ + "create:smelting/ingot_aluminium_compat_ic2" + ] + } } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json b/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json index 08f0c18dd..ae89d6d39 100644 --- a/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json +++ b/src/generated/resources/data/create/recipes/blasting/ingot_aluminium_compat_ic2.json @@ -1,15 +1,15 @@ { "type": "minecraft:blasting", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ic2" + } + ], + "cookingtime": 100, + "experience": 0.1, "ingredient": { "item": "create:crushed_raw_aluminum" }, - "result": "ic2:ingot_aluminium", - "experience": 0.1, - "cookingtime": 100, - "conditions": [ - { - "modid": "ic2", - "type": "forge:mod_loaded" - } - ] + "result": "ic2:ingot_aluminium" } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json b/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json index 92152e36c..766a12789 100644 --- a/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json +++ b/src/generated/resources/data/create/recipes/smelting/ingot_aluminium_compat_ic2.json @@ -1,15 +1,15 @@ { "type": "minecraft:smelting", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ic2" + } + ], + "cookingtime": 200, + "experience": 0.1, "ingredient": { "item": "create:crushed_raw_aluminum" }, - "result": "ic2:ingot_aluminium", - "experience": 0.1, - "cookingtime": 200, - "conditions": [ - { - "modid": "ic2", - "type": "forge:mod_loaded" - } - ] + "result": "ic2:ingot_aluminium" } \ No newline at end of file diff --git a/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json b/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json index 8871bb3ca..945276f36 100644 --- a/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json +++ b/src/generated/resources/data/create/recipes/splashing/ic2/crushed_raw_aluminum.json @@ -1,5 +1,11 @@ { "type": "create:splashing", + "conditions": [ + { + "type": "forge:mod_loaded", + "modid": "ic2" + } + ], "ingredients": [ { "item": "create:crushed_raw_aluminum" @@ -7,14 +13,8 @@ ], "results": [ { - "item": "ic2:nugget_aluminium", - "count": 9 - } - ], - "conditions": [ - { - "modid": "ic2", - "type": "forge:mod_loaded" + "count": 9, + "item": "ic2:nugget_aluminium" } ] } \ No newline at end of file From 3c92ace8eba81d7c1ef8a193e53c48c8355ae4e5 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:33:34 +0200 Subject: [PATCH 16/46] Datagen --- .../12afe0d97856fb2040b8407470e6d13529994eaa | 2 +- .../2d64935085b86659cb7857bad9701dbf9bab6e4c | 3133 +++++++++-------- .../455c485c9c8ef171bbc1ce4d435b3110ba1557ba | 188 +- .../499d9d953ee69b539ff4dd4c95a6cbd849f63f67 | 2 +- .../6ec3b5a261c9ae3df674f7595dc66530ce54feb9 | 2 +- .../82992cbf8f2794d83ac94034835eac0acd7915b9 | 984 +++--- .../ad9bf59631726a3f24738ebf1a6cd44c7f88ba0f | 2 +- .../b256105d8411632b0d585496ea8944a751a08034 | 123 +- .../c24b4d2b8d15abff51c78bd94f4403d9eae6c139 | 2 +- .../e0a39a97205b7149114f15de91b614248d05fd95 | 2 +- .../eaed56ca9d9781c7626be345dd9f2c9a1fad638e | 2 +- ...2.json => ingot_aluminium_compat_ic2.json} | 4 +- ...2.json => ingot_aluminium_compat_ic2.json} | 4 +- .../foundation/mixin/BlockItemMixin.java | 2 +- 14 files changed, 2192 insertions(+), 2260 deletions(-) rename src/generated/resources/data/create/advancements/recipes/misc/blasting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (83%) rename src/generated/resources/data/create/advancements/recipes/misc/smelting/{ingot_aluminum_compat_ic2.json => ingot_aluminium_compat_ic2.json} (83%) diff --git a/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa b/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa index e988c048d..8aded56d1 100644 --- a/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa +++ b/src/generated/resources/.cache/12afe0d97856fb2040b8407470e6d13529994eaa @@ -1,4 +1,4 @@ -// 1.19.2 2024-10-09T12:03:41.3844677 Create's Sequenced Assembly Recipes +// 1.20.1 2024-10-09T12:24:59.2666858 Create's Sequenced Assembly Recipes dbaca5a5aa312f3bc7b826e51e665d32e798a5d7 data/create/recipes/sequenced_assembly/precision_mechanism.json dacafdb106304d183b00e21fb01517ac45eca800 data/create/recipes/sequenced_assembly/sturdy_sheet.json 1274315b5c570722d6f5b2ed7f5e53fe01b6288a data/create/recipes/sequenced_assembly/track.json diff --git a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c index 065473c4e..92eb78af1 100644 --- a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c +++ b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c @@ -1,4 +1,4 @@ -// 1.19.2 2024-10-09T12:03:41.4014222 Registrate Provider for create [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.20.1 2024-10-09T12:24:59.2028575 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json @@ -585,8 +585,8 @@ b0d8f08968763a5f74e5cd5644377a76a9f39753 assets/create/blockstates/yellow_toolbo fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json 64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json -73cd6860a07b44f5580d3859df3e5bd649dba56a assets/create/lang/en_ud.json -cd6614daf57992571302bcde45f5ec90cc744441 assets/create/lang/en_us.json +d3d30a92e4f63e8acb6aa3e3358b6e8340aa8cc1 assets/create/lang/en_ud.json +a50be2f8a02b0fdd2b5a8aae9cf8df1490015707 assets/create/lang/en_us.json a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json 103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -2305,1230 +2305,1230 @@ f7f6d92ab5dea5a85ec3d570cdd169329dd4225f assets/create/models/threshold_switch/b 41009d15d22c946a2ed4c6ba98447c3c7cc26315 assets/create/models/threshold_switch/block_wall_3.json ad3204842128db2c7bebdbf3c40fccc45c82de44 assets/create/models/threshold_switch/block_wall_4.json 197a6ed7fd9514de13daf58605c24a7156c00bd1 assets/create/models/threshold_switch/block_wall_5.json -e9be13270e548bab1efa783297ecd542f1131a64 data/create/advancements/recipes/building_blocks/andesite_from_stone_types_andesite_stonecutting.json -e8e507e2981114d79c7cdc6a63cd0cfc5eb588fb data/create/advancements/recipes/building_blocks/calcite_from_stone_types_calcite_stonecutting.json -6baae33c4f0576150d86af1402ee7fccba34a3a7 data/create/advancements/recipes/building_blocks/deepslate_from_stone_types_deepslate_stonecutting.json -0dd33368f5abff29d3eb575321832cf9410ff238 data/create/advancements/recipes/building_blocks/diorite_from_stone_types_diorite_stonecutting.json -6b635b786be48ff7bbcad7648e75b3a5452fe739 data/create/advancements/recipes/building_blocks/dripstone_block_from_stone_types_dripstone_stonecutting.json -9c7933938b35cda04a6f39185ce6666d08743a96 data/create/advancements/recipes/building_blocks/granite_from_stone_types_granite_stonecutting.json -93dff0c9e76304a9b94b250cc549f2f48eadc556 data/create/advancements/recipes/building_blocks/tuff_from_stone_types_tuff_stonecutting.json -1f923bc2a94b18c132c74e3113a2f6cb6ffd3eff data/create/advancements/recipes/create.base/crafting/kinetics/black_valve_handle_from_other_valve_handle.json -d0abd9afa18f6bb5f5dde56b9c7ea24e7a72da16 data/create/advancements/recipes/create.base/crafting/kinetics/blue_valve_handle_from_other_valve_handle.json -9af96918d3ac5d7d0e2458377afe57b1a51b5f2b data/create/advancements/recipes/create.base/crafting/kinetics/brown_valve_handle_from_other_valve_handle.json -320141bd8354173aab49f4872419b823b63ed4c6 data/create/advancements/recipes/create.base/crafting/kinetics/cyan_valve_handle_from_other_valve_handle.json -b251ad62b0070165fd7fdd4f4070d81abc3db378 data/create/advancements/recipes/create.base/crafting/kinetics/gray_valve_handle_from_other_valve_handle.json -fc9dbff58b30fdddab1eede2f9eb363c153e07ba data/create/advancements/recipes/create.base/crafting/kinetics/green_valve_handle_from_other_valve_handle.json -c162f742bf7b5dcede43ac9ae554dbcd5aa87c1a data/create/advancements/recipes/create.base/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json -b95ddd390594ecc1f448f90fffd8ae7aa049648a data/create/advancements/recipes/create.base/crafting/kinetics/light_gray_valve_handle_from_other_valve_handle.json -e5ca46744418212f92b4456caa83190e01cda488 data/create/advancements/recipes/create.base/crafting/kinetics/lime_valve_handle_from_other_valve_handle.json -b62aa1c8ecca4a4b6e23739e4cc174d3cd361198 data/create/advancements/recipes/create.base/crafting/kinetics/magenta_valve_handle_from_other_valve_handle.json -8a674107130bc16111e147cb313a521a9a80011b data/create/advancements/recipes/create.base/crafting/kinetics/orange_valve_handle_from_other_valve_handle.json -c76bcc3a4207a4cccb7b0f3ac2fcbb14959c837a data/create/advancements/recipes/create.base/crafting/kinetics/pink_valve_handle_from_other_valve_handle.json -3d7c12e26f44b872e3789905aefb993816a856e5 data/create/advancements/recipes/create.base/crafting/kinetics/purple_valve_handle_from_other_valve_handle.json -1f58782364747d8286c7dee4d7066e9f2894ee39 data/create/advancements/recipes/create.base/crafting/kinetics/red_valve_handle_from_other_valve_handle.json -c5ab0b03813a31bb26d44aa36e3ad79b61880f05 data/create/advancements/recipes/create.base/crafting/kinetics/white_valve_handle_from_other_valve_handle.json -ebb8227c6d5a45448826ae2d72c6f7c52f836ab9 data/create/advancements/recipes/create.base/crafting/kinetics/yellow_valve_handle_from_other_valve_handle.json -59c1c7f291378e9e4ca9978142943aa4bec507db data/create/advancements/recipes/create.palettes/acacia_window.json -bfa00dd7eb3d71f2c2649c2ecc17065e877a7bd4 data/create/advancements/recipes/create.palettes/acacia_window_pane.json -b99021acc1fbc1c247a712a0ae6a672cb21bf89d data/create/advancements/recipes/create.palettes/andesite_bars_from_andesite_alloy_stonecutting.json -6f01a8e667a337e504822e7b75aef37716ed5fab data/create/advancements/recipes/create.palettes/andesite_ladder_from_andesite_alloy_stonecutting.json -fdddf63ddd501b57deba33fae92fc9870b0613e2 data/create/advancements/recipes/create.palettes/andesite_pillar_from_stone_types_andesite_stonecutting.json -974fce40b47a5c5fcaf5feb09b92d178a63308fb data/create/advancements/recipes/create.palettes/andesite_scaffolding_from_andesite_alloy_stonecutting.json -8ea872ceefe468103c7e3a2a202f1ff5c36f9c7b data/create/advancements/recipes/create.palettes/asurine_from_stone_types_asurine_stonecutting.json -cf3c9bb7ebb89e695b09e89e53e9c956c6ee098e data/create/advancements/recipes/create.palettes/asurine_pillar_from_stone_types_asurine_stonecutting.json -25da416d2c0b1ede72a2acafff9313f8aa06b88a data/create/advancements/recipes/create.palettes/birch_window.json -77ca712c533da5849a44e50ece9b6c973cb255b7 data/create/advancements/recipes/create.palettes/birch_window_pane.json -2168a6b45f90a210408a78f233248248dece7996 data/create/advancements/recipes/create.palettes/brass_bars_from_ingots_brass_stonecutting.json -5b7c1693459b38a855c1c7e7bb99c8f4a834347d data/create/advancements/recipes/create.palettes/brass_ladder_from_ingots_brass_stonecutting.json -0096957aa80383448f683130defa5107214cbd58 data/create/advancements/recipes/create.palettes/brass_scaffolding_from_ingots_brass_stonecutting.json -ef61bc5be05186488d225af223348e83af61388b data/create/advancements/recipes/create.palettes/calcite_pillar_from_stone_types_calcite_stonecutting.json -0af812662873e0d1fc3d8a820b387e74952f70ee data/create/advancements/recipes/create.palettes/copper_bars_from_ingots_copper_stonecutting.json -ecc885349bed79171f57b4bdedfbfc224b248f0c data/create/advancements/recipes/create.palettes/copper_ladder_from_ingots_copper_stonecutting.json -eae4488f646740e7d57b241a6063cf8a4b552e11 data/create/advancements/recipes/create.palettes/copper_scaffolding_from_ingots_copper_stonecutting.json -534a957912e3f6e6418765479a2739670f680d6a data/create/advancements/recipes/create.palettes/copper_shingles_from_ingots_copper_stonecutting.json -abff4ac821c5a8381450290652d7a5b06b22323d data/create/advancements/recipes/create.palettes/copper_shingle_slab.json -4e75e2ec0c2a38933763a195e9a22b9724cee621 data/create/advancements/recipes/create.palettes/copper_shingle_slab_from_copper_shingles_stonecutting.json -1d6584da36f0ab13a9115f152edb3b8a9f56bba3 data/create/advancements/recipes/create.palettes/copper_shingle_stairs.json -d49e06b0ac01376f9181d843f28336fc62db4fbe data/create/advancements/recipes/create.palettes/copper_shingle_stairs_from_copper_shingles_stonecutting.json -bfb8ef530386edbbb0d5759d9e2b320e0084c2b7 data/create/advancements/recipes/create.palettes/copper_tiles_from_ingots_copper_stonecutting.json -7c679df626dfdc5c4b8d4aedba173f39ceffe96c data/create/advancements/recipes/create.palettes/copper_tile_slab.json -8e7bc4261031c0de44dbc2da7675c8789ec65084 data/create/advancements/recipes/create.palettes/copper_tile_slab_from_copper_tiles_stonecutting.json -96b1f1da1e7e1130f73adc7669d915bc075f966c data/create/advancements/recipes/create.palettes/copper_tile_stairs.json -0976b6dcdbb42277f7547bbeff7f6bd0e7ee6c64 data/create/advancements/recipes/create.palettes/copper_tile_stairs_from_copper_tiles_stonecutting.json -0c72fe88dd96eb446bb1cbcf687c4d6481abc2e8 data/create/advancements/recipes/create.palettes/copycat_panel_from_ingots_zinc_stonecutting.json -f6d1ec97f93b0270da7c3bf5b666ac117ad3076c data/create/advancements/recipes/create.palettes/copycat_step_from_ingots_zinc_stonecutting.json -47f9eede564a3a7db56468ac8c6fd5980a9fa96a data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_shingles_from_honeycomb.json -6631f01c66a3358ca3f9fa8c6b7cae35e7c90f6d data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json -612ac623c661376aaa14f4b6785845f6c2d87c9f data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json -92d4dfcb5a48b79e25e3c6cd94759e1875a669ee data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_tiles_from_honeycomb.json -865f125d3b1b7d3898205ae02888f1ba77a1a004 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json -eda0a300b8dae9e11a0dc383189650701a90024b data/create/advancements/recipes/create.palettes/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json -aa3103ae4055a857b55d62c5981f5c970c692d7d data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json -949042abbe5fc773b94fe50210943e1e69bd38c5 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json -668aa7bf5f35ed69ad8a040d71c26747c44e8e34 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json -9f77a7f784a2726d24ee44636d40ca8409028d8f data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json -8015bdbe6d076fe28e441df5eb37c8d2abb6c24e data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json -ca395a7fb373f08a8dac6d77d146db91c996356c data/create/advancements/recipes/create.palettes/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json -6c8dd190f1a3950daac5a9877d2f9e8338412be0 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json -a394a9f986d1d510be85b48e9925bdf25097213f data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json -92e6304d52c8d436b044b2d387d26824959f47e4 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json -2851b0911e486e6a09e0b2d506cebfe6927f5d85 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json -d60ad63cf0f3ae3d375ca7afd6c6c6e06ed100e1 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json -b51451483fca0dd242d5f841478bcdd6b4cd7302 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json -b4c198189ee25a6228b58cea27ea6018bef889dc data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json -6f6b272803d701d373a3e980738f7281a25a0c1e data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json -5e4d6fcf2eaae2e393300296b73b40b48a0f9542 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json -6cb21b4e9db83313dc0e09c4cf079347639e2de9 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json -9b3c2b22d161670b004bd55b92287a0ca9029cdb data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json -c7155f56b7d31f5f8f6bb284fb71b39019d967a1 data/create/advancements/recipes/create.palettes/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json -3f256f95ccf0acdf47d05893ee4e21d3c7df2c0c data/create/advancements/recipes/create.palettes/crafting/kinetics/black_seat.json -6c41c0225fa2fdd6c52405c6d3c38414fd676aa9 data/create/advancements/recipes/create.palettes/crafting/kinetics/black_seat_from_other_seat.json -988d6bb62ca303051a3898632a175cbda12ae289 data/create/advancements/recipes/create.palettes/crafting/kinetics/blue_seat.json -bd1348d231e7c2d306e9cc8a760143bd6cfffb73 data/create/advancements/recipes/create.palettes/crafting/kinetics/blue_seat_from_other_seat.json -5d729ff1a81a3a0118f5949aaa1111489f88e4ec data/create/advancements/recipes/create.palettes/crafting/kinetics/brown_seat.json -722a52c3a8c23fcbbbc08177ab135ca40c58f53a data/create/advancements/recipes/create.palettes/crafting/kinetics/brown_seat_from_other_seat.json -69768ed726ff11680beceb15f34f8a52ba3b6b67 data/create/advancements/recipes/create.palettes/crafting/kinetics/cyan_seat.json -794f03e20084b9fc0d65dfe60b21a34e6e0002ec data/create/advancements/recipes/create.palettes/crafting/kinetics/cyan_seat_from_other_seat.json -2696a3b8645fd09d830cf7d7a76f5aab54dcd02e data/create/advancements/recipes/create.palettes/crafting/kinetics/gray_seat.json -e55d3bca5ac8090d46ab18b5b768bdd135f3e8ed data/create/advancements/recipes/create.palettes/crafting/kinetics/gray_seat_from_other_seat.json -540b652774130e8ad707cb0f79a9397857408563 data/create/advancements/recipes/create.palettes/crafting/kinetics/green_seat.json -717ab89326073d9327767f65c9ef8f0ebca7a02e data/create/advancements/recipes/create.palettes/crafting/kinetics/green_seat_from_other_seat.json -93374c0d142ce125b86a7017308eb3da50415a23 data/create/advancements/recipes/create.palettes/crafting/kinetics/light_blue_seat.json -64193680060042e4069497b1ead22470ce1912f8 data/create/advancements/recipes/create.palettes/crafting/kinetics/light_blue_seat_from_other_seat.json -b2da019020d8feabf57b3d0cedc3e9ecb7331272 data/create/advancements/recipes/create.palettes/crafting/kinetics/light_gray_seat.json -b7e1966db2269995ffa1065a0aeaa6e47e1eda9d data/create/advancements/recipes/create.palettes/crafting/kinetics/light_gray_seat_from_other_seat.json -481daedd0b8fe95ae10efc38fa34e0bc800512d3 data/create/advancements/recipes/create.palettes/crafting/kinetics/lime_seat.json -4b9f96c0171731bee73512314f7c5d18552601ab data/create/advancements/recipes/create.palettes/crafting/kinetics/lime_seat_from_other_seat.json -847bc1e330f0c20b728f2c4b1709a34f4322f169 data/create/advancements/recipes/create.palettes/crafting/kinetics/magenta_seat.json -8f42db87f1767fa6fd2847374be3646d72934e7d data/create/advancements/recipes/create.palettes/crafting/kinetics/magenta_seat_from_other_seat.json -7bde8a042ceeeacf716b6b161bafed6d65bade5d data/create/advancements/recipes/create.palettes/crafting/kinetics/orange_seat.json -3148ec4ccf8eb6894f4457a0aa73c89944016a8d data/create/advancements/recipes/create.palettes/crafting/kinetics/orange_seat_from_other_seat.json -6f9dfb04857f7e442848fa8daab13a28ca35199c data/create/advancements/recipes/create.palettes/crafting/kinetics/pink_seat.json -e8bad3149b616f469e7173e9cd03656f146cdadb data/create/advancements/recipes/create.palettes/crafting/kinetics/pink_seat_from_other_seat.json -6b0f3cbd721e042b6541c1d1eb9fa98afec3c3b7 data/create/advancements/recipes/create.palettes/crafting/kinetics/purple_seat.json -77cc0fed3db9f111dfb453d252a0ea5c2f92f183 data/create/advancements/recipes/create.palettes/crafting/kinetics/purple_seat_from_other_seat.json -db8494bbd886ca1639541e4d85699d3300da274b data/create/advancements/recipes/create.palettes/crafting/kinetics/red_seat.json -98427f485f606219f1d189b34d4af72bf2a2d248 data/create/advancements/recipes/create.palettes/crafting/kinetics/red_seat_from_other_seat.json -4a7001a6af435f49a993af706e0b81074d080147 data/create/advancements/recipes/create.palettes/crafting/kinetics/white_seat.json -3b63ced7008a10c802ea5bb30e9a8e040e4b6e53 data/create/advancements/recipes/create.palettes/crafting/kinetics/white_seat_from_other_seat.json -46f6347035596f6cbb8a19aacfe4c89e8ad82ba8 data/create/advancements/recipes/create.palettes/crafting/kinetics/yellow_seat.json -fe5e4d607d6a26ada2e51fc8481a3ce5aea8d3c1 data/create/advancements/recipes/create.palettes/crafting/kinetics/yellow_seat_from_other_seat.json -e53266c2bd1db17197d0d534c647ca78e9d98019 data/create/advancements/recipes/create.palettes/crimsite_from_stone_types_crimsite_stonecutting.json -16ce341b487f5002196918dabbf302c3da3538c6 data/create/advancements/recipes/create.palettes/crimsite_pillar_from_stone_types_crimsite_stonecutting.json -2652b6913e74ec8a703cabf9c8cfdb6d3ca2d0bf data/create/advancements/recipes/create.palettes/crimson_window.json -5dbb30639d0fe95348b6c322a947b2bc0b896a2f data/create/advancements/recipes/create.palettes/crimson_window_pane.json -708ac3126d72b122422bbfa45ac403b9a2214666 data/create/advancements/recipes/create.palettes/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json -0b2e1484b37f4b26ba87df25ca3dc4f38e34cde1 data/create/advancements/recipes/create.palettes/cut_andesite_brick_slab.json -aa24b9647ca5ff054ddc53ee17d56aa3759e43c9 data/create/advancements/recipes/create.palettes/cut_andesite_brick_slab_from_stone_types_andesite_stonecutting.json -306461ec050c1a8ce6ed13f25c0b9a64927612cb data/create/advancements/recipes/create.palettes/cut_andesite_brick_slab_recycling.json -df9ca9fdceb1d078321573f0b6e0a3a635cd9783 data/create/advancements/recipes/create.palettes/cut_andesite_brick_stairs.json -7112575113cd0d665cdd74286f80d941fab9a495 data/create/advancements/recipes/create.palettes/cut_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json -e779e799d4a12c6dbed33826844471197189101d data/create/advancements/recipes/create.palettes/cut_andesite_brick_wall.json -e5fe278f1d85c4de71c742b561ec3c8ef3f4edcc data/create/advancements/recipes/create.palettes/cut_andesite_brick_wall_from_stone_types_andesite_stonecutting.json -15fc1adaf5cd5456e7fd83faee6be0cd87767d72 data/create/advancements/recipes/create.palettes/cut_andesite_from_stone_types_andesite_stonecutting.json -09bb56d4f758e8d8370e43958b63b69aa03d0942 data/create/advancements/recipes/create.palettes/cut_andesite_slab.json -bddad75d8e87ea1da4ab05750d2c865e59aa002a data/create/advancements/recipes/create.palettes/cut_andesite_slab_from_stone_types_andesite_stonecutting.json -7d5114c22d7f918577994f27b0a2715081206399 data/create/advancements/recipes/create.palettes/cut_andesite_slab_recycling.json -5a589ca3ab88bae2bd39010d419d66e59fab188d data/create/advancements/recipes/create.palettes/cut_andesite_stairs.json -0f61aa2d78881eb02c90b0f0b95fb60fc2eab4b3 data/create/advancements/recipes/create.palettes/cut_andesite_stairs_from_stone_types_andesite_stonecutting.json -b4890d0feacd4957b95ce63d2a0f99650890719d data/create/advancements/recipes/create.palettes/cut_andesite_wall.json -3a8ac226e7a56e528e0f368e3266c109362728dd data/create/advancements/recipes/create.palettes/cut_andesite_wall_from_stone_types_andesite_stonecutting.json -5dadaf62f6ec649663d70b558c3d04a2f7ae7cc7 data/create/advancements/recipes/create.palettes/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json -cba88968955e066522f9cc90ddc588628614e074 data/create/advancements/recipes/create.palettes/cut_asurine_brick_slab.json -0b0d5a1d2e29786960845a113be30c044b528b89 data/create/advancements/recipes/create.palettes/cut_asurine_brick_slab_from_stone_types_asurine_stonecutting.json -0149e2ab1b841ed9389d71163806de06532e90f4 data/create/advancements/recipes/create.palettes/cut_asurine_brick_slab_recycling.json -702ca91d575f411ad5c4cfa4f44a872ea34ea340 data/create/advancements/recipes/create.palettes/cut_asurine_brick_stairs.json -492916c176a370ad34ffc3d8d77baae404a8ee93 data/create/advancements/recipes/create.palettes/cut_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json -aa2b82480a69ffc8968de09b39fb19ab9be47eac data/create/advancements/recipes/create.palettes/cut_asurine_brick_wall.json -39e8e6e1df10792369f1ddb4405cba2eeeb953b2 data/create/advancements/recipes/create.palettes/cut_asurine_brick_wall_from_stone_types_asurine_stonecutting.json -f23c4e2bd710c96387abfdd0facc0944578d83dc data/create/advancements/recipes/create.palettes/cut_asurine_from_stone_types_asurine_stonecutting.json -5f153a15d33907059ad8a44fb9933d740913d134 data/create/advancements/recipes/create.palettes/cut_asurine_slab.json -66ac215c3a782d258a9c954a4fe85488d31c3301 data/create/advancements/recipes/create.palettes/cut_asurine_slab_from_stone_types_asurine_stonecutting.json -c3ea11fc1e0d6e966389bec4a97b46829f5cbc6e data/create/advancements/recipes/create.palettes/cut_asurine_slab_recycling.json -9fe9aa4eb44ffccecb84e493b429053887ec1110 data/create/advancements/recipes/create.palettes/cut_asurine_stairs.json -fe1199da4db28e7bcee4565c9fe48f7c7cfef5a4 data/create/advancements/recipes/create.palettes/cut_asurine_stairs_from_stone_types_asurine_stonecutting.json -53a4338d5072996de61bac224d48b0ae8d4c5e95 data/create/advancements/recipes/create.palettes/cut_asurine_wall.json -6fabd216f093e6248fefdf84abbe8cc760dd4444 data/create/advancements/recipes/create.palettes/cut_asurine_wall_from_stone_types_asurine_stonecutting.json -284b7c402a62eb4b88bced25dd788b4d1d8bb780 data/create/advancements/recipes/create.palettes/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json -7ae1099c47a34f8cef3a9d23382a64a1f2a69247 data/create/advancements/recipes/create.palettes/cut_calcite_brick_slab.json -733924da5125fccd4fe2548d53a722cef5e3c4d0 data/create/advancements/recipes/create.palettes/cut_calcite_brick_slab_from_stone_types_calcite_stonecutting.json -a532d6f958dffa4fba38c02edd45ead7be781aae data/create/advancements/recipes/create.palettes/cut_calcite_brick_slab_recycling.json -b414d2a3d35a010d2bba7bee0c585400d022ba56 data/create/advancements/recipes/create.palettes/cut_calcite_brick_stairs.json -cdc6d74e43c2eb2324b0fd6943dbba68654556c8 data/create/advancements/recipes/create.palettes/cut_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json -11b9f64328e03ebf8f44a15ff57c93057622b3db data/create/advancements/recipes/create.palettes/cut_calcite_brick_wall.json -90fff2ca15d728192a710901cda78ee94a95b8b6 data/create/advancements/recipes/create.palettes/cut_calcite_brick_wall_from_stone_types_calcite_stonecutting.json -6cf01b382487d445ab194f5c3134fc57059b8d2a data/create/advancements/recipes/create.palettes/cut_calcite_from_stone_types_calcite_stonecutting.json -82e6cf4332106c4ce56f06fd8f6e9d891066c600 data/create/advancements/recipes/create.palettes/cut_calcite_slab.json -fd6a0027a03865ac8c979efcf7e5acd58cec97a7 data/create/advancements/recipes/create.palettes/cut_calcite_slab_from_stone_types_calcite_stonecutting.json -97cc22fc946f7a78d74f4f69e47f472a830efc12 data/create/advancements/recipes/create.palettes/cut_calcite_slab_recycling.json -f83c60a9cf5be56108b5fbab1627e8a37ced68bb data/create/advancements/recipes/create.palettes/cut_calcite_stairs.json -c5d76d3fe9df6b0b612e14af5e38ef6a52154750 data/create/advancements/recipes/create.palettes/cut_calcite_stairs_from_stone_types_calcite_stonecutting.json -779736acebdb449b52eda5482a0eede6ac3dd87b data/create/advancements/recipes/create.palettes/cut_calcite_wall.json -39030f771cdb9c66eacdb1fd4f614ca4207cd460 data/create/advancements/recipes/create.palettes/cut_calcite_wall_from_stone_types_calcite_stonecutting.json -383acca53bfa1796d92f44a3f463f508cb820b21 data/create/advancements/recipes/create.palettes/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json -4581ccfe72f3cc57db03e8a1fa8f6b3331e6fe13 data/create/advancements/recipes/create.palettes/cut_crimsite_brick_slab.json -2410b456788ec8d0be02b9e76a7fca556cabca87 data/create/advancements/recipes/create.palettes/cut_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json -75d8b6e4d97434d6b558937958ff0be74c55752d data/create/advancements/recipes/create.palettes/cut_crimsite_brick_slab_recycling.json -4498fa30c26edd0d2d71639547b766b1043b717a data/create/advancements/recipes/create.palettes/cut_crimsite_brick_stairs.json -ecaff640603e0587965788c0a5c65b46bda0aa6d data/create/advancements/recipes/create.palettes/cut_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json -97d0c94525c04a97577b60dece1ddb2a4aaac7d1 data/create/advancements/recipes/create.palettes/cut_crimsite_brick_wall.json -b35546df16e9d29bc7086a352819074dbbe04761 data/create/advancements/recipes/create.palettes/cut_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json -310c2feb52093d45bd00103ed0eefb7d72120780 data/create/advancements/recipes/create.palettes/cut_crimsite_from_stone_types_crimsite_stonecutting.json -3365d6bc10fbf2ae6f27459e9836789ce68db222 data/create/advancements/recipes/create.palettes/cut_crimsite_slab.json -26293949d6f5dbae7d528a366501257bc4e698dd data/create/advancements/recipes/create.palettes/cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json -30a08e737e68357717e881762ddc47d520c7b629 data/create/advancements/recipes/create.palettes/cut_crimsite_slab_recycling.json -55dfa898f2c1a784f3558ea35cf104ace0c2729e data/create/advancements/recipes/create.palettes/cut_crimsite_stairs.json -b5edac3f3466640c80ae0fcba02da0c3b73df95a data/create/advancements/recipes/create.palettes/cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json -9c1c4ea38f486b1cbaa9cd85ead6cc43dacf9c45 data/create/advancements/recipes/create.palettes/cut_crimsite_wall.json -a1921b19b9457e3641867c2941070c0ae69fc0cb data/create/advancements/recipes/create.palettes/cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json -c3fdf1643bfe035da5870df1873a5e2e0883218d data/create/advancements/recipes/create.palettes/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json -6e7e83ea1d9f6b379ce7db3c598db9f4cbb98675 data/create/advancements/recipes/create.palettes/cut_deepslate_brick_slab.json -e2b8b4a7afcd705abfd75b5c9b0861ab01d115c9 data/create/advancements/recipes/create.palettes/cut_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json -b4b8a0eb229abce4a0c9d761e9da37087f66c2ac data/create/advancements/recipes/create.palettes/cut_deepslate_brick_slab_recycling.json -c7df63690b9c73c43cf93611fb3a3e22dca95339 data/create/advancements/recipes/create.palettes/cut_deepslate_brick_stairs.json -cdc335c4386681c67d54e5786caae2c5146b78f3 data/create/advancements/recipes/create.palettes/cut_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json -88a721cd2e0bdae836a7bbf9e1fe21edd3d9f4ad data/create/advancements/recipes/create.palettes/cut_deepslate_brick_wall.json -a4f9b6946e6d1ecc58917342a16714a217dcf383 data/create/advancements/recipes/create.palettes/cut_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json -1ba32ee6c39d65577d34046893e56e393f9f1d35 data/create/advancements/recipes/create.palettes/cut_deepslate_from_stone_types_deepslate_stonecutting.json -9e55733c80762ae531fba22fa829b30a448b0f25 data/create/advancements/recipes/create.palettes/cut_deepslate_slab.json -91fd9447a1956930989c6c27ae085a9e2d02543f data/create/advancements/recipes/create.palettes/cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json -9e89809bc079b1ef37ae8957fa04bb8120aa0b89 data/create/advancements/recipes/create.palettes/cut_deepslate_slab_recycling.json -35db33f42eaf2195284433cc183a35e192933472 data/create/advancements/recipes/create.palettes/cut_deepslate_stairs.json -d1d48964172cc0e9597f96a140c14e216fadd98b data/create/advancements/recipes/create.palettes/cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json -a7aa30e5ebd9ce9cfe3a96a64289ac1cdf452243 data/create/advancements/recipes/create.palettes/cut_deepslate_wall.json -f499128e6724523b07b2b2ff892224d11f026e50 data/create/advancements/recipes/create.palettes/cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json -39327fe977fd95b4258b1c97d1c60f6b0684a562 data/create/advancements/recipes/create.palettes/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json -a9623d6c71b7b386dba519cddd508266a6f46816 data/create/advancements/recipes/create.palettes/cut_diorite_brick_slab.json -79999ab8a8ecffbfad1769777cd8611be30fb8df data/create/advancements/recipes/create.palettes/cut_diorite_brick_slab_from_stone_types_diorite_stonecutting.json -07cf9a3a9345c4102916ab4a8c524869f57c082b data/create/advancements/recipes/create.palettes/cut_diorite_brick_slab_recycling.json -6eadd400cee51bc64af1217690fc700a93cb49f1 data/create/advancements/recipes/create.palettes/cut_diorite_brick_stairs.json -586e3dd71cab20d8163097dfb6a74e069958d35d data/create/advancements/recipes/create.palettes/cut_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json -0cc127dc6859b1b289344a083cb10313ba4f48f7 data/create/advancements/recipes/create.palettes/cut_diorite_brick_wall.json -7574be2a077307389027e2e48ca18090511be1a7 data/create/advancements/recipes/create.palettes/cut_diorite_brick_wall_from_stone_types_diorite_stonecutting.json -837fd66c341b9bb1b39ae959ec9b93962d3d7678 data/create/advancements/recipes/create.palettes/cut_diorite_from_stone_types_diorite_stonecutting.json -d1f26286e4b1f86f80095e68749c49c09a0524c2 data/create/advancements/recipes/create.palettes/cut_diorite_slab.json -36a47132e7345646c38d196e2484ba85aeef1179 data/create/advancements/recipes/create.palettes/cut_diorite_slab_from_stone_types_diorite_stonecutting.json -4fd0d42f5b12b156e098addd0f37658fd2b6d173 data/create/advancements/recipes/create.palettes/cut_diorite_slab_recycling.json -9789c93d92a97cd220f979fea4760d6a4be54c16 data/create/advancements/recipes/create.palettes/cut_diorite_stairs.json -2aab681d1c5f0a0bac70386e7a9afa82dc36d834 data/create/advancements/recipes/create.palettes/cut_diorite_stairs_from_stone_types_diorite_stonecutting.json -d716f0061b6b8b99ba35db3a6196042af10b6c6d data/create/advancements/recipes/create.palettes/cut_diorite_wall.json -b1e18dafd815604c7b5220787fd7916941f1d7ba data/create/advancements/recipes/create.palettes/cut_diorite_wall_from_stone_types_diorite_stonecutting.json -b9030bc3e7373dba83518fefa792153065d971be data/create/advancements/recipes/create.palettes/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json -b7714fb2dca84382f0f76419f287f52db41404dc data/create/advancements/recipes/create.palettes/cut_dripstone_brick_slab.json -8e500f1a62569bb233a8beac53b137b48c472253 data/create/advancements/recipes/create.palettes/cut_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json -d4aaf6aa370bef0aee964ad95af516a0dde884ab data/create/advancements/recipes/create.palettes/cut_dripstone_brick_slab_recycling.json -3e5e6249ab04fbf33d311d7087c560fe326f30c3 data/create/advancements/recipes/create.palettes/cut_dripstone_brick_stairs.json -61e3602da6c7718fc45d178202f1bbadfb3918e1 data/create/advancements/recipes/create.palettes/cut_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json -830680c94855a6fa03c988bc3ddd2d65a31a8f97 data/create/advancements/recipes/create.palettes/cut_dripstone_brick_wall.json -596687e309271cc33f744f812e9aea2e118b247f data/create/advancements/recipes/create.palettes/cut_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json -f739f4fe8184f9dbcc42053f8176c2ef4c88db72 data/create/advancements/recipes/create.palettes/cut_dripstone_from_stone_types_dripstone_stonecutting.json -3e3dd804cc959c860a92f616a9a7a5a08587a1a8 data/create/advancements/recipes/create.palettes/cut_dripstone_slab.json -c984c6a4e149083c493691434adf88bbd7095757 data/create/advancements/recipes/create.palettes/cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json -d410bf3b921f22e5772ce45b19780ec185904811 data/create/advancements/recipes/create.palettes/cut_dripstone_slab_recycling.json -dafdb3144b410324ecc38eca7c4885a7618a695e data/create/advancements/recipes/create.palettes/cut_dripstone_stairs.json -1eab1b587bfcacc476704a6f8b4f9ee64961e4c3 data/create/advancements/recipes/create.palettes/cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json -f4ce6ceb6c841ce445fbba924806fc13fcf0705b data/create/advancements/recipes/create.palettes/cut_dripstone_wall.json -b96c2f3cf9709838a972d6aa21c941e05639b8da data/create/advancements/recipes/create.palettes/cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json -96650d4d0921386d9613e99f4baa2f042c0a5b42 data/create/advancements/recipes/create.palettes/cut_granite_bricks_from_stone_types_granite_stonecutting.json -c377471c8e7c0653f869899b927994ad9d412644 data/create/advancements/recipes/create.palettes/cut_granite_brick_slab.json -da218c04867a52da9b6334055b01d71b4bdf651a data/create/advancements/recipes/create.palettes/cut_granite_brick_slab_from_stone_types_granite_stonecutting.json -0461e4077f6f3d686a517d43ac6c9f06c5405ea2 data/create/advancements/recipes/create.palettes/cut_granite_brick_slab_recycling.json -8a1d57f0847f0e55c79673d65a7f1e701777ff59 data/create/advancements/recipes/create.palettes/cut_granite_brick_stairs.json -fd520491bbcd4575912079e1622e1d7c89c131db data/create/advancements/recipes/create.palettes/cut_granite_brick_stairs_from_stone_types_granite_stonecutting.json -a40b37b199babeea632276bf5f1310d6b4d8829e data/create/advancements/recipes/create.palettes/cut_granite_brick_wall.json -d068647afab93764854e14a94e5ea1fd6dfb3484 data/create/advancements/recipes/create.palettes/cut_granite_brick_wall_from_stone_types_granite_stonecutting.json -31748f7ec56093e52d05473f535f2a240e47c830 data/create/advancements/recipes/create.palettes/cut_granite_from_stone_types_granite_stonecutting.json -31226217d85432d4dd7179a055161be3bf16edcb data/create/advancements/recipes/create.palettes/cut_granite_slab.json -11f148ffff12d511b53e3d3abe26c5002585a67c data/create/advancements/recipes/create.palettes/cut_granite_slab_from_stone_types_granite_stonecutting.json -f2ee1a39c5bcd2b37e387be4e20fdf11c5d78f4c data/create/advancements/recipes/create.palettes/cut_granite_slab_recycling.json -89686a4eb4d188aef0517d2283ee19a5b0a29f0a data/create/advancements/recipes/create.palettes/cut_granite_stairs.json -180e5839e302870819658ad83e3440f726773072 data/create/advancements/recipes/create.palettes/cut_granite_stairs_from_stone_types_granite_stonecutting.json -6b614a82011720d62151174816c199a594dff58b data/create/advancements/recipes/create.palettes/cut_granite_wall.json -5158ed942423382e388e4fe3a2c89fb8cbe796da data/create/advancements/recipes/create.palettes/cut_granite_wall_from_stone_types_granite_stonecutting.json -79ba7f9095e9c6fbafc2301b5f14853648be7499 data/create/advancements/recipes/create.palettes/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json -b784dddc5fd797ef6433ad81d8a9e3e4e3d9e169 data/create/advancements/recipes/create.palettes/cut_limestone_brick_slab.json -c08f26b595f3698b821442628a76ced351ba22ab data/create/advancements/recipes/create.palettes/cut_limestone_brick_slab_from_stone_types_limestone_stonecutting.json -cc9fabd6eff3764e4eacfcdccd0c52d63ca98ed6 data/create/advancements/recipes/create.palettes/cut_limestone_brick_slab_recycling.json -760079b842724c503af85f3f886e6357719a4949 data/create/advancements/recipes/create.palettes/cut_limestone_brick_stairs.json -d96ea6795a98441103f88192212fc5c58c1f09ef data/create/advancements/recipes/create.palettes/cut_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json -e1a3f4d70fc3d0ac9729dad3bd48448684a4ba37 data/create/advancements/recipes/create.palettes/cut_limestone_brick_wall.json -3c4e65f2065dc189aa0a05ac5ccce18f00b47222 data/create/advancements/recipes/create.palettes/cut_limestone_brick_wall_from_stone_types_limestone_stonecutting.json -344965b0887d70bfbf5bd0d3d20e39caf7feebb0 data/create/advancements/recipes/create.palettes/cut_limestone_from_stone_types_limestone_stonecutting.json -a96a733b4764b0a803ddab9cf55e846b3329a6fd data/create/advancements/recipes/create.palettes/cut_limestone_slab.json -0613e2241b57cd8891b212d6600040b63cc99920 data/create/advancements/recipes/create.palettes/cut_limestone_slab_from_stone_types_limestone_stonecutting.json -9ca3c0747875febf44ee8d66e06679b29af35a8d data/create/advancements/recipes/create.palettes/cut_limestone_slab_recycling.json -b823847bd61bf4d7f4f1628df8ffa75228e4bd1f data/create/advancements/recipes/create.palettes/cut_limestone_stairs.json -d5197bb60805ebe14bad712ce3c91d80505493dc data/create/advancements/recipes/create.palettes/cut_limestone_stairs_from_stone_types_limestone_stonecutting.json -2d5da1dc9892e8063274859870b360d3c923de2a data/create/advancements/recipes/create.palettes/cut_limestone_wall.json -b65bfead9674a9bde10343ac58cc26ae8f297d70 data/create/advancements/recipes/create.palettes/cut_limestone_wall_from_stone_types_limestone_stonecutting.json -a5a6e408e70a40723aa7eb2209229dd31e3d0204 data/create/advancements/recipes/create.palettes/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json -38c6bb5fa61edb3109a93c51043a050bf1fcffa2 data/create/advancements/recipes/create.palettes/cut_ochrum_brick_slab.json -90bdf413be0f6292ceccf0670fdca411f6f6971c data/create/advancements/recipes/create.palettes/cut_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json -97cdc8d1896869a16d33f76e5a7db20fee94b40e data/create/advancements/recipes/create.palettes/cut_ochrum_brick_slab_recycling.json -367ab7ccfef088011bfdc3d8d9e343120d657068 data/create/advancements/recipes/create.palettes/cut_ochrum_brick_stairs.json -3e35d96f31fa946ae1d85d458ca4edc3a7711668 data/create/advancements/recipes/create.palettes/cut_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json -df602423bb9c3bede26856f0b11f2da025af688d data/create/advancements/recipes/create.palettes/cut_ochrum_brick_wall.json -bb6dc3849fc45c8819ceae2833a979315ceb28f6 data/create/advancements/recipes/create.palettes/cut_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json -30fcf27da458a97f62fd9736ae1d7f257c1285c1 data/create/advancements/recipes/create.palettes/cut_ochrum_from_stone_types_ochrum_stonecutting.json -2b88c9eeb81ceaa648d6af36b076af465be25a1d data/create/advancements/recipes/create.palettes/cut_ochrum_slab.json -bf46068cb39da19fad5d1dac202980106f4ef8d9 data/create/advancements/recipes/create.palettes/cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json -e05482fd195f1da78e56a7e22099b370853e3c66 data/create/advancements/recipes/create.palettes/cut_ochrum_slab_recycling.json -1571dc2c5f8756e8c9abbb880883c2a7cc66b7e4 data/create/advancements/recipes/create.palettes/cut_ochrum_stairs.json -5035972081ce71fb47d7fda3710952d69d47a011 data/create/advancements/recipes/create.palettes/cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json -36fd28d75f1daaadc9db8539214cab39a8b43100 data/create/advancements/recipes/create.palettes/cut_ochrum_wall.json -161303d1e900c82fd30525ed8b4da0da520086f8 data/create/advancements/recipes/create.palettes/cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json -ed9ee091c10e110dd3ab679bf9d4ea61e0b44656 data/create/advancements/recipes/create.palettes/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json -98d5b30230229e2d60c45aa95e816c26c0e8ba1f data/create/advancements/recipes/create.palettes/cut_scorchia_brick_slab.json -43b71c34677ec02217260ae11d91fc8b12aee135 data/create/advancements/recipes/create.palettes/cut_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json -516c57259e6f6cc4c45571cc3eff1aa46018d294 data/create/advancements/recipes/create.palettes/cut_scorchia_brick_slab_recycling.json -233bf60edd3c574bc634423d1fd04edf7548f1dd data/create/advancements/recipes/create.palettes/cut_scorchia_brick_stairs.json -2dbc08e67fb633370dc07000d00c40a0aaaa4226 data/create/advancements/recipes/create.palettes/cut_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json -1932fb5747a127c8f51b72c5f924973888ed2088 data/create/advancements/recipes/create.palettes/cut_scorchia_brick_wall.json -7feb499670488e0780421351bbc869c898e7ef16 data/create/advancements/recipes/create.palettes/cut_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json -ad397fdf5670bf920395092943dc6bdf55f10f80 data/create/advancements/recipes/create.palettes/cut_scorchia_from_stone_types_scorchia_stonecutting.json -bd24111dec3fa0d12af98933bc4a752e78df19ac data/create/advancements/recipes/create.palettes/cut_scorchia_slab.json -86ef51b9eb6876c6cb25e6fde5311b9e1221a4e2 data/create/advancements/recipes/create.palettes/cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json -cb643c4dcc020e3e3b9fc7a22aebd2c8acf5d0ce data/create/advancements/recipes/create.palettes/cut_scorchia_slab_recycling.json -eda42cf974320d1dbeb369c3429fb8d4ba3dc93f data/create/advancements/recipes/create.palettes/cut_scorchia_stairs.json -7d7e87c02f9790b13cb3b2aa2ebdcbb3a09ef283 data/create/advancements/recipes/create.palettes/cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json -989df5b9969d6f0c30a5551e34092e1bb3e02a72 data/create/advancements/recipes/create.palettes/cut_scorchia_wall.json -60ad492ec09218adf32b0ccb5c634aeaa7acab4e data/create/advancements/recipes/create.palettes/cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json -9c4a52735c4ea9a609a091ebf8e42dfb76d7f703 data/create/advancements/recipes/create.palettes/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json -d4d22ab2ca7132016be29000bfe9a901f5f1f75a data/create/advancements/recipes/create.palettes/cut_scoria_brick_slab.json -f6b957a9b6fc7effe8237607f4ce05fd63302d86 data/create/advancements/recipes/create.palettes/cut_scoria_brick_slab_from_stone_types_scoria_stonecutting.json -6cfa3570b0308c2757fb872d7eeedb999deb0fa6 data/create/advancements/recipes/create.palettes/cut_scoria_brick_slab_recycling.json -e71f945ef28a9cf4f08b11207588225b5667a578 data/create/advancements/recipes/create.palettes/cut_scoria_brick_stairs.json -75f656063f07862c7dc2a521b532bd9506dfabaa data/create/advancements/recipes/create.palettes/cut_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json -d7fb1c9baabab142b5e2e5a782a860a10e957082 data/create/advancements/recipes/create.palettes/cut_scoria_brick_wall.json -58a7308b42028d816d518fee36523d81889d5a08 data/create/advancements/recipes/create.palettes/cut_scoria_brick_wall_from_stone_types_scoria_stonecutting.json -04e9276e96d869dfaf337e437af483620716cab2 data/create/advancements/recipes/create.palettes/cut_scoria_from_stone_types_scoria_stonecutting.json -98b2440c3c364c10a362a7a9800e2eb25117a984 data/create/advancements/recipes/create.palettes/cut_scoria_slab.json -e4bb42a4e62897c7e2c56c7e0a6ae9c0567c5973 data/create/advancements/recipes/create.palettes/cut_scoria_slab_from_stone_types_scoria_stonecutting.json -5cf1b7fb1d30dd72b569767594c35d91292c987e data/create/advancements/recipes/create.palettes/cut_scoria_slab_recycling.json -b4f846b58c8fb233b4dc71c3c6cb7bc66dda4409 data/create/advancements/recipes/create.palettes/cut_scoria_stairs.json -a4042343319182d29300b7f858d16de14fb557f7 data/create/advancements/recipes/create.palettes/cut_scoria_stairs_from_stone_types_scoria_stonecutting.json -a8e4ef868cbacecf0e46cb64cadcfdc743745297 data/create/advancements/recipes/create.palettes/cut_scoria_wall.json -38c849899f158855f4fb791aaa74721649582293 data/create/advancements/recipes/create.palettes/cut_scoria_wall_from_stone_types_scoria_stonecutting.json -eb2491491a16dd5cb60c09a67b77e4481e3f270c data/create/advancements/recipes/create.palettes/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json -5aa81455a0d9b811d14c5f53247ec27f4cde08f2 data/create/advancements/recipes/create.palettes/cut_tuff_brick_slab.json -75c8d96609b9ef1fee812be5363825e8a54f5dda data/create/advancements/recipes/create.palettes/cut_tuff_brick_slab_from_stone_types_tuff_stonecutting.json -173afee112bcdd2a7b37f2ca722da325159c111f data/create/advancements/recipes/create.palettes/cut_tuff_brick_slab_recycling.json -cead30768e5ec30b16d0b7a79b03b84ab3dd7579 data/create/advancements/recipes/create.palettes/cut_tuff_brick_stairs.json -b960f114a094f7799fb26eb1d813e0ac53a5c725 data/create/advancements/recipes/create.palettes/cut_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json -8844c9ad810b7f6cb5394766aada241264e9b4e1 data/create/advancements/recipes/create.palettes/cut_tuff_brick_wall.json -e4cc4b782fe7f513a28d0816233557a1e07398f4 data/create/advancements/recipes/create.palettes/cut_tuff_brick_wall_from_stone_types_tuff_stonecutting.json -e6f1ffe762eff05c0362816a95d663d51893c63d data/create/advancements/recipes/create.palettes/cut_tuff_from_stone_types_tuff_stonecutting.json -59d165efc116e9c8578df9ba670c3692b83d90c2 data/create/advancements/recipes/create.palettes/cut_tuff_slab.json -7f8734665ee1ea740b23a93253adddda373b768c data/create/advancements/recipes/create.palettes/cut_tuff_slab_from_stone_types_tuff_stonecutting.json -386ebb544c83c98a9081fd2a2c7f21869138cdce data/create/advancements/recipes/create.palettes/cut_tuff_slab_recycling.json -15ea987d28b8d39598a0744db6bff6885d9a06a0 data/create/advancements/recipes/create.palettes/cut_tuff_stairs.json -2ecd34dbf08d7b0fb076d4541951a1af8503988a data/create/advancements/recipes/create.palettes/cut_tuff_stairs_from_stone_types_tuff_stonecutting.json -41fa7083f2968ec691e614b6aadfc5580f71a9f0 data/create/advancements/recipes/create.palettes/cut_tuff_wall.json -99ffe2f2f0f2fe57ce0a3a8790b7403070dabe0c data/create/advancements/recipes/create.palettes/cut_tuff_wall_from_stone_types_tuff_stonecutting.json -5efb0e802537382669d543be8581f14af87f2243 data/create/advancements/recipes/create.palettes/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json -08b84146aec0df756b892b966b8ff584941e3822 data/create/advancements/recipes/create.palettes/cut_veridium_brick_slab.json -a15d11707c379ec89f827469ab66185094b83d57 data/create/advancements/recipes/create.palettes/cut_veridium_brick_slab_from_stone_types_veridium_stonecutting.json -7b0345456315824f48051c441a1af8234185dbb7 data/create/advancements/recipes/create.palettes/cut_veridium_brick_slab_recycling.json -63c8064573effe77eee9f19651a93c6703a8f1a5 data/create/advancements/recipes/create.palettes/cut_veridium_brick_stairs.json -c9f04e36272ec15408701cf5f087cfaf5bc86df3 data/create/advancements/recipes/create.palettes/cut_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json -cc42ae471f9e2206ada28e6a6556bd823fe96297 data/create/advancements/recipes/create.palettes/cut_veridium_brick_wall.json -cb27e519f7699a5e406acc38122f78c9bc4ef469 data/create/advancements/recipes/create.palettes/cut_veridium_brick_wall_from_stone_types_veridium_stonecutting.json -30abd94643a7da5e9121333dcfbae0bd77f3426c data/create/advancements/recipes/create.palettes/cut_veridium_from_stone_types_veridium_stonecutting.json -222c2bf6e94ca73bcab991f6a7dc9704d67371a2 data/create/advancements/recipes/create.palettes/cut_veridium_slab.json -4e6a5cf062e512e19e7f48dea4e2284459a9d4fa data/create/advancements/recipes/create.palettes/cut_veridium_slab_from_stone_types_veridium_stonecutting.json -9d3ffa5ae608511debd28b9e58bd81f8be00ac5f data/create/advancements/recipes/create.palettes/cut_veridium_slab_recycling.json -8d044d8d6ef860dfb86625985a2737c75c1e4467 data/create/advancements/recipes/create.palettes/cut_veridium_stairs.json -7ba505ccf811a1c5b006b8915a97b644a20065f2 data/create/advancements/recipes/create.palettes/cut_veridium_stairs_from_stone_types_veridium_stonecutting.json -0cb34fe57e0511442d8238b5366392ca6dee5042 data/create/advancements/recipes/create.palettes/cut_veridium_wall.json -fe24697ae691e34e57e67e76e890167a5b0c9842 data/create/advancements/recipes/create.palettes/cut_veridium_wall_from_stone_types_veridium_stonecutting.json -c9a36346d9d739842bddddf46da7cba53be5ca94 data/create/advancements/recipes/create.palettes/dark_oak_window.json -86f9ec8ac357c859536478d5b4e5a47295b1a3ba data/create/advancements/recipes/create.palettes/dark_oak_window_pane.json -c594333560ef54e1cd7fe01830137c4032e9ed1a data/create/advancements/recipes/create.palettes/deepslate_pillar_from_stone_types_deepslate_stonecutting.json -4922ea5e65bd3b4b094a0ebda17f7d57baf98d13 data/create/advancements/recipes/create.palettes/diorite_pillar_from_stone_types_diorite_stonecutting.json -5bdef473b0abedf9419e8b90508f3ab582257044 data/create/advancements/recipes/create.palettes/dripstone_pillar_from_stone_types_dripstone_stonecutting.json -651ca0fa268d08fb50cd14a0a978c10fe1c58ad7 data/create/advancements/recipes/create.palettes/exposed_copper_shingle_slab.json -ae6f36f689789a7482919cc5aba073befc3c6911 data/create/advancements/recipes/create.palettes/exposed_copper_shingle_slab_from_exposed_copper_shingles_stonecutting.json -d3c94982ffcbed05f030fc337357349e1988b160 data/create/advancements/recipes/create.palettes/exposed_copper_shingle_stairs.json -516f1753e0ed14361dbc170b09f2dc0e6a1d6d9b data/create/advancements/recipes/create.palettes/exposed_copper_shingle_stairs_from_exposed_copper_shingles_stonecutting.json -684268832d7b9ac77218df435711cabe2296d342 data/create/advancements/recipes/create.palettes/exposed_copper_tile_slab.json -1f8b7bd2e1b4c9d6188e33c1f9cdc9b2c52e1f4d data/create/advancements/recipes/create.palettes/exposed_copper_tile_slab_from_exposed_copper_tiles_stonecutting.json -24da087a9a8a1693c8b09ab3657063d1aa7757db data/create/advancements/recipes/create.palettes/exposed_copper_tile_stairs.json -affdc8d4e2e6023d829a6fa9274296bbabc205f7 data/create/advancements/recipes/create.palettes/exposed_copper_tile_stairs_from_exposed_copper_tiles_stonecutting.json -a4c411397c83da08aff4fdf1e6a152e6920ce041 data/create/advancements/recipes/create.palettes/framed_glass_from_glass_colorless_stonecutting.json -91d78a68f15e58f3bfff27c2b95a2afc541ebc09 data/create/advancements/recipes/create.palettes/framed_glass_pane.json -30bef4f7198cd8c3be730dd535bdee5f4531a333 data/create/advancements/recipes/create.palettes/granite_pillar_from_stone_types_granite_stonecutting.json -ffd0d7c16c76f60ce23f719110b0f222821cc141 data/create/advancements/recipes/create.palettes/horizontal_framed_glass_from_glass_colorless_stonecutting.json -f468fd03b657eec91e744537078e8fe9856b7678 data/create/advancements/recipes/create.palettes/horizontal_framed_glass_pane.json -bff27fa488addf721ee4fd3dac0fb19ffa6a2d18 data/create/advancements/recipes/create.palettes/industrial_iron_block_from_ingots_iron_stonecutting.json -25c2ade22e31fd8096714aee7cfd6e7001c1cc60 data/create/advancements/recipes/create.palettes/jungle_window.json -a6ebf3d38ab309f40d64f84d76f491d0e1b0cb80 data/create/advancements/recipes/create.palettes/jungle_window_pane.json -a39f3e144e63fceeb33a234b3b286812f6826c19 data/create/advancements/recipes/create.palettes/layered_andesite_from_stone_types_andesite_stonecutting.json -6daaed4b4616b066c396eb9739807c336b454516 data/create/advancements/recipes/create.palettes/layered_asurine_from_stone_types_asurine_stonecutting.json -78a11a6f884ad59b2a5ca4f0e505ef98d065d220 data/create/advancements/recipes/create.palettes/layered_calcite_from_stone_types_calcite_stonecutting.json -66f15a7e69b0144e0c80132441eed4e248dcae70 data/create/advancements/recipes/create.palettes/layered_crimsite_from_stone_types_crimsite_stonecutting.json -624331627975c134a04ce4f5dd39bd89772b2d51 data/create/advancements/recipes/create.palettes/layered_deepslate_from_stone_types_deepslate_stonecutting.json -0a275dade16abd876fb89765f93afb24bf02713d data/create/advancements/recipes/create.palettes/layered_diorite_from_stone_types_diorite_stonecutting.json -ab06ad6dd8ac2f426adef80415211cd08939526c data/create/advancements/recipes/create.palettes/layered_dripstone_from_stone_types_dripstone_stonecutting.json -2dbc9bfe3589ce284dfdf57d787e2ef8c2a40ad2 data/create/advancements/recipes/create.palettes/layered_granite_from_stone_types_granite_stonecutting.json -68ee05e89aa4f27e0c2f94b1246b4cb495aecc07 data/create/advancements/recipes/create.palettes/layered_limestone_from_stone_types_limestone_stonecutting.json -75a7a6e313d32319c32b3ce0df21e8cc6774f402 data/create/advancements/recipes/create.palettes/layered_ochrum_from_stone_types_ochrum_stonecutting.json -4f0c829edd12729014dcb63650720aaf917eb439 data/create/advancements/recipes/create.palettes/layered_scorchia_from_stone_types_scorchia_stonecutting.json -ed3743e70c493b07c3101c0dc92215526c387db0 data/create/advancements/recipes/create.palettes/layered_scoria_from_stone_types_scoria_stonecutting.json -e5feef288669aa930ae12cf9a783d620af7d91b4 data/create/advancements/recipes/create.palettes/layered_tuff_from_stone_types_tuff_stonecutting.json -dfb4f2e119b8017d5db975fb541713048703e2c6 data/create/advancements/recipes/create.palettes/layered_veridium_from_stone_types_veridium_stonecutting.json -395ac94e392ba5e84588593808411b58439fa00b data/create/advancements/recipes/create.palettes/limestone_from_stone_types_limestone_stonecutting.json -de18b7fbe72ebab8664dc8bad74b11c8f963d201 data/create/advancements/recipes/create.palettes/limestone_pillar_from_stone_types_limestone_stonecutting.json -297cef748e21b0615fba6d89e917ca95744eb72c data/create/advancements/recipes/create.palettes/mangrove_window.json -caae52c615f4f73e6197a0f64530d65e032ee86c data/create/advancements/recipes/create.palettes/mangrove_window_pane.json -72a0bf990de9157649f4a35d107691336ac251cd data/create/advancements/recipes/create.palettes/oak_window.json -0df92ddbd45927fffcd6e7dd64e23a9c1a480987 data/create/advancements/recipes/create.palettes/oak_window_pane.json -3af97ef889363105d623983041bc542e42262a81 data/create/advancements/recipes/create.palettes/ochrum_from_stone_types_ochrum_stonecutting.json -d1622650c35ab63ad763bcae9daa2faa0475a6c1 data/create/advancements/recipes/create.palettes/ochrum_pillar_from_stone_types_ochrum_stonecutting.json -cee0b2d010e5aac246498d3f2e693a229b484de9 data/create/advancements/recipes/create.palettes/ornate_iron_window.json -ac65691f3ee1cca8063653605f507de264b90755 data/create/advancements/recipes/create.palettes/ornate_iron_window_pane.json -9f45be55c0425b077bc0fad3dd8cc7f90092fdd3 data/create/advancements/recipes/create.palettes/oxidized_copper_shingle_slab.json -c9ec3f974bda0596b342636024f2d147fdd33c6d data/create/advancements/recipes/create.palettes/oxidized_copper_shingle_slab_from_oxidized_copper_shingles_stonecutting.json -2827411231479697420164c8994ec7da5083b618 data/create/advancements/recipes/create.palettes/oxidized_copper_shingle_stairs.json -642350a5329112eee917feb8374f9116f0bc2733 data/create/advancements/recipes/create.palettes/oxidized_copper_shingle_stairs_from_oxidized_copper_shingles_stonecutting.json -44e85d572315db5643b88ac1ada7be843f94d20f data/create/advancements/recipes/create.palettes/oxidized_copper_tile_slab.json -38db970e9383ef2840e59e2d55174b0ef8c452ea data/create/advancements/recipes/create.palettes/oxidized_copper_tile_slab_from_oxidized_copper_tiles_stonecutting.json -323894a12012e29ba987dedff8c3b5ec7b462063 data/create/advancements/recipes/create.palettes/oxidized_copper_tile_stairs.json -f8d98349f5d7f485a235989e677429948e6fde01 data/create/advancements/recipes/create.palettes/oxidized_copper_tile_stairs_from_oxidized_copper_tiles_stonecutting.json -87e2b764ee25608a5e616dd67d457c4683b5f7f0 data/create/advancements/recipes/create.palettes/polished_cut_andesite_from_stone_types_andesite_stonecutting.json -56044e65f870706a64e5db0d31b6bc233b4ca771 data/create/advancements/recipes/create.palettes/polished_cut_andesite_slab.json -bd8759817186f4e2ab0626092cf5b3b9ab69dc6e data/create/advancements/recipes/create.palettes/polished_cut_andesite_slab_from_stone_types_andesite_stonecutting.json -0402b4622b45632d9611cff3be31136592db6d9e data/create/advancements/recipes/create.palettes/polished_cut_andesite_slab_recycling.json -c81cfec067185165a1291010be997e7c0767679f data/create/advancements/recipes/create.palettes/polished_cut_andesite_stairs.json -014828f212838ee0112c93dba1e59e1a3d2951d6 data/create/advancements/recipes/create.palettes/polished_cut_andesite_stairs_from_stone_types_andesite_stonecutting.json -78eb944a0ba1009c083391578210a9dbbbeb1a51 data/create/advancements/recipes/create.palettes/polished_cut_andesite_wall.json -a99cfabefc305c676adb52688e5465ff1438104b data/create/advancements/recipes/create.palettes/polished_cut_andesite_wall_from_stone_types_andesite_stonecutting.json -ce453fa5a19ba6db69f33615bdf6dffc1e061fb1 data/create/advancements/recipes/create.palettes/polished_cut_asurine_from_stone_types_asurine_stonecutting.json -5c3a4cbe313a89bb9298d6adc242ae5a5505299e data/create/advancements/recipes/create.palettes/polished_cut_asurine_slab.json -9ba88be9d02731b267cebe0cf77cab7b486c80e4 data/create/advancements/recipes/create.palettes/polished_cut_asurine_slab_from_stone_types_asurine_stonecutting.json -d9e0db07102ecc634d72fde55d5841b4fec09b3a data/create/advancements/recipes/create.palettes/polished_cut_asurine_slab_recycling.json -78b220c9f84be02e9a21552e60c67a778863935c data/create/advancements/recipes/create.palettes/polished_cut_asurine_stairs.json -14cae4987773d4126a372b2e0431fafb0112b48d data/create/advancements/recipes/create.palettes/polished_cut_asurine_stairs_from_stone_types_asurine_stonecutting.json -a641b25a792497b114867323612ddb4daf112390 data/create/advancements/recipes/create.palettes/polished_cut_asurine_wall.json -e45bf9d53e7f30bd4d2b931b640c95e173d4ccd7 data/create/advancements/recipes/create.palettes/polished_cut_asurine_wall_from_stone_types_asurine_stonecutting.json -e1be2af7938a206959a9faa8cc822446f256f747 data/create/advancements/recipes/create.palettes/polished_cut_calcite_from_stone_types_calcite_stonecutting.json -0bd8ba44a6008a2429b3f90c44359fd1e1a66227 data/create/advancements/recipes/create.palettes/polished_cut_calcite_slab.json -fbbc756afe198573208fa5241042565d5c48ffad data/create/advancements/recipes/create.palettes/polished_cut_calcite_slab_from_stone_types_calcite_stonecutting.json -b52e69396690a4fbd306cf8c280f0780542418cd data/create/advancements/recipes/create.palettes/polished_cut_calcite_slab_recycling.json -0f85cf66fb414481c848eaaceae4cefa0c7f628f data/create/advancements/recipes/create.palettes/polished_cut_calcite_stairs.json -14ad9e88b4671b981441f0a02e8ad3f65b065944 data/create/advancements/recipes/create.palettes/polished_cut_calcite_stairs_from_stone_types_calcite_stonecutting.json -a64e4d43cbd115b89245c67907e474215ca64e97 data/create/advancements/recipes/create.palettes/polished_cut_calcite_wall.json -974cd9faa99230dcbf93d31a80611de8c01dabff data/create/advancements/recipes/create.palettes/polished_cut_calcite_wall_from_stone_types_calcite_stonecutting.json -733b5b8c289840efc4d060f2d202d4b90363f675 data/create/advancements/recipes/create.palettes/polished_cut_crimsite_from_stone_types_crimsite_stonecutting.json -1d78f6c45f7c5675e404c40d0dd6abbcb4cda01b data/create/advancements/recipes/create.palettes/polished_cut_crimsite_slab.json -d5356a34686a0c6f19b47816a8f400512316537f data/create/advancements/recipes/create.palettes/polished_cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json -743fbd4306d368cb4e4b0d22c74c80e74f2cbd91 data/create/advancements/recipes/create.palettes/polished_cut_crimsite_slab_recycling.json -39521721a019e20070320c799c1581d16875bab0 data/create/advancements/recipes/create.palettes/polished_cut_crimsite_stairs.json -750d4d09dd1e2cda1c34a73c449b07b9c2ea4296 data/create/advancements/recipes/create.palettes/polished_cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json -eef80b2717b9092fc958407cddaa4cc89f7cc459 data/create/advancements/recipes/create.palettes/polished_cut_crimsite_wall.json -d496be98d0943bf49a02c2682d42727362d94f5e data/create/advancements/recipes/create.palettes/polished_cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json -fc927719af1bd26d3e8cbfaacf4d05afb0ac457f data/create/advancements/recipes/create.palettes/polished_cut_deepslate_from_stone_types_deepslate_stonecutting.json -2e60738cd3dc77fb7dedf3811d6d09ab27230563 data/create/advancements/recipes/create.palettes/polished_cut_deepslate_slab.json -7e2bdfe97262a51361eb5b8c35ae8e255593f310 data/create/advancements/recipes/create.palettes/polished_cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json -42f31b2ec87726ec51a5b849edaf1a825012a73f data/create/advancements/recipes/create.palettes/polished_cut_deepslate_slab_recycling.json -17030bdcd06e3f52a604aa6c293a11e46dbb0a47 data/create/advancements/recipes/create.palettes/polished_cut_deepslate_stairs.json -9dfc4fd5f88b60c41b4ab0f5f3677aaab5b28d6a data/create/advancements/recipes/create.palettes/polished_cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json -d08dbd0babed893966486a4545a7a24f6f0f560b data/create/advancements/recipes/create.palettes/polished_cut_deepslate_wall.json -2d311b911fbfdd26c080dbbdcae8cc8a3d2520f1 data/create/advancements/recipes/create.palettes/polished_cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json -de71a69f54bd24d9fc882f4317c8cff7dcd3da48 data/create/advancements/recipes/create.palettes/polished_cut_diorite_from_stone_types_diorite_stonecutting.json -d8f9f4daa2bff3b7aba51d27834f4b9c8db7eec8 data/create/advancements/recipes/create.palettes/polished_cut_diorite_slab.json -9a4aea18c2237a714178af2baff90bd958b3d924 data/create/advancements/recipes/create.palettes/polished_cut_diorite_slab_from_stone_types_diorite_stonecutting.json -9e72e81c93cd837fd43a1d77eae8116863bfef17 data/create/advancements/recipes/create.palettes/polished_cut_diorite_slab_recycling.json -90cd3e07b9802619709525a81a1c1fbd74705286 data/create/advancements/recipes/create.palettes/polished_cut_diorite_stairs.json -85b9d415fef40a8d3ab023c7a9e9117a15b75c94 data/create/advancements/recipes/create.palettes/polished_cut_diorite_stairs_from_stone_types_diorite_stonecutting.json -812a8c9375b2ed654d71748415a14c7b1b1609d0 data/create/advancements/recipes/create.palettes/polished_cut_diorite_wall.json -ca63c7f68fad077053b8b29139f4019bdef0e050 data/create/advancements/recipes/create.palettes/polished_cut_diorite_wall_from_stone_types_diorite_stonecutting.json -11371c271e03942cd49daeed6fa978509eb45e30 data/create/advancements/recipes/create.palettes/polished_cut_dripstone_from_stone_types_dripstone_stonecutting.json -cee2143d1ae757492011c281a94e24afe08874dd data/create/advancements/recipes/create.palettes/polished_cut_dripstone_slab.json -2ddf70a17df85fb6a46ace6141788d2b0dd61980 data/create/advancements/recipes/create.palettes/polished_cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json -f7bae45ba3c91ff89a2e641d1277fc188872454b data/create/advancements/recipes/create.palettes/polished_cut_dripstone_slab_recycling.json -9171343ce754e96fc2cc24605e88026be7e20e02 data/create/advancements/recipes/create.palettes/polished_cut_dripstone_stairs.json -ecd8b7df5c98e854df3c1bf7fd128c3b51dc5fd3 data/create/advancements/recipes/create.palettes/polished_cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json -1635be562287e2187f6917e234dd5a8b98a94edc data/create/advancements/recipes/create.palettes/polished_cut_dripstone_wall.json -353d093250d70108453ab7f16c15dfd224515986 data/create/advancements/recipes/create.palettes/polished_cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json -42148f769d22b6228a37ca25aaa0b81851ffdef7 data/create/advancements/recipes/create.palettes/polished_cut_granite_from_stone_types_granite_stonecutting.json -bec1b27e1b40f88eba68afc83167ed381c2f9ce1 data/create/advancements/recipes/create.palettes/polished_cut_granite_slab.json -2b4c0748f62ecd67fc780c1e39587af095b7dda3 data/create/advancements/recipes/create.palettes/polished_cut_granite_slab_from_stone_types_granite_stonecutting.json -35b15a1c1a985a0527942f374cb7a65016f69a29 data/create/advancements/recipes/create.palettes/polished_cut_granite_slab_recycling.json -05cb927ea057ec082d49a060dd942b27f59316bd data/create/advancements/recipes/create.palettes/polished_cut_granite_stairs.json -747c521600debe796fd82a67bf1d2ee393ada20d data/create/advancements/recipes/create.palettes/polished_cut_granite_stairs_from_stone_types_granite_stonecutting.json -304d47863b4521021081090c6d42f0310b0058bc data/create/advancements/recipes/create.palettes/polished_cut_granite_wall.json -8e23bef4cdc74e74c1046918ef9fe1fd93f438b7 data/create/advancements/recipes/create.palettes/polished_cut_granite_wall_from_stone_types_granite_stonecutting.json -32925d1bb83f8039945530aa954c12e2319b7512 data/create/advancements/recipes/create.palettes/polished_cut_limestone_from_stone_types_limestone_stonecutting.json -bb1f57bf47974c9b64eebce016f0af6aa7199f64 data/create/advancements/recipes/create.palettes/polished_cut_limestone_slab.json -103aa558f05728c564480927b25ce32b15870435 data/create/advancements/recipes/create.palettes/polished_cut_limestone_slab_from_stone_types_limestone_stonecutting.json -f29077df1a3706614309f5317936b335102bfa06 data/create/advancements/recipes/create.palettes/polished_cut_limestone_slab_recycling.json -820f2c0a803767c325e7589f4643e88dfa160f9c data/create/advancements/recipes/create.palettes/polished_cut_limestone_stairs.json -f8346a8196fccb3790d444bff91be21bb1551559 data/create/advancements/recipes/create.palettes/polished_cut_limestone_stairs_from_stone_types_limestone_stonecutting.json -c22ea50eea88bac5ec22c884fbafa741e3feb8e6 data/create/advancements/recipes/create.palettes/polished_cut_limestone_wall.json -5ac9e432dd60a147a86d4a2462438ebe20eeaf26 data/create/advancements/recipes/create.palettes/polished_cut_limestone_wall_from_stone_types_limestone_stonecutting.json -74eb441ff391d48c2f3bd444d9d113475eed8454 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_from_stone_types_ochrum_stonecutting.json -eeb5f15290c193030dda3e67663cee8d821f56e1 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_slab.json -562f948ee3129177bb0decbf5e794e0da379df35 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json -844f9a89e6d1e961222be0c36a1a26ad686fd978 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_slab_recycling.json -771ac021228b5a2e9aa79844466383c363d5c429 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_stairs.json -4b10c2073ad9394ab77aaefbb5508d30d8b8dfe2 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json -322fdbbb7121cb6dac318ed19ac6cc47445c008d data/create/advancements/recipes/create.palettes/polished_cut_ochrum_wall.json -c725c9f6dbc16c6cc3938c30f9443c6187be5bf4 data/create/advancements/recipes/create.palettes/polished_cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json -d1f0ce4819a7edade4ab546f6cc5e29690b13b81 data/create/advancements/recipes/create.palettes/polished_cut_scorchia_from_stone_types_scorchia_stonecutting.json -9712d2d270bdba9869cf77b2336b166347128a9a data/create/advancements/recipes/create.palettes/polished_cut_scorchia_slab.json -dc5d46d905d0ee24b6271c369b2b13278691b00b data/create/advancements/recipes/create.palettes/polished_cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json -1193b4d04da1c64ba383345c807b0beec15f8aa8 data/create/advancements/recipes/create.palettes/polished_cut_scorchia_slab_recycling.json -2116f04d7857b5fa05c2dc295b4eed7535ea4b70 data/create/advancements/recipes/create.palettes/polished_cut_scorchia_stairs.json -4684fbf3187c171fd50ec5a4190251f5aa42f9f1 data/create/advancements/recipes/create.palettes/polished_cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json -cc9d5c26274d0a90185399eb6faa584623fa879d data/create/advancements/recipes/create.palettes/polished_cut_scorchia_wall.json -52dc08e1a1068e77b36964c0f561477a4d033984 data/create/advancements/recipes/create.palettes/polished_cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json -adac266360d879be47fd07c14ad0251c2751d2c6 data/create/advancements/recipes/create.palettes/polished_cut_scoria_from_stone_types_scoria_stonecutting.json -50b550dd3d2e48173c6124de445e9370590fe1f1 data/create/advancements/recipes/create.palettes/polished_cut_scoria_slab.json -2c781b6cacf4f128db1a4d9202a3c7e6d8ba31f6 data/create/advancements/recipes/create.palettes/polished_cut_scoria_slab_from_stone_types_scoria_stonecutting.json -10b1ab8a11f1ae49cd65142fef0ab80c09f95097 data/create/advancements/recipes/create.palettes/polished_cut_scoria_slab_recycling.json -36de862bd8cf39dcef4c1b2f98cf74868897ee3c data/create/advancements/recipes/create.palettes/polished_cut_scoria_stairs.json -1e2fd943098090c1dc572f6724f91befebe25835 data/create/advancements/recipes/create.palettes/polished_cut_scoria_stairs_from_stone_types_scoria_stonecutting.json -30d402883893aea3417e78f9dfdc9cb65728717e data/create/advancements/recipes/create.palettes/polished_cut_scoria_wall.json -357bbd5b5cfdd3b06fdf64b6717e03817394e6ee data/create/advancements/recipes/create.palettes/polished_cut_scoria_wall_from_stone_types_scoria_stonecutting.json -fd183ac1971f718a60a24951511650be0280b85d data/create/advancements/recipes/create.palettes/polished_cut_tuff_from_stone_types_tuff_stonecutting.json -58fa91dc84360c7806a14a840f41f9df41084065 data/create/advancements/recipes/create.palettes/polished_cut_tuff_slab.json -d810fea4c007b6efc1b5ba63c7b2ed0e2a1a9e64 data/create/advancements/recipes/create.palettes/polished_cut_tuff_slab_from_stone_types_tuff_stonecutting.json -61e78fc4390afc28cc4e6a9759f836fe85d2f928 data/create/advancements/recipes/create.palettes/polished_cut_tuff_slab_recycling.json -81b4c37bc0a9b4301079da4050b2084af05329d3 data/create/advancements/recipes/create.palettes/polished_cut_tuff_stairs.json -58ed35ba42820f59385c52e1ab3a701d231c1849 data/create/advancements/recipes/create.palettes/polished_cut_tuff_stairs_from_stone_types_tuff_stonecutting.json -8c50df95e49355504b9475bb97e288be7f9c0068 data/create/advancements/recipes/create.palettes/polished_cut_tuff_wall.json -65e48daaa45b15c2ac5049571bde967a5184e1bf data/create/advancements/recipes/create.palettes/polished_cut_tuff_wall_from_stone_types_tuff_stonecutting.json -b4a53b96d45e8b5c0ced15b988174e1fe5944639 data/create/advancements/recipes/create.palettes/polished_cut_veridium_from_stone_types_veridium_stonecutting.json -69a10ac4a77c3595350e4dcd5ea837fd96976ccf data/create/advancements/recipes/create.palettes/polished_cut_veridium_slab.json -894f5a897b85ea5407da3efe1dc06e183b6409ca data/create/advancements/recipes/create.palettes/polished_cut_veridium_slab_from_stone_types_veridium_stonecutting.json -d4cbeca358f3996000b5278fcd775336dab6378d data/create/advancements/recipes/create.palettes/polished_cut_veridium_slab_recycling.json -fb2ee402fe6fd24b2459f133eacdfed19601eef2 data/create/advancements/recipes/create.palettes/polished_cut_veridium_stairs.json -2a8fb44e7534ca0f39bae9cbeab5009bd5a84e07 data/create/advancements/recipes/create.palettes/polished_cut_veridium_stairs_from_stone_types_veridium_stonecutting.json -052281d742987d3456b91463e390f37726033d4b data/create/advancements/recipes/create.palettes/polished_cut_veridium_wall.json -e25273889fffad567fc3d5e6130b0cd7d935829d data/create/advancements/recipes/create.palettes/polished_cut_veridium_wall_from_stone_types_veridium_stonecutting.json -8bea81a106b37711be7e5432d1e6f285887d4646 data/create/advancements/recipes/create.palettes/rose_quartz_block_from_rose_quartz_stonecutting.json -7df54ae1e872e1d61d3158402c2ca12f64f7ffbd data/create/advancements/recipes/create.palettes/rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json -707ea60c2c14e97dd1ed32a193955e5b01cf1fb8 data/create/advancements/recipes/create.palettes/scorchia_from_stone_types_scorchia_stonecutting.json -1d72cd68a6265a9c4724f0aefd15bc7b4797f559 data/create/advancements/recipes/create.palettes/scorchia_pillar_from_stone_types_scorchia_stonecutting.json -94cfe47b892e05cdcee47694b7629968092b1a5b data/create/advancements/recipes/create.palettes/scoria_from_stone_types_scoria_stonecutting.json -0a365d58fbcbad21a77cbf1e20d98d3a8af6f418 data/create/advancements/recipes/create.palettes/scoria_pillar_from_stone_types_scoria_stonecutting.json -a7f5ff6824fb2f316616cd4e134797ad22d2ee66 data/create/advancements/recipes/create.palettes/small_andesite_bricks_from_stone_types_andesite_stonecutting.json -1789e279b6de73a98b295c4942a476bc3d38dd9a data/create/advancements/recipes/create.palettes/small_andesite_brick_slab.json -0d1d248f202f0deb40ba49e177df8586f12f37eb data/create/advancements/recipes/create.palettes/small_andesite_brick_slab_from_stone_types_andesite_stonecutting.json -bc20a7f4160b5bebfdda451b287f846f91182d5c data/create/advancements/recipes/create.palettes/small_andesite_brick_slab_recycling.json -c22d881802f106981fed1ca5cd38ee6862400fd2 data/create/advancements/recipes/create.palettes/small_andesite_brick_stairs.json -6540aa9c8d64d7819ae3f517f016dc018a2e0d12 data/create/advancements/recipes/create.palettes/small_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json -8c6d9e3a9511723db7df84c52ea789afec14d39b data/create/advancements/recipes/create.palettes/small_andesite_brick_wall.json -85456fc1a20cabbe3f5b242852681165ae564b65 data/create/advancements/recipes/create.palettes/small_andesite_brick_wall_from_stone_types_andesite_stonecutting.json -04b0c0fd65bdee5613cce2af3a70c896bcd05a25 data/create/advancements/recipes/create.palettes/small_asurine_bricks_from_stone_types_asurine_stonecutting.json -20d6b979945c97ad793a2ee7e76462ec8666a2c5 data/create/advancements/recipes/create.palettes/small_asurine_brick_slab.json -3d9fa7cf70db4d36ddc265107af9413cc53e1773 data/create/advancements/recipes/create.palettes/small_asurine_brick_slab_from_stone_types_asurine_stonecutting.json -db00b0de569c4e7123ec32594300b81d461e10d1 data/create/advancements/recipes/create.palettes/small_asurine_brick_slab_recycling.json -a9c5927c48d20925f6b48de68fd65dc07e63b9a0 data/create/advancements/recipes/create.palettes/small_asurine_brick_stairs.json -6f06768b6dacd285ebbca197ac3b8143d73ce4f2 data/create/advancements/recipes/create.palettes/small_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json -677b259ea798f8f23d08edd16c882463df2089d9 data/create/advancements/recipes/create.palettes/small_asurine_brick_wall.json -ddfb29ffebcb2f5af04537c585887c87429715dd data/create/advancements/recipes/create.palettes/small_asurine_brick_wall_from_stone_types_asurine_stonecutting.json -23fa022abb382a4f80e56af347bd1b4c28d3d720 data/create/advancements/recipes/create.palettes/small_calcite_bricks_from_stone_types_calcite_stonecutting.json -ff9e6190e79331b6e0162adbd3c66f1af1bcb7fd data/create/advancements/recipes/create.palettes/small_calcite_brick_slab.json -a1319037285be81db4254f67aaf2ab7fc7ec9127 data/create/advancements/recipes/create.palettes/small_calcite_brick_slab_from_stone_types_calcite_stonecutting.json -56e5164897ed62999c836462b32bd2dc12582ddf data/create/advancements/recipes/create.palettes/small_calcite_brick_slab_recycling.json -a7b394adf6157b304069ad946005530083df33bf data/create/advancements/recipes/create.palettes/small_calcite_brick_stairs.json -346f3dc1829a52266c4c900edfb886283715864c data/create/advancements/recipes/create.palettes/small_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json -532b2b55855cdde057d65cfd01ce0cf9ebea6f31 data/create/advancements/recipes/create.palettes/small_calcite_brick_wall.json -34f37aa07bb36c91d3024d5eda41104208f2080a data/create/advancements/recipes/create.palettes/small_calcite_brick_wall_from_stone_types_calcite_stonecutting.json -96b2b6ad28365170ce7f455fbcbca3224ac14933 data/create/advancements/recipes/create.palettes/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json -7a6b95cb5b8c810ba2d839f69895f389175ff408 data/create/advancements/recipes/create.palettes/small_crimsite_brick_slab.json -448bc0f89c2225645dd60f9f30c42a39e8bd53cb data/create/advancements/recipes/create.palettes/small_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json -4482ce2e29bb1521ce2460bbf0b207cf88a19c22 data/create/advancements/recipes/create.palettes/small_crimsite_brick_slab_recycling.json -0f4662e48240abf0e901825e4465207a88a2217c data/create/advancements/recipes/create.palettes/small_crimsite_brick_stairs.json -184338025eccdd8d04f845b8258ebd7407835986 data/create/advancements/recipes/create.palettes/small_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json -0d6d597aa80b57edde938668385db43d420af98e data/create/advancements/recipes/create.palettes/small_crimsite_brick_wall.json -aeb2725cbf8c199dd7265400c572d1ed6ca91562 data/create/advancements/recipes/create.palettes/small_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json -30b85e84ed217d8922e51ec55185427d2a2d086a data/create/advancements/recipes/create.palettes/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json -feedbaf30137c46abee2121d2722ea33093a4416 data/create/advancements/recipes/create.palettes/small_deepslate_brick_slab.json -8995c947661005788139b21e2619f1effb3cdef3 data/create/advancements/recipes/create.palettes/small_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json -46499a57073daa229e9d7d246d140613eea6c1f2 data/create/advancements/recipes/create.palettes/small_deepslate_brick_slab_recycling.json -c1eed3f8f35e1cc727248739c6dfc895cea582f6 data/create/advancements/recipes/create.palettes/small_deepslate_brick_stairs.json -2edbab4009e556b14401d1b68ea84e2c528a88da data/create/advancements/recipes/create.palettes/small_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json -355b624f750b2d7e35e9d702cc49c1a52a256fd4 data/create/advancements/recipes/create.palettes/small_deepslate_brick_wall.json -49059b58da67551f1a3ab28a928fd7dad9af3ea9 data/create/advancements/recipes/create.palettes/small_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json -6927548e361b70e9b8ef0aaaa51b1dfbf65d18fd data/create/advancements/recipes/create.palettes/small_diorite_bricks_from_stone_types_diorite_stonecutting.json -3f790638b8317ad8b9ae6f328f37f9eef25f06d3 data/create/advancements/recipes/create.palettes/small_diorite_brick_slab.json -176a72cc538a2a90b9555f95e32e3d2ce23269d9 data/create/advancements/recipes/create.palettes/small_diorite_brick_slab_from_stone_types_diorite_stonecutting.json -fe2754dc055e0354be7c20778fe3e80a810ab438 data/create/advancements/recipes/create.palettes/small_diorite_brick_slab_recycling.json -18f401796ed693dadc4dea18d6037ed69e2c12f6 data/create/advancements/recipes/create.palettes/small_diorite_brick_stairs.json -3749e01ce6c74a563cd04e978696debbdca203bc data/create/advancements/recipes/create.palettes/small_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json -d0ac16024b551016068be0899b733fdef72ea9f9 data/create/advancements/recipes/create.palettes/small_diorite_brick_wall.json -bc87c8dab082a77c959c827f0701f67850817949 data/create/advancements/recipes/create.palettes/small_diorite_brick_wall_from_stone_types_diorite_stonecutting.json -5878f41ace273540e31b96cbaf02634f8538c88a data/create/advancements/recipes/create.palettes/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json -836bd34938c6a595cb44eda586bcc192968668e9 data/create/advancements/recipes/create.palettes/small_dripstone_brick_slab.json -27ee215de13d67cce47eee2af17ae9842c970643 data/create/advancements/recipes/create.palettes/small_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json -4db8af71c3e19b278345b4609b111eb04dbfdf89 data/create/advancements/recipes/create.palettes/small_dripstone_brick_slab_recycling.json -1b1282448e7ead212dc6e06c9be3fb7db085f8b7 data/create/advancements/recipes/create.palettes/small_dripstone_brick_stairs.json -5b9ecba2ec4e811cc198900b7a450710b264a753 data/create/advancements/recipes/create.palettes/small_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json -139d6afec080422204fcbdc196cb15cd96f46569 data/create/advancements/recipes/create.palettes/small_dripstone_brick_wall.json -66ef69489c13d9ee2c6f95d394f459bd150419d7 data/create/advancements/recipes/create.palettes/small_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json -8f0ce0fdc6fcbeffb6191073bfea9ebd2ad2a02e data/create/advancements/recipes/create.palettes/small_granite_bricks_from_stone_types_granite_stonecutting.json -f65865a9e9f16f0fa54c4816d9b0055248fbaa55 data/create/advancements/recipes/create.palettes/small_granite_brick_slab.json -446b4826ebcde9b00abf8097dc109d8604264347 data/create/advancements/recipes/create.palettes/small_granite_brick_slab_from_stone_types_granite_stonecutting.json -edb952e30dbfeed1ec3e5b7e2c3b4a70e228e6b2 data/create/advancements/recipes/create.palettes/small_granite_brick_slab_recycling.json -2111445829f6df6ba62a9ecb4fb7a3bb34d7b778 data/create/advancements/recipes/create.palettes/small_granite_brick_stairs.json -163fcc206f102e5ce11c892cb8e76c61a569a3d8 data/create/advancements/recipes/create.palettes/small_granite_brick_stairs_from_stone_types_granite_stonecutting.json -67bf539fa68126d305052c391431b1ad7d71144c data/create/advancements/recipes/create.palettes/small_granite_brick_wall.json -cf10fb6a02ae12e65879364c9590432b3498d4e7 data/create/advancements/recipes/create.palettes/small_granite_brick_wall_from_stone_types_granite_stonecutting.json -2ff1edd231c0b2acfd34f39eac1fc80bd752f244 data/create/advancements/recipes/create.palettes/small_limestone_bricks_from_stone_types_limestone_stonecutting.json -b604dc2918b573af37f718af988cf3c89a24709e data/create/advancements/recipes/create.palettes/small_limestone_brick_slab.json -a20865d998aa936aad25396be1ff00b6d5e8f63a data/create/advancements/recipes/create.palettes/small_limestone_brick_slab_from_stone_types_limestone_stonecutting.json -9bf7c0d00e9b1f4c7ae36147a5762793236566ea data/create/advancements/recipes/create.palettes/small_limestone_brick_slab_recycling.json -594c73f4ccdd35ee5e911b993917919b17e80714 data/create/advancements/recipes/create.palettes/small_limestone_brick_stairs.json -cdc07a2d3696bfeb6fb9575f94af1100a0e7de9b data/create/advancements/recipes/create.palettes/small_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json -0f12d7eb36c104ad77399830dd22db77b022f530 data/create/advancements/recipes/create.palettes/small_limestone_brick_wall.json -e6293510710de1f6d307d4b54d84f4bdabbdc345 data/create/advancements/recipes/create.palettes/small_limestone_brick_wall_from_stone_types_limestone_stonecutting.json -44eb790d07b41879e995aeb83795b4cc103eb9f3 data/create/advancements/recipes/create.palettes/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json -07fffaf1b1bc0f253f6ae543706999a0da4b4c27 data/create/advancements/recipes/create.palettes/small_ochrum_brick_slab.json -7c2c5022487e4132b9f6be53cccfb4262e9731ba data/create/advancements/recipes/create.palettes/small_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json -e70c573bd8f089c14d383c1c5804840a3b400fff data/create/advancements/recipes/create.palettes/small_ochrum_brick_slab_recycling.json -3e36b894950127455c9bb8b343a78d14476aa400 data/create/advancements/recipes/create.palettes/small_ochrum_brick_stairs.json -4e629b37d1b744d72a9fc2b65891ec3a705f7248 data/create/advancements/recipes/create.palettes/small_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json -a5e5c89ac9f955738447dd6ec085cc1e3dcf2b5d data/create/advancements/recipes/create.palettes/small_ochrum_brick_wall.json -be3be3408e5790fe1dde49ca67418727013c30cb data/create/advancements/recipes/create.palettes/small_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json -5726f2bfc28a2151d9caf157244bfc4f44c40810 data/create/advancements/recipes/create.palettes/small_rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json -e401f6070e3a3c9a65dd71c9fd53be02f0436cfb data/create/advancements/recipes/create.palettes/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json -f5ffaad4354b5c1a981010f078a044c3ebd8d7f2 data/create/advancements/recipes/create.palettes/small_scorchia_brick_slab.json -4c286c0099347c96007e0e691502589ff3e0146d data/create/advancements/recipes/create.palettes/small_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json -c8f638c6f17ac0f32dc04913c47f0c3eea8ed37c data/create/advancements/recipes/create.palettes/small_scorchia_brick_slab_recycling.json -93b46f1d97a536758043cceebc477f627d4101e6 data/create/advancements/recipes/create.palettes/small_scorchia_brick_stairs.json -5030c44417e4a91260350832feb9778f69d47d12 data/create/advancements/recipes/create.palettes/small_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json -d9b1479eb23b05d2f0682de0e87ca2f3742b4411 data/create/advancements/recipes/create.palettes/small_scorchia_brick_wall.json -83928d13769bd6ae80aef2db76d11469b7f7c3c4 data/create/advancements/recipes/create.palettes/small_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json -650c1ab08e635ef947eece59d46d14307ca1197c data/create/advancements/recipes/create.palettes/small_scoria_bricks_from_stone_types_scoria_stonecutting.json -77819931bbbe728366ec869d4fe8021f9db2daae data/create/advancements/recipes/create.palettes/small_scoria_brick_slab.json -abd35e55a8ae318c8fb6487054cbdce3a51fe10d data/create/advancements/recipes/create.palettes/small_scoria_brick_slab_from_stone_types_scoria_stonecutting.json -f2dd9d62d885293ea4b73a7bac1086e9337416f1 data/create/advancements/recipes/create.palettes/small_scoria_brick_slab_recycling.json -843da192a81e34815359503f0e28e4ff09167dda data/create/advancements/recipes/create.palettes/small_scoria_brick_stairs.json -c38bb834170af090f10ad7f31287c7b5a65a197c data/create/advancements/recipes/create.palettes/small_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json -7c92dc02a0aab36049ab5b28d34e5b4d977d78d6 data/create/advancements/recipes/create.palettes/small_scoria_brick_wall.json -8a4ba027c1868e1e6bc6b8bb14213bc78516d06b data/create/advancements/recipes/create.palettes/small_scoria_brick_wall_from_stone_types_scoria_stonecutting.json -666043b181f9ef520933c5891b55b0cb8815f569 data/create/advancements/recipes/create.palettes/small_tuff_bricks_from_stone_types_tuff_stonecutting.json -e5c1b96e7b0649d922b13a4dfb97c7e87cf7810a data/create/advancements/recipes/create.palettes/small_tuff_brick_slab.json -cc54d9ae5cee7f64a885ff2dfcf8f32dce300226 data/create/advancements/recipes/create.palettes/small_tuff_brick_slab_from_stone_types_tuff_stonecutting.json -63490d19d507a254964ee8c4a4d727995baa067a data/create/advancements/recipes/create.palettes/small_tuff_brick_slab_recycling.json -a8fe179f7828fcd88e7c967f445572d1292b6700 data/create/advancements/recipes/create.palettes/small_tuff_brick_stairs.json -a5a474a0ad98a4db967e327189049ac1b1766cae data/create/advancements/recipes/create.palettes/small_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json -e2ca887e45707197386de17a0957d949c232de50 data/create/advancements/recipes/create.palettes/small_tuff_brick_wall.json -2d946f1f93bcab5d8a185084179af23ec892c933 data/create/advancements/recipes/create.palettes/small_tuff_brick_wall_from_stone_types_tuff_stonecutting.json -fbe365e0e2af1c1f99486cc63a179c5723c28647 data/create/advancements/recipes/create.palettes/small_veridium_bricks_from_stone_types_veridium_stonecutting.json -c7099d2e99562aff9fb0f1d7eb2bdfa93ba08306 data/create/advancements/recipes/create.palettes/small_veridium_brick_slab.json -57f41a5e2b596b5e0ba585dd94dd3cb58411db47 data/create/advancements/recipes/create.palettes/small_veridium_brick_slab_from_stone_types_veridium_stonecutting.json -1f5c23b6047c0348d3dae55df4046fddcdda182a data/create/advancements/recipes/create.palettes/small_veridium_brick_slab_recycling.json -3a51956ea746166bc970b482f2d45ce66b008ed6 data/create/advancements/recipes/create.palettes/small_veridium_brick_stairs.json -eed29c40d4b3462913a0fe788d4bbfe6ff2bbb49 data/create/advancements/recipes/create.palettes/small_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json -bb9c80736dee49dc5e41bb023a186ada7357228e data/create/advancements/recipes/create.palettes/small_veridium_brick_wall.json -a858e59c54ad76abbb7753e3e4f6158e059a1f35 data/create/advancements/recipes/create.palettes/small_veridium_brick_wall_from_stone_types_veridium_stonecutting.json -4ed9b0fc048e8d78998e0bee17191d9da7a750e3 data/create/advancements/recipes/create.palettes/spruce_window.json -529619c18bd1356ede6f169680a3e12636e2ec2d data/create/advancements/recipes/create.palettes/spruce_window_pane.json -1eb1b91c3bae5e9a661037563dda7f86319a5767 data/create/advancements/recipes/create.palettes/tiled_glass_from_glass_colorless_stonecutting.json -7ac376cb5955695acb2dc5156408be6ee273e3ae data/create/advancements/recipes/create.palettes/tiled_glass_pane.json -44be73e4dd89092099eba20c0f6265ec5001b1a8 data/create/advancements/recipes/create.palettes/tuff_pillar_from_stone_types_tuff_stonecutting.json -129f950cf31629a373b79259bf2143ef905ba92c data/create/advancements/recipes/create.palettes/veridium_from_stone_types_veridium_stonecutting.json -feffc531fb2738122f422760156c1c7ca511dbee data/create/advancements/recipes/create.palettes/veridium_pillar_from_stone_types_veridium_stonecutting.json -cf3cd34bbd1914f236a5504a026c889bde3b0b2f data/create/advancements/recipes/create.palettes/vertical_framed_glass_from_glass_colorless_stonecutting.json -52a605757015ad6f87296432de3809ce9572ec87 data/create/advancements/recipes/create.palettes/vertical_framed_glass_pane.json -235d4fd9853e8568e1957a4899cdabcacd669942 data/create/advancements/recipes/create.palettes/warped_window.json -0023137eaf3204db14b355bcd71c992b46274173 data/create/advancements/recipes/create.palettes/warped_window_pane.json -6007b0325a0476aa97d327bec7e34546003ae566 data/create/advancements/recipes/create.palettes/weathered_copper_shingle_slab.json -bf64d9bb01a06cdbbbee54a156e504d51d24d00c data/create/advancements/recipes/create.palettes/weathered_copper_shingle_slab_from_weathered_copper_shingles_stonecutting.json -b5961084cfcef7cede5a84a2731d63a087aa0fe2 data/create/advancements/recipes/create.palettes/weathered_copper_shingle_stairs.json -3c6bf7d1da2f0dac6aa2fad6e86caf3bbc8d065f data/create/advancements/recipes/create.palettes/weathered_copper_shingle_stairs_from_weathered_copper_shingles_stonecutting.json -51f72f9104782f3426d7e952417646a5f7f04039 data/create/advancements/recipes/create.palettes/weathered_copper_tile_slab.json -3152f4f16beeff6cf9b490629b729861a8450822 data/create/advancements/recipes/create.palettes/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json -8deb43c34b46ca097c61c333080875abf827608d data/create/advancements/recipes/create.palettes/weathered_copper_tile_stairs.json -2c54cd102bf05d2461fda9833be4fa0cb52e8cac data/create/advancements/recipes/create.palettes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json -a3f56145a37a381502c8d0f33f3f68d19fbb84a7 data/create/loot_tables/blocks/acacia_window.json -82759d6df5b84d56b8d9900798de33ac2ee386fc data/create/loot_tables/blocks/acacia_window_pane.json -5a11afdbcac60ec59c9d4992612582c0ac4a97c8 data/create/loot_tables/blocks/adjustable_chain_gearshift.json -dc713ff2984b1508550a8e4dcc2e2eb14961545b data/create/loot_tables/blocks/analog_lever.json -4f46d9379b063fb40350b0f67149121b45d06be4 data/create/loot_tables/blocks/andesite_alloy_block.json -84a5c5820b7ac54fe5cbc81288d4929d2352e3bb data/create/loot_tables/blocks/andesite_bars.json -4d642dedba06f0561c85af361a00560576a88077 data/create/loot_tables/blocks/andesite_belt_funnel.json -126d941149f72edc6ba8e7798a471e4c1daf6a5c data/create/loot_tables/blocks/andesite_casing.json -550d69206e67de6df23f31d28329070b393d84e1 data/create/loot_tables/blocks/andesite_door.json -13267c1251e76ae6271f7de72db60bde86aa0bfa data/create/loot_tables/blocks/andesite_encased_cogwheel.json -9d010fc3c8d0821d69b550ff0bcbf117be9a7005 data/create/loot_tables/blocks/andesite_encased_large_cogwheel.json -658d76088e3926c72da86a75b4b14946bd809239 data/create/loot_tables/blocks/andesite_encased_shaft.json -4d642dedba06f0561c85af361a00560576a88077 data/create/loot_tables/blocks/andesite_funnel.json -989f9dece4281e85aa64fc45f7a6ee37bc0c9b3e data/create/loot_tables/blocks/andesite_ladder.json -f61ca02f172d6a4e922005dee01d64069afc1a01 data/create/loot_tables/blocks/andesite_pillar.json -9fcba98700a95f38898e3a635c252b1806c8c349 data/create/loot_tables/blocks/andesite_scaffolding.json -6d0215a853fafcbe7b3b9b0f02cd5d7440f2f7d3 data/create/loot_tables/blocks/andesite_tunnel.json -9817128641e5c21acd9110a38c451a2374e5611b data/create/loot_tables/blocks/asurine.json -daa279a1f4c5aec62fb44bd9c5569a4b2c5cb30b data/create/loot_tables/blocks/asurine_pillar.json -d8c63a7465a469f31012da053c672c5a5da52aa0 data/create/loot_tables/blocks/basin.json -ea1892420a0e254f4cf2c67dbe8aa4da9379537d data/create/loot_tables/blocks/belt.json -3d72a8e7136d7272978e5f6449b1fd7e9d27944e data/create/loot_tables/blocks/birch_window.json -5a5e54ebad79407a4dd80f1045409799ac2b685d data/create/loot_tables/blocks/birch_window_pane.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/black_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/black_sail.json -0bc9a00e0074a957fcf26e3ba74bdc55d60d4826 data/create/loot_tables/blocks/black_seat.json -fd6abd404d0a8f38acdfb62b3f76ab711a509232 data/create/loot_tables/blocks/black_toolbox.json -3d1b133a655dfd78125fbbc3eb1e8d9b899251f3 data/create/loot_tables/blocks/black_valve_handle.json -a0b234d90bb6e342b6d188d4bd1a11a16497c840 data/create/loot_tables/blocks/blaze_burner.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/blue_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/blue_sail.json -3168fb6ceb78d373ff0b8c8d74a4796af0d945dc data/create/loot_tables/blocks/blue_seat.json -f7fdef100b60b5cb8fb1189d3e70b9c828a3b8d4 data/create/loot_tables/blocks/blue_toolbox.json -4426cab1afcfca4f71e741dcf877b2a31ca92897 data/create/loot_tables/blocks/blue_valve_handle.json -7090cdfa6d9a0b2062bcab3ee794a681c8fc248d data/create/loot_tables/blocks/brass_bars.json -ccd1691115bb92e00c70633b28cb2e5129296326 data/create/loot_tables/blocks/brass_belt_funnel.json -8f9cf04579010ecf2752ad1319ee97dd342dd78b data/create/loot_tables/blocks/brass_block.json -fdfce33b43b245a4f87bcf91583211d814ec3448 data/create/loot_tables/blocks/brass_casing.json -bc58021c4337084b3d7d409bd714eef07e1bac6d data/create/loot_tables/blocks/brass_door.json -13267c1251e76ae6271f7de72db60bde86aa0bfa data/create/loot_tables/blocks/brass_encased_cogwheel.json -9d010fc3c8d0821d69b550ff0bcbf117be9a7005 data/create/loot_tables/blocks/brass_encased_large_cogwheel.json -658d76088e3926c72da86a75b4b14946bd809239 data/create/loot_tables/blocks/brass_encased_shaft.json -ccd1691115bb92e00c70633b28cb2e5129296326 data/create/loot_tables/blocks/brass_funnel.json -1a84be40ab40c95805dcdb8fcbf80db551b236e5 data/create/loot_tables/blocks/brass_ladder.json -b75c2afc98430d4e55506879a496fe2c4ef35979 data/create/loot_tables/blocks/brass_scaffolding.json -df96035dce4aa8f514774f4133d27843ebc3918d data/create/loot_tables/blocks/brass_tunnel.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/brown_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/brown_sail.json -2fc1089e2293db83fd9b766e3329989fb5383add data/create/loot_tables/blocks/brown_seat.json -2208507d99a47df8bbdc0e2e34ab1d7f94ccd893 data/create/loot_tables/blocks/brown_toolbox.json -e578a068014c1d5a467f2a4e73e4b6d94271eb3d data/create/loot_tables/blocks/brown_valve_handle.json -5cc7f05f186d9158bbf635a622a99b17da294dbb data/create/loot_tables/blocks/calcite_pillar.json -0cb4fd02ee64e1ad37eb8ce89387667f951cf926 data/create/loot_tables/blocks/cart_assembler.json -985a3ce38a503d4b952e4bb7b927823aae8eed58 data/create/loot_tables/blocks/chute.json -1d4929d7d6176f60e5ea991a577527ed251ef375 data/create/loot_tables/blocks/clipboard.json -b7f29e901c19e2b8f443dc99d3d8960505bf89c7 data/create/loot_tables/blocks/clockwork_bearing.json -83383e5c7a0cdeb63b5401b43a7f94055ee03d3b data/create/loot_tables/blocks/clutch.json -13267c1251e76ae6271f7de72db60bde86aa0bfa data/create/loot_tables/blocks/cogwheel.json -fbf91043151dd047828e9101f08bac463694c303 data/create/loot_tables/blocks/content_observer.json -46cc7c341ecd8e15579c697e4c3eecb7d1225958 data/create/loot_tables/blocks/contraption_controls.json -6ab9e45341420e4760691c471539bbcd222ebac9 data/create/loot_tables/blocks/controller_rail.json -feade294112e66f472a3d33d6cfa29145ed136b5 data/create/loot_tables/blocks/controls.json -237cdd41c9a4e9e64b5566be80e4525747bfe4da data/create/loot_tables/blocks/copper_backtank.json -880f676e83ea2596774e7afe768aa8638dfd64e7 data/create/loot_tables/blocks/copper_bars.json -8d546d5efd1612c1f1c2971216473516b38d748d data/create/loot_tables/blocks/copper_casing.json -cccc03027a7907f86648397c0df6671608312a79 data/create/loot_tables/blocks/copper_door.json -210ca7a6ad459b403dcd41149ad0544df2028143 data/create/loot_tables/blocks/copper_ladder.json -12bb93fd8e39f9d65de0e0812a56f44b522a1f35 data/create/loot_tables/blocks/copper_scaffolding.json -c4f60d880f72a24068e35f022ccf646daeea4c24 data/create/loot_tables/blocks/copper_shingles.json -ed41ba3fce95485fe143393b19cd5357356ceb9b data/create/loot_tables/blocks/copper_shingle_slab.json -7733a3f8398c19dd51d1528cd85d786895c100ed data/create/loot_tables/blocks/copper_shingle_stairs.json -1ae9aa9098355ea9edefcc4dda1f7bd0ae057672 data/create/loot_tables/blocks/copper_tiles.json -931a705bab6638521964e1ae93cc9980e539bb88 data/create/loot_tables/blocks/copper_tile_slab.json -de0fa9ebeabe64dcfe5a64da0e697509b73477f8 data/create/loot_tables/blocks/copper_tile_stairs.json -6ed1886e41def643b9b8881d0b1bcb5b5c80106e data/create/loot_tables/blocks/copper_valve_handle.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/copycat_bars.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/copycat_base.json -e1047d6ed7b16a91c73ebc0dbdcef6fe989d79d3 data/create/loot_tables/blocks/copycat_panel.json -95b19cefb50d621a75ed4a3cab369a229940ccf9 data/create/loot_tables/blocks/copycat_step.json -70b7d7cb3d8ae394544e4c5c7c7fdbf3d58c311e data/create/loot_tables/blocks/creative_crate.json -dacd34a8c7cadd5679177bd10a4374b4dd7a5fec data/create/loot_tables/blocks/creative_fluid_tank.json -f6c2bf40f31406fc1f86d71ba616eac23fc5854a data/create/loot_tables/blocks/creative_motor.json -6351dd6b09327353dd84622e69df9754646f8160 data/create/loot_tables/blocks/crimsite.json -b900dbe6dc1d979954731d22843a12a22a2e970b data/create/loot_tables/blocks/crimsite_pillar.json -c3dc2a944dfdd6c728974969a8bd7cc0958c4133 data/create/loot_tables/blocks/crimson_window.json -1e7b11bb741cc6d5deab287baa904b79bbf88799 data/create/loot_tables/blocks/crimson_window_pane.json -34262544d4e2cc61a2e4b13faad4a0c1a3f8fbc6 data/create/loot_tables/blocks/crushing_wheel.json -e10afce2c4c9561e605791fadf39fa5904b71935 data/create/loot_tables/blocks/cuckoo_clock.json -a503ad7307b86f5ab9e032106b42056bf30503c9 data/create/loot_tables/blocks/cut_andesite.json -7a7784f3017c8f707ee682902b2422ee7503f7bb data/create/loot_tables/blocks/cut_andesite_bricks.json -45e71188d60a50c8568ad12b465db5ff3d10d652 data/create/loot_tables/blocks/cut_andesite_brick_slab.json -e1dbf420a33da1184b3e207617d8fa5d02532f84 data/create/loot_tables/blocks/cut_andesite_brick_stairs.json -1c19c4e7ca1de451e346ada6c07d90bcd0bcdff2 data/create/loot_tables/blocks/cut_andesite_brick_wall.json -82ebec1373845449baea3f259103c23bb0f28aa1 data/create/loot_tables/blocks/cut_andesite_slab.json -c63a80bc349f2c15cce137c5ea8693ccdd6c69e8 data/create/loot_tables/blocks/cut_andesite_stairs.json -4d48a1cb444bbb7d093cd295bd80ddba5358f276 data/create/loot_tables/blocks/cut_andesite_wall.json -9390a7ff3dbf76b315e369cd7481b3609982d29b data/create/loot_tables/blocks/cut_asurine.json -88dac0bbfd2df7c04f9a5e46879a0f3dfa00313a data/create/loot_tables/blocks/cut_asurine_bricks.json -144ebcc6c0995b9627e6c5aaf9ea0f497ba1dcc8 data/create/loot_tables/blocks/cut_asurine_brick_slab.json -f1ca8b3ebac4c0d9e262a7505104a65b2ae9cb7b data/create/loot_tables/blocks/cut_asurine_brick_stairs.json -dc216529d9413a983039d29494dc0f0d18ccdf35 data/create/loot_tables/blocks/cut_asurine_brick_wall.json -6c50a9f3359f1dfd3387d31e987761bd1415ccf9 data/create/loot_tables/blocks/cut_asurine_slab.json -ef0b4a0d778d695994fd307798519d1a905513b1 data/create/loot_tables/blocks/cut_asurine_stairs.json -ca3eddf49d70fa61ecf230c8da820fc0481f2082 data/create/loot_tables/blocks/cut_asurine_wall.json -2ff4aa5fd6dbef57bae4544b49de8da40bcde046 data/create/loot_tables/blocks/cut_calcite.json -d5857f4e5e14c80fdf1001fa842cfe75c66c18d2 data/create/loot_tables/blocks/cut_calcite_bricks.json -38fd1814345562aebeb5a22b5b715f332c6d8175 data/create/loot_tables/blocks/cut_calcite_brick_slab.json -a12f52629d004ffcc8c546e201a2132504545a37 data/create/loot_tables/blocks/cut_calcite_brick_stairs.json -d594d07bd3ef662c94b450345272e2771839cec1 data/create/loot_tables/blocks/cut_calcite_brick_wall.json -6fd203e8e2f917890937d0211985235c9e2be1bf data/create/loot_tables/blocks/cut_calcite_slab.json -5e443a91f0001fcbf9c5aee369cf2e10502b2f50 data/create/loot_tables/blocks/cut_calcite_stairs.json -e81d757dca04c3f65602106243ecd65961bd6051 data/create/loot_tables/blocks/cut_calcite_wall.json -d27568c7d4ca52f9d664b3b5abdc2e5d6c581e45 data/create/loot_tables/blocks/cut_crimsite.json -2e8d45efbacca40cf972f3cf0ddf5fef5171378e data/create/loot_tables/blocks/cut_crimsite_bricks.json -a45464991432fc39cefec2f5279179a59cfbab94 data/create/loot_tables/blocks/cut_crimsite_brick_slab.json -14698145d8130fd298b4d27672020155b4af6aac data/create/loot_tables/blocks/cut_crimsite_brick_stairs.json -106ca2064b2e31760a1497e73fa377d2f2481a85 data/create/loot_tables/blocks/cut_crimsite_brick_wall.json -bb4e7196666fc7398e1485e5fd96fe26e98c20ac data/create/loot_tables/blocks/cut_crimsite_slab.json -d78b4e1eebed2ee3c43b8fa031e856c7dee0377e data/create/loot_tables/blocks/cut_crimsite_stairs.json -d80e975da1f1d2102cc3e26b82e38bdf67268620 data/create/loot_tables/blocks/cut_crimsite_wall.json -ab39b2ce08ae88d8a7c5f3792d875c7c6b03c15c data/create/loot_tables/blocks/cut_deepslate.json -85ab2b5ff3d113129e264dc1711d5474e1c8f9a3 data/create/loot_tables/blocks/cut_deepslate_bricks.json -703927b401edd9f4f2ec24da91281d67e17e11e7 data/create/loot_tables/blocks/cut_deepslate_brick_slab.json -2271753c641db17818ee3cd9dc2ed71caeb29a30 data/create/loot_tables/blocks/cut_deepslate_brick_stairs.json -5f9970337b3eb65b7174573383f26601c17c71f2 data/create/loot_tables/blocks/cut_deepslate_brick_wall.json -188792f4dae69e06c188445318455a8a187e0c67 data/create/loot_tables/blocks/cut_deepslate_slab.json -8aef29345bba63a0400fdf1a3f16b57117bebfe6 data/create/loot_tables/blocks/cut_deepslate_stairs.json -2bb96f139d8d0c72e047433d7620928459f30e04 data/create/loot_tables/blocks/cut_deepslate_wall.json -4214fd91588dcae02770d3535f74042d3e779065 data/create/loot_tables/blocks/cut_diorite.json -7378869d0f813019ed5acec6697bea987b691a21 data/create/loot_tables/blocks/cut_diorite_bricks.json -9a6b3450f37e47db8619ef41d6b88bbf745171ec data/create/loot_tables/blocks/cut_diorite_brick_slab.json -3df8419bb50d47701807780f463a2e01be4ea939 data/create/loot_tables/blocks/cut_diorite_brick_stairs.json -6eb875f2dca074013cbf40d8be36825e40f23cb4 data/create/loot_tables/blocks/cut_diorite_brick_wall.json -c06a11e5ab5a43e8a91c363e94e5bf704aeb9b59 data/create/loot_tables/blocks/cut_diorite_slab.json -4b617830baa3931ee0580e01683619894824336d data/create/loot_tables/blocks/cut_diorite_stairs.json -d3404dd80ab9e11cb8cf6475bcff2555956bf5ce data/create/loot_tables/blocks/cut_diorite_wall.json -4f30cc3cf58ed6098f41e18431143bf315744c3f data/create/loot_tables/blocks/cut_dripstone.json -e10d12b3da3925f7c5decba7157d257d202deafe data/create/loot_tables/blocks/cut_dripstone_bricks.json -20a03efb2b2ced5d97b8e24fdda6747945bf8842 data/create/loot_tables/blocks/cut_dripstone_brick_slab.json -00d4d4db41452c79986f13f99063af3d73b700b3 data/create/loot_tables/blocks/cut_dripstone_brick_stairs.json -ed48c071c75e31e3dc6aa894579be6b73b87131a data/create/loot_tables/blocks/cut_dripstone_brick_wall.json -2d2ccf18aa89f69c396ca0b961cae2991c55651f data/create/loot_tables/blocks/cut_dripstone_slab.json -01b42cd22e3137f8f1f66b00b4ac920d63a03b04 data/create/loot_tables/blocks/cut_dripstone_stairs.json -f5551f0baed342a8b0f3d5eb5d5d2a882df8d785 data/create/loot_tables/blocks/cut_dripstone_wall.json -3264381f8aef8995f0f142552bd5b36dbec164f1 data/create/loot_tables/blocks/cut_granite.json -ff753d2cbc944f5b34c7f21c52d27ceb2c7bd462 data/create/loot_tables/blocks/cut_granite_bricks.json -ee444f2e75b4b233f908d20e3729b102cef01cb2 data/create/loot_tables/blocks/cut_granite_brick_slab.json -a47eac046541643710532f628de5058f7321755b data/create/loot_tables/blocks/cut_granite_brick_stairs.json -5e6ebc6016ee5ed5223d69af650b51320c6a9f5b data/create/loot_tables/blocks/cut_granite_brick_wall.json -9d3e3400f008c1dda9683f79270330bfec837307 data/create/loot_tables/blocks/cut_granite_slab.json -32b4c40f76d9c8ba13d7dfdf8311751c3015daf9 data/create/loot_tables/blocks/cut_granite_stairs.json -d62cd257fa28b81604b453fd7758a79e11c1c464 data/create/loot_tables/blocks/cut_granite_wall.json -0951b15016e7940e3317f4e83211a197b4f63d4a data/create/loot_tables/blocks/cut_limestone.json -40b7bd607d8b5e210b67acbdea2f3af5334d8baf data/create/loot_tables/blocks/cut_limestone_bricks.json -913050830bc9fa15d09914e05d15846c71afcca9 data/create/loot_tables/blocks/cut_limestone_brick_slab.json -55c1dbfdc3fc75b504e2faa847ff4266504c8075 data/create/loot_tables/blocks/cut_limestone_brick_stairs.json -5173d99b31a75ed189f627412d07cfa58778a1b3 data/create/loot_tables/blocks/cut_limestone_brick_wall.json -2fee0b2be930be806d8d8f03dc7c5bff7f5638f1 data/create/loot_tables/blocks/cut_limestone_slab.json -9cde54a07092cc784f6d3b1365b8899c796817a5 data/create/loot_tables/blocks/cut_limestone_stairs.json -00fbfa80289d836ce9f83fc30375dceea69d32ba data/create/loot_tables/blocks/cut_limestone_wall.json -aeb068ce84010e4e4bfe8e1c7151c7239c47f759 data/create/loot_tables/blocks/cut_ochrum.json -217b9eb98a991afce1060addcc8e0a68b373f4af data/create/loot_tables/blocks/cut_ochrum_bricks.json -23cc29ed27d04e4791667cf8058ce9dd90b3dd08 data/create/loot_tables/blocks/cut_ochrum_brick_slab.json -8271694c926320d6153f1ce643c4b06968b19024 data/create/loot_tables/blocks/cut_ochrum_brick_stairs.json -1c52d65cd1cf21167835482da8cba1a9fc3e2944 data/create/loot_tables/blocks/cut_ochrum_brick_wall.json -0cea47d6285e69dfcf9aef099a4751c3439e6d2a data/create/loot_tables/blocks/cut_ochrum_slab.json -c330247600e1cd93313f95015b4e92497873953c data/create/loot_tables/blocks/cut_ochrum_stairs.json -b5b6b9e22cd0638c53c03cb07e7948a84365c1b4 data/create/loot_tables/blocks/cut_ochrum_wall.json -dd9a499a90f75fdc55597e450e1413e667cb9f1d data/create/loot_tables/blocks/cut_scorchia.json -b31e46c1100f9fd0a313afb6468d13a446ee1d6b data/create/loot_tables/blocks/cut_scorchia_bricks.json -278a2c97bf0add278ade05881b61023936e01405 data/create/loot_tables/blocks/cut_scorchia_brick_slab.json -da814c2bd834bafd6a430efc88220ce2ce5d6d3b data/create/loot_tables/blocks/cut_scorchia_brick_stairs.json -5d6c404650d72a620ca945a0c52835c2969541be data/create/loot_tables/blocks/cut_scorchia_brick_wall.json -cad74f3dd7a1086e81fa573176c9da085b3ee6b0 data/create/loot_tables/blocks/cut_scorchia_slab.json -897a6886e3f3341568606fb3e21e779621165909 data/create/loot_tables/blocks/cut_scorchia_stairs.json -e1c73fa87ffab9fe3e087ba3f0a76da7a9ab91c6 data/create/loot_tables/blocks/cut_scorchia_wall.json -74ca01c1bafb81f6d9f1ea2c8747582332d2115b data/create/loot_tables/blocks/cut_scoria.json -5bf971d60ecca78cd8bc088d1d82b702d00220be data/create/loot_tables/blocks/cut_scoria_bricks.json -3dd1666e9aaaef2f10b1498b6f1a3916f2d9b760 data/create/loot_tables/blocks/cut_scoria_brick_slab.json -1bda280899d5eb4664cd433d6715bbc83dabf737 data/create/loot_tables/blocks/cut_scoria_brick_stairs.json -e8b6f934ce96fa0e9d29eee46d8a9bc3b83aa041 data/create/loot_tables/blocks/cut_scoria_brick_wall.json -809c38ce0262b35ed76c0b5821ddb16a8c999701 data/create/loot_tables/blocks/cut_scoria_slab.json -33e67734a246e76dc1728efd4e9dd35f3a83c981 data/create/loot_tables/blocks/cut_scoria_stairs.json -fec2e2c15aadc2f7f5245fe1b30ec1bb237a4bb2 data/create/loot_tables/blocks/cut_scoria_wall.json -84c4d512e943808d82560bfc85fd26048d022bf8 data/create/loot_tables/blocks/cut_tuff.json -51f8b574067bd55d9578139c2e623853a9652221 data/create/loot_tables/blocks/cut_tuff_bricks.json -d5ead706a71374f4e83156827adc3ef6ae751d5d data/create/loot_tables/blocks/cut_tuff_brick_slab.json -569d1f3e5a84d23b40ccc78453217f627bb4924f data/create/loot_tables/blocks/cut_tuff_brick_stairs.json -200689cf9954f919378be7f3dcf50ad20b1beb37 data/create/loot_tables/blocks/cut_tuff_brick_wall.json -0b7890363595e22b6612e20beeaa1d13bf0c4d9e data/create/loot_tables/blocks/cut_tuff_slab.json -9db563c56419548a1d5dc3fd491df45c331f633e data/create/loot_tables/blocks/cut_tuff_stairs.json -6b280847ccf8d37794781cb701b2b2a919e7be23 data/create/loot_tables/blocks/cut_tuff_wall.json -2b1dbc0772c3584a1125e06ad0ff64f979afb356 data/create/loot_tables/blocks/cut_veridium.json -16bd30695ed498e76d98e8ef908256eda1f338a9 data/create/loot_tables/blocks/cut_veridium_bricks.json -09d2296159d1f08c9134eed3c7f2d1a81d42adad data/create/loot_tables/blocks/cut_veridium_brick_slab.json -cadcc8b9f5d7e34909b65aee1bc362ff3631db78 data/create/loot_tables/blocks/cut_veridium_brick_stairs.json -e501230091650250e5802b660eb17c90c70368e7 data/create/loot_tables/blocks/cut_veridium_brick_wall.json -5c15f2fd915e848a5f133495c72ca6aa7f05fa76 data/create/loot_tables/blocks/cut_veridium_slab.json -e117ee499282131996ee650aad2c822954e1fbe0 data/create/loot_tables/blocks/cut_veridium_stairs.json -ecdbea059f58ede86dc2e3a05be64bda4e8ef018 data/create/loot_tables/blocks/cut_veridium_wall.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/cyan_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/cyan_sail.json -779e729b8d706861672b9c95b30caf8c56262bce data/create/loot_tables/blocks/cyan_seat.json -7ceea7d697a94300a0299c50faedf4c5f1ac75f4 data/create/loot_tables/blocks/cyan_toolbox.json -7a37d53cef9dbe542b4d695d8b0d5b090e926356 data/create/loot_tables/blocks/cyan_valve_handle.json -88c34f1440d8e068aa7d14e9f286dec883f5ae69 data/create/loot_tables/blocks/dark_oak_window.json -77074529121f3f7dac9ca1d9bd7e256094252a9d data/create/loot_tables/blocks/dark_oak_window_pane.json -78498a2d6bc1ab8b6f16eaa88bf544b238999128 data/create/loot_tables/blocks/deepslate_pillar.json -66258ca1f5ec9a52688083aa390e4f87dfc86b8f data/create/loot_tables/blocks/deepslate_zinc_ore.json -38c4ec9845fa40115d4df5276c6deca07b58614a data/create/loot_tables/blocks/deployer.json -7c9cd839b39c75cbede5133f88239342550e6513 data/create/loot_tables/blocks/depot.json -8d05f7386dd4377a4945dd7e4bc2759566a4a24f data/create/loot_tables/blocks/diorite_pillar.json -e969a183d6ea9569e40c3d5d17a9eba4999ce220 data/create/loot_tables/blocks/display_board.json -e46f3f710972d17bccb9244f22fb267082b2ec7c data/create/loot_tables/blocks/display_link.json -4fabe2419bf98de2d664d782f7decc585a028a65 data/create/loot_tables/blocks/dripstone_pillar.json -07402ea8550107f765a5937dfe180a3800f12f84 data/create/loot_tables/blocks/elevator_contact.json -26f921a590db37215bd8226611e8b29b5805fb0d data/create/loot_tables/blocks/elevator_pulley.json -6df2d9239e5d8897033cb1d7b95b3094654af745 data/create/loot_tables/blocks/encased_chain_drive.json -66008f776f345a3fa3f740790bbc0bf4013bdcd6 data/create/loot_tables/blocks/encased_fan.json -3b11d74298e8f808207d85ce6426d597d51cceef data/create/loot_tables/blocks/encased_fluid_pipe.json -d0278de519828539c2f55f8f1ec320cd620a52fd data/create/loot_tables/blocks/experience_block.json -dad8f04e24e5da8b693d4de0e00e5cfafb64cf7b data/create/loot_tables/blocks/exposed_copper_shingles.json -dcccb5082e6fbae664c00946402daa1b081c0748 data/create/loot_tables/blocks/exposed_copper_shingle_slab.json -c1324ca2cf242708be48c211e411e56c8c3d7c78 data/create/loot_tables/blocks/exposed_copper_shingle_stairs.json -9517a903713d1996fadd13db50848eefe5bccf99 data/create/loot_tables/blocks/exposed_copper_tiles.json -8e0d8b3eb961a080c350c171090121d0a5c881e4 data/create/loot_tables/blocks/exposed_copper_tile_slab.json -041ef73960a3b08f30a775997fe6648836c0bb26 data/create/loot_tables/blocks/exposed_copper_tile_stairs.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/fake_track.json -3b11d74298e8f808207d85ce6426d597d51cceef data/create/loot_tables/blocks/fluid_pipe.json -14490ad4a6168721b09baeb5dcab1c4c580fa293 data/create/loot_tables/blocks/fluid_tank.json -df37c1bbbd2136bf6934b454938fcf04a40984c6 data/create/loot_tables/blocks/fluid_valve.json -f4fc579c705a5de7eabbb8acdc5f5951038ca6bd data/create/loot_tables/blocks/flywheel.json -3e464d1dfe58c317a8e6291ea6fee25d2e95d8ce data/create/loot_tables/blocks/framed_glass.json -c6345ae9383aff6b92dfaeda8efd41fb85e273f1 data/create/loot_tables/blocks/framed_glass_door.json -02aa9999205c2a426d093db23a3ac9c25d71d4f6 data/create/loot_tables/blocks/framed_glass_pane.json -f6ea9d893550138d469d1b9758a673890638f115 data/create/loot_tables/blocks/framed_glass_trapdoor.json -0d10bee81d5369778f9adc85481717333210d4ca data/create/loot_tables/blocks/gantry_carriage.json -2b33f6804abcc99e6e605af0e320b38d2686b22e data/create/loot_tables/blocks/gantry_shaft.json -88198261807f52c50fb9c7589024f1c75e97f273 data/create/loot_tables/blocks/gearbox.json -33ab3c497978ed5cd860e05a84503526e7ee00b5 data/create/loot_tables/blocks/gearshift.json -3b11d74298e8f808207d85ce6426d597d51cceef data/create/loot_tables/blocks/glass_fluid_pipe.json -630572221e3fa6501b3b0a9db7205715b3c02696 data/create/loot_tables/blocks/granite_pillar.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/gray_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/gray_sail.json -a3f1602cddcbce20fea594d78d62970ccfec1601 data/create/loot_tables/blocks/gray_seat.json -db7c73cb9fe4495a1f1935836aba8992f9e586a9 data/create/loot_tables/blocks/gray_toolbox.json -2cae46f6f1fe2f59177c7b981953c52db3a8aafe data/create/loot_tables/blocks/gray_valve_handle.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/green_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/green_sail.json -a6d39a9eac6032784d85ab65466aab0c04b248ac data/create/loot_tables/blocks/green_seat.json -b8424574bbc31ed63239ad1b3162eb17b1c1944e data/create/loot_tables/blocks/green_toolbox.json -5541538cbd83a179aa1406fb86c175c592906110 data/create/loot_tables/blocks/green_valve_handle.json -ceaaf7d5b59c545effb603cd0b413dc635b409ec data/create/loot_tables/blocks/hand_crank.json -f9e23ff774f537a06b4c7909c36d92b2163300b2 data/create/loot_tables/blocks/haunted_bell.json -4abd856b6b3ed7585da0044dd794a733a6f991dc data/create/loot_tables/blocks/horizontal_framed_glass.json -77b52d1c33ce7b867dc6ce61379284b52fa9e957 data/create/loot_tables/blocks/horizontal_framed_glass_pane.json -53eab855ca00e912fa9f99ab57d215e5c6d9fcd6 data/create/loot_tables/blocks/hose_pulley.json -38e108dd3c9dfe01d84c37eca75ec0dc1ccc6d11 data/create/loot_tables/blocks/industrial_iron_block.json -716a25f2e6e647216d6af4773a84f5ba0371096c data/create/loot_tables/blocks/item_drain.json -207c22f3b1ac6b1596a9ea595550f2e6fdd997a1 data/create/loot_tables/blocks/item_vault.json -c46cc42432ddc44b89e9c7800a5b3d2a785a317e data/create/loot_tables/blocks/jungle_window.json -f7e20610036cd620535fc1544f0ba03936c4545c data/create/loot_tables/blocks/jungle_window_pane.json -fee742e0fcd8c3e6e5553d4290cc698fb0a7679f data/create/loot_tables/blocks/large_bogey.json -9d010fc3c8d0821d69b550ff0bcbf117be9a7005 data/create/loot_tables/blocks/large_cogwheel.json -8f52bb13618a882d6d79ab875d7a8fa2c017a59a data/create/loot_tables/blocks/large_water_wheel.json -bb8f6da8793701a0e099c797a48e3556705281b4 data/create/loot_tables/blocks/layered_andesite.json -d36e3236bcb56a1a5c171cd5023b4a3535b78d8d data/create/loot_tables/blocks/layered_asurine.json -b33fb36b8f1869f188f3b372d42d989f29473782 data/create/loot_tables/blocks/layered_calcite.json -99b42dd46bdc4ae1aa106d67d29a3b6ad144e35f data/create/loot_tables/blocks/layered_crimsite.json -05c46330e3b6a5cd0fc6ecdd87256d26cfdc28af data/create/loot_tables/blocks/layered_deepslate.json -45808f66c78a6fca10b469bd6bdfcc6d2e432a49 data/create/loot_tables/blocks/layered_diorite.json -b77292ff663f96288b53ad0cf9ba33829401e41a data/create/loot_tables/blocks/layered_dripstone.json -cfa54b117b7a52332637f0623b9e2884e45c7662 data/create/loot_tables/blocks/layered_granite.json -bcc2c4c6680c3e4465dde94cc65b955c776bfc94 data/create/loot_tables/blocks/layered_limestone.json -46665a39a35d3b5b4818a9688d104b59e0a1dd2a data/create/loot_tables/blocks/layered_ochrum.json -b298deac92064abfc4a3f91bb4942600b1892fbe data/create/loot_tables/blocks/layered_scorchia.json -bc211962712be5156aa9e4aea35de1cece6b6784 data/create/loot_tables/blocks/layered_scoria.json -47c7328c629bfb9e285ae6de3c5970a675204df4 data/create/loot_tables/blocks/layered_tuff.json -e0d2610c39bddccb6dc2159c1eac730a590da047 data/create/loot_tables/blocks/layered_veridium.json -7f12403d5c795d42ff9af7ae0ac6dd66bcb54905 data/create/loot_tables/blocks/lectern_controller.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/light_blue_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/light_blue_sail.json -0fc94a91e51b506e51783318c4198f9a93fd4dde data/create/loot_tables/blocks/light_blue_seat.json -ddc66dca50b307922882de88913ddfd5717e210d data/create/loot_tables/blocks/light_blue_toolbox.json -822662e7bfb654b376fb2bad9b1f839dbac7eade data/create/loot_tables/blocks/light_blue_valve_handle.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/light_gray_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/light_gray_sail.json -d9af75cc2dc66cfdf9ca4ce17d4bdde7a0f3204d data/create/loot_tables/blocks/light_gray_seat.json -ced618f429411ec6d24cdb3fd6cfeeba91d28d58 data/create/loot_tables/blocks/light_gray_toolbox.json -7010ccf5c5d06a5f0df899eb1348709fd5542e19 data/create/loot_tables/blocks/light_gray_valve_handle.json -b99fc3c47d24211826e6d9e8a76a4e7c6b24059c data/create/loot_tables/blocks/limestone.json -b97cf862801db3613d588a69e1f5b123b1dfc22b data/create/loot_tables/blocks/limestone_pillar.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/lime_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/lime_sail.json -94c565c700ab9061a6b83652eb5ed7942ebe46fe data/create/loot_tables/blocks/lime_seat.json -8628738f6dc87283f593a08579be2c0b7637904f data/create/loot_tables/blocks/lime_toolbox.json -5dfe90bcdb3d46e570d5a751f96bfdf48a878c31 data/create/loot_tables/blocks/lime_valve_handle.json -3899ba01bf3f4a89e1a1bcc1109491ab96833b08 data/create/loot_tables/blocks/linear_chassis.json -1678a0f2a087abf138e2888b07d418c7ef00c6a5 data/create/loot_tables/blocks/lit_blaze_burner.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/magenta_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/magenta_sail.json -ccae04c0e944f9f3909c3210ae3eb910207cd57c data/create/loot_tables/blocks/magenta_seat.json -dbdcad9959ec94b2f214f121a0361f2eeac5cab9 data/create/loot_tables/blocks/magenta_toolbox.json -6020e533ed7121ee33409a4422a8098295af49d0 data/create/loot_tables/blocks/magenta_valve_handle.json -acb87cf1aa3236529a9322e3d04155da16747e1f data/create/loot_tables/blocks/mangrove_window.json -544741628cabdf548d6185bd1e1b3d2675a7c7bb data/create/loot_tables/blocks/mangrove_window_pane.json -e86b6745d61732cfd95356df84e71cae8b9be10d data/create/loot_tables/blocks/mechanical_arm.json -6ffb8f41c3c42d57c9ff9ce8520b2327f51e2731 data/create/loot_tables/blocks/mechanical_bearing.json -1f166934a75ea3d1bdcf65394632636e6f9cf5ff data/create/loot_tables/blocks/mechanical_crafter.json -a764c3852334eb2a0cc8276b3772db0166b9e731 data/create/loot_tables/blocks/mechanical_drill.json -f15a9dcff58129571c001d3e0e6f1452aabec8e1 data/create/loot_tables/blocks/mechanical_harvester.json -f5cc7a3c730c5dcde600b3a14880c6d521a36032 data/create/loot_tables/blocks/mechanical_mixer.json -89a35b6a56540b4a409cbbd9e6ce144c08741708 data/create/loot_tables/blocks/mechanical_piston.json -ada6bd9d74e6089f89f674a941c67809b238f9ba data/create/loot_tables/blocks/mechanical_piston_head.json -7ae5e04247a7865ed31cc371ad320e048705920e data/create/loot_tables/blocks/mechanical_plough.json -d7a65d9412c86788a751ac2910a1d12afe5c698d data/create/loot_tables/blocks/mechanical_press.json -7a5b9e322c8cb37c0851dddb9ec5eeee226e3dc7 data/create/loot_tables/blocks/mechanical_pump.json -2a419360a36965c5ecddedecd1ac31f36f8ed4f8 data/create/loot_tables/blocks/mechanical_roller.json -f6b645e4fb6cff56c670ebbdac6faf7a54392d54 data/create/loot_tables/blocks/mechanical_saw.json -e543aa1464cd13e8584648ec9837bf5668d18676 data/create/loot_tables/blocks/metal_bracket.json -5fef81f04d62c6d568d015348997c3c244140cfa data/create/loot_tables/blocks/metal_girder.json -74c3c91938129ad62427d4e331c417ab0bf16e83 data/create/loot_tables/blocks/metal_girder_encased_shaft.json -1789145ba000b1df482623669ffcf7d596aba556 data/create/loot_tables/blocks/millstone.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/minecart_anchor.json -8ca400d182203a8edc3e917fd36ae74a2304929e data/create/loot_tables/blocks/mysterious_cuckoo_clock.json -362b0c1530885d948c32206fb55d179ea459882a data/create/loot_tables/blocks/netherite_backtank.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/nixie_tube.json -d23b04662f5d0886e1881ce0b83517526886e8de data/create/loot_tables/blocks/nozzle.json -be36ab5e2c22d3a8bed728d2ca859212ad75fc08 data/create/loot_tables/blocks/oak_window.json -75a8f246ef65d782ea5fbb574795fcdba2b9d515 data/create/loot_tables/blocks/oak_window_pane.json -a1ba76f8a5480a522c94c66be3ddb806d3fe9c30 data/create/loot_tables/blocks/ochrum.json -13f74daea0ceb182c9352532d4f5e9440d0509b6 data/create/loot_tables/blocks/ochrum_pillar.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/orange_sail.json -d09f90473e8a49eacffbf97a68251c190236af55 data/create/loot_tables/blocks/orange_seat.json -bf0353e3245f69cbe342d796d199d0e5d80f1fd1 data/create/loot_tables/blocks/orange_toolbox.json -903102e9deb831a5c5865df93c484a7618a255f7 data/create/loot_tables/blocks/orange_valve_handle.json -567d4973045071dd6ed66d26a2c8411b7cba2a80 data/create/loot_tables/blocks/ornate_iron_window.json -9c39b348d6cdcf3291e250246581837076f054fb data/create/loot_tables/blocks/ornate_iron_window_pane.json -bb598c8bef6444550228fe6ffc3950c0f280b757 data/create/loot_tables/blocks/oxidized_copper_shingles.json -0631729f2bc0df1e935425b05dd395e6f31e0ecd data/create/loot_tables/blocks/oxidized_copper_shingle_slab.json -665bd9964af4e9087d802df6b915622cb58a977b data/create/loot_tables/blocks/oxidized_copper_shingle_stairs.json -5a07d5e1b8d1e2206e3125463d0cd6f8b9dc92f8 data/create/loot_tables/blocks/oxidized_copper_tiles.json -937e4cf70d10ba44bf08afccdd85d5c199d7e3c8 data/create/loot_tables/blocks/oxidized_copper_tile_slab.json -c679633837f9007f263787ae99fbc9b30d41119a data/create/loot_tables/blocks/oxidized_copper_tile_stairs.json -4d107fcae10d658d27f2a32a6fa2fe7bd3566dae data/create/loot_tables/blocks/peculiar_bell.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/pink_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/pink_sail.json -bdb1e76525179fdbf39ac5b1640ccaeaee7b5cee data/create/loot_tables/blocks/pink_seat.json -2ca7c6a6d9d12fcac6380940052961de92ca0431 data/create/loot_tables/blocks/pink_toolbox.json -b9d747c93b1ba1d5351bbc90969955e417a491ff data/create/loot_tables/blocks/pink_valve_handle.json -ada6bd9d74e6089f89f674a941c67809b238f9ba data/create/loot_tables/blocks/piston_extension_pole.json -65affa822c042e23be89eb8c3255058443f29d87 data/create/loot_tables/blocks/placard.json -05272166860c8bd813c375420befcac9bcc3ad3d data/create/loot_tables/blocks/polished_cut_andesite.json -5b1e6a9409abc1721fccba99066f0be0193b9aa8 data/create/loot_tables/blocks/polished_cut_andesite_slab.json -0b69bae0adbd90aa55e80191d6c11d081c998190 data/create/loot_tables/blocks/polished_cut_andesite_stairs.json -8cb4c06fe1b617d3424568e7a07558f182eec385 data/create/loot_tables/blocks/polished_cut_andesite_wall.json -2b4aac29c7a5fa5169ba3b11a0da59cfaf0339ee data/create/loot_tables/blocks/polished_cut_asurine.json -a77e3a80026e37f4d03b3276494f59103fd5864e data/create/loot_tables/blocks/polished_cut_asurine_slab.json -f7d7401265db9a706cfe1302e45e72b1a833fba7 data/create/loot_tables/blocks/polished_cut_asurine_stairs.json -87373898b5b2cb178203d61c4377e7641109fa45 data/create/loot_tables/blocks/polished_cut_asurine_wall.json -76e4e76f8ec198749117053846972c16a9c64edb data/create/loot_tables/blocks/polished_cut_calcite.json -b0974100597e00bd7f98a0449aeb18fb260e3bc1 data/create/loot_tables/blocks/polished_cut_calcite_slab.json -b82963f1d08caa7981569a5d95092569b5e0b326 data/create/loot_tables/blocks/polished_cut_calcite_stairs.json -f8473f26d7fb70a67fb7660b20e21ebf1f3c8c75 data/create/loot_tables/blocks/polished_cut_calcite_wall.json -b75b7625e353724273541b26eb7da5acafdc96a3 data/create/loot_tables/blocks/polished_cut_crimsite.json -2b900c5c29eb4264b61bc80cfae78cc9cb53240c data/create/loot_tables/blocks/polished_cut_crimsite_slab.json -9ef5c110250839417fed010b1f69c152a925041e data/create/loot_tables/blocks/polished_cut_crimsite_stairs.json -6b5b186415a8d2c3dd1dd72df163f0141e4dfc9f data/create/loot_tables/blocks/polished_cut_crimsite_wall.json -80bee4b3fb3a4615d778f18cf6cdb48355559648 data/create/loot_tables/blocks/polished_cut_deepslate.json -0b769d440dc98838945ba17768219badfea3453f data/create/loot_tables/blocks/polished_cut_deepslate_slab.json -74b54c5fe34c4c0ceeea99ce6199210380ac9b96 data/create/loot_tables/blocks/polished_cut_deepslate_stairs.json -43489d2705caf8de9f36c665320845ccdd0c7ad6 data/create/loot_tables/blocks/polished_cut_deepslate_wall.json -d6180778aca98e2c2398295b556a8b971bda012f data/create/loot_tables/blocks/polished_cut_diorite.json -e83da3737c8bcc2993ca3db029f197f68bfd005d data/create/loot_tables/blocks/polished_cut_diorite_slab.json -499eff1482cd7bf6e4c0251f2b93ccba964320dd data/create/loot_tables/blocks/polished_cut_diorite_stairs.json -3d000caa27e0e8fc27fa97ad41777f3b1af8ffde data/create/loot_tables/blocks/polished_cut_diorite_wall.json -c72ea192979668ace3ac5a891afeb136424be726 data/create/loot_tables/blocks/polished_cut_dripstone.json -289db964dfa1a3bb46687842f91705480b4aa34d data/create/loot_tables/blocks/polished_cut_dripstone_slab.json -34e46c923db9209bc157ba76493d267d0558984f data/create/loot_tables/blocks/polished_cut_dripstone_stairs.json -4efc923e403c4f04261d478575e430f8bc743229 data/create/loot_tables/blocks/polished_cut_dripstone_wall.json -e03d308a5c98eb424435e16aecbd82457e52ed53 data/create/loot_tables/blocks/polished_cut_granite.json -d3045f661c91703095583ce0579e86eb9a0506df data/create/loot_tables/blocks/polished_cut_granite_slab.json -662fb4cdace9926be23aae9005d2a06a065ed16d data/create/loot_tables/blocks/polished_cut_granite_stairs.json -d71a91618190f1c595326297dbcb228381aeb8cb data/create/loot_tables/blocks/polished_cut_granite_wall.json -49dff0c21322422a27a7db493bd7d814f3b15ac1 data/create/loot_tables/blocks/polished_cut_limestone.json -b6f1140bb194d28f0d005564c9bbfa4bfd784834 data/create/loot_tables/blocks/polished_cut_limestone_slab.json -5b91377b582cf3f6f0ad52e0cdbc5c4aabb11392 data/create/loot_tables/blocks/polished_cut_limestone_stairs.json -80496d1d830a352acf76fcd961a48458a3c5fb67 data/create/loot_tables/blocks/polished_cut_limestone_wall.json -d19749821587ad441fcd6c152b4bd7af9131ec42 data/create/loot_tables/blocks/polished_cut_ochrum.json -86450cc80691df1e358572432f05b57d4a14199a data/create/loot_tables/blocks/polished_cut_ochrum_slab.json -03f1e2c2313fd655799719761bc7b511164d6c15 data/create/loot_tables/blocks/polished_cut_ochrum_stairs.json -fa0198efdf68717721515d3f0a12f9f9c2f08eb9 data/create/loot_tables/blocks/polished_cut_ochrum_wall.json -aa4fce1bed426f589334260fbfc4366aafb1875d data/create/loot_tables/blocks/polished_cut_scorchia.json -eba676b6ea907ad60ef99c6b8b9dbf71ee06dc74 data/create/loot_tables/blocks/polished_cut_scorchia_slab.json -848ecd82505b1d648cdcfeb4fa44dec6b6cb3f2c data/create/loot_tables/blocks/polished_cut_scorchia_stairs.json -9af70192d5a0c26cbee6f6b06f09336cc2e1f169 data/create/loot_tables/blocks/polished_cut_scorchia_wall.json -d85820b0f7715f4f6e9c481e15a93cdbdbdbe4f3 data/create/loot_tables/blocks/polished_cut_scoria.json -3783ac0402f9338c192e2b8620ff7b4075a375df data/create/loot_tables/blocks/polished_cut_scoria_slab.json -d354fe58529cf7b7c3156f8c4eac3bbc6318b39d data/create/loot_tables/blocks/polished_cut_scoria_stairs.json -22b8de442ce455b68db26d311800cd441f9c25ba data/create/loot_tables/blocks/polished_cut_scoria_wall.json -4ad7c16a1cfbc09519fd6165046330f446324715 data/create/loot_tables/blocks/polished_cut_tuff.json -bcb32cf289683e14bb4d32d1d2d104e7ec8bceb2 data/create/loot_tables/blocks/polished_cut_tuff_slab.json -9290d6d9760152e6dfd67e899757923179aafef8 data/create/loot_tables/blocks/polished_cut_tuff_stairs.json -fada430708678ac8edbee5f9bd2d1fed02e64ca8 data/create/loot_tables/blocks/polished_cut_tuff_wall.json -11d23b3a7cffaa8e9fa3016f3f4ddc64901c7fde data/create/loot_tables/blocks/polished_cut_veridium.json -cfb3a8d50d8e29fa60168456be0eb93609e3c36c data/create/loot_tables/blocks/polished_cut_veridium_slab.json -f1600b7def719e0846f4230982299721862203eb data/create/loot_tables/blocks/polished_cut_veridium_stairs.json -8bc7e42bcfad5940d9fbfc0a7b5486b4ea9cddc2 data/create/loot_tables/blocks/polished_cut_veridium_wall.json -d36db9ed79baff41c8404c68fda23414994503cb data/create/loot_tables/blocks/portable_fluid_interface.json -8f5c2420ca9b46d47600c0ccf3c7429fb9241f10 data/create/loot_tables/blocks/portable_storage_interface.json -84b850c78e48d950f14508f0b4773d27b2e6dee1 data/create/loot_tables/blocks/powered_latch.json -658d76088e3926c72da86a75b4b14946bd809239 data/create/loot_tables/blocks/powered_shaft.json -6fa5ec40ad639e4ad08b52ee1e2546853405569a data/create/loot_tables/blocks/powered_toggle_latch.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/pulley_magnet.json -f7430b020a51acd296cbc4813908db5e2b3ff69c data/create/loot_tables/blocks/pulse_extender.json -831a4939df3f92c87294962080e5047591ea63f9 data/create/loot_tables/blocks/pulse_repeater.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/purple_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/purple_sail.json -e35d1a2f4daccb9cb0e00633e1e21133280f126b data/create/loot_tables/blocks/purple_seat.json -35688f3fa3245f583b198e27a2b123ce073503e5 data/create/loot_tables/blocks/purple_toolbox.json -fa8f1c9b3c87bf170cc409d806b330501376da39 data/create/loot_tables/blocks/purple_valve_handle.json -050f02bb5e42b7f4fc0e8dd92efc4266724f52eb data/create/loot_tables/blocks/radial_chassis.json -fee742e0fcd8c3e6e5553d4290cc698fb0a7679f data/create/loot_tables/blocks/railway_casing.json -77f12177b8850282229f0adf6cc8a10b1e334238 data/create/loot_tables/blocks/raw_zinc_block.json -07402ea8550107f765a5937dfe180a3800f12f84 data/create/loot_tables/blocks/redstone_contact.json -542ebb76861587547bcf94b886f602288fa89f01 data/create/loot_tables/blocks/redstone_link.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/red_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/red_sail.json -bd900a72a8bbd70b8049f35aeb829926b0910703 data/create/loot_tables/blocks/red_seat.json -1c1787bfc09f5cbb9e2c61f37856413d0994ba17 data/create/loot_tables/blocks/red_toolbox.json -7923bdefac57ee57242ca39f8d97ad9c349fcfbc data/create/loot_tables/blocks/red_valve_handle.json -567770d270aadeaa8b8193a919237a0f31d39b8a data/create/loot_tables/blocks/refined_radiance_casing.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/rope.json -8a86698193be451efbce89b67e571fac056119d2 data/create/loot_tables/blocks/rope_pulley.json -087780f0b9f16dd2829871ea560b5db66caae537 data/create/loot_tables/blocks/rose_quartz_block.json -00f00dcb09fb53f9a7d836125a36f7a28829c892 data/create/loot_tables/blocks/rose_quartz_lamp.json -297482d94ce32919fb03d29748e1894bcd3c093b data/create/loot_tables/blocks/rose_quartz_tiles.json -81206cee7576bdfaeb949569e81e6c0e3c1c02f4 data/create/loot_tables/blocks/rotation_speed_controller.json -437e5799f6319b2e60b95bde781a8ee7a2c9cbca data/create/loot_tables/blocks/sail_frame.json -7f67bcb104376d522cfad1901bee3711305d9a58 data/create/loot_tables/blocks/schematicannon.json -0ae70fbcd57edd9cd53e2a20faa068bb0e7abb9d data/create/loot_tables/blocks/schematic_table.json -6d4f52194e33877826328e6d3bbf94ba543397de data/create/loot_tables/blocks/scorchia.json -06a714df2400fdbdce4abc7ec2e467cddf633686 data/create/loot_tables/blocks/scorchia_pillar.json -0cd14ef2ffb45b7030b5dc5312e1edf1d0816e3b data/create/loot_tables/blocks/scoria.json -b3d3995ba63c94da77b562af2672f9ea58b45691 data/create/loot_tables/blocks/scoria_pillar.json -aeae7ea7b0e81b4433f47d5da3b92d48acdb1e17 data/create/loot_tables/blocks/secondary_linear_chassis.json -ea437e27e15909985ee93a5e92c7a9ec0cfd70e1 data/create/loot_tables/blocks/sequenced_gearshift.json -f380c7fcc21651e3ffb5425150d8340b86ec6da8 data/create/loot_tables/blocks/shadow_steel_casing.json -658d76088e3926c72da86a75b4b14946bd809239 data/create/loot_tables/blocks/shaft.json -4268246cfe056205a552b9279ee9222aa151144d data/create/loot_tables/blocks/small_andesite_bricks.json -1ee8ce0a4aa7daf07738facbf0f2a89c545c548e data/create/loot_tables/blocks/small_andesite_brick_slab.json -47a2f4d5d5b49dfaef20b9caf7f3227728afe152 data/create/loot_tables/blocks/small_andesite_brick_stairs.json -ebdeb927ac80a9a537b308f97ff2a9099f80292d data/create/loot_tables/blocks/small_andesite_brick_wall.json -2464db69910366ee6bf4ea602eb5b5b576489805 data/create/loot_tables/blocks/small_asurine_bricks.json -b1d0bf435d84ac214e82c2285ecfeb6a3ab57544 data/create/loot_tables/blocks/small_asurine_brick_slab.json -3dcc08d113f161f7f300291be95faa0fab1e663d data/create/loot_tables/blocks/small_asurine_brick_stairs.json -7b5070d41ce1e20de2cd4331b8c12ad5457e0699 data/create/loot_tables/blocks/small_asurine_brick_wall.json -fee742e0fcd8c3e6e5553d4290cc698fb0a7679f data/create/loot_tables/blocks/small_bogey.json -c3497a5f77a35b15977dc539f3b53d8f62348b08 data/create/loot_tables/blocks/small_calcite_bricks.json -f176e0f9135c5bc305e1cab2a8ac5fa9469e8109 data/create/loot_tables/blocks/small_calcite_brick_slab.json -c0661811b5e96c4d9eeb34ba53120bbc73fce3c2 data/create/loot_tables/blocks/small_calcite_brick_stairs.json -71bfd38ab95ea257e5212f1dff2fbb57e60f2a1f data/create/loot_tables/blocks/small_calcite_brick_wall.json -4f21812a3ec90e8159cc7a51aed0308a9f29e3e8 data/create/loot_tables/blocks/small_crimsite_bricks.json -242a6d6888b5f924feb202d67a63002f131834df data/create/loot_tables/blocks/small_crimsite_brick_slab.json -96003a52801c92752ce72e7c9ca696cbd754e711 data/create/loot_tables/blocks/small_crimsite_brick_stairs.json -39cd5b918d614f0e3b3b37920379e558bb631fa3 data/create/loot_tables/blocks/small_crimsite_brick_wall.json -91c0e7eb273e86c3c7f30f4d645c3de05a79da0a data/create/loot_tables/blocks/small_deepslate_bricks.json -683da7ed1fb98ddaab31f26fb9caa11b3dc357c6 data/create/loot_tables/blocks/small_deepslate_brick_slab.json -75ae856cdecbe709627621c044625ef1d15c434b data/create/loot_tables/blocks/small_deepslate_brick_stairs.json -c40a9b7d37e08c8f1f35a470a88a7ac1f19e610b data/create/loot_tables/blocks/small_deepslate_brick_wall.json -03df6744a1db9e3ddd515b415292f8b856e8db37 data/create/loot_tables/blocks/small_diorite_bricks.json -44143d9685e2077114dae50ac395e0a5a6fc2554 data/create/loot_tables/blocks/small_diorite_brick_slab.json -69c532f54a97181a241e5ec80ce9b7e29ec32a7d data/create/loot_tables/blocks/small_diorite_brick_stairs.json -af3efc0d4c6979493801363f0a0423781605b9d0 data/create/loot_tables/blocks/small_diorite_brick_wall.json -18bdcdb48ae522386e3230c07d5cdf788f05d534 data/create/loot_tables/blocks/small_dripstone_bricks.json -7a52537f9b9d64a8a3db07a5d3aab3a5ac27651b data/create/loot_tables/blocks/small_dripstone_brick_slab.json -1a12d476ebd36990a101ef581a47728b6ff2601d data/create/loot_tables/blocks/small_dripstone_brick_stairs.json -a8302ade92c7f34229812fbb1190fd235264e07b data/create/loot_tables/blocks/small_dripstone_brick_wall.json -f009cc1c5bfe90ed0951c04df5372148991b718c data/create/loot_tables/blocks/small_granite_bricks.json -894021477c6ed30b7d6036581ac57dfeaf021099 data/create/loot_tables/blocks/small_granite_brick_slab.json -6989cba715d7899d08d89593dd98034af7cacc04 data/create/loot_tables/blocks/small_granite_brick_stairs.json -112d322f1ddaf1e2dc79266e51af1ee891288e61 data/create/loot_tables/blocks/small_granite_brick_wall.json -2e7e562370a166845f82ce36a2349921f3df2331 data/create/loot_tables/blocks/small_limestone_bricks.json -59292049ef60db1c82ca40a5baa5474815958d91 data/create/loot_tables/blocks/small_limestone_brick_slab.json -1cc652397c397419ef106bf70e63fb277e5352f4 data/create/loot_tables/blocks/small_limestone_brick_stairs.json -6f94b4ae0209c5e7655dae887902e3cf4a0eb97b data/create/loot_tables/blocks/small_limestone_brick_wall.json -98df3c417ff81dd037cf17051202c94b3983a7b8 data/create/loot_tables/blocks/small_ochrum_bricks.json -4983d4e46e34dc053afc6c41604c37007c226ffd data/create/loot_tables/blocks/small_ochrum_brick_slab.json -d55a8ffa557aa9b770ff08eb6ecf0d0946142c94 data/create/loot_tables/blocks/small_ochrum_brick_stairs.json -d1d8b0d993c88106c61102612f3aaea240d1d69d data/create/loot_tables/blocks/small_ochrum_brick_wall.json -18a2a54f96451d6ca0bcd8af9f6d20b6f0da14a1 data/create/loot_tables/blocks/small_rose_quartz_tiles.json -967575e3428c7cbdafe714dec324f4a56c16a069 data/create/loot_tables/blocks/small_scorchia_bricks.json -f150bfbcecaf95971207dd3b6dc75652003d9a4e data/create/loot_tables/blocks/small_scorchia_brick_slab.json -8a3df3de45bb184cad20d6c8f5a38a0715e05228 data/create/loot_tables/blocks/small_scorchia_brick_stairs.json -0ca656af1c4d925adf4804a50cd1cc993f61900b data/create/loot_tables/blocks/small_scorchia_brick_wall.json -ab3170183e5913ced28c363d7d2e00006b9e2484 data/create/loot_tables/blocks/small_scoria_bricks.json -62169e179b50f4286b31ad61ff470363c5b0d699 data/create/loot_tables/blocks/small_scoria_brick_slab.json -91ee6607b8f7ccfa6457e47516246178ee7c734d data/create/loot_tables/blocks/small_scoria_brick_stairs.json -2b53ab399ef77b7172fcb946a4f201525fba9fbf data/create/loot_tables/blocks/small_scoria_brick_wall.json -5edaff383b55beef17dc86643b7a0e2f4040a4b4 data/create/loot_tables/blocks/small_tuff_bricks.json -bad4f61264beffce3c2053fbd43a0e42e8f5548b data/create/loot_tables/blocks/small_tuff_brick_slab.json -9589a89c7d7fec924ac6ee003f025a3b2057b5b2 data/create/loot_tables/blocks/small_tuff_brick_stairs.json -9064375f398b9425814199722b3d91af0d18eca0 data/create/loot_tables/blocks/small_tuff_brick_wall.json -ab7274cfb94fd302beed5a4f0c0bddc0e44254aa data/create/loot_tables/blocks/small_veridium_bricks.json -044f1e794c31cab1233627033db30859f3dd9a19 data/create/loot_tables/blocks/small_veridium_brick_slab.json -4aa1c72bd9cc0421006e0a3c568b4a1176411ed3 data/create/loot_tables/blocks/small_veridium_brick_stairs.json -483c256c0f8890083919a15371335c4865f0668d data/create/loot_tables/blocks/small_veridium_brick_wall.json -e00d2a91ad0c984a175b20ea76d0d97a68219097 data/create/loot_tables/blocks/smart_chute.json -aeef9300a4f721957066e713d0bc2421316c3e51 data/create/loot_tables/blocks/smart_fluid_pipe.json -395fdef86a94a42fd8957865f5ce9e3c00ef8866 data/create/loot_tables/blocks/speedometer.json -4be0bc34cc949a8a071d49d1d8e2e1e77e636493 data/create/loot_tables/blocks/spout.json -05430553198d5bf02b53873e7eec47af381a6ad3 data/create/loot_tables/blocks/spruce_window.json -60c1c9eb6a3151c5bc38f07e57c69d39f9b0bda3 data/create/loot_tables/blocks/spruce_window_pane.json -0e7ef16e08c9e6a69feda428f276356904220a60 data/create/loot_tables/blocks/steam_engine.json -8046528ebababb91548db3d9a5f8eefa5fc383f9 data/create/loot_tables/blocks/steam_whistle.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/steam_whistle_extension.json -008ab79059db16b785eaed7d29bae07902e0cf18 data/create/loot_tables/blocks/sticker.json -f3e65433dca96029dfd7b62a0e065c12e03c8577 data/create/loot_tables/blocks/sticky_mechanical_piston.json -0c1c96cd4282571e5a687fbf307c2aff3e141286 data/create/loot_tables/blocks/stockpile_switch.json -d4349935a15fd210e7d3aac28c7627138ac3d40b data/create/loot_tables/blocks/stressometer.json -ea842a29275cdbbb4e2d74e49353f6dba18c941b data/create/loot_tables/blocks/tiled_glass.json -8312dcf33d6ee53b1d160299bcadae2a32c55068 data/create/loot_tables/blocks/tiled_glass_pane.json -1156b83b9edbb82278dc1939a936f369dcf66d09 data/create/loot_tables/blocks/track.json -fe945a7be2b853a41dfad1788b710bbcc8195d21 data/create/loot_tables/blocks/track_observer.json -a2cf2f583ae516dd83c20745d7434bf7b7be074c data/create/loot_tables/blocks/track_signal.json -cc2bdf7a0b831911a716f647ea2ae03d5fca79ec data/create/loot_tables/blocks/track_station.json -61bd78ea7d0941dd4afc533b63e18c0ef45aee94 data/create/loot_tables/blocks/train_door.json -39b0970f3d0079763017a4a1e5ba286d9bb52ca8 data/create/loot_tables/blocks/train_trapdoor.json -331a45449be223374cc73205970deb1d182a95ac data/create/loot_tables/blocks/tuff_pillar.json -468c0d9391be531525aa8793d2dfcf9e273eed91 data/create/loot_tables/blocks/turntable.json -dfefc9afd631cfdff543c11ffd8682617793e204 data/create/loot_tables/blocks/veridium.json -2d92edfc895196cb1fa89bd18a7e7d0c2f46c8da data/create/loot_tables/blocks/veridium_pillar.json -2fdc23baa36d0a3d3008193d362abcac8b8ac93f data/create/loot_tables/blocks/vertical_framed_glass.json -8105ac2ef881804d48f5893a829b64351c292721 data/create/loot_tables/blocks/vertical_framed_glass_pane.json -8e3f9f7ea93908d7cdfe2a11142e1f705c0b8211 data/create/loot_tables/blocks/warped_window.json -f60d8b639de25d4829505d994e19afbd1e34df85 data/create/loot_tables/blocks/warped_window_pane.json -17207bb6d7180aa86a59a205f5cd88fea5ec20dd data/create/loot_tables/blocks/water_wheel.json -2b2a4bde1a1c86393b28fa3ff9b81ef1ddeed22d data/create/loot_tables/blocks/water_wheel_structure.json -7037fe5803d3cba148d6a3c608bf3516ce101fe9 data/create/loot_tables/blocks/waxed_copper_shingles.json -46ee38f31f486439c756679ff2e0d99dd08170e0 data/create/loot_tables/blocks/waxed_copper_shingle_slab.json -1bf2316aa8826ed347cd8d4f34c541ca370e885e data/create/loot_tables/blocks/waxed_copper_shingle_stairs.json -3a29061cd3507e735378415cdcde52c3fe73f131 data/create/loot_tables/blocks/waxed_copper_tiles.json -c99013b9d124e0bb0db5befbb6e236ea553c30c8 data/create/loot_tables/blocks/waxed_copper_tile_slab.json -9e239587f7a66bcb256ea678209149f8427b4d0e data/create/loot_tables/blocks/waxed_copper_tile_stairs.json -a6303da1058b31feca06b5c8e8b3a7f843e40773 data/create/loot_tables/blocks/waxed_exposed_copper_shingles.json -74ec2f5f0c43960f0871cbe625b279254d248f1a data/create/loot_tables/blocks/waxed_exposed_copper_shingle_slab.json -7eb68ab06ab452cfe7b5fdbf56d16111fb9aabfc data/create/loot_tables/blocks/waxed_exposed_copper_shingle_stairs.json -4c9b09b347835e157ee21bb471343288029774f4 data/create/loot_tables/blocks/waxed_exposed_copper_tiles.json -1936dfd5f8d7617eeaf5924712e3027bc9cfeb6e data/create/loot_tables/blocks/waxed_exposed_copper_tile_slab.json -da38da6a43112b333b47d099dcdee98e6beaf815 data/create/loot_tables/blocks/waxed_exposed_copper_tile_stairs.json -e4c666b0e201dce09494d5c310259c663984e445 data/create/loot_tables/blocks/waxed_oxidized_copper_shingles.json -72638d4c759ae9270c6596a95b83a771243dfbaa data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_slab.json -6686457cac793e9c6e1cd06677436e2a213536dc data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_stairs.json -c840f139ec7763d629f1a46c0b91b979e63a94aa data/create/loot_tables/blocks/waxed_oxidized_copper_tiles.json -7e399741ecca0f8d400a5cdaf4f81387501acfdc data/create/loot_tables/blocks/waxed_oxidized_copper_tile_slab.json -15b1e187163c07e78d96b1c4bdd6fdf9cfa00c14 data/create/loot_tables/blocks/waxed_oxidized_copper_tile_stairs.json -52d06cc860a5633a401abc21bd33b29ebd4677a0 data/create/loot_tables/blocks/waxed_weathered_copper_shingles.json -15741ad3b837720461e1f8f24d81388dc1c905fc data/create/loot_tables/blocks/waxed_weathered_copper_shingle_slab.json -bf29dd56f168b709d95a0d40414750f2012058c0 data/create/loot_tables/blocks/waxed_weathered_copper_shingle_stairs.json -e4dfa154bcfaac73585619db7050c9a1f8a6c12a data/create/loot_tables/blocks/waxed_weathered_copper_tiles.json -906abc6c64fd32a19b6a8153f0353845236a8c24 data/create/loot_tables/blocks/waxed_weathered_copper_tile_slab.json -03ba1325e6dc737071bf9a40e136494e3ceb398b data/create/loot_tables/blocks/waxed_weathered_copper_tile_stairs.json -8e158f2a4dcf44eeba765dcabe39a7eea04601cb data/create/loot_tables/blocks/weathered_copper_shingles.json -cee4cf666ae788dada60bf68a800c5ba6a555a40 data/create/loot_tables/blocks/weathered_copper_shingle_slab.json -b6c8464730dc57e1f3a75d3f7449e662935e905e data/create/loot_tables/blocks/weathered_copper_shingle_stairs.json -95d06b6d8c2aafe7118323b99f38d1bf7a96ba71 data/create/loot_tables/blocks/weathered_copper_tiles.json -8bab897b00ffc344b66b3908aeb7054b1a224df6 data/create/loot_tables/blocks/weathered_copper_tile_slab.json -c232e78a2c218eacc335b28d64c58507196bf294 data/create/loot_tables/blocks/weathered_copper_tile_stairs.json -3d45d36fed5c722824f321754f0b7efa8c1bd080 data/create/loot_tables/blocks/weighted_ejector.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/white_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/white_sail.json -0385f329cb44fb3446916329135303a5724f0a62 data/create/loot_tables/blocks/white_seat.json -f4a1a05c4fa1a18fbef9a27aeceb7b215d4e215d data/create/loot_tables/blocks/white_toolbox.json -cd58f614ea94466ba299ed4701813ca3387b6d95 data/create/loot_tables/blocks/white_valve_handle.json -a08f47f0832fabad79ba3e81c8ba959fd8b89eda data/create/loot_tables/blocks/windmill_bearing.json -96e8abe73af557303263dffc13fc34e15c02f906 data/create/loot_tables/blocks/wooden_bracket.json -f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/yellow_nixie_tube.json -9466ffd9553b2b18e193543fa00f698ddd21d7d3 data/create/loot_tables/blocks/yellow_sail.json -6963efbd897df38a15ca16fbf8c1785dd3d54010 data/create/loot_tables/blocks/yellow_seat.json -88a73484917a9bc3c74e5224dd11366d01ed38b6 data/create/loot_tables/blocks/yellow_toolbox.json -3cde6cb4e831f953987b33b59549e6ad1904fee7 data/create/loot_tables/blocks/yellow_valve_handle.json -65bc3646c74c58f9d4a8fc213ae2c464d4c756ca data/create/loot_tables/blocks/zinc_block.json -991d2706fbbb28d4d830af85a8799d49ec6f6881 data/create/loot_tables/blocks/zinc_ore.json -76983b5bc302bbaa6b3ebe66c5c9a9b66ef133e0 data/create/recipes/acacia_window.json -652d90f03917e22a3bd66bc092f7922d2ca08e1e data/create/recipes/acacia_window_pane.json +7dbef6df108c395c2481c8183517c9ea568a7d88 data/create/advancements/recipes/building_blocks/acacia_window.json +8005cd18b80bcee4f5a2111ee78f87d117d6fcdf data/create/advancements/recipes/building_blocks/acacia_window_pane.json +a2b7fe4d1b1c8d173da0e6dfcf41379648a92a80 data/create/advancements/recipes/building_blocks/andesite_from_stone_types_andesite_stonecutting.json +ab03b83587129f06998ec86e9c417e622baff713 data/create/advancements/recipes/building_blocks/andesite_pillar_from_stone_types_andesite_stonecutting.json +676eca0ab460b460ae76c66926ac91da4612a201 data/create/advancements/recipes/building_blocks/asurine_from_stone_types_asurine_stonecutting.json +fb36a2f400347c3291978a49e59374f3ac459f14 data/create/advancements/recipes/building_blocks/asurine_pillar_from_stone_types_asurine_stonecutting.json +7a7eb78c70e1591d339115b367cd3114fb7c1799 data/create/advancements/recipes/building_blocks/birch_window.json +6df6a6885c3ebf92f98f105be16d8e0c80da19f0 data/create/advancements/recipes/building_blocks/birch_window_pane.json +0d724aefa51b969dbadb59b1193172a44ecf5644 data/create/advancements/recipes/building_blocks/calcite_from_stone_types_calcite_stonecutting.json +537fe5dffa659e5838379587fbd84f2f641551ea data/create/advancements/recipes/building_blocks/calcite_pillar_from_stone_types_calcite_stonecutting.json +09f332cd34e6a92af9e8e4e757418c7ba8b536da data/create/advancements/recipes/building_blocks/copper_shingles_from_ingots_copper_stonecutting.json +55214a0fd27318b17163cace66c7525785127ef8 data/create/advancements/recipes/building_blocks/copper_shingle_slab.json +fb4210dbbfb74459e10da94a540f3bfdf91c4a8d data/create/advancements/recipes/building_blocks/copper_shingle_slab_from_copper_shingles_stonecutting.json +31b04ac1b117fb65f5129c5bbb48e42c1c4c1003 data/create/advancements/recipes/building_blocks/copper_shingle_stairs.json +bef4a9a4c2e722d4f086d6b4c9d6fa1d0836ec10 data/create/advancements/recipes/building_blocks/copper_shingle_stairs_from_copper_shingles_stonecutting.json +f66a48f01afb4fa1babee4a8c28b032280c3ac9e data/create/advancements/recipes/building_blocks/copper_tiles_from_ingots_copper_stonecutting.json +ef79744ebf31453d1c81789afed7b717837b3515 data/create/advancements/recipes/building_blocks/copper_tile_slab.json +8e9997c43b1c06521fe8d38b04ccb3f04c93d537 data/create/advancements/recipes/building_blocks/copper_tile_slab_from_copper_tiles_stonecutting.json +a2609aa8b5453f2294f38c81d26e0b8dad71087d data/create/advancements/recipes/building_blocks/copper_tile_stairs.json +d47e46c66bf69e8310e6687716858842e8aed7b5 data/create/advancements/recipes/building_blocks/copper_tile_stairs_from_copper_tiles_stonecutting.json +cc14d10c75ab0fdd7c54db1922e5e56667739fef data/create/advancements/recipes/building_blocks/copycat_panel_from_ingots_zinc_stonecutting.json +55d2812be912c857ff666d581174378857d3bce2 data/create/advancements/recipes/building_blocks/copycat_step_from_ingots_zinc_stonecutting.json +8615fc107b1f4df86711081a9dccac8631b02e6b data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingles_from_honeycomb.json +0e0eba8550768ef69087dff8112814f25233fab7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json +2c960d55273df4c0c8c33b2c329175b35b18fc8c data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json +fa8f3ed9a4c6f0c3cd4c21b0ae4dc8ca4dba8678 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tiles_from_honeycomb.json +d6f2aa7fd10c96f71c47bdabb3e53dc4c4e73706 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json +eca165eee20adba1557ccc74ef50ee90311b3019 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json +88a236933e8dfe0d809bda098d16782288c4800c data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json +301149dabc4dce290b4884f4ed3cb2132123adf0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json +f360dce7bece72672f2624710c88edbe3e3f8885 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json +bc27959288766492746f41c4810350dcef1b320d data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json +7ceb4b74ff84ed404518b6cb5e1432dac5903b5f data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json +ec1eec3bc25534484cb264134e62b578525422aa data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json +2e8f1da032110e8c5ec375ffd425e5eed7f58cae data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json +e34abb4d51c1d00419fc3d3799ca0d9fe7ea1027 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json +9471e190beb603f022fb234f2cf35b5b4b93f0c0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json +17fe14b753953a68887cd001fcaa264ef031463f data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json +2577754364f05264fac325f67597230d01fa0c1d data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json +003e384d9594a4e6ef5678e74f04b56de047dbde data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json +5009a82a897a15407fec785005107b0d228fffe7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json +70ce32937dcf349dce77fef8022bc0c15863f6a6 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json +1fc498238dcc2705152573ba7f74bb50e7e66ca7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json +d12aa3dd5457327224fd007211878eec21043971 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json +6f461d7036de914c636b7916dc798775ccf25be1 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json +3bc9efcddecd23fd06c6056a0ee7b937959cecc0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json +3064c52dea808a00c211bfedb96106b563f480da data/create/advancements/recipes/building_blocks/crafting/kinetics/black_seat.json +f07a0b21db200ab68a7df02db519869f68953286 data/create/advancements/recipes/building_blocks/crafting/kinetics/black_seat_from_other_seat.json +80ac4db5c53c7efc2666a7abb4e2e876c5f86588 data/create/advancements/recipes/building_blocks/crafting/kinetics/blue_seat.json +a29782b183af1d4c54e6abcb21fdab1b69bfe549 data/create/advancements/recipes/building_blocks/crafting/kinetics/blue_seat_from_other_seat.json +6cbf108ee6610405d5964d1363ec384744356abc data/create/advancements/recipes/building_blocks/crafting/kinetics/brown_seat.json +75954a037b5e9029e5aef6b190bed27b276836c4 data/create/advancements/recipes/building_blocks/crafting/kinetics/brown_seat_from_other_seat.json +f288eaf3a8aaba9e807f1e652c6091ed4fda3460 data/create/advancements/recipes/building_blocks/crafting/kinetics/cyan_seat.json +28c16ea5c4df28f6140679a92d08dcb3d8eb802f data/create/advancements/recipes/building_blocks/crafting/kinetics/cyan_seat_from_other_seat.json +603a08276977ff84ae3abc418c1fd24d7193910b data/create/advancements/recipes/building_blocks/crafting/kinetics/gray_seat.json +234d91cb5b3ee787c2e47670ee709101aee9b4a3 data/create/advancements/recipes/building_blocks/crafting/kinetics/gray_seat_from_other_seat.json +14917ae275028645b627c00c7413bf75b2cd72bf data/create/advancements/recipes/building_blocks/crafting/kinetics/green_seat.json +0f18fe0dbc1da65fb954792cac8dbb37f42d2fa5 data/create/advancements/recipes/building_blocks/crafting/kinetics/green_seat_from_other_seat.json +d8375271c1a6ccf8f701d94e9339f562f1869dc3 data/create/advancements/recipes/building_blocks/crafting/kinetics/light_blue_seat.json +97567a6d8c598ac27ee26dc13c83b93f1bc43ea4 data/create/advancements/recipes/building_blocks/crafting/kinetics/light_blue_seat_from_other_seat.json +3c7e6cf7d955002f68801b145a61aa54a1c80d0f data/create/advancements/recipes/building_blocks/crafting/kinetics/light_gray_seat.json +ad90d0ef4ffa53e80740372dd31dbaf0a89a276c data/create/advancements/recipes/building_blocks/crafting/kinetics/light_gray_seat_from_other_seat.json +87730e1f518f1353cee55922071e3763b9aa671a data/create/advancements/recipes/building_blocks/crafting/kinetics/lime_seat.json +db4980856372b55b95f1c5ec2bd93332973aff8a data/create/advancements/recipes/building_blocks/crafting/kinetics/lime_seat_from_other_seat.json +752a09b49fe34d553264b7e9d90cf9c14e520829 data/create/advancements/recipes/building_blocks/crafting/kinetics/magenta_seat.json +829f03bccfb66c5fca6d621bdcdf0e857ac743c6 data/create/advancements/recipes/building_blocks/crafting/kinetics/magenta_seat_from_other_seat.json +24896deb126e1f405309bbfd611a73dea85ebb1b data/create/advancements/recipes/building_blocks/crafting/kinetics/orange_seat.json +033e35ae6b88254a13f829daff3ffc1817b04eb6 data/create/advancements/recipes/building_blocks/crafting/kinetics/orange_seat_from_other_seat.json +24fdead2e00f0b1d5faf312d95defacf4d9d4c58 data/create/advancements/recipes/building_blocks/crafting/kinetics/pink_seat.json +7f276c453f50ef9e1ebc205df84eee260d8e0c99 data/create/advancements/recipes/building_blocks/crafting/kinetics/pink_seat_from_other_seat.json +329883c2298f12cba4542c07e2063cf746ebf6bb data/create/advancements/recipes/building_blocks/crafting/kinetics/purple_seat.json +cee62b5f6d8421565cd920a9314e2d0b1982a1e5 data/create/advancements/recipes/building_blocks/crafting/kinetics/purple_seat_from_other_seat.json +50072bcb2e010fd58fc58253e8b989e67b37dcf2 data/create/advancements/recipes/building_blocks/crafting/kinetics/red_seat.json +43016522690fac6730e4ca2c49e937706f524491 data/create/advancements/recipes/building_blocks/crafting/kinetics/red_seat_from_other_seat.json +fc6babcc211f6ed7f231ed8da12f42f0ab858f4f data/create/advancements/recipes/building_blocks/crafting/kinetics/white_seat.json +8ef5d43ae4344f548efb55793ecc889cc011c0a1 data/create/advancements/recipes/building_blocks/crafting/kinetics/white_seat_from_other_seat.json +415435d450d42d97335416c6faa12538dc8e0fb6 data/create/advancements/recipes/building_blocks/crafting/kinetics/yellow_seat.json +e71219bcfe8c712fc7e7368c2933533b3c5ef121 data/create/advancements/recipes/building_blocks/crafting/kinetics/yellow_seat_from_other_seat.json +f3188b24f8108be4219016689a4768f826b4fef3 data/create/advancements/recipes/building_blocks/crimsite_from_stone_types_crimsite_stonecutting.json +e88373b83226d860b0c2131213f5d3b09f31ab96 data/create/advancements/recipes/building_blocks/crimsite_pillar_from_stone_types_crimsite_stonecutting.json +09f7122cf360fd56bde2b1659bbed526f9a119c4 data/create/advancements/recipes/building_blocks/crimson_window.json +b5234c6050bc0c6fe872a5ddc87d46ba39e07971 data/create/advancements/recipes/building_blocks/crimson_window_pane.json +b32f4345517c3c7299a06489325bd85f987145dc data/create/advancements/recipes/building_blocks/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json +22fe2e61d7e9836d9f71c39bfbba50efc2fa184d data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab.json +6d8d28364f1016dfd1d7cbe4a2637e2b6224e4d8 data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab_from_stone_types_andesite_stonecutting.json +39e904f66d2194de5437b5da2f8db8b6f03d78f4 data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab_recycling.json +0194cd692cd761e67c904c612cc7a3bdeef9e7e5 data/create/advancements/recipes/building_blocks/cut_andesite_brick_stairs.json +480c696956b99c96cbaf46e7dad9711c40680ec8 data/create/advancements/recipes/building_blocks/cut_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json +8d504cdb99f5dc59bef5ff35d0b443f2f4ba21d2 data/create/advancements/recipes/building_blocks/cut_andesite_brick_wall.json +e1b8e5906d54368c98867b83143dc7acc7b0aa28 data/create/advancements/recipes/building_blocks/cut_andesite_brick_wall_from_stone_types_andesite_stonecutting.json +d5b44158f9a98d874d941fc4df99de7a2657af21 data/create/advancements/recipes/building_blocks/cut_andesite_from_stone_types_andesite_stonecutting.json +c11998f554bbd42efdbdf58cf8efe5bcf69230de data/create/advancements/recipes/building_blocks/cut_andesite_slab.json +1f457c0e816e4dd70e1a960015d2004814d11926 data/create/advancements/recipes/building_blocks/cut_andesite_slab_from_stone_types_andesite_stonecutting.json +34dcbda76f02282ea52af7f7dea2c6f2a604ac9b data/create/advancements/recipes/building_blocks/cut_andesite_slab_recycling.json +a4d7adf49472a2069bad72defd39b111b83def3d data/create/advancements/recipes/building_blocks/cut_andesite_stairs.json +6d38bb2b9812761c594ebdf717284ba8d32e88bc data/create/advancements/recipes/building_blocks/cut_andesite_stairs_from_stone_types_andesite_stonecutting.json +2f6b2296b11e0e743d68749e65af5ffa0f374998 data/create/advancements/recipes/building_blocks/cut_andesite_wall.json +caf3b1c62d0f8df3ce126535f0566c899577bedb data/create/advancements/recipes/building_blocks/cut_andesite_wall_from_stone_types_andesite_stonecutting.json +54188623046e989d21e6e155933e4084fb2882c4 data/create/advancements/recipes/building_blocks/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json +536a2bed2ed1e7e249886ef376c96a8d5a1facdc data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab.json +a4e833cadfbb82222a70d66524e804c83ea13f7b data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab_from_stone_types_asurine_stonecutting.json +610163ac2f4b06121931a81ac4b3df39ece61998 data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab_recycling.json +0f00006c878b8a15430ba7659d5f3d5dfbeb4621 data/create/advancements/recipes/building_blocks/cut_asurine_brick_stairs.json +f92f31e80cc026160217afb6c757987f75ed0b33 data/create/advancements/recipes/building_blocks/cut_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json +fa6dc7eaa32652a00a7217ae25967de0791088b6 data/create/advancements/recipes/building_blocks/cut_asurine_brick_wall.json +33f361369bfd92f53b3e40c837b336edd04a26e9 data/create/advancements/recipes/building_blocks/cut_asurine_brick_wall_from_stone_types_asurine_stonecutting.json +a6b871faa10badaaaa1a0ebbba94c4f2f627c43f data/create/advancements/recipes/building_blocks/cut_asurine_from_stone_types_asurine_stonecutting.json +719e1d4fea3457f2990be6a5d6cd87915d546217 data/create/advancements/recipes/building_blocks/cut_asurine_slab.json +586918291dda711c79941cf484cb62dbb853a271 data/create/advancements/recipes/building_blocks/cut_asurine_slab_from_stone_types_asurine_stonecutting.json +b28bd7d3153b19d21351d2e785183e5f0dca63d0 data/create/advancements/recipes/building_blocks/cut_asurine_slab_recycling.json +bd2a630d242ae9c89b071b0401285068071a346c data/create/advancements/recipes/building_blocks/cut_asurine_stairs.json +03d7b1609d161043e28661d74f53b06d4408f561 data/create/advancements/recipes/building_blocks/cut_asurine_stairs_from_stone_types_asurine_stonecutting.json +cba4a6feaf695e665204cac36f9109ba941b12a6 data/create/advancements/recipes/building_blocks/cut_asurine_wall.json +3327651dd3f2fd778abdcfe70d25137d916f3def data/create/advancements/recipes/building_blocks/cut_asurine_wall_from_stone_types_asurine_stonecutting.json +44873f9d05abde7d52a6eacdf3573d8b69c69452 data/create/advancements/recipes/building_blocks/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json +a070ffe63c182b33c4c6faedb391f51a209c0e27 data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab.json +7ba1e7add81422599f798153e4fd069e9fbfdebf data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab_from_stone_types_calcite_stonecutting.json +f5e80ec393c306485d666d6f9f91c55d9f1ba592 data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab_recycling.json +30f6868a80a80d70462b906f0bbfa4d310b2f6b5 data/create/advancements/recipes/building_blocks/cut_calcite_brick_stairs.json +627f85aa63133cf95dd828092e0232b9ec8acfd5 data/create/advancements/recipes/building_blocks/cut_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json +d8870e522a68274cc90eab07ea17b7b6cdc5a16c data/create/advancements/recipes/building_blocks/cut_calcite_brick_wall.json +cdf5927f3c1b3ef8904f38f66317412799e189fb data/create/advancements/recipes/building_blocks/cut_calcite_brick_wall_from_stone_types_calcite_stonecutting.json +9f8c31b0db2aab8f1c8f42bcef15a74bc36887d4 data/create/advancements/recipes/building_blocks/cut_calcite_from_stone_types_calcite_stonecutting.json +857666ad1c6a5cc886f6896a18f560098afaa67b data/create/advancements/recipes/building_blocks/cut_calcite_slab.json +c55074cd091b0e078105abdc940c62afa8984265 data/create/advancements/recipes/building_blocks/cut_calcite_slab_from_stone_types_calcite_stonecutting.json +7e76ac29edff072def92a33184b27da50075773a data/create/advancements/recipes/building_blocks/cut_calcite_slab_recycling.json +730459edf10a8e4dc5f39c0258ebd6f0e043b692 data/create/advancements/recipes/building_blocks/cut_calcite_stairs.json +ba3378e1d08de2af0b2a725727cf9f68bda60044 data/create/advancements/recipes/building_blocks/cut_calcite_stairs_from_stone_types_calcite_stonecutting.json +db5f4e1eee91c2a65d36164c20aba0e9d3a502ae data/create/advancements/recipes/building_blocks/cut_calcite_wall.json +19de370083d2cf1234c9c4e6ff45d85ef34a1ac8 data/create/advancements/recipes/building_blocks/cut_calcite_wall_from_stone_types_calcite_stonecutting.json +b9a2edda241f6e0677a2003300f0be5d3ff8f4b0 data/create/advancements/recipes/building_blocks/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json +9fda0e6edde197a9c28a854419a2a07e323b6b53 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab.json +2da3f139759be7eea552885b2063a0e2dfc647b1 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json +62d928c8ab2e09a3f87adacb5adb1a5ddc1d2a7b data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab_recycling.json +5263f8e0f9563abf0ebef179dfee080d9347ad25 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_stairs.json +89850244feb8a3293ba96702b7a56a4bea84e1f3 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json +267cab789c73d474299542fb0719967501fcf0c9 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_wall.json +27007676b86eb8a3498982d8b5e68495b84d62d5 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json +a88d252d4e634ff194daa3ff98fd7e965e3ed09a data/create/advancements/recipes/building_blocks/cut_crimsite_from_stone_types_crimsite_stonecutting.json +f703136e1783a42252bc1d89c31e5563cbdff583 data/create/advancements/recipes/building_blocks/cut_crimsite_slab.json +3330d332462da22de48d07b62277c1df8e646a3e data/create/advancements/recipes/building_blocks/cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json +c2707e5969f0c554537dda9d3e2a4c13e19863c3 data/create/advancements/recipes/building_blocks/cut_crimsite_slab_recycling.json +15613f31443def22603f52d6847d87b21a943486 data/create/advancements/recipes/building_blocks/cut_crimsite_stairs.json +e9ba513178090b020525e72468a0450e225da779 data/create/advancements/recipes/building_blocks/cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json +7fb5ce65b7b5c2d76b4306d407aaa6eefe07b7e5 data/create/advancements/recipes/building_blocks/cut_crimsite_wall.json +a83d5b669f92bd833af2768d2cf5d4797a86b63c data/create/advancements/recipes/building_blocks/cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json +bc9eb21df37df4b69e5d202b3b770698a16f4413 data/create/advancements/recipes/building_blocks/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json +2c380e8ddc83cef4213f136ff7a196d861728914 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab.json +87b5dfc1e61fabe4e7661bea0d7a56cb75197a81 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json +09cde6df1120cc5f5f129023885f323b4d1eeae9 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab_recycling.json +989efa86e40a9eed43077ddc537db26cef51c8ab data/create/advancements/recipes/building_blocks/cut_deepslate_brick_stairs.json +28e15fe2c377540cb631f6648f49090f234e7704 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json +d2b34f455ab0053f24a4f9dec7dcce45832ef25b data/create/advancements/recipes/building_blocks/cut_deepslate_brick_wall.json +7b174b65b813b4a9ca507e71fa142931e074f336 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json +83db3f5b46c996481b930974bddba75c82c115af data/create/advancements/recipes/building_blocks/cut_deepslate_from_stone_types_deepslate_stonecutting.json +8e8816aad8212c3557e77cc01df551fe1a0a306d data/create/advancements/recipes/building_blocks/cut_deepslate_slab.json +14ea447072200733dd9551a5ac6a9544593dd9f7 data/create/advancements/recipes/building_blocks/cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json +c7870abb459c8b174c380282ae211a87ab252521 data/create/advancements/recipes/building_blocks/cut_deepslate_slab_recycling.json +281322f3a3c4b0da514d1b0cb7a0519cc149069f data/create/advancements/recipes/building_blocks/cut_deepslate_stairs.json +4f157401a3019c96cc6ae5a0036f31351c651fbb data/create/advancements/recipes/building_blocks/cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json +9ae9635fa129aab54a7ec971b9cc61d300d3d53e data/create/advancements/recipes/building_blocks/cut_deepslate_wall.json +9b5df53000c79a7b20e3a1888e003b704809feda data/create/advancements/recipes/building_blocks/cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json +fdef99789ca74623b00b05be2f975b63831645db data/create/advancements/recipes/building_blocks/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json +30a00465dc9b19d8024146e2c2d6b9f41562da30 data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab.json +a55e7daf48a487d74b4a01e30b80968094154d2b data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab_from_stone_types_diorite_stonecutting.json +e445a3d8fd00f5e4f2ee56c797d8abf548598447 data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab_recycling.json +b421f24513612dd7a5d8977d7bff122fd5cf9522 data/create/advancements/recipes/building_blocks/cut_diorite_brick_stairs.json +3fe00adac35beeda79b7f9d930a1f13b033c0f12 data/create/advancements/recipes/building_blocks/cut_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json +6d2235b8587863107a6d1a0818c81ee3dc217cdf data/create/advancements/recipes/building_blocks/cut_diorite_brick_wall.json +0ec4b69e98adf961f5d4d63700f11ad66a4116b5 data/create/advancements/recipes/building_blocks/cut_diorite_brick_wall_from_stone_types_diorite_stonecutting.json +c9f52e0661fdc266f8429faf1570124fecfa2d6a data/create/advancements/recipes/building_blocks/cut_diorite_from_stone_types_diorite_stonecutting.json +c7b73ddec6402e8b5ff5daedbbbc74f882338a8e data/create/advancements/recipes/building_blocks/cut_diorite_slab.json +46c841e5aae99106cbc28026dcfec946976127e5 data/create/advancements/recipes/building_blocks/cut_diorite_slab_from_stone_types_diorite_stonecutting.json +ce67a5fae622955ad795e2b3d14c159a4c47b936 data/create/advancements/recipes/building_blocks/cut_diorite_slab_recycling.json +11064acd889199392e91318420614f6aed837049 data/create/advancements/recipes/building_blocks/cut_diorite_stairs.json +3b7ec28df80ea9cf87980b2c2184858ba6152a3f data/create/advancements/recipes/building_blocks/cut_diorite_stairs_from_stone_types_diorite_stonecutting.json +c8fe9ab53eda2cdbff08678ebb577c169ea61a91 data/create/advancements/recipes/building_blocks/cut_diorite_wall.json +050f67b5a662bea3ef972521ef7f81c2ba99015c data/create/advancements/recipes/building_blocks/cut_diorite_wall_from_stone_types_diorite_stonecutting.json +b60683fdd629b201f40a6f9bb6594df7c5ac13f1 data/create/advancements/recipes/building_blocks/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json +1e0d39ed56e2ab4eac084f26a1c6de905db29220 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab.json +020cbc4c8063d186d3f5c9ece429e4cdff53cf63 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json +b44c9e7f9f62ffffb5566901e0a22010ba76641c data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab_recycling.json +9a88b74bd12c9b982dbe30664959a45e32a07321 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_stairs.json +466fbdf7de8dacd1032fb7af690862bb68707876 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json +253b54c191c933e88fa6a9b4e7c94340082c7d60 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_wall.json +e176568e3de8b8ca17a788f4cea89002b5ad2d1d data/create/advancements/recipes/building_blocks/cut_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json +ddc5a16cf0d2790d8133ab6801f4c55317d776e4 data/create/advancements/recipes/building_blocks/cut_dripstone_from_stone_types_dripstone_stonecutting.json +6e40c9af0747a8b3adb805ddd8fbb947aedb408c data/create/advancements/recipes/building_blocks/cut_dripstone_slab.json +e7761f71f797d2e62dc0860cbd5153955b9be86c data/create/advancements/recipes/building_blocks/cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json +a199a9f78a44f4313a922b317893c68f743dc1a9 data/create/advancements/recipes/building_blocks/cut_dripstone_slab_recycling.json +2f5b2bf7f4ccae139be7b431c2e6546be541e5c1 data/create/advancements/recipes/building_blocks/cut_dripstone_stairs.json +b68a95a565ee9a3aec017431aa5b8cc6fffec3ef data/create/advancements/recipes/building_blocks/cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json +a4287f34f95c008bdf7c0a886d05c3960665147b data/create/advancements/recipes/building_blocks/cut_dripstone_wall.json +76f5d4a6a9895064b15ae0c0f27a138bb3d57dbf data/create/advancements/recipes/building_blocks/cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json +24cc01d592faf2bad57fc9b9a1de52c50d225446 data/create/advancements/recipes/building_blocks/cut_granite_bricks_from_stone_types_granite_stonecutting.json +83148f66dc7418740b6f9b6a660b0b9306d87f7c data/create/advancements/recipes/building_blocks/cut_granite_brick_slab.json +d982802fc11848c87022f7bf05cecf090953002a data/create/advancements/recipes/building_blocks/cut_granite_brick_slab_from_stone_types_granite_stonecutting.json +6b8fa161725a4e2106226c3591a23def74398f48 data/create/advancements/recipes/building_blocks/cut_granite_brick_slab_recycling.json +ce1c81b730b3acef9673f41769339f7d68385348 data/create/advancements/recipes/building_blocks/cut_granite_brick_stairs.json +e9732e3beaefbc6a457e0c4fd61f17f429f1cd8c data/create/advancements/recipes/building_blocks/cut_granite_brick_stairs_from_stone_types_granite_stonecutting.json +4f403aee2aae6aa0fc334b434cf5ade362153329 data/create/advancements/recipes/building_blocks/cut_granite_brick_wall.json +625c8849b5c07835b49dcb4322ec44586628a700 data/create/advancements/recipes/building_blocks/cut_granite_brick_wall_from_stone_types_granite_stonecutting.json +07e6f3835c3683f007fd25140d671b668706484d data/create/advancements/recipes/building_blocks/cut_granite_from_stone_types_granite_stonecutting.json +2f33b7f82e977eb3fd0e0283313b1066eadadd18 data/create/advancements/recipes/building_blocks/cut_granite_slab.json +a1b406ca98c2ba7d5225afea8463d586fc538428 data/create/advancements/recipes/building_blocks/cut_granite_slab_from_stone_types_granite_stonecutting.json +af12a2d8f8bb2382f55135df8cfec00692a65fe3 data/create/advancements/recipes/building_blocks/cut_granite_slab_recycling.json +19c625859b5cff49cd415680afa4eafc757477e4 data/create/advancements/recipes/building_blocks/cut_granite_stairs.json +284087e07acd28aa869d5433375e412f083108e9 data/create/advancements/recipes/building_blocks/cut_granite_stairs_from_stone_types_granite_stonecutting.json +dbfb50c3d5048b1f5d8d74f39c389ecec81392d7 data/create/advancements/recipes/building_blocks/cut_granite_wall.json +6b287be7a900dbd715290b069a89ab226d6cec9c data/create/advancements/recipes/building_blocks/cut_granite_wall_from_stone_types_granite_stonecutting.json +4ef0a018dcf0b470061a4b1dbadc27684d8d467f data/create/advancements/recipes/building_blocks/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json +b0ade7dab7eb095f07882e4c19884162f18e704c data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab.json +4fc2dc61d62a394cebc91e36745699eeaee650e7 data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab_from_stone_types_limestone_stonecutting.json +b8ec42f06ce9eb696643154d16150a223bd5ec65 data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab_recycling.json +d0b19c27309cd45d08a6a0cd779f1930bc2e7469 data/create/advancements/recipes/building_blocks/cut_limestone_brick_stairs.json +9f65617405592d587a940ff7513fcb34ca6ab423 data/create/advancements/recipes/building_blocks/cut_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json +281e2ddcb58b603dea8f305ed6c8ddea98d0d030 data/create/advancements/recipes/building_blocks/cut_limestone_brick_wall.json +7b0ab5095a7d2b3e876a8c8b990161851c1c58c2 data/create/advancements/recipes/building_blocks/cut_limestone_brick_wall_from_stone_types_limestone_stonecutting.json +f8663a45d71c52a3982c75bbfb61653c8d2fd668 data/create/advancements/recipes/building_blocks/cut_limestone_from_stone_types_limestone_stonecutting.json +9e22972cd4f2d673cfcf07a597f6a14402c91913 data/create/advancements/recipes/building_blocks/cut_limestone_slab.json +388a57bb88582eda9fef904a530f72b066d24e7d data/create/advancements/recipes/building_blocks/cut_limestone_slab_from_stone_types_limestone_stonecutting.json +9e3098a6b1bae5c653ba759fd5695d716543ccba data/create/advancements/recipes/building_blocks/cut_limestone_slab_recycling.json +0f9a452e940fcad12506b1c49f238422783d493a data/create/advancements/recipes/building_blocks/cut_limestone_stairs.json +b6dc46dca3fc039fd0fe53ab791731cb085c3b62 data/create/advancements/recipes/building_blocks/cut_limestone_stairs_from_stone_types_limestone_stonecutting.json +a9382d5f876542bf4fa8aed605352daca4ad2f6f data/create/advancements/recipes/building_blocks/cut_limestone_wall.json +69d9116786c53cb3155bed4580d4b01bfe638243 data/create/advancements/recipes/building_blocks/cut_limestone_wall_from_stone_types_limestone_stonecutting.json +1f8ee1a91937295484d5c2fe0186a617589c1761 data/create/advancements/recipes/building_blocks/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json +a51d6ebed8e21e8808ccfbe9f9540291504da59a data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab.json +eb08f00651259f83f6eced0f90dd8df0e9d0d508 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json +a189e0549723cefbd19a147274cd79909dca2b70 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab_recycling.json +a5dc9e74ad0d18d83bad3aab8c5e2768355a2370 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_stairs.json +27a5331727199b8b8f2dd6c581e25d17d12fc1ba data/create/advancements/recipes/building_blocks/cut_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json +648e532441c664310047c5c9c78833d2eaea5920 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_wall.json +053256b7b154ba5c10d2483d86658f132296e8f5 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +6abb6e36229685ca26ee31b5db3074a07453435e data/create/advancements/recipes/building_blocks/cut_ochrum_from_stone_types_ochrum_stonecutting.json +0c5e92fb20048fe5d9dcd42e10fd0f9b155c385a data/create/advancements/recipes/building_blocks/cut_ochrum_slab.json +941aba0ff7967d7ea56e1f811aa6bc34d4711796 data/create/advancements/recipes/building_blocks/cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json +bc65a46e3123d2058ca668c2b17d78ae9c1be129 data/create/advancements/recipes/building_blocks/cut_ochrum_slab_recycling.json +fa14009e4de8cfdacdbb7679473ce359f2cb85be data/create/advancements/recipes/building_blocks/cut_ochrum_stairs.json +d50accd7f37bfd9384790bdd727401757f6dc7e4 data/create/advancements/recipes/building_blocks/cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json +ed0a72f6393c0d16240b89241f5bbac7dc003516 data/create/advancements/recipes/building_blocks/cut_ochrum_wall.json +cda838f95015b0bf02fc5427e1a69ed6302b7e20 data/create/advancements/recipes/building_blocks/cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json +a51cd5a82d9b30c8a68f7cdf8dd7a6b2f883c27c data/create/advancements/recipes/building_blocks/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json +ce33e5a98a83dae1f37ad4b3d4ea148de5bcacdf data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab.json +498825e9e5502a7ec8a1f23bfe998b960d7fc9eb data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json +8ffa08b1b4e4ab37dfbf09d2ec4a37f93c9503cb data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab_recycling.json +74c13f7236411961a50501dfeaeac7e91ffc4007 data/create/advancements/recipes/building_blocks/cut_scorchia_brick_stairs.json +3c4b45560f446534821da63d4e713088928e5f4a data/create/advancements/recipes/building_blocks/cut_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json +2aba76185175fff82898a7a905d3ec4ff448deaa data/create/advancements/recipes/building_blocks/cut_scorchia_brick_wall.json +ca1f54af4425df994c6707f00e43b8db3ce66280 data/create/advancements/recipes/building_blocks/cut_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json +df847f312960866d3d53f48297ea3169c27314eb data/create/advancements/recipes/building_blocks/cut_scorchia_from_stone_types_scorchia_stonecutting.json +8095f7be8aac4f11d618549680d537bed8a921c5 data/create/advancements/recipes/building_blocks/cut_scorchia_slab.json +a53831cf7f095fa4d0d92051bd0e21f912c2d9dd data/create/advancements/recipes/building_blocks/cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json +0d2be604d21678136fd9c6768649ed2574e23e22 data/create/advancements/recipes/building_blocks/cut_scorchia_slab_recycling.json +90135231496420793b2a6fb493c49dec71650c20 data/create/advancements/recipes/building_blocks/cut_scorchia_stairs.json +30f1efaa46771dd22d7f3aa34f24c69bbdb59bd5 data/create/advancements/recipes/building_blocks/cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json +e02d188d64b270682fa9d335a3423880d8358a0d data/create/advancements/recipes/building_blocks/cut_scorchia_wall.json +834c5a2a8d089822fa81a75b290818db276beab7 data/create/advancements/recipes/building_blocks/cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json +2030ec21c96336bd4c4040857f40ec65d1a75075 data/create/advancements/recipes/building_blocks/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json +705dfcd9f4b6b8a0c360436c097cb371c27cf60d data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab.json +482cf1bbb65a4facc0ebf31ea91bab4d03580635 data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab_from_stone_types_scoria_stonecutting.json +51d070acfc8ad4cd8ca4457ca346458c81eaade4 data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab_recycling.json +9f1b92ee31e2fe91361b11fa57cf7b88a9db428f data/create/advancements/recipes/building_blocks/cut_scoria_brick_stairs.json +99ca117e6a4ad242d92566a2f398c28edb3b7061 data/create/advancements/recipes/building_blocks/cut_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json +01e294976d8ce71b59fb14a47e2686bdce4fab21 data/create/advancements/recipes/building_blocks/cut_scoria_brick_wall.json +0c1d31d37a17d4bd752508022ddd9690bb92a521 data/create/advancements/recipes/building_blocks/cut_scoria_brick_wall_from_stone_types_scoria_stonecutting.json +41f420c88dbf61d3cb51966cca9b495d10c604d3 data/create/advancements/recipes/building_blocks/cut_scoria_from_stone_types_scoria_stonecutting.json +26c8447854e29243f0697236f59e258fa96ed369 data/create/advancements/recipes/building_blocks/cut_scoria_slab.json +f3e2522664de4ff2ad92a89443e064ac857b7aef data/create/advancements/recipes/building_blocks/cut_scoria_slab_from_stone_types_scoria_stonecutting.json +f6dbf65cb36fbe7ef5eaf3b912eb1bbccf52e2d8 data/create/advancements/recipes/building_blocks/cut_scoria_slab_recycling.json +a0635452fd698415e8112e9e0f6d71571901ca34 data/create/advancements/recipes/building_blocks/cut_scoria_stairs.json +1bb047298b71a57e8632607af7b17bab2690aecb data/create/advancements/recipes/building_blocks/cut_scoria_stairs_from_stone_types_scoria_stonecutting.json +a33878fe778438a746a28c1fd03ca6d01092ebe4 data/create/advancements/recipes/building_blocks/cut_scoria_wall.json +74a637d0d0f360ad692661c0213c18a06a8ec500 data/create/advancements/recipes/building_blocks/cut_scoria_wall_from_stone_types_scoria_stonecutting.json +f0870d596d9ac9e5b5272fb4e3d2c90c29f3a63d data/create/advancements/recipes/building_blocks/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json +b75410afdb8775b2a834ded315913e0ae38e4df8 data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab.json +34c2aead2f2355a8f0f9f9aa7dba58dd5187dbba data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab_from_stone_types_tuff_stonecutting.json +c071c43e93cc1735bebbbf320f1b8d2cba4be1e3 data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab_recycling.json +c89ec2300425688f9e72e45c64def0b09c0219b0 data/create/advancements/recipes/building_blocks/cut_tuff_brick_stairs.json +c882f72f5a31bc92a8186834b105a2e07d864366 data/create/advancements/recipes/building_blocks/cut_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json +70295775a6170a1332f5604aaf75a026630c9e93 data/create/advancements/recipes/building_blocks/cut_tuff_brick_wall.json +1b79d0e71dae77967c1554c203e68eeb51fe8054 data/create/advancements/recipes/building_blocks/cut_tuff_brick_wall_from_stone_types_tuff_stonecutting.json +549d1f911c009a3cafff4edcb37116c92c2b8e21 data/create/advancements/recipes/building_blocks/cut_tuff_from_stone_types_tuff_stonecutting.json +5bc3e40a8e50a521ebd5fa58efa3ec21064163f7 data/create/advancements/recipes/building_blocks/cut_tuff_slab.json +f1ab5be6cb7287517d87b173680ddf833a1dd534 data/create/advancements/recipes/building_blocks/cut_tuff_slab_from_stone_types_tuff_stonecutting.json +1ee04e83cb3e797d08cab9c68a51230dca43315e data/create/advancements/recipes/building_blocks/cut_tuff_slab_recycling.json +b7d19085017530f0c2122511c35dbef6a50b337f data/create/advancements/recipes/building_blocks/cut_tuff_stairs.json +3c9541b6e4eb8ff7f7b627a75e8c38ed9eeaf342 data/create/advancements/recipes/building_blocks/cut_tuff_stairs_from_stone_types_tuff_stonecutting.json +51ca798b8bd822ddbbfe8f07073eefb948b97b42 data/create/advancements/recipes/building_blocks/cut_tuff_wall.json +1aa1a0d00c19069f0c55e698b474115d7f437355 data/create/advancements/recipes/building_blocks/cut_tuff_wall_from_stone_types_tuff_stonecutting.json +6a80920618d8e9b7919c83c419e751971440d38a data/create/advancements/recipes/building_blocks/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json +e263f555c3a47c83187d29ae9b816edc0c1a763b data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab.json +f0e84bde804e52f504cd93bee5058a89f6939dc9 data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab_from_stone_types_veridium_stonecutting.json +949fe819c76fd63edfd93bef5898119c8456fda3 data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab_recycling.json +fc87560dedbc951d10d9650a6f27192e7c3a1cc5 data/create/advancements/recipes/building_blocks/cut_veridium_brick_stairs.json +35b09d6300ff8e86f01bc0258fca5cfa80d55c61 data/create/advancements/recipes/building_blocks/cut_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json +599d9ce510531c6006a4964bb4049a850a8457ee data/create/advancements/recipes/building_blocks/cut_veridium_brick_wall.json +aaaad7a65a1c05071565ca91a181ff3c375e0141 data/create/advancements/recipes/building_blocks/cut_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +c76ae7944646e8f13ea460ba6655b95b6c2798ea data/create/advancements/recipes/building_blocks/cut_veridium_from_stone_types_veridium_stonecutting.json +3bafa8873b62cb0333b44af77f2c6e824c5b3e95 data/create/advancements/recipes/building_blocks/cut_veridium_slab.json +143f64b0e5536693262f6a62c2a6fbf85bd4203e data/create/advancements/recipes/building_blocks/cut_veridium_slab_from_stone_types_veridium_stonecutting.json +314f1450ccb2c30f62711d97e41355612c7f1c72 data/create/advancements/recipes/building_blocks/cut_veridium_slab_recycling.json +3662bb881db2c4ac79edcbebcdec3914c5547345 data/create/advancements/recipes/building_blocks/cut_veridium_stairs.json +b680d815686d1b4f4e0f821488806ba6a149679a data/create/advancements/recipes/building_blocks/cut_veridium_stairs_from_stone_types_veridium_stonecutting.json +9bd317ca199798e937f997806c191ee8fc33de50 data/create/advancements/recipes/building_blocks/cut_veridium_wall.json +63cbea368bee88f1828e3b5f5e215bb4ce8ae0b4 data/create/advancements/recipes/building_blocks/cut_veridium_wall_from_stone_types_veridium_stonecutting.json +88d6adf5eb2acf33b40327759dae5834c6721621 data/create/advancements/recipes/building_blocks/dark_oak_window.json +616a2b1b826ead737c6e4d25d1e52ac5f044ed9c data/create/advancements/recipes/building_blocks/dark_oak_window_pane.json +c4d1b3dc0a5fa534abe3e32b1bde6b754213ca8e data/create/advancements/recipes/building_blocks/deepslate_from_stone_types_deepslate_stonecutting.json +4cfc50772b56a2451e3292b0089c6d038972a93b data/create/advancements/recipes/building_blocks/deepslate_pillar_from_stone_types_deepslate_stonecutting.json +ca7e87bd1a2d2b5c5f44f270b69faa136afadf7d data/create/advancements/recipes/building_blocks/diorite_from_stone_types_diorite_stonecutting.json +69ea24b5e92d9f8a8907c5eebbc60a5a68115d1b data/create/advancements/recipes/building_blocks/diorite_pillar_from_stone_types_diorite_stonecutting.json +93be7c102d3ec132821af8da06883ca5d9971f5b data/create/advancements/recipes/building_blocks/dripstone_block_from_stone_types_dripstone_stonecutting.json +7f82a4056f12c7e3e6c4585756f0a74e943450f2 data/create/advancements/recipes/building_blocks/dripstone_pillar_from_stone_types_dripstone_stonecutting.json +dd774ad5cdebe594a53624876296d788131b19f9 data/create/advancements/recipes/building_blocks/exposed_copper_shingle_slab.json +47fc9405775485ffc57efe2a4ffa85b891257cd1 data/create/advancements/recipes/building_blocks/exposed_copper_shingle_slab_from_exposed_copper_shingles_stonecutting.json +094cc190d41aad52c7c0b52aecee621bb5eb9a28 data/create/advancements/recipes/building_blocks/exposed_copper_shingle_stairs.json +207db7f7030ea1fa5a7b08935929bcfc42b97a27 data/create/advancements/recipes/building_blocks/exposed_copper_shingle_stairs_from_exposed_copper_shingles_stonecutting.json +cf935e78accc5f051fdb5c14279cd7b1fa56bc04 data/create/advancements/recipes/building_blocks/exposed_copper_tile_slab.json +2c2a553d3439e7060684efae6eb7ab3685f30111 data/create/advancements/recipes/building_blocks/exposed_copper_tile_slab_from_exposed_copper_tiles_stonecutting.json +cd77e32d1f6d546be68bbab084fc1864af0529a8 data/create/advancements/recipes/building_blocks/exposed_copper_tile_stairs.json +ab4ad143375e65a867b3ca8a7b14df79e9b0b03a data/create/advancements/recipes/building_blocks/exposed_copper_tile_stairs_from_exposed_copper_tiles_stonecutting.json +59b1eb7e50c23127e63a320b70e788afaea48d70 data/create/advancements/recipes/building_blocks/framed_glass_from_glass_colorless_stonecutting.json +3e0772de79f2ddaf277394e989f88cfe066bc64d data/create/advancements/recipes/building_blocks/framed_glass_pane.json +ec5cd5091b3b8c633c02b7751ffacda743c2aeda data/create/advancements/recipes/building_blocks/granite_from_stone_types_granite_stonecutting.json +e3c5bd9bf6f73620ccb61e0a9cb3beb18b04b527 data/create/advancements/recipes/building_blocks/granite_pillar_from_stone_types_granite_stonecutting.json +85fb8fdb3cebaaacf24794aec90e7894f66a8402 data/create/advancements/recipes/building_blocks/horizontal_framed_glass_from_glass_colorless_stonecutting.json +c609b408d6467ec71513ecca19a6040ad7011a79 data/create/advancements/recipes/building_blocks/horizontal_framed_glass_pane.json +a587d84e187d6552473f646461539dc56d4e748f data/create/advancements/recipes/building_blocks/industrial_iron_block_from_ingots_iron_stonecutting.json +546af6a639e4799fb83d61b131ab0cc38ef6b33a data/create/advancements/recipes/building_blocks/jungle_window.json +e8c728c46cc69cc0e9d755551bb9a52f2b61a6c0 data/create/advancements/recipes/building_blocks/jungle_window_pane.json +b9d04c53fdf3ba977216021ca71aa5e4f2d9a0b0 data/create/advancements/recipes/building_blocks/layered_andesite_from_stone_types_andesite_stonecutting.json +b2289381d4dd93c05c04bea9a071fd5b4ebf5d19 data/create/advancements/recipes/building_blocks/layered_asurine_from_stone_types_asurine_stonecutting.json +8ddaf106adf95c6ac0f6fb97ce704556808141be data/create/advancements/recipes/building_blocks/layered_calcite_from_stone_types_calcite_stonecutting.json +65a3f06e60a8c16434774076d1d19de891492104 data/create/advancements/recipes/building_blocks/layered_crimsite_from_stone_types_crimsite_stonecutting.json +38f019f81e443978d66d985e2c4ce251b0951243 data/create/advancements/recipes/building_blocks/layered_deepslate_from_stone_types_deepslate_stonecutting.json +370b52fa56ebe4bce6ac402e4beba595d87da27d data/create/advancements/recipes/building_blocks/layered_diorite_from_stone_types_diorite_stonecutting.json +e187b73af16a037891b0a748f1c3710b3c97a24d data/create/advancements/recipes/building_blocks/layered_dripstone_from_stone_types_dripstone_stonecutting.json +b64ac8f469f2b16cb5e3a8cd88ca9f5994ae49e9 data/create/advancements/recipes/building_blocks/layered_granite_from_stone_types_granite_stonecutting.json +4c2badb5601ae5239feda75d747ea666ae743c77 data/create/advancements/recipes/building_blocks/layered_limestone_from_stone_types_limestone_stonecutting.json +e35bfdcd43bd7350b5ceaec33be1a4c84879cb04 data/create/advancements/recipes/building_blocks/layered_ochrum_from_stone_types_ochrum_stonecutting.json +0d754b07fcccfda1f1d8cd2d1518d54eb3a4a265 data/create/advancements/recipes/building_blocks/layered_scorchia_from_stone_types_scorchia_stonecutting.json +e9b8df0928accb1690cf5e24375643b282ecb307 data/create/advancements/recipes/building_blocks/layered_scoria_from_stone_types_scoria_stonecutting.json +101a37e2b719ed442d66fc841ac6719b96e87b9a data/create/advancements/recipes/building_blocks/layered_tuff_from_stone_types_tuff_stonecutting.json +a4676b1f4f39b03240e133bce03dcd0636ae3d48 data/create/advancements/recipes/building_blocks/layered_veridium_from_stone_types_veridium_stonecutting.json +e19af0c8af821254fbf44400a785e3c03aeaf5ce data/create/advancements/recipes/building_blocks/limestone_from_stone_types_limestone_stonecutting.json +e5a41a95a03ef12c8d002f7b884da164b9fe5adf data/create/advancements/recipes/building_blocks/limestone_pillar_from_stone_types_limestone_stonecutting.json +414b080ca35d70f420be0bac2064d293fd63f716 data/create/advancements/recipes/building_blocks/mangrove_window.json +8e676a15b101eb9b57ca4997a42f5781589f8c2c data/create/advancements/recipes/building_blocks/mangrove_window_pane.json +2280f80f97aa4531cc0c54540ad8846678a57a9b data/create/advancements/recipes/building_blocks/oak_window.json +be72964ed354ab3772c9103ca089b48369a3f4df data/create/advancements/recipes/building_blocks/oak_window_pane.json +ee4586fa007fd595b90172f246153130dd9a10f6 data/create/advancements/recipes/building_blocks/ochrum_from_stone_types_ochrum_stonecutting.json +15642e7fe5f36a84382a33e0ca90c328e9906155 data/create/advancements/recipes/building_blocks/ochrum_pillar_from_stone_types_ochrum_stonecutting.json +8779e790fe3f51319a9a03388adb87ff98826159 data/create/advancements/recipes/building_blocks/ornate_iron_window.json +c8b8f792d2e9ffea70330f2c1659d567c12913b1 data/create/advancements/recipes/building_blocks/ornate_iron_window_pane.json +ad88d3e8914d3caeda60553894182dfd498e51ae data/create/advancements/recipes/building_blocks/oxidized_copper_shingle_slab.json +45fa9edfc9fef5f9d64466ed735aa6e2e3171348 data/create/advancements/recipes/building_blocks/oxidized_copper_shingle_slab_from_oxidized_copper_shingles_stonecutting.json +a29a0d7068e5ac71f1ebfc73d795d91c2f731f89 data/create/advancements/recipes/building_blocks/oxidized_copper_shingle_stairs.json +f0f82169235d0a8cf25cd0712847cffb44238011 data/create/advancements/recipes/building_blocks/oxidized_copper_shingle_stairs_from_oxidized_copper_shingles_stonecutting.json +3da344a6e7bd359bce380c70faea2c9b74035513 data/create/advancements/recipes/building_blocks/oxidized_copper_tile_slab.json +7735880bbef4e3188b58515ffb4aef7a09011487 data/create/advancements/recipes/building_blocks/oxidized_copper_tile_slab_from_oxidized_copper_tiles_stonecutting.json +2ace2795974aa92c64524a50b20dfab9457cbd79 data/create/advancements/recipes/building_blocks/oxidized_copper_tile_stairs.json +79ddcbb0c2cb57931d2c9461eba7f183164d8d17 data/create/advancements/recipes/building_blocks/oxidized_copper_tile_stairs_from_oxidized_copper_tiles_stonecutting.json +840290680edb74795859848c9cd88e2aa514af4b data/create/advancements/recipes/building_blocks/polished_cut_andesite_from_stone_types_andesite_stonecutting.json +012f240d797ea09eee22d532642bd9c7837fc01f data/create/advancements/recipes/building_blocks/polished_cut_andesite_slab.json +24d0c448853fb9e392d568f3d3c8ac6005ebae6f data/create/advancements/recipes/building_blocks/polished_cut_andesite_slab_from_stone_types_andesite_stonecutting.json +e079c3b7c9dba92452e6346b9dbfcada306347e6 data/create/advancements/recipes/building_blocks/polished_cut_andesite_slab_recycling.json +2702287c8ce5071e14a806d19ea1e3b08f6f3fe8 data/create/advancements/recipes/building_blocks/polished_cut_andesite_stairs.json +497566af278ffdc9112b34f16aad84109bbd6c66 data/create/advancements/recipes/building_blocks/polished_cut_andesite_stairs_from_stone_types_andesite_stonecutting.json +fd8a482122466a1c334b99391f8d9586b6b58a1d data/create/advancements/recipes/building_blocks/polished_cut_andesite_wall.json +e4405ceb7fd7536812e5d8d7038b1b6234f87e63 data/create/advancements/recipes/building_blocks/polished_cut_andesite_wall_from_stone_types_andesite_stonecutting.json +3a40c3ecdee09cf571cad235f67683b20e9ca6e6 data/create/advancements/recipes/building_blocks/polished_cut_asurine_from_stone_types_asurine_stonecutting.json +103a131b893a5e521e52b67b9cb84a1ee7e67254 data/create/advancements/recipes/building_blocks/polished_cut_asurine_slab.json +9eafb09407257acf09b2c1796f3c76f1eba0c612 data/create/advancements/recipes/building_blocks/polished_cut_asurine_slab_from_stone_types_asurine_stonecutting.json +f364419466bc0fc99f07b9f9f48de0dbce4f756d data/create/advancements/recipes/building_blocks/polished_cut_asurine_slab_recycling.json +b19e5e61f9ef935a133d6a4b54ee985f70786c49 data/create/advancements/recipes/building_blocks/polished_cut_asurine_stairs.json +61cca2bcfb99fb051d5653e03f5b4cb77a1fab8d data/create/advancements/recipes/building_blocks/polished_cut_asurine_stairs_from_stone_types_asurine_stonecutting.json +69500a21457d2aa0c737c383c704d552dbcb5b73 data/create/advancements/recipes/building_blocks/polished_cut_asurine_wall.json +f3a3c2732edc121fac150d0a9ffc6e4187366d92 data/create/advancements/recipes/building_blocks/polished_cut_asurine_wall_from_stone_types_asurine_stonecutting.json +aec9f409674ec7a65379274fa6f55f7bcf7dfe40 data/create/advancements/recipes/building_blocks/polished_cut_calcite_from_stone_types_calcite_stonecutting.json +dd702575e32e7250577621732feec5cb0389c4c6 data/create/advancements/recipes/building_blocks/polished_cut_calcite_slab.json +60a8b0493ff0cac9e177dad4fd644da7f6eab0b3 data/create/advancements/recipes/building_blocks/polished_cut_calcite_slab_from_stone_types_calcite_stonecutting.json +a573cb2474b33e12c184b3c5a99d5b6b1da083a5 data/create/advancements/recipes/building_blocks/polished_cut_calcite_slab_recycling.json +c54a10535d8abfa70867cc4e4ea3357b60076750 data/create/advancements/recipes/building_blocks/polished_cut_calcite_stairs.json +3bae05658ba0d57bb37a07eeaff2ddad95d49f9c data/create/advancements/recipes/building_blocks/polished_cut_calcite_stairs_from_stone_types_calcite_stonecutting.json +501d4cfe1aa2156bd8e376cf161096eb76fdcf84 data/create/advancements/recipes/building_blocks/polished_cut_calcite_wall.json +1de5581154dc16acbb5cddaf0568e8e422dcf10d data/create/advancements/recipes/building_blocks/polished_cut_calcite_wall_from_stone_types_calcite_stonecutting.json +e63fe69a25cdc6fb6df851da701eda9e683cddfe data/create/advancements/recipes/building_blocks/polished_cut_crimsite_from_stone_types_crimsite_stonecutting.json +bd4a94edf0e2490bf3ec7f45760982b1f637f819 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_slab.json +d77f30d9b8a420d74f1fb1d29ecb1747228cde55 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json +3571b29c5faffc3fb8362ce7d078091f97be0950 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_slab_recycling.json +31d48254a56ce5e59f49de7910e717437a658079 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_stairs.json +9e32c6001f9ac2a0f8a9c4f04b39f5eeca52a603 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json +a8597afbab8a9fa02be356bcf18011b326327534 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_wall.json +3077d2495444e7f12e46237bfea906647a030ee2 data/create/advancements/recipes/building_blocks/polished_cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json +8686722f75128f75bfd6c172851d6e3902b47096 data/create/advancements/recipes/building_blocks/polished_cut_deepslate_from_stone_types_deepslate_stonecutting.json +0394c48fc2c7a69d66cf0236ec168bba42b7503b data/create/advancements/recipes/building_blocks/polished_cut_deepslate_slab.json +b7727378ba1f0f1da530cd3a83598d4ff0178502 data/create/advancements/recipes/building_blocks/polished_cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json +9e59ecd233a84f761b4e3fbf74794a2d435f449f data/create/advancements/recipes/building_blocks/polished_cut_deepslate_slab_recycling.json +84396c3ba994114107a6255e9cf12e794beb3518 data/create/advancements/recipes/building_blocks/polished_cut_deepslate_stairs.json +6321cd17e7bd4d696cd49e644f8d85676d4c1ec8 data/create/advancements/recipes/building_blocks/polished_cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json +efec97dbb73b38f4a97b59320ca4d3684bb356ce data/create/advancements/recipes/building_blocks/polished_cut_deepslate_wall.json +bd896d44e2d08b83d38baf6f1df25d1303248261 data/create/advancements/recipes/building_blocks/polished_cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json +cdff2a9ecac91fa74f7cde5db0b9345d9e006466 data/create/advancements/recipes/building_blocks/polished_cut_diorite_from_stone_types_diorite_stonecutting.json +b0f1980f5e9aad3c3ab498ddc6d19e71b7551924 data/create/advancements/recipes/building_blocks/polished_cut_diorite_slab.json +3e1e4172716755436518987afbd045487e38a873 data/create/advancements/recipes/building_blocks/polished_cut_diorite_slab_from_stone_types_diorite_stonecutting.json +c87bc39d07fa523e3efc44f59a36eafa65fdda3c data/create/advancements/recipes/building_blocks/polished_cut_diorite_slab_recycling.json +8b5d40aa26520d26530e9dc9f24fcd5392040e4f data/create/advancements/recipes/building_blocks/polished_cut_diorite_stairs.json +f523d8f1210a10be6fb584ea18736150b9d21be5 data/create/advancements/recipes/building_blocks/polished_cut_diorite_stairs_from_stone_types_diorite_stonecutting.json +5e47cf1fa4c4064ef0be3191834dcca1356c40fc data/create/advancements/recipes/building_blocks/polished_cut_diorite_wall.json +25d945aac4babea5b2c912814ac1ddb9d583f371 data/create/advancements/recipes/building_blocks/polished_cut_diorite_wall_from_stone_types_diorite_stonecutting.json +a9c698dfb81d861544eab9b401beed3bfbe54f35 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_from_stone_types_dripstone_stonecutting.json +1362ef1d4e3ddc7dfb5653e97574655c186c05a7 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_slab.json +928bd5e3d6eb0033452bd001c763843e03f2a505 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json +8322b077bf547d74a8cc7dc20a732b6caab77f50 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_slab_recycling.json +feec82936f9a49529ad6d8c33c032ef36b497606 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_stairs.json +5d38f353bd97279159b81f20b94e0f5b289afd17 data/create/advancements/recipes/building_blocks/polished_cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json +d7c53d9e13754007536e8dea6eee08ac20f5ae6a data/create/advancements/recipes/building_blocks/polished_cut_dripstone_wall.json +cded612f05acaaf09268838e93fedb60e7520b9f data/create/advancements/recipes/building_blocks/polished_cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json +3d4b5411f70ca4c20224cf9b0866157b9dee7107 data/create/advancements/recipes/building_blocks/polished_cut_granite_from_stone_types_granite_stonecutting.json +361f660cbea32653c82bbf11b575da5b37b16e7e data/create/advancements/recipes/building_blocks/polished_cut_granite_slab.json +d2e69e8c673d5a70e39355f21c9666396f2a12dd data/create/advancements/recipes/building_blocks/polished_cut_granite_slab_from_stone_types_granite_stonecutting.json +603396c9cda565c5fa8d5810ca2b74ab9dfb9952 data/create/advancements/recipes/building_blocks/polished_cut_granite_slab_recycling.json +c714e45d16abcb1b688b6f62e1beefa029ebc4ca data/create/advancements/recipes/building_blocks/polished_cut_granite_stairs.json +172898dbb51864413305e0561c7a55f777b7801c data/create/advancements/recipes/building_blocks/polished_cut_granite_stairs_from_stone_types_granite_stonecutting.json +46fe008fc3d4b555ba81e55c64d1d4d6d63e06e1 data/create/advancements/recipes/building_blocks/polished_cut_granite_wall.json +c4559773b0687008d4a376ef1671e9d1f4a96152 data/create/advancements/recipes/building_blocks/polished_cut_granite_wall_from_stone_types_granite_stonecutting.json +68656485bed546715a186ac4867a7f7eae046611 data/create/advancements/recipes/building_blocks/polished_cut_limestone_from_stone_types_limestone_stonecutting.json +56ade4f522f57464fbed7bb3fa7d032581d98e55 data/create/advancements/recipes/building_blocks/polished_cut_limestone_slab.json +241258dea5931bde59de2a5a4b10327881870cea data/create/advancements/recipes/building_blocks/polished_cut_limestone_slab_from_stone_types_limestone_stonecutting.json +fc477b30f4887c6763320e12671cd7ac361fffe3 data/create/advancements/recipes/building_blocks/polished_cut_limestone_slab_recycling.json +4bc41555ab2a72b6dcba8dcb7d00f40e1e4a904b data/create/advancements/recipes/building_blocks/polished_cut_limestone_stairs.json +59db9628d8652d6e80d2e623043a558e4bfa88cb data/create/advancements/recipes/building_blocks/polished_cut_limestone_stairs_from_stone_types_limestone_stonecutting.json +3fe5730219354f9e8c0a8bfa2397668aebfcefcd data/create/advancements/recipes/building_blocks/polished_cut_limestone_wall.json +3fd038290aeb9d6a0b29a65e025978ae3caab3f9 data/create/advancements/recipes/building_blocks/polished_cut_limestone_wall_from_stone_types_limestone_stonecutting.json +06e9bfef95bb6f86303a55ca22bf5e25d8ab9cbc data/create/advancements/recipes/building_blocks/polished_cut_ochrum_from_stone_types_ochrum_stonecutting.json +3f05c5533b01764b48ce51cf8ae8045ccb957bda data/create/advancements/recipes/building_blocks/polished_cut_ochrum_slab.json +1a1cad0ac54871a3f8546d806495844bec21cf72 data/create/advancements/recipes/building_blocks/polished_cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json +0c37b379cd11da61bb48b86de2f25f27abc9ad98 data/create/advancements/recipes/building_blocks/polished_cut_ochrum_slab_recycling.json +3d723f0bf6dbcfbf2d0adb25b68d404fdfcdcf77 data/create/advancements/recipes/building_blocks/polished_cut_ochrum_stairs.json +9c00c2b6f71e67c5e2492892a668db8344a3ca74 data/create/advancements/recipes/building_blocks/polished_cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json +67b6fa8bb4272be63a3cdb5504c3d4cf2dc42cb9 data/create/advancements/recipes/building_blocks/polished_cut_ochrum_wall.json +6c3e54502b831fdb448a7370001c9b98ca72205b data/create/advancements/recipes/building_blocks/polished_cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json +ea64ffba2b7a2edd5053704d979df243a013f561 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_from_stone_types_scorchia_stonecutting.json +bcb919f45d583cdd8f72974a67ac5f080a020dde data/create/advancements/recipes/building_blocks/polished_cut_scorchia_slab.json +d24eb1f365fb47b35f9d5142bf0e2f5c1e631220 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json +090f879ca2c6104377a3733e9425e3f11999d0d3 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_slab_recycling.json +b69955814a9ebeea5e4e184129c3cb987064e158 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_stairs.json +1870fe611cd9e209a3080f8881f7992f3ed34f38 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json +3c6852d46b56b67c47360ac1416f10ba0e79bf4d data/create/advancements/recipes/building_blocks/polished_cut_scorchia_wall.json +23028d168d7a4a5f48517f17687f41e90a34ea61 data/create/advancements/recipes/building_blocks/polished_cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json +55771e020b371f5f00da9f4d8ace094deb4faa3d data/create/advancements/recipes/building_blocks/polished_cut_scoria_from_stone_types_scoria_stonecutting.json +9635823c4c3b91169c9f8b904c585f058bd93519 data/create/advancements/recipes/building_blocks/polished_cut_scoria_slab.json +58bb66ede9bfdb37cf71c4817a32ec3f929919e2 data/create/advancements/recipes/building_blocks/polished_cut_scoria_slab_from_stone_types_scoria_stonecutting.json +c3ad010468d4d150327a6c9dc4cfeb8321a17281 data/create/advancements/recipes/building_blocks/polished_cut_scoria_slab_recycling.json +a34e4d5f4cf7ccde1d7326fac28f7f8208506083 data/create/advancements/recipes/building_blocks/polished_cut_scoria_stairs.json +a0fa48d2acfc0aa29d2eb80be2f0e88cc06aa1f8 data/create/advancements/recipes/building_blocks/polished_cut_scoria_stairs_from_stone_types_scoria_stonecutting.json +eec4e8d3dc77c1a9f48ec8b095a0a64574cf847c data/create/advancements/recipes/building_blocks/polished_cut_scoria_wall.json +765b35e523f87720f170454caa69d34cd16d150f data/create/advancements/recipes/building_blocks/polished_cut_scoria_wall_from_stone_types_scoria_stonecutting.json +a83112068c17d6cdc18492b90f52242a44286358 data/create/advancements/recipes/building_blocks/polished_cut_tuff_from_stone_types_tuff_stonecutting.json +1f7a5839129bb2779e9f174554643480185fbf23 data/create/advancements/recipes/building_blocks/polished_cut_tuff_slab.json +bd3b49a7972b72caab014f779232a333c8684adf data/create/advancements/recipes/building_blocks/polished_cut_tuff_slab_from_stone_types_tuff_stonecutting.json +179fe9fe54bb6efe8f564a7a9c1a8b4e70569975 data/create/advancements/recipes/building_blocks/polished_cut_tuff_slab_recycling.json +068456f4c1a4c0d531c804ede098764ed8679173 data/create/advancements/recipes/building_blocks/polished_cut_tuff_stairs.json +0e7e9a3cceb9693b014417dfa26aabff4db04578 data/create/advancements/recipes/building_blocks/polished_cut_tuff_stairs_from_stone_types_tuff_stonecutting.json +930ab3f924b43a97bec32a4d68ebe0bde4ed71da data/create/advancements/recipes/building_blocks/polished_cut_tuff_wall.json +616cb66bc6e400192c98a70867266085146b19d4 data/create/advancements/recipes/building_blocks/polished_cut_tuff_wall_from_stone_types_tuff_stonecutting.json +96a9f0f6d797d2fd886351eef79825496c599856 data/create/advancements/recipes/building_blocks/polished_cut_veridium_from_stone_types_veridium_stonecutting.json +db922fda5097cb28e36289fb0a1b70628d59a00b data/create/advancements/recipes/building_blocks/polished_cut_veridium_slab.json +59cb3a282787b169c931ec9af1c65419d59c5779 data/create/advancements/recipes/building_blocks/polished_cut_veridium_slab_from_stone_types_veridium_stonecutting.json +2d129f95440b7fb5f9df9be19ee6afcccae53de5 data/create/advancements/recipes/building_blocks/polished_cut_veridium_slab_recycling.json +ede22a6433dd5f2bcc54621109008eb9685f56c4 data/create/advancements/recipes/building_blocks/polished_cut_veridium_stairs.json +eb33dd848bc607a4a520acad9be7dfd10e6b854d data/create/advancements/recipes/building_blocks/polished_cut_veridium_stairs_from_stone_types_veridium_stonecutting.json +f9a078f3b57a629677f20159e80a515db5d6954b data/create/advancements/recipes/building_blocks/polished_cut_veridium_wall.json +39b4220c78f40d8fe6091d181e0fbec77a4ec076 data/create/advancements/recipes/building_blocks/polished_cut_veridium_wall_from_stone_types_veridium_stonecutting.json +4bf281f0f283356d13715744ee655bd754c582e1 data/create/advancements/recipes/building_blocks/rose_quartz_block_from_rose_quartz_stonecutting.json +d9b4ec55f2d84df4f64e19f7a5611a3fc6076355 data/create/advancements/recipes/building_blocks/rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json +c4c087911453bd979e028d3b3558b273e3cb5926 data/create/advancements/recipes/building_blocks/scorchia_from_stone_types_scorchia_stonecutting.json +780bb3d13fcd8abf6e166b04566b141e023ee11e data/create/advancements/recipes/building_blocks/scorchia_pillar_from_stone_types_scorchia_stonecutting.json +5c5c5080c1136c046caee2d14dd2c3c9f09abad3 data/create/advancements/recipes/building_blocks/scoria_from_stone_types_scoria_stonecutting.json +5a6b12869ffcbd1d9b4fbe1fee444fcde95d2953 data/create/advancements/recipes/building_blocks/scoria_pillar_from_stone_types_scoria_stonecutting.json +a51ca3151c517113338720edeac0e02a46ebb03a data/create/advancements/recipes/building_blocks/small_andesite_bricks_from_stone_types_andesite_stonecutting.json +f72093994236a0580c6cafd08fb42f061733de01 data/create/advancements/recipes/building_blocks/small_andesite_brick_slab.json +05092201e6c514d3eae566fb1ce98ad415660112 data/create/advancements/recipes/building_blocks/small_andesite_brick_slab_from_stone_types_andesite_stonecutting.json +0e41d75b613a0ebd0c023669dcfd34f11b14fd0e data/create/advancements/recipes/building_blocks/small_andesite_brick_slab_recycling.json +6a925bdb69f0c59a54ad0b926eec7032102dd771 data/create/advancements/recipes/building_blocks/small_andesite_brick_stairs.json +8bbf898cbc47ac7a326c0d082a92a452b6915a7e data/create/advancements/recipes/building_blocks/small_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json +9e0685dd668550c67812d1caccd8c8cae9f2041c data/create/advancements/recipes/building_blocks/small_andesite_brick_wall.json +7a1bfa848f950482f82d7fe7a9cf3cf916f91702 data/create/advancements/recipes/building_blocks/small_andesite_brick_wall_from_stone_types_andesite_stonecutting.json +0bfa788d0038077a88678ff16104a8b82038b3da data/create/advancements/recipes/building_blocks/small_asurine_bricks_from_stone_types_asurine_stonecutting.json +3dccee988c08e1988886d9f09f2b5b42332ac083 data/create/advancements/recipes/building_blocks/small_asurine_brick_slab.json +438469fb06dff95a0ab9e0cb183795432d9b78dd data/create/advancements/recipes/building_blocks/small_asurine_brick_slab_from_stone_types_asurine_stonecutting.json +3eb65706d975e6f1e429f43d7384272a58872f10 data/create/advancements/recipes/building_blocks/small_asurine_brick_slab_recycling.json +fb8cab1a3ecef97eaf7d744bb0d1d09d46859b60 data/create/advancements/recipes/building_blocks/small_asurine_brick_stairs.json +525fff52f5dea3178356b7c5f7606d2a369b346e data/create/advancements/recipes/building_blocks/small_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json +39df7ef2b88df45ba4a06bfa9cd7f863f813cb30 data/create/advancements/recipes/building_blocks/small_asurine_brick_wall.json +21aa9dc72b12eb0a33cdc9904ee595de802b55f4 data/create/advancements/recipes/building_blocks/small_asurine_brick_wall_from_stone_types_asurine_stonecutting.json +46666ef8d341971cdd989f14575973777a85cdc6 data/create/advancements/recipes/building_blocks/small_calcite_bricks_from_stone_types_calcite_stonecutting.json +d61fce64a295a2c3b9433bc27ac50f4f1f6a678d data/create/advancements/recipes/building_blocks/small_calcite_brick_slab.json +7f2e73d01b9bff473c4ecf76ab967b3aa934ff87 data/create/advancements/recipes/building_blocks/small_calcite_brick_slab_from_stone_types_calcite_stonecutting.json +1095487af055116acc2eba87d92dd0918385e9ac data/create/advancements/recipes/building_blocks/small_calcite_brick_slab_recycling.json +296fa3829064c38d49df36a1cf429dcaeedae6d8 data/create/advancements/recipes/building_blocks/small_calcite_brick_stairs.json +e3bd0900dc92b26fe69c7f4e81db76678505222b data/create/advancements/recipes/building_blocks/small_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json +c88fb3af07c32aa127cbe0043075f50fed869839 data/create/advancements/recipes/building_blocks/small_calcite_brick_wall.json +ea58b78e177134c73ed5bfb081761f90cc7caa3e data/create/advancements/recipes/building_blocks/small_calcite_brick_wall_from_stone_types_calcite_stonecutting.json +c48216f26cfe93ce99f7f2f0e9f68d1ee2a95e46 data/create/advancements/recipes/building_blocks/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json +ed4d6e7779749dd647f744f0486e78b93057aa33 data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab.json +7f3ad6d79eb9d433d5a0e295eb2b099a5f815876 data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json +b980fcc4b29f9ff897dd867222fc4248d76e808a data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab_recycling.json +9cc760530f0503c03baa32fb06ea388498bba9da data/create/advancements/recipes/building_blocks/small_crimsite_brick_stairs.json +c06600eda4e4bd7c46e4e315a0569fbdfa4bb087 data/create/advancements/recipes/building_blocks/small_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json +4021a4a761b06def09f19d6a60bc0722e69ec08d data/create/advancements/recipes/building_blocks/small_crimsite_brick_wall.json +2d8eae517a914e93538307efe23d532582d487e2 data/create/advancements/recipes/building_blocks/small_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json +ed82f0fac452147faa997af1d45278f501ef165b data/create/advancements/recipes/building_blocks/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json +e4674821cc17adadecacc55d48c028847caf5fea data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab.json +8c0c51d052b110fec3668618be2bdeaf8d0c7cc5 data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json +f8f7ace802b6c73fabfabbaae1c1383a3c0bcf6b data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab_recycling.json +e2e16c3c0e761ef44f9b21ae3bd95300a33459be data/create/advancements/recipes/building_blocks/small_deepslate_brick_stairs.json +37ef4192f1db7dd5c066a47480f86f60687c9894 data/create/advancements/recipes/building_blocks/small_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json +6f4d365ce26fb4081a5af0f6e21631209b5b106d data/create/advancements/recipes/building_blocks/small_deepslate_brick_wall.json +e0c7377c55dc94b8efd62cb6f57325c94206cbf4 data/create/advancements/recipes/building_blocks/small_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json +9bb23924495112ba177d12ba2a5adcb872a2b76f data/create/advancements/recipes/building_blocks/small_diorite_bricks_from_stone_types_diorite_stonecutting.json +d4b96bcd8902e9bce19603abb99cb7edeb260189 data/create/advancements/recipes/building_blocks/small_diorite_brick_slab.json +2ed3800996491c9a1db23d9cbed04cc5ee963df6 data/create/advancements/recipes/building_blocks/small_diorite_brick_slab_from_stone_types_diorite_stonecutting.json +895d2158ba0783c5fd97b802ef5866d7532df6ba data/create/advancements/recipes/building_blocks/small_diorite_brick_slab_recycling.json +439f594a09f284f25fb4c1c6d0b0ac0a0a9b63da data/create/advancements/recipes/building_blocks/small_diorite_brick_stairs.json +0f4b92965c05ddf71fa24b2b08a0cce358ac8dd1 data/create/advancements/recipes/building_blocks/small_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json +633d921515fb4ad0e3177f3c8f151da80008053b data/create/advancements/recipes/building_blocks/small_diorite_brick_wall.json +3dea60492331bcd3253d90534559cc0bdb0822ae data/create/advancements/recipes/building_blocks/small_diorite_brick_wall_from_stone_types_diorite_stonecutting.json +632ced3760d55b56d1620e447b8b762e0e4a29f3 data/create/advancements/recipes/building_blocks/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json +92bb21a400d9720a2f06882049d5b3863a93969d data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab.json +02e2b98eeef9cdc20a8678beec4c7aa8a6cde948 data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json +35830242bc48b1355830d6cb17dc4dc547d51bc0 data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab_recycling.json +7021eb6bb791c33c5d60ce6a88a452e4a7a9462a data/create/advancements/recipes/building_blocks/small_dripstone_brick_stairs.json +92523f3058a580743f95e9347fa97e0f5f6483f6 data/create/advancements/recipes/building_blocks/small_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json +6e26ab4ad96225b7dd1a4aa06295b0d85e87400b data/create/advancements/recipes/building_blocks/small_dripstone_brick_wall.json +e30a5f31d6478dfe7693077727b1abfc40b33f9b data/create/advancements/recipes/building_blocks/small_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json +1805b7f9db21b4530b173ab6945584e7d852b218 data/create/advancements/recipes/building_blocks/small_granite_bricks_from_stone_types_granite_stonecutting.json +a2929bbd4c81b9601aeca74110936343102b7b5a data/create/advancements/recipes/building_blocks/small_granite_brick_slab.json +0fa83c337d5612e2b8368d5bff34117e0c1cf40a data/create/advancements/recipes/building_blocks/small_granite_brick_slab_from_stone_types_granite_stonecutting.json +0bc47cb22cc70a34879092a57c87551e6fa9f634 data/create/advancements/recipes/building_blocks/small_granite_brick_slab_recycling.json +4f0a780692af18151807a0619a1de823ef473bb8 data/create/advancements/recipes/building_blocks/small_granite_brick_stairs.json +44f3e71a4e8b78db74a21a42c3cebfbc15fe0180 data/create/advancements/recipes/building_blocks/small_granite_brick_stairs_from_stone_types_granite_stonecutting.json +3a6edafcb559e767caf421cf1bd6e064940f33e2 data/create/advancements/recipes/building_blocks/small_granite_brick_wall.json +cac9914c729c0ecf5e9e1b4fe6498005e7c532f3 data/create/advancements/recipes/building_blocks/small_granite_brick_wall_from_stone_types_granite_stonecutting.json +1ca86b11356749caf7515fc61b8ac5de53d019f6 data/create/advancements/recipes/building_blocks/small_limestone_bricks_from_stone_types_limestone_stonecutting.json +4f3cc93f422ee9f05587b89d6729a6cc86f572c0 data/create/advancements/recipes/building_blocks/small_limestone_brick_slab.json +02d0c45cd014fd660a9d3eb1c1c6b40ba806b2fb data/create/advancements/recipes/building_blocks/small_limestone_brick_slab_from_stone_types_limestone_stonecutting.json +8fb46bce94f6cca943e4ae427c04d9617ada277d data/create/advancements/recipes/building_blocks/small_limestone_brick_slab_recycling.json +9b8c1f4ce2fc7d249487cdd8ae295fc235a25943 data/create/advancements/recipes/building_blocks/small_limestone_brick_stairs.json +00b61a4d23f8b16a7e4d9bf46fbe52c6b5dd561c data/create/advancements/recipes/building_blocks/small_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json +7c6b80f174687efe10007c0235f2a68db7062b12 data/create/advancements/recipes/building_blocks/small_limestone_brick_wall.json +7f9ade635dcda8d5baae2bbdddc018bcc715f681 data/create/advancements/recipes/building_blocks/small_limestone_brick_wall_from_stone_types_limestone_stonecutting.json +bab018a0adcbc0582ba756158941a87923b20384 data/create/advancements/recipes/building_blocks/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json +9c98b7b56f92f6adc75473f5b0ae4dc69ac8aa9a data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab.json +611fb57772f1446236256f1235751dec6f81cd0e data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json +243821a2c3e465f5346ad58e0afda624c09ab946 data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab_recycling.json +b9a16792e6158a2923454c9a44d9c176c9607c24 data/create/advancements/recipes/building_blocks/small_ochrum_brick_stairs.json +bb91a8ba1ef1c8cb725f18a4d577bb476b9ae68d data/create/advancements/recipes/building_blocks/small_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json +5cf5574da0b29895960fa7f0fd63d3f81814f7b3 data/create/advancements/recipes/building_blocks/small_ochrum_brick_wall.json +1b5d14c921a85a3a5cdb9f845d4f0ddf98f87347 data/create/advancements/recipes/building_blocks/small_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +8d6ccacf1af917094b1688ed70dc75bf54611e93 data/create/advancements/recipes/building_blocks/small_rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json +7d679c66588f8a717619a7f89861d57ec04f04a1 data/create/advancements/recipes/building_blocks/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json +2003f1248faaeb4fe6761febda8e29d087f99dc7 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab.json +ff5c50697aefe21c1570230a13255c912744b629 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json +8d1fd41b03940add231fa207d3ddaa1f78cf2b85 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab_recycling.json +43a0d4f9ea8130d4d8c1adf7f735d33ac5c288d1 data/create/advancements/recipes/building_blocks/small_scorchia_brick_stairs.json +8586f387cc9bb74250369373348005f6aa686af2 data/create/advancements/recipes/building_blocks/small_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json +94552be031c17f5ef9d97cf5fe33beb15141291f data/create/advancements/recipes/building_blocks/small_scorchia_brick_wall.json +86e866f92095b03b5d77a91425e5e2ef307f4852 data/create/advancements/recipes/building_blocks/small_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json +e542cd94f84a90530332608b1040e2e6189a51fe data/create/advancements/recipes/building_blocks/small_scoria_bricks_from_stone_types_scoria_stonecutting.json +ad4c35afd6c3d55b356e38289c64e8cf6d194d10 data/create/advancements/recipes/building_blocks/small_scoria_brick_slab.json +2f1acca02bb5a40bf174ceeb5272ba1243b8635c data/create/advancements/recipes/building_blocks/small_scoria_brick_slab_from_stone_types_scoria_stonecutting.json +dba264e073eab7b2fb1494cb117574b6a6b83919 data/create/advancements/recipes/building_blocks/small_scoria_brick_slab_recycling.json +69316cb44910a6e5fe4b94ae7afced129dd7870d data/create/advancements/recipes/building_blocks/small_scoria_brick_stairs.json +0e64e1dc80a0b84e05260191951ed930a8e578f6 data/create/advancements/recipes/building_blocks/small_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json +95b866fac218affb9aac93272f5436e30dd4678c data/create/advancements/recipes/building_blocks/small_scoria_brick_wall.json +23493359766c969d2fa64575c5af047e6a924373 data/create/advancements/recipes/building_blocks/small_scoria_brick_wall_from_stone_types_scoria_stonecutting.json +b7fc4fbd0d6ce28946b5cbef40d86de3ca37f695 data/create/advancements/recipes/building_blocks/small_tuff_bricks_from_stone_types_tuff_stonecutting.json +03acb1becaa3c7f6fc0ced99e6afcf4ac0ec4cb2 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab.json +599693bc47bfd65cc9e3babc0a2f33c0d2bbfd31 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab_from_stone_types_tuff_stonecutting.json +aae2cb75ee4b9312e79dfea519c35f5e20ed4da6 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab_recycling.json +c72364e32b82f45f17491dd41967373c35d8dfb5 data/create/advancements/recipes/building_blocks/small_tuff_brick_stairs.json +369763433d6af43d94392e870b3d861f739ba0f9 data/create/advancements/recipes/building_blocks/small_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json +506bbae420bff66d492214c49dabf52e5cbcf6e4 data/create/advancements/recipes/building_blocks/small_tuff_brick_wall.json +6db7e4b981ec28c776988a531c03dbe28fb0a1c2 data/create/advancements/recipes/building_blocks/small_tuff_brick_wall_from_stone_types_tuff_stonecutting.json +9fd6e20a4555b591b17ef225316782de333780fa data/create/advancements/recipes/building_blocks/small_veridium_bricks_from_stone_types_veridium_stonecutting.json +b61a773f683c415617a408fa0781e7e7d61cb1af data/create/advancements/recipes/building_blocks/small_veridium_brick_slab.json +526a5323263292bd091c03231a156e18460c34a1 data/create/advancements/recipes/building_blocks/small_veridium_brick_slab_from_stone_types_veridium_stonecutting.json +ef040b7189b17cce9dd69c47af61c7abca6f43cd data/create/advancements/recipes/building_blocks/small_veridium_brick_slab_recycling.json +7a1e8aa00cdacb79570fbd98655b2d90cbb8ab98 data/create/advancements/recipes/building_blocks/small_veridium_brick_stairs.json +6a12b73815434a544881680cb071f273a75f62a5 data/create/advancements/recipes/building_blocks/small_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json +e6dfacd8f2f57d4df42927783750254f7163251a data/create/advancements/recipes/building_blocks/small_veridium_brick_wall.json +ee4012cc014539be113ace8f80e51c85d2daead9 data/create/advancements/recipes/building_blocks/small_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +03a87030672d40b0b2b6ad085103c9a5cef067ce data/create/advancements/recipes/building_blocks/spruce_window.json +dfea65f25ebcbe0caf2694dec3d3ea616e2e9291 data/create/advancements/recipes/building_blocks/spruce_window_pane.json +763b3b49296a284f41cbccdc7f1ffb13c89d42db data/create/advancements/recipes/building_blocks/tiled_glass_from_glass_colorless_stonecutting.json +6bf6ced432a4aae040b872d19850cd8d3bd1ec35 data/create/advancements/recipes/building_blocks/tiled_glass_pane.json +488ca8e983ed16a45d68ec40b90f656e137da203 data/create/advancements/recipes/building_blocks/tuff_from_stone_types_tuff_stonecutting.json +7569d0b68b77da383fccf0f6fd2d060b8cc3e0be data/create/advancements/recipes/building_blocks/tuff_pillar_from_stone_types_tuff_stonecutting.json +f570839b1b1d7a2798e51e9139636eafcf28562d data/create/advancements/recipes/building_blocks/veridium_from_stone_types_veridium_stonecutting.json +f4afa2d48fa4688a6ce2b5db92fc98ee68c14907 data/create/advancements/recipes/building_blocks/veridium_pillar_from_stone_types_veridium_stonecutting.json +1762e6aa720d05bf08025a05f437e61debca7b25 data/create/advancements/recipes/building_blocks/vertical_framed_glass_from_glass_colorless_stonecutting.json +47cf1a182885e51a5ce5289150c5883142d4ad3f data/create/advancements/recipes/building_blocks/vertical_framed_glass_pane.json +6910b181d623de7b208d0c162fb14d0e21d71105 data/create/advancements/recipes/building_blocks/warped_window.json +658379f08f166bca27c8b2332c71bc36386e49ee data/create/advancements/recipes/building_blocks/warped_window_pane.json +8fc55eaf2b17cf47e302de9c72e494d0c37f6ab7 data/create/advancements/recipes/building_blocks/weathered_copper_shingle_slab.json +2a2c9a673bb47cce7103bc3b3721daa36a08fd89 data/create/advancements/recipes/building_blocks/weathered_copper_shingle_slab_from_weathered_copper_shingles_stonecutting.json +db34ff6443334c28446cd10be917b8c548b65f22 data/create/advancements/recipes/building_blocks/weathered_copper_shingle_stairs.json +a9e35aaf621cdb2648f4b9e9beacc91092e8d3b3 data/create/advancements/recipes/building_blocks/weathered_copper_shingle_stairs_from_weathered_copper_shingles_stonecutting.json +87639c559e389166f83091ae8d780cff0931c432 data/create/advancements/recipes/building_blocks/weathered_copper_tile_slab.json +7eeaf1b7cf0a788d4b9a61274cf4752ba1fe57cb data/create/advancements/recipes/building_blocks/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json +86e0a3eb797ecdfd1626ce84f26e25c503a68587 data/create/advancements/recipes/building_blocks/weathered_copper_tile_stairs.json +f093326ca1f341bede9f7cbefecadf7d73d3f9d7 data/create/advancements/recipes/building_blocks/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json +39c93330e07e58d79db13d132d7f1a8f33670e9b data/create/advancements/recipes/decorations/andesite_bars_from_andesite_alloy_stonecutting.json +769926b9bb00dea3bf0534c8d828873b13def961 data/create/advancements/recipes/decorations/andesite_ladder_from_andesite_alloy_stonecutting.json +266700212dece6cba8c338a1e0a8507bb41f92e6 data/create/advancements/recipes/decorations/andesite_scaffolding_from_andesite_alloy_stonecutting.json +07ad89608ed200f4c8051a398f5da9d29769c39f data/create/advancements/recipes/decorations/brass_bars_from_ingots_brass_stonecutting.json +d11ca4dc890089326eede1bd5b7a32a97cc91886 data/create/advancements/recipes/decorations/brass_ladder_from_ingots_brass_stonecutting.json +cbeb1685b639f0b0b2a637374ff548251c0a932e data/create/advancements/recipes/decorations/brass_scaffolding_from_ingots_brass_stonecutting.json +2ed97c748d8fe0c9fd060b53a4095a37a10ce67f data/create/advancements/recipes/decorations/copper_bars_from_ingots_copper_stonecutting.json +e55c465683e664a0205b62d2e132afeb89ee4dce data/create/advancements/recipes/decorations/copper_ladder_from_ingots_copper_stonecutting.json +d3a0524f9fce7293f8c3adbd757c5d5afe74af27 data/create/advancements/recipes/decorations/copper_scaffolding_from_ingots_copper_stonecutting.json +34ae39bca445f80d431b3e329de3c1bf847a8eef data/create/advancements/recipes/misc/crafting/kinetics/black_valve_handle_from_other_valve_handle.json +e222002ee051e7b72b3658655bb53b5adb825272 data/create/advancements/recipes/misc/crafting/kinetics/blue_valve_handle_from_other_valve_handle.json +472c9e1d515f5f34d97efc334cefe3eb62d860e4 data/create/advancements/recipes/misc/crafting/kinetics/brown_valve_handle_from_other_valve_handle.json +8e9a8e5aecd55970ddeafb25cf485e917a7c9aad data/create/advancements/recipes/misc/crafting/kinetics/cyan_valve_handle_from_other_valve_handle.json +d0642abbb49de43593de251670df39e9fc374b30 data/create/advancements/recipes/misc/crafting/kinetics/gray_valve_handle_from_other_valve_handle.json +2167687c9d5399f38bf69063780113d77c6546b1 data/create/advancements/recipes/misc/crafting/kinetics/green_valve_handle_from_other_valve_handle.json +b7148aaeedfc1b366ff7a79ae94308c072cd0d44 data/create/advancements/recipes/misc/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json +3edfa27eac6d9066166bfedaa396e356882fffe4 data/create/advancements/recipes/misc/crafting/kinetics/light_gray_valve_handle_from_other_valve_handle.json +8f1e7f4210dfbeb6e89a88ac08c7e0b830a96e45 data/create/advancements/recipes/misc/crafting/kinetics/lime_valve_handle_from_other_valve_handle.json +dc2eeceb3fd0f017050cbc37d9a5a3a69a8fec81 data/create/advancements/recipes/misc/crafting/kinetics/magenta_valve_handle_from_other_valve_handle.json +12bed10f9db6cd09e80f6558fba37ef479af6b85 data/create/advancements/recipes/misc/crafting/kinetics/orange_valve_handle_from_other_valve_handle.json +c96b1b147139c9d560e9d1e1dd9a726ebb771329 data/create/advancements/recipes/misc/crafting/kinetics/pink_valve_handle_from_other_valve_handle.json +367cb403461c6f55e03f9959776053ca4a5b358e data/create/advancements/recipes/misc/crafting/kinetics/purple_valve_handle_from_other_valve_handle.json +004b31d1be78dbc4be60f4fd0879065f1a685518 data/create/advancements/recipes/misc/crafting/kinetics/red_valve_handle_from_other_valve_handle.json +cf2920d4d27c40fe71dd8954225e7f2a38ba2a4f data/create/advancements/recipes/misc/crafting/kinetics/white_valve_handle_from_other_valve_handle.json +54bf51dcbdd86635e68d366cb4130f65b9c0fe4a data/create/advancements/recipes/misc/crafting/kinetics/yellow_valve_handle_from_other_valve_handle.json +706a4da01ddbd9c3db4d3183ffdcd602a558a5cd data/create/loot_tables/blocks/acacia_window.json +a7b37cec417ec9f9095e2ae11c990e4906d6af0e data/create/loot_tables/blocks/acacia_window_pane.json +5eee4b2702e432e03b1f46c6f1573ceee67b131f data/create/loot_tables/blocks/adjustable_chain_gearshift.json +95ddcd4d49a2fd3174689c1e39ba5e5f583be36f data/create/loot_tables/blocks/analog_lever.json +814857f893aa281546f96192e28917d0b1207e81 data/create/loot_tables/blocks/andesite_alloy_block.json +aaaedbe325d5358d10e15389009dbf7fbf9bc637 data/create/loot_tables/blocks/andesite_bars.json +d46459cf38853767c34bda3909f24370f2d6943d data/create/loot_tables/blocks/andesite_belt_funnel.json +3086cbf5ae5034d23ddd6c057d113736cef40516 data/create/loot_tables/blocks/andesite_casing.json +58e150c67c259f5460e5c5dd5cbf6e4cf7299d69 data/create/loot_tables/blocks/andesite_door.json +9a5be1db8d171e74d256ad3326004452bf86a07b data/create/loot_tables/blocks/andesite_encased_cogwheel.json +4b71486ad67bc07dbae4fed50fb12d0a08d40841 data/create/loot_tables/blocks/andesite_encased_large_cogwheel.json +18935527f056240bf2f69bd227fc01e87f569353 data/create/loot_tables/blocks/andesite_encased_shaft.json +ac6b9e99a900f203f69c5127cc44c0de48b0d946 data/create/loot_tables/blocks/andesite_funnel.json +1d9b959e0a6b965fef70136c2988e37c94f58b9e data/create/loot_tables/blocks/andesite_ladder.json +93e40b5e41c32af364a4636989a72ef7901e6bd6 data/create/loot_tables/blocks/andesite_pillar.json +191c341be37299e8ab0d692eb3a185188157ebdf data/create/loot_tables/blocks/andesite_scaffolding.json +1c6f1dd9ec49b7db86e43706e940208b51e0f6d5 data/create/loot_tables/blocks/andesite_tunnel.json +d408536459078c1d72770b7431137d7d8d8ff3bb data/create/loot_tables/blocks/asurine.json +3129cb3d97d657bf16ea5973b3bde1e31ff054c7 data/create/loot_tables/blocks/asurine_pillar.json +8ac6f7a29c32e636b0639ac2caaa60882617f675 data/create/loot_tables/blocks/basin.json +d964b7a8f6a4ce28ce640d31a01e77eafcc181e5 data/create/loot_tables/blocks/belt.json +a268eb02c10015a901a6543595b2b815a8026d78 data/create/loot_tables/blocks/birch_window.json +43d16eae230de501c528f4e9af666f72a081ed29 data/create/loot_tables/blocks/birch_window_pane.json +4aec2374e76dfa5535fe22b1fc02b4b2d453217d data/create/loot_tables/blocks/black_nixie_tube.json +7ce6dd2c0d02eb1b56ec441044dfc608ea6bcb41 data/create/loot_tables/blocks/black_sail.json +2449b8c173fbbc2a96e0b8d1996d72fb60527e64 data/create/loot_tables/blocks/black_seat.json +2d33e25b2741f634bbd6cd77b31c17dd94511d94 data/create/loot_tables/blocks/black_toolbox.json +f911ac185cd48afa2393d24f28a688936a9fa147 data/create/loot_tables/blocks/black_valve_handle.json +eee41c02c8cfcdb56f31e74fc266783b785bea9d data/create/loot_tables/blocks/blaze_burner.json +247d12823eed3b9248003aca8e3ead87972ac61e data/create/loot_tables/blocks/blue_nixie_tube.json +bb9d906a97810ed1461ed321ef8e4bee1dd104fb data/create/loot_tables/blocks/blue_sail.json +833fe6bc3020055dd0d6f46b324cbe27b248708d data/create/loot_tables/blocks/blue_seat.json +9d22716d9d846dc9587e327dfcdf18dd5955f826 data/create/loot_tables/blocks/blue_toolbox.json +6d7ecb10e21b1e12c83c71736f14cbba3ccd7aaf data/create/loot_tables/blocks/blue_valve_handle.json +7d8b199f381003e5a74a8144976b65c93a09dbcb data/create/loot_tables/blocks/brass_bars.json +64a5869c6b3edeca06771f8ef64ef9521d83302a data/create/loot_tables/blocks/brass_belt_funnel.json +78ecee2c9baf6b0c78f6c7aa692e102a3f4dda74 data/create/loot_tables/blocks/brass_block.json +d45666afba904c2f3fdcfe78a4d22f0ab98efa5d data/create/loot_tables/blocks/brass_casing.json +bb07dcb6f4f1e01b85a00ab0fdfb27100e8a5622 data/create/loot_tables/blocks/brass_door.json +ac59fa67bd9bc003afc50202d0ca576a9b0a2957 data/create/loot_tables/blocks/brass_encased_cogwheel.json +cecada7e520f41c014929136b53509b9b75c2dfd data/create/loot_tables/blocks/brass_encased_large_cogwheel.json +e466a397f84957616f7e83954db2050355f052c9 data/create/loot_tables/blocks/brass_encased_shaft.json +7b79b14f64108cd8a734f95dd8c721830b48ac82 data/create/loot_tables/blocks/brass_funnel.json +8d58d4c771843950a14fd7b800a05736c1fc88d9 data/create/loot_tables/blocks/brass_ladder.json +429d524c9848b44d19028126f0efd678e0c4b680 data/create/loot_tables/blocks/brass_scaffolding.json +af90102bfe0e3a14bf1330cddec553f27b8fba89 data/create/loot_tables/blocks/brass_tunnel.json +d391cff5b741fd6ddf5b6fa64e05526eb3a9f0d9 data/create/loot_tables/blocks/brown_nixie_tube.json +862bd3ceed05ea45c03911bb8403817b73c4bc38 data/create/loot_tables/blocks/brown_sail.json +6ddbdd489120be56f50272c86ecdb886afa3a8e4 data/create/loot_tables/blocks/brown_seat.json +588ae3d0da73eed3bc30cb28c583e7f8312d15bd data/create/loot_tables/blocks/brown_toolbox.json +7c7cf4c30786f6e0a699e2b3f9120343e53107f4 data/create/loot_tables/blocks/brown_valve_handle.json +06d1c478e4236210aa12b5911691868fef33bb5f data/create/loot_tables/blocks/calcite_pillar.json +515c839deea520b07b03f7ba65c4a7b22fdf5ba3 data/create/loot_tables/blocks/cart_assembler.json +fb4877d45df15be1a74378ab28f23fbf9d0657ef data/create/loot_tables/blocks/chute.json +ace9255cbdd1af5e5068916d2a6bed2f861f81f1 data/create/loot_tables/blocks/clipboard.json +bfd871acdde6c239098ead188a5aad7636d11bc0 data/create/loot_tables/blocks/clockwork_bearing.json +46b60dd75e2710a12642cf99b53b593e0e39ea85 data/create/loot_tables/blocks/clutch.json +420404718066035bc7a25f7d5c758a8945dddb66 data/create/loot_tables/blocks/cogwheel.json +9553bd58623a5df8f5cd6706633a96699afa4dc1 data/create/loot_tables/blocks/content_observer.json +cef6a697d6797dbd5395a4377c3e943ca3099433 data/create/loot_tables/blocks/contraption_controls.json +93e18057b39238aa3bd913e10ea027eb37d38d94 data/create/loot_tables/blocks/controller_rail.json +f2058ad809606d54123c7efbad2a6b995ed1defe data/create/loot_tables/blocks/controls.json +639d3d5bbbc452b2c4d170cf005dce9b3bcff26c data/create/loot_tables/blocks/copper_backtank.json +fa0856e11351ad0882de2066569807e782071881 data/create/loot_tables/blocks/copper_bars.json +5f48b688829ca7849997d88697cff2de1ede4804 data/create/loot_tables/blocks/copper_casing.json +0937b9f634b86dbe41e07eda52c69993fce60fb5 data/create/loot_tables/blocks/copper_door.json +8ed70d812f38adfa147db07a4f2bbe206a69ad20 data/create/loot_tables/blocks/copper_ladder.json +ac621731ca23e6fbb1003be59edacdf837dbc37e data/create/loot_tables/blocks/copper_scaffolding.json +9be387731859ccc3aec7701c1804ddc3c5dde216 data/create/loot_tables/blocks/copper_shingles.json +be31f0c68bfe80dff88959bd30ef9a9080dd3b3b data/create/loot_tables/blocks/copper_shingle_slab.json +83ae2652a2df217730d6fb34a65c3962e82a961d data/create/loot_tables/blocks/copper_shingle_stairs.json +9cb359c96543d7421250c4ef4e83a5e170974efb data/create/loot_tables/blocks/copper_tiles.json +adbe83d6bf88dd7d2b0b8788bb619cedd37f59d9 data/create/loot_tables/blocks/copper_tile_slab.json +1e06f16b1fa8e78af5cbfc90ba8ff1136de83d2d data/create/loot_tables/blocks/copper_tile_stairs.json +4f75cad20e6b091d1f07cf3db98520d2dc3af5e7 data/create/loot_tables/blocks/copper_valve_handle.json +14a493a7bad6bd399b662da470b71810bd56e812 data/create/loot_tables/blocks/copycat_bars.json +3a2f3ab0834a0c5089ba0a11f5e9784ce59ef6d8 data/create/loot_tables/blocks/copycat_base.json +a4c40e586fe5b866665ba52555ac8941b00267c7 data/create/loot_tables/blocks/copycat_panel.json +c17df625c252aae4a52161da1d7ce9fccde1174d data/create/loot_tables/blocks/copycat_step.json +c0f3ae61748cf5952abc3c2d0d7fa397eaa48257 data/create/loot_tables/blocks/creative_crate.json +05906a2f442c1c5ed7d756afaed35f0d57f63a29 data/create/loot_tables/blocks/creative_fluid_tank.json +2fc01f3d7b96f7fccc45b5dde19332aa2f037f78 data/create/loot_tables/blocks/creative_motor.json +d73dcf030855d1d88fdc7e2a0c94f3d12fe8f600 data/create/loot_tables/blocks/crimsite.json +e9cc56f746d021b122e3b40d4e7e61bd2e11e645 data/create/loot_tables/blocks/crimsite_pillar.json +d5d2f565bab2e2b81b0798fc7ce0e21acd362ce5 data/create/loot_tables/blocks/crimson_window.json +37623619ad7c1042f82c0f50546e14589ac8a2ea data/create/loot_tables/blocks/crimson_window_pane.json +b892718d33caf0c260b902c92f46f3bfd827af45 data/create/loot_tables/blocks/crushing_wheel.json +ff7853a5d5c0f3bddbcfe07e47efd1ff04b14f0a data/create/loot_tables/blocks/cuckoo_clock.json +9083b026ee254645430434b67c2ba7a842f888bf data/create/loot_tables/blocks/cut_andesite.json +c1aa69f80ba11dd52fb3627fc32377599f5ff887 data/create/loot_tables/blocks/cut_andesite_bricks.json +c74a4cac08ab1f66146466ff9fb40c8f210de63c data/create/loot_tables/blocks/cut_andesite_brick_slab.json +df3f5dcbf676106800bc1113bb022658eb5e85d6 data/create/loot_tables/blocks/cut_andesite_brick_stairs.json +95c5a4a3327f522d986d7baaa747fce5ead8c032 data/create/loot_tables/blocks/cut_andesite_brick_wall.json +cb6cf8aefaac1e00596bd64a182a329dbba7e659 data/create/loot_tables/blocks/cut_andesite_slab.json +7106a637809dcbeb9d4a02a7ff9dc52f7fd9d7a2 data/create/loot_tables/blocks/cut_andesite_stairs.json +e3cfa2ecb0b90ebe07cc98f8e47d22d2c0da67e5 data/create/loot_tables/blocks/cut_andesite_wall.json +75eacbc0656e7a83a20a054755ea7d7d78af983d data/create/loot_tables/blocks/cut_asurine.json +f780d37b956ed734cafcbe42b77f1a8ebfa33350 data/create/loot_tables/blocks/cut_asurine_bricks.json +43ad24bb9da878111f3606a17ef9b45bcc4964ae data/create/loot_tables/blocks/cut_asurine_brick_slab.json +8f4d0af32546b6cc77c68a08dc74494b8be1b7c3 data/create/loot_tables/blocks/cut_asurine_brick_stairs.json +bb9ce58aa5b4e38c4d3b29aa8e0d905054023eae data/create/loot_tables/blocks/cut_asurine_brick_wall.json +972ca04f91a1ce4d35995c14e1b17f773b15b61e data/create/loot_tables/blocks/cut_asurine_slab.json +a55778dd8735286c3abc65046186b6b8dff0367e data/create/loot_tables/blocks/cut_asurine_stairs.json +70284c686f16d215ff1a8fb19bbe36fddbd31e18 data/create/loot_tables/blocks/cut_asurine_wall.json +0f450ecf60c5d201f332b2736c552d0b51b159b8 data/create/loot_tables/blocks/cut_calcite.json +aec526af372816f306826eefe4a6318db7964892 data/create/loot_tables/blocks/cut_calcite_bricks.json +ec0d2854433ac4f58e53685c69dc19629fee16ca data/create/loot_tables/blocks/cut_calcite_brick_slab.json +584e39fa0b78ba8649f69b53f9f032dd1532d6ac data/create/loot_tables/blocks/cut_calcite_brick_stairs.json +cc9cbdb7a50305e47181b2452bfce887f9879437 data/create/loot_tables/blocks/cut_calcite_brick_wall.json +b4e5b6d5cb63b7b1a4fe639fd727a381bfd00588 data/create/loot_tables/blocks/cut_calcite_slab.json +ca83b89401dba12341e6f26786103c10c90447ca data/create/loot_tables/blocks/cut_calcite_stairs.json +64df1c4a373c28bf9be3630935b01a43abd22e03 data/create/loot_tables/blocks/cut_calcite_wall.json +5df3a2229657d7b616790e922b1d1d558b4a5128 data/create/loot_tables/blocks/cut_crimsite.json +59cb609bc9671ac481832eeaf942533c6861fc0e data/create/loot_tables/blocks/cut_crimsite_bricks.json +6fee8d6425e1c832abed8fd9bccc8e6fae9441fc data/create/loot_tables/blocks/cut_crimsite_brick_slab.json +3123bc9e6123dfeda9bb3cece5c2220ac8485535 data/create/loot_tables/blocks/cut_crimsite_brick_stairs.json +56a8c7b1588f6fa9a1fb438e91b04673e02a0c86 data/create/loot_tables/blocks/cut_crimsite_brick_wall.json +90ed82b09f2650ee913956d62803d15fc4c0bdbd data/create/loot_tables/blocks/cut_crimsite_slab.json +0e237e008523ed3e9934c598a708be533aaa0861 data/create/loot_tables/blocks/cut_crimsite_stairs.json +48e1edca75186f160a12fa26ac262c7f86d62c82 data/create/loot_tables/blocks/cut_crimsite_wall.json +7bfe4d183ed26de1d7b241c27880a70d28426502 data/create/loot_tables/blocks/cut_deepslate.json +6e375a42ddf38c99fee86531471573716e27fa44 data/create/loot_tables/blocks/cut_deepslate_bricks.json +fa4b940ad8ee432ee0fabf496d2da3d5039c204a data/create/loot_tables/blocks/cut_deepslate_brick_slab.json +1063a94b3e90a52a7492d85b1c086514333f3421 data/create/loot_tables/blocks/cut_deepslate_brick_stairs.json +878d809a038c626e8054f9b71e27be08388d7615 data/create/loot_tables/blocks/cut_deepslate_brick_wall.json +7b5e46aaf34d71993f50b5b6fa1cd5d7ea64264c data/create/loot_tables/blocks/cut_deepslate_slab.json +7d45e8bb037a1e550132854200d57ce31e073993 data/create/loot_tables/blocks/cut_deepslate_stairs.json +cd80fd4f573d59c22f0b9799f1ba7422215d4ff1 data/create/loot_tables/blocks/cut_deepslate_wall.json +d79d52657307a30422d9ff2eb1caad78024c24f7 data/create/loot_tables/blocks/cut_diorite.json +9f627b6449ae27a1990b84a60349736129a11e39 data/create/loot_tables/blocks/cut_diorite_bricks.json +1809235166024fa74f65a96b622faa8eddf4ce14 data/create/loot_tables/blocks/cut_diorite_brick_slab.json +a6bb9fb4eee3dab9a540b228801ce100c048c2a7 data/create/loot_tables/blocks/cut_diorite_brick_stairs.json +690a938a04543cb60f2952335be26b2df9c75715 data/create/loot_tables/blocks/cut_diorite_brick_wall.json +208999222adb5b1cd4fa47b85000841dbae4ad21 data/create/loot_tables/blocks/cut_diorite_slab.json +12849a868e8dff48ebb688c84fc53d4cee2a4eaa data/create/loot_tables/blocks/cut_diorite_stairs.json +469fffcdd40aea22fedb81b7778cc3c61928f3fd data/create/loot_tables/blocks/cut_diorite_wall.json +302d0bb640f696109fe4edc0c1fa9db332231511 data/create/loot_tables/blocks/cut_dripstone.json +48707f37b94ff1a930ee45bb9e8b6b4b67226945 data/create/loot_tables/blocks/cut_dripstone_bricks.json +eb31bc108180e2248d575d5d72325b5585254af0 data/create/loot_tables/blocks/cut_dripstone_brick_slab.json +9b624a456baf55960675d7857e159f69911a281a data/create/loot_tables/blocks/cut_dripstone_brick_stairs.json +b4c754d4d5a6c28f537c2d73844e39059b2c1450 data/create/loot_tables/blocks/cut_dripstone_brick_wall.json +eb9eca9a69f763cbe81dc79375ef76978594b51e data/create/loot_tables/blocks/cut_dripstone_slab.json +47fae3abc8bea3ee802d6759192e631f50329c5f data/create/loot_tables/blocks/cut_dripstone_stairs.json +70b71cc460cba2955694baf0550eadc2187e3a8a data/create/loot_tables/blocks/cut_dripstone_wall.json +26433a16a91414be15b20dc85b81b76d086be889 data/create/loot_tables/blocks/cut_granite.json +65c3936e78a90c53faa0b9f9b3034afc2728e7b9 data/create/loot_tables/blocks/cut_granite_bricks.json +c6b8dfa87e9c33a0dd2b3398dcc524347e826d44 data/create/loot_tables/blocks/cut_granite_brick_slab.json +5e00417f06b4d357e7469f0efa6e319dfc587da3 data/create/loot_tables/blocks/cut_granite_brick_stairs.json +8d8779846af8121426f128cc7b5d501037bd1cd4 data/create/loot_tables/blocks/cut_granite_brick_wall.json +6e7253b2801611b4698e786f495c2ade1088ee0b data/create/loot_tables/blocks/cut_granite_slab.json +de8c10fb2c7409a3375f2db5cdce2027c3f419bd data/create/loot_tables/blocks/cut_granite_stairs.json +cdf40bb46d9457a66129b300dc4d3f0160cc1de2 data/create/loot_tables/blocks/cut_granite_wall.json +ac5f062c7fc270c63d67ccecf19499a9e91fa1c4 data/create/loot_tables/blocks/cut_limestone.json +b60fb652e1f83b1af12a15cb47450bd9a6087f6a data/create/loot_tables/blocks/cut_limestone_bricks.json +3b6d3a9b12cf1c2a20bf337cc0155bb66967f0ee data/create/loot_tables/blocks/cut_limestone_brick_slab.json +701249cc12b7aa6f5cc1691ac4dd17e665aa2180 data/create/loot_tables/blocks/cut_limestone_brick_stairs.json +3b8c5eef9b0e8c35e8573ce91f5fddbac7f76f24 data/create/loot_tables/blocks/cut_limestone_brick_wall.json +ba186786e8677f1c769e8f231fe872c48330e13a data/create/loot_tables/blocks/cut_limestone_slab.json +d354966d57804afda39ff27336d8b0f38acf6ea3 data/create/loot_tables/blocks/cut_limestone_stairs.json +28b4eee2c6da259e50c58a51905fa2b79a9b89ef data/create/loot_tables/blocks/cut_limestone_wall.json +b3d6d90dd0c3e9d4b47d1f87d5abc354dd8c1447 data/create/loot_tables/blocks/cut_ochrum.json +5856859aae0cc633cbd9d83ea7cf7910ce1a88de data/create/loot_tables/blocks/cut_ochrum_bricks.json +67cadc71d90fb2527b9b2b72a74463d71571e493 data/create/loot_tables/blocks/cut_ochrum_brick_slab.json +487b3e7dc1d9d07183b9b699e33f6371858435aa data/create/loot_tables/blocks/cut_ochrum_brick_stairs.json +289757860f07b63dcce531a74ce7e60b4669c51b data/create/loot_tables/blocks/cut_ochrum_brick_wall.json +c9deec5e3c7343afa3d013704179e2147b2eb7ec data/create/loot_tables/blocks/cut_ochrum_slab.json +e851d829db8ea4398bc1cbe6e743b4fba98d3413 data/create/loot_tables/blocks/cut_ochrum_stairs.json +5dce8524b70baeefaeba13422f5900b1a161a867 data/create/loot_tables/blocks/cut_ochrum_wall.json +293064edf2909db8c9edc26bedd1cc023c647664 data/create/loot_tables/blocks/cut_scorchia.json +767910313f0983ebfb49b80526747d762cbdf782 data/create/loot_tables/blocks/cut_scorchia_bricks.json +895c4b9cc71701a26ae0e765ee67f0c06cc70a9c data/create/loot_tables/blocks/cut_scorchia_brick_slab.json +c53d72176cb5dd93977975dd84647391fa563e3a data/create/loot_tables/blocks/cut_scorchia_brick_stairs.json +460232ca38cba2f0adc5316d6db8db94db231953 data/create/loot_tables/blocks/cut_scorchia_brick_wall.json +c8201964d877a932fe9a9a2d0360004440f7c380 data/create/loot_tables/blocks/cut_scorchia_slab.json +dfd09849dbf48a064269a5ea28d0422caa87e4d4 data/create/loot_tables/blocks/cut_scorchia_stairs.json +bd5304e38bb92a445c159e9fe647b906e28b232e data/create/loot_tables/blocks/cut_scorchia_wall.json +6b87a22c39b545d5be92e476751b99ceb4bef740 data/create/loot_tables/blocks/cut_scoria.json +833252d2d63c7502f6f0d7981673a8081046c944 data/create/loot_tables/blocks/cut_scoria_bricks.json +659e86f89499539e435989c2eb29e88e9a0ff9f4 data/create/loot_tables/blocks/cut_scoria_brick_slab.json +8434d461090bc43328eec0b4249d27a9ba383707 data/create/loot_tables/blocks/cut_scoria_brick_stairs.json +e3f853395b9b6fb7d5bb103c121a77e04526a9e8 data/create/loot_tables/blocks/cut_scoria_brick_wall.json +8360d736887ae3dc22bcf522791ef981e380456c data/create/loot_tables/blocks/cut_scoria_slab.json +c771f03308f45e1e87d92181f94cdfd4e61fa5d8 data/create/loot_tables/blocks/cut_scoria_stairs.json +6fecb7fa2774ea63ac0c66e9c3d0f41d6b8cdff7 data/create/loot_tables/blocks/cut_scoria_wall.json +396074ee7fd5a3ddbac9332c74b7bdc4164919e2 data/create/loot_tables/blocks/cut_tuff.json +81465ef7aa555d36adf249bbc9acfe80abbe308e data/create/loot_tables/blocks/cut_tuff_bricks.json +5148f230c773b83268d52650bdacc660025feb95 data/create/loot_tables/blocks/cut_tuff_brick_slab.json +19719a4a3f63d1ec46a9ca9736a825d2dcc880ff data/create/loot_tables/blocks/cut_tuff_brick_stairs.json +e20991b67c07dca62c212b43da5b7e7e98146c0e data/create/loot_tables/blocks/cut_tuff_brick_wall.json +6d16bd3860207ff6912afc2bf3f0454b572aabba data/create/loot_tables/blocks/cut_tuff_slab.json +c14e52ac9901aa873c33d51988bd26465ce0e095 data/create/loot_tables/blocks/cut_tuff_stairs.json +dd70800c79fa2ff56bd4ea032cf069bc27cc9076 data/create/loot_tables/blocks/cut_tuff_wall.json +1957b610d14460cc9ca797fe953bf9831509cdbf data/create/loot_tables/blocks/cut_veridium.json +673d1f0fefa7725ac5bfcabfcea577041adc4eeb data/create/loot_tables/blocks/cut_veridium_bricks.json +c1515a908bde249c087be1e73aec37773bc3dc5c data/create/loot_tables/blocks/cut_veridium_brick_slab.json +d9552e3e9f4de0e09df8ca9446066e94c6e2c681 data/create/loot_tables/blocks/cut_veridium_brick_stairs.json +584c4bd13d9870f9798155b47cc0d32e5751294d data/create/loot_tables/blocks/cut_veridium_brick_wall.json +009186ed0efe29a229a28cfd913bc02ddad217d4 data/create/loot_tables/blocks/cut_veridium_slab.json +4845f7127921c7dd93a59118e63c37107d6c2061 data/create/loot_tables/blocks/cut_veridium_stairs.json +b56caea031d637321eddfd5d122fc357d2c2e49c data/create/loot_tables/blocks/cut_veridium_wall.json +ffb440a03f5e513b8d20c2725a95dc5c9b84c73b data/create/loot_tables/blocks/cyan_nixie_tube.json +8858b4e1b4e51889b2006005585a17e4978ed8e9 data/create/loot_tables/blocks/cyan_sail.json +8dccecb2c87d7421efdfb3fb97ae62b79f0b4411 data/create/loot_tables/blocks/cyan_seat.json +66ea2f2cc32d49bb434f83cbd07736d6fbacacf3 data/create/loot_tables/blocks/cyan_toolbox.json +8c7fd26e7bd03916014274e005d69ab8f14df973 data/create/loot_tables/blocks/cyan_valve_handle.json +704a10ef59d052e92b7035406422231b9bb2372f data/create/loot_tables/blocks/dark_oak_window.json +ccb3ab3c0d9c8fad236ccc790c2f7a1524202e9a data/create/loot_tables/blocks/dark_oak_window_pane.json +7134df2866c392beb1be53423c091af06de79370 data/create/loot_tables/blocks/deepslate_pillar.json +3c3d83fc964462e2401ec6dac5200709d5ce1957 data/create/loot_tables/blocks/deepslate_zinc_ore.json +8c1d8d9680834419b9049bc11137316b75f59f46 data/create/loot_tables/blocks/deployer.json +9ded269b860ed96c964f6f8960a680a5c87fa033 data/create/loot_tables/blocks/depot.json +98987901bdb35efe2922b420def9cdb116ec5416 data/create/loot_tables/blocks/diorite_pillar.json +6dda1fa6622ce351af2e0aeec2b5c2e4183fb593 data/create/loot_tables/blocks/display_board.json +5320ddec6855d99e5685bb424d02165eca480805 data/create/loot_tables/blocks/display_link.json +7e5ae3352268f975a517dd3682be7f8c7f2de3ab data/create/loot_tables/blocks/dripstone_pillar.json +e4c0fa9229143078e12da226804e3e92e49a31a3 data/create/loot_tables/blocks/elevator_contact.json +52a1b1e28189f2d152829cf166215326f7c73712 data/create/loot_tables/blocks/elevator_pulley.json +dfe0af3ff61ed2b3082e49c745d8a3e0c5973f4b data/create/loot_tables/blocks/encased_chain_drive.json +a2e9a8a10b7fc730c1d7c8db3b529e7a37b683f5 data/create/loot_tables/blocks/encased_fan.json +7ede9f64839f51e6a2eb05b08577d2873f281401 data/create/loot_tables/blocks/encased_fluid_pipe.json +4869211639326efaabd1aba1067bfbb3ab012884 data/create/loot_tables/blocks/experience_block.json +9fa4b0c8ee313b6c9a57d7d5b687cdd01c8259d3 data/create/loot_tables/blocks/exposed_copper_shingles.json +9dbd37ef5ff549f10475101205c1a9d4a44140bc data/create/loot_tables/blocks/exposed_copper_shingle_slab.json +d2c9abd9260eb82ea1c2eeae5e2d6abd0b4d3ce8 data/create/loot_tables/blocks/exposed_copper_shingle_stairs.json +f0905ae4c9bdff8fe9e1ab4682a7b1efe2d27d9d data/create/loot_tables/blocks/exposed_copper_tiles.json +6841c02935838f00011d33fc392965326c4dbc5b data/create/loot_tables/blocks/exposed_copper_tile_slab.json +432a047156b93a09b7e027fc34f5680a8f68dc92 data/create/loot_tables/blocks/exposed_copper_tile_stairs.json +3fae2a7a3f133a1d7c76ce91f6c48eab787d6ff6 data/create/loot_tables/blocks/fake_track.json +1d4734d6d9ba039c0dfa2271f08cdb55e35b721f data/create/loot_tables/blocks/fluid_pipe.json +9c112883a3763b2d286d9a5a0980dcea82bcc9e6 data/create/loot_tables/blocks/fluid_tank.json +14d7f09950c12cf939ee1807048a308821460bbf data/create/loot_tables/blocks/fluid_valve.json +b1ced25e638167cf0a59332ec450edec9a3bd309 data/create/loot_tables/blocks/flywheel.json +004a0f7e5d5d511d5fa1dfcfd743443c330a0238 data/create/loot_tables/blocks/framed_glass.json +49648fb28c84fe10aee43ea5543dc3e5238cb9e8 data/create/loot_tables/blocks/framed_glass_door.json +11eecab1de7d185d9e90f1fa6d2179740dbf2af1 data/create/loot_tables/blocks/framed_glass_pane.json +7b2474aca42058587647db1abfc3cb0d4563745d data/create/loot_tables/blocks/framed_glass_trapdoor.json +7dffe8c8e89a09d4c076c816201530472b4bc87b data/create/loot_tables/blocks/gantry_carriage.json +45007a805570679b431ca703c635ce33f52e0277 data/create/loot_tables/blocks/gantry_shaft.json +f33d0bdbf35ca5294684b0628419ad11d508a649 data/create/loot_tables/blocks/gearbox.json +a4c86e5456bbbcc417d736151ac6a15c944d555b data/create/loot_tables/blocks/gearshift.json +ffa2776989447e44fa10673986961ab395ebd592 data/create/loot_tables/blocks/glass_fluid_pipe.json +07d8265c285ebb69b9160d516905ae1f17acc87d data/create/loot_tables/blocks/granite_pillar.json +41feb0f235495384ebca5b6f70d01b6f0c0c8878 data/create/loot_tables/blocks/gray_nixie_tube.json +bd526fc4f0acea571c37b2ecbb7267fee6be29f0 data/create/loot_tables/blocks/gray_sail.json +5e23e2032f92737eaa6e6cfb4c62232566f06e77 data/create/loot_tables/blocks/gray_seat.json +6ff8b3e59ea98697b87e71eb64d1e6f7e4631f36 data/create/loot_tables/blocks/gray_toolbox.json +aa0d47422e0adc3fb18e5c0eefd25c417ddbf9ae data/create/loot_tables/blocks/gray_valve_handle.json +4cfbe1bdc89916f78f891b9dbaed461cd838584b data/create/loot_tables/blocks/green_nixie_tube.json +6c22cf8de05828af7979dc32d9e151297d551fe5 data/create/loot_tables/blocks/green_sail.json +fbd61c331d4fda692f0e7174aed5aed3652d3553 data/create/loot_tables/blocks/green_seat.json +703a285a5d47fcc13e6775040d45620db2ef5480 data/create/loot_tables/blocks/green_toolbox.json +17cbfa7c5627a2ac92826e349d09509f4722fdef data/create/loot_tables/blocks/green_valve_handle.json +8dfbcb358f008317a0515ca35f3976470ca7c4e9 data/create/loot_tables/blocks/hand_crank.json +f917ddc34b196750efbab88ee5565ecd0e38e0e6 data/create/loot_tables/blocks/haunted_bell.json +22a18928ffb7aa814dd94f52116ffcdf5603f511 data/create/loot_tables/blocks/horizontal_framed_glass.json +a206598562bcbc9e3bc10dbe12fb22974ee58fcc data/create/loot_tables/blocks/horizontal_framed_glass_pane.json +e65fae1b9b72cf2208696463fa20a82a4d64fb62 data/create/loot_tables/blocks/hose_pulley.json +34c239150baa92e03ca89430148560e1b7a1f02d data/create/loot_tables/blocks/industrial_iron_block.json +c22dea1941471be65c811cdc2ce7b77d2247e9e1 data/create/loot_tables/blocks/item_drain.json +72b5a7288f7f54694df5f456e4ab4433bd38dfff data/create/loot_tables/blocks/item_vault.json +13bd1033991eb65354a9b9406fe638c357fea409 data/create/loot_tables/blocks/jungle_window.json +fe9c2629eb30393d2ae5a1f252b9732506ef9bef data/create/loot_tables/blocks/jungle_window_pane.json +6b3f6cfa31bbde8c72989be6505a6c6967b33263 data/create/loot_tables/blocks/large_bogey.json +df05939acedf93b586191cc06acf5e6883836be2 data/create/loot_tables/blocks/large_cogwheel.json +eaba5847c82b7cbdb114882d47ba5c3af68d5f7d data/create/loot_tables/blocks/large_water_wheel.json +1edc716b0015a2338603d576d1a7c6866682b394 data/create/loot_tables/blocks/layered_andesite.json +f62e09ac8009c117e4c9dc1c59377d9df381241a data/create/loot_tables/blocks/layered_asurine.json +414926a57ef0769e3ea6758de0e34f34b6604760 data/create/loot_tables/blocks/layered_calcite.json +c63e44db67eeb024fcbdbedb2e942ab02ba7e078 data/create/loot_tables/blocks/layered_crimsite.json +831b9b0343dc792b6031e088958d3b842ab3f839 data/create/loot_tables/blocks/layered_deepslate.json +3ffac59d530ef44b4ebf17f6fe699f5616e4067d data/create/loot_tables/blocks/layered_diorite.json +5a0e86ae818424a176e6c11c0fe50323d98260f3 data/create/loot_tables/blocks/layered_dripstone.json +90c11ecda80569650f26d32a8f78a317f4d767c5 data/create/loot_tables/blocks/layered_granite.json +afa7076b6634f7e3d58e5370e220e9409c82f3dd data/create/loot_tables/blocks/layered_limestone.json +ae3b9785ae64f1c936cac555505f97774b09fd95 data/create/loot_tables/blocks/layered_ochrum.json +83a1bfddc1aa56849a9360ab6e5ade62c14bb946 data/create/loot_tables/blocks/layered_scorchia.json +6f6da7d84dbbdd2f555d76f5876834392a0dd71c data/create/loot_tables/blocks/layered_scoria.json +b4882fe056a8d03bddf7a8c4fa70ee06548e1743 data/create/loot_tables/blocks/layered_tuff.json +7f9ea6bfcf8344018866013e12d23edf21f034e9 data/create/loot_tables/blocks/layered_veridium.json +54a876a52655d5c9c33325a7d07c7978d33adca6 data/create/loot_tables/blocks/lectern_controller.json +8a6153a0b5857c77cdac0cffcb22e30ae6181f3a data/create/loot_tables/blocks/light_blue_nixie_tube.json +304072298d4078eca7e0fb8c58ea3144afe246a8 data/create/loot_tables/blocks/light_blue_sail.json +a1396be526ef27c6d0f97cdd0f0e61f810e7353b data/create/loot_tables/blocks/light_blue_seat.json +0cd56baf9f3c9edb97e4ce892d374e21a099374f data/create/loot_tables/blocks/light_blue_toolbox.json +bf4e6c308d82f15689406b5b3e88fe95d49a9a44 data/create/loot_tables/blocks/light_blue_valve_handle.json +6928acbfcafdfead9750be6760da163b86532054 data/create/loot_tables/blocks/light_gray_nixie_tube.json +886ef98e4bd60d8860b56441da6928e24f262d70 data/create/loot_tables/blocks/light_gray_sail.json +1ae0ff25ac9468e67ab1847b87a37829328d4c84 data/create/loot_tables/blocks/light_gray_seat.json +e22dfadefcea50090efe87136a4b92e6ef20d379 data/create/loot_tables/blocks/light_gray_toolbox.json +3e586bc1281f15e25e75475dd726578ff032c6ae data/create/loot_tables/blocks/light_gray_valve_handle.json +c6bb0877c537dda15469934383dc45c608bfd1a4 data/create/loot_tables/blocks/limestone.json +49058a62e1abd34917f983b6bc13cc4353b613a2 data/create/loot_tables/blocks/limestone_pillar.json +582bb26f6df37d0c2dbe12983ad05fc74f5fb5c0 data/create/loot_tables/blocks/lime_nixie_tube.json +623ac65211a9920325308b55285f78e3b7275751 data/create/loot_tables/blocks/lime_sail.json +7efe69664a781b292f491d5ff89e27dd5991f3cf data/create/loot_tables/blocks/lime_seat.json +0f6a465501a445925e9aff7a4c84b3c8e2caa93e data/create/loot_tables/blocks/lime_toolbox.json +1a3ed7cd5660d7ea014956ea642e0b07d89bc297 data/create/loot_tables/blocks/lime_valve_handle.json +baf70f9eb579f20b232a2af4e6b00a54f84844e6 data/create/loot_tables/blocks/linear_chassis.json +e4c0f8ca822cf7555bd011825b430c3c735160d4 data/create/loot_tables/blocks/lit_blaze_burner.json +6bd8b044cc9c69a5268372e5436f556da2c1bf21 data/create/loot_tables/blocks/magenta_nixie_tube.json +b4d06c9ce7fbec0f23bb6dbc446b77d070f06775 data/create/loot_tables/blocks/magenta_sail.json +300e480d8e43e3a4ca19a92ae1360c02f7c5accd data/create/loot_tables/blocks/magenta_seat.json +40d2ba0a52eaa2c61900731f0cee2657c5e77c20 data/create/loot_tables/blocks/magenta_toolbox.json +347115d1507997a6f838d222092092ab994db7e5 data/create/loot_tables/blocks/magenta_valve_handle.json +49c68e263386549cc30438d3b3878ec5bbd909cc data/create/loot_tables/blocks/mangrove_window.json +90cfd78aeadd2aae67312d8f1c0a1c7236ed7d51 data/create/loot_tables/blocks/mangrove_window_pane.json +b8446967e73dacfbf6f084a68cf2d3df300bc077 data/create/loot_tables/blocks/mechanical_arm.json +92e14f004898e382cd4b8f76c355f77342e997c3 data/create/loot_tables/blocks/mechanical_bearing.json +8b56cb488bac4ca7aee7d1f15c0b85f3991a3173 data/create/loot_tables/blocks/mechanical_crafter.json +c8e825704d35e75e0a7ae96d9771d498b0a947c7 data/create/loot_tables/blocks/mechanical_drill.json +f42bbb5eb58ffdd6e6ec9a08fb878317f02b20a2 data/create/loot_tables/blocks/mechanical_harvester.json +3cb3ad320fe0a50462a888421ecacbe94db31844 data/create/loot_tables/blocks/mechanical_mixer.json +5818d9379b754f1142491d676a9887136f4efdb3 data/create/loot_tables/blocks/mechanical_piston.json +b57ce35c2dc324f82d666d0af129f522e96baea7 data/create/loot_tables/blocks/mechanical_piston_head.json +d054f791dac1f827a3dde74cb2115f8d104c9b84 data/create/loot_tables/blocks/mechanical_plough.json +9d71dd7a0fee7dc2035fec4d93b4cdac99d1a769 data/create/loot_tables/blocks/mechanical_press.json +764122c5d55c8c8c7754c335afb1fb91cb7c79db data/create/loot_tables/blocks/mechanical_pump.json +75f8f9e0a9d0ad79e9e6b01fda086611fe138021 data/create/loot_tables/blocks/mechanical_roller.json +4b4cedbf902810e0e42af4fa74d254bc9ec8b590 data/create/loot_tables/blocks/mechanical_saw.json +1597e5cb939788130a6e69893b2b4cc0b2dd8c3e data/create/loot_tables/blocks/metal_bracket.json +fde340fb25b8ac62b53b6e702081d7aa84d22646 data/create/loot_tables/blocks/metal_girder.json +91a971ae39186e9a25b90179cbbaf96923aa73bf data/create/loot_tables/blocks/metal_girder_encased_shaft.json +1561ba41cff26d63cfde5594524270d81f087eaa data/create/loot_tables/blocks/millstone.json +d6cb5841ea16472edc4ac08620a44b3dd80893b3 data/create/loot_tables/blocks/minecart_anchor.json +fa0a57242873c6ee7290da5aeab6f88e37c27b53 data/create/loot_tables/blocks/mysterious_cuckoo_clock.json +fe79cb4cbea87efc84d61d3d31f073bf3c64c73d data/create/loot_tables/blocks/netherite_backtank.json +17c677fdd1aba0b97ef143de2e6a968971793b91 data/create/loot_tables/blocks/nixie_tube.json +1ffa2df71b22ae8450044bba8486f96b453ed402 data/create/loot_tables/blocks/nozzle.json +26b602e6b951b37396786e2989c9f21fcbb510b5 data/create/loot_tables/blocks/oak_window.json +5dcb11160a51ce17fb06f5fecc14e87d92b1a641 data/create/loot_tables/blocks/oak_window_pane.json +461e9818f41aab34905757a423455cdcee780e67 data/create/loot_tables/blocks/ochrum.json +1259a439286385d5b7c48bff89d0839f1f2e02c2 data/create/loot_tables/blocks/ochrum_pillar.json +d6323d4b30faa87cd4b5b8b815cb16f78296f203 data/create/loot_tables/blocks/orange_sail.json +119fc4c3055c09c7958ac405925a6b7be2081c6b data/create/loot_tables/blocks/orange_seat.json +54ac8c8166c23f24a8a0870c981ef8ffa64c0b89 data/create/loot_tables/blocks/orange_toolbox.json +30aef2df782b6b35cd16b4c205bb15de85bc0664 data/create/loot_tables/blocks/orange_valve_handle.json +f4004c6d16754fc8867ed6618dace8e8f6dcc412 data/create/loot_tables/blocks/ornate_iron_window.json +6f14500e07c6d342804f9127e7b66047ffaeef1e data/create/loot_tables/blocks/ornate_iron_window_pane.json +3e54d3c4755a43d837a1d9b2005ea1dee4d02555 data/create/loot_tables/blocks/oxidized_copper_shingles.json +62c43a533e4ffeeec9f7657db5a796569087f806 data/create/loot_tables/blocks/oxidized_copper_shingle_slab.json +f47a01824093455030fca66e7b8a39bcfc61d219 data/create/loot_tables/blocks/oxidized_copper_shingle_stairs.json +4d2a2863697664b3b71f02aa703c3504cd5cc826 data/create/loot_tables/blocks/oxidized_copper_tiles.json +4d815b361af81bd0c0e14c853ca54ad3cde66a57 data/create/loot_tables/blocks/oxidized_copper_tile_slab.json +d599ef03d1b69e4367ec0dea78f52c1964c99f9b data/create/loot_tables/blocks/oxidized_copper_tile_stairs.json +58bd9fe9d6706998bfbda3b077cfd0a740972091 data/create/loot_tables/blocks/peculiar_bell.json +4d7724df6fefee4512c4f7886d0e103d1dc39510 data/create/loot_tables/blocks/pink_nixie_tube.json +85811771fbc36f645fdb9f510639715399503c99 data/create/loot_tables/blocks/pink_sail.json +9a5652002131d14c585a6e434a4457ef36d2f60d data/create/loot_tables/blocks/pink_seat.json +23e28971460b2a3b8b39412a4778672d7ced4af7 data/create/loot_tables/blocks/pink_toolbox.json +e234842b7d2334b77d02e383908795f0714b21a2 data/create/loot_tables/blocks/pink_valve_handle.json +175735e4a055945df59fb6206ef1a6ebf8ca3e8f data/create/loot_tables/blocks/piston_extension_pole.json +2272411ee08b5b57aae700e9b193b330ca9a60fc data/create/loot_tables/blocks/placard.json +22be2b2dbc6080c96a8a874bc2ddb3066792d594 data/create/loot_tables/blocks/polished_cut_andesite.json +00a039f8a94b22347dabaf03814e1db741e24fe4 data/create/loot_tables/blocks/polished_cut_andesite_slab.json +2a48d6b2d78126797c813d5737fa501a7b900af6 data/create/loot_tables/blocks/polished_cut_andesite_stairs.json +9ad0f8009f61539ca91435e139ba7662411d0ea6 data/create/loot_tables/blocks/polished_cut_andesite_wall.json +bcfe079deb1cf7a395fd7fc980eb66935eb8b279 data/create/loot_tables/blocks/polished_cut_asurine.json +06884db5c4deffebab9432224a16c1500ffaab1e data/create/loot_tables/blocks/polished_cut_asurine_slab.json +7791af44ae654190331b39d50c388c9287f2b9d8 data/create/loot_tables/blocks/polished_cut_asurine_stairs.json +322f57b452d34037f4beda35ab97393e18c0f8c4 data/create/loot_tables/blocks/polished_cut_asurine_wall.json +a66de65059bfec09a5a8e43fdd8cdf4a47f59394 data/create/loot_tables/blocks/polished_cut_calcite.json +3c62439de0dc22e2d14ccc2a2738918bc9eb5eb5 data/create/loot_tables/blocks/polished_cut_calcite_slab.json +a2fd3fcd7e056aa0c6b87e20125b5f649fa480e6 data/create/loot_tables/blocks/polished_cut_calcite_stairs.json +12a00a84392faf12beca7e38ba0416aec6bf292b data/create/loot_tables/blocks/polished_cut_calcite_wall.json +d556d7420258b29f157f2467b52f1187f32e2e70 data/create/loot_tables/blocks/polished_cut_crimsite.json +0fc1e5657000102afeef28c72aba625829a35df2 data/create/loot_tables/blocks/polished_cut_crimsite_slab.json +c880b21ba9602bf5e4f66c55ac811b1234b54b99 data/create/loot_tables/blocks/polished_cut_crimsite_stairs.json +a1a1584954a0111f03425a0522b39fdb37f14445 data/create/loot_tables/blocks/polished_cut_crimsite_wall.json +af58023b1fc16468951e09b9d587a39fdded571d data/create/loot_tables/blocks/polished_cut_deepslate.json +4540a423972c8861d5b39450345567c073e7ce93 data/create/loot_tables/blocks/polished_cut_deepslate_slab.json +92fa3b6a67548d0ac119978d3a708f31355854fa data/create/loot_tables/blocks/polished_cut_deepslate_stairs.json +a9117b44cba75caf740f9d6ce9cfc0a7c4eec36f data/create/loot_tables/blocks/polished_cut_deepslate_wall.json +99cff2e2d27b10ec0ab89e92b06d85538039d9f7 data/create/loot_tables/blocks/polished_cut_diorite.json +932cfc27e8a56a8b801c81437ea4380736a87616 data/create/loot_tables/blocks/polished_cut_diorite_slab.json +c78e0e81c5904d1f5ec7d1b28f2d4e1086b27fdd data/create/loot_tables/blocks/polished_cut_diorite_stairs.json +4e04c7ebc457b5290c879f287a4dd2e3b31a039d data/create/loot_tables/blocks/polished_cut_diorite_wall.json +376eb5d458acee6123de2c9b4c5fa35d3fc6c649 data/create/loot_tables/blocks/polished_cut_dripstone.json +57f4bb84c0525ce1ea5efc79047b67c0aef3f54a data/create/loot_tables/blocks/polished_cut_dripstone_slab.json +e4e2c0d9cba5e8679514eb829cd995542277df5c data/create/loot_tables/blocks/polished_cut_dripstone_stairs.json +0714b36fa2564fa084d8b6bab8332024375dc0a7 data/create/loot_tables/blocks/polished_cut_dripstone_wall.json +9e1634837f3ebf509f52410602ae423334ba8635 data/create/loot_tables/blocks/polished_cut_granite.json +482a4343e02501e11313e4ff271efd7e72fbc60c data/create/loot_tables/blocks/polished_cut_granite_slab.json +4a30d39f86ee4b28dd0d5a915b523039bdcc2555 data/create/loot_tables/blocks/polished_cut_granite_stairs.json +e73ac90dc54715d20a47dcfaecf4c1e46ae5307e data/create/loot_tables/blocks/polished_cut_granite_wall.json +0de24ce0e565c6eef5612c56f4eb2493a3becbac data/create/loot_tables/blocks/polished_cut_limestone.json +47dde57d09fcb418aa8c3647a5c49b0f287a56e2 data/create/loot_tables/blocks/polished_cut_limestone_slab.json +8d034cde21fa7bb9a99acc9bcf507206bb63ce66 data/create/loot_tables/blocks/polished_cut_limestone_stairs.json +87153582c3cde4aa5929cbbc6a973b9b2fdfeb75 data/create/loot_tables/blocks/polished_cut_limestone_wall.json +10d6098e4760579172f3fdfd7b0fc2f207d1ab30 data/create/loot_tables/blocks/polished_cut_ochrum.json +8509759fc2281ea5dacc9e1a2c4e376f5043a87d data/create/loot_tables/blocks/polished_cut_ochrum_slab.json +dff51bdc7dc003a5746d64bb7cb6d87b6ca15e00 data/create/loot_tables/blocks/polished_cut_ochrum_stairs.json +c0a8764a390fab9572bd73c5937e2e054f16081b data/create/loot_tables/blocks/polished_cut_ochrum_wall.json +d9942ed6a840413d6ccccf03a89f549172caac37 data/create/loot_tables/blocks/polished_cut_scorchia.json +921ebdfd3081eb3097ece0e4881360868a6c1575 data/create/loot_tables/blocks/polished_cut_scorchia_slab.json +a90b393b5305c4c023ad3da494a00bb0853cadda data/create/loot_tables/blocks/polished_cut_scorchia_stairs.json +3175aa4bab3136d7e183561877e9a24ad68ea54e data/create/loot_tables/blocks/polished_cut_scorchia_wall.json +419487b555053abf25c85a77278bf8c38be989b4 data/create/loot_tables/blocks/polished_cut_scoria.json +4c43639190b86bcbb0c5218c5b011376fd3105a8 data/create/loot_tables/blocks/polished_cut_scoria_slab.json +954a2b53d76f818913da887970b2cafdc3446e9d data/create/loot_tables/blocks/polished_cut_scoria_stairs.json +37543104768ffd05ef5b1ef1610cca6ed50c59ed data/create/loot_tables/blocks/polished_cut_scoria_wall.json +8088f4c41ecda536358daea4c6b0139b4ad00559 data/create/loot_tables/blocks/polished_cut_tuff.json +0f173290ef0c1be886317d4c342442513069065d data/create/loot_tables/blocks/polished_cut_tuff_slab.json +38b4b3a3391e97df78c03633a7e36252a68eb216 data/create/loot_tables/blocks/polished_cut_tuff_stairs.json +8a5023bf2dec91ef7b477fd18908a214c770f5ad data/create/loot_tables/blocks/polished_cut_tuff_wall.json +cdf6ec51c66354c702d7cf51584ffc2905340de5 data/create/loot_tables/blocks/polished_cut_veridium.json +9c0c275ad6dc663515107f086fc6bb224b7e2efc data/create/loot_tables/blocks/polished_cut_veridium_slab.json +191463586831c7cf9c36a05e8efdefa44b800fd6 data/create/loot_tables/blocks/polished_cut_veridium_stairs.json +a1eb9045896a2c35c8c464119eec61f678c33fc1 data/create/loot_tables/blocks/polished_cut_veridium_wall.json +1cb52ea23d6c2e5e53b48e6f6584d8be85f59e2b data/create/loot_tables/blocks/portable_fluid_interface.json +863742c7065425784335306e808c22f06ade115a data/create/loot_tables/blocks/portable_storage_interface.json +2e6f8734e99436e1f8accc4ae3d056961ab16796 data/create/loot_tables/blocks/powered_latch.json +5d990ef847b3607eb3699bf147de84798c9c2b0d data/create/loot_tables/blocks/powered_shaft.json +afe84b9468fba532acc447236a9a0cbdd02c4560 data/create/loot_tables/blocks/powered_toggle_latch.json +fbc433a7e8518860bc828a52b56dba92e4dff66c data/create/loot_tables/blocks/pulley_magnet.json +e654e6cedc0373e97caea947e7e605bc4095da88 data/create/loot_tables/blocks/pulse_extender.json +422385f062dd63edaf246c42fb0e617e92e6cc44 data/create/loot_tables/blocks/pulse_repeater.json +6f453ea136098a5872aeb4e2ad1e5b78d2fd571f data/create/loot_tables/blocks/purple_nixie_tube.json +c6b7a02db55cf0824a48156adf469c478dfd6a8d data/create/loot_tables/blocks/purple_sail.json +73cd7cc36fafb491666d2bccf1b4f24624b3c8f2 data/create/loot_tables/blocks/purple_seat.json +147086b9db173aed1b25d9460d0135708dcebcf9 data/create/loot_tables/blocks/purple_toolbox.json +0354f88c3e1d0b6580b9a23d23752dcd9b86fc31 data/create/loot_tables/blocks/purple_valve_handle.json +9e5e841d9f9a00d560ed17a7e197dc56bae334b7 data/create/loot_tables/blocks/radial_chassis.json +73a03fa31e299cec2c8a3dc0f31a8aa354b49bcd data/create/loot_tables/blocks/railway_casing.json +f76e5a157d2aeab5708f464b1f3c8e47b3855f18 data/create/loot_tables/blocks/raw_zinc_block.json +bbc2d61eeea335f8f011d799ef6a5484ca027640 data/create/loot_tables/blocks/redstone_contact.json +4fa70deeac7e56121e42fb602dfa27ee1727f749 data/create/loot_tables/blocks/redstone_link.json +a50e1c28af16e9f1b4f48aa974461167139768a7 data/create/loot_tables/blocks/red_nixie_tube.json +977d724cddf8eba053a3310ad0d30af15199bbed data/create/loot_tables/blocks/red_sail.json +9aedede893e2127a1cdd17695699397d8d5c6ce5 data/create/loot_tables/blocks/red_seat.json +9713071cab536e8c1550a6309dc4563fecc2c4e0 data/create/loot_tables/blocks/red_toolbox.json +17d75711f4ef5d76aa931175364642732fb0c60d data/create/loot_tables/blocks/red_valve_handle.json +632067fe6309e31e78637eb0272209b630750242 data/create/loot_tables/blocks/refined_radiance_casing.json +354a3b6c73379b7100b0dd12b3f3b008830c4d2d data/create/loot_tables/blocks/rope.json +f74fdd78961619d712891c36e0a0778c25e145dc data/create/loot_tables/blocks/rope_pulley.json +77d2da2217689608095866de4af4b41104348354 data/create/loot_tables/blocks/rose_quartz_block.json +0e6d1ec2887616e26bd5f75dd5fe86afcfac4546 data/create/loot_tables/blocks/rose_quartz_lamp.json +a0575567d5679f2c54e5a25c6ec12338f8cdc939 data/create/loot_tables/blocks/rose_quartz_tiles.json +de74765a3bbffafb87d632857dfcfa83f863f814 data/create/loot_tables/blocks/rotation_speed_controller.json +2af8df3e36ace336c43d68f4e53564640a89845f data/create/loot_tables/blocks/sail_frame.json +d499fd59d30da8b907b0f3a0f428700f066eddff data/create/loot_tables/blocks/schematicannon.json +5a54e930243919991d71a1c3296002ff86dd88e1 data/create/loot_tables/blocks/schematic_table.json +1d9b0df1330f44681bbd56f8560a30ef9e2175ff data/create/loot_tables/blocks/scorchia.json +e39f189bfaebd31aedceb11e25720f1e08eb238d data/create/loot_tables/blocks/scorchia_pillar.json +5e3a37dbb2fcc0d6be042bfd063fd8b1414d6169 data/create/loot_tables/blocks/scoria.json +37fe52f5a939f8ed37db120ea02e7c6875bccd4f data/create/loot_tables/blocks/scoria_pillar.json +d39afcaedc84d582c0c1f21ec5945cd0a67d389d data/create/loot_tables/blocks/secondary_linear_chassis.json +e33a34b47e07cf3262c0dbdbc651b31b9492b18f data/create/loot_tables/blocks/sequenced_gearshift.json +7d61387106e5e7fcc4aa0b05b9560cd5f4ef7df8 data/create/loot_tables/blocks/shadow_steel_casing.json +7e67d04f861e0a680487e27f94022a7850652dfe data/create/loot_tables/blocks/shaft.json +e88ff4ab1341c2db8338de0708b0ca8f40f15a8b data/create/loot_tables/blocks/small_andesite_bricks.json +220febcbcc4a993d475b683ebef7468ebdb7bf26 data/create/loot_tables/blocks/small_andesite_brick_slab.json +b4764c5bb538359bcc2a599ff3b7474ade2115ed data/create/loot_tables/blocks/small_andesite_brick_stairs.json +a891496ffb91bef56c3b684cb55a57e27a72154a data/create/loot_tables/blocks/small_andesite_brick_wall.json +576d8f6beca755a4082f1c8941e2590c1d18107b data/create/loot_tables/blocks/small_asurine_bricks.json +1a5d3543ebb7c0064ba8ff01160a22a0f5f29f36 data/create/loot_tables/blocks/small_asurine_brick_slab.json +64f4b44b786eda91d432f20c8b725b0415440b56 data/create/loot_tables/blocks/small_asurine_brick_stairs.json +60a1d505e955047cf933ae55efc2e7c10d0a5a79 data/create/loot_tables/blocks/small_asurine_brick_wall.json +64bcfece2507b8510633ae20c00ab989232664ff data/create/loot_tables/blocks/small_bogey.json +c03bba06f66262c0ced5e85fa7dcbfbfc8c9db71 data/create/loot_tables/blocks/small_calcite_bricks.json +b673542c79f4a82f2e80c0931354e994292811f6 data/create/loot_tables/blocks/small_calcite_brick_slab.json +e10d286286bba8e172a56e0eeb9af18d06d1a76d data/create/loot_tables/blocks/small_calcite_brick_stairs.json +d7214e942b203823fa2fece883e8406a7721369f data/create/loot_tables/blocks/small_calcite_brick_wall.json +f49d32973b0be51229f4e3fdc13958c9852c5c8a data/create/loot_tables/blocks/small_crimsite_bricks.json +ef8b0f604b627715542e8216ae5448e88995cc13 data/create/loot_tables/blocks/small_crimsite_brick_slab.json +dbec9246ab957a3ed2dbd0707df12c1496258e05 data/create/loot_tables/blocks/small_crimsite_brick_stairs.json +d4d5bd8b101655205c4f293f23e83f610e179e91 data/create/loot_tables/blocks/small_crimsite_brick_wall.json +8caba3e7001dd8df4d3e6365b97849570c74c840 data/create/loot_tables/blocks/small_deepslate_bricks.json +44567c10c28ddd221198824766d3fec289fb29d4 data/create/loot_tables/blocks/small_deepslate_brick_slab.json +fc141f5cdb1001d344b5ef8fa3ad1fdfeb01d048 data/create/loot_tables/blocks/small_deepslate_brick_stairs.json +3cf68d27362e9bb5dc3255ccf810097fbee511ba data/create/loot_tables/blocks/small_deepslate_brick_wall.json +4f22a84f105c2fabfd08ff0782ec30bbdc59f940 data/create/loot_tables/blocks/small_diorite_bricks.json +f6565f4bd11b7e95008b0f8fc3f5f2c7af1b77f8 data/create/loot_tables/blocks/small_diorite_brick_slab.json +e3cbe41b4b2c38d0d5e625e34b61fc79db16d3bd data/create/loot_tables/blocks/small_diorite_brick_stairs.json +787dfaa16dc30155c90cc360f6927fa067a30ed8 data/create/loot_tables/blocks/small_diorite_brick_wall.json +d9cc7f58c791e040df4abfce225524e01eb01d49 data/create/loot_tables/blocks/small_dripstone_bricks.json +f72338c9252528e41f60cb183cb4ee07cea47bf0 data/create/loot_tables/blocks/small_dripstone_brick_slab.json +bedf0fba68e8a8ce4205a968429ebe9c3ddfb528 data/create/loot_tables/blocks/small_dripstone_brick_stairs.json +c1168f58f342dfa332bfa7f53f5f03383c55ccf2 data/create/loot_tables/blocks/small_dripstone_brick_wall.json +8437e7e28e45c10562d182c4c07189bcc108cabb data/create/loot_tables/blocks/small_granite_bricks.json +4d111f8580ac97cf1b49b667462f7141846f3d3a data/create/loot_tables/blocks/small_granite_brick_slab.json +c16e015251126614960d3e6300cb04d3aeaf49b4 data/create/loot_tables/blocks/small_granite_brick_stairs.json +e0ff780ddeb5d5c8d2b6cd7736ac05f4556de52c data/create/loot_tables/blocks/small_granite_brick_wall.json +c60def11fbac5010bf749960e084dd5cd0dc4b07 data/create/loot_tables/blocks/small_limestone_bricks.json +5222ac5255c9a9ada0ce1da0fd4f4acbeee8ddb7 data/create/loot_tables/blocks/small_limestone_brick_slab.json +97310b6b1cbea869ebaa52861542787c49cee017 data/create/loot_tables/blocks/small_limestone_brick_stairs.json +0855921034db43692baa9fd0bcb767154f96d591 data/create/loot_tables/blocks/small_limestone_brick_wall.json +eb6b2171a6c99a3a28089752f26ddc6ac1f941d1 data/create/loot_tables/blocks/small_ochrum_bricks.json +8ced0c24db685dbf4382b7b71124005edde9e0b2 data/create/loot_tables/blocks/small_ochrum_brick_slab.json +090e7154fb2c3dfd20d37aa87f3df4572a27c615 data/create/loot_tables/blocks/small_ochrum_brick_stairs.json +60f2d9970ad8caf8ffe3aa8083dbba671b8d4b8b data/create/loot_tables/blocks/small_ochrum_brick_wall.json +a001d069c2b4d15c6dfd0312749765fc4e89571e data/create/loot_tables/blocks/small_rose_quartz_tiles.json +ce71e670948453691d4f09c8110b952afb41afa1 data/create/loot_tables/blocks/small_scorchia_bricks.json +d521cf885c737da2e4717d43072840ffd3f4c5d9 data/create/loot_tables/blocks/small_scorchia_brick_slab.json +de6b5d583e1adf4d49147e0719616dfd0165726d data/create/loot_tables/blocks/small_scorchia_brick_stairs.json +895603c6920338ffafd8d0d1310e47ac20bdbfda data/create/loot_tables/blocks/small_scorchia_brick_wall.json +8b7e61477c4fdc834d669bda9197b585d60f26a2 data/create/loot_tables/blocks/small_scoria_bricks.json +d1954c07a66f40123d8d78602795efad7c92070f data/create/loot_tables/blocks/small_scoria_brick_slab.json +291b5a560f09ed8f09ccc949a1a4da0006f139c7 data/create/loot_tables/blocks/small_scoria_brick_stairs.json +ed572e947f78d637e6e1a4166c111121087c41c3 data/create/loot_tables/blocks/small_scoria_brick_wall.json +2c7097ee677f42452212b5dce8959065d2bb0e15 data/create/loot_tables/blocks/small_tuff_bricks.json +ad8a3571dc3ae0ee1ec7be7f35c9796e544f0682 data/create/loot_tables/blocks/small_tuff_brick_slab.json +17f4a98a81e5920b75c88133d15b63d431f3fb64 data/create/loot_tables/blocks/small_tuff_brick_stairs.json +7defad704f6278e329af634acfb9efd617b2003e data/create/loot_tables/blocks/small_tuff_brick_wall.json +e499c0a8a0f804003612f3a4c9286cb4b033fe4b data/create/loot_tables/blocks/small_veridium_bricks.json +c7771827a715b9eaacd1a7b7e863e274b1dee11f data/create/loot_tables/blocks/small_veridium_brick_slab.json +818b65dd5d868527e7df7658a4f62a93f2795186 data/create/loot_tables/blocks/small_veridium_brick_stairs.json +7733e53a90f2ba9c17cdedaa8720e70df1a8d2de data/create/loot_tables/blocks/small_veridium_brick_wall.json +a121d21b81e93c119b6ee32ca21d260d9c33cb2a data/create/loot_tables/blocks/smart_chute.json +4556eb2d607db3631d0a9524d22a50686ce4a5a8 data/create/loot_tables/blocks/smart_fluid_pipe.json +9601e8ba0eb098cc409557f17b01669d8b971461 data/create/loot_tables/blocks/speedometer.json +8f128b5378546f2ffb055b4e5b701998dab907ba data/create/loot_tables/blocks/spout.json +80b81ad5c68345298e1dd15c78651224fa053a3f data/create/loot_tables/blocks/spruce_window.json +bcd632c1180efbc990b077314cfce8514a25da7c data/create/loot_tables/blocks/spruce_window_pane.json +608680fc36663fe146ca2ab260e31f00b1523727 data/create/loot_tables/blocks/steam_engine.json +9df3e402f71a3be0c6bc83b273037bb64ae1969c data/create/loot_tables/blocks/steam_whistle.json +cae1bd9100b62841e260880faa80e2442f44a141 data/create/loot_tables/blocks/steam_whistle_extension.json +0bc3fdde351129e3a261a2420aff9d3f063c235e data/create/loot_tables/blocks/sticker.json +074f526902cb5fcff2129614428aba1ea05a6649 data/create/loot_tables/blocks/sticky_mechanical_piston.json +a7332324e63f7d28621ddfbd54eb3d091461d890 data/create/loot_tables/blocks/stockpile_switch.json +b13496b1b4bc0be30605832e23894fb374dd796e data/create/loot_tables/blocks/stressometer.json +6a7df4d2730d57ae6e404b4bc8e01367e5ddbf07 data/create/loot_tables/blocks/tiled_glass.json +0ad584e41780dc0183af1fa1e49e126730dfdbab data/create/loot_tables/blocks/tiled_glass_pane.json +ea279a86c8558a3e1e48f4f6f204bb8f084125ca data/create/loot_tables/blocks/track.json +325af1ed4461435bba044281c9ab73cf312dd324 data/create/loot_tables/blocks/track_observer.json +e4a6ebe0a7f4a855c8f3a185b767acab5bb83a43 data/create/loot_tables/blocks/track_signal.json +c56ac3606324aa49785f13c50f93349f9c5a8e93 data/create/loot_tables/blocks/track_station.json +b7b63971b1fba7e7f6269c584b4cc00511a71589 data/create/loot_tables/blocks/train_door.json +7c676b403bd47a4b9871a16082ecb56a879ca8ac data/create/loot_tables/blocks/train_trapdoor.json +79e5d3f90079a476ba1cecbc44fa2ca220dfcf4c data/create/loot_tables/blocks/tuff_pillar.json +af81cc4610b35aa5827c67e6e6441354b7bb6f0e data/create/loot_tables/blocks/turntable.json +8d1b935b59afa7331629b148c974042c877e3f88 data/create/loot_tables/blocks/veridium.json +727a688bd2346f544ed7c3dd3cc52a113acbe932 data/create/loot_tables/blocks/veridium_pillar.json +6b6693fea0a2189c829ad81c0ec2983571ec1474 data/create/loot_tables/blocks/vertical_framed_glass.json +d6135e3c6afb105506b17012d5b07141e5222135 data/create/loot_tables/blocks/vertical_framed_glass_pane.json +cfc82d2aa8248caeaa17ff0a60db02607046550d data/create/loot_tables/blocks/warped_window.json +2eeddb89cfc597bc1ce0736b9f4a6f98e0dfa4d2 data/create/loot_tables/blocks/warped_window_pane.json +ccab211722d7f06913a549851b0d6e8278edc845 data/create/loot_tables/blocks/water_wheel.json +ea5dfcedc928e8dfa1c59cf3917d1577dff87494 data/create/loot_tables/blocks/water_wheel_structure.json +bbc6fc068adccea464909b87f1d1f426324d74cc data/create/loot_tables/blocks/waxed_copper_shingles.json +cb31be1e75ca822454bd0a89954f74c4c8726b33 data/create/loot_tables/blocks/waxed_copper_shingle_slab.json +c8e440e42141788d1988c57ab91cb1bfcd977407 data/create/loot_tables/blocks/waxed_copper_shingle_stairs.json +a3b8f12d983077477963fd3fc893c5acd36ad552 data/create/loot_tables/blocks/waxed_copper_tiles.json +807da1d66d6c7d07efc8973de43415fa4b5ddfdc data/create/loot_tables/blocks/waxed_copper_tile_slab.json +92759871a9c84815b98b6dcd22fcf0dd958bc8ab data/create/loot_tables/blocks/waxed_copper_tile_stairs.json +eb9781d081d52c34c041004c774b52169b4a9ca0 data/create/loot_tables/blocks/waxed_exposed_copper_shingles.json +be5aabc98f4d70028f2b49ae1eaf0bc68a693c53 data/create/loot_tables/blocks/waxed_exposed_copper_shingle_slab.json +a99143d290addb98427be53d7fea1cbc702d630c data/create/loot_tables/blocks/waxed_exposed_copper_shingle_stairs.json +e79c0636852b37a463dc122d66cdec27d3aa10c4 data/create/loot_tables/blocks/waxed_exposed_copper_tiles.json +234cbb59a0e00d82c5508c8e9a61e328c22c1c56 data/create/loot_tables/blocks/waxed_exposed_copper_tile_slab.json +de628114eb25f393efc4c0934d79c5bdc4365f75 data/create/loot_tables/blocks/waxed_exposed_copper_tile_stairs.json +60fe0594baab9599956d990ba893f8915835db81 data/create/loot_tables/blocks/waxed_oxidized_copper_shingles.json +c8935df7d4634dee2b01c8a0ac5de12397f4d9ed data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_slab.json +2b9370b7fa362ea88f916dd53747da80e4ae3357 data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_stairs.json +f0721c371b08214337f3f4fce3a3705840310bdb data/create/loot_tables/blocks/waxed_oxidized_copper_tiles.json +de4d25cac546559173f740752625c82dfd6bae09 data/create/loot_tables/blocks/waxed_oxidized_copper_tile_slab.json +2ed72fc0ea28303f5c6d1039662f55c677cb7bcb data/create/loot_tables/blocks/waxed_oxidized_copper_tile_stairs.json +f309ffd94dfb3591efd2fab337a871a0ceff1084 data/create/loot_tables/blocks/waxed_weathered_copper_shingles.json +9a7b265a963e122d510de64012ed1d98ad9017f9 data/create/loot_tables/blocks/waxed_weathered_copper_shingle_slab.json +62f25a1bc013e9c3d487d9a53407e58d89907c5b data/create/loot_tables/blocks/waxed_weathered_copper_shingle_stairs.json +26e6a96f50e7f3384f896bf8a5c3d5ff2b422526 data/create/loot_tables/blocks/waxed_weathered_copper_tiles.json +3fa20e33ced4aee01775db57629b9580a6b8e200 data/create/loot_tables/blocks/waxed_weathered_copper_tile_slab.json +59b28bd57f461482a394dbce9ea10ee25fc7c294 data/create/loot_tables/blocks/waxed_weathered_copper_tile_stairs.json +3cd15ae684bc0e4e41f02b3ee79eafdbf052620c data/create/loot_tables/blocks/weathered_copper_shingles.json +278a56aa433ba3647107b3bf0553da5a5f6d40dd data/create/loot_tables/blocks/weathered_copper_shingle_slab.json +198babfd55c3a30c6ac61e81d5e01b0cf8fca80a data/create/loot_tables/blocks/weathered_copper_shingle_stairs.json +771d98a6627d707228719e843bc80636b02dc985 data/create/loot_tables/blocks/weathered_copper_tiles.json +d6862dc9f7d291df618fbce71eebf613711a5517 data/create/loot_tables/blocks/weathered_copper_tile_slab.json +57d5065d53016e4b1ef0fbad9b84605b1546bcc4 data/create/loot_tables/blocks/weathered_copper_tile_stairs.json +f6ba0623b4bcea2f3796df4c65c494fc072d2c21 data/create/loot_tables/blocks/weighted_ejector.json +978263272f632ed79a61d52a0080de0b7b8102d6 data/create/loot_tables/blocks/white_nixie_tube.json +129c6772c1c12271f9b0d41c77f41ce34fc437b1 data/create/loot_tables/blocks/white_sail.json +84c79bc47b4a74021e91745356bb24fe02402209 data/create/loot_tables/blocks/white_seat.json +3c63263c9fb642e34a0a67af4cab2d4348d661c0 data/create/loot_tables/blocks/white_toolbox.json +2fae4331c0ab590aef542cf4e23deea579d734f8 data/create/loot_tables/blocks/white_valve_handle.json +bf0ea5c6957a43b6c4b1914df70e0b8f6585e638 data/create/loot_tables/blocks/windmill_bearing.json +ed989d41a4b640dc1ffb15c9c0712ee3172d408f data/create/loot_tables/blocks/wooden_bracket.json +d9f853e662b004b6ffdbb82af99ad7e774698178 data/create/loot_tables/blocks/yellow_nixie_tube.json +0ead61521fec15522633d6cfdeb77150bb30d075 data/create/loot_tables/blocks/yellow_sail.json +3ae6d4e380237face57b9187ab8570967226b3b1 data/create/loot_tables/blocks/yellow_seat.json +11b10beba7a6842ce3d01ea4210bff7d3aa6ab94 data/create/loot_tables/blocks/yellow_toolbox.json +b9648ec56e55fe2b9d54adf172405519a46bfa66 data/create/loot_tables/blocks/yellow_valve_handle.json +8be474a69469561dfe759159a40fb135a6ad5de6 data/create/loot_tables/blocks/zinc_block.json +4ab95e007dd1ad1401800116e785ce85607907f8 data/create/loot_tables/blocks/zinc_ore.json +8af7629e400e2447e672796724ebcf20b9e327f1 data/create/recipes/acacia_window.json +16af9663aaaa3eaec11a6de9fde8df946fbec529 data/create/recipes/acacia_window_pane.json 1ae66a840aaf29478510ecb9bbc89416e67ce89e data/create/recipes/andesite_bars_from_andesite_alloy_stonecutting.json 99256a17fb612511b959539e8b8f61ffe1d73aad data/create/recipes/andesite_from_stone_types_andesite_stonecutting.json 20bd65d72f1762edf473b2fafc71fcf7d55c01f9 data/create/recipes/andesite_ladder_from_andesite_alloy_stonecutting.json @@ -3536,8 +3536,8 @@ f4a50c2bcfc2483168a661d5af233bd043d1ea51 data/create/loot_tables/blocks/yellow_n 367e57a760156a19fc6805a0f23c3f8194cd4255 data/create/recipes/andesite_scaffolding_from_andesite_alloy_stonecutting.json 5272c61c8c17eb7a528cade93bbc80fd9ef51521 data/create/recipes/asurine_from_stone_types_asurine_stonecutting.json 5bf4b9baf782a461efc36d463b99b9acb0ab4607 data/create/recipes/asurine_pillar_from_stone_types_asurine_stonecutting.json -653fea84356d039ca47a69d510798187a9ab12af data/create/recipes/birch_window.json -d1e2a3de908d4bc3e8bf7c83aff15657147f37d0 data/create/recipes/birch_window_pane.json +41f53dd9817c3cc9613c8e97ff8f9ffb895e2b0e data/create/recipes/birch_window.json +998dbc2cc27888a28f009b8e408b7091baac9255 data/create/recipes/birch_window_pane.json 5965f3abe435ac0b3a39d8ec31af71808592642b data/create/recipes/brass_bars_from_ingots_brass_stonecutting.json 4b29884cd866dcda1b93899d81fcd3a2ae4c541b data/create/recipes/brass_ladder_from_ingots_brass_stonecutting.json 9c685014019a7a4f1ef47f235cd1e9b3f9093295 data/create/recipes/brass_scaffolding_from_ingots_brass_stonecutting.json @@ -3547,342 +3547,342 @@ da3692808565988e21ec5b1d5e976338ccc4a037 data/create/recipes/calcite_pillar_from b9d4f55128aa03ee6f6ab1831e709629a42c147e data/create/recipes/copper_ladder_from_ingots_copper_stonecutting.json 922c5ac48c8eb8b3a39f5626a381c2252fbac107 data/create/recipes/copper_scaffolding_from_ingots_copper_stonecutting.json bab9fa969ba95850dc6e3bd0723387a61cbb05cd data/create/recipes/copper_shingles_from_ingots_copper_stonecutting.json -636fc789743ff7360070e14b849874e4888ab844 data/create/recipes/copper_shingle_slab.json +bb083ae1d057dc0106946e4c68f9469b81724396 data/create/recipes/copper_shingle_slab.json 3689feaca2bd5355fa2d4226cd2cc519fa9b97c1 data/create/recipes/copper_shingle_slab_from_copper_shingles_stonecutting.json -81abf820dbdac75d9cd7ac8fdcc0312ad72e3603 data/create/recipes/copper_shingle_stairs.json +bd4cd7119f8371164b278afc679795a3c2a53406 data/create/recipes/copper_shingle_stairs.json 59f672e8e88d5f4655467e2696616b552debaf46 data/create/recipes/copper_shingle_stairs_from_copper_shingles_stonecutting.json d463aa891c7ae1b2eb1a758e4100c5a1c16cfffd data/create/recipes/copper_tiles_from_ingots_copper_stonecutting.json -40589911d582fc369c2502243862998c24f4c767 data/create/recipes/copper_tile_slab.json +f64ba3f3c607b43ea77e5bccb7ec2048e5c6e424 data/create/recipes/copper_tile_slab.json 91b0390e0c772d43eb46b94a0113323f0f6a4387 data/create/recipes/copper_tile_slab_from_copper_tiles_stonecutting.json -4a802573c3c008f4f2f17d4345132bc9793219ff data/create/recipes/copper_tile_stairs.json +d31a41f6f7ef0bd20abab06cc31a9d2c56187117 data/create/recipes/copper_tile_stairs.json bf1b0a447169029161fb07feacd22d5aa806b2bf data/create/recipes/copper_tile_stairs_from_copper_tiles_stonecutting.json daa54c9ff3612521f06cc1979116beafcda852dd data/create/recipes/copycat_panel_from_ingots_zinc_stonecutting.json 745816d2c3fa29ede2510e39edc76f6fecee963f data/create/recipes/copycat_step_from_ingots_zinc_stonecutting.json -053636964b893c66da42751d73dd73f42e4c9352 data/create/recipes/crafting/copper/waxed_copper_shingles_from_honeycomb.json -43ac8d51f02e9fb355d6dae82aec19c615cdedc6 data/create/recipes/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json -eca378393be9599d0c0e70824391b70dea08392e data/create/recipes/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json -2ec98e72a67f5bd5e7826bfe67849c31d1f5eb8c data/create/recipes/crafting/copper/waxed_copper_tiles_from_honeycomb.json -6f7f48d74d5deded060f3b8679b2f678643938f5 data/create/recipes/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json -62c523cc32c8b6107010fd3c634f9858cf3f7665 data/create/recipes/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json -b40f73c35d1c00cf06d38e540bc79579922d8378 data/create/recipes/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json -b0b3a6870ccce4bce0f6c4a650bb72f22f8f215a data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json -4cf518579a7a6daf505bb0db186df4e2a8954200 data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json -2119b818237d6f60a4fae4567ff51b8e2ca6af32 data/create/recipes/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json -c74be932366bd949b4c359002b2dc075345057b9 data/create/recipes/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json -0c6b8c9b9fad6e7ada9356e026a4b57fb396c112 data/create/recipes/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json -db939a2358d2e03bec36eb976e003923e98acb73 data/create/recipes/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json -d19f148fa41deec41e60e9ded0c543ebb5257c5c data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json -fe10661c44eb1ad96cbe9b8eaffed92ca043af39 data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json -9854bd200fdc6190739d9ed9e7e7c501133bf066 data/create/recipes/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json -9fb6b3007b65c6aee661afb616ca48ca6b26ca1d data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json -10204f896e57acd61c11abc2ef5cd26efa157c33 data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json -03d97d063768fb7104e366d1d2ee45b9f9852488 data/create/recipes/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json -f4d433e9efdf560b4b54680c337c25f1ce1083ed data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json -7e9f501343e715804fc6228cb7868d3b27bf9f5d data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json -bcf4022c4b86993b12e07eb18afb669969dcf588 data/create/recipes/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json -b1ec8d695b1efd296bc3da23fdf6b743e3c70519 data/create/recipes/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json -6d4e727c00442107c3ecee8d5144ea93f53fbe7c data/create/recipes/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json -8cd1533a709c70d45df15471f5228ce1e54d9e61 data/create/recipes/crafting/kinetics/black_seat.json -22117d985945679dd38b23ecf365c7a2357bb0ce data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json -b1fa2cebda1fc721094f1ec111f7c2226c777a6b data/create/recipes/crafting/kinetics/black_valve_handle_from_other_valve_handle.json -3fac2cf3c0dca081f381e3d3ccd92ffd86921a33 data/create/recipes/crafting/kinetics/blue_seat.json -6495d9db0a42d7fee57a353b68245313176ea379 data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json -e1ef32576f0ae2ee8f229ae4bb945cda7ba11131 data/create/recipes/crafting/kinetics/blue_valve_handle_from_other_valve_handle.json -1655a87be942f9390646cd94511154de349d3480 data/create/recipes/crafting/kinetics/brown_seat.json -9b09806242f292b5ef7a58c2a8c68159b8759e08 data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json -d4d32a3afd55a2aebdb934969846d8cc6bf6e8f5 data/create/recipes/crafting/kinetics/brown_valve_handle_from_other_valve_handle.json -7280ffac3d33934c8b5df5cd2293d8dccb65cacd data/create/recipes/crafting/kinetics/cyan_seat.json -5a27e3e5d1df41c92967d1f56caab1c4f73c3db2 data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json -79cd83b69d6045109d724ac7d633afe050613206 data/create/recipes/crafting/kinetics/cyan_valve_handle_from_other_valve_handle.json -1dd123332cfa075a15a21a8695fbb165cd4b81ee data/create/recipes/crafting/kinetics/gray_seat.json -ff6eab5cc5f8b0075b0c7d7c4dbf350735ebcf40 data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json -c26e2d6599d42881c3b3a85938029ae00b582560 data/create/recipes/crafting/kinetics/gray_valve_handle_from_other_valve_handle.json -931084f9550dd22dd248947bbfb8ec06ca2668a5 data/create/recipes/crafting/kinetics/green_seat.json -ddf3c120a07526c07d08353000a66ca2f77b939c data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json -d70e5ca1c835275d18e566779e52d452de0de523 data/create/recipes/crafting/kinetics/green_valve_handle_from_other_valve_handle.json -11eecc4b244a840c50f15b8abe74c8475bf7af17 data/create/recipes/crafting/kinetics/light_blue_seat.json -502d9df77d3a959afb9d55140f7adcfa9acdd8f3 data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json -87358c07bed359097c53d149a25d3fec2b8ed3b4 data/create/recipes/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json -8c416298d962c16523904cfc968e0d12f47b490e data/create/recipes/crafting/kinetics/light_gray_seat.json -7a13b3307430beeac465d2b38f13c6ef5fa7ba3d data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json -118217a1aceab6becde031f8364f451d5e4579a6 data/create/recipes/crafting/kinetics/light_gray_valve_handle_from_other_valve_handle.json -62cf6f795afd196208f55a48ad594224d6efed97 data/create/recipes/crafting/kinetics/lime_seat.json -f820ab88693744565d6ae417612b8942b9576408 data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json -f026035b88dff29202d8429f9e6b54871c516535 data/create/recipes/crafting/kinetics/lime_valve_handle_from_other_valve_handle.json -34c9d9d47b864670a46bf5ea6c80610f16445172 data/create/recipes/crafting/kinetics/magenta_seat.json -471ceba0129b9e9eee4f5bf91f6219cfe1fbbb7b data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json -ca17cc33725d1256fb355a2c5338e882c5e185f1 data/create/recipes/crafting/kinetics/magenta_valve_handle_from_other_valve_handle.json -0906aea0987e59ca338dec59c0e8d919a5c6aab2 data/create/recipes/crafting/kinetics/orange_seat.json -028aae0e3cb832d3621a5e899f437ee41bec3003 data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json -9a661be7c4433f1a2dce70db44e7d948879277ef data/create/recipes/crafting/kinetics/orange_valve_handle_from_other_valve_handle.json -7f0dee3635e10c4c4b8fb1ed1ff0c4087e094943 data/create/recipes/crafting/kinetics/pink_seat.json -8477406baf159088d0d4028d31909e802e4aaa57 data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json -1408011f39748b790f910c831762b3a040cc54b2 data/create/recipes/crafting/kinetics/pink_valve_handle_from_other_valve_handle.json -b9b81481c8261b31df6116c421e349f396887172 data/create/recipes/crafting/kinetics/purple_seat.json -bc1a068972cd55fc25f70d475fec1fd49462af50 data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json -115877305315525e45f4398f1248c12cccbe3049 data/create/recipes/crafting/kinetics/purple_valve_handle_from_other_valve_handle.json -b9063ec4f33197540abbd2922c153987eed184f5 data/create/recipes/crafting/kinetics/red_seat.json -f754c53adfedc41c3df2648ca593a573e94821c6 data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json -7238bf19a65066860356acd121f69de2c4d9893a data/create/recipes/crafting/kinetics/red_valve_handle_from_other_valve_handle.json -c09dd721a4172bfe586b3abee38eb94c90b4eb43 data/create/recipes/crafting/kinetics/white_seat.json -5fc33a35a3a80b3f1544069465eaa0a19fd34e24 data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json -34856ed504691daa2c1255301e5ee6b4ff7ab780 data/create/recipes/crafting/kinetics/white_valve_handle_from_other_valve_handle.json -6a0656c41131680bf0e4b9350edeea2c76bef98a data/create/recipes/crafting/kinetics/yellow_seat.json -3620a5d6c0b4becf7ca7adbde0b71aca1e2c64c9 data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json -6206c662aca0eb28bd3f5063fdd59e3032a970b9 data/create/recipes/crafting/kinetics/yellow_valve_handle_from_other_valve_handle.json +255c32272a704109fccdbb071d4dbf602cb8c1d8 data/create/recipes/crafting/copper/waxed_copper_shingles_from_honeycomb.json +57ae13042e0f96676fa322bf24db4976d75ca6bc data/create/recipes/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json +790565897535ea2e741d0a0ed7c0b561d594b69a data/create/recipes/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json +0c6e14c5884257850c7360cba66bc8cca91c84e7 data/create/recipes/crafting/copper/waxed_copper_tiles_from_honeycomb.json +4693ee65a4a5e1c93fc2acce7bfbc438e573ad9a data/create/recipes/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json +f8772b915663e3f70b3a2405a23c5ce87e8b8e49 data/create/recipes/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json +6d0dacc4db8966d38156fe17645732084379a887 data/create/recipes/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json +3bc0b81ea61229e24570e083caa4e5870d517e75 data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json +191f34b27bc8966c2b6ba41403cc0933718748d3 data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json +cdd66bdfddbcdfacb27c030872d10b6e7f1356fd data/create/recipes/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json +2f6d2f8da4d4da2ed48e33d8f6e0b32d37a3ce6d data/create/recipes/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json +4ed8482ed29fe7c3273db733fa141743c181d460 data/create/recipes/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json +0ca4e58d715d5ed4b051a94f2dff42d4d413ef07 data/create/recipes/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json +b421f16aea7c47fa8a62e69973f30e4e382f8a2c data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json +7ab7f673f57e219d3e486d0add1d7e2a8820cc6b data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json +b7edffb9b1a936fd34fe23defefc8cb9ea4f6977 data/create/recipes/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json +24582e83e8d36a6267df5c028addfb44c1a637e6 data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json +9185ea241bcb5f2fe09d0d5c65832ef379e06c58 data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json +90bce9f262b87fb821210aceb88d09d815d15e5a data/create/recipes/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json +a2cc99ad9b1234f5327971ee535af9bc25d0154c data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json +0952753a079593d748b38ca84b666f2f886f5c1e data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json +724802d206db185ebf20bafbcfc35fe0f982f58a data/create/recipes/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json +98d0b72eb20e1d80cc590800ae2d642a47c3ae5f data/create/recipes/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json +594b8fd5c30a84df97667b2c6dccc5dedd039d26 data/create/recipes/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json +97c3e430ef2aecf61c457d0b8c4bbd23e1b01cc3 data/create/recipes/crafting/kinetics/black_seat.json +1129d02609125b48af2efa48f84dd3f90d51a341 data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json +9e5a73e2343054d35e2fbfd20f0c49834d1a87a6 data/create/recipes/crafting/kinetics/black_valve_handle_from_other_valve_handle.json +022b7dc2660bf39606c2394c5af45da16ba375bb data/create/recipes/crafting/kinetics/blue_seat.json +935b63588e9464efc15025c96b89782466d4615d data/create/recipes/crafting/kinetics/blue_seat_from_other_seat.json +33e7767097462139f3faecfc1c6fa22f2839266d data/create/recipes/crafting/kinetics/blue_valve_handle_from_other_valve_handle.json +f840c8694e8fbbd58c5eee4ed76dbd9aedb2ec31 data/create/recipes/crafting/kinetics/brown_seat.json +68d23b7fdd7db72d14097282172ed0426e6f3cf3 data/create/recipes/crafting/kinetics/brown_seat_from_other_seat.json +d677be1e8f6f73979d4f7e04d16030988b0fe2d4 data/create/recipes/crafting/kinetics/brown_valve_handle_from_other_valve_handle.json +d0854f83b60527cd1984a72a0d6e9319b82107c1 data/create/recipes/crafting/kinetics/cyan_seat.json +629f6ce0f47ac3cf500d6b2281873df4fbbb1c93 data/create/recipes/crafting/kinetics/cyan_seat_from_other_seat.json +e60baaa1e898975bd2595d50afa8db9cb14ed231 data/create/recipes/crafting/kinetics/cyan_valve_handle_from_other_valve_handle.json +60f47a9a587de415a2a3c8f0dda7d996ea29d23a data/create/recipes/crafting/kinetics/gray_seat.json +b1b0ac685e81318e92d3880cafa06267ee4ce080 data/create/recipes/crafting/kinetics/gray_seat_from_other_seat.json +fac421b61c8ea60ccc14a2d8a75d19d960ebc32e data/create/recipes/crafting/kinetics/gray_valve_handle_from_other_valve_handle.json +3f81b63ec705052733bfc0b0310193da6ba11745 data/create/recipes/crafting/kinetics/green_seat.json +b8b7f9682e57a4ba9514cec00b2fb07b857e092a data/create/recipes/crafting/kinetics/green_seat_from_other_seat.json +a3f3c26dc7fb484b82a35b907b77dc6aff95335e data/create/recipes/crafting/kinetics/green_valve_handle_from_other_valve_handle.json +acd5fae26c3695ddfcaacf0e6d50f14264f3c7dc data/create/recipes/crafting/kinetics/light_blue_seat.json +16d2b63337e94b3df137c2c4b0bcad4703f53960 data/create/recipes/crafting/kinetics/light_blue_seat_from_other_seat.json +49bc8aa18c2a35e7c052f5c1836d0d886dd6f6c8 data/create/recipes/crafting/kinetics/light_blue_valve_handle_from_other_valve_handle.json +4a632cfa1a7a43c5762cc8e2c3b8f9238225755d data/create/recipes/crafting/kinetics/light_gray_seat.json +85a0a15f86084bb7efec3a42f2d6311ce3562766 data/create/recipes/crafting/kinetics/light_gray_seat_from_other_seat.json +ddf1106372428e9176db89ca095bd9b8b9f0881e data/create/recipes/crafting/kinetics/light_gray_valve_handle_from_other_valve_handle.json +67ce357aa33075cf9c826b068a1e8cbaae444834 data/create/recipes/crafting/kinetics/lime_seat.json +d3d8376c6b65de28c4dfc3de322031c4e10c274d data/create/recipes/crafting/kinetics/lime_seat_from_other_seat.json +608f7e03a7ff320194c89db808c396e50abe8530 data/create/recipes/crafting/kinetics/lime_valve_handle_from_other_valve_handle.json +ed93888e77317fe5963189e1fd519473ab657991 data/create/recipes/crafting/kinetics/magenta_seat.json +b2bdda12f4fd27949d693b60c0bd5911ce1e7c62 data/create/recipes/crafting/kinetics/magenta_seat_from_other_seat.json +493709d6800a4199893dace709e538ef24765fef data/create/recipes/crafting/kinetics/magenta_valve_handle_from_other_valve_handle.json +6bda3df0614945058141ca4e5114ca824004dcab data/create/recipes/crafting/kinetics/orange_seat.json +69f14125d45f8a342c7064cfc86baeeb6ba4ec4b data/create/recipes/crafting/kinetics/orange_seat_from_other_seat.json +d27b1c3448c8c1016501cbb09937ae1789d30df9 data/create/recipes/crafting/kinetics/orange_valve_handle_from_other_valve_handle.json +6792f96fa2c069f5dc72369cbc066c8f888946ae data/create/recipes/crafting/kinetics/pink_seat.json +d03ab40e2e35b6d338e0f57e052514ca7179c84d data/create/recipes/crafting/kinetics/pink_seat_from_other_seat.json +204728953cb7401a0bacba941cd9197208091a99 data/create/recipes/crafting/kinetics/pink_valve_handle_from_other_valve_handle.json +b541e420e0fd274529e5bcb5c22096c27b043256 data/create/recipes/crafting/kinetics/purple_seat.json +c656a06bf435b394d7d1f2de2e5d807863f0b7a9 data/create/recipes/crafting/kinetics/purple_seat_from_other_seat.json +ed9f4b3f75b416fcd813625ed1789b63f9c35127 data/create/recipes/crafting/kinetics/purple_valve_handle_from_other_valve_handle.json +66bca513d27d37492cb5a2ed82da5f874beba0a9 data/create/recipes/crafting/kinetics/red_seat.json +abd86818489edb22e277f2cef81f22b492d34b55 data/create/recipes/crafting/kinetics/red_seat_from_other_seat.json +9d70b0d7193b3cc9deb2436afd7f4c1a7a3aed05 data/create/recipes/crafting/kinetics/red_valve_handle_from_other_valve_handle.json +975439bc9c9f26acb11858ce1f0bba519883c8b5 data/create/recipes/crafting/kinetics/white_seat.json +b04c1cebcfbcf44c4ced04252f54dbfeb8f9ff12 data/create/recipes/crafting/kinetics/white_seat_from_other_seat.json +77eea3d2d6155f8303e632a5e51a6305a9136175 data/create/recipes/crafting/kinetics/white_valve_handle_from_other_valve_handle.json +48c9e3b9f5a8a0f598ab0f57cd8936724337bf1f data/create/recipes/crafting/kinetics/yellow_seat.json +75633a46c374230fab4096a45628b42d6012627d data/create/recipes/crafting/kinetics/yellow_seat_from_other_seat.json +2be097bb4f1e47a6b3a4a6f0ef222dffe31a1e22 data/create/recipes/crafting/kinetics/yellow_valve_handle_from_other_valve_handle.json 44a59669177a5a1b0b0eb7cb3dd46826311f4dfe data/create/recipes/crimsite_from_stone_types_crimsite_stonecutting.json c3f4fd2206f3885904913289761f2b8b758e4c95 data/create/recipes/crimsite_pillar_from_stone_types_crimsite_stonecutting.json -67a1a0f3d74cd79c37ff44c7557ecbfd86ffbf04 data/create/recipes/crimson_window.json -c1fc4016dfa48ef5de48d4ccb8a279ded310f10e data/create/recipes/crimson_window_pane.json +e1815f97fbc2786d77f5378a2696e36050d8a1fd data/create/recipes/crimson_window.json +96009a12fe3f5ebf677ac069999e2ea2adbc9b7c data/create/recipes/crimson_window_pane.json 82cb9be82ce5109781169bdb47bbd49238b9824b data/create/recipes/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json -5b61eb046bdec4b812b021e65628ee084d7a959a data/create/recipes/cut_andesite_brick_slab.json +d6a41fc914a4a41478f115d9503658dba04a4d02 data/create/recipes/cut_andesite_brick_slab.json edf981198463ac58524606f86dc15d2265e8b993 data/create/recipes/cut_andesite_brick_slab_from_stone_types_andesite_stonecutting.json -d7357765136068e164b1e63e19c18103e5b5165a data/create/recipes/cut_andesite_brick_slab_recycling.json -11f0aca8fe2758a59e090bf068e62c0bafe47c3d data/create/recipes/cut_andesite_brick_stairs.json +72486864f3a0d31a92212552441eb659f2541b60 data/create/recipes/cut_andesite_brick_slab_recycling.json +8c80622ce548b9d82d3467c241863014a8fc4c0d data/create/recipes/cut_andesite_brick_stairs.json 22f463c679249738bf1a340a3b8ff14806303a70 data/create/recipes/cut_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json -a8b642375aed4af81396fb15a2c741e43f8ebc03 data/create/recipes/cut_andesite_brick_wall.json +42b7105c1d776aed25c1c6bbd9254375079d7438 data/create/recipes/cut_andesite_brick_wall.json 7d25517650c9f66b65f0f8841cf9bcda7ea401ec data/create/recipes/cut_andesite_brick_wall_from_stone_types_andesite_stonecutting.json c3ab483224c3adbd467a4ec0b26a1f6a53fe81c4 data/create/recipes/cut_andesite_from_stone_types_andesite_stonecutting.json -4c2f2e24f4bf6fa6c2e41596bddf8bfb6a59c7e8 data/create/recipes/cut_andesite_slab.json +9f316131bb538da9f6b1bde9eaaa0a5bd5972a66 data/create/recipes/cut_andesite_slab.json 50dcff201da369bdc591fdc320aae3547f114284 data/create/recipes/cut_andesite_slab_from_stone_types_andesite_stonecutting.json -700b40dbf4def28d0ea59b5155af034410350bdc data/create/recipes/cut_andesite_slab_recycling.json -425cc0dc5c3ce1e3fa80c8144ba48c3657ef64c6 data/create/recipes/cut_andesite_stairs.json +033735fd92370adc6e4d3e130ee92f5dd86c0bc2 data/create/recipes/cut_andesite_slab_recycling.json +3e42e8060f92be69cb6dfe25604e9e2c40ec4672 data/create/recipes/cut_andesite_stairs.json c284fc46aabae9c5ab79071eb63ec9b07a9d1002 data/create/recipes/cut_andesite_stairs_from_stone_types_andesite_stonecutting.json -e3fd55901f5a8987c0c696ca2d095ee7320a89ea data/create/recipes/cut_andesite_wall.json +3b6e66e92656ab5b0d1e15444db62ccb1cc01866 data/create/recipes/cut_andesite_wall.json 5df6e8d558f656533aff514aee8cdec7cf8d6fdf data/create/recipes/cut_andesite_wall_from_stone_types_andesite_stonecutting.json e335b15907be053ab0f2649338b12a86371b78f7 data/create/recipes/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json -d734111d918ecca4d7216c3f3b8d1963a2f97def data/create/recipes/cut_asurine_brick_slab.json +41d085d3b8fce5b12d601d86fd0e88df9b482aec data/create/recipes/cut_asurine_brick_slab.json cf61e0806a3988a771675a261a540cbb62352d80 data/create/recipes/cut_asurine_brick_slab_from_stone_types_asurine_stonecutting.json -52d0b850fc64372d58b8eb4fffb49164b5ac70df data/create/recipes/cut_asurine_brick_slab_recycling.json -cd8fa46aa2651fb5b819bd57696573cf9a0ee0e3 data/create/recipes/cut_asurine_brick_stairs.json +86606a0717bba33f457707d96461fec6a22d23de data/create/recipes/cut_asurine_brick_slab_recycling.json +4a3c4c94488fe08ad48420d40c279042c7d4e47b data/create/recipes/cut_asurine_brick_stairs.json 382a7faa460ac286631fe063280541f2f499d895 data/create/recipes/cut_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json -e778e9bf3973dc57152ae2194072b57ef0be20af data/create/recipes/cut_asurine_brick_wall.json +09699c116bb201e742fef1fd3c987e9de4606e6a data/create/recipes/cut_asurine_brick_wall.json 8bb8a9f8e8dd0d6585311c326dcf3f40227149a9 data/create/recipes/cut_asurine_brick_wall_from_stone_types_asurine_stonecutting.json 0188d62fbeede94f8596dd5cc73d361a160e8c95 data/create/recipes/cut_asurine_from_stone_types_asurine_stonecutting.json -ea2e7bb7765f5ab6145a88b5a3e9b4e222f57cc3 data/create/recipes/cut_asurine_slab.json +118e87a2a344238009b1bbbe70e6f314e27842d9 data/create/recipes/cut_asurine_slab.json 37c502094ee96da9e4983142dae5e023c6bcfe14 data/create/recipes/cut_asurine_slab_from_stone_types_asurine_stonecutting.json -7fb8749f4909162898f8bab37c75633028219ddf data/create/recipes/cut_asurine_slab_recycling.json -6b61f7c42a66c01c2e32dbb98236889592f2927e data/create/recipes/cut_asurine_stairs.json +fe3dd5c7d5bdea71a75003cf3d50439d9d21458d data/create/recipes/cut_asurine_slab_recycling.json +6b37effc6166cdf7231392074d676418b8fa66ff data/create/recipes/cut_asurine_stairs.json cade93c9328afcacf4507aa7699c4b09fb4592d4 data/create/recipes/cut_asurine_stairs_from_stone_types_asurine_stonecutting.json -7728b47c895f99abfa7ac881976a76071fc77a8e data/create/recipes/cut_asurine_wall.json +80bec79b5daea4b2b72c0f5e9f189c1044583465 data/create/recipes/cut_asurine_wall.json 45a712e41a74982cfb94a39da199ec6c95eef798 data/create/recipes/cut_asurine_wall_from_stone_types_asurine_stonecutting.json da11f21280ba1ed06ffe8afe77db3e9e1bbcb1a3 data/create/recipes/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json -675479b236bce6994b2dc6a3ac3abda270dc72ab data/create/recipes/cut_calcite_brick_slab.json +98e849c743ed1e4397bf6168215dfa7006a804c4 data/create/recipes/cut_calcite_brick_slab.json 1c21eb6c785729a8ea274513e1313aed952e105e data/create/recipes/cut_calcite_brick_slab_from_stone_types_calcite_stonecutting.json -5f266eaeee2445752f40dd6868d19b4a9f2a0e43 data/create/recipes/cut_calcite_brick_slab_recycling.json -f3e29f66fc87329b2d10309a63aa68c748d4e9f7 data/create/recipes/cut_calcite_brick_stairs.json +2a3f078f7f40ba3bc5c17a037db1f8ee415e4e3f data/create/recipes/cut_calcite_brick_slab_recycling.json +e4267c62bc6cfc8373df29ee2685f1e1b286b638 data/create/recipes/cut_calcite_brick_stairs.json 10fe509e01e3ed1b04bd2f384c0aa3db96b117f1 data/create/recipes/cut_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json -5bbfdf637bf668cd1ff50a3e99b93bd7f30e870b data/create/recipes/cut_calcite_brick_wall.json +9b55a6c9cf0ce697a242684953daf9aa94d024dc data/create/recipes/cut_calcite_brick_wall.json 1e67376e484923b84bd64b0b22b4e55b581ac419 data/create/recipes/cut_calcite_brick_wall_from_stone_types_calcite_stonecutting.json 98b014b64c97371f04aaacbdd23e13e274e36e3b data/create/recipes/cut_calcite_from_stone_types_calcite_stonecutting.json -d03e4184157193413e3d26e6999120a8b6e99471 data/create/recipes/cut_calcite_slab.json +fcab91f11fe97a194b2c1b16115206166d3cd634 data/create/recipes/cut_calcite_slab.json 8426a494b776148056cb4525e62744d0be8b28cd data/create/recipes/cut_calcite_slab_from_stone_types_calcite_stonecutting.json -d518017beb7f485db86e221ac61c135243220efc data/create/recipes/cut_calcite_slab_recycling.json -112f975724ea6ab797ee825c0c1566e62e2bd857 data/create/recipes/cut_calcite_stairs.json +6b0bff115ff5a8d7392e516ba346ddb4139285b6 data/create/recipes/cut_calcite_slab_recycling.json +663db5aee02c076e98404a4550c17dcb4774f7ab data/create/recipes/cut_calcite_stairs.json a7e7fb425d3c1f21f5ed53da79957363fed824df data/create/recipes/cut_calcite_stairs_from_stone_types_calcite_stonecutting.json -d5f3b5da689f96183d403f72423f0516a8123cc7 data/create/recipes/cut_calcite_wall.json +73eaf7bffa38bc874974871f3002cd3ee7f0c36e data/create/recipes/cut_calcite_wall.json 01b4c23362f15ee0e5c207c46383f96032c89d98 data/create/recipes/cut_calcite_wall_from_stone_types_calcite_stonecutting.json 07aff2bb6424de46463b2c965418ed52efd0a790 data/create/recipes/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json -210a49e2cd8acd867988a554e010bd3398b212ec data/create/recipes/cut_crimsite_brick_slab.json +8ffb2c1c747f19ea37c0da3fe248b6c58981c9f6 data/create/recipes/cut_crimsite_brick_slab.json 86c3a5c64561052489b3ceb9e08be5a8729198a9 data/create/recipes/cut_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json -42fbc409c8a87e1fc8175201695329215eab113d data/create/recipes/cut_crimsite_brick_slab_recycling.json -5d0a44f59f77ac6ef541b2585f8a7caa1e5e744e data/create/recipes/cut_crimsite_brick_stairs.json +e3215d4e651e70402b896ba50975cb2f23d16278 data/create/recipes/cut_crimsite_brick_slab_recycling.json +e49f6e319fae9058cbece0e332a11e108234e608 data/create/recipes/cut_crimsite_brick_stairs.json c7186fb1a75f59aff929e843f50a162a090b7bb3 data/create/recipes/cut_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json -666cb0d42d605e5383bec4fe5c680c7453a1875b data/create/recipes/cut_crimsite_brick_wall.json +272d8d01730a88eff4fc6923e93962650b992c46 data/create/recipes/cut_crimsite_brick_wall.json 13ac9464098e8c67e820dc898c025ab0382d852a data/create/recipes/cut_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json 18ce9ff32eda2d869bd11f398a86e78b71f6d0fe data/create/recipes/cut_crimsite_from_stone_types_crimsite_stonecutting.json -862e2bc7d4a88add00363d4c553e3c345c418a6b data/create/recipes/cut_crimsite_slab.json +c39166aa6267ec5bc71893d5756955abfb644217 data/create/recipes/cut_crimsite_slab.json 6271d5bc0377814ba06061bfffcb812ca2ef8f03 data/create/recipes/cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json -e10e22075950f9a72415f01f1027071452185543 data/create/recipes/cut_crimsite_slab_recycling.json -64b7064db387da938fdf150586c3c4ab2206db8c data/create/recipes/cut_crimsite_stairs.json +acfe33dbb889c820c213bcbc8593766703bf3a25 data/create/recipes/cut_crimsite_slab_recycling.json +9c44ffdd6b8bb3b79cc66d28135f199b5ce2f8b4 data/create/recipes/cut_crimsite_stairs.json 90b03cf1e72d3b803e33755832e0722ff264681b data/create/recipes/cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json -f6df845bb4be7cc265ab42d4204aadd05be1a084 data/create/recipes/cut_crimsite_wall.json +8dfe19522878af232deaa1fc13d83cf785684cba data/create/recipes/cut_crimsite_wall.json 18f9548175baab0173785d7ef308096067712dd2 data/create/recipes/cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json de1a11b7ed71f1f7aeea2791fe922feef689fd35 data/create/recipes/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json -eefd97919559beb1bd3b537aed63f364c1099ae9 data/create/recipes/cut_deepslate_brick_slab.json +5e5c0e6b1b3e204de3c48fb6a4cd473a150979c2 data/create/recipes/cut_deepslate_brick_slab.json 2c0795b92759dab751f86f50aa80440df2245526 data/create/recipes/cut_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json -1babf94c29e3195afa800bab4f75dec5b162c2b4 data/create/recipes/cut_deepslate_brick_slab_recycling.json -37a272a3648e6911921ccf6b8f6ed1bc549d2cb5 data/create/recipes/cut_deepslate_brick_stairs.json +dbcc41c48cf28b71dcd9f3b6ecae43c8de681532 data/create/recipes/cut_deepslate_brick_slab_recycling.json +e21f8dc33e70ebd43ea79a4afaf3b4e8a449f4bd data/create/recipes/cut_deepslate_brick_stairs.json 7b3489e5b629a995691be117c5a378769c743449 data/create/recipes/cut_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json -a6e1daf34cc4c90982408d98857cce1867ddcef9 data/create/recipes/cut_deepslate_brick_wall.json +158bb41bffebb2543e4aa2d5f14cc8af1cdd8671 data/create/recipes/cut_deepslate_brick_wall.json 73a07a5fa665bb20d131f0a0e40806116316928a data/create/recipes/cut_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json 992fdc2eba2afe3ff8aad0ceee5424ecd3f3026d data/create/recipes/cut_deepslate_from_stone_types_deepslate_stonecutting.json -5f3eb83bff21540644bf13bdec20c7c392a1a1cb data/create/recipes/cut_deepslate_slab.json +064e2f5edd9209af7742b0f0eb45204453bed46f data/create/recipes/cut_deepslate_slab.json f341d30b7fd427dea09a51d67e1e9532e5184be8 data/create/recipes/cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json -d8c65f549d18985b1f504b47c430c2785328ec68 data/create/recipes/cut_deepslate_slab_recycling.json -53b146a8b8f6bc977c3b01c687cad3057f4188f7 data/create/recipes/cut_deepslate_stairs.json +82c9d41186f1f3ba4c110ab84228550574a703de data/create/recipes/cut_deepslate_slab_recycling.json +c08e12e44344efca550efa8ba14d0cb2f9f6c2c6 data/create/recipes/cut_deepslate_stairs.json e6deec1352fb5c74c470dc488b71e5f8f55bdfbf data/create/recipes/cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json -50642a13ec5bd46a18bf1d0175d276df8baa505f data/create/recipes/cut_deepslate_wall.json +2ad7fb3f3a143e58bea8eefe4cd9db3d1c37a3e6 data/create/recipes/cut_deepslate_wall.json e752527479f71f96bb34878008bf8cfb23fd3045 data/create/recipes/cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json 2c23d13f48f3685bda6c564e080053fbfa71ab99 data/create/recipes/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json -dd165eb6501f557d1dd8f80b4de10f3aed910bdd data/create/recipes/cut_diorite_brick_slab.json +90b83c2a2026d70f49c91813305fdee721926db9 data/create/recipes/cut_diorite_brick_slab.json 9d51c690c77321437561a006dc2f9bba975875e6 data/create/recipes/cut_diorite_brick_slab_from_stone_types_diorite_stonecutting.json -6abe5839b601c5556eea1704d079a70edc804114 data/create/recipes/cut_diorite_brick_slab_recycling.json -19eec96d94bcf9bb44f09417c9f03bd267374fcb data/create/recipes/cut_diorite_brick_stairs.json +fa76e64ac9b569f5d5f2f1ecc54e51f9be15aacf data/create/recipes/cut_diorite_brick_slab_recycling.json +aa6aea99e9ce2d5dc3d6555ab3d17928bca6195e data/create/recipes/cut_diorite_brick_stairs.json 9a26c4097519a9300e591b6578bbaf6c11f909e1 data/create/recipes/cut_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json -b90891a643167a0b8651bfdce989bcacc3f729f2 data/create/recipes/cut_diorite_brick_wall.json +78d37df17c7e2be73ce1d226ee552ff3f49b9e4f data/create/recipes/cut_diorite_brick_wall.json f668f2c78a779bc3d0546a82dea02b9f4688e05c data/create/recipes/cut_diorite_brick_wall_from_stone_types_diorite_stonecutting.json 1918ecb2ab16ca7dbb30eee4852b67dd963d872e data/create/recipes/cut_diorite_from_stone_types_diorite_stonecutting.json -02af79b203a5f872d96fa0309585ba7e32e4c4b9 data/create/recipes/cut_diorite_slab.json +07fda5c89128648856f948a03ac56a2a2693cf1b data/create/recipes/cut_diorite_slab.json 28765ac7f8b62373b32f014d1dd7f4afb50e1906 data/create/recipes/cut_diorite_slab_from_stone_types_diorite_stonecutting.json -b5371e56e0bb9690dacaed99bdbdd0c365eff657 data/create/recipes/cut_diorite_slab_recycling.json -1cd0d72238a3c0ba3d464f8867180b27780fe761 data/create/recipes/cut_diorite_stairs.json +dd5f3c59a5d292f7b5c046be35da7f67e8383aa1 data/create/recipes/cut_diorite_slab_recycling.json +3d896c502aa9b9256983cd2c8bfff08d48439550 data/create/recipes/cut_diorite_stairs.json be2c6c01630b90895e7215edce3d02352793dbc4 data/create/recipes/cut_diorite_stairs_from_stone_types_diorite_stonecutting.json -6ba16971a01a083ae7f246469caa9712513035b2 data/create/recipes/cut_diorite_wall.json +8984b7b7dbc7e65ee04886516501a13278e889e9 data/create/recipes/cut_diorite_wall.json 8ff5d1ecff2202595f7cba5bd65c466c53ac2cc5 data/create/recipes/cut_diorite_wall_from_stone_types_diorite_stonecutting.json 10550b023989113c26d430136daf1dc49f10ce63 data/create/recipes/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json -4ca22169db1b79c401963e41126246bb55d2b577 data/create/recipes/cut_dripstone_brick_slab.json +95717a80bb8ae296c2f77478a8f42b88cea88996 data/create/recipes/cut_dripstone_brick_slab.json f04bf1189b53e24974779d9e959e8973d9677162 data/create/recipes/cut_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json -611db74fa02672bbf00c57a3ba283ad5147462ff data/create/recipes/cut_dripstone_brick_slab_recycling.json -f917512f374c5028a64f1316f1d3c3ca77df8cf9 data/create/recipes/cut_dripstone_brick_stairs.json +332534fc2909ca83f5f7f4ab3adf92680bb17f79 data/create/recipes/cut_dripstone_brick_slab_recycling.json +28fc8236ab8a8e05fe93cbcd14a89340ed01cbff data/create/recipes/cut_dripstone_brick_stairs.json 17bf8160eaf16655d454ddfe22b82c9a86462146 data/create/recipes/cut_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json -56ea4e4590c7b7591ac972bb255355048cdbb3bc data/create/recipes/cut_dripstone_brick_wall.json +7d638d156326a2e542ed94837273d9cca5cf4fce data/create/recipes/cut_dripstone_brick_wall.json 154931db54115cf4a64147cdd6d1eb7efff48737 data/create/recipes/cut_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json 7147f9199f174c9864109fe5723528921aaa0c46 data/create/recipes/cut_dripstone_from_stone_types_dripstone_stonecutting.json -fbe8e6b396dc5f35a41e8fd33f12be047820690c data/create/recipes/cut_dripstone_slab.json +f2800b467eac75d0099f2f07e09b47115df4e09f data/create/recipes/cut_dripstone_slab.json a4f62a1a30592f82789988f93d8ae35d176eca59 data/create/recipes/cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json -e6811af1e41f8ae33a37192b255cdd591ab9575b data/create/recipes/cut_dripstone_slab_recycling.json -5e24ada7d74ecc50d51dff72b47e51f3d2751f61 data/create/recipes/cut_dripstone_stairs.json +6e3f7b81fd9681782b8b05992312566f58a83f26 data/create/recipes/cut_dripstone_slab_recycling.json +823fd3c4364b7e6a626cd575f9c45769bb793aab data/create/recipes/cut_dripstone_stairs.json f2df5efedb6fb25ecb877b888007990082d9aca4 data/create/recipes/cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json -cc5973c3fcf8daa00a3eb330ef63b3b69b763c40 data/create/recipes/cut_dripstone_wall.json +a177092d0270f9e07a4f9bef4d0c8fb2ed91d3bc data/create/recipes/cut_dripstone_wall.json a3731ef689d3ac790bc3e3fd507f1134c99a751a data/create/recipes/cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json 9c4c64666b18d3adb11cd3d56667fabf6e88dfe2 data/create/recipes/cut_granite_bricks_from_stone_types_granite_stonecutting.json -1601147246873f4472621aa8ad97f565d7bc6dd8 data/create/recipes/cut_granite_brick_slab.json +aa454bebffd7e77cfa5c1bd711bfbac27e3c5a14 data/create/recipes/cut_granite_brick_slab.json d073b9b0b8ca2fbdc5e1ed16f6f195a5f3af4588 data/create/recipes/cut_granite_brick_slab_from_stone_types_granite_stonecutting.json -a555b441c26fabcec9016212fe23f58cf08f6b26 data/create/recipes/cut_granite_brick_slab_recycling.json -148cc08d5bdef289cf83efa6ee7c34416fca6772 data/create/recipes/cut_granite_brick_stairs.json +1dfd539c17a3342a0cd194ce1465a808aacbeda3 data/create/recipes/cut_granite_brick_slab_recycling.json +e069aa5c316feb2823ef98e8e6c89bb1bed23d2e data/create/recipes/cut_granite_brick_stairs.json f38fc7014aa83d4914d50d87ee3f8f762c078a78 data/create/recipes/cut_granite_brick_stairs_from_stone_types_granite_stonecutting.json -ff96e0eb308ac64ecbde8dfe8ddeda8ef6e85762 data/create/recipes/cut_granite_brick_wall.json +0fd9c3a778c7bdcd7aa06f892a9c260ad664d367 data/create/recipes/cut_granite_brick_wall.json b81db94b6228f512049324dd1436880f1e86e444 data/create/recipes/cut_granite_brick_wall_from_stone_types_granite_stonecutting.json 01970a95f17648a7ef1fb0337ee2e82eb2279e9e data/create/recipes/cut_granite_from_stone_types_granite_stonecutting.json -b2f2494ade061997413814b9d5120db046a5220d data/create/recipes/cut_granite_slab.json +8fc1c51591e590c8718be0500a4dbcc2b47830ce data/create/recipes/cut_granite_slab.json d239323b7a3b65b2fd7005350a90d578671c2b81 data/create/recipes/cut_granite_slab_from_stone_types_granite_stonecutting.json -15c318af5b24eaec1c65506d2fae58712fcdcb25 data/create/recipes/cut_granite_slab_recycling.json -da44d9f6b5a870aa2b4c0895f5a64f3352829738 data/create/recipes/cut_granite_stairs.json +6d78b033634dad8981a7c4c6724e82e9b25be334 data/create/recipes/cut_granite_slab_recycling.json +7cb050ceb4977bc2992ccfd348ef58dc9feb67c7 data/create/recipes/cut_granite_stairs.json 3d85d483073d37fea7d9a95831b3b856c0725b98 data/create/recipes/cut_granite_stairs_from_stone_types_granite_stonecutting.json -ef998f687d9808c4f84281ad394ec1e1d206b0ad data/create/recipes/cut_granite_wall.json +3d4130fe5fe6e963fd5e10534e729e0448b9f05f data/create/recipes/cut_granite_wall.json d43a876bf89bf3536c80fd5e3ef0ee36c147cd06 data/create/recipes/cut_granite_wall_from_stone_types_granite_stonecutting.json 7cdd3cf302cfe4ef21c0a89dadef4f781e307bb0 data/create/recipes/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json -7e0076e535e39dfe0658c95c17c74625ce532b45 data/create/recipes/cut_limestone_brick_slab.json +0e3285206947bcfdf9606d3f8e61ea7d2899f7d2 data/create/recipes/cut_limestone_brick_slab.json c3d3ff37e29c435b2a13d30bd4ded0f6ca9fbfbc data/create/recipes/cut_limestone_brick_slab_from_stone_types_limestone_stonecutting.json -775d6f4bc87d6828465e61b10d7d3f2ac3f81b7b data/create/recipes/cut_limestone_brick_slab_recycling.json -6432a85501e1d27050d2ea38ede33bce7c627c46 data/create/recipes/cut_limestone_brick_stairs.json +459babb2bd01e9e1ece4c8cd2865690997f01c66 data/create/recipes/cut_limestone_brick_slab_recycling.json +d4f8dc640becf1c35416016500424ecd68d7ecee data/create/recipes/cut_limestone_brick_stairs.json 570983b2b27862dabe9f3d1bcd76d2909b8bdb3c data/create/recipes/cut_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json -43901df763e6429a1181e66fb08ed10e22f59142 data/create/recipes/cut_limestone_brick_wall.json +aad4342a726fd65ca2b4c52a4e8857190e50b5be data/create/recipes/cut_limestone_brick_wall.json 5ac226aff9d854efc47ed71241e6c098b170b9b0 data/create/recipes/cut_limestone_brick_wall_from_stone_types_limestone_stonecutting.json 329950373aaaf8e70c54cf5e2467c7a84f372078 data/create/recipes/cut_limestone_from_stone_types_limestone_stonecutting.json -7a190675085bb725dad21534930f6b575a9c8090 data/create/recipes/cut_limestone_slab.json +cbacfd31703ac908d28e42968bb571dccfa20612 data/create/recipes/cut_limestone_slab.json 628a0a64c2dcd63f17a3ec9ce55ac643b194eacc data/create/recipes/cut_limestone_slab_from_stone_types_limestone_stonecutting.json -01432939afd4810c1084ab8bf1827a3cb114f2c9 data/create/recipes/cut_limestone_slab_recycling.json -5756f3dd7d9109eb6c4f4c14e98956e853b460f3 data/create/recipes/cut_limestone_stairs.json +94ca5d0fb91c2a326fb6e80c4d179edf9799c31e data/create/recipes/cut_limestone_slab_recycling.json +06f1f43105655b1c5e31762c38403acd07ff4051 data/create/recipes/cut_limestone_stairs.json ba301da212ee14ff42c38487d0906a2da203e3c3 data/create/recipes/cut_limestone_stairs_from_stone_types_limestone_stonecutting.json -086436217d10e6eb45f480fb5ec1a3a7f54d2c5c data/create/recipes/cut_limestone_wall.json +d2aac4ac16f9c842af1efd3896dd3250f6d8424e data/create/recipes/cut_limestone_wall.json b14e6972f8586e569a7ab4ecf6ed5d6db1a2bded data/create/recipes/cut_limestone_wall_from_stone_types_limestone_stonecutting.json a1a2b95283d88e1d990e00da9a095fe928b2aa2f data/create/recipes/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json -6d21c14e64228ce9bfaf6641d05ae64c16041fd8 data/create/recipes/cut_ochrum_brick_slab.json +d5a4fa7787d2e56e0b5c8d533567543b93cf694b data/create/recipes/cut_ochrum_brick_slab.json 58514a5f216706e9bb62b27ad03701fe02bac013 data/create/recipes/cut_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json -406a3935684cc65646e10fcbb3baf6613c7b9520 data/create/recipes/cut_ochrum_brick_slab_recycling.json -3b2b0ac7407d535c1aa8b5bdb2d6bb4fe618f439 data/create/recipes/cut_ochrum_brick_stairs.json +6cc3167ebf075d7b302a359d1afdddf5753d0e26 data/create/recipes/cut_ochrum_brick_slab_recycling.json +3d7ec51a44f6dd11302957e0dd3406d4201874e4 data/create/recipes/cut_ochrum_brick_stairs.json ec6339d6658b0d32e46c8a4a4e06d94a388a6332 data/create/recipes/cut_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json -23ca4d3c300f129c7d1f59573e6d44d6622e9663 data/create/recipes/cut_ochrum_brick_wall.json +c4139ae7a9742f7111d308fe66bf1d627533550b data/create/recipes/cut_ochrum_brick_wall.json 1b8a4c81680df542a5e6b9e665c96649cf3eb7fa data/create/recipes/cut_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json 2b967f3424196b5da9b396ea58fb969d406af789 data/create/recipes/cut_ochrum_from_stone_types_ochrum_stonecutting.json -588e5a2d50e36622691f83d2cb12b5f5566315fb data/create/recipes/cut_ochrum_slab.json +5baa701f3cbe8d69e2e6a5554622dd78ef3ac451 data/create/recipes/cut_ochrum_slab.json 9a26cba276cf135a10c71d31f5b960b2ee6ac444 data/create/recipes/cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json -902661581aaa4133c431297acd2972ef725faff0 data/create/recipes/cut_ochrum_slab_recycling.json -f048fd140559f17ad0db4ae3d788750137b788b0 data/create/recipes/cut_ochrum_stairs.json +4054864033e52ec77e576fb0df7b872083df583e data/create/recipes/cut_ochrum_slab_recycling.json +10831295985d4d4266fc3c2f0ffbe770c67fdc9c data/create/recipes/cut_ochrum_stairs.json 75a232ccede0ffa7feb3e69da17c6a514a908907 data/create/recipes/cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json -4d856f6a615e67c5eda02fb7a5d93195eea9d9f9 data/create/recipes/cut_ochrum_wall.json +d9c05b7e4ce4ee86d0f6a9e1ee6c1b585ffee58b data/create/recipes/cut_ochrum_wall.json ee0dff8e1317aeffd061688879b97e81a00b7adb data/create/recipes/cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json 087eefb8ffd61fd88f1db6ca25f9ac31e93f2fdf data/create/recipes/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json -a6421d75c5dc8e3e068ae80fef1ab7fb8661fcfc data/create/recipes/cut_scorchia_brick_slab.json +72ac9293e5791df07914e2d3ed00e5ff59d64b08 data/create/recipes/cut_scorchia_brick_slab.json 2f38c410d5eb93bdb8c8be0f68ac89726e3c765c data/create/recipes/cut_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json -c66e8713b6cdc5698b253db427509aa8c2d14cb7 data/create/recipes/cut_scorchia_brick_slab_recycling.json -16a058d4cb3253c85d9799cce4fe820e56ec4541 data/create/recipes/cut_scorchia_brick_stairs.json +e296e6af6865bf6e4618dab8a96bb88f6999a9a5 data/create/recipes/cut_scorchia_brick_slab_recycling.json +bd5984a6b96443319b7fad32db771d8ded0b0591 data/create/recipes/cut_scorchia_brick_stairs.json bd5c803c855222a29998dd784e6d12a18dd612d9 data/create/recipes/cut_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json -a2a29598750927ac11bfdb650a7a2630afc506b4 data/create/recipes/cut_scorchia_brick_wall.json +adfe0b08b5b72e579d47f36a4f835045e433e7f7 data/create/recipes/cut_scorchia_brick_wall.json 37fc5ae45d0260de9a5c45b0a1b208e4d146a562 data/create/recipes/cut_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json f6dfd648418f24da093b80978c2f6e070f33ff6d data/create/recipes/cut_scorchia_from_stone_types_scorchia_stonecutting.json -61f5bd9b0c7515ee5a4bf3c448bbe4c4fc93fdd7 data/create/recipes/cut_scorchia_slab.json +7df99605c0c8761aeb9301d5391e1f16d41f89b3 data/create/recipes/cut_scorchia_slab.json fbd9a92d3c3d9e823cac51347320219f1734ec04 data/create/recipes/cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json -09e05c325c7f6f3927321fb4f570cf766e1db8b9 data/create/recipes/cut_scorchia_slab_recycling.json -1ae5bd2fb397206b8d6eb880660627d9491de9f2 data/create/recipes/cut_scorchia_stairs.json +cbb07a542a5f019019f61386c20976cb76ec316f data/create/recipes/cut_scorchia_slab_recycling.json +ad54182c3142ac9d9dd9bb4c5acc18f82e3fc5e5 data/create/recipes/cut_scorchia_stairs.json 1ddfefce136201ae78dbc53ba472080332fd6366 data/create/recipes/cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json -6cc7a1037de11acc47c98f9f32a6fec24be696d4 data/create/recipes/cut_scorchia_wall.json +0a011b7cee33200fec5546168734c330952124da data/create/recipes/cut_scorchia_wall.json c594d886a303ad6e24d1283004442835ee861fbc data/create/recipes/cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json 8650c0db70a3521b50404252106e0185b4f25a45 data/create/recipes/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json -b7f0188340988e96aa9e05ca93f760019e01a9b9 data/create/recipes/cut_scoria_brick_slab.json +8baf09b5ff2004d71091b6f95307aa179a21f4df data/create/recipes/cut_scoria_brick_slab.json e7080ca9b6a507bec4a4a3dd52a28c1c33975628 data/create/recipes/cut_scoria_brick_slab_from_stone_types_scoria_stonecutting.json -7908ade36d0bc3b070db1219b66ef97e43c15c9d data/create/recipes/cut_scoria_brick_slab_recycling.json -0b7a575941589530cfeb9244d35c2cbfd9a98171 data/create/recipes/cut_scoria_brick_stairs.json +f5b56f6eb9c1ac0f8168b2b0f0b0ab00655ebfdb data/create/recipes/cut_scoria_brick_slab_recycling.json +7aff3ffd3ceb9159fe4fb8d8ebfe89306ccf7015 data/create/recipes/cut_scoria_brick_stairs.json 3fd560355163f0afafefe886e75fd8b2c3cf2b6f data/create/recipes/cut_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json -9c53ef1babedc73b86077b13aa0ec885c5d42a4a data/create/recipes/cut_scoria_brick_wall.json +ed803a4cdcf1dd01af03fff52e783f3539f78546 data/create/recipes/cut_scoria_brick_wall.json 553642a4e0dc5f934da8127a427ccdf53d3f51f9 data/create/recipes/cut_scoria_brick_wall_from_stone_types_scoria_stonecutting.json 5702063be3d38fa6b3ae5c998337676a0cf91149 data/create/recipes/cut_scoria_from_stone_types_scoria_stonecutting.json -195939d38e21c74484655507ec2d273280f9c38f data/create/recipes/cut_scoria_slab.json +295356022aee8a33272b430879615af638fc5a2c data/create/recipes/cut_scoria_slab.json 1656e822e823fcdf04120b55235aa477845a69a6 data/create/recipes/cut_scoria_slab_from_stone_types_scoria_stonecutting.json -47368baea132b2752ab85941e8b2548013cfd796 data/create/recipes/cut_scoria_slab_recycling.json -b98f2dc04055e868493528350992bebd2b2e9fba data/create/recipes/cut_scoria_stairs.json +d0c88c037004911e377d88cf5a28ff85a413d07e data/create/recipes/cut_scoria_slab_recycling.json +13ccd4cda7bcfcd357216eeaef0dfbedf651c466 data/create/recipes/cut_scoria_stairs.json 8748df6152c923930452397367562bb6007058cf data/create/recipes/cut_scoria_stairs_from_stone_types_scoria_stonecutting.json -d9e391ec481d7bf5291f9407cbf24945e6f53ccc data/create/recipes/cut_scoria_wall.json +7f9bd9de7bfba21eef449f8e11ffc8cf37de6b88 data/create/recipes/cut_scoria_wall.json 42235c6ded520ecda3321e8cd8910dcfa05cd61e data/create/recipes/cut_scoria_wall_from_stone_types_scoria_stonecutting.json c02b4daf0050d705c145c0698aaa3094724ba2f1 data/create/recipes/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json -f69eddc6d336f5d5b071246f840199e7e5e51d82 data/create/recipes/cut_tuff_brick_slab.json +214b6219b86d94ea5705e40f254a4d9a9ac894b7 data/create/recipes/cut_tuff_brick_slab.json 9e0182206fab754daa0596259be0b98a712ba859 data/create/recipes/cut_tuff_brick_slab_from_stone_types_tuff_stonecutting.json -f968158591e2d5000153b8f3908e69f152445842 data/create/recipes/cut_tuff_brick_slab_recycling.json -14d9b11573292281ef609e22972cb443da69de46 data/create/recipes/cut_tuff_brick_stairs.json +86938ed4ef969e85163c25e2a60181433247b73b data/create/recipes/cut_tuff_brick_slab_recycling.json +b4212528d6c8893c1d57c0a5ada60673105e399d data/create/recipes/cut_tuff_brick_stairs.json 90f3241a3eb47d9b0902b639fadee76e41b92a72 data/create/recipes/cut_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json -b1250275b2b4a53048922f4d7df605395420d2c8 data/create/recipes/cut_tuff_brick_wall.json +b920d14ac41465f70b1fb8211c1c06d6c41ccadb data/create/recipes/cut_tuff_brick_wall.json aa41f89028dfa995dc11b881894e5a5993e4c4f9 data/create/recipes/cut_tuff_brick_wall_from_stone_types_tuff_stonecutting.json 41dc800ae0a8918f4602d610ff0ba9714cdfe8dc data/create/recipes/cut_tuff_from_stone_types_tuff_stonecutting.json -f14b83af61a6709b3b330ae16693d0691726b139 data/create/recipes/cut_tuff_slab.json +573fff8b4fba92289dc6b113b58c8de25427f62d data/create/recipes/cut_tuff_slab.json 94667fb1e6203bd66bef10acfee7cd990009d26f data/create/recipes/cut_tuff_slab_from_stone_types_tuff_stonecutting.json -4597ffc2598bf3553459990dceb04c4d35a13554 data/create/recipes/cut_tuff_slab_recycling.json -f48c593c36fec5ef355a66a2b952357d1cf02575 data/create/recipes/cut_tuff_stairs.json +1ae833e28f83c5f22f5bb9ece544734a0b2e321f data/create/recipes/cut_tuff_slab_recycling.json +89c507c43aafe7d9e3fcbe22cc6e33c391ad8c76 data/create/recipes/cut_tuff_stairs.json 3b3ba319bd67a4e7f555cfcb54f9dc1fc22cf015 data/create/recipes/cut_tuff_stairs_from_stone_types_tuff_stonecutting.json -d9eb167cd7a158b30b9f3b8f896dc3fbc34aa9d6 data/create/recipes/cut_tuff_wall.json +0c241d763e87b23b8799528e132e0d12b0e16141 data/create/recipes/cut_tuff_wall.json 5705b0312c5c70d48662c2ff375f0b2cfe3b4902 data/create/recipes/cut_tuff_wall_from_stone_types_tuff_stonecutting.json 8ab3c640b57421a8c0341ab4ec5bade31376d059 data/create/recipes/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json -d26f8e96eec28b7e136e55eac942aec865742a31 data/create/recipes/cut_veridium_brick_slab.json +822f97726c72d31c4c614767c08140b3535e0640 data/create/recipes/cut_veridium_brick_slab.json 1705fd5fc9ecc9a650812c89f500b5ef9aec2626 data/create/recipes/cut_veridium_brick_slab_from_stone_types_veridium_stonecutting.json -d9c640858594099d7c76478986a388e30cc0cd8b data/create/recipes/cut_veridium_brick_slab_recycling.json -5a0d455285f2c9f8bf5ecf3cf3cfa459db0ea92f data/create/recipes/cut_veridium_brick_stairs.json +238aeedf55624671809a37246581d28fe6b2c19e data/create/recipes/cut_veridium_brick_slab_recycling.json +dfbef691643cead7111b3b1c51aabcda8419bc19 data/create/recipes/cut_veridium_brick_stairs.json db2ea87f3ec8924ba9e0b87cd6a6edeb93c0c2d8 data/create/recipes/cut_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json -58ed115bb25f2de9f0813208ec86985262d5c170 data/create/recipes/cut_veridium_brick_wall.json +5e5c9fab7ba7143d206df7d8184742fb1a17c99c data/create/recipes/cut_veridium_brick_wall.json ed752a7f698e3ecbb5e4f848a78f8b3c7c6bf12e data/create/recipes/cut_veridium_brick_wall_from_stone_types_veridium_stonecutting.json e0355543105e4ec9d672d2a050e70b5c198ea472 data/create/recipes/cut_veridium_from_stone_types_veridium_stonecutting.json -01da52704b0aa35c71008f562302995a194949a3 data/create/recipes/cut_veridium_slab.json +fb3c671f64676538ea3aa96be483ac15b3cdeb3d data/create/recipes/cut_veridium_slab.json 7d7c80ac03ad8623f9a5d7f0ff0bb6f68985efa5 data/create/recipes/cut_veridium_slab_from_stone_types_veridium_stonecutting.json -dfb490ea80a5e4fabe04e1291e4aef950e09234f data/create/recipes/cut_veridium_slab_recycling.json -6a166d7c22e40c128c7093edc739f7860d07db1c data/create/recipes/cut_veridium_stairs.json +366bf29474eee2a9e5f36d6dc1243f847555b838 data/create/recipes/cut_veridium_slab_recycling.json +2e17b060bcdd206cf7a3fa2466e4b41f0c403089 data/create/recipes/cut_veridium_stairs.json 9b0e33c891f7b8cdfbf5afb2842f46622d3a60f5 data/create/recipes/cut_veridium_stairs_from_stone_types_veridium_stonecutting.json -3e3804ceb890eeb622a311f39fd76cad8d41e943 data/create/recipes/cut_veridium_wall.json +65f1e06896b26eb9a473fe0e052558148bc97e39 data/create/recipes/cut_veridium_wall.json 17bb07daada50992c21df4bb32a5bf4a548aeca7 data/create/recipes/cut_veridium_wall_from_stone_types_veridium_stonecutting.json -a41e048c51fbfbef0877651caa3972b9c7100c49 data/create/recipes/dark_oak_window.json -47d992be278e9c33752d724620054f40b616ee45 data/create/recipes/dark_oak_window_pane.json +caed7e44f8cbe43b5d47c1718decc2f9c45baa8c data/create/recipes/dark_oak_window.json +be1a52fc4d9da8cc7b0dfb5de0db62e752d44ac7 data/create/recipes/dark_oak_window_pane.json 7d9034d09815513520d7ec6213d98bbc4c0f3a04 data/create/recipes/deepslate_from_stone_types_deepslate_stonecutting.json 0fc27886b3806a1be2eb3206427f6b06c78dd383 data/create/recipes/deepslate_pillar_from_stone_types_deepslate_stonecutting.json 972681c4ca6a31eb017d51c2d951b99b3518cb73 data/create/recipes/diorite_from_stone_types_diorite_stonecutting.json c57911a258f3371c717d2a497c57b9b57639a91b data/create/recipes/diorite_pillar_from_stone_types_diorite_stonecutting.json da0a33cc14beb68107b67e6cdd3bb775f761a533 data/create/recipes/dripstone_block_from_stone_types_dripstone_stonecutting.json 48e26ac18bc3d0e965e66b68a91186a0d73dc3b3 data/create/recipes/dripstone_pillar_from_stone_types_dripstone_stonecutting.json -c568c40be33ee991b12ff14997547edd3a92685b data/create/recipes/exposed_copper_shingle_slab.json +28e9959e41abd879f929febc72510a92000d54d6 data/create/recipes/exposed_copper_shingle_slab.json c4da022fcd01aa4bc094e2032d1d55a36fd66d9a data/create/recipes/exposed_copper_shingle_slab_from_exposed_copper_shingles_stonecutting.json -92cd7231f743bf0416813cad3dcb2d66acaad5c4 data/create/recipes/exposed_copper_shingle_stairs.json +c5ade5d77debc73a7b0b85554cd3e949cbb58a72 data/create/recipes/exposed_copper_shingle_stairs.json d1924ca908bcf7c6aabfc1414dbbbb8daee925b7 data/create/recipes/exposed_copper_shingle_stairs_from_exposed_copper_shingles_stonecutting.json -390d2f7d01df433214a23f2284d822c5dd0f0452 data/create/recipes/exposed_copper_tile_slab.json +c3ea59ae3a4dbb6a8d261d68fa06a17281fc9077 data/create/recipes/exposed_copper_tile_slab.json fe4c573326d76db2064244c7252ac83b9106d5a9 data/create/recipes/exposed_copper_tile_slab_from_exposed_copper_tiles_stonecutting.json -0bf58b77d0426113bdecfdd96f6715dfd0fa2b70 data/create/recipes/exposed_copper_tile_stairs.json +44b6bceab026f44d5164c89e8b673f552734031e data/create/recipes/exposed_copper_tile_stairs.json ed6a7c88aaeba36b77315b6c35c898ea70eb6852 data/create/recipes/exposed_copper_tile_stairs_from_exposed_copper_tiles_stonecutting.json 33eb062b453631b8341111bffc4b0b14ea74061e data/create/recipes/framed_glass_from_glass_colorless_stonecutting.json -802a64a3346ba6af2519c8489eb7592c0c389522 data/create/recipes/framed_glass_pane.json +0bf76aa0c0dd584c9d86fde721adc83a1c584f98 data/create/recipes/framed_glass_pane.json c1ac5bad113e067bf5cfa8d730dcc835420aecfb data/create/recipes/granite_from_stone_types_granite_stonecutting.json 1a84a0816303c0cab0cc3c894aaea74d797ae3d3 data/create/recipes/granite_pillar_from_stone_types_granite_stonecutting.json 8d6448c67261138b6331273024b757a9a58b41c4 data/create/recipes/horizontal_framed_glass_from_glass_colorless_stonecutting.json -2c3122aa7545ea633b11fdaff291a020c1600716 data/create/recipes/horizontal_framed_glass_pane.json +dde9d763cc1306d48e2f3b813530fca0842a5c14 data/create/recipes/horizontal_framed_glass_pane.json 61f759fec228090a60371add88cc90be3a84a735 data/create/recipes/industrial_iron_block_from_ingots_iron_stonecutting.json -f9e36c46cc3b59cbe4e78214d9b1d2ba7c0631d9 data/create/recipes/jungle_window.json -d9c2b163130c79ec972d46fa88156cbc558f5bb3 data/create/recipes/jungle_window_pane.json +2b4a8702db989116dbf97d0021d71a5948336805 data/create/recipes/jungle_window.json +4400d3db46b091d3ead7fbcb64cb712db2fde5de data/create/recipes/jungle_window_pane.json 66da7fc9adbe0119bc41bfad0f6422fb93dcf3b6 data/create/recipes/layered_andesite_from_stone_types_andesite_stonecutting.json 7e665da668493db4528f161811ac25d156490701 data/create/recipes/layered_asurine_from_stone_types_asurine_stonecutting.json 4d4d3f1881840fc9998d82f5f761940b3c141328 data/create/recipes/layered_calcite_from_stone_types_calcite_stonecutting.json @@ -3899,133 +3899,133 @@ efcbb602a5274a037af323bf5ef40756cbb8683c data/create/recipes/layered_tuff_from_s 6861c7c7d75d669a948a3dc617137759fb387d49 data/create/recipes/layered_veridium_from_stone_types_veridium_stonecutting.json 9882a276da633a82f42cbd809c0a104d2137f7ca data/create/recipes/limestone_from_stone_types_limestone_stonecutting.json 923e6a5bec0018849c1bf9e5714195ab7f839f44 data/create/recipes/limestone_pillar_from_stone_types_limestone_stonecutting.json -7bc8b7787f0e60e521c68953607b8851a53294f4 data/create/recipes/mangrove_window.json -2ea63a3c31aa3b4e2ea2620e24a23ee9c3044421 data/create/recipes/mangrove_window_pane.json -106f5e57b11aeb799eef2d485c047701e23adad6 data/create/recipes/oak_window.json -050fab7045837fef1a2c7c2471058b641f0c99fc data/create/recipes/oak_window_pane.json +0c52f833672014dde72f91cc516d7eaac2225dac data/create/recipes/mangrove_window.json +5bc2174ce0d19e5637206f4c350dbe4309bac0eb data/create/recipes/mangrove_window_pane.json +03707bea1528e8d3f6a4480af6c8785aba0818e8 data/create/recipes/oak_window.json +cd98d5d6b0ff6b56e8948a862070199c14f2ec10 data/create/recipes/oak_window_pane.json 9e1eaa83597afe00485940018be874885f02b1f7 data/create/recipes/ochrum_from_stone_types_ochrum_stonecutting.json 308dbf17a3a418849d9db74e7f88af442f50025a data/create/recipes/ochrum_pillar_from_stone_types_ochrum_stonecutting.json -cfbaf2850eacfa9f53eceb5a891733b1aa474e3c data/create/recipes/ornate_iron_window.json -cce6bd865c37b8a8d7b419622c9f57c0d53622b0 data/create/recipes/ornate_iron_window_pane.json -9aba7ccc4ca8bddb3637122bf714ad6cf493dbc9 data/create/recipes/oxidized_copper_shingle_slab.json +4faec6e4889dac615eeda631ea346c5fe745ee86 data/create/recipes/ornate_iron_window.json +f5e5a1c293b16690ab3e5c3941e24a99181133e5 data/create/recipes/ornate_iron_window_pane.json +f07589f1079d13e0b93ce11a2d6e953e0842c5d0 data/create/recipes/oxidized_copper_shingle_slab.json 63e59a3229e92f9cd62a8e2821a5d64056ecfe7d data/create/recipes/oxidized_copper_shingle_slab_from_oxidized_copper_shingles_stonecutting.json -58587eb3b83086c8e2b607790572d84543a68d9c data/create/recipes/oxidized_copper_shingle_stairs.json +78dae312492b578457c5e4174f979c81ec8ddb46 data/create/recipes/oxidized_copper_shingle_stairs.json 282a67a4f47e80e24c642358d97f18343ab03728 data/create/recipes/oxidized_copper_shingle_stairs_from_oxidized_copper_shingles_stonecutting.json -3bdd9b2a6b099e6d1d39b0c1f6b0f07d891a4c1a data/create/recipes/oxidized_copper_tile_slab.json +48e9b6801417903c06c1c58f324333b1fee9c58c data/create/recipes/oxidized_copper_tile_slab.json 9875c927cc1807066bf58f44a08688127411654d data/create/recipes/oxidized_copper_tile_slab_from_oxidized_copper_tiles_stonecutting.json -43a3d9a61c595f36f11df72fede7215ff2884531 data/create/recipes/oxidized_copper_tile_stairs.json +8b84a5ec391a345f8378396d45ca47ce7a563b3d data/create/recipes/oxidized_copper_tile_stairs.json cda1bd8a1a97938a7b11666eeaec5e293f52bc85 data/create/recipes/oxidized_copper_tile_stairs_from_oxidized_copper_tiles_stonecutting.json 892f4a5355cbd29c89bc5a5d422c277385e6b145 data/create/recipes/polished_cut_andesite_from_stone_types_andesite_stonecutting.json -68e85bd22bfb7eb04df29933b70153b77be8f741 data/create/recipes/polished_cut_andesite_slab.json +b8be380ac74516c95a35b318971aabc5e1a1a023 data/create/recipes/polished_cut_andesite_slab.json 3f537f7b1feedcd199024661f492ee02d98565d3 data/create/recipes/polished_cut_andesite_slab_from_stone_types_andesite_stonecutting.json -26bfb4788b934cc07041ab8a79268cfde24220a1 data/create/recipes/polished_cut_andesite_slab_recycling.json -a96379d35b498fbab1bb5e5946ec261e7b19ba6a data/create/recipes/polished_cut_andesite_stairs.json +d262cc607729ec96b9b0e552ad9c7284f2dafc19 data/create/recipes/polished_cut_andesite_slab_recycling.json +d3c7ecbc8cced421a68c10d6fe281a1edd1e08dc data/create/recipes/polished_cut_andesite_stairs.json 0b33435c1f9a84c3301a6944389b39c1740d3483 data/create/recipes/polished_cut_andesite_stairs_from_stone_types_andesite_stonecutting.json -ef70a747c2510d78baae38df69025936d66fe10e data/create/recipes/polished_cut_andesite_wall.json +7f300b09286e155fd7f8b74680189af590b7fc8d data/create/recipes/polished_cut_andesite_wall.json c10f8b3e761aad30077da2dae67b76a0ecc6642e data/create/recipes/polished_cut_andesite_wall_from_stone_types_andesite_stonecutting.json 23f0bd64850ac80495b71dce10b3a46ec54d63af data/create/recipes/polished_cut_asurine_from_stone_types_asurine_stonecutting.json -aeae1b938d8d8a1e3b2290f56ab7bdeb0f54063c data/create/recipes/polished_cut_asurine_slab.json +283000cd3dff623d47cca032f14d18457301c6e5 data/create/recipes/polished_cut_asurine_slab.json 15a34f66b742c6e7a777077447eb42592619f877 data/create/recipes/polished_cut_asurine_slab_from_stone_types_asurine_stonecutting.json -97f07f3d878b7c3873d95bf2543b1583cfbc5f8e data/create/recipes/polished_cut_asurine_slab_recycling.json -5a1bf24fc17e674c152981c83840c6b383c4803b data/create/recipes/polished_cut_asurine_stairs.json +cb8af35a5f90908217725b0723acbc5e7accc028 data/create/recipes/polished_cut_asurine_slab_recycling.json +28fd071ecd066c34828e46a5221a6ad53b646850 data/create/recipes/polished_cut_asurine_stairs.json c3bab7748fa69d3d9f65231d0bbbbab14a931669 data/create/recipes/polished_cut_asurine_stairs_from_stone_types_asurine_stonecutting.json -e2ca629572207dc6a937cfc90e21cfb1ba2ece0f data/create/recipes/polished_cut_asurine_wall.json +0d5d091ec7bf8c1fdad15c59fd74185424634081 data/create/recipes/polished_cut_asurine_wall.json 2f4c9bca714918532fb553e1292e527f36797b37 data/create/recipes/polished_cut_asurine_wall_from_stone_types_asurine_stonecutting.json aff85dd6940bc48c8912aeed6f5ab695d2cb5aad data/create/recipes/polished_cut_calcite_from_stone_types_calcite_stonecutting.json -6cd4b6f33bd5c061137bf6ac60c853b9e61ca6e9 data/create/recipes/polished_cut_calcite_slab.json +8233c1ff2cf15fbc33b44fa04bb846bb03388f36 data/create/recipes/polished_cut_calcite_slab.json de13feff1e46ab98ff014cf1ab0206ce4a9ee6d5 data/create/recipes/polished_cut_calcite_slab_from_stone_types_calcite_stonecutting.json -868157531bab2133cc626389155c04cb6cd61806 data/create/recipes/polished_cut_calcite_slab_recycling.json -d6297d04724b4bc0fd0429c5aaa5ed98b0d82983 data/create/recipes/polished_cut_calcite_stairs.json +c6b132f3f597943c8a3b6447c85e0c695583d9d8 data/create/recipes/polished_cut_calcite_slab_recycling.json +7c934edb3928247070b6cd473734c481388b4901 data/create/recipes/polished_cut_calcite_stairs.json b2e00eefb60bdd0516e799861172232e7188704a data/create/recipes/polished_cut_calcite_stairs_from_stone_types_calcite_stonecutting.json -2d078eda7f5537693a2f3b038ad99b34e50e43ca data/create/recipes/polished_cut_calcite_wall.json +cc9990f2a6284fcda8c62fa82d796bf4abdfb156 data/create/recipes/polished_cut_calcite_wall.json 53f1a4191f28d24dc89f0865f1fcc86c24a3bec1 data/create/recipes/polished_cut_calcite_wall_from_stone_types_calcite_stonecutting.json 46f1a15740c26b3e9958c754ef7107e74776dce3 data/create/recipes/polished_cut_crimsite_from_stone_types_crimsite_stonecutting.json -e8fcd98ae261c10ec71967de9f1519045dbfef01 data/create/recipes/polished_cut_crimsite_slab.json +ceff5a45289b26c5e6c98e748983f5e3e0c36978 data/create/recipes/polished_cut_crimsite_slab.json 801325afb9cbe6f94f98563add4dfc19fc06d0fc data/create/recipes/polished_cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json -6f0553407a810777ab199f0c94c2cc46746cebdc data/create/recipes/polished_cut_crimsite_slab_recycling.json -ee9a99e0037ae1a44950dbd81eeba46c62218db7 data/create/recipes/polished_cut_crimsite_stairs.json +a223b085fb9561f8e7bab8af06cc44948fd1d3a6 data/create/recipes/polished_cut_crimsite_slab_recycling.json +afa5a5597e696825c4bf1099f1365f2b231007fc data/create/recipes/polished_cut_crimsite_stairs.json 8b584a5bcad5c4eba4721eae61d118bb6707d3df data/create/recipes/polished_cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json -9201bff759a3047ab214150acbfdfed5837bf986 data/create/recipes/polished_cut_crimsite_wall.json +c69c76f029aab192c24a45d3b2bb79506d122de3 data/create/recipes/polished_cut_crimsite_wall.json c8b0b21d4377a40dcb259952d564b566fda64a8f data/create/recipes/polished_cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json a68bbadd60b37fa9037c554f7335850a5ee04fd3 data/create/recipes/polished_cut_deepslate_from_stone_types_deepslate_stonecutting.json -f64ad55721652b5a0b9b37bc9f951c29f00d87ba data/create/recipes/polished_cut_deepslate_slab.json +8f2cbdabf2b392cff2ed65405fc5b87f10fbd26a data/create/recipes/polished_cut_deepslate_slab.json 9d899540998649d627ef9b0446134f8d94a567a6 data/create/recipes/polished_cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json -4bb649a5f2d57381b66c177bd992e04bc4f2bce2 data/create/recipes/polished_cut_deepslate_slab_recycling.json -34cc3c7e7f074c81b6249340745cba2f9594f00b data/create/recipes/polished_cut_deepslate_stairs.json +37e3023bb60970ac1e11371441262a706abde805 data/create/recipes/polished_cut_deepslate_slab_recycling.json +5d42556877d73b2479c68ba481173d9c0c235a46 data/create/recipes/polished_cut_deepslate_stairs.json 95ef22cf96e167e8cba9bc72e23bb03a3144f497 data/create/recipes/polished_cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json -4a7a1c23c0999d9f6e1d21625f4b22ad837af297 data/create/recipes/polished_cut_deepslate_wall.json +b001b96577a7bb74fae14218462f344c05593f1b data/create/recipes/polished_cut_deepslate_wall.json d4461e8aa51227196b34fdced1ab8947e29a6027 data/create/recipes/polished_cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json 3869640b431a841e4363f8fbb63e9468224e2bf8 data/create/recipes/polished_cut_diorite_from_stone_types_diorite_stonecutting.json -22bff3c93362ae4efa302eaed50d68f2ff901623 data/create/recipes/polished_cut_diorite_slab.json +db1a79834ce3f5fcdbaf9650ab3d9d547cd5ae1e data/create/recipes/polished_cut_diorite_slab.json 4a69608cbcd70e33602c44d37a5db7811fe5b04c data/create/recipes/polished_cut_diorite_slab_from_stone_types_diorite_stonecutting.json -be3b39879aea59b78aa5339ab2666f18ae965ec1 data/create/recipes/polished_cut_diorite_slab_recycling.json -e373787191812e445b2fb35ed8231cfc510728f7 data/create/recipes/polished_cut_diorite_stairs.json +9d7f5d88e34db4add798960911ed93d855e49182 data/create/recipes/polished_cut_diorite_slab_recycling.json +b27efd87327328b35e3c1d71e43328f654f82933 data/create/recipes/polished_cut_diorite_stairs.json 6ae315321aea719479cdf081f1ab649f5833bdfa data/create/recipes/polished_cut_diorite_stairs_from_stone_types_diorite_stonecutting.json -930c7b2b2d790e11c447c4b4c6c50ab0eff31104 data/create/recipes/polished_cut_diorite_wall.json +e41efbac5dd8b2bf754e058c08bb6138a7563ec5 data/create/recipes/polished_cut_diorite_wall.json 0594aec0451471a90eee3f81b2a642160f829283 data/create/recipes/polished_cut_diorite_wall_from_stone_types_diorite_stonecutting.json c0542972572ee3645374c4495c536b4962071906 data/create/recipes/polished_cut_dripstone_from_stone_types_dripstone_stonecutting.json -cfddd83b2782ecb013089820f9a255c849e3b554 data/create/recipes/polished_cut_dripstone_slab.json +ba2e8947d591c23e71a0e37c948bb4d2b54b608b data/create/recipes/polished_cut_dripstone_slab.json b3aba4c82062407557d4724d8eae5192f093b132 data/create/recipes/polished_cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json -5c688baa3a2e6fed0a9f7af8af4a1b8dd00d2872 data/create/recipes/polished_cut_dripstone_slab_recycling.json -7605a131a0e7ae95371a3183e683f54ac260e031 data/create/recipes/polished_cut_dripstone_stairs.json +64d352a230c264cffc55b990100e78bcd32781fc data/create/recipes/polished_cut_dripstone_slab_recycling.json +d4a56221ddacafa7da03d6f59be63f5279a1e7de data/create/recipes/polished_cut_dripstone_stairs.json 039850e397a69f65f406269b4cb131fbfee83978 data/create/recipes/polished_cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json -ef0beebd452f6931b7efd3741dc3949001484c14 data/create/recipes/polished_cut_dripstone_wall.json +3fd92f3349acc144dee36bcf11001ef562a02be4 data/create/recipes/polished_cut_dripstone_wall.json 94847065f17859cabaa1ada493df76dd0e1ee88b data/create/recipes/polished_cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json c9858f9023307c5b8a2659f988ec010e1fb579b3 data/create/recipes/polished_cut_granite_from_stone_types_granite_stonecutting.json -9ff40b622503a91e08aa625125cdf49e4d93e84d data/create/recipes/polished_cut_granite_slab.json +ebb113db43777866306956b11239d1b6c21a69b1 data/create/recipes/polished_cut_granite_slab.json a4ddbd03e796d488e40c397f12ba923c4877b9dd data/create/recipes/polished_cut_granite_slab_from_stone_types_granite_stonecutting.json -7eef40d518da5815c1490ae05e933bb1ff38f133 data/create/recipes/polished_cut_granite_slab_recycling.json -88a1366506bfaa51e334dcb9cdc1284e7458232f data/create/recipes/polished_cut_granite_stairs.json +bb7810e26763b23ebac7327bab5b85f781473c9a data/create/recipes/polished_cut_granite_slab_recycling.json +ec96d4d8c480ea6cd8a820af93d731c4834d492d data/create/recipes/polished_cut_granite_stairs.json 96046c1afebd55964f2c595021d06f91eda3c624 data/create/recipes/polished_cut_granite_stairs_from_stone_types_granite_stonecutting.json -b2125e36c7795fdc233362c769ea393ef6bc56de data/create/recipes/polished_cut_granite_wall.json +6c429710e02d366e519cb9657923ea359e6f9c5a data/create/recipes/polished_cut_granite_wall.json 2933927280ceeed29442665f47b5280baf2db2cf data/create/recipes/polished_cut_granite_wall_from_stone_types_granite_stonecutting.json 9d08c4c106ec36115b256b0319eeec7c0042b875 data/create/recipes/polished_cut_limestone_from_stone_types_limestone_stonecutting.json -0989050fd69b8c165794b7274153b1a83c636286 data/create/recipes/polished_cut_limestone_slab.json +e7162cf13bcfae1749095cce60485797c987e909 data/create/recipes/polished_cut_limestone_slab.json bfeded973be92ef8741401c01342564b7620caec data/create/recipes/polished_cut_limestone_slab_from_stone_types_limestone_stonecutting.json -e7d32feb1e4027185c60f3f19a448a4161ebecce data/create/recipes/polished_cut_limestone_slab_recycling.json -08b51ea46f118d9687df0879630b17cfacd593c5 data/create/recipes/polished_cut_limestone_stairs.json +54c81c7444a93491820ff7b71d95dae121be6ca1 data/create/recipes/polished_cut_limestone_slab_recycling.json +5f038824dbaecea80410a4a2885eb792fb0619de data/create/recipes/polished_cut_limestone_stairs.json dd9383d5b0b6b4fd38bf3025dc443ead77dfd7a0 data/create/recipes/polished_cut_limestone_stairs_from_stone_types_limestone_stonecutting.json -5b2f1358bb5b6428800493d03dfd2e1f83e047d1 data/create/recipes/polished_cut_limestone_wall.json +e74d2cb9d988a77f5621afa564428c498e2aefee data/create/recipes/polished_cut_limestone_wall.json 8676eab4596f7abb4b45b1f17d2b0f317fc4a2a3 data/create/recipes/polished_cut_limestone_wall_from_stone_types_limestone_stonecutting.json da78ba83f0578905cbdbb7f7aed8438f5ba0b6cd data/create/recipes/polished_cut_ochrum_from_stone_types_ochrum_stonecutting.json -41b93d98a16594ab8367c28b41f7e7a3ab0fae87 data/create/recipes/polished_cut_ochrum_slab.json +b7719b578bf50fee5f65ddfcf58d9943c5854634 data/create/recipes/polished_cut_ochrum_slab.json ba8497aef79a97aa7dcb795f132bc2b1bb40026a data/create/recipes/polished_cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json -b3296fbc32bc095e873bd9ec674f6f6d0a4ec86f data/create/recipes/polished_cut_ochrum_slab_recycling.json -f7d4ba0b00883ba9b9f60a8eb883fb3827548f2b data/create/recipes/polished_cut_ochrum_stairs.json +20761c91ab105a3a9bee6b8986e9ebe480a7dc29 data/create/recipes/polished_cut_ochrum_slab_recycling.json +01d9932508468f36880ab4770bd0b3c4658c99ce data/create/recipes/polished_cut_ochrum_stairs.json f0b09407460d27db3367d46e734933d5436711c0 data/create/recipes/polished_cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json -b58469ed02f07ec15a32aee9f9b68373213e5edd data/create/recipes/polished_cut_ochrum_wall.json +a00bbe0c3064479d03b8e5ff4cf9185b11b606c2 data/create/recipes/polished_cut_ochrum_wall.json 35e975040560b70005d8bfe015782cd4bbe39b27 data/create/recipes/polished_cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json cf1cd1709341d2f2c280e79a4ca8aa9751df3407 data/create/recipes/polished_cut_scorchia_from_stone_types_scorchia_stonecutting.json -420879685f0aef48c6c30a3dd8c52d22b6486aae data/create/recipes/polished_cut_scorchia_slab.json +6d0b8a40b1c7670bc2ecc5a1a8c46c5e25c0c74f data/create/recipes/polished_cut_scorchia_slab.json 6f08dab03a2bad2603dce6c248fe13f3608e7424 data/create/recipes/polished_cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json -8ab44f1c6b8dcad493b93b0d8ff899c6963b4a20 data/create/recipes/polished_cut_scorchia_slab_recycling.json -52d45f918ee0ecd9becfcc2e7321a9cb2f815a27 data/create/recipes/polished_cut_scorchia_stairs.json +5d8f4e2317d94c85b8ab433089b914040bffa274 data/create/recipes/polished_cut_scorchia_slab_recycling.json +349e0c941f7ac9a6f9270675354973c95ce1b594 data/create/recipes/polished_cut_scorchia_stairs.json 78660fe29058bb61073cdfb6be0003700b9be6e7 data/create/recipes/polished_cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json -6835e052c0883b03db26549b35601451c95e8c7e data/create/recipes/polished_cut_scorchia_wall.json +6c0d03d006190ca924d86109da8f459d22043876 data/create/recipes/polished_cut_scorchia_wall.json 61d2dcd9716349686175ad70e6054e5e2e7fdc80 data/create/recipes/polished_cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json 43660c3c000538f1d4a242ee08033073f564cba9 data/create/recipes/polished_cut_scoria_from_stone_types_scoria_stonecutting.json -0b7bf2e17084494e3cadef762612c6c837b3c4fa data/create/recipes/polished_cut_scoria_slab.json +21534d4c48c7485db63646677e8c6a627889e623 data/create/recipes/polished_cut_scoria_slab.json 2f56b9f79d59609dbe1f340cad7a6f08d82caf91 data/create/recipes/polished_cut_scoria_slab_from_stone_types_scoria_stonecutting.json -3a54cd56a0474f9fedebbbefedb4cf277c82bb83 data/create/recipes/polished_cut_scoria_slab_recycling.json -6191f975cc8fdc14a7f68c85bbe5342231b70378 data/create/recipes/polished_cut_scoria_stairs.json +47e74dbe59bbed8af7ef19086ab9a431e969f84d data/create/recipes/polished_cut_scoria_slab_recycling.json +3c9a6daf75016c540c52cb6c98a45985a9ff3684 data/create/recipes/polished_cut_scoria_stairs.json a7e9682ddff0aeec17b9d65609e057e80d9348e2 data/create/recipes/polished_cut_scoria_stairs_from_stone_types_scoria_stonecutting.json -aba16ed16afc833bbe77a3b9584d2e21f52f6eaa data/create/recipes/polished_cut_scoria_wall.json +fb05a045073d119dfeb270dd2d9134d3c9c81ce1 data/create/recipes/polished_cut_scoria_wall.json 107cb077a12d24d5d2368663f84da083ea0438f1 data/create/recipes/polished_cut_scoria_wall_from_stone_types_scoria_stonecutting.json 14deacf26b83b06de47d5076ea8ba3c24561d966 data/create/recipes/polished_cut_tuff_from_stone_types_tuff_stonecutting.json -e72b5d3542ebbe25b05767267d7ee20887b81be9 data/create/recipes/polished_cut_tuff_slab.json +6c1fe93dddd0deac0ed2baee2db6eecebfc79bef data/create/recipes/polished_cut_tuff_slab.json 0bea69fa87263b4c7b3d3886014fc21ae448227a data/create/recipes/polished_cut_tuff_slab_from_stone_types_tuff_stonecutting.json -724afe7ffcf9d59b50dccbb8526ac056940e80ae data/create/recipes/polished_cut_tuff_slab_recycling.json -b46d96afc0dc240414fae38efcf42cc3cfe46582 data/create/recipes/polished_cut_tuff_stairs.json +207f0ba3ce0a85a47deccb6b82523cee92b74970 data/create/recipes/polished_cut_tuff_slab_recycling.json +b1341920b0f8c3490a29e31110a4cd538d1b7158 data/create/recipes/polished_cut_tuff_stairs.json 3710e827fee86de70d405cd9662392940fe19f48 data/create/recipes/polished_cut_tuff_stairs_from_stone_types_tuff_stonecutting.json -4e5d2e633b55ded02175f02ad0cfe45aab3ae6eb data/create/recipes/polished_cut_tuff_wall.json +7b25326bd12b40ba055bd9490b3855ee3e061f15 data/create/recipes/polished_cut_tuff_wall.json 434abdef7effbffb972fa2307d002b4fd9d268be data/create/recipes/polished_cut_tuff_wall_from_stone_types_tuff_stonecutting.json 1a7ffa6b0d600e1fd17ad1e191516154bc483143 data/create/recipes/polished_cut_veridium_from_stone_types_veridium_stonecutting.json -16f56a3c0e9e787dc1667c1a8d49362276e96322 data/create/recipes/polished_cut_veridium_slab.json +dcc4f38974d5e9ae0b672d49440a971c47ede357 data/create/recipes/polished_cut_veridium_slab.json 6e9c06200021725680567da873cb698e59be9b81 data/create/recipes/polished_cut_veridium_slab_from_stone_types_veridium_stonecutting.json -f525ac69960e886e233db2817a892b3c2ac33a1f data/create/recipes/polished_cut_veridium_slab_recycling.json -f2526cbcf8b6e48dd26501a2f8d6038ecfd2c925 data/create/recipes/polished_cut_veridium_stairs.json +35c35e0e05b21645184a2606b12035119781c0c8 data/create/recipes/polished_cut_veridium_slab_recycling.json +c3e8e69e00e8e3795c09b28ae2c900505eddd540 data/create/recipes/polished_cut_veridium_stairs.json f5bbca51e5f51d8d9bbcf96232c3cbae5c4b1b9a data/create/recipes/polished_cut_veridium_stairs_from_stone_types_veridium_stonecutting.json -bf30b87461ccb82d6712e9ddbed7ed08a8cc652f data/create/recipes/polished_cut_veridium_wall.json +77d9909f2274e410d5664cfa241a4f3444c862ab data/create/recipes/polished_cut_veridium_wall.json 08439ab71413688d6f07b41df54eae6c87255ec6 data/create/recipes/polished_cut_veridium_wall_from_stone_types_veridium_stonecutting.json a157a43e7788d285b8d72eade5955369c9b9a1de data/create/recipes/rose_quartz_block_from_rose_quartz_stonecutting.json 24b3df9eaf6322590029fccc96493ec23aeec931 data/create/recipes/rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json @@ -4034,137 +4034,137 @@ a157a43e7788d285b8d72eade5955369c9b9a1de data/create/recipes/rose_quartz_block_f 2e8f4cdb3498547a5e6fe658bb33d4be5ce8f54b data/create/recipes/scoria_from_stone_types_scoria_stonecutting.json 770d3453c75f77b16db661f6e636892d3117690b data/create/recipes/scoria_pillar_from_stone_types_scoria_stonecutting.json 75dc56fcdcd6a10288f2d607bf6dcbbe10b35a64 data/create/recipes/small_andesite_bricks_from_stone_types_andesite_stonecutting.json -fd4daf726d6ac12451aebb26c0841939f4a3872a data/create/recipes/small_andesite_brick_slab.json +2e86fddc76285b4e380b845eb1150580b134d0ac data/create/recipes/small_andesite_brick_slab.json 311727e5c08ddbe0aa26275be74e9b83201ac8ab data/create/recipes/small_andesite_brick_slab_from_stone_types_andesite_stonecutting.json -c6a9df8218a8d953dd632c4505544aa3a2c23128 data/create/recipes/small_andesite_brick_slab_recycling.json -cd5defe1d8c2149b146dbf9d5c96b7b53372cd1a data/create/recipes/small_andesite_brick_stairs.json +2767e239c9d704b6bb5325b4f40e0aa0acdcdce1 data/create/recipes/small_andesite_brick_slab_recycling.json +39121552846038cb3c9607d8dd0bcbdeb1e1f7c8 data/create/recipes/small_andesite_brick_stairs.json 9e82896e00c1e14e514fac818e11e5b9ef5b10d7 data/create/recipes/small_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json -afac0df01edaae180fe0f528b6cd1c8516462da7 data/create/recipes/small_andesite_brick_wall.json +5287d389b4954d954881d9f0293c52870bba88d0 data/create/recipes/small_andesite_brick_wall.json 1172ca76affd948c50b207124ee03c4f480f4ee8 data/create/recipes/small_andesite_brick_wall_from_stone_types_andesite_stonecutting.json e3b69122b2cfe64b043384235eeb6d04f346e58b data/create/recipes/small_asurine_bricks_from_stone_types_asurine_stonecutting.json -9d24e02f36e5ec5e289ebfe0cfa873a97003bf54 data/create/recipes/small_asurine_brick_slab.json +9196a055491052afc14ed01667cccf2a0920e793 data/create/recipes/small_asurine_brick_slab.json f4cc3330837a647c098ccb24fbbbf583c3f960fc data/create/recipes/small_asurine_brick_slab_from_stone_types_asurine_stonecutting.json -795ff7666c4b53a570d4bad39cdbfc36358e4ff5 data/create/recipes/small_asurine_brick_slab_recycling.json -f25230eec9664436cfe12f540213b913aa10a6f2 data/create/recipes/small_asurine_brick_stairs.json +063b2f0ad7e93698999922040132eb2b23661a38 data/create/recipes/small_asurine_brick_slab_recycling.json +a85d2f957223f87ffa2c3f63cdf6f9f0f84bb921 data/create/recipes/small_asurine_brick_stairs.json c7cb218b0d8a1e358d593fc1fef82fc074289552 data/create/recipes/small_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json -87dbfcb168d7b15df8b0e85e6ded10d1cdea827d data/create/recipes/small_asurine_brick_wall.json +08d10ee57995e67ac1fb5feba04b03aee51dbe16 data/create/recipes/small_asurine_brick_wall.json 4c0aa6203295a36a6d7ffe9d7bf0973277162689 data/create/recipes/small_asurine_brick_wall_from_stone_types_asurine_stonecutting.json 07125218f9025833afa189fa0090f4d6b4660db0 data/create/recipes/small_calcite_bricks_from_stone_types_calcite_stonecutting.json -f9b0b5f8990108431e3b5c259f0e89840019921e data/create/recipes/small_calcite_brick_slab.json +a72719de028ca9e07756dae6031af48525520fc2 data/create/recipes/small_calcite_brick_slab.json d8ebf6f1eb2e2372fb20def956398089adec5d13 data/create/recipes/small_calcite_brick_slab_from_stone_types_calcite_stonecutting.json -4166ad33b02bec9979219aa144c74b1511060e84 data/create/recipes/small_calcite_brick_slab_recycling.json -82fc4e4f8d50c55b4b61b42e74dcc1cf897944dd data/create/recipes/small_calcite_brick_stairs.json +ab4cfc2b34989d41a434781a3150ecd530c4f15b data/create/recipes/small_calcite_brick_slab_recycling.json +c77a7700d978e23db14d947915591061dda8eab3 data/create/recipes/small_calcite_brick_stairs.json 4e066bfc60ea142d54ce939d025b6679ac9634ad data/create/recipes/small_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json -1fbcdd5fdf28ca6dccb38bd4c8b3b9e7ca990ab6 data/create/recipes/small_calcite_brick_wall.json +64e53d8090fa26cc4cb62efea7c1615ff7f705c2 data/create/recipes/small_calcite_brick_wall.json 3ba736ae76249fa61692c13f7879af954f9bbd36 data/create/recipes/small_calcite_brick_wall_from_stone_types_calcite_stonecutting.json a3309c81f84bf4fb78e9db2316fb758f9b2f8429 data/create/recipes/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json -dd4ca13342fd36dad315b7b35735f73caff99b6f data/create/recipes/small_crimsite_brick_slab.json +92cf7e99229c1e72405bb0875e6f939b3f5aea12 data/create/recipes/small_crimsite_brick_slab.json b993e081103c019b7b9b73b38ef8c408fb4500ac data/create/recipes/small_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json -29cae30ba2cbc10aa71bd0d830a8a4ec7a5b433b data/create/recipes/small_crimsite_brick_slab_recycling.json -605ec1db73b24d933a3e1584a5f8364180373578 data/create/recipes/small_crimsite_brick_stairs.json +7f6fa1fab65d910388f5f2ec4ee7d99cbda8df57 data/create/recipes/small_crimsite_brick_slab_recycling.json +222f5dd613272d9196325624876d94c07dc19ddb data/create/recipes/small_crimsite_brick_stairs.json 260da721849d1afd6f431d51538d1587ee3af8d5 data/create/recipes/small_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json -919003830ddc8b42b7bf89f8f5fbd7a15ddd9c3e data/create/recipes/small_crimsite_brick_wall.json +093ac919f793111b442029198383a9de5b6df027 data/create/recipes/small_crimsite_brick_wall.json 8b8280a8282fa8718620ee3d69182e241a7852c0 data/create/recipes/small_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json e7a3cb889ce6b530cd40f19e23bad943374e61b5 data/create/recipes/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json -1737ea182577544bb7a2d3d811277f2ec1559268 data/create/recipes/small_deepslate_brick_slab.json +022690548a46f5cc63adda3626824a81c6ebf490 data/create/recipes/small_deepslate_brick_slab.json 655be9ddf21dea2255fb2cb2628a5fee39eb10e2 data/create/recipes/small_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json -900fd6cd626a73b7d573723df194b9ad23fa4dfe data/create/recipes/small_deepslate_brick_slab_recycling.json -e0e07c1b2516a47e1b44716472727039466b3e7b data/create/recipes/small_deepslate_brick_stairs.json +d6d3db5604279cd402f64dbdeae7c3bee6d7ab78 data/create/recipes/small_deepslate_brick_slab_recycling.json +34ea2c6c9f50cc739755592b197a2b9220210d3e data/create/recipes/small_deepslate_brick_stairs.json 0a458e8248fe395748bd6025d43c002db5a7d343 data/create/recipes/small_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json -4be662dc489993fa80431aaa23912838b1458918 data/create/recipes/small_deepslate_brick_wall.json +96e2c36ac2f2899c9681f12f43c8ae232ae09180 data/create/recipes/small_deepslate_brick_wall.json e5644f4227b9cc9b98158ce3ded98bff1ffb97f9 data/create/recipes/small_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json 38b80603a86df24f6be0df9fd5f7d9b7aa33d2f9 data/create/recipes/small_diorite_bricks_from_stone_types_diorite_stonecutting.json -9b59f0215a3fb31a81df5a421d85681fb0a8105c data/create/recipes/small_diorite_brick_slab.json +6c66b44941c8b97cfec5948b5d8b08355f8d8f67 data/create/recipes/small_diorite_brick_slab.json 801f6cc6e06db56344b37c9b76c69f921c6d9293 data/create/recipes/small_diorite_brick_slab_from_stone_types_diorite_stonecutting.json -0737adcb6b20f0f2125770927be9a6d8118300ff data/create/recipes/small_diorite_brick_slab_recycling.json -593770b6791fbd45985f867f8763048b6c5567de data/create/recipes/small_diorite_brick_stairs.json +c1fe4bff306e2d2b5d5595e4b35dd85f7e6bf0ce data/create/recipes/small_diorite_brick_slab_recycling.json +af6feedf00bdfa45c1b8f0dd46ddaa80da622fed data/create/recipes/small_diorite_brick_stairs.json 30a6f2bdfec2b3f578572c9f94112906411e7c54 data/create/recipes/small_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json -340bd57765914a7cb59ae9e47feee078470c6e1c data/create/recipes/small_diorite_brick_wall.json +8728b791808736de2ac31e8dc81aa43638ae0ac8 data/create/recipes/small_diorite_brick_wall.json 7a1fdcef7091d76230fbee410fa5241f584845c4 data/create/recipes/small_diorite_brick_wall_from_stone_types_diorite_stonecutting.json 8840d538648516dd02628fbe3ea4f032ceda78bb data/create/recipes/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json -fbf7a38d3d97151ea1a2bbea0bba2b6e7594e2d8 data/create/recipes/small_dripstone_brick_slab.json +39a545b60040bd2d922cd3bd5af5036b1b9b23ef data/create/recipes/small_dripstone_brick_slab.json c91e4dc211305456c38e5823def91811ad851202 data/create/recipes/small_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json -5d2a9c10ad8ab4cb64eb88814730a2fb28c686b6 data/create/recipes/small_dripstone_brick_slab_recycling.json -90f2baaca8998933d81432c2768c02396b58b5c3 data/create/recipes/small_dripstone_brick_stairs.json +55bb37d07e841bb8eecf2013445c01c8e09ff824 data/create/recipes/small_dripstone_brick_slab_recycling.json +382dda1b21a531a20634dcdd790efd899f10f9a8 data/create/recipes/small_dripstone_brick_stairs.json 1e23c8df90aef6cd3561369f72c6c3106da883f5 data/create/recipes/small_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json -daa2771b3b58f2f0894521bc1cd2bb6ad5efe8fd data/create/recipes/small_dripstone_brick_wall.json +fda46cc15c21e7843537df5b5331874fd7511e19 data/create/recipes/small_dripstone_brick_wall.json 336e47b35437ffea4bb86d34f94e6361b2bbcfb0 data/create/recipes/small_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json 42c74dec6c64d3675e15b2b73cb32fc9d24839e9 data/create/recipes/small_granite_bricks_from_stone_types_granite_stonecutting.json -b93f19ab01474197856347d383b0d1bdafda6bfd data/create/recipes/small_granite_brick_slab.json +d1bb4e91d80ca8eb9c2f935cbb66ef08b9ca7059 data/create/recipes/small_granite_brick_slab.json ddb2f4652607b56332a927af939212a5789a34db data/create/recipes/small_granite_brick_slab_from_stone_types_granite_stonecutting.json -77e6d669060a8117e6e725f4a20aeed1162346b5 data/create/recipes/small_granite_brick_slab_recycling.json -d90df060ba61d2d94dbe4d487c341f9e0e8e5a52 data/create/recipes/small_granite_brick_stairs.json +f1388636bcf98d7d9103c23528053b28c6305b4e data/create/recipes/small_granite_brick_slab_recycling.json +7df69a73fdb367a2880b6dbcec28cf96701e202e data/create/recipes/small_granite_brick_stairs.json ba935a3d64eedbd9b7017d0abfab351f57589593 data/create/recipes/small_granite_brick_stairs_from_stone_types_granite_stonecutting.json -49da3789c9ca0d4cd78e6003b872aecb05804098 data/create/recipes/small_granite_brick_wall.json +dac22c54e8034587a3fcf3aa0ce19bb4b7607cd7 data/create/recipes/small_granite_brick_wall.json 7a8d9e2291675de9e72363d93410de9039216f32 data/create/recipes/small_granite_brick_wall_from_stone_types_granite_stonecutting.json 714f6a84a5b3d5d57c07364925555e6f545b0b3d data/create/recipes/small_limestone_bricks_from_stone_types_limestone_stonecutting.json -86a24bf33a8e67c70960b3415c85a5b2a2f3fa0e data/create/recipes/small_limestone_brick_slab.json +b844632a588cb96397750f4387c7e6517f85092c data/create/recipes/small_limestone_brick_slab.json a1c0bc263cd4659a89213f4fcdd87eba7ae04427 data/create/recipes/small_limestone_brick_slab_from_stone_types_limestone_stonecutting.json -07900b3ecc5c3735b9db5e9e4c575bb39bf42cf4 data/create/recipes/small_limestone_brick_slab_recycling.json -1c5963070f18334c7845a23aa12730e04ce07927 data/create/recipes/small_limestone_brick_stairs.json +ec9154a3791113f57dc1c16dfef4c837533b6fc6 data/create/recipes/small_limestone_brick_slab_recycling.json +8c28eb6be734f4cb5474e7b89ece202f560aee8b data/create/recipes/small_limestone_brick_stairs.json 6943fdc8162e4d53c459f425b2ff5b34e9caa477 data/create/recipes/small_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json -3ebc3256e26d8b62f571da5df7ada2d77f25130e data/create/recipes/small_limestone_brick_wall.json +27ff69345efea14b9688fe9b182809995ea8ad4a data/create/recipes/small_limestone_brick_wall.json 98a83f757f0ac9cc2a876ae407bb5765071e700d data/create/recipes/small_limestone_brick_wall_from_stone_types_limestone_stonecutting.json 22c69e391110280e13d50693b9c81355da57a315 data/create/recipes/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json -7f4bc3704206f7f70ad73e53fa7e2ba4635fc60a data/create/recipes/small_ochrum_brick_slab.json +abdd280694cb30ce0d2703aadeeb378af9a7f8b2 data/create/recipes/small_ochrum_brick_slab.json e37612fa2523fa3711242cac4ec5e596b3e55698 data/create/recipes/small_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json -ad3a4bb3364beb6e544343591655307352ffadfc data/create/recipes/small_ochrum_brick_slab_recycling.json -6f4624e75b166117eb208a4be366e4145433c340 data/create/recipes/small_ochrum_brick_stairs.json +8f3f47cb3e759104cf86a422339345f8795143d3 data/create/recipes/small_ochrum_brick_slab_recycling.json +de8d7f8e57645c0b5a6e98eb0cc4e573c5cf96ac data/create/recipes/small_ochrum_brick_stairs.json 04ebbdd14f81f4b4dc7986cb5241caa9f48f4ff1 data/create/recipes/small_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json -e9663e2cce18ed1e7cdc16885a435fa70f228d7a data/create/recipes/small_ochrum_brick_wall.json +07876725f97ff611f8d1710462224f07cab3ebbd data/create/recipes/small_ochrum_brick_wall.json 2331801569ec95562afc802f7e2ff191d329a5c6 data/create/recipes/small_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json 68a9f80b97d9322ed33067d7717180494b904bed data/create/recipes/small_rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json bf27af2e54ed1b09611d67ee7afa6c7f56d00d09 data/create/recipes/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json -5fc0dd9f56fde650d7e7bce4e0791bd6da87e9fd data/create/recipes/small_scorchia_brick_slab.json +133057778480e1d2e13fe7b2766ba0891feea3a5 data/create/recipes/small_scorchia_brick_slab.json dad342d215c98f3214752e0ebfaf3015943c5ac7 data/create/recipes/small_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json -0be6cc2520620e0c59266adccae001c14120d3ac data/create/recipes/small_scorchia_brick_slab_recycling.json -ce87e8152803db8896c1142ead652dfd9fd96277 data/create/recipes/small_scorchia_brick_stairs.json +0a57ad5fce22d69cdc1dd880403612ffb47af4ba data/create/recipes/small_scorchia_brick_slab_recycling.json +9883202792e6a3e057c7ad581968a9141f66bf0c data/create/recipes/small_scorchia_brick_stairs.json 7f89c9c6dcea06a3022c72029a5e547aa1721773 data/create/recipes/small_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json -2847bd29f23aedc09060a7294afe5ceba78dafcb data/create/recipes/small_scorchia_brick_wall.json +43310b3fa43bd791ef0e2e30971a24e788c20139 data/create/recipes/small_scorchia_brick_wall.json de8edc4fa5eec031ad0a63c7f59141985ae9af9e data/create/recipes/small_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json b1a67d052e26c2129c34ee0732cfe533beb3e571 data/create/recipes/small_scoria_bricks_from_stone_types_scoria_stonecutting.json -2440e1cd71f239e3b37b2ee69c59acc4d63d456d data/create/recipes/small_scoria_brick_slab.json +d8a41adcc6ae9b0eb71a83b2dd89ff92a10e0057 data/create/recipes/small_scoria_brick_slab.json 34f4dd094f2949e3fd21f95ac890ae803b81fbea data/create/recipes/small_scoria_brick_slab_from_stone_types_scoria_stonecutting.json -0e8da84b5e1115a365c367425bdedb9cd2b53a1c data/create/recipes/small_scoria_brick_slab_recycling.json -b1554477a62bfe1288718817fb40b5bad79fa7c9 data/create/recipes/small_scoria_brick_stairs.json +f15ad1cb05f5b02b630b982d23bd951178a3650c data/create/recipes/small_scoria_brick_slab_recycling.json +df5a1437fb112519d904cc9f1cd28d5d891fb04d data/create/recipes/small_scoria_brick_stairs.json d36428daf8bf4e560f649e5eb40a8cd7a27e7a0e data/create/recipes/small_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json -0ab83b9b09a8da5fe6f1b75e347602c61c2aebf7 data/create/recipes/small_scoria_brick_wall.json +cad432398d8886d60b94e96b2c2096ae27fffb50 data/create/recipes/small_scoria_brick_wall.json 9cff8370aaa81ece466fe15642c00a9992bd416c data/create/recipes/small_scoria_brick_wall_from_stone_types_scoria_stonecutting.json e51ced16059f7c37fe3652a1cf4d938f91e956fc data/create/recipes/small_tuff_bricks_from_stone_types_tuff_stonecutting.json -9806285cf2731bbdc31b00628ee16f27dd20865c data/create/recipes/small_tuff_brick_slab.json +dd83af4a10a9b0ba6a4efb272d8b6b1611524a39 data/create/recipes/small_tuff_brick_slab.json e3a12b87830e47387e9ac118bb3d12b73558d757 data/create/recipes/small_tuff_brick_slab_from_stone_types_tuff_stonecutting.json -abfd59186b36af4be0b8d4e46eaad2cf853197ca data/create/recipes/small_tuff_brick_slab_recycling.json -1b7471f8458300f557a1425d61ac99bef0b4c724 data/create/recipes/small_tuff_brick_stairs.json +85dff00dc49eaf65f1f149a7f21a9f307b1b9710 data/create/recipes/small_tuff_brick_slab_recycling.json +e03a8270b01b9a5cad238db4ce2b8f66ea78e8bf data/create/recipes/small_tuff_brick_stairs.json cd50bb5842c90038f6ac74e45971ab2e914d1463 data/create/recipes/small_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json -4b446f7bc3a8010599c478f5b603ebfe77496066 data/create/recipes/small_tuff_brick_wall.json +e795fbe5062ec47cc660ee26c8398477509c5f18 data/create/recipes/small_tuff_brick_wall.json 34471a7ebb431b6d1e3be5fa480b800b96556fee data/create/recipes/small_tuff_brick_wall_from_stone_types_tuff_stonecutting.json 82f17edc61a319c74dbdfa730584305899bd7572 data/create/recipes/small_veridium_bricks_from_stone_types_veridium_stonecutting.json -de67590cd2504e912b604542c7c8f471136a45d4 data/create/recipes/small_veridium_brick_slab.json +f9a2f4ca078364e05b3446fe890ea207e5a56e87 data/create/recipes/small_veridium_brick_slab.json 234c3baee4c9428caab3e344f396ec87064103e3 data/create/recipes/small_veridium_brick_slab_from_stone_types_veridium_stonecutting.json -ce095d799ad90c4ceffb1bbd47ebe17f8e81dda4 data/create/recipes/small_veridium_brick_slab_recycling.json -517c971d5e355042edbcc70b70d030c8825dd0b9 data/create/recipes/small_veridium_brick_stairs.json +b0db8335e3c7fd88f074c3895bea952efc0e8df8 data/create/recipes/small_veridium_brick_slab_recycling.json +a1e214c230574526ca0a2fec059b4157ddec557d data/create/recipes/small_veridium_brick_stairs.json f63031587a64ed88ddba1df07767dd8d8caa1d2e data/create/recipes/small_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json -7f0ffdf07c2bde8660f60306035ca5c31c73ac59 data/create/recipes/small_veridium_brick_wall.json +9b003fbf2bcd975501ba307ea68c6c4bab397683 data/create/recipes/small_veridium_brick_wall.json 1ba48c5cae05b6f4b1ad223ce80925f1eaaf5dfd data/create/recipes/small_veridium_brick_wall_from_stone_types_veridium_stonecutting.json -fbe4f03322f44ffc848637df3e526a0ed2161c7e data/create/recipes/spruce_window.json -52fd64c7ca7d3f1b4deb3210471eb2c728ed713d data/create/recipes/spruce_window_pane.json +47973044b19b35ce169e7d46abc9d11a2f67a487 data/create/recipes/spruce_window.json +810544f79bf4b002981e614eaa8e49b48a7b5397 data/create/recipes/spruce_window_pane.json e343a80c92dab60f99c9b441d00189aceee477a0 data/create/recipes/tiled_glass_from_glass_colorless_stonecutting.json -cc6d8e58655f2c7929f66d097f6790fa244ed7e5 data/create/recipes/tiled_glass_pane.json +bb0dc6d30fd1e5c0becb57961112fcef40347c34 data/create/recipes/tiled_glass_pane.json 170f4dc4478029ba9ffa149051abb9072c59f3d1 data/create/recipes/tuff_from_stone_types_tuff_stonecutting.json fdd28fc956dbec71ba24cdea5adfc049d6eb31e3 data/create/recipes/tuff_pillar_from_stone_types_tuff_stonecutting.json 4e4861de1b7c989cb29e6383f842d7022f48279b data/create/recipes/veridium_from_stone_types_veridium_stonecutting.json 689c523599dcf37398e7217f2732723f6f726049 data/create/recipes/veridium_pillar_from_stone_types_veridium_stonecutting.json 310b9e72aebc37d1e883292c21af914b1026b8fe data/create/recipes/vertical_framed_glass_from_glass_colorless_stonecutting.json -c6267e02c62a6ee807330101e5fda2ac23018f7b data/create/recipes/vertical_framed_glass_pane.json -d47456885d5142a3ae460f3851fe0d6cb908223b data/create/recipes/warped_window.json -d17cb8ef2ef82e1c264fb2c8d5314c3b42cf2e28 data/create/recipes/warped_window_pane.json -3dfebcc8235617caa50a00d9fd914f43f05a1a49 data/create/recipes/weathered_copper_shingle_slab.json +81ec2761606bb5cce35fbd98787cc27d1173103a data/create/recipes/vertical_framed_glass_pane.json +0b78a940d72347671dd2fa473ed3798ed35cacc6 data/create/recipes/warped_window.json +831733099a8d873706cbb575a24bab5bacaedd9c data/create/recipes/warped_window_pane.json +8a1d0ce28f33e23e90001779374247552bcbb511 data/create/recipes/weathered_copper_shingle_slab.json 7edbc24cec31108f7cf1a8704624d6a0291b3150 data/create/recipes/weathered_copper_shingle_slab_from_weathered_copper_shingles_stonecutting.json -4a800d7b088296a25d72cd213976b03465640258 data/create/recipes/weathered_copper_shingle_stairs.json +62c2660409b4a70b1ea192f89e4cf38d2548d201 data/create/recipes/weathered_copper_shingle_stairs.json 12c32217b44bffd8ea9bd5141a0dba9f0992fbd4 data/create/recipes/weathered_copper_shingle_stairs_from_weathered_copper_shingles_stonecutting.json -5456f83dadce618e0d2f439ba0567ae44df86705 data/create/recipes/weathered_copper_tile_slab.json +7c63424310a59a59fe3d0165ecad16242615f74c data/create/recipes/weathered_copper_tile_slab.json 93c61ebeda451ebeb37c3047459f95f14fa9f1f9 data/create/recipes/weathered_copper_tile_slab_from_weathered_copper_tiles_stonecutting.json -fd2aaa5ab155c675e7ef4c143106428f181056af data/create/recipes/weathered_copper_tile_stairs.json +8a32b955b4320eddff017378785d1c95e1434229 data/create/recipes/weathered_copper_tile_stairs.json f1a03ac86925e26cbec6aeeada2eafb40008fc8e data/create/recipes/weathered_copper_tile_stairs_from_weathered_copper_tiles_stonecutting.json f365be4eda73234b73aa49c97b065f1a8baafbf6 data/create/tags/blocks/brittle.json 8b6c0b444b15f7fb2d55b9cbcb68537c1269f877 data/create/tags/blocks/casing.json @@ -4182,7 +4182,8 @@ f675c20350ed60da4878b5d6301f02c8c05624bd data/create/tags/blocks/fan_processing_ 4970078b49ddac1b1d500ed0469cedf42bdc3d35 data/create/tags/blocks/non_movable.json 06e13efbb7b0d09ff7ecd1a7dc45a0760b91ad67 data/create/tags/blocks/ore_override_stone.json a5874f73c7dc0a3ae12999e6ae8abf45bc7fb9be data/create/tags/blocks/passive_boiler_heaters.json -3928cfdba3f941456bb05005fa0c36966a3aa880 data/create/tags/blocks/safe_nbt.json +9bc8c13fd80bdbe7f767b91ee1a1042e9aff02b0 data/create/tags/blocks/roots.json +79ed9149ee2ce143114db4ccafda8a2b6a293aac data/create/tags/blocks/safe_nbt.json 79418bd729cef417b322cef9b491e7ae83317d61 data/create/tags/blocks/seats.json 5def5088f7fd31b80e6f28c1c4ea146aa9d7d15b data/create/tags/blocks/toolboxes.json 2589b135c0e96ad29076569e144528fe32ea5b39 data/create/tags/blocks/tracks.json @@ -4205,8 +4206,8 @@ f43cac8216e2a9347e48cf93a43de95dd810ca20 data/create/tags/items/contraption_cont d371dfd35e49a7bef19f59c03e7f4ae20992f03d data/create/tags/items/create_ingots.json 910d0f5ccbc4c84b224eca1f1588b1695f41447b data/create/tags/items/crushed_raw_materials.json 0fa526e7e742573b603ad26b09526cf724efa1dc data/create/tags/items/deployable_drink.json -ae5c7c69acfe764ed2b7bc4f1db35fb941b0c7a5 data/create/tags/items/modded_stripped_logs.json -06d0f69ae6022b09c01f5a2ce35454e9c98cbc86 data/create/tags/items/modded_stripped_wood.json +1cebeb92bd514b75d54ac6d5708047801f0501c5 data/create/tags/items/modded_stripped_logs.json +586f8fc5a8b8559c9dc0017e13c78ad918688fae data/create/tags/items/modded_stripped_wood.json 695d75b352fd190b303c724d1aaee9bb786a903b data/create/tags/items/pressurized_air_sources.json 2cd3adffd8b151354df137a990dcb97996a665bb data/create/tags/items/sandpaper.json 79418bd729cef417b322cef9b491e7ae83317d61 data/create/tags/items/seats.json @@ -4233,8 +4234,8 @@ e22493305e0cebfb7ededae122e19ee9dd24fc9d data/create/tags/items/stone_types/scor a5b5711d1798473a9b25db5b7f749570ed0a2769 data/create/tags/items/upgrade_aquatic/coral.json 22c744a157399a21492bcd8b211578f8f504e653 data/create/tags/items/upright_on_belt.json da739ad2160e7df4e0e5cc89587670ce5e9450c3 data/create/tags/items/valve_handles.json -03989b943d729293db75c8f681c490c55f594d53 data/create/tags/items/vanilla_stripped_logs.json -a82f75a9af4c0b28f08de8dfcaea2dce2accda28 data/create/tags/items/vanilla_stripped_wood.json +c59c9fc0cdd45de659aa8023d36f9decb90f708c data/create/tags/items/vanilla_stripped_logs.json +64441ac1daa64c81601b94b82b21c0ee862b6344 data/create/tags/items/vanilla_stripped_wood.json edf7390f09e622193bbc720ec51ba128ea1e96e6 data/curios/tags/items/head.json 10d5f0c1763f80860a39398ecc33dbbe43099471 data/forge/tags/blocks/glass/colorless.json de1fc89be6a52473d526d3efe0204b9b8489058c data/forge/tags/blocks/glass_panes.json diff --git a/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba b/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba index f94b389c1..1c010d34b 100644 --- a/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba +++ b/src/generated/resources/.cache/455c485c9c8ef171bbc1ce4d435b3110ba1557ba @@ -1,94 +1,94 @@ -// 1.19.2 2024-10-09T12:03:41.3854644 Create's Advancements -2079ae09cf699108a8035ced7ca712fed4ab1577 data/create/advancements/andesite_alloy.json -082d3987c5e074ed50be4a94a6fdc17120af241b data/create/advancements/andesite_casing.json -4618109cfb4550fd8e19dc9d794ef24398b10a61 data/create/advancements/anvil_plough.json -1aa4a19d97df326b9e4819bc72290524ea094b88 data/create/advancements/arm_blaze_burner.json -fc07423190bc857f061ea41a4f51458b8088f0e1 data/create/advancements/arm_many_targets.json -cc0dc0fe3aa523c6ee33406b33aeba1a3e519786 data/create/advancements/backtank.json -fde2d0dc2736c1667daa19427463c1640ac23a48 data/create/advancements/belt.json -e85010c3b13619256af80b980414c43735495d41 data/create/advancements/belt_funnel_kiss.json -2fbfe98e16080e01f80c26a30b73983822782bcf data/create/advancements/brass.json -c4c14f3b3d618ca34578aabcae2627414e693f55 data/create/advancements/brass_casing.json -a4d492aa22abf32c01d2c4d268e084a7915ef7d4 data/create/advancements/burner.json -d24f44937e0b4f39d2940cca3ee6c3ef120d311a data/create/advancements/cart_pickup.json -8d746fc89acf4a8bdff5aea545cf5449348851ff data/create/advancements/chained_drain.json -0ec464b6ce70a65185dbb2d74c76c0dbf402851f data/create/advancements/chocolate_bucket.json -38ee84ce98990539a3d836c57b2c6402b5675a48 data/create/advancements/chute.json -63176510af010ed317537dbfe523269bbfa30402 data/create/advancements/clockwork_bearing.json -7460abf9783ddd9bfd43100ab697012a1c9ffd93 data/create/advancements/compacting.json -5b9f08cf6ddf3f0948854176327cfe2be895bb21 data/create/advancements/conductor.json -de60e46cfe009d1b8caf6c993b6c347b400711f1 data/create/advancements/contraption_actors.json -ad3df5cc4154c81d4311aae9c30a9d4c54c5085f data/create/advancements/copper.json -28468549782c8fad58ebf248d0d4018fcde8b2c2 data/create/advancements/copper_casing.json -6c0bcf572a634b5cdb01793b063fd7bb9344fab5 data/create/advancements/crafter_lazy_000.json -d46530f2c2bbb5a9da5af7b1c49b1243b1e38663 data/create/advancements/cross_streams.json -fe159e9ca1f688b5d3e42f35f9b1bde2214e3cd0 data/create/advancements/crusher_maxed_0000.json -e564c7aa283e81d5aa4c043b6de97b7328aa877d data/create/advancements/crushing_wheel.json -7db45385ae69534ff40d7b2b40de7ec5ae1f1905 data/create/advancements/cuckoo_clock.json -f175d1f816f32e1c50891321331e475863ce1e89 data/create/advancements/deployer.json -62ffffc6834c54ae1abca584522c577226f7f891 data/create/advancements/display_board_0.json -68749521feb4832c8da666454c70f883129f9335 data/create/advancements/display_link.json -dfa5e42ee372df8c810e1ccf8a6928e4f1299f37 data/create/advancements/diving_suit.json -63566cf0cf03ebb6cd30ee030e67159e2cffcf66 data/create/advancements/diving_suit_lava.json -2d19468ffed9345ebe8cecf220acc15651917082 data/create/advancements/drain.json -492d8ebc5d10e7efd100570f1507413d78723782 data/create/advancements/ejector_maxed.json -7e19fd15b675494d2a8d5ac3cef4a50cf58c203f data/create/advancements/encased_fan.json -45cccc0f06160ba5c01676e2015b70fd0f8daee2 data/create/advancements/extendo_grip.json -19375d4672fddd04f175b1e933913f61f2d479ea data/create/advancements/extendo_grip_dual.json -42e63e00c7706c6ca2fffaa3c32016c66606775c data/create/advancements/fan_processing.json -ed8ce124b7fbb33c09b35507a317d97f039f469b data/create/advancements/fist_bump.json -59c0c761919d504d31123cb0d1b046814e8a6aca data/create/advancements/foods.json -b68f4baee272682b6f4c9a34089837fec2cd9c58 data/create/advancements/funnel.json -7f968a34d7c81ce222166fc00386cbfbbdfd2413 data/create/advancements/glass_pipe.json -9850d8b5cc6b2e749c78e64cc56d20fd6c001106 data/create/advancements/hand_crank_000.json -0cf4fcd4efedbff71db45e7a85b56123f5307ffd data/create/advancements/haunted_bell.json -747e6b21d7dc74502a75a4ea28a66ac6b111565e data/create/advancements/honey_drain.json -6076d0f75bc693f6a8635fc3656eaa8c4f29693b data/create/advancements/hose_pulley.json -c365ee5c1175fa4bf4627d78c7bdce6ca7a2defb data/create/advancements/hose_pulley_lava.json -c0f0689a4497affe0feb20bc20d708aa0d8eb90e data/create/advancements/lava_wheel_00000.json -2bef7aa7c863c9b149c67a506725ffa0fee3d977 data/create/advancements/linked_controller.json -8d842135a5111786c0c656dfcac6be9c1d1a459d data/create/advancements/long_train.json -333335c09683319ceaaa2974a9f746c0545bf425 data/create/advancements/long_travel.json -1025b22c5ff39a4d54bb5857e04e35a5d806ceba data/create/advancements/mechanical_arm.json -7703192ff1ccba4cc006bcfae349084756ae62d7 data/create/advancements/mechanical_crafter.json -5892215b26cf4ba12f2c969d5b7bf75e72afcb48 data/create/advancements/mechanical_mixer.json -82174d713d926d2cbb20fabe9f0e326758d74804 data/create/advancements/mechanical_press.json -30299312adb50b253c22e0da53424ffcfadb9768 data/create/advancements/mechanical_pump_0.json -78ad377d18e0f812a80b234a30d26fdcc3d6f65d data/create/advancements/millstone.json -ab64e2f1efce94c53542727ca2d146c70b7ce079 data/create/advancements/musical_arm.json -4b38ed714396b05f48aedb9cdda1b7fde723866d data/create/advancements/pipe_organ.json -4610121385be0a9c7dfa3cb61aabf8a67ffd1b74 data/create/advancements/portable_storage_interface.json -23e36cb10df00aef1277c2de054fab72a4406a32 data/create/advancements/potato_cannon.json -d0070bb320214dd308f060f9271efe2538e9ce78 data/create/advancements/potato_cannon_collide.json -194dcfa145aab4c4c44c7bea43f5632b9d271829 data/create/advancements/precision_mechanism.json -ce6f407629718a08046895b9f388912598eb54f0 data/create/advancements/pulley_maxed.json -7bc1fbbb6d129727c9bf5fc65c9d0b85926801a9 data/create/advancements/red_signal.json -93d6cf1883a9e2cb8d476ac42f61a401033b1163 data/create/advancements/root.json -948bd2f2c98c7e42e62cf00b6ac17aeb83b665a3 data/create/advancements/rose_quartz.json -caee573f0fc6c297b12a7e96b90f7fb8fce787de data/create/advancements/saw_processing.json -16f463cda4842cfa69d484899a5e3a5ebc7c6531 data/create/advancements/self_deploying.json -a6893c0d8e123346eb74d4f98053a7bd7d45a5f3 data/create/advancements/shifting_gears.json -c213cfe4b14239b6a8d572ea4beb9cdee83543ba data/create/advancements/speed_controller.json -1664bfda74ce4830f8c6eef3e395da593c3d3615 data/create/advancements/spout.json -064d23021711418a2647b1127a3feaa9983147a7 data/create/advancements/steam_engine.json -d2f108ffaf809d2a1d7ace0c27333d20efe32ffe data/create/advancements/steam_engine_maxed.json -6612e1e4a448ee2004cc6b8dbf79af5486502e46 data/create/advancements/steam_whistle.json -4ee4a064fd2546a7e8e6ede0fe723860aef22dbb data/create/advancements/stressometer.json -7a926370e36cf0f5921d338261ad5b5a78ffbfab data/create/advancements/stressometer_maxed.json -46e63a1d780ab00193ab9edbac7a2d3aaf146951 data/create/advancements/sturdy_sheet.json -758ae0f196771f69bdb793b1753e20725a1c7395 data/create/advancements/super_glue.json -97cbeb1a17c2ae4251d27b830158200088fbf36c data/create/advancements/track_0.json -d365ccfa43deba1c0faab1dd804a4985b2a48cc3 data/create/advancements/track_crafting_factory.json -9962cc67809593e548465a5e5da23053dd673d26 data/create/advancements/track_signal.json -336ba2464a66c94be4599c38cac8a8461f107558 data/create/advancements/train.json -cb32d8ead0afe2bc25557bf7563a519e16101230 data/create/advancements/train_casing_00.json -10225f8c16e30ebb21ead266191d53d84b7525dd data/create/advancements/train_crash.json -bc67c56d024c649a9900c1f71d3eec19ee1ae923 data/create/advancements/train_crash_backwards.json -f55b9f99589550ae941daced826d52284fb9b12e data/create/advancements/train_portal.json -2635ec3f90229a107ac553e26011ca86fd9fc2d6 data/create/advancements/train_roadkill.json -6efe2b3e0f5f570d4711d2893a3d73d415fdc49c data/create/advancements/train_whistle.json -6afde0aa8aa67cbe5821a78f72dc430d8ae0563e data/create/advancements/water_supply.json -6b8f8656ff9aa4809add88b8071748eb26db9460 data/create/advancements/water_wheel.json -9b0f6863fe78327bcd06f512b6f32fbf556c4ca3 data/create/advancements/windmill.json -d0d5fc5dcc05dbb60cbcac1607c85d24af72ab82 data/create/advancements/windmill_maxed.json -cb636e49d3131c859336655de4cbc2f6e8a795a5 data/create/advancements/wrench_goggles.json +// 1.20.1 2024-10-09T12:24:59.1794112 Create's Advancements +2661a689fdcf729494f46e3c719f71c62e31582e data/create/advancements/andesite_alloy.json +fa16c4afe0496edc3f157858a6e0ff177a1622ff data/create/advancements/andesite_casing.json +5a694002d0a663bc869b09d15924a10c43dc522f data/create/advancements/anvil_plough.json +d7edb08ca331f4d5777fae3a3ddb2139bf7ccd90 data/create/advancements/arm_blaze_burner.json +2954be6b07ad0204ddb68d73899d2be42d90d506 data/create/advancements/arm_many_targets.json +b960076e653a3682aa4ebb82bdca957d455c7604 data/create/advancements/backtank.json +6419ea7cdc2946f6b9b1d0533761165c644ef87a data/create/advancements/belt.json +2e3e26ce4e0b6e08ca58c5631f1b965a466f65d3 data/create/advancements/belt_funnel_kiss.json +ca6d0355dbd9a7de587c4ebf2aed82e920e007c1 data/create/advancements/brass.json +78224097bda936d1ba9bf682a9177ad252139a51 data/create/advancements/brass_casing.json +113f1a063d78207e600e536200004756b42e0cd7 data/create/advancements/burner.json +7c0aed400d4933d5ca13db42517efa2959a1bed0 data/create/advancements/cart_pickup.json +2970c69c310e8e3dbe295621d04a8f42bb7fd1f0 data/create/advancements/chained_drain.json +5334499c577b7531a5de2ff46f371939554f1eb8 data/create/advancements/chocolate_bucket.json +e99071520e9b27b66085367683bc7b972a349c2f data/create/advancements/chute.json +9d8c0b690cb3e969b84fe89cded93f719a8c3572 data/create/advancements/clockwork_bearing.json +8ea25cd18d5e7345641953cb58c3d06b730786cc data/create/advancements/compacting.json +041ddb4720296fc4446d5d694afe3ec1c21c881b data/create/advancements/conductor.json +848f64e1f30c1ec0eac57b6760e282cf030a25fc data/create/advancements/contraption_actors.json +5074053518627b4229bd1f79b20c67e3056f7983 data/create/advancements/copper.json +90763d18fa6cf42cb409b75bc2a3be53d76aab1d data/create/advancements/copper_casing.json +f2e04dd82a25cc080a4901e03e0f1fafeb6ea191 data/create/advancements/crafter_lazy_000.json +4f88d0bf42d208bc5037509c197725bc4e4e68e4 data/create/advancements/cross_streams.json +44ed195706af6ee0cc3b98b9ea4f7d8326899391 data/create/advancements/crusher_maxed_0000.json +84b24845a97c04edf20cad8562c2d0de4c634ab2 data/create/advancements/crushing_wheel.json +01c6fa0494e5915b99a0b0aebd941ebbb177cd3a data/create/advancements/cuckoo_clock.json +ac78707d112458c7f771260cf65f0e9bc928d1b6 data/create/advancements/deployer.json +48c3af4499797cfb695a235e4527c52c608d40ad data/create/advancements/display_board_0.json +24be041d833017d7e7e02a5a92fd04060ea62594 data/create/advancements/display_link.json +cc2c729cf82a0c80b4966ac6382984da08429b9d data/create/advancements/diving_suit.json +e1af547fd148cf9e60c1725ab03545fe3010eac7 data/create/advancements/diving_suit_lava.json +4d91e6a7bbf08191d8d1e11943650dfc1dc170e6 data/create/advancements/drain.json +dee06f0f78a97a6358b67459d05fb479e5318fe9 data/create/advancements/ejector_maxed.json +3300ee54dc1e9d04fd13a11c971e046d9db24e10 data/create/advancements/encased_fan.json +fb61193b9d02d1fd595ac99721812a59dc7c7c29 data/create/advancements/extendo_grip.json +845a6c63b26a238c5ff82f37ca25ef5a8f7c11fc data/create/advancements/extendo_grip_dual.json +46950345e76ef2d98bf3ea737530976781901a0f data/create/advancements/fan_processing.json +8f0f884dbc6eb94e03ffae374105c7100a073d85 data/create/advancements/fist_bump.json +5e39ecb68037ade25897dff1dc419065752d2c43 data/create/advancements/foods.json +7c72b9440b3f0525658b5c12d46a56d48521ca93 data/create/advancements/funnel.json +1dcfded7b20756ad6dfd4a6c4d0106c343e9e17e data/create/advancements/glass_pipe.json +94a4e1ac38935288cc84f4b374cf1553ed39b2b0 data/create/advancements/hand_crank_000.json +dc1bbb3fd9be29bfa8a4393fde7f690cba1e1b7d data/create/advancements/haunted_bell.json +10fd4ddc4e46c3a6cf018c5f6b5ec230edf980e1 data/create/advancements/honey_drain.json +e52e298394a1980c0967a2ccdbccc30e9329bac2 data/create/advancements/hose_pulley.json +6b4d211fa9d3ae86eec1888ab2519911abab7918 data/create/advancements/hose_pulley_lava.json +9362f1c234c887cf15d220138e6f0cef020189cd data/create/advancements/lava_wheel_00000.json +76d8cc5398c3054e9b588f0f41500c7214294cf6 data/create/advancements/linked_controller.json +f7adf4bee54f3faaf3e0de46da495cdc2dcdc04e data/create/advancements/long_train.json +691a69a0ff6ead80307f406e4be10952dafb4e6d data/create/advancements/long_travel.json +d83e945f30bb301808bbbd49dc3e60251992d0ff data/create/advancements/mechanical_arm.json +d89152d4f3c992b892e8ec4bef03605ef20c1520 data/create/advancements/mechanical_crafter.json +5a2de56341fbcf93a12cbd007f575fa078b074ca data/create/advancements/mechanical_mixer.json +6d09ace1e2706549b02bdac3e8475c1a01199a31 data/create/advancements/mechanical_press.json +5b50f84f2b697d630294e2b8db8b60dba84a1011 data/create/advancements/mechanical_pump_0.json +8adbdf6e0b0df40fed5ecfc5a5b13ca6a075be83 data/create/advancements/millstone.json +82a61db27464e2ede2b2079276cf69bb465a5085 data/create/advancements/musical_arm.json +a7119c747a2c16d93b9df669f80ccb3863a331ce data/create/advancements/pipe_organ.json +8118ffd53c264f535517936a0fc720a7850e8907 data/create/advancements/portable_storage_interface.json +826768f46254a9fc0ea048e600511cab4a0a781f data/create/advancements/potato_cannon.json +b780e2fddc7ae11b751d3518baba4b4e3da44258 data/create/advancements/potato_cannon_collide.json +f21957fd6896aa1c33589e36d7600b946cd578a2 data/create/advancements/precision_mechanism.json +910d95a883c8d9dc73aaa1488ba4a853bf0682c0 data/create/advancements/pulley_maxed.json +c932c3679216e2434f74581ecd607d9235b3f6a1 data/create/advancements/red_signal.json +368560279056ecce53c53cb1d322fd30e95d26bc data/create/advancements/root.json +94c985d42f209c159610cdb8f1c21cd052ef75e8 data/create/advancements/rose_quartz.json +ed3c3958f5036e36ca33e4868d2159711eead948 data/create/advancements/saw_processing.json +1ee3fe132e7dc8534d0569d556bf05883d674147 data/create/advancements/self_deploying.json +bff5bf09f1eafbcc3d7b21c01c54b352ac408cad data/create/advancements/shifting_gears.json +a1e44c8ff2b7ed96d4b76e6122fd41fa528826b1 data/create/advancements/speed_controller.json +8277bdddc6fbede64a50c4cf9bf75fec9dca2ab3 data/create/advancements/spout.json +28c7898ee0dad051744b95c0154744caf025e849 data/create/advancements/steam_engine.json +b3c18b1d41126d135318769f83ccc6fe51da2c54 data/create/advancements/steam_engine_maxed.json +742b75d31271e5f58ba2572606a10a43db8acea1 data/create/advancements/steam_whistle.json +90954d173a67584221ee02114971d515247607ae data/create/advancements/stressometer.json +b77e7b17c397cc88ca2f75f68c52d60488ece97a data/create/advancements/stressometer_maxed.json +cc75b35e53137d229896c334f09ebc5930f56307 data/create/advancements/sturdy_sheet.json +4794a7d7ea140333809bb78b77a30997bbb606bd data/create/advancements/super_glue.json +cbc796a4bd3dd9bb3e66ab437b27fcf5a1fdc050 data/create/advancements/track_0.json +916a9a75900fa36aa3c5422d4e35eeeb57d20f61 data/create/advancements/track_crafting_factory.json +4938c2be415c15a70a41570bbb49f772eaed5af0 data/create/advancements/track_signal.json +797f76512083d562549a20e9abc679846cce885f data/create/advancements/train.json +227f401a440746c02ce0713c44b4cc623307e014 data/create/advancements/train_casing_00.json +f1645a6cfdfcade5366d9f3be501e596b1600330 data/create/advancements/train_crash.json +484986302e8c1708064b5dbb5ce35e443f6151d7 data/create/advancements/train_crash_backwards.json +22c39846ee59d7c71468fe795fa354cb0a4aafd9 data/create/advancements/train_portal.json +ba272fd5361c2d20d4ebd67c30655fe484bdf862 data/create/advancements/train_roadkill.json +1aeadc6754b7361c07314c5a95248277e6f67221 data/create/advancements/train_whistle.json +0915f1716b2e6953267a58a45a3b7884dab9efbf data/create/advancements/water_supply.json +17694ab38a30b5a5a58c572d154c475f4efb07cd data/create/advancements/water_wheel.json +7205a7c379c3d2fa2aeeab26c3438ab8c8906e74 data/create/advancements/windmill.json +bd04b6faa2a075921d4c55bb1497b626d6ee045f data/create/advancements/windmill_maxed.json +f9234a1999c121a4758d049b88b1de38460a359e data/create/advancements/wrench_goggles.json diff --git a/src/generated/resources/.cache/499d9d953ee69b539ff4dd4c95a6cbd849f63f67 b/src/generated/resources/.cache/499d9d953ee69b539ff4dd4c95a6cbd849f63f67 index 65fda67dd..96f56121b 100644 --- a/src/generated/resources/.cache/499d9d953ee69b539ff4dd4c95a6cbd849f63f67 +++ b/src/generated/resources/.cache/499d9d953ee69b539ff4dd4c95a6cbd849f63f67 @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.2891201 Create Train Hat Information +// 1.20.1 2024-10-09T12:24:59.1824022 Create Train Hat Information be16d47aa64e673b1107a36ce06475016e316fca assets/minecraft/train_hat_info/axolotl.json b8ae6d9c8014439f4049622e0d6e79b9d6716260 assets/minecraft/train_hat_info/bat.json 5053a6c9fb412dfac1bf17eb0f57f9fd314198e4 assets/minecraft/train_hat_info/bee.json diff --git a/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 b/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 index cb676b15e..0a84a5228 100644 --- a/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 +++ b/src/generated/resources/.cache/6ec3b5a261c9ae3df674f7595dc66530ce54feb9 @@ -1,4 +1,4 @@ -// 1.19.2 2024-10-09T12:03:41.4004239 Create's Mechanical Crafting Recipes +// 1.20.1 2024-10-09T12:24:59.2726698 Create's Mechanical Crafting Recipes f076d64d9f30709bed34775136c9241097b28aa9 data/create/recipes/mechanical_crafting/crushing_wheel.json 694dca9dcff246bb7f560b3304fcc244c53217d5 data/create/recipes/mechanical_crafting/extendo_grip.json c03bc27f537e2d6531438bf58a17d977a7e16c7b data/create/recipes/mechanical_crafting/potato_cannon.json diff --git a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 index 9546884bb..52e3dc4f3 100644 --- a/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 +++ b/src/generated/resources/.cache/82992cbf8f2794d83ac94034835eac0acd7915b9 @@ -1,492 +1,492 @@ -// 1.19.2 2024-10-09T12:03:41.444307 Create's Standard Recipes -6800157e64a8e1322bad29199c30cf3334cc69f7 data/create/advancements/recipes/building_blocks/blasting/ingot_aluminium_compat_ic2.json -ff6a181c36dba79ed4fe7945823f7529bd7913fe data/create/advancements/recipes/building_blocks/blasting/ingot_aluminum_compat_immersiveengineering.json -106354a9eb7379a53eae40a1775f43bf67225919 data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_immersiveengineering.json -bb548877a89f41e1bdfe987dd3ec05b6023daa81 data/create/advancements/recipes/building_blocks/blasting/ingot_lead_compat_mekanism.json -960ef229b3d284fbc9001e00145ef2a01df38525 data/create/advancements/recipes/building_blocks/blasting/ingot_nickel_compat_immersiveengineering.json -b0241594379674d8da9f84bed32e44fd46dabc28 data/create/advancements/recipes/building_blocks/blasting/ingot_osmium_compat_mekanism.json -d253b1a2e0227c636f4fcbc681338167754544b9 data/create/advancements/recipes/building_blocks/blasting/ingot_silver_compat_ic2.json -9a2dad54bbd339741815800ac0b2004d5e159a34 data/create/advancements/recipes/building_blocks/blasting/ingot_silver_compat_immersiveengineering.json -8e9871befad68d6bfbcec4d5b5fed49b3ac5c62a data/create/advancements/recipes/building_blocks/blasting/ingot_tin_compat_ic2.json -af6c91d27c21c75dd79c56f3e20eb98bace21ee5 data/create/advancements/recipes/building_blocks/blasting/ingot_tin_compat_mekanism.json -86155b637bb551cf6ea3977b26f0822f2e9c87cf data/create/advancements/recipes/building_blocks/blasting/ingot_uranium_compat_ic2.json -7a92e711d29d749348dca778bd65a7a43c2f3e90 data/create/advancements/recipes/building_blocks/blasting/ingot_uranium_compat_immersiveengineering.json -80814471952348a0fb5bcd298c30e22a20f5b343 data/create/advancements/recipes/building_blocks/blasting/ingot_uranium_compat_mekanism.json -bb28adcf292b4e0ae49de446b55c042dd966be51 data/create/advancements/recipes/building_blocks/blasting/lead_ingot_compat_oreganized.json -8b5c113733ed0c08ab823d98854a60ab3c144b3d data/create/advancements/recipes/building_blocks/blasting/lead_ingot_compat_thermal.json -1007a146a88c5a7adf5b5017edf570032beaa8ae data/create/advancements/recipes/building_blocks/blasting/nickel_ingot_compat_thermal.json -4148a110a61461fce95d27d186194edd8f89349a data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_galosphere.json -94e9803f4478d3e6e718b3c4fb5913a1d0227b30 data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_iceandfire.json -bee122e41d30ebaca7f773063b41a8cef3568b52 data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_oreganized.json -ac1adc1221ae5e6f5c6a9a6f6b1d28eb51756207 data/create/advancements/recipes/building_blocks/blasting/silver_ingot_compat_thermal.json -34efb445714c7e1ff6ab0dbefb58ce946c565209 data/create/advancements/recipes/building_blocks/blasting/tin_ingot_compat_thermal.json -f0570274cf54c73b95d9665ea17432b63b2da525 data/create/advancements/recipes/building_blocks/smelting/glass_from_framed_glass.json -7c5a7a087bc6644b0944fd37211d4e69a863a8c2 data/create/advancements/recipes/building_blocks/smelting/glass_from_horizontal_framed_glass.json -e83398ba06339e3bd559b839c725de4f7535be5e data/create/advancements/recipes/building_blocks/smelting/glass_from_tiled_glass.json -94ebf2a541daade4b3b6a50e13c6306418025c77 data/create/advancements/recipes/building_blocks/smelting/glass_from_vertical_framed_glass.json -d84a85b7d72b12b33662773a6563309db89860cf data/create/advancements/recipes/building_blocks/smelting/ingot_aluminium_compat_ic2.json -cf1480247e325842aca707d2cfd1ce58aa922f30 data/create/advancements/recipes/building_blocks/smelting/ingot_aluminum_compat_immersiveengineering.json -fe585f32461cd784fda4832d727985a0e20e7cb3 data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_immersiveengineering.json -847d5dc5141fd0cea5763466c092507771909054 data/create/advancements/recipes/building_blocks/smelting/ingot_lead_compat_mekanism.json -9f25d73ad5aa1ee47a58ad25232a24399ed8c370 data/create/advancements/recipes/building_blocks/smelting/ingot_nickel_compat_immersiveengineering.json -a3366fc5504f42470bee56fb77255041c7f036a6 data/create/advancements/recipes/building_blocks/smelting/ingot_osmium_compat_mekanism.json -b33f3cb3448da1ec967589810791472a5ae5c8b5 data/create/advancements/recipes/building_blocks/smelting/ingot_silver_compat_ic2.json -ac28e15859e2e918342bc7498ca27debadcb8886 data/create/advancements/recipes/building_blocks/smelting/ingot_silver_compat_immersiveengineering.json -209421ceb639010cb2efc58bc53085a7d6a9e547 data/create/advancements/recipes/building_blocks/smelting/ingot_tin_compat_ic2.json -3b0ce9691e7b9606d81d4cab6a60e37a39de1352 data/create/advancements/recipes/building_blocks/smelting/ingot_tin_compat_mekanism.json -cabeb8637db18c90b16686c5026f93a1b2194200 data/create/advancements/recipes/building_blocks/smelting/ingot_uranium_compat_ic2.json -e8b886a019146ac897e7bd8f606c403c02ae7608 data/create/advancements/recipes/building_blocks/smelting/ingot_uranium_compat_immersiveengineering.json -40ad78682d7ca04d714cb47253f0edd90c566ad9 data/create/advancements/recipes/building_blocks/smelting/ingot_uranium_compat_mekanism.json -1b78f567d5ac6eb557bc34335915ef8e62cad5ef data/create/advancements/recipes/building_blocks/smelting/lead_ingot_compat_oreganized.json -83e01b2c6edfd14f2c5f8eb786819da27dbf9780 data/create/advancements/recipes/building_blocks/smelting/lead_ingot_compat_thermal.json -824767e900b6cd06bc84a2a9d1ddfc3a8d687e82 data/create/advancements/recipes/building_blocks/smelting/nickel_ingot_compat_thermal.json -61c94661f0ba600c839f54962c33ee9f87a2bfd6 data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_galosphere.json -34e5980691f3511b9a9dadc01932296db8efcba7 data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_iceandfire.json -e7eccd5204b735c097e73e3872779308cd63c66e data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_oreganized.json -170d4d6ecd99d99e1d670e206c908cc988b72d01 data/create/advancements/recipes/building_blocks/smelting/silver_ingot_compat_thermal.json -a1be6232f3d3a4b02ff9417c2cb5203d228206be data/create/advancements/recipes/building_blocks/smelting/tin_ingot_compat_thermal.json -0cbe8ac095dde3586eae7e4363b3886ffd0c463c data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_crushed.json -7afe4a5f978a1c3a4224ca9d71b88f5e92e4a74b data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_ore.json -6e324b38cc18b00d999935f8d6dde08ee14ef276 data/create/advancements/recipes/create.base/blasting/zinc_ingot_from_raw_ore.json -9678042d96351f38df2dd538181c711b7319ac4e data/create/advancements/recipes/create.base/crafting/appliances/attribute_filter_clear.json -51161cf88410ddebf4ae77c6823b2311bf837908 data/create/advancements/recipes/create.base/crafting/appliances/clipboard.json -bbfc8ec65e608398aacd644d576655667a9b6999 data/create/advancements/recipes/create.base/crafting/appliances/clipboard_clear.json -9275b0a353b86702dc15cf9ead5c14a4f6d412a2 data/create/advancements/recipes/create.base/crafting/appliances/copper_backtank.json -a39d1bbd313ee0afdf77ad81ab492c93c41a0b63 data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_boots.json -d4950299ae8ecd5a3ea988068bd7df7c3c930234 data/create/advancements/recipes/create.base/crafting/appliances/copper_diving_helmet.json -aba81978b5805f48cd718df2dd80be4f0875f3c3 data/create/advancements/recipes/create.base/crafting/appliances/crafting_blueprint.json -db851de3567c71d078a186afb78f356bd98c5b24 data/create/advancements/recipes/create.base/crafting/appliances/dough.json -1af6bbdd5acd6b7fa0a25a4b90f6aaafd5673195 data/create/advancements/recipes/create.base/crafting/appliances/filter_clear.json -020c48f351bb8f98ff58e0a44c841cfcbcd2e647 data/create/advancements/recipes/create.base/crafting/appliances/linked_controller.json -a4fdf3d783049c8f8a8dcaf168616e085e1bbc71 data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank.json -d3409e2449f606794a6b40a9789d53c3619d2a15 data/create/advancements/recipes/create.base/crafting/appliances/netherite_backtank_from_netherite.json -4b8fb0fdc52cb06b15822f76652771e9633f7e38 data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots.json -d637d8b12ef56164dd4360720d59968ab87ab4a3 data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_boots_from_netherite.json -2a23251616c0231e235cfa1f96ed02d53b5c8a9b data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet.json -06c8467d5a3e1dad78c9779db91fb16fa1431a26 data/create/advancements/recipes/create.base/crafting/appliances/netherite_diving_helmet_from_netherite.json -4f541c22efef5ed3131364cf0609c7fced8f157c data/create/advancements/recipes/create.base/crafting/appliances/schedule_clear.json -702bbec6bc2d272dac2bfe7558b6bc1ef70f4ccb data/create/advancements/recipes/create.base/crafting/appliances/tree_fertilizer.json -17c1e7a8ce5b54d00ed5a927d2f5d6e84cd73383 data/create/advancements/recipes/create.base/crafting/curiosities/brown_toolbox.json -0b4fd2cf9ab5d50e2d1f3466e471dc8599cb35d6 data/create/advancements/recipes/create.base/crafting/curiosities/minecart_coupling.json -ccff47a9ff3cc5b101e758aa5de747af24c7617e data/create/advancements/recipes/create.base/crafting/curiosities/peculiar_bell.json -101605853b71bcb7ef0388f329dffe35549df83e data/create/advancements/recipes/create.base/crafting/kinetics/adjustable_chain_gearshift.json -13fd40f039ec9ba07b25ba94ace23f7d0ba61b47 data/create/advancements/recipes/create.base/crafting/kinetics/analog_lever.json -815d392dde95d1b25792c4e4ddfe50dd3ccc687d data/create/advancements/recipes/create.base/crafting/kinetics/attribute_filter.json -e0367cd3c396d99c7ffefc8748d1806b27cba1c2 data/create/advancements/recipes/create.base/crafting/kinetics/basin.json -77585206954c25c4c1b8c56d72e6f4cc6d639415 data/create/advancements/recipes/create.base/crafting/kinetics/belt_connector.json -96fddc180a85bce7f38db24637879a1d3959128a data/create/advancements/recipes/create.base/crafting/kinetics/brass_hand.json -0bd6b4c848e848262d21e0066634657e166ceba9 data/create/advancements/recipes/create.base/crafting/kinetics/cart_assembler.json -3c5607faec15cee9aa0199ca41f707e54e293d44 data/create/advancements/recipes/create.base/crafting/kinetics/chute.json -b66fea562c25d0f685271139a6c4a11f01d381eb data/create/advancements/recipes/create.base/crafting/kinetics/clockwork_bearing.json -96b037ef1cf8c4f01d3320d96da56866308fef65 data/create/advancements/recipes/create.base/crafting/kinetics/clutch.json -add1b00551b8bd58b22370cdc45483e1ea8ccd80 data/create/advancements/recipes/create.base/crafting/kinetics/cogwheel.json -405071067037023359144b5eff2a990824551959 data/create/advancements/recipes/create.base/crafting/kinetics/contraption_controls.json -fb224fd7b448c53434d5c65c2114e6041712532f data/create/advancements/recipes/create.base/crafting/kinetics/controller_rail.json -635ce0ca8b8a2bc5906adffea10819ded518c781 data/create/advancements/recipes/create.base/crafting/kinetics/controls.json -ad325144aec14c2007a858071ac3444b6c2d2f70 data/create/advancements/recipes/create.base/crafting/kinetics/copper_valve_handle.json -a22c33e22a5533398465438501d2ba92135248e0 data/create/advancements/recipes/create.base/crafting/kinetics/copper_valve_handle_from_others.json -08d35f93d0be26ef003648d4d9e95fb6c88c132d data/create/advancements/recipes/create.base/crafting/kinetics/crafter_slot_cover.json -8c28c154cf4db2a6e5c6674a74dd2de1109456e5 data/create/advancements/recipes/create.base/crafting/kinetics/cuckoo_clock.json -6a5f75bb1b5388548471cd19b0541d5994a968d7 data/create/advancements/recipes/create.base/crafting/kinetics/deployer.json -874a2bb3627a13b812b7d509a4341cc486173034 data/create/advancements/recipes/create.base/crafting/kinetics/depot.json -484d3187f638fe6ad2832390faa71d084bf9965c data/create/advancements/recipes/create.base/crafting/kinetics/display_board.json -be4cf32b3e65ddd71ff386cf25d0dfb608c96b92 data/create/advancements/recipes/create.base/crafting/kinetics/elevator_pulley.json -d582587d3b2449468d77bc0017ca22538c5d04a8 data/create/advancements/recipes/create.base/crafting/kinetics/empty_blaze_burner.json -a8c4c201c452f1cc2135ab241ef08811627759d9 data/create/advancements/recipes/create.base/crafting/kinetics/encased_chain_drive.json -daa737129d6fad1eab2f6c7c24d420632cf686fc data/create/advancements/recipes/create.base/crafting/kinetics/encased_fan.json -b0f042253e850ed7bad7596ae0a4770d567b23a8 data/create/advancements/recipes/create.base/crafting/kinetics/filter.json -1202322f2b49e66dbee08ad1d9ba2142a7b1687b data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe.json -94ef61f94c1a85d38fcfe4e86feacc06879be033 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_pipe_vertical.json -769f42c4f28c6e78a2254a25fc6ad6c4d34aca3c data/create/advancements/recipes/create.base/crafting/kinetics/fluid_tank.json -1f76f19963cf05302933d17ec0c25eb7a0d0ba79 data/create/advancements/recipes/create.base/crafting/kinetics/fluid_valve.json -ab76967977a75cd2abad10c1350194e653a70d3a data/create/advancements/recipes/create.base/crafting/kinetics/flywheel.json -fa379bdc26064fafff3ccb84e705cdca532e9044 data/create/advancements/recipes/create.base/crafting/kinetics/gantry_carriage.json -9b853ce1ba4456e5a186663b6107cc48689f163a data/create/advancements/recipes/create.base/crafting/kinetics/gantry_shaft.json -c34fc4606a9196d954e4630ab88620d5e84a5292 data/create/advancements/recipes/create.base/crafting/kinetics/gearbox.json -315e827cc63a842cf04603bdeeef5289bd761549 data/create/advancements/recipes/create.base/crafting/kinetics/gearboxfrom_conversion.json -1aecf0c5a421245627872e3a2dfff663a25e3e34 data/create/advancements/recipes/create.base/crafting/kinetics/gearshift.json -2f37fd40c1d6b0bb4196a501ac72284922cac138 data/create/advancements/recipes/create.base/crafting/kinetics/goggles.json -a3396e2e838c8b1719ed65e4195afa09c0286e52 data/create/advancements/recipes/create.base/crafting/kinetics/hand_crank.json -7b4f82e164b6b86b7b6613587aea57b015ab9ff6 data/create/advancements/recipes/create.base/crafting/kinetics/hose_pulley.json -27619361a9b229791449e9d4954ed0890156efb7 data/create/advancements/recipes/create.base/crafting/kinetics/item_drain.json -ce49f3e4c85b36298c764e28a14f328194530e6e data/create/advancements/recipes/create.base/crafting/kinetics/item_vault.json -38c97a8961dc55b007fc675efaee19be03ba70e9 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel.json -d411a67fc6d30096ecf8768a6fc105aef796c1b2 data/create/advancements/recipes/create.base/crafting/kinetics/large_cogwheel_from_little.json -364f6ab226c5079f68376f2fe85d70b459203827 data/create/advancements/recipes/create.base/crafting/kinetics/large_water_wheel.json -66b12ce8935b3b4c2baecad22121b770987e0cbe data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassis.json -03541b64f2b6978ec10c71323012b34e80b32a37 data/create/advancements/recipes/create.base/crafting/kinetics/linear_chassisfrom_conversion.json -6609c0187d3d9bb0cdfc82019d859930fcd23b3a data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_arm.json -691aacd36d35b3f2771757e7231f89fb12d3c289 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_bearing.json -da010ac963d572e4856d89a00388881cf7891cc6 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_crafter.json -0cc038b1264ad2a437b145fbb8ad10b91def462b data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_drill.json -53154b62cdbf5ad89d759296fb1d6bade8bbab36 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_harvester.json -c9834e76909bd803f6d8faa5badb4051cd1f4c46 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_mixer.json -7cefbd3aeb31dcd313a4dd09850016096a556168 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_piston.json -53de4ed3248e562ff2c1ac858b7aa0d4c77f5071 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_plough.json -4a4ef72828a33cc31198801421e6e271c18e13f6 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_press.json -bea54842d2a942c8bbd463acaa2af06a674216c9 data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_pump.json -2fc222814bcd29a2d238c73e4b1540372711afaf data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_roller.json -f2e0d416f067ec3b9da478d9006b12b02ea053ab data/create/advancements/recipes/create.base/crafting/kinetics/mechanical_saw.json -92b97be9722c87ed607458c658da71193f421618 data/create/advancements/recipes/create.base/crafting/kinetics/metal_bracket.json -818678f975ae3c20054eadd28f7cd78a83987b8a data/create/advancements/recipes/create.base/crafting/kinetics/millstone.json -472fae580e969a2df3f2796a9593bb30e95147f3 data/create/advancements/recipes/create.base/crafting/kinetics/mysterious_cuckoo_clock.json -343e0c25689652bfac630e4c716ad1c047922209 data/create/advancements/recipes/create.base/crafting/kinetics/nixie_tube.json -463903d7e8612ff5d66ecd827b3c06fcd67b3d94 data/create/advancements/recipes/create.base/crafting/kinetics/nozzle.json -6abd1d4e6185039a83c2c1f09af511229cd7c6f4 data/create/advancements/recipes/create.base/crafting/kinetics/piston_extension_pole.json -09ae58db7f9335b94eacdc1ac65f328d4e74b296 data/create/advancements/recipes/create.base/crafting/kinetics/placard.json -a6518e2e35ce01e7e65b0cf8a95ced88482d7121 data/create/advancements/recipes/create.base/crafting/kinetics/portable_fluid_interface.json -46cfd0dfc5f94b8dd3f879660f580f8797192e9a data/create/advancements/recipes/create.base/crafting/kinetics/portable_storage_interface.json -b296ad4df0631fdc1f2bce405d5618fc80a8c327 data/create/advancements/recipes/create.base/crafting/kinetics/propeller.json -9f1e5525e24b0d03e2536e5555359e5e3c7f2286 data/create/advancements/recipes/create.base/crafting/kinetics/radial_chassis.json -e24541eaeeb7d40c1f82c2d2c663e35e77633be5 data/create/advancements/recipes/create.base/crafting/kinetics/rope_pulley.json -9aa077afe33c25eea88b879ad87e6e04092b275c data/create/advancements/recipes/create.base/crafting/kinetics/rose_quartz_lamp.json -f5a30e6fdd9feaa6debe5d713419e5353d243b5b data/create/advancements/recipes/create.base/crafting/kinetics/rotation_speed_controller.json -784a456abf36cc407f440e9354827e6cb6e5d4d6 data/create/advancements/recipes/create.base/crafting/kinetics/sail_framefrom_conversion.json -81e459c334d7645b1cd1777af57576029949bb0b data/create/advancements/recipes/create.base/crafting/kinetics/schedule.json -bd9bad79f220ec42b1bb3f56041a9390f4923ba9 data/create/advancements/recipes/create.base/crafting/kinetics/secondary_linear_chassisfrom_conversion.json -eeafd91b680ec02f5bc45302924f6f3fd5c706ef data/create/advancements/recipes/create.base/crafting/kinetics/sequenced_gearshift.json -3e407ded7ff0dde48cbc22b8db5f48743bf04c94 data/create/advancements/recipes/create.base/crafting/kinetics/shaft.json -70807bda145cbba1db92b84ec40e1ba53b8b022c data/create/advancements/recipes/create.base/crafting/kinetics/smart_chute.json -1f47523894736ea827e9f244c5107e6673b0d273 data/create/advancements/recipes/create.base/crafting/kinetics/smart_fluid_pipe.json -162d5df15a994c6af6ed2835dea82efe0062f095 data/create/advancements/recipes/create.base/crafting/kinetics/speedometer.json -a8e99cadf16a16b137afca1b13f83d9e181c0784 data/create/advancements/recipes/create.base/crafting/kinetics/speedometerfrom_conversion.json -a81deb7155fa93e3d76c034e28aa7a5c0c2778fe data/create/advancements/recipes/create.base/crafting/kinetics/spout.json -d908d49fd532f49068d96f4dd5129c8a74b84c47 data/create/advancements/recipes/create.base/crafting/kinetics/steam_engine.json -172c92e5915bc9014a746d1c036dd450abfb3195 data/create/advancements/recipes/create.base/crafting/kinetics/steam_whistle.json -ac12278d65d59b168086867c69354848f906316c data/create/advancements/recipes/create.base/crafting/kinetics/sticker.json -4a74c1de70258281987a0fedc03437812c440376 data/create/advancements/recipes/create.base/crafting/kinetics/sticky_mechanical_piston.json -5ae5808b464ee7b9e810c1dc81ef945a28520c27 data/create/advancements/recipes/create.base/crafting/kinetics/stressometerfrom_conversion.json -70c16dcff438b8009524a247ba6f8ce17c68ef4f data/create/advancements/recipes/create.base/crafting/kinetics/super_glue.json -f7ec77491cba04c96a5df0f3a9b66dfdeecd6a67 data/create/advancements/recipes/create.base/crafting/kinetics/track_observer.json -f24315de4ad61c85094c1620d47ccc02f94e4498 data/create/advancements/recipes/create.base/crafting/kinetics/track_observer_from_other_plates.json -eb90657a95c9aecdc3b8ab9aeeb6abe5ccb7ff76 data/create/advancements/recipes/create.base/crafting/kinetics/track_signal.json -78cf68d5afca01ea37e2d32f54e655ec87924be1 data/create/advancements/recipes/create.base/crafting/kinetics/track_station.json -3fa26c6b2a5ef120aa47b35f7d9eb06fec090149 data/create/advancements/recipes/create.base/crafting/kinetics/turntable.json -a7822118f8980a29fdaf9e664e2470fade95b736 data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearbox.json -babadcfb9adc3527e03e8f8db57a34cacfffa6a5 data/create/advancements/recipes/create.base/crafting/kinetics/vertical_gearboxfrom_conversion.json -0fa99ddc934336fb3d40a69a9ed461dba1d6b99e data/create/advancements/recipes/create.base/crafting/kinetics/water_wheel.json -6797fd44ff94f444fefde51402068df41b07b35f data/create/advancements/recipes/create.base/crafting/kinetics/weighted_ejector.json -50fe4d7138e7fb2845be8662b4ef5a75fa3c2665 data/create/advancements/recipes/create.base/crafting/kinetics/whisk.json -e3192f97e211bb8a091ab02c9e53e7b901f1efbd data/create/advancements/recipes/create.base/crafting/kinetics/white_sail.json -ea80606f44b28da43ffcd0d8b0d775f4d135d7de data/create/advancements/recipes/create.base/crafting/kinetics/white_sailfrom_conversion.json -c60164c566ae69770bca1298827f1b9cd29b10b6 data/create/advancements/recipes/create.base/crafting/kinetics/windmill_bearing.json -88bab58867cbd501b0362695540abfb0c224c47e data/create/advancements/recipes/create.base/crafting/kinetics/wooden_bracket.json -dd61958220601f34fdacc349f3caf286d450896e data/create/advancements/recipes/create.base/crafting/kinetics/wrench.json -ddd41210dfa2d30b3872c9798b677746bc4e5426 data/create/advancements/recipes/create.base/crafting/logistics/andesite_funnel.json -e7820ca532f075b43b4fea791ad64ab290f25bdc data/create/advancements/recipes/create.base/crafting/logistics/andesite_tunnel.json -79e47eb39470f604b3f26ef8af82d3e64611514e data/create/advancements/recipes/create.base/crafting/logistics/brass_funnel.json -756a724f71c5946017b6718eb93bff7fe73d4f7f data/create/advancements/recipes/create.base/crafting/logistics/brass_tunnel.json -2302e30a226162adb98fccc9e0916203e6744aab data/create/advancements/recipes/create.base/crafting/logistics/content_observer.json -f1e6f8e73156edebafe619144e82e01c0b5ec93e data/create/advancements/recipes/create.base/crafting/logistics/display_link.json -f33284d7166e5c6e3adf1b6dca662eb97636b939 data/create/advancements/recipes/create.base/crafting/logistics/powered_latch.json -06a42ee83527fdceb7d870b0e4a67245453a2c34 data/create/advancements/recipes/create.base/crafting/logistics/powered_toggle_latch.json -2116d36fd16e586f9e4b8cdcc3e3428ad71cedb8 data/create/advancements/recipes/create.base/crafting/logistics/pulse_extender.json -c7c6ca10962f5e42da5319841fbf2866cca30dd3 data/create/advancements/recipes/create.base/crafting/logistics/pulse_repeater.json -52ad675c3aaee020376264f9580fcadf12655b21 data/create/advancements/recipes/create.base/crafting/logistics/redstone_contact.json -9d7e5cf97bb11473b78d390e936792d9d3c1c276 data/create/advancements/recipes/create.base/crafting/logistics/redstone_link.json -a057a1729592691b40f4f1f909d9109565deb28f data/create/advancements/recipes/create.base/crafting/logistics/stockpile_switch.json -b350925f30c7309038c7f33ee81bda6ada6c4794 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy.json -4efa2e6c87e853fee8e9c1a3bc4924add974c35e data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_block.json -58b40049eee5cce2c5d49a0add95732eb49098d0 data/create/advancements/recipes/create.base/crafting/materials/andesite_alloy_from_zinc.json -e8db20956f6bbf0a895e3d790672ae52d198fc7a data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_compacting.json -909a449ee9ec80894ba93df9be40dc3b87d13d69 data/create/advancements/recipes/create.base/crafting/materials/brass_ingot_from_decompacting.json -d2823e614d4a333f725d3dce3e543f047f3adbcb data/create/advancements/recipes/create.base/crafting/materials/brass_nugget_from_decompacting.json -b9f0d315a8a3a537f05ec95361087fbb52c40825 data/create/advancements/recipes/create.base/crafting/materials/copper_nugget.json -2da087da9ad33e060e8122e260474d5a2ca3575c data/create/advancements/recipes/create.base/crafting/materials/electron_tube.json -494ff67507741956a0f02f73f341b192c66a92f4 data/create/advancements/recipes/create.base/crafting/materials/experience_nugget_from_block.json -43333df116133be43c8c164ddd611e2f74e5e540 data/create/advancements/recipes/create.base/crafting/materials/raw_zinc.json -e59ad68feb5898d04394970ba9d57566b9c19d7e data/create/advancements/recipes/create.base/crafting/materials/red_sand_paper.json -43dc5381b6df36905e086e63ed497f36eff8e45d data/create/advancements/recipes/create.base/crafting/materials/rose_quartz.json -2a25ea763292539970c354073b267e106a33fd0e data/create/advancements/recipes/create.base/crafting/materials/sand_paper.json -d4cc3d549e64c259c5a8cd5b7afa4b0cd28cbe38 data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_compacting.json -ca5777a2ac86c304a09adeaa6fd8ba654fa859c7 data/create/advancements/recipes/create.base/crafting/materials/zinc_ingot_from_decompacting.json -cedbd75bbe4fa7fd0504183e284a5099bc4db39b data/create/advancements/recipes/create.base/crafting/materials/zinc_nugget_from_decompacting.json -ce2986087f7be38db504c202876c8a3c2c885555 data/create/advancements/recipes/create.base/crafting/schematics/empty_schematic.json -4180e78185f03013d8affe9d54fc761280abf8d3 data/create/advancements/recipes/create.base/crafting/schematics/schematicannon.json -8379bfe85932f3681f4a59061a1c76192c565c3c data/create/advancements/recipes/create.base/crafting/schematics/schematic_and_quill.json -ae2e2c9a612d818eab78f140799159fbc5ec0159 data/create/advancements/recipes/create.base/crafting/schematics/schematic_table.json -193b32e70e3f8439cb363a19262462ad1101c484 data/create/advancements/recipes/create.base/crafting/tree_fertilizer.json -2181cb41ab36db7d73514cfb80feb5b5ec67f56a data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_crushed.json -de8a70a51962a8a79c67cc8d71d9855b7ec68f12 data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_ore.json -084b22266f828de9669c73182b10ca4f6ceb42c4 data/create/advancements/recipes/create.base/smelting/zinc_ingot_from_raw_ore.json -9e6d2bd857680a6c6371deaa0c60a492c86225e7 data/create/advancements/recipes/create.palettes/crafting/kinetics/andesite_door.json -c5f9897bf57953bf1ac6c4c2a2f0a9d3c95e655b data/create/advancements/recipes/create.palettes/crafting/kinetics/brass_door.json -769efe6975d4266342f7fd6b1003d1352fb67c7b data/create/advancements/recipes/create.palettes/crafting/kinetics/copper_door.json -fce50c246fb7cc5dad19db7602ccc71ba13403a8 data/create/advancements/recipes/create.palettes/crafting/kinetics/framed_glass_door.json -d32c2625d6dd15ad1978211c41521887f95e7577 data/create/advancements/recipes/create.palettes/crafting/kinetics/framed_glass_trapdoor.json -80197e7c951bd45f532af7c952c6c989433433de data/create/advancements/recipes/create.palettes/crafting/kinetics/metal_girder.json -77f181550c780925243cc268d29aceebfba52915 data/create/advancements/recipes/create.palettes/crafting/kinetics/train_door.json -d74de1be1e383c3d5814bd7e42cc0a60ea75e30e data/create/advancements/recipes/create.palettes/crafting/kinetics/train_trapdoor.json -6d547e7c3dad06dd4d3ff64d0aac380683d26a11 data/create/advancements/recipes/create.palettes/crafting/materials/andesite_alloy_block.json -e35662919f851ca1c27b56cf71e61cce611a00d7 data/create/advancements/recipes/create.palettes/crafting/materials/brass_block_from_compacting.json -80edd0fbd082a4b75814f812c635733295206549 data/create/advancements/recipes/create.palettes/crafting/materials/experience_block.json -2d34f50774357f9ac8a4ae2e23fb668757e09daa data/create/advancements/recipes/create.palettes/crafting/materials/raw_zinc_block.json -a5130418a2b8f2354fe9fd77e7c83b26e2892330 data/create/advancements/recipes/create.palettes/crafting/materials/rose_quartz_tilesfrom_conversion.json -30522b55773b9f94b46345478efeff4426f88757 data/create/advancements/recipes/create.palettes/crafting/materials/small_rose_quartz_tilesfrom_conversion.json -26928e1e0af9e9af720d197343898ce4c236608d data/create/advancements/recipes/create.palettes/crafting/materials/zinc_block_from_compacting.json -a23f39321d836b0bb175fa3ad066044af3eefb1b data/create/advancements/recipes/create.palettes/crafting/palettes/scorchia.json -de7e685c1d81e32d50bfe0445ff5062faff7cbc5 data/create/advancements/recipes/create.palettes/smelting/scoria.json -6fb78f08dcde45b763d878f69c8ea3e08cdf1ac7 data/create/advancements/recipes/decorations/smelting/glass_pane_from_framed_glass_pane.json -21eeaaa865c069d49dfb85161ea26065f949572c data/create/advancements/recipes/decorations/smelting/glass_pane_from_horizontal_framed_glass_pane.json -203c4a4e8fc1959c2e119f26d13f18db803aed06 data/create/advancements/recipes/decorations/smelting/glass_pane_from_tiled_glass_pane.json -6bdcc8384564f207c22d4240b341c8ec31188a6d data/create/advancements/recipes/decorations/smelting/glass_pane_from_vertical_framed_glass_pane.json -c070b31d39acd1f9a1f5ee9ec23d8e977a2a2be4 data/create/advancements/recipes/food/campfire_cooking/bread.json -ca0dbfc3222435fb25e9c188bd1c2e44375ca8e0 data/create/advancements/recipes/food/crafting/curiosities/cake.json -745addcb7d24943c9aa05f16ae1e3d645425093f data/create/advancements/recipes/food/smelting/bread.json -d4012346e139ef643ac4c83713cbe6b5a5beac8a data/create/advancements/recipes/food/smoking/bread.json -67e218f34cf2eb55ad069628ea215fa93979cdb9 data/create/advancements/recipes/misc/blasting/copper_ingot_from_crushed.json -3d26689c362908cd665fc66cf628e2b1a117457d data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json -8770c28909fce8196117a541c045eb5a7fc4d0e4 data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json -37b0c39f4cd0f1c983b78f6d6c0bafd766595da5 data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json -77404d9b22443b91b322de7db3bd201c27db69b3 data/create/advancements/recipes/misc/crafting/materials/copper_ingot.json -646003d927eed232ebfd817fe5af533f55ca5e17 data/create/advancements/recipes/misc/smelting/copper_ingot_from_crushed.json -09f0bef676bc7635fab11f670aa422c8c3f3f1d5 data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json -5cc981625fae8340071022b8a27babb36e51eecf data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json -5fb61ed3f88a2da15705f5672d2eca002b44b065 data/create/advancements/recipes/transportation/crafting/kinetics/furnace_minecart_from_contraption_cart.json -ab7d109fd99b2e6b84941955529941eea15196af data/create/advancements/recipes/transportation/crafting/kinetics/minecart_from_contraption_cart.json -d6b68a6fb4b7872f800585a8616cfe1ff1a0428c data/create/recipes/blasting/copper_ingot_from_crushed.json -2f24bbc0a6197232c7df975cefa76f8bededb2e3 data/create/recipes/blasting/gold_ingot_from_crushed.json -f2d3636e3c828538b957e974bc4f58191d2fac83 data/create/recipes/blasting/ingot_aluminium_compat_ic2.json -403992a2ecfe88e639c0165b78d41c3baea5fc83 data/create/recipes/blasting/ingot_aluminum_compat_immersiveengineering.json -c48b2f2981a7a45629bcb9b9dc3fad9150dd39a5 data/create/recipes/blasting/ingot_lead_compat_immersiveengineering.json -10b1df3b14d2854e3d7948b27f0b8703fde48012 data/create/recipes/blasting/ingot_lead_compat_mekanism.json -53e2061883385cc4cffff69a8b4d41e6f0e6d533 data/create/recipes/blasting/ingot_nickel_compat_immersiveengineering.json -2a83dd769ab014ad31c67cb4666fce4f2888ace3 data/create/recipes/blasting/ingot_osmium_compat_mekanism.json -a4b4e766c9e5cc484875e540268de5511bf8e242 data/create/recipes/blasting/ingot_silver_compat_ic2.json -06109d98234bd7d6897661179c7467b8d443ec40 data/create/recipes/blasting/ingot_silver_compat_immersiveengineering.json -474138ef67a08445f167ffe7721fd87535d25dae data/create/recipes/blasting/ingot_tin_compat_ic2.json -1e1db27dbc85323f99bccf163d46b9c6c69544aa data/create/recipes/blasting/ingot_tin_compat_mekanism.json -cc4e93dd4f6ab516e768081ec6c9d4da11e96d96 data/create/recipes/blasting/ingot_uranium_compat_ic2.json -586989f3e7f8b39a8e145ceeac3bd63e3297e007 data/create/recipes/blasting/ingot_uranium_compat_immersiveengineering.json -1a4e639ff3ed4749eedd0591e07e18a1ba8d0847 data/create/recipes/blasting/ingot_uranium_compat_mekanism.json -9b20753f359219e37bc10bdc11136782fcede2fd data/create/recipes/blasting/iron_ingot_from_crushed.json -f9e37c3a4da4bf653df8bd8144d92e85500da291 data/create/recipes/blasting/lead_ingot_compat_oreganized.json -d53f7304f2a85b70ce95f7e48e5708b11e69b946 data/create/recipes/blasting/lead_ingot_compat_thermal.json -f1839da26ba1db016ffff94fe60bf2830379599e data/create/recipes/blasting/nickel_ingot_compat_thermal.json -9d8b0c587f3dcf1023ee45bbdaa11012cbb2ab08 data/create/recipes/blasting/silver_ingot_compat_galosphere.json -5c48c8ca7c80d4a04b54edc8790a818a4481bf72 data/create/recipes/blasting/silver_ingot_compat_iceandfire.json -6a5f7f1c8e3dfa2caaa0fe3a8d13fcb35b4e44d1 data/create/recipes/blasting/silver_ingot_compat_oreganized.json -da45b142e2c4f13b5df06c1a45c6c500ecf44334 data/create/recipes/blasting/silver_ingot_compat_thermal.json -883d9aaa0a05d8b7d1f6c7c09fe5e60d830ee68e data/create/recipes/blasting/tin_ingot_compat_thermal.json -f298705939b5ade9f866a8c08f7d8d74afe3e2ee data/create/recipes/blasting/zinc_ingot_from_crushed.json -3cb807025b9ba230848119fc82ffcb704a557f37 data/create/recipes/blasting/zinc_ingot_from_ore.json -96156704f18b890aeb3c98e1d06617d300bc8b66 data/create/recipes/blasting/zinc_ingot_from_raw_ore.json -1ccff315d6b56db32a4843d48b369459aa0ad86d data/create/recipes/campfire_cooking/bread.json -fdbc0d69b7f9b454dd8babd71ab1023f5ce2ae3d data/create/recipes/crafting/appliances/attribute_filter_clear.json -a6fb189a48fdbf5b0561d6812d1421a04223d4e0 data/create/recipes/crafting/appliances/clipboard.json -c5f74c6393ebd49b94a54a2c4a630887df8b6ce8 data/create/recipes/crafting/appliances/clipboard_clear.json -3840baa70c2b3dc4f70fa7b0ca96759a4044df43 data/create/recipes/crafting/appliances/copper_backtank.json -4e1cea48f380df9ab59ea17c39844c2bbfb329fe data/create/recipes/crafting/appliances/copper_diving_boots.json -cc7e2754e1519ec61f1257b68ae14144051a2f7f data/create/recipes/crafting/appliances/copper_diving_helmet.json -b8665ff12b3736f41dd6bd096ad6e24992be554b data/create/recipes/crafting/appliances/crafting_blueprint.json -206780d6050ba937571c49ae669ede12fc92f08d data/create/recipes/crafting/appliances/dough.json -10411c8e682fa61ea72e5e8b363b476a7dce1506 data/create/recipes/crafting/appliances/filter_clear.json -e6bfe9d4b015546d970f5ece35c08a642f9167b6 data/create/recipes/crafting/appliances/linked_controller.json -d948285dc2344dbada3957be890d4cb75f686697 data/create/recipes/crafting/appliances/netherite_backtank.json -d4ed98d873a9eb8faf7c01e7cd0e9bf5b635488d data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json -f3f8b62e37fd29bd54bbb1ae325b2b1b17f2b197 data/create/recipes/crafting/appliances/netherite_diving_boots.json -ac0debc34634635a6ea2f75230f70f35ceebf5ef data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json -ab4f1cd6c051866a2d1994c7cbae48a0938a16a1 data/create/recipes/crafting/appliances/netherite_diving_helmet.json -afd744ca1c860754f2e44a490638c3389d3f7522 data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json -ebc3512a7f069d2170985997057d6e287e50235f data/create/recipes/crafting/appliances/schedule_clear.json -7fae8ba5e9a2595b11bd35d7ae2248255c486c18 data/create/recipes/crafting/appliances/slime_ball.json -dd9f00d27d2d9e1ba971542eb6daed341e88ce42 data/create/recipes/crafting/appliances/tree_fertilizer.json -6ef7cdb7154dcb04212690d4d6ffd57f19fc4685 data/create/recipes/crafting/curiosities/brown_toolbox.json -26e24c537c5126320f617319c6a0c10a5701e868 data/create/recipes/crafting/curiosities/cake.json -2e6908eeaf1c49ea81b1538b986b19f3be5f39b8 data/create/recipes/crafting/curiosities/minecart_coupling.json -b7289088fdb01f307f41d3df29b46e0d7930ba4a data/create/recipes/crafting/curiosities/peculiar_bell.json -43b60bbdbb912f0bd8ca46aa0c415e7ab442ad0b data/create/recipes/crafting/curiosities/toolbox_dyeing.json -9402ffe97f6f2154896a367e614e61c604def8b8 data/create/recipes/crafting/kinetics/adjustable_chain_gearshift.json -1901d2f2c6ec1d436a6cf6a2500f871ea6a3cf28 data/create/recipes/crafting/kinetics/analog_lever.json -08c15e0247cda6e13da08abd2370adf23dcabb04 data/create/recipes/crafting/kinetics/andesite_door.json -c0caa3f8b85b78b30cd9ece6a47925627e066594 data/create/recipes/crafting/kinetics/attribute_filter.json -5b5f5c5c8054b8dca9ca18d9af8154edf5795b2b data/create/recipes/crafting/kinetics/basin.json -cdde069ac88b72e7203e53d83f80a8c1cda2af0f data/create/recipes/crafting/kinetics/belt_connector.json -27cfbc14308fafda42b498aa72921141f0603d3c data/create/recipes/crafting/kinetics/brass_door.json -af2fa71eda99d12c14802975f08fb00c00edb94c data/create/recipes/crafting/kinetics/brass_hand.json -f068350679deb440a15f0ec223f586198657e909 data/create/recipes/crafting/kinetics/cart_assembler.json -e8444504108e93355dd11a65d4e016fdfe40d08e data/create/recipes/crafting/kinetics/chute.json -2ec7bb6b9409532a56c3b1b81517aeea203f8143 data/create/recipes/crafting/kinetics/clockwork_bearing.json -49b3d9def884b1870a31f1ec5e496a1028771e1d data/create/recipes/crafting/kinetics/clutch.json -fa21d2e62568ac41bc8c1b3323b59b8ebc0bc3c0 data/create/recipes/crafting/kinetics/cogwheel.json -873c5512cb796049a44d102efb54f6adfbc5881b data/create/recipes/crafting/kinetics/contraption_controls.json -a07c4bc2d9013c901b14e982c3db0aafdef53fdc data/create/recipes/crafting/kinetics/controller_rail.json -737820d2794336d093ce0fa61174a6d3f2280221 data/create/recipes/crafting/kinetics/controls.json -6c3a576f052e5d0080ce9dfda0de745d77570c6a data/create/recipes/crafting/kinetics/copper_door.json -d6e0e297dd2eecac433a4d4e2133fcc0c3d4754a data/create/recipes/crafting/kinetics/copper_valve_handle.json -f5691833e385258bc6082dfc845bcfa2eb11e919 data/create/recipes/crafting/kinetics/copper_valve_handle_from_others.json -fb46c8748a1f29d4c4aeb1cf8e5dd487cb9831b0 data/create/recipes/crafting/kinetics/crafter_slot_cover.json -825c1b3fa9f0cfe78e1881eaa53ae5c89d022f0a data/create/recipes/crafting/kinetics/cuckoo_clock.json -12291a6327d682d48a71d483fa8791404c20cdaf data/create/recipes/crafting/kinetics/deployer.json -0fd3c9f549e6ca252285e14e38f7a6671ec795b6 data/create/recipes/crafting/kinetics/depot.json -07aaa07452319b8914b4b7c10daeca2acf89fec1 data/create/recipes/crafting/kinetics/display_board.json -d7e5a7b4cb9fb7ad88bca5f587d0dde0d4caa808 data/create/recipes/crafting/kinetics/elevator_pulley.json -5a04ede3f8f8fce09a04abebb017780360685968 data/create/recipes/crafting/kinetics/empty_blaze_burner.json -9a6b9089624b678dc0f34b3c579584be48ba71ff data/create/recipes/crafting/kinetics/encased_chain_drive.json -68ee1a593eb55717d5d38e50c40a2a6a24913ff7 data/create/recipes/crafting/kinetics/encased_fan.json -701bb4c796a161349e1f344b0956fd5230e2b9ad data/create/recipes/crafting/kinetics/filter.json -a4006286076f148e4890f2d886ebe2f4dd8bb6b6 data/create/recipes/crafting/kinetics/fluid_pipe.json -9882f090177514322ab5b45bb3055067e77656b9 data/create/recipes/crafting/kinetics/fluid_pipe_vertical.json -ca72642ea501dcb6f2cefda29f4848f34438fb30 data/create/recipes/crafting/kinetics/fluid_tank.json -6b3334092172648235368de8ce9ce907967c8e70 data/create/recipes/crafting/kinetics/fluid_valve.json -7fb89f262e8297c83bf1348e357ba1c2d1bcf724 data/create/recipes/crafting/kinetics/flywheel.json -fc30c2ffd4ba45371f2a6204b23703cd86af7197 data/create/recipes/crafting/kinetics/framed_glass_door.json -cce9a34f0955ebebcdac654b0305d9457b3724fe data/create/recipes/crafting/kinetics/framed_glass_trapdoor.json -951262c954db16c8b20b1da36a806222ac9c4153 data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json -e7099968c2ec0b9e014ae14765574f7c40aa2cd9 data/create/recipes/crafting/kinetics/gantry_carriage.json -ade723d3ee0bd30e1eca77a28b075f5cac619f02 data/create/recipes/crafting/kinetics/gantry_shaft.json -951d298137741ac40ff60d41bbc9c35363d35e04 data/create/recipes/crafting/kinetics/gearbox.json -9600d1dda33bf2a5248c8e9df55cafd37cbd39cc data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json -111789890856ffeff792ecff52832a04199c763d data/create/recipes/crafting/kinetics/gearshift.json -4b1a676d8f8cd3a6c4dc56e345d7dc5ef651bf7b data/create/recipes/crafting/kinetics/goggles.json -57817abc42f5e3e37f4ba9e0ae84df7f718dc69c data/create/recipes/crafting/kinetics/hand_crank.json -fac5e5d38e5f5308a667ec2b2bf160c06613716a data/create/recipes/crafting/kinetics/hose_pulley.json -d8d9226fa3e395fabca7f62f2477379e9e1be50f data/create/recipes/crafting/kinetics/item_drain.json -60497f93df883630f06c0073a54b42a0593cb074 data/create/recipes/crafting/kinetics/item_vault.json -fd20b1e2b35706d6f353a61fb2ea75f69e0a329f data/create/recipes/crafting/kinetics/large_cogwheel.json -ef9e3965e7010273a4eb2ede07e8e59fd436cedd data/create/recipes/crafting/kinetics/large_cogwheel_from_little.json -9135b75ab7c1b34889d11b1b29faec91712b4c73 data/create/recipes/crafting/kinetics/large_water_wheel.json -fe68fed5b2d3081cb3b90d11e67caa30bfefcdf5 data/create/recipes/crafting/kinetics/linear_chassis.json -6313dcdccf63832385d54533322c31f10f817f8b data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json -4bda099afaef73d3b24dc340f3c3b7a7e0778b47 data/create/recipes/crafting/kinetics/mechanical_arm.json -a02c6b77c74b2f3c66a53a33e04764339d10e202 data/create/recipes/crafting/kinetics/mechanical_bearing.json -1ea3e37e0daf78acf54566b5380a8d730a7480c9 data/create/recipes/crafting/kinetics/mechanical_crafter.json -ee97158233fc488e920142f5a6d658b26514778f data/create/recipes/crafting/kinetics/mechanical_drill.json -d03b6a4f99ad614034fa2988a54503637c8b965b data/create/recipes/crafting/kinetics/mechanical_harvester.json -8d72b073ae4d220ca9a04a4f6ffbb018260dd6b9 data/create/recipes/crafting/kinetics/mechanical_mixer.json -97dd6d45d04a3bdac13468a0176205e22e294721 data/create/recipes/crafting/kinetics/mechanical_piston.json -333db3532e6a5c86b176a304e5dfe1d7306712cc data/create/recipes/crafting/kinetics/mechanical_plough.json -20ab2182efe192c904a65b9d3ecb61ee9a90993d data/create/recipes/crafting/kinetics/mechanical_press.json -a7dd6c89d0ad567836a5b667d3cd102c053824e9 data/create/recipes/crafting/kinetics/mechanical_pump.json -9f4daf143572d23107dc5af70eae61961c167b5c data/create/recipes/crafting/kinetics/mechanical_roller.json -256256ddbe3d9d1d3a79ece010dcf75415ad8d31 data/create/recipes/crafting/kinetics/mechanical_saw.json -a54ed12c21d66dde0fdd7d4a004f4c063392ca95 data/create/recipes/crafting/kinetics/metal_bracket.json -0627fcc3c7fd72c4929cdaaac00dd135133544e0 data/create/recipes/crafting/kinetics/metal_girder.json -bee823d1d7d012682c1bcb71bcad8716368d9777 data/create/recipes/crafting/kinetics/millstone.json -b879ad80a9939bb8ef1b20a22d72a328e943615c data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json -280a84432472c6b9f3146526bdfb9c64981c228f data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json -9e48ebc432a2f21b9e8f10714adbb96121167e2e data/create/recipes/crafting/kinetics/nixie_tube.json -8ba11e1ae93e8afa7c203e9dd69cc081796da3cf data/create/recipes/crafting/kinetics/nozzle.json -7ac9f6d3a0ea7ebddad200b33a728f1c754509e4 data/create/recipes/crafting/kinetics/piston_extension_pole.json -89cdd21d898a08ee42ca2c04d9eacbeffc830750 data/create/recipes/crafting/kinetics/placard.json -a9fdd02eac8fa5620912ea85c4460be00688c324 data/create/recipes/crafting/kinetics/portable_fluid_interface.json -8b596eda0bd364aaa96db5e69ac0b409d2ca48f2 data/create/recipes/crafting/kinetics/portable_storage_interface.json -61871f78b7f134c261485ec575c49de143ca8b2c data/create/recipes/crafting/kinetics/propeller.json -9bd6ae7c0ef6e0d3aa34106b6e79f773edc92fdc data/create/recipes/crafting/kinetics/radial_chassis.json -3a8c93fd5036671eb9b5e8d463666e201d31f4f4 data/create/recipes/crafting/kinetics/rope_pulley.json -1609f5814143e6c6bed344684195f50b97bbfc3c data/create/recipes/crafting/kinetics/rose_quartz_lamp.json -a34a64195876a2334f274584cf170b9f3bc42d77 data/create/recipes/crafting/kinetics/rotation_speed_controller.json -a85b372b60956600c26374bde7abd50eb4aa85b5 data/create/recipes/crafting/kinetics/sail_framefrom_conversion.json -9d2b082574901473fefab6237654cb2e25e6119f data/create/recipes/crafting/kinetics/schedule.json -9a6fdc0523c7ff2728589d9bc0b147d9da5a0cf9 data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json -42073ff286455037402fd929cd94c7274fe36fda data/create/recipes/crafting/kinetics/sequenced_gearshift.json -a190c616240e0d5f510005669c2797ef544f4367 data/create/recipes/crafting/kinetics/shaft.json -7a165cbad55e9c580bb1c7e61c2165b12db5022c data/create/recipes/crafting/kinetics/smart_chute.json -4ea696d24035279e0e54c4a6a01178fbbaab74b8 data/create/recipes/crafting/kinetics/smart_fluid_pipe.json -76005ce6fdef128e38e93e72108830ce6449ef50 data/create/recipes/crafting/kinetics/speedometer.json -99eb689bb0a02e0a44775ad1069bc698d6ad21f8 data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json -988f6c0034cfc80fa2bd73116d0405c9916b1392 data/create/recipes/crafting/kinetics/spout.json -29b9b82f84a75eaf61611a7f6375339166b0ec2f data/create/recipes/crafting/kinetics/steam_engine.json -e9314f70c265500787c58cbbd1ab94c0f3a0eff8 data/create/recipes/crafting/kinetics/steam_whistle.json -dde7f31762f0cb16e61ff3215b0892daeaadd6a8 data/create/recipes/crafting/kinetics/sticker.json -7b8a6c791a89ef9661088d7cd5822cdd3ca27326 data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json -3830a9d6a1cb8586aa146a64f10efc57eba8292f data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json -06718c38f6f0c5d33655f808b9c8ae5aa340875e data/create/recipes/crafting/kinetics/super_glue.json -f92276b774c42d676abf05564c28599d96814459 data/create/recipes/crafting/kinetics/track_observer.json -edc418e84ae78e557c9a9214842939086ab58b5f data/create/recipes/crafting/kinetics/track_observer_from_other_plates.json -baaabf43821cb3c61ed2bf8a2431ee5ac108c923 data/create/recipes/crafting/kinetics/track_signal.json -795a3b326ed6c7dc679b4b7dc028b4aed711d78f data/create/recipes/crafting/kinetics/track_station.json -f7aa250ac8326279fbd5003ab62a80e81f2eb63e data/create/recipes/crafting/kinetics/train_door.json -df8bcd04ccd77a1870ee9af8bf892f7470ebf936 data/create/recipes/crafting/kinetics/train_trapdoor.json -051e9a912e57dcbe12f8a711e54ed8e498bd1d93 data/create/recipes/crafting/kinetics/turntable.json -2adc7a020d9806622f967c94144ff47b12a7cbbc data/create/recipes/crafting/kinetics/vertical_gearbox.json -4b387b6bd8ab9897d6cb51ce1ebe6fbfe9cfabfd data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json -cacf13148c47ae81051f24227507f2f3a0045844 data/create/recipes/crafting/kinetics/water_wheel.json -a76910afdacf010a04dcd1095ff2867d1a6a6548 data/create/recipes/crafting/kinetics/weighted_ejector.json -b3db03edb9fe3aa0bff523efc9bef08c6c205b92 data/create/recipes/crafting/kinetics/whisk.json -68b1e851f806459b9e9f788eb584407b82d4340f data/create/recipes/crafting/kinetics/white_sail.json -000d570eeeb2efa21b6f5bdb77eb6646d10af4bb data/create/recipes/crafting/kinetics/white_sailfrom_conversion.json -79d44065e5e2a4a0947d05df25e5ac075ddb4dc5 data/create/recipes/crafting/kinetics/windmill_bearing.json -c4c2a04e2949132e28c2838280ebd8ef22d3d770 data/create/recipes/crafting/kinetics/wooden_bracket.json -c8bf929c604b35ab64f90c0c4245fea2418989ad data/create/recipes/crafting/kinetics/wrench.json -81fa6d58358e053ca974d1fcc7fc5b0886370e83 data/create/recipes/crafting/logistics/andesite_funnel.json -19623c53ab3b3ebcb7f469b6521f083dcb19a749 data/create/recipes/crafting/logistics/andesite_tunnel.json -dcb067590e24905d0914f1615fdae4be6591d185 data/create/recipes/crafting/logistics/brass_funnel.json -5fd9148832345b777b4a932678e09640edd2913f data/create/recipes/crafting/logistics/brass_tunnel.json -ef1a5942f26d91738f8348223c4123ef2f1624ab data/create/recipes/crafting/logistics/content_observer.json -20d73510c51cbd823dff5a3afc83a402b66f9cce data/create/recipes/crafting/logistics/display_link.json -98691840eb3cc967554d4175ca5f27e87ceff86a data/create/recipes/crafting/logistics/powered_latch.json -a7e0e52e6829a23236414782e1e66b2dafa336c7 data/create/recipes/crafting/logistics/powered_toggle_latch.json -690f9966db7f0cd230ccd6d022845165fc1812e9 data/create/recipes/crafting/logistics/pulse_extender.json -e6faf54c173bf7fed2a830023c70070245eb52fb data/create/recipes/crafting/logistics/pulse_repeater.json -478c7d0f63f9bf692bcb97ef224d6f1ad0f72a8a data/create/recipes/crafting/logistics/redstone_contact.json -d78395b4352d6df560d39e8edbc006fd389d18b5 data/create/recipes/crafting/logistics/redstone_link.json -8750e51e842dd6333b9bbb42b4d57ab8f5b811a1 data/create/recipes/crafting/logistics/stockpile_switch.json -98f636802918fa58fe75dad5bb7a34b771dd1e1c data/create/recipes/crafting/materials/andesite_alloy.json -ed1cba19756ba50ff0ec1ee25c15881ce11efd6e data/create/recipes/crafting/materials/andesite_alloy_block.json -8be8c03ef76bb5e6914a9ee57adeee24d8de2c1e data/create/recipes/crafting/materials/andesite_alloy_from_block.json -2090c075d464f5d010bbf719af753563c543b26d data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json -728a7148deeed0e08d4d4359832a507392fb6e3b data/create/recipes/crafting/materials/brass_block_from_compacting.json -ee8427fa3ebcfee734b3f718577c1fa740a11f1e data/create/recipes/crafting/materials/brass_ingot_from_compacting.json -2e18db2f267b6e55bb7839f9ccffa476428fb330 data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json -e046761f97081d6660671e88a728d06d88336fdb data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json -3a520ea04d0f40b55ae30ed6457f8372946db5c8 data/create/recipes/crafting/materials/copper_ingot.json -ac026f1eb8c2b88c9ad4b2a5e47ccece5e00e4ab data/create/recipes/crafting/materials/copper_nugget.json -8d4048e6ec6567a806f156631f74c8e162662dec data/create/recipes/crafting/materials/electron_tube.json -d61811ef374939b60b9ecdcd56ded69a73ad35f8 data/create/recipes/crafting/materials/experience_block.json -725e2577704649be2a44743d06cb577664af229d data/create/recipes/crafting/materials/experience_nugget_from_block.json -12d038c14062f754103ac727375908450158258e data/create/recipes/crafting/materials/raw_zinc.json -a7c498009bd0809a6e25406e78ea6c274111ca6d data/create/recipes/crafting/materials/raw_zinc_block.json -833b7e849421269b8d0f117028a628e5bd518e86 data/create/recipes/crafting/materials/red_sand_paper.json -1cd8f6c0c4adeb14ccbf877940f456bc128a6afe data/create/recipes/crafting/materials/rose_quartz.json -601b7544d531f3bd660074d265c09498e8e32e24 data/create/recipes/crafting/materials/rose_quartz_tilesfrom_conversion.json -4b428f375bf70b7148b5e64f3cbbfadcde90af2a data/create/recipes/crafting/materials/sand_paper.json -af99275e567462ddb4da509cffdbf5be1d32ff7f data/create/recipes/crafting/materials/small_rose_quartz_tilesfrom_conversion.json -bd5f579e6e422c988cfc8c8431295cffd7a50f19 data/create/recipes/crafting/materials/zinc_block_from_compacting.json -6f5e06ad4b861021eb89e392be178c2c492a0400 data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json -7dd50c655b65ed4aba0402c100e581bf1575c214 data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json -2c6feb98c32ba5fb5f91c10bf9f652062b93419a data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json -e59abb7feba1ad23b8802fef4240ba3de01ec9e9 data/create/recipes/crafting/palettes/scorchia.json -4c3ebffd6768f66ed441dc9beff23e45e9bf094f data/create/recipes/crafting/schematics/empty_schematic.json -3cfe01cdac3179433e158b3c0821f5bfc6b61271 data/create/recipes/crafting/schematics/schematicannon.json -cae056792a0dfca680970b745057b50323e722ba data/create/recipes/crafting/schematics/schematic_and_quill.json -f9a52bde9335db96923867d3ea5d5bceae6331c3 data/create/recipes/crafting/schematics/schematic_table.json -a430e79fa6fb02533fa47c2ac6f0fc89ffb19f47 data/create/recipes/crafting/tree_fertilizer.json -3be566c8348edd56e7f0a5abb66e9b0ebc6730e5 data/create/recipes/smelting/bread.json -7317c59fd42225022ecb7a953dca96d4162c2d19 data/create/recipes/smelting/copper_ingot_from_crushed.json -b43d736230229587b24693f4059c974c83c99832 data/create/recipes/smelting/glass_from_framed_glass.json -2f4d1a869eacab3a96ea3c66fd419e7dff4b1d56 data/create/recipes/smelting/glass_from_horizontal_framed_glass.json -9e4bf66d04caf9cc9102e4f2b10d381b32be5554 data/create/recipes/smelting/glass_from_tiled_glass.json -148ccb922ddb5422edde2c067292a7f1f239a3d1 data/create/recipes/smelting/glass_from_vertical_framed_glass.json -58aef9c7b855408afa8b7b61b5c0561dab014aa0 data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json -9f94ad24c77fd4f578c03599e334218f57c1c1aa data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json -ac8519dc87331facee57802dad374c0b32b8bf0c data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json -1cfea94ee0c921056a6aee8ca381be4f84b9e2e1 data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json -3a2656e86cdf82e99682242da9aa977031049ea1 data/create/recipes/smelting/gold_ingot_from_crushed.json -a30957a4b0b53fb2b62401847ab9efc0e23bd4d4 data/create/recipes/smelting/ingot_aluminium_compat_ic2.json -b223054970e6571768319bb866d61635d726dce5 data/create/recipes/smelting/ingot_aluminum_compat_immersiveengineering.json -78467cf924ebeb24c53ef0ea10fca3eb180f914c data/create/recipes/smelting/ingot_lead_compat_immersiveengineering.json -bd7bffd4bbd69abc1ee5e437c3f1098c075892fe data/create/recipes/smelting/ingot_lead_compat_mekanism.json -bd528f31bb97fa877aada98380c1e1954115293e data/create/recipes/smelting/ingot_nickel_compat_immersiveengineering.json -4ac8a67e16efa3869062801eda7b6a3892093c4b data/create/recipes/smelting/ingot_osmium_compat_mekanism.json -d899d08b2df74db9c114153268251893cfa6bde3 data/create/recipes/smelting/ingot_silver_compat_ic2.json -fb7e89596dcb9662f179f3c516846267e9985750 data/create/recipes/smelting/ingot_silver_compat_immersiveengineering.json -708c6287d06c97f09bb5dc418c0993391a84399f data/create/recipes/smelting/ingot_tin_compat_ic2.json -99a530375613f5a4cd8ede54fa5712c8b159fa43 data/create/recipes/smelting/ingot_tin_compat_mekanism.json -d298552e603949de1f9f5d41c8d65bcc6a60f79e data/create/recipes/smelting/ingot_uranium_compat_ic2.json -a6f5349b5edb5751404eade36fea2718e2802742 data/create/recipes/smelting/ingot_uranium_compat_immersiveengineering.json -381e8baa569e2e742c217df58606b426a4dac2b1 data/create/recipes/smelting/ingot_uranium_compat_mekanism.json -70aa1f37a4c17b59ef098ecd2565733af37c74cd data/create/recipes/smelting/iron_ingot_from_crushed.json -eeea3b17b033da8910bf0449332a7e7f927b2856 data/create/recipes/smelting/lead_ingot_compat_oreganized.json -870350305775edc04cba887174b4b8210f9c532a data/create/recipes/smelting/lead_ingot_compat_thermal.json -64ff40ba9dec46a234a777ec4f6214586f74feca data/create/recipes/smelting/nickel_ingot_compat_thermal.json -c6527e3de9bc1de66d5540343aec49b4008cd242 data/create/recipes/smelting/scoria.json -abd19b9c703c15e28184ae810786a207c5278ae4 data/create/recipes/smelting/silver_ingot_compat_galosphere.json -99d12c312a09b7fd0b127e259e277baa10f47e21 data/create/recipes/smelting/silver_ingot_compat_iceandfire.json -f3678275a854d133a3f9f5e38bcceb5a26bccfa7 data/create/recipes/smelting/silver_ingot_compat_oreganized.json -3b0fbe479cbe3757b6aac7c1ada7c59beccc6b85 data/create/recipes/smelting/silver_ingot_compat_thermal.json -8a7f36f11ba991c0ee8c4ec617fa605fb81e6c5a data/create/recipes/smelting/tin_ingot_compat_thermal.json -8c0a3fd06a5279d349da59fcca5f163ba96ba36f data/create/recipes/smelting/zinc_ingot_from_crushed.json -5e5e4c2fcd75a47e7c20a698f45ad637c6630ef8 data/create/recipes/smelting/zinc_ingot_from_ore.json -55746bc86a58d3f8bf6b091f2d376b4972168a64 data/create/recipes/smelting/zinc_ingot_from_raw_ore.json -47768ba669cabe491e8b9da71ac7fb9766f12186 data/create/recipes/smoking/bread.json +// 1.20.1 2024-10-09T12:24:59.2686824 Create's Standard Recipes +a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json +2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json +81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json +8df9ecabefe6487e60ccf4b5182bd960b4c2f1b4 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots_from_netherite.json +040cc87b169b0608c3fbd152a1a2a9d2b2108895 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_helmet.json +c1f2e6d1d955fb2d6d7ccc7a6d45d051bbcab315 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_helmet_from_netherite.json +6418408e9fe53c03eae1e2b17b2229a548abc226 data/create/advancements/recipes/misc/blasting/copper_ingot_from_crushed.json +d88c5c8b6751f389d9eea30acbd566c120e77705 data/create/advancements/recipes/misc/blasting/gold_ingot_from_crushed.json +ea97407030aed9f2da5720fe7f68dd0c87f68944 data/create/advancements/recipes/misc/blasting/ingot_aluminium_compat_ic2.json +2532dd0af4124639c26525b6c4bbaf8059132903 data/create/advancements/recipes/misc/blasting/ingot_aluminum_compat_immersiveengineering.json +6b62cf9551e30b3560349e8d905cd10b446a98fd data/create/advancements/recipes/misc/blasting/ingot_lead_compat_immersiveengineering.json +4568168d851832c9eefd177c64a2de9c40e9954b data/create/advancements/recipes/misc/blasting/ingot_lead_compat_mekanism.json +cdcf764d3eb5fba5ebaf17be87398ed68edfa43c data/create/advancements/recipes/misc/blasting/ingot_nickel_compat_immersiveengineering.json +556013ab3ed25759da841832ff373e2a5421049b data/create/advancements/recipes/misc/blasting/ingot_osmium_compat_mekanism.json +8c1a984764bf4a9f1b1be8988d174c5aed827b00 data/create/advancements/recipes/misc/blasting/ingot_silver_compat_ic2.json +f013cfdc88c5e93d7f351aea6db34ce30870cb2c data/create/advancements/recipes/misc/blasting/ingot_silver_compat_immersiveengineering.json +a92969c36b7aad976b8212d1dd8893a6ff4273d2 data/create/advancements/recipes/misc/blasting/ingot_tin_compat_ic2.json +e6ff5fab7af4a92a28be16484cb580423a6bc898 data/create/advancements/recipes/misc/blasting/ingot_tin_compat_mekanism.json +33b46fd8c73dd6c2436347fff471bec173b7e373 data/create/advancements/recipes/misc/blasting/ingot_uranium_compat_ic2.json +b02cf7e00ee7b0d12a37e7ba5b5134ac31ae9bd4 data/create/advancements/recipes/misc/blasting/ingot_uranium_compat_immersiveengineering.json +ee732ef02b3d210dd10aeec1799da1ca6230276b data/create/advancements/recipes/misc/blasting/ingot_uranium_compat_mekanism.json +b90af96817d6c38ec446f7464642a473a55c2027 data/create/advancements/recipes/misc/blasting/iron_ingot_from_crushed.json +97bc03e4bb939ad037b6a2d139b9510030cdbd74 data/create/advancements/recipes/misc/blasting/lead_ingot_compat_oreganized.json +39420bdfe874164a75a4df767483a6903d24e8ab data/create/advancements/recipes/misc/blasting/lead_ingot_compat_thermal.json +6b918d2552c2c764f62ae8a68f1bdd8cf3b4d2a6 data/create/advancements/recipes/misc/blasting/nickel_ingot_compat_thermal.json +7c201c88e77c537d30b6be5571b418dcfafda2e9 data/create/advancements/recipes/misc/blasting/silver_ingot_compat_galosphere.json +39a325925c92012ff849877846ecea4224c06dc8 data/create/advancements/recipes/misc/blasting/silver_ingot_compat_iceandfire.json +5b10d7e8219158fa25c587ba1709ade3ca718500 data/create/advancements/recipes/misc/blasting/silver_ingot_compat_oreganized.json +76ba5762a4b104a84b7501056237cbf15a9a41d0 data/create/advancements/recipes/misc/blasting/silver_ingot_compat_thermal.json +9ec161b962d41a0773cbbff7328947e89cfa0585 data/create/advancements/recipes/misc/blasting/tin_ingot_compat_thermal.json +6e09fdea2fd2fea9cd54d33c9e094c9528ee1603 data/create/advancements/recipes/misc/blasting/zinc_ingot_from_crushed.json +39158a18dd766c0da435cd4d25334b0aa48e717b data/create/advancements/recipes/misc/blasting/zinc_ingot_from_ore.json +0337c63f3fa75e8ae8ece4a05c85d52313e04f13 data/create/advancements/recipes/misc/blasting/zinc_ingot_from_raw_ore.json +979ce50c0238ee2512acbe568f093b96d253adbe data/create/advancements/recipes/misc/campfire_cooking/bread.json +3d2decdb350a8ba7f553dec5ee5f7b79d6cfd9c4 data/create/advancements/recipes/misc/crafting/appliances/attribute_filter_clear.json +8b0f0b4342adbd3466c81298c87b5ed8993c3636 data/create/advancements/recipes/misc/crafting/appliances/clipboard.json +42f06a32b53c954a54fa1d5ffb1afd2e161cbde2 data/create/advancements/recipes/misc/crafting/appliances/clipboard_clear.json +6fa2794d2d8d8d5ffeea22701862d79578adf7f2 data/create/advancements/recipes/misc/crafting/appliances/copper_backtank.json +029e463d5eea7ae590577fdfab52664036727985 data/create/advancements/recipes/misc/crafting/appliances/copper_diving_boots.json +5d5b4c49e81090a48c23314c49815f61ac170518 data/create/advancements/recipes/misc/crafting/appliances/copper_diving_helmet.json +0746cb63e224d7620e781e1494b9a8b9d56b186b data/create/advancements/recipes/misc/crafting/appliances/crafting_blueprint.json +c4d0901541855ea2fda0cef7f0270edfa16d70e2 data/create/advancements/recipes/misc/crafting/appliances/dough.json +79b6501f8cb069dc55b78871a5fecf40a5b3dbd5 data/create/advancements/recipes/misc/crafting/appliances/filter_clear.json +3271ad36fbab51d87d0baad8c69cb7b2add506b8 data/create/advancements/recipes/misc/crafting/appliances/linked_controller.json +d4d13730d982713b5809ecf30187e01707248d75 data/create/advancements/recipes/misc/crafting/appliances/schedule_clear.json +44c1a131bed101ad4b87d57816ff5a375cc36bf4 data/create/advancements/recipes/misc/crafting/appliances/slime_ball.json +7d0fa7ac8a04b19cd3db31342e276d2da4860a1d data/create/advancements/recipes/misc/crafting/appliances/tree_fertilizer.json +67a99a90fc7594633739e9f7933543d3d8b7409a data/create/advancements/recipes/misc/crafting/curiosities/brown_toolbox.json +eb14fd4a77457f1206adee736307aa233b9bcc97 data/create/advancements/recipes/misc/crafting/curiosities/cake.json +e556921ce31c8eb222c15e95ab0d22c9e9dbfcf6 data/create/advancements/recipes/misc/crafting/curiosities/minecart_coupling.json +1b01f470bff0e377207327a3749b1249f745cb77 data/create/advancements/recipes/misc/crafting/curiosities/peculiar_bell.json +256120321703fdecaf2fff0198045b6148194593 data/create/advancements/recipes/misc/crafting/kinetics/adjustable_chain_gearshift.json +16603187bb4f5acc26e052c4cd2734cbcf8b47b3 data/create/advancements/recipes/misc/crafting/kinetics/analog_lever.json +49eccdf8e5d3d69155766e410b0958e17c1a49f5 data/create/advancements/recipes/misc/crafting/kinetics/andesite_door.json +087f19b43c13559bd3da973b1afded73cbc17e12 data/create/advancements/recipes/misc/crafting/kinetics/attribute_filter.json +a5435336d02247b4bcd7b4b5c4870be129f23477 data/create/advancements/recipes/misc/crafting/kinetics/basin.json +a8a3a16f1990f73cc0a6b7bca23a96ffa22f416d data/create/advancements/recipes/misc/crafting/kinetics/belt_connector.json +f7517ad35e98d11c7244be86ba4a7bde85eeaf13 data/create/advancements/recipes/misc/crafting/kinetics/brass_door.json +627b0ebad7cbc45d8a0c5803de626fa520bb2023 data/create/advancements/recipes/misc/crafting/kinetics/brass_hand.json +2408e2a5b5ca63f196a90a20bcf7f0d301fa2aa0 data/create/advancements/recipes/misc/crafting/kinetics/cart_assembler.json +aaaf7e0649acebf491229781c56a7b95a71a1c84 data/create/advancements/recipes/misc/crafting/kinetics/chute.json +e8ba77b35a1f6cb364e143a9397a6314125b592f data/create/advancements/recipes/misc/crafting/kinetics/clockwork_bearing.json +71f386d073b9e0fb647a751cd6b75c0b70f1b001 data/create/advancements/recipes/misc/crafting/kinetics/clutch.json +2730d7bfc7ec348d5399bf90ad7544d790d632df data/create/advancements/recipes/misc/crafting/kinetics/cogwheel.json +11821eef12cd35918f437e3686c9e683a6b9ec36 data/create/advancements/recipes/misc/crafting/kinetics/contraption_controls.json +c468594cfe5a8265a277d2e52aa476b2c7a9eff3 data/create/advancements/recipes/misc/crafting/kinetics/controller_rail.json +6e1a7a7acab52347babd5be7f0b302f92c00980e data/create/advancements/recipes/misc/crafting/kinetics/controls.json +95feec058ab8470127d4f9cf7c8fd47dfd5085f3 data/create/advancements/recipes/misc/crafting/kinetics/copper_door.json +68887a2fe516c1cc990a5de2ba9ac3e0d8ccc8d4 data/create/advancements/recipes/misc/crafting/kinetics/copper_valve_handle.json +0b46b40e385d23a08873ea31840bce2e201f8811 data/create/advancements/recipes/misc/crafting/kinetics/copper_valve_handle_from_others.json +7acc8698921fae48178970e7bce7cfaf136b7169 data/create/advancements/recipes/misc/crafting/kinetics/crafter_slot_cover.json +3eec131f33e1b92cb34b5f732498497a8a9e1cbb data/create/advancements/recipes/misc/crafting/kinetics/cuckoo_clock.json +0015b9b655211aef867e02e67dc5ecc2d1fc2782 data/create/advancements/recipes/misc/crafting/kinetics/deployer.json +58c109a74bd366e76d7eb631e63e3eb84b82038b data/create/advancements/recipes/misc/crafting/kinetics/depot.json +a85aecdec18802b97c23cf21f57e59bf71bfe690 data/create/advancements/recipes/misc/crafting/kinetics/display_board.json +5eddf6af005751b5628d8bc032d064861c7070e0 data/create/advancements/recipes/misc/crafting/kinetics/elevator_pulley.json +df55f1a1e16f8a1771b617acfeb22cb5991dbab0 data/create/advancements/recipes/misc/crafting/kinetics/empty_blaze_burner.json +b0ec44a665cfcc180f5f6a534ef963f431f252d1 data/create/advancements/recipes/misc/crafting/kinetics/encased_chain_drive.json +82d47f9b54917def4ed1a73b4d90d98071d30341 data/create/advancements/recipes/misc/crafting/kinetics/encased_fan.json +aae73187c99468804f57403864846116745d04a0 data/create/advancements/recipes/misc/crafting/kinetics/filter.json +8b85fc7d791aafac0b330d2a7820c71f80257cce data/create/advancements/recipes/misc/crafting/kinetics/fluid_pipe.json +385299a39c0c8496fb41b466ce713e3b7fcaa8c6 data/create/advancements/recipes/misc/crafting/kinetics/fluid_pipe_vertical.json +35613e4230b8287b8ae39323ac489dd181ac9735 data/create/advancements/recipes/misc/crafting/kinetics/fluid_tank.json +c608d16dd414d4ac22e850ce2c8525db8829863e data/create/advancements/recipes/misc/crafting/kinetics/fluid_valve.json +48811dacee389007c5527b460bfc2e640973928f data/create/advancements/recipes/misc/crafting/kinetics/flywheel.json +b6489530bfdd3dc4cd8a3ebe26ce345f8559f5ae data/create/advancements/recipes/misc/crafting/kinetics/framed_glass_door.json +8ceb8ad4bc08b103bcd4a72b1e518875b43cd7ab data/create/advancements/recipes/misc/crafting/kinetics/framed_glass_trapdoor.json +a11a4e11fe9b762ccf8be72adffd59e45f6d47fe data/create/advancements/recipes/misc/crafting/kinetics/furnace_minecart_from_contraption_cart.json +8eb770396aa27283baabbc708698f5419a65a657 data/create/advancements/recipes/misc/crafting/kinetics/gantry_carriage.json +1c5e47b8dde41e2947c2f6111616cc0493a4aa7e data/create/advancements/recipes/misc/crafting/kinetics/gantry_shaft.json +2d413928c4305a5bf2b7bc9787ec2cb7ae5a062d data/create/advancements/recipes/misc/crafting/kinetics/gearbox.json +005c2d4110a88f08561edf23835b626103e1ebdd data/create/advancements/recipes/misc/crafting/kinetics/gearboxfrom_conversion.json +d2dded1337838b08b79e6648dba326eca1cf3a1a data/create/advancements/recipes/misc/crafting/kinetics/gearshift.json +146325fa3698e3622fd848e8e6852e9a345d9919 data/create/advancements/recipes/misc/crafting/kinetics/goggles.json +5afa3600386e6a4cd00827d8c8ba6f48d186d968 data/create/advancements/recipes/misc/crafting/kinetics/hand_crank.json +8045df654196f5154566ed602b375f6c9ae4c08d data/create/advancements/recipes/misc/crafting/kinetics/hose_pulley.json +46ef972fdc169dfc2a60fc8ddb39bf5895c7fa81 data/create/advancements/recipes/misc/crafting/kinetics/item_drain.json +53dd7307e5f2614ec4c51a316736982c3a9a8b0c data/create/advancements/recipes/misc/crafting/kinetics/item_vault.json +82534fdf5d61d10612c2650dd73b2eb5144e20ef data/create/advancements/recipes/misc/crafting/kinetics/large_cogwheel.json +7c29cbb89566ed33f44e77cba339c52f70929359 data/create/advancements/recipes/misc/crafting/kinetics/large_cogwheel_from_little.json +3085e5ac3822c41d5b52c19114149dc59aa5a976 data/create/advancements/recipes/misc/crafting/kinetics/large_water_wheel.json +73c5818c85cf3908a77ca2380b71ffd8e2f6eb44 data/create/advancements/recipes/misc/crafting/kinetics/linear_chassis.json +c7f3dfb1fdca94ad9d54992f0217786674705a23 data/create/advancements/recipes/misc/crafting/kinetics/linear_chassisfrom_conversion.json +ba22885e1a95a0deaa8546dd977978c60b515f65 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_arm.json +d00bc56d415fd2c5a073961838173704fdcc43a7 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_bearing.json +88142129f4c99e4266cfb1c172db6a6c1de83799 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_crafter.json +40d8bca20f7dcd8c4751161a7248bc72546d6936 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_drill.json +7cbb3fa60dabefa29b6cd916e03c249241fc99fc data/create/advancements/recipes/misc/crafting/kinetics/mechanical_harvester.json +b8ffa4f1b6e4480909a5fd2f87a09cc0c30aada7 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_mixer.json +6059ecfee32b341bd025aa4568a9da0cede13d38 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_piston.json +795a165b040e3476d45ddd8afda8ab97a515c0f2 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_plough.json +3ed8360151f995a622af74754b2ea185446ceb30 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_press.json +29210bb5e788589190f45d4e4863684dc7ceb2ab data/create/advancements/recipes/misc/crafting/kinetics/mechanical_pump.json +1d9a4b3f78373a81f74466ecefe02f135780c6dc data/create/advancements/recipes/misc/crafting/kinetics/mechanical_roller.json +87b2748fc56826ec62b0200e943feb30002c4b12 data/create/advancements/recipes/misc/crafting/kinetics/mechanical_saw.json +66ff4959af7d711bc6284ed3d62ca03910e72ba1 data/create/advancements/recipes/misc/crafting/kinetics/metal_bracket.json +e918e8844c6ef4f5adcc95665a05f64c5372abcc data/create/advancements/recipes/misc/crafting/kinetics/metal_girder.json +3412fcbd1c568cdc1dc66b8756c5b783ac1dec5d data/create/advancements/recipes/misc/crafting/kinetics/millstone.json +21ae2ef8238b2a8fd05bc39a0c3fd854ce01d561 data/create/advancements/recipes/misc/crafting/kinetics/minecart_from_contraption_cart.json +4c03ca9d953e800c23ca049c4428d9dd40a18d26 data/create/advancements/recipes/misc/crafting/kinetics/mysterious_cuckoo_clock.json +d283b37887dc62e22965dbafbd3a3eb98d0488cf data/create/advancements/recipes/misc/crafting/kinetics/nixie_tube.json +27e3d4b5011ce17cc687a4a8b38b574dfff279d3 data/create/advancements/recipes/misc/crafting/kinetics/nozzle.json +df79a596a5b07701620a8bb86a7df4601b58c77d data/create/advancements/recipes/misc/crafting/kinetics/piston_extension_pole.json +384efeea25b1968b3131905da2d7cd73455768c5 data/create/advancements/recipes/misc/crafting/kinetics/placard.json +293f057653f70b25e9f94ddb514c8b95be3169ed data/create/advancements/recipes/misc/crafting/kinetics/portable_fluid_interface.json +c56ed6c06c97571d88e1dd270e6ed8dc917c1c4c data/create/advancements/recipes/misc/crafting/kinetics/portable_storage_interface.json +02a7d6044daf029e146cedf5962180eabdc12da9 data/create/advancements/recipes/misc/crafting/kinetics/propeller.json +1d12e5d24a9469f41506dd15b1f40b3489072d7e data/create/advancements/recipes/misc/crafting/kinetics/radial_chassis.json +0cc198acbc6355e66febbb10c890a15517043290 data/create/advancements/recipes/misc/crafting/kinetics/rope_pulley.json +0171ff48525e4f52556d4052ce61a2651c94ee4e data/create/advancements/recipes/misc/crafting/kinetics/rose_quartz_lamp.json +a48ba9ff9296828767929cdece32b105911def6b data/create/advancements/recipes/misc/crafting/kinetics/rotation_speed_controller.json +b0015a697c8c9e4de401822be7146b503b2a9517 data/create/advancements/recipes/misc/crafting/kinetics/sail_framefrom_conversion.json +df5d477fe7e901ac33187160081061ace0a291a9 data/create/advancements/recipes/misc/crafting/kinetics/schedule.json +b3222b4ad0e076b5dbedb93e49e947a960572f95 data/create/advancements/recipes/misc/crafting/kinetics/secondary_linear_chassisfrom_conversion.json +319154470d3c5289e1657947b312323e6bc0da52 data/create/advancements/recipes/misc/crafting/kinetics/sequenced_gearshift.json +b7b1cddd6964faf54efa794aa6697c16855c968c data/create/advancements/recipes/misc/crafting/kinetics/shaft.json +28b94c9f030cd0f4c4c68f2c6123566066af4a0f data/create/advancements/recipes/misc/crafting/kinetics/smart_chute.json +298f59618e269714385fb9cf7a2e973d61380a40 data/create/advancements/recipes/misc/crafting/kinetics/smart_fluid_pipe.json +a6dfc4c646a359ebfb4fc839bde6ebcde54ae1a6 data/create/advancements/recipes/misc/crafting/kinetics/speedometer.json +a48f86ff4efc8f322feef41db862a39e681043b9 data/create/advancements/recipes/misc/crafting/kinetics/speedometerfrom_conversion.json +d2315557fb6d9c5086c8801033b6562c775e35e6 data/create/advancements/recipes/misc/crafting/kinetics/spout.json +31c0a0d5d6d1a01b4f9702e5a23c9341727fe4e8 data/create/advancements/recipes/misc/crafting/kinetics/steam_engine.json +a5396817b5978fd150f8c3ef33a0cbff22a9e315 data/create/advancements/recipes/misc/crafting/kinetics/steam_whistle.json +0123b8926c6e37551b8e3fdb72f44da181cd4e03 data/create/advancements/recipes/misc/crafting/kinetics/sticker.json +c510077aaf3b7b8cea230578f835bf4e679089bf data/create/advancements/recipes/misc/crafting/kinetics/sticky_mechanical_piston.json +8e2048e5e795b971ede965d56b2eb46eb71e106e data/create/advancements/recipes/misc/crafting/kinetics/stressometerfrom_conversion.json +fc9a10e60637cb2da98825a1d79359431fdd8e9b data/create/advancements/recipes/misc/crafting/kinetics/super_glue.json +32086aec6acc2e236ccd1bdcad8077355cfbc801 data/create/advancements/recipes/misc/crafting/kinetics/track_observer.json +4c109779fa881db7589ced1b7816b48700ad9d17 data/create/advancements/recipes/misc/crafting/kinetics/track_observer_from_other_plates.json +7fe5ed588d5a4380fab9437311eb5ca80b7764af data/create/advancements/recipes/misc/crafting/kinetics/track_signal.json +d05bf9eb0708fd08727414a05432119547683c82 data/create/advancements/recipes/misc/crafting/kinetics/track_station.json +12dfae029c11896db2ad9fe7bf833d8e2bd4ac73 data/create/advancements/recipes/misc/crafting/kinetics/train_door.json +13c05d4a0d21a98633f332cf4e29fa9d984c2b97 data/create/advancements/recipes/misc/crafting/kinetics/train_trapdoor.json +2a765b5135e700fc7051d4b66e6be8d971445bda data/create/advancements/recipes/misc/crafting/kinetics/turntable.json +32a8453e28678b0efb9cc70cf38e72801a718793 data/create/advancements/recipes/misc/crafting/kinetics/vertical_gearbox.json +8eca7b132f53c805ef71bbe148a4b6eb482d5d0d data/create/advancements/recipes/misc/crafting/kinetics/vertical_gearboxfrom_conversion.json +dd4849e6ac91a82a4663477dd2ea51375d184bb3 data/create/advancements/recipes/misc/crafting/kinetics/water_wheel.json +3bee8e0d4e324868eff29a6a86080d7a8656f298 data/create/advancements/recipes/misc/crafting/kinetics/weighted_ejector.json +370503ffc2272ceac8e48cabb745d9b3fd255745 data/create/advancements/recipes/misc/crafting/kinetics/whisk.json +45e1e9501b61eebec228cd2b9832103ec837f391 data/create/advancements/recipes/misc/crafting/kinetics/white_sail.json +7f4908fac450a7a8d74ad7d4fbbe970f177d272c data/create/advancements/recipes/misc/crafting/kinetics/white_sailfrom_conversion.json +74f446a14c9b70174d2a4d59d99907322ea74c61 data/create/advancements/recipes/misc/crafting/kinetics/windmill_bearing.json +28e5044c7c9cfdefa23f9371ee995c04ecb10d2c data/create/advancements/recipes/misc/crafting/kinetics/wooden_bracket.json +fddb0494d761952a22046cd17b74ff3de1e50246 data/create/advancements/recipes/misc/crafting/kinetics/wrench.json +9b2cf526d26bda023d0ed656ce34855fdd5f6f0d data/create/advancements/recipes/misc/crafting/logistics/andesite_funnel.json +aa20a408807e09045d1f50b8c50311229272593c data/create/advancements/recipes/misc/crafting/logistics/andesite_tunnel.json +f3e387ae41a55cdb5ff745f40e2ddb5e2595e9b8 data/create/advancements/recipes/misc/crafting/logistics/brass_funnel.json +dc61a327753684a0d8a7bcc408d656b53ac633b1 data/create/advancements/recipes/misc/crafting/logistics/brass_tunnel.json +03c367840951af268047c407b15aad52f0b094b4 data/create/advancements/recipes/misc/crafting/logistics/content_observer.json +09454f1d4db813c89a0a2f3af966298fc5f7da7b data/create/advancements/recipes/misc/crafting/logistics/display_link.json +95b357cbac39acfbc68ac04d0d4681a4d91746ee data/create/advancements/recipes/misc/crafting/logistics/powered_latch.json +ef84b382bd4f6ba9558574f2c8e63030813594e9 data/create/advancements/recipes/misc/crafting/logistics/powered_toggle_latch.json +c443707391ce79dc1ec8cfacee74757b0c00bd3e data/create/advancements/recipes/misc/crafting/logistics/pulse_extender.json +77c3df89a06fc10cd8bd1cc35f0353441860ec11 data/create/advancements/recipes/misc/crafting/logistics/pulse_repeater.json +96b4998626e624fb79c79fb754c28b21ddc27254 data/create/advancements/recipes/misc/crafting/logistics/redstone_contact.json +1b50ed47c37e48d1112c76059574eed71ecea4e5 data/create/advancements/recipes/misc/crafting/logistics/redstone_link.json +831588b3f29411d5c4b358006051152eb2b23e6b data/create/advancements/recipes/misc/crafting/logistics/stockpile_switch.json +cb416511a219d2bc5806c6880c01820a8b563b80 data/create/advancements/recipes/misc/crafting/materials/andesite_alloy.json +3b65a04da4e16442bfa8accfe209b7c5342b1db9 data/create/advancements/recipes/misc/crafting/materials/andesite_alloy_block.json +2715b888b6d96ee4c7208af21bb4dfb1a1bd544c data/create/advancements/recipes/misc/crafting/materials/andesite_alloy_from_block.json +2ca100aa71cc3419c47d1028f5c77aa9387ab216 data/create/advancements/recipes/misc/crafting/materials/andesite_alloy_from_zinc.json +47e965b7ba2b12000efcf6f9090b5622833cc9ab data/create/advancements/recipes/misc/crafting/materials/brass_block_from_compacting.json +8aa51bd8685a70f200506d3efd4e73ce9b2d7370 data/create/advancements/recipes/misc/crafting/materials/brass_ingot_from_compacting.json +9e703c5fa1bd44eb6581e745f06923d40126ada4 data/create/advancements/recipes/misc/crafting/materials/brass_ingot_from_decompacting.json +4cb9d1fc5289b11df4610a85aa2cd67877556b32 data/create/advancements/recipes/misc/crafting/materials/brass_nugget_from_decompacting.json +ffcd3f0339794c782a8be8434cd79de15d0ab3cc data/create/advancements/recipes/misc/crafting/materials/copper_ingot.json +58c23978d7222951cba2bbf3020cd0c2c6f85ac9 data/create/advancements/recipes/misc/crafting/materials/copper_nugget.json +d4879e7721bdbb6c7029ac88ff5684acec8223d6 data/create/advancements/recipes/misc/crafting/materials/electron_tube.json +04b844e7f79f35ad4ad2e1d4dcb1d34e82cce33a data/create/advancements/recipes/misc/crafting/materials/experience_block.json +4defe740963f64be169996722794bc8b26c3d456 data/create/advancements/recipes/misc/crafting/materials/experience_nugget_from_block.json +aa2067bedd73d45dcf4bf2c1a30d227d4de4f57d data/create/advancements/recipes/misc/crafting/materials/raw_zinc.json +06a3797c9c16641e05a257980a6afc522d2635b5 data/create/advancements/recipes/misc/crafting/materials/raw_zinc_block.json +59018ba1b05242dfc25d5de72fcff572ab18d424 data/create/advancements/recipes/misc/crafting/materials/red_sand_paper.json +03560f4fe648ea51160efaff89d3b7ef0cd87d69 data/create/advancements/recipes/misc/crafting/materials/rose_quartz.json +5aeaf7bdfb4a8abec97af7b055ea9209221fef9d data/create/advancements/recipes/misc/crafting/materials/rose_quartz_tilesfrom_conversion.json +489c20709121bfe0408566b0b89dfa685efef8e4 data/create/advancements/recipes/misc/crafting/materials/sand_paper.json +4fa119d82266d6b8390433842d610effb1a8ace1 data/create/advancements/recipes/misc/crafting/materials/small_rose_quartz_tilesfrom_conversion.json +0d60ad8d0436ed33a8013616390ca5e970e042ee data/create/advancements/recipes/misc/crafting/materials/zinc_block_from_compacting.json +8b9692de75d0c1d694bb3a2ce2316200ef3ff197 data/create/advancements/recipes/misc/crafting/materials/zinc_ingot_from_compacting.json +dd7c250fa8e41cbaae65754f38b8861397718ae4 data/create/advancements/recipes/misc/crafting/materials/zinc_ingot_from_decompacting.json +05a4420a08df24680b8a7c5c94d9a7ad1d13c0df data/create/advancements/recipes/misc/crafting/materials/zinc_nugget_from_decompacting.json +ec99015f13bb194dfb197ea0839cceaed5135148 data/create/advancements/recipes/misc/crafting/palettes/scorchia.json +541c3cb26e0cae9ffd3df94829e5f55a62240bd8 data/create/advancements/recipes/misc/crafting/schematics/empty_schematic.json +3e73c3336f3ab13365d439c491b2e2ce6de6e401 data/create/advancements/recipes/misc/crafting/schematics/schematicannon.json +6e0b7056d229fc949cc7386aa307d0870929f555 data/create/advancements/recipes/misc/crafting/schematics/schematic_and_quill.json +f0d041509b3752b3ec6c4ce2b2c6eef9825a0685 data/create/advancements/recipes/misc/crafting/schematics/schematic_table.json +a8003bd4c06bdf5f2aa3d1789eab2445df9513be data/create/advancements/recipes/misc/crafting/tree_fertilizer.json +0ac95fd4b991a6c61c1d03cc6a6f2f345530f62a data/create/advancements/recipes/misc/smelting/bread.json +53cb4643430e3fd69f81c375f3e334a3d6014128 data/create/advancements/recipes/misc/smelting/copper_ingot_from_crushed.json +cd04ca4af45d96bfba198f770257d58bdd508bec data/create/advancements/recipes/misc/smelting/glass_from_framed_glass.json +9fd42963e3d6101ee57f378add89c491381397d8 data/create/advancements/recipes/misc/smelting/glass_from_horizontal_framed_glass.json +368dabb93d16fe4948f439cef0f5763a5110cb95 data/create/advancements/recipes/misc/smelting/glass_from_tiled_glass.json +7b77758972dc4739493b65a11d882ce7e26bc00d data/create/advancements/recipes/misc/smelting/glass_from_vertical_framed_glass.json +bb87cb8787644e20b3418d6f57726f2ca70b0aae data/create/advancements/recipes/misc/smelting/glass_pane_from_framed_glass_pane.json +6e41e20d77d3c2a04eb95e606451922cb52f9702 data/create/advancements/recipes/misc/smelting/glass_pane_from_horizontal_framed_glass_pane.json +70342b3f5c5482caa82e0afcd559c7b200d9f247 data/create/advancements/recipes/misc/smelting/glass_pane_from_tiled_glass_pane.json +8635e2becb91b0e4e754fd79d231300492b8afce data/create/advancements/recipes/misc/smelting/glass_pane_from_vertical_framed_glass_pane.json +d76d08c3efcf9174ee2980796aa04c67fe9443eb data/create/advancements/recipes/misc/smelting/gold_ingot_from_crushed.json +5e222928aadd0a91f9996b0a104ec4b80646058c data/create/advancements/recipes/misc/smelting/ingot_aluminium_compat_ic2.json +1e88edf27ed1f83031f9d71cad8f3f4388f57b85 data/create/advancements/recipes/misc/smelting/ingot_aluminum_compat_immersiveengineering.json +2b6b739a2f0ad1f33db8090aa0e77c8149d67dbf data/create/advancements/recipes/misc/smelting/ingot_lead_compat_immersiveengineering.json +7392d585e5409438f70ddb43ebba58b35609265b data/create/advancements/recipes/misc/smelting/ingot_lead_compat_mekanism.json +ded4f782c4ff86ffeeae15a26cae065401285181 data/create/advancements/recipes/misc/smelting/ingot_nickel_compat_immersiveengineering.json +471da96bdc50929e50a4255998c365f6dd74f66b data/create/advancements/recipes/misc/smelting/ingot_osmium_compat_mekanism.json +862dbabc5443de70fdd8a032dc6b9f7f17d9ab5d data/create/advancements/recipes/misc/smelting/ingot_silver_compat_ic2.json +ef01495983cd871247bf756bcc4289a0fac0ddca data/create/advancements/recipes/misc/smelting/ingot_silver_compat_immersiveengineering.json +c5412d6466ce207be939599115ef45c00f441101 data/create/advancements/recipes/misc/smelting/ingot_tin_compat_ic2.json +600ffc56676b16e543526880d4a3e6d99a13fcc6 data/create/advancements/recipes/misc/smelting/ingot_tin_compat_mekanism.json +8408242e67c1f2c62e9f65e705a724c49b8afdcc data/create/advancements/recipes/misc/smelting/ingot_uranium_compat_ic2.json +288ad82d27d3565e474e37ee692c8b4f286654ec data/create/advancements/recipes/misc/smelting/ingot_uranium_compat_immersiveengineering.json +fee6714c2f63317cfb01bd5ce2ea91ba891b4e46 data/create/advancements/recipes/misc/smelting/ingot_uranium_compat_mekanism.json +c31f83bd1e3fc96c4317f9fbf096f6d62786302d data/create/advancements/recipes/misc/smelting/iron_ingot_from_crushed.json +1afa741f81b8ccb94aa587f05294f62292aa6c1d data/create/advancements/recipes/misc/smelting/lead_ingot_compat_oreganized.json +c8978574ede8f2c9c5a55c9d7ecfeac5e32ceba3 data/create/advancements/recipes/misc/smelting/lead_ingot_compat_thermal.json +497978714e828b74dddf12d32d0dcc1908b2c7c9 data/create/advancements/recipes/misc/smelting/nickel_ingot_compat_thermal.json +3e7f0954559c7f2d6e0e39b74f16aea9ce355c75 data/create/advancements/recipes/misc/smelting/scoria.json +8ae18bbf987001f34a5a4c3258f1265bf73808ab data/create/advancements/recipes/misc/smelting/silver_ingot_compat_galosphere.json +51d70536297006c6ac067950cba88cbac5c757f4 data/create/advancements/recipes/misc/smelting/silver_ingot_compat_iceandfire.json +17e72b6dc1113f3b66327166ac2fb361ae70d285 data/create/advancements/recipes/misc/smelting/silver_ingot_compat_oreganized.json +c03382450df717eed0c0c8583a08a07200fadd14 data/create/advancements/recipes/misc/smelting/silver_ingot_compat_thermal.json +0e5699d5a440d258fb8bdb1a1f85930f6eb32cd8 data/create/advancements/recipes/misc/smelting/tin_ingot_compat_thermal.json +1e22edba76fc82d3d06d72e3325fa015259561cb data/create/advancements/recipes/misc/smelting/zinc_ingot_from_crushed.json +b8d5ef1eba4521441658d4c051861ecf9cc96102 data/create/advancements/recipes/misc/smelting/zinc_ingot_from_ore.json +6a0e78a08d5e9303a96c62dd4a68c616337eeeeb data/create/advancements/recipes/misc/smelting/zinc_ingot_from_raw_ore.json +42f1375bf3004cfd891a5fbb05352f578636dd75 data/create/advancements/recipes/misc/smoking/bread.json +3c9dcf347eef42d0cca69ae5bc4a61fe90fb27c8 data/create/recipes/blasting/copper_ingot_from_crushed.json +cbd86c583643e65a0d9b7950dcf593cdf6d43d77 data/create/recipes/blasting/gold_ingot_from_crushed.json +4dccb0aaf5316c75f4dd03b497fb43bf20f7e279 data/create/recipes/blasting/ingot_aluminium_compat_ic2.json +5b1b7981636b211a956e37356423c2ba65c8042c data/create/recipes/blasting/ingot_aluminum_compat_immersiveengineering.json +f794d2eab3922ea7765866d473eb61c74a2678c5 data/create/recipes/blasting/ingot_lead_compat_immersiveengineering.json +7acb7c5bc88b238e914abc07f979c33f8d33123e data/create/recipes/blasting/ingot_lead_compat_mekanism.json +79ad6f95b7f4c75cc0c3fadcf8e16be077bd5874 data/create/recipes/blasting/ingot_nickel_compat_immersiveengineering.json +f403ea128ab6c8bc3e4c4b660bea3d8edb8c8c30 data/create/recipes/blasting/ingot_osmium_compat_mekanism.json +76394ca6f1b6aedd00facaab9e151451da914e47 data/create/recipes/blasting/ingot_silver_compat_ic2.json +2010401b8c4225226fb213375ba9d3b1ee8a451b data/create/recipes/blasting/ingot_silver_compat_immersiveengineering.json +1f08600db1e19f0dc0764c3fe0a0d8c2e62cb9e6 data/create/recipes/blasting/ingot_tin_compat_ic2.json +b979e859e631de8d229f08b0924d37212c7d92ee data/create/recipes/blasting/ingot_tin_compat_mekanism.json +40ff33cbc9d560f54aeb9de91eaf1fb3a31e556b data/create/recipes/blasting/ingot_uranium_compat_ic2.json +011179ff485992666fdad594d7daa050e44844c7 data/create/recipes/blasting/ingot_uranium_compat_immersiveengineering.json +0f6e3a23e0e1bb6bac077fac2b9cfcf50f3459f1 data/create/recipes/blasting/ingot_uranium_compat_mekanism.json +19d33cb473f7ba1065a7747700248cd8d6738732 data/create/recipes/blasting/iron_ingot_from_crushed.json +820fc633a9f2b4e04dc281bf356f0f1e30ee96ef data/create/recipes/blasting/lead_ingot_compat_oreganized.json +701da66616d4d9c3293e410af5e0dd764c9f63e1 data/create/recipes/blasting/lead_ingot_compat_thermal.json +6a10c8bb0b2a939edd79f159ec5acb9b137283c3 data/create/recipes/blasting/nickel_ingot_compat_thermal.json +3f4e9eca5646c4ef39e8f297e0d320a285360699 data/create/recipes/blasting/silver_ingot_compat_galosphere.json +1930c939c893aa3ffc2e6cccf87095ea0f1ae017 data/create/recipes/blasting/silver_ingot_compat_iceandfire.json +d57e0c60f865fb655e9d001369b89f5395590843 data/create/recipes/blasting/silver_ingot_compat_oreganized.json +e1481cbde99b04ce08c7fffdbd24233eb3bb8d0d data/create/recipes/blasting/silver_ingot_compat_thermal.json +150e9b6eaab4b98a326d915bbfe33fcdb95e2beb data/create/recipes/blasting/tin_ingot_compat_thermal.json +b3c4585dc6ed9c4a38d7923ae399b88ab8912df9 data/create/recipes/blasting/zinc_ingot_from_crushed.json +118d41c4194877ae9fffc3a72aae4bec0e9b3b57 data/create/recipes/blasting/zinc_ingot_from_ore.json +23077aeccd8712038ef04542713c2b365765346d data/create/recipes/blasting/zinc_ingot_from_raw_ore.json +785636ad3752d7a78059757d7ba21118be2a3289 data/create/recipes/campfire_cooking/bread.json +208487a2d020c2603391f55e815a39a28f8fd9e8 data/create/recipes/crafting/appliances/attribute_filter_clear.json +66c24da136abee4521d788df83f55b1c224d19fe data/create/recipes/crafting/appliances/clipboard.json +28d1dabd689b855964151100a80247b2ea150bd4 data/create/recipes/crafting/appliances/clipboard_clear.json +97932adf38574c2baf0ed2d5e3d62e7514e0c2bf data/create/recipes/crafting/appliances/copper_backtank.json +c500139f545fea4568575b93b1ab9e56f004f137 data/create/recipes/crafting/appliances/copper_diving_boots.json +77b28e10fcbe223f8235b193e899046b382382c9 data/create/recipes/crafting/appliances/copper_diving_helmet.json +3e3f71d579ec7453e453d5b65aaee3c43169b679 data/create/recipes/crafting/appliances/crafting_blueprint.json +b7c8f3c5e80749c6c38d5c0153dc68a79c32535f data/create/recipes/crafting/appliances/dough.json +409b5d70ee1ef9164c327d79472e6d66ce55dec6 data/create/recipes/crafting/appliances/filter_clear.json +265ead7993ae9e9b617dbfae749a77fed6b7b1ba data/create/recipes/crafting/appliances/linked_controller.json +32d4ba22e5133284793b4854f1a6798dd1f50ea0 data/create/recipes/crafting/appliances/netherite_backtank.json +de4c3f66e8664c607900c672ee1c20d3442fdebc data/create/recipes/crafting/appliances/netherite_backtank_from_netherite.json +b5b29558d4efe161f6edaeae2c449735d46261ca data/create/recipes/crafting/appliances/netherite_diving_boots.json +5a6d3e59e8fa623b147600cae7065e22af9c2cbf data/create/recipes/crafting/appliances/netherite_diving_boots_from_netherite.json +5eae779a8c16a4efb8fa61996c608bc44c55da7f data/create/recipes/crafting/appliances/netherite_diving_helmet.json +26eec27acd056e62510bc831cc6e6823a45c51b8 data/create/recipes/crafting/appliances/netherite_diving_helmet_from_netherite.json +0b83c52c90948141e5807b7d1243fb5d48d4c998 data/create/recipes/crafting/appliances/schedule_clear.json +05e4700f7fd59029ba19bcfb7b49fd3a30a93cad data/create/recipes/crafting/appliances/slime_ball.json +d0bad974476c54315e4b656c67dbf6165d183bbc data/create/recipes/crafting/appliances/tree_fertilizer.json +5b499ce4eee741d17813f96274333abfa2de99a9 data/create/recipes/crafting/curiosities/brown_toolbox.json +05eb422734dcdd4c499437ae564e73af5c2e4673 data/create/recipes/crafting/curiosities/cake.json +c3444000827e1f9553818dedec6d3dba4af9dfcd data/create/recipes/crafting/curiosities/minecart_coupling.json +1323b7c6d30d4e343e010902b7ebbfa2590a4cf5 data/create/recipes/crafting/curiosities/peculiar_bell.json +e54646485af774e490409e9912a3799f7ac44e01 data/create/recipes/crafting/curiosities/toolbox_dyeing.json +615dad758fc75a2ee5ac8ec95559b0cd1f3cdeb0 data/create/recipes/crafting/kinetics/adjustable_chain_gearshift.json +08712b652bf4f188836e0f15fab1b833018e83af data/create/recipes/crafting/kinetics/analog_lever.json +ea6479a3cb257bfe0bfaac380973ed068195620e data/create/recipes/crafting/kinetics/andesite_door.json +8d7c309edab26f714bd8cab2df600c6afaff44b8 data/create/recipes/crafting/kinetics/attribute_filter.json +5cf2f917005ace5eb726a0928bdc4f253cbca81d data/create/recipes/crafting/kinetics/basin.json +9043818635c6c7ab2e8b9711d95d6926bbbbe326 data/create/recipes/crafting/kinetics/belt_connector.json +989bd8580e18c716d588fbf3cf863ea238fffee8 data/create/recipes/crafting/kinetics/brass_door.json +a2e433b367baf9df12ced3a99c38940d67450440 data/create/recipes/crafting/kinetics/brass_hand.json +3c7cacaace022bd8b40e92d1e7ce0b371ed822d5 data/create/recipes/crafting/kinetics/cart_assembler.json +d0ac43c060418f273245316d62b4d87651d76c78 data/create/recipes/crafting/kinetics/chute.json +e51a22443987fdddbc7b3e48ca07fd341811f0e9 data/create/recipes/crafting/kinetics/clockwork_bearing.json +de55cc506471580096b73c66e14d0d1de2c01f11 data/create/recipes/crafting/kinetics/clutch.json +e5b87cc750175d18a636fa249511ccd3b05534a4 data/create/recipes/crafting/kinetics/cogwheel.json +b5a2ad992b86d7c9a34876a3dd4ce3a2aa7d8d10 data/create/recipes/crafting/kinetics/contraption_controls.json +1c656a1abb9f4cfb0a92f8d9a949ae41fc7ca812 data/create/recipes/crafting/kinetics/controller_rail.json +f829ecfffd4b0edbff419fe4c36dcf314eebb726 data/create/recipes/crafting/kinetics/controls.json +a427bb8d8a43ac01def064584ea48a76d4deffa5 data/create/recipes/crafting/kinetics/copper_door.json +914c2b5e89b7c20150413ded2444858aa009e4c6 data/create/recipes/crafting/kinetics/copper_valve_handle.json +0a27cbe56b973276519c605acbb923f5e1aaba3d data/create/recipes/crafting/kinetics/copper_valve_handle_from_others.json +9c9f4bf75355cfe8e8d459540d2dd923ddb557fb data/create/recipes/crafting/kinetics/crafter_slot_cover.json +a542bce0308b995ac0cc0bcff5b56e01495f2d40 data/create/recipes/crafting/kinetics/cuckoo_clock.json +eb5237fdd3f2105400360cff393878d4df5aec61 data/create/recipes/crafting/kinetics/deployer.json +ae909affec7808069c7eaecfcfc7736fb9c01504 data/create/recipes/crafting/kinetics/depot.json +d26d0a2f3836bdc92f9c43913acac2a93d713976 data/create/recipes/crafting/kinetics/display_board.json +03bf164f5332018731ac6b216b4f50baed3211bd data/create/recipes/crafting/kinetics/elevator_pulley.json +59278e0e0e75eb1c0f926bc90e19edfda5993261 data/create/recipes/crafting/kinetics/empty_blaze_burner.json +ca3e3063cdf135426e28d3474b5289ba1c5d9a1d data/create/recipes/crafting/kinetics/encased_chain_drive.json +7bb683f2398124b62595d6aa0afbdcde80acc028 data/create/recipes/crafting/kinetics/encased_fan.json +6c3a8f04e52a82c675c76963701244c78553cd32 data/create/recipes/crafting/kinetics/filter.json +871fae440820ae1145a86fe2d14a191b81bcd85f data/create/recipes/crafting/kinetics/fluid_pipe.json +3c0648bf72cf59c0378c2bd04be4b2ba86ec9e70 data/create/recipes/crafting/kinetics/fluid_pipe_vertical.json +0f35e80ba70e640c2d398e0bc2816887d5007e78 data/create/recipes/crafting/kinetics/fluid_tank.json +4eb7afa18b0ffb8e72b67e7ac99376328ec7eae3 data/create/recipes/crafting/kinetics/fluid_valve.json +e76feec18d287551720e3988d5b1e9c8fae04e22 data/create/recipes/crafting/kinetics/flywheel.json +8d0d07f0caa7b18ce0ea45ac21c4a6fdcbdd1702 data/create/recipes/crafting/kinetics/framed_glass_door.json +049d0f0c1ad0590d27800a5a1a6c670496f77cf7 data/create/recipes/crafting/kinetics/framed_glass_trapdoor.json +be87c0108dae97d6bcb637715749b96fbc656002 data/create/recipes/crafting/kinetics/furnace_minecart_from_contraption_cart.json +5ee1c8ad641287e649fd56505e673f37c16089fa data/create/recipes/crafting/kinetics/gantry_carriage.json +f9550471dcd0e446034d0c7010779ec10247ccf8 data/create/recipes/crafting/kinetics/gantry_shaft.json +32baae49676966ef04019c6c54e2e8363a23d883 data/create/recipes/crafting/kinetics/gearbox.json +a98b568daee4051397176d2fa2b6b2992b412a52 data/create/recipes/crafting/kinetics/gearboxfrom_conversion.json +096d09e6021e0c47f9daa259c0a9200ff36b3fbb data/create/recipes/crafting/kinetics/gearshift.json +18d983aaef9e32073ec656e60855cd2d56ef168f data/create/recipes/crafting/kinetics/goggles.json +bc69dfe59b369eead6f3da593eae5a107933d339 data/create/recipes/crafting/kinetics/hand_crank.json +61f63ef849eaca43b1ab7ea7ab899ea67a9e9257 data/create/recipes/crafting/kinetics/hose_pulley.json +0fea4be19a920774facca7ce4d304f31cb06c4f4 data/create/recipes/crafting/kinetics/item_drain.json +02f88fe9919e65f5b1b2f3bf5c25d67ac788757b data/create/recipes/crafting/kinetics/item_vault.json +ef525f4a19bc17fdfdd73c1e7ad65da0c8423b59 data/create/recipes/crafting/kinetics/large_cogwheel.json +04a9cd133f7e1f88a35653ea205bb5a7e63cbecd data/create/recipes/crafting/kinetics/large_cogwheel_from_little.json +b24ff0cffeb7c69e3c8f6fdc55e88e8067454142 data/create/recipes/crafting/kinetics/large_water_wheel.json +984f2dcd5d43959f5830231fbf0f535de9fb4b41 data/create/recipes/crafting/kinetics/linear_chassis.json +27944146a510a98193140b5bed5feef2c05c8014 data/create/recipes/crafting/kinetics/linear_chassisfrom_conversion.json +d3c5afadd966993262a89cad0c6892bacf15f4e0 data/create/recipes/crafting/kinetics/mechanical_arm.json +68ccedb968fb15507f553eba8e0f38730209c076 data/create/recipes/crafting/kinetics/mechanical_bearing.json +355d65ca635d657423dab36c22bfb6cdb6c66d67 data/create/recipes/crafting/kinetics/mechanical_crafter.json +f00bc557550bda01492d9ccc264327362230b91e data/create/recipes/crafting/kinetics/mechanical_drill.json +324fc5d01a0124e469a7113ab4a8e1f2b1990dd6 data/create/recipes/crafting/kinetics/mechanical_harvester.json +6bd5419642e6da9943f845a89686af7e9f303549 data/create/recipes/crafting/kinetics/mechanical_mixer.json +62ead7bf6a3e2da73d68607c61a024c6c83c8a17 data/create/recipes/crafting/kinetics/mechanical_piston.json +08f20ae721c0457a79d74b7a694dd85742f17ad7 data/create/recipes/crafting/kinetics/mechanical_plough.json +13b21bab5e29f4222f6f1b2c91fed5ebf59cbf04 data/create/recipes/crafting/kinetics/mechanical_press.json +613ec51032193322ef3f04679bafa95999f6cd77 data/create/recipes/crafting/kinetics/mechanical_pump.json +c05972188754de35e2a1da81d206fb091c5a44e4 data/create/recipes/crafting/kinetics/mechanical_roller.json +6b28ac50a952d28b1bb480db22c082556666ab3b data/create/recipes/crafting/kinetics/mechanical_saw.json +4f8f825246c78555e403b1319edf887688d3b3f8 data/create/recipes/crafting/kinetics/metal_bracket.json +06c49300fb22b39da8f8d45b9fa21bb0bd174e8f data/create/recipes/crafting/kinetics/metal_girder.json +dfd470b78af59f937893e71b6545e1ef0b05950e data/create/recipes/crafting/kinetics/millstone.json +76bcdecacf540457a752952eb29dcca3db8836a1 data/create/recipes/crafting/kinetics/minecart_from_contraption_cart.json +768c1afbd543a11b1b7c029c8c58c9c02c360a19 data/create/recipes/crafting/kinetics/mysterious_cuckoo_clock.json +c3463cbc2b2305b5f3ac28950c8deaead6838814 data/create/recipes/crafting/kinetics/nixie_tube.json +8384b63525d3412a00dbc8f4cd61b4f585d67c1d data/create/recipes/crafting/kinetics/nozzle.json +d1cc2faa5dc722f435008ad93e9e27e932607690 data/create/recipes/crafting/kinetics/piston_extension_pole.json +a653f85993ea7749beb57c93ebbe29aa2634e2ef data/create/recipes/crafting/kinetics/placard.json +041369b6aaca1cf870f970fd9d505b812f4e3c0b data/create/recipes/crafting/kinetics/portable_fluid_interface.json +d0a45019709e056429255d593d01e4e9f57e3e4b data/create/recipes/crafting/kinetics/portable_storage_interface.json +193a5032b0b9bb1ad73a5e4fdbf29b2c19d79815 data/create/recipes/crafting/kinetics/propeller.json +fa58c3eeca2d2cd2a42a60f8e72021288773d20f data/create/recipes/crafting/kinetics/radial_chassis.json +d772312c83aff31d1fc27156e254cb95fd27fc2c data/create/recipes/crafting/kinetics/rope_pulley.json +bb59333590f4408750a8e86ab6dabb4f8ea145ac data/create/recipes/crafting/kinetics/rose_quartz_lamp.json +42d334d81633d5f346b7e0c5005c1811fed293d9 data/create/recipes/crafting/kinetics/rotation_speed_controller.json +faaa02462c428daeefc7bc2d32d491afa49128c3 data/create/recipes/crafting/kinetics/sail_framefrom_conversion.json +dda3e44d83e8e2e4c45eda27758fc6f87118eb9d data/create/recipes/crafting/kinetics/schedule.json +0f3f10a756d32e438fdb51fb1e6d00ee1c05bc3f data/create/recipes/crafting/kinetics/secondary_linear_chassisfrom_conversion.json +a282f8e372b14819c20319736a52506f508f9c17 data/create/recipes/crafting/kinetics/sequenced_gearshift.json +b80b9bf1a36aab395cdd6200bcd3497c8e693ce1 data/create/recipes/crafting/kinetics/shaft.json +a1d7e73399044cab19fd564d71d5fdfa754181ae data/create/recipes/crafting/kinetics/smart_chute.json +31698b810c00c5bff2b213d465614bbde2cae2aa data/create/recipes/crafting/kinetics/smart_fluid_pipe.json +001868b8959c6d1583daa08ce7098a0bda349d08 data/create/recipes/crafting/kinetics/speedometer.json +fcd251937ad8ec78213d8d4277fefff3ae998061 data/create/recipes/crafting/kinetics/speedometerfrom_conversion.json +4549864bccf0fafeb190fe0fc0427c1feb6602cb data/create/recipes/crafting/kinetics/spout.json +ff9fa17b98d37c1814962fafb1ca60f07a3d0e8f data/create/recipes/crafting/kinetics/steam_engine.json +2b24f72c4d33d035db32005ff72623a61819ddcf data/create/recipes/crafting/kinetics/steam_whistle.json +87c25c7aa34b699586696344c83cdc181a93761c data/create/recipes/crafting/kinetics/sticker.json +19cc465a5e738785e91e2663f1b0c0e03f656b3a data/create/recipes/crafting/kinetics/sticky_mechanical_piston.json +27879de3fe0dbea5e4b6cec110459ce01cfa2556 data/create/recipes/crafting/kinetics/stressometerfrom_conversion.json +1fd12eac975ce2ffb6212e25f2309ad08537a4b6 data/create/recipes/crafting/kinetics/super_glue.json +ae836d3103b16bb7084109c4d25295f0a3bc6f7c data/create/recipes/crafting/kinetics/track_observer.json +1747771e1eb570c0cfdc97681d8b9d0ccb1db73d data/create/recipes/crafting/kinetics/track_observer_from_other_plates.json +af645fe446e0df755fb748383a51facbe9101ede data/create/recipes/crafting/kinetics/track_signal.json +19c3a19c824e283c73400ed6abf5e5b1bfce147c data/create/recipes/crafting/kinetics/track_station.json +35037a92ef619eea8c02fe21c1ab3fa567e9fb72 data/create/recipes/crafting/kinetics/train_door.json +26d9401533332cbc7580b32b45cdebf6ad3c523d data/create/recipes/crafting/kinetics/train_trapdoor.json +a02e799451c8051250ab077ee94bec8f17705d5f data/create/recipes/crafting/kinetics/turntable.json +c2644263571eb8a14ed535c1e88924a6098e2e6f data/create/recipes/crafting/kinetics/vertical_gearbox.json +613d2ef5c381445d9a0bb1020f9d0ab9fb04d766 data/create/recipes/crafting/kinetics/vertical_gearboxfrom_conversion.json +af2fc528dacef0300115977c681976b793329c8d data/create/recipes/crafting/kinetics/water_wheel.json +97054ad290c974f60d9be41c642e661442a98bca data/create/recipes/crafting/kinetics/weighted_ejector.json +9ab4fa87c54b6580d3f7a1f8be8790c8f30f41fa data/create/recipes/crafting/kinetics/whisk.json +7a933e80436c256804e8e448e954399933ccdcf4 data/create/recipes/crafting/kinetics/white_sail.json +9c7a4511aa52c4ab80ff692f0d7eca5cbf3fc470 data/create/recipes/crafting/kinetics/white_sailfrom_conversion.json +2e1e7414ec81f21640efb72f74eec8b4f6e9e105 data/create/recipes/crafting/kinetics/windmill_bearing.json +04162aed9da6d5c8f5da33d041d95c960bd743f8 data/create/recipes/crafting/kinetics/wooden_bracket.json +4818f756d9198fe17a27176c51fda90a830504e7 data/create/recipes/crafting/kinetics/wrench.json +f0d93f09ab7797d248eba96efd8e03e14f6c8a2c data/create/recipes/crafting/logistics/andesite_funnel.json +e18098af26d3e0d28fb7f2ac49379787384f0d03 data/create/recipes/crafting/logistics/andesite_tunnel.json +a24f11d979f40994b9f881b0f49fff5d93185296 data/create/recipes/crafting/logistics/brass_funnel.json +d994ef262b16357984d3ed62f6563d2f37266193 data/create/recipes/crafting/logistics/brass_tunnel.json +0b18d9964f2d580eb465cc72208f7a7fdba7b63e data/create/recipes/crafting/logistics/content_observer.json +cc837e8b014c121ed9d959baddea134ebf669350 data/create/recipes/crafting/logistics/display_link.json +dd28b63ceb46a1e9071549c4f8ff32f520c667f6 data/create/recipes/crafting/logistics/powered_latch.json +9ee6e19644928dc78e6f8a5e59f30cd42ac3e454 data/create/recipes/crafting/logistics/powered_toggle_latch.json +aa8a704ad643ff5f06db34f4047f7f740a556236 data/create/recipes/crafting/logistics/pulse_extender.json +8b0b342baa18cc47c7a60a3c9812fece28210cf6 data/create/recipes/crafting/logistics/pulse_repeater.json +c81f852f1d1514184ff235e790a6ca907f7b6ad4 data/create/recipes/crafting/logistics/redstone_contact.json +00877e6b56f28d8691080ef18b654f0a141835ce data/create/recipes/crafting/logistics/redstone_link.json +eff0d37e98e8badd8d2c3c9de17ee5560b110dbd data/create/recipes/crafting/logistics/stockpile_switch.json +ac524c110f66a7433208a888c5f3bb69e5e95743 data/create/recipes/crafting/materials/andesite_alloy.json +e6bb68a1d2ed5a629c83f5a0eefb843bb890736d data/create/recipes/crafting/materials/andesite_alloy_block.json +eebacb477bcce876622173289b06e1ad21424686 data/create/recipes/crafting/materials/andesite_alloy_from_block.json +5008707e622c0fa0b6df32da5da7230a4da574ca data/create/recipes/crafting/materials/andesite_alloy_from_zinc.json +f9f94e5082e7971e55b25bc00ba86c3579b492aa data/create/recipes/crafting/materials/brass_block_from_compacting.json +ecd8581ad4a04cc1217133363bd15d76129cb651 data/create/recipes/crafting/materials/brass_ingot_from_compacting.json +fe2f3c0722aa0f6b41ad0f497b9742eb856c0dd0 data/create/recipes/crafting/materials/brass_ingot_from_decompacting.json +941b2c1007c4b3afb6e141a754141de1b1c9a43a data/create/recipes/crafting/materials/brass_nugget_from_decompacting.json +d4d6664d05c7406b4f839413d4e3c60cf0347fb7 data/create/recipes/crafting/materials/copper_ingot.json +4863d3feda514d414962c1947abaa232ab3f6cd5 data/create/recipes/crafting/materials/copper_nugget.json +66c0b1d060395826c4a45082a03295b5df450801 data/create/recipes/crafting/materials/electron_tube.json +66756dcaef1e092ae2b1e0aa4ae1a8b5af1a1243 data/create/recipes/crafting/materials/experience_block.json +bc0a0b576a8895c5e31374cd3e6f9f2c8e20d542 data/create/recipes/crafting/materials/experience_nugget_from_block.json +33cf710546277f3d41af2c2aa736e031f3e37e60 data/create/recipes/crafting/materials/raw_zinc.json +e89aa3ab801e3ce25387ae67c5e47bab518b9225 data/create/recipes/crafting/materials/raw_zinc_block.json +388654485ad957c58c4d6019273a85cebd468cca data/create/recipes/crafting/materials/red_sand_paper.json +712255438e212e37cad4bbf65b995385d37b3ce1 data/create/recipes/crafting/materials/rose_quartz.json +46cb889dd23d9a8a47f8b340abcbdbec35b21ee3 data/create/recipes/crafting/materials/rose_quartz_tilesfrom_conversion.json +cde25f253da4d9800fd8f879a7d208e40510df82 data/create/recipes/crafting/materials/sand_paper.json +39d9f3238bffd32a0bbe85f300bee0c71161f2df data/create/recipes/crafting/materials/small_rose_quartz_tilesfrom_conversion.json +24c99b98a2acb744a05f9ff4f22b783689e2b2f9 data/create/recipes/crafting/materials/zinc_block_from_compacting.json +5effb47ad68c8bacc4b1984a37b63ae3b02b3e88 data/create/recipes/crafting/materials/zinc_ingot_from_compacting.json +2636700eda7f06a9297af688c8b7963b2611ea42 data/create/recipes/crafting/materials/zinc_ingot_from_decompacting.json +11583ad28f32b7f22ffb71e180aface890d1d2d0 data/create/recipes/crafting/materials/zinc_nugget_from_decompacting.json +d849fafedd10c68e6bc6dc1e5a85be82aae1b139 data/create/recipes/crafting/palettes/scorchia.json +611c4a553408e0b6ddfcf6ed35bc972bea14ffda data/create/recipes/crafting/schematics/empty_schematic.json +9a687ee9dab44c439ab669aa596117064fb13457 data/create/recipes/crafting/schematics/schematicannon.json +4a20356c9ce01ebfbcacbdc5d3c31094a5599a17 data/create/recipes/crafting/schematics/schematic_and_quill.json +4a297162a630b48407dbc8ff8ca713387dcd3206 data/create/recipes/crafting/schematics/schematic_table.json +2cf06129b47d1a2b733619514dc9e8cf1d8967f2 data/create/recipes/crafting/tree_fertilizer.json +78526658ca5ccaa3729c967b5283069945d183b7 data/create/recipes/smelting/bread.json +04bb0c80f3b5a6fe86fc4a8ed5293fc74c2d9aba data/create/recipes/smelting/copper_ingot_from_crushed.json +d5b29fa27977691c3c50eb36c28bfe33b8462d09 data/create/recipes/smelting/glass_from_framed_glass.json +83f03ab4b1ca000ad7fe15c347ea10b728188e57 data/create/recipes/smelting/glass_from_horizontal_framed_glass.json +e4d3381d9c063adb3d6c7fa6a684100bc23f45ef data/create/recipes/smelting/glass_from_tiled_glass.json +945733fb708ed39d817e41cab47744d6516b4fca data/create/recipes/smelting/glass_from_vertical_framed_glass.json +ab1a181eb787f501ae7b8a8c6da2d3adb35a8f2b data/create/recipes/smelting/glass_pane_from_framed_glass_pane.json +1f3432f66d6557e2835457e4dc97ae7561074e79 data/create/recipes/smelting/glass_pane_from_horizontal_framed_glass_pane.json +ad412d18c2084dc74fff8a079a2e7ffb20f9a0c6 data/create/recipes/smelting/glass_pane_from_tiled_glass_pane.json +67c1143c7aac88a9cc91b98dbca60770cb1422a5 data/create/recipes/smelting/glass_pane_from_vertical_framed_glass_pane.json +461e4dede50a4a318281ae9c086c8094470e21a1 data/create/recipes/smelting/gold_ingot_from_crushed.json +0ceeee303ca8993c394fc597cdd7c5ef44d84ad0 data/create/recipes/smelting/ingot_aluminium_compat_ic2.json +fa0d3d6f50d344aa83ddf4ac8abf4a80deb9fb32 data/create/recipes/smelting/ingot_aluminum_compat_immersiveengineering.json +4e8cf8775719219849b1a0e95903a3605b665015 data/create/recipes/smelting/ingot_lead_compat_immersiveengineering.json +cfa90e7ba56d1ec6caa11bd019244bddd51da841 data/create/recipes/smelting/ingot_lead_compat_mekanism.json +921031330fc9d1d5cf8293d7863145d9b7c8becf data/create/recipes/smelting/ingot_nickel_compat_immersiveengineering.json +e718631b4ac8e8bb036435dd2b39c0ce77fa290d data/create/recipes/smelting/ingot_osmium_compat_mekanism.json +9126190da9b9bf21ef6a9681daa61ac01582dd71 data/create/recipes/smelting/ingot_silver_compat_ic2.json +ba80d1df860afa164dfba71ee3f16438f288b6aa data/create/recipes/smelting/ingot_silver_compat_immersiveengineering.json +fb556ed9c7405d4aba35cdbc306c000530d51774 data/create/recipes/smelting/ingot_tin_compat_ic2.json +9f8472e42fc3b1db65cbf5c878f4788846cf88b6 data/create/recipes/smelting/ingot_tin_compat_mekanism.json +2abae5f5258ed4c5c7fa8b9f1db3e648a0bc2b30 data/create/recipes/smelting/ingot_uranium_compat_ic2.json +b7830b774bfab54957b55c8ddc414b2427a49191 data/create/recipes/smelting/ingot_uranium_compat_immersiveengineering.json +a7b6ae172fb21be2d2b66da82a603300fae16185 data/create/recipes/smelting/ingot_uranium_compat_mekanism.json +5865b56a6e7dfc486235b635cf5a40e9d82cb79d data/create/recipes/smelting/iron_ingot_from_crushed.json +4711b10a0ab97bf933106ac5e397ffa17e92abf7 data/create/recipes/smelting/lead_ingot_compat_oreganized.json +76336bf2c2f35386a997cbc3125ae423595dd207 data/create/recipes/smelting/lead_ingot_compat_thermal.json +cc1e46b361bffebdf63c970d6f8bf09068e28e5b data/create/recipes/smelting/nickel_ingot_compat_thermal.json +0421f39da684e9cdd35c43d6e7e4706a2438d9d5 data/create/recipes/smelting/scoria.json +bb9e0e7f5526a52355e12979373bcdaefe01c1a6 data/create/recipes/smelting/silver_ingot_compat_galosphere.json +764525c2a2e345d3aaed9723e73cef70ed09d7df data/create/recipes/smelting/silver_ingot_compat_iceandfire.json +a7f1b27faf285dbb0867d7ab636e40c6a1326864 data/create/recipes/smelting/silver_ingot_compat_oreganized.json +51d4140efc896d4cf426426101048405fc4243bc data/create/recipes/smelting/silver_ingot_compat_thermal.json +fd994dc211b5da51c440703f3b3e14caa04de562 data/create/recipes/smelting/tin_ingot_compat_thermal.json +8ea35f78211932c11630cb03625b269ef55ef11a data/create/recipes/smelting/zinc_ingot_from_crushed.json +2b7206a2dce9613094ca53cf4653eab178bcb2dc data/create/recipes/smelting/zinc_ingot_from_ore.json +66d0fe89d30782123dcaafef4c53ee291921e311 data/create/recipes/smelting/zinc_ingot_from_raw_ore.json +874cf17060240c3e4e13f95d024b108650716d7d data/create/recipes/smoking/bread.json diff --git a/src/generated/resources/.cache/ad9bf59631726a3f24738ebf1a6cd44c7f88ba0f b/src/generated/resources/.cache/ad9bf59631726a3f24738ebf1a6cd44c7f88ba0f index 9fec6ab0a..65eee720e 100644 --- a/src/generated/resources/.cache/ad9bf59631726a3f24738ebf1a6cd44c7f88ba0f +++ b/src/generated/resources/.cache/ad9bf59631726a3f24738ebf1a6cd44c7f88ba0f @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.3560692 Create's Damage Type Tags +// 1.20.1 2024-10-09T12:24:59.2656887 Create's Damage Type Tags 7884716b2f4bb1330ff215366bb4bab06e4728c2 data/minecraft/tags/damage_type/bypasses_armor.json 1fcad1f89265fba8bdb05b03a1dfcc88d7b7a550 data/minecraft/tags/damage_type/is_explosion.json 08324c61115b72bb8a6370d7f34d84d9a31afd16 data/minecraft/tags/damage_type/is_fire.json diff --git a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 index eb1c1fe65..7cbe41f31 100644 --- a/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 +++ b/src/generated/resources/.cache/b256105d8411632b0d585496ea8944a751a08034 @@ -1,4 +1,4 @@ -// 1.19.2 2024-10-09T12:03:41.3884566 Create's Processing Recipes +// 1.20.1 2024-10-09T12:24:59.1833995 Create's Processing Recipes 3c94326fb730f68c1e44fe1e2ef09c9db6ffd92b data/create/recipes/compacting/andesite_from_flint.json 8d3d5b31f3601b9f681ff710e0545a483a1494c6 data/create/recipes/compacting/blaze_cake.json 8bd7f4e3a686ab520b2d55594d2018d0e9a50c91 data/create/recipes/compacting/chocolate.json @@ -13,8 +13,6 @@ e00be6905b6bcf72de937e3fe8bbceee6440a6b1 data/create/recipes/crushing/aluminum_o c444abdd432670f6a2b508c513302e119cb07186 data/create/recipes/crushing/asurine_recycling.json 66b51fd1036641802667338a1d79a825a338077c data/create/recipes/crushing/blaze_rod.json 29e7e74108755e0a07b1d3d1e8d4dcaf2b401572 data/create/recipes/crushing/coal_ore.json -fe351d413ff95ed8dc5da8fc50190492739ed61b data/create/recipes/crushing/compat/ae2/deepslate_quartz_ore.json -29ba89eb04c808cc8a03e2c75ae741090f0fb0b4 data/create/recipes/crushing/compat/ae2/quartz_ore.json d9a48b3aa36cfe4f792a31fd3ee50b442c1177f9 data/create/recipes/crushing/compat/aether/ambrosium_ore.json 81bdb03461bec6f8ca1201caa93805a751d7cda6 data/create/recipes/crushing/compat/aether/zanite_ore.json 73914b149bbd72251c1bd9a54cf6d087f6b2ba0b data/create/recipes/crushing/compat/byg/ametrine_ore.json @@ -41,12 +39,10 @@ fd27de35297f21376e9d1054409f6c2ed1fe68ed data/create/recipes/crushing/compat/ele 587cfb12b91ac731f9e9a9dd7ee387b221bd286c data/create/recipes/crushing/compat/elementaryores/ore_emerald_nether.json f1303c38024d102c2885babd59f50fcfb2f20b8c data/create/recipes/crushing/compat/elementaryores/ore_ender_end.json fa4af21ec7ca9d6bd96278135b2007ebca0f70cc data/create/recipes/crushing/compat/elementaryores/ore_ghast_nether.json -c39a4ad9ef83dec45c38394d99d3b9f9e0d1d824 data/create/recipes/crushing/compat/elementaryores/ore_iron_end.json 4222415db5c5c0cc8aafbfdbcebd295c377bb44b data/create/recipes/crushing/compat/elementaryores/ore_iron_nether.json 42a9c2ddfac196865694db470638c81f73c46bb9 data/create/recipes/crushing/compat/elementaryores/ore_lapis_end.json eac0542063e8718c9788c8b60144e35bbfdfcb24 data/create/recipes/crushing/compat/elementaryores/ore_lapis_nether.json afed14982eb85caf831e84a7e4309aa166f53823 data/create/recipes/crushing/compat/elementaryores/ore_redstone_end.json -cc42c9d452ac585f5ef91627d96ba6218bb36663 data/create/recipes/crushing/compat/elementaryores/ore_redstone_nether.json d98fab5641d0b4245d27bf0e3ce60676fb1980eb data/create/recipes/crushing/compat/exnihilosequentia/andesite.json 4153b4d4aaa532f93af0b12b8c65c665687d7dcd data/create/recipes/crushing/compat/exnihilosequentia/crushed_diorite.json dc2553cb5b88b17b50b39d4f1177b3985d7d2700 data/create/recipes/crushing/compat/exnihilosequentia/crushed_netherrack.json @@ -60,54 +56,20 @@ c9f6c53c34c4891a245dd9515eb573b40b4f3e0b data/create/recipes/crushing/compat/exn b04f95c02f37a0398c209a02ad08a8b0e9aaaaa9 data/create/recipes/crushing/compat/galosphere/lumiere.json bea05bc584958f479078cd6c16a06c50eae859cc data/create/recipes/crushing/compat/neapolitan/ice.json 2358ce4b7a3acb08d3d0a3e64295fb97dea2ec02 data/create/recipes/crushing/compat/quark/moss_block.json -3012e1a64f2889b2a735a4690b3562cabd2119a6 data/create/recipes/crushing/compat/silentgems/agate_ore.json 2631b2bdcf091f4d400e0a9d2be6f1f772edfdc9 data/create/recipes/crushing/compat/silentgems/alexandrite_ore.json -7a52da99e52f635b5e25d506891e14a0c9203a1d data/create/recipes/crushing/compat/silentgems/amber_ore.json -7e888d9baf81588c7af937e02144800643358507 data/create/recipes/crushing/compat/silentgems/amethyst_ore.json -218b568bfef559c54503ebba99188f9743220b58 data/create/recipes/crushing/compat/silentgems/ametrine_ore.json d11b5a993f5ed0105eb63361d8e9e8739d8a5273 data/create/recipes/crushing/compat/silentgems/ammolite_ore.json -1511e1507ad8b159c5688deb8a7a1c7288c38a46 data/create/recipes/crushing/compat/silentgems/apatite_ore.json -9af4c73eb8b6c8687ff0ed748103f7b9da244955 data/create/recipes/crushing/compat/silentgems/aquamarine_ore.json -dce6de74ea0923bf1029b92d939eb3edcf5ee2f2 data/create/recipes/crushing/compat/silentgems/beniotite_ore.json 3f60a2cdfec1d15ad4dd8ccc5fd4e7d14ccafc14 data/create/recipes/crushing/compat/silentgems/black_diamond_ore.json 21c0ee3b80c3c9b5612367b63a981fe526d5d996 data/create/recipes/crushing/compat/silentgems/carnelian_ore.json -3e7d1732bfc2a2055b67b4bc06b3df7a605ce770 data/create/recipes/crushing/compat/silentgems/cats_eye_ore.json -8529f8f88beb4b69f234838974178a3554a06596 data/create/recipes/crushing/compat/silentgems/chrysoprase_ore.json 1f5eaa337f7b3262b83d99b2d8e8179bbf20fc89 data/create/recipes/crushing/compat/silentgems/citrine_ore.json -1bf6fb3289fdf61ac465e1653fb17f89515bb4c7 data/create/recipes/crushing/compat/silentgems/coral_ore.json -51750d1bb1c47fe28a0bedf3572b128b02407280 data/create/recipes/crushing/compat/silentgems/eculase_ore.json -d4402f6d504889a735c1b1a5c61e74edab052d67 data/create/recipes/crushing/compat/silentgems/flourite_ore.json -c04259acb68b96e6feb3e1736ac1340d85b7c6fc data/create/recipes/crushing/compat/silentgems/garnet_ore.json -e4f99efcba49c5603dd124e0845671d563e429a2 data/create/recipes/crushing/compat/silentgems/green_sapphire_ore.json -3b2ee5a7ecffb1dad32d7240f6c42708760ba338 data/create/recipes/crushing/compat/silentgems/helidor_ore.json f3257c0e08c4da373862ab9128df3a28fec17d26 data/create/recipes/crushing/compat/silentgems/iolite_ore.json -41d6e410fa32e53651c9c46d52311685a7dc946c data/create/recipes/crushing/compat/silentgems/jade_ore.json -45a3bc9fe0e66e8ffb2bf3349dfa091e80710a27 data/create/recipes/crushing/compat/silentgems/jasper_ore.json -872fcc361cf08203549f6223206e523709f4537a data/create/recipes/crushing/compat/silentgems/kunzite_ore.json ea65f0bb86c444401491f2f020dc040d263f4def data/create/recipes/crushing/compat/silentgems/kyanite_ore.json -fc82de6fb3d4d273a3f2c6d8ad478bdc32ac999c data/create/recipes/crushing/compat/silentgems/lepidolite_ore.json -7c505b5d2f30427a1e8c48d2d8c4b38366246284 data/create/recipes/crushing/compat/silentgems/malachite_ore.json 36f7fe4671a8ec1f8aa7a78260ce306033501691 data/create/recipes/crushing/compat/silentgems/moldavite_ore.json -d7e1a32643316bd16b447467b7a3b09afa87bc42 data/create/recipes/crushing/compat/silentgems/moonstone_ore.json -3c639cd381bca99d3eda87e7fb2174efaba72dd5 data/create/recipes/crushing/compat/silentgems/morganite_ore.json -a63a9a5a183fde65793f9856c987512b612a6b83 data/create/recipes/crushing/compat/silentgems/onyx_ore.json -6529e9e8289a2808647291f27bbcfabd340b5e57 data/create/recipes/crushing/compat/silentgems/opal_ore.json -9fa1bd00dcde3d7962bb93cf2500501143a37aa9 data/create/recipes/crushing/compat/silentgems/pearl_ore.json 466501f69b3c8b3ca7ad63f8db29f23136269e94 data/create/recipes/crushing/compat/silentgems/peridot_ore.json -e697a2ad8aa0580606a9bf27819107d9d0ba41df data/create/recipes/crushing/compat/silentgems/phosphophyllite_ore.json -90c3c7ac36a3664c0ffbe31810369756ce010cfe data/create/recipes/crushing/compat/silentgems/pyrope_ore.json ff54345899fa142839e496a737fa0a740b0d32db data/create/recipes/crushing/compat/silentgems/rose_quartz_ore.json 701ed26488cda81ee2ddd48e51f96890dee99899 data/create/recipes/crushing/compat/silentgems/ruby_ore.json f71bbcece1d63299ccf5bf892883abc67bab1d7d data/create/recipes/crushing/compat/silentgems/sapphire_ore.json -90ee28fbd167d9b3a35229a88739d642f7fecc82 data/create/recipes/crushing/compat/silentgems/sodalite_ore.json -4fa0967bfe4b9017ea3d58fd6d56300506b8ba69 data/create/recipes/crushing/compat/silentgems/spinel_ore.json -a66d3ddd2e214fd730e695a3c076507a09cc21ed data/create/recipes/crushing/compat/silentgems/sunstone_ore.json -403e9e40b2dfbb3c8b1f5c2e56af520d8567de3b data/create/recipes/crushing/compat/silentgems/tanzite_ore.json -57dcf6539dd33f043b8a99f72f7b43e9380688d9 data/create/recipes/crushing/compat/silentgems/tektite_ore.json 7e65a919156d62f2316b91198477eb3745285711 data/create/recipes/crushing/compat/silentgems/topaz_ore.json 4fb0c49b9385436cd85445c1ff0d7c0a69121596 data/create/recipes/crushing/compat/silentgems/turquoise_ore.json -70a01ee6bc686cda8390d77d304d9e5fcb715a89 data/create/recipes/crushing/compat/silentgems/yellow_diamond_ore.json -000995de66f5883cf0e24dcb5895860e4fc5a69f data/create/recipes/crushing/compat/silentgems/zircon_ore.json 5198e4e42ba81b048e1c2512fff64ecd4f9afe70 data/create/recipes/crushing/compat/simplefarming/barley.json 7a3f91add5e9cbaafd5ab29acf2b26fa6f0f9eec data/create/recipes/crushing/compat/simplefarming/oat.json 4c344201ebf58640d386d68adf864446bd3d8389 data/create/recipes/crushing/compat/simplefarming/rice.json @@ -194,8 +156,12 @@ b135e3faf6afef4b6a5f00197997b47ff8e90568 data/create/recipes/crushing/wool.json b5c33d039e3c9771b3ffc322aadae7e75a823635 data/create/recipes/cutting/acacia_log.json b45b88bf2ac614b2518437656746f8e8a465d693 data/create/recipes/cutting/acacia_wood.json cdb26cd91feeda5901f31f57c16517dda5287810 data/create/recipes/cutting/andesite_alloy.json +5afeada82e71eb5012e35725821792f64d92a6b3 data/create/recipes/cutting/bamboo_block.json +4ac4bb94de7b25a3eec85e8290ab5f2f6b2b4167 data/create/recipes/cutting/bamboo_planks.json 1a3dd0e51603a3e47da4465da210004c78028faf data/create/recipes/cutting/birch_log.json 71c3a093c849a99fbaef8772114ac9305627f2c1 data/create/recipes/cutting/birch_wood.json +31a1713f8bc5577b3fcf2fcfd2d42dac145f9560 data/create/recipes/cutting/cherry_log.json +0f54293540ad75e6395452253f4ab5c8e5166e93 data/create/recipes/cutting/cherry_wood.json 4f756e256a7814e2b9a6632d38633bb78c5046cd data/create/recipes/cutting/compat/architects_palette/stripped_twisted_log.json 310dfb6c7e7649c0ede306fda71459e7f2bc8c7e data/create/recipes/cutting/compat/architects_palette/stripped_twisted_wood.json 8645e8ee47b0a6a432f85b7f2e07957e21adeb70 data/create/recipes/cutting/compat/architects_palette/twisted_log.json @@ -246,8 +212,6 @@ b66953dee0ea9804e22aa6f296c49e81f34d2d18 data/create/recipes/cutting/compat/autu bf5a4170f365901a3d850387ff6338e576f8e8eb data/create/recipes/cutting/compat/autumnity/sappy_maple_wood.json 598201da89849526cc316b63b297814bc52d75d1 data/create/recipes/cutting/compat/autumnity/stripped_maple_log.json b93e929d2078211fd70d6df8d4eb065e6d4cc112 data/create/recipes/cutting/compat/autumnity/stripped_maple_wood.json -2469ee3ee07486d125fa476845533ef6bb1c9eb6 data/create/recipes/cutting/compat/biomesoplenty/cherry_log.json -0b80cdc4c48ce36d300aaa54be2f49fa684d2b41 data/create/recipes/cutting/compat/biomesoplenty/cherry_wood.json 76872508fd1b302d4e94a2017ea72f7d38de6273 data/create/recipes/cutting/compat/biomesoplenty/dead_log.json 6bee03a37457acfc937c36ffb2d58ca97218c002 data/create/recipes/cutting/compat/biomesoplenty/dead_wood.json c62f06b79bdac37704f0fa31459f98aeb2d4f7ae data/create/recipes/cutting/compat/biomesoplenty/fir_log.json @@ -264,8 +228,6 @@ fa8a8440905213675dd769ae29509a1cbcabb1c1 data/create/recipes/cutting/compat/biom 184b9042633580815a6d1e2e1f1d3c543f26a3e4 data/create/recipes/cutting/compat/biomesoplenty/palm_wood.json 919a8fbf9f8e7f398a28a8af71ca4ad48ed8d6db data/create/recipes/cutting/compat/biomesoplenty/redwood_log.json 165e2642f98885734b3f815579ff589b8f0b870e data/create/recipes/cutting/compat/biomesoplenty/redwood_wood.json -e01b8ec89beb25e803d5c7a3cc02b8623065584c data/create/recipes/cutting/compat/biomesoplenty/stripped_cherry_log.json -c7290c1339ca052176a1907ae9264ad106cd0238 data/create/recipes/cutting/compat/biomesoplenty/stripped_cherry_wood.json 1a3f84111c5027304bfe8d037fa853125b2183c2 data/create/recipes/cutting/compat/biomesoplenty/stripped_dead_log.json 8f2c2015927767d627be865dc603530dd05328ee data/create/recipes/cutting/compat/biomesoplenty/stripped_dead_wood.json 822d84a550496c7f2c3ee127314a50512dfe5c8c data/create/recipes/cutting/compat/biomesoplenty/stripped_fir_log.json @@ -292,8 +254,6 @@ f3c630ba88419ea2fdf55b03eac22aac88acd56c data/create/recipes/cutting/compat/biom f661dc5faff7e08489ef6ac4996864b79e53804a data/create/recipes/cutting/compat/biomesoplenty/willow_wood.json c3c4999b33f2f29f31f1ac2cd0256694e530b6ab data/create/recipes/cutting/compat/blue_skies/bluebright_log.json 686bb3eab9fd2fc0439ffe7c31c08dee37eb17c3 data/create/recipes/cutting/compat/blue_skies/bluebright_wood.json -297eec4fefb378592eb2f74c082379cd93e5c2a9 data/create/recipes/cutting/compat/blue_skies/cherry_log.json -62b05ddc8d5d634d9fe0262490f3bf08435ba9ee data/create/recipes/cutting/compat/blue_skies/cherry_wood.json dfcee56f35b64e0b6d9a86a113f56de78f0ce6b3 data/create/recipes/cutting/compat/blue_skies/crystallized_log.json 0f6fa127bf9fd14a799985437eb1554a527f71c8 data/create/recipes/cutting/compat/blue_skies/crystallized_wood.json a0ca7db3a2a631be843c697347ad70501b4e700c data/create/recipes/cutting/compat/blue_skies/dusk_log.json @@ -308,8 +268,6 @@ a5ceee5b1c402dfcb06851a696c4ba4e3c15d790 data/create/recipes/cutting/compat/blue 1960934756be7cb82421e9428622eb853c96c451 data/create/recipes/cutting/compat/blue_skies/starlit_wood.json c96c5ecb3913b7611cea45dd45be447313a53278 data/create/recipes/cutting/compat/blue_skies/stripped_bluebright_log.json 26af6c6fc9e093d466b8a920de16e95aca9e0fe6 data/create/recipes/cutting/compat/blue_skies/stripped_bluebright_wood.json -92086d7f5a5090e934868726542173c0f4694cfe data/create/recipes/cutting/compat/blue_skies/stripped_cherry_log.json -5b0a7d97c604b80cd81f30c6c9baa02dce908f9b data/create/recipes/cutting/compat/blue_skies/stripped_cherry_wood.json 2ef370bdc202010ef3f3d28a3df050b785178966 data/create/recipes/cutting/compat/blue_skies/stripped_dusk_log.json e64dc0f1b77303152596c2c092783d06cfaed371 data/create/recipes/cutting/compat/blue_skies/stripped_dusk_wood.json 523239c7e97a4d0ea9a602324926ff8c7de21122 data/create/recipes/cutting/compat/blue_skies/stripped_frostbright_log.json @@ -344,8 +302,6 @@ cef520dc7a7c4ec257f2b4ab2b1b134ef29874f0 data/create/recipes/cutting/compat/byg/ 6b32af35555c83fee27c43858ebe03711c825d36 data/create/recipes/cutting/compat/byg/blue_enchanted_wood.json 2325864b4f7a80d466f5eef373f65cccb0557d55 data/create/recipes/cutting/compat/byg/bulbis_stem.json 52320312ae0aa6d957f841b430355d96afdbfe0b data/create/recipes/cutting/compat/byg/bulbis_wood.json -a1aae5af9bc5a95d90d7350330986743e6ddf408 data/create/recipes/cutting/compat/byg/cherry_log.json -82b41df50cfc394aa8e439bf259bba640bb375e8 data/create/recipes/cutting/compat/byg/cherry_wood.json 588ea2463640155d79724a694b5152574ea3f2a7 data/create/recipes/cutting/compat/byg/cika_log.json 880d0190030e3a70fd2a21ab4fc11604fbaac447 data/create/recipes/cutting/compat/byg/cika_wood.json 1fc63cafc946178443d1e362b9730455f2192b25 data/create/recipes/cutting/compat/byg/cypress_log.json @@ -394,8 +350,6 @@ fec45c1d4084c9de211876a3fd313313c18920b2 data/create/recipes/cutting/compat/byg/ 608a3d0bb5ca12e95141016099085821e47f4e98 data/create/recipes/cutting/compat/byg/stripped_blue_enchanted_wood.json 087dd3a1c516f9db9729974781bc68e13ff4b3de data/create/recipes/cutting/compat/byg/stripped_bulbis_stem.json f45c17bea93fc15f10b0c135ebf334a41a2e68d2 data/create/recipes/cutting/compat/byg/stripped_bulbis_wood.json -cb67e5541cef77a6dafdc825b39040ee95f86652 data/create/recipes/cutting/compat/byg/stripped_cherry_log.json -4fe4537e4e38cbf19e6a2d04481e6d849edc8374 data/create/recipes/cutting/compat/byg/stripped_cherry_wood.json 4187543812af8be22977b2b503ffb16ff82e38e6 data/create/recipes/cutting/compat/byg/stripped_cika_log.json 72c90971b638693cf7425ff59530672f37433b52 data/create/recipes/cutting/compat/byg/stripped_cika_wood.json c66c179d9989be618909104ba8e0f399ca34a630 data/create/recipes/cutting/compat/byg/stripped_cypress_log.json @@ -472,12 +426,8 @@ bfa59f4024105be24f441ec9e1fe2394bb4c32ed data/create/recipes/cutting/compat/envi 62b927056738fbbbb1ceb7b2b3f23e45c94cdd1b data/create/recipes/cutting/compat/environmental/wisteria_wood.json 97d07cbd21b147d93cbfea6534258f0b5faabbbb data/create/recipes/cutting/compat/forbidden_arcanus/aurum_log.json b08980c7deb9a4de4983fdae188f0c5ac627c1e5 data/create/recipes/cutting/compat/forbidden_arcanus/aurum_wood.json -6d4536b52410f319b7848c0a21d18f1e16e6ad4b data/create/recipes/cutting/compat/forbidden_arcanus/cherry_log.json -e440058dbfa78f8535439c738798072cfe20aad2 data/create/recipes/cutting/compat/forbidden_arcanus/cherry_wood.json 47902025354c45f34fa62402fc5f32db6648a7c3 data/create/recipes/cutting/compat/forbidden_arcanus/stripped_aurum_log.json f8f97315cfcd7e76229b9856ca6b2942bd7754f5 data/create/recipes/cutting/compat/forbidden_arcanus/stripped_aurum_wood.json -e16fd6870670e212ea7e9e84a2e3e65f34e2c6a8 data/create/recipes/cutting/compat/forbidden_arcanus/stripped_cherry_log.json -0b3598e3d00b76abc78de03671824862d9bbc262 data/create/recipes/cutting/compat/forbidden_arcanus/stripped_cherry_wood.json c6e138b6adf0311deebeff7cacdcdb57337f41da data/create/recipes/cutting/compat/goodending/cypress_log.json cac6d3d763a3909d9a1f3eebe83190013e323e8a data/create/recipes/cutting/compat/goodending/cypress_wood.json a3664dc30807cbc7903f79944bfb9b7d08a91671 data/create/recipes/cutting/compat/goodending/muddy_oak_log.json @@ -500,28 +450,6 @@ d8ea31f8eac026d99a26ab200eeca6faee064d9c data/create/recipes/cutting/compat/neth 536ed770010fcf8ba56f6333d58fa09b974b95c4 data/create/recipes/cutting/compat/nethers_exoticism/stripped_jabuticaba_log.json 8c84afc4870ff5c8d936dd1363e18531f27c6233 data/create/recipes/cutting/compat/nethers_exoticism/stripped_ramboutan_log.json 4119174e4e7126b66d05e78e7415558a31ba6540 data/create/recipes/cutting/compat/nethers_exoticism/stripped_ramboutan_wood.json -bacf792a68f1a4306c7028e6521a69c26a969183 data/create/recipes/cutting/compat/projectvibrantjourneys/aspen_log.json -3fcc8d12a67b9122396d5c03bbc328841f6c316d data/create/recipes/cutting/compat/projectvibrantjourneys/baobab_log.json -16bb2e61990218008595b6f23920cb2ef6ce03b2 data/create/recipes/cutting/compat/projectvibrantjourneys/cottonwood_log.json -50bc3aa74aa8250e1f99b9b3f245a37ef81dbc0c data/create/recipes/cutting/compat/projectvibrantjourneys/fir_log.json -9b4e50f6d9a09596eea6b638a14b6e1d1ab54b20 data/create/recipes/cutting/compat/projectvibrantjourneys/juniper_log.json -752fcc929aab962c2306cde60f9a676f70d8dfe5 data/create/recipes/cutting/compat/projectvibrantjourneys/mangrove_log.json -99641eeee124922dd259f9755aa66eba560d4cf4 data/create/recipes/cutting/compat/projectvibrantjourneys/maple_log.json -7ec474893ba922ad695bd6a119471646928ce82b data/create/recipes/cutting/compat/projectvibrantjourneys/palm_log.json -355917b2e4e70ccf5c8feba4b5c99526c8fc0a6f data/create/recipes/cutting/compat/projectvibrantjourneys/pine_log.json -9ef4110ba5a7c70ed0e961778b349c3acc620c0f data/create/recipes/cutting/compat/projectvibrantjourneys/redwood_log.json -61a8d67e2f051dd25ac8afdf13be2d8fdc6682d0 data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_aspen_log.json -f38e6e9e18a4b6ae1a0a06a825a525e27af37de0 data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_baobab_log.json -379a5b32938761404f70e88cc4a20c91fc9a5cd8 data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_cottonwood_log.json -e3e91e81ca6751e93073df69482230c751a72efe data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_fir_log.json -d4bccf5e5045eb0bd5be89f96249d7135695e36a data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_juniper_log.json -2b7f66a23ad8b15f0b059259463839faa1b75fef data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_mangrove_log.json -0d6faa369b52b15c903ab24f6894797cdfbd3cde data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_maple_log.json -4d39b74b0ed7b830067135671940ebf79aae866a data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_palm_log.json -b233b2f811b6d4ef1b9595b77f5ba7f0cee8ddeb data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_pine_log.json -0b293cb0b338a3937795c47051dd7131e641e566 data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_redwood_log.json -75559f5d33f679683a9649a2b6e471ee563fcbc0 data/create/recipes/cutting/compat/projectvibrantjourneys/stripped_willow_log.json -bb8114426af3e2e175bd07dd35cd1c8eaafdc309 data/create/recipes/cutting/compat/projectvibrantjourneys/willow_log.json 5a8b70f884741f155924174f8f8911574a782928 data/create/recipes/cutting/compat/quark/ancient_log.json 0b6953e5fd8f5d248f5327a8775e4e30a355ca49 data/create/recipes/cutting/compat/quark/ancient_wood.json a0194f77f72349786f6b87e641c9628f7fe46fdf data/create/recipes/cutting/compat/quark/azalea_log.json @@ -534,7 +462,7 @@ e05b81a5609420153b3ecace758a153bd88a4bef data/create/recipes/cutting/compat/quar f820204e8d99f21203b001da23e8b44cf61e33e2 data/create/recipes/cutting/compat/quark/stripped_azalea_wood.json af71513af8de414036ff73fee0eaca4b823de99c data/create/recipes/cutting/compat/quark/stripped_blossom_log.json 071c8a562233a342875c9cdd392bbebfe719e321 data/create/recipes/cutting/compat/quark/stripped_blossom_wood.json -7974c30fac993848316dad8ad14cac27389d434c data/create/recipes/cutting/compat/regions_unexplored/alpha_wood.json +9fe1249c4b24d82699829f1e8f3dc19de791dbd1 data/create/recipes/cutting/compat/regions_unexplored/alpha_log.json 27585fe96d7e211e4469c437c82c89c1268cf0bf data/create/recipes/cutting/compat/regions_unexplored/ashen_log.json bf04910ca9246aec3146eff28bc7d5d778c5d6d4 data/create/recipes/cutting/compat/regions_unexplored/ashen_wood.json 371e7f6a13a45006c21837847999e6e1b69e6320 data/create/recipes/cutting/compat/regions_unexplored/baobab_log.json @@ -714,8 +642,11 @@ e34df7cc80df6139a0f77cd5f7b8b17b0abbffa9 data/create/recipes/cutting/jungle_wood 85cf63074b922696ea691cfbc2cf7c348d4e0977 data/create/recipes/cutting/spruce_wood.json 1e83972fa75e6cef279da72312ae0577e6b074a3 data/create/recipes/cutting/stripped_acacia_log.json 070aa9790369a368666c03bf1cea9643ed0e5bc7 data/create/recipes/cutting/stripped_acacia_wood.json +558e81291da72b7f042b3b3270744b2c05ddc6fa data/create/recipes/cutting/stripped_bamboo_block.json 944dc5880749a146067716dd34b7edef77b925f5 data/create/recipes/cutting/stripped_birch_log.json 0ce39eb489b8d876954cbfcf715e94af79a57119 data/create/recipes/cutting/stripped_birch_wood.json +67c248e1be1e67054d4a65b94396d874156d5f29 data/create/recipes/cutting/stripped_cherry_log.json +1e34d2b0a2ae375ee312ca49aaaad8ff9e35b465 data/create/recipes/cutting/stripped_cherry_wood.json b90e5b0a18d6d2e7eae62d0caf41fb3dd597c1e9 data/create/recipes/cutting/stripped_crimson_hyphae.json 7244f0450df30a3b08139a1a43c82d3dfcc9f9a7 data/create/recipes/cutting/stripped_crimson_stem.json fc37b271373157c95e306bb33b6585dae45d3edb data/create/recipes/cutting/stripped_dark_oak_log.json @@ -789,7 +720,7 @@ f158f5e509b43746871722edf802984e2b9cc024 data/create/recipes/filling/compat/alex fd578bb1e05901d0b959b1f445273619b55cde57 data/create/recipes/filling/compat/neapolitan/milk_bottle.json 3f0f458c0c044c7b1c4e203d7394d890ba286d86 data/create/recipes/filling/compat/regions_unexplored/peat_grass_block.json ff16c74f09edbc67ed969f64270ca376bb8ea955 data/create/recipes/filling/compat/regions_unexplored/silt_grass_block.json -54926ae73f93913f32ec8d6b674c1b0c021bbe9a data/create/recipes/filling/compat/vampirism/cursed_grass_block.json +364eba8060e0d685dda6e88713a4a5c74f02ffbd data/create/recipes/filling/compat/vampirism/cursed_grass.json 12c19b46eec5bd371300dfcff5d2a9dd7169bb1b data/create/recipes/filling/glowstone.json afeb566e5f989c58d239a2f66084ce3d813d111a data/create/recipes/filling/grass_block.json 36d0f06ea9fa065ed85fc596e08725a2e6c8d4af data/create/recipes/filling/gunpowder.json @@ -861,22 +792,22 @@ e383106ff8f877b5995e20c03af5e41e3db541d9 data/create/recipes/milling/compat/biom 213e079f32baa2879702b72bdf08f146877a0bb9 data/create/recipes/milling/compat/biomesoplenty/violet.json b3f041e005491582f055da15871891357908d998 data/create/recipes/milling/compat/biomesoplenty/wildflower.json d08c4fcebb79e2e02ac9cb4623124332a05ed661 data/create/recipes/milling/compat/biomesoplenty/wilted_lily.json -ca03746c39143de7867aeab2fb450fe0a67b69e3 data/create/recipes/milling/compat/botania/black_petal.json -3192777eeb363a55174a0eb58197ee686b2e02c7 data/create/recipes/milling/compat/botania/blue_petal.json -ee99c9bdcc4da8d160fc762ce7b394848d6a86d1 data/create/recipes/milling/compat/botania/brown_petal.json -1d8dab24913945268f819c24e132d8bb74f792c2 data/create/recipes/milling/compat/botania/cyan_petal.json -010a111f9810f142315bc94dfb1be03ee02508c4 data/create/recipes/milling/compat/botania/gray_petal.json -dee8b4c26d6b78aceeb8e5a264693dad4e81dbcb data/create/recipes/milling/compat/botania/green_petal.json -285a24e440d6a8cf34f2925a3eed7fa1d16e102b data/create/recipes/milling/compat/botania/light_blue_petal.json -3cc232966240394aaf5a3a5d16a3ceebd41597a0 data/create/recipes/milling/compat/botania/light_gray_petal.json -1225119a7dc1f69dfaf2cec32a0267b1d47ef72d data/create/recipes/milling/compat/botania/lime_petal.json -09e114685483329a78c3cecf8b312f16d26cd981 data/create/recipes/milling/compat/botania/magenta_petal.json -ae3e7eb55dda1846b8fd849ea1c8f1cbd37b9fca data/create/recipes/milling/compat/botania/orange_petal.json -bf13e9807a96efc1ef684f0129cc21110e44cc4c data/create/recipes/milling/compat/botania/pink_petal.json -7e0a167201b9c915579ede71ee7128bccdeee9c2 data/create/recipes/milling/compat/botania/purple_petal.json -4e7c1ae95f10bb3466dd542a2e04c726c599ecd9 data/create/recipes/milling/compat/botania/red_petal.json -28cbeb278022b2ac62cae2f3deaa65cb375c6456 data/create/recipes/milling/compat/botania/white_petal.json -dd1e35234c419b1576410a2590fd33d88c8bb9bd data/create/recipes/milling/compat/botania/yellow_petal.json +4994095300eabfe98a86036e7fbba6c12cddb078 data/create/recipes/milling/compat/botania/black_petal.json +3516555e62ce7d6f0b5a57375339e69b4de41f83 data/create/recipes/milling/compat/botania/blue_petal.json +deb37dcb4b323590fbb76f21732e5b9016028f7d data/create/recipes/milling/compat/botania/brown_petal.json +d831337c28b89ce25a2be50e06719ab3be9400b6 data/create/recipes/milling/compat/botania/cyan_petal.json +1ec99d5ee65becc6c921827956e26f286398b1ba data/create/recipes/milling/compat/botania/gray_petal.json +7bcbd91fae49452fe30966b350c6830ad5bb588c data/create/recipes/milling/compat/botania/green_petal.json +5819b1ff0c54851d4bf7c60228ce2e31b8d8ffee data/create/recipes/milling/compat/botania/light_blue_petal.json +94b6cb826923907527c57e079d08fb410720b008 data/create/recipes/milling/compat/botania/light_gray_petal.json +4fe3b309902b0d59971d351d6e4a8066908df195 data/create/recipes/milling/compat/botania/lime_petal.json +b8f8ea5d52ae9cbdd59d60aabbac660859190855 data/create/recipes/milling/compat/botania/magenta_petal.json +eab4d51ba92d5a2f172de76bca72cf2746359b68 data/create/recipes/milling/compat/botania/orange_petal.json +c8cf3978e3bf0ffeccd18c1b16ea26c5e1c18634 data/create/recipes/milling/compat/botania/pink_petal.json +9ee958eb5fb176902255aa606517a362670f3d60 data/create/recipes/milling/compat/botania/purple_petal.json +3239b0a1ef91f61ab32f42ac3935ee99316089c5 data/create/recipes/milling/compat/botania/red_petal.json +15afbebf247ea66e0b023ea84aa5c5dad8ac8466 data/create/recipes/milling/compat/botania/white_petal.json +9c500a9d6cadb4f673ca63de38c1d3713dab061c data/create/recipes/milling/compat/botania/yellow_petal.json c7d2b07396448628123b81e1f34a8b131aa99c83 data/create/recipes/milling/compat/buzzier_bees/buttercup.json 0c4a3c7da1e151868740db2037504e35a02af3d0 data/create/recipes/milling/compat/buzzier_bees/pink_clover.json 355e89a3e003ae65ff06a9277c05699220eec569 data/create/recipes/milling/compat/buzzier_bees/white_clover.json @@ -1068,7 +999,7 @@ ed3edcf493402051fcff435a5840295b218a078c data/create/recipes/pressing/compat/env e049a1c6951c93a53122fc5adb27bee35ca62786 data/create/recipes/pressing/compat/infernalexp/warped_nylium_path.json 955613e743a216b10d54f94b89b23166adb49a40 data/create/recipes/pressing/compat/vampirism/cursed_earth_path.json 4ce4f4b71058d04be148cc2ad2318abe27a58359 data/create/recipes/pressing/copper_ingot.json -45ded8b090292bd1b6928a7fbc2fa47e66a7dcb1 data/create/recipes/pressing/cursed_earth_path_from_grass.json +24bb356954866c69a279a9f0435035d8bafdddec data/create/recipes/pressing/cursed_earth_path_from_grass.json 744e1a66857f20a094ba02a3e3613210a815493e data/create/recipes/pressing/gold_ingot.json fb105ac920ce9dc0b883bfa40029b69709bceb38 data/create/recipes/pressing/iron_ingot.json daf5c0c9e3f13d2004d53c54f4c1c36ae098d1ae data/create/recipes/pressing/path.json diff --git a/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 b/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 index 1c2e850a3..4184c4f4c 100644 --- a/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 +++ b/src/generated/resources/.cache/c24b4d2b8d15abff51c78bd94f4403d9eae6c139 @@ -1,2 +1,2 @@ -// 1.19.2 2024-10-09T12:03:41.3874594 Create's Custom Sounds +// 1.20.1 2024-10-09T12:24:59.2018604 Create's Custom Sounds bcfd9320f8ed54f3282b1757a41da0d1753e1754 assets/create/sounds.json diff --git a/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 b/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 index 64425656c..ba866d79a 100644 --- a/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 +++ b/src/generated/resources/.cache/e0a39a97205b7149114f15de91b614248d05fd95 @@ -1,2 +1,2 @@ -// 1.19.2 2024-10-09T12:03:41.3884566 Create's Recipe Serializer Tags +// 1.20.1 2024-10-09T12:24:59.2646915 Create's Recipe Serializer Tags 0d8718f7383761bc5d7bc45306ed266ebf25dc1d data/create/tags/recipe_serializer/automation_ignore.json diff --git a/src/generated/resources/.cache/eaed56ca9d9781c7626be345dd9f2c9a1fad638e b/src/generated/resources/.cache/eaed56ca9d9781c7626be345dd9f2c9a1fad638e index dedd3119f..5a2a21ad8 100644 --- a/src/generated/resources/.cache/eaed56ca9d9781c7626be345dd9f2c9a1fad638e +++ b/src/generated/resources/.cache/eaed56ca9d9781c7626be345dd9f2c9a1fad638e @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-02T22:36:27.3570669 Create's Generated Registry Entries +// 1.20.1 2024-10-09T12:24:59.2666858 Create's Generated Registry Entries 030ede1044384c4117ac1e491bf5c78bbd2842f5 data/create/damage_type/crush.json 92b0416950ffeb3ba68811e587177c2f8811c2c5 data/create/damage_type/cuckoo_surprise.json d2a4fdb64f4ba817e13a7b20c73fd1ca34b825fc data/create/damage_type/fan_fire.json diff --git a/src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminium_compat_ic2.json similarity index 83% rename from src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminium_compat_ic2.json index cc1c5b704..0baa9feeb 100644 --- a/src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/misc/blasting/ingot_aluminium_compat_ic2.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "create:blasting/ingot_aluminum_compat_ic2" + "recipe": "create:blasting/ingot_aluminium_compat_ic2" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "create:blasting/ingot_aluminum_compat_ic2" + "create:blasting/ingot_aluminium_compat_ic2" ] }, "sends_telemetry_event": false diff --git a/src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminum_compat_ic2.json b/src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminium_compat_ic2.json similarity index 83% rename from src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminum_compat_ic2.json rename to src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminium_compat_ic2.json index c7a9b5d7f..532ba3eea 100644 --- a/src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminum_compat_ic2.json +++ b/src/generated/resources/data/create/advancements/recipes/misc/smelting/ingot_aluminium_compat_ic2.json @@ -15,7 +15,7 @@ }, "has_the_recipe": { "conditions": { - "recipe": "create:smelting/ingot_aluminum_compat_ic2" + "recipe": "create:smelting/ingot_aluminium_compat_ic2" }, "trigger": "minecraft:recipe_unlocked" } @@ -28,7 +28,7 @@ ], "rewards": { "recipes": [ - "create:smelting/ingot_aluminum_compat_ic2" + "create:smelting/ingot_aluminium_compat_ic2" ] }, "sends_telemetry_event": false diff --git a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java index afeaad404..f4031bcb2 100644 --- a/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java +++ b/src/main/java/com/simibubi/create/foundation/mixin/BlockItemMixin.java @@ -21,7 +21,7 @@ public class BlockItemMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) private void create$fixDeployerPlacement(BlockPlaceContext pContext, CallbackInfoReturnable cir) { BlockState state = pContext.getLevel().getBlockState(((UseOnContextAccessor) pContext).create$getHitResult().getBlockPos()); - if (!state.getMaterial().isReplaceable() && pContext.getPlayer() instanceof DeployerFakePlayer) { + if (!state.canBeReplaced() && pContext.getPlayer() instanceof DeployerFakePlayer) { cir.setReturnValue(InteractionResult.PASS); } } From f0b8e49d1d3d58068ef23fae7184dd635ed14154 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:59:46 +0200 Subject: [PATCH 17/46] Mirror, Mirror on the Vault - Vaults and tanks no longer multi-place when a symmetry wand is active --- .../symmetryWand/SymmetryHandler.java | 19 +++++-------------- .../symmetryWand/SymmetryWandItem.java | 10 ++++++++++ .../content/fluids/tank/FluidTankItem.java | 3 +++ .../logistics/vault/ItemVaultItem.java | 3 +++ 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java index 06e1c2e07..116235545 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryHandler.java @@ -52,19 +52,13 @@ public class SymmetryHandler { if (event.getLevel() .isClientSide()) return; - if (!(event.getEntity() instanceof Player)) + if (!(event.getEntity() instanceof Player player)) return; - Player player = (Player) event.getEntity(); Inventory inv = player.getInventory(); - for (int i = 0; i < Inventory.getSelectionSize(); i++) { - if (!inv.getItem(i) - .isEmpty() - && inv.getItem(i) - .getItem() == AllItems.WAND_OF_SYMMETRY.get()) { + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) SymmetryWandItem.apply(player.level(), inv.getItem(i), player, event.getPos(), event.getPlacedBlock()); - } - } } @SubscribeEvent(priority = EventPriority.LOWEST) @@ -75,12 +69,9 @@ public class SymmetryHandler { Player player = event.getPlayer(); Inventory inv = player.getInventory(); - for (int i = 0; i < Inventory.getSelectionSize(); i++) { - if (!inv.getItem(i) - .isEmpty() && AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) { + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) SymmetryWandItem.remove(player.level(), inv.getItem(i), player, event.getPos()); - } - } } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java index c74f0aee9..c203e7976 100644 --- a/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/content/equipment/symmetryWand/SymmetryWandItem.java @@ -9,6 +9,7 @@ import java.util.function.Consumer; import javax.annotation.Nonnull; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllItems; import com.simibubi.create.AllPackets; import com.simibubi.create.content.contraptions.mounted.CartAssemblerBlock; import com.simibubi.create.content.equipment.symmetryWand.mirror.CrossPlaneMirror; @@ -27,6 +28,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -328,5 +330,13 @@ public class SymmetryWandItem extends Item { public void initializeClient(Consumer consumer) { consumer.accept(SimpleCustomRenderer.create(this, new SymmetryWandItemRenderer())); } + + public static boolean presentInHotbar(Player player) { + Inventory inv = player.getInventory(); + for (int i = 0; i < Inventory.getSelectionSize(); i++) + if (AllItems.WAND_OF_SYMMETRY.isIn(inv.getItem(i))) + return true; + return false; + } } diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java index 3dc6d500c..c86304e6b 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankItem.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.fluids.tank; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.api.connectivity.ConnectivityHandler; +import com.simibubi.create.content.equipment.symmetryWand.SymmetryWandItem; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -75,6 +76,8 @@ public class FluidTankItem extends BlockItem { if (!FluidTankBlock.isTank(placedOnState)) return; + if (SymmetryWandItem.presentInHotbar(player)) + return; boolean creative = getBlock().equals(AllBlocks.CREATIVE_FLUID_TANK.get()); FluidTankBlockEntity tankAt = ConnectivityHandler.partAt( creative ? AllBlockEntityTypes.CREATIVE_FLUID_TANK.get() : AllBlockEntityTypes.FLUID_TANK.get(), world, placedOnPos diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java index 260e86d37..dac93a634 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultItem.java @@ -2,6 +2,7 @@ package com.simibubi.create.content.logistics.vault; import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.api.connectivity.ConnectivityHandler; +import com.simibubi.create.content.equipment.symmetryWand.SymmetryWandItem; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.core.BlockPos; @@ -65,6 +66,8 @@ public class ItemVaultItem extends BlockItem { if (!ItemVaultBlock.isVault(placedOnState)) return; + if (SymmetryWandItem.presentInHotbar(player)) + return; ItemVaultBlockEntity tankAt = ConnectivityHandler.partAt(AllBlockEntityTypes.ITEM_VAULT.get(), world, placedOnPos); if (tankAt == null) return; From 51bb416b0e85c978743477813a0a50794ad55be9 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 14:15:58 +0200 Subject: [PATCH 18/46] Update mods.toml --- src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index f445004f8..ca8562b50 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -19,7 +19,7 @@ Technology that empowers the player.''' [[dependencies.create]] modId="forge" mandatory=true - versionRange="[47.0.0,)" + versionRange="[47.1.43,)" ordering="NONE" side="BOTH" From 7d1a3866ae0fe5b9189201b7f95685fa45d94fbf Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:25:24 +0200 Subject: [PATCH 19/46] Squashed commit of the following: commit 8ca03ded64e214b70d4edb357cd8589d96a5fc95 Author: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue Sep 3 14:10:40 2024 +0200 Hell on Overworld - Fixed incorrect dimension data in train map sync commit 86ceb9e95440e183fe3bd4392f5a760383fc089d Merge: 97205a7d5 b6856bda8 Author: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue Sep 3 12:58:34 2024 +0200 Merge branch 'mc1.20.1/dev' into mc1.20.1/train_map_integration commit 97205a7d5172be110d802b884ef4161044111211 Author: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue Sep 3 12:58:02 2024 +0200 Tube map - Added fullscreen map integration for FTB Chunks and Journeymap --- build.gradle | 24 + .../2d64935085b86659cb7857bad9701dbf9bab6e4c | 6 +- .../resources/assets/create/lang/en_ud.json | 16 + .../resources/assets/create/lang/en_us.json | 16 + .../java/com/simibubi/create/AllPackets.java | 6 +- .../java/com/simibubi/create/compat/Mods.java | 4 +- .../peripherals/StationPeripheral.java | 2 +- .../compat/trainmap/FTBChunksTrainMap.java | 158 ++++ .../compat/trainmap/JourneyTrainMap.java | 108 +++ .../compat/trainmap/TrainMapEvents.java | 56 ++ .../compat/trainmap/TrainMapManager.java | 730 ++++++++++++++++++ .../compat/trainmap/TrainMapRenderer.java | 259 +++++++ .../create/compat/trainmap/TrainMapSync.java | 353 +++++++++ .../compat/trainmap/TrainMapSyncClient.java | 56 ++ .../compat/trainmap/TrainMapSyncPacket.java | 65 ++ .../trainmap/TrainMapSyncRequestPacket.java | 23 + .../content/trains/GlobalRailwayManager.java | 2 + .../content/trains/entity/Carriage.java | 8 + .../create/content/trains/entity/Train.java | 5 + .../content/trains/entity/TrainPacket.java | 2 + .../content/trains/entity/TrainStatus.java | 6 +- .../trains/graph/TrackGraphSyncPacket.java | 2 + .../trains/station/AssemblyScreen.java | 4 +- .../trains/station/StationBlockEntity.java | 12 + .../content/trains/station/StationScreen.java | 63 +- .../trains/station/TrainEditPacket.java | 13 +- .../trains/track/BezierConnection.java | 109 ++- .../trains/track/TrackBlockEntity.java | 52 +- .../foundation/events/CommonEvents.java | 2 + .../create/foundation/gui/AllGuiTextures.java | 12 + .../foundation/mixin/CreateMixinPlugin.java | 43 ++ .../compat/JourneyFullscreenMapMixin.java | 40 + .../create/foundation/render/RenderTypes.java | 13 + .../create/infrastructure/config/CClient.java | 10 + .../assets/create/lang/default/interface.json | 17 + .../textures/gui/trainmap_sprite_sheet.png | Bin 0 -> 12190 bytes .../assets/create/textures/gui/widgets.png | Bin 9904 -> 11018 bytes src/main/resources/create.mixins.json | 4 +- 38 files changed, 2228 insertions(+), 73 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/JourneyTrainMap.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapEvents.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapRenderer.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapSync.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncClient.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncPacket.java create mode 100644 src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncRequestPacket.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/CreateMixinPlugin.java create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java create mode 100644 src/main/resources/assets/create/textures/gui/trainmap_sprite_sheet.png diff --git a/build.gradle b/build.gradle index 912004677..fb88a41c8 100644 --- a/build.gradle +++ b/build.gradle @@ -119,6 +119,22 @@ repositories { name = "squiddev" url = "https://squiddev.cc/maven/" } + maven { + name = "ftb" + url = "https://maven.saps.dev/releases" + } + maven { + name = "architectury" + url = "https://maven.architectury.dev/" + } + maven { + url = "https://jm.gserv.me/repository/maven-public/" + content { + includeGroup "info.journeymap" + includeGroup "mysticdrew" + } + } + maven { url = 'https://www.cursemaven.com' @@ -176,6 +192,14 @@ dependencies { // implementation fg.deobf("curse.maven:ic2-classic-242942:5555152") // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") // implementation fg.deobf("com.railwayteam.railways:railways-1.19.2-1.6.4:all") { transitive = false } + + implementation fg.deobf("dev.architectury:architectury-forge:9.1.12") + implementation fg.deobf("dev.ftb.mods:ftb-chunks-forge:2001.3.1") + implementation fg.deobf("dev.ftb.mods:ftb-teams-forge:2001.3.0") + implementation fg.deobf("dev.ftb.mods:ftb-library-forge:2001.2.4") + + implementation fg.deobf("curse.maven:journeymap-32274:5457831") + // implementation fg.deobf("ignored:journeymap-1.20.1-5.10.1-forge") // runtimeOnly fg.deobf("curse.maven:framedblocks-441647:5399211") // runtimeOnly fg.deobf("curse.maven:galosphere-631098:4574834") diff --git a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c index 92eb78af1..b01560667 100644 --- a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c +++ b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c @@ -1,4 +1,4 @@ -// 1.20.1 2024-10-09T12:24:59.2028575 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.20.1 2024-09-03T11:32:11.6637155 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json @@ -585,8 +585,8 @@ b0d8f08968763a5f74e5cd5644377a76a9f39753 assets/create/blockstates/yellow_toolbo fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json 64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json -d3d30a92e4f63e8acb6aa3e3358b6e8340aa8cc1 assets/create/lang/en_ud.json -a50be2f8a02b0fdd2b5a8aae9cf8df1490015707 assets/create/lang/en_us.json +1195fdc4fb51659c921e2bbe744a35107f787aa2 assets/create/lang/en_ud.json +632d1aac7255fc0f4804f4df138ce9926134d2f9 assets/create/lang/en_us.json a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json 103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index ae7ae5801..3c1a15489 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -2479,6 +2479,7 @@ "create.station.remove_auto_schedule": "ǝןnpǝɥɔS-oʇnⱯ pɹɐɔsıᗡ", "create.station.remove_schedule": "ǝןnpǝɥɔS ǝʌǝıɹʇǝᴚ", "create.station.retry": "ʎɹʇǝɹ puɐ sıɥʇ ǝʌןosǝᴚ", + "create.station.train_map_color": "sdɐW uo ɹoןoƆ", "create.station.train_not_aligned": "'ǝןqɯǝssɐsıp ʇouuɐƆ", "create.station.train_not_aligned_1": "pǝubıןɐ sǝbɐıɹɹɐɔ ןןɐ ʇou", "create.subtitle.blaze_munch": "sǝɥɔunɯ ɹǝuɹnᗺ ǝzɐןᗺ", @@ -2649,6 +2650,21 @@ "create.train_assembly.sideways_controls": "sʎɐʍǝpıs ǝɔɐɟ ʇouuɐɔ sןoɹʇuoƆ uıɐɹ⟘", "create.train_assembly.single_bogey_carriage": "uʍo sʇı uo ǝbɐıɹɹɐɔ ɐ ʇɹoddns ʇouuɐɔ ǝdʎʇ ʎǝboᗺ sıɥ⟘", "create.train_assembly.too_many_bogeys": "%1$s :pǝɥɔɐʇʇɐ sʎǝboᗺ ʎuɐɯ oo⟘", + "create.train_map.cannot_traverse_section": "ǝsɹǝʌɐɹʇ ʎןןnɟ ʇouuɐƆ ", + "create.train_map.conductor_missing": "buıssıW ɹoʇɔnpuoƆ >¡< ", + "create.train_map.derailed": "pǝןıɐɹǝᗡ >¡< ", + "create.train_map.for_other_train": "%1$s ɹoɟ ", + "create.train_map.fuel_boosted": "✔ pǝʇsooq ןǝnℲ ", + "create.train_map.navigation_failed": "pǝןıɐℲ uoıʇɐbıʌɐN >¡< ", + "create.train_map.player_controlled": "ɹǝʎɐןԀ ʎq pǝןןoɹʇuoƆ >- ", + "create.train_map.redstone_powered": "pǝɹǝʍoԀ ǝuoʇspǝᴚ ", + "create.train_map.schedule_interrupted": "pǝʇdnɹɹǝʇuI ǝןnpǝɥɔS >¡< ", + "create.train_map.section_reserved": "pǝʌɹǝsǝɹ uoıʇɔǝS ", + "create.train_map.toggle": "ʎɐןɹǝʌo ʞɹoʍʇǝu uıɐɹ⟘", + "create.train_map.train_at_station": "%1$s |> ", + "create.train_map.train_moving_to_station": ")ɯ%2$s( %1$s >> ", + "create.train_map.train_owned_by": "%1$s ʎq", + "create.train_map.waiting_at_signal": "ןɐubıS ʇɐ buıʇıɐM ", "create.tunnel.selection_mode.forced_round_robin": "uıqoᴚ punoᴚ pǝɔɹoℲ", "create.tunnel.selection_mode.forced_split": "ʇıןdS pǝɔɹoℲ", "create.tunnel.selection_mode.prefer_nearest": "ʇsǝɹɐǝN ɹǝɟǝɹԀ", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index fa9056942..164323107 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -2479,6 +2479,7 @@ "create.station.remove_auto_schedule": "Discard Auto-Schedule", "create.station.remove_schedule": "Retrieve Schedule", "create.station.retry": "Resolve this and retry", + "create.station.train_map_color": "Color on Maps", "create.station.train_not_aligned": "Cannot disassemble,", "create.station.train_not_aligned_1": "not all carriages aligned", "create.subtitle.blaze_munch": "Blaze Burner munches", @@ -2649,6 +2650,21 @@ "create.train_assembly.sideways_controls": "Train Controls cannot face sideways", "create.train_assembly.single_bogey_carriage": "This Bogey type cannot support a carriage on its own", "create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s", + "create.train_map.cannot_traverse_section": " Cannot fully traverse", + "create.train_map.conductor_missing": " Conductor Missing", + "create.train_map.derailed": " Derailed", + "create.train_map.for_other_train": " for %1$s", + "create.train_map.fuel_boosted": " Fuel boosted ✔", + "create.train_map.navigation_failed": " Navigation Failed", + "create.train_map.player_controlled": " -> Controlled by Player", + "create.train_map.redstone_powered": " Redstone Powered", + "create.train_map.schedule_interrupted": " Schedule Interrupted", + "create.train_map.section_reserved": " Section reserved", + "create.train_map.toggle": "Train network overlay", + "create.train_map.train_at_station": " >| %1$s", + "create.train_map.train_moving_to_station": " >> %1$s (%2$sm)", + "create.train_map.train_owned_by": "by %1$s", + "create.train_map.waiting_at_signal": " Waiting at Signal", "create.tunnel.selection_mode.forced_round_robin": "Forced Round Robin", "create.tunnel.selection_mode.forced_split": "Forced Split", "create.tunnel.selection_mode.prefer_nearest": "Prefer Nearest", diff --git a/src/main/java/com/simibubi/create/AllPackets.java b/src/main/java/com/simibubi/create/AllPackets.java index 3c68ae47e..412375280 100644 --- a/src/main/java/com/simibubi/create/AllPackets.java +++ b/src/main/java/com/simibubi/create/AllPackets.java @@ -8,6 +8,8 @@ import java.util.function.Function; import java.util.function.Supplier; import com.simibubi.create.compat.computercraft.AttachedComputerPacket; +import com.simibubi.create.compat.trainmap.TrainMapSyncPacket; +import com.simibubi.create.compat.trainmap.TrainMapSyncRequestPacket; import com.simibubi.create.content.contraptions.ContraptionBlockChangedPacket; import com.simibubi.create.content.contraptions.ContraptionColliderLockPacket; import com.simibubi.create.content.contraptions.ContraptionColliderLockPacket.ContraptionColliderLockPacketRequest; @@ -164,6 +166,7 @@ public enum AllPackets { CLIPBOARD_EDIT(ClipboardEditPacket.class, ClipboardEditPacket::new, PLAY_TO_SERVER), CONTRAPTION_COLLIDER_LOCK_REQUEST(ContraptionColliderLockPacketRequest.class, ContraptionColliderLockPacketRequest::new, PLAY_TO_SERVER), + TRAIN_MAP_REQUEST(TrainMapSyncRequestPacket.class, TrainMapSyncRequestPacket::new, PLAY_TO_SERVER), // Server to Client SYMMETRY_EFFECT(SymmetryEffectPacket.class, SymmetryEffectPacket::new, PLAY_TO_CLIENT), @@ -208,7 +211,8 @@ public enum AllPackets { CONTRAPTION_ACTOR_TOGGLE(ContraptionDisableActorPacket.class, ContraptionDisableActorPacket::new, PLAY_TO_CLIENT), CONTRAPTION_COLLIDER_LOCK(ContraptionColliderLockPacket.class, ContraptionColliderLockPacket::new, PLAY_TO_CLIENT), ATTACHED_COMPUTER(AttachedComputerPacket.class, AttachedComputerPacket::new, PLAY_TO_CLIENT), - SERVER_DEBUG_INFO(ServerDebugInfoPacket.class, ServerDebugInfoPacket::new, PLAY_TO_CLIENT) + SERVER_DEBUG_INFO(ServerDebugInfoPacket.class, ServerDebugInfoPacket::new, PLAY_TO_CLIENT), + TRAIN_MAP_SYNC(TrainMapSyncPacket.class, TrainMapSyncPacket::new, PLAY_TO_CLIENT) ; public static final ResourceLocation CHANNEL_NAME = Create.asResource("main"); diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index a89dce5ff..a78d2b780 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -31,7 +31,9 @@ public enum Mods { TCONSTRUCT, FRAMEDBLOCKS, XLPACKETS, - MODERNUI; + MODERNUI, + FTBCHUNKS, + JOURNEYMAP; private final String id; diff --git a/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/StationPeripheral.java b/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/StationPeripheral.java index c50891fe3..146742b3b 100644 --- a/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/StationPeripheral.java +++ b/src/main/java/com/simibubi/create/compat/computercraft/implementation/peripherals/StationPeripheral.java @@ -129,7 +129,7 @@ public class StationPeripheral extends SyncedPeripheral { public final void setTrainName(String name) throws LuaException { Train train = getTrainOrThrow(); train.name = Components.literal(name); - AllPackets.getChannel().send(PacketDistributor.ALL.noArg(), new TrainEditPacket.TrainEditReturnPacket(train.id, name, train.icon.getId())); + AllPackets.getChannel().send(PacketDistributor.ALL.noArg(), new TrainEditPacket.TrainEditReturnPacket(train.id, name, train.icon.getId(), train.mapColorIndex)); } @LuaFunction diff --git a/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java b/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java new file mode 100644 index 000000000..f60921ae4 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/FTBChunksTrainMap.java @@ -0,0 +1,158 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.List; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.gui.RemovedGuiUtils; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.infrastructure.config.AllConfigs; + +import dev.ftb.mods.ftbchunks.client.gui.LargeMapScreen; +import dev.ftb.mods.ftbchunks.client.gui.RegionMapPanel; +import dev.ftb.mods.ftblibrary.ui.ScreenWrapper; +import dev.ftb.mods.ftblibrary.ui.Widget; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.Rect2i; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.util.Mth; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.RenderTooltipEvent; +import net.minecraftforge.client.event.ScreenEvent; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; + +public class FTBChunksTrainMap { + + private static int cancelTooltips = 0; + private static boolean renderingTooltip = false; + private static boolean requesting; + + public static void tick() { + if (cancelTooltips > 0) + cancelTooltips--; + if (!AllConfigs.client().showTrainMapOverlay.get() + || getAsLargeMapScreen(Minecraft.getInstance().screen) == null) { + if (requesting) + TrainMapSyncClient.stopRequesting(); + requesting = false; + return; + } + TrainMapManager.tick(); + requesting = true; + TrainMapSyncClient.requestData(); + } + + public static void cancelTooltips(RenderTooltipEvent.Pre event) { + if (getAsLargeMapScreen(Minecraft.getInstance().screen) == null) + return; + if (renderingTooltip || cancelTooltips == 0) + return; + event.setCanceled(true); + } + + public static void mouseClick(InputEvent.MouseButton.Pre event) { + LargeMapScreen screen = getAsLargeMapScreen(Minecraft.getInstance().screen); + if (screen == null) + return; + if (TrainMapManager.handleToggleWidgetClick(screen.getMouseX(), screen.getMouseY(), 20, 2)) + event.setCanceled(true); + } + + public static void renderGui(ScreenEvent.Render.Post event) { + LargeMapScreen largeMapScreen = getAsLargeMapScreen(event.getScreen()); + if (largeMapScreen == null) + return; + Object panel = ObfuscationReflectionHelper.getPrivateValue(LargeMapScreen.class, largeMapScreen, "regionPanel"); + if (!(panel instanceof RegionMapPanel regionMapPanel)) + return; + GuiGraphics graphics = event.getGuiGraphics(); + if (!AllConfigs.client().showTrainMapOverlay.get()) { + renderToggleWidgetAndTooltip(event, largeMapScreen, graphics); + return; + } + + int blocksPerRegion = 16 * 32; + int minX = Mth.floor(regionMapPanel.getScrollX()); + int minY = Mth.floor(regionMapPanel.getScrollY()); + float regionTileSize = largeMapScreen.getRegionTileSize() / (float) blocksPerRegion; + int regionMinX = + ObfuscationReflectionHelper.getPrivateValue(RegionMapPanel.class, regionMapPanel, "regionMinX"); + int regionMinZ = + ObfuscationReflectionHelper.getPrivateValue(RegionMapPanel.class, regionMapPanel, "regionMinZ"); + float mouseX = event.getMouseX(); + float mouseY = event.getMouseY(); + + boolean linearFiltering = largeMapScreen.getRegionTileSize() * Minecraft.getInstance() + .getWindow() + .getGuiScale() < 512D; + + PoseStack pose = graphics.pose(); + pose.pushPose(); + + pose.translate(-minX, -minY, 0); + pose.scale(regionTileSize, regionTileSize, 1); + pose.translate(-regionMinX * blocksPerRegion, -regionMinZ * blocksPerRegion, 0); + + mouseX += minX; + mouseY += minY; + mouseX /= regionTileSize; + mouseY /= regionTileSize; + mouseX += regionMinX * blocksPerRegion; + mouseY += regionMinZ * blocksPerRegion; + + Rect2i bounds = new Rect2i(Mth.floor(minX / regionTileSize + regionMinX * blocksPerRegion), + Mth.floor(minY / regionTileSize + regionMinZ * blocksPerRegion), + Mth.floor(largeMapScreen.width / regionTileSize), Mth.floor(largeMapScreen.height / regionTileSize)); + + List tooltip = TrainMapManager.renderAndPick(graphics, Mth.floor(mouseX), Mth.floor(mouseY), + event.getPartialTick(), linearFiltering, bounds); + + pose.popPose(); + + if (!renderToggleWidgetAndTooltip(event, largeMapScreen, graphics) && tooltip != null) { + renderingTooltip = true; + RemovedGuiUtils.drawHoveringText(graphics, tooltip, event.getMouseX(), event.getMouseY(), + largeMapScreen.width, largeMapScreen.height, 256, Minecraft.getInstance().font); + renderingTooltip = false; + cancelTooltips = 5; + } + + pose.pushPose(); + pose.translate(0, 0, 300); + for (Widget widget : largeMapScreen.getWidgets()) { + if (!widget.isEnabled()) + continue; + if (widget == panel) + continue; + widget.draw(graphics, largeMapScreen.getTheme(), widget.getPosX(), widget.getPosY(), widget.getWidth(), + widget.getHeight()); + } + pose.popPose(); + } + + private static boolean renderToggleWidgetAndTooltip(ScreenEvent.Render.Post event, LargeMapScreen largeMapScreen, + GuiGraphics graphics) { + TrainMapManager.renderToggleWidget(graphics, 20, 2); + if (!TrainMapManager.isToggleWidgetHovered(event.getMouseX(), event.getMouseY(), 20, 2)) + return false; + + renderingTooltip = true; + RemovedGuiUtils.drawHoveringText(graphics, List.of(Lang.translate("train_map.toggle") + .component()), event.getMouseX(), event.getMouseY() + 20, largeMapScreen.width, largeMapScreen.height, 256, + Minecraft.getInstance().font); + renderingTooltip = false; + cancelTooltips = 5; + return true; + } + + private static LargeMapScreen getAsLargeMapScreen(Screen screen) { + if (!(screen instanceof ScreenWrapper screenWrapper)) + return null; + Object wrapped = ObfuscationReflectionHelper.getPrivateValue(ScreenWrapper.class, screenWrapper, "wrappedGui"); + if (!(wrapped instanceof LargeMapScreen largeMapScreen)) + return null; + return largeMapScreen; + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/JourneyTrainMap.java b/src/main/java/com/simibubi/create/compat/trainmap/JourneyTrainMap.java new file mode 100644 index 000000000..74beed9a5 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/JourneyTrainMap.java @@ -0,0 +1,108 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.List; + +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.gui.RemovedGuiUtils; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.infrastructure.config.AllConfigs; + +import journeymap.client.api.display.Context.UI; +import journeymap.client.api.util.UIState; +import journeymap.client.ui.fullscreen.Fullscreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.Rect2i; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.util.Mth; +import net.minecraftforge.client.event.InputEvent; + +public class JourneyTrainMap { + + private static boolean requesting; + + public static void tick() { + if (!AllConfigs.client().showTrainMapOverlay.get() || !(Minecraft.getInstance().screen instanceof Fullscreen)) { + if (requesting) + TrainMapSyncClient.stopRequesting(); + requesting = false; + return; + } + TrainMapManager.tick(); + requesting = true; + TrainMapSyncClient.requestData(); + } + + public static void mouseClick(InputEvent.MouseButton.Pre event) { + Minecraft mc = Minecraft.getInstance(); + if (!(mc.screen instanceof Fullscreen screen)) + return; + + Window window = mc.getWindow(); + double mX = mc.mouseHandler.xpos() * window.getGuiScaledWidth() / window.getScreenWidth(); + double mY = mc.mouseHandler.ypos() * window.getGuiScaledHeight() / window.getScreenHeight(); + + if (TrainMapManager.handleToggleWidgetClick(Mth.floor(mX), Mth.floor(mY), 3, 30)) + event.setCanceled(true); + } + + // Called by JourneyFullscreenMapMixin + public static void onRender(GuiGraphics graphics, Fullscreen screen, double x, double z, int mX, int mY, float pt) { + UIState state = screen.getUiState(); + if (state == null) + return; + if (state.ui != UI.Fullscreen) + return; + if (!state.active) + return; + if (!AllConfigs.client().showTrainMapOverlay.get()) { + renderToggleWidgetAndTooltip(graphics, screen, mX, mY); + return; + } + + Minecraft mc = Minecraft.getInstance(); + Window window = mc.getWindow(); + + double guiScale = (double) window.getScreenWidth() / window.getGuiScaledWidth(); + double scale = state.blockSize / guiScale; + + PoseStack pose = graphics.pose(); + pose.pushPose(); + + pose.translate(screen.width / 2.0f, screen.height / 2.0f, 0); + pose.scale((float) scale, (float) scale, 1); + pose.translate(-x, -z, 0); + + float mouseX = mX - screen.width / 2.0f; + float mouseY = mY - screen.height / 2.0f; + mouseX /= scale; + mouseY /= scale; + mouseX += x; + mouseY += z; + + Rect2i bounds = + new Rect2i(Mth.floor(-screen.width / 2.0f / scale + x), Mth.floor(-screen.height / 2.0f / scale + z), + Mth.floor(screen.width / scale), Mth.floor(screen.height / scale)); + + List tooltip = + TrainMapManager.renderAndPick(graphics, Mth.floor(mouseX), Mth.floor(mouseY), pt, false, bounds); + + pose.popPose(); + + if (!renderToggleWidgetAndTooltip(graphics, screen, mX, mY) && tooltip != null) + RemovedGuiUtils.drawHoveringText(graphics, tooltip, mX, mY, screen.width, screen.height, 256, mc.font); + } + + private static boolean renderToggleWidgetAndTooltip(GuiGraphics graphics, Fullscreen screen, int mouseX, + int mouseY) { + TrainMapManager.renderToggleWidget(graphics, 3, 30); + if (!TrainMapManager.isToggleWidgetHovered(mouseX, mouseY, 3, 30)) + return false; + + RemovedGuiUtils.drawHoveringText(graphics, List.of(Lang.translate("train_map.toggle") + .component()), mouseX, mouseY + 20, screen.width, screen.height, 256, Minecraft.getInstance().font); + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapEvents.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapEvents.java new file mode 100644 index 000000000..54f2adb19 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapEvents.java @@ -0,0 +1,56 @@ +package com.simibubi.create.compat.trainmap; + +import com.mojang.blaze3d.platform.InputConstants; +import com.simibubi.create.compat.Mods; + +import net.minecraft.client.Minecraft; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.InputEvent; +import net.minecraftforge.client.event.RenderTooltipEvent; +import net.minecraftforge.client.event.ScreenEvent; +import net.minecraftforge.event.TickEvent.ClientTickEvent; +import net.minecraftforge.event.TickEvent.Phase; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; + +@EventBusSubscriber(value = Dist.CLIENT) +public class TrainMapEvents { + + @SubscribeEvent + public static void tick(ClientTickEvent event) { + if (event.phase == Phase.START) + return; + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null) + return; + + if (Mods.FTBCHUNKS.isLoaded()) + FTBChunksTrainMap.tick(); + if (Mods.JOURNEYMAP.isLoaded()) + JourneyTrainMap.tick(); + } + + @SubscribeEvent + public static void mouseClick(InputEvent.MouseButton.Pre event) { + if (event.getAction() != InputConstants.PRESS) + return; + + if (Mods.FTBCHUNKS.isLoaded()) + FTBChunksTrainMap.mouseClick(event); + if (Mods.JOURNEYMAP.isLoaded()) + JourneyTrainMap.mouseClick(event); + } + + @SubscribeEvent + public static void cancelTooltips(RenderTooltipEvent.Pre event) { + if (Mods.FTBCHUNKS.isLoaded()) + FTBChunksTrainMap.cancelTooltips(event); + } + + @SubscribeEvent + public static void renderGui(ScreenEvent.Render.Post event) { + if (Mods.FTBCHUNKS.isLoaded()) + FTBChunksTrainMap.renderGui(event); + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java new file mode 100644 index 000000000..04ddf727a --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java @@ -0,0 +1,730 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import com.simibubi.create.CreateClient; +import com.simibubi.create.compat.trainmap.TrainMapSync.SignalState; +import com.simibubi.create.compat.trainmap.TrainMapSync.TrainMapSyncEntry; +import com.simibubi.create.compat.trainmap.TrainMapSync.TrainState; +import com.simibubi.create.content.trains.entity.Carriage; +import com.simibubi.create.content.trains.entity.Train; +import com.simibubi.create.content.trains.graph.EdgePointType; +import com.simibubi.create.content.trains.graph.TrackEdge; +import com.simibubi.create.content.trains.graph.TrackGraph; +import com.simibubi.create.content.trains.graph.TrackNode; +import com.simibubi.create.content.trains.graph.TrackNodeLocation; +import com.simibubi.create.content.trains.station.GlobalStation; +import com.simibubi.create.content.trains.track.BezierConnection; +import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Components; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.foundation.utility.Iterate; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.foundation.utility.Pair; +import com.simibubi.create.infrastructure.config.AllConfigs; +import com.simibubi.create.infrastructure.config.CClient; + +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.Rect2i; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.FormattedText; +import net.minecraft.resources.ResourceKey; +import net.minecraft.util.FastColor; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; + +public class TrainMapManager { + + public static void tick() { + TrainMapRenderer map = TrainMapRenderer.INSTANCE; + if (map.trackingVersion != CreateClient.RAILWAYS.version + || map.trackingDim != Minecraft.getInstance().level.dimension() + || map.trackingTheme != AllConfigs.client().trainMapColorTheme.get()) { + redrawAll(); + } + } + + public static List renderAndPick(GuiGraphics graphics, int mouseX, int mouseY, float pt, + boolean linearFiltering, Rect2i bounds) { + Object hoveredElement = null; + + int offScreenMargin = 32; + bounds.setX(bounds.getX() - offScreenMargin); + bounds.setY(bounds.getY() - offScreenMargin); + bounds.setWidth(bounds.getWidth() + 2 * offScreenMargin); + bounds.setHeight(bounds.getHeight() + 2 * offScreenMargin); + + TrainMapRenderer.INSTANCE.render(graphics, mouseX, mouseY, pt, linearFiltering, bounds); + hoveredElement = drawTrains(graphics, mouseX, mouseY, pt, hoveredElement, bounds); + hoveredElement = drawPoints(graphics, mouseX, mouseY, pt, hoveredElement, bounds); + + graphics.bufferSource() + .endBatch(); + + if (hoveredElement instanceof GlobalStation station) + return List.of(Components.literal(station.name)); + + if (hoveredElement instanceof Train train) + return listTrainDetails(train); + + return null; + } + + public static void renderToggleWidget(GuiGraphics graphics, int x, int y) { + boolean enabled = AllConfigs.client().showTrainMapOverlay.get(); + if (CreateClient.RAILWAYS.trackNetworks.isEmpty()) + return; + RenderSystem.enableBlend(); + PoseStack pose = graphics.pose(); + pose.pushPose(); + pose.translate(0, 0, 300); + AllGuiTextures.TRAINMAP_TOGGLE_PANEL.render(graphics, x, y); + (enabled ? AllGuiTextures.TRAINMAP_TOGGLE_ON : AllGuiTextures.TRAINMAP_TOGGLE_OFF).render(graphics, x + 18, + y + 3); + pose.popPose(); + } + + public static boolean handleToggleWidgetClick(int mouseX, int mouseY, int x, int y) { + if (!isToggleWidgetHovered(mouseX, mouseY, x, y)) + return false; + CClient config = AllConfigs.client(); + config.showTrainMapOverlay.set(!config.showTrainMapOverlay.get()); + return true; + } + + public static boolean isToggleWidgetHovered(int mouseX, int mouseY, int x, int y) { + if (CreateClient.RAILWAYS.trackNetworks.isEmpty()) + return false; + if (mouseX < x || mouseX >= x + AllGuiTextures.TRAINMAP_TOGGLE_PANEL.width) + return false; + if (mouseY < y || mouseY >= y + AllGuiTextures.TRAINMAP_TOGGLE_PANEL.height) + return false; + return true; + } + + private static List listTrainDetails(Train train) { + List output = new ArrayList<>(); + int blue = 0xD3DEDC; + int darkBlue = 0x92A9BD; + int bright = 0xFFEFEF; + int orange = 0xFFAD60; + + TrainMapSyncEntry trainEntry = TrainMapSyncClient.currentData.get(train.id); + if (trainEntry == null) + return Collections.emptyList(); + TrainState state = trainEntry.state; + SignalState signalState = trainEntry.signalState; + + Lang.text(train.name.getString()) + .color(bright) + .addTo(output); + + if (!trainEntry.ownerName.isBlank()) + Lang.translate("train_map.train_owned_by", trainEntry.ownerName) + .color(blue) + .addTo(output); + + switch (state) { + + case CONDUCTOR_MISSING: + Lang.translate("train_map.conductor_missing") + .color(orange) + .addTo(output); + return output; + case DERAILED: + Lang.translate("train_map.derailed") + .color(orange) + .addTo(output); + return output; + case NAVIGATION_FAILED: + Lang.translate("train_map.navigation_failed") + .color(orange) + .addTo(output); + return output; + case SCHEDULE_INTERRUPTED: + Lang.translate("train_map.schedule_interrupted") + .color(orange) + .addTo(output); + return output; + case RUNNING_MANUALLY: + Lang.translate("train_map.player_controlled") + .color(blue) + .addTo(output); + break; + + case RUNNING: + default: + break; + } + + String currentStation = trainEntry.targetStationName; + int targetStationDistance = trainEntry.targetStationDistance; + + if (!currentStation.isBlank()) { + if (targetStationDistance == 0) + Lang.translate("train_map.train_at_station", currentStation) + .color(darkBlue) + .addTo(output); + else + Lang.translate("train_map.train_moving_to_station", currentStation, targetStationDistance) + .color(darkBlue) + .addTo(output); + } + + if (signalState != SignalState.NOT_WAITING) { + boolean chainSignal = signalState == SignalState.CHAIN_SIGNAL; + Lang.translate("train_map.waiting_at_signal") + .color(orange) + .addTo(output); + + if (signalState == SignalState.WAITING_FOR_REDSTONE) + Lang.translate("train_map.redstone_powered") + .color(blue) + .addTo(output); + else { + UUID waitingFor = trainEntry.waitingForTrain; + boolean trainFound = false; + + if (waitingFor != null) { + Train trainWaitingFor = CreateClient.RAILWAYS.trains.get(waitingFor); + if (trainWaitingFor != null) { + Lang.translate("train_map.for_other_train", trainWaitingFor.name.getString()) + .color(blue) + .addTo(output); + trainFound = true; + } + } + + if (!trainFound) { + if (chainSignal) + Lang.translate("train_map.cannot_traverse_section") + .color(blue) + .addTo(output); + else + Lang.translate("train_map.section_reserved") + .color(blue) + .addTo(output); + } + } + } + + if (trainEntry.fueled) + Lang.translate("train_map.fuel_boosted") + .color(darkBlue) + .addTo(output); + + return output; + } + + private static Object drawPoints(GuiGraphics graphics, int mouseX, int mouseY, float pt, Object hoveredElement, + Rect2i bounds) { + PoseStack pose = graphics.pose(); + RenderSystem.enableDepthTest(); + + for (TrackGraph graph : CreateClient.RAILWAYS.trackNetworks.values()) { + for (GlobalStation station : graph.getPoints(EdgePointType.STATION)) { + + Couple edgeLocation = station.edgeLocation; + TrackNode node = graph.locateNode(edgeLocation.getFirst()); + TrackNode other = graph.locateNode(edgeLocation.getSecond()); + if (node == null || other == null) + continue; + if (node.getLocation().dimension != TrainMapRenderer.INSTANCE.trackingDim) + continue; + + TrackEdge edge = graph.getConnection(Couple.create(node, other)); + if (edge == null) + continue; + + double tLength = station.getLocationOn(edge); + double t = tLength / edge.getLength(); + Vec3 position = edge.getPosition(graph, t); + + int x = Mth.floor(position.x()); + int y = Mth.floor(position.z()); + + if (!bounds.contains(x, y)) + continue; + + Vec3 diff = edge.getDirectionAt(tLength) + .normalize(); + int rotation = Mth.positiveModulo(Mth.floor(0.5 + + (Math.atan2(diff.z, diff.x) * Mth.RAD_TO_DEG + 90 + (station.isPrimary(node) ? 180 : 0)) / 45), + 8); + + AllGuiTextures sprite = AllGuiTextures.TRAINMAP_STATION_ORTHO; + AllGuiTextures highlightSprite = AllGuiTextures.TRAINMAP_STATION_ORTHO_HIGHLIGHT; + if (rotation % 2 != 0) { + sprite = AllGuiTextures.TRAINMAP_STATION_DIAGO; + highlightSprite = AllGuiTextures.TRAINMAP_STATION_DIAGO_HIGHLIGHT; + } + + boolean highlight = hoveredElement == null && Math.max(Math.abs(mouseX - x), Math.abs(mouseY - y)) < 3; + + pose.pushPose(); + pose.translate(x - 2, y - 2, 5); + + pose.translate(sprite.width / 2.0, sprite.height / 2.0, 0); + pose.mulPose(Axis.ZP.rotationDegrees(90 * (rotation / 2))); + pose.translate(-sprite.width / 2.0, -sprite.height / 2.0, 0); + + sprite.render(graphics, 0, 0); + sprite.render(graphics, 0, 0); + + if (highlight) { + pose.translate(0, 0, 5); + highlightSprite.render(graphics, -1, -1); + hoveredElement = station; + } + + pose.popPose(); + } + } + + return hoveredElement; + } + + private static Object drawTrains(GuiGraphics graphics, int mouseX, int mouseY, float pt, Object hoveredElement, + Rect2i bounds) { + PoseStack pose = graphics.pose(); + RenderSystem.enableDepthTest(); + RenderSystem.enableBlend(); + + int spriteYOffset = -3; + + double time = AnimationTickHolder.getTicks(); + time += AnimationTickHolder.getPartialTicks(); + time -= TrainMapSyncClient.lastPacket; + time /= TrainMapSync.lightPacketInterval; + time = Mth.clamp(time, 0, 1); + + int[] sliceXShiftByRotationIndex = new int[] { 0, 1, 2, 2, 3, -2, -2, -1 }; + int[] sliceYShiftByRotationIndex = new int[] { 3, 2, 2, 1, 0, 1, 2, 2 }; + + for (Train train : CreateClient.RAILWAYS.trains.values()) { + TrainMapSyncEntry trainEntry = TrainMapSyncClient.currentData.get(train.id); + if (trainEntry == null) + continue; + + Vec3 frontPos = Vec3.ZERO; + List carriages = train.carriages; + boolean otherDim = true; + double avgY = 0; + + for (int i = 0; i < carriages.size(); i++) { + for (boolean firstBogey : Iterate.trueAndFalse) + avgY += trainEntry.getPosition(i, firstBogey, time) + .y(); + } + + avgY /= carriages.size() * 2; + + for (int i = 0; i < carriages.size(); i++) { + Carriage carriage = carriages.get(i); + + Vec3 pos1 = trainEntry.getPosition(i, true, time); + Vec3 pos2 = trainEntry.getPosition(i, false, time); + + ResourceKey dim = trainEntry.dimensions.get(i); + if (dim == null || dim != TrainMapRenderer.INSTANCE.trackingDim) + continue; + if (!bounds.contains(Mth.floor(pos1.x()), Mth.floor(pos1.z())) + && !bounds.contains(Mth.floor(pos2.x()), Mth.floor(pos2.z()))) + continue; + + otherDim = false; + + if (!trainEntry.backwards && i == 0) + frontPos = pos1; + if (trainEntry.backwards && i == train.carriages.size() - 1) + frontPos = pos2; + + Vec3 diff = pos2.subtract(pos1); + int size = carriage.bogeySpacing + 1; + Vec3 center = pos1.add(pos2) + .scale(0.5); + + double pX = center.x; + double pY = center.z; + int rotation = + Mth.positiveModulo(Mth.floor(0.5 + (Math.atan2(diff.x, diff.z) * Mth.RAD_TO_DEG) / 22.5), 8); + + if (trainEntry.state == TrainState.DERAILED) + rotation = + Mth.positiveModulo((AnimationTickHolder.getTicks() / 8 + i * 3) * (i % 2 == 0 ? 1 : -1), 8); + + AllGuiTextures sprite = AllGuiTextures.TRAINMAP_SPRITES; + + int slices = 2; + + if (rotation == 0 || rotation == 4) { + // Orthogonal, slices add 3 pixels + slices += Mth.floor((size - 2) / (3.0) + 0.5); + } + + else if (rotation == 2 || rotation == 6) { + // Diagonal, slices add 2*sqrt(2) pixels + slices += Mth.floor((size - (5 - 2 * Mth.SQRT_OF_TWO)) / (2 * Mth.SQRT_OF_TWO) + 0.5); + } + + else { + // Slanty, slices add sqrt(5) pixels + slices += Mth.floor((size - (5 - Mth.sqrt(5))) / (Mth.sqrt(5)) + 0.5); + } + + slices = Math.max(2, slices); + + sprite.bind(); + pose.pushPose(); + + float pivotX = 7.5f + (slices - 3) * sliceXShiftByRotationIndex[rotation] / 2.0f; + float pivotY = 6.5f + (slices - 3) * sliceYShiftByRotationIndex[rotation] / 2.0f; + // Ysort at home + pose.translate(pX - pivotX, pY - pivotY, 10 + (avgY / 512.0) + (1024.0 + center.z() % 8192.0) / 1024.0); + + int trainColorIndex = train.mapColorIndex; + int colorRow = trainColorIndex / 4; + int colorCol = trainColorIndex % 4; + + for (int slice = 0; slice < slices; slice++) { + int row = slice == 0 ? 1 : slice == slices - 1 ? 2 : 3; + int sliceShifts = slice == 0 ? 0 : slice == slices - 1 ? slice - 2 : slice - 1; + int col = rotation; + + int positionX = sliceShifts * sliceXShiftByRotationIndex[rotation]; + int positionY = sliceShifts * sliceYShiftByRotationIndex[rotation] + spriteYOffset; + int sheetX = col * 16 + colorCol * 128; + int sheetY = row * 16 + colorRow * 64; + + graphics.blit(sprite.location, positionX, positionY, sheetX, sheetY, 16, 16, sprite.width, + sprite.height); + } + + pose.popPose(); + + int margin = 1; + int sizeX = 8 + (slices - 3) * sliceXShiftByRotationIndex[rotation]; + int sizeY = 12 + (slices - 3) * sliceYShiftByRotationIndex[rotation]; + double pXm = pX - sizeX / 2; + double pYm = pY - sizeY / 2 + spriteYOffset; + if (hoveredElement == null && mouseX < pXm + margin + sizeX && mouseX > pXm - margin + && mouseY < pYm + margin + sizeY && mouseY > pYm - margin) + hoveredElement = train; + } + + if (otherDim) + continue; + + if (trainEntry.signalState != SignalState.NOT_WAITING) { + pose.pushPose(); + pose.translate(frontPos.x - 0.5, frontPos.z - 0.5, 20 + (1024.0 + frontPos.z() % 8192.0) / 1024.0); + AllGuiTextures.TRAINMAP_SIGNAL.render(graphics, 0, -3); + pose.popPose(); + } + } + + return hoveredElement; + } + + // Background first so we can mindlessly paint over it + static final int PHASE_BACKGROUND = 0; + // Straights before curves so that curves anti-alias properly at the transition + static final int PHASE_STRAIGHTS = 1; + static final int PHASE_CURVES = 2; + + public static void redrawAll() { + TrainMapRenderer map = TrainMapRenderer.INSTANCE; + map.trackingVersion = CreateClient.RAILWAYS.version; + map.trackingDim = Minecraft.getInstance().level.dimension(); + map.trackingTheme = AllConfigs.client().trainMapColorTheme.get(); + map.startDrawing(); + + int mainColor = 0xFF_7C57D4; + int darkerColor = 0xFF_70437D; + int darkerColorShadow = 0xFF_4A2754; + + switch (map.trackingTheme) { + case GREY: + mainColor = 0xFF_A8B5B5; + darkerColor = 0xFF_776E6C; + darkerColorShadow = 0xFF_56504E; + break; + case WHITE: + mainColor = 0xFF_E8F9F9; + darkerColor = 0xFF_889595; + darkerColorShadow = 0xFF_56504E; + break; + default: + break; + } + + List> collisions = new ObjectArrayList<>(); + + for (int phase = 0; phase <= 2; phase++) + renderPhase(map, collisions, mainColor, darkerColor, phase); + + highlightYDifferences(map, collisions, mainColor, darkerColor, darkerColor, darkerColorShadow); + + map.finishDrawing(); + } + + private static void renderPhase(TrainMapRenderer map, List> collisions, int mainColor, + int darkerColor, int phase) { + int outlineColor = 0xFF_000000; + + int portalFrameColor = 0xFF_4C2D5B; + int portalColor = 0xFF_FF7FD6; + + for (TrackGraph graph : CreateClient.RAILWAYS.trackNetworks.values()) { + for (TrackNodeLocation nodeLocation : graph.getNodes()) { + if (nodeLocation.dimension != map.trackingDim) + continue; + TrackNode node = graph.locateNode(nodeLocation); + Map connectionsFrom = graph.getConnectionsFrom(node); + + int hashCode = node.hashCode(); + for (Entry entry : connectionsFrom.entrySet()) { + TrackNode other = entry.getKey(); + TrackNodeLocation otherLocation = other.getLocation(); + TrackEdge edge = entry.getValue(); + BezierConnection turn = edge.getTurn(); + + // Portal track + if (edge.isInterDimensional()) { + Vec3 vec = node.getLocation() + .getLocation(); + int x = Mth.floor(vec.x); + int z = Mth.floor(vec.z); + if (phase == PHASE_CURVES) + continue; + if (phase == PHASE_BACKGROUND) { + map.setPixels(x - 3, z - 2, x + 3, z + 2, outlineColor); + map.setPixels(x - 2, z - 3, x + 2, z + 3, outlineColor); + continue; + } + + int a = mapYtoAlpha(Mth.floor(vec.y())); + for (int xi = x - 2; xi <= x + 2; xi++) { + for (int zi = z - 2; zi <= z + 2; zi++) { + int alphaAt = map.alphaAt(xi, zi); + if (alphaAt > 0 && alphaAt != a) + collisions.add(Couple.create(xi, zi)); + int c = (xi - x) * (xi - x) + (zi - z) * (zi - z) > 2 ? portalFrameColor : portalColor; + if (alphaAt <= a) { + map.setPixel(xi, zi, markY(c, vec.y())); + } + } + } + continue; + } + + if (other.hashCode() > hashCode) + continue; + + if (turn == null) { + if (phase == PHASE_CURVES) + continue; + + float x1 = nodeLocation.getX(); + float z1 = nodeLocation.getZ(); + float x2 = otherLocation.getX(); + float z2 = otherLocation.getZ(); + + double y1 = nodeLocation.getLocation() + .y(); + double y2 = otherLocation.getLocation() + .y(); + + float xDiffSign = Math.signum(x2 - x1); + float zDiffSign = Math.signum(z2 - z1); + boolean diagonal = xDiffSign != 0 && zDiffSign != 0; + + if (xDiffSign != 0) { + x2 -= xDiffSign * .25; + x1 += xDiffSign * .25; + } + + if (zDiffSign != 0) { + z2 -= zDiffSign * .25; + z1 += zDiffSign * .25; + } + + x1 /= 2; + x2 /= 2; + z1 /= 2; + z2 /= 2; + + int y = Mth.floor(y1); + int a = mapYtoAlpha(y); + + // Diagonal + if (diagonal) { + int z = Mth.floor(z1); + int x = Mth.floor(x1); + + for (int s = 0; s <= Math.abs(x1 - x2); s++) { + if (phase == PHASE_BACKGROUND) { + map.setPixels(x - 1, z, x + 1, z + 1, outlineColor); + map.setPixels(x, z - 1, x, z + 2, outlineColor); + x += xDiffSign; + z += zDiffSign; + continue; + } + + int alphaAt = map.alphaAt(x, z); + if (alphaAt > 0 && alphaAt != a) + collisions.add(Couple.create(x, z)); + if (alphaAt <= a) { + map.setPixel(x, z, markY(mainColor, y)); + } + + if (map.alphaAt(x, z + 1) < a) { + map.setPixel(x, z + 1, markY(darkerColor, y)); + } + + x += xDiffSign; + z += zDiffSign; + } + + continue; + } + + // Straight + if (phase == PHASE_BACKGROUND) { + int x1i = Mth.floor(Math.min(x1, x2)); + int z1i = Mth.floor(Math.min(z1, z2)); + int x2i = Mth.floor(Math.max(x1, x2)); + int z2i = Mth.floor(Math.max(z1, z2)); + + map.setPixels(x1i - 1, z1i, x2i + 1, z2i, outlineColor); + map.setPixels(x1i, z1i - 1, x2i, z2i + 1, outlineColor); + continue; + } + + int z = Mth.floor(z1); + int x = Mth.floor(x1); + float diff = Math.max(Math.abs(x1 - x2), Math.abs(z1 - z2)); + double yStep = (y2 - y1) / diff; + + for (int s = 0; s <= diff; s++) { + int alphaAt = map.alphaAt(x, z); + if (alphaAt > 0 && alphaAt != a) + collisions.add(Couple.create(x, z)); + if (alphaAt <= a) { + map.setPixel(x, z, markY(mainColor, y)); + } + x += xDiffSign; + y += yStep; + z += zDiffSign; + } + + continue; + } + + if (phase == PHASE_STRAIGHTS) + continue; + + BlockPos origin = turn.tePositions.getFirst(); + Map, Double> rasterise = turn.rasterise(); + + for (boolean antialias : Iterate.falseAndTrue) { + for (Entry, Double> offset : rasterise.entrySet()) { + Pair xz = offset.getKey(); + int x = origin.getX() + xz.getFirst(); + int y = Mth.floor(origin.getY() + offset.getValue() + 0.5); + int z = origin.getZ() + xz.getSecond(); + + if (phase == PHASE_BACKGROUND) { + map.setPixels(x - 1, z, x + 1, z, outlineColor); + map.setPixels(x, z - 1, x, z + 1, outlineColor); + continue; + } + + int a = mapYtoAlpha(y); + + if (!antialias) { + int alphaAt = map.alphaAt(x, z); + if (alphaAt > 0 && alphaAt != a) + collisions.add(Couple.create(x, z)); + if (alphaAt > a) + continue; + + map.setPixel(x, z, markY(mainColor, y)); + continue; + } + + boolean mainColorBelowLeft = + map.is(x + 1, z + 1, mainColor) && Math.abs(map.alphaAt(x + 1, z + 1) - a) <= 1; + boolean mainColorBelowRight = + map.is(x - 1, z + 1, mainColor) && Math.abs(map.alphaAt(x - 1, z + 1) - a) <= 1; + + if (mainColorBelowLeft || mainColorBelowRight) { + int alphaAt = map.alphaAt(x, z + 1); + if (alphaAt > 0 && alphaAt != a) + collisions.add(Couple.create(x, z)); + if (alphaAt >= a) + continue; + + map.setPixel(x, z + 1, markY(darkerColor, y)); + + // Adjust background + if (map.isEmpty(x + 1, z + 1)) + map.setPixel(x + 1, z + 1, outlineColor); + if (map.isEmpty(x - 1, z + 1)) + map.setPixel(x - 1, z + 1, outlineColor); + if (map.isEmpty(x, z + 2)) + map.setPixel(x, z + 2, outlineColor); + } + } + if (phase == PHASE_BACKGROUND) + break; + } + } + } + } + } + + private static void highlightYDifferences(TrainMapRenderer map, List> collisions, int mainColor, + int darkerColor, int mainColorShadow, int darkerColorShadow) { + for (Couple couple : collisions) { + int x = couple.getFirst(); + int z = couple.getSecond(); + int a = map.alphaAt(x, z); + if (a == 0) + continue; + + for (int xi = x - 2; xi <= x + 2; xi++) { + for (int zi = z - 2; zi <= z + 2; zi++) { + if (map.alphaAt(xi, zi) >= a) + continue; + if (map.is(xi, zi, mainColor)) + map.setPixel(xi, zi, FastColor.ABGR32.color(a, mainColorShadow)); + else if (map.is(xi, zi, darkerColor)) + map.setPixel(xi, zi, FastColor.ABGR32.color(a, darkerColorShadow)); + } + } + } + } + + private static int mapYtoAlpha(double y) { + int minY = Minecraft.getInstance().level.getMinBuildHeight(); + return Mth.clamp(32 + Mth.floor((y - minY) / 4.0), 0, 255); + } + + private static int markY(int color, double y) { + return FastColor.ABGR32.color(mapYtoAlpha(y), color); + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapRenderer.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapRenderer.java new file mode 100644 index 000000000..e5335bb4d --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapRenderer.java @@ -0,0 +1,259 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.HashSet; +import java.util.Set; + +import org.joml.Matrix4f; + +import com.mojang.blaze3d.platform.NativeImage; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.simibubi.create.foundation.render.RenderTypes; +import com.simibubi.create.foundation.utility.Couple; +import com.simibubi.create.infrastructure.config.CClient; + +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.MultiBufferSource.BufferSource; +import net.minecraft.client.renderer.Rect2i; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.FastColor; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; + +public class TrainMapRenderer implements AutoCloseable { + + public static final TrainMapRenderer INSTANCE = new TrainMapRenderer(); + public static final int WIDTH = 128, HEIGHT = 128; + private Object2ObjectMap, TrainMapInstance> maps = new Object2ObjectOpenHashMap<>(); + + public int trackingVersion; + public ResourceKey trackingDim; + public CClient.TrainMapTheme trackingTheme; + + // + + private TrainMapInstance previouslyAccessed; + + public void startDrawing() { + previouslyAccessed = null; + maps.values() + .forEach(tmi -> { + tmi.getImage() + .fillRect(0, 0, WIDTH, HEIGHT, 0); + tmi.untouched = true; + }); + } + + public Object2ObjectMap, TrainMapInstance> getMaps() { + return maps; + } + + public void setPixel(int xCoord, int zCoord, int color) { + TrainMapInstance instance = getOrCreateAt(xCoord, zCoord); + xCoord = Mth.positiveModulo(xCoord, WIDTH); + zCoord = Mth.positiveModulo(zCoord, HEIGHT); + instance.getImage() + .setPixelRGBA(xCoord, zCoord, color); + } + + public int getPixel(int xCoord, int zCoord) { + Couple sectionKey = toSectionKey(xCoord, zCoord); + if (!maps.containsKey(sectionKey)) + return 0; + + TrainMapInstance instance = getOrCreateAt(xCoord, zCoord); + xCoord = Mth.positiveModulo(xCoord, WIDTH); + zCoord = Mth.positiveModulo(zCoord, HEIGHT); + return instance.getImage() + .getPixelRGBA(xCoord, zCoord); + } + + public void setPixels(int xCoordFrom, int zCoordFrom, int xCoordTo, int zCoordTo, int color) { + for (int x = Math.min(xCoordFrom, xCoordTo); x <= Math.max(xCoordFrom, xCoordTo); x++) + for (int z = Math.min(zCoordFrom, zCoordTo); z <= Math.max(zCoordFrom, zCoordTo); z++) + setPixel(x, z, color); + } + + public void blendPixel(int xCoord, int zCoord, int color, int alpha) { + TrainMapInstance instance = getOrCreateAt(xCoord, zCoord); + xCoord = Mth.positiveModulo(xCoord, WIDTH); + zCoord = Mth.positiveModulo(zCoord, HEIGHT); + instance.getImage() + .blendPixel(xCoord, zCoord, FastColor.ABGR32.color(alpha, color)); + } + + public void blendPixels(int xCoordFrom, int zCoordFrom, int xCoordTo, int zCoordTo, int color, int alpha) { + for (int x = Math.min(xCoordFrom, xCoordTo); x <= Math.max(xCoordFrom, xCoordTo); x++) + for (int z = Math.min(zCoordFrom, zCoordTo); z <= Math.max(zCoordFrom, zCoordTo); z++) + blendPixel(x, z, color, alpha); + } + + public void finishDrawing() { + previouslyAccessed = null; + Set> stale = new HashSet<>(); + + maps.forEach((key, tmi) -> { + if (!tmi.untouched) + return; + tmi.close(); + stale.add(key); + }); + + stale.forEach(key -> { + TrainMapInstance tmi = maps.remove(key); + if (tmi != null) + tmi.close(); + }); + } + + public boolean is(int x, int z, int color) { + return (getPixel(x, z) & 0xFFFFFF) == (color & 0xFFFFFF); + } + + public boolean isEmpty(int x, int z) { + return getPixel(x, z) == 0; + } + + public int alphaAt(int x, int z) { + int pixel = getPixel(x, z); + return ((pixel & 0xFFFFFF) != 0) ? ((pixel >>> 24) & 0xFF) : 0; + } + + // + + public void render(GuiGraphics graphics, int mouseX, int mouseY, float pt, boolean linearFiltering, Rect2i bounds) { + BufferSource bufferSource = graphics.bufferSource(); + PoseStack pose = graphics.pose(); + maps.forEach((key, tmi) -> { + if (tmi.canBeSkipped(bounds)) + return; + int x = key.getFirst(); + int y = key.getSecond(); + pose.pushPose(); + pose.translate(x * WIDTH, y * HEIGHT, 0); + tmi.draw(pose, bufferSource, linearFiltering); + pose.popPose(); + }); + } + + public TrainMapInstance getOrCreateAt(int xCoord, int zCoord) { + Couple sectionKey = toSectionKey(xCoord, zCoord); + if (previouslyAccessed != null && previouslyAccessed.sectionKey.equals(sectionKey)) + return previouslyAccessed; + return maps.compute(sectionKey, (key, instance) -> instance == null ? new TrainMapInstance(key) : instance); + } + + public Couple toSectionKey(int xCoord, int zCoord) { + return Couple.create(Mth.floor(xCoord / (float) WIDTH), Mth.floor(zCoord / (float) HEIGHT)); + } + + public void resetData() { + for (TrainMapInstance instance : maps.values()) + instance.close(); + maps.clear(); + } + + public void close() { + this.resetData(); + } + + public class TrainMapInstance implements AutoCloseable { + + private DynamicTexture texture; + private RenderType renderType; + private boolean requiresUpload; + private boolean linearFiltering; + private Rect2i bounds; + + private boolean untouched; + private Couple sectionKey; + + public ResourceLocation location; + + public TrainMapInstance(Couple sectionKey) { + TextureManager textureManager = Minecraft.getInstance() + .getTextureManager(); + + this.sectionKey = sectionKey; + untouched = false; + requiresUpload = true; + texture = new DynamicTexture(128, 128, true); + linearFiltering = false; + location = textureManager + .register("create_trainmap/" + sectionKey.getFirst() + "_" + sectionKey.getSecond(), texture); + renderType = RenderTypes.TRAIN_MAP.apply(location, linearFiltering); + bounds = new Rect2i(sectionKey.getFirst() * WIDTH, sectionKey.getSecond() * HEIGHT, WIDTH, HEIGHT); + } + + public boolean canBeSkipped(Rect2i bounds) { + return bounds.getX() + bounds.getWidth() < this.bounds.getX() + || this.bounds.getX() + this.bounds.getWidth() < bounds.getX() + || bounds.getY() + bounds.getHeight() < this.bounds.getY() + || this.bounds.getY() + this.bounds.getHeight() < bounds.getY(); + } + + public NativeImage getImage() { + untouched = false; + requiresUpload = true; + return texture.getPixels(); + } + + public void draw(PoseStack pPoseStack, MultiBufferSource pBufferSource, boolean linearFiltering) { + if (texture.getPixels() == null) + return; + + if (requiresUpload) { + texture.upload(); + requiresUpload = false; + } + + if (pPoseStack == null) + return; + + if (linearFiltering != this.linearFiltering) { + this.linearFiltering = linearFiltering; + renderType = RenderTypes.TRAIN_MAP.apply(location, linearFiltering); + } + + int pPackedLight = LightTexture.FULL_BRIGHT; + + Matrix4f matrix4f = pPoseStack.last() + .pose(); + VertexConsumer vertexconsumer = pBufferSource.getBuffer(renderType); + vertexconsumer.vertex(matrix4f, 0.0F, HEIGHT, 0) + .color(255, 255, 255, 255) + .uv(0.0F, 1.0F) + .uv2(pPackedLight) + .endVertex(); + vertexconsumer.vertex(matrix4f, WIDTH, HEIGHT, 0) + .color(255, 255, 255, 255) + .uv(1.0F, 1.0F) + .uv2(pPackedLight) + .endVertex(); + vertexconsumer.vertex(matrix4f, WIDTH, 0.0F, 0) + .color(255, 255, 255, 255) + .uv(1.0F, 0.0F) + .uv2(pPackedLight) + .endVertex(); + vertexconsumer.vertex(matrix4f, 0.0F, 0.0F, 0) + .color(255, 255, 255, 255) + .uv(0.0F, 0.0F) + .uv2(pPackedLight) + .endVertex(); + } + + public void close() { + texture.close(); + } + + } +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSync.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSync.java new file mode 100644 index 000000000..0de7783db --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSync.java @@ -0,0 +1,353 @@ +package com.simibubi.create.compat.trainmap; + +import java.lang.ref.WeakReference; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.simibubi.create.AllPackets; +import com.simibubi.create.Create; +import com.simibubi.create.content.trains.entity.Carriage; +import com.simibubi.create.content.trains.entity.Carriage.DimensionalCarriageEntity; +import com.simibubi.create.content.trains.entity.Train; +import com.simibubi.create.content.trains.entity.TravellingPoint; +import com.simibubi.create.content.trains.graph.DimensionPalette; +import com.simibubi.create.content.trains.graph.EdgePointType; +import com.simibubi.create.content.trains.schedule.ScheduleRuntime; +import com.simibubi.create.content.trains.signal.SignalBlock.SignalType; +import com.simibubi.create.content.trains.signal.SignalBoundary; +import com.simibubi.create.content.trains.signal.SignalEdgeGroup; +import com.simibubi.create.content.trains.station.GlobalStation; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceKey; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.event.TickEvent.ServerTickEvent; +import net.minecraftforge.network.PacketDistributor; + +public class TrainMapSync { + + public static final int lightPacketInterval = 5; + public static final int fullPacketInterval = 10; + + public static int ticks; + + public enum TrainState { + RUNNING, RUNNING_MANUALLY, DERAILED, SCHEDULE_INTERRUPTED, CONDUCTOR_MISSING, NAVIGATION_FAILED + } + + public enum SignalState { + NOT_WAITING, WAITING_FOR_REDSTONE, BLOCK_SIGNAL, CHAIN_SIGNAL + } + + public static class TrainMapSyncEntry { + + // Clientside + public float[] prevPositions; + public List> prevDims; + + // Updated every 5 ticks + public float[] positions; + public List> dimensions; + public TrainState state = TrainState.RUNNING; + public SignalState signalState = SignalState.NOT_WAITING; + public boolean fueled = false; + public boolean backwards = false; + public int targetStationDistance = 0; + + // Updated every 10 ticks + public String ownerName = ""; + public String targetStationName = ""; + public UUID waitingForTrain = null; + + public void gatherDimensions(DimensionPalette dimensionPalette) { + for (ResourceKey resourceKey : dimensions) + if (resourceKey != null) + dimensionPalette.encode(resourceKey); + } + + public void send(FriendlyByteBuf buffer, DimensionPalette dimensionPalette, boolean light) { + buffer.writeVarInt(positions.length); + for (float f : positions) + buffer.writeFloat(f); + + buffer.writeVarInt(dimensions.size()); + for (ResourceKey resourceKey : dimensions) + buffer.writeVarInt(resourceKey == null ? -1 : dimensionPalette.encode(resourceKey)); + + buffer.writeVarInt(state.ordinal()); + buffer.writeVarInt(signalState.ordinal()); + buffer.writeBoolean(fueled); + buffer.writeBoolean(backwards); + buffer.writeVarInt(targetStationDistance); + + if (light) + return; + + buffer.writeUtf(ownerName); + buffer.writeUtf(targetStationName); + + buffer.writeBoolean(waitingForTrain != null); + if (waitingForTrain != null) + buffer.writeUUID(waitingForTrain); + } + + public void receive(FriendlyByteBuf buffer, DimensionPalette dimensionPalette, boolean light) { + positions = new float[buffer.readVarInt()]; + for (int i = 0; i < positions.length; i++) + positions[i] = buffer.readFloat(); + + dimensions = new ArrayList<>(); + int dimensionsSize = buffer.readVarInt(); + for (int i = 0; i < dimensionsSize; i++) { + int index = buffer.readVarInt(); + dimensions.add(index == -1 ? null : dimensionPalette.decode(index)); + } + + state = TrainState.values()[buffer.readVarInt()]; + signalState = SignalState.values()[buffer.readVarInt()]; + fueled = buffer.readBoolean(); + backwards = buffer.readBoolean(); + targetStationDistance = buffer.readVarInt(); + + if (light) + return; + + ownerName = buffer.readUtf(); + targetStationName = buffer.readUtf(); + + waitingForTrain = null; + if (buffer.readBoolean()) + waitingForTrain = buffer.readUUID(); + } + + public void updateFrom(TrainMapSyncEntry other, boolean light) { + prevPositions = positions; + prevDims = dimensions; + + positions = other.positions; + dimensions = other.dimensions; + state = other.state; + signalState = other.signalState; + fueled = other.fueled; + backwards = other.backwards; + targetStationDistance = other.targetStationDistance; + + if (prevDims != null) + for (int i = 0; i < Math.min(prevDims.size(), dimensions.size()); i++) + if (prevDims.get(i) != dimensions.get(i)) + for (int j = 0; j < 6; j++) + prevPositions[i * 6 + j] = positions[i * 6 + j]; + + if (light) + return; + + ownerName = other.ownerName; + targetStationName = other.targetStationName; + waitingForTrain = other.waitingForTrain; + } + + public Vec3 getPosition(int carriageIndex, boolean firstBogey, double time) { + int startIndex = carriageIndex * 6 + (firstBogey ? 0 : 3); + if (positions == null || positions.length <= startIndex + 2) + return Vec3.ZERO; + Vec3 position = new Vec3(positions[startIndex], positions[startIndex + 1], positions[startIndex + 2]); + if (prevPositions == null || prevPositions.length <= startIndex + 2) + return position; + Vec3 prevPosition = + new Vec3(prevPositions[startIndex], prevPositions[startIndex + 1], prevPositions[startIndex + 2]); + return prevPosition.lerp(position, time); + } + + } + + public static Cache> requestingPlayers = CacheBuilder.newBuilder() + .expireAfterWrite(Duration.ofSeconds(1)) + .build(); + + public static void requestReceived(ServerPlayer sender) { + boolean sendImmediately = requestingPlayers.getIfPresent(sender.getUUID()) == null; + requestingPlayers.put(sender.getUUID(), new WeakReference<>(sender)); + if (sendImmediately) + send(sender.server, false); + } + + public static void serverTick(ServerTickEvent event) { + ticks++; + if (ticks % fullPacketInterval == 0) + send(event.getServer(), false); + else if (ticks % lightPacketInterval == 0) + send(event.getServer(), true); + } + + public static void send(MinecraftServer minecraftServer, boolean light) { + if (requestingPlayers.size() == 0) + return; + + TrainMapSyncPacket packet = new TrainMapSyncPacket(light); + for (Train train : Create.RAILWAYS.trains.values()) + packet.add(train.id, createEntry(minecraftServer, train)); + + for (WeakReference weakReference : requestingPlayers.asMap() + .values()) { + ServerPlayer player = weakReference.get(); + if (player == null) + continue; + AllPackets.getChannel() + .send(PacketDistributor.PLAYER.with(() -> player), packet); + } + } + + private static TrainMapSyncEntry createEntry(MinecraftServer minecraftServer, Train train) { + TrainMapSyncEntry entry = new TrainMapSyncEntry(); + boolean stopped = Math.abs(train.speed) < 0.05; + + entry.positions = new float[train.carriages.size() * 6]; + entry.dimensions = new ArrayList<>(); + + List carriages = train.carriages; + for (int i = 0; i < carriages.size(); i++) { + Carriage carriage = carriages.get(i); + Vec3 leadingPos; + Vec3 trailingPos; + + if (train.graph == null) { + + // Train is derailed + Pair, DimensionalCarriageEntity> dimCarriage = + carriage.anyAvailableDimensionalCarriage(); + if (dimCarriage == null || carriage.presentInMultipleDimensions()) { + entry.dimensions.add(null); + continue; + } + + leadingPos = dimCarriage.getSecond().rotationAnchors.getFirst(); + trailingPos = dimCarriage.getSecond().rotationAnchors.getSecond(); + + if (leadingPos == null || trailingPos == null) { + entry.dimensions.add(null); + continue; + } + + entry.dimensions.add(dimCarriage.getFirst()); + + } else { + + // Train is on Track + TravellingPoint leading = carriage.getLeadingPoint(); + TravellingPoint trailing = carriage.getTrailingPoint(); + if (leading == null || trailing == null || leading.edge == null || trailing.edge == null) { + entry.dimensions.add(null); + continue; + } + + ResourceKey leadingDim = + (leading.node1 == null || leading.edge == null || leading.edge.isInterDimensional()) ? null + : leading.node1.getLocation() + .getDimension(); + + ResourceKey trailingDim = + (trailing.node1 == null || trailing.edge == null || trailing.edge.isInterDimensional()) ? null + : trailing.node1.getLocation() + .getDimension(); + + ResourceKey carriageDim = (leadingDim == null || leadingDim != trailingDim) ? null : leadingDim; + entry.dimensions.add(carriageDim); + + leadingPos = leading.getPosition(train.graph); + trailingPos = trailing.getPosition(train.graph); + } + + entry.positions[i * 6] = (float) leadingPos.x(); + entry.positions[i * 6 + 1] = (float) leadingPos.y(); + entry.positions[i * 6 + 2] = (float) leadingPos.z(); + + entry.positions[i * 6 + 3] = (float) trailingPos.x(); + entry.positions[i * 6 + 4] = (float) trailingPos.y(); + entry.positions[i * 6 + 5] = (float) trailingPos.z(); + } + + entry.backwards = train.currentlyBackwards; + + if (train.owner != null) { + ServerPlayer owner = minecraftServer.getPlayerList() + .getPlayer(train.owner); + if (owner != null) + entry.ownerName = owner.getName() + .getString(); + } + + if (train.derailed) { + entry.state = TrainState.DERAILED; + return entry; + } + + ScheduleRuntime runtime = train.runtime; + if (runtime.getSchedule() != null && stopped) { + if (runtime.paused) { + entry.state = TrainState.SCHEDULE_INTERRUPTED; + return entry; + } + + if (train.status.conductor) { + entry.state = TrainState.CONDUCTOR_MISSING; + return entry; + } + + if (train.status.navigation) { + entry.state = TrainState.NAVIGATION_FAILED; + return entry; + } + } + + if ((runtime.getSchedule() == null || runtime.paused) && train.speed != 0) + entry.state = TrainState.RUNNING_MANUALLY; + + GlobalStation currentStation = train.getCurrentStation(); + if (currentStation != null) { + entry.targetStationName = currentStation.name; + entry.targetStationDistance = 0; + } else if (train.navigation.destination != null && !runtime.paused) { + entry.targetStationName = train.navigation.destination.name; + entry.targetStationDistance = Math.max(0, Mth.floor(train.navigation.distanceToDestination)); + } + + if (stopped && train.navigation.waitingForSignal != null) { + UUID signalId = train.navigation.waitingForSignal.getFirst(); + boolean side = train.navigation.waitingForSignal.getSecond(); + SignalBoundary signal = train.graph.getPoint(EdgePointType.SIGNAL, signalId); + + if (signal != null) { + boolean chainSignal = signal.types.get(side) == SignalType.CROSS_SIGNAL; + entry.signalState = chainSignal ? SignalState.CHAIN_SIGNAL : SignalState.BLOCK_SIGNAL; + if (signal.isForcedRed(side)) + entry.signalState = SignalState.WAITING_FOR_REDSTONE; + else { + SignalEdgeGroup group = Create.RAILWAYS.signalEdgeGroups.get(signal.groups.get(side)); + if (group != null) { + for (Train other : group.trains) { + if (other == train) + continue; + entry.waitingForTrain = other.id; + break; + } + } + } + } + } + + if (train.fuelTicks > 0 && !stopped) + entry.fueled = true; + + return entry; + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncClient.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncClient.java new file mode 100644 index 000000000..321b40fc4 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncClient.java @@ -0,0 +1,56 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import com.simibubi.create.AllPackets; +import com.simibubi.create.compat.trainmap.TrainMapSync.TrainMapSyncEntry; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.foundation.utility.Pair; + +public class TrainMapSyncClient { + + public static Map currentData = new HashMap<>(); + + public static double lastPacket; + + private static int ticks; + + public static void requestData() { + ticks++; + if (ticks % 5 == 0) + AllPackets.getChannel() + .sendToServer(new TrainMapSyncRequestPacket()); + } + + public static void stopRequesting() { + ticks = 0; + currentData.clear(); + } + + public static void receive(TrainMapSyncPacket packet) { + if (ticks == 0) + return; + + lastPacket = AnimationTickHolder.getTicks(); + lastPacket += AnimationTickHolder.getPartialTicks(); + + Set staleEntries = new HashSet<>(); + staleEntries.addAll(currentData.keySet()); + + for (Pair pair : packet.entries) { + UUID id = pair.getFirst(); + TrainMapSyncEntry entry = pair.getSecond(); + staleEntries.remove(id); + currentData.computeIfAbsent(id, $ -> entry) + .updateFrom(entry, packet.light); + } + + for (UUID uuid : staleEntries) + currentData.remove(uuid); + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncPacket.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncPacket.java new file mode 100644 index 000000000..0c3703759 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncPacket.java @@ -0,0 +1,65 @@ +package com.simibubi.create.compat.trainmap; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.simibubi.create.compat.trainmap.TrainMapSync.TrainMapSyncEntry; +import com.simibubi.create.content.trains.graph.DimensionPalette; +import com.simibubi.create.foundation.networking.SimplePacketBase; +import com.simibubi.create.foundation.utility.Pair; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent.Context; + +public class TrainMapSyncPacket extends SimplePacketBase { + + public List> entries = new ArrayList<>(); + public boolean light; + + public TrainMapSyncPacket(boolean light) { + this.light = light; + } + + public void add(UUID trainId, TrainMapSyncEntry data) { + entries.add(Pair.of(trainId, data)); + } + + public TrainMapSyncPacket(FriendlyByteBuf buffer) { + DimensionPalette dimensionPalette = DimensionPalette.receive(buffer); + light = buffer.readBoolean(); + + int size = buffer.readVarInt(); + for (int i = 0; i < size; i++) { + UUID id = buffer.readUUID(); + TrainMapSyncEntry entry = new TrainMapSyncEntry(); + entry.receive(buffer, dimensionPalette, light); + entries.add(Pair.of(id, entry)); + } + } + + @Override + public void write(FriendlyByteBuf buffer) { + DimensionPalette dimensionPalette = new DimensionPalette(); + for (Pair pair : entries) + pair.getSecond() + .gatherDimensions(dimensionPalette); + + dimensionPalette.send(buffer); + buffer.writeBoolean(light); + + buffer.writeVarInt(entries.size()); + for (Pair pair : entries) { + buffer.writeUUID(pair.getFirst()); + pair.getSecond() + .send(buffer, dimensionPalette, light); + } + } + + @Override + public boolean handle(Context context) { + context.enqueueWork(() -> TrainMapSyncClient.receive(this)); + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncRequestPacket.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncRequestPacket.java new file mode 100644 index 000000000..c6138a56d --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapSyncRequestPacket.java @@ -0,0 +1,23 @@ +package com.simibubi.create.compat.trainmap; + +import com.simibubi.create.foundation.networking.SimplePacketBase; + +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkEvent.Context; + +public class TrainMapSyncRequestPacket extends SimplePacketBase { + + public TrainMapSyncRequestPacket() {} + + public TrainMapSyncRequestPacket(FriendlyByteBuf buffer) {} + + @Override + public void write(FriendlyByteBuf buffer) {} + + @Override + public boolean handle(Context context) { + context.enqueueWork(() -> TrainMapSync.requestReceived(context.getSender())); + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/content/trains/GlobalRailwayManager.java b/src/main/java/com/simibubi/create/content/trains/GlobalRailwayManager.java index 73d9d244a..25b944d78 100644 --- a/src/main/java/com/simibubi/create/content/trains/GlobalRailwayManager.java +++ b/src/main/java/com/simibubi/create/content/trains/GlobalRailwayManager.java @@ -48,6 +48,8 @@ public class GlobalRailwayManager { private List waitingTrains; private RailwaySavedData savedData; + + public int version; public GlobalRailwayManager() { cleanUp(); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java b/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java index b340e4848..19883c1be 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java @@ -29,6 +29,7 @@ import com.simibubi.create.foundation.advancement.AllAdvancements; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; import net.minecraft.core.BlockPos; @@ -422,6 +423,13 @@ public class Carriage { return null; } + public Pair, DimensionalCarriageEntity> anyAvailableDimensionalCarriage() { + for (Entry, DimensionalCarriageEntity> entry : entities.entrySet()) + if (entry.getValue().entity.get() != null) + return Pair.of(entry.getKey(), entry.getValue()); + return null; + } + public void forEachPresentEntity(Consumer callback) { for (DimensionalCarriageEntity dimensionalCarriageEntity : entities.values()) { CarriageContraptionEntity entity = dimensionalCarriageEntity.entity.get(); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/Train.java b/src/main/java/com/simibubi/create/content/trains/entity/Train.java index c12913e18..0b0927144 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/Train.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/Train.java @@ -95,6 +95,7 @@ public class Train { public Navigation navigation; public ScheduleRuntime runtime; public TrainIconType icon; + public int mapColorIndex; public Component name; public TrainStatus status; @@ -932,6 +933,8 @@ public class Train { @Nullable public LivingEntity getOwner(Level level) { + if (level.getServer() == null) + return null; try { UUID uuid = owner; return uuid == null ? null @@ -1130,6 +1133,7 @@ public class Train { tag.putInt("Fuel", fuelTicks); tag.putDouble("TargetSpeed", targetSpeed); tag.putString("IconType", icon.id.toString()); + tag.putInt("MapColorIndex", mapColorIndex); tag.putString("Name", Component.Serializer.toJson(name)); if (currentStation != null) tag.putUUID("Station", currentStation); @@ -1182,6 +1186,7 @@ public class Train { train.speedBeforeStall = tag.getDouble("SpeedBeforeStall"); train.targetSpeed = tag.getDouble("TargetSpeed"); train.icon = TrainIconType.byId(new ResourceLocation(tag.getString("IconType"))); + train.mapColorIndex = tag.getInt("MapColorIndex"); train.name = Component.Serializer.fromJson(tag.getString("Name")); train.currentStation = tag.contains("Station") ? tag.getUUID("Station") : null; train.currentlyBackwards = tag.getBoolean("Backwards"); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/TrainPacket.java b/src/main/java/com/simibubi/create/content/trains/entity/TrainPacket.java index 288555ea4..1598c5379 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/TrainPacket.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/TrainPacket.java @@ -68,6 +68,7 @@ public class TrainPacket extends SimplePacketBase { train.name = Component.Serializer.fromJson(buffer.readUtf()); train.icon = TrainIconType.byId(buffer.readResourceLocation()); + train.mapColorIndex = buffer.readVarInt(); } @Override @@ -105,6 +106,7 @@ public class TrainPacket extends SimplePacketBase { buffer.writeBoolean(train.doubleEnded); buffer.writeUtf(Component.Serializer.toJson(train.name)); buffer.writeResourceLocation(train.icon.id); + buffer.writeVarInt(train.mapColorIndex); } @Override diff --git a/src/main/java/com/simibubi/create/content/trains/entity/TrainStatus.java b/src/main/java/com/simibubi/create/content/trains/entity/TrainStatus.java index 1a3e73d84..8a68292a9 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/TrainStatus.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/TrainStatus.java @@ -16,9 +16,9 @@ public class TrainStatus { Train train; - boolean navigation; - boolean track; - boolean conductor; + public boolean navigation; + public boolean track; + public boolean conductor; List queued = new ArrayList<>(); diff --git a/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSyncPacket.java b/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSyncPacket.java index e5cda7b42..f3b04b13f 100644 --- a/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSyncPacket.java +++ b/src/main/java/com/simibubi/create/content/trains/graph/TrackGraphSyncPacket.java @@ -171,6 +171,8 @@ public class TrackGraphSyncPacket extends TrackGraphPacket { @Override protected void handle(GlobalRailwayManager manager, TrackGraph graph) { + manager.version++; + if (packetDeletesGraph) { manager.removeGraph(graph); return; diff --git a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java index 8fa4a0ef1..c8246bcf1 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/AssemblyScreen.java @@ -49,7 +49,7 @@ public class AssemblyScreen extends AbstractStationScreen { iconTypes = TrainIconType.REGISTRY.keySet() .stream() .toList(); - iconTypeScroll = new ScrollInput(x + 4, y + 17, 184, 14).titled(Lang.translateDirect("station.icon_type")); + iconTypeScroll = new ScrollInput(x + 4, y + 17, 162, 14).titled(Lang.translateDirect("station.icon_type")); iconTypeScroll.withRange(0, iconTypes.size()); iconTypeScroll.withStepFunction(ctx -> -iconTypeScroll.standardStep() .apply(ctx)); @@ -164,7 +164,7 @@ public class AssemblyScreen extends AbstractStationScreen { ResourceLocation iconId = iconTypes.get(iconTypeScroll.getState()); train.icon = TrainIconType.byId(iconId); AllPackets.getChannel() - .sendToServer(new TrainEditPacket(train.id, "", iconId)); + .sendToServer(new TrainEditPacket(train.id, "", iconId, train.mapColorIndex)); } } diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java index a620fc151..1bcd2e0c3 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationBlockEntity.java @@ -466,6 +466,18 @@ public class StationBlockEntity extends SmartBlockEntity implements ITransformab itemEntity.setDeltaMovement(Vec3.ZERO); getLevel().addFreshEntity(itemEntity); } + + public void updateMapColor(int color) { + GlobalStation station = getStation(); + if (station == null) + return; + + Train train = station.getPresentTrain(); + if (train == null) + return; + + train.mapColorIndex = color; + } private boolean updateStationState(Consumer updateState) { GlobalStation station = getStation(); diff --git a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java index d990ddd12..70cd9e998 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java +++ b/src/main/java/com/simibubi/create/content/trains/station/StationScreen.java @@ -10,6 +10,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPackets; import com.simibubi.create.AllPartialModels; +import com.simibubi.create.compat.Mods; import com.simibubi.create.content.decoration.slidingDoor.DoorControl; import com.simibubi.create.content.trains.entity.Carriage; import com.simibubi.create.content.trains.entity.Train; @@ -20,6 +21,7 @@ import com.simibubi.create.foundation.gui.UIRenderHelper; import com.simibubi.create.foundation.gui.widget.IconButton; import com.simibubi.create.foundation.gui.widget.Label; import com.simibubi.create.foundation.gui.widget.ScrollInput; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.Pair; @@ -44,6 +46,9 @@ public class StationScreen extends AbstractStationScreen { private int leavingAnimation; private LerpedFloat trainPosition; private DoorControl doorControl; + + private ScrollInput colorTypeScroll; + private int messedWithColors; private boolean switchingToAssemblyMode; @@ -99,6 +104,20 @@ public class StationScreen extends AbstractStationScreen { dropScheduleButton.withCallback(() -> AllPackets.getChannel() .sendToServer(StationEditPacket.dropSchedule(blockEntity.getBlockPos()))); addRenderableWidget(dropScheduleButton); + + colorTypeScroll = new ScrollInput(x + 166, y + 17, 22, 14).titled(Lang.translateDirect("station.train_map_color")); + colorTypeScroll.withRange(0, 16); + colorTypeScroll.withStepFunction(ctx -> -colorTypeScroll.standardStep() + .apply(ctx)); + colorTypeScroll.calling(s -> { + Train train = displayedTrain.get(); + if (train != null) { + train.mapColorIndex = s; + messedWithColors = 10; + } + }); + colorTypeScroll.active = colorTypeScroll.visible = false; + addRenderableWidget(colorTypeScroll); onTextChanged = s -> trainNameBox.setX(nameBoxX(s, trainNameBox)); trainNameBox = new EditBox(font, x + 23, y + 47, background.width - 75, 10, Components.immutableEmpty()); @@ -131,6 +150,12 @@ public class StationScreen extends AbstractStationScreen { .length()); trainNameBox.setHighlightPos(trainNameBox.getCursorPosition()); } + + if (messedWithColors > 0) { + messedWithColors--; + if (messedWithColors == 0) + syncTrainNameAndColor(); + } super.tick(); @@ -151,6 +176,8 @@ public class StationScreen extends AbstractStationScreen { leavingAnimation = 0; newTrainButton.active = blockEntity.edgePoint.isOrthogonal(); newTrainButton.visible = true; + colorTypeScroll.visible = false; + colorTypeScroll.active = false; Train imminentTrain = getImminent(); if (imminentTrain != null) { @@ -161,7 +188,9 @@ public class StationScreen extends AbstractStationScreen { disassembleTrainButton.visible = true; dropScheduleButton.active = blockEntity.trainHasSchedule; dropScheduleButton.visible = true; - + colorTypeScroll.setState(imminentTrain.mapColorIndex); + colorTypeScroll.visible = true; + colorTypeScroll.active = true; trainNameBox.active = true; trainNameBox.setValue(imminentTrain.name.getString()); trainNameBox.setX(nameBoxX(trainNameBox.getValue(), trainNameBox)); @@ -185,6 +214,8 @@ public class StationScreen extends AbstractStationScreen { targetPos -= trainIconWidth - 130; if (leavingAnimation > 0) { + colorTypeScroll.visible = false; + colorTypeScroll.active = false; disassembleTrainButton.active = false; float f = 1 - (leavingAnimation / 80f); trainPosition.setValue(targetPos + f * f * f * (background.width - targetPos + 5)); @@ -301,6 +332,27 @@ public class StationScreen extends AbstractStationScreen { if (font.width(text) > trainNameBox.getWidth()) graphics.drawString(font, "...", guiLeft + 26, guiTop + 47, 0xa6a6a6); } + + if (!Mods.FTBCHUNKS.isLoaded()) + return; + + AllGuiTextures sprite = AllGuiTextures.TRAINMAP_SPRITES; + sprite.bind(); + int trainColorIndex = colorTypeScroll.getState(); + int colorRow = trainColorIndex / 4; + int colorCol = trainColorIndex % 4; + int rotation = (AnimationTickHolder.getTicks() / 5) % 8; + + for (int slice = 0; slice < 3; slice++) { + int row = slice == 0 ? 1 : slice == 2 ? 2 : 3; + int col = rotation; + int positionX = colorTypeScroll.getX() + 4; + int positionY = colorTypeScroll.getY() - 1; + int sheetX = col * 16 + colorCol * 128; + int sheetY = row * 16 + colorRow * 64; + + graphics.blit(sprite.location, positionX, positionY, sheetX, sheetY, 16, 16, sprite.width, sprite.height); + } } @Override @@ -335,19 +387,19 @@ public class StationScreen extends AbstractStationScreen { if (hitEnter && trainNameBox.isFocused()) { trainNameBox.setFocused(false); - syncTrainName(); + syncTrainNameAndColor(); return true; } return super.keyPressed(pKeyCode, pScanCode, pModifiers); } - private void syncTrainName() { + private void syncTrainNameAndColor() { Train train = displayedTrain.get(); if (train != null && !trainNameBox.getValue() .equals(train.name.getString())) AllPackets.getChannel() - .sendToServer(new TrainEditPacket(train.id, trainNameBox.getValue(), train.icon.getId())); + .sendToServer(new TrainEditPacket(train.id, trainNameBox.getValue(), train.icon.getId(), train.mapColorIndex)); } private void syncStationName() { @@ -371,7 +423,8 @@ public class StationScreen extends AbstractStationScreen { return; if (!switchingToAssemblyMode) AllPackets.getChannel() - .sendToServer(new TrainEditPacket(train.id, trainNameBox.getValue(), train.icon.getId())); + .sendToServer( + new TrainEditPacket(train.id, trainNameBox.getValue(), train.icon.getId(), train.mapColorIndex)); else blockEntity.imminentTrain = null; } diff --git a/src/main/java/com/simibubi/create/content/trains/station/TrainEditPacket.java b/src/main/java/com/simibubi/create/content/trains/station/TrainEditPacket.java index 5ee103bef..d2ba96eab 100644 --- a/src/main/java/com/simibubi/create/content/trains/station/TrainEditPacket.java +++ b/src/main/java/com/simibubi/create/content/trains/station/TrainEditPacket.java @@ -21,17 +21,20 @@ public class TrainEditPacket extends SimplePacketBase { private String name; private UUID id; private ResourceLocation iconType; + private int mapColor; - public TrainEditPacket(UUID id, String name, ResourceLocation iconType) { + public TrainEditPacket(UUID id, String name, ResourceLocation iconType, int mapColor) { this.name = name; this.id = id; this.iconType = iconType; + this.mapColor = mapColor; } public TrainEditPacket(FriendlyByteBuf buffer) { id = buffer.readUUID(); name = buffer.readUtf(256); iconType = buffer.readResourceLocation(); + mapColor = buffer.readVarInt(); } @Override @@ -39,6 +42,7 @@ public class TrainEditPacket extends SimplePacketBase { buffer.writeUUID(id); buffer.writeUtf(name); buffer.writeResourceLocation(iconType); + buffer.writeVarInt(mapColor); } @Override @@ -52,8 +56,9 @@ public class TrainEditPacket extends SimplePacketBase { if (!name.isBlank()) train.name = Components.literal(name); train.icon = TrainIconType.byId(iconType); + train.mapColorIndex = mapColor; if (sender != null) - AllPackets.getChannel().send(PacketDistributor.ALL.noArg(), new TrainEditReturnPacket(id, name, iconType)); + AllPackets.getChannel().send(PacketDistributor.ALL.noArg(), new TrainEditReturnPacket(id, name, iconType, mapColor)); }); return true; } @@ -64,8 +69,8 @@ public class TrainEditPacket extends SimplePacketBase { super(buffer); } - public TrainEditReturnPacket(UUID id, String name, ResourceLocation iconType) { - super(id, name, iconType); + public TrainEditReturnPacket(UUID id, String name, ResourceLocation iconType, int mapColor) { + super(id, name, iconType, mapColor); } } diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index 51f59191e..57fa0f8a1 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -1,6 +1,8 @@ package com.simibubi.create.content.trains.track; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; @@ -8,6 +10,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.NBTHelper; +import com.simibubi.create.foundation.utility.Pair; import com.simibubi.create.foundation.utility.VecHelper; import dev.engine_room.flywheel.lib.transform.TransformStack; @@ -108,7 +111,8 @@ public class BezierConnection implements Iterable { .map(v -> v.add(Vec3.atLowerCornerOf(localTo))), Couple.deserializeEach(compound.getList("Axes", Tag.TAG_COMPOUND), VecHelper::readNBTCompound), Couple.deserializeEach(compound.getList("Normals", Tag.TAG_COMPOUND), VecHelper::readNBTCompound), - compound.getBoolean("Primary"), compound.getBoolean("Girder"), TrackMaterial.deserialize(compound.getString("Material"))); + compound.getBoolean("Primary"), compound.getBoolean("Girder"), + TrackMaterial.deserialize(compound.getString("Material"))); if (compound.contains("Smoothing")) smoothing = @@ -398,7 +402,8 @@ public class BezierConnection implements Iterable { } public void spawnDestroyParticles(Level level) { - BlockParticleOption data = new BlockParticleOption(ParticleTypes.BLOCK, getMaterial().getBlock().defaultBlockState()); + BlockParticleOption data = new BlockParticleOption(ParticleTypes.BLOCK, getMaterial().getBlock() + .defaultBlockState()); BlockParticleOption girderData = new BlockParticleOption(ParticleTypes.BLOCK, AllBlocks.METAL_GIRDER.getDefaultState()); if (!(level instanceof ServerLevel slevel)) @@ -673,4 +678,104 @@ public class BezierConnection implements Iterable { return bakedGirders; } + public Map, Double> rasterise() { + Map, Double> yLevels = new HashMap<>(); + BlockPos tePosition = tePositions.getFirst(); + Vec3 end1 = starts.getFirst() + .subtract(Vec3.atLowerCornerOf(tePosition)) + .add(0, 3 / 16f, 0); + Vec3 end2 = starts.getSecond() + .subtract(Vec3.atLowerCornerOf(tePosition)) + .add(0, 3 / 16f, 0); + Vec3 axis1 = axes.getFirst(); + Vec3 axis2 = axes.getSecond(); + + double handleLength = getHandleLength(); + Vec3 finish1 = axis1.scale(handleLength) + .add(end1); + Vec3 finish2 = axis2.scale(handleLength) + .add(end2); + + Vec3 faceNormal1 = normals.getFirst(); + Vec3 faceNormal2 = normals.getSecond(); + + int segCount = getSegmentCount(); + float[] lut = getStepLUT(); + Vec3[] samples = new Vec3[segCount]; + + for (int i = 0; i < segCount; i++) { + float t = Mth.clamp((i + 0.5f) * lut[i] / segCount, 0, 1); + Vec3 result = VecHelper.bezier(end1, end2, finish1, finish2, t); + Vec3 derivative = VecHelper.bezierDerivative(end1, end2, finish1, finish2, t) + .normalize(); + Vec3 faceNormal = + faceNormal1.equals(faceNormal2) ? faceNormal1 : VecHelper.slerp(t, faceNormal1, faceNormal2); + Vec3 normal = faceNormal.cross(derivative) + .normalize(); + Vec3 below = result.add(faceNormal.scale(-.25f)); + Vec3 rail1 = below.add(normal.scale(.05f)); + Vec3 rail2 = below.subtract(normal.scale(.05f)); + Vec3 railMiddle = rail1.add(rail2) + .scale(.5); + samples[i] = railMiddle; + } + + Vec3 center = end1.add(end2) + .scale(0.5); + + Pair prev = null; + Pair prev2 = null; + Pair prev3 = null; + + for (int i = 0; i < segCount; i++) { + Vec3 railMiddle = samples[i]; + BlockPos pos = BlockPos.containing(railMiddle); + Pair key = Pair.of(pos.getX(), pos.getZ()); + boolean alreadyPresent = yLevels.containsKey(key); + if (alreadyPresent && yLevels.get(key) <= railMiddle.y) + continue; + yLevels.put(key, railMiddle.y); + if (alreadyPresent) + continue; + + if (prev3 != null) { // Remove obsolete pixels + boolean doubledViaPrev = isLineDoubled(prev2, prev, key); + boolean doubledViaPrev2 = isLineDoubled(prev3, prev2, prev); + boolean prevCloser = diff(prev, center) > diff(prev2, center); + + if (doubledViaPrev2 && (!doubledViaPrev || !prevCloser)) { + yLevels.remove(prev2); + prev2 = prev; + prev = key; + continue; + + } else if (doubledViaPrev && doubledViaPrev2 && prevCloser) { + yLevels.remove(prev); + prev = key; + continue; + } + } + + prev3 = prev2; + prev2 = prev; + prev = key; + } + + return yLevels; + } + + private double diff(Pair pFrom, Vec3 to) { + return to.distanceToSqr(pFrom.getFirst() + 0.5, to.y, pFrom.getSecond() + 0.5); + } + + private boolean isLineDoubled(Pair pFrom, Pair pVia, + Pair pTo) { + int diff1x = pVia.getFirst() - pFrom.getFirst(); + int diff1z = pVia.getSecond() - pFrom.getSecond(); + int diff2x = pTo.getFirst() - pVia.getFirst(); + int diff2z = pTo.getSecond() - pVia.getSecond(); + return Math.abs(diff1x) + Math.abs(diff1z) == 1 && Math.abs(diff2x) + Math.abs(diff2z) == 1 && diff1x != diff2x + && diff1z != diff2z; + } + } diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java index 43e8a7d09..ce0fab09d 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackBlockEntity.java @@ -20,7 +20,6 @@ import com.simibubi.create.foundation.blockEntity.RemoveBlockEntityPacket; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; import com.simibubi.create.foundation.utility.Pair; -import com.simibubi.create.foundation.utility.VecHelper; import dev.engine_room.flywheel.lib.visualization.VisualizationHelper; import net.minecraft.core.BlockPos; @@ -363,54 +362,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable } public void manageFakeTracksAlong(BezierConnection bc, boolean remove) { - Map, Double> yLevels = new HashMap<>(); - BlockPos tePosition = bc.bePositions.getFirst(); - Vec3 end1 = bc.starts.getFirst() - .subtract(Vec3.atLowerCornerOf(tePosition)) - .add(0, 3 / 16f, 0); - Vec3 end2 = bc.starts.getSecond() - .subtract(Vec3.atLowerCornerOf(tePosition)) - .add(0, 3 / 16f, 0); - Vec3 axis1 = bc.axes.getFirst(); - Vec3 axis2 = bc.axes.getSecond(); - - double handleLength = bc.getHandleLength(); - - Vec3 finish1 = axis1.scale(handleLength) - .add(end1); - Vec3 finish2 = axis2.scale(handleLength) - .add(end2); - - Vec3 faceNormal1 = bc.normals.getFirst(); - Vec3 faceNormal2 = bc.normals.getSecond(); - - int segCount = bc.getSegmentCount(); - float[] lut = bc.getStepLUT(); - - for (int i = 0; i < segCount; i++) { - float t = i == segCount ? 1 : i * lut[i] / segCount; - t += 0.5f / segCount; - - Vec3 result = VecHelper.bezier(end1, end2, finish1, finish2, t); - Vec3 derivative = VecHelper.bezierDerivative(end1, end2, finish1, finish2, t) - .normalize(); - Vec3 faceNormal = - faceNormal1.equals(faceNormal2) ? faceNormal1 : VecHelper.slerp(t, faceNormal1, faceNormal2); - Vec3 normal = faceNormal.cross(derivative) - .normalize(); - Vec3 below = result.add(faceNormal.scale(-.25f)); - Vec3 rail1 = below.add(normal.scale(.05f)); - Vec3 rail2 = below.subtract(normal.scale(.05f)); - Vec3 railMiddle = rail1.add(rail2) - .scale(.5); - - for (Vec3 vec : new Vec3[] { railMiddle }) { - BlockPos pos = BlockPos.containing(vec); - Pair key = Pair.of(pos.getX(), pos.getZ()); - if (!yLevels.containsKey(key) || yLevels.get(key) > vec.y) - yLevels.put(key, vec.y); - } - } + Map, Double> yLevels = bc.rasterise(); for (Entry, Double> entry : yLevels.entrySet()) { double yValue = entry.getValue(); @@ -419,7 +371,7 @@ public class TrackBlockEntity extends SmartBlockEntity implements ITransformable .getFirst(), floor, entry.getKey() .getSecond()); - targetPos = targetPos.offset(tePosition) + targetPos = targetPos.offset(bc.bePositions.getFirst()) .above(1); BlockState stateAtPos = level.getBlockState(targetPos); diff --git a/src/main/java/com/simibubi/create/foundation/events/CommonEvents.java b/src/main/java/com/simibubi/create/foundation/events/CommonEvents.java index 6967cace0..5ae94185e 100644 --- a/src/main/java/com/simibubi/create/foundation/events/CommonEvents.java +++ b/src/main/java/com/simibubi/create/foundation/events/CommonEvents.java @@ -1,6 +1,7 @@ package com.simibubi.create.foundation.events; import com.simibubi.create.Create; +import com.simibubi.create.compat.trainmap.TrainMapSync; import com.simibubi.create.content.contraptions.ContraptionHandler; import com.simibubi.create.content.contraptions.actors.trainControls.ControlsServerHandler; import com.simibubi.create.content.contraptions.minecart.CouplingPhysics; @@ -67,6 +68,7 @@ public class CommonEvents { Create.LAGGER.tick(); ServerSpeedProvider.serverTick(); Create.RAILWAYS.sync.serverTick(); + TrainMapSync.serverTick(event); } @SubscribeEvent diff --git a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java index 78693e28f..06bf6274f 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AllGuiTextures.java @@ -189,6 +189,18 @@ public enum AllGuiTextures implements ScreenElement { // PlacementIndicator PLACEMENT_INDICATOR_SHEET("placement_indicator", 0, 0, 16, 256), + + // Train Map + TRAINMAP_SPRITES("trainmap_sprite_sheet", 0, 0, 512, 256), + TRAINMAP_SIGNAL("widgets", 81, 156, 5, 10), + TRAINMAP_STATION_ORTHO("widgets", 49, 156, 5, 5), + TRAINMAP_STATION_DIAGO("widgets", 56, 156, 5, 5), + TRAINMAP_STATION_ORTHO_HIGHLIGHT("widgets", 63, 156, 7, 7), + TRAINMAP_STATION_DIAGO_HIGHLIGHT("widgets", 72, 156, 7, 7), + + TRAINMAP_TOGGLE_PANEL("widgets", 166, 74, 33, 14), + TRAINMAP_TOGGLE_ON("widgets", 166, 89, 12, 7), + TRAINMAP_TOGGLE_OFF("widgets", 166, 97, 12, 7), // ComputerCraft COMPUTER("computer", 200, 102); diff --git a/src/main/java/com/simibubi/create/foundation/mixin/CreateMixinPlugin.java b/src/main/java/com/simibubi/create/foundation/mixin/CreateMixinPlugin.java new file mode 100644 index 000000000..fb26a4534 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/CreateMixinPlugin.java @@ -0,0 +1,43 @@ +package com.simibubi.create.foundation.mixin; + +import java.util.List; +import java.util.Set; + +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import com.simibubi.create.compat.Mods; + +public class CreateMixinPlugin implements IMixinConfigPlugin { + + @Override + public void onLoad(String mixinPackage) {} + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (targetClassName.equals("journeymap/client/ui/fullscreen/Fullscreen") && !Mods.JOURNEYMAP.isLoaded()) + return false; + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) {} + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {} + +} diff --git a/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java new file mode 100644 index 000000000..70bb99964 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/compat/JourneyFullscreenMapMixin.java @@ -0,0 +1,40 @@ +package com.simibubi.create.foundation.mixin.compat; + +import java.awt.geom.Point2D; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.simibubi.create.compat.trainmap.JourneyTrainMap; + +import journeymap.client.render.map.GridRenderer; +import journeymap.client.ui.fullscreen.Fullscreen; +import net.minecraft.client.gui.GuiGraphics; + +@Mixin(Fullscreen.class) +public abstract class JourneyFullscreenMapMixin { + + @Shadow + private static GridRenderer gridRenderer; + + @Shadow + private Boolean isScrolling; + + @Shadow + public abstract Point2D.Double getMouseDrag(); + + @Inject(method = "Ljourneymap/client/ui/fullscreen/Fullscreen;render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", at = @At(target = "Ljourneymap/client/ui/fullscreen/Fullscreen;drawMap(Lnet/minecraft/client/gui/GuiGraphics;II)V", value = "INVOKE", shift = Shift.AFTER)) + public void create$journeyMapFullscreenRender(GuiGraphics graphics, int mouseX, int mouseY, float pt, + CallbackInfo ci) { + boolean dragging = isScrolling; + Point2D.Double mouseDrag = getMouseDrag(); + double x = gridRenderer.getCenterBlockX() - (dragging ? mouseDrag.x : 0); + double z = gridRenderer.getCenterBlockZ() - (dragging ? mouseDrag.y : 0); + JourneyTrainMap.onRender(graphics, (Fullscreen) (Object) this, x, z, mouseX, mouseY, pt); + } + +} diff --git a/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java b/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java index d0acb2cc3..0c1f711cf 100644 --- a/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/RenderTypes.java @@ -127,6 +127,19 @@ public class RenderTypes extends RenderStateShard { return ADDITIVE; } + public static BiFunction TRAIN_MAP = Util.memoize(RenderTypes::getTrainMap); + + private static RenderType getTrainMap(ResourceLocation locationIn, boolean linearFiltering) { + RenderType.CompositeState rendertype$state = RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_TEXT_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(locationIn, linearFiltering, false)) + .setTransparencyState(NO_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .createCompositeState(false); + return RenderType.create("create_train_map", DefaultVertexFormat.POSITION_COLOR_TEX_LIGHTMAP, + VertexFormat.Mode.QUADS, 256, false, true, rendertype$state); + } + public static RenderType fluid() { return FLUID; } diff --git a/src/main/java/com/simibubi/create/infrastructure/config/CClient.java b/src/main/java/com/simibubi/create/infrastructure/config/CClient.java index a25381f6b..fcd4af344 100644 --- a/src/main/java/com/simibubi/create/infrastructure/config/CClient.java +++ b/src/main/java/com/simibubi/create/infrastructure/config/CClient.java @@ -88,6 +88,10 @@ public class CClient extends ConfigBase { public final ConfigFloat mountedZoomMultiplier = f(3, 0, "mountedZoomMultiplier", Comments.mountedZoomMultiplier); public final ConfigBool showTrackGraphOnF3 = b(false, "showTrackGraphOnF3", Comments.showTrackGraphOnF3); public final ConfigBool showExtendedTrackGraphOnF3 = b(false, "showExtendedTrackGraphOnF3", Comments.showExtendedTrackGraphOnF3); + public final ConfigBool showTrainMapOverlay = b(true, "showTrainMapOverlay", Comments.showTrainMapOverlay); + public final ConfigBool trainMapOverlay = b(true, "showTrainMapOverlay", Comments.showTrainMapOverlay); + public final ConfigEnum trainMapColorTheme = + e(TrainMapTheme.RED, "trainMapColorTheme", Comments.trainMapColorTheme); @Override public String getName() { @@ -97,6 +101,10 @@ public class CClient extends ConfigBase { public enum PlacementIndicatorSetting { TEXTURE, TRIANGLE, NONE } + + public enum TrainMapTheme { + RED, GREY, WHITE + } private static class Comments { static String client = "Client-only settings - If you're looking for general settings, look inside your worlds serverconfig folder!"; @@ -157,6 +165,8 @@ public class CClient extends ConfigBase { static String ambientVolumeCap = "Maximum volume modifier of Ambient noise"; static String trains = "Railway related settings"; + static String showTrainMapOverlay = "Display Track Networks and Trains on supported map mods"; + static String trainMapColorTheme = "Track Network Color on maps"; static String mountedZoomMultiplier = "How far away the Camera should zoom when seated on a train"; static String showTrackGraphOnF3 = "Display nodes and edges of a Railway Network while f3 debug mode is active"; static String showExtendedTrackGraphOnF3 = "Additionally display materials of a Rail Network while f3 debug mode is active"; diff --git a/src/main/resources/assets/create/lang/default/interface.json b/src/main/resources/assets/create/lang/default/interface.json index 5214ce073..044e4d5f7 100644 --- a/src/main/resources/assets/create/lang/default/interface.json +++ b/src/main/resources/assets/create/lang/default/interface.json @@ -790,6 +790,7 @@ "create.station.cancel": "Cancel Assembly", "create.station.failed": "Assembly Failed", "create.station.icon_type": "Icon Type", + "create.station.train_map_color": "Color on Maps", "create.station.create_train": "Create new Train", "create.station.assemble_train": "Assemble Train", "create.station.disassemble_train": "Disassemble Train", @@ -810,6 +811,22 @@ "create.station.how_to_1": "Remove bogeys by breaking the block on top.", "create.station.how_to_2": "Build carriages attached to one or two bogeys each.", + "create.train_map.toggle": "Train network overlay", + "create.train_map.train_owned_by": "by %1$s", + "create.train_map.conductor_missing": " Conductor Missing", + "create.train_map.derailed": " Derailed", + "create.train_map.navigation_failed": " Navigation Failed", + "create.train_map.schedule_interrupted": " Schedule Interrupted", + "create.train_map.player_controlled": " -> Controlled by Player", + "create.train_map.train_at_station": " >| %1$s", + "create.train_map.train_moving_to_station": " >> %1$s (%2$sm)", + "create.train_map.waiting_at_signal": " Waiting at Signal", + "create.train_map.redstone_powered": " Redstone Powered", + "create.train_map.for_other_train": " for %1$s", + "create.train_map.cannot_traverse_section": " Cannot fully traverse", + "create.train_map.section_reserved": " Section reserved", + "create.train_map.fuel_boosted": " Fuel boosted \u2714", + "create.train_assembly.too_many_bogeys": "Too many Bogeys attached: %1$s", "create.train_assembly.frontmost_bogey_at_station": "Frontmost Bogey must be at Station Marker", "create.train_assembly.no_bogeys": "No Bogeys Found", diff --git a/src/main/resources/assets/create/textures/gui/trainmap_sprite_sheet.png b/src/main/resources/assets/create/textures/gui/trainmap_sprite_sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..f981e2c682573679ced7bfbfb3cd1d046a2cfaca GIT binary patch literal 12190 zcmeI&2{e@b-#_qchOsl_L1ddLm7-9TCCpe#D_SYp+9+;I)+{q)pSy)hr4nN+?vf>n zY(pv}3bU(P@wA0(K2LPE7{0p`)aQ((~ z-{BqL;~rIc8N0okHP4+pfBxOOciF^SwQowoPwk4Ujd;^pWJlV3J&{Z*@6d57WU*Lx z@7`5aRh5xJo=2&!*s`t>#v>A9BHm9!g$)x~ll=#qPNO{JX= z%!}74ZGL`2YlVYrke1!8yU``3ul5`{K3;fjrhzmRtA3@dtgxkJb$U8Ao;+68L9s7< z?PaX$8Wg+Jy09>(p`rfLrJ$+C$hn^4_8i^Fy4K>(e#2t&d`0a-YbPy>1YUxN2>CMj zpznUr_z?Ie|FvI$;R*!!hXK4UyN35Y}4wKF;xdG*Oq6Am;MGJR^o#c4q zH2d;$+v@AeoSU}XFH*8zFpUd#XteVAXyHEGTd5v|r9JSb=lP8r1pHT;HLmA~bM3T6 zdK(}8gIQ<);KXY9T#jls8Q zjaDld7j89L{TJh)2eo;BZMB{>k*lHC8h2#s@u8w7dHSsZ^0Y-lOpu1IU}_a%9-FP)H$b?v5xZ8Ga=0OUh%@zamIwu?a7#~hbA?ovw3@_-6S5728do6 z_eZ7G{e74o^+z5NOHCO^SOq~neto(9^^?wb(hf4DLkH67eKH&SwwLWE-nM2o6|0qu z?5~fsRdL@U5L$FhWFIlMhHF6Ny-tWN^>h<+?myPzd&9pfCn5BsMrJMuM<@hk23_B(>5O$Kh+ zpW!6{;2L#j0Zi7S$Zy*DfFBD zkg@k^^*6G!?kIF8K^2iFIdi+BLPe`Umnb0Z^)MN-`S4u<#kv^Mw%@Fk!Sm}V%yk?e zGILrQ3lieH9jx9zo{S98a;fSO7hFp_kX~)VHBjskWvzCz+o(_ry)uPE{RFnw^agVJ zk>7kYu6%rkxAV^AUXiv7SZlqa91}#@ed~KJRWyGXtxZ=?+6{Z|rAObaShw#yr|Ub~ z6JGWEl*bbcm$mO6PH{smn7DN~r+ZgbZ4~jUc8f=!DTEvrdhz4Q9!_k|(K}I_jvBXn zIfQ%(+|0n>wz195awGlMTmr2%M)udFz1B#1Hdu#VZGy+u_4i_R^}Cv@P-PBa8j1z3 z$0Kb{kl}c8E>^L8T&p59CLW17P34vlpW;BNITZ+Zdk39Pl+{P$%gJyRB`P<@k+Add zF0F>3ju{_;x;$|;!7*oAo@H25uBU36e3`IVimU(y9yf;tY^l>6sBLMKOM?}zhOkH6 zrL!FCi;x%z9|l0UD&_oYx?3Xw`XQ)e9wJJCqXgoS_-j6x!#1QcOCu={uSeGu0!3Hl5ju+uET5D z$pX|R4xp~JIbF)m7-Gw_uC3o^smhySjc`m7lqzbN58UWDfk>54Yc&LJ^qMW4g{&!M zM3DFf{~XLg;FD-#q+>vZ3#%*rrBCM@DIQGS!X?T^{OMfQxcP>>=?Llypug7+U(}H- z{x?qyLe0+dwQu5#vj((nrUc-h3}R&pJ!kpx+*e{dY<Lt{sG zKc%I&>s9Y7i-r{^dz|%fuiiJ9!{1JOLQ%r^ycH|L{9``@f>7*X0tmieoqq9fmK&3LbDjgU{=LY0 zf@k9>Ka-9Pi3qC!d>H7HJ$Y?NAoJh|9EdkHi9(EI+wWgV82D?j>FEVXHdkPWySdBpK7*89dWM^}2y{d3 z1vyLmGupGk_Z`0)ChUGpNWTI`mgEVow=FqWhz9g`@U5mkl@7kaAGZ}DkX#yA4_-p> zB~e528BLzb^D8g~#nB5US}X7x;bfF0`@+@uQC98ynesCHn01Es*OX?t@uv4+2<5SL ztjKT}N@TU#t|<2XtAY~5y(3w>%b?eIg(Z_J8IYNm%(0MFavz;J2z=lzDU~0xBJ4Np z)JO=t4d|~;H<|eaBv?%CUswK_NpoKv7&12Ot+mp~I=`@4^ehvo^u z{j}A(hBJ!Ur&N_i2A_&GXWota)8ixGFs!QbRp(IYQL-?-+2{t^vyRKg8J7#YYiK=W zpS-@s5)&tA+XmN;2dI~2hDAg2`FXNey_*k^7X|z?6JruwydVMFf-j<7c0&YevsRts z44M1nskJX(FF{!PEMbL^!PHpp^f`6=6B#lZhWufxe7sxe*-~msO+wNMA*Bc%Z72U` zLCIFnI5D7g*uwNG+1}nTB-|;r0^VE0A=b(S!&ygj`{5+c{-ps759~|kXkY}q z;pGY52|)q;XSeHe1d!JQoHiwnWp*fpB)Dbco#DAF6V#&~b5$ooC|Q&>F?~qxdqKJe z-CMQa*UOJ~@L+u4&Z#DDWIIAZXqXSZTSpqQYqaC)^f@8A!1cy4QxjrAm>l4D`C0>A zjoUx;PJ_KT5G|%Y`?R6ez|fbz!P~Lq?CYw+RF7FiZ7h~g)*|DWtDCYztBzrIGBL1h zh2zndmdfK^aN*(p^6vx!_)#LhD3JK>OZ^@C{>)0t!zquDkech`Z7YkC*fo^o16BcLVRB z8>`%PFw$2(wT2-#ztubU+RjhOGNlI&ISq=Kz|ElQ8BI@jCMf-k;-;P{V^fuOrQ3Cqj#B1GJOQqx z-ImMMJ$iSUx}9-N82`Y$WEFuJfltVEUXbv19Mil5u`fY{JK`4VCO&?5o|Nsk&6F57 zvO&N=zI3)sc`b#R5zw>JLa$xyqoq|5Pdk z7B`SD)FKLQtZ6zg5nB?e6l&~qq=>PZP3d8;VI7dOX_2Y8`er_PdDYW9Y#K*SC zlpv(WS97;UeBPL;HJABiyRnND zuUVw{+ZB3qj#Y$czgAzV)^VM#z(YB=_tx4dBUk` z=l!{T3s$#A!xU||JwPLxCRnO8w|d9>5DUnC&7~uZuXwb9Z}REux4a8ZPgImGQty8Y zdegvQV@xq$+zVm^IhWydt?Q2)g4+$gf!V%=hAJNy`ia&fSm|!>sMDp@WH@Te6vq{Q zIs_p(tIL0(!071#_;(23=0uW8*N*HW@EwMSj&hs&q46qH;ASZ=UBa(qosTU0N!Eo} z;MJSLnoge!(gy+tO2!z#rBQA~C>f5~rGrw)V08_LZ#$311Sr_Jiy19OG0UUYbO;!3_ z6?9kVJQ63?AmWAI`4hx_iK~F!lZx0Zkm}5`QxB*O=mZNODVhkOhZ3#+=84csEAYSG z?LNaJ;s9Jir?hnDnw?R4D+AgNNwo8BlARc$KFeQDax2Kq;rL#3AeS#JGXrQE>#gG= zHfmn>$;+Q75=p{#{qW3jbns+`>$0aH|o00Y}$(!!6UJW*u z`52Ft;oA@K8&Zg~4%0sbAoKaCjqzmB;LR@WWp(h(JkfJzrcF z(YmpQ!O1go|0oc{@bmI;8IZ?h^kqZsNBc~29|s*`i@cH#^=!(pl-tXn)WL_Bx|EB` zCC2@G%Ux#jL*c)23j9m^9_!QZJsgj{0FHB%xM*$EcmlqE(A}Jtw}VW-SsXOF>GeRK zyp7!P|6Jo|w*HTijkCMCAg2qUylbT<*{OlFIklwI*rz^;1f=zzw_L|?pX9`%GAURAI! zweqNa+1W1+7gtjjxtt{~{v)Huf}wHBp4o>)N0d)KqJHAU7Y6k$PEx%uND9?K@Nq;iVCk3diKulby)9HrrkPx6yl%(EU2vRW-y_ zJHKajzfM7>Zj~N!)r6$%K!4<{3n!{DOuZplld5WHRcfH)KOq|qjBV0CK3Fe3wesX~ zkiOr0x;+#2k12jo_BqtvwIG^h2P>x3*U!#5dP&A>n%6K_{CEr>1KZT&}(AJa=pL)4mehb6-A zU9ceL=1n)&6pRzk{#f3%kZ?%0u2ZXUW9^XDr>wS_N3+H{3=H2CIA&~P)g~Gdu3Y?R z<60z!pNnt8yRw*l*4~##to>Ytr^Jb6^^HB3k$gAD+DoFWFJ6}QV|-}T!%d&j_O~pW zi^uT7k=V&6In<6WXCyacSbcoTgVq@aU90Ug)jHdjX@vG;8IUPBaTBx-NwiqJRK;&| zp#;G{0i7GDFC!ym`|19+5MGV{Tq+PJ?j;;<-@V$JBFJCFSB7-r$ zxAJc#PC=4x`puXA4%Z&Pt-p`ZX3C`hN-v*P9s=p@882k@P1!-|pOyVgYwp=sj-&k? zM{7T1lnu0>O70r}KXbj*#z5knE>%yN=Q*T2vDz-%^&6bWWGoN?vFu690>2!mS{ z8LL}q4wDuCcs<76KQZjQ#gu!bQE-QSimQ>22Nqn(<}M_}uR#xdpjBXGyr~nHLvJjk znDxnXc(h-yRF>Q`k!W?x8RrF)Qt@1BwEe#|+7Ec)_bF!AMu$aSZSIR&r|tf=2B+K` zE2kAIP~c`S9rxf+89gk!iN1#)H8{Sn7=^^}lqX`nXD;6onQJ|6YxUe*GvI4bWyub- z0>m(GXk@%AYjyd!?oY^;^^@tI!~cYAIFegacg@EP)hP~w00Za>!~(%@5|M$@$m@>p z4XE6Rm2}7(7`vpN7axDCsu`YwnYID@?ANm#JO=4t%QoIVm>Vl?bU4mO1;lvgJR~^2 z5sq*2p40eM0WQlxH2$dfU@V|N067rAK#qE4ADD;m9fl-6)>w>??#m<3<&no?B&U#e z3?Rw@3!Hu8cn%mw86qcTH4hgcSWQvY^_0}Kkc~3rQK?3^mu^7GVe5~~tSW5e8 z`*D#6S;C6&DJDR;bpZ$Pg!n*VwIg)@5^GBO*!b8=OghUbRr@^~&~F(Kl;{92_}$DP z3x@M2y(}xW0}7eQ%!ys>7J38N0%vS2$}`LNyoh%PJKU5oFE+?88IM}*JRFvG>R&vC z#vg!>vfrmzOk2*Cl-RuRO^V_e2b6?y7%X|33Gj$*AjDN(K-<51@bbiX;UWtD!AJG=6)+lcoLP^S^yHv)GN@p^eJNE_uLlM*hz(VRi0zWOknSslddzJ|6ON$>qE%m+nYD=d5I(J4ercxM2Qw7 zHc5w4ZRcE%t##mpfiw_Q*H!-K9ATen9$`WB40;3m6kw3;B9RbQ z_QWJ#FY%L5HZ(5ZpZ}4tq~O&Qa_v?3^nND_G=^M9;FD?HHG6MlW)qor(=Sd@20bCU zA_5It@W7a>t}XWEVPM>)LAx*(&yzISw{9N{0k^BFALJ!qv~W&8oP_W9P5}`3e)r-$ zG+6`ktD;+gQ$G>h0?U#i9*}K)B=l9($uyekt6jfWcGB$Fo6ik*xr28~vPoO1Fi^B( zmxDjMEZ^sl&5y6T6zzL#aAZ}24ntJ?xlLAQuT?{yFTvgf4U5>+l$!e@>e-0w>gIZr zl2iQK6rD!SJjo9u%uF46TY41O6z(<2N(JV8edw~pVPiS4^ZrPI{(ebS$1mvUeu~*? zFVrxcI{dINMT_0Q^_=;mEi_f-F(MRkA7vinipuH#)MZ3&l& zIJzd4i2Yh&S43K4r&s9Eh8rn?%;~75#yeJ*!GJs0)}vW-s#G*KVyW@|m_=gFgzL=r zjp72C^XXq2Z>(f!NAj1(`;-T@({5>;1Wh|KmHv60Bx-;hNip2c?dm59em0nb*W&ik zP7{#Ijzw-x}ys zIgI;&9<|Y=XgblS7Lp%6K8y~Fr$1(15?CU#~0ZHUC`zdK~Y zR{KA%xPMYOI6`qM{JmNCW#VUIXKBr4eIqulirsjV{t6;#er>$#(VsUaYt1G9)Oe!@ z+R;BX-VtEq%`&7L{m^*h*iE)s9f{p!FE!pcFEE4Gkt)B-SQo&|xemu}#{XT7x44Ia zu;lrc>sB#Df%gION+kRB6%k($9-H?)!h07H-t&oKS;BQCW@)UXW1%R}Z>j$N^ZWWc z`CI*MArh-eGV7V|*mGxpKb-UV0&Cy$IwT%CmjCQ!fn(+cD9J+cUF8Zz`ES7scCc4I z18P6gC#R-_6}nJ>`bpD~lt5|XHOD4U(uSc}ysIAgb#7NbQ7_zN_qHL>+^Y@H#kq0d z7r)~}L{ypG8mVc-x1A@uI{UnP?*0PU6BZ{-!sQf9btJ$!l5qy`k~|2`qi8dJId~Gw z5cyko(~ci#;IbCnBc_sfNiIniA=bni-)$uI3>k;{K03ENI<^!gbl!uF$w7-vT(A%g zu>1Khm8Tugka+J2{^c2c`|@l?{QImS>Q3MwH%bZnGpglD-?!P;A=9tw(ZW9sntVk6 z&jw9|#EZkN^5);f5R0PkYzO4;XO+P^Nt&44q$DYS^V606TcB?T|C zOXNNIPTE2;Iw~7SML$oUM5R;M9XMi!BV=_ni%+(DpKhBHJ{uBJrjx1|qgqcNhI(Va z4xF4BoTTnf!qvK+wLq5eE>yCnuHvHE(||u8_56QZbf-ZVyYQ7~`PlO#h~rwp><-)g ztQO{iLFulMBPLZGwEr)l`GI-CaeyO*0gYTDwmQ~3#6amaX>*b%w*c0|bzKnyA zejEqk|2@1-{x9(U@Oyag`wzVT1MmO9`&ae$|0nQnxYES}CcLfxQs|D@#vU5qy~Efr JP2VQ){{ZyyssI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/create/textures/gui/widgets.png b/src/main/resources/assets/create/textures/gui/widgets.png index cc8cf5bef63005aae0a1a6dc73e7910080d3cf8e..db162967dc90e28ab12c9184f50dafc4612734db 100644 GIT binary patch literal 11018 zcmb8Vbx<5%6ec<|Ffcg5-66OHLLk`S!GgO7m*5&~a1Sm)f(3V%-~@-@7Tg^McUXS= z_K#PuUhURa-LAf;`&>EKy1(z7aHY@E7^ozu0000(=97d9004Z=0s#=D*PEVGk@ABpyDst{;Pm!A*vt>0941IJsN{wWfX@`+Rgv~X6Jtw(0Vo;1pr{ql93Qq^DsEh zL`fu*{;}K9Qrgl|%5jy`{@ayODw%$`Z(c9Hx(iNJ%Q{xo%7v8-3|T+-xW=&e6g+*m zQ*&13F=ylk-%Q4`4ICXXx&yd*57sCjIviH%NK<~)wZ2k!pYeSeh&m`!QD0p?sJQo4 zagmaekTf^jzUd{5i!+@6PAT&9m(_V79wwEK#OBMM_@N!&yXJxvpS@6uevH64S zYBM#rl$y4(ZJ$*2PRH4~qOG|a_Bla5fXZWP{p9y4Lq(|X{a&8=(Dd!SX1iE)bo7)4 zL#bwEf!}?f$tLQZ)?F?jNUYP&?g9r=yKF9prk+G^esX&k5PP~+4+2=+BMq*9dP&ou zmiA@HMGO+7w#SD)Z8&jDxtw2u^AXE(8d|1D$klOXsUX47m6d($je-zaXO7=EL~=3^ zG3wYx_m-)3rJVBSfAZ7^{Eos318>S?yVE#cwJCG~4Qg7m8YTreJzRk*3VqOQrxb%RcyO?kE-TTEBx`Cm)NnRXV` zQXYp%!y|aPna9$TL1bMebpNv#cz-hO)IpW4zI^#)HB2a(|CzYbj_Ez6@L}+Asy8eq6^=T%=W!mPQtOdA!*9=|6W!-?*qi z5z{X}_?d?!{}Y{9j#8N0(Y$Df{*5qqf9Ix4{NlQrZp@UVoikeQ8BwqaM7ciN0pj>L z!k*hdYp-Uevc|JSmQhBSVSxDw?$|jOgH7KpQH{+^zrhF&H<*`Fd$t$ww7_c&90)dQ zjO*XtUZbuIJ(QulyL}@Z!x@}Mz0wz5k}EOhg5z^X7A}UfL*DS-W|r>ec+ukIbLQ8@ zhKV2C7HUh(kMjih_;JH#sBCDD0|Q|=_YQm+IKHFygv+vB!n7w&3j>3bJ5CGHYrG9q zBnnDA-9TMTuH*(w7qt{0wz{~M7*a~H(|Z*N&VN9K^aS&u{st{tKdp=%$zQE0K2$Z^3`BO-}l7=iak zsDFmAPuhydCPqCLcS8mIkt#hlVe8aD^h=HJF(#p)BcY%nIr`A>pv_@$efjy@pc-9vB1R|; zCOt%0;BNWxNh`gRgg89NlJn116+Fg)$S6PH_PO?TKi&m&KD?s)b8+vf8-8bSwdir>-)snDssu2rQbZ8$S2!!-u zyAB@^%LO1tz$T!;RR%b1qKf@|_m7_tF=vfP6Bt$RG_K_tK*fqq^~WT*EP%b619BIr zzE(~htiC3B3#JyS!i1ZlUP%V}>A=&|(oBt%u+Om}O?4*$RFMCRC`efcJLnD_uk%ae;xaBe(pUJDz4Lt02al*U1iAgr z{k9V9$@Nvr08BDWwL9YOJUMymwcaMHux;ctLa#R|Ia z;Q3r%D^6{Scx{BTj>|w?rW$cRvYcqM>xsfb3N`VEavF5-k=YkT)5#9g4(=34)YJ!CUcJM5KfP!rlb%U( zaHOU#IsNa8VsKxt8#4!o=2iA*QS2QNH=axT4C@c>;So=^1V%<tgJ=^j507mWj@TZCq|w{ZQ5g!% zWLJ*C<0|KN>MQJL;wr!&foiG|pxfnfIrMhoo+ab9=izbAyn==xieX-iGv&{F|6Xjx zzQoQiaL(Gl#qeoWMPpi7D7N{V888vWPQg$AC8>Cni2kVA_L@(X$CaZ`K{^DBdzeu; zsM3r?6iG8b_CS}Hm*YY=OMyj!DhX8JWp`g*R; zdT|Y5bx}ax7R{S9JhG0pmg@M$^z=qh$+8zxZ^g=2_T(k@Qo5ZybvJgL>EE9%i->9* za8d1$Jf66B)Lva*Gas%kH9K2lcI8S&7FAX%j?#{6AT(&8fn<%0j9_-Zk9m)V@+3u5 zMH7R>*S=Jz%0g|hCfLmnDSr^*e)@;Ir2)!P3OM;9X{3cfL|LWEXqSrAWyGoA@jmX; zpX=Mrn5jsP_D>vbmpHC&ZYo}00UO{HX9NT=0h zHyX$IcXEM|G(^!xhHnJ58H&U3sgo)ri883t-zn@* zGtXO3Ef&GsB{{>}lT7!iv6CnIn)33iUkbM|-dnUKHlY0TwLmNy867{-RO3V*@o{Em z=6Tk}#X7h+JkH7m;Rx@0Um`pvqJztb4^Q5xC3}bx0di^@@bNAB=Lk4j_fgIkae{kP ziqHJg2W0s80YYgf!j>4n51E85&sPQ*T;vhn6ZW4nYt9yFpp&?`_>$jSQh6Wj z2qK#3F6f`AaA-*EZ?X`2Se?I8l%A|MQ3)u*lmUC4Fla$qrhIIdR(`Xdi*tJ->!t;R zTAC0*?jep7%_E2bV}_<=hg}Hm{GpZyiKPM^_}=)6rkW*gZE%t4*j?#V=8M?Z-Q;y+ z#qRXj_-n)LVR3P9oE2Zsj_>i-t*cn;yRp`;p&`*-LSc_#--axT5DG`_BKtNP;$nw) zobHe88po8k(DI_jPDMutP%AHAPnK&P$Bwn7U4*U9k8~NY%0hF!LsaJ4bI+r1?(F?qh=}<9643)_N@@LWqjBSH6#Iw zHj?21-l_Ow;vJQKRx>U^7TZlSv5Pp2upDdq{geBNN3`%&&X^!YWUsI(14;lVFdLAl zxprnSD>|+Lo1v-dJDdFbq2o@$1xVuAC{3>e0~rC^?=%;E%?pTPFsb1r)4_zWzdwaa z85lD~{0v4_g4Rq71=zqI-r;urwTdFr9nTZuxd24tc*e@k*L557_2y)mNm1C+lUl3A zEEH}$%;p|H6~6<^{^pYc<{K3I5!78&QsN{Y{TsJPm6@9H2!LPm9WYu@Z{^csBVMQQwQ|Npt@&zUhdxsS3R|W0+C?N3i zN4b>hZ<5kK&2pXk=DfVkTra*=C4GSN)^f5@bNY8pqiGZJ-m#Dw;J!-?^1EF`$Q_VX zm0|r{rKW5elKM-BfKyC?URloZ=?XIMPE|SmY0gY#f7YYoT}DMuF6xX{@x_4q>wL-Q zWR_?eajpdSRKE*$`)Ck$7KRhU8vGbQ%HXPc&$jv7x78v<4YLZpi{rzpm>G%&Xh*=3 zd6_jZd$Qb-!G;*kTYw$5@mgR!Xz(2Y%cwKP1Nk!d^ z;yq*N?!~>nzh37CY+UEZ!PzB@7KtnPvHM?a(};jG-*Ea)C8l%|4rBP7p*;f=oEUNb z&1_SW?S4hI{c5ZD`x48fD^=LO2e{7!D)^ZUP5v6#vgFc+jW7bmJ4dTU%SN20+$8u3 zZe204b%j2^e7l=S#Hrd@=l%vPebYYkj-Xa04`pG}7@bi5VvG@-T@I*Qle9|;5~5Gt z6>~ru^7)z~aNM2ks*!i22N4VRZ|1i6>wu6&qB?+Te!0#^)SPv4#-mdV@eKB~FKNPo z>#fUnoIU7HLFdUnihU4sCx($WVy>E69=m?T!?0_DoC=U9l2uX<6OKe?D3#y1w1FPH zR~+#HuP2d5?NP9n*4iFBjCV}r`6#d$Mj*n?#trDvE~lP`ez>-JFlWKtCgoE9S-QJP z7(|`Dg$4?r^=L8hr+$(WYQ~5CWD0wJkoTYtk>pxA5;tCtYYFw3I^A3N&S{BMx`3tD zz6^PblXq4#f&5u^d{ZNi_a;yY$^7F`sUwo`4pF0nLCzLNIWN-AxQAjt3un3lZVkZ5 zU^J2NOX|xxBj*dJAwnaQbLM)MKFSgHTk*AeoKOC`-vblu(L#wStNvnfPpPCn{McS@ zYP{uJVobB9?od|w)eq2eDBQ-MU$1(5mO-fjWxp)#e)<~EX zP*Ud_SG6-mcpvWhHk`w)qkVYHy{?Z2zh!uX3^_e_Gu@f71ieLRh<<#i;NaCb@;*yA z0Ikz(d@-gh_cSxh|JUCu=(2|`bUkn45d~sPL&EDk`8j9jdzF+~XZNI=cvtZoEo`${ z`1-78O?u#cF@&MxS`2-c=A0e+JTW_4KsE+wzngADx_k=o!mw(Rb|KrYsthK(c{5pl zcl)Td{YIK%@8EzL0?uv)tvU^}@#>Lzd)i+0_DceZ61#duDdg=TEbMgho+f|^2aM}K zxQd-}O5}c9zwWcai~ucwhd(m(N9Q)-!4x66>-rmN0-~<7%QJrs)NhfSo6_FTKSaVo z*g;I$@0VUbk|ChmL6e)+C<4;GuHW)0o1BYO^FKCG_>dXV1g~pbXhLc3wtaLZfp|#G zc7Iy!%P)YB9<{_lkJO8&rQLrs1)AA7p-b|F1u#nmdp88@c`;MN<_KXDemUx<_bGp;`{D*J)f~=w*(^=V2gh0x}WLHQ@cjn4baoPjE5q z6N7R4y9Ixt<`l3fHbdZSTJ05)WL*uXy3=xklj0~&oDT9fGyN~E&Dqq2By=d;~7=Nlb2 zrSQl68AF(|@j7W^1jXc%S(Q+ACw8qU?FM5(U*Gb>%AoC}J#(rV143mzS5B*83h13j)KZ zy)c`8#E$9KV>1=Lb$kwUZr9lk!w*N8%PuWNqf8>TwHqu3)L}tK>pLDOc+Vf?{dvGu zJ`Zl+*8Gv9Zc3eDjV$Z_!}|;oW}X-?a)$SlS31DQ%R-S}^Ur=njfuscT-5NKb1aO4angSs2jo3PgW=()wU;j_7sDyWujaR3(Tl^|A z`m*37sk&Np@)VH5pNi+-w^W<)fX#W!?P`J9p?A32K!JhI*Iz}%e@Vbss<+a`u>&jWF^);B6HKrPFJIRh^?$HOcmmNjk2g+!-U zSRdLr5*$-?&SQa~)p6j8N=7HO+3ejcN$jcx>Mw1;-k8nO5+zb#PY7ImuRP#X^w9E+ zulmX(%J_X68$1I64NwWueS$D%oys>Pnf2+CGt^Qtj}YI^FyIC;#q#27r5|IPhxQCi zvJ^s5ELn{B%*%!?BvX(FhDRu|2<8i&gSUtE6w`Yd5Q8*Ws347_g7{wF=9KHXHp?+h z>b()ESF6$&d1zP#tBa_iksv~WEtlF(#L+X50w+$sk;}JovmK8B%;81mQF_w8{>d*a zgS|}jqdRRQ7PhJmD2E4}Bz!sOz3AjrsL%n68fHNDh!+8nZBM5uRGbN@N`$EvejggY z#r^fTSPPJ**Z+fYLEcTB9+_jF;?z|3B`bW;8{$P}%E-#0l= zYsewO4!M&}19g@NRe4Zf0@wsu0g#WKP)bC+WdsZ)bYy9CV~mhIYnpL2N`&vO8H0dr z|5?(a+BNHmZh>2#t4S4HeQLJ?yf~^6=}9_tF$+l)x|cZwAJk-IbnF78eGgS)hmt$c zKkL*XDk^j0FLkRVI=aI%v#jr!R91VJid;ANDhL9m;Y=}&Vyp*)t?U7@9KV9YbL>P~>FjtSm~e5}GH1dfbpM1)*PeBU3m+}pXBF<{`_i94If6g(1sAky z^+BJ_NMt(}E4D6nsDe zz1czF+^#KWFYU5284xcm9l`%neIBO;5NnTD2Lc#@*@X`}!2m1CpCj7uqZYIbhEn|5 z0~B>{Zmv9F_`mL!9+7u_l})m0=n$znUXKsJ{nbCjhU>eoPkcoTFTYSQ(B{;#UdC{2 zTZrCV9@f9l;s-L0Jcx_doE2NJzWG|~D_Orq>;VO97IgfB&BSpnAz^Nj{J@Sad1p9K*m}P5e2|v6DZMBh;(q+W{ zCRE{n8rUTV2!=JWuP!bM{JENTaQS&@g=oB^gt|6t`0SJh4+NJ1pl`A^WeC2!$0-gb z*4o5HbVVmt79HTIbNH;o%rKCT?JJ6n_`gexfSS)UJ`W`kTb)&RI6|tw+I%=^;R~aP zkDu@5`kPS{t}^%UU%3YQ_*cT$P2{S0%WH0iZq=%m-hRUYEtJ&OtzPmUa%GXanbPc| z*5|UTrwDh$O?YZ^@AIl-s=UuDSSBN^Z)#kw687AHQ(ZOvjkEU?Nm7kR;wP{CV@$dk zgQ%IT>{Ay&z`>N`^?W6kS1A7%+~NNu8pVX2 z<1V7-{O+r_su6lFH@|YII^0;DJCkJiXYA%WU^>Nbwl}Ixt+t(7TN|twvIw6Ya*=yz z9X@zG6!Tb6J@7yN5T9#FLz#OE=^iou(8#1wUaS=0aXG^2skK-Cmg<-oVl^O6oJfvk zz|hLysY|_n<5%~{!t;r` z9OIltm+dr*K_J+8r%DLkOd6kJs9ub;*2>0a{!V%9FXsKF$cyl90&Mc?{iWYYYxu#3 z3Nc5?y*=fFdH3&bZIgx9{UsmfaQ#&^r@w2TzV*B9FGF2>I@F1mvl-eOReidAxX!aO ziw$Kv?|8Yah!oB;9bsG`;!f+67@AIEQ@p;W97%f%xpli5PsoT3wWU^%{W@@BkWHo{y!J^7Rg?VApK+X@1?SG#M)> zP(so7L-+}LLrd=*6om@QRqKLkz?=ue=3Zh5dYiC%`{~`nbGd0vMEv}RT0~<5=Ltbr zFhu?#-M&dN8p|lshsE*?m$kAAz<{Q6uP56%;&fZY&tDkI-0Ab3xL9VfshQD?{s5_VSLZ?14xw zSTkKZ+(zOyI5>n6Aj)X;>fR9p(xO7KQHfqT45iN3pTQuI6cenyRy+?Dd@xqso*-;>Uns+%OSZgJL)HC zY)L9T>tAS`JzC(^sY$Wl4NpnFZvEU=Ih)ZJ%wr{xkr=e@jCd!=d1!x2qK)0C=`7Ot z8utg^BCb*DPZi(Z)=0tnbnMw4M}XK$dmhI&1siUYpl)Mvyhb^@=7ZtGeI#L9 z86BiHx(2XjhX!hRE?`lsxML=lu|eD_aTg9u_7Pl1{%=#@2gwB= z=gFloa4*{fn@$eGqE$m5+E5V*Mdt-LKehF!0 zbTNp*&Cq3|m5_7O?4?v2L%kh!-BBgKfhc113@n@>o#7nxN$z5s_XW+??+%?9SY{f2 zdAm%Gt=%aDTO7W*BroX z=6l{EV2)pu+`7apEv=O$|GJJc_jL zw}^}`YO6f~WvSGbKhp}pK}nK8z9B0Z_>}Q+QBiq09u?ovO`F>@LJzNqJ-1e09FHPm z{CO^#^k#YjO>Ig=7PBzAqQw|PeHvfYfld~oFx0AwL*8e1Ov#c_N}t?faK-6;Z-8=% zww`z|YwS#EnpM*&2qWvH5clmjtF0rz75PDaM6!;$``4Z?%oW8{_MTjG_9OB~OYX6@ zZltaqzA%FN+0r_Cdu_>;cOsIZ;&?5bWs@x*xu6z#xWBPf&2-5P(Xq-sAEZ#R&=U&h z72}LP%{V`f(k6!W6mAd2iO^#RN512-gT?B!>0x&3CnJIe6}kv}+bS z-ED6%GOr)j#0>`z^n!#uHW&?WMGt(PMVcS;r>`g%Z*Ngbbeex=JOkcWEI_H-3C^&y z38dDtObs z7*Jd5e*@pi9jFPtAxJY76l-hC#0y8Q0Y)LjnLHN+!g|;C2<z>piz-}<$Q{CT3Le)RIBqd9Ge zS$6-C%kGNyGcywk+?SZGLSNpP;J!k0P!ekuA3iTf1dm>suaRI1mvDbh#@bF_u5`{W_dJ4xnXPim>FwZVgR1LSmYJFN z)z)=W#kj~;3neytyLr(+%E2S%K-FT~6~3(<*aWX7wc5B2y-U=b2C$IL6QWhApk0bV#bR z%z6{Daeex&HX|CRTuB??*ZMp}B9g`rR4>n%=XY&&MJ)kh-d}%@krm8*)f`tpyuD9K zRO#;R9@`~g#86ry-a1v6rHuoAyZ9r=gN^o#Q9t2dOP@fl zHx?7x8u?3c1atZ=Ls>~qJ9`g0d+}w>bz@=u(N|5igvNQ9{AX0VxcDuXg}VY?os9}w zp(Pr+{Z9|t*1CrIlb~m(Sx&d-D7hrLKe#ScAC#c#Kv&DQC?j)DDjCjM%9EX*jdPR>mO~-CifQF!#=xZDR~x+X?r3pwE61j zsSYO(RayH8l(#kU3Y@kIgkxf%g1czF;Y0c(%wX{MQ+3Gkzk=4*Oq!p$GH2 zC6>w~8V%4FaBAy)r*u-4;oV?)u}#g%P^mP2=TK6)Z8DY$W8!lvrbn9r@4DO`-D+pO z_k}Ef;9zo30zQl@F8EoWLA9bK=erbAC?gqWdUIZOM&-O>;cqXCx}~nbehHw~YeY#H zm~+TB2^S5@3X=mflo>x5`dzvlq_G;d{Z#_o(wYFoD5y;U#8IUHZ?oRl(3n>0c@etu z4)Bv*xU042V$BTmC~)1+!iTsXvGp>XMK_#=D_qW7wBL}A%R!nIFD@L)pvh6(hOn4| zl_jsAa6ZJGWIlzumdQdem4!)^U_{4$7EJb{s@S0g#Fb!z>CQEd|J<}t>o!wR$4R*j z_};Pdffdy#V1Nh~>mCMI#8G~wB4}=|`PM-D;h=z6`?VDU`dHGdR<%mSw~)J#rA3p3 zG|rs2Xb`b>s+-H(qC$YhGrX}F%m$`5953b2T)uTCCK~Zq0r)lVB3KpRB>Jz+RaC5B z__o+pmT#TsWE~SV4;@@&l;XQxy{|UN(v#oT(eBvQ^KKkD_1{>2C*`$d7^Yo4(FPY3%v{K37I=`|?lKkykF!ZyduGy5U*-S9vFen2cGBN)!{ zazXOmvfd_ry?M5U8RNWKFNs2{D?6f0hZb_@Pag1CU)fP4m3>CUneK2nF*EW;Llm2U z*P13)1LP&3Xz_Kym>kMaHL{fl6~$&}EB*mX(4Nr14tj)o7ovy(^Y8#j_jYY2k!1=T z5O9dT2pF)pX`u?5Wh!Yd*hUSgf-4aKkN_|H_I~9^z%xAPD?b6W0hC5=%*Z1C$xo+( z+;s&Z0rSybGvR{Z|BwlE z>PPUqzdwWqhD)BPW!rO>c*U$9idt`3jSz7D>|uL5KwKTA}I83p_g!?EqR literal 9904 zcmaiabx>Sgu;)bvhJgUV2_7^^Ah-_<4hil~&;$(x3pNlmkl^kg?(QzZ-Ccsa1{-Ag z-rIfk_El}|A6L5ip3_oYefrn8LzER|UO-+!004L)Co8E607%cTNB|h^`JwNaZ}BhX zq$&dgN=L}|o(WV-@ekqvP!W!KZvuLzF&t!doB#m3>)#8h*FN7202rj?B*oR;43APV zBJ^bvciI|@?($owg0eM>oOSXd%?B&rB@CjG38R|EQ4bwPSZElm01sGBhv zT*`aJ*9^EU(9!vLgI-u@qG8$?_wvT!(CJjt4SqIQE~(1VG;-EDx*ol*ymM|kQ7GAe z8dYrZysbQ^cxYvB6JCjL-RKP`HcRr{AX|+X_1xw`Ert-oIJkQ$6Uxxe4B8<@J8Sbb_?)vL8x z7%=M!d~uFr6(2b0>t`T_i+EjZ40{Eo6&Q` zMNym4C|BBl@)ef8kf+GUUb++eXtC()vs7v2CjdZT}M@rU4lmg*X27s z!v51nZ^DoMd`3+@A6~kDxsLpA77=wPA8R0wwt3d)lS`}OUGdXk`bIsF-_$PJZR|Ar zhkZZ6G`fKyAqyK+lV^c*2Su)zOi|q$m632cMO$&ab|ogSz|}ra-tKpMdCMX}R@}_% z4%)9HgOfQq6W>cu>{Zi6%gr}9<=ub0KrGQ>M;a@4`ew{a`_W)D=|%LL)5l8nCD`gp zsBT!gh6p#B7xk;5#=o4wRd2x!`z!`~k75U9i&6?Pi)K=n%!2+p)V6Y^uu3~G(j?#g1HeIaTKJN}e?8{r*SiS z=H~t0Gq5LCquKD7X)JIiiW^-0-qidAJ?^Guz8U9y!JPLp_93CC0`x}2`D6P$gT`)j zaFJ+v%C|MCPbXjgycBUJFbDCJ(&W|=e1Ve57L+rp&#CFKp@evt(ggqkQ+PMDH!@y8Fy8+LZSUa{Aa5v{GFdnYICcA2QZD1;bB zmpt?I`FA%jtl7xaK7|%mOI7>~q$9#ebbA{g@2^=_U^ZeC&FqX3+paFi*mCq*X{lMm z<*DNhV+KrD<&A1-=Ic^Fy^^RfU7=iEu@dk@1;L%##45|gD&xfBkqu71Ve@%E@s@yA zB%GOte1Kd1b@#n0PS{Rse^kw`5Kv>g>2v|3Je~x%lpRZ1!%t1T9LRu=3|$$naVGscyXQ2FO3!YJOjOe zLlkOElIEC6O#uEML_8I~3gGz#)I?WUd&|HwGLtMO#joYt7o-W^2 zy(jjk!2D+1fz7&Y5Y9U)F~#au=WH+=-VUsesmtqb);vS^Sia9+&fu5xr$u zL2nX6*3Z2|A8-SKkM9!9)}c{kxmy+;06YdiU!qR$fnTWq(TKQtp>SihcVo?hlqLOsYNKa4s>!LEjPcd3Rja7z~W9`6)H z|4&ENagINVx5%-qh`$dSEAWkx!3_H}%k~7+8NRTJ+YN0jd%9cF=*CNI)&(C&)xRw# zaSSMasr{7_o85_7_^ca$P8kE2Gcajg zdrKkowQn;i1NR&IYJg)L>?i!W{Y;ilHTd_(fXYhF51oCm6nS`rPB-`2IL1x5QG<;4 zX?ysI3_BFHi7__*N3h;Sk?=uj!2_*t1hZe5zu&J23C=9vU=^Y^?=L5LPdo8#46BXT zi~Q>3Xx;kXjULbATSrC|O({~KJ}W~s+SOK(U!9#3-BD*gx6fFMi(y<|UiR%kpWF`} zts)~xyJh)N-zEdT~3cx3k{$l^IN(XfiLH~QPbw;zRcdBHezfmXMyddx0 zt9P5&@aFf1q%zS-oroQ_E+R*&sCiDS>IX||JX2nGJx|XrOi5RR;7!}qiIs9}L?s?uNZA>!+w4CC)9h?sy>(Rq8p!{e! zFbxe2$Fo0DSsdPHEk+$=xcA5|Nn!pG?x7_)$?6zit<>5*$+>kCs87-PlTMYs!N%w^ zr^Wl|%8|Jk4Sj3goaLu&xOlR1zeLY2mpoB z)l8LoSvYD}uI{b0iOq}~4TF9E&7};X6+mNClZr6_v~ytKL~}&WC4Bwgzo3<>#SsI!>Kgi@Ao(C|+?OLucX@vnRx=EKx8E)bz;Xj4>FgOZ zj^EF-l-JPpAbY*Ye;7wiIKEZBFeReRL&oRi35(IGG5}RtH7WgODUUM|JXV>p65CxD zAX(f?!!ZobY~KBm5>bGJ#Jc2lz1)Kmp0xexa!3d{>?d&>&JX0yP+sBB28UU^Wkp3? z2;3ftAng9Ea8cbcVMW4Y@j;)jO1%noZKwC4mF|PdVYhbwCWf#BQ>qWBQ-@g}nEm?g zTX4G?zz@$s$3wl>!*WXDy0rfNR6M^T06+%QirEXHQuP{tlhCF)<=9Hamh9!3+X#nZ zvx_TSGUg58h=?H_+WDNh+?=8)GdSD^oS*8!D>)>Cbt!hLcF;B7%(0D>CCQ~d9-R~b z;6&sZ)O7r^c4c7I`?6zE#S~@Hoo{K2Um8L^*M-1$c%e*0a&^)8I_ULn2MRP7nc6Ih zU~$c<+rOrdAn^e4Kg%;S%8x}%S5Lid~=B%9)b_PR1HKjM*(RaA^41^lMR|?{zHNi1ntj2U^6p_ za>2w!8Yz9d3q^~AHHu=L>weVxs_LW`vL>{8i_PoA%)jnX@6h#vukUQ5*XjBEZkwgE zCxj-pVn5yeJ+Svf=65+Hxheo;`%PMZ2ZV$hQ&@AqCDLi=w1jzmC$sXjSqe=3*mI@WhXH z-|m6ldxN8qr9Q^?>!V-->0l2K-=?9~6IdGK7mZsP@8-DmRT{<{sX(`*3JW2B0bB>{ z`2hD!R9rEi8J+mi&|w@0o13#UWnVAHYKPxRW6^fC7)Y5l5OC*_6Z>!Il576J69l!TO5pw+BNu!CBKHO}2(xC8-RY==ZACK#+#NP9IUpO0{+P z)~BH&JhhSf`l=lzD@CRwwZYqBw)ROVloO5VLxO^E2t0=KIrAG2c@QG8>}u8{qNR|y z{Fh!gA|QB9wnqipK-~BUmx?s!{D;U_#Ti8oWO%hcqYoi1e++s2Gd2N2;Ej186Hqo5 z=;^)ZI=hBmk)gzflJ}j12wP#MM1w1e4^~(2GN#(DE!3$_awHtxVOvT-PwX0dI(4q{ z0q%=G$$&INK1TGjBki-w(tP6$3^G=m}?w6=Gh(BodRe2nYgM>Tv zhkpz+t>)wx*&w~M%)qv>bRL)?5eCk?icISFCv6PtZmi@XHbs*FBFHQISG&uvfAh?Ey@fmCv>9d{}-ce^*QEHEw%n7Z5tzXB! z!}rY<#NwZEXF!QT|7>qu3JaBbK{YlQ*5DWZOVs%CdyzHgx5bgptZ(`k)}*>qLrkw> z+q4pNSg@Vn;Os|xp*t*QoLy>Gmx;aHx0Ku$pyFwcSVgfRPD%SVzG7_^(^|VYIhAH& z*YB?=&)`k=V+zt2?Uy+9b!rBs@<3K*5{^_x%KB(PgsMp}a=S2~?#8j@yN9W4a-t|$ z(@^ljKnGmV687qqtxLl3%et$ckCbW^fXm5&&uH7@_7u7_=5yTn9(+Ymd(KSNc_DeN zlw#;tq80OeCisrV{jzg+bgFsbF%KjrpY+n!CSgq(nPldBL>C^MdM*j~6A8n2N3oWy`Yc3Elbv3iB>Ca%j`{Is^Psyt83h5?h0QXvGynpTq9S9qZ$ zvh+in=`^scPM+zrCmq-aVn#ogmYVG#B|v`9+X&|QZBMiY&+~Kl&G+1mE}f%<2vyKu zll4c$37^m@8bNqdm2nRs@{mt@w9_RbB2wvg_UDgZrpzz$cYE=Dw8|z2GbPCOVwuWJ zd4Zv6s|~2#&s9p&8^dUdgE}vwdPYxz052wJF?4Qxd^`)G!GQ7~8CUFvrhVqC40|gf zq$!xupYjv`_FoeJ^{&XCA@)e*{4p0q!S?pHqsK#pt98FNCJ1Ja;BkQNHlr$ogBR~p zQ&YWk6|BJrE#fk0(u)hF2s~Gr^ZnR9sm)9iKkCy1Y~1 zQ$YfCJnRPJf1XGG)jiMw!uU0=Z4az5MIMf2F69&dUS(pnTh`&R;|x$;r>BppuO_|? z$K_NY7+KM?^7*q7aBXMD+T69nvXr}y{i5#X-XgRbM}OJuoVpBArE(T`EwSt+*Ohfl zgzzac;oN!&v-rg~RiEBwuCTtjZny_dji2+iD~R;F{46LM(#2Z@l`Afa%SqJLX)aVf zMhvI-7T2_Fl`Q%gu9SW{;5PpKuyuTOaA3`-Px=3};eRr6hR9Ovo9|QGn8}6a*jE=G z8RZTIXt$EkEUAgPSyH~IOt>9>cyV5L(qtG{#ui@$y~}z>;pR4oI9SdL;ztq4SjTy# zXk(Y+;O_tI=o7op;#F;H)U(}r?~wd4JteUjF5C$REcXak;pQ#zIhxBEeB79hl2;6B zlr(1BBo(zeYRdoFpphq}YQD15onJe~uB6RvqGZ{n+*e=Pl5WLCZEH_sGr_#Gor zz!S%7Kdw__b~+Ke-paZtnRVjqkN0i2&+V*=402&D_rOytf>)=}S)`IIN+x{Z(QC(i z_QJrzr`S=3>?OaK^JK!7_hE8d=5rAe$N^cSrP8B)Itm@Fm&1Ws8TvBS=vp0L!`Xl@XNVNW)zjZ2*>7rBRwJ2~I>>;lP38RyuG%0NcaF zPQ4kMSOst*X&CaU%fts_dz~tcw=`xJ86dGf9?SwQ3)m<6Jv8!ujm^4tfZl%ys~WI~^to-iCg_3K@xtDc z9-<_Gis7qgv97ip)Jb$cYOyDn8cMA_ zrbGzj?BZ_DhNp3qHn9C`v)}5{U5B{@xnG#(vE&T6+-)#*6kELb6a{>HoN6F-ZPn#F zST(%3Z}t%Qs_N-Cy9kSsk0WtvYJ|XVZNQ-pgtX|mIL+YZb*p4%3m}AId@ET^V}&Al zkfm8%MZYI`39qB`2MYHo^yPG3M@|=Eb}ic@)gLdUQ+oQ!IIc8^E}f#y8USseEQ;?6 z9PBGRDDB!?k2im3cg)#B7N{(sbB}G0OiCv-+gV2CO2+N+Ax%XoPczA z0}TZ7y4u=ITRe|Nw7#g~CUWHixgoCSIMTpaGIXLbFw3|3=7VK2*H?LZv28qTfe$G5 z!}bBIkaM$&ww671-JwltY>cRe_GaVp?Ic)pPolMv3I&gzf|2XQPk~E)S@8L{3mTk> zpenNfuHk9U=3?W_5gQh3G{%QZLlT0FP)jt+ehnUebN376&FgKHzJp=npYd{)mKoZ- z=i%yU*Gp@EtQ8ynmaq)XOt@z1;SmR=Ib{nQ+B|AcuW=RR7w|4RNa;^_i7DDv;DLGL&{=t*>%K*{gS^cgEw5nkSHYiNUSg~!IhtvoqyuCkPQEml8efhZ+%$z zGuknkmC2!_Te;WE789Phk9EzfFS}=IhAWQ)e@6{&)2H*voiDHi(ThYx*DmLo_ZRBo z8#!$`hQtKWttd0>C|=4Hva_KZx)?4^%CO6uTF0XLi8dU^{ZwtrhT)-*?g>n?w-~(H zYjn_z^3oBgcuKj^D~q>zP5U#HEC&XvG{le^pQSYj63nTs>5o~S zYSw0cWlgWEmboRwg}->!!XVnFv|uF46spO}^Qma1+VG$0t*AXE`SXu$azf*Q*n;UP zOHSJRns3L0UPk`3Ut}&w^A1suQ4oye-XiyT2;Srp*qi&?D4OCbTmLyyzv6F6ltNy0 z@!KYaTfde^Kz5%cAg~ zY7Iuy3YIkQ40J&7UUdQMnS z=zPccDmlqqWrN|(Zp~#1lp*nboBr-`G>k@Th`7iqDrZnrLF2Du%WC=Mb=uScWMI6@ zqx#TJz~{=jK&M(2a$C$@S3G^OFBCm#JxF)?up4)Uk4{fe5_MsT-Oqz0Q$AZ~NdK2` zIBM*|`72eFcE0{y)8s^|Fs)3}m7KznAjVzS#6R+dHFjC*g~(Pybz0{EeksD!Z}#-% z4MqMIbI%qNwvDn|$J@swRZ7cQs^N`UYO2jpj~*jRwiO1dY;jaE+(;CVQ2oy43}%|bftJw`*uM09#ph+>8Qscx$8j3Z}gJ&p~=C}Li=QDb>1Aol_;+^+ix`{iY z=vpvPla=bwuUBS}L)~;|Y;@nA+zlS&G}g+$C7;xVQp5}l)E{dN{>l9vrJ4!-vRhrP ze?c_=by?$XLPKG&XWG$1E1BSKQdLETW>8m;js!ztrz5NKV_p(==@J)oODrvZa4nOnH7e6QRh&mIyC?=YZmn+>D_2`O`w-x@% zOFAna{~^WL4Q(xUj#WXm#6F7MI^Z4H*C^sPhz)_V&zHKK(Ie;%S^EBI6x3<-Y)EnQ zYD2BLCwn?CyA-sKDRj%Zi59`bM9*n%*58jWi6GRn;b!-o9oaFz9X^S3wqIb4o#y#w z$Huo7ZAE8x&ckLXeOKD^oDW-dVm?>@(U-7;$QV=#|YZWHw z2Z@v^!8(e$xu+E9bXgdMt_ByJ?c-SZ+N54-7-I@($nIU>O*lzs(dfAUCTa;RPqA5L zJg_Td#tN@{YWh}SJsw})s?w;)Z{c8W zpkCAFBRkxBzK<57iJDW`tZAL?hbrOiRgju=(;bOj@)F``b}gXOkh7Bgd(c|F>*g;X zO*DJ@;GlKW*!=r1{2QpYDp`b z37s`}QHbd%uvT|$b=WhVT9T)LMo9Xfu&yUoYjT8$G+PfT?U)t^Z+H zS@zelmmFscG2Qi(Va(VtpS&0$8Y?`)@H_M$9~=>OR$qLCYx3%!r9l{<)i>GC)&tcp zls26)8r*#qw7TC5=^f7QRSFENKr)wI^&VwfyBrR}~9~L@~sUi|eGe zs@l!&EnDsg4A#D#Bb3wH`Ie)*@jIlzx(8d)wc$|D6;p!8%*%&8=qr=5`bXbCPV?Wo zetw6DJq=j|Mc`#*?EmOmr0h`#a32rKR$sS>cts83Jg^d@-Y%lEuoAbh>Yx)EkHb7rY{wG{gySKwve)}6)&R}(~DSKg1&?A+3o?Au~wx88-{ z=ZNnkbR<2bZ7CaVC%d_X9O7Zf^-c;!&5rlQa`lxtXcZ=7h6_?FhQwBPSJXPij)zLh`Kjz0Z>7!&;Hf~PNS*Vi&+ z$GAD{91wW_3%w#}Zlv`BdJtPei0MxOz^V%aI*J#)1^nhc63h)x%q!>725Pd z1U2eEzo5zSrSiLfh5^>!GTveFM>#C6Os|U+`$r6talPzg_HD7XlrEk(p%4?G9@#ZibDTP%Aemp=jg0j=E|Ukv=_1;eG(>ZzfRH-_y0H3guLc2n<(M}tY6?rLsawlR9<`Sf9y zXU=MsAWZ$(%KgZBWO~Ve-dpt9p$8txkgK~M4sNKG&(b+jf1(rKA)bEo>=C8fjq3||4Nu7%m9ptHQM9B_3>Pnddm6tL?LOs Date: Wed, 9 Oct 2024 18:38:00 +0200 Subject: [PATCH 20/46] Te hee --- .../com/simibubi/create/compat/trainmap/TrainMapManager.java | 2 +- .../simibubi/create/content/trains/track/BezierConnection.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java index 04ddf727a..f9afac323 100644 --- a/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java +++ b/src/main/java/com/simibubi/create/compat/trainmap/TrainMapManager.java @@ -636,7 +636,7 @@ public class TrainMapManager { if (phase == PHASE_STRAIGHTS) continue; - BlockPos origin = turn.tePositions.getFirst(); + BlockPos origin = turn.bePositions.getFirst(); Map, Double> rasterise = turn.rasterise(); for (boolean antialias : Iterate.falseAndTrue) { diff --git a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java index 57fa0f8a1..5f1885107 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java +++ b/src/main/java/com/simibubi/create/content/trains/track/BezierConnection.java @@ -680,7 +680,7 @@ public class BezierConnection implements Iterable { public Map, Double> rasterise() { Map, Double> yLevels = new HashMap<>(); - BlockPos tePosition = tePositions.getFirst(); + BlockPos tePosition = bePositions.getFirst(); Vec3 end1 = starts.getFirst() .subtract(Vec3.atLowerCornerOf(tePosition)) .add(0, 3 / 16f, 0); From cdc41b18ccfaaedaa66b483eb189f42a3e2d1267 Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Fri, 20 Sep 2024 19:35:16 -0700 Subject: [PATCH 21/46] Rolling over a bump - Bump flywheel version - Make all visuals use instancerProvider() method - Fix ModelCache usage - Use PosedInstance in BogeyRenderer --- gradle.properties | 2 +- .../contraptions/bearing/BearingVisual.java | 2 +- .../contraptions/chassis/StickerVisual.java | 2 +- .../gantry/GantryCarriageVisual.java | 2 +- .../contraptions/pulley/HosePulleyVisual.java | 10 +++++----- .../contraptions/pulley/RopePulleyVisual.java | 10 +++++----- .../contraptions/render/ContraptionVisual.java | 2 ++ .../equipment/toolbox/ToolBoxVisual.java | 4 ++-- .../fluids/pipes/valve/FluidValveVisual.java | 2 +- .../kinetics/base/SingleRotatingVisual.java | 2 +- .../content/kinetics/belt/BeltVisual.java | 4 ++-- .../kinetics/crank/HandCrankVisual.java | 4 ++-- .../kinetics/deployer/DeployerVisual.java | 6 +++--- .../create/content/kinetics/fan/FanVisual.java | 4 ++-- .../kinetics/flywheel/FlywheelVisual.java | 4 ++-- .../content/kinetics/gauge/GaugeVisual.java | 6 +++--- .../kinetics/gearbox/GearboxVisual.java | 2 +- .../kinetics/mechanicalArm/ArmVisual.java | 14 +++++++------- .../content/kinetics/mixer/MixerVisual.java | 4 ++-- .../content/kinetics/press/PressVisual.java | 2 +- .../BracketedKineticBlockEntityVisual.java | 2 +- .../simpleRelays/encased/EncasedCogVisual.java | 4 ++-- .../steamEngine/SteamEngineVisual.java | 6 +++--- .../transmission/SplitShaftVisual.java | 2 +- .../kinetics/waterwheel/WaterWheelVisual.java | 6 +++--- .../content/logistics/depot/EjectorVisual.java | 2 +- .../content/logistics/funnel/FunnelVisual.java | 2 +- .../logistics/tunnel/BeltTunnelVisual.java | 2 +- .../processing/burner/BlazeBurnerVisual.java | 14 +++++++------- .../analogLever/AnalogLeverVisual.java | 4 ++-- .../redstone/diodes/BrassDiodeVisual.java | 2 +- .../cannon/SchematicannonVisual.java | 4 ++-- .../content/trains/bogey/BogeyRenderer.java | 14 +++++++------- .../content/trains/track/TrackVisual.java | 18 +++++++++--------- .../foundation/render/VirtualRenderHelper.java | 4 ++-- 35 files changed, 88 insertions(+), 86 deletions(-) diff --git a/gradle.properties b/gradle.properties index a326ebea1..807df18dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-113 +flywheel_version = 1.0.0-beta-134 jei_minecraft_version = 1.20.1 jei_version = 15.10.0.39 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java index 67edcfe3d..e244c49cf 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/bearing/BearingVisual.java @@ -38,7 +38,7 @@ public class BearingVisual e PartialModel top = blockEntity.isWoodenTop() ? AllPartialModels.BEARING_TOP_WOODEN : AllPartialModels.BEARING_TOP; - topInstance = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(top)) + topInstance = instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(top)) .createInstance(); topInstance.position(getVisualPosition()) diff --git a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java index d44a3e95d..e9c84956c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/chassis/StickerVisual.java @@ -29,7 +29,7 @@ public class StickerVisual extends AbstractBlockEntityVisual public StickerVisual(VisualizationContext context, StickerBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); - head = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD)).createInstance(); + head = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.STICKER_HEAD)).createInstance(); fakeWorld = blockEntity.getLevel() != Minecraft.getInstance().level; facing = blockState.getValue(StickerBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java index 4f1821990..7174a79a4 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/gantry/GantryCarriageVisual.java @@ -34,7 +34,7 @@ public class GantryCarriageVisual extends ShaftVisual public GantryCarriageVisual(VisualizationContext context, GantryCarriageBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); - gantryCogs = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GANTRY_COGS)) + gantryCogs = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GANTRY_COGS)) .createInstance(); facing = blockState.getValue(GantryCarriageBlock.FACING); diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index 7857e22db..d530c063f 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -16,27 +16,27 @@ public class HosePulleyVisual extends AbstractPulleyVisual getRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE)); } @Override protected Instancer getMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET)); } @Override protected Instancer getHalfMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); } @Override protected Instancer getCoilModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_COIL, rotatingAbout)); } @Override protected Instancer getHalfRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index 6b13def27..ce9d0da49 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -18,27 +18,27 @@ public class RopePulleyVisual extends AbstractPulleyVisual { @Override protected Instancer getRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); + return instancerProvider().instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); } @Override protected Instancer getMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); + return instancerProvider().instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); } @Override protected Instancer getHalfMagnetModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); } @Override protected Instancer getCoilModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_COIL, rotatingAbout)); } @Override protected Instancer getHalfRopeModel() { - return instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); + return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java index 6b3a038c9..b0d03ed6a 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/render/ContraptionVisual.java @@ -93,6 +93,8 @@ public class ContraptionVisual extends Abst .instancer(InstanceTypes.TRANSFORMED, model) .createInstance(); + structure.setChanged(); + for (BlockEntity be : contraption.getRenderedBEs()) { setupVisualizer(be, partialTick); } diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java index c3d355740..f7bcd204f 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolBoxVisual.java @@ -28,10 +28,10 @@ public class ToolBoxVisual extends AbstractBlockEntityVisual facing = blockState.getValue(ToolboxBlock.FACING) .getOpposite(); - Instancer drawerModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER)); + Instancer drawerModel = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_DRAWER)); drawers = new TransformedInstance[]{drawerModel.createInstance(), drawerModel.createInstance()}; - lid = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor()))) + lid = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.TOOLBOX_LIDS.get(blockEntity.getColor()))) .createInstance(); } diff --git a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java index 120136561..538b7de3c 100644 --- a/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java +++ b/src/main/java/com/simibubi/create/content/fluids/pipes/valve/FluidValveVisual.java @@ -41,7 +41,7 @@ public class FluidValveVisual extends ShaftVisual impleme pointerRotationOffset = twist ? 90 : 0; settled = false; - pointer = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER)).createInstance(); + pointer = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.FLUID_VALVE_POINTER)).createInstance(); transformPointer(partialTick); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java index ba5ec60ec..84cc91d04 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/SingleRotatingVisual.java @@ -15,7 +15,7 @@ public class SingleRotatingVisual extends KineticB public SingleRotatingVisual(VisualizationContext context, T blockEntity, float partialTick) { super(context, blockEntity, partialTick); - rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, model()) + rotatingModel = instancerProvider().instancer(AllInstanceTypes.ROTATING, model()) .createInstance(); setup(rotatingModel); } diff --git a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java index 625c79092..0a95b470e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/belt/BeltVisual.java @@ -65,7 +65,7 @@ public class BeltVisual extends KineticBlockEntityVisual { PartialModel beltPartial = BeltRenderer.getBeltPartial(diagonal, start, end, bottom); SpriteShiftEntry spriteShift = BeltRenderer.getSpriteShiftEntry(color, diagonal, bottom); - Instancer beltModel = instancerProvider.instancer(AllInstanceTypes.BELT, Models.partial(beltPartial)); + Instancer beltModel = instancerProvider().instancer(AllInstanceTypes.BELT, Models.partial(beltPartial)); keys.add(setup(beltModel.createInstance(), bottom, spriteShift)); @@ -138,7 +138,7 @@ public class BeltVisual extends KineticBlockEntityVisual { msr.uncenter(); }); - return instancerProvider.instancer(AllInstanceTypes.ROTATING, model); + return instancerProvider().instancer(AllInstanceTypes.ROTATING, model); } private Direction getOrientation() { diff --git a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java index 1eebee84b..45f4ae30c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/crank/HandCrankVisual.java @@ -27,13 +27,13 @@ public class HandCrankVisual extends KineticBlockEntityVisual implements xRot = facing == Direction.UP ? 270 : facing == Direction.DOWN ? 90 : 0; zRot = rotatePole ? 90 : 0; - pole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.DEPLOYER_POLE)).createInstance(); + pole = instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.DEPLOYER_POLE)).createInstance(); currentHand = this.blockEntity.getHandPose(); - hand = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)).createInstance(); + hand = instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)).createInstance(); progress = getProgress(partialTick); updateRotation(pole, hand, yRot, xRot, zRot); @@ -69,7 +69,7 @@ public class DeployerVisual extends ShaftVisual implements if (currentHand != handPose) { currentHand = handPose; - instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)) + instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(currentHand)) .stealInstance(hand); } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java index 2a1a030f7..57aa69a52 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/fan/FanVisual.java @@ -29,8 +29,8 @@ public class FanVisual extends KineticBlockEntityVisual { direction = blockState.getValue(FACING); opposite = direction.getOpposite(); - shaft = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite)).createInstance(); - fan = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite)) + shaft = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, opposite)).createInstance(); + fan = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.ENCASED_FAN_INNER, opposite)) .createInstance(); setup(shaft); diff --git a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java index 930f952d1..4512c0908 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/flywheel/FlywheelVisual.java @@ -27,9 +27,9 @@ public class FlywheelVisual extends KineticBlockEntityVisual implemen GaugeBlock gaugeBlock = (GaugeBlock) blockState.getBlock(); - Instancer dialModel = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); + Instancer dialModel = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_DIAL)); Instancer headModel = getHeadModel(); var msr = TransformStack.of(ms); @@ -157,7 +157,7 @@ public abstract class GaugeVisual extends ShaftVisual implemen @Override protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED)); + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_SPEED)); } } @@ -168,7 +168,7 @@ public abstract class GaugeVisual extends ShaftVisual implemen @Override protected Instancer getHeadModel() { - return instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS)); + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GAUGE_HEAD_STRESS)); } } } diff --git a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java index eaf39e215..e03c70e01 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/gearbox/GearboxVisual.java @@ -41,7 +41,7 @@ public class GearboxVisual extends KineticBlockEntityVisual if (boxAxis == axis) continue; - RotatingInstance key = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, direction)) + RotatingInstance key = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.SHAFT_HALF, direction)) .createInstance(); key.setRotationAxis(axis) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java index 47e1e40e1..91cb6cb81 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/ArmVisual.java @@ -49,18 +49,18 @@ public class ArmVisual extends SingleRotatingVisual implements S public ArmVisual(VisualizationContext context, ArmBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); - base = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE)) + base = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_BASE)) .createInstance(); - lowerBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_LOWER_BODY)) + lowerBody = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_LOWER_BODY)) .createInstance(); - upperBody = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_UPPER_BODY)) + upperBody = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_UPPER_BODY)) .createInstance(); - claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) + claw = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) .createInstance(); - TransformedInstance clawGrip1 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_UPPER)) + TransformedInstance clawGrip1 = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_UPPER)) .createInstance(); - TransformedInstance clawGrip2 = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_LOWER)) + TransformedInstance clawGrip2 = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ARM_CLAW_GRIP_LOWER)) .createInstance(); clawGrips = Lists.newArrayList(clawGrip1, clawGrip2); @@ -175,7 +175,7 @@ public class ArmVisual extends SingleRotatingVisual implements S super.update(pt); models.remove(claw); claw.delete(); - claw = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) + claw = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(blockEntity.goggles ? AllPartialModels.ARM_CLAW_BASE_GOGGLES : AllPartialModels.ARM_CLAW_BASE)) .createInstance(); models.add(claw); updateLight(pt); diff --git a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java index 74aeb1c4e..f229d9d87 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mixer/MixerVisual.java @@ -27,12 +27,12 @@ public class MixerVisual extends EncasedCogVisual implements SimpleDynamicVisual super(context, blockEntity, false, partialTick); this.mixer = blockEntity; - mixerHead = instancerProvider.instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD)) + mixerHead = instancerProvider().instancer(AllInstanceTypes.ROTATING, Models.partial(AllPartialModels.MECHANICAL_MIXER_HEAD)) .createInstance(); mixerHead.setRotationAxis(Direction.Axis.Y); - mixerPole = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE)) + mixerPole = instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_MIXER_POLE)) .createInstance(); animate(partialTick); diff --git a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java index e73394343..2a5faecc8 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/press/PressVisual.java @@ -24,7 +24,7 @@ public class PressVisual extends ShaftVisual impleme public PressVisual(VisualizationContext context, MechanicalPressBlockEntity blockEntity, float partialTick) { super(context, blockEntity, partialTick); - pressHead = instancerProvider.instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD)) + pressHead = instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.MECHANICAL_PRESS_HEAD)) .createInstance(); Quaternionf q = Axis.YP diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java index 35af391de..0b6b5b7fa 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/BracketedKineticBlockEntityVisual.java @@ -39,7 +39,7 @@ public class BracketedKineticBlockEntityVisual extends SingleRotatingVisual half = instancerProvider.instancer(AllInstanceTypes.ROTATING, model); + Instancer half = instancerProvider().instancer(AllInstanceTypes.ROTATING, model); additionalShaft = setup(half.createInstance(), speed); additionalShaft.setRotationOffset(offset) diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java index 4f571885d..2fabcafcb 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/encased/EncasedCogVisual.java @@ -49,7 +49,7 @@ public class EncasedCogVisual extends KineticBlockEntityVisual extends KineticBlockEntityVisual { - private static final ModelCache MODEL_CACHE = new ModelCache<>(WaterWheelVisual::createModel); + private static final ResourceReloadCache MODEL_CACHE = new ResourceReloadCache<>(WaterWheelVisual::createModel); protected final boolean large; protected BlockState lastMaterial; @@ -42,7 +42,7 @@ public class WaterWheelVisual extends KineticBl private void setupInstance() { lastMaterial = blockEntity.material; - rotatingModel = instancerProvider.instancer(AllInstanceTypes.ROTATING, MODEL_CACHE.get(new WaterWheelModelKey(large, blockState, blockEntity.material))) + rotatingModel = instancerProvider().instancer(AllInstanceTypes.ROTATING, MODEL_CACHE.get(new WaterWheelModelKey(large, blockState, blockEntity.material))) .createInstance(); setup(rotatingModel); } diff --git a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java index c1df29c35..c1bcae3c2 100644 --- a/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/depot/EjectorVisual.java @@ -22,7 +22,7 @@ public class EjectorVisual extends ShaftVisual implements Si public EjectorVisual(VisualizationContext dispatcher, EjectorBlockEntity blockEntity, float partialTick) { super(dispatcher, blockEntity, partialTick); - plate = instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP)).createInstance(); + plate = instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.EJECTOR_TOP)).createInstance(); pivotPlate(getLidProgress(partialTick)); } diff --git a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java index 527d2d48b..3dd2bb7f8 100644 --- a/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/funnel/FunnelVisual.java @@ -34,7 +34,7 @@ public class FunnelVisual extends AbstractBlockEntityVisual i PartialModel flapPartial = (blockState.getBlock() instanceof FunnelBlock ? AllPartialModels.FUNNEL_FLAP : AllPartialModels.BELT_FUNNEL_FLAP); - Instancer model = instancerProvider.instancer(AllInstanceTypes.FLAP, Models.partial(flapPartial)); + Instancer model = instancerProvider().instancer(AllInstanceTypes.FLAP, Models.partial(flapPartial)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java index 288dbf54d..f4171b9c9 100644 --- a/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java +++ b/src/main/java/com/simibubi/create/content/logistics/tunnel/BeltTunnelVisual.java @@ -34,7 +34,7 @@ public class BeltTunnelVisual extends AbstractBlockEntityVisual model = instancerProvider.instancer(AllInstanceTypes.FLAP, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); + Instancer model = instancerProvider().instancer(AllInstanceTypes.FLAP, Models.partial(AllPartialModels.BELT_TUNNEL_FLAP)); int blockLight = level.getBrightness(LightLayer.BLOCK, pos); int skyLight = level.getBrightness(LightLayer.SKY, pos); diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java index 32f6971b9..1bb3688a6 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java @@ -55,7 +55,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual instancer.createInstance()) .map(BogeyModelData::new) @@ -212,7 +212,7 @@ public abstract class BogeyRenderer { */ public void createModelInstance(VisualizationContext context, BlockState state, int count) { var instancer = context.instancerProvider() - .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(state)); + .instancer(InstanceTypes.POSED, VirtualRenderHelper.blockModel(state)); BogeyModelData[] modelData = IntStream.range(0, count) .mapToObj(i -> instancer.createInstance()) .map(BogeyModelData::new) @@ -340,27 +340,27 @@ public abstract class BogeyRenderer { } public BogeyModelData setTransform(PoseStack ms) { - if (this.transform instanceof TransformedInstance model) + if (this.transform instanceof PosedInstance model) model.setTransform(ms) .setChanged(); return this; } public BogeyModelData setEmptyTransform() { - if (this.transform instanceof TransformedInstance model) + if (this.transform instanceof PosedInstance model) model.setZeroTransform() .setChanged(); return this; } public BogeyModelData delete() { - if (this.transform instanceof TransformedInstance model) + if (this.transform instanceof PosedInstance model) model.delete(); return this; } public BogeyModelData updateLight(int blockLight, int skyLight) { - if (this.transform instanceof TransformedInstance model) + if (this.transform instanceof PosedInstance model) model.light(blockLight, skyLight) .setChanged(); return this; diff --git a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java index 5a1edb944..78c990a96 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/track/TrackVisual.java @@ -138,11 +138,11 @@ public class TrackVisual extends AbstractBlockEntityVisual { TrackMaterial.TrackModelHolder modelHolder = bc.getMaterial().getModelHolder(); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie())) + instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.tie())) .createInstances(ties); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.leftSegment())) + instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.leftSegment())) .createInstances(left); - instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.rightSegment())) + instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(modelHolder.rightSegment())) .createInstances(right); SegmentAngles[] segments = bc.getBakedSegments(); @@ -151,14 +151,14 @@ public class TrackVisual extends AbstractBlockEntityVisual { var modelIndex = i - 1; ties[modelIndex].setTransform(pose) - .transform(segment.tieTransform) + .mul(segment.tieTransform) .setChanged(); tiesLightPos[modelIndex] = segment.lightPosition.offset(tePosition); for (boolean first : Iterate.trueAndFalse) { Pose transform = segment.railTransforms.get(first); (first ? this.left : this.right)[modelIndex].setTransform(pose) - .transform(transform) + .mul(transform) .setChanged(); (first ? leftLightPos : rightLightPos)[modelIndex] = segment.lightPosition.offset(tePosition); } @@ -218,10 +218,10 @@ public class TrackVisual extends AbstractBlockEntityVisual { beams = Couple.create(() -> new TransformedInstance[segCount]); beamCaps = Couple.create(() -> Couple.create(() -> new TransformedInstance[segCount])); lightPos = new BlockPos[segCount]; - beams.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE))::createInstances); + beams.forEach(instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.GIRDER_SEGMENT_MIDDLE))::createInstances); beamCaps.forEachWithContext((c, top) -> { var partialModel = Models.partial(top ? AllPartialModels.GIRDER_SEGMENT_TOP : AllPartialModels.GIRDER_SEGMENT_BOTTOM); - c.forEach(instancerProvider.instancer(InstanceTypes.TRANSFORMED, partialModel)::createInstances); + c.forEach(instancerProvider().instancer(InstanceTypes.TRANSFORMED, partialModel)::createInstances); }); GirderAngles[] bakedGirders = bc.getBakedGirders(); @@ -233,14 +233,14 @@ public class TrackVisual extends AbstractBlockEntityVisual { for (boolean first : Iterate.trueAndFalse) { Pose beamTransform = segment.beams.get(first); beams.get(first)[modelIndex].setTransform(pose) - .transform(beamTransform) + .mul(beamTransform) .setChanged(); for (boolean top : Iterate.trueAndFalse) { Pose beamCapTransform = segment.beamCaps.get(top) .get(first); beamCaps.get(top) .get(first)[modelIndex].setTransform(pose) - .transform(beamCapTransform) + .mul(beamCapTransform) .setChanged(); } } diff --git a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java index 7099e537d..3223f503a 100644 --- a/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java +++ b/src/main/java/com/simibubi/create/foundation/render/VirtualRenderHelper.java @@ -7,10 +7,10 @@ import org.jetbrains.annotations.Nullable; import com.mojang.blaze3d.vertex.PoseStack; import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.lib.model.ModelCache; import dev.engine_room.flywheel.lib.model.ModelUtil; import dev.engine_room.flywheel.lib.model.baked.ForgeBakedModelBuilder; import dev.engine_room.flywheel.lib.model.baked.VirtualEmptyBlockGetter; +import dev.engine_room.flywheel.lib.util.ResourceReloadCache; import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -25,7 +25,7 @@ public class VirtualRenderHelper { public static final ModelProperty VIRTUAL_PROPERTY = new ModelProperty<>(); public static final ModelData VIRTUAL_DATA = ModelData.builder().with(VIRTUAL_PROPERTY, true).build(); - private static final ModelCache VIRTUAL_BLOCKS = new ModelCache<>(state -> new ForgeBakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); + private static final ResourceReloadCache VIRTUAL_BLOCKS = new ResourceReloadCache<>(state -> new ForgeBakedModelBuilder(ModelUtil.VANILLA_RENDERER.getBlockModel(state)).modelData(VIRTUAL_DATA).build()); private static final ThreadLocal THREAD_LOCAL_OBJECTS = ThreadLocal.withInitial(ThreadLocalObjects::new); public static boolean isVirtual(ModelData data) { From b6da803886f9fb177daaaefcbe149cddbc2c764c Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sat, 21 Sep 2024 12:10:56 -0700 Subject: [PATCH 22/46] On track to stability - Fix track visuals not appearing when first placed - Fix blaze burner's heads appearing at 0,0,0 until you look at them - Bump flywheel version to fix crash when breaking blocks --- gradle.properties | 2 +- .../processing/burner/BlazeBurnerVisual.java | 10 +++++-- .../content/trains/track/TrackVisual.java | 27 ++++++++++--------- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/gradle.properties b/gradle.properties index 807df18dc..3063a0283 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-134 +flywheel_version = 1.0.0-beta-136 jei_minecraft_version = 1.20.1 jei_version = 15.10.0.39 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java index 1bb3688a6..2542cdd3e 100644 --- a/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java +++ b/src/main/java/com/simibubi/create/content/processing/burner/BlazeBurnerVisual.java @@ -77,6 +77,8 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual 0.125f; @@ -135,7 +141,7 @@ public class BlazeBurnerVisual extends AbstractBlockEntityVisual { - private final List visuals; + private final List visuals = new ArrayList<>(); public TrackVisual(VisualizationContext context, TrackBlockEntity track, float partialTick) { super(context, track, partialTick); - visuals = blockEntity.connections.values() - .stream() - .map(this::createInstance) - .filter(Objects::nonNull) - .toList(); + collectConnections(); } @Override @@ -49,13 +46,22 @@ public class TrackVisual extends AbstractBlockEntityVisual { return; _delete(); + + collectConnections(); + lightSections.sections(collectLightSections()); } + private void collectConnections() { + blockEntity.connections.values() + .stream() + .map(this::createInstance) + .filter(Objects::nonNull) + .forEach(visuals::add); + } + @Override public void updateLight(float partialTick) { - if (visuals == null) - return; visuals.forEach(BezierTrackVisual::updateLight); } @@ -68,9 +74,8 @@ public class TrackVisual extends AbstractBlockEntityVisual { @Override public void _delete() { - if (visuals == null) - return; visuals.forEach(BezierTrackVisual::delete); + visuals.clear(); } public LongSet collectLightSections() { @@ -102,8 +107,6 @@ public class TrackVisual extends AbstractBlockEntityVisual { @Override public void collectCrumblingInstances(Consumer consumer) { - if (visuals == null) - return; for (BezierTrackVisual instance : visuals) { instance.collectCrumblingInstances(consumer); } From eb2f1fecdcfce82afd5fb304a362820f530aab0e Mon Sep 17 00:00:00 2001 From: Jozufozu Date: Sun, 29 Sep 2024 00:17:48 -0700 Subject: [PATCH 23/46] Recycling rope - Bump flywheel version - Fix rope pulleys being invisible - Use an InstanceRecycler in AbstractPulleyVisual - Remove Select, Group, and ConditionalInstance --- gradle.properties | 2 +- .../pulley/AbstractPulleyVisual.java | 109 ++++++++---------- .../contraptions/pulley/HosePulleyVisual.java | 17 +-- .../contraptions/pulley/RopePulleyVisual.java | 17 +-- .../foundation/render/AllInstanceTypes.java | 10 +- .../render/ConditionalInstance.java | 68 ----------- .../foundation/render/GroupInstance.java | 84 -------------- .../foundation/render/SelectInstance.java | 69 ----------- 8 files changed, 72 insertions(+), 304 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/GroupInstance.java delete mode 100644 src/main/java/com/simibubi/create/foundation/render/SelectInstance.java diff --git a/gradle.properties b/gradle.properties index 3063a0283..923699fb4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,7 +23,7 @@ use_parchment = true # dependency versions registrate_version = MC1.20-1.3.3 flywheel_minecraft_version = 1.20.1 -flywheel_version = 1.0.0-beta-136 +flywheel_version = 1.0.0-beta-145 jei_minecraft_version = 1.20.1 jei_version = 15.10.0.39 curios_minecraft_version = 1.20.1 diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java index d5dd84a90..df9a1a158 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/AbstractPulleyVisual.java @@ -5,17 +5,16 @@ import java.util.function.Consumer; import com.mojang.math.Axis; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import com.simibubi.create.content.kinetics.base.ShaftVisual; -import com.simibubi.create.foundation.render.ConditionalInstance; -import com.simibubi.create.foundation.render.GroupInstance; -import com.simibubi.create.foundation.render.SelectInstance; import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.math.MoreMath; import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; +import dev.engine_room.flywheel.lib.visual.util.SmartRecycler; import it.unimi.dsi.fastutil.bytes.ByteArrayList; import it.unimi.dsi.fastutil.bytes.ByteList; import it.unimi.dsi.fastutil.longs.LongOpenHashSet; @@ -29,9 +28,8 @@ import net.minecraft.world.level.LightLayer; public abstract class AbstractPulleyVisual extends ShaftVisual implements SimpleDynamicVisual { private final OrientedInstance coil; - private final SelectInstance magnet; - private final GroupInstance rope; - private final ConditionalInstance halfRope; + private final TransformedInstance magnet; + private final SmartRecycler rope; protected final Direction rotatingAbout; protected final Axis rotationAxis; @@ -50,14 +48,12 @@ public abstract class AbstractPulleyVisual extends .position(getVisualPosition()); coil.setChanged(); - magnet = new SelectInstance<>(this::getMagnetModelIndex); - magnet.addModel(getMagnetModel()) - .addModel(getHalfMagnetModel()); + magnet = magnetInstancer().createInstance(); - rope = new GroupInstance<>(getRopeModel()); - halfRope = new ConditionalInstance<>(getHalfRopeModel()).withCondition(this::shouldRenderHalfRope); + rope = new SmartRecycler<>(b -> b ? getHalfRopeModel().createInstance() : getRopeModel().createInstance()); updateOffset(partialTick); + updateLight(partialTick); } @Override @@ -66,67 +62,68 @@ public abstract class AbstractPulleyVisual extends lightCache.updateSections(); } - protected abstract Instancer getRopeModel(); + protected abstract Instancer getRopeModel(); - protected abstract Instancer getMagnetModel(); + protected abstract Instancer getMagnetModel(); - protected abstract Instancer getHalfMagnetModel(); + protected abstract Instancer getHalfMagnetModel(); protected abstract Instancer getCoilModel(); - protected abstract Instancer getHalfRopeModel(); + protected abstract Instancer getHalfRopeModel(); protected abstract float getOffset(float pt); protected abstract boolean isRunning(); + private Instancer magnetInstancer() { + return offset > .25f ? getMagnetModel() : getHalfMagnetModel(); + } + @Override public void beginFrame(DynamicVisual.Context ctx) { updateOffset(ctx.partialTick()); coil.rotation(rotationAxis.rotationDegrees(offset * 180)) .setChanged(); - int neededRopeCount = getNeededRopeCount(); - rope.resize(neededRopeCount); + magnet.setVisible(isRunning() || offset == 0); - magnet.update() - .get() - .ifPresent(data -> { - int i = Math.max(0, Mth.floor(offset)); - int light = lightCache.getPackedLight(i); - data.position(getVisualPosition()) - .translatePosition(0, -offset, 0) - .light(light) - .setChanged(); - }); + magnetInstancer().stealInstance(magnet); - halfRope.update() - .get() - .ifPresent(rope1 -> { - float f = offset % 1; - float halfRopeNudge = f > .75f ? f - 1 : f; + magnet.setIdentityTransform() + .translate(getVisualPosition()) + .translate(0, -offset, 0) + .light(lightCache.getPackedLight(Math.max(0, Mth.floor(offset)))) + .setChanged(); - int light = lightCache.getPackedLight(0); - rope1.position(getVisualPosition()) - .translatePosition(0, -halfRopeNudge, 0) - .light(light) - .setChanged(); - }); + rope.resetCount(); + + if (shouldRenderHalfRope()) { + float f = offset % 1; + float halfRopeNudge = f > .75f ? f - 1 : f; + + rope.get(true).setIdentityTransform() + .translate(getVisualPosition()) + .translate(0, -halfRopeNudge, 0) + .light(lightCache.getPackedLight(0)) + .setChanged(); + } if (isRunning()) { - int size = rope.size(); - for (int i = 0; i < size; i++) { - int light = lightCache.getPackedLight(size - 1 - i); + int neededRopeCount = getNeededRopeCount(); - rope.get(i) - .position(getVisualPosition()) - .translatePosition(0, -offset + i + 1, 0) - .light(light) + for (int i = 0; i < neededRopeCount; i++) { + + rope.get(false) + .setIdentityTransform() + .translate(getVisualPosition()) + .translate(0, -offset + i + 1, 0) + .light(lightCache.getPackedLight(neededRopeCount - 1 - i)) .setChanged(); } - } else { - rope.clear(); } + + rope.discardExtra(); } @Override @@ -151,21 +148,11 @@ public abstract class AbstractPulleyVisual extends return offset > .75f && (f < .25f || f > .75f); } - private int getMagnetModelIndex() { - if (isRunning() || offset == 0) { - return offset > .25f ? 0 : 1; - } else { - return -1; - } - } - @Override public void collectCrumblingInstances(Consumer consumer) { super.collectCrumblingInstances(consumer); consumer.accept(coil); - magnet.forEach(consumer); - rope.forEach(consumer); - halfRope.forEach(consumer); + consumer.accept(magnet); } @Override @@ -173,8 +160,7 @@ public abstract class AbstractPulleyVisual extends super._delete(); coil.delete(); magnet.delete(); - rope.clear(); - halfRope.delete(); + rope.delete(); } private class LightCache { @@ -186,6 +172,7 @@ public abstract class AbstractPulleyVisual extends public void setSize(int size) { if (size != data.size()) { data.size(size); + update(); int sectionCount = MoreMath.ceilingDiv(size + 15 - pos.getY() + pos.getY() / 4 * 4, SectionPos.SECTION_SIZE); if (sectionCount != this.sectionCount) { @@ -215,7 +202,7 @@ public abstract class AbstractPulleyVisual extends for (int i = 0; i < data.size(); i++) { int blockLight = level.getBrightness(LightLayer.BLOCK, mutablePos); int skyLight = level.getBrightness(LightLayer.SKY, mutablePos); - int light = ((skyLight << 4) & 0xF) | (blockLight & 0xF); + int light = ((skyLight & 0xF) << 4) | (blockLight & 0xF); data.set(i, (byte) light); mutablePos.move(Direction.DOWN); } diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java index d530c063f..417541ca9 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/HosePulleyVisual.java @@ -7,6 +7,7 @@ import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; public class HosePulleyVisual extends AbstractPulleyVisual { @@ -15,18 +16,18 @@ public class HosePulleyVisual extends AbstractPulleyVisual getRopeModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE)); + protected Instancer getRopeModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.HOSE)); } @Override - protected Instancer getMagnetModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_MAGNET)); + protected Instancer getMagnetModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.HOSE_MAGNET)); } @Override - protected Instancer getHalfMagnetModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); + protected Instancer getHalfMagnetModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.HOSE_HALF_MAGNET)); } @Override @@ -35,8 +36,8 @@ public class HosePulleyVisual extends AbstractPulleyVisual getHalfRopeModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.HOSE_HALF)); + protected Instancer getHalfRopeModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.HOSE_HALF)); } @Override diff --git a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java index ce9d0da49..3930f79e3 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java +++ b/src/main/java/com/simibubi/create/content/contraptions/pulley/RopePulleyVisual.java @@ -9,6 +9,7 @@ import dev.engine_room.flywheel.api.instance.Instancer; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.OrientedInstance; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; public class RopePulleyVisual extends AbstractPulleyVisual { @@ -17,18 +18,18 @@ public class RopePulleyVisual extends AbstractPulleyVisual { } @Override - protected Instancer getRopeModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); + protected Instancer getRopeModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.ROPE.getDefaultState())); } @Override - protected Instancer getMagnetModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); + protected Instancer getMagnetModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.PULLEY_MAGNET.getDefaultState())); } @Override - protected Instancer getHalfMagnetModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); + protected Instancer getHalfMagnetModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROPE_HALF_MAGNET)); } @Override @@ -37,8 +38,8 @@ public class RopePulleyVisual extends AbstractPulleyVisual { } @Override - protected Instancer getHalfRopeModel() { - return instancerProvider().instancer(InstanceTypes.ORIENTED, Models.partial(AllPartialModels.ROPE_HALF)); + protected Instancer getHalfRopeModel() { + return instancerProvider().instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.ROPE_HALF)); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java index 7d1b430bb..bda99f70a 100644 --- a/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java +++ b/src/main/java/com/simibubi/create/foundation/render/AllInstanceTypes.java @@ -49,7 +49,7 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 33, instance.rotationAxisY); MemoryUtil.memPutByte(ptr + 34, instance.rotationAxisZ); }) - .register(); + .build(); public static final InstanceType BELT = SimpleInstanceType.builder(BeltInstance::new) .cullShader(asResource("instance/cull/belt.glsl")) @@ -87,7 +87,7 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 68, instance.maxV); MemoryUtil.memPutFloat(ptr + 72, instance.scrollMult); }) - .register(); + .build(); // TODO: use this for belts too public static final InstanceType SCROLLING = SimpleInstanceType.builder(ScrollInstance::new) @@ -121,7 +121,7 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 56, instance.scaleU); MemoryUtil.memPutFloat(ptr + 60, instance.scaleV); }) - .register(); + .build(); public static final InstanceType ACTOR = SimpleInstanceType.builder(ActorInstance::new) .cullShader(asResource("instance/cull/actor.glsl")) @@ -151,7 +151,7 @@ public class AllInstanceTypes { MemoryUtil.memPutByte(ptr + 42, instance.rotationCenterZ); MemoryUtil.memPutFloat(ptr + 44, instance.speed); }) - .register(); + .build(); // TODO: remove public static final InstanceType FLAP = SimpleInstanceType.builder(FlapInstance::new) @@ -183,7 +183,7 @@ public class AllInstanceTypes { MemoryUtil.memPutFloat(ptr + 48, instance.flapScale); MemoryUtil.memPutFloat(ptr + 52, instance.flapness); }) - .register(); + .build(); public static void init() { // noop diff --git a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java b/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java deleted file mode 100644 index c8c44b4c1..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/ConditionalInstance.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.simibubi.create.foundation.render; - -import java.util.Optional; -import java.util.function.Consumer; - -import javax.annotation.Nullable; - -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.instance.Instancer; -import dev.engine_room.flywheel.lib.instance.AbstractInstance; - -public class ConditionalInstance { - - final Instancer model; - ICondition condition; - - Consumer setupFunc; - - @Nullable - private D instance; - - public ConditionalInstance(Instancer model) { - this.model = model; - this.condition = () -> true; - } - - public ConditionalInstance withSetupFunc(Consumer setupFunc) { - this.setupFunc = setupFunc; - return this; - } - - public ConditionalInstance withCondition(ICondition condition) { - this.condition = condition; - return this; - } - - public ConditionalInstance update() { - boolean shouldShow = condition.shouldShow(); - if (shouldShow && instance == null) { - instance = model.createInstance(); - if (setupFunc != null) setupFunc.accept(instance); - } else if (!shouldShow && instance != null) { - instance.delete(); - instance = null; - } - - return this; - } - - public Optional get() { - return Optional.ofNullable(instance); - } - - public void delete() { - if (instance != null) instance.delete(); - } - - public void forEach(Consumer consumer) { - if (instance != null) { - consumer.accept(instance); - } - } - - @FunctionalInterface - public interface ICondition { - boolean shouldShow(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java b/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java deleted file mode 100644 index 00255bd77..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/GroupInstance.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.simibubi.create.foundation.render; - -import java.util.AbstractCollection; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import dev.engine_room.flywheel.api.instance.Instancer; -import dev.engine_room.flywheel.lib.instance.AbstractInstance; - -public class GroupInstance extends AbstractCollection { - - final Instancer model; - final List backing; - - public GroupInstance(Instancer model) { - this.model = model; - - this.backing = new ArrayList<>(); - } - - public GroupInstance(Instancer model, int size) { - this.model = model; - - this.backing = new ArrayList<>(size); - - for (int i = 0; i < size; i++) { - addInstance(); - } - } - - /** - * @param count - * @return True if the number of elements changed. - */ - public boolean resize(int count) { - int size = size(); - if (count == size) return false; - - if (count <= 0) { - clear(); - return size > 0; - } - - if (count > size) { - for (int i = size; i < count; i++) { - addInstance(); - } - } else { - List unnecessary = backing.subList(count, size); - unnecessary.forEach(AbstractInstance::delete); - unnecessary.clear(); - } - - return true; - } - - public D addInstance() { - D instance = model.createInstance(); - backing.add(instance); - - return instance; - } - - public D get(int index) { - return backing.get(index); - } - - @Override - public Iterator iterator() { - return backing.iterator(); - } - - @Override - public int size() { - return backing.size(); - } - - @Override - public void clear() { - backing.forEach(AbstractInstance::delete); - backing.clear(); - } -} diff --git a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java b/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java deleted file mode 100644 index f638146d8..000000000 --- a/src/main/java/com/simibubi/create/foundation/render/SelectInstance.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.simibubi.create.foundation.render; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.function.Consumer; - -import javax.annotation.Nullable; - -import dev.engine_room.flywheel.api.instance.Instance; -import dev.engine_room.flywheel.api.instance.Instancer; - -public class SelectInstance { - - final List> models; - - ModelSelector selector; - - private int last = -1; - @Nullable - private D current; - - public SelectInstance(ModelSelector selector) { - this.models = new ArrayList<>(); - this.selector = selector; - } - - public SelectInstance addModel(Instancer model) { - models.add(model); - return this; - } - - public SelectInstance update() { - int i = selector.modelIndexToShow(); - - if (i < 0 || i >= models.size()) { - if (current != null) { - current.handle().setDeleted(); - current = null; - } - } else if (i != last) { - if (current != null) current.handle().setDeleted(); - - current = models.get(i) - .createInstance(); - } - - last = i; - return this; - } - - public Optional get() { - return Optional.ofNullable(current); - } - - public void delete() { - if (current != null) current.handle().setDeleted(); - } - - public void forEach(Consumer consumer) { - if (current != null) { - consumer.accept(current); - } - } - - public interface ModelSelector { - int modelIndexToShow(); - } -} From 03a94dd74d5fb155f95929a5216538c12a6d1931 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Sat, 19 Oct 2024 16:18:54 -0700 Subject: [PATCH 24/46] Refactor bogey rendering --- .../com/simibubi/create/AllBogeyStyles.java | 128 +----- src/main/java/com/simibubi/create/Create.java | 2 +- .../trains/bogey/AbstractBogeyBlock.java | 44 +- .../bogey/AbstractBogeyBlockEntity.java | 6 +- .../trains/bogey/BackupBogeyRenderer.java | 22 - .../bogey/BogeyBlockEntityRenderer.java | 15 +- .../content/trains/bogey/BogeyRenderer.java | 395 +----------------- .../content/trains/bogey/BogeySizes.java | 102 ++--- .../content/trains/bogey/BogeyStyle.java | 169 +++++--- .../content/trains/bogey/BogeyVisual.java | 62 +-- .../content/trains/bogey/BogeyVisualizer.java | 10 + .../trains/bogey/StandardBogeyRenderer.java | 147 +++---- .../trains/bogey/StandardBogeyVisual.java | 215 ++++++++++ .../content/trains/entity/CarriageBogey.java | 15 +- .../entity/CarriageContraptionEntity.java | 1 + .../CarriageContraptionEntityRenderer.java | 6 +- .../entity/CarriageContraptionVisual.java | 60 +-- .../content/trains/entity/CarriageSounds.java | 4 +- .../create/foundation/utility/Couple.java | 4 + 19 files changed, 544 insertions(+), 863 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java create mode 100644 src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java create mode 100644 src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java diff --git a/src/main/java/com/simibubi/create/AllBogeyStyles.java b/src/main/java/com/simibubi/create/AllBogeyStyles.java index 96b5c1568..67506bb9d 100644 --- a/src/main/java/com/simibubi/create/AllBogeyStyles.java +++ b/src/main/java/com/simibubi/create/AllBogeyStyles.java @@ -1,132 +1,42 @@ package com.simibubi.create; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Optional; -import java.util.function.Supplier; -import com.google.common.collect.ImmutableMap; -import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; -import com.simibubi.create.content.trains.bogey.BogeyRenderer; -import com.simibubi.create.content.trains.bogey.BogeyRenderer.CommonRenderer; +import org.jetbrains.annotations.ApiStatus; + import com.simibubi.create.content.trains.bogey.BogeySizes; import com.simibubi.create.content.trains.bogey.BogeyStyle; -import com.simibubi.create.content.trains.bogey.StandardBogeyRenderer.CommonStandardBogeyRenderer; -import com.simibubi.create.content.trains.bogey.StandardBogeyRenderer.LargeStandardBogeyRenderer; -import com.simibubi.create.content.trains.bogey.StandardBogeyRenderer.SmallStandardBogeyRenderer; +import com.simibubi.create.content.trains.bogey.BogeyStyle.SizeRenderer; +import com.simibubi.create.content.trains.bogey.StandardBogeyRenderer; +import com.simibubi.create.content.trains.bogey.StandardBogeyVisual; import com.simibubi.create.foundation.utility.Components; -import com.simibubi.create.foundation.utility.Lang; -import com.tterrag.registrate.util.entry.BlockEntry; -import net.minecraft.core.particles.ParticleOptions; -import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; public class AllBogeyStyles { public static final Map BOGEY_STYLES = new HashMap<>(); public static final Map> CYCLE_GROUPS = new HashMap<>(); - private static final Map EMPTY_GROUP = ImmutableMap.of(); + private static final Map EMPTY_GROUP = Collections.emptyMap(); + + public static final ResourceLocation STANDARD_CYCLE_GROUP = Create.asResource("standard"); + + public static final BogeyStyle STANDARD = + builder("standard", STANDARD_CYCLE_GROUP).displayName(Components.translatable("create.bogey.style.standard")) + .size(BogeySizes.SMALL, AllBlocks.SMALL_BOGEY, () -> new SizeRenderer(new StandardBogeyRenderer.Small(), StandardBogeyVisual.Small::new)) + .size(BogeySizes.LARGE, AllBlocks.LARGE_BOGEY, () -> new SizeRenderer(new StandardBogeyRenderer.Large(), StandardBogeyVisual.Large::new)) + .build(); public static Map getCycleGroup(ResourceLocation cycleGroup) { return CYCLE_GROUPS.getOrDefault(cycleGroup, EMPTY_GROUP); } - public static final String STANDARD_CYCLE_GROUP = "standard"; - - public static final BogeyStyle STANDARD = - create("standard", STANDARD_CYCLE_GROUP).commonRenderer(() -> CommonStandardBogeyRenderer::new) - .displayName(Components.translatable("create.bogey.style.standard")) - .size(BogeySizes.SMALL, () -> SmallStandardBogeyRenderer::new, AllBlocks.SMALL_BOGEY) - .size(BogeySizes.LARGE, () -> LargeStandardBogeyRenderer::new, AllBlocks.LARGE_BOGEY) - .build(); - - private static BogeyStyleBuilder create(String name, String cycleGroup) { - return create(Create.asResource(name), Create.asResource(cycleGroup)); + private static BogeyStyle.Builder builder(String name, ResourceLocation cycleGroup) { + return new BogeyStyle.Builder(Create.asResource(name), cycleGroup); } - public static BogeyStyleBuilder create(ResourceLocation name, ResourceLocation cycleGroup) { - return new BogeyStyleBuilder(name, cycleGroup); - } - - public static void register() {} - - public static class BogeyStyleBuilder { - protected final Map> sizeRenderers = new HashMap<>(); - protected final Map sizes = new HashMap<>(); - protected final ResourceLocation name; - protected final ResourceLocation cycleGroup; - - protected Component displayName = Lang.translateDirect("bogey.style.invalid"); - protected ResourceLocation soundType = AllSoundEvents.TRAIN2.getId(); - protected CompoundTag defaultData = new CompoundTag(); - protected ParticleOptions contactParticle = ParticleTypes.CRIT; - protected ParticleOptions smokeParticle = ParticleTypes.POOF; - protected Optional> commonRenderer = Optional.empty(); - - public BogeyStyleBuilder(ResourceLocation name, ResourceLocation cycleGroup) { - this.name = name; - this.cycleGroup = cycleGroup; - } - - public BogeyStyleBuilder displayName(Component displayName) { - this.displayName = displayName; - return this; - } - - public BogeyStyleBuilder soundType(ResourceLocation soundType) { - this.soundType = soundType; - return this; - } - - public BogeyStyleBuilder defaultData(CompoundTag defaultData) { - this.defaultData = defaultData; - return this; - } - - public BogeyStyleBuilder size(BogeySizes.BogeySize size, Supplier> renderer, - BlockEntry> blockEntry) { - this.size(size, renderer, blockEntry.getId()); - return this; - } - - public BogeyStyleBuilder size(BogeySizes.BogeySize size, Supplier> renderer, - ResourceLocation location) { - this.sizes.put(size, location); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - this.sizeRenderers.put(size, () -> new BogeyStyle.SizeRenderData(renderer.get(), renderer.get() - .get())); - }); - return this; - } - - public BogeyStyleBuilder contactParticle(ParticleOptions contactParticle) { - this.contactParticle = contactParticle; - return this; - } - - public BogeyStyleBuilder smokeParticle(ParticleOptions smokeParticle) { - this.smokeParticle = smokeParticle; - return this; - } - - public BogeyStyleBuilder commonRenderer(Supplier> commonRenderer) { - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - this.commonRenderer = Optional.of(commonRenderer.get()); - }); - return this; - } - - public BogeyStyle build() { - BogeyStyle entry = new BogeyStyle(name, cycleGroup, displayName, soundType, contactParticle, smokeParticle, - defaultData, sizes, sizeRenderers, commonRenderer); - BOGEY_STYLES.put(name, entry); - CYCLE_GROUPS.computeIfAbsent(cycleGroup, l -> new HashMap<>()) - .put(name, entry); - return entry; - } + @ApiStatus.Internal + public static void init() { } } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index b98042c45..2ef1094a8 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -136,7 +136,7 @@ public class Create { AllFanProcessingTypes.register(); BlockSpoutingBehaviour.registerDefaults(); BogeySizes.init(); - AllBogeyStyles.register(); + AllBogeyStyles.init(); // ---- ComputerCraftProxy.register(); diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java index 5478264bf..81a34571d 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlock.java @@ -4,18 +4,15 @@ import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.List; -import java.util.Optional; import java.util.Set; import javax.annotation.Nullable; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Axis; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllItems; @@ -33,8 +30,6 @@ import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.RegisteredObjects; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -57,8 +52,6 @@ import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.registries.ForgeRegistries; public abstract class AbstractBogeyBlock extends Block implements IBE, ProperWaterloggedBlock, ISpecialBlockItemRequirement, IWrenchable { @@ -66,7 +59,6 @@ public abstract class AbstractBogeyBlock ext static final List BOGEYS = new ArrayList<>(); public BogeySizes.BogeySize size; - public AbstractBogeyBlock(Properties pProperties, BogeySizes.BogeySize size) { super(pProperties); registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false)); @@ -91,7 +83,7 @@ public abstract class AbstractBogeyBlock ext /** * Only for internal Create use. If you have your own style set, do not call this method */ - @Deprecated + @ApiStatus.Internal public static void registerStandardBogey(ResourceLocation block) { BOGEYS.add(block); } @@ -147,30 +139,6 @@ public abstract class AbstractBogeyBlock ext return false; } - @OnlyIn(Dist.CLIENT) - public void render(@Nullable BlockState state, float wheelAngle, PoseStack ms, float partialTicks, - MultiBufferSource buffers, int light, int overlay, BogeyStyle style, CompoundTag bogeyData) { - if (style == null) - style = getDefaultStyle(); - - final Optional commonRenderer - = style.getInWorldCommonRenderInstance(); - final BogeyRenderer renderer = style.getInWorldRenderInstance(this.getSize()); - if (state != null) { - ms.translate(.5f, .5f, .5f); - if (state.getValue(AXIS) == Direction.Axis.X) - ms.mulPose(Axis.YP.rotationDegrees(90)); - } - ms.translate(0, -1.5 - 1 / 128f, 0); - VertexConsumer vb = buffers.getBuffer(RenderType.cutoutMipped()); - if (bogeyData == null) - bogeyData = new CompoundTag(); - renderer.render(bogeyData, wheelAngle, ms, light, vb, state == null); - CompoundTag finalBogeyData = bogeyData; - commonRenderer.ifPresent(common -> - common.render(finalBogeyData, wheelAngle, ms, light, vb, state == null)); - } - public BogeySizes.BogeySize getSize() { return this.size; } @@ -216,9 +184,9 @@ public abstract class AbstractBogeyBlock ext Set validSizes = style.validSizes(); - for (int i = 0; i < BogeySizes.count(); i++) { + for (int i = 0; i < BogeySizes.all().size(); i++) { if (validSizes.contains(size)) break; - size = size.increment(); + size = size.nextBySize(); } sbbe.setBogeyStyle(style); @@ -227,7 +195,7 @@ public abstract class AbstractBogeyBlock ext sbbe.setBogeyData(sbbe.getBogeyData().merge(defaultData)); if (size == getSize()) { - if (state.getBlock() != style.getBlockOfSize(size)) { + if (state.getBlock() != style.getBlockForSize(size)) { CompoundTag oldData = sbbe.getBogeyData(); level.setBlock(pos, copyProperties(state, getStateOfSize(sbbe, size)), Block.UPDATE_ALL); if (!(level.getBlockEntity(pos) instanceof AbstractBogeyBlockEntity bogeyBlockEntity)) @@ -328,7 +296,7 @@ public abstract class AbstractBogeyBlock ext public BlockState getStateOfSize(AbstractBogeyBlockEntity sbbe, BogeySizes.BogeySize size) { BogeyStyle style = sbbe.getStyle(); - BlockState state = style.getBlockOfSize(size).defaultBlockState(); + BlockState state = style.getBlockForSize(size).defaultBlockState(); return copyProperties(sbbe.getBlockState(), state); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java index 59985cc7a..6fc496c50 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java @@ -37,14 +37,14 @@ public abstract class AbstractBogeyBlockEntity extends CachedRenderBBBlockEntity public void setBogeyData(@NotNull CompoundTag newData) { if (!newData.contains(BOGEY_STYLE_KEY)) { - ResourceLocation style = getDefaultStyle().name; + ResourceLocation style = getDefaultStyle().id; NBTHelper.writeResourceLocation(newData, BOGEY_STYLE_KEY, style); } this.bogeyData = newData; } public void setBogeyStyle(@NotNull BogeyStyle style) { - ResourceLocation location = style.name; + ResourceLocation location = style.id; CompoundTag data = this.getBogeyData(); NBTHelper.writeResourceLocation(data, BOGEY_STYLE_KEY, location); markUpdated(); @@ -80,7 +80,7 @@ public abstract class AbstractBogeyBlockEntity extends CachedRenderBBBlockEntity private CompoundTag createBogeyData() { CompoundTag nbt = new CompoundTag(); - NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, getDefaultStyle().name); + NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, getDefaultStyle().id); boolean upsideDown = false; if (getBlockState().getBlock() instanceof AbstractBogeyBlock bogeyBlock) upsideDown = bogeyBlock.isUpsideDown(getBlockState()); diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java deleted file mode 100644 index ff93126a9..000000000 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BackupBogeyRenderer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.simibubi.create.content.trains.bogey; - -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.simibubi.create.content.trains.entity.CarriageBogey; - -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import net.minecraft.nbt.CompoundTag; - -public class BackupBogeyRenderer extends BogeyRenderer.CommonRenderer { - public static BackupBogeyRenderer INSTANCE = new BackupBogeyRenderer(); - - @Override - public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { - - } - - @Override - public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { - - } -} diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java index e570fa26b..d340cc5b3 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java @@ -1,16 +1,18 @@ package com.simibubi.create.content.trains.bogey; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.core.Direction; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; public class BogeyBlockEntityRenderer extends SafeBlockEntityRenderer { - - public BogeyBlockEntityRenderer(BlockEntityRendererProvider.Context context) {} + public BogeyBlockEntityRenderer(BlockEntityRendererProvider.Context context) { + } @Override protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, @@ -18,9 +20,12 @@ public class BogeyBlockEntityRenderer extends SafeBlockEn BlockState blockState = be.getBlockState(); if (be instanceof AbstractBogeyBlockEntity sbbe) { float angle = sbbe.getVirtualAngle(partialTicks); - if (blockState.getBlock() instanceof AbstractBogeyBlock bogey) - bogey.render(blockState, angle, ms, partialTicks, buffer, light, overlay, sbbe.getStyle(), sbbe.getBogeyData()); + if (blockState.getBlock() instanceof AbstractBogeyBlock bogey) { + ms.translate(.5f, .5f, .5f); + if (blockState.getValue(AbstractBogeyBlock.AXIS) == Direction.Axis.X) + ms.mulPose(Axis.YP.rotationDegrees(90)); + sbbe.getStyle().render(bogey.getSize(), partialTicks, ms, buffer, light, overlay, angle, sbbe.getBogeyData(), false); + } } } - } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java index 22c44ae99..9afce4cb6 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyRenderer.java @@ -1,399 +1,10 @@ package com.simibubi.create.content.trains.bogey; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.IntStream; - -import org.jetbrains.annotations.Nullable; -import org.joml.Matrix3fc; -import org.joml.Matrix4fc; -import org.joml.Quaternionfc; - import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.simibubi.create.content.trains.entity.CarriageBogey; -import com.simibubi.create.foundation.render.CachedBufferer; -import com.simibubi.create.foundation.render.SuperByteBuffer; -import com.simibubi.create.foundation.render.VirtualRenderHelper; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import dev.engine_room.flywheel.lib.instance.InstanceTypes; -import dev.engine_room.flywheel.lib.instance.PosedInstance; -import dev.engine_room.flywheel.lib.model.Models; -import dev.engine_room.flywheel.lib.model.baked.PartialModel; -import dev.engine_room.flywheel.lib.transform.Transform; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -/** - * This is a port of the bogey api from Extended Bogeys, If you are looking to implement your own bogeys you can find some helpful resources below: - *

+ * Portals must be entered from the side and must lead to a different dimension than the one entered from. + * This class handles the registration and functionality of portal tracks for standard and modded portals. + *

+ */ public class AllPortalTracks { - - // Portals must be entered from the side and must lead to a different dimension - // than the one entered from - + /** + * Functional interface representing a provider for portal track connections. + * It takes a pair of {@link ServerLevel} and {@link BlockFace} representing the inbound track + * and returns a similar pair for the outbound track. + */ @FunctionalInterface - public interface PortalTrackProvider extends UnaryOperator> { - }; + public interface PortalTrackProvider extends UnaryOperator> {} + /** + * Registry mapping portal blocks to their respective {@link PortalTrackProvider}s. + */ private static final AttachedRegistry PORTAL_BEHAVIOURS = - new AttachedRegistry<>(ForgeRegistries.BLOCKS); + new AttachedRegistry<>(ForgeRegistries.BLOCKS); + /** + * Registers a portal track integration for a given block identified by its {@link ResourceLocation}. + * + * @param block The resource location of the portal block. + * @param provider The portal track provider for the block. + */ public static void registerIntegration(ResourceLocation block, PortalTrackProvider provider) { PORTAL_BEHAVIOURS.register(block, provider); } + /** + * Registers a portal track integration for a given {@link Block}. + * + * @param block The portal block. + * @param provider The portal track provider for the block. + */ public static void registerIntegration(Block block, PortalTrackProvider provider) { PORTAL_BEHAVIOURS.register(block, provider); } + /** + * Checks if a given {@link BlockState} represents a supported portal block. + * + * @param state The block state to check. + * @return {@code true} if the block state represents a supported portal; {@code false} otherwise. + */ public static boolean isSupportedPortal(BlockState state) { return PORTAL_BEHAVIOURS.get(state.getBlock()) != null; } + /** + * Retrieves the corresponding outbound track on the other side of a portal. + * + * @param level The current {@link ServerLevel}. + * @param inboundTrack The inbound track {@link BlockFace}. + * @return A pair containing the target {@link ServerLevel} and outbound {@link BlockFace}, + * or {@code null} if no corresponding portal is found. + */ public static Pair getOtherSide(ServerLevel level, BlockFace inboundTrack) { BlockPos portalPos = inboundTrack.getConnectedPos(); BlockState portalState = level.getBlockState(portalPos); @@ -57,61 +96,132 @@ public class AllPortalTracks { return provider == null ? null : provider.apply(Pair.of(level, inboundTrack)); } - // Builtin handlers + // Built-in handlers + /** + * Registers default portal track integrations for built-in dimensions and mods. + * This includes the Nether and the Aether (if loaded). + */ public static void registerDefaults() { registerIntegration(Blocks.NETHER_PORTAL, AllPortalTracks::nether); if (Mods.AETHER.isLoaded()) - registerIntegration(new ResourceLocation("aether", "aether_portal"), AllPortalTracks::aether); + registerIntegration(Mods.AETHER.rl("aether_portal"), AllPortalTracks::aether); + if (Mods.BETTEREND.isLoaded()) + registerIntegration(Mods.BETTEREND.rl("end_portal_block"), AllPortalTracks::betterend); } + /** + * Portal track provider for the Nether portal. + * + * @param inbound A pair containing the current {@link ServerLevel} and inbound {@link BlockFace}. + * @return A pair with the target {@link ServerLevel} and outbound {@link BlockFace}, or {@code null} if not applicable. + */ private static Pair nether(Pair inbound) { + ServerLevel level = inbound.getFirst(); + MinecraftServer minecraftServer = level.getServer(); + + if (!minecraftServer.isNetherEnabled()) + return null; + return standardPortalProvider(inbound, Level.OVERWORLD, Level.NETHER, ServerLevel::getPortalForcer); } + /** + * Portal track provider for the Aether mod's portal. + * + * @param inbound A pair containing the current {@link ServerLevel} and inbound {@link BlockFace}. + * @return A pair with the target {@link ServerLevel} and outbound {@link BlockFace}, or {@code null} if not applicable. + */ private static Pair aether(Pair inbound) { ResourceKey aetherLevelKey = - ResourceKey.create(Registries.DIMENSION, new ResourceLocation("aether", "the_aether")); + ResourceKey.create(Registries.DIMENSION, Mods.AETHER.rl("the_aether")); return standardPortalProvider(inbound, Level.OVERWORLD, aetherLevelKey, level -> { try { return (ITeleporter) Class.forName("com.aetherteam.aether.block.portal.AetherPortalForcer") - .getDeclaredConstructor(ServerLevel.class, boolean.class) - .newInstance(level, true); + .getDeclaredConstructor(ServerLevel.class, boolean.class) + .newInstance(level, true); } catch (Exception e) { - e.printStackTrace(); + Create.LOGGER.error("Failed to create Aether teleporter: ", e); } return level.getPortalForcer(); }); } - public static Pair standardPortalProvider(Pair inbound, - ResourceKey firstDimension, ResourceKey secondDimension, - Function customPortalForcer) { - ServerLevel level = inbound.getFirst(); - ResourceKey resourcekey = level.dimension() == secondDimension ? firstDimension : secondDimension; - MinecraftServer minecraftserver = level.getServer(); - ServerLevel otherLevel = minecraftserver.getLevel(resourcekey); + /** + * Portal track provider for the Better End mod's portal. + * + * @param inbound A pair containing the current {@link ServerLevel} and inbound {@link BlockFace}. + * @return A pair with the target {@link ServerLevel} and outbound {@link BlockFace}, or {@code null} if not applicable. + */ + private static Pair betterend(Pair inbound) { + return portalProvider(inbound, Level.OVERWORLD, Level.END, BetterEndPortalCompat::getBetterEndPortalInfo); + } - if (otherLevel == null || !minecraftserver.isNetherEnabled()) + /** + * Provides a standard portal track provider that handles portal traversal between two dimensions. + * + * @param inbound A pair containing the current {@link ServerLevel} and inbound {@link BlockFace}. + * @param firstDimension The first dimension (typically the Overworld). + * @param secondDimension The second dimension (e.g., Nether, Aether). + * @param customPortalForcer A function to obtain the {@link ITeleporter} for the target level. + * @return A pair with the target {@link ServerLevel} and outbound {@link BlockFace}, or {@code null} if not applicable. + */ + public static Pair standardPortalProvider( + Pair inbound, + ResourceKey firstDimension, + ResourceKey secondDimension, + Function customPortalForcer + ) { + return portalProvider( + inbound, + firstDimension, + secondDimension, + (otherLevel, probe) -> { + ITeleporter teleporter = customPortalForcer.apply(otherLevel); + return teleporter.getPortalInfo(probe, otherLevel, probe::findDimensionEntryPoint); + } + ); + } + + /** + * Generalized portal provider method that calculates the corresponding outbound track across a portal. + * + * @param inbound A pair containing the current {@link ServerLevel} and inbound {@link BlockFace}. + * @param firstDimension The first dimension. + * @param secondDimension The second dimension. + * @param portalInfoProvider A function that provides the {@link PortalInfo} given the target level and probe entity. + * @return A pair with the target {@link ServerLevel} and outbound {@link BlockFace}, or {@code null} if not applicable. + */ + public static Pair portalProvider( + Pair inbound, + ResourceKey firstDimension, + ResourceKey secondDimension, + BiFunction portalInfoProvider + ) { + ServerLevel level = inbound.getFirst(); + ResourceKey resourceKey = level.dimension() == secondDimension ? firstDimension : secondDimension; + + MinecraftServer minecraftServer = level.getServer(); + ServerLevel otherLevel = minecraftServer.getLevel(resourceKey); + + if (otherLevel == null) return null; BlockFace inboundTrack = inbound.getSecond(); BlockPos portalPos = inboundTrack.getConnectedPos(); BlockState portalState = level.getBlockState(portalPos); - ITeleporter teleporter = customPortalForcer.apply(otherLevel); SuperGlueEntity probe = new SuperGlueEntity(level, new AABB(portalPos)); - probe.setYRot(inboundTrack.getFace() - .toYRot()); + probe.setYRot(inboundTrack.getFace().toYRot()); probe.setPortalEntrancePos(); - PortalInfo portalinfo = teleporter.getPortalInfo(probe, otherLevel, probe::findDimensionEntryPoint); - if (portalinfo == null) + PortalInfo portalInfo = portalInfoProvider.apply(otherLevel, probe); + if (portalInfo == null) return null; - BlockPos otherPortalPos = BlockPos.containing(portalinfo.pos); + BlockPos otherPortalPos = BlockPos.containing(portalInfo.pos); BlockState otherPortalState = otherLevel.getBlockState(otherPortalPos); - if (otherPortalState.getBlock() != portalState.getBlock()) + if (!otherPortalState.is(portalState.getBlock())) return null; Direction targetDirection = inboundTrack.getFace(); @@ -120,5 +230,4 @@ public class AllPortalTracks { BlockPos otherPos = otherPortalPos.relative(targetDirection); return Pair.of(otherLevel, new BlockFace(otherPos, targetDirection.getOpposite())); } - } From 8355dda53b8d2256ec20ea2a6721d7a18fe1811e Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:03:26 -0500 Subject: [PATCH 32/46] Add CopperBlockSet slabs and stairs to correct tags (#7053) --- .../2d64935085b86659cb7857bad9701dbf9bab6e4c | 740 +++++++++--------- .../data/minecraft/tags/blocks/slabs.json | 16 + .../data/minecraft/tags/blocks/stairs.json | 16 + .../foundation/block/CopperBlockSet.java | 10 +- 4 files changed, 411 insertions(+), 371 deletions(-) diff --git a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c index b01560667..5777ab3d8 100644 --- a/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c +++ b/src/generated/resources/.cache/2d64935085b86659cb7857bad9701dbf9bab6e4c @@ -1,4 +1,4 @@ -// 1.20.1 2024-09-03T11:32:11.6637155 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +// 1.20.1 2024-10-11T10:29:49.10689745 Registrate Provider for create [Recipes, Advancements, Loot Tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] 60bbdf92d2ac9824ea6144955c74043a6005f79d assets/create/blockstates/acacia_window.json 6a67703c2697d81b7dc83e9d72a66f9c9ff08383 assets/create/blockstates/acacia_window_pane.json c3ae87b62e81d8e9476eccd793bb1548d74c66a1 assets/create/blockstates/adjustable_chain_gearshift.json @@ -68,12 +68,12 @@ b5170d754ce5f07ea2b4646eb07c099c50bae249 assets/create/blockstates/clipboard.jso f7254f20f91e2f1295e36d2e70390d43f3952d07 assets/create/blockstates/copper_door.json 736777de0eb038ff1ef9e8fe9d04c23d80239eda assets/create/blockstates/copper_ladder.json df3103dfc1c3ba7a9573229d009cb0de4925df16 assets/create/blockstates/copper_scaffolding.json -4d3d29e8a74bf103da39e76a1466b03eb5dcf916 assets/create/blockstates/copper_shingles.json 1ea8fdb990f8cda1762ab69ac38ea3161a835227 assets/create/blockstates/copper_shingle_slab.json 7c35bb802099d6bb5d92eafd8cbb7ea146979a2e assets/create/blockstates/copper_shingle_stairs.json -9a9f03140a57a7a8903d3e1b159bdc052566a6ec assets/create/blockstates/copper_tiles.json +4d3d29e8a74bf103da39e76a1466b03eb5dcf916 assets/create/blockstates/copper_shingles.json 7db7a0d81887091ca889f40bb8a508d3098c5164 assets/create/blockstates/copper_tile_slab.json c0b7eca017242913d156e4623147add0d03574f6 assets/create/blockstates/copper_tile_stairs.json +9a9f03140a57a7a8903d3e1b159bdc052566a6ec assets/create/blockstates/copper_tiles.json ef3ccb2d8b03f5a972b053a15bb037f8db6af17c assets/create/blockstates/copper_valve_handle.json 4758bed22fb6fe18213f463bc055775c1909e858 assets/create/blockstates/copycat_bars.json 4789c857508452aede1cb7389187b99ce2d7bf62 assets/create/blockstates/copycat_base.json @@ -90,114 +90,114 @@ c9a2c3a7971c46957d0f07c6d94d76f59da54a0b assets/create/blockstates/crushing_whee 4b0e51a1c10685f7d432467339afc9c2e24793b0 assets/create/blockstates/crushing_wheel_controller.json ba9c3ecfacbd398048440d247decffeaefc714b5 assets/create/blockstates/cuckoo_clock.json 1f6d84cba69062a1989d671c9c97317e2c2455b6 assets/create/blockstates/cut_andesite.json -cc62a6499ce8dcfc5e8695f0e8bb3c3d67f41efc assets/create/blockstates/cut_andesite_bricks.json 50d88f806122818af2ffecbd514d13ebbd21e4c9 assets/create/blockstates/cut_andesite_brick_slab.json 32d801225ea18209792921fa91618ed41794dbd0 assets/create/blockstates/cut_andesite_brick_stairs.json 3bf8204bf8c7c5b7b3c388fbc3478bb2d7c47129 assets/create/blockstates/cut_andesite_brick_wall.json +cc62a6499ce8dcfc5e8695f0e8bb3c3d67f41efc assets/create/blockstates/cut_andesite_bricks.json 34e89a828f14383c6115954a235b19851b74f277 assets/create/blockstates/cut_andesite_slab.json 49d58ae14544d89305ddc707cf7f6a81998200fa assets/create/blockstates/cut_andesite_stairs.json 1cc235cb6c388324793ac40f7bf89df8b048faac assets/create/blockstates/cut_andesite_wall.json 13ea54a4b9b89e576879a6e23a029c6341b7c098 assets/create/blockstates/cut_asurine.json -51c22c0547ab8ed2564890afb8733bbe356899f5 assets/create/blockstates/cut_asurine_bricks.json cf09de38f826fe000c5efe5afe56cf746125691d assets/create/blockstates/cut_asurine_brick_slab.json 1835482d5e9a59f2214336a63b12c7132ad815b4 assets/create/blockstates/cut_asurine_brick_stairs.json c48ab37bf7a2aba676af281d29cb6a2103c72fba assets/create/blockstates/cut_asurine_brick_wall.json +51c22c0547ab8ed2564890afb8733bbe356899f5 assets/create/blockstates/cut_asurine_bricks.json 1523a57124239a99da0b12a6b435c09d3d4276a5 assets/create/blockstates/cut_asurine_slab.json cc1acf5e118f1b1e78c5bb291176008960794d59 assets/create/blockstates/cut_asurine_stairs.json 139640bf41070e8eeb48647319eee54bb6804692 assets/create/blockstates/cut_asurine_wall.json 06b8c5cf98366608c480a37e6944d0d668bc8983 assets/create/blockstates/cut_calcite.json -979c70e35d806f1f63fe3381f27d881a17f9f6be assets/create/blockstates/cut_calcite_bricks.json a8f83cb8e1eae587f4e11e37c4cd3d0a1bbef377 assets/create/blockstates/cut_calcite_brick_slab.json 1eabb2e485aa323d317fa9648be02c12556593b7 assets/create/blockstates/cut_calcite_brick_stairs.json a0a33df71c5d26344a7bb0dd7a4622c30cc7825f assets/create/blockstates/cut_calcite_brick_wall.json +979c70e35d806f1f63fe3381f27d881a17f9f6be assets/create/blockstates/cut_calcite_bricks.json e3ddaae92b52cc3ea230088ff23260b5c5c93017 assets/create/blockstates/cut_calcite_slab.json 80c5249eaf9504c743c427fdd1a2c7bfa0f3d48f assets/create/blockstates/cut_calcite_stairs.json b4bbdb08d8114b6741546a0418cb54d645481c02 assets/create/blockstates/cut_calcite_wall.json 449f5180c72a028393afdac55a34e59862728224 assets/create/blockstates/cut_crimsite.json -25d731077a131d03347296c38c76b547194a6320 assets/create/blockstates/cut_crimsite_bricks.json d2c8a3580d3578c8afe44b94d4448be3680dbdeb assets/create/blockstates/cut_crimsite_brick_slab.json a3d9d2190a23b881dd3a7538ab248e0b0a3efa8e assets/create/blockstates/cut_crimsite_brick_stairs.json 3791c00ed477c0aaf7c5a20803a89dfc0e20f013 assets/create/blockstates/cut_crimsite_brick_wall.json +25d731077a131d03347296c38c76b547194a6320 assets/create/blockstates/cut_crimsite_bricks.json c9f19e7a976a7428b3dd58f45d734700ca1a18cd assets/create/blockstates/cut_crimsite_slab.json 1b8d4ac53dc5823083c2af605165a05b73c9ff79 assets/create/blockstates/cut_crimsite_stairs.json 484f9253ed92e963f398973a99fbeacb67ba1188 assets/create/blockstates/cut_crimsite_wall.json c4e95ceb7914da09ebe42d539bf5d976a3d70972 assets/create/blockstates/cut_deepslate.json -75d4ef863cd85d8f3df78226177966954e02ee2b assets/create/blockstates/cut_deepslate_bricks.json e1dc99a48b9066732fc5c62071c5ead16f34f438 assets/create/blockstates/cut_deepslate_brick_slab.json dbb2eddaf1d4ae3e687beb611552ea4283a1e7d8 assets/create/blockstates/cut_deepslate_brick_stairs.json 91c1f3da848503067c64b966ddda22ab91ff8fd5 assets/create/blockstates/cut_deepslate_brick_wall.json +75d4ef863cd85d8f3df78226177966954e02ee2b assets/create/blockstates/cut_deepslate_bricks.json 593198ffd37eae124a8366ae1d4a40b682788f92 assets/create/blockstates/cut_deepslate_slab.json f8cd1f9002ed8593ab71af9cfb7f962625994108 assets/create/blockstates/cut_deepslate_stairs.json c2d8060a0c830e5b8bbb084457083324b5b6f4c9 assets/create/blockstates/cut_deepslate_wall.json aaa6ac5f4fc399c4b03a7f8de856fa7aae97e049 assets/create/blockstates/cut_diorite.json -08b6289ca8b4193c87324ca23ca081e8773fb223 assets/create/blockstates/cut_diorite_bricks.json 423f809f06fa3fd96643f068ba0d3520269b3844 assets/create/blockstates/cut_diorite_brick_slab.json 9011fb92f57e7695c4484c923dd40ecd749ff307 assets/create/blockstates/cut_diorite_brick_stairs.json 41bad89777a33737bc0365ce2c7ffc20720f9620 assets/create/blockstates/cut_diorite_brick_wall.json +08b6289ca8b4193c87324ca23ca081e8773fb223 assets/create/blockstates/cut_diorite_bricks.json b03e7cf494c53c6f24ba93d0ef531e839026932b assets/create/blockstates/cut_diorite_slab.json 95c8094204979acfb0e59c2826003e0274a02fe5 assets/create/blockstates/cut_diorite_stairs.json e2f163d36dd5d03c0741dd2e87d8f77a0c86ae00 assets/create/blockstates/cut_diorite_wall.json f42ca2ce8e8f657c64376759413ec611f8045531 assets/create/blockstates/cut_dripstone.json -2d696162b2085c3d5723308a8d1ccafb29660f01 assets/create/blockstates/cut_dripstone_bricks.json 9310a800fb091014e7c0a220f5f2511c1de379ad assets/create/blockstates/cut_dripstone_brick_slab.json 3ff2f65dafcb4654b99e0d65b7e851760f9a4075 assets/create/blockstates/cut_dripstone_brick_stairs.json cafc956d8dc2053e5a0e8437c4ccde7fa24fc17e assets/create/blockstates/cut_dripstone_brick_wall.json +2d696162b2085c3d5723308a8d1ccafb29660f01 assets/create/blockstates/cut_dripstone_bricks.json 9cb32af3b952b841e9da94789da17cd274c3cfb9 assets/create/blockstates/cut_dripstone_slab.json da0300f54bdfcc705beb8d84f26406be660de5de assets/create/blockstates/cut_dripstone_stairs.json 83ff3eaeb481202c77e6dbdc442b4dd195ca568c assets/create/blockstates/cut_dripstone_wall.json bf501250fd2226838afe0baf68db08cd832e3c4f assets/create/blockstates/cut_granite.json -5c029d7ec837b3239d17ab91a70f025df1bfb124 assets/create/blockstates/cut_granite_bricks.json 773717bd5c140cf025f463c99c67efb9d27bd696 assets/create/blockstates/cut_granite_brick_slab.json 97d20b21e5b7f329c1b21b436fd0bdcaa8d173d0 assets/create/blockstates/cut_granite_brick_stairs.json 5e4175b6c89039ded48937ad1cd13d3bb2d2992a assets/create/blockstates/cut_granite_brick_wall.json +5c029d7ec837b3239d17ab91a70f025df1bfb124 assets/create/blockstates/cut_granite_bricks.json 42549436ce26ad7b44f2e1cba54357b3f25bcb18 assets/create/blockstates/cut_granite_slab.json e9d8fd028d8092e5fa0fd13cd638516f57a22d53 assets/create/blockstates/cut_granite_stairs.json 2daab523202dd2e31daeaf3b9a04cde2a7da4ca5 assets/create/blockstates/cut_granite_wall.json 0652c8b9c41acc1a8da901bd7b8b6018b3581d5b assets/create/blockstates/cut_limestone.json -508ee569f313b7e804f6268ca86f5a61851563ec assets/create/blockstates/cut_limestone_bricks.json 4efbeb34c96918e9b48dc484a82b1ef4811ed39d assets/create/blockstates/cut_limestone_brick_slab.json 11b99cf9b33d7f8de9d11cc1e405e2681682ba32 assets/create/blockstates/cut_limestone_brick_stairs.json b6c02a9e9e47a8e521a54ef9488259267068f032 assets/create/blockstates/cut_limestone_brick_wall.json +508ee569f313b7e804f6268ca86f5a61851563ec assets/create/blockstates/cut_limestone_bricks.json fb63a2581211fe62344985a06feec9dcec4b1888 assets/create/blockstates/cut_limestone_slab.json ffcca1e66718f3e78e544b5fa9954a852c095e91 assets/create/blockstates/cut_limestone_stairs.json a1a90f84b47f96b4384fc2d60bfc48ddbb5ed179 assets/create/blockstates/cut_limestone_wall.json 1b7a133518780d4f49474a70e7f6263d6e88ff51 assets/create/blockstates/cut_ochrum.json -6f37e5e2dca3b443951131cb82c15a981a4e2005 assets/create/blockstates/cut_ochrum_bricks.json f1e9d54a6f9f41b968f117a7be711011effa71a5 assets/create/blockstates/cut_ochrum_brick_slab.json 8d334e026e94b304a1ff1ee96097f434b50175f2 assets/create/blockstates/cut_ochrum_brick_stairs.json e92c026ee7ab2aa35003ad475bef3d6c0e29818c assets/create/blockstates/cut_ochrum_brick_wall.json +6f37e5e2dca3b443951131cb82c15a981a4e2005 assets/create/blockstates/cut_ochrum_bricks.json 5a61edb7d146e83d951795fae33dc306e71b2cb6 assets/create/blockstates/cut_ochrum_slab.json b31944bf6297685acd37631083dde0889c08ede7 assets/create/blockstates/cut_ochrum_stairs.json df33a8af1dc8cb08ddcfd22a50a305499479a4dd assets/create/blockstates/cut_ochrum_wall.json 1606d7481e56755f07e9331cf85a8d7cc9aace9a assets/create/blockstates/cut_scorchia.json -bc2a0e7f11400b8c2a03071be87dadb5edc097de assets/create/blockstates/cut_scorchia_bricks.json 43db25ebac2f5bcaa7ca9cfb6da8fcb20fad8269 assets/create/blockstates/cut_scorchia_brick_slab.json 7a80620590ba5e61967c5168f5c67ecabf09dc00 assets/create/blockstates/cut_scorchia_brick_stairs.json e4eb79360a41bb1a7ca835d61446ea5166e4cda8 assets/create/blockstates/cut_scorchia_brick_wall.json +bc2a0e7f11400b8c2a03071be87dadb5edc097de assets/create/blockstates/cut_scorchia_bricks.json c0d262f54e3b2fce8bc941a2a6df71db5f0229ea assets/create/blockstates/cut_scorchia_slab.json de2e918058e9dd7eafd085a8dec634f6a2832c21 assets/create/blockstates/cut_scorchia_stairs.json 5d2d06799b82449754f62b1d80b9ee9a24c65bad assets/create/blockstates/cut_scorchia_wall.json 76ea4f3438a3effedfc93d2bbabac0899610cd28 assets/create/blockstates/cut_scoria.json -6d9c79e1b71656a73bb69e2a9b100be59084dd2e assets/create/blockstates/cut_scoria_bricks.json 7c7dcd1fe82f3673910620c2eefebad5d0029cdf assets/create/blockstates/cut_scoria_brick_slab.json d535b387bf0a6f9e124eed8b76d899e13699bca9 assets/create/blockstates/cut_scoria_brick_stairs.json c426e1b5e4c77c25cd0d16d10fba0e0731673dd1 assets/create/blockstates/cut_scoria_brick_wall.json +6d9c79e1b71656a73bb69e2a9b100be59084dd2e assets/create/blockstates/cut_scoria_bricks.json fb692494c88358d4d8e687b216f729d6b6bd7174 assets/create/blockstates/cut_scoria_slab.json 950f43bae8f4e3220103ce0c62f444856129ca12 assets/create/blockstates/cut_scoria_stairs.json 01350030831c5b9edef0dc2c778b92f1ebc2b2fc assets/create/blockstates/cut_scoria_wall.json c0c1c4d44eba5babe9703eca31f0279ebd11ed8e assets/create/blockstates/cut_tuff.json -9bddef4a2b4a338c15f03e2397c4cd4c3ae9e5d9 assets/create/blockstates/cut_tuff_bricks.json 11306e83915e0106d48f890df3212c3a47443a08 assets/create/blockstates/cut_tuff_brick_slab.json e8951d94e0d3228700bcb56819928f1c179c3973 assets/create/blockstates/cut_tuff_brick_stairs.json 619340b7cf014cfb72a4b5440b90881535f16108 assets/create/blockstates/cut_tuff_brick_wall.json +9bddef4a2b4a338c15f03e2397c4cd4c3ae9e5d9 assets/create/blockstates/cut_tuff_bricks.json 3577e3f4933ea8cb7464c28e80867ce84917898d assets/create/blockstates/cut_tuff_slab.json 5673fdb02439d622c56dc0ff47a0dca98dc6d027 assets/create/blockstates/cut_tuff_stairs.json 12a46ee82536665400ec2f3befed3be58325d5c6 assets/create/blockstates/cut_tuff_wall.json beb9e47f8d811c2146f68daf992fb805342a65cb assets/create/blockstates/cut_veridium.json -04d07986eb86ffd66baaaf9b65e02d00022e98e2 assets/create/blockstates/cut_veridium_bricks.json 952543c03e730443d85059ec43642efb089485e7 assets/create/blockstates/cut_veridium_brick_slab.json 6a033e7b5a0b26cce5956c6c7c1eff558f866cb5 assets/create/blockstates/cut_veridium_brick_stairs.json 43689138c8018b3ee9f35a11870887e9df3c8fe5 assets/create/blockstates/cut_veridium_brick_wall.json +04d07986eb86ffd66baaaf9b65e02d00022e98e2 assets/create/blockstates/cut_veridium_bricks.json 212d8ee5dfa78802b9539640cf8b263fd5880b87 assets/create/blockstates/cut_veridium_slab.json c11f09df4a23e951bdf9a345515183f4fac7cde3 assets/create/blockstates/cut_veridium_stairs.json 3aa6f5e613ff73952e3de00408051f92316e7f81 assets/create/blockstates/cut_veridium_wall.json @@ -222,12 +222,12 @@ f7f5df9086c71688cbdb5d05c394dc5acb8fb338 assets/create/blockstates/elevator_cont d47bc65703e9582cc710e6408fb565e16d3514a6 assets/create/blockstates/encased_fan.json 651f9fdb11f56d887d131be8f936f508d0b2fc1d assets/create/blockstates/encased_fluid_pipe.json 489ad4daeaed702d231a3f175f7b66846f5789a6 assets/create/blockstates/experience_block.json -5f6c60a30889b043709066707e80a21081d98155 assets/create/blockstates/exposed_copper_shingles.json 74c8a72db3dd3fa919e29baaa8c5865f13490461 assets/create/blockstates/exposed_copper_shingle_slab.json 4e0b5a9be15f0c2861f5f6bd71bd9c2a4db2a21d assets/create/blockstates/exposed_copper_shingle_stairs.json -5299b4f7b9b3490872e8c26a6b212e14dd05fd9a assets/create/blockstates/exposed_copper_tiles.json +5f6c60a30889b043709066707e80a21081d98155 assets/create/blockstates/exposed_copper_shingles.json 6ee73ff3608d51fdad6e9810feee66ed1773b81c assets/create/blockstates/exposed_copper_tile_slab.json f93e4059876bfc6d70b9fa2bc24d8e3d6943d56f assets/create/blockstates/exposed_copper_tile_stairs.json +5299b4f7b9b3490872e8c26a6b212e14dd05fd9a assets/create/blockstates/exposed_copper_tiles.json f1a03ede031d8c4e33a4d07c529e71936da9dc6d assets/create/blockstates/fake_track.json 21fa4a1bf4ee851e090a21c97c9a38d18cfddf0d assets/create/blockstates/fluid_pipe.json 185e6367c5c5b3632e54148c74987057cbfccaca assets/create/blockstates/fluid_tank.json @@ -292,13 +292,13 @@ fa5fb2be73c7c54b70e927b66adf3f4d64c5cb6b assets/create/blockstates/light_gray_ni 8ec5144da4a49dd5b497af07b0d4b88c9c0b6cc0 assets/create/blockstates/light_gray_seat.json 35b151db396069b146d223fbe46be5b0c3dda8a9 assets/create/blockstates/light_gray_toolbox.json 894827ffd176bc733abecf18d96888e9ed5a3eb4 assets/create/blockstates/light_gray_valve_handle.json -a6f319c803c03e34bbf841ea52d82f0f7ec7a413 assets/create/blockstates/limestone.json -7ff65e1c4c8e48a0b694cd17506a192e6a7e6e44 assets/create/blockstates/limestone_pillar.json 7f20b548dd535942b2d6f41c39de7ad4fafe637e assets/create/blockstates/lime_nixie_tube.json ad1ec304729fd6d336c0d4d0c27c9345af636695 assets/create/blockstates/lime_sail.json b9934a558e1b495403dc2c71ffb43cce7d396013 assets/create/blockstates/lime_seat.json 49a02f7fc16697ba1cf16cee7e45ab6bfd8b06ce assets/create/blockstates/lime_toolbox.json ba181485f219d3ae23509a7edf28e25d9edb10f4 assets/create/blockstates/lime_valve_handle.json +a6f319c803c03e34bbf841ea52d82f0f7ec7a413 assets/create/blockstates/limestone.json +7ff65e1c4c8e48a0b694cd17506a192e6a7e6e44 assets/create/blockstates/limestone_pillar.json 654e845cebed82b7afbcf81380921e0a475b01e9 assets/create/blockstates/linear_chassis.json e195e82e4d0c1fc20474535bc9068cbb77a5e175 assets/create/blockstates/lit_blaze_burner.json 296186b196af94e1ab3f7e8a3254f6d31ae47a5c assets/create/blockstates/magenta_nixie_tube.json @@ -340,12 +340,12 @@ aab812cecf7d10d4e7587f4dead8a98238a15f41 assets/create/blockstates/orange_seat.j 2af63a4768f84fc93c7e7d67fa9a64438433e59f assets/create/blockstates/orange_valve_handle.json 515ed7dae09b052f289419ba09998a23e0d7083d assets/create/blockstates/ornate_iron_window.json 8118444f37536b9104ef4818d374b0c8a7c987bf assets/create/blockstates/ornate_iron_window_pane.json -97cd78453af94f44cef1187988966626574b29d5 assets/create/blockstates/oxidized_copper_shingles.json 2ddc762b8d8558e69a2f81c028702f3a25b5e978 assets/create/blockstates/oxidized_copper_shingle_slab.json ac536ae742c12e97bfd0b2483c87ff29f3935eaf assets/create/blockstates/oxidized_copper_shingle_stairs.json -110a6c19bcc9f044e5e982ac6e4b295b03ec0145 assets/create/blockstates/oxidized_copper_tiles.json +97cd78453af94f44cef1187988966626574b29d5 assets/create/blockstates/oxidized_copper_shingles.json 3f3924f0f0e368edfa04f4fdd6d6c2319276ddfe assets/create/blockstates/oxidized_copper_tile_slab.json 5e634cfb9abb06d8b29f39d751fc56b28ea5a9cd assets/create/blockstates/oxidized_copper_tile_stairs.json +110a6c19bcc9f044e5e982ac6e4b295b03ec0145 assets/create/blockstates/oxidized_copper_tiles.json 36742cc6ce052ead143366d31b11e828a525c1b8 assets/create/blockstates/peculiar_bell.json 53d102e706d53cb2c0dbc0bc11da828084a43519 assets/create/blockstates/pink_nixie_tube.json 213da5c04a33ae8ae7c0a4dec9844bbb6d670e33 assets/create/blockstates/pink_sail.json @@ -426,13 +426,13 @@ f8f9802df9c0b4e39edeefc3b1abb38255d79801 assets/create/blockstates/purple_sail.j 3aca01f2eddb22adb1b25735b98a990bfc7220d2 assets/create/blockstates/radial_chassis.json 72faac9777be540f95f8b662a833856e0e1b8f35 assets/create/blockstates/railway_casing.json 7ce346fa18702f6fe6e2a939efcfa26eda63fe38 assets/create/blockstates/raw_zinc_block.json -ec546afd3ec8036e4393b97d535f05a86f57dbc1 assets/create/blockstates/redstone_contact.json -ff205f032b36486753dddb1f2029ef8d53e9c86f assets/create/blockstates/redstone_link.json e3fd62e466e3e6e7bd6fc8661f764ba972a466fc assets/create/blockstates/red_nixie_tube.json 4c36b562da58ef2af57009da7cf2426059249228 assets/create/blockstates/red_sail.json 145f4e9ffaeff9be180e6c4e4989f2cf44cf0686 assets/create/blockstates/red_seat.json 380f46b7cb72b13c0f16fd4a4287a1a33adeff41 assets/create/blockstates/red_toolbox.json b689d87a27ed0cb2cab190a2ad2b599818bff56c assets/create/blockstates/red_valve_handle.json +ec546afd3ec8036e4393b97d535f05a86f57dbc1 assets/create/blockstates/redstone_contact.json +ff205f032b36486753dddb1f2029ef8d53e9c86f assets/create/blockstates/redstone_link.json 87ab7ca62ecf24d60d7e5c61bd5af97714dad0ad assets/create/blockstates/refined_radiance_casing.json 3807bcc6ccc3dad0dbfcc8fcf260a361aa488659 assets/create/blockstates/rope.json baa7da231c6c45d5eabaf04985d46e206a3346f8 assets/create/blockstates/rope_pulley.json @@ -441,8 +441,8 @@ dd63fd8443a2be507281548df838d878b0c3c8c8 assets/create/blockstates/rose_quartz_l dfe69ee57f832a2e4c576ee01bdde1617c81e46a assets/create/blockstates/rose_quartz_tiles.json b9cbbc7c4e1d9abd312263a9a270315bd5f0106b assets/create/blockstates/rotation_speed_controller.json 5a25ecb95b7978cc487491cb24478e4d6a73e977 assets/create/blockstates/sail_frame.json -bff758cc56bece375b40c32067b903b675065328 assets/create/blockstates/schematicannon.json 505510656c77d93ecd3691e7111615193275f29e assets/create/blockstates/schematic_table.json +bff758cc56bece375b40c32067b903b675065328 assets/create/blockstates/schematicannon.json 82c9ceb19cfc4e247fbb62a9605630ba08423efe assets/create/blockstates/scorchia.json 6fa99d5f1ff05153660f9917286d4b157eaa1b40 assets/create/blockstates/scorchia_pillar.json 8c34743564aa0473745ecec304a19e15e9e87cf2 assets/create/blockstates/scoria.json @@ -451,64 +451,64 @@ e5aff9dc8fa5e98b060232974194afb06d497d09 assets/create/blockstates/scoria_pillar 3343224d6da4e75f0bc7a7634ba010a4ba54ad70 assets/create/blockstates/sequenced_gearshift.json 4c261d54117ee295b307f6ea3e56a09437631f73 assets/create/blockstates/shadow_steel_casing.json 4c67d2a1a1faea5be2a81ebc0722c32d8e2e84d6 assets/create/blockstates/shaft.json -c606f103619088e8a5afe969ba54929af480a3d2 assets/create/blockstates/small_andesite_bricks.json c5469de5957d77fc11febaa658ee2bfb0d11b0bc assets/create/blockstates/small_andesite_brick_slab.json ed0bcfd07959aa208085910bd3780756979c985d assets/create/blockstates/small_andesite_brick_stairs.json 78e30e63adedf1ca95261eb4010a1db45aecfe9e assets/create/blockstates/small_andesite_brick_wall.json -b9fedc13dc8cb53a8bb16ce2257ea65f0ac94a6b assets/create/blockstates/small_asurine_bricks.json +c606f103619088e8a5afe969ba54929af480a3d2 assets/create/blockstates/small_andesite_bricks.json 653fa70f0aa7fc319d50f72692d507ff7c59c0f4 assets/create/blockstates/small_asurine_brick_slab.json e61a0b891729565434d6ab34aa3aeada7d189f9d assets/create/blockstates/small_asurine_brick_stairs.json 02556b916c198c683279eb4392ebaa31fb41e182 assets/create/blockstates/small_asurine_brick_wall.json +b9fedc13dc8cb53a8bb16ce2257ea65f0ac94a6b assets/create/blockstates/small_asurine_bricks.json e986248237013eea755bccd300f745e44d0a183f assets/create/blockstates/small_bogey.json -031d9492dbcc5de77431e8f54b9b04db412b5690 assets/create/blockstates/small_calcite_bricks.json 898bca10ff6e5402c4b8b84e1b9ba9036b32b8bc assets/create/blockstates/small_calcite_brick_slab.json ecc2276bdb2b24f54e31372bf207171a348e55d3 assets/create/blockstates/small_calcite_brick_stairs.json d9dd243b5b754a487755b53609d404ac1b3fde99 assets/create/blockstates/small_calcite_brick_wall.json -3d4e0b54ffda83f7f6e08b6a745db81049d95f3b assets/create/blockstates/small_crimsite_bricks.json +031d9492dbcc5de77431e8f54b9b04db412b5690 assets/create/blockstates/small_calcite_bricks.json 4094bf00cad8dea2dd234866b482c07175802c4c assets/create/blockstates/small_crimsite_brick_slab.json 7f73a2505e2a3a98a7749fa98f4623aa2d216edd assets/create/blockstates/small_crimsite_brick_stairs.json b477c7f1855c9eb2ef1bf672376e972678dc563f assets/create/blockstates/small_crimsite_brick_wall.json -17359d1b87399bb066cfc23002bcf0d8f71d8ccd assets/create/blockstates/small_deepslate_bricks.json +3d4e0b54ffda83f7f6e08b6a745db81049d95f3b assets/create/blockstates/small_crimsite_bricks.json c67f32adc49f0b24b34f098a390a398813365260 assets/create/blockstates/small_deepslate_brick_slab.json d05aed31d45ed12f8f117a9c64312b1abff8bd2f assets/create/blockstates/small_deepslate_brick_stairs.json 6952b02d8c5adf3d0d1a243221b637c50edaa287 assets/create/blockstates/small_deepslate_brick_wall.json -6c0ac59e09feb76afc078a88431442a2a6381c6c assets/create/blockstates/small_diorite_bricks.json +17359d1b87399bb066cfc23002bcf0d8f71d8ccd assets/create/blockstates/small_deepslate_bricks.json ee39994b434a17ec7497b271a6e0a006cf6311cb assets/create/blockstates/small_diorite_brick_slab.json eb335cf0a857299b9cd0c4f60e00bc8e4ca7efe8 assets/create/blockstates/small_diorite_brick_stairs.json b6f7c563c30483c749849899b96d4f0030b71df1 assets/create/blockstates/small_diorite_brick_wall.json -d51095bfb9d5758f8b3972a973fbe282569b0234 assets/create/blockstates/small_dripstone_bricks.json +6c0ac59e09feb76afc078a88431442a2a6381c6c assets/create/blockstates/small_diorite_bricks.json 3d8109d327099c65ca0fafcb5651051059cad1df assets/create/blockstates/small_dripstone_brick_slab.json 3931e24229db79115ffe2a9f3a069202b9b8dcab assets/create/blockstates/small_dripstone_brick_stairs.json 0d16cefcb8e619bc81ef65111d16d331db58d0aa assets/create/blockstates/small_dripstone_brick_wall.json -11dcaf8a6da96d178024b4c3ee76b9c373e5d082 assets/create/blockstates/small_granite_bricks.json +d51095bfb9d5758f8b3972a973fbe282569b0234 assets/create/blockstates/small_dripstone_bricks.json 096b064f28fbe381e1b637d4668550851cbbb2c2 assets/create/blockstates/small_granite_brick_slab.json e99cc3251937fbf9fc858623d5ea525ed5b79704 assets/create/blockstates/small_granite_brick_stairs.json 62f2b570ac6073c8a98369523095d2c18a353eed assets/create/blockstates/small_granite_brick_wall.json -346dbff9a84b988bd9c9af670b486b6af5e18179 assets/create/blockstates/small_limestone_bricks.json +11dcaf8a6da96d178024b4c3ee76b9c373e5d082 assets/create/blockstates/small_granite_bricks.json d640eed81abaa013ed1c53d68a552f639168ae8b assets/create/blockstates/small_limestone_brick_slab.json d470967200aa6ca618421cf375140b352c45cc90 assets/create/blockstates/small_limestone_brick_stairs.json 8d4a1eff66a3f45d595ff8371c0d1ebaa0ba1773 assets/create/blockstates/small_limestone_brick_wall.json -1464b01d4c8bd9ec56460c1250fd4bb07e936e22 assets/create/blockstates/small_ochrum_bricks.json +346dbff9a84b988bd9c9af670b486b6af5e18179 assets/create/blockstates/small_limestone_bricks.json ddee92141e00898e8d70145cf00c0d64f56b4f48 assets/create/blockstates/small_ochrum_brick_slab.json bad9a5820c64c125494c0eba4f6c7ebebe93341c assets/create/blockstates/small_ochrum_brick_stairs.json ed899a18522adc70ae46185c308904c8de5b5834 assets/create/blockstates/small_ochrum_brick_wall.json +1464b01d4c8bd9ec56460c1250fd4bb07e936e22 assets/create/blockstates/small_ochrum_bricks.json c520e9ba54ff6dfb96f7863bb093cdf15cc95ce4 assets/create/blockstates/small_rose_quartz_tiles.json -371ff795eb4e7cb1220d307abf8cb003f455cbec assets/create/blockstates/small_scorchia_bricks.json 384a1331b92b7beba988f729bb7cda42abec0172 assets/create/blockstates/small_scorchia_brick_slab.json 046a84030a23f5a40f4deac13f2e60ced436cadf assets/create/blockstates/small_scorchia_brick_stairs.json 58bc6e3bb10ed72b8cb5813a88cab300d1183b7d assets/create/blockstates/small_scorchia_brick_wall.json -0aa51dbfda8349b878e2f6c9bb3314fcfc1a9c39 assets/create/blockstates/small_scoria_bricks.json +371ff795eb4e7cb1220d307abf8cb003f455cbec assets/create/blockstates/small_scorchia_bricks.json 5b227400e588abae33c1682196f098adc8006d13 assets/create/blockstates/small_scoria_brick_slab.json 51420bb12b757d3888fd1ceb5c21d83b42bd2266 assets/create/blockstates/small_scoria_brick_stairs.json 36e9bd161fa4ffe18f07153b2945cfeae55e7c0b assets/create/blockstates/small_scoria_brick_wall.json -c1f9f986dd0bfdbdee210c6c7d71981b251c27db assets/create/blockstates/small_tuff_bricks.json +0aa51dbfda8349b878e2f6c9bb3314fcfc1a9c39 assets/create/blockstates/small_scoria_bricks.json 8d1af444031291fe58d850ae344aaf7e97b8bd87 assets/create/blockstates/small_tuff_brick_slab.json 26879e6cadf0035c3eed4b54b3a1fdc0c080a485 assets/create/blockstates/small_tuff_brick_stairs.json 5d58ca7b81ae537454c3cdbb5fc8aacca83cff3f assets/create/blockstates/small_tuff_brick_wall.json -ad79aa8ff306695f65386fdeb44c5285547934b6 assets/create/blockstates/small_veridium_bricks.json +c1f9f986dd0bfdbdee210c6c7d71981b251c27db assets/create/blockstates/small_tuff_bricks.json 6226471fdcadbbf0e02704bb0e7de607e99302a8 assets/create/blockstates/small_veridium_brick_slab.json b54200ebe65c4ad2e5661c81ba5bf939039277ca assets/create/blockstates/small_veridium_brick_stairs.json 0237d58443ca9dc2a9186c2387dd6633702a7598 assets/create/blockstates/small_veridium_brick_wall.json +ad79aa8ff306695f65386fdeb44c5285547934b6 assets/create/blockstates/small_veridium_bricks.json 4d987859e5f5a930c20e955919304088fb6fc6d1 assets/create/blockstates/smart_chute.json 57fc35b2e0ae9ab16c011abd95f507910c70a234 assets/create/blockstates/smart_fluid_pipe.json a70c025de5d85180f371ff05bbdc531d8bdfaab1 assets/create/blockstates/speedometer.json @@ -540,36 +540,36 @@ bfb2b7eabba2e7aef4d783328c8a5a1558e7e493 assets/create/blockstates/turntable.jso 116d0a8fb72bcc00bd511db7893ea3e96efda297 assets/create/blockstates/warped_window_pane.json fa3d300520e3bedb926696d9980cbeeb54cfdc68 assets/create/blockstates/water_wheel.json 3dff9e1ec59415779195d2abfa9f07bc17b428a1 assets/create/blockstates/water_wheel_structure.json -2ae175c489b86b78b4646306250ca2dba66b0a5e assets/create/blockstates/waxed_copper_shingles.json 85ed36dcb0a3542e0638601116360202a9670d53 assets/create/blockstates/waxed_copper_shingle_slab.json aaf49f1b6785e2195c5dc2e8792c99c960745f89 assets/create/blockstates/waxed_copper_shingle_stairs.json -835bfe0d2137ad60e5f8322fa4449d5c7a02187f assets/create/blockstates/waxed_copper_tiles.json +2ae175c489b86b78b4646306250ca2dba66b0a5e assets/create/blockstates/waxed_copper_shingles.json b52eda74c9000507a4f34e10fbd1a7846b66c16d assets/create/blockstates/waxed_copper_tile_slab.json 5428969f6f27213d0ec5140d911b3844b5332006 assets/create/blockstates/waxed_copper_tile_stairs.json -306b9cd1efe3abd1fcca11bc464560837fb8fdfa assets/create/blockstates/waxed_exposed_copper_shingles.json +835bfe0d2137ad60e5f8322fa4449d5c7a02187f assets/create/blockstates/waxed_copper_tiles.json bc8f3bb75bdb094c8372d61a68927270d3347437 assets/create/blockstates/waxed_exposed_copper_shingle_slab.json 32382e5f524b50393080fdbd2415a98ddb700c9c assets/create/blockstates/waxed_exposed_copper_shingle_stairs.json -ae92a9051f1603e7ad4f93cb668706ccffc7a85b assets/create/blockstates/waxed_exposed_copper_tiles.json +306b9cd1efe3abd1fcca11bc464560837fb8fdfa assets/create/blockstates/waxed_exposed_copper_shingles.json ca37c3e54d5c78a77fcb4a4aca004a34e271f246 assets/create/blockstates/waxed_exposed_copper_tile_slab.json a864f82ccd6b3e0fa181c800da886ebd3239fb82 assets/create/blockstates/waxed_exposed_copper_tile_stairs.json -729ca65a140b3d7571a2072f7406cc5f4a2e27c5 assets/create/blockstates/waxed_oxidized_copper_shingles.json +ae92a9051f1603e7ad4f93cb668706ccffc7a85b assets/create/blockstates/waxed_exposed_copper_tiles.json ef99e849f9dd6ad53ddf04625c81750f11eaae1c assets/create/blockstates/waxed_oxidized_copper_shingle_slab.json 9386068220f9bb5d2f6d3cc408dc4f78f26b4eeb assets/create/blockstates/waxed_oxidized_copper_shingle_stairs.json -17acf3486e92aabc3efbe99fa1e5d7d664e6ec97 assets/create/blockstates/waxed_oxidized_copper_tiles.json +729ca65a140b3d7571a2072f7406cc5f4a2e27c5 assets/create/blockstates/waxed_oxidized_copper_shingles.json fe79f7eab017d714c0331664a3a2b5579104194e assets/create/blockstates/waxed_oxidized_copper_tile_slab.json 10bbe77a0334b5578b1ec40b398a45cf7d2bb534 assets/create/blockstates/waxed_oxidized_copper_tile_stairs.json -079acbfd6a9375899687b581f95bbe74940afce2 assets/create/blockstates/waxed_weathered_copper_shingles.json +17acf3486e92aabc3efbe99fa1e5d7d664e6ec97 assets/create/blockstates/waxed_oxidized_copper_tiles.json 73572bbe16957e63853ee425d8f34d98e14e4a10 assets/create/blockstates/waxed_weathered_copper_shingle_slab.json ab05925d5bb70e53fec9c149982304f31acd2b1a assets/create/blockstates/waxed_weathered_copper_shingle_stairs.json -202b0f2e6fca9eab949f47eaa1f4ddee249a633a assets/create/blockstates/waxed_weathered_copper_tiles.json +079acbfd6a9375899687b581f95bbe74940afce2 assets/create/blockstates/waxed_weathered_copper_shingles.json fc1b53d3b2b1f0977069abec3c376f3f5c4cd7c8 assets/create/blockstates/waxed_weathered_copper_tile_slab.json 6cd93476a45c3b77f5eda66f68425bae486cfba8 assets/create/blockstates/waxed_weathered_copper_tile_stairs.json -c11562afd9a5f85945e521dcea5f911d1b6d13c6 assets/create/blockstates/weathered_copper_shingles.json +202b0f2e6fca9eab949f47eaa1f4ddee249a633a assets/create/blockstates/waxed_weathered_copper_tiles.json 5a5a1e95988edb7a2b6dc6c6ba5677c2d896a5ae assets/create/blockstates/weathered_copper_shingle_slab.json 07019fc8890cb5e966a42ca636a0ab9cf71cc881 assets/create/blockstates/weathered_copper_shingle_stairs.json -236e072d9056c0dbffdf5d7d973a85a56c2c8de1 assets/create/blockstates/weathered_copper_tiles.json +c11562afd9a5f85945e521dcea5f911d1b6d13c6 assets/create/blockstates/weathered_copper_shingles.json fee668eb9a45dca0d287fee5811219d69f9ec3e2 assets/create/blockstates/weathered_copper_tile_slab.json da110f382368257e15431c77164aef82e014e3f8 assets/create/blockstates/weathered_copper_tile_stairs.json +236e072d9056c0dbffdf5d7d973a85a56c2c8de1 assets/create/blockstates/weathered_copper_tiles.json 25ce64b7af5d244f194da91ccf964a9bf5762327 assets/create/blockstates/weighted_ejector.json 2974b34a8cfb0d4e8e010f8bd085584ea631d541 assets/create/blockstates/white_nixie_tube.json f079469d186087d23f0d91b384040f777b0088b1 assets/create/blockstates/white_sail.json @@ -585,8 +585,8 @@ b0d8f08968763a5f74e5cd5644377a76a9f39753 assets/create/blockstates/yellow_toolbo fe8c497aacc641c2f01cec90bba9f19e59cc2ed2 assets/create/blockstates/yellow_valve_handle.json e819e93fdcbe9fd9c050a052d2718ff3b3539365 assets/create/blockstates/zinc_block.json 64121dcb216381c83b4fe28aa361ea07c24c9ad0 assets/create/blockstates/zinc_ore.json -1195fdc4fb51659c921e2bbe744a35107f787aa2 assets/create/lang/en_ud.json -632d1aac7255fc0f4804f4df138ce9926134d2f9 assets/create/lang/en_us.json +5f729ba3f0557eb1c1923a091e06eee5ddf25c59 assets/create/lang/en_ud.json +bdd95ac05db0717d02e4dc34b6054e73d4eee640 assets/create/lang/en_us.json a97e1060e00ae701a02e39cd4ef8054cf345fac4 assets/create/models/block/acacia_window.json 103e032c0b1a0a6a27c67da8c91179a564bd281c assets/create/models/block/acacia_window_pane_noside.json fb00b627abda76ad4fea867ca57dbfadd24fffa3 assets/create/models/block/acacia_window_pane_noside_alt.json @@ -726,20 +726,20 @@ d063df8e9b974c11fc7810ce176b02d7d924e15b assets/create/models/block/copper_post. 2b5aed4a917694beb33d9b0ecbc800dcbc143ee9 assets/create/models/block/copper_post_ends.json bac7566a726b0fe6d537c744aec4afb383dc165c assets/create/models/block/copper_scaffolding.json dbee65c129740f3b99c07e754b3224d3f9f8c242 assets/create/models/block/copper_scaffolding_horizontal.json -32fdb85b5b62d5a0fb41732874c854788cdd2ba1 assets/create/models/block/copper_shingles.json fb7fb6deebd502946ab57f1b8a9f4a6b5dd48da3 assets/create/models/block/copper_shingle_slab.json 660f61112b8e46dec5050cb0ed4ee936965a7c58 assets/create/models/block/copper_shingle_slab_top.json 5d74be967bbe9feba4b630751f13af817a733d1d assets/create/models/block/copper_shingle_stairs.json 35cb89f29ce3f8d8af13602c08ecd7afbb7cf56a assets/create/models/block/copper_shingle_stairs_inner.json fcb9295f4f388e6d439ec9a3906ca326b6d69077 assets/create/models/block/copper_shingle_stairs_outer.json +32fdb85b5b62d5a0fb41732874c854788cdd2ba1 assets/create/models/block/copper_shingles.json cb218a725f82db34ffe58a5208266e1c768cfc05 assets/create/models/block/copper_side.json d9b4652ca8f1e65007f42d946ecfb38acc3f168f assets/create/models/block/copper_side_alt.json -32f06f39d0b34e4431795aa6e64f87e58dc1597b assets/create/models/block/copper_tiles.json 298c6100de02ed9f813397d8ba38c46f35035c69 assets/create/models/block/copper_tile_slab.json d4422c2d96fb329087d1be70d8b983a8cf6c7f01 assets/create/models/block/copper_tile_slab_top.json fca72048f916d3a3e567b385c948cc1b59711ef4 assets/create/models/block/copper_tile_stairs.json 997479b62ed3d81ab633279ecc2fabd9588a3bf3 assets/create/models/block/copper_tile_stairs_inner.json d5c5bbfb9aaa282e11ad6e6309b1880b172ee653 assets/create/models/block/copper_tile_stairs_outer.json +32f06f39d0b34e4431795aa6e64f87e58dc1597b assets/create/models/block/copper_tiles.json fa2fa91e674eb4de440617049dae34064fd6fa39 assets/create/models/block/copper_valve_handle.json 52ae02c17509e483e35a1b6055296c3a663f85d7 assets/create/models/block/crate/creative/bottom.json 689989ecbd4d59d5836deb8adf7af1d473a377c0 assets/create/models/block/crate/creative/left.json @@ -783,15 +783,15 @@ b3f403f77e3b1b44c56450e387136bca12a84a99 assets/create/models/block/crimson_wind 117d14a1f25cc8ac633bb4cc8a81830a1c016096 assets/create/models/block/crimson_window_pane_side.json ee13522aadfca40f856499d5c29bd86d8f4dda57 assets/create/models/block/crimson_window_pane_side_alt.json 40042ce15d51445ec71b73da34477fa735f3fdd4 assets/create/models/block/cut_andesite.json -5be7d431ac56e2ceb9e3d95589d687f757d5257c assets/create/models/block/cut_andesite_bricks.json -c78e2acf9b54d7370f12e34dcca5c71743f47d55 assets/create/models/block/cut_andesite_bricks_wall_post.json -88e3c8eadf97f772fbafe3b71c8dd27c91c0c0e3 assets/create/models/block/cut_andesite_bricks_wall_side.json -bc264e09c506418b01c6032dcab8ca28080cb70b assets/create/models/block/cut_andesite_bricks_wall_side_tall.json fcbe246aca067dcfeef7afb4e6068b8932da8792 assets/create/models/block/cut_andesite_brick_slab.json e384a98b54ed7317b6ad0e86cf87500491eea824 assets/create/models/block/cut_andesite_brick_slab_top.json 91699e60e29e7524271a2f87200951ee8bfeb8ef assets/create/models/block/cut_andesite_brick_stairs.json e314e0837aed319cdf34a1aaa60f0be6ca169636 assets/create/models/block/cut_andesite_brick_stairs_inner.json aba679c4c6a8d5afc2924d2c9c84af5a2208fde3 assets/create/models/block/cut_andesite_brick_stairs_outer.json +5be7d431ac56e2ceb9e3d95589d687f757d5257c assets/create/models/block/cut_andesite_bricks.json +c78e2acf9b54d7370f12e34dcca5c71743f47d55 assets/create/models/block/cut_andesite_bricks_wall_post.json +88e3c8eadf97f772fbafe3b71c8dd27c91c0c0e3 assets/create/models/block/cut_andesite_bricks_wall_side.json +bc264e09c506418b01c6032dcab8ca28080cb70b assets/create/models/block/cut_andesite_bricks_wall_side_tall.json 8c17ba39e50a440497af089f5fd85649f05bdf8c assets/create/models/block/cut_andesite_slab.json b95ab966cf8c177c799e228759d0cd28c1cfa71f assets/create/models/block/cut_andesite_slab_top.json 81a407a5ff4393b66f784ba4ceee971c3c62de7f assets/create/models/block/cut_andesite_stairs.json @@ -801,15 +801,15 @@ f06abcb3ce691fd30db81b40ea0430462fc972cf assets/create/models/block/cut_andesite 81cef9548137aaff5b6e77d417f387796f2608b2 assets/create/models/block/cut_andesite_wall_side.json dbb99ac37333ee12b7d3859207409aa2599f28eb assets/create/models/block/cut_andesite_wall_side_tall.json a48f77e90c1d02d5b4e6540db723f748118788e9 assets/create/models/block/cut_asurine.json -3b0b7bd63870ac19b9444ce9add9930ec9120821 assets/create/models/block/cut_asurine_bricks.json -89142424e1d702a0f2bc27829304520e48ee1eb3 assets/create/models/block/cut_asurine_bricks_wall_post.json -1f1fcf92e91b1f0d15ba389d6d25e1fba3ad8e5b assets/create/models/block/cut_asurine_bricks_wall_side.json -858d15aff53fe938304bafb52ef32e54e3d44a44 assets/create/models/block/cut_asurine_bricks_wall_side_tall.json 4107317f71d07fb1c113e056c832e963f57b41d7 assets/create/models/block/cut_asurine_brick_slab.json fba2e8dc513184eaa9c4449471b32f206dfe425a assets/create/models/block/cut_asurine_brick_slab_top.json 72bb7b2df330f8d5981f4c12b23429d8d874362d assets/create/models/block/cut_asurine_brick_stairs.json e753ba3830c51539565abbd9b49df9a34f97f2ff assets/create/models/block/cut_asurine_brick_stairs_inner.json ec9182d14517ffc71749e3e016e6546db79e6800 assets/create/models/block/cut_asurine_brick_stairs_outer.json +3b0b7bd63870ac19b9444ce9add9930ec9120821 assets/create/models/block/cut_asurine_bricks.json +89142424e1d702a0f2bc27829304520e48ee1eb3 assets/create/models/block/cut_asurine_bricks_wall_post.json +1f1fcf92e91b1f0d15ba389d6d25e1fba3ad8e5b assets/create/models/block/cut_asurine_bricks_wall_side.json +858d15aff53fe938304bafb52ef32e54e3d44a44 assets/create/models/block/cut_asurine_bricks_wall_side_tall.json b4512f7cef7cef0bc5f85cb955c2dec6de2cbb56 assets/create/models/block/cut_asurine_slab.json 7c1befdd97b1556e9658e968e705c9edbf1ed667 assets/create/models/block/cut_asurine_slab_top.json d04b8a8cf9a50aa7e0b068ceb9a5a2970abc81a7 assets/create/models/block/cut_asurine_stairs.json @@ -819,15 +819,15 @@ ac544a8f948119945aa21362ad26ed8b1c922b0d assets/create/models/block/cut_asurine_ a253210cba60f58e720598323bd0d9ed4c209b4d assets/create/models/block/cut_asurine_wall_side.json c0c2cc13288771699a80c5c80e8e35d352cea684 assets/create/models/block/cut_asurine_wall_side_tall.json a6b10dc7984d22cac7aa314d46ac0928a00e667b assets/create/models/block/cut_calcite.json -6230a499321b175fc441bb662e0655662b3597de assets/create/models/block/cut_calcite_bricks.json -be1462847e9001a062091162802fab2fe6737693 assets/create/models/block/cut_calcite_bricks_wall_post.json -6e6b34468a7a0786efe5f4ebd917a4640b4be6ae assets/create/models/block/cut_calcite_bricks_wall_side.json -8b10c0f4f17f3844cee6d514cc22ddc6cb056c8a assets/create/models/block/cut_calcite_bricks_wall_side_tall.json f046be4f44936946bd3cc2ad5549d112b2e60d97 assets/create/models/block/cut_calcite_brick_slab.json 64953ca8a302ecab9311c617f69e5dcf8c138718 assets/create/models/block/cut_calcite_brick_slab_top.json 19e1b342d05d3cd69c410952dc22507c3c988c15 assets/create/models/block/cut_calcite_brick_stairs.json 18317b0a8bab345abd779f5d43f9620b73df0e67 assets/create/models/block/cut_calcite_brick_stairs_inner.json 0631d4e1bdaf724752f2e55401eb7a54af705b56 assets/create/models/block/cut_calcite_brick_stairs_outer.json +6230a499321b175fc441bb662e0655662b3597de assets/create/models/block/cut_calcite_bricks.json +be1462847e9001a062091162802fab2fe6737693 assets/create/models/block/cut_calcite_bricks_wall_post.json +6e6b34468a7a0786efe5f4ebd917a4640b4be6ae assets/create/models/block/cut_calcite_bricks_wall_side.json +8b10c0f4f17f3844cee6d514cc22ddc6cb056c8a assets/create/models/block/cut_calcite_bricks_wall_side_tall.json 6b35e0f9e6a7e247bf38d8d6d911a2bcc53c2517 assets/create/models/block/cut_calcite_slab.json 0eec7692ee8e119c1258bdb7e852204771c2232d assets/create/models/block/cut_calcite_slab_top.json d07ebf8982e4947852da8b2b0052f6b6000d334f assets/create/models/block/cut_calcite_stairs.json @@ -837,15 +837,15 @@ e8b7b983168ad9f4f4fa1642ca20ff56621935db assets/create/models/block/cut_calcite_ 421e128177bb4dd51391e360f11ba83c5d891cd1 assets/create/models/block/cut_calcite_wall_side.json 5add4bde51bbdd7c229b05f4fabd8a769414fb79 assets/create/models/block/cut_calcite_wall_side_tall.json 2e93da554ea72b90a576bbc9230aea373d3aed0f assets/create/models/block/cut_crimsite.json -39d1a3cdd978c761bc0d67baaba82d11953fc2a0 assets/create/models/block/cut_crimsite_bricks.json -8614cb38c52447fea5245fcf295a951a977071c0 assets/create/models/block/cut_crimsite_bricks_wall_post.json -b0b16f4a2f6dd3f77ec4f65f05e9edb70a196316 assets/create/models/block/cut_crimsite_bricks_wall_side.json -ac41e5b092c6ed81d14004f9427b6151b88dc924 assets/create/models/block/cut_crimsite_bricks_wall_side_tall.json c2474a10109d0476a46d2a509fc1cd37cd52822d assets/create/models/block/cut_crimsite_brick_slab.json efeb149835a389409b7f94bc35765b0871ad7342 assets/create/models/block/cut_crimsite_brick_slab_top.json e5096a1bae43341bae5706f02cd6d564b5a82502 assets/create/models/block/cut_crimsite_brick_stairs.json af3c0018e5e12bbe0f118bc0174b6ca513ae58ae assets/create/models/block/cut_crimsite_brick_stairs_inner.json ed30baef426f2ccf158d87111c7b53f3600bc32a assets/create/models/block/cut_crimsite_brick_stairs_outer.json +39d1a3cdd978c761bc0d67baaba82d11953fc2a0 assets/create/models/block/cut_crimsite_bricks.json +8614cb38c52447fea5245fcf295a951a977071c0 assets/create/models/block/cut_crimsite_bricks_wall_post.json +b0b16f4a2f6dd3f77ec4f65f05e9edb70a196316 assets/create/models/block/cut_crimsite_bricks_wall_side.json +ac41e5b092c6ed81d14004f9427b6151b88dc924 assets/create/models/block/cut_crimsite_bricks_wall_side_tall.json a6cdd4b227210b7487b8431b8d76bbe490636b81 assets/create/models/block/cut_crimsite_slab.json 5c585dba4dbfa9ff0a22a84aa726260cffdeebeb assets/create/models/block/cut_crimsite_slab_top.json 91f60b4277ca48dabfb5d3eebb1ed64a2681a083 assets/create/models/block/cut_crimsite_stairs.json @@ -855,15 +855,15 @@ e6b39a0b1dbab462479fc60fab2efc6a9ceb6a55 assets/create/models/block/cut_crimsite 5b3783862e50fde6ffffc92068900afcc066002f assets/create/models/block/cut_crimsite_wall_side.json b59fbbfe9c6738b1f93f03d59a747f5610164c34 assets/create/models/block/cut_crimsite_wall_side_tall.json 144ec3864fb0a7981e74d357200a96033c75a2d6 assets/create/models/block/cut_deepslate.json -0d599ae1b4e9309f2a7b3362e86061e2150ba3ec assets/create/models/block/cut_deepslate_bricks.json -601894e096edbcd3d96ce0160f06e17a4efca819 assets/create/models/block/cut_deepslate_bricks_wall_post.json -42db46cb5c9c02d684c86f3a518feb3348d83fa0 assets/create/models/block/cut_deepslate_bricks_wall_side.json -c046436d59c350c6beb6b395675513c12184ffe2 assets/create/models/block/cut_deepslate_bricks_wall_side_tall.json af8c7c652e75bf904093bbafc1cf805f842a39c9 assets/create/models/block/cut_deepslate_brick_slab.json 2a01dd0244b07f28454c061a565d1028ca7e3066 assets/create/models/block/cut_deepslate_brick_slab_top.json 62d39eec3621204de82377e74936b9cd338e8004 assets/create/models/block/cut_deepslate_brick_stairs.json 5f90dfbb45b57bd894bf03fcc6c347cb525e3a73 assets/create/models/block/cut_deepslate_brick_stairs_inner.json 512d588c77bdf5a7232826e2f4ce4b3cb991d0ce assets/create/models/block/cut_deepslate_brick_stairs_outer.json +0d599ae1b4e9309f2a7b3362e86061e2150ba3ec assets/create/models/block/cut_deepslate_bricks.json +601894e096edbcd3d96ce0160f06e17a4efca819 assets/create/models/block/cut_deepslate_bricks_wall_post.json +42db46cb5c9c02d684c86f3a518feb3348d83fa0 assets/create/models/block/cut_deepslate_bricks_wall_side.json +c046436d59c350c6beb6b395675513c12184ffe2 assets/create/models/block/cut_deepslate_bricks_wall_side_tall.json c79ae6e97e94d36f2586865ea63f3fab43f8ccbc assets/create/models/block/cut_deepslate_slab.json 5978b93805ccf0bdd953938b34a8dd0ffdcf5565 assets/create/models/block/cut_deepslate_slab_top.json 06a508b2395c3f738d2c5651f366792ee9b9c5ec assets/create/models/block/cut_deepslate_stairs.json @@ -873,15 +873,15 @@ c2850e9f223c459ba53d575a1ef8231589c48c0b assets/create/models/block/cut_deepslat e901746d3e50fe7d9b79d268f4d02251d5cf95f4 assets/create/models/block/cut_deepslate_wall_side.json 1ef794aab31a10bf150a0015cd46e5b5f3c70042 assets/create/models/block/cut_deepslate_wall_side_tall.json 4abb502ea3f6764797641f55a2c48f4858be1ba6 assets/create/models/block/cut_diorite.json -e97babf115a4f81f8555994aba435cf76bebf7a3 assets/create/models/block/cut_diorite_bricks.json -4f7cf44e4d6431587266a4fac78c0812e99d780c assets/create/models/block/cut_diorite_bricks_wall_post.json -1f96f9e190d8e28496ce2db5712f33e449215985 assets/create/models/block/cut_diorite_bricks_wall_side.json -45246192d9cd39837b426e425fc5082422642b65 assets/create/models/block/cut_diorite_bricks_wall_side_tall.json ab61b1b94946f315006a29113f594c234d796bee assets/create/models/block/cut_diorite_brick_slab.json 73597772386c6bbd38907cbea8db816f174a9f8f assets/create/models/block/cut_diorite_brick_slab_top.json c9fbd953ef0789a0e9a915d5f283fd09a76784d6 assets/create/models/block/cut_diorite_brick_stairs.json 5d721f1b3f4376a91707b56950a1f9635adbe603 assets/create/models/block/cut_diorite_brick_stairs_inner.json 9a446bf02732e1873fa96d7745fced0fa04d48d6 assets/create/models/block/cut_diorite_brick_stairs_outer.json +e97babf115a4f81f8555994aba435cf76bebf7a3 assets/create/models/block/cut_diorite_bricks.json +4f7cf44e4d6431587266a4fac78c0812e99d780c assets/create/models/block/cut_diorite_bricks_wall_post.json +1f96f9e190d8e28496ce2db5712f33e449215985 assets/create/models/block/cut_diorite_bricks_wall_side.json +45246192d9cd39837b426e425fc5082422642b65 assets/create/models/block/cut_diorite_bricks_wall_side_tall.json 15195975e7e0ffb7010591b957a657f492e6d59d assets/create/models/block/cut_diorite_slab.json 01c320637843dc0d8b74b48b8d6946cd663d51f6 assets/create/models/block/cut_diorite_slab_top.json 7dcbfe4dc2ec62345da660ecc6ca44056fcd64e7 assets/create/models/block/cut_diorite_stairs.json @@ -891,15 +891,15 @@ c9fbd953ef0789a0e9a915d5f283fd09a76784d6 assets/create/models/block/cut_diorite_ 29075eaaba51ba158f030c2a9583ed5ba52379c8 assets/create/models/block/cut_diorite_wall_side.json 1fb50473359147c7147ea85bc1907e6015ce06bc assets/create/models/block/cut_diorite_wall_side_tall.json 59ee053a884bc9731b4d1b01ae22e0e2b5916cfb assets/create/models/block/cut_dripstone.json -6a4b26a117f58d0187b2cc0c5b117ef71d03d4e9 assets/create/models/block/cut_dripstone_bricks.json -0bb1fa8fb9698dae61096483a01b41bf829666b0 assets/create/models/block/cut_dripstone_bricks_wall_post.json -2019fdc38b401bac72e8344d118d85049ec3efb9 assets/create/models/block/cut_dripstone_bricks_wall_side.json -ebb790b2b6f47d40c92c9bba680e82cb8f054fa9 assets/create/models/block/cut_dripstone_bricks_wall_side_tall.json 84d714b29dcb7eb95a82de8d48491413e26d5fa8 assets/create/models/block/cut_dripstone_brick_slab.json 28b0b1a641d11f8ade57c444e4c1bfd9d617f66a assets/create/models/block/cut_dripstone_brick_slab_top.json 05900c156a6341c12b366790c7e8d15e59a873f0 assets/create/models/block/cut_dripstone_brick_stairs.json 35fb2c83dc89b96951c69253f7502f78c903a9b8 assets/create/models/block/cut_dripstone_brick_stairs_inner.json f69244c1706c95aaadd32d45a24c91ce0848509f assets/create/models/block/cut_dripstone_brick_stairs_outer.json +6a4b26a117f58d0187b2cc0c5b117ef71d03d4e9 assets/create/models/block/cut_dripstone_bricks.json +0bb1fa8fb9698dae61096483a01b41bf829666b0 assets/create/models/block/cut_dripstone_bricks_wall_post.json +2019fdc38b401bac72e8344d118d85049ec3efb9 assets/create/models/block/cut_dripstone_bricks_wall_side.json +ebb790b2b6f47d40c92c9bba680e82cb8f054fa9 assets/create/models/block/cut_dripstone_bricks_wall_side_tall.json 9e42cf588f57de5166f2a2ccdae656743c8b9481 assets/create/models/block/cut_dripstone_slab.json 0da2f782d8ad8fecd81b98c72db182b817bf19eb assets/create/models/block/cut_dripstone_slab_top.json b3c903a1edcd1786ea51a2ccdad5734a1d04ea98 assets/create/models/block/cut_dripstone_stairs.json @@ -909,15 +909,15 @@ b3c903a1edcd1786ea51a2ccdad5734a1d04ea98 assets/create/models/block/cut_dripston 7fab5102d7fa4cd824b9393425639d05727b2ad2 assets/create/models/block/cut_dripstone_wall_side.json c41514cda1c9f5d942d222cbc5f6e620e367afc6 assets/create/models/block/cut_dripstone_wall_side_tall.json dff602c8d2fcd1ceca79f90ae15dbdfbd6cb157d assets/create/models/block/cut_granite.json -31c5299a42f82992e50f711e1e33549c373bd034 assets/create/models/block/cut_granite_bricks.json -ef5a851e57cc4b9c0e625176b1256441e1c17c66 assets/create/models/block/cut_granite_bricks_wall_post.json -815e8dc551c3e813b0b2af29df23a28860de0b53 assets/create/models/block/cut_granite_bricks_wall_side.json -ba241f9c82e27dd98ba6f4e4180922388ab5d1a3 assets/create/models/block/cut_granite_bricks_wall_side_tall.json 9e00dc8fcee23548c0cebda6eadbcfc559e4c20b assets/create/models/block/cut_granite_brick_slab.json 5ad061096451f74e773c3030f96d59424aa93314 assets/create/models/block/cut_granite_brick_slab_top.json 94f8ce607aae5c04ccf9e56f177f9d69203ae879 assets/create/models/block/cut_granite_brick_stairs.json 11d511844fec3bfd05cac8b788332f2decd53021 assets/create/models/block/cut_granite_brick_stairs_inner.json 418eb6a2b52e748a26c2d1914c6c1de94106589f assets/create/models/block/cut_granite_brick_stairs_outer.json +31c5299a42f82992e50f711e1e33549c373bd034 assets/create/models/block/cut_granite_bricks.json +ef5a851e57cc4b9c0e625176b1256441e1c17c66 assets/create/models/block/cut_granite_bricks_wall_post.json +815e8dc551c3e813b0b2af29df23a28860de0b53 assets/create/models/block/cut_granite_bricks_wall_side.json +ba241f9c82e27dd98ba6f4e4180922388ab5d1a3 assets/create/models/block/cut_granite_bricks_wall_side_tall.json 81be5e86cbdaec4945d3ccaf6d376f69c49f40d6 assets/create/models/block/cut_granite_slab.json f72a14e7cf3dd7d93b4462a3bee49683353dfb57 assets/create/models/block/cut_granite_slab_top.json 33bf924f01aae3a7720475f4b32b3a637e69ee36 assets/create/models/block/cut_granite_stairs.json @@ -927,15 +927,15 @@ fb4969e562ad2039d3bad2dc57a6845d3243d453 assets/create/models/block/cut_granite_ 2972b40134bcb15950a0118306f0251ff5e377b7 assets/create/models/block/cut_granite_wall_side.json abbe71fd17dbb5f176553db2f6edf2f1f7d8974a assets/create/models/block/cut_granite_wall_side_tall.json 019d3c4ffb39e328b5458aee44fee90e0ecbd829 assets/create/models/block/cut_limestone.json -7eae0f9766506f713933bde9f301d2f7f2bbef13 assets/create/models/block/cut_limestone_bricks.json -817e8cf8956af36c70e4b4e30b5d141086d006dd assets/create/models/block/cut_limestone_bricks_wall_post.json -1291cacff1b0980e58b5702a84c9b87ac5ef835d assets/create/models/block/cut_limestone_bricks_wall_side.json -6c9bc8803fe17ac623bde56f85683dd2ff13c33e assets/create/models/block/cut_limestone_bricks_wall_side_tall.json c93f33ba39c62b10dfb94c6e1c339cd4fbebffae assets/create/models/block/cut_limestone_brick_slab.json b12a340897ba98ed732a91dbd4129db7a7188e68 assets/create/models/block/cut_limestone_brick_slab_top.json 3e90b32d95ad1cf7b8a16dae3c16724510d41490 assets/create/models/block/cut_limestone_brick_stairs.json b2e7311667d14b2aa8c00e207f69f76207226567 assets/create/models/block/cut_limestone_brick_stairs_inner.json aac619ec1fb8aa56f1752ad3f354f9cb128771f8 assets/create/models/block/cut_limestone_brick_stairs_outer.json +7eae0f9766506f713933bde9f301d2f7f2bbef13 assets/create/models/block/cut_limestone_bricks.json +817e8cf8956af36c70e4b4e30b5d141086d006dd assets/create/models/block/cut_limestone_bricks_wall_post.json +1291cacff1b0980e58b5702a84c9b87ac5ef835d assets/create/models/block/cut_limestone_bricks_wall_side.json +6c9bc8803fe17ac623bde56f85683dd2ff13c33e assets/create/models/block/cut_limestone_bricks_wall_side_tall.json adc21af1c07edaf0573cfd2c95ebe38e50f7282c assets/create/models/block/cut_limestone_slab.json 2d1ea8fc5c8ce5549c7f7888371b6612bf0f5301 assets/create/models/block/cut_limestone_slab_top.json c1416808a2178996be75e0a9c1cd45849fcd6646 assets/create/models/block/cut_limestone_stairs.json @@ -945,15 +945,15 @@ c1416808a2178996be75e0a9c1cd45849fcd6646 assets/create/models/block/cut_limeston 2b5e65e662069a5c59e702224778dd407f5d11dd assets/create/models/block/cut_limestone_wall_side.json 052f130fef646242acccbbed2b510add21e18921 assets/create/models/block/cut_limestone_wall_side_tall.json 66cb6054821d45a60ae4d4d1d904dbef0b9f7c0f assets/create/models/block/cut_ochrum.json -0a7e38e3ac32352c5b3ec56a8c26212dbbb637a3 assets/create/models/block/cut_ochrum_bricks.json -47d0c58dd190f1ea894a5ca40ea7efd54a845d3e assets/create/models/block/cut_ochrum_bricks_wall_post.json -b502b5b213996bce0a626d86414045c80921511e assets/create/models/block/cut_ochrum_bricks_wall_side.json -c3f27545b3b7654c3e7a2df6b482d1a9895ccae9 assets/create/models/block/cut_ochrum_bricks_wall_side_tall.json ce16ec490ae8a33671502804e0b45fc42b6f228f assets/create/models/block/cut_ochrum_brick_slab.json fcbee94fdbd96b0b3d4aa245c6c87443abd1de90 assets/create/models/block/cut_ochrum_brick_slab_top.json 827349ed3eb05f5fe700e8f5816bcd82d0347612 assets/create/models/block/cut_ochrum_brick_stairs.json aa81d4135400eb40f891f8c41fcf7fa516ef64f1 assets/create/models/block/cut_ochrum_brick_stairs_inner.json ecd7e1cb9cae717e35eeb58dbe482833e98f5ac0 assets/create/models/block/cut_ochrum_brick_stairs_outer.json +0a7e38e3ac32352c5b3ec56a8c26212dbbb637a3 assets/create/models/block/cut_ochrum_bricks.json +47d0c58dd190f1ea894a5ca40ea7efd54a845d3e assets/create/models/block/cut_ochrum_bricks_wall_post.json +b502b5b213996bce0a626d86414045c80921511e assets/create/models/block/cut_ochrum_bricks_wall_side.json +c3f27545b3b7654c3e7a2df6b482d1a9895ccae9 assets/create/models/block/cut_ochrum_bricks_wall_side_tall.json e23998f88eb77826f5e4d58f3f4bb41a2e09ea97 assets/create/models/block/cut_ochrum_slab.json cd14f1abe3d0c65fbdd052f4a8e0b8fc2a15ad0e assets/create/models/block/cut_ochrum_slab_top.json a751feb4b609df141f971e341b204e76379dcda7 assets/create/models/block/cut_ochrum_stairs.json @@ -963,15 +963,15 @@ bed6843e39e7e771f6de151dfab0586d3ebad58c assets/create/models/block/cut_ochrum_s df267fb690642cac139aaabefa9eab802f13ddc1 assets/create/models/block/cut_ochrum_wall_side.json ed363b80cc61cb4d0b6fad9da855a0543ecaccc9 assets/create/models/block/cut_ochrum_wall_side_tall.json a65a54a08d9cc3b45e2320482dc2d9e317dd4f3d assets/create/models/block/cut_scorchia.json -9c93a554ab680d7c98c648c16472b52cc2646c50 assets/create/models/block/cut_scorchia_bricks.json -615dc444bb677caa774a4e95686ac24ebe4ec6dc assets/create/models/block/cut_scorchia_bricks_wall_post.json -758a2ad6677f857fbe955c26853eadc7150c105a assets/create/models/block/cut_scorchia_bricks_wall_side.json -f918dfa0751589d18a3eb054c290f669b5c61308 assets/create/models/block/cut_scorchia_bricks_wall_side_tall.json a032cf0a77e4f416ed153b1ffa834c065a73b2ae assets/create/models/block/cut_scorchia_brick_slab.json 716fc6ef58c240b3e6b45acf08d6e1472fe38e7c assets/create/models/block/cut_scorchia_brick_slab_top.json b2870e5ba7c5d5053b3639bf0aa1771ee050810b assets/create/models/block/cut_scorchia_brick_stairs.json 3e8a815eabd1991039a8ad18cedc9c57f46cd097 assets/create/models/block/cut_scorchia_brick_stairs_inner.json 0a9dc3149e7219a70642c242cd86dce5ba5cf4cc assets/create/models/block/cut_scorchia_brick_stairs_outer.json +9c93a554ab680d7c98c648c16472b52cc2646c50 assets/create/models/block/cut_scorchia_bricks.json +615dc444bb677caa774a4e95686ac24ebe4ec6dc assets/create/models/block/cut_scorchia_bricks_wall_post.json +758a2ad6677f857fbe955c26853eadc7150c105a assets/create/models/block/cut_scorchia_bricks_wall_side.json +f918dfa0751589d18a3eb054c290f669b5c61308 assets/create/models/block/cut_scorchia_bricks_wall_side_tall.json a85c4d0467c6746a8ef9c6ac0167d3e16f307d4e assets/create/models/block/cut_scorchia_slab.json 23fd6c65ea83f7ca7ef67dd7faf902c4fa662d70 assets/create/models/block/cut_scorchia_slab_top.json e42329f6fa3aeb958d2349a5442856e9473dc6b5 assets/create/models/block/cut_scorchia_stairs.json @@ -981,15 +981,15 @@ b9a911675861fee414f82c745399a7707c258f77 assets/create/models/block/cut_scorchia e61af066960897d50dc7f7bc17f95baa962829bd assets/create/models/block/cut_scorchia_wall_side.json 846f84efddca7d51b58ebe5e3bbed78312fb052d assets/create/models/block/cut_scorchia_wall_side_tall.json ce9dcf5b7fe58a97fab832fb98b4f5b6d3778255 assets/create/models/block/cut_scoria.json -fa3ef2bb65299c985b70f6959421e243a9ebc6d8 assets/create/models/block/cut_scoria_bricks.json -24ea1a30f68a918e6737dc8d9babe4528af5716a assets/create/models/block/cut_scoria_bricks_wall_post.json -ba7ae110d51fe510566ab42f5ead299b4409f2b7 assets/create/models/block/cut_scoria_bricks_wall_side.json -f04d12bc4e0b939bb443abcc6eb808e66c352c66 assets/create/models/block/cut_scoria_bricks_wall_side_tall.json edf04cbfb19b6ce99c1b74a71d40cd40c8120551 assets/create/models/block/cut_scoria_brick_slab.json f05725fd6d2764b277f01985d0e2fcbd3bf4a41e assets/create/models/block/cut_scoria_brick_slab_top.json 4bccbaef9dd9a8322087d3feb973e14d740ff27a assets/create/models/block/cut_scoria_brick_stairs.json 13f3b55dfdd97e68a6d525166618477e5bcb336d assets/create/models/block/cut_scoria_brick_stairs_inner.json 465862fb20542cae723fd72818be73aec05dad60 assets/create/models/block/cut_scoria_brick_stairs_outer.json +fa3ef2bb65299c985b70f6959421e243a9ebc6d8 assets/create/models/block/cut_scoria_bricks.json +24ea1a30f68a918e6737dc8d9babe4528af5716a assets/create/models/block/cut_scoria_bricks_wall_post.json +ba7ae110d51fe510566ab42f5ead299b4409f2b7 assets/create/models/block/cut_scoria_bricks_wall_side.json +f04d12bc4e0b939bb443abcc6eb808e66c352c66 assets/create/models/block/cut_scoria_bricks_wall_side_tall.json aeef239ca6b0eee527f75091d11d4a947740416d assets/create/models/block/cut_scoria_slab.json 5dfda9fa8117d35ebc324a5c9cb026e206e3b936 assets/create/models/block/cut_scoria_slab_top.json dfe8dbdb6deca69d847ee46fedfefe2da98dc329 assets/create/models/block/cut_scoria_stairs.json @@ -999,15 +999,15 @@ e0b2a94ff4b3f1c1e4282c9c8eecf2583bd7c68e assets/create/models/block/cut_scoria_w cf18e3fde94e3ba611f430fe527a9042a57e6936 assets/create/models/block/cut_scoria_wall_side.json 92475d7758b2bf582c585c2aafa6510f330c6f45 assets/create/models/block/cut_scoria_wall_side_tall.json 9f6543d21d9c24a429aae00511e6dbf61caf8030 assets/create/models/block/cut_tuff.json -8b3d9fe37ab7fda79ea4d90f674c525350883ba0 assets/create/models/block/cut_tuff_bricks.json -6b80481e15ff3d6eb40a42128da883c2027e0074 assets/create/models/block/cut_tuff_bricks_wall_post.json -057a34015b49565cb9858a2eea995a446ac0cfd4 assets/create/models/block/cut_tuff_bricks_wall_side.json -9f20bd04ef163076db9a8bf83c20cc802b57ae60 assets/create/models/block/cut_tuff_bricks_wall_side_tall.json 8c16599fda76c38978a2faa14f842a68fbbe4b9c assets/create/models/block/cut_tuff_brick_slab.json 696036e5900bdbb366dd49f5df71a1e701fd8ee3 assets/create/models/block/cut_tuff_brick_slab_top.json 54d4603e36be86e88d9302d61eab81e76cac1bbc assets/create/models/block/cut_tuff_brick_stairs.json 0ebb41a1ce5bf4ca86cbaf95e83cd2edf8f309ea assets/create/models/block/cut_tuff_brick_stairs_inner.json 5d5ed291db4b4bca464717c7fcde682b33d71c3f assets/create/models/block/cut_tuff_brick_stairs_outer.json +8b3d9fe37ab7fda79ea4d90f674c525350883ba0 assets/create/models/block/cut_tuff_bricks.json +6b80481e15ff3d6eb40a42128da883c2027e0074 assets/create/models/block/cut_tuff_bricks_wall_post.json +057a34015b49565cb9858a2eea995a446ac0cfd4 assets/create/models/block/cut_tuff_bricks_wall_side.json +9f20bd04ef163076db9a8bf83c20cc802b57ae60 assets/create/models/block/cut_tuff_bricks_wall_side_tall.json f2a904b7943555e8ec9dcc07513ca1ad9af809c3 assets/create/models/block/cut_tuff_slab.json ea74bb8a69f6acbd520ac8922e147495e5f99f6f assets/create/models/block/cut_tuff_slab_top.json 0262700e59de947907a04fdea9974f9d7e5a22f2 assets/create/models/block/cut_tuff_stairs.json @@ -1017,15 +1017,15 @@ ea74bb8a69f6acbd520ac8922e147495e5f99f6f assets/create/models/block/cut_tuff_sla 8c6492dc9e09359e5bac67ae4d473cffc8f93dbb assets/create/models/block/cut_tuff_wall_side.json f5f24066b6281303f52e25745881d5bca8c49c54 assets/create/models/block/cut_tuff_wall_side_tall.json 167e9a084987bcf7f67f655d0de88ae8ca2fcebb assets/create/models/block/cut_veridium.json -f8ab87c34f211a63525f6d386397face67460f8c assets/create/models/block/cut_veridium_bricks.json -e4e717fa8412032e184aebd1186470f41a2089c0 assets/create/models/block/cut_veridium_bricks_wall_post.json -8c40ccb8f10ef8dcda1bef46ad3490f697d178d2 assets/create/models/block/cut_veridium_bricks_wall_side.json -2c4671c66d904e15883ec3a14681b97ac537135c assets/create/models/block/cut_veridium_bricks_wall_side_tall.json 07c330c501375d5c316677edee80fb040c0fc237 assets/create/models/block/cut_veridium_brick_slab.json 4c8c660afe72e8ce9eaef53a37fdc63eb0c69513 assets/create/models/block/cut_veridium_brick_slab_top.json f802e4ae758e2c37c3129594ce4f5d9ffcfe173d assets/create/models/block/cut_veridium_brick_stairs.json 0d60d5cd0269e05816d28fcbbd2c680fe60cd316 assets/create/models/block/cut_veridium_brick_stairs_inner.json 22656f90b55aeaeeffa448b5f061fb26b5de7b0f assets/create/models/block/cut_veridium_brick_stairs_outer.json +f8ab87c34f211a63525f6d386397face67460f8c assets/create/models/block/cut_veridium_bricks.json +e4e717fa8412032e184aebd1186470f41a2089c0 assets/create/models/block/cut_veridium_bricks_wall_post.json +8c40ccb8f10ef8dcda1bef46ad3490f697d178d2 assets/create/models/block/cut_veridium_bricks_wall_side.json +2c4671c66d904e15883ec3a14681b97ac537135c assets/create/models/block/cut_veridium_bricks_wall_side_tall.json d736230e9b49a9fd40bc8f31df4d5144cdb429c8 assets/create/models/block/cut_veridium_slab.json 750e536c7b71dfb3a005d9b7a128ac435461e57f assets/create/models/block/cut_veridium_slab_top.json 8b05c19560e97ce15a66202717e3d32f6ee153a9 assets/create/models/block/cut_veridium_stairs.json @@ -1052,22 +1052,25 @@ db89bc32d0e466bc5008aa7091c682ba3aeec611 assets/create/models/block/diorite_pill a21387ab955f2b91e402b2189145f5fd6623592d assets/create/models/block/diorite_pillar_horizontal.json 44af455badc2b35a763007bba3537bda7d0ac289 assets/create/models/block/dripstone_pillar.json 1e23e3758e3311d0063c83742abb750a05021075 assets/create/models/block/dripstone_pillar_horizontal.json -19a773f91c58c49301f35965bac02d0c05fb2764 assets/create/models/block/exposed_copper_shingles.json a3420b91fdebec40e508a5eebb145c0201bd80c8 assets/create/models/block/exposed_copper_shingle_slab.json 4178ea5e50ee17b3c15f4a59efd019c4a19bb892 assets/create/models/block/exposed_copper_shingle_slab_top.json dd2d747774abc86e428a883e299db66cded78e11 assets/create/models/block/exposed_copper_shingle_stairs.json b6845da62d96a33cee624bb70360e256b26eda83 assets/create/models/block/exposed_copper_shingle_stairs_inner.json 3d8b758e50e75c5adc26ab6f39f9d73f00866673 assets/create/models/block/exposed_copper_shingle_stairs_outer.json -9cb20c9d41629d8b9426cb65829365d10966338f assets/create/models/block/exposed_copper_tiles.json +19a773f91c58c49301f35965bac02d0c05fb2764 assets/create/models/block/exposed_copper_shingles.json cd21d9d2935b6d0103502e2731c11ea27ff64ecf assets/create/models/block/exposed_copper_tile_slab.json 0ec039ba59fb0028183433e52131ff355ace5bff assets/create/models/block/exposed_copper_tile_slab_top.json c51dbd34996ac4513234800e427ac308067d5e1d assets/create/models/block/exposed_copper_tile_stairs.json 68772d4352dc7ade995dfa57ba41a38ef819e855 assets/create/models/block/exposed_copper_tile_stairs_inner.json d932671822ba93b71a9c8b50e7207803a1c4dbab assets/create/models/block/exposed_copper_tile_stairs_outer.json +9cb20c9d41629d8b9426cb65829365d10966338f assets/create/models/block/exposed_copper_tiles.json 2d1ade82820569936fd3021a877283474ced09d0 assets/create/models/block/fake_track.json 9e41f0b90dd1e71766c9d07bdb75d1e553f3392f assets/create/models/block/fluid_pipe/d_x.json 13507730f6ca6462c4cfeddc46e5b21e93fb1287 assets/create/models/block/fluid_pipe/d_y.json 84c09934d3537343a1226389993dabfa850b745e assets/create/models/block/fluid_pipe/d_z.json +b8fd54e514bd50fb287c6b758647818c6b08ef75 assets/create/models/block/fluid_pipe/l_x.json +e985ff9dbe7324cf69ab38e6e9e85c9b554af56c assets/create/models/block/fluid_pipe/l_y.json +e24957d63bac1e754fcc1647a4a86337a67f6298 assets/create/models/block/fluid_pipe/l_z.json eacc5ee5f164ccc7c13cfbbd37a92b401222debe assets/create/models/block/fluid_pipe/ld_x.json 33fc0ecce85fae051c54d5a538793d7081238894 assets/create/models/block/fluid_pipe/ld_y.json 638f1a259cabed1f8d63c6fdaa6d4d4dff539e7d assets/create/models/block/fluid_pipe/ld_z.json @@ -1077,24 +1080,21 @@ c52521cd566294c797312104284ddd343fad9c2e assets/create/models/block/fluid_pipe/l 99637310d3ca1ccfbe62b03aa9b0d82a0cf6f724 assets/create/models/block/fluid_pipe/lu_x.json 986800d441e95553464d1869d39baf456f5d70dc assets/create/models/block/fluid_pipe/lu_y.json 11dcf7d2dcd0df9b043035cb072deee96ab9e6da assets/create/models/block/fluid_pipe/lu_z.json -b8fd54e514bd50fb287c6b758647818c6b08ef75 assets/create/models/block/fluid_pipe/l_x.json -e985ff9dbe7324cf69ab38e6e9e85c9b554af56c assets/create/models/block/fluid_pipe/l_y.json -e24957d63bac1e754fcc1647a4a86337a67f6298 assets/create/models/block/fluid_pipe/l_z.json +d44ff2aed71039a7d0ff913d0d9e8398e1318f39 assets/create/models/block/fluid_pipe/r_x.json +92d4044b51a90da0b2277b0613c7ca0bb80c66fe assets/create/models/block/fluid_pipe/r_y.json +fb9a23de00ef4edb4f7e24fb60de345cd12e513f assets/create/models/block/fluid_pipe/r_z.json bde9ec36b86113a6ca7a51a4f405994460a2eb56 assets/create/models/block/fluid_pipe/rd_x.json bd325f5b37ff08328ddddeeceac1a41be586d20a assets/create/models/block/fluid_pipe/rd_y.json 28f351fd215af3a991ccd9aa05c57b9cd9e6f58d assets/create/models/block/fluid_pipe/rd_z.json 1ff3ea321aeacca70709eb76370c11c7f13163b6 assets/create/models/block/fluid_pipe/ru_x.json 95bc5342fd3909981430c2e13ef98cdbd8f02709 assets/create/models/block/fluid_pipe/ru_y.json e1fc0d1297a83749ac55f51c9cf33ff2ecc9fdc2 assets/create/models/block/fluid_pipe/ru_z.json -d44ff2aed71039a7d0ff913d0d9e8398e1318f39 assets/create/models/block/fluid_pipe/r_x.json -92d4044b51a90da0b2277b0613c7ca0bb80c66fe assets/create/models/block/fluid_pipe/r_y.json -fb9a23de00ef4edb4f7e24fb60de345cd12e513f assets/create/models/block/fluid_pipe/r_z.json -65a41f4b680af197776e03cae6f1815b6d04def2 assets/create/models/block/fluid_pipe/ud_x.json -26398801d89889ffe17b6513b786d27707f6a480 assets/create/models/block/fluid_pipe/ud_y.json -07747cc2b936e1b326bae7ac32a8a5ba77fdffa9 assets/create/models/block/fluid_pipe/ud_z.json 4e3debb2ba60398a0730866f781e0455f4316610 assets/create/models/block/fluid_pipe/u_x.json 0f98b30ba09706b8a5ee09aeef912b39acea0216 assets/create/models/block/fluid_pipe/u_y.json 83bf9b1af633c319c051055170debff4cc3508c0 assets/create/models/block/fluid_pipe/u_z.json +65a41f4b680af197776e03cae6f1815b6d04def2 assets/create/models/block/fluid_pipe/ud_x.json +26398801d89889ffe17b6513b786d27707f6a480 assets/create/models/block/fluid_pipe/ud_y.json +07747cc2b936e1b326bae7ac32a8a5ba77fdffa9 assets/create/models/block/fluid_pipe/ud_z.json 5f70af15ec2569c68a17d31024c7a37cb5c68c7e assets/create/models/block/framed_glass.json f0100e1d44146b256998fbd2af05da80d147e8d9 assets/create/models/block/framed_glass_pane_noside.json 4a032c6ae3f459e3349c2a2218da186170c31e03 assets/create/models/block/framed_glass_pane_noside_alt.json @@ -1167,14 +1167,14 @@ bcd3d28b8a062649301648ea5e2d0463f93d008d assets/create/models/block/light_blue_v d1813d0f548fcddb361df7cc3b5d97582842b10f assets/create/models/block/light_gray_seat.json 4ec5d701dd8b2d8c3dc44d05f527a3d737002cd4 assets/create/models/block/light_gray_toolbox.json adb8dbed70419e0310e7a20f3656bf325b348434 assets/create/models/block/light_gray_valve_handle.json -8f53caad3899a30be5087a0ba155080834418cc0 assets/create/models/block/limestone.json -2b80f9421c2fe902d55d9bd95183ad4bae46c315 assets/create/models/block/limestone_pillar.json -fb18280a2a708f60b00cc7c675804c219784871a assets/create/models/block/limestone_pillar_horizontal.json 2f040681214af58a97e70d3a6e77a0fc2e02c624 assets/create/models/block/lime_nixie_tube.json 5a95a72444f523cfba6e8c5adf8eacbb37e2d21e assets/create/models/block/lime_sail.json 09e7bf50cf88c449dbd9e77829cdb5afffb7d88d assets/create/models/block/lime_seat.json b92822a01e4fbed2463b1bdf7dcc736023988e20 assets/create/models/block/lime_toolbox.json 802b47f34b1053b7af980b08b6511f468e7dd7c1 assets/create/models/block/lime_valve_handle.json +8f53caad3899a30be5087a0ba155080834418cc0 assets/create/models/block/limestone.json +2b80f9421c2fe902d55d9bd95183ad4bae46c315 assets/create/models/block/limestone_pillar.json +fb18280a2a708f60b00cc7c675804c219784871a assets/create/models/block/limestone_pillar_horizontal.json 84b9ac6eafdbd037f3ff558c250a8b8952415af1 assets/create/models/block/linear_chassis.json 29ee936c09c1222c6a144e5bb39577b5a9cd28bf assets/create/models/block/linear_chassis_bottom.json a1a3804ddcb1db0a7b5c0693555f8eb326950dd0 assets/create/models/block/linear_chassis_top.json @@ -1214,18 +1214,18 @@ f9010894858512398bddd5d31b922e12594d2e3c assets/create/models/block/ornate_iron_ 92637fbd6bf54891411b32a494064b9a48e59411 assets/create/models/block/ornate_iron_window_pane_post.json 8416d497e7fc8ca4f9f4c608ccc0651036850256 assets/create/models/block/ornate_iron_window_pane_side.json 1cdaa9d4bd23f7b1eb14672dc9322d9dad966502 assets/create/models/block/ornate_iron_window_pane_side_alt.json -561beafce41b9e9c0b07bc6b7176dd4f6918c116 assets/create/models/block/oxidized_copper_shingles.json 7e0bab8109e322c6db5fe1d5999c06536c21c6eb assets/create/models/block/oxidized_copper_shingle_slab.json 42df32c4e2d1ffb2ee62748becfd1717118b440c assets/create/models/block/oxidized_copper_shingle_slab_top.json b55a733e3e68cfbd08d45bb9ac56deef9f728b60 assets/create/models/block/oxidized_copper_shingle_stairs.json 7b8745213af5aa7938fc04a295be6a087c72daa8 assets/create/models/block/oxidized_copper_shingle_stairs_inner.json d89419d48d6ee2f6747e7c93de8699db22ea3f59 assets/create/models/block/oxidized_copper_shingle_stairs_outer.json -5cf92b628ff1f832966138a58ed87d747681274c assets/create/models/block/oxidized_copper_tiles.json +561beafce41b9e9c0b07bc6b7176dd4f6918c116 assets/create/models/block/oxidized_copper_shingles.json ad6134598869711a12e2f95c9b5f25a0f7b8dd93 assets/create/models/block/oxidized_copper_tile_slab.json c17bac0fd6a20540813c6a1c000a553b7c5ac849 assets/create/models/block/oxidized_copper_tile_slab_top.json d5b30340364f5536e46bc67e777ef4fa20a36e04 assets/create/models/block/oxidized_copper_tile_stairs.json b40b315c23cbd3eb4658518bfac836f6091321a5 assets/create/models/block/oxidized_copper_tile_stairs_inner.json f4eaadab29b4f2e915237340e2d6f4aad4ba21d6 assets/create/models/block/oxidized_copper_tile_stairs_outer.json +5cf92b628ff1f832966138a58ed87d747681274c assets/create/models/block/oxidized_copper_tiles.json f8b51eec36c2eddc08a1b60894d863bb58f55625 assets/create/models/block/peculiar_bell_ceiling.json f70f83cfec770879c478eea3760ea187700f2878 assets/create/models/block/peculiar_bell_double_wall.json b9c9d00b844ca2f217ae21cc502cd4d082fed2d5 assets/create/models/block/peculiar_bell_floor.json @@ -1420,133 +1420,133 @@ ff52eb59dadfe675e416440f3115856a501428a6 assets/create/models/block/scoria.json 4d7d36f974d25a310db2f75800e8c7e0377881c6 assets/create/models/block/secondary_linear_chassis_top.json 5ecb821ac06873015d2d7ebcfb7e1f5fe85cf504 assets/create/models/block/secondary_linear_chassis_top_bottom.json e697898a0ec4c308314a4e0b7235fa0a9229da45 assets/create/models/block/shadow_steel_casing.json -73edb947b52c73e85a83422853d0b8a0fb34e82b assets/create/models/block/small_andesite_bricks.json -3bb5c8413b9e81a1adc339f873f37eb656904e06 assets/create/models/block/small_andesite_bricks_wall_post.json -0e70d94fc6ffdc0fd4a50a5910bc1455b401982f assets/create/models/block/small_andesite_bricks_wall_side.json -597fec784e40c1ff3b622824c32773d6d271f3b7 assets/create/models/block/small_andesite_bricks_wall_side_tall.json 593b962350c8de53156901b308617c6a246afa09 assets/create/models/block/small_andesite_brick_slab.json c83de8118653ccdce92a1b7f3501bf7359e0b310 assets/create/models/block/small_andesite_brick_slab_top.json f019380bcc81d52681e2beaf63e2b11836c45922 assets/create/models/block/small_andesite_brick_stairs.json 4fa72fe0115ad9ec83837852a2b2e2d22dde19ca assets/create/models/block/small_andesite_brick_stairs_inner.json f80f485f62dce86e98815b343c89e96b10623e53 assets/create/models/block/small_andesite_brick_stairs_outer.json -4750724972cbac6d7dac31e0689681eab6c37093 assets/create/models/block/small_asurine_bricks.json -407c7bea509bb0e9bf9f04e947ace584103d012d assets/create/models/block/small_asurine_bricks_wall_post.json -60491dfb4f2a6b78effdf18612b9a1cd7d930d8a assets/create/models/block/small_asurine_bricks_wall_side.json -e5d3172c08b65696a6d72220495463636d8b352c assets/create/models/block/small_asurine_bricks_wall_side_tall.json +73edb947b52c73e85a83422853d0b8a0fb34e82b assets/create/models/block/small_andesite_bricks.json +3bb5c8413b9e81a1adc339f873f37eb656904e06 assets/create/models/block/small_andesite_bricks_wall_post.json +0e70d94fc6ffdc0fd4a50a5910bc1455b401982f assets/create/models/block/small_andesite_bricks_wall_side.json +597fec784e40c1ff3b622824c32773d6d271f3b7 assets/create/models/block/small_andesite_bricks_wall_side_tall.json cdd354726eda82d83dc89871fa587b8c07b02a16 assets/create/models/block/small_asurine_brick_slab.json 7bdb6ed1e74437d083bca7d89c0d1b7c81e80b53 assets/create/models/block/small_asurine_brick_slab_top.json 086b9d4284d343967a582fd0a7d194bafd980e13 assets/create/models/block/small_asurine_brick_stairs.json db69f1580ca405b9a99f0e4ea8d9b9950ed6444e assets/create/models/block/small_asurine_brick_stairs_inner.json dd572cbff713b0f4830aef0bf3ba4adb80ee9908 assets/create/models/block/small_asurine_brick_stairs_outer.json -c2c72734ac526c319cb01e982824680bfb5f1186 assets/create/models/block/small_calcite_bricks.json -f17f2ecd5e5a32f92ec0ad0ba9e861a80432c0f2 assets/create/models/block/small_calcite_bricks_wall_post.json -1ad7654125aff67267567c0007cc03b8a15131b0 assets/create/models/block/small_calcite_bricks_wall_side.json -10c339f64c0e78f4fbb7a95c10bf7f9f399c0c6b assets/create/models/block/small_calcite_bricks_wall_side_tall.json +4750724972cbac6d7dac31e0689681eab6c37093 assets/create/models/block/small_asurine_bricks.json +407c7bea509bb0e9bf9f04e947ace584103d012d assets/create/models/block/small_asurine_bricks_wall_post.json +60491dfb4f2a6b78effdf18612b9a1cd7d930d8a assets/create/models/block/small_asurine_bricks_wall_side.json +e5d3172c08b65696a6d72220495463636d8b352c assets/create/models/block/small_asurine_bricks_wall_side_tall.json d07c57748981a54ffcdadc30ec21f728a3557bea assets/create/models/block/small_calcite_brick_slab.json 9a5e6a93328ad35b256b2512c28e683a74e807a9 assets/create/models/block/small_calcite_brick_slab_top.json c3d39e013dd0142f044f8f0a90de849a0d961e84 assets/create/models/block/small_calcite_brick_stairs.json 4e47a4708dafc0ea476e2d5b6567acfdc2c5c148 assets/create/models/block/small_calcite_brick_stairs_inner.json 6a41c44680a958299a787d8c8c8778d52167cd65 assets/create/models/block/small_calcite_brick_stairs_outer.json -485f6c0e37b24124ff23efa3f0caa2cfe85663dd assets/create/models/block/small_crimsite_bricks.json -57b050751e68c9a881d9598cfe8dfb45f19df08c assets/create/models/block/small_crimsite_bricks_wall_post.json -cb01f90c7ac1f56a6f79e1fecb126c349b6d53b0 assets/create/models/block/small_crimsite_bricks_wall_side.json -80932617b1d4b718071c1f8558398ba881743892 assets/create/models/block/small_crimsite_bricks_wall_side_tall.json +c2c72734ac526c319cb01e982824680bfb5f1186 assets/create/models/block/small_calcite_bricks.json +f17f2ecd5e5a32f92ec0ad0ba9e861a80432c0f2 assets/create/models/block/small_calcite_bricks_wall_post.json +1ad7654125aff67267567c0007cc03b8a15131b0 assets/create/models/block/small_calcite_bricks_wall_side.json +10c339f64c0e78f4fbb7a95c10bf7f9f399c0c6b assets/create/models/block/small_calcite_bricks_wall_side_tall.json 827867ddd9b5f6e2daa916c968531c7183ce7fa2 assets/create/models/block/small_crimsite_brick_slab.json dd19ebdbd1a2de827d467b0abd2d1d3ee5822305 assets/create/models/block/small_crimsite_brick_slab_top.json 58048cb41b740b008a98420ea93b567f38e2910f assets/create/models/block/small_crimsite_brick_stairs.json a943586885ea7d48fc27595d9741f97d852446e7 assets/create/models/block/small_crimsite_brick_stairs_inner.json 8dc173b8a9912341ccb9cd8c9a0d2d893571eb85 assets/create/models/block/small_crimsite_brick_stairs_outer.json -cd855b25c38be2c36dcbf6ab0d963a2c76043171 assets/create/models/block/small_deepslate_bricks.json -88a6c43f64c6d53b34719f41707622635108342b assets/create/models/block/small_deepslate_bricks_wall_post.json -dea1773ca9baf9e1a6a7a4288d348127b858c42d assets/create/models/block/small_deepslate_bricks_wall_side.json -673ab543b38a597fd74285cd25b8004c9e2bd706 assets/create/models/block/small_deepslate_bricks_wall_side_tall.json +485f6c0e37b24124ff23efa3f0caa2cfe85663dd assets/create/models/block/small_crimsite_bricks.json +57b050751e68c9a881d9598cfe8dfb45f19df08c assets/create/models/block/small_crimsite_bricks_wall_post.json +cb01f90c7ac1f56a6f79e1fecb126c349b6d53b0 assets/create/models/block/small_crimsite_bricks_wall_side.json +80932617b1d4b718071c1f8558398ba881743892 assets/create/models/block/small_crimsite_bricks_wall_side_tall.json 67c78a3e9250351d0ea18538640b596f05e957a4 assets/create/models/block/small_deepslate_brick_slab.json bc1af783fbcbe73df05e12c93625035db8089d16 assets/create/models/block/small_deepslate_brick_slab_top.json 91e00675337592d17a04032808ca64c4a159c814 assets/create/models/block/small_deepslate_brick_stairs.json 39e78262242637628628a07dc47908fb1593d3f2 assets/create/models/block/small_deepslate_brick_stairs_inner.json d7a61bc4c84070e0fd53e0957a5282078daff7f1 assets/create/models/block/small_deepslate_brick_stairs_outer.json -73e801fb607d76b42e1862323e9d149910a68298 assets/create/models/block/small_diorite_bricks.json -2bdb593d3ae4d856e96cc877f4927da25841af54 assets/create/models/block/small_diorite_bricks_wall_post.json -dd064be7962a2418784a513725fc7b5835e4ab40 assets/create/models/block/small_diorite_bricks_wall_side.json -3753c64785d74f1997b9f8f856fa873302621f39 assets/create/models/block/small_diorite_bricks_wall_side_tall.json +cd855b25c38be2c36dcbf6ab0d963a2c76043171 assets/create/models/block/small_deepslate_bricks.json +88a6c43f64c6d53b34719f41707622635108342b assets/create/models/block/small_deepslate_bricks_wall_post.json +dea1773ca9baf9e1a6a7a4288d348127b858c42d assets/create/models/block/small_deepslate_bricks_wall_side.json +673ab543b38a597fd74285cd25b8004c9e2bd706 assets/create/models/block/small_deepslate_bricks_wall_side_tall.json 59fc1d9dac0b6867779346413953174fc6b55d3c assets/create/models/block/small_diorite_brick_slab.json cbd6fe711e1203aa746d86d12bb85016b7142749 assets/create/models/block/small_diorite_brick_slab_top.json a6c823fa96ba8a06d101ca96a6898fe8a1faf83e assets/create/models/block/small_diorite_brick_stairs.json 7f128501d989122df9d2ab002a497356831caa1c assets/create/models/block/small_diorite_brick_stairs_inner.json 26222975b0efb2acea6473d0bcc99453aa9ed561 assets/create/models/block/small_diorite_brick_stairs_outer.json -7f55f9c8cae6a79a9ab22a4b593a2c5829390573 assets/create/models/block/small_dripstone_bricks.json -fd0880b2e55435c8dc6945fa71c67ba34d7b1e69 assets/create/models/block/small_dripstone_bricks_wall_post.json -c00e9c0bfb108b70975514694f38d3c4cd63e819 assets/create/models/block/small_dripstone_bricks_wall_side.json -26382c01766e04cfe7ea585cabc1baa1c409e0a0 assets/create/models/block/small_dripstone_bricks_wall_side_tall.json +73e801fb607d76b42e1862323e9d149910a68298 assets/create/models/block/small_diorite_bricks.json +2bdb593d3ae4d856e96cc877f4927da25841af54 assets/create/models/block/small_diorite_bricks_wall_post.json +dd064be7962a2418784a513725fc7b5835e4ab40 assets/create/models/block/small_diorite_bricks_wall_side.json +3753c64785d74f1997b9f8f856fa873302621f39 assets/create/models/block/small_diorite_bricks_wall_side_tall.json 7b18bb56d4509f490a73b2812a8e40333f400369 assets/create/models/block/small_dripstone_brick_slab.json 39b7aa7d1494e5328e8774acb8adec8a346e972f assets/create/models/block/small_dripstone_brick_slab_top.json 3d265aed7a723713d525d0fabf3a70600d9d60e4 assets/create/models/block/small_dripstone_brick_stairs.json 2be41e9c1367af7f0eb99856e35900df96974bd4 assets/create/models/block/small_dripstone_brick_stairs_inner.json 4026a9327d47d55218b00b0b4b92464b6448ad91 assets/create/models/block/small_dripstone_brick_stairs_outer.json -ad4cf29e0e67d0d202d5836486531551909c71bf assets/create/models/block/small_granite_bricks.json -d20963cbb5d2321a069bf42d203855a5584f8607 assets/create/models/block/small_granite_bricks_wall_post.json -b860879b66d2d23349fa95ff644d9eba21eb29bd assets/create/models/block/small_granite_bricks_wall_side.json -11593a2a0e307b3e1d847c84d8c61bc78fef2967 assets/create/models/block/small_granite_bricks_wall_side_tall.json +7f55f9c8cae6a79a9ab22a4b593a2c5829390573 assets/create/models/block/small_dripstone_bricks.json +fd0880b2e55435c8dc6945fa71c67ba34d7b1e69 assets/create/models/block/small_dripstone_bricks_wall_post.json +c00e9c0bfb108b70975514694f38d3c4cd63e819 assets/create/models/block/small_dripstone_bricks_wall_side.json +26382c01766e04cfe7ea585cabc1baa1c409e0a0 assets/create/models/block/small_dripstone_bricks_wall_side_tall.json cb0a72cedb6b2b043eaf8c8869648802d74a2eeb assets/create/models/block/small_granite_brick_slab.json d635840492541787d55cc005c7e207532edcdef3 assets/create/models/block/small_granite_brick_slab_top.json ba9bfedf5854fccaba8a5e60c26efb6e34ede3cd assets/create/models/block/small_granite_brick_stairs.json 9bebe59176e74926e28a139dc557c25283285e89 assets/create/models/block/small_granite_brick_stairs_inner.json 15d71900e76c131285447628e63bf1479ce7025a assets/create/models/block/small_granite_brick_stairs_outer.json -6224f2763224d3e746dafdaaf14fae68e2469b93 assets/create/models/block/small_limestone_bricks.json -ca038e240e4157897a6273692db2c952ab5b17d7 assets/create/models/block/small_limestone_bricks_wall_post.json -7920f8cfda77b22d4d29638faa6ae07d89e51ab3 assets/create/models/block/small_limestone_bricks_wall_side.json -6e1fa27744f4592111945e5cafee6d7d67b5299b assets/create/models/block/small_limestone_bricks_wall_side_tall.json +ad4cf29e0e67d0d202d5836486531551909c71bf assets/create/models/block/small_granite_bricks.json +d20963cbb5d2321a069bf42d203855a5584f8607 assets/create/models/block/small_granite_bricks_wall_post.json +b860879b66d2d23349fa95ff644d9eba21eb29bd assets/create/models/block/small_granite_bricks_wall_side.json +11593a2a0e307b3e1d847c84d8c61bc78fef2967 assets/create/models/block/small_granite_bricks_wall_side_tall.json 0e0f551bac87421e6b693aa9ca98fd5da2ee168b assets/create/models/block/small_limestone_brick_slab.json 6669c1e87ed79097f96e7e46eecf3ab6e7c9778c assets/create/models/block/small_limestone_brick_slab_top.json 5aff0145d2fc89549ac541db325dda25b8941583 assets/create/models/block/small_limestone_brick_stairs.json 250aa2c237a9532b19621fa604027433183961c3 assets/create/models/block/small_limestone_brick_stairs_inner.json 92da57d330e9905d017705dd931af1d1d6c1a00d assets/create/models/block/small_limestone_brick_stairs_outer.json -242e4f39f6df26917f21899f0c7d0415a166d4b9 assets/create/models/block/small_ochrum_bricks.json -06cb9faca0062947c08b2a7309a958aac5ab24ac assets/create/models/block/small_ochrum_bricks_wall_post.json -8d9d53206e222839333026c779b66b9fd8cf2cf9 assets/create/models/block/small_ochrum_bricks_wall_side.json -f412fbaa509f7b2d47a27d4bcb13590bfcae74ca assets/create/models/block/small_ochrum_bricks_wall_side_tall.json +6224f2763224d3e746dafdaaf14fae68e2469b93 assets/create/models/block/small_limestone_bricks.json +ca038e240e4157897a6273692db2c952ab5b17d7 assets/create/models/block/small_limestone_bricks_wall_post.json +7920f8cfda77b22d4d29638faa6ae07d89e51ab3 assets/create/models/block/small_limestone_bricks_wall_side.json +6e1fa27744f4592111945e5cafee6d7d67b5299b assets/create/models/block/small_limestone_bricks_wall_side_tall.json 517e3605a9e86a07c673e18d94c2c37109a2aef5 assets/create/models/block/small_ochrum_brick_slab.json 855ad9f6fe03ceb2cc33d9df3536cb4394acfa9b assets/create/models/block/small_ochrum_brick_slab_top.json c5fc35d6b0fe96c11537bc10d34a63ef80f3270c assets/create/models/block/small_ochrum_brick_stairs.json 9a2631d9f6821d2c01bc8b2588a69702d3b083cc assets/create/models/block/small_ochrum_brick_stairs_inner.json 1f0ccdef29dae18535ea304e954e06c91bb0620b assets/create/models/block/small_ochrum_brick_stairs_outer.json +242e4f39f6df26917f21899f0c7d0415a166d4b9 assets/create/models/block/small_ochrum_bricks.json +06cb9faca0062947c08b2a7309a958aac5ab24ac assets/create/models/block/small_ochrum_bricks_wall_post.json +8d9d53206e222839333026c779b66b9fd8cf2cf9 assets/create/models/block/small_ochrum_bricks_wall_side.json +f412fbaa509f7b2d47a27d4bcb13590bfcae74ca assets/create/models/block/small_ochrum_bricks_wall_side_tall.json be96f070be1f838c6fb442c164b5f9b4e5cfcee5 assets/create/models/block/small_rose_quartz_tiles.json -41e56d8e334b81a0d5270bdbe87617981e1f98b4 assets/create/models/block/small_scorchia_bricks.json -56aa81e05019533ce0e0f1ee3ef7bf20fcc400b4 assets/create/models/block/small_scorchia_bricks_wall_post.json -1e1fa90c8b144813770c4d53a3b734ae450895d6 assets/create/models/block/small_scorchia_bricks_wall_side.json -6a46cf73c03a2abea25a81dbb28f4150b355900c assets/create/models/block/small_scorchia_bricks_wall_side_tall.json 6aa3825ace2e73bec454aaa8597e3a892ee29eb7 assets/create/models/block/small_scorchia_brick_slab.json f0378625001171c449a403e372e59623f0fc6569 assets/create/models/block/small_scorchia_brick_slab_top.json 49fa4a3940f84902319df257d39812eb71c8a9e2 assets/create/models/block/small_scorchia_brick_stairs.json 4dee6e6dbe6a98a8eaa04f6812f322343f62fca1 assets/create/models/block/small_scorchia_brick_stairs_inner.json 8a19e7e5c03c155c9ef9332486ae0b069dea0502 assets/create/models/block/small_scorchia_brick_stairs_outer.json -6b435123d852579ba8467c4915cd5d0adaadeca0 assets/create/models/block/small_scoria_bricks.json -86b243074845ca66916ce96ef3774862cf9a39d4 assets/create/models/block/small_scoria_bricks_wall_post.json -57ccb3efbdc4a69cad60c8b90321338ba2e68321 assets/create/models/block/small_scoria_bricks_wall_side.json -d4c5398e10b25d2dc3cb3754a449fc2b60e4074f assets/create/models/block/small_scoria_bricks_wall_side_tall.json +41e56d8e334b81a0d5270bdbe87617981e1f98b4 assets/create/models/block/small_scorchia_bricks.json +56aa81e05019533ce0e0f1ee3ef7bf20fcc400b4 assets/create/models/block/small_scorchia_bricks_wall_post.json +1e1fa90c8b144813770c4d53a3b734ae450895d6 assets/create/models/block/small_scorchia_bricks_wall_side.json +6a46cf73c03a2abea25a81dbb28f4150b355900c assets/create/models/block/small_scorchia_bricks_wall_side_tall.json 918351c1270c26932c0c4783543779a25ca7e986 assets/create/models/block/small_scoria_brick_slab.json 4138e756b4b36f227e178acbcc233edb082ae603 assets/create/models/block/small_scoria_brick_slab_top.json b8e70cd7d9acdcf91be9783cd91d70275a006ea2 assets/create/models/block/small_scoria_brick_stairs.json 625bfbd58440ea4e270d57cc748f2b5f6cece63b assets/create/models/block/small_scoria_brick_stairs_inner.json 602a46fb2736acb8c50b0d04222e6c33e52dee87 assets/create/models/block/small_scoria_brick_stairs_outer.json -a8e8c633dfb6d9f14425b1fd28e88ecf08a88cc6 assets/create/models/block/small_tuff_bricks.json -1c3a22bed504cd7a7e507e83ee21399f8a3fb299 assets/create/models/block/small_tuff_bricks_wall_post.json -1aeb8cac7d0178a18ac1cf98c9a45ca8e67514b0 assets/create/models/block/small_tuff_bricks_wall_side.json -4c6b5c7c60ec4cad314064b171413a3e866e5f99 assets/create/models/block/small_tuff_bricks_wall_side_tall.json +6b435123d852579ba8467c4915cd5d0adaadeca0 assets/create/models/block/small_scoria_bricks.json +86b243074845ca66916ce96ef3774862cf9a39d4 assets/create/models/block/small_scoria_bricks_wall_post.json +57ccb3efbdc4a69cad60c8b90321338ba2e68321 assets/create/models/block/small_scoria_bricks_wall_side.json +d4c5398e10b25d2dc3cb3754a449fc2b60e4074f assets/create/models/block/small_scoria_bricks_wall_side_tall.json 6b2c4d8c8609de0d3d6ce1e30b1dd26ba59cb86d assets/create/models/block/small_tuff_brick_slab.json 1ba07367fcba6a3914f1703115304a7c19979542 assets/create/models/block/small_tuff_brick_slab_top.json 1a5ab239d0f2f041ee04005ceb60111e6848f5de assets/create/models/block/small_tuff_brick_stairs.json be3ee2c36f85a534a71d42a7d63a7816945b3c30 assets/create/models/block/small_tuff_brick_stairs_inner.json aa84e448041d5f74c75565f5e409b1e9b7e5155d assets/create/models/block/small_tuff_brick_stairs_outer.json -e9c75f1b4b663dce09b0a2f8282e574839c19d06 assets/create/models/block/small_veridium_bricks.json -725f6d3dbcfb469cede6fb27a98c1f398f3f3c8c assets/create/models/block/small_veridium_bricks_wall_post.json -b33ee496d43e315a5bed5eaabfd553e361fec1a9 assets/create/models/block/small_veridium_bricks_wall_side.json -80e950f93def51d82a63848b1fb6ac11600ab1bf assets/create/models/block/small_veridium_bricks_wall_side_tall.json +a8e8c633dfb6d9f14425b1fd28e88ecf08a88cc6 assets/create/models/block/small_tuff_bricks.json +1c3a22bed504cd7a7e507e83ee21399f8a3fb299 assets/create/models/block/small_tuff_bricks_wall_post.json +1aeb8cac7d0178a18ac1cf98c9a45ca8e67514b0 assets/create/models/block/small_tuff_bricks_wall_side.json +4c6b5c7c60ec4cad314064b171413a3e866e5f99 assets/create/models/block/small_tuff_bricks_wall_side_tall.json 30b150fe3cf9bdb6ee32cd6b0f51179b44be57d3 assets/create/models/block/small_veridium_brick_slab.json 2158dd9e71f6f60e5132105c68a41ad6e3927438 assets/create/models/block/small_veridium_brick_slab_top.json bbbfc8e3696945ed1f6c3afe73ae0745ff8deda1 assets/create/models/block/small_veridium_brick_stairs.json fc3a996b0ca01c2c09ad84b881c46e92918d084f assets/create/models/block/small_veridium_brick_stairs_inner.json e27a77984e8e28e6032f26bb010efcadfaeb5407 assets/create/models/block/small_veridium_brick_stairs_outer.json +e9c75f1b4b663dce09b0a2f8282e574839c19d06 assets/create/models/block/small_veridium_bricks.json +725f6d3dbcfb469cede6fb27a98c1f398f3f3c8c assets/create/models/block/small_veridium_bricks_wall_post.json +b33ee496d43e315a5bed5eaabfd553e361fec1a9 assets/create/models/block/small_veridium_bricks_wall_side.json +80e950f93def51d82a63848b1fb6ac11600ab1bf assets/create/models/block/small_veridium_bricks_wall_side_tall.json d7c1c2679c8ba543ae7be3b9cf3f4eea3c1a2f68 assets/create/models/block/spruce_window.json f4a4fbb9eea6fb1d0633e349eae6acdaf329e8d5 assets/create/models/block/spruce_window_pane_noside.json 02a25202a42debcd2b4aaa4113e3de4f8f6ee47c assets/create/models/block/spruce_window_pane_noside_alt.json @@ -1595,66 +1595,66 @@ e84875a4eb11e2161a93ec7569aa2ac1c2f60cef assets/create/models/block/warped_windo 378c865ff8213ff56f1f7a4b2d9cf26c71f036e8 assets/create/models/block/warped_window_pane_post.json f320de08cb113a9ad17acd2ebb8dfc57759e4f7d assets/create/models/block/warped_window_pane_side.json 2fc182d9697b5cddd93b01d1236931af27eee8fe assets/create/models/block/warped_window_pane_side_alt.json -32fdb85b5b62d5a0fb41732874c854788cdd2ba1 assets/create/models/block/waxed_copper_shingles.json fb7fb6deebd502946ab57f1b8a9f4a6b5dd48da3 assets/create/models/block/waxed_copper_shingle_slab.json 660f61112b8e46dec5050cb0ed4ee936965a7c58 assets/create/models/block/waxed_copper_shingle_slab_top.json 5d74be967bbe9feba4b630751f13af817a733d1d assets/create/models/block/waxed_copper_shingle_stairs.json 35cb89f29ce3f8d8af13602c08ecd7afbb7cf56a assets/create/models/block/waxed_copper_shingle_stairs_inner.json fcb9295f4f388e6d439ec9a3906ca326b6d69077 assets/create/models/block/waxed_copper_shingle_stairs_outer.json -32f06f39d0b34e4431795aa6e64f87e58dc1597b assets/create/models/block/waxed_copper_tiles.json +32fdb85b5b62d5a0fb41732874c854788cdd2ba1 assets/create/models/block/waxed_copper_shingles.json 298c6100de02ed9f813397d8ba38c46f35035c69 assets/create/models/block/waxed_copper_tile_slab.json d4422c2d96fb329087d1be70d8b983a8cf6c7f01 assets/create/models/block/waxed_copper_tile_slab_top.json fca72048f916d3a3e567b385c948cc1b59711ef4 assets/create/models/block/waxed_copper_tile_stairs.json 997479b62ed3d81ab633279ecc2fabd9588a3bf3 assets/create/models/block/waxed_copper_tile_stairs_inner.json d5c5bbfb9aaa282e11ad6e6309b1880b172ee653 assets/create/models/block/waxed_copper_tile_stairs_outer.json -19a773f91c58c49301f35965bac02d0c05fb2764 assets/create/models/block/waxed_exposed_copper_shingles.json +32f06f39d0b34e4431795aa6e64f87e58dc1597b assets/create/models/block/waxed_copper_tiles.json a3420b91fdebec40e508a5eebb145c0201bd80c8 assets/create/models/block/waxed_exposed_copper_shingle_slab.json 4178ea5e50ee17b3c15f4a59efd019c4a19bb892 assets/create/models/block/waxed_exposed_copper_shingle_slab_top.json dd2d747774abc86e428a883e299db66cded78e11 assets/create/models/block/waxed_exposed_copper_shingle_stairs.json b6845da62d96a33cee624bb70360e256b26eda83 assets/create/models/block/waxed_exposed_copper_shingle_stairs_inner.json 3d8b758e50e75c5adc26ab6f39f9d73f00866673 assets/create/models/block/waxed_exposed_copper_shingle_stairs_outer.json -9cb20c9d41629d8b9426cb65829365d10966338f assets/create/models/block/waxed_exposed_copper_tiles.json +19a773f91c58c49301f35965bac02d0c05fb2764 assets/create/models/block/waxed_exposed_copper_shingles.json cd21d9d2935b6d0103502e2731c11ea27ff64ecf assets/create/models/block/waxed_exposed_copper_tile_slab.json 0ec039ba59fb0028183433e52131ff355ace5bff assets/create/models/block/waxed_exposed_copper_tile_slab_top.json c51dbd34996ac4513234800e427ac308067d5e1d assets/create/models/block/waxed_exposed_copper_tile_stairs.json 68772d4352dc7ade995dfa57ba41a38ef819e855 assets/create/models/block/waxed_exposed_copper_tile_stairs_inner.json d932671822ba93b71a9c8b50e7207803a1c4dbab assets/create/models/block/waxed_exposed_copper_tile_stairs_outer.json -561beafce41b9e9c0b07bc6b7176dd4f6918c116 assets/create/models/block/waxed_oxidized_copper_shingles.json +9cb20c9d41629d8b9426cb65829365d10966338f assets/create/models/block/waxed_exposed_copper_tiles.json 7e0bab8109e322c6db5fe1d5999c06536c21c6eb assets/create/models/block/waxed_oxidized_copper_shingle_slab.json 42df32c4e2d1ffb2ee62748becfd1717118b440c assets/create/models/block/waxed_oxidized_copper_shingle_slab_top.json b55a733e3e68cfbd08d45bb9ac56deef9f728b60 assets/create/models/block/waxed_oxidized_copper_shingle_stairs.json 7b8745213af5aa7938fc04a295be6a087c72daa8 assets/create/models/block/waxed_oxidized_copper_shingle_stairs_inner.json d89419d48d6ee2f6747e7c93de8699db22ea3f59 assets/create/models/block/waxed_oxidized_copper_shingle_stairs_outer.json -5cf92b628ff1f832966138a58ed87d747681274c assets/create/models/block/waxed_oxidized_copper_tiles.json +561beafce41b9e9c0b07bc6b7176dd4f6918c116 assets/create/models/block/waxed_oxidized_copper_shingles.json ad6134598869711a12e2f95c9b5f25a0f7b8dd93 assets/create/models/block/waxed_oxidized_copper_tile_slab.json c17bac0fd6a20540813c6a1c000a553b7c5ac849 assets/create/models/block/waxed_oxidized_copper_tile_slab_top.json d5b30340364f5536e46bc67e777ef4fa20a36e04 assets/create/models/block/waxed_oxidized_copper_tile_stairs.json b40b315c23cbd3eb4658518bfac836f6091321a5 assets/create/models/block/waxed_oxidized_copper_tile_stairs_inner.json f4eaadab29b4f2e915237340e2d6f4aad4ba21d6 assets/create/models/block/waxed_oxidized_copper_tile_stairs_outer.json -9c73020e80c31cd710c218f9699ba9a795758ad0 assets/create/models/block/waxed_weathered_copper_shingles.json +5cf92b628ff1f832966138a58ed87d747681274c assets/create/models/block/waxed_oxidized_copper_tiles.json 897cfc177b073ca1bcb635c74108567f8748b5c4 assets/create/models/block/waxed_weathered_copper_shingle_slab.json efa57ba131c27e0064c0d958e69b10530a26ac41 assets/create/models/block/waxed_weathered_copper_shingle_slab_top.json 4ef11a7e3de630ad46b9179e8a9a34d55202f6c5 assets/create/models/block/waxed_weathered_copper_shingle_stairs.json f32a18c76cfaca2153f6321880a8da1347be37ce assets/create/models/block/waxed_weathered_copper_shingle_stairs_inner.json 9637f78e51ca7ed812e4c64c52e08f6fa0adbfc3 assets/create/models/block/waxed_weathered_copper_shingle_stairs_outer.json -9782a25341dd2ffb146430edbe6916932250c326 assets/create/models/block/waxed_weathered_copper_tiles.json +9c73020e80c31cd710c218f9699ba9a795758ad0 assets/create/models/block/waxed_weathered_copper_shingles.json 0c9669588972d4c2152bd2b043b8386b76a6e1c4 assets/create/models/block/waxed_weathered_copper_tile_slab.json 2d01a583cc948e9e0cb814cad968ed16a07dd46c assets/create/models/block/waxed_weathered_copper_tile_slab_top.json e26dd64495ff8801593e9c22203cbf364075badd assets/create/models/block/waxed_weathered_copper_tile_stairs.json b658c1022587bd670b5acee267607719c1544332 assets/create/models/block/waxed_weathered_copper_tile_stairs_inner.json e7ae89577be9d26a071bf96cbd7ed80293902b63 assets/create/models/block/waxed_weathered_copper_tile_stairs_outer.json -9c73020e80c31cd710c218f9699ba9a795758ad0 assets/create/models/block/weathered_copper_shingles.json +9782a25341dd2ffb146430edbe6916932250c326 assets/create/models/block/waxed_weathered_copper_tiles.json 897cfc177b073ca1bcb635c74108567f8748b5c4 assets/create/models/block/weathered_copper_shingle_slab.json efa57ba131c27e0064c0d958e69b10530a26ac41 assets/create/models/block/weathered_copper_shingle_slab_top.json 4ef11a7e3de630ad46b9179e8a9a34d55202f6c5 assets/create/models/block/weathered_copper_shingle_stairs.json f32a18c76cfaca2153f6321880a8da1347be37ce assets/create/models/block/weathered_copper_shingle_stairs_inner.json 9637f78e51ca7ed812e4c64c52e08f6fa0adbfc3 assets/create/models/block/weathered_copper_shingle_stairs_outer.json -9782a25341dd2ffb146430edbe6916932250c326 assets/create/models/block/weathered_copper_tiles.json +9c73020e80c31cd710c218f9699ba9a795758ad0 assets/create/models/block/weathered_copper_shingles.json 0c9669588972d4c2152bd2b043b8386b76a6e1c4 assets/create/models/block/weathered_copper_tile_slab.json 2d01a583cc948e9e0cb814cad968ed16a07dd46c assets/create/models/block/weathered_copper_tile_slab_top.json e26dd64495ff8801593e9c22203cbf364075badd assets/create/models/block/weathered_copper_tile_stairs.json b658c1022587bd670b5acee267607719c1544332 assets/create/models/block/weathered_copper_tile_stairs_inner.json e7ae89577be9d26a071bf96cbd7ed80293902b63 assets/create/models/block/weathered_copper_tile_stairs_outer.json +9782a25341dd2ffb146430edbe6916932250c326 assets/create/models/block/weathered_copper_tiles.json 2f040681214af58a97e70d3a6e77a0fc2e02c624 assets/create/models/block/white_nixie_tube.json 99f0628623a36ac1700a5876cec010ee6353162f assets/create/models/block/white_seat.json f252f8c68702a0c050797a2dc2a51c586408722d assets/create/models/block/white_toolbox.json @@ -1749,12 +1749,12 @@ de48f4b6fa26928ebc7d5d60e6a0767093430d65 assets/create/models/item/contraption_c ccdf08652511e5737a8489d86ea9422ade4f4ca5 assets/create/models/item/copper_nugget.json 86a770e9b2af1f19bf633f5cfeecd84848f73fbd assets/create/models/item/copper_scaffolding.json a4fd2f4f00e03b2ac5d863e93827d39a984cc2ff assets/create/models/item/copper_sheet.json -13b18ba2938e283d507fbca70518cf52198cdc71 assets/create/models/item/copper_shingles.json 79d9f8667965072f12e51e6601b5c36f8acc125f assets/create/models/item/copper_shingle_slab.json 9fe6f0bdea4595b403ed2d2cbc2023a9abeb79f0 assets/create/models/item/copper_shingle_stairs.json -19642e4ea5deecaf57059827c4c13a19d2e73822 assets/create/models/item/copper_tiles.json +13b18ba2938e283d507fbca70518cf52198cdc71 assets/create/models/item/copper_shingles.json a7147444fc28a4cce21b6cf38e9528537e27c352 assets/create/models/item/copper_tile_slab.json 7330324d6c64f0340d676ecef83a930515d9130e assets/create/models/item/copper_tile_stairs.json +19642e4ea5deecaf57059827c4c13a19d2e73822 assets/create/models/item/copper_tiles.json 08c35e85afe4eb2b106133c5d9c7d7c64ca9a915 assets/create/models/item/copper_valve_handle.json 5cec229a3117ea5987aa42288c070427ac48a5dc assets/create/models/item/copycat_panel.json 1b6707005830ca066a7e997c73391ca88c70bdb0 assets/create/models/item/copycat_step.json @@ -1784,114 +1784,114 @@ b6acd86be9e6cac8b9ed2bc6297d27941ca05f46 assets/create/models/item/crushed_raw_z b67e95801010eab58de02f2b0160bff3f008bd18 assets/create/models/item/crushing_wheel.json af189b0c04482064520d84546d81af8154824292 assets/create/models/item/cuckoo_clock.json 314fb287c7b16a6478fbefde0da80de8828b684e assets/create/models/item/cut_andesite.json -e2840073eac2e6419cd312b3d0177d4c64a5346c assets/create/models/item/cut_andesite_bricks.json 680fe77d50f7c3253ec4997f74761f962b784e15 assets/create/models/item/cut_andesite_brick_slab.json 3c1d56f9686bb2b97c168b0509ddfd06e80be9a0 assets/create/models/item/cut_andesite_brick_stairs.json 4222b965f8a18f78b92838e4642a28fa3e0ad648 assets/create/models/item/cut_andesite_brick_wall.json +e2840073eac2e6419cd312b3d0177d4c64a5346c assets/create/models/item/cut_andesite_bricks.json c100e02ef9b05f4f6df3ddbbfe91db1032d4854b assets/create/models/item/cut_andesite_slab.json f435a67b3d89d12b6e8cb5071a67e35f0918dc79 assets/create/models/item/cut_andesite_stairs.json df9084d532a085220280bc7bee579e1079fbf786 assets/create/models/item/cut_andesite_wall.json 025eedca45b222b91d93b9a3a89fac5ad328b152 assets/create/models/item/cut_asurine.json -1ceb483f428448f00a08541fbcf4f4787aef3f1e assets/create/models/item/cut_asurine_bricks.json 022c56e7aafa7ca4cdd1a88426eb43f9e02c3cc2 assets/create/models/item/cut_asurine_brick_slab.json 3131e09a221c2f0a17cfc7277603f2e3c8164bc7 assets/create/models/item/cut_asurine_brick_stairs.json dc1f5f03acc1165606c48df97953164f6bd7f092 assets/create/models/item/cut_asurine_brick_wall.json +1ceb483f428448f00a08541fbcf4f4787aef3f1e assets/create/models/item/cut_asurine_bricks.json e81d7df1f1b8281c38400713b09cbac59c4d53cc assets/create/models/item/cut_asurine_slab.json cf534603fe71423e0ab80d431ab12394d0a6bb21 assets/create/models/item/cut_asurine_stairs.json 7ca803f5a7798ea034db6385a5f36a48e235c247 assets/create/models/item/cut_asurine_wall.json 707fb799ca44280cad0b817f29a7c75dd0f0ce5e assets/create/models/item/cut_calcite.json -5678b9f76823efac2c6624acc7b2b911402112f4 assets/create/models/item/cut_calcite_bricks.json f794423b242228c43345dc1f40653133fb7f3db6 assets/create/models/item/cut_calcite_brick_slab.json 8e9b46e52758ec7f21c3b84c212e2f6565bf71d9 assets/create/models/item/cut_calcite_brick_stairs.json 1447d21b7fc331528bfd15e5b9d694eb1a31cfb3 assets/create/models/item/cut_calcite_brick_wall.json +5678b9f76823efac2c6624acc7b2b911402112f4 assets/create/models/item/cut_calcite_bricks.json c78c99c78a19097d890414b21270014b52bafd8d assets/create/models/item/cut_calcite_slab.json e6a9144a4bb9e5af3f57d0acdb26d66dc4547217 assets/create/models/item/cut_calcite_stairs.json daf2a2513f6636d140c23b90ba87aad35476c498 assets/create/models/item/cut_calcite_wall.json 29f2bc72aa50cdf34d1d5bfd01a4512d5974dc65 assets/create/models/item/cut_crimsite.json -20bc810ca5b2a35a423e57f287e2f42ad9940b89 assets/create/models/item/cut_crimsite_bricks.json 7c37d3de9674e70595498d1c46c5693d9f39a502 assets/create/models/item/cut_crimsite_brick_slab.json b974c0f2f0e5119d9bac6a36946d4dfdd65b4b5f assets/create/models/item/cut_crimsite_brick_stairs.json c1289ddff572149b2171859689228615802dc825 assets/create/models/item/cut_crimsite_brick_wall.json +20bc810ca5b2a35a423e57f287e2f42ad9940b89 assets/create/models/item/cut_crimsite_bricks.json 8855eb44a68277668c77858715652d6851fa507f assets/create/models/item/cut_crimsite_slab.json 57101d3c2d570bc2c389c1e05e1354d79de70a0a assets/create/models/item/cut_crimsite_stairs.json a10cd65d675a05b9dfbdac67a2d9ca3b4381396a assets/create/models/item/cut_crimsite_wall.json a4ad900cf65136835c259c1e349781538d537a9c assets/create/models/item/cut_deepslate.json -81b10b5d159db4000f4f6569b83fc7e8f702f015 assets/create/models/item/cut_deepslate_bricks.json a63bbe474ca7d8ceafb6bfcb21a88841980fe8e6 assets/create/models/item/cut_deepslate_brick_slab.json 7c1ad49844eafbd87f8c69a077a8c18ccdd4a919 assets/create/models/item/cut_deepslate_brick_stairs.json 6a4ee2e810731e0702c1493237343a567cc736d6 assets/create/models/item/cut_deepslate_brick_wall.json +81b10b5d159db4000f4f6569b83fc7e8f702f015 assets/create/models/item/cut_deepslate_bricks.json ff0d08d1b59de36b016f7952d2bd72d8e1eb1293 assets/create/models/item/cut_deepslate_slab.json 627c806a6eba8b730682821deb31627d75683e88 assets/create/models/item/cut_deepslate_stairs.json 9bdb85a688b09eb34eb8024a6808406118f78133 assets/create/models/item/cut_deepslate_wall.json c33c48d71d98f4b8a84c7f0a4ee88918fed3e798 assets/create/models/item/cut_diorite.json -e8a697df63b0b5fa74dbc70e76b55718a2cc388f assets/create/models/item/cut_diorite_bricks.json 63bc297b782c40c513873b7f8fd8284abce01753 assets/create/models/item/cut_diorite_brick_slab.json f604d088c8c7c6d847795459231d0df8c73d95fb assets/create/models/item/cut_diorite_brick_stairs.json b06be3da6017aa7fbc38b8aecda0d30dae313c13 assets/create/models/item/cut_diorite_brick_wall.json +e8a697df63b0b5fa74dbc70e76b55718a2cc388f assets/create/models/item/cut_diorite_bricks.json 4650f375365caeb237947f6e933d174ebbfbc1e2 assets/create/models/item/cut_diorite_slab.json 933d14f51272b39fc13e94d58f3100469d7cbe06 assets/create/models/item/cut_diorite_stairs.json 0cc44bb9ad0ed3ff11bc6113d0a9e31e99b169b8 assets/create/models/item/cut_diorite_wall.json e2123180fd5312d1e67b3a030fcbc4b6f11aa8bf assets/create/models/item/cut_dripstone.json -4b5d7bbee5741b112e2cb354c5fe49c088fc9b2f assets/create/models/item/cut_dripstone_bricks.json a815b2a927853d6d82d8b69f862be3091c5c8caa assets/create/models/item/cut_dripstone_brick_slab.json b8cb1b04eb869a06ded04c4c3acac6e5a315ee78 assets/create/models/item/cut_dripstone_brick_stairs.json 87fafd603eb4ba41981cd9c9371ac4618909f94d assets/create/models/item/cut_dripstone_brick_wall.json +4b5d7bbee5741b112e2cb354c5fe49c088fc9b2f assets/create/models/item/cut_dripstone_bricks.json 756c801f6bba006fbfd3486e95ba870909ab2902 assets/create/models/item/cut_dripstone_slab.json c59d314e1b5cce1c3745ce164c2a094e17f7a003 assets/create/models/item/cut_dripstone_stairs.json 125b24d28a9957740855467440ad8508d21c24d7 assets/create/models/item/cut_dripstone_wall.json 2fbce0b481f7cf2cf4f0fd03c86ef743b7c30879 assets/create/models/item/cut_granite.json -d8860602cc52fac5a09354c56e78fdfd7d9cb6a9 assets/create/models/item/cut_granite_bricks.json 3584117ed8a69c3842fde1d6accfaaa2c72e44f4 assets/create/models/item/cut_granite_brick_slab.json c68d1c09b9091bc501279115be16f83508b88fed assets/create/models/item/cut_granite_brick_stairs.json 5a37b24319a8708e444902eae3596b68daaffd15 assets/create/models/item/cut_granite_brick_wall.json +d8860602cc52fac5a09354c56e78fdfd7d9cb6a9 assets/create/models/item/cut_granite_bricks.json c2f6603e8cbfc0cdf5e5ef10c6a4baef9c917b6d assets/create/models/item/cut_granite_slab.json 66f8e6d556446441e157427437e9563075e2d6ce assets/create/models/item/cut_granite_stairs.json fe06c8aeab9e4c8a145375af46cbdaed701baad4 assets/create/models/item/cut_granite_wall.json b5c3df9c28a14683a363769cad5d154af56b8da4 assets/create/models/item/cut_limestone.json -7d026353711a464400e69c7e86c9b9c6aa70bf6d assets/create/models/item/cut_limestone_bricks.json 2822ebe1d4211f240e31866759e25add5f0fb56d assets/create/models/item/cut_limestone_brick_slab.json 694dfb73585167011d8123d64f5896697594f4ce assets/create/models/item/cut_limestone_brick_stairs.json db8851d6a1b7604ca1ba7615e1f162f6f5220801 assets/create/models/item/cut_limestone_brick_wall.json +7d026353711a464400e69c7e86c9b9c6aa70bf6d assets/create/models/item/cut_limestone_bricks.json 75584aa5e06168d8866b022fcd72377351b774d9 assets/create/models/item/cut_limestone_slab.json 1df9a186a146e597b48da4c4461f1a98ecf3646a assets/create/models/item/cut_limestone_stairs.json b70ac5462ef4d0363332656aa7cb82919f679893 assets/create/models/item/cut_limestone_wall.json 92bc693db4e0ba6164cd35d4f5fa0982f3b8f796 assets/create/models/item/cut_ochrum.json -3e8e00c602b1fbce888e6fe22d9525f1c025129d assets/create/models/item/cut_ochrum_bricks.json 1edc47c279fadde74322d3fa89ef776bdd6fb354 assets/create/models/item/cut_ochrum_brick_slab.json 4678e2a97c73139b458cea657a55f74659bc36d5 assets/create/models/item/cut_ochrum_brick_stairs.json 85044ec7033cd4c6aa913c4c4bb6c0e3a4386023 assets/create/models/item/cut_ochrum_brick_wall.json +3e8e00c602b1fbce888e6fe22d9525f1c025129d assets/create/models/item/cut_ochrum_bricks.json e0e494fb7fa1767241507347318560335339a2a8 assets/create/models/item/cut_ochrum_slab.json de7c5917bcb14f398d39e3932bfe5e1967ed7a24 assets/create/models/item/cut_ochrum_stairs.json 5a8f8c84e95ee0ab97106a801a456282f5ac207c assets/create/models/item/cut_ochrum_wall.json 1631a807135cf993d9a81068c65e78face2f24e0 assets/create/models/item/cut_scorchia.json -5ecb9692e478e29d64aeb5867e8677671560755d assets/create/models/item/cut_scorchia_bricks.json ac3a29573ce099ac57f59d0a2f1cdc0a453e0621 assets/create/models/item/cut_scorchia_brick_slab.json d3a8a8e0e85aaaadccb18cdce33da54ae0e8a8d7 assets/create/models/item/cut_scorchia_brick_stairs.json 83be13f6cbd9a58e10869e4152066cf3b265f347 assets/create/models/item/cut_scorchia_brick_wall.json +5ecb9692e478e29d64aeb5867e8677671560755d assets/create/models/item/cut_scorchia_bricks.json 0fee2e7f8e80bbd33e4d928c8374e6dae65f0b1f assets/create/models/item/cut_scorchia_slab.json 88a6b3709bab76390ace6f641eac18d43c9d099f assets/create/models/item/cut_scorchia_stairs.json d733d43252bf27b6fb1d7e016dc77556c3d1eb71 assets/create/models/item/cut_scorchia_wall.json ce75fb80c38c94bf6bf631eeb756909decaaaab0 assets/create/models/item/cut_scoria.json -81aa0bd4ec878754043a107466dcd87d49b3697c assets/create/models/item/cut_scoria_bricks.json d78a5126aefdd4cd182f9ec0ddda64df00d0f01c assets/create/models/item/cut_scoria_brick_slab.json 661d49b996f9c97a333e7e39dd13a0476db6b142 assets/create/models/item/cut_scoria_brick_stairs.json 3be69c075b479ac53c6201d7d7224d399f8009b6 assets/create/models/item/cut_scoria_brick_wall.json +81aa0bd4ec878754043a107466dcd87d49b3697c assets/create/models/item/cut_scoria_bricks.json 824bedfbeec53ec8f539fe73c0a3c3d927a21aa4 assets/create/models/item/cut_scoria_slab.json 15560f1251f18d53fe1b71adc6be5060c4d8fb94 assets/create/models/item/cut_scoria_stairs.json e35ebcc4f7f7b94623af85b181d916e48fbbb5ed assets/create/models/item/cut_scoria_wall.json 71284d3d6dba230dbecd01eb015e0e65877b820d assets/create/models/item/cut_tuff.json -4de100799e290db3fd46923781a83e6a12654266 assets/create/models/item/cut_tuff_bricks.json 4c7d5fadb0b0eaecf2055a0cd279f9ec130b93d0 assets/create/models/item/cut_tuff_brick_slab.json 6f32b83c9f82424c0e2a2e0a8813eb44c2ac4527 assets/create/models/item/cut_tuff_brick_stairs.json 9088296b7677bddf16d670858a619d846a134ef6 assets/create/models/item/cut_tuff_brick_wall.json +4de100799e290db3fd46923781a83e6a12654266 assets/create/models/item/cut_tuff_bricks.json e9134027cc917e2e878456edb49bcfee382e73b1 assets/create/models/item/cut_tuff_slab.json 8235a34249197c100645b55ded5ff619a055d8a6 assets/create/models/item/cut_tuff_stairs.json a1626993eafa8d85dc950e17cbf78378ed64c7d2 assets/create/models/item/cut_tuff_wall.json a343c74f1e55426330df18f522e6d2a81276c499 assets/create/models/item/cut_veridium.json -3c3fd197f8e299ff90850e24c6507ea12f373123 assets/create/models/item/cut_veridium_bricks.json c1c5561ce31e237b7ea8f1adfb6a79e661b7f940 assets/create/models/item/cut_veridium_brick_slab.json f633006045ccfcdf486d7a240217229d6eed717e assets/create/models/item/cut_veridium_brick_stairs.json 8182109a002317dd8d2767b3828f8c44166a053f assets/create/models/item/cut_veridium_brick_wall.json +3c3fd197f8e299ff90850e24c6507ea12f373123 assets/create/models/item/cut_veridium_bricks.json 410b949304faa5856028f7c42ab762b7498ffd95 assets/create/models/item/cut_veridium_slab.json 62697c0922b11537914d2f4f84faa0b909ee518d assets/create/models/item/cut_veridium_stairs.json 3921d61a26d48d999cbb2f6645611e53ea71978b assets/create/models/item/cut_veridium_wall.json @@ -1918,12 +1918,12 @@ badd4326fac0b0a1590a2e9bce7c2cdd4e4562f3 assets/create/models/item/empty_schemat 7ec3ed4aaab72d76f6414447bbb3ad7887adf61f assets/create/models/item/encased_fan.json 3e1fdcc80fd68199b1890bcc830f78c48e7c0e43 assets/create/models/item/experience_block.json 9775e83414c0febb5c5b832437b0580e91bcbff3 assets/create/models/item/experience_nugget.json -87add851ae3271d733c9e6888865c288b6716f3b assets/create/models/item/exposed_copper_shingles.json 721c8ac46bf23abec2bbf4cff6dbfdf96cc569a6 assets/create/models/item/exposed_copper_shingle_slab.json 6e1c7fcd8da84dc2d49adb9802ce4fb431eddae1 assets/create/models/item/exposed_copper_shingle_stairs.json -fa7ffb172a43774cc07a2bb201e7010a2549001d assets/create/models/item/exposed_copper_tiles.json +87add851ae3271d733c9e6888865c288b6716f3b assets/create/models/item/exposed_copper_shingles.json a443633d90ef9ac2a866b69b2ecdfad1841dc3e1 assets/create/models/item/exposed_copper_tile_slab.json 9bb425a14635fc8b36a9a95f3d0c54e0b129b7b4 assets/create/models/item/exposed_copper_tile_stairs.json +fa7ffb172a43774cc07a2bb201e7010a2549001d assets/create/models/item/exposed_copper_tiles.json 8b64a93d9b6e33e3caa66adb7a0cc8c5cd473023 assets/create/models/item/extendo_grip.json dad31483f65baaf187e6553e3cd301c5d69e9db4 assets/create/models/item/filter.json 575047531b8e324df9e58abba79cfe9ee3db8b16 assets/create/models/item/fluid_pipe.json @@ -1948,11 +1948,11 @@ b8d6d2d163e2ab5f654bbc4eda9ad63f8064d27c assets/create/models/item/gray_seat.jso 2843370b0e693e1ba1777c26416914edbd87c4f9 assets/create/models/item/green_seat.json 561e0579101bf602b252c0b9a5eec468c89d0e40 assets/create/models/item/green_toolbox.json 7d3ddad087b4d2c6a32f97092533cbfb5de0cb3b assets/create/models/item/green_valve_handle.json -9e352162c8135773a4eca41871beea8f3ca650ae assets/create/models/item/handheld_worldshaper.json dac0331061c464e6d3e2070b232781c632840191 assets/create/models/item/hand_crank.json +9e352162c8135773a4eca41871beea8f3ca650ae assets/create/models/item/handheld_worldshaper.json 7bb435c53cbf935d80a28746125aebbd6263e45c assets/create/models/item/haunted_bell.json -81d67fb0e59f25762a412990884813c72d399d55 assets/create/models/item/honeyed_apple.json 2e97629313eab1a4ac4b38785dbe7ed45346e625 assets/create/models/item/honey_bucket.json +81d67fb0e59f25762a412990884813c72d399d55 assets/create/models/item/honeyed_apple.json 70185e640169d6253f06fb98f31b240f4807a53e assets/create/models/item/horizontal_framed_glass.json e623c9541adc0fa877c5615e3211f47886383f2d assets/create/models/item/horizontal_framed_glass_pane.json 58b6f4ec2af3a69ae7145fb25d73451b6e8a2834 assets/create/models/item/hose_pulley.json @@ -1986,11 +1986,11 @@ dae914625ff1bc3ebe1463485cad4526a7d7e9f5 assets/create/models/item/light_blue_to 1747bcdea3b1d3f5dfb786102069e07198d36dfe assets/create/models/item/light_gray_seat.json c8513eb1c89652783e26d7dcfcf64afa97619bc8 assets/create/models/item/light_gray_toolbox.json 3774d23e76b5712e7004e333e0a770f2230c2998 assets/create/models/item/light_gray_valve_handle.json -8f53caad3899a30be5087a0ba155080834418cc0 assets/create/models/item/limestone.json -fba1e7d1cad39c89976b427db62544d80f47ad5d assets/create/models/item/limestone_pillar.json 32cd55a1c97a31a13ad106a457ec9925aa91f6d3 assets/create/models/item/lime_seat.json 931d187c11cb95a0eeae8f256187ef551b42007e assets/create/models/item/lime_toolbox.json d0f4148bdb0a905e68f54b5dfd829fd47e528fea assets/create/models/item/lime_valve_handle.json +8f53caad3899a30be5087a0ba155080834418cc0 assets/create/models/item/limestone.json +fba1e7d1cad39c89976b427db62544d80f47ad5d assets/create/models/item/limestone_pillar.json 1d30f9b525e8e9736b34a92f848e235c71fd6bd8 assets/create/models/item/linear_chassis.json 8f622f5f79446f6060d9e8815205fce919c8c829 assets/create/models/item/linked_controller.json ad6fd371ee989c9c3c21e762273e8a4e903f0af8 assets/create/models/item/magenta_seat.json @@ -2031,12 +2031,12 @@ af50363d603d61340b336569d58c1febde253665 assets/create/models/item/ochrum.json 7e767ca9e0ddb769b38fabd9289648ac63f5413d assets/create/models/item/orange_valve_handle.json 82152bca4310111d91584a2a78f05e158bb4bd90 assets/create/models/item/ornate_iron_window.json f9064c1f199bcd8db321078e2363ed91cb2acc09 assets/create/models/item/ornate_iron_window_pane.json -09b3cd8ff7b29a6dd59f739a95bb708646d23537 assets/create/models/item/oxidized_copper_shingles.json c9c7ccdb68de2e77cd9f7053fab19493dd30a985 assets/create/models/item/oxidized_copper_shingle_slab.json 89c5f7a0a28f238ebed2641e243a47e4be2ad5ab assets/create/models/item/oxidized_copper_shingle_stairs.json -1c3428e2aed32a013631db012642a34d4eaf0785 assets/create/models/item/oxidized_copper_tiles.json +09b3cd8ff7b29a6dd59f739a95bb708646d23537 assets/create/models/item/oxidized_copper_shingles.json f1af7c5f3840efc3ae07940ee6719eb3417a0e1a assets/create/models/item/oxidized_copper_tile_slab.json ef2fe68d407a03bf1ed8f2d2f3e7323777d061bb assets/create/models/item/oxidized_copper_tile_stairs.json +1c3428e2aed32a013631db012642a34d4eaf0785 assets/create/models/item/oxidized_copper_tiles.json 76aeceb41bb7df873dbafe1bd5e26deb24abf93f assets/create/models/item/peculiar_bell.json df13d4281dc45041ecd93504d45daef61d070581 assets/create/models/item/pink_seat.json 842afb2a345dbaba857e90f7dffa724841ef7b2d assets/create/models/item/pink_toolbox.json @@ -2117,12 +2117,12 @@ f91405b9aec1e0142c1b90582e03a1973251da05 assets/create/models/item/radial_chassi 1c984ea9dbaec02e88dba1b81906c9acca7ed672 assets/create/models/item/railway_casing.json 5f8e5283fbebb452f1a1141b33ee73f08879c75d assets/create/models/item/raw_zinc.json 4631d67976cef148c346a7016baaa6703e4f243e assets/create/models/item/raw_zinc_block.json -9dc6c52e258b00cac6ed23147983045c43218b5d assets/create/models/item/redstone_contact.json -f8f733364bdd32b2ad597e81103bc02344ce63bd assets/create/models/item/redstone_link.json 8d00eb1a10055a802556eab10e13f522d12acd1c assets/create/models/item/red_sand_paper.json b64a054c92cbd2e055502d470f3921d1077e63a1 assets/create/models/item/red_seat.json ac4695cc465d094b4adba1a4e9efec42c916f37d assets/create/models/item/red_toolbox.json 02473f42ef4b53dc809c7c58ae657c014bfaf652 assets/create/models/item/red_valve_handle.json +9dc6c52e258b00cac6ed23147983045c43218b5d assets/create/models/item/redstone_contact.json +f8f733364bdd32b2ad597e81103bc02344ce63bd assets/create/models/item/redstone_link.json 9926bbe6dad7c4c1a146492116d232e941c80d2b assets/create/models/item/refined_radiance.json bf827486dc7a1b3aeae577844d2dab2a97051db9 assets/create/models/item/refined_radiance_casing.json 69dc8139280bce3a7e08532afbbc5c41e7942be1 assets/create/models/item/rope_pulley.json @@ -2135,9 +2135,9 @@ d45005a89e2c0d29944e0112be274365e0e318a5 assets/create/models/item/rose_quartz_t 670e978a34faf6a3acd7880b2f94c2574178d586 assets/create/models/item/sand_paper.json 6854451e331242ec50c186a545538024b07ec123 assets/create/models/item/schedule.json 0effa517c214ba07dba2f4ed12dfcf4785e42dd8 assets/create/models/item/schematic.json -8b7727844d8c12c3c22828c7f65fc7ac2d273e36 assets/create/models/item/schematicannon.json 2a52f084fa8187dd8da28fe820dde50c47a93b57 assets/create/models/item/schematic_and_quill.json 4c8b34627001e35ee15412a0cd037d0f24ba914e assets/create/models/item/schematic_table.json +8b7727844d8c12c3c22828c7f65fc7ac2d273e36 assets/create/models/item/schematicannon.json 2955563914c2f84ed06474c135062e91189ddf3a assets/create/models/item/scorchia.json 669041e5ad29d2166cc8895f85aa262040671d3e assets/create/models/item/scorchia_pillar.json ff52eb59dadfe675e416440f3115856a501428a6 assets/create/models/item/scoria.json @@ -2147,63 +2147,63 @@ ff36a19e124caf2ee8a03767e39601df6866075b assets/create/models/item/secondary_lin abaa6da82babc26717ffff44fc41327bd015c9a6 assets/create/models/item/shadow_steel.json ffaec38d11b91add4e150e33d0e0e49394f5beca assets/create/models/item/shadow_steel_casing.json b6fcd9722e5a09a9207964cba68752512e3b945a assets/create/models/item/shaft.json -58ca190177e77db90c8195347c29d52c2cd0c556 assets/create/models/item/small_andesite_bricks.json fa92996fada8545fc340fb401bd0568f56809bf0 assets/create/models/item/small_andesite_brick_slab.json 08474bf814a55795c1f94203ceb8a969be2a2132 assets/create/models/item/small_andesite_brick_stairs.json 0e00bc6aa5be242217ed6fe8cbe1ccdf180742fb assets/create/models/item/small_andesite_brick_wall.json -543055fabb706a93037c6a9e47c334508e41b06c assets/create/models/item/small_asurine_bricks.json +58ca190177e77db90c8195347c29d52c2cd0c556 assets/create/models/item/small_andesite_bricks.json b160c3277f00f19687cffb87f9cb3aa32d3633aa assets/create/models/item/small_asurine_brick_slab.json 183fa4919f06e8c3c10f1efeceefd55389a96102 assets/create/models/item/small_asurine_brick_stairs.json d6a5ffdb493fb2c8176a7e6b42e05c2d393a2782 assets/create/models/item/small_asurine_brick_wall.json -26d9361e33e362a772220146724c0927453831e0 assets/create/models/item/small_calcite_bricks.json +543055fabb706a93037c6a9e47c334508e41b06c assets/create/models/item/small_asurine_bricks.json 8c1b5d5d40393636c9ff10afc09038c89bc1b383 assets/create/models/item/small_calcite_brick_slab.json 481ce90fb6abb05c904f01df3fe635f702bbfac0 assets/create/models/item/small_calcite_brick_stairs.json 02adb90bdf06a7c4c57d09dfd3c77cceef9b7fbe assets/create/models/item/small_calcite_brick_wall.json -d5a033d3dedb799c4752b7e68b6881529f38f8e5 assets/create/models/item/small_crimsite_bricks.json +26d9361e33e362a772220146724c0927453831e0 assets/create/models/item/small_calcite_bricks.json 8f382537c99eac3335f72db8dba33ab71f99a919 assets/create/models/item/small_crimsite_brick_slab.json b5d012cf0c5c94b73e6825b6884ab1d3eee7d64e assets/create/models/item/small_crimsite_brick_stairs.json 236457bb16bc7e949c16f3f091ee74dc3f3e6973 assets/create/models/item/small_crimsite_brick_wall.json -6ce2cb7882f41fcbcd641a442c98767bda61f65f assets/create/models/item/small_deepslate_bricks.json +d5a033d3dedb799c4752b7e68b6881529f38f8e5 assets/create/models/item/small_crimsite_bricks.json ce79900b7aa1eff0d42cabcd0a7f80ef20824551 assets/create/models/item/small_deepslate_brick_slab.json a260711af72c749a6b72f72515bbecb2e01e3ed8 assets/create/models/item/small_deepslate_brick_stairs.json 4e474891c6a269166c2eb413fae78699e5657af4 assets/create/models/item/small_deepslate_brick_wall.json -e412eaa393965ef5426c3d8d95d5c9d69e37e054 assets/create/models/item/small_diorite_bricks.json +6ce2cb7882f41fcbcd641a442c98767bda61f65f assets/create/models/item/small_deepslate_bricks.json 55b82c2f30d52acee5c3807ab2ffaed1d773cfa8 assets/create/models/item/small_diorite_brick_slab.json 49a17610b5b05595894ca2683056cecd724c1111 assets/create/models/item/small_diorite_brick_stairs.json dd3630a9c5500e6cf09e95d09e7a3cc99db11899 assets/create/models/item/small_diorite_brick_wall.json -c29d35da520d0fe828bb364db403b8cdf55f0a2e assets/create/models/item/small_dripstone_bricks.json +e412eaa393965ef5426c3d8d95d5c9d69e37e054 assets/create/models/item/small_diorite_bricks.json 21e281ec7a82d48018366a0737c6867f625b4663 assets/create/models/item/small_dripstone_brick_slab.json 6862e72eedf80536f40b6ac42ff78f13f62d012f assets/create/models/item/small_dripstone_brick_stairs.json ca8613bb64ceb562c36dd1d6a3b76b5f15f35be9 assets/create/models/item/small_dripstone_brick_wall.json -81eae95d20a9e99a070dfb8f6e6c22ef29f628d3 assets/create/models/item/small_granite_bricks.json +c29d35da520d0fe828bb364db403b8cdf55f0a2e assets/create/models/item/small_dripstone_bricks.json a19aa13eb3c04a9e0931e22e4170eec80950efab assets/create/models/item/small_granite_brick_slab.json 51bc02587cad5dfcfaf9d040848faa5277a25a5f assets/create/models/item/small_granite_brick_stairs.json 147a6f42be8312fbf050ad53c1625a1458f73cc3 assets/create/models/item/small_granite_brick_wall.json -bfa76583bca68134bbe2793c263cc0b71e1406af assets/create/models/item/small_limestone_bricks.json +81eae95d20a9e99a070dfb8f6e6c22ef29f628d3 assets/create/models/item/small_granite_bricks.json a9599981e872e683dacd01b2f0af511f416dd526 assets/create/models/item/small_limestone_brick_slab.json d8f8eadea13fc90a1c8ee5aca4be71fb22a79fd0 assets/create/models/item/small_limestone_brick_stairs.json 67626afe8b0fc9135456a24ea49c602b83d6970d assets/create/models/item/small_limestone_brick_wall.json -2d4b22d4028c55cbabc7eb405c2c6d485390afab assets/create/models/item/small_ochrum_bricks.json +bfa76583bca68134bbe2793c263cc0b71e1406af assets/create/models/item/small_limestone_bricks.json f7547aacb8bdaf61424cd56565e40d3cd40a1cfa assets/create/models/item/small_ochrum_brick_slab.json 8a320ff9e75e16a182cb7d07784a595fe7876e04 assets/create/models/item/small_ochrum_brick_stairs.json 0eedd4fe5b0a82de16fed148836087ff4ae64a74 assets/create/models/item/small_ochrum_brick_wall.json +2d4b22d4028c55cbabc7eb405c2c6d485390afab assets/create/models/item/small_ochrum_bricks.json 97b8e3eaddac0b93d4b6bc140f573969fcba5823 assets/create/models/item/small_rose_quartz_tiles.json -ac1bf1d2344517c18b945afa198d5d05e2866f6b assets/create/models/item/small_scorchia_bricks.json 63ef9901ba1014027e8c873d8374d86abb73158e assets/create/models/item/small_scorchia_brick_slab.json f52601fe54695c225a595a65e9130665582db856 assets/create/models/item/small_scorchia_brick_stairs.json b4e0db087dc88e0a3a4a82197a0ce347d3c7a7aa assets/create/models/item/small_scorchia_brick_wall.json -25b6bb40701e782ed64414ec8391b304ad5e6b12 assets/create/models/item/small_scoria_bricks.json +ac1bf1d2344517c18b945afa198d5d05e2866f6b assets/create/models/item/small_scorchia_bricks.json a4bdeb066dcc44f8be058e6d9dfc0a3fd34819bf assets/create/models/item/small_scoria_brick_slab.json 5ffb0e7de917013cd82cece2506d72fce2cd5fc6 assets/create/models/item/small_scoria_brick_stairs.json 67dcbc7d52fbbe88f89b36e04f970b27024741e4 assets/create/models/item/small_scoria_brick_wall.json -90943707d8b232d816392bec8ae05e06b6eedd72 assets/create/models/item/small_tuff_bricks.json +25b6bb40701e782ed64414ec8391b304ad5e6b12 assets/create/models/item/small_scoria_bricks.json 91a144100eea8b4e67a0a4f31b35a714693fa001 assets/create/models/item/small_tuff_brick_slab.json b3f89c9f8e46fbdfc58171073d6ad91c588e5853 assets/create/models/item/small_tuff_brick_stairs.json 52c1d4cfb5f1726c9ccbb00db60bdd6f760bf40f assets/create/models/item/small_tuff_brick_wall.json -6935d6d9dbdb99fe7258d9347419d65571711263 assets/create/models/item/small_veridium_bricks.json +90943707d8b232d816392bec8ae05e06b6eedd72 assets/create/models/item/small_tuff_bricks.json 0bb60fc6ab570db83214fd10c83d931f6677e361 assets/create/models/item/small_veridium_brick_slab.json 89918d98b6830477b21ab7fb9e30807d3ca1d379 assets/create/models/item/small_veridium_brick_stairs.json ab4e7695e99548f83a89f3d5ad7690a576bafcc0 assets/create/models/item/small_veridium_brick_wall.json +6935d6d9dbdb99fe7258d9347419d65571711263 assets/create/models/item/small_veridium_bricks.json 6cf508dbd3d015ea730366db92bb17844dc2ca06 assets/create/models/item/smart_chute.json 9201f00edcf2ffa33cb079c28b5c33e39872c824 assets/create/models/item/smart_fluid_pipe.json 67804bdd890f167010f6101a700e85a3245f4cc3 assets/create/models/item/speedometer.json @@ -2240,36 +2240,36 @@ b0f6d37aa695395e28a23d36775092f63ab3f5a5 assets/create/models/item/vertical_gear 9c5087114e35052c5e56bb752252de5d092408c5 assets/create/models/item/warped_window.json 83502f4b8d0134e793611b36a56cca59af097ed5 assets/create/models/item/warped_window_pane.json e5939b47bf7440dc101c667e68ef6bf750a3290f assets/create/models/item/water_wheel.json -be2f058a7ecb015599ee052ec27c4360d636999a assets/create/models/item/waxed_copper_shingles.json adc188e4e48bea80607c6e0c7076c9bdd7236cb0 assets/create/models/item/waxed_copper_shingle_slab.json 7e224aceaa94361256e95e4c44d8814aebaf297c assets/create/models/item/waxed_copper_shingle_stairs.json -eced19a2f721c54b968e5979cde2705f15faf3e1 assets/create/models/item/waxed_copper_tiles.json +be2f058a7ecb015599ee052ec27c4360d636999a assets/create/models/item/waxed_copper_shingles.json 68b3632c34adb9991aa993385f53624632c260f2 assets/create/models/item/waxed_copper_tile_slab.json a7fc0cc2d32dcd49c3274597ce7121f01fca03f8 assets/create/models/item/waxed_copper_tile_stairs.json -5336907eba067492f6d00b4b8514f9663830a1d5 assets/create/models/item/waxed_exposed_copper_shingles.json +eced19a2f721c54b968e5979cde2705f15faf3e1 assets/create/models/item/waxed_copper_tiles.json fd428034c46a240c4bb2a1aee625b8767f41c3ef assets/create/models/item/waxed_exposed_copper_shingle_slab.json 43d714187fe6c0cd1ed7abcddef1ebcd63979ff4 assets/create/models/item/waxed_exposed_copper_shingle_stairs.json -962b24b3611abefc21920d01452944710ab0da3f assets/create/models/item/waxed_exposed_copper_tiles.json +5336907eba067492f6d00b4b8514f9663830a1d5 assets/create/models/item/waxed_exposed_copper_shingles.json 25f5a10fe8e6acbdbf8457d56aeee065835a93ec assets/create/models/item/waxed_exposed_copper_tile_slab.json 22917505d328fb5b489b9f7f9068f1514b784abb assets/create/models/item/waxed_exposed_copper_tile_stairs.json -12c3dd893bddb66b9b387652c67c8f0e24b643ff assets/create/models/item/waxed_oxidized_copper_shingles.json +962b24b3611abefc21920d01452944710ab0da3f assets/create/models/item/waxed_exposed_copper_tiles.json 9b7c82376ea8c1c8ecbc7bbe15283f84b0d50d94 assets/create/models/item/waxed_oxidized_copper_shingle_slab.json fbb6043eb935aa0641a482ee7300c780be257440 assets/create/models/item/waxed_oxidized_copper_shingle_stairs.json -6b8f75d4818db903b22f4626d02671ab76a61023 assets/create/models/item/waxed_oxidized_copper_tiles.json +12c3dd893bddb66b9b387652c67c8f0e24b643ff assets/create/models/item/waxed_oxidized_copper_shingles.json 6e7bc8eb9a87d903dcc590e9918ce8d4411bf190 assets/create/models/item/waxed_oxidized_copper_tile_slab.json 10136759b31e4d957e8374948460d6c984711326 assets/create/models/item/waxed_oxidized_copper_tile_stairs.json -ce2dcfc01205da1dc70f34091a2c24f563e72466 assets/create/models/item/waxed_weathered_copper_shingles.json +6b8f75d4818db903b22f4626d02671ab76a61023 assets/create/models/item/waxed_oxidized_copper_tiles.json 2bf249c677d30a4febf950fa7c6caa87c348c54e assets/create/models/item/waxed_weathered_copper_shingle_slab.json 9fa84f2555d82b5a1550b748a332ceb443a04fae assets/create/models/item/waxed_weathered_copper_shingle_stairs.json -02d2ac048c9bea86d10673254dfc107f3c9c5bb5 assets/create/models/item/waxed_weathered_copper_tiles.json +ce2dcfc01205da1dc70f34091a2c24f563e72466 assets/create/models/item/waxed_weathered_copper_shingles.json ab40b1a5a03cd290d53ef2ea65f90dcfcd2673de assets/create/models/item/waxed_weathered_copper_tile_slab.json dadc7b65a4527e288c21a20df978796a8c444fd2 assets/create/models/item/waxed_weathered_copper_tile_stairs.json -86b8e71fa8b7aeb73eafda89d8d06d83da6a5d25 assets/create/models/item/weathered_copper_shingles.json +02d2ac048c9bea86d10673254dfc107f3c9c5bb5 assets/create/models/item/waxed_weathered_copper_tiles.json 94db30ad2381d2f2c37cdfd0d5ce5c45a2807640 assets/create/models/item/weathered_copper_shingle_slab.json 7262c01df4b5a8cd8c6a5545062f251d5ad9fd06 assets/create/models/item/weathered_copper_shingle_stairs.json -99f17b16b68201aefb78298b3e6c657e3c2235e0 assets/create/models/item/weathered_copper_tiles.json +86b8e71fa8b7aeb73eafda89d8d06d83da6a5d25 assets/create/models/item/weathered_copper_shingles.json 0b1b299d6dfab65b6060305a8b3e51f6e2df09f4 assets/create/models/item/weathered_copper_tile_slab.json 0c3989b44fde934ba8b88b071887e5ede522c417 assets/create/models/item/weathered_copper_tile_stairs.json +99f17b16b68201aefb78298b3e6c657e3c2235e0 assets/create/models/item/weathered_copper_tiles.json 79431edb868e6560f4f6d5b3441c0176c7699f5e assets/create/models/item/weighted_ejector.json 0fd2214cdff8a92e05d9d5ee888329b3235143c0 assets/create/models/item/wheat_flour.json aacced59d21212090d508a9684bb46c9472a8a2f assets/create/models/item/whisk.json @@ -2315,42 +2315,42 @@ fb36a2f400347c3291978a49e59374f3ac459f14 data/create/advancements/recipes/buildi 6df6a6885c3ebf92f98f105be16d8e0c80da19f0 data/create/advancements/recipes/building_blocks/birch_window_pane.json 0d724aefa51b969dbadb59b1193172a44ecf5644 data/create/advancements/recipes/building_blocks/calcite_from_stone_types_calcite_stonecutting.json 537fe5dffa659e5838379587fbd84f2f641551ea data/create/advancements/recipes/building_blocks/calcite_pillar_from_stone_types_calcite_stonecutting.json -09f332cd34e6a92af9e8e4e757418c7ba8b536da data/create/advancements/recipes/building_blocks/copper_shingles_from_ingots_copper_stonecutting.json 55214a0fd27318b17163cace66c7525785127ef8 data/create/advancements/recipes/building_blocks/copper_shingle_slab.json fb4210dbbfb74459e10da94a540f3bfdf91c4a8d data/create/advancements/recipes/building_blocks/copper_shingle_slab_from_copper_shingles_stonecutting.json 31b04ac1b117fb65f5129c5bbb48e42c1c4c1003 data/create/advancements/recipes/building_blocks/copper_shingle_stairs.json bef4a9a4c2e722d4f086d6b4c9d6fa1d0836ec10 data/create/advancements/recipes/building_blocks/copper_shingle_stairs_from_copper_shingles_stonecutting.json -f66a48f01afb4fa1babee4a8c28b032280c3ac9e data/create/advancements/recipes/building_blocks/copper_tiles_from_ingots_copper_stonecutting.json +09f332cd34e6a92af9e8e4e757418c7ba8b536da data/create/advancements/recipes/building_blocks/copper_shingles_from_ingots_copper_stonecutting.json ef79744ebf31453d1c81789afed7b717837b3515 data/create/advancements/recipes/building_blocks/copper_tile_slab.json 8e9997c43b1c06521fe8d38b04ccb3f04c93d537 data/create/advancements/recipes/building_blocks/copper_tile_slab_from_copper_tiles_stonecutting.json a2609aa8b5453f2294f38c81d26e0b8dad71087d data/create/advancements/recipes/building_blocks/copper_tile_stairs.json d47e46c66bf69e8310e6687716858842e8aed7b5 data/create/advancements/recipes/building_blocks/copper_tile_stairs_from_copper_tiles_stonecutting.json +f66a48f01afb4fa1babee4a8c28b032280c3ac9e data/create/advancements/recipes/building_blocks/copper_tiles_from_ingots_copper_stonecutting.json cc14d10c75ab0fdd7c54db1922e5e56667739fef data/create/advancements/recipes/building_blocks/copycat_panel_from_ingots_zinc_stonecutting.json 55d2812be912c857ff666d581174378857d3bce2 data/create/advancements/recipes/building_blocks/copycat_step_from_ingots_zinc_stonecutting.json -8615fc107b1f4df86711081a9dccac8631b02e6b data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingles_from_honeycomb.json 0e0eba8550768ef69087dff8112814f25233fab7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json 2c960d55273df4c0c8c33b2c329175b35b18fc8c data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json -fa8f3ed9a4c6f0c3cd4c21b0ae4dc8ca4dba8678 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tiles_from_honeycomb.json +8615fc107b1f4df86711081a9dccac8631b02e6b data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_shingles_from_honeycomb.json d6f2aa7fd10c96f71c47bdabb3e53dc4c4e73706 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json eca165eee20adba1557ccc74ef50ee90311b3019 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json -88a236933e8dfe0d809bda098d16782288c4800c data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json +fa8f3ed9a4c6f0c3cd4c21b0ae4dc8ca4dba8678 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_copper_tiles_from_honeycomb.json 301149dabc4dce290b4884f4ed3cb2132123adf0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json f360dce7bece72672f2624710c88edbe3e3f8885 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json -bc27959288766492746f41c4810350dcef1b320d data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json +88a236933e8dfe0d809bda098d16782288c4800c data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json 7ceb4b74ff84ed404518b6cb5e1432dac5903b5f data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json ec1eec3bc25534484cb264134e62b578525422aa data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json -2e8f1da032110e8c5ec375ffd425e5eed7f58cae data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json +bc27959288766492746f41c4810350dcef1b320d data/create/advancements/recipes/building_blocks/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json e34abb4d51c1d00419fc3d3799ca0d9fe7ea1027 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json 9471e190beb603f022fb234f2cf35b5b4b93f0c0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json -17fe14b753953a68887cd001fcaa264ef031463f data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json +2e8f1da032110e8c5ec375ffd425e5eed7f58cae data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json 2577754364f05264fac325f67597230d01fa0c1d data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json 003e384d9594a4e6ef5678e74f04b56de047dbde data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json -5009a82a897a15407fec785005107b0d228fffe7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json +17fe14b753953a68887cd001fcaa264ef031463f data/create/advancements/recipes/building_blocks/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json 70ce32937dcf349dce77fef8022bc0c15863f6a6 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json 1fc498238dcc2705152573ba7f74bb50e7e66ca7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json -d12aa3dd5457327224fd007211878eec21043971 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json +5009a82a897a15407fec785005107b0d228fffe7 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json 6f461d7036de914c636b7916dc798775ccf25be1 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json 3bc9efcddecd23fd06c6056a0ee7b937959cecc0 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json +d12aa3dd5457327224fd007211878eec21043971 data/create/advancements/recipes/building_blocks/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json 3064c52dea808a00c211bfedb96106b563f480da data/create/advancements/recipes/building_blocks/crafting/kinetics/black_seat.json f07a0b21db200ab68a7df02db519869f68953286 data/create/advancements/recipes/building_blocks/crafting/kinetics/black_seat_from_other_seat.json 80ac4db5c53c7efc2666a7abb4e2e876c5f86588 data/create/advancements/recipes/building_blocks/crafting/kinetics/blue_seat.json @@ -2387,7 +2387,6 @@ f3188b24f8108be4219016689a4768f826b4fef3 data/create/advancements/recipes/buildi e88373b83226d860b0c2131213f5d3b09f31ab96 data/create/advancements/recipes/building_blocks/crimsite_pillar_from_stone_types_crimsite_stonecutting.json 09f7122cf360fd56bde2b1659bbed526f9a119c4 data/create/advancements/recipes/building_blocks/crimson_window.json b5234c6050bc0c6fe872a5ddc87d46ba39e07971 data/create/advancements/recipes/building_blocks/crimson_window_pane.json -b32f4345517c3c7299a06489325bd85f987145dc data/create/advancements/recipes/building_blocks/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json 22fe2e61d7e9836d9f71c39bfbba50efc2fa184d data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab.json 6d8d28364f1016dfd1d7cbe4a2637e2b6224e4d8 data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab_from_stone_types_andesite_stonecutting.json 39e904f66d2194de5437b5da2f8db8b6f03d78f4 data/create/advancements/recipes/building_blocks/cut_andesite_brick_slab_recycling.json @@ -2395,6 +2394,7 @@ b32f4345517c3c7299a06489325bd85f987145dc data/create/advancements/recipes/buildi 480c696956b99c96cbaf46e7dad9711c40680ec8 data/create/advancements/recipes/building_blocks/cut_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json 8d504cdb99f5dc59bef5ff35d0b443f2f4ba21d2 data/create/advancements/recipes/building_blocks/cut_andesite_brick_wall.json e1b8e5906d54368c98867b83143dc7acc7b0aa28 data/create/advancements/recipes/building_blocks/cut_andesite_brick_wall_from_stone_types_andesite_stonecutting.json +b32f4345517c3c7299a06489325bd85f987145dc data/create/advancements/recipes/building_blocks/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json d5b44158f9a98d874d941fc4df99de7a2657af21 data/create/advancements/recipes/building_blocks/cut_andesite_from_stone_types_andesite_stonecutting.json c11998f554bbd42efdbdf58cf8efe5bcf69230de data/create/advancements/recipes/building_blocks/cut_andesite_slab.json 1f457c0e816e4dd70e1a960015d2004814d11926 data/create/advancements/recipes/building_blocks/cut_andesite_slab_from_stone_types_andesite_stonecutting.json @@ -2403,7 +2403,6 @@ a4d7adf49472a2069bad72defd39b111b83def3d data/create/advancements/recipes/buildi 6d38bb2b9812761c594ebdf717284ba8d32e88bc data/create/advancements/recipes/building_blocks/cut_andesite_stairs_from_stone_types_andesite_stonecutting.json 2f6b2296b11e0e743d68749e65af5ffa0f374998 data/create/advancements/recipes/building_blocks/cut_andesite_wall.json caf3b1c62d0f8df3ce126535f0566c899577bedb data/create/advancements/recipes/building_blocks/cut_andesite_wall_from_stone_types_andesite_stonecutting.json -54188623046e989d21e6e155933e4084fb2882c4 data/create/advancements/recipes/building_blocks/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json 536a2bed2ed1e7e249886ef376c96a8d5a1facdc data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab.json a4e833cadfbb82222a70d66524e804c83ea13f7b data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab_from_stone_types_asurine_stonecutting.json 610163ac2f4b06121931a81ac4b3df39ece61998 data/create/advancements/recipes/building_blocks/cut_asurine_brick_slab_recycling.json @@ -2411,6 +2410,7 @@ a4e833cadfbb82222a70d66524e804c83ea13f7b data/create/advancements/recipes/buildi f92f31e80cc026160217afb6c757987f75ed0b33 data/create/advancements/recipes/building_blocks/cut_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json fa6dc7eaa32652a00a7217ae25967de0791088b6 data/create/advancements/recipes/building_blocks/cut_asurine_brick_wall.json 33f361369bfd92f53b3e40c837b336edd04a26e9 data/create/advancements/recipes/building_blocks/cut_asurine_brick_wall_from_stone_types_asurine_stonecutting.json +54188623046e989d21e6e155933e4084fb2882c4 data/create/advancements/recipes/building_blocks/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json a6b871faa10badaaaa1a0ebbba94c4f2f627c43f data/create/advancements/recipes/building_blocks/cut_asurine_from_stone_types_asurine_stonecutting.json 719e1d4fea3457f2990be6a5d6cd87915d546217 data/create/advancements/recipes/building_blocks/cut_asurine_slab.json 586918291dda711c79941cf484cb62dbb853a271 data/create/advancements/recipes/building_blocks/cut_asurine_slab_from_stone_types_asurine_stonecutting.json @@ -2419,7 +2419,6 @@ bd2a630d242ae9c89b071b0401285068071a346c data/create/advancements/recipes/buildi 03d7b1609d161043e28661d74f53b06d4408f561 data/create/advancements/recipes/building_blocks/cut_asurine_stairs_from_stone_types_asurine_stonecutting.json cba4a6feaf695e665204cac36f9109ba941b12a6 data/create/advancements/recipes/building_blocks/cut_asurine_wall.json 3327651dd3f2fd778abdcfe70d25137d916f3def data/create/advancements/recipes/building_blocks/cut_asurine_wall_from_stone_types_asurine_stonecutting.json -44873f9d05abde7d52a6eacdf3573d8b69c69452 data/create/advancements/recipes/building_blocks/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json a070ffe63c182b33c4c6faedb391f51a209c0e27 data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab.json 7ba1e7add81422599f798153e4fd069e9fbfdebf data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab_from_stone_types_calcite_stonecutting.json f5e80ec393c306485d666d6f9f91c55d9f1ba592 data/create/advancements/recipes/building_blocks/cut_calcite_brick_slab_recycling.json @@ -2427,6 +2426,7 @@ f5e80ec393c306485d666d6f9f91c55d9f1ba592 data/create/advancements/recipes/buildi 627f85aa63133cf95dd828092e0232b9ec8acfd5 data/create/advancements/recipes/building_blocks/cut_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json d8870e522a68274cc90eab07ea17b7b6cdc5a16c data/create/advancements/recipes/building_blocks/cut_calcite_brick_wall.json cdf5927f3c1b3ef8904f38f66317412799e189fb data/create/advancements/recipes/building_blocks/cut_calcite_brick_wall_from_stone_types_calcite_stonecutting.json +44873f9d05abde7d52a6eacdf3573d8b69c69452 data/create/advancements/recipes/building_blocks/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json 9f8c31b0db2aab8f1c8f42bcef15a74bc36887d4 data/create/advancements/recipes/building_blocks/cut_calcite_from_stone_types_calcite_stonecutting.json 857666ad1c6a5cc886f6896a18f560098afaa67b data/create/advancements/recipes/building_blocks/cut_calcite_slab.json c55074cd091b0e078105abdc940c62afa8984265 data/create/advancements/recipes/building_blocks/cut_calcite_slab_from_stone_types_calcite_stonecutting.json @@ -2435,7 +2435,6 @@ c55074cd091b0e078105abdc940c62afa8984265 data/create/advancements/recipes/buildi ba3378e1d08de2af0b2a725727cf9f68bda60044 data/create/advancements/recipes/building_blocks/cut_calcite_stairs_from_stone_types_calcite_stonecutting.json db5f4e1eee91c2a65d36164c20aba0e9d3a502ae data/create/advancements/recipes/building_blocks/cut_calcite_wall.json 19de370083d2cf1234c9c4e6ff45d85ef34a1ac8 data/create/advancements/recipes/building_blocks/cut_calcite_wall_from_stone_types_calcite_stonecutting.json -b9a2edda241f6e0677a2003300f0be5d3ff8f4b0 data/create/advancements/recipes/building_blocks/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json 9fda0e6edde197a9c28a854419a2a07e323b6b53 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab.json 2da3f139759be7eea552885b2063a0e2dfc647b1 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json 62d928c8ab2e09a3f87adacb5adb1a5ddc1d2a7b data/create/advancements/recipes/building_blocks/cut_crimsite_brick_slab_recycling.json @@ -2443,6 +2442,7 @@ b9a2edda241f6e0677a2003300f0be5d3ff8f4b0 data/create/advancements/recipes/buildi 89850244feb8a3293ba96702b7a56a4bea84e1f3 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json 267cab789c73d474299542fb0719967501fcf0c9 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_wall.json 27007676b86eb8a3498982d8b5e68495b84d62d5 data/create/advancements/recipes/building_blocks/cut_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json +b9a2edda241f6e0677a2003300f0be5d3ff8f4b0 data/create/advancements/recipes/building_blocks/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json a88d252d4e634ff194daa3ff98fd7e965e3ed09a data/create/advancements/recipes/building_blocks/cut_crimsite_from_stone_types_crimsite_stonecutting.json f703136e1783a42252bc1d89c31e5563cbdff583 data/create/advancements/recipes/building_blocks/cut_crimsite_slab.json 3330d332462da22de48d07b62277c1df8e646a3e data/create/advancements/recipes/building_blocks/cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json @@ -2451,7 +2451,6 @@ c2707e5969f0c554537dda9d3e2a4c13e19863c3 data/create/advancements/recipes/buildi e9ba513178090b020525e72468a0450e225da779 data/create/advancements/recipes/building_blocks/cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json 7fb5ce65b7b5c2d76b4306d407aaa6eefe07b7e5 data/create/advancements/recipes/building_blocks/cut_crimsite_wall.json a83d5b669f92bd833af2768d2cf5d4797a86b63c data/create/advancements/recipes/building_blocks/cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json -bc9eb21df37df4b69e5d202b3b770698a16f4413 data/create/advancements/recipes/building_blocks/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json 2c380e8ddc83cef4213f136ff7a196d861728914 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab.json 87b5dfc1e61fabe4e7661bea0d7a56cb75197a81 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json 09cde6df1120cc5f5f129023885f323b4d1eeae9 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_slab_recycling.json @@ -2459,6 +2458,7 @@ bc9eb21df37df4b69e5d202b3b770698a16f4413 data/create/advancements/recipes/buildi 28e15fe2c377540cb631f6648f49090f234e7704 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json d2b34f455ab0053f24a4f9dec7dcce45832ef25b data/create/advancements/recipes/building_blocks/cut_deepslate_brick_wall.json 7b174b65b813b4a9ca507e71fa142931e074f336 data/create/advancements/recipes/building_blocks/cut_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json +bc9eb21df37df4b69e5d202b3b770698a16f4413 data/create/advancements/recipes/building_blocks/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json 83db3f5b46c996481b930974bddba75c82c115af data/create/advancements/recipes/building_blocks/cut_deepslate_from_stone_types_deepslate_stonecutting.json 8e8816aad8212c3557e77cc01df551fe1a0a306d data/create/advancements/recipes/building_blocks/cut_deepslate_slab.json 14ea447072200733dd9551a5ac6a9544593dd9f7 data/create/advancements/recipes/building_blocks/cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json @@ -2467,7 +2467,6 @@ c7870abb459c8b174c380282ae211a87ab252521 data/create/advancements/recipes/buildi 4f157401a3019c96cc6ae5a0036f31351c651fbb data/create/advancements/recipes/building_blocks/cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json 9ae9635fa129aab54a7ec971b9cc61d300d3d53e data/create/advancements/recipes/building_blocks/cut_deepslate_wall.json 9b5df53000c79a7b20e3a1888e003b704809feda data/create/advancements/recipes/building_blocks/cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json -fdef99789ca74623b00b05be2f975b63831645db data/create/advancements/recipes/building_blocks/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json 30a00465dc9b19d8024146e2c2d6b9f41562da30 data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab.json a55e7daf48a487d74b4a01e30b80968094154d2b data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab_from_stone_types_diorite_stonecutting.json e445a3d8fd00f5e4f2ee56c797d8abf548598447 data/create/advancements/recipes/building_blocks/cut_diorite_brick_slab_recycling.json @@ -2475,6 +2474,7 @@ b421f24513612dd7a5d8977d7bff122fd5cf9522 data/create/advancements/recipes/buildi 3fe00adac35beeda79b7f9d930a1f13b033c0f12 data/create/advancements/recipes/building_blocks/cut_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json 6d2235b8587863107a6d1a0818c81ee3dc217cdf data/create/advancements/recipes/building_blocks/cut_diorite_brick_wall.json 0ec4b69e98adf961f5d4d63700f11ad66a4116b5 data/create/advancements/recipes/building_blocks/cut_diorite_brick_wall_from_stone_types_diorite_stonecutting.json +fdef99789ca74623b00b05be2f975b63831645db data/create/advancements/recipes/building_blocks/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json c9f52e0661fdc266f8429faf1570124fecfa2d6a data/create/advancements/recipes/building_blocks/cut_diorite_from_stone_types_diorite_stonecutting.json c7b73ddec6402e8b5ff5daedbbbc74f882338a8e data/create/advancements/recipes/building_blocks/cut_diorite_slab.json 46c841e5aae99106cbc28026dcfec946976127e5 data/create/advancements/recipes/building_blocks/cut_diorite_slab_from_stone_types_diorite_stonecutting.json @@ -2483,7 +2483,6 @@ ce67a5fae622955ad795e2b3d14c159a4c47b936 data/create/advancements/recipes/buildi 3b7ec28df80ea9cf87980b2c2184858ba6152a3f data/create/advancements/recipes/building_blocks/cut_diorite_stairs_from_stone_types_diorite_stonecutting.json c8fe9ab53eda2cdbff08678ebb577c169ea61a91 data/create/advancements/recipes/building_blocks/cut_diorite_wall.json 050f67b5a662bea3ef972521ef7f81c2ba99015c data/create/advancements/recipes/building_blocks/cut_diorite_wall_from_stone_types_diorite_stonecutting.json -b60683fdd629b201f40a6f9bb6594df7c5ac13f1 data/create/advancements/recipes/building_blocks/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json 1e0d39ed56e2ab4eac084f26a1c6de905db29220 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab.json 020cbc4c8063d186d3f5c9ece429e4cdff53cf63 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json b44c9e7f9f62ffffb5566901e0a22010ba76641c data/create/advancements/recipes/building_blocks/cut_dripstone_brick_slab_recycling.json @@ -2491,6 +2490,7 @@ b44c9e7f9f62ffffb5566901e0a22010ba76641c data/create/advancements/recipes/buildi 466fbdf7de8dacd1032fb7af690862bb68707876 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json 253b54c191c933e88fa6a9b4e7c94340082c7d60 data/create/advancements/recipes/building_blocks/cut_dripstone_brick_wall.json e176568e3de8b8ca17a788f4cea89002b5ad2d1d data/create/advancements/recipes/building_blocks/cut_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json +b60683fdd629b201f40a6f9bb6594df7c5ac13f1 data/create/advancements/recipes/building_blocks/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json ddc5a16cf0d2790d8133ab6801f4c55317d776e4 data/create/advancements/recipes/building_blocks/cut_dripstone_from_stone_types_dripstone_stonecutting.json 6e40c9af0747a8b3adb805ddd8fbb947aedb408c data/create/advancements/recipes/building_blocks/cut_dripstone_slab.json e7761f71f797d2e62dc0860cbd5153955b9be86c data/create/advancements/recipes/building_blocks/cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json @@ -2499,7 +2499,6 @@ a199a9f78a44f4313a922b317893c68f743dc1a9 data/create/advancements/recipes/buildi b68a95a565ee9a3aec017431aa5b8cc6fffec3ef data/create/advancements/recipes/building_blocks/cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json a4287f34f95c008bdf7c0a886d05c3960665147b data/create/advancements/recipes/building_blocks/cut_dripstone_wall.json 76f5d4a6a9895064b15ae0c0f27a138bb3d57dbf data/create/advancements/recipes/building_blocks/cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json -24cc01d592faf2bad57fc9b9a1de52c50d225446 data/create/advancements/recipes/building_blocks/cut_granite_bricks_from_stone_types_granite_stonecutting.json 83148f66dc7418740b6f9b6a660b0b9306d87f7c data/create/advancements/recipes/building_blocks/cut_granite_brick_slab.json d982802fc11848c87022f7bf05cecf090953002a data/create/advancements/recipes/building_blocks/cut_granite_brick_slab_from_stone_types_granite_stonecutting.json 6b8fa161725a4e2106226c3591a23def74398f48 data/create/advancements/recipes/building_blocks/cut_granite_brick_slab_recycling.json @@ -2507,6 +2506,7 @@ ce1c81b730b3acef9673f41769339f7d68385348 data/create/advancements/recipes/buildi e9732e3beaefbc6a457e0c4fd61f17f429f1cd8c data/create/advancements/recipes/building_blocks/cut_granite_brick_stairs_from_stone_types_granite_stonecutting.json 4f403aee2aae6aa0fc334b434cf5ade362153329 data/create/advancements/recipes/building_blocks/cut_granite_brick_wall.json 625c8849b5c07835b49dcb4322ec44586628a700 data/create/advancements/recipes/building_blocks/cut_granite_brick_wall_from_stone_types_granite_stonecutting.json +24cc01d592faf2bad57fc9b9a1de52c50d225446 data/create/advancements/recipes/building_blocks/cut_granite_bricks_from_stone_types_granite_stonecutting.json 07e6f3835c3683f007fd25140d671b668706484d data/create/advancements/recipes/building_blocks/cut_granite_from_stone_types_granite_stonecutting.json 2f33b7f82e977eb3fd0e0283313b1066eadadd18 data/create/advancements/recipes/building_blocks/cut_granite_slab.json a1b406ca98c2ba7d5225afea8463d586fc538428 data/create/advancements/recipes/building_blocks/cut_granite_slab_from_stone_types_granite_stonecutting.json @@ -2515,7 +2515,6 @@ af12a2d8f8bb2382f55135df8cfec00692a65fe3 data/create/advancements/recipes/buildi 284087e07acd28aa869d5433375e412f083108e9 data/create/advancements/recipes/building_blocks/cut_granite_stairs_from_stone_types_granite_stonecutting.json dbfb50c3d5048b1f5d8d74f39c389ecec81392d7 data/create/advancements/recipes/building_blocks/cut_granite_wall.json 6b287be7a900dbd715290b069a89ab226d6cec9c data/create/advancements/recipes/building_blocks/cut_granite_wall_from_stone_types_granite_stonecutting.json -4ef0a018dcf0b470061a4b1dbadc27684d8d467f data/create/advancements/recipes/building_blocks/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json b0ade7dab7eb095f07882e4c19884162f18e704c data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab.json 4fc2dc61d62a394cebc91e36745699eeaee650e7 data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab_from_stone_types_limestone_stonecutting.json b8ec42f06ce9eb696643154d16150a223bd5ec65 data/create/advancements/recipes/building_blocks/cut_limestone_brick_slab_recycling.json @@ -2523,6 +2522,7 @@ d0b19c27309cd45d08a6a0cd779f1930bc2e7469 data/create/advancements/recipes/buildi 9f65617405592d587a940ff7513fcb34ca6ab423 data/create/advancements/recipes/building_blocks/cut_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json 281e2ddcb58b603dea8f305ed6c8ddea98d0d030 data/create/advancements/recipes/building_blocks/cut_limestone_brick_wall.json 7b0ab5095a7d2b3e876a8c8b990161851c1c58c2 data/create/advancements/recipes/building_blocks/cut_limestone_brick_wall_from_stone_types_limestone_stonecutting.json +4ef0a018dcf0b470061a4b1dbadc27684d8d467f data/create/advancements/recipes/building_blocks/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json f8663a45d71c52a3982c75bbfb61653c8d2fd668 data/create/advancements/recipes/building_blocks/cut_limestone_from_stone_types_limestone_stonecutting.json 9e22972cd4f2d673cfcf07a597f6a14402c91913 data/create/advancements/recipes/building_blocks/cut_limestone_slab.json 388a57bb88582eda9fef904a530f72b066d24e7d data/create/advancements/recipes/building_blocks/cut_limestone_slab_from_stone_types_limestone_stonecutting.json @@ -2531,7 +2531,6 @@ f8663a45d71c52a3982c75bbfb61653c8d2fd668 data/create/advancements/recipes/buildi b6dc46dca3fc039fd0fe53ab791731cb085c3b62 data/create/advancements/recipes/building_blocks/cut_limestone_stairs_from_stone_types_limestone_stonecutting.json a9382d5f876542bf4fa8aed605352daca4ad2f6f data/create/advancements/recipes/building_blocks/cut_limestone_wall.json 69d9116786c53cb3155bed4580d4b01bfe638243 data/create/advancements/recipes/building_blocks/cut_limestone_wall_from_stone_types_limestone_stonecutting.json -1f8ee1a91937295484d5c2fe0186a617589c1761 data/create/advancements/recipes/building_blocks/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json a51d6ebed8e21e8808ccfbe9f9540291504da59a data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab.json eb08f00651259f83f6eced0f90dd8df0e9d0d508 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json a189e0549723cefbd19a147274cd79909dca2b70 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_slab_recycling.json @@ -2539,6 +2538,7 @@ a5dc9e74ad0d18d83bad3aab8c5e2768355a2370 data/create/advancements/recipes/buildi 27a5331727199b8b8f2dd6c581e25d17d12fc1ba data/create/advancements/recipes/building_blocks/cut_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json 648e532441c664310047c5c9c78833d2eaea5920 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_wall.json 053256b7b154ba5c10d2483d86658f132296e8f5 data/create/advancements/recipes/building_blocks/cut_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +1f8ee1a91937295484d5c2fe0186a617589c1761 data/create/advancements/recipes/building_blocks/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json 6abb6e36229685ca26ee31b5db3074a07453435e data/create/advancements/recipes/building_blocks/cut_ochrum_from_stone_types_ochrum_stonecutting.json 0c5e92fb20048fe5d9dcd42e10fd0f9b155c385a data/create/advancements/recipes/building_blocks/cut_ochrum_slab.json 941aba0ff7967d7ea56e1f811aa6bc34d4711796 data/create/advancements/recipes/building_blocks/cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json @@ -2547,7 +2547,6 @@ fa14009e4de8cfdacdbb7679473ce359f2cb85be data/create/advancements/recipes/buildi d50accd7f37bfd9384790bdd727401757f6dc7e4 data/create/advancements/recipes/building_blocks/cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json ed0a72f6393c0d16240b89241f5bbac7dc003516 data/create/advancements/recipes/building_blocks/cut_ochrum_wall.json cda838f95015b0bf02fc5427e1a69ed6302b7e20 data/create/advancements/recipes/building_blocks/cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json -a51cd5a82d9b30c8a68f7cdf8dd7a6b2f883c27c data/create/advancements/recipes/building_blocks/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json ce33e5a98a83dae1f37ad4b3d4ea148de5bcacdf data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab.json 498825e9e5502a7ec8a1f23bfe998b960d7fc9eb data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json 8ffa08b1b4e4ab37dfbf09d2ec4a37f93c9503cb data/create/advancements/recipes/building_blocks/cut_scorchia_brick_slab_recycling.json @@ -2555,6 +2554,7 @@ ce33e5a98a83dae1f37ad4b3d4ea148de5bcacdf data/create/advancements/recipes/buildi 3c4b45560f446534821da63d4e713088928e5f4a data/create/advancements/recipes/building_blocks/cut_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json 2aba76185175fff82898a7a905d3ec4ff448deaa data/create/advancements/recipes/building_blocks/cut_scorchia_brick_wall.json ca1f54af4425df994c6707f00e43b8db3ce66280 data/create/advancements/recipes/building_blocks/cut_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json +a51cd5a82d9b30c8a68f7cdf8dd7a6b2f883c27c data/create/advancements/recipes/building_blocks/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json df847f312960866d3d53f48297ea3169c27314eb data/create/advancements/recipes/building_blocks/cut_scorchia_from_stone_types_scorchia_stonecutting.json 8095f7be8aac4f11d618549680d537bed8a921c5 data/create/advancements/recipes/building_blocks/cut_scorchia_slab.json a53831cf7f095fa4d0d92051bd0e21f912c2d9dd data/create/advancements/recipes/building_blocks/cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json @@ -2563,7 +2563,6 @@ a53831cf7f095fa4d0d92051bd0e21f912c2d9dd data/create/advancements/recipes/buildi 30f1efaa46771dd22d7f3aa34f24c69bbdb59bd5 data/create/advancements/recipes/building_blocks/cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json e02d188d64b270682fa9d335a3423880d8358a0d data/create/advancements/recipes/building_blocks/cut_scorchia_wall.json 834c5a2a8d089822fa81a75b290818db276beab7 data/create/advancements/recipes/building_blocks/cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json -2030ec21c96336bd4c4040857f40ec65d1a75075 data/create/advancements/recipes/building_blocks/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json 705dfcd9f4b6b8a0c360436c097cb371c27cf60d data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab.json 482cf1bbb65a4facc0ebf31ea91bab4d03580635 data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab_from_stone_types_scoria_stonecutting.json 51d070acfc8ad4cd8ca4457ca346458c81eaade4 data/create/advancements/recipes/building_blocks/cut_scoria_brick_slab_recycling.json @@ -2571,6 +2570,7 @@ e02d188d64b270682fa9d335a3423880d8358a0d data/create/advancements/recipes/buildi 99ca117e6a4ad242d92566a2f398c28edb3b7061 data/create/advancements/recipes/building_blocks/cut_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json 01e294976d8ce71b59fb14a47e2686bdce4fab21 data/create/advancements/recipes/building_blocks/cut_scoria_brick_wall.json 0c1d31d37a17d4bd752508022ddd9690bb92a521 data/create/advancements/recipes/building_blocks/cut_scoria_brick_wall_from_stone_types_scoria_stonecutting.json +2030ec21c96336bd4c4040857f40ec65d1a75075 data/create/advancements/recipes/building_blocks/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json 41f420c88dbf61d3cb51966cca9b495d10c604d3 data/create/advancements/recipes/building_blocks/cut_scoria_from_stone_types_scoria_stonecutting.json 26c8447854e29243f0697236f59e258fa96ed369 data/create/advancements/recipes/building_blocks/cut_scoria_slab.json f3e2522664de4ff2ad92a89443e064ac857b7aef data/create/advancements/recipes/building_blocks/cut_scoria_slab_from_stone_types_scoria_stonecutting.json @@ -2579,7 +2579,6 @@ a0635452fd698415e8112e9e0f6d71571901ca34 data/create/advancements/recipes/buildi 1bb047298b71a57e8632607af7b17bab2690aecb data/create/advancements/recipes/building_blocks/cut_scoria_stairs_from_stone_types_scoria_stonecutting.json a33878fe778438a746a28c1fd03ca6d01092ebe4 data/create/advancements/recipes/building_blocks/cut_scoria_wall.json 74a637d0d0f360ad692661c0213c18a06a8ec500 data/create/advancements/recipes/building_blocks/cut_scoria_wall_from_stone_types_scoria_stonecutting.json -f0870d596d9ac9e5b5272fb4e3d2c90c29f3a63d data/create/advancements/recipes/building_blocks/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json b75410afdb8775b2a834ded315913e0ae38e4df8 data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab.json 34c2aead2f2355a8f0f9f9aa7dba58dd5187dbba data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab_from_stone_types_tuff_stonecutting.json c071c43e93cc1735bebbbf320f1b8d2cba4be1e3 data/create/advancements/recipes/building_blocks/cut_tuff_brick_slab_recycling.json @@ -2587,6 +2586,7 @@ c89ec2300425688f9e72e45c64def0b09c0219b0 data/create/advancements/recipes/buildi c882f72f5a31bc92a8186834b105a2e07d864366 data/create/advancements/recipes/building_blocks/cut_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json 70295775a6170a1332f5604aaf75a026630c9e93 data/create/advancements/recipes/building_blocks/cut_tuff_brick_wall.json 1b79d0e71dae77967c1554c203e68eeb51fe8054 data/create/advancements/recipes/building_blocks/cut_tuff_brick_wall_from_stone_types_tuff_stonecutting.json +f0870d596d9ac9e5b5272fb4e3d2c90c29f3a63d data/create/advancements/recipes/building_blocks/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json 549d1f911c009a3cafff4edcb37116c92c2b8e21 data/create/advancements/recipes/building_blocks/cut_tuff_from_stone_types_tuff_stonecutting.json 5bc3e40a8e50a521ebd5fa58efa3ec21064163f7 data/create/advancements/recipes/building_blocks/cut_tuff_slab.json f1ab5be6cb7287517d87b173680ddf833a1dd534 data/create/advancements/recipes/building_blocks/cut_tuff_slab_from_stone_types_tuff_stonecutting.json @@ -2595,7 +2595,6 @@ b7d19085017530f0c2122511c35dbef6a50b337f data/create/advancements/recipes/buildi 3c9541b6e4eb8ff7f7b627a75e8c38ed9eeaf342 data/create/advancements/recipes/building_blocks/cut_tuff_stairs_from_stone_types_tuff_stonecutting.json 51ca798b8bd822ddbbfe8f07073eefb948b97b42 data/create/advancements/recipes/building_blocks/cut_tuff_wall.json 1aa1a0d00c19069f0c55e698b474115d7f437355 data/create/advancements/recipes/building_blocks/cut_tuff_wall_from_stone_types_tuff_stonecutting.json -6a80920618d8e9b7919c83c419e751971440d38a data/create/advancements/recipes/building_blocks/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json e263f555c3a47c83187d29ae9b816edc0c1a763b data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab.json f0e84bde804e52f504cd93bee5058a89f6939dc9 data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab_from_stone_types_veridium_stonecutting.json 949fe819c76fd63edfd93bef5898119c8456fda3 data/create/advancements/recipes/building_blocks/cut_veridium_brick_slab_recycling.json @@ -2603,6 +2602,7 @@ fc87560dedbc951d10d9650a6f27192e7c3a1cc5 data/create/advancements/recipes/buildi 35b09d6300ff8e86f01bc0258fca5cfa80d55c61 data/create/advancements/recipes/building_blocks/cut_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json 599d9ce510531c6006a4964bb4049a850a8457ee data/create/advancements/recipes/building_blocks/cut_veridium_brick_wall.json aaaad7a65a1c05071565ca91a181ff3c375e0141 data/create/advancements/recipes/building_blocks/cut_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +6a80920618d8e9b7919c83c419e751971440d38a data/create/advancements/recipes/building_blocks/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json c76ae7944646e8f13ea460ba6655b95b6c2798ea data/create/advancements/recipes/building_blocks/cut_veridium_from_stone_types_veridium_stonecutting.json 3bafa8873b62cb0333b44af77f2c6e824c5b3e95 data/create/advancements/recipes/building_blocks/cut_veridium_slab.json 143f64b0e5536693262f6a62c2a6fbf85bd4203e data/create/advancements/recipes/building_blocks/cut_veridium_slab_from_stone_types_veridium_stonecutting.json @@ -2786,7 +2786,6 @@ c4c087911453bd979e028d3b3558b273e3cb5926 data/create/advancements/recipes/buildi 780bb3d13fcd8abf6e166b04566b141e023ee11e data/create/advancements/recipes/building_blocks/scorchia_pillar_from_stone_types_scorchia_stonecutting.json 5c5c5080c1136c046caee2d14dd2c3c9f09abad3 data/create/advancements/recipes/building_blocks/scoria_from_stone_types_scoria_stonecutting.json 5a6b12869ffcbd1d9b4fbe1fee444fcde95d2953 data/create/advancements/recipes/building_blocks/scoria_pillar_from_stone_types_scoria_stonecutting.json -a51ca3151c517113338720edeac0e02a46ebb03a data/create/advancements/recipes/building_blocks/small_andesite_bricks_from_stone_types_andesite_stonecutting.json f72093994236a0580c6cafd08fb42f061733de01 data/create/advancements/recipes/building_blocks/small_andesite_brick_slab.json 05092201e6c514d3eae566fb1ce98ad415660112 data/create/advancements/recipes/building_blocks/small_andesite_brick_slab_from_stone_types_andesite_stonecutting.json 0e41d75b613a0ebd0c023669dcfd34f11b14fd0e data/create/advancements/recipes/building_blocks/small_andesite_brick_slab_recycling.json @@ -2794,7 +2793,7 @@ f72093994236a0580c6cafd08fb42f061733de01 data/create/advancements/recipes/buildi 8bbf898cbc47ac7a326c0d082a92a452b6915a7e data/create/advancements/recipes/building_blocks/small_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json 9e0685dd668550c67812d1caccd8c8cae9f2041c data/create/advancements/recipes/building_blocks/small_andesite_brick_wall.json 7a1bfa848f950482f82d7fe7a9cf3cf916f91702 data/create/advancements/recipes/building_blocks/small_andesite_brick_wall_from_stone_types_andesite_stonecutting.json -0bfa788d0038077a88678ff16104a8b82038b3da data/create/advancements/recipes/building_blocks/small_asurine_bricks_from_stone_types_asurine_stonecutting.json +a51ca3151c517113338720edeac0e02a46ebb03a data/create/advancements/recipes/building_blocks/small_andesite_bricks_from_stone_types_andesite_stonecutting.json 3dccee988c08e1988886d9f09f2b5b42332ac083 data/create/advancements/recipes/building_blocks/small_asurine_brick_slab.json 438469fb06dff95a0ab9e0cb183795432d9b78dd data/create/advancements/recipes/building_blocks/small_asurine_brick_slab_from_stone_types_asurine_stonecutting.json 3eb65706d975e6f1e429f43d7384272a58872f10 data/create/advancements/recipes/building_blocks/small_asurine_brick_slab_recycling.json @@ -2802,7 +2801,7 @@ fb8cab1a3ecef97eaf7d744bb0d1d09d46859b60 data/create/advancements/recipes/buildi 525fff52f5dea3178356b7c5f7606d2a369b346e data/create/advancements/recipes/building_blocks/small_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json 39df7ef2b88df45ba4a06bfa9cd7f863f813cb30 data/create/advancements/recipes/building_blocks/small_asurine_brick_wall.json 21aa9dc72b12eb0a33cdc9904ee595de802b55f4 data/create/advancements/recipes/building_blocks/small_asurine_brick_wall_from_stone_types_asurine_stonecutting.json -46666ef8d341971cdd989f14575973777a85cdc6 data/create/advancements/recipes/building_blocks/small_calcite_bricks_from_stone_types_calcite_stonecutting.json +0bfa788d0038077a88678ff16104a8b82038b3da data/create/advancements/recipes/building_blocks/small_asurine_bricks_from_stone_types_asurine_stonecutting.json d61fce64a295a2c3b9433bc27ac50f4f1f6a678d data/create/advancements/recipes/building_blocks/small_calcite_brick_slab.json 7f2e73d01b9bff473c4ecf76ab967b3aa934ff87 data/create/advancements/recipes/building_blocks/small_calcite_brick_slab_from_stone_types_calcite_stonecutting.json 1095487af055116acc2eba87d92dd0918385e9ac data/create/advancements/recipes/building_blocks/small_calcite_brick_slab_recycling.json @@ -2810,7 +2809,7 @@ d61fce64a295a2c3b9433bc27ac50f4f1f6a678d data/create/advancements/recipes/buildi e3bd0900dc92b26fe69c7f4e81db76678505222b data/create/advancements/recipes/building_blocks/small_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json c88fb3af07c32aa127cbe0043075f50fed869839 data/create/advancements/recipes/building_blocks/small_calcite_brick_wall.json ea58b78e177134c73ed5bfb081761f90cc7caa3e data/create/advancements/recipes/building_blocks/small_calcite_brick_wall_from_stone_types_calcite_stonecutting.json -c48216f26cfe93ce99f7f2f0e9f68d1ee2a95e46 data/create/advancements/recipes/building_blocks/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json +46666ef8d341971cdd989f14575973777a85cdc6 data/create/advancements/recipes/building_blocks/small_calcite_bricks_from_stone_types_calcite_stonecutting.json ed4d6e7779749dd647f744f0486e78b93057aa33 data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab.json 7f3ad6d79eb9d433d5a0e295eb2b099a5f815876 data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json b980fcc4b29f9ff897dd867222fc4248d76e808a data/create/advancements/recipes/building_blocks/small_crimsite_brick_slab_recycling.json @@ -2818,7 +2817,7 @@ b980fcc4b29f9ff897dd867222fc4248d76e808a data/create/advancements/recipes/buildi c06600eda4e4bd7c46e4e315a0569fbdfa4bb087 data/create/advancements/recipes/building_blocks/small_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json 4021a4a761b06def09f19d6a60bc0722e69ec08d data/create/advancements/recipes/building_blocks/small_crimsite_brick_wall.json 2d8eae517a914e93538307efe23d532582d487e2 data/create/advancements/recipes/building_blocks/small_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json -ed82f0fac452147faa997af1d45278f501ef165b data/create/advancements/recipes/building_blocks/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json +c48216f26cfe93ce99f7f2f0e9f68d1ee2a95e46 data/create/advancements/recipes/building_blocks/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json e4674821cc17adadecacc55d48c028847caf5fea data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab.json 8c0c51d052b110fec3668618be2bdeaf8d0c7cc5 data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json f8f7ace802b6c73fabfabbaae1c1383a3c0bcf6b data/create/advancements/recipes/building_blocks/small_deepslate_brick_slab_recycling.json @@ -2826,7 +2825,7 @@ e2e16c3c0e761ef44f9b21ae3bd95300a33459be data/create/advancements/recipes/buildi 37ef4192f1db7dd5c066a47480f86f60687c9894 data/create/advancements/recipes/building_blocks/small_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json 6f4d365ce26fb4081a5af0f6e21631209b5b106d data/create/advancements/recipes/building_blocks/small_deepslate_brick_wall.json e0c7377c55dc94b8efd62cb6f57325c94206cbf4 data/create/advancements/recipes/building_blocks/small_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json -9bb23924495112ba177d12ba2a5adcb872a2b76f data/create/advancements/recipes/building_blocks/small_diorite_bricks_from_stone_types_diorite_stonecutting.json +ed82f0fac452147faa997af1d45278f501ef165b data/create/advancements/recipes/building_blocks/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json d4b96bcd8902e9bce19603abb99cb7edeb260189 data/create/advancements/recipes/building_blocks/small_diorite_brick_slab.json 2ed3800996491c9a1db23d9cbed04cc5ee963df6 data/create/advancements/recipes/building_blocks/small_diorite_brick_slab_from_stone_types_diorite_stonecutting.json 895d2158ba0783c5fd97b802ef5866d7532df6ba data/create/advancements/recipes/building_blocks/small_diorite_brick_slab_recycling.json @@ -2834,7 +2833,7 @@ d4b96bcd8902e9bce19603abb99cb7edeb260189 data/create/advancements/recipes/buildi 0f4b92965c05ddf71fa24b2b08a0cce358ac8dd1 data/create/advancements/recipes/building_blocks/small_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json 633d921515fb4ad0e3177f3c8f151da80008053b data/create/advancements/recipes/building_blocks/small_diorite_brick_wall.json 3dea60492331bcd3253d90534559cc0bdb0822ae data/create/advancements/recipes/building_blocks/small_diorite_brick_wall_from_stone_types_diorite_stonecutting.json -632ced3760d55b56d1620e447b8b762e0e4a29f3 data/create/advancements/recipes/building_blocks/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json +9bb23924495112ba177d12ba2a5adcb872a2b76f data/create/advancements/recipes/building_blocks/small_diorite_bricks_from_stone_types_diorite_stonecutting.json 92bb21a400d9720a2f06882049d5b3863a93969d data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab.json 02e2b98eeef9cdc20a8678beec4c7aa8a6cde948 data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json 35830242bc48b1355830d6cb17dc4dc547d51bc0 data/create/advancements/recipes/building_blocks/small_dripstone_brick_slab_recycling.json @@ -2842,7 +2841,7 @@ d4b96bcd8902e9bce19603abb99cb7edeb260189 data/create/advancements/recipes/buildi 92523f3058a580743f95e9347fa97e0f5f6483f6 data/create/advancements/recipes/building_blocks/small_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json 6e26ab4ad96225b7dd1a4aa06295b0d85e87400b data/create/advancements/recipes/building_blocks/small_dripstone_brick_wall.json e30a5f31d6478dfe7693077727b1abfc40b33f9b data/create/advancements/recipes/building_blocks/small_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json -1805b7f9db21b4530b173ab6945584e7d852b218 data/create/advancements/recipes/building_blocks/small_granite_bricks_from_stone_types_granite_stonecutting.json +632ced3760d55b56d1620e447b8b762e0e4a29f3 data/create/advancements/recipes/building_blocks/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json a2929bbd4c81b9601aeca74110936343102b7b5a data/create/advancements/recipes/building_blocks/small_granite_brick_slab.json 0fa83c337d5612e2b8368d5bff34117e0c1cf40a data/create/advancements/recipes/building_blocks/small_granite_brick_slab_from_stone_types_granite_stonecutting.json 0bc47cb22cc70a34879092a57c87551e6fa9f634 data/create/advancements/recipes/building_blocks/small_granite_brick_slab_recycling.json @@ -2850,7 +2849,7 @@ a2929bbd4c81b9601aeca74110936343102b7b5a data/create/advancements/recipes/buildi 44f3e71a4e8b78db74a21a42c3cebfbc15fe0180 data/create/advancements/recipes/building_blocks/small_granite_brick_stairs_from_stone_types_granite_stonecutting.json 3a6edafcb559e767caf421cf1bd6e064940f33e2 data/create/advancements/recipes/building_blocks/small_granite_brick_wall.json cac9914c729c0ecf5e9e1b4fe6498005e7c532f3 data/create/advancements/recipes/building_blocks/small_granite_brick_wall_from_stone_types_granite_stonecutting.json -1ca86b11356749caf7515fc61b8ac5de53d019f6 data/create/advancements/recipes/building_blocks/small_limestone_bricks_from_stone_types_limestone_stonecutting.json +1805b7f9db21b4530b173ab6945584e7d852b218 data/create/advancements/recipes/building_blocks/small_granite_bricks_from_stone_types_granite_stonecutting.json 4f3cc93f422ee9f05587b89d6729a6cc86f572c0 data/create/advancements/recipes/building_blocks/small_limestone_brick_slab.json 02d0c45cd014fd660a9d3eb1c1c6b40ba806b2fb data/create/advancements/recipes/building_blocks/small_limestone_brick_slab_from_stone_types_limestone_stonecutting.json 8fb46bce94f6cca943e4ae427c04d9617ada277d data/create/advancements/recipes/building_blocks/small_limestone_brick_slab_recycling.json @@ -2858,7 +2857,7 @@ cac9914c729c0ecf5e9e1b4fe6498005e7c532f3 data/create/advancements/recipes/buildi 00b61a4d23f8b16a7e4d9bf46fbe52c6b5dd561c data/create/advancements/recipes/building_blocks/small_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json 7c6b80f174687efe10007c0235f2a68db7062b12 data/create/advancements/recipes/building_blocks/small_limestone_brick_wall.json 7f9ade635dcda8d5baae2bbdddc018bcc715f681 data/create/advancements/recipes/building_blocks/small_limestone_brick_wall_from_stone_types_limestone_stonecutting.json -bab018a0adcbc0582ba756158941a87923b20384 data/create/advancements/recipes/building_blocks/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json +1ca86b11356749caf7515fc61b8ac5de53d019f6 data/create/advancements/recipes/building_blocks/small_limestone_bricks_from_stone_types_limestone_stonecutting.json 9c98b7b56f92f6adc75473f5b0ae4dc69ac8aa9a data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab.json 611fb57772f1446236256f1235751dec6f81cd0e data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json 243821a2c3e465f5346ad58e0afda624c09ab946 data/create/advancements/recipes/building_blocks/small_ochrum_brick_slab_recycling.json @@ -2866,8 +2865,8 @@ b9a16792e6158a2923454c9a44d9c176c9607c24 data/create/advancements/recipes/buildi bb91a8ba1ef1c8cb725f18a4d577bb476b9ae68d data/create/advancements/recipes/building_blocks/small_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json 5cf5574da0b29895960fa7f0fd63d3f81814f7b3 data/create/advancements/recipes/building_blocks/small_ochrum_brick_wall.json 1b5d14c921a85a3a5cdb9f845d4f0ddf98f87347 data/create/advancements/recipes/building_blocks/small_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +bab018a0adcbc0582ba756158941a87923b20384 data/create/advancements/recipes/building_blocks/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json 8d6ccacf1af917094b1688ed70dc75bf54611e93 data/create/advancements/recipes/building_blocks/small_rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json -7d679c66588f8a717619a7f89861d57ec04f04a1 data/create/advancements/recipes/building_blocks/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json 2003f1248faaeb4fe6761febda8e29d087f99dc7 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab.json ff5c50697aefe21c1570230a13255c912744b629 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json 8d1fd41b03940add231fa207d3ddaa1f78cf2b85 data/create/advancements/recipes/building_blocks/small_scorchia_brick_slab_recycling.json @@ -2875,7 +2874,7 @@ ff5c50697aefe21c1570230a13255c912744b629 data/create/advancements/recipes/buildi 8586f387cc9bb74250369373348005f6aa686af2 data/create/advancements/recipes/building_blocks/small_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json 94552be031c17f5ef9d97cf5fe33beb15141291f data/create/advancements/recipes/building_blocks/small_scorchia_brick_wall.json 86e866f92095b03b5d77a91425e5e2ef307f4852 data/create/advancements/recipes/building_blocks/small_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json -e542cd94f84a90530332608b1040e2e6189a51fe data/create/advancements/recipes/building_blocks/small_scoria_bricks_from_stone_types_scoria_stonecutting.json +7d679c66588f8a717619a7f89861d57ec04f04a1 data/create/advancements/recipes/building_blocks/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json ad4c35afd6c3d55b356e38289c64e8cf6d194d10 data/create/advancements/recipes/building_blocks/small_scoria_brick_slab.json 2f1acca02bb5a40bf174ceeb5272ba1243b8635c data/create/advancements/recipes/building_blocks/small_scoria_brick_slab_from_stone_types_scoria_stonecutting.json dba264e073eab7b2fb1494cb117574b6a6b83919 data/create/advancements/recipes/building_blocks/small_scoria_brick_slab_recycling.json @@ -2883,7 +2882,7 @@ dba264e073eab7b2fb1494cb117574b6a6b83919 data/create/advancements/recipes/buildi 0e64e1dc80a0b84e05260191951ed930a8e578f6 data/create/advancements/recipes/building_blocks/small_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json 95b866fac218affb9aac93272f5436e30dd4678c data/create/advancements/recipes/building_blocks/small_scoria_brick_wall.json 23493359766c969d2fa64575c5af047e6a924373 data/create/advancements/recipes/building_blocks/small_scoria_brick_wall_from_stone_types_scoria_stonecutting.json -b7fc4fbd0d6ce28946b5cbef40d86de3ca37f695 data/create/advancements/recipes/building_blocks/small_tuff_bricks_from_stone_types_tuff_stonecutting.json +e542cd94f84a90530332608b1040e2e6189a51fe data/create/advancements/recipes/building_blocks/small_scoria_bricks_from_stone_types_scoria_stonecutting.json 03acb1becaa3c7f6fc0ced99e6afcf4ac0ec4cb2 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab.json 599693bc47bfd65cc9e3babc0a2f33c0d2bbfd31 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab_from_stone_types_tuff_stonecutting.json aae2cb75ee4b9312e79dfea519c35f5e20ed4da6 data/create/advancements/recipes/building_blocks/small_tuff_brick_slab_recycling.json @@ -2891,7 +2890,7 @@ c72364e32b82f45f17491dd41967373c35d8dfb5 data/create/advancements/recipes/buildi 369763433d6af43d94392e870b3d861f739ba0f9 data/create/advancements/recipes/building_blocks/small_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json 506bbae420bff66d492214c49dabf52e5cbcf6e4 data/create/advancements/recipes/building_blocks/small_tuff_brick_wall.json 6db7e4b981ec28c776988a531c03dbe28fb0a1c2 data/create/advancements/recipes/building_blocks/small_tuff_brick_wall_from_stone_types_tuff_stonecutting.json -9fd6e20a4555b591b17ef225316782de333780fa data/create/advancements/recipes/building_blocks/small_veridium_bricks_from_stone_types_veridium_stonecutting.json +b7fc4fbd0d6ce28946b5cbef40d86de3ca37f695 data/create/advancements/recipes/building_blocks/small_tuff_bricks_from_stone_types_tuff_stonecutting.json b61a773f683c415617a408fa0781e7e7d61cb1af data/create/advancements/recipes/building_blocks/small_veridium_brick_slab.json 526a5323263292bd091c03231a156e18460c34a1 data/create/advancements/recipes/building_blocks/small_veridium_brick_slab_from_stone_types_veridium_stonecutting.json ef040b7189b17cce9dd69c47af61c7abca6f43cd data/create/advancements/recipes/building_blocks/small_veridium_brick_slab_recycling.json @@ -2899,6 +2898,7 @@ ef040b7189b17cce9dd69c47af61c7abca6f43cd data/create/advancements/recipes/buildi 6a12b73815434a544881680cb071f273a75f62a5 data/create/advancements/recipes/building_blocks/small_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json e6dfacd8f2f57d4df42927783750254f7163251a data/create/advancements/recipes/building_blocks/small_veridium_brick_wall.json ee4012cc014539be113ace8f80e51c85d2daead9 data/create/advancements/recipes/building_blocks/small_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +9fd6e20a4555b591b17ef225316782de333780fa data/create/advancements/recipes/building_blocks/small_veridium_bricks_from_stone_types_veridium_stonecutting.json 03a87030672d40b0b2b6ad085103c9a5cef067ce data/create/advancements/recipes/building_blocks/spruce_window.json dfea65f25ebcbe0caf2694dec3d3ea616e2e9291 data/create/advancements/recipes/building_blocks/spruce_window_pane.json 763b3b49296a284f41cbccdc7f1ffb13c89d42db data/create/advancements/recipes/building_blocks/tiled_glass_from_glass_colorless_stonecutting.json @@ -3012,12 +3012,12 @@ fa0856e11351ad0882de2066569807e782071881 data/create/loot_tables/blocks/copper_b 0937b9f634b86dbe41e07eda52c69993fce60fb5 data/create/loot_tables/blocks/copper_door.json 8ed70d812f38adfa147db07a4f2bbe206a69ad20 data/create/loot_tables/blocks/copper_ladder.json ac621731ca23e6fbb1003be59edacdf837dbc37e data/create/loot_tables/blocks/copper_scaffolding.json -9be387731859ccc3aec7701c1804ddc3c5dde216 data/create/loot_tables/blocks/copper_shingles.json be31f0c68bfe80dff88959bd30ef9a9080dd3b3b data/create/loot_tables/blocks/copper_shingle_slab.json 83ae2652a2df217730d6fb34a65c3962e82a961d data/create/loot_tables/blocks/copper_shingle_stairs.json -9cb359c96543d7421250c4ef4e83a5e170974efb data/create/loot_tables/blocks/copper_tiles.json +9be387731859ccc3aec7701c1804ddc3c5dde216 data/create/loot_tables/blocks/copper_shingles.json adbe83d6bf88dd7d2b0b8788bb619cedd37f59d9 data/create/loot_tables/blocks/copper_tile_slab.json 1e06f16b1fa8e78af5cbfc90ba8ff1136de83d2d data/create/loot_tables/blocks/copper_tile_stairs.json +9cb359c96543d7421250c4ef4e83a5e170974efb data/create/loot_tables/blocks/copper_tiles.json 4f75cad20e6b091d1f07cf3db98520d2dc3af5e7 data/create/loot_tables/blocks/copper_valve_handle.json 14a493a7bad6bd399b662da470b71810bd56e812 data/create/loot_tables/blocks/copycat_bars.json 3a2f3ab0834a0c5089ba0a11f5e9784ce59ef6d8 data/create/loot_tables/blocks/copycat_base.json @@ -3033,114 +3033,114 @@ d5d2f565bab2e2b81b0798fc7ce0e21acd362ce5 data/create/loot_tables/blocks/crimson_ b892718d33caf0c260b902c92f46f3bfd827af45 data/create/loot_tables/blocks/crushing_wheel.json ff7853a5d5c0f3bddbcfe07e47efd1ff04b14f0a data/create/loot_tables/blocks/cuckoo_clock.json 9083b026ee254645430434b67c2ba7a842f888bf data/create/loot_tables/blocks/cut_andesite.json -c1aa69f80ba11dd52fb3627fc32377599f5ff887 data/create/loot_tables/blocks/cut_andesite_bricks.json c74a4cac08ab1f66146466ff9fb40c8f210de63c data/create/loot_tables/blocks/cut_andesite_brick_slab.json df3f5dcbf676106800bc1113bb022658eb5e85d6 data/create/loot_tables/blocks/cut_andesite_brick_stairs.json 95c5a4a3327f522d986d7baaa747fce5ead8c032 data/create/loot_tables/blocks/cut_andesite_brick_wall.json +c1aa69f80ba11dd52fb3627fc32377599f5ff887 data/create/loot_tables/blocks/cut_andesite_bricks.json cb6cf8aefaac1e00596bd64a182a329dbba7e659 data/create/loot_tables/blocks/cut_andesite_slab.json 7106a637809dcbeb9d4a02a7ff9dc52f7fd9d7a2 data/create/loot_tables/blocks/cut_andesite_stairs.json e3cfa2ecb0b90ebe07cc98f8e47d22d2c0da67e5 data/create/loot_tables/blocks/cut_andesite_wall.json 75eacbc0656e7a83a20a054755ea7d7d78af983d data/create/loot_tables/blocks/cut_asurine.json -f780d37b956ed734cafcbe42b77f1a8ebfa33350 data/create/loot_tables/blocks/cut_asurine_bricks.json 43ad24bb9da878111f3606a17ef9b45bcc4964ae data/create/loot_tables/blocks/cut_asurine_brick_slab.json 8f4d0af32546b6cc77c68a08dc74494b8be1b7c3 data/create/loot_tables/blocks/cut_asurine_brick_stairs.json bb9ce58aa5b4e38c4d3b29aa8e0d905054023eae data/create/loot_tables/blocks/cut_asurine_brick_wall.json +f780d37b956ed734cafcbe42b77f1a8ebfa33350 data/create/loot_tables/blocks/cut_asurine_bricks.json 972ca04f91a1ce4d35995c14e1b17f773b15b61e data/create/loot_tables/blocks/cut_asurine_slab.json a55778dd8735286c3abc65046186b6b8dff0367e data/create/loot_tables/blocks/cut_asurine_stairs.json 70284c686f16d215ff1a8fb19bbe36fddbd31e18 data/create/loot_tables/blocks/cut_asurine_wall.json 0f450ecf60c5d201f332b2736c552d0b51b159b8 data/create/loot_tables/blocks/cut_calcite.json -aec526af372816f306826eefe4a6318db7964892 data/create/loot_tables/blocks/cut_calcite_bricks.json ec0d2854433ac4f58e53685c69dc19629fee16ca data/create/loot_tables/blocks/cut_calcite_brick_slab.json 584e39fa0b78ba8649f69b53f9f032dd1532d6ac data/create/loot_tables/blocks/cut_calcite_brick_stairs.json cc9cbdb7a50305e47181b2452bfce887f9879437 data/create/loot_tables/blocks/cut_calcite_brick_wall.json +aec526af372816f306826eefe4a6318db7964892 data/create/loot_tables/blocks/cut_calcite_bricks.json b4e5b6d5cb63b7b1a4fe639fd727a381bfd00588 data/create/loot_tables/blocks/cut_calcite_slab.json ca83b89401dba12341e6f26786103c10c90447ca data/create/loot_tables/blocks/cut_calcite_stairs.json 64df1c4a373c28bf9be3630935b01a43abd22e03 data/create/loot_tables/blocks/cut_calcite_wall.json 5df3a2229657d7b616790e922b1d1d558b4a5128 data/create/loot_tables/blocks/cut_crimsite.json -59cb609bc9671ac481832eeaf942533c6861fc0e data/create/loot_tables/blocks/cut_crimsite_bricks.json 6fee8d6425e1c832abed8fd9bccc8e6fae9441fc data/create/loot_tables/blocks/cut_crimsite_brick_slab.json 3123bc9e6123dfeda9bb3cece5c2220ac8485535 data/create/loot_tables/blocks/cut_crimsite_brick_stairs.json 56a8c7b1588f6fa9a1fb438e91b04673e02a0c86 data/create/loot_tables/blocks/cut_crimsite_brick_wall.json +59cb609bc9671ac481832eeaf942533c6861fc0e data/create/loot_tables/blocks/cut_crimsite_bricks.json 90ed82b09f2650ee913956d62803d15fc4c0bdbd data/create/loot_tables/blocks/cut_crimsite_slab.json 0e237e008523ed3e9934c598a708be533aaa0861 data/create/loot_tables/blocks/cut_crimsite_stairs.json 48e1edca75186f160a12fa26ac262c7f86d62c82 data/create/loot_tables/blocks/cut_crimsite_wall.json 7bfe4d183ed26de1d7b241c27880a70d28426502 data/create/loot_tables/blocks/cut_deepslate.json -6e375a42ddf38c99fee86531471573716e27fa44 data/create/loot_tables/blocks/cut_deepslate_bricks.json fa4b940ad8ee432ee0fabf496d2da3d5039c204a data/create/loot_tables/blocks/cut_deepslate_brick_slab.json 1063a94b3e90a52a7492d85b1c086514333f3421 data/create/loot_tables/blocks/cut_deepslate_brick_stairs.json 878d809a038c626e8054f9b71e27be08388d7615 data/create/loot_tables/blocks/cut_deepslate_brick_wall.json +6e375a42ddf38c99fee86531471573716e27fa44 data/create/loot_tables/blocks/cut_deepslate_bricks.json 7b5e46aaf34d71993f50b5b6fa1cd5d7ea64264c data/create/loot_tables/blocks/cut_deepslate_slab.json 7d45e8bb037a1e550132854200d57ce31e073993 data/create/loot_tables/blocks/cut_deepslate_stairs.json cd80fd4f573d59c22f0b9799f1ba7422215d4ff1 data/create/loot_tables/blocks/cut_deepslate_wall.json d79d52657307a30422d9ff2eb1caad78024c24f7 data/create/loot_tables/blocks/cut_diorite.json -9f627b6449ae27a1990b84a60349736129a11e39 data/create/loot_tables/blocks/cut_diorite_bricks.json 1809235166024fa74f65a96b622faa8eddf4ce14 data/create/loot_tables/blocks/cut_diorite_brick_slab.json a6bb9fb4eee3dab9a540b228801ce100c048c2a7 data/create/loot_tables/blocks/cut_diorite_brick_stairs.json 690a938a04543cb60f2952335be26b2df9c75715 data/create/loot_tables/blocks/cut_diorite_brick_wall.json +9f627b6449ae27a1990b84a60349736129a11e39 data/create/loot_tables/blocks/cut_diorite_bricks.json 208999222adb5b1cd4fa47b85000841dbae4ad21 data/create/loot_tables/blocks/cut_diorite_slab.json 12849a868e8dff48ebb688c84fc53d4cee2a4eaa data/create/loot_tables/blocks/cut_diorite_stairs.json 469fffcdd40aea22fedb81b7778cc3c61928f3fd data/create/loot_tables/blocks/cut_diorite_wall.json 302d0bb640f696109fe4edc0c1fa9db332231511 data/create/loot_tables/blocks/cut_dripstone.json -48707f37b94ff1a930ee45bb9e8b6b4b67226945 data/create/loot_tables/blocks/cut_dripstone_bricks.json eb31bc108180e2248d575d5d72325b5585254af0 data/create/loot_tables/blocks/cut_dripstone_brick_slab.json 9b624a456baf55960675d7857e159f69911a281a data/create/loot_tables/blocks/cut_dripstone_brick_stairs.json b4c754d4d5a6c28f537c2d73844e39059b2c1450 data/create/loot_tables/blocks/cut_dripstone_brick_wall.json +48707f37b94ff1a930ee45bb9e8b6b4b67226945 data/create/loot_tables/blocks/cut_dripstone_bricks.json eb9eca9a69f763cbe81dc79375ef76978594b51e data/create/loot_tables/blocks/cut_dripstone_slab.json 47fae3abc8bea3ee802d6759192e631f50329c5f data/create/loot_tables/blocks/cut_dripstone_stairs.json 70b71cc460cba2955694baf0550eadc2187e3a8a data/create/loot_tables/blocks/cut_dripstone_wall.json 26433a16a91414be15b20dc85b81b76d086be889 data/create/loot_tables/blocks/cut_granite.json -65c3936e78a90c53faa0b9f9b3034afc2728e7b9 data/create/loot_tables/blocks/cut_granite_bricks.json c6b8dfa87e9c33a0dd2b3398dcc524347e826d44 data/create/loot_tables/blocks/cut_granite_brick_slab.json 5e00417f06b4d357e7469f0efa6e319dfc587da3 data/create/loot_tables/blocks/cut_granite_brick_stairs.json 8d8779846af8121426f128cc7b5d501037bd1cd4 data/create/loot_tables/blocks/cut_granite_brick_wall.json +65c3936e78a90c53faa0b9f9b3034afc2728e7b9 data/create/loot_tables/blocks/cut_granite_bricks.json 6e7253b2801611b4698e786f495c2ade1088ee0b data/create/loot_tables/blocks/cut_granite_slab.json de8c10fb2c7409a3375f2db5cdce2027c3f419bd data/create/loot_tables/blocks/cut_granite_stairs.json cdf40bb46d9457a66129b300dc4d3f0160cc1de2 data/create/loot_tables/blocks/cut_granite_wall.json ac5f062c7fc270c63d67ccecf19499a9e91fa1c4 data/create/loot_tables/blocks/cut_limestone.json -b60fb652e1f83b1af12a15cb47450bd9a6087f6a data/create/loot_tables/blocks/cut_limestone_bricks.json 3b6d3a9b12cf1c2a20bf337cc0155bb66967f0ee data/create/loot_tables/blocks/cut_limestone_brick_slab.json 701249cc12b7aa6f5cc1691ac4dd17e665aa2180 data/create/loot_tables/blocks/cut_limestone_brick_stairs.json 3b8c5eef9b0e8c35e8573ce91f5fddbac7f76f24 data/create/loot_tables/blocks/cut_limestone_brick_wall.json +b60fb652e1f83b1af12a15cb47450bd9a6087f6a data/create/loot_tables/blocks/cut_limestone_bricks.json ba186786e8677f1c769e8f231fe872c48330e13a data/create/loot_tables/blocks/cut_limestone_slab.json d354966d57804afda39ff27336d8b0f38acf6ea3 data/create/loot_tables/blocks/cut_limestone_stairs.json 28b4eee2c6da259e50c58a51905fa2b79a9b89ef data/create/loot_tables/blocks/cut_limestone_wall.json b3d6d90dd0c3e9d4b47d1f87d5abc354dd8c1447 data/create/loot_tables/blocks/cut_ochrum.json -5856859aae0cc633cbd9d83ea7cf7910ce1a88de data/create/loot_tables/blocks/cut_ochrum_bricks.json 67cadc71d90fb2527b9b2b72a74463d71571e493 data/create/loot_tables/blocks/cut_ochrum_brick_slab.json 487b3e7dc1d9d07183b9b699e33f6371858435aa data/create/loot_tables/blocks/cut_ochrum_brick_stairs.json 289757860f07b63dcce531a74ce7e60b4669c51b data/create/loot_tables/blocks/cut_ochrum_brick_wall.json +5856859aae0cc633cbd9d83ea7cf7910ce1a88de data/create/loot_tables/blocks/cut_ochrum_bricks.json c9deec5e3c7343afa3d013704179e2147b2eb7ec data/create/loot_tables/blocks/cut_ochrum_slab.json e851d829db8ea4398bc1cbe6e743b4fba98d3413 data/create/loot_tables/blocks/cut_ochrum_stairs.json 5dce8524b70baeefaeba13422f5900b1a161a867 data/create/loot_tables/blocks/cut_ochrum_wall.json 293064edf2909db8c9edc26bedd1cc023c647664 data/create/loot_tables/blocks/cut_scorchia.json -767910313f0983ebfb49b80526747d762cbdf782 data/create/loot_tables/blocks/cut_scorchia_bricks.json 895c4b9cc71701a26ae0e765ee67f0c06cc70a9c data/create/loot_tables/blocks/cut_scorchia_brick_slab.json c53d72176cb5dd93977975dd84647391fa563e3a data/create/loot_tables/blocks/cut_scorchia_brick_stairs.json 460232ca38cba2f0adc5316d6db8db94db231953 data/create/loot_tables/blocks/cut_scorchia_brick_wall.json +767910313f0983ebfb49b80526747d762cbdf782 data/create/loot_tables/blocks/cut_scorchia_bricks.json c8201964d877a932fe9a9a2d0360004440f7c380 data/create/loot_tables/blocks/cut_scorchia_slab.json dfd09849dbf48a064269a5ea28d0422caa87e4d4 data/create/loot_tables/blocks/cut_scorchia_stairs.json bd5304e38bb92a445c159e9fe647b906e28b232e data/create/loot_tables/blocks/cut_scorchia_wall.json 6b87a22c39b545d5be92e476751b99ceb4bef740 data/create/loot_tables/blocks/cut_scoria.json -833252d2d63c7502f6f0d7981673a8081046c944 data/create/loot_tables/blocks/cut_scoria_bricks.json 659e86f89499539e435989c2eb29e88e9a0ff9f4 data/create/loot_tables/blocks/cut_scoria_brick_slab.json 8434d461090bc43328eec0b4249d27a9ba383707 data/create/loot_tables/blocks/cut_scoria_brick_stairs.json e3f853395b9b6fb7d5bb103c121a77e04526a9e8 data/create/loot_tables/blocks/cut_scoria_brick_wall.json +833252d2d63c7502f6f0d7981673a8081046c944 data/create/loot_tables/blocks/cut_scoria_bricks.json 8360d736887ae3dc22bcf522791ef981e380456c data/create/loot_tables/blocks/cut_scoria_slab.json c771f03308f45e1e87d92181f94cdfd4e61fa5d8 data/create/loot_tables/blocks/cut_scoria_stairs.json 6fecb7fa2774ea63ac0c66e9c3d0f41d6b8cdff7 data/create/loot_tables/blocks/cut_scoria_wall.json 396074ee7fd5a3ddbac9332c74b7bdc4164919e2 data/create/loot_tables/blocks/cut_tuff.json -81465ef7aa555d36adf249bbc9acfe80abbe308e data/create/loot_tables/blocks/cut_tuff_bricks.json 5148f230c773b83268d52650bdacc660025feb95 data/create/loot_tables/blocks/cut_tuff_brick_slab.json 19719a4a3f63d1ec46a9ca9736a825d2dcc880ff data/create/loot_tables/blocks/cut_tuff_brick_stairs.json e20991b67c07dca62c212b43da5b7e7e98146c0e data/create/loot_tables/blocks/cut_tuff_brick_wall.json +81465ef7aa555d36adf249bbc9acfe80abbe308e data/create/loot_tables/blocks/cut_tuff_bricks.json 6d16bd3860207ff6912afc2bf3f0454b572aabba data/create/loot_tables/blocks/cut_tuff_slab.json c14e52ac9901aa873c33d51988bd26465ce0e095 data/create/loot_tables/blocks/cut_tuff_stairs.json dd70800c79fa2ff56bd4ea032cf069bc27cc9076 data/create/loot_tables/blocks/cut_tuff_wall.json 1957b610d14460cc9ca797fe953bf9831509cdbf data/create/loot_tables/blocks/cut_veridium.json -673d1f0fefa7725ac5bfcabfcea577041adc4eeb data/create/loot_tables/blocks/cut_veridium_bricks.json c1515a908bde249c087be1e73aec37773bc3dc5c data/create/loot_tables/blocks/cut_veridium_brick_slab.json d9552e3e9f4de0e09df8ca9446066e94c6e2c681 data/create/loot_tables/blocks/cut_veridium_brick_stairs.json 584c4bd13d9870f9798155b47cc0d32e5751294d data/create/loot_tables/blocks/cut_veridium_brick_wall.json +673d1f0fefa7725ac5bfcabfcea577041adc4eeb data/create/loot_tables/blocks/cut_veridium_bricks.json 009186ed0efe29a229a28cfd913bc02ddad217d4 data/create/loot_tables/blocks/cut_veridium_slab.json 4845f7127921c7dd93a59118e63c37107d6c2061 data/create/loot_tables/blocks/cut_veridium_stairs.json b56caea031d637321eddfd5d122fc357d2c2e49c data/create/loot_tables/blocks/cut_veridium_wall.json @@ -3165,12 +3165,12 @@ dfe0af3ff61ed2b3082e49c745d8a3e0c5973f4b data/create/loot_tables/blocks/encased_ a2e9a8a10b7fc730c1d7c8db3b529e7a37b683f5 data/create/loot_tables/blocks/encased_fan.json 7ede9f64839f51e6a2eb05b08577d2873f281401 data/create/loot_tables/blocks/encased_fluid_pipe.json 4869211639326efaabd1aba1067bfbb3ab012884 data/create/loot_tables/blocks/experience_block.json -9fa4b0c8ee313b6c9a57d7d5b687cdd01c8259d3 data/create/loot_tables/blocks/exposed_copper_shingles.json 9dbd37ef5ff549f10475101205c1a9d4a44140bc data/create/loot_tables/blocks/exposed_copper_shingle_slab.json d2c9abd9260eb82ea1c2eeae5e2d6abd0b4d3ce8 data/create/loot_tables/blocks/exposed_copper_shingle_stairs.json -f0905ae4c9bdff8fe9e1ab4682a7b1efe2d27d9d data/create/loot_tables/blocks/exposed_copper_tiles.json +9fa4b0c8ee313b6c9a57d7d5b687cdd01c8259d3 data/create/loot_tables/blocks/exposed_copper_shingles.json 6841c02935838f00011d33fc392965326c4dbc5b data/create/loot_tables/blocks/exposed_copper_tile_slab.json 432a047156b93a09b7e027fc34f5680a8f68dc92 data/create/loot_tables/blocks/exposed_copper_tile_stairs.json +f0905ae4c9bdff8fe9e1ab4682a7b1efe2d27d9d data/create/loot_tables/blocks/exposed_copper_tiles.json 3fae2a7a3f133a1d7c76ce91f6c48eab787d6ff6 data/create/loot_tables/blocks/fake_track.json 1d4734d6d9ba039c0dfa2271f08cdb55e35b721f data/create/loot_tables/blocks/fluid_pipe.json 9c112883a3763b2d286d9a5a0980dcea82bcc9e6 data/create/loot_tables/blocks/fluid_tank.json @@ -3234,13 +3234,13 @@ bf4e6c308d82f15689406b5b3e88fe95d49a9a44 data/create/loot_tables/blocks/light_bl 1ae0ff25ac9468e67ab1847b87a37829328d4c84 data/create/loot_tables/blocks/light_gray_seat.json e22dfadefcea50090efe87136a4b92e6ef20d379 data/create/loot_tables/blocks/light_gray_toolbox.json 3e586bc1281f15e25e75475dd726578ff032c6ae data/create/loot_tables/blocks/light_gray_valve_handle.json -c6bb0877c537dda15469934383dc45c608bfd1a4 data/create/loot_tables/blocks/limestone.json -49058a62e1abd34917f983b6bc13cc4353b613a2 data/create/loot_tables/blocks/limestone_pillar.json 582bb26f6df37d0c2dbe12983ad05fc74f5fb5c0 data/create/loot_tables/blocks/lime_nixie_tube.json 623ac65211a9920325308b55285f78e3b7275751 data/create/loot_tables/blocks/lime_sail.json 7efe69664a781b292f491d5ff89e27dd5991f3cf data/create/loot_tables/blocks/lime_seat.json 0f6a465501a445925e9aff7a4c84b3c8e2caa93e data/create/loot_tables/blocks/lime_toolbox.json 1a3ed7cd5660d7ea014956ea642e0b07d89bc297 data/create/loot_tables/blocks/lime_valve_handle.json +c6bb0877c537dda15469934383dc45c608bfd1a4 data/create/loot_tables/blocks/limestone.json +49058a62e1abd34917f983b6bc13cc4353b613a2 data/create/loot_tables/blocks/limestone_pillar.json baf70f9eb579f20b232a2af4e6b00a54f84844e6 data/create/loot_tables/blocks/linear_chassis.json e4c0f8ca822cf7555bd011825b430c3c735160d4 data/create/loot_tables/blocks/lit_blaze_burner.json 6bd8b044cc9c69a5268372e5436f556da2c1bf21 data/create/loot_tables/blocks/magenta_nixie_tube.json @@ -3282,12 +3282,12 @@ d6323d4b30faa87cd4b5b8b815cb16f78296f203 data/create/loot_tables/blocks/orange_s 30aef2df782b6b35cd16b4c205bb15de85bc0664 data/create/loot_tables/blocks/orange_valve_handle.json f4004c6d16754fc8867ed6618dace8e8f6dcc412 data/create/loot_tables/blocks/ornate_iron_window.json 6f14500e07c6d342804f9127e7b66047ffaeef1e data/create/loot_tables/blocks/ornate_iron_window_pane.json -3e54d3c4755a43d837a1d9b2005ea1dee4d02555 data/create/loot_tables/blocks/oxidized_copper_shingles.json 62c43a533e4ffeeec9f7657db5a796569087f806 data/create/loot_tables/blocks/oxidized_copper_shingle_slab.json f47a01824093455030fca66e7b8a39bcfc61d219 data/create/loot_tables/blocks/oxidized_copper_shingle_stairs.json -4d2a2863697664b3b71f02aa703c3504cd5cc826 data/create/loot_tables/blocks/oxidized_copper_tiles.json +3e54d3c4755a43d837a1d9b2005ea1dee4d02555 data/create/loot_tables/blocks/oxidized_copper_shingles.json 4d815b361af81bd0c0e14c853ca54ad3cde66a57 data/create/loot_tables/blocks/oxidized_copper_tile_slab.json d599ef03d1b69e4367ec0dea78f52c1964c99f9b data/create/loot_tables/blocks/oxidized_copper_tile_stairs.json +4d2a2863697664b3b71f02aa703c3504cd5cc826 data/create/loot_tables/blocks/oxidized_copper_tiles.json 58bd9fe9d6706998bfbda3b077cfd0a740972091 data/create/loot_tables/blocks/peculiar_bell.json 4d7724df6fefee4512c4f7886d0e103d1dc39510 data/create/loot_tables/blocks/pink_nixie_tube.json 85811771fbc36f645fdb9f510639715399503c99 data/create/loot_tables/blocks/pink_sail.json @@ -3368,13 +3368,13 @@ c6b7a02db55cf0824a48156adf469c478dfd6a8d data/create/loot_tables/blocks/purple_s 9e5e841d9f9a00d560ed17a7e197dc56bae334b7 data/create/loot_tables/blocks/radial_chassis.json 73a03fa31e299cec2c8a3dc0f31a8aa354b49bcd data/create/loot_tables/blocks/railway_casing.json f76e5a157d2aeab5708f464b1f3c8e47b3855f18 data/create/loot_tables/blocks/raw_zinc_block.json -bbc2d61eeea335f8f011d799ef6a5484ca027640 data/create/loot_tables/blocks/redstone_contact.json -4fa70deeac7e56121e42fb602dfa27ee1727f749 data/create/loot_tables/blocks/redstone_link.json a50e1c28af16e9f1b4f48aa974461167139768a7 data/create/loot_tables/blocks/red_nixie_tube.json 977d724cddf8eba053a3310ad0d30af15199bbed data/create/loot_tables/blocks/red_sail.json 9aedede893e2127a1cdd17695699397d8d5c6ce5 data/create/loot_tables/blocks/red_seat.json 9713071cab536e8c1550a6309dc4563fecc2c4e0 data/create/loot_tables/blocks/red_toolbox.json 17d75711f4ef5d76aa931175364642732fb0c60d data/create/loot_tables/blocks/red_valve_handle.json +bbc2d61eeea335f8f011d799ef6a5484ca027640 data/create/loot_tables/blocks/redstone_contact.json +4fa70deeac7e56121e42fb602dfa27ee1727f749 data/create/loot_tables/blocks/redstone_link.json 632067fe6309e31e78637eb0272209b630750242 data/create/loot_tables/blocks/refined_radiance_casing.json 354a3b6c73379b7100b0dd12b3f3b008830c4d2d data/create/loot_tables/blocks/rope.json f74fdd78961619d712891c36e0a0778c25e145dc data/create/loot_tables/blocks/rope_pulley.json @@ -3383,8 +3383,8 @@ f74fdd78961619d712891c36e0a0778c25e145dc data/create/loot_tables/blocks/rope_pul a0575567d5679f2c54e5a25c6ec12338f8cdc939 data/create/loot_tables/blocks/rose_quartz_tiles.json de74765a3bbffafb87d632857dfcfa83f863f814 data/create/loot_tables/blocks/rotation_speed_controller.json 2af8df3e36ace336c43d68f4e53564640a89845f data/create/loot_tables/blocks/sail_frame.json -d499fd59d30da8b907b0f3a0f428700f066eddff data/create/loot_tables/blocks/schematicannon.json 5a54e930243919991d71a1c3296002ff86dd88e1 data/create/loot_tables/blocks/schematic_table.json +d499fd59d30da8b907b0f3a0f428700f066eddff data/create/loot_tables/blocks/schematicannon.json 1d9b0df1330f44681bbd56f8560a30ef9e2175ff data/create/loot_tables/blocks/scorchia.json e39f189bfaebd31aedceb11e25720f1e08eb238d data/create/loot_tables/blocks/scorchia_pillar.json 5e3a37dbb2fcc0d6be042bfd063fd8b1414d6169 data/create/loot_tables/blocks/scoria.json @@ -3393,64 +3393,64 @@ d39afcaedc84d582c0c1f21ec5945cd0a67d389d data/create/loot_tables/blocks/secondar e33a34b47e07cf3262c0dbdbc651b31b9492b18f data/create/loot_tables/blocks/sequenced_gearshift.json 7d61387106e5e7fcc4aa0b05b9560cd5f4ef7df8 data/create/loot_tables/blocks/shadow_steel_casing.json 7e67d04f861e0a680487e27f94022a7850652dfe data/create/loot_tables/blocks/shaft.json -e88ff4ab1341c2db8338de0708b0ca8f40f15a8b data/create/loot_tables/blocks/small_andesite_bricks.json 220febcbcc4a993d475b683ebef7468ebdb7bf26 data/create/loot_tables/blocks/small_andesite_brick_slab.json b4764c5bb538359bcc2a599ff3b7474ade2115ed data/create/loot_tables/blocks/small_andesite_brick_stairs.json a891496ffb91bef56c3b684cb55a57e27a72154a data/create/loot_tables/blocks/small_andesite_brick_wall.json -576d8f6beca755a4082f1c8941e2590c1d18107b data/create/loot_tables/blocks/small_asurine_bricks.json +e88ff4ab1341c2db8338de0708b0ca8f40f15a8b data/create/loot_tables/blocks/small_andesite_bricks.json 1a5d3543ebb7c0064ba8ff01160a22a0f5f29f36 data/create/loot_tables/blocks/small_asurine_brick_slab.json 64f4b44b786eda91d432f20c8b725b0415440b56 data/create/loot_tables/blocks/small_asurine_brick_stairs.json 60a1d505e955047cf933ae55efc2e7c10d0a5a79 data/create/loot_tables/blocks/small_asurine_brick_wall.json +576d8f6beca755a4082f1c8941e2590c1d18107b data/create/loot_tables/blocks/small_asurine_bricks.json 64bcfece2507b8510633ae20c00ab989232664ff data/create/loot_tables/blocks/small_bogey.json -c03bba06f66262c0ced5e85fa7dcbfbfc8c9db71 data/create/loot_tables/blocks/small_calcite_bricks.json b673542c79f4a82f2e80c0931354e994292811f6 data/create/loot_tables/blocks/small_calcite_brick_slab.json e10d286286bba8e172a56e0eeb9af18d06d1a76d data/create/loot_tables/blocks/small_calcite_brick_stairs.json d7214e942b203823fa2fece883e8406a7721369f data/create/loot_tables/blocks/small_calcite_brick_wall.json -f49d32973b0be51229f4e3fdc13958c9852c5c8a data/create/loot_tables/blocks/small_crimsite_bricks.json +c03bba06f66262c0ced5e85fa7dcbfbfc8c9db71 data/create/loot_tables/blocks/small_calcite_bricks.json ef8b0f604b627715542e8216ae5448e88995cc13 data/create/loot_tables/blocks/small_crimsite_brick_slab.json dbec9246ab957a3ed2dbd0707df12c1496258e05 data/create/loot_tables/blocks/small_crimsite_brick_stairs.json d4d5bd8b101655205c4f293f23e83f610e179e91 data/create/loot_tables/blocks/small_crimsite_brick_wall.json -8caba3e7001dd8df4d3e6365b97849570c74c840 data/create/loot_tables/blocks/small_deepslate_bricks.json +f49d32973b0be51229f4e3fdc13958c9852c5c8a data/create/loot_tables/blocks/small_crimsite_bricks.json 44567c10c28ddd221198824766d3fec289fb29d4 data/create/loot_tables/blocks/small_deepslate_brick_slab.json fc141f5cdb1001d344b5ef8fa3ad1fdfeb01d048 data/create/loot_tables/blocks/small_deepslate_brick_stairs.json 3cf68d27362e9bb5dc3255ccf810097fbee511ba data/create/loot_tables/blocks/small_deepslate_brick_wall.json -4f22a84f105c2fabfd08ff0782ec30bbdc59f940 data/create/loot_tables/blocks/small_diorite_bricks.json +8caba3e7001dd8df4d3e6365b97849570c74c840 data/create/loot_tables/blocks/small_deepslate_bricks.json f6565f4bd11b7e95008b0f8fc3f5f2c7af1b77f8 data/create/loot_tables/blocks/small_diorite_brick_slab.json e3cbe41b4b2c38d0d5e625e34b61fc79db16d3bd data/create/loot_tables/blocks/small_diorite_brick_stairs.json 787dfaa16dc30155c90cc360f6927fa067a30ed8 data/create/loot_tables/blocks/small_diorite_brick_wall.json -d9cc7f58c791e040df4abfce225524e01eb01d49 data/create/loot_tables/blocks/small_dripstone_bricks.json +4f22a84f105c2fabfd08ff0782ec30bbdc59f940 data/create/loot_tables/blocks/small_diorite_bricks.json f72338c9252528e41f60cb183cb4ee07cea47bf0 data/create/loot_tables/blocks/small_dripstone_brick_slab.json bedf0fba68e8a8ce4205a968429ebe9c3ddfb528 data/create/loot_tables/blocks/small_dripstone_brick_stairs.json c1168f58f342dfa332bfa7f53f5f03383c55ccf2 data/create/loot_tables/blocks/small_dripstone_brick_wall.json -8437e7e28e45c10562d182c4c07189bcc108cabb data/create/loot_tables/blocks/small_granite_bricks.json +d9cc7f58c791e040df4abfce225524e01eb01d49 data/create/loot_tables/blocks/small_dripstone_bricks.json 4d111f8580ac97cf1b49b667462f7141846f3d3a data/create/loot_tables/blocks/small_granite_brick_slab.json c16e015251126614960d3e6300cb04d3aeaf49b4 data/create/loot_tables/blocks/small_granite_brick_stairs.json e0ff780ddeb5d5c8d2b6cd7736ac05f4556de52c data/create/loot_tables/blocks/small_granite_brick_wall.json -c60def11fbac5010bf749960e084dd5cd0dc4b07 data/create/loot_tables/blocks/small_limestone_bricks.json +8437e7e28e45c10562d182c4c07189bcc108cabb data/create/loot_tables/blocks/small_granite_bricks.json 5222ac5255c9a9ada0ce1da0fd4f4acbeee8ddb7 data/create/loot_tables/blocks/small_limestone_brick_slab.json 97310b6b1cbea869ebaa52861542787c49cee017 data/create/loot_tables/blocks/small_limestone_brick_stairs.json 0855921034db43692baa9fd0bcb767154f96d591 data/create/loot_tables/blocks/small_limestone_brick_wall.json -eb6b2171a6c99a3a28089752f26ddc6ac1f941d1 data/create/loot_tables/blocks/small_ochrum_bricks.json +c60def11fbac5010bf749960e084dd5cd0dc4b07 data/create/loot_tables/blocks/small_limestone_bricks.json 8ced0c24db685dbf4382b7b71124005edde9e0b2 data/create/loot_tables/blocks/small_ochrum_brick_slab.json 090e7154fb2c3dfd20d37aa87f3df4572a27c615 data/create/loot_tables/blocks/small_ochrum_brick_stairs.json 60f2d9970ad8caf8ffe3aa8083dbba671b8d4b8b data/create/loot_tables/blocks/small_ochrum_brick_wall.json +eb6b2171a6c99a3a28089752f26ddc6ac1f941d1 data/create/loot_tables/blocks/small_ochrum_bricks.json a001d069c2b4d15c6dfd0312749765fc4e89571e data/create/loot_tables/blocks/small_rose_quartz_tiles.json -ce71e670948453691d4f09c8110b952afb41afa1 data/create/loot_tables/blocks/small_scorchia_bricks.json d521cf885c737da2e4717d43072840ffd3f4c5d9 data/create/loot_tables/blocks/small_scorchia_brick_slab.json de6b5d583e1adf4d49147e0719616dfd0165726d data/create/loot_tables/blocks/small_scorchia_brick_stairs.json 895603c6920338ffafd8d0d1310e47ac20bdbfda data/create/loot_tables/blocks/small_scorchia_brick_wall.json -8b7e61477c4fdc834d669bda9197b585d60f26a2 data/create/loot_tables/blocks/small_scoria_bricks.json +ce71e670948453691d4f09c8110b952afb41afa1 data/create/loot_tables/blocks/small_scorchia_bricks.json d1954c07a66f40123d8d78602795efad7c92070f data/create/loot_tables/blocks/small_scoria_brick_slab.json 291b5a560f09ed8f09ccc949a1a4da0006f139c7 data/create/loot_tables/blocks/small_scoria_brick_stairs.json ed572e947f78d637e6e1a4166c111121087c41c3 data/create/loot_tables/blocks/small_scoria_brick_wall.json -2c7097ee677f42452212b5dce8959065d2bb0e15 data/create/loot_tables/blocks/small_tuff_bricks.json +8b7e61477c4fdc834d669bda9197b585d60f26a2 data/create/loot_tables/blocks/small_scoria_bricks.json ad8a3571dc3ae0ee1ec7be7f35c9796e544f0682 data/create/loot_tables/blocks/small_tuff_brick_slab.json 17f4a98a81e5920b75c88133d15b63d431f3fb64 data/create/loot_tables/blocks/small_tuff_brick_stairs.json 7defad704f6278e329af634acfb9efd617b2003e data/create/loot_tables/blocks/small_tuff_brick_wall.json -e499c0a8a0f804003612f3a4c9286cb4b033fe4b data/create/loot_tables/blocks/small_veridium_bricks.json +2c7097ee677f42452212b5dce8959065d2bb0e15 data/create/loot_tables/blocks/small_tuff_bricks.json c7771827a715b9eaacd1a7b7e863e274b1dee11f data/create/loot_tables/blocks/small_veridium_brick_slab.json 818b65dd5d868527e7df7658a4f62a93f2795186 data/create/loot_tables/blocks/small_veridium_brick_stairs.json 7733e53a90f2ba9c17cdedaa8720e70df1a8d2de data/create/loot_tables/blocks/small_veridium_brick_wall.json +e499c0a8a0f804003612f3a4c9286cb4b033fe4b data/create/loot_tables/blocks/small_veridium_bricks.json a121d21b81e93c119b6ee32ca21d260d9c33cb2a data/create/loot_tables/blocks/smart_chute.json 4556eb2d607db3631d0a9524d22a50686ce4a5a8 data/create/loot_tables/blocks/smart_fluid_pipe.json 9601e8ba0eb098cc409557f17b01669d8b971461 data/create/loot_tables/blocks/speedometer.json @@ -3482,36 +3482,36 @@ cfc82d2aa8248caeaa17ff0a60db02607046550d data/create/loot_tables/blocks/warped_w 2eeddb89cfc597bc1ce0736b9f4a6f98e0dfa4d2 data/create/loot_tables/blocks/warped_window_pane.json ccab211722d7f06913a549851b0d6e8278edc845 data/create/loot_tables/blocks/water_wheel.json ea5dfcedc928e8dfa1c59cf3917d1577dff87494 data/create/loot_tables/blocks/water_wheel_structure.json -bbc6fc068adccea464909b87f1d1f426324d74cc data/create/loot_tables/blocks/waxed_copper_shingles.json cb31be1e75ca822454bd0a89954f74c4c8726b33 data/create/loot_tables/blocks/waxed_copper_shingle_slab.json c8e440e42141788d1988c57ab91cb1bfcd977407 data/create/loot_tables/blocks/waxed_copper_shingle_stairs.json -a3b8f12d983077477963fd3fc893c5acd36ad552 data/create/loot_tables/blocks/waxed_copper_tiles.json +bbc6fc068adccea464909b87f1d1f426324d74cc data/create/loot_tables/blocks/waxed_copper_shingles.json 807da1d66d6c7d07efc8973de43415fa4b5ddfdc data/create/loot_tables/blocks/waxed_copper_tile_slab.json 92759871a9c84815b98b6dcd22fcf0dd958bc8ab data/create/loot_tables/blocks/waxed_copper_tile_stairs.json -eb9781d081d52c34c041004c774b52169b4a9ca0 data/create/loot_tables/blocks/waxed_exposed_copper_shingles.json +a3b8f12d983077477963fd3fc893c5acd36ad552 data/create/loot_tables/blocks/waxed_copper_tiles.json be5aabc98f4d70028f2b49ae1eaf0bc68a693c53 data/create/loot_tables/blocks/waxed_exposed_copper_shingle_slab.json a99143d290addb98427be53d7fea1cbc702d630c data/create/loot_tables/blocks/waxed_exposed_copper_shingle_stairs.json -e79c0636852b37a463dc122d66cdec27d3aa10c4 data/create/loot_tables/blocks/waxed_exposed_copper_tiles.json +eb9781d081d52c34c041004c774b52169b4a9ca0 data/create/loot_tables/blocks/waxed_exposed_copper_shingles.json 234cbb59a0e00d82c5508c8e9a61e328c22c1c56 data/create/loot_tables/blocks/waxed_exposed_copper_tile_slab.json de628114eb25f393efc4c0934d79c5bdc4365f75 data/create/loot_tables/blocks/waxed_exposed_copper_tile_stairs.json -60fe0594baab9599956d990ba893f8915835db81 data/create/loot_tables/blocks/waxed_oxidized_copper_shingles.json +e79c0636852b37a463dc122d66cdec27d3aa10c4 data/create/loot_tables/blocks/waxed_exposed_copper_tiles.json c8935df7d4634dee2b01c8a0ac5de12397f4d9ed data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_slab.json 2b9370b7fa362ea88f916dd53747da80e4ae3357 data/create/loot_tables/blocks/waxed_oxidized_copper_shingle_stairs.json -f0721c371b08214337f3f4fce3a3705840310bdb data/create/loot_tables/blocks/waxed_oxidized_copper_tiles.json +60fe0594baab9599956d990ba893f8915835db81 data/create/loot_tables/blocks/waxed_oxidized_copper_shingles.json de4d25cac546559173f740752625c82dfd6bae09 data/create/loot_tables/blocks/waxed_oxidized_copper_tile_slab.json 2ed72fc0ea28303f5c6d1039662f55c677cb7bcb data/create/loot_tables/blocks/waxed_oxidized_copper_tile_stairs.json -f309ffd94dfb3591efd2fab337a871a0ceff1084 data/create/loot_tables/blocks/waxed_weathered_copper_shingles.json +f0721c371b08214337f3f4fce3a3705840310bdb data/create/loot_tables/blocks/waxed_oxidized_copper_tiles.json 9a7b265a963e122d510de64012ed1d98ad9017f9 data/create/loot_tables/blocks/waxed_weathered_copper_shingle_slab.json 62f25a1bc013e9c3d487d9a53407e58d89907c5b data/create/loot_tables/blocks/waxed_weathered_copper_shingle_stairs.json -26e6a96f50e7f3384f896bf8a5c3d5ff2b422526 data/create/loot_tables/blocks/waxed_weathered_copper_tiles.json +f309ffd94dfb3591efd2fab337a871a0ceff1084 data/create/loot_tables/blocks/waxed_weathered_copper_shingles.json 3fa20e33ced4aee01775db57629b9580a6b8e200 data/create/loot_tables/blocks/waxed_weathered_copper_tile_slab.json 59b28bd57f461482a394dbce9ea10ee25fc7c294 data/create/loot_tables/blocks/waxed_weathered_copper_tile_stairs.json -3cd15ae684bc0e4e41f02b3ee79eafdbf052620c data/create/loot_tables/blocks/weathered_copper_shingles.json +26e6a96f50e7f3384f896bf8a5c3d5ff2b422526 data/create/loot_tables/blocks/waxed_weathered_copper_tiles.json 278a56aa433ba3647107b3bf0553da5a5f6d40dd data/create/loot_tables/blocks/weathered_copper_shingle_slab.json 198babfd55c3a30c6ac61e81d5e01b0cf8fca80a data/create/loot_tables/blocks/weathered_copper_shingle_stairs.json -771d98a6627d707228719e843bc80636b02dc985 data/create/loot_tables/blocks/weathered_copper_tiles.json +3cd15ae684bc0e4e41f02b3ee79eafdbf052620c data/create/loot_tables/blocks/weathered_copper_shingles.json d6862dc9f7d291df618fbce71eebf613711a5517 data/create/loot_tables/blocks/weathered_copper_tile_slab.json 57d5065d53016e4b1ef0fbad9b84605b1546bcc4 data/create/loot_tables/blocks/weathered_copper_tile_stairs.json +771d98a6627d707228719e843bc80636b02dc985 data/create/loot_tables/blocks/weathered_copper_tiles.json f6ba0623b4bcea2f3796df4c65c494fc072d2c21 data/create/loot_tables/blocks/weighted_ejector.json 978263272f632ed79a61d52a0080de0b7b8102d6 data/create/loot_tables/blocks/white_nixie_tube.json 129c6772c1c12271f9b0d41c77f41ce34fc437b1 data/create/loot_tables/blocks/white_sail.json @@ -3546,42 +3546,42 @@ da3692808565988e21ec5b1d5e976338ccc4a037 data/create/recipes/calcite_pillar_from 1157b2eab2ada187ea80feae298b77ed7ece4bfd data/create/recipes/copper_bars_from_ingots_copper_stonecutting.json b9d4f55128aa03ee6f6ab1831e709629a42c147e data/create/recipes/copper_ladder_from_ingots_copper_stonecutting.json 922c5ac48c8eb8b3a39f5626a381c2252fbac107 data/create/recipes/copper_scaffolding_from_ingots_copper_stonecutting.json -bab9fa969ba95850dc6e3bd0723387a61cbb05cd data/create/recipes/copper_shingles_from_ingots_copper_stonecutting.json bb083ae1d057dc0106946e4c68f9469b81724396 data/create/recipes/copper_shingle_slab.json 3689feaca2bd5355fa2d4226cd2cc519fa9b97c1 data/create/recipes/copper_shingle_slab_from_copper_shingles_stonecutting.json bd4cd7119f8371164b278afc679795a3c2a53406 data/create/recipes/copper_shingle_stairs.json 59f672e8e88d5f4655467e2696616b552debaf46 data/create/recipes/copper_shingle_stairs_from_copper_shingles_stonecutting.json -d463aa891c7ae1b2eb1a758e4100c5a1c16cfffd data/create/recipes/copper_tiles_from_ingots_copper_stonecutting.json +bab9fa969ba95850dc6e3bd0723387a61cbb05cd data/create/recipes/copper_shingles_from_ingots_copper_stonecutting.json f64ba3f3c607b43ea77e5bccb7ec2048e5c6e424 data/create/recipes/copper_tile_slab.json 91b0390e0c772d43eb46b94a0113323f0f6a4387 data/create/recipes/copper_tile_slab_from_copper_tiles_stonecutting.json d31a41f6f7ef0bd20abab06cc31a9d2c56187117 data/create/recipes/copper_tile_stairs.json bf1b0a447169029161fb07feacd22d5aa806b2bf data/create/recipes/copper_tile_stairs_from_copper_tiles_stonecutting.json +d463aa891c7ae1b2eb1a758e4100c5a1c16cfffd data/create/recipes/copper_tiles_from_ingots_copper_stonecutting.json daa54c9ff3612521f06cc1979116beafcda852dd data/create/recipes/copycat_panel_from_ingots_zinc_stonecutting.json 745816d2c3fa29ede2510e39edc76f6fecee963f data/create/recipes/copycat_step_from_ingots_zinc_stonecutting.json -255c32272a704109fccdbb071d4dbf602cb8c1d8 data/create/recipes/crafting/copper/waxed_copper_shingles_from_honeycomb.json 57ae13042e0f96676fa322bf24db4976d75ca6bc data/create/recipes/crafting/copper/waxed_copper_shingle_slab_from_honeycomb.json 790565897535ea2e741d0a0ed7c0b561d594b69a data/create/recipes/crafting/copper/waxed_copper_shingle_stairs_from_honeycomb.json -0c6e14c5884257850c7360cba66bc8cca91c84e7 data/create/recipes/crafting/copper/waxed_copper_tiles_from_honeycomb.json +255c32272a704109fccdbb071d4dbf602cb8c1d8 data/create/recipes/crafting/copper/waxed_copper_shingles_from_honeycomb.json 4693ee65a4a5e1c93fc2acce7bfbc438e573ad9a data/create/recipes/crafting/copper/waxed_copper_tile_slab_from_honeycomb.json f8772b915663e3f70b3a2405a23c5ce87e8b8e49 data/create/recipes/crafting/copper/waxed_copper_tile_stairs_from_honeycomb.json -6d0dacc4db8966d38156fe17645732084379a887 data/create/recipes/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json +0c6e14c5884257850c7360cba66bc8cca91c84e7 data/create/recipes/crafting/copper/waxed_copper_tiles_from_honeycomb.json 3bc0b81ea61229e24570e083caa4e5870d517e75 data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_slab_from_honeycomb.json 191f34b27bc8966c2b6ba41403cc0933718748d3 data/create/recipes/crafting/copper/waxed_exposed_copper_shingle_stairs_from_honeycomb.json -cdd66bdfddbcdfacb27c030872d10b6e7f1356fd data/create/recipes/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json +6d0dacc4db8966d38156fe17645732084379a887 data/create/recipes/crafting/copper/waxed_exposed_copper_shingles_from_honeycomb.json 2f6d2f8da4d4da2ed48e33d8f6e0b32d37a3ce6d data/create/recipes/crafting/copper/waxed_exposed_copper_tile_slab_from_honeycomb.json 4ed8482ed29fe7c3273db733fa141743c181d460 data/create/recipes/crafting/copper/waxed_exposed_copper_tile_stairs_from_honeycomb.json -0ca4e58d715d5ed4b051a94f2dff42d4d413ef07 data/create/recipes/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json +cdd66bdfddbcdfacb27c030872d10b6e7f1356fd data/create/recipes/crafting/copper/waxed_exposed_copper_tiles_from_honeycomb.json b421f16aea7c47fa8a62e69973f30e4e382f8a2c data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_slab_from_honeycomb.json 7ab7f673f57e219d3e486d0add1d7e2a8820cc6b data/create/recipes/crafting/copper/waxed_oxidized_copper_shingle_stairs_from_honeycomb.json -b7edffb9b1a936fd34fe23defefc8cb9ea4f6977 data/create/recipes/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json +0ca4e58d715d5ed4b051a94f2dff42d4d413ef07 data/create/recipes/crafting/copper/waxed_oxidized_copper_shingles_from_honeycomb.json 24582e83e8d36a6267df5c028addfb44c1a637e6 data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_slab_from_honeycomb.json 9185ea241bcb5f2fe09d0d5c65832ef379e06c58 data/create/recipes/crafting/copper/waxed_oxidized_copper_tile_stairs_from_honeycomb.json -90bce9f262b87fb821210aceb88d09d815d15e5a data/create/recipes/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json +b7edffb9b1a936fd34fe23defefc8cb9ea4f6977 data/create/recipes/crafting/copper/waxed_oxidized_copper_tiles_from_honeycomb.json a2cc99ad9b1234f5327971ee535af9bc25d0154c data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_slab_from_honeycomb.json 0952753a079593d748b38ca84b666f2f886f5c1e data/create/recipes/crafting/copper/waxed_weathered_copper_shingle_stairs_from_honeycomb.json -724802d206db185ebf20bafbcfc35fe0f982f58a data/create/recipes/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json +90bce9f262b87fb821210aceb88d09d815d15e5a data/create/recipes/crafting/copper/waxed_weathered_copper_shingles_from_honeycomb.json 98d0b72eb20e1d80cc590800ae2d642a47c3ae5f data/create/recipes/crafting/copper/waxed_weathered_copper_tile_slab_from_honeycomb.json 594b8fd5c30a84df97667b2c6dccc5dedd039d26 data/create/recipes/crafting/copper/waxed_weathered_copper_tile_stairs_from_honeycomb.json +724802d206db185ebf20bafbcfc35fe0f982f58a data/create/recipes/crafting/copper/waxed_weathered_copper_tiles_from_honeycomb.json 97c3e430ef2aecf61c457d0b8c4bbd23e1b01cc3 data/create/recipes/crafting/kinetics/black_seat.json 1129d02609125b48af2efa48f84dd3f90d51a341 data/create/recipes/crafting/kinetics/black_seat_from_other_seat.json 9e5a73e2343054d35e2fbfd20f0c49834d1a87a6 data/create/recipes/crafting/kinetics/black_valve_handle_from_other_valve_handle.json @@ -3634,7 +3634,6 @@ b04c1cebcfbcf44c4ced04252f54dbfeb8f9ff12 data/create/recipes/crafting/kinetics/w c3f4fd2206f3885904913289761f2b8b758e4c95 data/create/recipes/crimsite_pillar_from_stone_types_crimsite_stonecutting.json e1815f97fbc2786d77f5378a2696e36050d8a1fd data/create/recipes/crimson_window.json 96009a12fe3f5ebf677ac069999e2ea2adbc9b7c data/create/recipes/crimson_window_pane.json -82cb9be82ce5109781169bdb47bbd49238b9824b data/create/recipes/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json d6a41fc914a4a41478f115d9503658dba04a4d02 data/create/recipes/cut_andesite_brick_slab.json edf981198463ac58524606f86dc15d2265e8b993 data/create/recipes/cut_andesite_brick_slab_from_stone_types_andesite_stonecutting.json 72486864f3a0d31a92212552441eb659f2541b60 data/create/recipes/cut_andesite_brick_slab_recycling.json @@ -3642,6 +3641,7 @@ edf981198463ac58524606f86dc15d2265e8b993 data/create/recipes/cut_andesite_brick_ 22f463c679249738bf1a340a3b8ff14806303a70 data/create/recipes/cut_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json 42b7105c1d776aed25c1c6bbd9254375079d7438 data/create/recipes/cut_andesite_brick_wall.json 7d25517650c9f66b65f0f8841cf9bcda7ea401ec data/create/recipes/cut_andesite_brick_wall_from_stone_types_andesite_stonecutting.json +82cb9be82ce5109781169bdb47bbd49238b9824b data/create/recipes/cut_andesite_bricks_from_stone_types_andesite_stonecutting.json c3ab483224c3adbd467a4ec0b26a1f6a53fe81c4 data/create/recipes/cut_andesite_from_stone_types_andesite_stonecutting.json 9f316131bb538da9f6b1bde9eaaa0a5bd5972a66 data/create/recipes/cut_andesite_slab.json 50dcff201da369bdc591fdc320aae3547f114284 data/create/recipes/cut_andesite_slab_from_stone_types_andesite_stonecutting.json @@ -3650,7 +3650,6 @@ c3ab483224c3adbd467a4ec0b26a1f6a53fe81c4 data/create/recipes/cut_andesite_from_s c284fc46aabae9c5ab79071eb63ec9b07a9d1002 data/create/recipes/cut_andesite_stairs_from_stone_types_andesite_stonecutting.json 3b6e66e92656ab5b0d1e15444db62ccb1cc01866 data/create/recipes/cut_andesite_wall.json 5df6e8d558f656533aff514aee8cdec7cf8d6fdf data/create/recipes/cut_andesite_wall_from_stone_types_andesite_stonecutting.json -e335b15907be053ab0f2649338b12a86371b78f7 data/create/recipes/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json 41d085d3b8fce5b12d601d86fd0e88df9b482aec data/create/recipes/cut_asurine_brick_slab.json cf61e0806a3988a771675a261a540cbb62352d80 data/create/recipes/cut_asurine_brick_slab_from_stone_types_asurine_stonecutting.json 86606a0717bba33f457707d96461fec6a22d23de data/create/recipes/cut_asurine_brick_slab_recycling.json @@ -3658,6 +3657,7 @@ cf61e0806a3988a771675a261a540cbb62352d80 data/create/recipes/cut_asurine_brick_s 382a7faa460ac286631fe063280541f2f499d895 data/create/recipes/cut_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json 09699c116bb201e742fef1fd3c987e9de4606e6a data/create/recipes/cut_asurine_brick_wall.json 8bb8a9f8e8dd0d6585311c326dcf3f40227149a9 data/create/recipes/cut_asurine_brick_wall_from_stone_types_asurine_stonecutting.json +e335b15907be053ab0f2649338b12a86371b78f7 data/create/recipes/cut_asurine_bricks_from_stone_types_asurine_stonecutting.json 0188d62fbeede94f8596dd5cc73d361a160e8c95 data/create/recipes/cut_asurine_from_stone_types_asurine_stonecutting.json 118e87a2a344238009b1bbbe70e6f314e27842d9 data/create/recipes/cut_asurine_slab.json 37c502094ee96da9e4983142dae5e023c6bcfe14 data/create/recipes/cut_asurine_slab_from_stone_types_asurine_stonecutting.json @@ -3666,7 +3666,6 @@ fe3dd5c7d5bdea71a75003cf3d50439d9d21458d data/create/recipes/cut_asurine_slab_re cade93c9328afcacf4507aa7699c4b09fb4592d4 data/create/recipes/cut_asurine_stairs_from_stone_types_asurine_stonecutting.json 80bec79b5daea4b2b72c0f5e9f189c1044583465 data/create/recipes/cut_asurine_wall.json 45a712e41a74982cfb94a39da199ec6c95eef798 data/create/recipes/cut_asurine_wall_from_stone_types_asurine_stonecutting.json -da11f21280ba1ed06ffe8afe77db3e9e1bbcb1a3 data/create/recipes/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json 98e849c743ed1e4397bf6168215dfa7006a804c4 data/create/recipes/cut_calcite_brick_slab.json 1c21eb6c785729a8ea274513e1313aed952e105e data/create/recipes/cut_calcite_brick_slab_from_stone_types_calcite_stonecutting.json 2a3f078f7f40ba3bc5c17a037db1f8ee415e4e3f data/create/recipes/cut_calcite_brick_slab_recycling.json @@ -3674,6 +3673,7 @@ e4267c62bc6cfc8373df29ee2685f1e1b286b638 data/create/recipes/cut_calcite_brick_s 10fe509e01e3ed1b04bd2f384c0aa3db96b117f1 data/create/recipes/cut_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json 9b55a6c9cf0ce697a242684953daf9aa94d024dc data/create/recipes/cut_calcite_brick_wall.json 1e67376e484923b84bd64b0b22b4e55b581ac419 data/create/recipes/cut_calcite_brick_wall_from_stone_types_calcite_stonecutting.json +da11f21280ba1ed06ffe8afe77db3e9e1bbcb1a3 data/create/recipes/cut_calcite_bricks_from_stone_types_calcite_stonecutting.json 98b014b64c97371f04aaacbdd23e13e274e36e3b data/create/recipes/cut_calcite_from_stone_types_calcite_stonecutting.json fcab91f11fe97a194b2c1b16115206166d3cd634 data/create/recipes/cut_calcite_slab.json 8426a494b776148056cb4525e62744d0be8b28cd data/create/recipes/cut_calcite_slab_from_stone_types_calcite_stonecutting.json @@ -3682,7 +3682,6 @@ fcab91f11fe97a194b2c1b16115206166d3cd634 data/create/recipes/cut_calcite_slab.js a7e7fb425d3c1f21f5ed53da79957363fed824df data/create/recipes/cut_calcite_stairs_from_stone_types_calcite_stonecutting.json 73eaf7bffa38bc874974871f3002cd3ee7f0c36e data/create/recipes/cut_calcite_wall.json 01b4c23362f15ee0e5c207c46383f96032c89d98 data/create/recipes/cut_calcite_wall_from_stone_types_calcite_stonecutting.json -07aff2bb6424de46463b2c965418ed52efd0a790 data/create/recipes/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json 8ffb2c1c747f19ea37c0da3fe248b6c58981c9f6 data/create/recipes/cut_crimsite_brick_slab.json 86c3a5c64561052489b3ceb9e08be5a8729198a9 data/create/recipes/cut_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json e3215d4e651e70402b896ba50975cb2f23d16278 data/create/recipes/cut_crimsite_brick_slab_recycling.json @@ -3690,6 +3689,7 @@ e49f6e319fae9058cbece0e332a11e108234e608 data/create/recipes/cut_crimsite_brick_ c7186fb1a75f59aff929e843f50a162a090b7bb3 data/create/recipes/cut_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json 272d8d01730a88eff4fc6923e93962650b992c46 data/create/recipes/cut_crimsite_brick_wall.json 13ac9464098e8c67e820dc898c025ab0382d852a data/create/recipes/cut_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json +07aff2bb6424de46463b2c965418ed52efd0a790 data/create/recipes/cut_crimsite_bricks_from_stone_types_crimsite_stonecutting.json 18ce9ff32eda2d869bd11f398a86e78b71f6d0fe data/create/recipes/cut_crimsite_from_stone_types_crimsite_stonecutting.json c39166aa6267ec5bc71893d5756955abfb644217 data/create/recipes/cut_crimsite_slab.json 6271d5bc0377814ba06061bfffcb812ca2ef8f03 data/create/recipes/cut_crimsite_slab_from_stone_types_crimsite_stonecutting.json @@ -3698,7 +3698,6 @@ acfe33dbb889c820c213bcbc8593766703bf3a25 data/create/recipes/cut_crimsite_slab_r 90b03cf1e72d3b803e33755832e0722ff264681b data/create/recipes/cut_crimsite_stairs_from_stone_types_crimsite_stonecutting.json 8dfe19522878af232deaa1fc13d83cf785684cba data/create/recipes/cut_crimsite_wall.json 18f9548175baab0173785d7ef308096067712dd2 data/create/recipes/cut_crimsite_wall_from_stone_types_crimsite_stonecutting.json -de1a11b7ed71f1f7aeea2791fe922feef689fd35 data/create/recipes/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json 5e5c0e6b1b3e204de3c48fb6a4cd473a150979c2 data/create/recipes/cut_deepslate_brick_slab.json 2c0795b92759dab751f86f50aa80440df2245526 data/create/recipes/cut_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json dbcc41c48cf28b71dcd9f3b6ecae43c8de681532 data/create/recipes/cut_deepslate_brick_slab_recycling.json @@ -3706,6 +3705,7 @@ e21f8dc33e70ebd43ea79a4afaf3b4e8a449f4bd data/create/recipes/cut_deepslate_brick 7b3489e5b629a995691be117c5a378769c743449 data/create/recipes/cut_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json 158bb41bffebb2543e4aa2d5f14cc8af1cdd8671 data/create/recipes/cut_deepslate_brick_wall.json 73a07a5fa665bb20d131f0a0e40806116316928a data/create/recipes/cut_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json +de1a11b7ed71f1f7aeea2791fe922feef689fd35 data/create/recipes/cut_deepslate_bricks_from_stone_types_deepslate_stonecutting.json 992fdc2eba2afe3ff8aad0ceee5424ecd3f3026d data/create/recipes/cut_deepslate_from_stone_types_deepslate_stonecutting.json 064e2f5edd9209af7742b0f0eb45204453bed46f data/create/recipes/cut_deepslate_slab.json f341d30b7fd427dea09a51d67e1e9532e5184be8 data/create/recipes/cut_deepslate_slab_from_stone_types_deepslate_stonecutting.json @@ -3714,7 +3714,6 @@ c08e12e44344efca550efa8ba14d0cb2f9f6c2c6 data/create/recipes/cut_deepslate_stair e6deec1352fb5c74c470dc488b71e5f8f55bdfbf data/create/recipes/cut_deepslate_stairs_from_stone_types_deepslate_stonecutting.json 2ad7fb3f3a143e58bea8eefe4cd9db3d1c37a3e6 data/create/recipes/cut_deepslate_wall.json e752527479f71f96bb34878008bf8cfb23fd3045 data/create/recipes/cut_deepslate_wall_from_stone_types_deepslate_stonecutting.json -2c23d13f48f3685bda6c564e080053fbfa71ab99 data/create/recipes/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json 90b83c2a2026d70f49c91813305fdee721926db9 data/create/recipes/cut_diorite_brick_slab.json 9d51c690c77321437561a006dc2f9bba975875e6 data/create/recipes/cut_diorite_brick_slab_from_stone_types_diorite_stonecutting.json fa76e64ac9b569f5d5f2f1ecc54e51f9be15aacf data/create/recipes/cut_diorite_brick_slab_recycling.json @@ -3722,6 +3721,7 @@ aa6aea99e9ce2d5dc3d6555ab3d17928bca6195e data/create/recipes/cut_diorite_brick_s 9a26c4097519a9300e591b6578bbaf6c11f909e1 data/create/recipes/cut_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json 78d37df17c7e2be73ce1d226ee552ff3f49b9e4f data/create/recipes/cut_diorite_brick_wall.json f668f2c78a779bc3d0546a82dea02b9f4688e05c data/create/recipes/cut_diorite_brick_wall_from_stone_types_diorite_stonecutting.json +2c23d13f48f3685bda6c564e080053fbfa71ab99 data/create/recipes/cut_diorite_bricks_from_stone_types_diorite_stonecutting.json 1918ecb2ab16ca7dbb30eee4852b67dd963d872e data/create/recipes/cut_diorite_from_stone_types_diorite_stonecutting.json 07fda5c89128648856f948a03ac56a2a2693cf1b data/create/recipes/cut_diorite_slab.json 28765ac7f8b62373b32f014d1dd7f4afb50e1906 data/create/recipes/cut_diorite_slab_from_stone_types_diorite_stonecutting.json @@ -3730,7 +3730,6 @@ dd5f3c59a5d292f7b5c046be35da7f67e8383aa1 data/create/recipes/cut_diorite_slab_re be2c6c01630b90895e7215edce3d02352793dbc4 data/create/recipes/cut_diorite_stairs_from_stone_types_diorite_stonecutting.json 8984b7b7dbc7e65ee04886516501a13278e889e9 data/create/recipes/cut_diorite_wall.json 8ff5d1ecff2202595f7cba5bd65c466c53ac2cc5 data/create/recipes/cut_diorite_wall_from_stone_types_diorite_stonecutting.json -10550b023989113c26d430136daf1dc49f10ce63 data/create/recipes/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json 95717a80bb8ae296c2f77478a8f42b88cea88996 data/create/recipes/cut_dripstone_brick_slab.json f04bf1189b53e24974779d9e959e8973d9677162 data/create/recipes/cut_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json 332534fc2909ca83f5f7f4ab3adf92680bb17f79 data/create/recipes/cut_dripstone_brick_slab_recycling.json @@ -3738,6 +3737,7 @@ f04bf1189b53e24974779d9e959e8973d9677162 data/create/recipes/cut_dripstone_brick 17bf8160eaf16655d454ddfe22b82c9a86462146 data/create/recipes/cut_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json 7d638d156326a2e542ed94837273d9cca5cf4fce data/create/recipes/cut_dripstone_brick_wall.json 154931db54115cf4a64147cdd6d1eb7efff48737 data/create/recipes/cut_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json +10550b023989113c26d430136daf1dc49f10ce63 data/create/recipes/cut_dripstone_bricks_from_stone_types_dripstone_stonecutting.json 7147f9199f174c9864109fe5723528921aaa0c46 data/create/recipes/cut_dripstone_from_stone_types_dripstone_stonecutting.json f2800b467eac75d0099f2f07e09b47115df4e09f data/create/recipes/cut_dripstone_slab.json a4f62a1a30592f82789988f93d8ae35d176eca59 data/create/recipes/cut_dripstone_slab_from_stone_types_dripstone_stonecutting.json @@ -3746,7 +3746,6 @@ a4f62a1a30592f82789988f93d8ae35d176eca59 data/create/recipes/cut_dripstone_slab_ f2df5efedb6fb25ecb877b888007990082d9aca4 data/create/recipes/cut_dripstone_stairs_from_stone_types_dripstone_stonecutting.json a177092d0270f9e07a4f9bef4d0c8fb2ed91d3bc data/create/recipes/cut_dripstone_wall.json a3731ef689d3ac790bc3e3fd507f1134c99a751a data/create/recipes/cut_dripstone_wall_from_stone_types_dripstone_stonecutting.json -9c4c64666b18d3adb11cd3d56667fabf6e88dfe2 data/create/recipes/cut_granite_bricks_from_stone_types_granite_stonecutting.json aa454bebffd7e77cfa5c1bd711bfbac27e3c5a14 data/create/recipes/cut_granite_brick_slab.json d073b9b0b8ca2fbdc5e1ed16f6f195a5f3af4588 data/create/recipes/cut_granite_brick_slab_from_stone_types_granite_stonecutting.json 1dfd539c17a3342a0cd194ce1465a808aacbeda3 data/create/recipes/cut_granite_brick_slab_recycling.json @@ -3754,6 +3753,7 @@ e069aa5c316feb2823ef98e8e6c89bb1bed23d2e data/create/recipes/cut_granite_brick_s f38fc7014aa83d4914d50d87ee3f8f762c078a78 data/create/recipes/cut_granite_brick_stairs_from_stone_types_granite_stonecutting.json 0fd9c3a778c7bdcd7aa06f892a9c260ad664d367 data/create/recipes/cut_granite_brick_wall.json b81db94b6228f512049324dd1436880f1e86e444 data/create/recipes/cut_granite_brick_wall_from_stone_types_granite_stonecutting.json +9c4c64666b18d3adb11cd3d56667fabf6e88dfe2 data/create/recipes/cut_granite_bricks_from_stone_types_granite_stonecutting.json 01970a95f17648a7ef1fb0337ee2e82eb2279e9e data/create/recipes/cut_granite_from_stone_types_granite_stonecutting.json 8fc1c51591e590c8718be0500a4dbcc2b47830ce data/create/recipes/cut_granite_slab.json d239323b7a3b65b2fd7005350a90d578671c2b81 data/create/recipes/cut_granite_slab_from_stone_types_granite_stonecutting.json @@ -3762,7 +3762,6 @@ d239323b7a3b65b2fd7005350a90d578671c2b81 data/create/recipes/cut_granite_slab_fr 3d85d483073d37fea7d9a95831b3b856c0725b98 data/create/recipes/cut_granite_stairs_from_stone_types_granite_stonecutting.json 3d4130fe5fe6e963fd5e10534e729e0448b9f05f data/create/recipes/cut_granite_wall.json d43a876bf89bf3536c80fd5e3ef0ee36c147cd06 data/create/recipes/cut_granite_wall_from_stone_types_granite_stonecutting.json -7cdd3cf302cfe4ef21c0a89dadef4f781e307bb0 data/create/recipes/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json 0e3285206947bcfdf9606d3f8e61ea7d2899f7d2 data/create/recipes/cut_limestone_brick_slab.json c3d3ff37e29c435b2a13d30bd4ded0f6ca9fbfbc data/create/recipes/cut_limestone_brick_slab_from_stone_types_limestone_stonecutting.json 459babb2bd01e9e1ece4c8cd2865690997f01c66 data/create/recipes/cut_limestone_brick_slab_recycling.json @@ -3770,6 +3769,7 @@ d4f8dc640becf1c35416016500424ecd68d7ecee data/create/recipes/cut_limestone_brick 570983b2b27862dabe9f3d1bcd76d2909b8bdb3c data/create/recipes/cut_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json aad4342a726fd65ca2b4c52a4e8857190e50b5be data/create/recipes/cut_limestone_brick_wall.json 5ac226aff9d854efc47ed71241e6c098b170b9b0 data/create/recipes/cut_limestone_brick_wall_from_stone_types_limestone_stonecutting.json +7cdd3cf302cfe4ef21c0a89dadef4f781e307bb0 data/create/recipes/cut_limestone_bricks_from_stone_types_limestone_stonecutting.json 329950373aaaf8e70c54cf5e2467c7a84f372078 data/create/recipes/cut_limestone_from_stone_types_limestone_stonecutting.json cbacfd31703ac908d28e42968bb571dccfa20612 data/create/recipes/cut_limestone_slab.json 628a0a64c2dcd63f17a3ec9ce55ac643b194eacc data/create/recipes/cut_limestone_slab_from_stone_types_limestone_stonecutting.json @@ -3778,7 +3778,6 @@ cbacfd31703ac908d28e42968bb571dccfa20612 data/create/recipes/cut_limestone_slab. ba301da212ee14ff42c38487d0906a2da203e3c3 data/create/recipes/cut_limestone_stairs_from_stone_types_limestone_stonecutting.json d2aac4ac16f9c842af1efd3896dd3250f6d8424e data/create/recipes/cut_limestone_wall.json b14e6972f8586e569a7ab4ecf6ed5d6db1a2bded data/create/recipes/cut_limestone_wall_from_stone_types_limestone_stonecutting.json -a1a2b95283d88e1d990e00da9a095fe928b2aa2f data/create/recipes/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json d5a4fa7787d2e56e0b5c8d533567543b93cf694b data/create/recipes/cut_ochrum_brick_slab.json 58514a5f216706e9bb62b27ad03701fe02bac013 data/create/recipes/cut_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json 6cc3167ebf075d7b302a359d1afdddf5753d0e26 data/create/recipes/cut_ochrum_brick_slab_recycling.json @@ -3786,6 +3785,7 @@ d5a4fa7787d2e56e0b5c8d533567543b93cf694b data/create/recipes/cut_ochrum_brick_sl ec6339d6658b0d32e46c8a4a4e06d94a388a6332 data/create/recipes/cut_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json c4139ae7a9742f7111d308fe66bf1d627533550b data/create/recipes/cut_ochrum_brick_wall.json 1b8a4c81680df542a5e6b9e665c96649cf3eb7fa data/create/recipes/cut_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +a1a2b95283d88e1d990e00da9a095fe928b2aa2f data/create/recipes/cut_ochrum_bricks_from_stone_types_ochrum_stonecutting.json 2b967f3424196b5da9b396ea58fb969d406af789 data/create/recipes/cut_ochrum_from_stone_types_ochrum_stonecutting.json 5baa701f3cbe8d69e2e6a5554622dd78ef3ac451 data/create/recipes/cut_ochrum_slab.json 9a26cba276cf135a10c71d31f5b960b2ee6ac444 data/create/recipes/cut_ochrum_slab_from_stone_types_ochrum_stonecutting.json @@ -3794,7 +3794,6 @@ c4139ae7a9742f7111d308fe66bf1d627533550b data/create/recipes/cut_ochrum_brick_wa 75a232ccede0ffa7feb3e69da17c6a514a908907 data/create/recipes/cut_ochrum_stairs_from_stone_types_ochrum_stonecutting.json d9c05b7e4ce4ee86d0f6a9e1ee6c1b585ffee58b data/create/recipes/cut_ochrum_wall.json ee0dff8e1317aeffd061688879b97e81a00b7adb data/create/recipes/cut_ochrum_wall_from_stone_types_ochrum_stonecutting.json -087eefb8ffd61fd88f1db6ca25f9ac31e93f2fdf data/create/recipes/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json 72ac9293e5791df07914e2d3ed00e5ff59d64b08 data/create/recipes/cut_scorchia_brick_slab.json 2f38c410d5eb93bdb8c8be0f68ac89726e3c765c data/create/recipes/cut_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json e296e6af6865bf6e4618dab8a96bb88f6999a9a5 data/create/recipes/cut_scorchia_brick_slab_recycling.json @@ -3802,6 +3801,7 @@ bd5984a6b96443319b7fad32db771d8ded0b0591 data/create/recipes/cut_scorchia_brick_ bd5c803c855222a29998dd784e6d12a18dd612d9 data/create/recipes/cut_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json adfe0b08b5b72e579d47f36a4f835045e433e7f7 data/create/recipes/cut_scorchia_brick_wall.json 37fc5ae45d0260de9a5c45b0a1b208e4d146a562 data/create/recipes/cut_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json +087eefb8ffd61fd88f1db6ca25f9ac31e93f2fdf data/create/recipes/cut_scorchia_bricks_from_stone_types_scorchia_stonecutting.json f6dfd648418f24da093b80978c2f6e070f33ff6d data/create/recipes/cut_scorchia_from_stone_types_scorchia_stonecutting.json 7df99605c0c8761aeb9301d5391e1f16d41f89b3 data/create/recipes/cut_scorchia_slab.json fbd9a92d3c3d9e823cac51347320219f1734ec04 data/create/recipes/cut_scorchia_slab_from_stone_types_scorchia_stonecutting.json @@ -3810,7 +3810,6 @@ ad54182c3142ac9d9dd9bb4c5acc18f82e3fc5e5 data/create/recipes/cut_scorchia_stairs 1ddfefce136201ae78dbc53ba472080332fd6366 data/create/recipes/cut_scorchia_stairs_from_stone_types_scorchia_stonecutting.json 0a011b7cee33200fec5546168734c330952124da data/create/recipes/cut_scorchia_wall.json c594d886a303ad6e24d1283004442835ee861fbc data/create/recipes/cut_scorchia_wall_from_stone_types_scorchia_stonecutting.json -8650c0db70a3521b50404252106e0185b4f25a45 data/create/recipes/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json 8baf09b5ff2004d71091b6f95307aa179a21f4df data/create/recipes/cut_scoria_brick_slab.json e7080ca9b6a507bec4a4a3dd52a28c1c33975628 data/create/recipes/cut_scoria_brick_slab_from_stone_types_scoria_stonecutting.json f5b56f6eb9c1ac0f8168b2b0f0b0ab00655ebfdb data/create/recipes/cut_scoria_brick_slab_recycling.json @@ -3818,6 +3817,7 @@ f5b56f6eb9c1ac0f8168b2b0f0b0ab00655ebfdb data/create/recipes/cut_scoria_brick_sl 3fd560355163f0afafefe886e75fd8b2c3cf2b6f data/create/recipes/cut_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json ed803a4cdcf1dd01af03fff52e783f3539f78546 data/create/recipes/cut_scoria_brick_wall.json 553642a4e0dc5f934da8127a427ccdf53d3f51f9 data/create/recipes/cut_scoria_brick_wall_from_stone_types_scoria_stonecutting.json +8650c0db70a3521b50404252106e0185b4f25a45 data/create/recipes/cut_scoria_bricks_from_stone_types_scoria_stonecutting.json 5702063be3d38fa6b3ae5c998337676a0cf91149 data/create/recipes/cut_scoria_from_stone_types_scoria_stonecutting.json 295356022aee8a33272b430879615af638fc5a2c data/create/recipes/cut_scoria_slab.json 1656e822e823fcdf04120b55235aa477845a69a6 data/create/recipes/cut_scoria_slab_from_stone_types_scoria_stonecutting.json @@ -3826,7 +3826,6 @@ d0c88c037004911e377d88cf5a28ff85a413d07e data/create/recipes/cut_scoria_slab_rec 8748df6152c923930452397367562bb6007058cf data/create/recipes/cut_scoria_stairs_from_stone_types_scoria_stonecutting.json 7f9bd9de7bfba21eef449f8e11ffc8cf37de6b88 data/create/recipes/cut_scoria_wall.json 42235c6ded520ecda3321e8cd8910dcfa05cd61e data/create/recipes/cut_scoria_wall_from_stone_types_scoria_stonecutting.json -c02b4daf0050d705c145c0698aaa3094724ba2f1 data/create/recipes/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json 214b6219b86d94ea5705e40f254a4d9a9ac894b7 data/create/recipes/cut_tuff_brick_slab.json 9e0182206fab754daa0596259be0b98a712ba859 data/create/recipes/cut_tuff_brick_slab_from_stone_types_tuff_stonecutting.json 86938ed4ef969e85163c25e2a60181433247b73b data/create/recipes/cut_tuff_brick_slab_recycling.json @@ -3834,6 +3833,7 @@ b4212528d6c8893c1d57c0a5ada60673105e399d data/create/recipes/cut_tuff_brick_stai 90f3241a3eb47d9b0902b639fadee76e41b92a72 data/create/recipes/cut_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json b920d14ac41465f70b1fb8211c1c06d6c41ccadb data/create/recipes/cut_tuff_brick_wall.json aa41f89028dfa995dc11b881894e5a5993e4c4f9 data/create/recipes/cut_tuff_brick_wall_from_stone_types_tuff_stonecutting.json +c02b4daf0050d705c145c0698aaa3094724ba2f1 data/create/recipes/cut_tuff_bricks_from_stone_types_tuff_stonecutting.json 41dc800ae0a8918f4602d610ff0ba9714cdfe8dc data/create/recipes/cut_tuff_from_stone_types_tuff_stonecutting.json 573fff8b4fba92289dc6b113b58c8de25427f62d data/create/recipes/cut_tuff_slab.json 94667fb1e6203bd66bef10acfee7cd990009d26f data/create/recipes/cut_tuff_slab_from_stone_types_tuff_stonecutting.json @@ -3842,7 +3842,6 @@ aa41f89028dfa995dc11b881894e5a5993e4c4f9 data/create/recipes/cut_tuff_brick_wall 3b3ba319bd67a4e7f555cfcb54f9dc1fc22cf015 data/create/recipes/cut_tuff_stairs_from_stone_types_tuff_stonecutting.json 0c241d763e87b23b8799528e132e0d12b0e16141 data/create/recipes/cut_tuff_wall.json 5705b0312c5c70d48662c2ff375f0b2cfe3b4902 data/create/recipes/cut_tuff_wall_from_stone_types_tuff_stonecutting.json -8ab3c640b57421a8c0341ab4ec5bade31376d059 data/create/recipes/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json 822f97726c72d31c4c614767c08140b3535e0640 data/create/recipes/cut_veridium_brick_slab.json 1705fd5fc9ecc9a650812c89f500b5ef9aec2626 data/create/recipes/cut_veridium_brick_slab_from_stone_types_veridium_stonecutting.json 238aeedf55624671809a37246581d28fe6b2c19e data/create/recipes/cut_veridium_brick_slab_recycling.json @@ -3850,6 +3849,7 @@ dfbef691643cead7111b3b1c51aabcda8419bc19 data/create/recipes/cut_veridium_brick_ db2ea87f3ec8924ba9e0b87cd6a6edeb93c0c2d8 data/create/recipes/cut_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json 5e5c9fab7ba7143d206df7d8184742fb1a17c99c data/create/recipes/cut_veridium_brick_wall.json ed752a7f698e3ecbb5e4f848a78f8b3c7c6bf12e data/create/recipes/cut_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +8ab3c640b57421a8c0341ab4ec5bade31376d059 data/create/recipes/cut_veridium_bricks_from_stone_types_veridium_stonecutting.json e0355543105e4ec9d672d2a050e70b5c198ea472 data/create/recipes/cut_veridium_from_stone_types_veridium_stonecutting.json fb3c671f64676538ea3aa96be483ac15b3cdeb3d data/create/recipes/cut_veridium_slab.json 7d7c80ac03ad8623f9a5d7f0ff0bb6f68985efa5 data/create/recipes/cut_veridium_slab_from_stone_types_veridium_stonecutting.json @@ -4033,7 +4033,6 @@ a157a43e7788d285b8d72eade5955369c9b9a1de data/create/recipes/rose_quartz_block_f 1268cc2bdd088d26b84fb4e481db27af61f94bd1 data/create/recipes/scorchia_pillar_from_stone_types_scorchia_stonecutting.json 2e8f4cdb3498547a5e6fe658bb33d4be5ce8f54b data/create/recipes/scoria_from_stone_types_scoria_stonecutting.json 770d3453c75f77b16db661f6e636892d3117690b data/create/recipes/scoria_pillar_from_stone_types_scoria_stonecutting.json -75dc56fcdcd6a10288f2d607bf6dcbbe10b35a64 data/create/recipes/small_andesite_bricks_from_stone_types_andesite_stonecutting.json 2e86fddc76285b4e380b845eb1150580b134d0ac data/create/recipes/small_andesite_brick_slab.json 311727e5c08ddbe0aa26275be74e9b83201ac8ab data/create/recipes/small_andesite_brick_slab_from_stone_types_andesite_stonecutting.json 2767e239c9d704b6bb5325b4f40e0aa0acdcdce1 data/create/recipes/small_andesite_brick_slab_recycling.json @@ -4041,7 +4040,7 @@ a157a43e7788d285b8d72eade5955369c9b9a1de data/create/recipes/rose_quartz_block_f 9e82896e00c1e14e514fac818e11e5b9ef5b10d7 data/create/recipes/small_andesite_brick_stairs_from_stone_types_andesite_stonecutting.json 5287d389b4954d954881d9f0293c52870bba88d0 data/create/recipes/small_andesite_brick_wall.json 1172ca76affd948c50b207124ee03c4f480f4ee8 data/create/recipes/small_andesite_brick_wall_from_stone_types_andesite_stonecutting.json -e3b69122b2cfe64b043384235eeb6d04f346e58b data/create/recipes/small_asurine_bricks_from_stone_types_asurine_stonecutting.json +75dc56fcdcd6a10288f2d607bf6dcbbe10b35a64 data/create/recipes/small_andesite_bricks_from_stone_types_andesite_stonecutting.json 9196a055491052afc14ed01667cccf2a0920e793 data/create/recipes/small_asurine_brick_slab.json f4cc3330837a647c098ccb24fbbbf583c3f960fc data/create/recipes/small_asurine_brick_slab_from_stone_types_asurine_stonecutting.json 063b2f0ad7e93698999922040132eb2b23661a38 data/create/recipes/small_asurine_brick_slab_recycling.json @@ -4049,7 +4048,7 @@ a85d2f957223f87ffa2c3f63cdf6f9f0f84bb921 data/create/recipes/small_asurine_brick c7cb218b0d8a1e358d593fc1fef82fc074289552 data/create/recipes/small_asurine_brick_stairs_from_stone_types_asurine_stonecutting.json 08d10ee57995e67ac1fb5feba04b03aee51dbe16 data/create/recipes/small_asurine_brick_wall.json 4c0aa6203295a36a6d7ffe9d7bf0973277162689 data/create/recipes/small_asurine_brick_wall_from_stone_types_asurine_stonecutting.json -07125218f9025833afa189fa0090f4d6b4660db0 data/create/recipes/small_calcite_bricks_from_stone_types_calcite_stonecutting.json +e3b69122b2cfe64b043384235eeb6d04f346e58b data/create/recipes/small_asurine_bricks_from_stone_types_asurine_stonecutting.json a72719de028ca9e07756dae6031af48525520fc2 data/create/recipes/small_calcite_brick_slab.json d8ebf6f1eb2e2372fb20def956398089adec5d13 data/create/recipes/small_calcite_brick_slab_from_stone_types_calcite_stonecutting.json ab4cfc2b34989d41a434781a3150ecd530c4f15b data/create/recipes/small_calcite_brick_slab_recycling.json @@ -4057,7 +4056,7 @@ c77a7700d978e23db14d947915591061dda8eab3 data/create/recipes/small_calcite_brick 4e066bfc60ea142d54ce939d025b6679ac9634ad data/create/recipes/small_calcite_brick_stairs_from_stone_types_calcite_stonecutting.json 64e53d8090fa26cc4cb62efea7c1615ff7f705c2 data/create/recipes/small_calcite_brick_wall.json 3ba736ae76249fa61692c13f7879af954f9bbd36 data/create/recipes/small_calcite_brick_wall_from_stone_types_calcite_stonecutting.json -a3309c81f84bf4fb78e9db2316fb758f9b2f8429 data/create/recipes/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json +07125218f9025833afa189fa0090f4d6b4660db0 data/create/recipes/small_calcite_bricks_from_stone_types_calcite_stonecutting.json 92cf7e99229c1e72405bb0875e6f939b3f5aea12 data/create/recipes/small_crimsite_brick_slab.json b993e081103c019b7b9b73b38ef8c408fb4500ac data/create/recipes/small_crimsite_brick_slab_from_stone_types_crimsite_stonecutting.json 7f6fa1fab65d910388f5f2ec4ee7d99cbda8df57 data/create/recipes/small_crimsite_brick_slab_recycling.json @@ -4065,7 +4064,7 @@ b993e081103c019b7b9b73b38ef8c408fb4500ac data/create/recipes/small_crimsite_bric 260da721849d1afd6f431d51538d1587ee3af8d5 data/create/recipes/small_crimsite_brick_stairs_from_stone_types_crimsite_stonecutting.json 093ac919f793111b442029198383a9de5b6df027 data/create/recipes/small_crimsite_brick_wall.json 8b8280a8282fa8718620ee3d69182e241a7852c0 data/create/recipes/small_crimsite_brick_wall_from_stone_types_crimsite_stonecutting.json -e7a3cb889ce6b530cd40f19e23bad943374e61b5 data/create/recipes/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json +a3309c81f84bf4fb78e9db2316fb758f9b2f8429 data/create/recipes/small_crimsite_bricks_from_stone_types_crimsite_stonecutting.json 022690548a46f5cc63adda3626824a81c6ebf490 data/create/recipes/small_deepslate_brick_slab.json 655be9ddf21dea2255fb2cb2628a5fee39eb10e2 data/create/recipes/small_deepslate_brick_slab_from_stone_types_deepslate_stonecutting.json d6d3db5604279cd402f64dbdeae7c3bee6d7ab78 data/create/recipes/small_deepslate_brick_slab_recycling.json @@ -4073,7 +4072,7 @@ d6d3db5604279cd402f64dbdeae7c3bee6d7ab78 data/create/recipes/small_deepslate_bri 0a458e8248fe395748bd6025d43c002db5a7d343 data/create/recipes/small_deepslate_brick_stairs_from_stone_types_deepslate_stonecutting.json 96e2c36ac2f2899c9681f12f43c8ae232ae09180 data/create/recipes/small_deepslate_brick_wall.json e5644f4227b9cc9b98158ce3ded98bff1ffb97f9 data/create/recipes/small_deepslate_brick_wall_from_stone_types_deepslate_stonecutting.json -38b80603a86df24f6be0df9fd5f7d9b7aa33d2f9 data/create/recipes/small_diorite_bricks_from_stone_types_diorite_stonecutting.json +e7a3cb889ce6b530cd40f19e23bad943374e61b5 data/create/recipes/small_deepslate_bricks_from_stone_types_deepslate_stonecutting.json 6c66b44941c8b97cfec5948b5d8b08355f8d8f67 data/create/recipes/small_diorite_brick_slab.json 801f6cc6e06db56344b37c9b76c69f921c6d9293 data/create/recipes/small_diorite_brick_slab_from_stone_types_diorite_stonecutting.json c1fe4bff306e2d2b5d5595e4b35dd85f7e6bf0ce data/create/recipes/small_diorite_brick_slab_recycling.json @@ -4081,7 +4080,7 @@ af6feedf00bdfa45c1b8f0dd46ddaa80da622fed data/create/recipes/small_diorite_brick 30a6f2bdfec2b3f578572c9f94112906411e7c54 data/create/recipes/small_diorite_brick_stairs_from_stone_types_diorite_stonecutting.json 8728b791808736de2ac31e8dc81aa43638ae0ac8 data/create/recipes/small_diorite_brick_wall.json 7a1fdcef7091d76230fbee410fa5241f584845c4 data/create/recipes/small_diorite_brick_wall_from_stone_types_diorite_stonecutting.json -8840d538648516dd02628fbe3ea4f032ceda78bb data/create/recipes/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json +38b80603a86df24f6be0df9fd5f7d9b7aa33d2f9 data/create/recipes/small_diorite_bricks_from_stone_types_diorite_stonecutting.json 39a545b60040bd2d922cd3bd5af5036b1b9b23ef data/create/recipes/small_dripstone_brick_slab.json c91e4dc211305456c38e5823def91811ad851202 data/create/recipes/small_dripstone_brick_slab_from_stone_types_dripstone_stonecutting.json 55bb37d07e841bb8eecf2013445c01c8e09ff824 data/create/recipes/small_dripstone_brick_slab_recycling.json @@ -4089,7 +4088,7 @@ c91e4dc211305456c38e5823def91811ad851202 data/create/recipes/small_dripstone_bri 1e23c8df90aef6cd3561369f72c6c3106da883f5 data/create/recipes/small_dripstone_brick_stairs_from_stone_types_dripstone_stonecutting.json fda46cc15c21e7843537df5b5331874fd7511e19 data/create/recipes/small_dripstone_brick_wall.json 336e47b35437ffea4bb86d34f94e6361b2bbcfb0 data/create/recipes/small_dripstone_brick_wall_from_stone_types_dripstone_stonecutting.json -42c74dec6c64d3675e15b2b73cb32fc9d24839e9 data/create/recipes/small_granite_bricks_from_stone_types_granite_stonecutting.json +8840d538648516dd02628fbe3ea4f032ceda78bb data/create/recipes/small_dripstone_bricks_from_stone_types_dripstone_stonecutting.json d1bb4e91d80ca8eb9c2f935cbb66ef08b9ca7059 data/create/recipes/small_granite_brick_slab.json ddb2f4652607b56332a927af939212a5789a34db data/create/recipes/small_granite_brick_slab_from_stone_types_granite_stonecutting.json f1388636bcf98d7d9103c23528053b28c6305b4e data/create/recipes/small_granite_brick_slab_recycling.json @@ -4097,7 +4096,7 @@ f1388636bcf98d7d9103c23528053b28c6305b4e data/create/recipes/small_granite_brick ba935a3d64eedbd9b7017d0abfab351f57589593 data/create/recipes/small_granite_brick_stairs_from_stone_types_granite_stonecutting.json dac22c54e8034587a3fcf3aa0ce19bb4b7607cd7 data/create/recipes/small_granite_brick_wall.json 7a8d9e2291675de9e72363d93410de9039216f32 data/create/recipes/small_granite_brick_wall_from_stone_types_granite_stonecutting.json -714f6a84a5b3d5d57c07364925555e6f545b0b3d data/create/recipes/small_limestone_bricks_from_stone_types_limestone_stonecutting.json +42c74dec6c64d3675e15b2b73cb32fc9d24839e9 data/create/recipes/small_granite_bricks_from_stone_types_granite_stonecutting.json b844632a588cb96397750f4387c7e6517f85092c data/create/recipes/small_limestone_brick_slab.json a1c0bc263cd4659a89213f4fcdd87eba7ae04427 data/create/recipes/small_limestone_brick_slab_from_stone_types_limestone_stonecutting.json ec9154a3791113f57dc1c16dfef4c837533b6fc6 data/create/recipes/small_limestone_brick_slab_recycling.json @@ -4105,7 +4104,7 @@ ec9154a3791113f57dc1c16dfef4c837533b6fc6 data/create/recipes/small_limestone_bri 6943fdc8162e4d53c459f425b2ff5b34e9caa477 data/create/recipes/small_limestone_brick_stairs_from_stone_types_limestone_stonecutting.json 27ff69345efea14b9688fe9b182809995ea8ad4a data/create/recipes/small_limestone_brick_wall.json 98a83f757f0ac9cc2a876ae407bb5765071e700d data/create/recipes/small_limestone_brick_wall_from_stone_types_limestone_stonecutting.json -22c69e391110280e13d50693b9c81355da57a315 data/create/recipes/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json +714f6a84a5b3d5d57c07364925555e6f545b0b3d data/create/recipes/small_limestone_bricks_from_stone_types_limestone_stonecutting.json abdd280694cb30ce0d2703aadeeb378af9a7f8b2 data/create/recipes/small_ochrum_brick_slab.json e37612fa2523fa3711242cac4ec5e596b3e55698 data/create/recipes/small_ochrum_brick_slab_from_stone_types_ochrum_stonecutting.json 8f3f47cb3e759104cf86a422339345f8795143d3 data/create/recipes/small_ochrum_brick_slab_recycling.json @@ -4113,8 +4112,8 @@ de8d7f8e57645c0b5a6e98eb0cc4e573c5cf96ac data/create/recipes/small_ochrum_brick_ 04ebbdd14f81f4b4dc7986cb5241caa9f48f4ff1 data/create/recipes/small_ochrum_brick_stairs_from_stone_types_ochrum_stonecutting.json 07876725f97ff611f8d1710462224f07cab3ebbd data/create/recipes/small_ochrum_brick_wall.json 2331801569ec95562afc802f7e2ff191d329a5c6 data/create/recipes/small_ochrum_brick_wall_from_stone_types_ochrum_stonecutting.json +22c69e391110280e13d50693b9c81355da57a315 data/create/recipes/small_ochrum_bricks_from_stone_types_ochrum_stonecutting.json 68a9f80b97d9322ed33067d7717180494b904bed data/create/recipes/small_rose_quartz_tiles_from_polished_rose_quartz_stonecutting.json -bf27af2e54ed1b09611d67ee7afa6c7f56d00d09 data/create/recipes/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json 133057778480e1d2e13fe7b2766ba0891feea3a5 data/create/recipes/small_scorchia_brick_slab.json dad342d215c98f3214752e0ebfaf3015943c5ac7 data/create/recipes/small_scorchia_brick_slab_from_stone_types_scorchia_stonecutting.json 0a57ad5fce22d69cdc1dd880403612ffb47af4ba data/create/recipes/small_scorchia_brick_slab_recycling.json @@ -4122,7 +4121,7 @@ dad342d215c98f3214752e0ebfaf3015943c5ac7 data/create/recipes/small_scorchia_bric 7f89c9c6dcea06a3022c72029a5e547aa1721773 data/create/recipes/small_scorchia_brick_stairs_from_stone_types_scorchia_stonecutting.json 43310b3fa43bd791ef0e2e30971a24e788c20139 data/create/recipes/small_scorchia_brick_wall.json de8edc4fa5eec031ad0a63c7f59141985ae9af9e data/create/recipes/small_scorchia_brick_wall_from_stone_types_scorchia_stonecutting.json -b1a67d052e26c2129c34ee0732cfe533beb3e571 data/create/recipes/small_scoria_bricks_from_stone_types_scoria_stonecutting.json +bf27af2e54ed1b09611d67ee7afa6c7f56d00d09 data/create/recipes/small_scorchia_bricks_from_stone_types_scorchia_stonecutting.json d8a41adcc6ae9b0eb71a83b2dd89ff92a10e0057 data/create/recipes/small_scoria_brick_slab.json 34f4dd094f2949e3fd21f95ac890ae803b81fbea data/create/recipes/small_scoria_brick_slab_from_stone_types_scoria_stonecutting.json f15ad1cb05f5b02b630b982d23bd951178a3650c data/create/recipes/small_scoria_brick_slab_recycling.json @@ -4130,7 +4129,7 @@ df5a1437fb112519d904cc9f1cd28d5d891fb04d data/create/recipes/small_scoria_brick_ d36428daf8bf4e560f649e5eb40a8cd7a27e7a0e data/create/recipes/small_scoria_brick_stairs_from_stone_types_scoria_stonecutting.json cad432398d8886d60b94e96b2c2096ae27fffb50 data/create/recipes/small_scoria_brick_wall.json 9cff8370aaa81ece466fe15642c00a9992bd416c data/create/recipes/small_scoria_brick_wall_from_stone_types_scoria_stonecutting.json -e51ced16059f7c37fe3652a1cf4d938f91e956fc data/create/recipes/small_tuff_bricks_from_stone_types_tuff_stonecutting.json +b1a67d052e26c2129c34ee0732cfe533beb3e571 data/create/recipes/small_scoria_bricks_from_stone_types_scoria_stonecutting.json dd83af4a10a9b0ba6a4efb272d8b6b1611524a39 data/create/recipes/small_tuff_brick_slab.json e3a12b87830e47387e9ac118bb3d12b73558d757 data/create/recipes/small_tuff_brick_slab_from_stone_types_tuff_stonecutting.json 85dff00dc49eaf65f1f149a7f21a9f307b1b9710 data/create/recipes/small_tuff_brick_slab_recycling.json @@ -4138,7 +4137,7 @@ e03a8270b01b9a5cad238db4ce2b8f66ea78e8bf data/create/recipes/small_tuff_brick_st cd50bb5842c90038f6ac74e45971ab2e914d1463 data/create/recipes/small_tuff_brick_stairs_from_stone_types_tuff_stonecutting.json e795fbe5062ec47cc660ee26c8398477509c5f18 data/create/recipes/small_tuff_brick_wall.json 34471a7ebb431b6d1e3be5fa480b800b96556fee data/create/recipes/small_tuff_brick_wall_from_stone_types_tuff_stonecutting.json -82f17edc61a319c74dbdfa730584305899bd7572 data/create/recipes/small_veridium_bricks_from_stone_types_veridium_stonecutting.json +e51ced16059f7c37fe3652a1cf4d938f91e956fc data/create/recipes/small_tuff_bricks_from_stone_types_tuff_stonecutting.json f9a2f4ca078364e05b3446fe890ea207e5a56e87 data/create/recipes/small_veridium_brick_slab.json 234c3baee4c9428caab3e344f396ec87064103e3 data/create/recipes/small_veridium_brick_slab_from_stone_types_veridium_stonecutting.json b0db8335e3c7fd88f074c3895bea952efc0e8df8 data/create/recipes/small_veridium_brick_slab_recycling.json @@ -4146,6 +4145,7 @@ a1e214c230574526ca0a2fec059b4157ddec557d data/create/recipes/small_veridium_bric f63031587a64ed88ddba1df07767dd8d8caa1d2e data/create/recipes/small_veridium_brick_stairs_from_stone_types_veridium_stonecutting.json 9b003fbf2bcd975501ba307ea68c6c4bab397683 data/create/recipes/small_veridium_brick_wall.json 1ba48c5cae05b6f4b1ad223ce80925f1eaaf5dfd data/create/recipes/small_veridium_brick_wall_from_stone_types_veridium_stonecutting.json +82f17edc61a319c74dbdfa730584305899bd7572 data/create/recipes/small_veridium_bricks_from_stone_types_veridium_stonecutting.json 47973044b19b35ce169e7d46abc9d11a2f67a487 data/create/recipes/spruce_window.json 810544f79bf4b002981e614eaa8e49b48a7b5397 data/create/recipes/spruce_window_pane.json e343a80c92dab60f99c9b441d00189aceee477a0 data/create/recipes/tiled_glass_from_glass_colorless_stonecutting.json @@ -4303,8 +4303,8 @@ d794a156fdc9ec9e7c935b3b8962206b7b82eb79 data/minecraft/tags/blocks/mineable/pic 0c13aae0eeb99e89febe8dbe5e002af2ff843a9e data/minecraft/tags/blocks/needs_iron_tool.json 3cb2a92cbdf32ed5978f740dc378d363306c3e84 data/minecraft/tags/blocks/needs_stone_tool.json 5555e9722ecf1d4a3119d118e5aab8a17ef628cb data/minecraft/tags/blocks/rails.json -1ac7c46815461cbec0d4d97f25c085fdc8375dab data/minecraft/tags/blocks/slabs.json -dafa3bdb72fef5e6c0201c05846db3f2b214e587 data/minecraft/tags/blocks/stairs.json +594efc06bed9f38428b62ff3821c30edbc2f1678 data/minecraft/tags/blocks/slabs.json +cd2613a4722ce79366433181095c27463e7c61b8 data/minecraft/tags/blocks/stairs.json 11427a72e181857e22ec37a22462bc652e127cc5 data/minecraft/tags/blocks/trapdoors.json 2bcba05954ff7bc4cf9cc520478083da9973ec76 data/minecraft/tags/blocks/walls.json 71aef080a900d9e86818cf579438c3d826d6567e data/minecraft/tags/blocks/wooden_doors.json diff --git a/src/generated/resources/data/minecraft/tags/blocks/slabs.json b/src/generated/resources/data/minecraft/tags/blocks/slabs.json index 84083a313..5832e980e 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/slabs.json +++ b/src/generated/resources/data/minecraft/tags/blocks/slabs.json @@ -1,5 +1,21 @@ { "values": [ + "create:copper_shingle_slab", + "create:exposed_copper_shingle_slab", + "create:weathered_copper_shingle_slab", + "create:oxidized_copper_shingle_slab", + "create:waxed_copper_shingle_slab", + "create:waxed_exposed_copper_shingle_slab", + "create:waxed_weathered_copper_shingle_slab", + "create:waxed_oxidized_copper_shingle_slab", + "create:copper_tile_slab", + "create:exposed_copper_tile_slab", + "create:weathered_copper_tile_slab", + "create:oxidized_copper_tile_slab", + "create:waxed_copper_tile_slab", + "create:waxed_exposed_copper_tile_slab", + "create:waxed_weathered_copper_tile_slab", + "create:waxed_oxidized_copper_tile_slab", "create:cut_granite_slab", "create:polished_cut_granite_slab", "create:cut_granite_brick_slab", diff --git a/src/generated/resources/data/minecraft/tags/blocks/stairs.json b/src/generated/resources/data/minecraft/tags/blocks/stairs.json index f31f0c6ea..5e66f9449 100644 --- a/src/generated/resources/data/minecraft/tags/blocks/stairs.json +++ b/src/generated/resources/data/minecraft/tags/blocks/stairs.json @@ -1,5 +1,21 @@ { "values": [ + "create:copper_shingle_stairs", + "create:exposed_copper_shingle_stairs", + "create:weathered_copper_shingle_stairs", + "create:oxidized_copper_shingle_stairs", + "create:waxed_copper_shingle_stairs", + "create:waxed_exposed_copper_shingle_stairs", + "create:waxed_weathered_copper_shingle_stairs", + "create:waxed_oxidized_copper_shingle_stairs", + "create:copper_tile_stairs", + "create:exposed_copper_tile_stairs", + "create:weathered_copper_tile_stairs", + "create:oxidized_copper_tile_stairs", + "create:waxed_copper_tile_stairs", + "create:waxed_exposed_copper_tile_stairs", + "create:waxed_weathered_copper_tile_stairs", + "create:waxed_oxidized_copper_tile_stairs", "create:cut_granite_stairs", "create:polished_cut_granite_stairs", "create:cut_granite_brick_stairs", diff --git a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java index fa662efa3..2aca149ad 100644 --- a/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java +++ b/src/main/java/com/simibubi/create/foundation/block/CopperBlockSet.java @@ -7,6 +7,8 @@ import java.util.Map; import java.util.Objects; import java.util.function.Supplier; +import net.minecraft.tags.ItemTags; + import org.apache.commons.lang3.ArrayUtils; import com.simibubi.create.foundation.data.TagGen; @@ -132,7 +134,13 @@ public class CopperBlockSet { .simpleItem(); if (variant == BlockVariant.INSTANCE && state == WeatherState.UNAFFECTED) - builder.recipe((c, p) -> mainBlockRecipe.accept(c, p)); + builder.recipe(mainBlockRecipe::accept); + + if (variant == StairVariant.INSTANCE) + builder.tag(BlockTags.STAIRS); + + if (variant == SlabVariant.INSTANCE) + builder.tag(BlockTags.SLABS); if (waxed) { builder.recipe((ctx, prov) -> { From b420e3a3b7e102717f87d3eb5a16b2c236df227d Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:04:57 -0500 Subject: [PATCH 33/46] Fix Fabricators-of-Create/Create#1540 (#7127) Issue affects forge as-well when using sodium --- .../create/content/decoration/copycat/CopycatPanelBlock.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatPanelBlock.java b/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatPanelBlock.java index a40db2cdb..06106975c 100644 --- a/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatPanelBlock.java +++ b/src/main/java/com/simibubi/create/content/decoration/copycat/CopycatPanelBlock.java @@ -164,6 +164,11 @@ public class CopycatPanelBlock extends WaterloggedCopycatBlock { return false; } + @Override + public boolean skipRendering(BlockState state, BlockState adjacentState, Direction direction) { + return state.equals(adjacentState) && direction.getAxis().isHorizontal(); + } + @Override public boolean supportsExternalFaceHiding(BlockState state) { return true; From 1d403a556292b4d0114cf09ab53914caa2d43aec Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:05:37 -0500 Subject: [PATCH 34/46] Fix waterlogged bracketed kinetics dropping the bracket (#7126) --- .../kinetics/simpleRelays/AbstractSimpleShaftBlock.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/AbstractSimpleShaftBlock.java b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/AbstractSimpleShaftBlock.java index d4ad89d44..c6eaeb67e 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/AbstractSimpleShaftBlock.java +++ b/src/main/java/com/simibubi/create/content/kinetics/simpleRelays/AbstractSimpleShaftBlock.java @@ -37,7 +37,10 @@ public abstract class AbstractSimpleShaftBlock extends AbstractShaftBlock implem @Override public void onRemove(BlockState state, Level world, BlockPos pos, BlockState newState, boolean isMoving) { - if (state != newState && !isMoving) + boolean wasWaterLogged = state.hasProperty(WATERLOGGED) && + newState.hasProperty(WATERLOGGED) && + (state.getValue(WATERLOGGED) != newState.getValue(WATERLOGGED)); + if (state != newState && !isMoving && !wasWaterLogged) removeBracket(world, pos, true).ifPresent(stack -> Block.popResource(world, pos, stack)); super.onRemove(state, world, pos, newState, isMoving); } From 4afbc7e45581b00e475d7a45b8af134f6b225706 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:06:27 -0500 Subject: [PATCH 35/46] Switch away from using streams in ContraptionCollider (#7112) --- .../contraptions/ContraptionCollider.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/ContraptionCollider.java b/src/main/java/com/simibubi/create/content/contraptions/ContraptionCollider.java index 5be8ff108..3c542c490 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/ContraptionCollider.java +++ b/src/main/java/com/simibubi/create/content/contraptions/ContraptionCollider.java @@ -14,7 +14,6 @@ import org.apache.commons.lang3.mutable.MutableFloat; import org.apache.commons.lang3.mutable.MutableObject; import org.apache.commons.lang3.tuple.MutablePair; -import com.google.common.base.Predicates; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllMovementBehaviours; import com.simibubi.create.AllPackets; @@ -161,8 +160,7 @@ public class ContraptionCollider { List bbs = new ArrayList<>(); List potentialHits = getPotentiallyCollidedShapes(world, contraption, localBB.expandTowards(motionCopy)); - potentialHits.forEach(shape -> shape.toAabbs() - .forEach(bbs::add)); + potentialHits.forEach(shape -> bbs.addAll(shape.toAabbs())); return bbs; }); @@ -669,19 +667,23 @@ public class ContraptionCollider { BlockPos min = BlockPos.containing(blockScanBB.minX, blockScanBB.minY, blockScanBB.minZ); BlockPos max = BlockPos.containing(blockScanBB.maxX, blockScanBB.maxY, blockScanBB.maxZ); - List potentialHits = BlockPos.betweenClosedStream(min, max) - .filter(contraption.getBlocks()::containsKey) - .filter(Predicates.not(contraption::isHiddenInPortal)) - .map(p -> { - BlockState blockState = contraption.getBlocks() - .get(p).state(); - BlockPos pos = contraption.getBlocks() - .get(p).pos(); - VoxelShape collisionShape = blockState.getCollisionShape(world, p); - return collisionShape.move(pos.getX(), pos.getY(), pos.getZ()); - }) - .filter(Predicates.not(VoxelShape::isEmpty)) - .toList(); + List potentialHits = new ArrayList<>(); + + for (BlockPos p : BlockPos.betweenClosed(min, max)) { + if (contraption.blocks.containsKey(p) && !contraption.isHiddenInPortal(p)) { + StructureBlockInfo info = contraption.getBlocks().get(p); + + BlockState blockState = info.state(); + BlockPos pos = info.pos(); + + VoxelShape collisionShape = blockState.getCollisionShape(world, p) + .move(pos.getX(), pos.getY(), pos.getZ()); + + if (!collisionShape.isEmpty()) { + potentialHits.add(collisionShape); + } + } + } return potentialHits; } From c765b00c7725a03c0bddfcd7e61a08a98882eafa Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:07:44 -0500 Subject: [PATCH 36/46] Fix fluids not being placed into flowing fluids of the same type (#7054) --- .../java/com/simibubi/create/content/fluids/OpenEndedPipe.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java b/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java index 75822e28f..f4b633d10 100644 --- a/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java +++ b/src/main/java/com/simibubi/create/content/fluids/OpenEndedPipe.java @@ -192,7 +192,7 @@ public class OpenEndedPipe extends FlowSource { if (!FluidHelper.hasBlockState(fluid.getFluid())) return true; - if (!fluidState.isEmpty() && fluidState.getType() != fluid.getFluid()) { + if (!fluidState.isEmpty() && FluidHelper.convertToStill(fluidState.getType()) != fluid.getFluid()) { FluidReactions.handlePipeSpillCollision(world, outputPos, fluid.getFluid(), fluidState); return false; } From e065bb386b6b8247961cb145b46a3afd38845be9 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:08:51 -0500 Subject: [PATCH 37/46] Fix schematicannons consuming a single item for group items (#7058) --- .../foundation/utility/BlockHelper.java | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java index d1f01ccbf..2a3c7969f 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/BlockHelper.java @@ -1,5 +1,6 @@ package com.simibubi.create.foundation.utility; +import java.util.List; import java.util.function.Consumer; import javax.annotation.Nullable; @@ -45,6 +46,8 @@ import net.minecraft.world.level.block.SlimeBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.block.state.properties.SlabType; import net.minecraft.world.level.chunk.LevelChunk; @@ -55,6 +58,24 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.level.BlockEvent; public class BlockHelper { + private static final List COUNT_STATES = List.of( + BlockStateProperties.EGGS, + BlockStateProperties.PICKLES, + BlockStateProperties.CANDLES + ); + + private static final List VINELIKE_BLOCKS = List.of( + Blocks.VINE, Blocks.GLOW_LICHEN + ); + + private static final List VINELIKE_STATES = List.of( + BlockStateProperties.UP, + BlockStateProperties.NORTH, + BlockStateProperties.EAST, + BlockStateProperties.SOUTH, + BlockStateProperties.WEST, + BlockStateProperties.DOWN + ); public static BlockState setZeroAge(BlockState blockState) { if (blockState.hasProperty(BlockStateProperties.AGE_1)) @@ -96,11 +117,21 @@ public class BlockHelper { if (needsTwo) amount *= 2; - if (block.hasProperty(BlockStateProperties.EGGS)) - amount *= block.getValue(BlockStateProperties.EGGS); + for (IntegerProperty property : COUNT_STATES) + if (block.hasProperty(property)) + amount *= block.getValue(property); - if (block.hasProperty(BlockStateProperties.PICKLES)) - amount *= block.getValue(BlockStateProperties.PICKLES); + if (VINELIKE_BLOCKS.contains(block.getBlock())) { + int vineCount = 0; + + for (BooleanProperty vineState : VINELIKE_STATES) { + if (block.hasProperty(vineState) && block.getValue(vineState)) { + vineCount++; + } + } + + amount += vineCount - 1; + } { // Try held Item first @@ -243,17 +274,17 @@ public class BlockHelper { CompoundTag data = null; if (blockEntity == null) return data; - + if (AllBlockTags.SAFE_NBT.matches(blockState)) { data = blockEntity.saveWithFullMetadata(); - + } else if (blockEntity instanceof IPartialSafeNBT) { data = new CompoundTag(); ((IPartialSafeNBT) blockEntity).writeSafe(data); - + } else if (Mods.FRAMEDBLOCKS.contains(blockState.getBlock())) data = FramedBlocksInSchematics.prepareBlockEntityData(blockState, blockEntity); - + return NBTProcessors.process(blockState, blockEntity, data, true); } From b3662c45f490061cc9a06b9a7e2a741d5a894103 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:10:45 -0500 Subject: [PATCH 38/46] Fix backtanks getting incompatible enchants via smithing tables (#7057) --- build.gradle | 9 +++- .../foundation/mixin/SmithingMenuMixin.java | 45 +++++++++++++++++++ src/main/resources/create.mixins.json | 3 +- 3 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java diff --git a/build.gradle b/build.gradle index fb88a41c8..4c359e56a 100644 --- a/build.gradle +++ b/build.gradle @@ -167,6 +167,11 @@ dependencies { jarJar.ranged(it, '[1.0,2.0)') } + compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1")) + implementation(jarJar("io.github.llamalad7:mixinextras-forge:0.4.1")) { + jarJar.ranged(it, "[0.4.1,)") + } + implementation fg.deobf("com.tterrag.registrate:Registrate:${registrate_version}") compileOnly fg.deobf("dev.engine_room.flywheel:flywheel-forge-api-${flywheel_minecraft_version}:${flywheel_version}") @@ -192,12 +197,12 @@ dependencies { // implementation fg.deobf("curse.maven:ic2-classic-242942:5555152") // implementation fg.deobf("curse.maven:druidcraft-340991:3101903") // implementation fg.deobf("com.railwayteam.railways:railways-1.19.2-1.6.4:all") { transitive = false } - + implementation fg.deobf("dev.architectury:architectury-forge:9.1.12") implementation fg.deobf("dev.ftb.mods:ftb-chunks-forge:2001.3.1") implementation fg.deobf("dev.ftb.mods:ftb-teams-forge:2001.3.0") implementation fg.deobf("dev.ftb.mods:ftb-library-forge:2001.2.4") - + implementation fg.deobf("curse.maven:journeymap-32274:5457831") // implementation fg.deobf("ignored:journeymap-1.20.1-5.10.1-forge") diff --git a/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java b/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java new file mode 100644 index 000000000..23bcbebe4 --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/mixin/SmithingMenuMixin.java @@ -0,0 +1,45 @@ +package com.simibubi.create.foundation.mixin; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; + +import com.simibubi.create.AllItems; +import com.simibubi.create.content.equipment.armor.BacktankItem; + +import net.minecraft.world.inventory.SmithingMenu; + +import net.minecraft.world.item.ItemStack; + +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentHelper; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.HashMap; +import java.util.Map; + +@Mixin(SmithingMenu.class) +public class SmithingMenuMixin { + // Only add enchantments to the backtank if it supports them + @ModifyExpressionValue( + method = "createResult", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/item/crafting/SmithingRecipe;assemble(Lnet/minecraft/world/Container;Lnet/minecraft/core/RegistryAccess;)Lnet/minecraft/world/item/ItemStack;" + ) + ) + private ItemStack create$preventUnbreakingOnBacktanks(ItemStack original) { + if (AllItems.COPPER_BACKTANK.is(original) || AllItems.NETHERITE_BACKTANK.is(original)) { + Map enchantments = new HashMap<>(); + + EnchantmentHelper.getEnchantments(original).forEach((enchantment, level) -> { + if (enchantment.canEnchant(original)) + enchantments.put(enchantment, level); + }); + + EnchantmentHelper.setEnchantments(enchantments, original); + } + + return original; + } +} diff --git a/src/main/resources/create.mixins.json b/src/main/resources/create.mixins.json index 8db180be7..9a6738925 100644 --- a/src/main/resources/create.mixins.json +++ b/src/main/resources/create.mixins.json @@ -15,6 +15,7 @@ "LavaSwimmingMixin", "MainMixin", "MapItemSavedDataMixin", + "SmithingMenuMixin", "TestCommandMixin", "WaterWheelFluidSpreadMixin", "accessor.AbstractProjectileDispenseBehaviorAccessor", @@ -47,7 +48,7 @@ "client.MapRendererMapInstanceMixin", "client.PlayerRendererMixin", "client.WindowResizeMixin", - "compat.JourneyFullscreenMapMixin" + "compat.JourneyFullscreenMapMixin" ], "injectors": { "defaultRequire": 1 From 76668d9f9b3d16c9a62c650fe40f2e53329b720d Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:11:57 -0500 Subject: [PATCH 39/46] Fix Lectern Controllers storing ItemStacks from nbt (#7150) --- .../LecternControllerBlockEntity.java | 32 +++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlockEntity.java b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlockEntity.java index 9760e97fc..9d4915ca9 100644 --- a/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/redstone/link/controller/LecternControllerBlockEntity.java @@ -3,6 +3,7 @@ package com.simibubi.create.content.redstone.link.controller; import java.util.List; import java.util.UUID; +import com.simibubi.create.AllItems; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour; @@ -28,7 +29,7 @@ import net.minecraftforge.fml.DistExecutor; public class LecternControllerBlockEntity extends SmartBlockEntity { - private ItemStack controller = ItemStack.EMPTY; + private CompoundTag controllerNbt = new CompoundTag(); private UUID user; private UUID prevUser; // used only on client private boolean deactivatedThisTick; // used only on server @@ -43,7 +44,7 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { @Override protected void write(CompoundTag compound, boolean clientPacket) { super.write(compound, clientPacket); - compound.put("Controller", controller.save(new CompoundTag())); + compound.put("ControllerData", controllerNbt); if (user != null) compound.putUUID("User", user); } @@ -51,18 +52,25 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { @Override public void writeSafe(CompoundTag compound) { super.writeSafe(compound); - compound.put("Controller", controller.save(new CompoundTag())); + compound.put("ControllerData", controllerNbt); } @Override protected void read(CompoundTag compound, boolean clientPacket) { super.read(compound, clientPacket); - controller = ItemStack.of(compound.getCompound("Controller")); + + // Migrate old data if that is found + if (compound.contains("Controller")) { + controllerNbt = ItemStack.of(compound.getCompound("Controller")).getTag(); + } else { + controllerNbt = compound.getCompound("ControllerData"); + } + user = compound.hasUUID("User") ? compound.getUUID("User") : null; } public ItemStack getController() { - return controller; + return getController(); } public boolean hasUser() { return user != null; } @@ -138,8 +146,8 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { } public void setController(ItemStack newController) { - controller = newController; if (newController != null) { + controllerNbt = newController.getTag(); AllSoundEvents.CONTROLLER_PUT.playOnServer(level, worldPosition); } } @@ -148,7 +156,7 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { ItemStack newController = stack.copy(); stack.setCount(0); if (player.getItemInHand(hand).isEmpty()) { - player.setItemInHand(hand, controller); + player.setItemInHand(hand, createLinkedController()); } else { dropController(state); } @@ -164,10 +172,10 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { double x = worldPosition.getX() + 0.5 + 0.25 * dir.getStepX(); double y = worldPosition.getY() + 1; double z = worldPosition.getZ() + 0.5 + 0.25 * dir.getStepZ(); - ItemEntity itementity = new ItemEntity(level, x, y, z, controller.copy()); + ItemEntity itementity = new ItemEntity(level, x, y, z, createLinkedController()); itementity.setDefaultPickUpDelay(); level.addFreshEntity(itementity); - controller = null; + controllerNbt = new CompoundTag(); } public static boolean playerInRange(Player player, Level world, BlockPos pos) { @@ -176,4 +184,10 @@ public class LecternControllerBlockEntity extends SmartBlockEntity { return player.distanceToSqr(Vec3.atCenterOf(pos)) < reach * reach; } + private ItemStack createLinkedController() { + ItemStack stack = AllItems.LINKED_CONTROLLER.asStack(); + stack.setTag(controllerNbt); + return stack; + } + } From abf0633ae69bcfb9284849e13ab09e92b7019b44 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 10 Jan 2025 12:16:24 -0500 Subject: [PATCH 40/46] Optimize spout recipe generation by avoiding filling non-empty items (#7274) --- .../create/compat/jei/category/SpoutCategory.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java index 3fa7d3160..cd810c034 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/SpoutCategory.java @@ -63,7 +63,16 @@ public class SpoutCategory extends CreateRecipeCategory { if (!capability.isPresent()) continue; + var existingFluidHandler = capability.orElse(null); + int numTanks = existingFluidHandler.getTanks(); + FluidStack existingFluid = numTanks == 1 ? existingFluidHandler.getFluidInTank(0) : FluidStack.EMPTY; + for (FluidStack fluidStack : fluidStacks) { + // Hoist the fluid equality check to avoid the work of copying the stack + populating capabilities + // when most fluids will not match + if (numTanks == 1 && (!existingFluid.isEmpty() && !existingFluid.isFluidEqual(fluidStack))) { + continue; + } ItemStack copy = stack.copy(); copy.getCapability(ForgeCapabilities.FLUID_HANDLER_ITEM) .ifPresent(fhi -> { From 507829443f4704b4c1f138aacfe3d938f0f81f96 Mon Sep 17 00:00:00 2001 From: VoidLeech <57987812+VoidLeech@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:17:05 +0100 Subject: [PATCH 41/46] DyeHelper api (#7265) --- .../ContraptionControlsBlockEntity.java | 2 +- .../ContraptionControlsRenderer.java | 2 +- .../redstone/nixieTube/NixieTubeRenderer.java | 2 +- .../display/FlapDisplayBlockEntity.java | 14 +-- .../create/foundation/utility/DyeHelper.java | 109 ++++++++---------- .../debugInfo/ServerDebugInfoPacket.java | 2 +- 6 files changed, 59 insertions(+), 72 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java index 6b9c2d0c9..3aa4dfa3c 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsBlockEntity.java @@ -107,7 +107,7 @@ public class ContraptionControlsBlockEntity extends SmartBlockEntity { public static void sendStatus(Player player, ItemStack filter, boolean enabled) { MutableComponent state = Lang.translate("contraption.controls.actor_toggle." + (enabled ? "on" : "off")) - .color(DyeHelper.DYE_TABLE.get(enabled ? DyeColor.LIME : DyeColor.ORANGE) + .color(DyeHelper.getDyeColors(enabled ? DyeColor.LIME : DyeColor.ORANGE) .getFirst()) .component(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java index f281b623a..5dfb49ffa 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/actors/contraptionControls/ContraptionControlsRenderer.java @@ -83,7 +83,7 @@ public class ContraptionControlsRenderer extends SmartBlockEntityRenderer couple = DyeHelper.DYE_TABLE.get(efs.targetYEqualsSelection ? DyeColor.WHITE : DyeColor.ORANGE); + Couple couple = DyeHelper.getDyeColors(efs.targetYEqualsSelection ? DyeColor.WHITE : DyeColor.ORANGE); int brightColor = couple.getFirst(); int darkColor = couple.getSecond(); int flickeringBrightColor = Color.mixColors(brightColor, darkColor, flicker / 4); diff --git a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java index 19ca595eb..130097e59 100644 --- a/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java +++ b/src/main/java/com/simibubi/create/content/redstone/nixieTube/NixieTubeRenderer.java @@ -86,7 +86,7 @@ public class NixieTubeRenderer extends SafeBlockEntityRenderer couple = DyeHelper.DYE_TABLE.get(color); + Couple couple = DyeHelper.getDyeColors(color); int brightColor = couple.getFirst(); int darkColor = couple.getSecond(); int flickeringBrightColor = Color.mixColors(brightColor, darkColor, flicker / 4); diff --git a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayBlockEntity.java index dc014511c..235cff63c 100644 --- a/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/display/FlapDisplayBlockEntity.java @@ -141,7 +141,7 @@ public class FlapDisplayBlockEntity extends KineticBlockEntity { List lines = getLines(); if (lineIndex >= lines.size()) return; - + FlapDisplayLayout layout = lines.get(lineIndex); if (!layout.isLayout("Default")) layout.loadDefault(getMaxCharCount()); @@ -173,7 +173,7 @@ public class FlapDisplayBlockEntity extends KineticBlockEntity { colour[lineIndex] = color == DyeColor.WHITE ? null : color; notifyUpdate(); } - + public void setGlowing(int lineIndex) { glowingLines[lineIndex] = true; notifyUpdate(); @@ -210,7 +210,7 @@ public class FlapDisplayBlockEntity extends KineticBlockEntity { for (int j = 0; j < manualLines.length; j++) if (manualLines[j]) NBTHelper.putMarker(tag, "CustomLine" + j); - + for (int j = 0; j < glowingLines.length; j++) if (glowingLines[j]) NBTHelper.putMarker(tag, "GlowingLine" + j); @@ -239,7 +239,7 @@ public class FlapDisplayBlockEntity extends KineticBlockEntity { manualLines = new boolean[ySize * 2]; for (int i = 0; i < ySize * 2; i++) manualLines[i] = tag.contains("CustomLine" + i); - + glowingLines = new boolean[ySize * 2]; for (int i = 0; i < ySize * 2; i++) glowingLines[i] = tag.contains("GlowingLine" + i); @@ -323,12 +323,12 @@ public class FlapDisplayBlockEntity extends KineticBlockEntity { public int getLineColor(int line) { DyeColor color = colour[line]; return color == null ? 0xFF_D3C6BA - : DyeHelper.DYE_TABLE.get(color) + : DyeHelper.getDyeColors(color) .getFirst() | 0xFF_000000; } - + public boolean isLineGlowing(int line) { return glowingLines[line]; } - + } diff --git a/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java b/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java index b9d690b98..eb88fac80 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/DyeHelper.java @@ -1,8 +1,8 @@ package com.simibubi.create.foundation.utility; +import java.util.HashMap; import java.util.Map; - -import com.google.common.collect.ImmutableMap; +import java.util.function.Supplier; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.ItemLike; @@ -11,66 +11,53 @@ import net.minecraft.world.level.block.Blocks; public class DyeHelper { public static ItemLike getWoolOfDye(DyeColor color) { - switch (color) { - case BLACK: - return Blocks.BLACK_WOOL; - case BLUE: - return Blocks.BLUE_WOOL; - case BROWN: - return Blocks.BROWN_WOOL; - case CYAN: - return Blocks.CYAN_WOOL; - case GRAY: - return Blocks.GRAY_WOOL; - case GREEN: - return Blocks.GREEN_WOOL; - case LIGHT_BLUE: - return Blocks.LIGHT_BLUE_WOOL; - case LIGHT_GRAY: - return Blocks.LIGHT_GRAY_WOOL; - case LIME: - return Blocks.LIME_WOOL; - case MAGENTA: - return Blocks.MAGENTA_WOOL; - case ORANGE: - return Blocks.ORANGE_WOOL; - case PINK: - return Blocks.PINK_WOOL; - case PURPLE: - return Blocks.PURPLE_WOOL; - case RED: - return Blocks.RED_WOOL; - case YELLOW: - return Blocks.YELLOW_WOOL; - case WHITE: - default: - return Blocks.WHITE_WOOL; - } + return WOOL_TABLE.getOrDefault(color, () -> Blocks.WHITE_WOOL).get(); } - public static final Map> DYE_TABLE = new ImmutableMap.Builder>() - - // DyeColor, ( Front RGB, Back RGB ) - .put(DyeColor.BLACK, Couple.create(0x45403B, 0x21201F)) - .put(DyeColor.RED, Couple.create(0xB13937, 0x632737)) - .put(DyeColor.GREEN, Couple.create(0x208A46, 0x1D6045)) - .put(DyeColor.BROWN, Couple.create(0xAC855C, 0x68533E)) - - .put(DyeColor.BLUE, Couple.create(0x5391E1, 0x504B90)) - .put(DyeColor.GRAY, Couple.create(0x5D666F, 0x313538)) - .put(DyeColor.LIGHT_GRAY, Couple.create(0x95969B, 0x707070)) - .put(DyeColor.PURPLE, Couple.create(0x9F54AE, 0x63366C)) - - .put(DyeColor.CYAN, Couple.create(0x3EABB4, 0x3C7872)) - .put(DyeColor.PINK, Couple.create(0xD5A8CB, 0xB86B95)) - .put(DyeColor.LIME, Couple.create(0xA3DF55, 0x4FB16F)) - .put(DyeColor.YELLOW, Couple.create(0xE6D756, 0xE9AC29)) - - .put(DyeColor.LIGHT_BLUE, Couple.create(0x69CED2, 0x508AA5)) - .put(DyeColor.ORANGE, Couple.create(0xEE9246, 0xD94927)) - .put(DyeColor.MAGENTA, Couple.create(0xF062B0, 0xC04488)) - .put(DyeColor.WHITE, Couple.create(0xEDEAE5, 0xBBB6B0)) - - .build(); + public static Couple getDyeColors(DyeColor color){ + return DYE_TABLE.getOrDefault(color, DYE_TABLE.get(DyeColor.WHITE)); + } + /** + * Adds a dye color s.t. Create's blocks can use it instead of defaulting to white. + * @param color Dye color to add + * @param brightColor Front (bright) RGB color + * @param darkColor Back (dark) RGB color + * @param wool Supplier of wool item/block corresponding to the color + */ + public static void addDye(DyeColor color, Integer brightColor, Integer darkColor, Supplier wool){ + DYE_TABLE.put(color, Couple.create(brightColor, darkColor)); + WOOL_TABLE.put(color, wool); + } + + private static void addDye(DyeColor color, Integer brightColor, Integer darkColor, ItemLike wool){ + addDye(color, brightColor, darkColor, () -> wool); + } + + private static final Map> WOOL_TABLE = new HashMap<>(); + + private static final Map> DYE_TABLE = new HashMap<>(); + + static { + // DyeColor, ( Front RGB, Back RGB ) + addDye(DyeColor.BLACK, 0x45403B, 0x21201F, Blocks.BLACK_WOOL); + addDye(DyeColor.RED, 0xB13937, 0x632737, Blocks.RED_WOOL); + addDye(DyeColor.GREEN, 0x208A46, 0x1D6045, Blocks.GREEN_WOOL); + addDye(DyeColor.BROWN, 0xAC855C, 0x68533E, Blocks.BROWN_WOOL); + + addDye(DyeColor.BLUE, 0x5391E1, 0x504B90, Blocks.BLUE_WOOL); + addDye(DyeColor.GRAY, 0x5D666F, 0x313538, Blocks.GRAY_WOOL); + addDye(DyeColor.LIGHT_GRAY, 0x95969B, 0x707070, Blocks.LIGHT_GRAY_WOOL); + addDye(DyeColor.PURPLE, 0x9F54AE, 0x63366C, Blocks.PURPLE_WOOL); + + addDye(DyeColor.CYAN, 0x3EABB4, 0x3C7872, Blocks.CYAN_WOOL); + addDye(DyeColor.PINK, 0xD5A8CB, 0xB86B95, Blocks.PINK_WOOL); + addDye(DyeColor.LIME, 0xA3DF55, 0x4FB16F, Blocks.LIME_WOOL); + addDye(DyeColor.YELLOW, 0xE6D756, 0xE9AC29, Blocks.YELLOW_WOOL); + + addDye(DyeColor.LIGHT_BLUE, 0x69CED2, 0x508AA5, Blocks.LIGHT_BLUE_WOOL); + addDye(DyeColor.ORANGE, 0xEE9246, 0xD94927, Blocks.ORANGE_WOOL); + addDye(DyeColor.MAGENTA, 0xF062B0, 0xC04488, Blocks.MAGENTA_WOOL); + addDye(DyeColor.WHITE, 0xEDEAE5, 0xBBB6B0, Blocks.WHITE_WOOL); + } } diff --git a/src/main/java/com/simibubi/create/infrastructure/debugInfo/ServerDebugInfoPacket.java b/src/main/java/com/simibubi/create/infrastructure/debugInfo/ServerDebugInfoPacket.java index 8b8d0f97b..f038bfd5e 100644 --- a/src/main/java/com/simibubi/create/infrastructure/debugInfo/ServerDebugInfoPacket.java +++ b/src/main/java/com/simibubi/create/infrastructure/debugInfo/ServerDebugInfoPacket.java @@ -84,7 +84,7 @@ public class ServerDebugInfoPacket extends SimplePacketBase { String text = output.toString(); Minecraft.getInstance().keyboardHandler.setClipboard(text); Lang.translate("command.debuginfo.saved_to_clipboard") - .color(DyeHelper.DYE_TABLE.get(DyeColor.LIME) + .color(DyeHelper.getDyeColors(DyeColor.LIME) .getFirst()) .sendChat(player); } From fc94c75866c1dc8d11b16b908fe0bb7d3e066888 Mon Sep 17 00:00:00 2001 From: VoidLeech <57987812+VoidLeech@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:20:13 +0100 Subject: [PATCH 42/46] fix: enchantments getting trimmed from non-filter items (#7216) --- .../logistics/filter/FilterItemStack.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/logistics/filter/FilterItemStack.java b/src/main/java/com/simibubi/create/content/logistics/filter/FilterItemStack.java index 8f3c38f87..196825a7c 100644 --- a/src/main/java/com/simibubi/create/content/logistics/filter/FilterItemStack.java +++ b/src/main/java/com/simibubi/create/content/logistics/filter/FilterItemStack.java @@ -23,14 +23,15 @@ public class FilterItemStack { public static FilterItemStack of(ItemStack filter) { if (filter.hasTag()) { - CompoundTag stackTag = filter.getTag(); - stackTag.remove("Enchantments"); - stackTag.remove("AttributeModifiers"); - if (AllItems.FILTER.isIn(filter)) + if (AllItems.FILTER.isIn(filter)){ + trimFilterTag(filter); return new ListFilterItemStack(filter); - if (AllItems.ATTRIBUTE_FILTER.isIn(filter)) + } + if (AllItems.ATTRIBUTE_FILTER.isIn(filter)){ + trimFilterTag(filter); return new AttributeFilterItemStack(filter); + } } return new FilterItemStack(filter); @@ -39,11 +40,17 @@ public class FilterItemStack { public static FilterItemStack of(CompoundTag tag) { return of(ItemStack.of(tag)); } - + public static FilterItemStack empty() { return of(ItemStack.EMPTY); } + private static void trimFilterTag(ItemStack filter){ + CompoundTag stackTag = filter.getTag(); + stackTag.remove("Enchantments"); + stackTag.remove("AttributeModifiers"); + } + public boolean isEmpty() { return filterItemStack.isEmpty(); } @@ -51,16 +58,16 @@ public class FilterItemStack { public CompoundTag serializeNBT() { return filterItemStack.serializeNBT(); } - + public ItemStack item() { return filterItemStack; } - + public FluidStack fluid(Level level) { resolveFluid(level); return filterFluidStack; } - + public boolean isFilterItem() { return filterItemStack.getItem() instanceof FilterItem; } @@ -98,7 +105,7 @@ public class FilterItemStack { } // - + private void resolveFluid(Level world) { if (!fluidExtracted) { fluidExtracted = true; From d8310a6fb93ef02f60f9578089c7500adb1328da Mon Sep 17 00:00:00 2001 From: VoidLeech <57987812+VoidLeech@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:21:42 +0100 Subject: [PATCH 43/46] fix: allow sandpaper to be used in deploying recipe (#7259) --- .../content/kinetics/deployer/DeployerBlockEntity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java index 4f2ce7023..c252b0ee0 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/deployer/DeployerBlockEntity.java @@ -551,7 +551,10 @@ public class DeployerBlockEntity extends KineticBlockEntity { ItemStack heldItemMainhand = player.getMainHandItem(); if (heldItemMainhand.getItem() instanceof SandPaperItem) { sandpaperInv.setItem(0, stack); - return checkRecipe(AllRecipeTypes.SANDPAPER_POLISHING, sandpaperInv, level).orElse(null); + Optional> polishingRecipe = checkRecipe(AllRecipeTypes.SANDPAPER_POLISHING, sandpaperInv, level); + if (polishingRecipe.isPresent()){ + return polishingRecipe.get(); + } } recipeInv.setItem(0, stack); From 18fb3b4beb858242c550c97107b5b03bb502e91e Mon Sep 17 00:00:00 2001 From: justliliandev <36055315+justliliandev@users.noreply.github.com> Date: Fri, 10 Jan 2025 18:24:38 +0100 Subject: [PATCH 44/46] Fix mechanical drill and saw using the wrong SoundSource (#7038) --- .../kinetics/base/BlockBreakingKineticBlockEntity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/base/BlockBreakingKineticBlockEntity.java b/src/main/java/com/simibubi/create/content/kinetics/base/BlockBreakingKineticBlockEntity.java index 1163bb611..ceddd7669 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/base/BlockBreakingKineticBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/kinetics/base/BlockBreakingKineticBlockEntity.java @@ -110,7 +110,7 @@ public abstract class BlockBreakingKineticBlockEntity extends KineticBlockEntity float breakSpeed = getBreakSpeed(); destroyProgress += Mth.clamp((int) (breakSpeed / blockHardness), 1, 10 - destroyProgress); level.playSound(null, worldPosition, stateToBreak.getSoundType() - .getHitSound(), SoundSource.NEUTRAL, .25f, 1); + .getHitSound(), SoundSource.BLOCKS, .25f, 1); if (destroyProgress >= 10) { onBlockBroken(stateToBreak); @@ -142,7 +142,7 @@ public abstract class BlockBreakingKineticBlockEntity extends KineticBlockEntity return; if (level.restoringBlockSnapshots) return; - + ItemEntity itementity = new ItemEntity(level, vec.x, vec.y, vec.z, stack); itementity.setDefaultPickUpDelay(); itementity.setDeltaMovement(Vec3.ZERO); From 0870d34033aa9bd8e7a8577aa9d2a1d0bd5474eb Mon Sep 17 00:00:00 2001 From: VoidLeech <57987812+VoidLeech@users.noreply.github.com> Date: Sun, 12 Jan 2025 22:31:15 +0100 Subject: [PATCH 45/46] fix: backtank crashing on ctrl+pick block (#7284) --- .../content/equipment/armor/BacktankBlock.java | 2 ++ .../equipment/armor/BacktankBlockEntity.java | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java index 967f0a7f6..93e7fc44d 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlock.java @@ -184,8 +184,10 @@ public class BacktankBlock extends HorizontalKineticBlock implements IBE blockEntityOptional = getBlockEntityOptional(blockGetter, pos); CompoundTag forgeCapsTag = blockEntityOptional.map(BacktankBlockEntity::getForgeCapsTag) + .map(CompoundTag::copy) .orElse(null); CompoundTag vanillaTag = blockEntityOptional.map(BacktankBlockEntity::getVanillaTag) + .map(CompoundTag::copy) .orElse(new CompoundTag()); int air = blockEntityOptional.map(BacktankBlockEntity::getAirLevel) .orElse(0); diff --git a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlockEntity.java b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlockEntity.java index 181e5b1bb..6b03b0947 100644 --- a/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/equipment/armor/BacktankBlockEntity.java @@ -120,10 +120,10 @@ public class BacktankBlockEntity extends KineticBlockEntity implements Nameable compound.putInt("Air", airLevel); compound.putInt("Timer", airLevelTimer); compound.putInt("CapacityEnchantment", capacityEnchantLevel); - + if (this.customName != null) compound.putString("CustomName", Component.Serializer.toJson(this.customName)); - + compound.put("VanillaTag", vanillaTag); if (forgeCapsTag != null) compound.put("ForgeCapsTag", forgeCapsTag); @@ -136,10 +136,10 @@ public class BacktankBlockEntity extends KineticBlockEntity implements Nameable airLevel = compound.getInt("Air"); airLevelTimer = compound.getInt("Timer"); capacityEnchantLevel = compound.getInt("CapacityEnchantment"); - + if (compound.contains("CustomName", 8)) this.customName = Component.Serializer.fromJson(compound.getString("CustomName")); - + vanillaTag = compound.getCompound("VanillaTag"); forgeCapsTag = compound.contains("ForgeCapsTag") ? compound.getCompound("ForgeCapsTag") : null; @@ -181,16 +181,18 @@ public class BacktankBlockEntity extends KineticBlockEntity implements Nameable public void setCapacityEnchantLevel(int capacityEnchantLevel) { this.capacityEnchantLevel = capacityEnchantLevel; } - + public void setTags(CompoundTag vanillaTag, @Nullable CompoundTag forgeCapsTag) { - this.vanillaTag = vanillaTag; - this.forgeCapsTag = forgeCapsTag; + this.vanillaTag = vanillaTag.copy(); + this.forgeCapsTag = forgeCapsTag == null ? null : forgeCapsTag.copy(); + // Prevent nesting of the ctrl+pick block added tag + vanillaTag.remove("BlockEntityTag"); } public CompoundTag getVanillaTag() { return vanillaTag; } - + public CompoundTag getForgeCapsTag() { return forgeCapsTag; } From be026ece025eed55c84bf87042577b57233a799a Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sun, 12 Jan 2025 16:51:13 -0500 Subject: [PATCH 46/46] Drain category improvements (#7277) --- .../create/compat/jei/category/ItemDrainCategory.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java index 15bb777f6..a1e398c78 100644 --- a/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/category/ItemDrainCategory.java @@ -10,8 +10,10 @@ import com.simibubi.create.content.fluids.potion.PotionFluidHandler; import com.simibubi.create.content.fluids.transfer.EmptyingRecipe; import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder; import com.simibubi.create.foundation.gui.AllGuiTextures; +import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.utility.RegisteredObjects; +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import mezz.jei.api.constants.VanillaTypes; import mezz.jei.api.forge.ForgeTypes; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; @@ -22,6 +24,7 @@ import mezz.jei.api.runtime.IIngredientManager; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.ItemStackLinkedSet; import net.minecraft.world.item.Items; import net.minecraft.world.item.PotionItem; import net.minecraft.world.item.crafting.Ingredient; @@ -41,6 +44,7 @@ public class ItemDrainCategory extends CreateRecipeCategory { } public static void consumeRecipes(Consumer consumer, IIngredientManager ingredientManager) { + ObjectOpenCustomHashSet emptiedItems = new ObjectOpenCustomHashSet<>(ItemStackLinkedSet.TYPE_AND_TAG); for (ItemStack stack : ingredientManager.getAllIngredients(VanillaTypes.ITEM_STACK)) { if (PotionFluidHandler.isPotionItem(stack)) { FluidStack fluidFromPotionItem = PotionFluidHandler.getFluidFromPotionItem(stack); @@ -68,6 +72,11 @@ public class ItemDrainCategory extends CreateRecipeCategory { if (result.isEmpty()) continue; + // There can be a lot of duplicate empty tanks (e.g. from emptying tanks with different fluids). Merge + // them to reduce memory usage. If the item is exactly the same as the input, just use the input stack + // instead of the copy. + result = ItemHelper.sameItem(stack, result) ? stack : emptiedItems.addOrGet(result); + Ingredient ingredient = Ingredient.of(stack); ResourceLocation itemName = RegisteredObjects.getKeyOrThrow(stack.getItem()); ResourceLocation fluidName = RegisteredObjects.getKeyOrThrow(extracted.getFluid());

- * - Extended Bogeys (Examples) - * - Extended Bogeys (API documentation) - * - Steam n' Rails (Examples) - */ -public abstract class BogeyRenderer { - Map contraptionModelData = new HashMap<>(); - - /** - * A common interface for getting transform data for both in-world and in-contraption model data safely from a - * partial model - * - * @param model The key for the model data to instantiate or retrieve - * @param ms The posestack used for contraption model data - * @param inInstancedContraption The type of model needed - * @param size The amount of models needed - * @return A generic transform which can be used for both in-world and in-contraption models - */ - public BogeyModelData[] getTransform(PartialModel model, PoseStack ms, boolean inInstancedContraption, int size) { - return (inInstancedContraption) ? transformContraptionModelData(keyFromModel(model), ms) : createModelData(model, size); - } - - /** - * A common interface for getting transform data for both in-world and in-contraption model data safely from a - * blockstate - * - * @param state The key for the model data to instantiate or retrieve - * @param ms The posestack used for contraption model data - * @param inContraption The type of model needed - * @param size The amount of models needed - * @return A generic transform which can be used for both in-world and in-contraption models - */ - public BogeyModelData[] getTransform(BlockState state, PoseStack ms, boolean inContraption, int size) { - return inContraption ? transformContraptionModelData(keyFromModel(state), ms) : createModelData(state, size); - } - - /** - * Helper function to collect or create a single model from a partial model used for both in-world and - * in-contraption rendering - * - * @param model The key of the model to be collected or instantiated - * @param ms Posestack to bind the model to if it is within a contraption - * @param inInstancedContraption Type of rendering required - * @return A generic transform which can be used for both in-world and in-contraption models - */ - public BogeyModelData getTransform(PartialModel model, PoseStack ms, boolean inInstancedContraption) { - return inInstancedContraption ? contraptionModelData.get(keyFromModel(model))[0].setTransform(ms) - : BogeyModelData.from(model); - } - - /** - * A common interface for getting transform data for blockstates, for a single model - * - * @param state The state of the model to be collected or instantiated - * @param ms Posestack to bind the model to if it is within a contraption - * @param inContraption Type of model required - * @return A generic transform which can be used for both in-world and in-contraption models - */ - public BogeyModelData getTransform(BlockState state, PoseStack ms, boolean inContraption) { - return (inContraption) ? contraptionModelData.get(keyFromModel(state))[0].setTransform(ms) - : BogeyModelData.from(state); - } - - /** - * Used for calling both in-world and in-contraption rendering - * - * @param bogeyData Custom data stored on the bogey able to be used for rendering - * @param wheelAngle The angle of the wheel - * @param ms The posestack to render to - * @param light (Optional) Light used for in-world rendering - * @param vb (Optional) Vertex Consumer used for in-world rendering - */ - @OnlyIn(Dist.CLIENT) - public abstract void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, - VertexConsumer vb, boolean inContraption); - - /** - * Used for calling in-contraption rendering ensuring that falsey data is handled correctly - * - * @param bogeyData Custom data stored on the bogey able to be used for rendering - * @param wheelAngle The angle of the wheel - * @param ms The posestack to render to - */ - @OnlyIn(Dist.CLIENT) - public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms) { - this.render(bogeyData, wheelAngle, ms, 0, null, true); - } - - public abstract BogeySizes.BogeySize getSize(); - - /** - * Used to collect Contraption Model Data for in-contraption rendering, should not be utilised directly when - * rendering to prevent render type mismatch - * - * @param key The key used to access the model - * @param ms Posestack of the contraption to bind the model data to - * @return A generic transform which can be used for both in-world and in-contraption models - */ - private BogeyModelData[] transformContraptionModelData(String key, PoseStack ms) { - BogeyModelData[] modelData = contraptionModelData.get(key); - Arrays.stream(modelData).forEach(modelDataElement -> modelDataElement.setTransform(ms)); - return modelData; - } - - - /** - * Used for in world rendering, creates a set count of model data to be rendered, allowing for a generic response - * when rendering multiple models both in-world and in-contraption for example, with wheels - * - * @param model The partial model of the model data ot be made - * @param size The Amount of models needed - * @return A generic transform which can be used for both in-world and in-contraption models - */ - private BogeyModelData[] createModelData(PartialModel model, int size) { - BogeyModelData[] data = { BogeyModelData.from(model) }; - return expandArrayToLength(data, size); - } - - /** - * Used for in world rendering, creates a set count of model data to be rendered, allowing for a generic response - * when rendering multiple models both in-world and in-contraption for example, with wheels - * - * @param state The state of the model data to be made - * @param size Amount of models needed - * @return A generic transform which can be used for both in-world and in-contraption models - */ - private BogeyModelData[] createModelData(BlockState state, int size) { - BogeyModelData[] data = { BogeyModelData.from(state) }; - return expandArrayToLength(data, size); - } - - /** - * Utility function to clone in-world models to a set size to allow for common handling of rendering with multiple - * instances of the same model for example with wheels - * - * @param data An in-world model to be replicated - * @param size Amount of models needed - * @return A generic transform which can be used for both in-world and in-contraption models - */ - private BogeyModelData[] expandArrayToLength(BogeyModelData[] data, int size) { - return Arrays.stream(Collections.nCopies(size, data).toArray()) - .flatMap(inner -> Arrays.stream((BogeyModelData[]) inner)) - .toArray(BogeyModelData[]::new); - } - - /** - * Provides render implementations a point in setup to instantiate all model data to be needed - * - * @param context The visualization context - * @param carriageBogey The bogey to create data for - */ - @OnlyIn(Dist.CLIENT) - public abstract void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey); - - /** - * Creates instances of models for in-world rendering to a set length from a provided partial model - * - * @param context The visualization context - * @param model Partial model to be instanced - * @param count Amount of models neeeded - */ - public void createModelInstance(VisualizationContext context, PartialModel model, int count) { - var instancer = context.instancerProvider() - .instancer(InstanceTypes.POSED, Models.partial(model)); - BogeyModelData[] modelData = IntStream.range(0, count) - .mapToObj(i -> instancer.createInstance()) - .map(BogeyModelData::new) - .toArray(BogeyModelData[]::new); - contraptionModelData.put(keyFromModel(model), modelData); - } - - /** - * Creates instances of models for in-contraption rendering to a set length from a provided blockstate - * - * @param context The visualization context - * @param state Blockstate of the model to be created - * @param count Amount of models needed - */ - public void createModelInstance(VisualizationContext context, BlockState state, int count) { - var instancer = context.instancerProvider() - .instancer(InstanceTypes.POSED, VirtualRenderHelper.blockModel(state)); - BogeyModelData[] modelData = IntStream.range(0, count) - .mapToObj(i -> instancer.createInstance()) - .map(BogeyModelData::new) - .toArray(BogeyModelData[]::new); - contraptionModelData.put(keyFromModel(state), modelData); - } - - /** - * Creates a single instance of models for in-contraption rendering from a provided blockstate - * - * @param context The visualization context - * @param states Blockstates of the models to be created - */ - public void createModelInstance(VisualizationContext context, BlockState... states) { - for (BlockState state : states) - this.createModelInstance(context, state, 1); - } - - /** - * Helper function to create a single model instance for in-contraption rendering - * - * @param context The visualization context - * @param models The type of model to create instances of - */ - public void createModelInstance(VisualizationContext context, PartialModel... models) { - for (PartialModel model : models) - createModelInstance(context, model, 1); - } - - /** - * This method is deprecated, use BogeyModelData#render instead, left in - * to avoid existing usages from crashing - * - * @param b The model data itself - * @param ms Pose stack to render to - * @param light light level of the scene - * @param vb Vertex Consumber to render to - * @param Generic alias for both contraption and in-world model data - */ - - @Deprecated - public static > void finalize(B b, PoseStack ms, int light, @Nullable VertexConsumer vb) { - b.scale(1 - 1/512f); - if (b instanceof SuperByteBuffer byteBuf && vb != null) - byteBuf.light(light).renderInto(ms, vb); - } - - /** - * Automatic handling for setting empty transforms for all model data - * - */ - - public void emptyTransforms() { - for (BogeyModelData[] data : contraptionModelData.values()) - for (BogeyModelData model : data) - model.setEmptyTransform(); - } - - /** - * Automatic handling for updating all model data's light - * - * @param blockLight the blocklight to be applied - * @param skyLight the skylight to be applied - */ - - public void updateLight(int blockLight, int skyLight) { - for (BogeyModelData[] data : contraptionModelData.values()) - for (BogeyModelData model : data) - model.updateLight(blockLight, skyLight); - } - - /** - * Automatic handling for clearing all model data of a contraption - * - */ - - public void remove() { - for (BogeyModelData[] data : contraptionModelData.values()) - for (BogeyModelData model : data) - model.delete(); - contraptionModelData.clear(); - } - - /** - * Create a model key from a partial model, so it can be easily accessed - * - * @param partialModel the model we want a unique key for - * @return Key of the model - */ - - private String keyFromModel(PartialModel partialModel) { - return partialModel.modelLocation().toString(); - } - - /** - * Create a model key from a blockstate, so it can be easily accessed - * - * @param state Blockstate of the model - * @return Key of the model - */ - - private String keyFromModel(BlockState state) { - return state.toString(); - } - - public static abstract class CommonRenderer extends BogeyRenderer { - @Override - public BogeySizes.BogeySize getSize() { - return null; - } - } - - public record BogeyModelData(Transform transform) implements Transform { - public static BogeyModelData from(PartialModel model) { - BlockState air = Blocks.AIR.defaultBlockState(); - return new BogeyModelData(CachedBufferer.partial(model, air)); - } - public static BogeyModelData from(BlockState model) { - return new BogeyModelData(CachedBufferer.block(model)); - } - public void render(PoseStack ms, int light, @Nullable VertexConsumer vb) { - transform.scale(1 - 1/512f); - if (transform instanceof SuperByteBuffer byteBuf && vb != null) - byteBuf.light(light).renderInto(ms, vb); - } - - public BogeyModelData setTransform(PoseStack ms) { - if (this.transform instanceof PosedInstance model) - model.setTransform(ms) - .setChanged(); - return this; - } - - public BogeyModelData setEmptyTransform() { - if (this.transform instanceof PosedInstance model) - model.setZeroTransform() - .setChanged(); - return this; - } - - public BogeyModelData delete() { - if (this.transform instanceof PosedInstance model) - model.delete(); - return this; - } - - public BogeyModelData updateLight(int blockLight, int skyLight) { - if (this.transform instanceof PosedInstance model) - model.light(blockLight, skyLight) - .setChanged(); - return this; - } - - @Override - public BogeyModelData mulPose(Matrix4fc pose) { - this.transform.mulPose(pose); - return this; - } - - @Override - public BogeyModelData mulNormal(Matrix3fc normal) { - this.transform.mulNormal(normal); - return this; - } - - @Override - public BogeyModelData rotate(Quaternionfc quaternion) { - this.transform.rotate(quaternion); - return this; - } - - @Override - public BogeyModelData scale(float factorX, float factorY, float factorZ) { - this.transform.scale(factorX, factorY, factorZ); - return this; - } - - @Override - public BogeyModelData translate(float x, float y, float z) { - this.transform.translate(x, y, z); - return this; - } - } +public interface BogeyRenderer { + void render(CompoundTag bogeyData, float wheelAngle, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay, boolean inContraption); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeySizes.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeySizes.java index e9bcc2d48..879aec548 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeySizes.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeySizes.java @@ -1,70 +1,78 @@ package com.simibubi.create.content.trains.bogey; -import java.util.Collection; +import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; -import java.util.stream.Collectors; +import java.util.Map; + +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.UnmodifiableView; import com.simibubi.create.Create; import net.minecraft.resources.ResourceLocation; -public class BogeySizes { - private static final Collection BOGEY_SIZES = new HashSet<>(); - public static final BogeySize SMALL = new BogeySize(Create.ID, "small", 6.5f / 16f); - public static final BogeySize LARGE = new BogeySize(Create.ID, "large", 12.5f / 16f); +public final class BogeySizes { + private static final Map BOGEY_SIZES = new HashMap<>(); + private static final List SORTED_INCREASING = new ArrayList<>(); + private static final List SORTED_DECREASING = new ArrayList<>(); + @UnmodifiableView + private static final Map BOGEY_SIZES_VIEW = Collections.unmodifiableMap(BOGEY_SIZES); + @UnmodifiableView + private static final List SORTED_INCREASING_VIEW = Collections.unmodifiableList(SORTED_INCREASING); + @UnmodifiableView + private static final List SORTED_DECREASING_VIEW = Collections.unmodifiableList(SORTED_DECREASING); + + public static final BogeySize SMALL = new BogeySize(Create.asResource("small"), 6.5f / 16f); + public static final BogeySize LARGE = new BogeySize(Create.asResource("large"), 12.5f / 16f); static { - BOGEY_SIZES.add(SMALL); - BOGEY_SIZES.add(LARGE); + register(SMALL); + register(LARGE); } - public static BogeySize addSize(String modId, String name, float size) { - ResourceLocation location = new ResourceLocation(modId, name); - return addSize(location, size); + private BogeySizes() { } - public static BogeySize addSize(ResourceLocation location, float size) { - BogeySize customSize = new BogeySize(location, size); - BOGEY_SIZES.add(customSize); - return customSize; - } - - public static List getAllSizesSmallToLarge() { - return BOGEY_SIZES.stream() - .sorted(Comparator.comparing(BogeySize::wheelRadius)) - .collect(Collectors.toList()); - } - - public static List getAllSizesLargeToSmall() { - List sizes = getAllSizesSmallToLarge(); - Collections.reverse(sizes); - return sizes; - } - - public static int count() { - return BOGEY_SIZES.size(); - } - - public record BogeySize(ResourceLocation location, float wheelRadius) { - public BogeySize(String modId, String name, float wheelRadius) { - this(new ResourceLocation(modId, name), wheelRadius); + public static void register(BogeySize size) { + ResourceLocation id = size.id(); + if (BOGEY_SIZES.containsKey(id)) { + throw new IllegalArgumentException(); } + BOGEY_SIZES.put(id, size); - public BogeySize increment() { - List values = getAllSizesSmallToLarge(); + SORTED_INCREASING.add(size); + SORTED_DECREASING.add(size); + SORTED_INCREASING.sort(Comparator.comparing(BogeySize::wheelRadius)); + SORTED_DECREASING.sort(Comparator.comparing(BogeySize::wheelRadius).reversed()); + } + + @UnmodifiableView + public static Map all() { + return BOGEY_SIZES_VIEW; + } + + @UnmodifiableView + public static List allSortedIncreasing() { + return SORTED_INCREASING_VIEW; + } + + @UnmodifiableView + public static List allSortedDecreasing() { + return SORTED_DECREASING_VIEW; + } + + @ApiStatus.Internal + public static void init() { + } + + public record BogeySize(ResourceLocation id, float wheelRadius) { + public BogeySize nextBySize() { + List values = allSortedIncreasing(); int ordinal = values.indexOf(this); return values.get((ordinal + 1) % values.size()); } - - public boolean is(BogeySize size) { - return size.location == this.location; - } - } - - public static void init() { - } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java index 1d7e355dc..9a375d7ee 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java @@ -2,60 +2,53 @@ package com.simibubi.create.content.trains.bogey; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Stream; -import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllSoundEvents; -import com.simibubi.create.content.trains.bogey.BogeyRenderer.CommonRenderer; +import com.simibubi.create.content.trains.bogey.BogeySizes.BogeySize; import com.simibubi.create.content.trains.entity.CarriageBogey; +import com.simibubi.create.foundation.utility.Lang; import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.level.block.Block; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.registries.ForgeRegistries; - public class BogeyStyle { - - public final ResourceLocation name; + public final ResourceLocation id; public final ResourceLocation cycleGroup; public final Component displayName; - public final ResourceLocation soundType; + public final Supplier soundEvent; public final ParticleOptions contactParticle; public final ParticleOptions smokeParticle; public final CompoundTag defaultData; - - private Optional> commonRendererFactory; - private Map sizes; + private final Map>> sizes; @OnlyIn(Dist.CLIENT) - private Map sizeRenderers; + private Map sizeRenderers; - @OnlyIn(Dist.CLIENT) - private Optional commonRenderer; + public BogeyStyle(ResourceLocation id, ResourceLocation cycleGroup, Component displayName, + Supplier soundEvent, ParticleOptions contactParticle, ParticleOptions smokeParticle, + CompoundTag defaultData, Map>> sizes, + Map> sizeRenderers) { - public BogeyStyle(ResourceLocation name, ResourceLocation cycleGroup, Component displayName, - ResourceLocation soundType, ParticleOptions contactParticle, ParticleOptions smokeParticle, - CompoundTag defaultData, Map sizes, - Map> sizeRenderers, - Optional> commonRenderer) { - - this.name = name; + this.id = id; this.cycleGroup = cycleGroup; this.displayName = displayName; - this.soundType = soundType; + this.soundEvent = soundEvent; this.contactParticle = contactParticle; this.smokeParticle = smokeParticle; this.defaultData = defaultData; @@ -64,9 +57,6 @@ public class BogeyStyle { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { this.sizeRenderers = new HashMap<>(); sizeRenderers.forEach((k, v) -> this.sizeRenderers.put(k, v.get())); - - this.commonRendererFactory = commonRenderer; - this.commonRenderer = commonRenderer.map(Supplier::get); }); } @@ -74,60 +64,109 @@ public class BogeyStyle { return AllBogeyStyles.getCycleGroup(cycleGroup); } - public Block getNextBlock(BogeySizes.BogeySize currentSize) { - return Stream.iterate(currentSize.increment(), BogeySizes.BogeySize::increment) - .filter(sizes::containsKey) - .findFirst() - .map(this::getBlockOfSize) - .orElse(getBlockOfSize(currentSize)); - } - - public Block getBlockOfSize(BogeySizes.BogeySize size) { - return ForgeRegistries.BLOCKS.getValue(sizes.get(size)); - } - public Set validSizes() { return sizes.keySet(); } - @NotNull - public SoundEvent getSoundType() { - AllSoundEvents.SoundEntry entry = AllSoundEvents.ALL.get(this.soundType); - if (entry == null || entry.getMainEvent() == null) entry = AllSoundEvents.TRAIN2; - return entry.getMainEvent(); + public AbstractBogeyBlock getBlockForSize(BogeySizes.BogeySize size) { + return sizes.get(size).get(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public AbstractBogeyBlock getNextBlock(BogeySizes.BogeySize currentSize) { + return Stream.iterate(currentSize.nextBySize(), BogeySizes.BogeySize::nextBySize) + .filter(sizes::containsKey) + .findFirst() + .map(this::getBlockForSize) + .orElse((AbstractBogeyBlock) getBlockForSize(currentSize)); } @OnlyIn(Dist.CLIENT) - public BogeyRenderer createRendererInstance(BogeySizes.BogeySize size) { - return this.sizeRenderers.get(size).createRenderInstance(); + public void render(BogeySize size, float partialTick, PoseStack poseStack, MultiBufferSource buffers, int light, int overlay, float wheelAngle, @Nullable CompoundTag bogeyData, boolean inContraption) { + if (bogeyData == null) + bogeyData = new CompoundTag(); + + poseStack.translate(0, -1.5 - 1 / 128f, 0); + + SizeRenderer renderer = sizeRenderers.get(size); + if (renderer != null) { + renderer.renderer.render(bogeyData, wheelAngle, partialTick, poseStack, buffers, light, overlay, inContraption); + } } @OnlyIn(Dist.CLIENT) - public BogeyRenderer getInWorldRenderInstance(BogeySizes.BogeySize size) { - SizeRenderData sizeData = this.sizeRenderers.get(size); - return sizeData != null ? sizeData.getInWorldInstance() : BackupBogeyRenderer.INSTANCE; - } - - public Optional getInWorldCommonRenderInstance() { - return this.commonRenderer; - } - - public Optional getNewCommonRenderInstance() { - return this.commonRendererFactory.map(Supplier::get); - } - - public BogeyVisual createVisual(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext context) { - return new BogeyVisual(bogey, this, size, context); + @Nullable + public BogeyVisual createVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + SizeRenderer renderer = sizeRenderers.get(bogey.getSize()); + if (renderer != null) { + return renderer.visualizer.createVisual(ctx, bogey, partialTick); + } + return null; } @OnlyIn(Dist.CLIENT) - public record SizeRenderData(Supplier rendererFactory, BogeyRenderer instance) { - public BogeyRenderer createRenderInstance() { - return rendererFactory.get(); + public record SizeRenderer(BogeyRenderer renderer, BogeyVisualizer visualizer) { + } + + public static class Builder { + protected final ResourceLocation id; + protected final ResourceLocation cycleGroup; + protected final Map>> sizes = new HashMap<>(); + + protected Component displayName = Lang.translateDirect("bogey.style.invalid"); + protected Supplier soundEvent = AllSoundEvents.TRAIN2::getMainEvent; + protected ParticleOptions contactParticle = ParticleTypes.CRIT; + protected ParticleOptions smokeParticle = ParticleTypes.POOF; + protected CompoundTag defaultData = new CompoundTag(); + + protected final Map> sizeRenderers = new HashMap<>(); + + public Builder(ResourceLocation id, ResourceLocation cycleGroup) { + this.id = id; + this.cycleGroup = cycleGroup; } - public BogeyRenderer getInWorldInstance() { - return instance; + public Builder displayName(Component displayName) { + this.displayName = displayName; + return this; + } + + public Builder soundEvent(Supplier soundEvent) { + this.soundEvent = soundEvent; + return this; + } + + public Builder contactParticle(ParticleOptions contactParticle) { + this.contactParticle = contactParticle; + return this; + } + + public Builder smokeParticle(ParticleOptions smokeParticle) { + this.smokeParticle = smokeParticle; + return this; + } + + public Builder defaultData(CompoundTag defaultData) { + this.defaultData = defaultData; + return this; + } + + public Builder size(BogeySizes.BogeySize size, Supplier> block, + Supplier renderer) { + this.sizes.put(size, block); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + this.sizeRenderers.put(size, renderer); + }); + return this; + } + + public BogeyStyle build() { + BogeyStyle entry = new BogeyStyle(id, cycleGroup, displayName, soundEvent, contactParticle, smokeParticle, + defaultData, sizes, sizeRenderers); + AllBogeyStyles.BOGEY_STYLES.put(id, entry); + AllBogeyStyles.CYCLE_GROUPS.computeIfAbsent(cycleGroup, l -> new HashMap<>()) + .put(id, entry); + return entry; } } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java index 9849caada..2b0eb6897 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java @@ -1,65 +1,13 @@ package com.simibubi.create.content.trains.bogey; -import java.util.Optional; - import com.mojang.blaze3d.vertex.PoseStack; -import com.simibubi.create.content.trains.entity.CarriageBogey; -import com.simibubi.create.content.trains.entity.CarriageContraptionEntity; -import com.simibubi.create.foundation.utility.AnimationTickHolder; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.LightLayer; -import net.minecraft.world.phys.Vec3; +public interface BogeyVisual { + void update(float wheelAngle, PoseStack poseStack); -public final class BogeyVisual { - private final BogeySizes.BogeySize size; - private final BogeyStyle style; + void hide(); - public final CarriageBogey bogey; - public final BogeyRenderer renderer; - public final Optional commonRenderer; + void updateLight(int packedLight); - public BogeyVisual(CarriageBogey bogey, BogeyStyle style, BogeySizes.BogeySize size, - VisualizationContext context) { - this.bogey = bogey; - this.size = size; - this.style = style; - - this.renderer = this.style.createRendererInstance(this.size); - this.commonRenderer = this.style.getNewCommonRenderInstance(); - - commonRenderer.ifPresent(bogeyRenderer -> bogeyRenderer.initialiseContraptionModelData(context, bogey)); - renderer.initialiseContraptionModelData(context, bogey); - } - - public void beginFrame(float wheelAngle, PoseStack ms) { - if (ms == null) { - renderer.emptyTransforms(); - return; - } - - commonRenderer.ifPresent(bogeyRenderer -> bogeyRenderer.render(bogey.bogeyData, wheelAngle, ms)); - renderer.render(bogey.bogeyData, wheelAngle, ms); - } - - public void updateLight(BlockAndTintGetter world, CarriageContraptionEntity entity) { - var lightPos = BlockPos.containing(getLightPos(entity)); - commonRenderer - .ifPresent(bogeyRenderer -> bogeyRenderer.updateLight(world.getBrightness(LightLayer.BLOCK, lightPos), - world.getBrightness(LightLayer.SKY, lightPos))); - renderer.updateLight(world.getBrightness(LightLayer.BLOCK, lightPos), - world.getBrightness(LightLayer.SKY, lightPos)); - } - - private Vec3 getLightPos(CarriageContraptionEntity entity) { - return bogey.getAnchorPosition() != null ? bogey.getAnchorPosition() - : entity.getLightProbePosition(AnimationTickHolder.getPartialTicks()); - } - - @FunctionalInterface - interface BogeyVisualFactory { - BogeyVisual create(CarriageBogey bogey, BogeySizes.BogeySize size, VisualizationContext context); - } + void delete(); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java new file mode 100644 index 000000000..38acb77d4 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java @@ -0,0 +1,10 @@ +package com.simibubi.create.content.trains.bogey; + +import com.simibubi.create.content.trains.entity.CarriageBogey; + +import dev.engine_room.flywheel.api.visualization.VisualizationContext; + +@FunctionalInterface +public interface BogeyVisualizer { + BogeyVisual createVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick); +} diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java index d7e3e835d..ec1cabbac 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyRenderer.java @@ -1,134 +1,109 @@ package com.simibubi.create.content.trains.bogey; -import static com.simibubi.create.AllPartialModels.BOGEY_DRIVE; -import static com.simibubi.create.AllPartialModels.BOGEY_FRAME; -import static com.simibubi.create.AllPartialModels.BOGEY_PIN; -import static com.simibubi.create.AllPartialModels.BOGEY_PISTON; -import static com.simibubi.create.AllPartialModels.LARGE_BOGEY_WHEELS; -import static com.simibubi.create.AllPartialModels.SMALL_BOGEY_WHEELS; - import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; -import com.simibubi.create.content.trains.entity.CarriageBogey; +import com.simibubi.create.foundation.render.CachedBufferer; +import com.simibubi.create.foundation.render.SuperByteBuffer; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Iterate; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.Blocks; -public class StandardBogeyRenderer { - public static class CommonStandardBogeyRenderer extends BogeyRenderer.CommonRenderer { - @Override - public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { - createModelInstance(context, AllBlocks.SHAFT.getDefaultState() - .setValue(ShaftBlock.AXIS, Direction.Axis.Z), 2); - } +public class StandardBogeyRenderer implements BogeyRenderer { + @Override + public void render(CompoundTag bogeyData, float wheelAngle, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int light, int overlay, boolean inContraption) { + VertexConsumer buffer = bufferSource.getBuffer(RenderType.cutoutMipped()); - @Override - public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { - boolean inInstancedContraption = vb == null; - BogeyModelData[] shafts = getTransform(AllBlocks.SHAFT.getDefaultState() - .setValue(ShaftBlock.AXIS, Direction.Axis.Z), ms, inInstancedContraption, 2); - for (int i : Iterate.zeroAndOne) { - shafts[i].translate(-.5f, .25f, i * -1) - .center() - .rotateZDegrees(wheelAngle) - .uncenter() - .render(ms, light, vb); - } + SuperByteBuffer shaft = CachedBufferer.block(AllBlocks.SHAFT.getDefaultState() + .setValue(ShaftBlock.AXIS, Direction.Axis.Z)); + for (int i : Iterate.zeroAndOne) { + shaft.translate(-.5f, .25f, i * -1) + .center() + .rotateZDegrees(wheelAngle) + .uncenter() + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); } } - - public static class SmallStandardBogeyRenderer extends BogeyRenderer { + public static class Small extends StandardBogeyRenderer { @Override - public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { - createModelInstance(context, SMALL_BOGEY_WHEELS, 2); - createModelInstance(context, BOGEY_FRAME); - } + public void render(CompoundTag bogeyData, float wheelAngle, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int light, int overlay, boolean inContraption) { + super.render(bogeyData, wheelAngle, partialTick, poseStack, bufferSource, light, overlay, inContraption); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.cutoutMipped()); - @Override - public BogeySizes.BogeySize getSize() { - return BogeySizes.SMALL; - } + CachedBufferer.partial(AllPartialModels.BOGEY_FRAME, Blocks.AIR.defaultBlockState()) + .scale(1 - 1 / 512f) + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); - @Override - public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { - boolean inInstancedContraption = vb == null; - getTransform(BOGEY_FRAME, ms, inInstancedContraption) - .render(ms, light, vb); - - BogeyModelData[] wheels = getTransform(SMALL_BOGEY_WHEELS, ms, inInstancedContraption, 2); + SuperByteBuffer wheels = CachedBufferer.partial(AllPartialModels.SMALL_BOGEY_WHEELS, Blocks.AIR.defaultBlockState()); for (int side : Iterate.positiveAndNegative) { - if (!inInstancedContraption) - ms.pushPose(); - wheels[(side + 1)/2] - .translate(0, 12 / 16f, side) + wheels.translate(0, 12 / 16f, side) .rotateXDegrees(wheelAngle) - .render(ms, light, vb); - if (!inInstancedContraption) - ms.popPose(); + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); } } } - public static class LargeStandardBogeyRenderer extends BogeyRenderer { + public static class Large extends StandardBogeyRenderer { @Override - public void initialiseContraptionModelData(VisualizationContext context, CarriageBogey carriageBogey) { - createModelInstance(context, LARGE_BOGEY_WHEELS, BOGEY_DRIVE, BOGEY_PISTON, BOGEY_PIN); - createModelInstance(context, AllBlocks.SHAFT.getDefaultState() - .setValue(ShaftBlock.AXIS, Direction.Axis.X), 2); - } + public void render(CompoundTag bogeyData, float wheelAngle, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int light, int overlay, boolean inContraption) { + super.render(bogeyData, wheelAngle, partialTick, poseStack, bufferSource, light, overlay, inContraption); - @Override - public BogeySizes.BogeySize getSize() { - return BogeySizes.LARGE; - } - - @Override - public void render(CompoundTag bogeyData, float wheelAngle, PoseStack ms, int light, VertexConsumer vb, boolean inContraption) { - boolean inInstancedContraption = vb == null; - - BogeyModelData[] secondaryShafts = getTransform(AllBlocks.SHAFT.getDefaultState() - .setValue(ShaftBlock.AXIS, Direction.Axis.X), ms, inInstancedContraption, 2); + VertexConsumer buffer = bufferSource.getBuffer(RenderType.cutoutMipped()); + SuperByteBuffer secondaryShaft = CachedBufferer.block(AllBlocks.SHAFT.getDefaultState() + .setValue(ShaftBlock.AXIS, Direction.Axis.X)); for (int i : Iterate.zeroAndOne) { - secondaryShafts[i] - .translate(-.5f, .25f, .5f + i * -2) + secondaryShaft.translate(-.5f, .25f, .5f + i * -2) .center() .rotateXDegrees(wheelAngle) .uncenter() - .render(ms, light, vb); + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); } - getTransform(BOGEY_DRIVE, ms, inInstancedContraption) - .render(ms, light, vb); + CachedBufferer.partial(AllPartialModels.BOGEY_DRIVE, Blocks.AIR.defaultBlockState()) + .scale(1 - 1 / 512f) + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); - getTransform(BOGEY_PISTON, ms, inInstancedContraption) + CachedBufferer.partial(AllPartialModels.BOGEY_PISTON, Blocks.AIR.defaultBlockState()) .translate(0, 0, 1 / 4f * Math.sin(AngleHelper.rad(wheelAngle))) - .render(ms, light, vb); + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); - if (!inInstancedContraption) - ms.pushPose(); - - getTransform(LARGE_BOGEY_WHEELS, ms, inInstancedContraption) + CachedBufferer.partial(AllPartialModels.LARGE_BOGEY_WHEELS, Blocks.AIR.defaultBlockState()) .translate(0, 1, 0) .rotateXDegrees(wheelAngle) - .render(ms, light, vb); + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); - getTransform(BOGEY_PIN, ms, inInstancedContraption) + CachedBufferer.partial(AllPartialModels.BOGEY_PIN, Blocks.AIR.defaultBlockState()) .translate(0, 1, 0) .rotateXDegrees(wheelAngle) .translate(0, 1 / 4f, 0) .rotateXDegrees(-wheelAngle) - .render(ms, light, vb); - - if (!inInstancedContraption) - ms.popPose(); + .light(light) + .overlay(overlay) + .renderInto(poseStack, buffer); } } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java new file mode 100644 index 000000000..feec031b8 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java @@ -0,0 +1,215 @@ +package com.simibubi.create.content.trains.bogey; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.AllBlocks; +import com.simibubi.create.AllPartialModels; +import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; +import com.simibubi.create.content.trains.entity.CarriageBogey; +import com.simibubi.create.foundation.render.VirtualRenderHelper; +import com.simibubi.create.foundation.utility.AngleHelper; + +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.instance.InstanceTypes; +import dev.engine_room.flywheel.lib.instance.TransformedInstance; +import dev.engine_room.flywheel.lib.model.Models; +import net.minecraft.core.Direction; + +public class StandardBogeyVisual implements BogeyVisual { + private final TransformedInstance shaft1; + private final TransformedInstance shaft2; + + public StandardBogeyVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + var shaftInstancer = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.SHAFT.getDefaultState() + .setValue(ShaftBlock.AXIS, Direction.Axis.Z))); + shaft1 = shaftInstancer.createInstance(); + shaft2 = shaftInstancer.createInstance(); + } + + @Override + public void update(float wheelAngle, PoseStack poseStack) { + shaft1.setTransform(poseStack) + .translate(-.5f, .25f, 0) + .center() + .rotateZDegrees(wheelAngle) + .uncenter() + .setChanged(); + shaft2.setTransform(poseStack) + .translate(-.5f, .25f, -1) + .center() + .rotateZDegrees(wheelAngle) + .uncenter() + .setChanged(); + } + + @Override + public void hide() { + shaft1.setZeroTransform().setChanged(); + shaft2.setZeroTransform().setChanged(); + } + + @Override + public void updateLight(int packedLight) { + shaft1.light(packedLight).setChanged(); + shaft2.light(packedLight).setChanged(); + } + + @Override + public void delete() { + shaft1.delete(); + shaft2.delete(); + } + + public static class Small extends StandardBogeyVisual { + private final TransformedInstance frame; + private final TransformedInstance wheel1; + private final TransformedInstance wheel2; + + public Small(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + super(ctx, bogey, partialTick); + var wheelInstancer = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SMALL_BOGEY_WHEELS)); + frame = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_FRAME)) + .createInstance(); + wheel1 = wheelInstancer.createInstance(); + wheel2 = wheelInstancer.createInstance(); + } + + @Override + public void update(float wheelAngle, PoseStack poseStack) { + super.update(wheelAngle, poseStack); + wheel1.setTransform(poseStack) + .translate(0, 12 / 16f, -1) + .rotateXDegrees(wheelAngle) + .setChanged(); + wheel2.setTransform(poseStack) + .translate(0, 12 / 16f, 1) + .rotateXDegrees(wheelAngle) + .setChanged(); + frame.setTransform(poseStack) + .scale(1 - 1 / 512f) + .setChanged(); + } + + @Override + public void hide() { + super.hide(); + frame.setZeroTransform().setChanged(); + wheel1.setZeroTransform().setChanged(); + wheel2.setZeroTransform().setChanged(); + } + + @Override + public void updateLight(int packedLight) { + super.updateLight(packedLight); + frame.light(packedLight).setChanged(); + wheel1.light(packedLight).setChanged(); + wheel2.light(packedLight).setChanged(); + } + + @Override + public void delete() { + super.delete(); + frame.delete(); + wheel1.delete(); + wheel2.delete(); + } + } + + public static class Large extends StandardBogeyVisual { + private final TransformedInstance secondaryShaft1; + private final TransformedInstance secondaryShaft2; + private final TransformedInstance drive; + private final TransformedInstance piston; + private final TransformedInstance wheels; + private final TransformedInstance pin; + + public Large(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + super(ctx, bogey, partialTick); + var secondaryShaftInstancer = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.SHAFT.getDefaultState() + .setValue(ShaftBlock.AXIS, Direction.Axis.X))); + secondaryShaft1 = secondaryShaftInstancer.createInstance(); + secondaryShaft2 = secondaryShaftInstancer.createInstance(); + drive = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_DRIVE)) + .createInstance(); + piston = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_PISTON)) + .createInstance(); + wheels = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.LARGE_BOGEY_WHEELS)) + .createInstance(); + pin = ctx.instancerProvider() + .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_PIN)) + .createInstance(); + } + + @Override + public void update(float wheelAngle, PoseStack poseStack) { + super.update(wheelAngle, poseStack); + secondaryShaft1.setTransform(poseStack) + .translate(-.5f, .25f, .5f) + .center() + .rotateXDegrees(wheelAngle) + .uncenter() + .setChanged(); + secondaryShaft2.setTransform(poseStack) + .translate(-.5f, .25f, -1.5f) + .center() + .rotateXDegrees(wheelAngle) + .uncenter() + .setChanged(); + drive.setTransform(poseStack) + .scale(1 - 1/512f) + .setChanged(); + piston.setTransform(poseStack) + .translate(0, 0, 1 / 4f * Math.sin(AngleHelper.rad(wheelAngle))) + .setChanged(); + wheels.setTransform(poseStack) + .translate(0, 1, 0) + .rotateXDegrees(wheelAngle) + .setChanged(); + pin.setTransform(poseStack) + .translate(0, 1, 0) + .rotateXDegrees(wheelAngle) + .translate(0, 1 / 4f, 0) + .rotateXDegrees(-wheelAngle) + .setChanged(); + } + + @Override + public void hide() { + super.hide(); + secondaryShaft1.setZeroTransform().setChanged(); + secondaryShaft2.setZeroTransform().setChanged(); + wheels.setZeroTransform().setChanged(); + drive.setZeroTransform().setChanged(); + piston.setZeroTransform().setChanged(); + pin.setZeroTransform().setChanged(); + } + + @Override + public void updateLight(int packedLight) { + super.updateLight(packedLight); + secondaryShaft1.light(packedLight).setChanged(); + secondaryShaft2.light(packedLight).setChanged(); + wheels.light(packedLight).setChanged(); + drive.light(packedLight).setChanged(); + piston.light(packedLight).setChanged(); + pin.light(packedLight).setChanged(); + } + + @Override + public void delete() { + super.delete(); + secondaryShaft1.delete(); + secondaryShaft2.delete(); + wheels.delete(); + drive.delete(); + piston.delete(); + pin.delete(); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java index 0f776c3db..937f238e5 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageBogey.java @@ -9,8 +9,8 @@ import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.Create; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlock; import com.simibubi.create.content.trains.bogey.AbstractBogeyBlockEntity; +import com.simibubi.create.content.trains.bogey.BogeySizes.BogeySize; import com.simibubi.create.content.trains.bogey.BogeyStyle; -import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.content.trains.graph.DimensionPalette; import com.simibubi.create.content.trains.graph.TrackGraph; import com.simibubi.create.foundation.utility.AngleHelper; @@ -21,7 +21,6 @@ import com.simibubi.create.foundation.utility.RegisteredObjects; import com.simibubi.create.foundation.utility.VecHelper; import com.simibubi.create.foundation.utility.animation.LerpedFloat; -import dev.engine_room.flywheel.api.visualization.VisualizationContext; import net.minecraft.core.Direction.Axis; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; @@ -184,7 +183,7 @@ public class CarriageBogey { tag.put("Points", points.serializeEach(tp -> tp.write(dimensions))); tag.putBoolean("UpsideDown", upsideDown); bogeyData.putBoolean(UPSIDE_DOWN_KEY, upsideDown); - NBTHelper.writeResourceLocation(bogeyData, BOGEY_STYLE_KEY, getStyle().name); + NBTHelper.writeResourceLocation(bogeyData, BOGEY_STYLE_KEY, getStyle().id); tag.put(BOGEY_DATA_KEY, bogeyData); return tag; } @@ -199,20 +198,20 @@ public class CarriageBogey { return new CarriageBogey(type, upsideDown, data, points.getFirst(), points.getSecond()); } - public BogeyVisual createVisual(VisualizationContext context) { - return this.getStyle().createVisual(this, type.getSize(), context); - } - public BogeyStyle getStyle() { ResourceLocation location = NBTHelper.readResourceLocation(this.bogeyData, BOGEY_STYLE_KEY); BogeyStyle style = AllBogeyStyles.BOGEY_STYLES.get(location); return style != null ? style : AllBogeyStyles.STANDARD; // just for safety } + public BogeySize getSize() { + return type.getSize(); + } + private CompoundTag createBogeyData() { BogeyStyle style = type != null ? type.getDefaultStyle() : AllBogeyStyles.STANDARD; CompoundTag nbt = style.defaultData != null ? style.defaultData : new CompoundTag(); - NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, style.name); + NBTHelper.writeResourceLocation(nbt, BOGEY_STYLE_KEY, style.id); nbt.putBoolean(UPSIDE_DOWN_KEY, isUpsideDown()); return nbt; } diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java index abfd3a669..c7c717a44 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntity.java @@ -736,6 +736,7 @@ public class CarriageContraptionEntity extends OrientedContraptionEntity { dimensional.updateRenderedCutoff(); } + // FIXME: entities should not reference their visual in any way @OnlyIn(Dist.CLIENT) private WeakReference instanceHolder; diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java index 7d2d99e7a..0d802900e 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionEntityRenderer.java @@ -66,8 +66,8 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer int light = getBogeyLightCoords(entity, bogey, partialTicks); - bogey.type.render(null, bogey.wheelAngle.getValue(partialTicks), ms, partialTicks, buffers, light, - overlay, bogey.getStyle(), bogey.bogeyData); + bogey.getStyle().render(bogey.getSize(), partialTicks, ms, buffers, light, + overlay, bogey.wheelAngle.getValue(partialTicks), bogey.bogeyData, true); ms.popPose(); } @@ -75,7 +75,6 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer bogey.updateCouplingAnchor(position, viewXRot, viewYRot, bogeySpacing, partialTicks, bogey.isLeading); if (!carriage.isOnTwoBogeys()) bogey.updateCouplingAnchor(position, viewXRot, viewYRot, bogeySpacing, partialTicks, !bogey.isLeading); - }); } @@ -99,7 +98,6 @@ public class CarriageContraptionEntityRenderer extends ContraptionEntityRenderer } public static int getBogeyLightCoords(CarriageContraptionEntity entity, CarriageBogey bogey, float partialTicks) { - var lightPos = BlockPos.containing( Objects.requireNonNullElseGet(bogey.getAnchorPosition(), () -> entity.getLightProbePosition(partialTicks))); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index 376a99969..7fadc8e62 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.trains.entity; +import org.jetbrains.annotations.Nullable; import org.joml.Vector3f; import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.content.contraptions.render.ContraptionVisual; -import com.simibubi.create.content.trains.bogey.BogeyRenderer; import com.simibubi.create.content.trains.bogey.BogeyVisual; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; @@ -14,16 +14,16 @@ import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.transform.TransformStack; public class CarriageContraptionVisual extends ContraptionVisual { - private final PoseStack ms = new PoseStack(); + @Nullable private Carriage carriage; - private Couple bogeys; - private Couple bogeyHidden; + @Nullable + private Couple<@Nullable VisualizedBogey> bogeys; + private Couple bogeyHidden = Couple.create(() -> false); public CarriageContraptionVisual(VisualizationContext context, CarriageContraptionEntity entity, float partialTick) { super(context, entity, partialTick); - bogeyHidden = Couple.create(() -> false); entity.bindInstance(this); } @@ -31,13 +31,12 @@ public class CarriageContraptionVisual extends ContraptionVisual bogey.getStyle() - .createVisual(bogey, bogey.type.getSize(), manager), visualizationContext); - } + if (carriage != null) { + bogeys = carriage.bogeys.mapNotNull(bogey -> VisualizedBogey.of(visualizationContext, bogey, pt)); + } super.init(pt); - } + } public void setBogeyVisibility(boolean first, boolean visible) { bogeyHidden.set(first, !visible); @@ -62,26 +61,27 @@ public class CarriageContraptionVisual extends ContraptionVisual { - if (instance != null) - instance.updateLight(level, entity); + bogeys.forEach(bogey -> { + if (bogey != null) { + int packedLight = CarriageContraptionEntityRenderer.getBogeyLightCoords(entity, bogey.bogey, partialTick); + bogey.visual.updateLight(packedLight); + } }); } @@ -108,11 +110,21 @@ public class CarriageContraptionVisual extends ContraptionVisual { - if (instance != null) { - instance.commonRenderer.ifPresent(BogeyRenderer::remove); - instance.renderer.remove(); + bogeys.forEach(bogey -> { + if (bogey != null) { + bogey.visual.delete(); } }); } + + private record VisualizedBogey(CarriageBogey bogey, BogeyVisual visual) { + @Nullable + static VisualizedBogey of(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + BogeyVisual visual = bogey.getStyle().createVisual(ctx, bogey, partialTick); + if (visual == null) { + return null; + } + return new VisualizedBogey(bogey, visual); + } + } } diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageSounds.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageSounds.java index f327b2cef..de30b39d7 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageSounds.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageSounds.java @@ -42,7 +42,7 @@ public class CarriageSounds { public CarriageSounds(CarriageContraptionEntity entity) { this.entity = entity; bogeySounds = entity.getCarriage().bogeys.map(bogey -> - bogey != null && bogey.getStyle() != null ? bogey.getStyle().getSoundType() + bogey != null && bogey.getStyle() != null ? bogey.getStyle().soundEvent.get() : AllSoundEvents.TRAIN2.getMainEvent()); closestBogeySound = bogeySounds.getFirst(); distanceFactor = LerpedFloat.linear(); @@ -94,7 +94,7 @@ public class CarriageSounds { relevantBogey = bogeys.getFirst(); } if (relevantBogey != null) { - closestBogeySound = relevantBogey.getStyle().getSoundType(); + closestBogeySound = relevantBogey.getStyle().soundEvent.get(); } Vec3 toCarriage = distance1 > distance2 ? toBogey2 : toBogey1; diff --git a/src/main/java/com/simibubi/create/foundation/utility/Couple.java b/src/main/java/com/simibubi/create/foundation/utility/Couple.java index 608ab696c..4af598c24 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Couple.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Couple.java @@ -55,6 +55,10 @@ public class Couple extends Pair implements Iterable { return Couple.create(function.apply(first), function.apply(second)); } + public Couple mapNotNull(Function function) { + return Couple.create(first != null ? function.apply(first) : null, second != null ? function.apply(second) : null); + } + public Couple mapWithContext(BiFunction function) { return Couple.create(function.apply(first, true), function.apply(second, false)); } From ed875d47acf7c856d6651c42b89039a4b01974cc Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:29:12 +0200 Subject: [PATCH 25/46] More like ne-oldforge - Forge -> 47.1.3 - Restore neoforge compatibility #7049 - Add a deployer safety check #6244 - Fluid tank lighting safety checks #7073 - Fixed PSI not always connecting on assembly #6854 --- gradle.properties | 6 ++++-- src/main/java/com/simibubi/create/Create.java | 2 +- .../content/contraptions/AbstractContraptionEntity.java | 9 ++++++--- .../create/content/fluids/tank/FluidTankBlock.java | 2 +- .../create/content/fluids/tank/FluidTankBlockEntity.java | 2 +- .../kinetics/crafter/MechanicalCrafterBlockEntity.java | 7 ------- .../content/kinetics/deployer/DeployerBlockEntity.java | 2 ++ .../content/logistics/funnel/FunnelBlockEntity.java | 6 ------ .../redstone/smartObserver/SmartObserverBlockEntity.java | 7 ------- .../thresholdSwitch/ThresholdSwitchBlockEntity.java | 7 ------- .../inventory/CapManipulationBehaviourBase.java | 7 ------- src/main/resources/META-INF/mods.toml | 2 +- 12 files changed, 16 insertions(+), 43 deletions(-) diff --git a/gradle.properties b/gradle.properties index 8cacbf5c8..b8ec97ce0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,11 +4,13 @@ org.gradle.jvmargs = -Xmx3G org.gradle.daemon = false # mod version info -mod_version = 0.5.1.i +mod_version = 0.5.1.j artifact_minecraft_version = 1.20.1 minecraft_version = 1.20.1 -forge_version = 47.1.43 + +# 1.20.1: Latest neo is based on this version. Try not to bump +forge_version = 47.1.3 # build dependency versions forgegradle_version = 6.0.6 diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 6af5fbf4c..fd3517424 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -60,7 +60,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.5.1i"; + public static final String VERSION = "0.5.1j"; public static final Logger LOGGER = LogUtils.getLogger(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java index 83c890004..e9ffc950e 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/AbstractContraptionEntity.java @@ -545,9 +545,12 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit relativeMotion = reverseRotation(relativeMotion, 1); context.relativeMotion = relativeMotion; - return !BlockPos.containing(previousPosition).equals(gridPosition) - || (context.relativeMotion.length() > 0 || context.contraption instanceof CarriageContraption) - && context.firstMovement; + boolean ignoreMotionForFirstMovement = + context.contraption instanceof CarriageContraption || actor instanceof PortableStorageInterfaceMovement; + + return !BlockPos.containing(previousPosition) + .equals(gridPosition) + || (context.relativeMotion.length() > 0 || ignoreMotionForFirstMovement) && context.firstMovement; } public void move(double x, double y, double z) { diff --git a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankBlock.java b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankBlock.java index b2b29a87f..50a7f7ebf 100644 --- a/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankBlock.java +++ b/src/main/java/com/simibubi/create/content/fluids/tank/FluidTankBlock.java @@ -106,7 +106,7 @@ public class FluidTankBlock extends Block implements IWrenchable, IBE(this::onHandlerInvalidated, this)); - } - @Override public void lazyTick() { super.lazyTick(); @@ -132,8 +127,6 @@ public abstract class CapManipulationBehaviourBase capability = capability(); targetCapability = bypassSided ? invBE.getCapability(capability) : invBE.getCapability(capability, targetBlockFace.getFace()); - if (targetCapability.isPresent()) - targetCapability.addListener(new HashableNonNullConsumer<>(this::onHandlerInvalidated, this)); } @FunctionalInterface diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index ca8562b50..e082f6694 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -19,7 +19,7 @@ Technology that empowers the player.''' [[dependencies.create]] modId="forge" mandatory=true - versionRange="[47.1.43,)" + versionRange="[47.1.3,)" ordering="NONE" side="BOTH" From b7f272cad7d773c3152267795e1c8508905d974c Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:45:24 +0200 Subject: [PATCH 26/46] #7086 on 0.5.1 - Fix in-portal trains sometimes loading in with invalid coordinates, causing a game crash --- .../com/simibubi/create/content/trains/entity/Carriage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java b/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java index b340e4848..c3feabdb7 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/Carriage.java @@ -791,6 +791,8 @@ public class Carriage { } private void createEntity(Level level, boolean loadPassengers) { + if (positionAnchor != null) + serialisedEntity.put("Pos", VecHelper.writeNBT(positionAnchor)); Entity entity = EntityType.create(serialisedEntity, level) .orElse(null); From a624a6e452cdb3b4a60d769102e2142087ecff29 Mon Sep 17 00:00:00 2001 From: IThundxr Date: Wed, 23 Oct 2024 15:52:07 -0400 Subject: [PATCH 27/46] Fix crash when empty fluids are specified --- .../com/simibubi/create/foundation/fluid/FluidHelper.java | 6 ++++-- .../simibubi/create/foundation/fluid/FluidIngredient.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java index e00cbd7d3..7e47daee6 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidHelper.java @@ -53,11 +53,11 @@ public class FluidHelper { public static boolean isLava(Fluid fluid) { return convertToStill(fluid) == Fluids.LAVA; } - + public static boolean isSame(FluidStack fluidStack, FluidStack fluidStack2) { return fluidStack.getFluid() == fluidStack2.getFluid(); } - + public static boolean isSame(FluidStack fluidStack, Fluid fluid) { return fluidStack.getFluid() == fluid; } @@ -147,6 +147,8 @@ public class FluidHelper { Fluid fluid = ForgeRegistries.FLUIDS.getValue(id); if (fluid == null) throw new JsonSyntaxException("Unknown fluid '" + id + "'"); + if (fluid == Fluids.EMPTY) + throw new JsonSyntaxException("Invalid empty fluid '" + id + "'"); int amount = GsonHelper.getAsInt(json, "amount"); FluidStack stack = new FluidStack(fluid, amount); diff --git a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java index ce69e7579..5672f1b83 100644 --- a/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java +++ b/src/main/java/com/simibubi/create/foundation/fluid/FluidIngredient.java @@ -124,7 +124,7 @@ public abstract class FluidIngredient implements Predicate { public static FluidIngredient deserialize(@Nullable JsonElement je) { if (!isFluidIngredient(je)) - throw new JsonSyntaxException("Invalid fluid ingredient: " + Objects.toString(je)); + throw new JsonSyntaxException("Invalid fluid ingredient: " + je); JsonObject json = je.getAsJsonObject(); FluidIngredient ingredient = json.has("fluidTag") ? new FluidTagIngredient() : new FluidStackIngredient(); From d48a504486311f3175f4ebef3b0649140e728fbb Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 24 Oct 2024 21:52:07 -0700 Subject: [PATCH 28/46] Add Flywheel visuals for bogey block entities --- .../simibubi/create/AllBlockEntityTypes.java | 2 + .../bogey/AbstractBogeyBlockEntity.java | 2 +- .../bogey/BogeyBlockEntityRenderer.java | 21 ++-- .../trains/bogey/BogeyBlockEntityVisual.java | 95 +++++++++++++++++++ .../content/trains/bogey/BogeyStyle.java | 7 +- .../content/trains/bogey/BogeyVisual.java | 11 ++- .../content/trains/bogey/BogeyVisualizer.java | 4 +- .../trains/bogey/StandardBogeyVisual.java | 52 +++++++--- .../entity/CarriageContraptionVisual.java | 25 +++-- 9 files changed, 179 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityVisual.java diff --git a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java index d0cccbc36..74918805a 100644 --- a/src/main/java/com/simibubi/create/AllBlockEntityTypes.java +++ b/src/main/java/com/simibubi/create/AllBlockEntityTypes.java @@ -199,6 +199,7 @@ import com.simibubi.create.content.schematics.cannon.SchematicannonRenderer; import com.simibubi.create.content.schematics.cannon.SchematicannonVisual; import com.simibubi.create.content.schematics.table.SchematicTableBlockEntity; import com.simibubi.create.content.trains.bogey.BogeyBlockEntityRenderer; +import com.simibubi.create.content.trains.bogey.BogeyBlockEntityVisual; import com.simibubi.create.content.trains.bogey.StandardBogeyBlockEntity; import com.simibubi.create.content.trains.display.FlapDisplayBlockEntity; import com.simibubi.create.content.trains.display.FlapDisplayRenderer; @@ -844,6 +845,7 @@ public class AllBlockEntityTypes { public static final BlockEntityEntry BOGEY = REGISTRATE .blockEntity("bogey", StandardBogeyBlockEntity::new) + .visual(() -> BogeyBlockEntityVisual::new, false) .renderer(() -> BogeyBlockEntityRenderer::new) .validBlocks(AllBlocks.SMALL_BOGEY, AllBlocks.LARGE_BOGEY) .register(); diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java index 6fc496c50..146a04e2e 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/AbstractBogeyBlockEntity.java @@ -113,6 +113,6 @@ public abstract class AbstractBogeyBlockEntity extends CachedRenderBBBlockEntity setChanged(); Level level = getLevel(); if (level != null) - getLevel().sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); + level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), 3); } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java index d340cc5b3..cbeaf0659 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityRenderer.java @@ -7,10 +7,9 @@ import com.simibubi.create.foundation.blockEntity.renderer.SafeBlockEntityRender import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.core.Direction; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -public class BogeyBlockEntityRenderer extends SafeBlockEntityRenderer { +public class BogeyBlockEntityRenderer extends SafeBlockEntityRenderer { public BogeyBlockEntityRenderer(BlockEntityRendererProvider.Context context) { } @@ -18,14 +17,16 @@ public class BogeyBlockEntityRenderer extends SafeBlockEn protected void renderSafe(T be, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { BlockState blockState = be.getBlockState(); - if (be instanceof AbstractBogeyBlockEntity sbbe) { - float angle = sbbe.getVirtualAngle(partialTicks); - if (blockState.getBlock() instanceof AbstractBogeyBlock bogey) { - ms.translate(.5f, .5f, .5f); - if (blockState.getValue(AbstractBogeyBlock.AXIS) == Direction.Axis.X) - ms.mulPose(Axis.YP.rotationDegrees(90)); - sbbe.getStyle().render(bogey.getSize(), partialTicks, ms, buffer, light, overlay, angle, sbbe.getBogeyData(), false); - } + if (!(blockState.getBlock() instanceof AbstractBogeyBlock bogey)) { + return; } + + float angle = be.getVirtualAngle(partialTicks); + ms.pushPose(); + ms.translate(.5f, .5f, .5f); + if (blockState.getValue(AbstractBogeyBlock.AXIS) == Direction.Axis.X) + ms.mulPose(Axis.YP.rotationDegrees(90)); + be.getStyle().render(bogey.getSize(), partialTicks, ms, buffer, light, overlay, angle, be.getBogeyData(), false); + ms.popPose(); } } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityVisual.java new file mode 100644 index 000000000..e3bd7191b --- /dev/null +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyBlockEntityVisual.java @@ -0,0 +1,95 @@ +package com.simibubi.create.content.trains.bogey; + +import java.util.function.Consumer; + +import org.jetbrains.annotations.Nullable; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import com.simibubi.create.content.trains.bogey.BogeySizes.BogeySize; + +import dev.engine_room.flywheel.api.instance.Instance; +import dev.engine_room.flywheel.api.visualization.VisualizationContext; +import dev.engine_room.flywheel.lib.visual.AbstractBlockEntityVisual; +import dev.engine_room.flywheel.lib.visual.SimpleDynamicVisual; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; + +public class BogeyBlockEntityVisual extends AbstractBlockEntityVisual implements SimpleDynamicVisual { + private final PoseStack poseStack = new PoseStack(); + + @Nullable + private final BogeySize bogeySize; + private BogeyStyle lastStyle; + @Nullable + private BogeyVisual bogey; + + public BogeyBlockEntityVisual(VisualizationContext ctx, AbstractBogeyBlockEntity blockEntity, float partialTick) { + super(ctx, blockEntity, partialTick); + + lastStyle = blockEntity.getStyle(); + + if (!(blockState.getBlock() instanceof AbstractBogeyBlock block)) { + bogeySize = null; + return; + } + + bogeySize = block.getSize(); + + BlockPos visualPos = getVisualPosition(); + poseStack.translate(visualPos.getX(), visualPos.getY(), visualPos.getZ()); + poseStack.translate(.5f, .5f, .5f); + if (blockState.getValue(AbstractBogeyBlock.AXIS) == Direction.Axis.X) + poseStack.mulPose(Axis.YP.rotationDegrees(90)); + poseStack.translate(0, -1.5 - 1 / 128f, 0); + + bogey = lastStyle.createVisual(bogeySize, visualizationContext, partialTick, false); + } + + @Override + public void beginFrame(Context context) { + if (bogeySize == null) { + return; + } + + BogeyStyle style = blockEntity.getStyle(); + if (style != lastStyle) { + if (bogey != null) { + bogey.delete(); + bogey = null; + } + lastStyle = style; + bogey = lastStyle.createVisual(bogeySize, visualizationContext, context.partialTick(), false); + } + + if (bogey == null) { + return; + } + + CompoundTag bogeyData = blockEntity.getBogeyData(); + float angle = blockEntity.getVirtualAngle(context.partialTick()); + bogey.update(bogeyData, angle, poseStack); + } + + @Override + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { + if (bogey != null) { + bogey.collectCrumblingInstances(consumer); + } + } + + @Override + public void updateLight(float partialTick) { + if (bogey != null) { + bogey.updateLight(computePackedLight()); + } + } + + @Override + protected void _delete() { + if (bogey != null) { + bogey.delete(); + } + } +} diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java index 9a375d7ee..d7ece27df 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyStyle.java @@ -12,7 +12,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBogeyStyles; import com.simibubi.create.AllSoundEvents; import com.simibubi.create.content.trains.bogey.BogeySizes.BogeySize; -import com.simibubi.create.content.trains.entity.CarriageBogey; import com.simibubi.create.foundation.utility.Lang; import dev.engine_room.flywheel.api.visualization.VisualizationContext; @@ -96,10 +95,10 @@ public class BogeyStyle { @OnlyIn(Dist.CLIENT) @Nullable - public BogeyVisual createVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { - SizeRenderer renderer = sizeRenderers.get(bogey.getSize()); + public BogeyVisual createVisual(BogeySize size, VisualizationContext ctx, float partialTick, boolean inContraption) { + SizeRenderer renderer = sizeRenderers.get(size); if (renderer != null) { - return renderer.visualizer.createVisual(ctx, bogey, partialTick); + return renderer.visualizer.createVisual(ctx, partialTick, inContraption); } return null; } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java index 2b0eb6897..a003116cc 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisual.java @@ -1,13 +1,22 @@ package com.simibubi.create.content.trains.bogey; +import java.util.function.Consumer; + +import org.jetbrains.annotations.Nullable; + import com.mojang.blaze3d.vertex.PoseStack; +import dev.engine_room.flywheel.api.instance.Instance; +import net.minecraft.nbt.CompoundTag; + public interface BogeyVisual { - void update(float wheelAngle, PoseStack poseStack); + void update(CompoundTag bogeyData, float wheelAngle, PoseStack poseStack); void hide(); void updateLight(int packedLight); + void collectCrumblingInstances(Consumer<@Nullable Instance> consumer); + void delete(); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java index 38acb77d4..08570e0a2 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/BogeyVisualizer.java @@ -1,10 +1,8 @@ package com.simibubi.create.content.trains.bogey; -import com.simibubi.create.content.trains.entity.CarriageBogey; - import dev.engine_room.flywheel.api.visualization.VisualizationContext; @FunctionalInterface public interface BogeyVisualizer { - BogeyVisual createVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick); + BogeyVisual createVisual(VisualizationContext ctx, float partialTick, boolean inContraption); } diff --git a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java index feec031b8..0bb70cd1d 100644 --- a/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/bogey/StandardBogeyVisual.java @@ -1,24 +1,29 @@ package com.simibubi.create.content.trains.bogey; +import java.util.function.Consumer; + +import org.jetbrains.annotations.Nullable; + import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllPartialModels; import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock; -import com.simibubi.create.content.trains.entity.CarriageBogey; import com.simibubi.create.foundation.render.VirtualRenderHelper; import com.simibubi.create.foundation.utility.AngleHelper; +import dev.engine_room.flywheel.api.instance.Instance; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.instance.InstanceTypes; import dev.engine_room.flywheel.lib.instance.TransformedInstance; import dev.engine_room.flywheel.lib.model.Models; import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; public class StandardBogeyVisual implements BogeyVisual { private final TransformedInstance shaft1; private final TransformedInstance shaft2; - public StandardBogeyVisual(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { + public StandardBogeyVisual(VisualizationContext ctx, float partialTick, boolean inContraption) { var shaftInstancer = ctx.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.Z))); @@ -27,7 +32,7 @@ public class StandardBogeyVisual implements BogeyVisual { } @Override - public void update(float wheelAngle, PoseStack poseStack) { + public void update(CompoundTag bogeyData, float wheelAngle, PoseStack poseStack) { shaft1.setTransform(poseStack) .translate(-.5f, .25f, 0) .center() @@ -54,6 +59,12 @@ public class StandardBogeyVisual implements BogeyVisual { shaft2.light(packedLight).setChanged(); } + @Override + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { + consumer.accept(shaft1); + consumer.accept(shaft2); + } + @Override public void delete() { shaft1.delete(); @@ -65,8 +76,8 @@ public class StandardBogeyVisual implements BogeyVisual { private final TransformedInstance wheel1; private final TransformedInstance wheel2; - public Small(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { - super(ctx, bogey, partialTick); + public Small(VisualizationContext ctx, float partialTick, boolean inContraption) { + super(ctx, partialTick, inContraption); var wheelInstancer = ctx.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.SMALL_BOGEY_WHEELS)); frame = ctx.instancerProvider() @@ -77,8 +88,8 @@ public class StandardBogeyVisual implements BogeyVisual { } @Override - public void update(float wheelAngle, PoseStack poseStack) { - super.update(wheelAngle, poseStack); + public void update(CompoundTag bogeyData, float wheelAngle, PoseStack poseStack) { + super.update(bogeyData, wheelAngle, poseStack); wheel1.setTransform(poseStack) .translate(0, 12 / 16f, -1) .rotateXDegrees(wheelAngle) @@ -108,6 +119,14 @@ public class StandardBogeyVisual implements BogeyVisual { wheel2.light(packedLight).setChanged(); } + @Override + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(frame); + consumer.accept(wheel1); + consumer.accept(wheel2); + } + @Override public void delete() { super.delete(); @@ -125,8 +144,8 @@ public class StandardBogeyVisual implements BogeyVisual { private final TransformedInstance wheels; private final TransformedInstance pin; - public Large(VisualizationContext ctx, CarriageBogey bogey, float partialTick) { - super(ctx, bogey, partialTick); + public Large(VisualizationContext ctx, float partialTick, boolean inContraption) { + super(ctx, partialTick, inContraption); var secondaryShaftInstancer = ctx.instancerProvider() .instancer(InstanceTypes.TRANSFORMED, VirtualRenderHelper.blockModel(AllBlocks.SHAFT.getDefaultState() .setValue(ShaftBlock.AXIS, Direction.Axis.X))); @@ -147,8 +166,8 @@ public class StandardBogeyVisual implements BogeyVisual { } @Override - public void update(float wheelAngle, PoseStack poseStack) { - super.update(wheelAngle, poseStack); + public void update(CompoundTag bogeyData, float wheelAngle, PoseStack poseStack) { + super.update(bogeyData, wheelAngle, poseStack); secondaryShaft1.setTransform(poseStack) .translate(-.5f, .25f, .5f) .center() @@ -201,6 +220,17 @@ public class StandardBogeyVisual implements BogeyVisual { pin.light(packedLight).setChanged(); } + @Override + public void collectCrumblingInstances(Consumer<@Nullable Instance> consumer) { + super.collectCrumblingInstances(consumer); + consumer.accept(secondaryShaft1); + consumer.accept(secondaryShaft2); + consumer.accept(wheels); + consumer.accept(drive); + consumer.accept(piston); + consumer.accept(pin); + } + @Override public void delete() { super.delete(); diff --git a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java index 7fadc8e62..28ef06cb2 100644 --- a/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java +++ b/src/main/java/com/simibubi/create/content/trains/entity/CarriageContraptionVisual.java @@ -12,9 +12,10 @@ import com.simibubi.create.foundation.utility.Iterate; import dev.engine_room.flywheel.api.visual.DynamicVisual; import dev.engine_room.flywheel.api.visualization.VisualizationContext; import dev.engine_room.flywheel.lib.transform.TransformStack; +import net.minecraft.nbt.CompoundTag; public class CarriageContraptionVisual extends ContraptionVisual { - private final PoseStack ms = new PoseStack(); + private final PoseStack poseStack = new PoseStack(); @Nullable private Carriage carriage; @@ -59,10 +60,10 @@ public class CarriageContraptionVisual extends ContraptionVisual Date: Fri, 10 Jan 2025 11:53:59 -0500 Subject: [PATCH 29/46] Fix JukeboxPoint (#7040) --- .../AllArmInteractionPointTypes.java | 37 ++++++------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/AllArmInteractionPointTypes.java b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/AllArmInteractionPointTypes.java index 8740d5740..d6d7c6c0c 100644 --- a/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/AllArmInteractionPointTypes.java +++ b/src/main/java/com/simibubi/create/content/kinetics/mechanicalArm/AllArmInteractionPointTypes.java @@ -646,45 +646,30 @@ public class AllArmInteractionPointTypes { @Override public ItemStack insert(ItemStack stack, boolean simulate) { - Item item = stack.getItem(); - if (!(item instanceof RecordItem)) + if (!(stack.getItem() instanceof RecordItem)) return stack; - if (cachedState.getOptionalValue(JukeboxBlock.HAS_RECORD) - .orElse(true)) + if (cachedState.getOptionalValue(JukeboxBlock.HAS_RECORD).orElse(true)) return stack; - BlockEntity blockEntity = level.getBlockEntity(pos); - if (!(blockEntity instanceof JukeboxBlockEntity jukeboxBE)) + if (!(level.getBlockEntity(pos) instanceof JukeboxBlockEntity jukeboxBE)) return stack; - if (!jukeboxBE.getFirstItem() - .isEmpty()) + if (!jukeboxBE.getFirstItem().isEmpty()) return stack; ItemStack remainder = stack.copy(); ItemStack toInsert = remainder.split(1); - if (!simulate) { - jukeboxBE.setFirstItem(toInsert); - level.setBlock(pos, cachedState.setValue(JukeboxBlock.HAS_RECORD, true), 2); - level.levelEvent(null, 1010, pos, Item.getId(item)); - } + if (!simulate) + jukeboxBE.setItem(0, toInsert); return remainder; } @Override public ItemStack extract(int slot, int amount, boolean simulate) { - if (!cachedState.getOptionalValue(JukeboxBlock.HAS_RECORD) - .orElse(false)) + if (!cachedState.getOptionalValue(JukeboxBlock.HAS_RECORD).orElse(false)) return ItemStack.EMPTY; - BlockEntity blockEntity = level.getBlockEntity(pos); - if (!(blockEntity instanceof JukeboxBlockEntity jukeboxBE)) + if (!(level.getBlockEntity(pos) instanceof JukeboxBlockEntity jukeboxBE)) return ItemStack.EMPTY; - ItemStack record = jukeboxBE.getFirstItem(); - if (record.isEmpty()) - return ItemStack.EMPTY; - if (!simulate) { - level.levelEvent(1010, pos, 0); - jukeboxBE.clearContent(); - level.setBlock(pos, cachedState.setValue(JukeboxBlock.HAS_RECORD, false), 2); - } - return record; + if (!simulate) + return jukeboxBE.removeItem(slot, amount); + return jukeboxBE.getFirstItem(); } } From 4abc72a5a29c0dd842d18883b005d06492f8e95f Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:01:24 -0500 Subject: [PATCH 30/46] Fix toolboxes not giving a comparator output (#6978) --- .../content/equipment/toolbox/ToolboxBlock.java | 16 +++++++++++----- .../content/logistics/vault/ItemVaultBlock.java | 6 +----- .../create/foundation/item/ItemHelper.java | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxBlock.java b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxBlock.java index 613ae9153..7afa382f6 100644 --- a/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxBlock.java +++ b/src/main/java/com/simibubi/create/content/equipment/toolbox/ToolboxBlock.java @@ -8,6 +8,7 @@ import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllShapes; import com.simibubi.create.foundation.block.IBE; +import com.simibubi.create.foundation.item.ItemHelper; import com.simibubi.create.foundation.utility.BlockHelper; import net.minecraft.core.BlockPos; @@ -22,7 +23,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -38,6 +38,7 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import net.minecraftforge.common.capabilities.ForgeCapabilities; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.network.NetworkHooks; @@ -171,7 +172,7 @@ public class ToolboxBlock extends HorizontalDirectionalBlock implements SimpleWa public Class getBlockEntityClass() { return ToolboxBlockEntity.class; } - + @Override public BlockEntityType getBlockEntityType() { return AllBlockEntityTypes.TOOLBOX.get(); @@ -181,9 +182,14 @@ public class ToolboxBlock extends HorizontalDirectionalBlock implements SimpleWa return color; } - public static Ingredient getMainBox() { - return Ingredient.of(AllBlocks.TOOLBOXES.get(DyeColor.BROWN) - .get()); + @Override + public boolean hasAnalogOutputSignal(BlockState pState) { + return true; + } + + @Override + public int getAnalogOutputSignal(BlockState pState, Level pLevel, BlockPos pPos) { + return ItemHelper.calcRedstoneFromBlockEntity(this, pLevel, pPos); } } diff --git a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java index 7d3fd37a1..d874732a1 100644 --- a/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java +++ b/src/main/java/com/simibubi/create/content/logistics/vault/ItemVaultBlock.java @@ -159,11 +159,7 @@ public class ItemVaultBlock extends Block implements IWrenchable, IBE vte.getCapability(ForgeCapabilities.ITEM_HANDLER)) - .map(lo -> lo.map(ItemHelper::calcRedstoneFromInventory) - .orElse(0)) - .orElse(0); + return ItemHelper.calcRedstoneFromBlockEntity(this, pLevel, pPos); } @Override diff --git a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java index d4277e265..d4cdb6151 100644 --- a/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java +++ b/src/main/java/com/simibubi/create/foundation/item/ItemHelper.java @@ -2,11 +2,18 @@ package com.simibubi.create.foundation.item; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; import javax.annotation.Nullable; +import com.simibubi.create.foundation.block.IBE; + +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraftforge.common.capabilities.ForgeCapabilities; + import org.apache.commons.lang3.mutable.MutableInt; import com.simibubi.create.foundation.utility.Pair; @@ -26,7 +33,7 @@ public class ItemHelper { public static boolean sameItem(ItemStack stack, ItemStack otherStack) { return !otherStack.isEmpty() && stack.is(otherStack.getItem()); } - + public static Predicate sameItemPredicate(ItemStack stack) { return s -> sameItem(stack, s); } @@ -73,6 +80,13 @@ public class ItemHelper { return true; } + public static > int calcRedstoneFromBlockEntity(T ibe, Level level, BlockPos pos) { + return ibe.getBlockEntityOptional(level, pos) + .map(be -> be.getCapability(ForgeCapabilities.ITEM_HANDLER)) + .map(lo -> lo.map(ItemHelper::calcRedstoneFromInventory).orElse(0)) + .orElse(0); + } + public static int calcRedstoneFromInventory(@Nullable IItemHandler inv) { if (inv == null) return 0; From bdc0e8779da666b43d9dff11729721635f3f4b9e Mon Sep 17 00:00:00 2001 From: IThundxr Date: Fri, 10 Jan 2025 12:02:50 -0500 Subject: [PATCH 31/46] Sync AllPortalTracks with Create Fabric (#7078) Co-authored-by: butterflysky --- .../java/com/simibubi/create/compat/Mods.java | 7 +- .../betterend/BetterEndPortalCompat.java | 66 +++++++ .../content/trains/track/AllPortalTracks.java | 167 +++++++++++++++--- 3 files changed, 208 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/betterend/BetterEndPortalCompat.java diff --git a/src/main/java/com/simibubi/create/compat/Mods.java b/src/main/java/com/simibubi/create/compat/Mods.java index a78d2b780..df64a92df 100644 --- a/src/main/java/com/simibubi/create/compat/Mods.java +++ b/src/main/java/com/simibubi/create/compat/Mods.java @@ -33,7 +33,8 @@ public enum Mods { XLPACKETS, MODERNUI, FTBCHUNKS, - JOURNEYMAP; + JOURNEYMAP, + BETTEREND; private final String id; @@ -55,11 +56,11 @@ public enum Mods { public Block getBlock(String id) { return ForgeRegistries.BLOCKS.getValue(rl(id)); } - + public Item getItem(String id) { return ForgeRegistries.ITEMS.getValue(rl(id)); } - + public boolean contains(ItemLike entry) { if (!isLoaded()) return false; diff --git a/src/main/java/com/simibubi/create/compat/betterend/BetterEndPortalCompat.java b/src/main/java/com/simibubi/create/compat/betterend/BetterEndPortalCompat.java new file mode 100644 index 000000000..3387d2e12 --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/betterend/BetterEndPortalCompat.java @@ -0,0 +1,66 @@ +package com.simibubi.create.compat.betterend; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.VarHandle; + +import com.simibubi.create.Create; + +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.portal.PortalInfo; + +public class BetterEndPortalCompat { + private static final MethodHandles.Lookup lookup = MethodHandles.lookup(); + + private static MethodHandle constructorHandle; + private static VarHandle portalEntrancePosHandle; + private static MethodHandle findDimensionEntryPointHandle; + + private static boolean hasErrored = false; + + static { + try { + Class travelerStateClass = Class.forName("org.betterx.betterend.portal.TravelerState"); + MethodHandles.Lookup privateLookup = MethodHandles.privateLookupIn(travelerStateClass, lookup); + + MethodType travelerStateConstructorTypes = MethodType.methodType(void.class, Entity.class); + constructorHandle = lookup.findConstructor(travelerStateClass, travelerStateConstructorTypes); + + portalEntrancePosHandle = privateLookup.findVarHandle(travelerStateClass, "portalEntrancePos", BlockPos.class); + + MethodType findDimensionEntryPointTypes = MethodType.methodType(PortalInfo.class, ServerLevel.class); + findDimensionEntryPointHandle = privateLookup.findVirtual(travelerStateClass, "findDimensionEntryPoint", findDimensionEntryPointTypes); + } catch (Exception e) { + Create.LOGGER.error("Create's Better End Portal compat failed to initialize: ", e); + hasErrored = true; + } + } + + /** + * Retrieves the adjusted {@link PortalInfo} for the Better End portal using reflection. + * + * @param targetLevel The target {@link ServerLevel} (dimension). + * @param entity The probe {@link Entity} used for portal traversal calculations. + * @return The adjusted {@link PortalInfo} for the target dimension, or {@code null} if an error occurs. + */ + public static PortalInfo getBetterEndPortalInfo(ServerLevel targetLevel, Entity entity) { + if (!hasErrored) { + try { + Object travelerState = constructorHandle.invoke(entity); + + // Set the private portalEntrancePos field to the entity's block position + // as assumed in TravelerState#findDimensionEntryPoint + portalEntrancePosHandle.set(travelerState, entity.blockPosition().immutable()); + + return (PortalInfo) findDimensionEntryPointHandle.invoke(travelerState, targetLevel); + } catch (Throwable e) { + Create.LOGGER.error("Create's Better End Portal compat failed to initialize: ", e); + } + } + + return null; + } +} diff --git a/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java b/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java index f74dece9a..4fb8b200c 100644 --- a/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java +++ b/src/main/java/com/simibubi/create/content/trains/track/AllPortalTracks.java @@ -1,9 +1,12 @@ package com.simibubi.create.content.trains.track; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.UnaryOperator; +import com.simibubi.create.Create; import com.simibubi.create.compat.Mods; +import com.simibubi.create.compat.betterend.BetterEndPortalCompat; import com.simibubi.create.content.contraptions.glue.SuperGlueEntity; import com.simibubi.create.foundation.utility.AttachedRegistry; import com.simibubi.create.foundation.utility.BlockFace; @@ -26,30 +29,66 @@ import net.minecraft.world.phys.AABB; import net.minecraftforge.common.util.ITeleporter; import net.minecraftforge.registries.ForgeRegistries; +/** + * Manages portal track integrations for various dimensions and mods within the Create mod. + *