mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-04 07:32:59 +00:00 
			
		
		
		
	Add some tests for new turtle tool functionality
- Normalise upgrade keys, to be "allowEnchantments" and "consumeDurability". We were previously inconsistent with allow/allows and consumes. - Add tests for durability and enchantments of pickaxes. - Fix a couple of issues with the original upgrade NBT being modified. - Now store the item's tag under a separate key rather than on the root. This makes syncing the NBT between the two much nicer.
This commit is contained in:
		@@ -6,6 +6,7 @@ Upstream-Contact: Jonathan Coates <git@squiddev.cc>
 | 
			
		||||
Files:
 | 
			
		||||
  projects/common/src/main/resources/assets/computercraft/sounds.json
 | 
			
		||||
  projects/common/src/main/resources/assets/computercraft/sounds/empty.ogg
 | 
			
		||||
  projects/common/src/testMod/resources/data/cctest/computercraft/turtle_upgrades/*
 | 
			
		||||
  projects/common/src/testMod/resources/data/cctest/structures/*
 | 
			
		||||
  projects/fabric/src/generated/*
 | 
			
		||||
  projects/forge/src/generated/*
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ import net.minecraft.world.item.ItemStack;
 | 
			
		||||
/**
 | 
			
		||||
 * Indicates if an equipped turtle item will consume durability.
 | 
			
		||||
 *
 | 
			
		||||
 * @see TurtleUpgradeDataProvider.ToolBuilder#consumesDurability(TurtleToolDurability)
 | 
			
		||||
 * @see TurtleUpgradeDataProvider.ToolBuilder#consumeDurability(TurtleToolDurability)
 | 
			
		||||
 */
 | 
			
		||||
public enum TurtleToolDurability implements StringRepresentable {
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -64,7 +64,7 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
 | 
			
		||||
        private @Nullable Float damageMultiplier = null;
 | 
			
		||||
        private @Nullable TagKey<Block> breakable;
 | 
			
		||||
        private boolean allowEnchantments = false;
 | 
			
		||||
        private TurtleToolDurability consumesDurability = TurtleToolDurability.NEVER;
 | 
			
		||||
        private TurtleToolDurability consumeDurability = TurtleToolDurability.NEVER;
 | 
			
		||||
 | 
			
		||||
        ToolBuilder(ResourceLocation id, TurtleUpgradeSerialiser<?> serialiser, Item toolItem) {
 | 
			
		||||
            this.id = id;
 | 
			
		||||
@@ -125,8 +125,8 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
 | 
			
		||||
         * @param durability The durability predicate.
 | 
			
		||||
         * @return The tool builder, for further use.
 | 
			
		||||
         */
 | 
			
		||||
        public ToolBuilder consumesDurability(TurtleToolDurability durability) {
 | 
			
		||||
            consumesDurability = durability;
 | 
			
		||||
        public ToolBuilder consumeDurability(TurtleToolDurability durability) {
 | 
			
		||||
            consumeDurability = durability;
 | 
			
		||||
            return this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -159,8 +159,8 @@ public abstract class TurtleUpgradeDataProvider extends UpgradeDataProvider<ITur
 | 
			
		||||
                if (damageMultiplier != null) s.addProperty("damageMultiplier", damageMultiplier);
 | 
			
		||||
                if (breakable != null) s.addProperty("breakable", breakable.location().toString());
 | 
			
		||||
                if (allowEnchantments) s.addProperty("allowEnchantments", true);
 | 
			
		||||
                if (consumesDurability != TurtleToolDurability.NEVER) {
 | 
			
		||||
                    s.addProperty("consumesDurability", consumesDurability.getSerializedName());
 | 
			
		||||
                if (consumeDurability != TurtleToolDurability.NEVER) {
 | 
			
		||||
                    s.addProperty("consumeDurability", consumeDurability.getSerializedName());
 | 
			
		||||
                }
 | 
			
		||||
            }));
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,6 @@ package dan200.computercraft.shared.turtle.upgrades;
 | 
			
		||||
 | 
			
		||||
import dan200.computercraft.api.ComputerCraftTags;
 | 
			
		||||
import dan200.computercraft.api.turtle.*;
 | 
			
		||||
import dan200.computercraft.core.util.Nullability;
 | 
			
		||||
import dan200.computercraft.shared.platform.PlatformHelper;
 | 
			
		||||
import dan200.computercraft.shared.turtle.TurtleUtil;
 | 
			
		||||
import dan200.computercraft.shared.turtle.core.TurtlePlaceCommand;
 | 
			
		||||
@@ -46,31 +45,33 @@ import static net.minecraft.nbt.Tag.TAG_COMPOUND;
 | 
			
		||||
import static net.minecraft.nbt.Tag.TAG_LIST;
 | 
			
		||||
 | 
			
		||||
public class TurtleTool extends AbstractTurtleUpgrade {
 | 
			
		||||
    protected static final TurtleCommandResult UNBREAKABLE = TurtleCommandResult.failure("Cannot break unbreakable block");
 | 
			
		||||
    protected static final TurtleCommandResult INEFFECTIVE = TurtleCommandResult.failure("Cannot break block with this tool");
 | 
			
		||||
    private static final TurtleCommandResult UNBREAKABLE = TurtleCommandResult.failure("Cannot break unbreakable block");
 | 
			
		||||
    private static final TurtleCommandResult INEFFECTIVE = TurtleCommandResult.failure("Cannot break block with this tool");
 | 
			
		||||
 | 
			
		||||
    private static final String TAG_ITEM_TAG = "Tag";
 | 
			
		||||
 | 
			
		||||
    final ItemStack item;
 | 
			
		||||
    final float damageMulitiplier;
 | 
			
		||||
    final boolean allowsEnchantments;
 | 
			
		||||
    final TurtleToolDurability consumesDurability;
 | 
			
		||||
    final boolean allowEnchantments;
 | 
			
		||||
    final TurtleToolDurability consumeDurability;
 | 
			
		||||
    final @Nullable TagKey<Block> breakable;
 | 
			
		||||
 | 
			
		||||
    public TurtleTool(
 | 
			
		||||
        ResourceLocation id, String adjective, Item craftItem, ItemStack toolItem, float damageMulitiplier,
 | 
			
		||||
        boolean allowsEnchantments, TurtleToolDurability consumesDurability, @Nullable TagKey<Block> breakable
 | 
			
		||||
        boolean allowEnchantments, TurtleToolDurability consumeDurability, @Nullable TagKey<Block> breakable
 | 
			
		||||
    ) {
 | 
			
		||||
        super(id, TurtleUpgradeType.TOOL, adjective, new ItemStack(craftItem));
 | 
			
		||||
        item = toolItem;
 | 
			
		||||
        this.damageMulitiplier = damageMulitiplier;
 | 
			
		||||
        this.allowsEnchantments = allowsEnchantments;
 | 
			
		||||
        this.consumesDurability = consumesDurability;
 | 
			
		||||
        this.allowEnchantments = allowEnchantments;
 | 
			
		||||
        this.consumeDurability = consumeDurability;
 | 
			
		||||
        this.breakable = breakable;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isItemSuitable(ItemStack stack) {
 | 
			
		||||
        if (consumesDurability == TurtleToolDurability.NEVER && stack.isDamaged()) return false;
 | 
			
		||||
        if (!allowsEnchantments && isEnchanted(stack)) return false;
 | 
			
		||||
        if (consumeDurability == TurtleToolDurability.NEVER && stack.isDamaged()) return false;
 | 
			
		||||
        if (!allowEnchantments && isEnchanted(stack)) return false;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -86,32 +87,34 @@ public class TurtleTool extends AbstractTurtleUpgrade {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CompoundTag getUpgradeData(ItemStack stack) {
 | 
			
		||||
        // Just use the current item's tag.
 | 
			
		||||
        var upgradeData = super.getUpgradeData(stack);
 | 
			
		||||
 | 
			
		||||
        // Store the item's current tag.
 | 
			
		||||
        var itemTag = stack.getTag();
 | 
			
		||||
        return itemTag == null ? new CompoundTag() : itemTag;
 | 
			
		||||
        if (itemTag != null) upgradeData.put(TAG_ITEM_TAG, itemTag);
 | 
			
		||||
 | 
			
		||||
        return upgradeData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public ItemStack getUpgradeItem(CompoundTag upgradeData) {
 | 
			
		||||
        // Copy upgrade data back to the item.
 | 
			
		||||
        var item = super.getUpgradeItem(upgradeData);
 | 
			
		||||
        if (!upgradeData.isEmpty()) item.setTag(upgradeData);
 | 
			
		||||
        var item = super.getUpgradeItem(upgradeData).copy();
 | 
			
		||||
        item.setTag(upgradeData.contains(TAG_ITEM_TAG, TAG_COMPOUND) ? upgradeData.getCompound(TAG_ITEM_TAG).copy() : null);
 | 
			
		||||
        return item;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ItemStack getToolStack(ITurtleAccess turtle, TurtleSide side) {
 | 
			
		||||
        var item = getCraftingItem();
 | 
			
		||||
        var tag = turtle.getUpgradeNBTData(side);
 | 
			
		||||
        if (!tag.isEmpty()) item.setTag(tag);
 | 
			
		||||
        return item.copy();
 | 
			
		||||
        return getUpgradeItem(turtle.getUpgradeNBTData(side));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setToolStack(ITurtleAccess turtle, TurtleSide side, ItemStack stack) {
 | 
			
		||||
        var tag = turtle.getUpgradeNBTData(side);
 | 
			
		||||
        var upgradeData = turtle.getUpgradeNBTData(side);
 | 
			
		||||
 | 
			
		||||
        var useDurability = switch (consumesDurability) {
 | 
			
		||||
        var useDurability = switch (consumeDurability) {
 | 
			
		||||
            case NEVER -> false;
 | 
			
		||||
            case WHEN_ENCHANTED -> isEnchanted(tag);
 | 
			
		||||
            case WHEN_ENCHANTED ->
 | 
			
		||||
                upgradeData.contains(TAG_ITEM_TAG, TAG_COMPOUND) && isEnchanted(upgradeData.getCompound(TAG_ITEM_TAG));
 | 
			
		||||
            case ALWAYS -> true;
 | 
			
		||||
        };
 | 
			
		||||
        if (!useDurability) return;
 | 
			
		||||
@@ -128,13 +131,12 @@ public class TurtleTool extends AbstractTurtleUpgrade {
 | 
			
		||||
        var itemTag = stack.getTag();
 | 
			
		||||
 | 
			
		||||
        // Early return if the item hasn't changed to avoid redundant syncs with the client.
 | 
			
		||||
        if ((itemTag == null && tag.isEmpty()) || Objects.equals(itemTag, tag)) return;
 | 
			
		||||
        if (Objects.equals(itemTag, upgradeData.get(TAG_ITEM_TAG))) return;
 | 
			
		||||
 | 
			
		||||
        if (itemTag == null) {
 | 
			
		||||
            tag.getAllKeys().clear();
 | 
			
		||||
            upgradeData.remove(TAG_ITEM_TAG);
 | 
			
		||||
        } else {
 | 
			
		||||
            for (var key : itemTag.getAllKeys()) tag.put(key, Nullability.assertNonNull(itemTag.get(key)));
 | 
			
		||||
            tag.getAllKeys().removeIf(x -> !itemTag.contains(x));
 | 
			
		||||
            upgradeData.put(TAG_ITEM_TAG, itemTag);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        turtle.updateUpgradeNBTData(side);
 | 
			
		||||
 
 | 
			
		||||
@@ -29,8 +29,8 @@ public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<Turtl
 | 
			
		||||
        var toolItem = GsonHelper.getAsItem(object, "item");
 | 
			
		||||
        var craftingItem = GsonHelper.getAsItem(object, "craftingItem", toolItem);
 | 
			
		||||
        var damageMultiplier = GsonHelper.getAsFloat(object, "damageMultiplier", 3.0f);
 | 
			
		||||
        var allowsEnchantments = GsonHelper.getAsBoolean(object, "allowsEnchantments", false);
 | 
			
		||||
        var consumesDurability = TurtleToolDurability.CODEC.byName(GsonHelper.getAsString(object, "consumesDurability", null), TurtleToolDurability.NEVER);
 | 
			
		||||
        var allowEnchantments = GsonHelper.getAsBoolean(object, "allowEnchantments", false);
 | 
			
		||||
        var consumeDurability = TurtleToolDurability.CODEC.byName(GsonHelper.getAsString(object, "consumeDurability", null), TurtleToolDurability.NEVER);
 | 
			
		||||
 | 
			
		||||
        TagKey<Block> breakable = null;
 | 
			
		||||
        if (object.has("breakable")) {
 | 
			
		||||
@@ -38,7 +38,7 @@ public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<Turtl
 | 
			
		||||
            breakable = TagKey.create(Registries.BLOCK, tag);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new TurtleTool(id, adjective, craftingItem, new ItemStack(toolItem), damageMultiplier, allowsEnchantments, consumesDurability, breakable);
 | 
			
		||||
        return new TurtleTool(id, adjective, craftingItem, new ItemStack(toolItem), damageMultiplier, allowEnchantments, consumeDurability, breakable);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
@@ -62,8 +62,8 @@ public final class TurtleToolSerialiser implements TurtleUpgradeSerialiser<Turtl
 | 
			
		||||
        RegistryWrappers.writeId(buffer, RegistryWrappers.ITEMS, upgrade.getCraftingItem().getItem());
 | 
			
		||||
        buffer.writeItem(upgrade.item);
 | 
			
		||||
        buffer.writeFloat(upgrade.damageMulitiplier);
 | 
			
		||||
        buffer.writeBoolean(upgrade.allowsEnchantments);
 | 
			
		||||
        buffer.writeEnum(upgrade.consumesDurability);
 | 
			
		||||
        buffer.writeBoolean(upgrade.allowEnchantments);
 | 
			
		||||
        buffer.writeEnum(upgrade.consumeDurability);
 | 
			
		||||
        buffer.writeBoolean(upgrade.breakable != null);
 | 
			
		||||
        if (upgrade.breakable != null) buffer.writeResourceLocation(upgrade.breakable.location());
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,13 @@ package dan200.computercraft.gametest
 | 
			
		||||
import dan200.computercraft.api.detail.BasicItemDetailProvider
 | 
			
		||||
import dan200.computercraft.api.detail.VanillaDetailRegistries
 | 
			
		||||
import dan200.computercraft.api.lua.ObjectArguments
 | 
			
		||||
import dan200.computercraft.api.turtle.ITurtleUpgrade
 | 
			
		||||
import dan200.computercraft.api.turtle.TurtleSide
 | 
			
		||||
import dan200.computercraft.api.upgrades.UpgradeData
 | 
			
		||||
import dan200.computercraft.core.apis.PeripheralAPI
 | 
			
		||||
import dan200.computercraft.gametest.api.*
 | 
			
		||||
import dan200.computercraft.gametest.core.TestHooks
 | 
			
		||||
import dan200.computercraft.impl.TurtleUpgrades
 | 
			
		||||
import dan200.computercraft.mixin.gametest.GameTestHelperAccessor
 | 
			
		||||
import dan200.computercraft.mixin.gametest.GameTestInfoAccessor
 | 
			
		||||
import dan200.computercraft.shared.ModRegistry
 | 
			
		||||
@@ -30,6 +34,7 @@ import net.minecraft.world.entity.EntityType
 | 
			
		||||
import net.minecraft.world.entity.item.PrimedTnt
 | 
			
		||||
import net.minecraft.world.item.ItemStack
 | 
			
		||||
import net.minecraft.world.item.Items
 | 
			
		||||
import net.minecraft.world.item.enchantment.Enchantments
 | 
			
		||||
import net.minecraft.world.level.block.Blocks
 | 
			
		||||
import net.minecraft.world.level.block.FenceBlock
 | 
			
		||||
import net.minecraft.world.level.block.state.properties.BlockStateProperties
 | 
			
		||||
@@ -174,6 +179,85 @@ class Turtle_Test {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Digging using a pickaxe with `{"consumesDurability": "always"}`, consumes durability.
 | 
			
		||||
     */
 | 
			
		||||
    @GameTest
 | 
			
		||||
    fun Dig_consume_durability(helper: GameTestHelper) = helper.sequence {
 | 
			
		||||
        thenOnComputer { turtle.dig(Optional.empty()).await() }
 | 
			
		||||
        thenExecute {
 | 
			
		||||
            helper.assertBlockPresent(Blocks.AIR, BlockPos(2, 2, 3))
 | 
			
		||||
            helper.assertContainerExactly(BlockPos(2, 2, 2), listOf(ItemStack(Items.COBBLESTONE)))
 | 
			
		||||
 | 
			
		||||
            val turtle = helper.getBlockEntity(BlockPos(2, 2, 2), ModRegistry.BlockEntities.TURTLE_NORMAL.get()).access
 | 
			
		||||
            val upgrade = turtle.getUpgrade(TurtleSide.LEFT)
 | 
			
		||||
            assertEquals(TurtleUpgrades.instance().get("cctest:wooden_pickaxe"), upgrade, "Upgrade is a wooden pickaxe")
 | 
			
		||||
 | 
			
		||||
            val item = ItemStack(Items.WOODEN_PICKAXE)
 | 
			
		||||
            item.damageValue = 1
 | 
			
		||||
            helper.assertUpgradeItem(item, turtle.getUpgradeWithData(TurtleSide.LEFT)!!)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Digging using a pickaxe with `{"consumesDurability": "always"}` and no durability removes the tool.
 | 
			
		||||
     */
 | 
			
		||||
    @GameTest
 | 
			
		||||
    fun Dig_breaks_tool(helper: GameTestHelper) = helper.sequence {
 | 
			
		||||
        thenOnComputer { turtle.dig(Optional.empty()).await() }
 | 
			
		||||
        thenExecute {
 | 
			
		||||
            helper.assertBlockPresent(Blocks.AIR, BlockPos(2, 2, 3))
 | 
			
		||||
            helper.assertContainerExactly(BlockPos(2, 2, 2), listOf(ItemStack(Items.COBBLESTONE)))
 | 
			
		||||
 | 
			
		||||
            val turtle = helper.getBlockEntity(BlockPos(2, 2, 2), ModRegistry.BlockEntities.TURTLE_NORMAL.get()).access
 | 
			
		||||
            val upgrade = turtle.getUpgrade(TurtleSide.LEFT)
 | 
			
		||||
            assertEquals(null, upgrade, "Upgrade broke")
 | 
			
		||||
 | 
			
		||||
            helper.assertUpgradeItem(
 | 
			
		||||
                ItemStack(Items.WOODEN_PICKAXE),
 | 
			
		||||
                UpgradeData.ofDefault(TurtleUpgrades.instance().get("cctest:wooden_pickaxe")),
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Digging using a silk-touch enchanted pickaxe with `{"consumesDurability": "when_enchanted"}`, consumes durability
 | 
			
		||||
     * uses silk touch.
 | 
			
		||||
     */
 | 
			
		||||
    @GameTest
 | 
			
		||||
    fun Dig_enchanted_consume_durability(helper: GameTestHelper) = helper.sequence {
 | 
			
		||||
        thenOnComputer { turtle.dig(Optional.empty()).await() }
 | 
			
		||||
        thenExecute {
 | 
			
		||||
            helper.assertBlockPresent(Blocks.AIR, BlockPos(2, 2, 3))
 | 
			
		||||
            helper.assertContainerExactly(BlockPos(2, 2, 2), listOf(ItemStack(Items.STONE)))
 | 
			
		||||
 | 
			
		||||
            val turtle = helper.getBlockEntity(BlockPos(2, 2, 2), ModRegistry.BlockEntities.TURTLE_NORMAL.get()).access
 | 
			
		||||
            val upgrade = turtle.getUpgrade(TurtleSide.LEFT)
 | 
			
		||||
            assertEquals(
 | 
			
		||||
                TurtleUpgrades.instance().get("cctest:netherite_pickaxe"),
 | 
			
		||||
                upgrade,
 | 
			
		||||
                "Upgrade is a netherite pickaxe",
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            val item = ItemStack(Items.NETHERITE_PICKAXE)
 | 
			
		||||
            item.damageValue = 1
 | 
			
		||||
            item.enchant(Enchantments.SILK_TOUCH, 1)
 | 
			
		||||
            item.setRepairCost(1)
 | 
			
		||||
 | 
			
		||||
            helper.assertUpgradeItem(item, turtle.getUpgradeWithData(TurtleSide.LEFT)!!)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun GameTestHelper.assertUpgradeItem(expected: ItemStack, upgrade: UpgradeData<ITurtleUpgrade>) {
 | 
			
		||||
        if (!ItemStack.matches(expected, upgrade.upgradeItem)) {
 | 
			
		||||
            fail("Invalid upgrade item\n Expected => ${expected.tag}\n    Actual => ${upgrade.upgradeItem.tag}")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!ItemStack.matches(ItemStack(expected.item), upgrade.upgrade.craftingItem)) {
 | 
			
		||||
            fail("Original upgrade item has changed (is now ${upgrade.upgrade.craftingItem})")
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks turtles can place monitors
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "type": "computercraft:tool",
 | 
			
		||||
    "item": "minecraft:netherite_pickaxe",
 | 
			
		||||
    "allowEnchantments": true,
 | 
			
		||||
    "consumeDurability": "when_enchanted"
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,5 @@
 | 
			
		||||
{
 | 
			
		||||
    "type": "computercraft:tool",
 | 
			
		||||
    "item": "minecraft:wooden_pickaxe",
 | 
			
		||||
    "consumeDurability": "always"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										138
									
								
								projects/common/src/testMod/resources/data/cctest/structures/turtle_test.dig_breaks_tool.snbt
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								projects/common/src/testMod/resources/data/cctest/structures/turtle_test.dig_breaks_tool.snbt
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
{
 | 
			
		||||
    DataVersion: 3218,
 | 
			
		||||
    size: [5, 5, 5],
 | 
			
		||||
    data: [
 | 
			
		||||
        {pos: [0, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 2], state: "computercraft:turtle_normal{facing:south,waterlogged:false}", nbt: {ComputerId: 1, Fuel: 80, Items: [], Label: "turtle_test.dig_breaks_tool", LeftUpgrade: "cctest:wooden_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 58}}, On: 1b, Owner: {LowerId: -6876936588741668278L, Name: "Dev", UpperId: 4039158846114182220L}, Slot: 0, id: "computercraft:turtle_normal"}},
 | 
			
		||||
        {pos: [2, 1, 3], state: "minecraft:stone"},
 | 
			
		||||
        {pos: [2, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 4], state: "minecraft:air"}
 | 
			
		||||
    ],
 | 
			
		||||
    entities: [],
 | 
			
		||||
    palette: [
 | 
			
		||||
        "minecraft:polished_andesite",
 | 
			
		||||
        "minecraft:stone",
 | 
			
		||||
        "minecraft:air",
 | 
			
		||||
        "computercraft:turtle_normal{facing:south,waterlogged:false}"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										138
									
								
								projects/common/src/testMod/resources/data/cctest/structures/turtle_test.dig_consume_durability.snbt
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								projects/common/src/testMod/resources/data/cctest/structures/turtle_test.dig_consume_durability.snbt
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
{
 | 
			
		||||
    DataVersion: 3218,
 | 
			
		||||
    size: [5, 5, 5],
 | 
			
		||||
    data: [
 | 
			
		||||
        {pos: [0, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 2], state: "computercraft:turtle_normal{facing:south,waterlogged:false}", nbt: {ComputerId: 1, Fuel: 80, Items: [], Label: "turtle_test.dig_consume_durability", LeftUpgrade: "cctest:wooden_pickaxe", On: 1b, Owner: {LowerId: -6876936588741668278L, Name: "Dev", UpperId: 4039158846114182220L}, Slot: 0, id: "computercraft:turtle_normal"}},
 | 
			
		||||
        {pos: [2, 1, 3], state: "minecraft:stone"},
 | 
			
		||||
        {pos: [2, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 4], state: "minecraft:air"}
 | 
			
		||||
    ],
 | 
			
		||||
    entities: [],
 | 
			
		||||
    palette: [
 | 
			
		||||
        "minecraft:polished_andesite",
 | 
			
		||||
        "minecraft:stone",
 | 
			
		||||
        "minecraft:air",
 | 
			
		||||
        "computercraft:turtle_normal{facing:south,waterlogged:false}"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,138 @@
 | 
			
		||||
{
 | 
			
		||||
    DataVersion: 3337,
 | 
			
		||||
    size: [5, 5, 5],
 | 
			
		||||
    data: [
 | 
			
		||||
        {pos: [0, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [1, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [2, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [3, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 0], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 1], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 2], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 3], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [4, 0, 4], state: "minecraft:polished_andesite"},
 | 
			
		||||
        {pos: [0, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 1, 2], state: "computercraft:turtle_normal{facing:south,waterlogged:false}", nbt: {ComputerId: 1, Fuel: 80, Items: [], Label: "turtle_test.dig_enchanted_consume_durability", LeftUpgrade: "cctest:netherite_pickaxe", LeftUpgradeNbt: {Tag: {Damage: 0, Enchantments: [{id: "minecraft:silk_touch", lvl: 1s}], RepairCost: 1}}, On: 1b, Owner: {LowerId: -6876936588741668278L, Name: "Dev", UpperId: 4039158846114182220L}, Slot: 0, id: "computercraft:turtle_normal"}},
 | 
			
		||||
        {pos: [2, 1, 3], state: "minecraft:stone"},
 | 
			
		||||
        {pos: [2, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 1, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 2, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 3, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [0, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [1, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [2, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [3, 4, 4], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 0], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 1], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 2], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 3], state: "minecraft:air"},
 | 
			
		||||
        {pos: [4, 4, 4], state: "minecraft:air"}
 | 
			
		||||
    ],
 | 
			
		||||
    entities: [],
 | 
			
		||||
    palette: [
 | 
			
		||||
        "minecraft:polished_andesite",
 | 
			
		||||
        "minecraft:stone",
 | 
			
		||||
        "minecraft:air",
 | 
			
		||||
        "computercraft:turtle_normal{facing:south,waterlogged:false}"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user