diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 27e7cd533e..d8b692a029 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ minecraft = "1.21.1" neoForge = "21.1.238" anvillib = "2.0.0+snapshot.649" -ageratum = "0.0.1+build.121" +ageratum = "0.0.1+build.137" jei = "19.50.0.414" jade = "15.10.5+neoforge" diff --git a/src/generated/resources/assets/anvilcraft/lang/en_ud.json b/src/generated/resources/assets/anvilcraft/lang/en_ud.json index dcc9c4cf39..8a711e1751 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_ud.json @@ -1323,7 +1323,6 @@ "gui.anvilcraft.category.charger_charging.power_consume": "%s :ǝɯnsuoƆ ɹǝʍoԀ", "gui.anvilcraft.category.charger_charging.power_produce": "%s :ǝɔnpoɹԀ ɹǝʍoԀ", "gui.anvilcraft.category.charger_charging.time": "puoɔǝs %s :ǝɯᴉ⟘", - "gui.anvilcraft.category.container_upgrade": "ǝpɐɹᵷd∩ ɹǝuᴉɐʇuoƆ", "gui.anvilcraft.category.container_upgrade.drop_on_top": "ɹǝuᴉɐʇuoɔ ǝɥʇ oʇuo sɯǝʇᴉ ǝsǝɥʇ doɹᗡ", "gui.anvilcraft.category.container_upgrade.requires_expansion": "suoᴉsuɐdxƎ ɹossǝɹdɯoɔ-ɹǝʌO ǝɔɐdS ߈ sǝɹᴉnbǝᴚ", "gui.anvilcraft.category.container_upgrade.strike": "ɹǝuᴉɐʇuoɔ ǝɥʇ ǝpɐɹᵷdn oʇ ꞁᴉʌuɐ uɐ ɥʇᴉʍ ǝʞᴉɹʇS", diff --git a/src/generated/resources/assets/anvilcraft/lang/en_us.json b/src/generated/resources/assets/anvilcraft/lang/en_us.json index 632f5a4f21..dc3409bc36 100644 --- a/src/generated/resources/assets/anvilcraft/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft/lang/en_us.json @@ -1323,7 +1323,6 @@ "gui.anvilcraft.category.charger_charging.power_consume": "Power Consume: %s", "gui.anvilcraft.category.charger_charging.power_produce": "Power Produce: %s", "gui.anvilcraft.category.charger_charging.time": "Time: %s second", - "gui.anvilcraft.category.container_upgrade": "Container Upgrade", "gui.anvilcraft.category.container_upgrade.drop_on_top": "Drop these items onto the container", "gui.anvilcraft.category.container_upgrade.requires_expansion": "Requires 4 Space Over-compressor Expansions", "gui.anvilcraft.category.container_upgrade.strike": "Strike with an anvil to upgrade the container", diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/StoragePortConsolidatorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/StoragePortConsolidatorBlockEntity.java index 27ccf86fc0..990f9ff7ba 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/StoragePortConsolidatorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/StoragePortConsolidatorBlockEntity.java @@ -4,10 +4,10 @@ import dev.dubhe.anvilcraft.api.StoragePortManager; import dev.dubhe.anvilcraft.api.fluid.IFluidHandlerHolder; import dev.dubhe.anvilcraft.api.itemhandler.IItemHandlerHolder; -import dev.dubhe.anvilcraft.api.itemhandler.unlimited.UnlimitedItemStacksResourceHandler.ResourceKey; import dev.dubhe.anvilcraft.block.AbstractStoragePortBlock; import dev.dubhe.anvilcraft.block.entity.storage.StorageBlockEntity; import dev.dubhe.anvilcraft.item.AnvilHammerItem; +import dev.dubhe.anvilcraft.saved.storage.Storages; import it.unimi.dsi.fastutil.objects.Object2LongMap; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.minecraft.core.BlockPos; @@ -27,21 +27,20 @@ import java.util.ArrayList; import java.util.Comparator; -import java.util.HashSet; import java.util.List; import java.util.Objects; -import java.util.Set; import java.util.UUID; import javax.annotation.Nullable; /** * 仓储端口整合器方块实体。 * - *

沿面相邻的仓储端口收集整个端口阵列,把各端口可取库存的并集作为物品能力暴露给外部物流, + *

沿面相邻的仓储端口收集整个端口阵列,把各端口缓存的并集作为物品能力暴露给外部物流, * 并把相连的流体端口按「一个端口一格」暴露为流体能力,读写都直通该端口的储罐; * 相连关系只穿过端口,不跨集装箱 / 存储站,因此集装箱两侧没有直接相连的端口阵列不会互通。 - * 整合器输入始终进入各端口缓存,标记仓储输出槽仅暴露同种物品的一份数量, - * 按槽位遍历(如 {@link ItemHandlerHelper#insertItem})即可填满整个阵列的缓存。

+ * 标记端口的缓存排在未标记端口之前,按槽位插入只访问对应缓存槽, + * 按槽位遍历(如 {@link ItemHandlerHelper#insertItem})即可填满整个阵列的缓存。 + * 未连接其他端口且直接接触唯一仓储核心时,物品能力直接访问该仓储的全部槽位。

* *

右键为「塞入」:单击把手持物品塞入,双击把身上对应端口标记的物品全部塞入; * 手持流体容器时先尝试倒入相连的、已在存放同种流体的流体端口。

@@ -65,6 +64,8 @@ public class StoragePortConsolidatorBlockEntity extends BlockEntity /** 整条链归属的存储 ID(登记进 {@link StoragePortManager} 用);null 表示未接上核心 */ @Nullable private UUID storageId = null; + @Nullable + private BlockPos directCorePos; private int validateCountdown; public StoragePortConsolidatorBlockEntity(BlockEntityType type, BlockPos pos, BlockState blockState) { @@ -229,6 +230,11 @@ private void refreshLinks() { this.fluidPorts.add(fluidPort.getBlockPos()); } } + BlockPos directCore = linked.ports().isEmpty() ? linked.core() : null; + if (!Objects.equals(this.directCorePos, directCore)) { + this.directCorePos = directCore; + this.invalidateCapabilities(); + } this.updateRegistration(linked.core()); } @@ -256,6 +262,21 @@ private void updateRegistration(@Nullable BlockPos core) { } } + @Nullable + private IItemHandler getDirectStorageHandler() { + if (this.isRemoved() || this.level == null || this.level.isClientSide + || this.directCorePos == null || !this.level.isLoaded(this.directCorePos)) { + return null; + } + if (this.level.getBlockEntity(this.directCorePos) instanceof StorageBlockEntity storage) { + UUID id = storage.getId(); + if (id != null) { + return Storages.get().getOrCreate(id, storage.getStorageType().clazz()).getItems(); + } + } + return null; + } + @Nullable private StoragePortBlockEntity portAt(int index) { if (this.level == null || index < 0 || index >= this.ports.size()) { @@ -307,32 +328,18 @@ private List itemPorts() { return result; } - private int itemSlots(StoragePortBlockEntity port, Set marks) { - int slots = port.getItemHandler().getSlots(); - if (slots > StoragePortBlockEntity.BUFFER_SLOTS && this.storageId != null && port.isConnectedTo(this.storageId) - && !marks.add(ResourceKey.of(port.getMarkedItem()))) { - return StoragePortBlockEntity.BUFFER_SLOTS; - } - return slots; - } - - private @Nullable PortSlot itemSlot(int slot) { + @Nullable + private StoragePortBlockEntity bufferPort(int slot) { if (slot < 0) { return null; } - Set marks = new HashSet<>(); - for (StoragePortBlockEntity port : this.itemPorts()) { - IItemHandler handler = port.getItemHandler(); - int slots = this.itemSlots(port, marks); - if (slot < slots) { - return new PortSlot(handler, slot); - } - slot -= slots; - } - return null; + List itemPorts = this.itemPorts(); + int index = slot / StoragePortBlockEntity.BUFFER_SLOTS; + return index < itemPorts.size() ? itemPorts.get(index) : null; } - private record PortSlot(IItemHandler handler, int slot) { + private static int bufferSlot(int slot) { + return slot % StoragePortBlockEntity.BUFFER_SLOTS; } @Override @@ -360,46 +367,63 @@ public void setRemoved() { this.storageId = null; } - /** 每个端口保留缓存槽,同一仓库同种标记的输出槽仅暴露一次。 */ + /** 优先访问直连仓储,否则映射相连端口缓存并优先向标记端口插入。 */ private class ConsolidatedItemHandler implements IItemHandler { @Override public int getSlots() { - int slots = 0; - Set marks = new HashSet<>(); - for (StoragePortBlockEntity port : StoragePortConsolidatorBlockEntity.this.itemPorts()) { - slots += StoragePortConsolidatorBlockEntity.this.itemSlots(port, marks); - } - return slots; + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + return storage != null ? storage.getSlots() + : StoragePortConsolidatorBlockEntity.this.itemPorts().size() * StoragePortBlockEntity.BUFFER_SLOTS; } @Override public ItemStack getStackInSlot(int slot) { - PortSlot target = StoragePortConsolidatorBlockEntity.this.itemSlot(slot); - return target == null ? ItemStack.EMPTY : target.handler().getStackInSlot(target.slot()); + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + if (storage != null) { + return storage.getStackInSlot(slot); + } + var port = StoragePortConsolidatorBlockEntity.this.bufferPort(slot); + return port == null ? ItemStack.EMPTY : port.getBuffer().getStackInSlot(bufferSlot(slot)); } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - PortSlot target = StoragePortConsolidatorBlockEntity.this.itemSlot(slot); - return target == null ? stack : target.handler().insertItem(target.slot(), stack, simulate); + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + if (storage != null) { + return storage.insertItem(slot, stack, simulate); + } + var port = StoragePortConsolidatorBlockEntity.this.bufferPort(slot); + return port == null ? stack : port.getBuffer().insertItem(bufferSlot(slot), stack, simulate); } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - PortSlot target = StoragePortConsolidatorBlockEntity.this.itemSlot(slot); - return target == null ? ItemStack.EMPTY : target.handler().extractItem(target.slot(), amount, simulate); + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + if (storage != null) { + return storage.extractItem(slot, amount, simulate); + } + var port = StoragePortConsolidatorBlockEntity.this.bufferPort(slot); + return port == null ? ItemStack.EMPTY : port.getBuffer().extractItem(bufferSlot(slot), amount, simulate); } @Override public int getSlotLimit(int slot) { - PortSlot target = StoragePortConsolidatorBlockEntity.this.itemSlot(slot); - return target == null ? 0 : target.handler().getSlotLimit(target.slot()); + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + if (storage != null) { + return storage.getSlotLimit(slot); + } + var port = StoragePortConsolidatorBlockEntity.this.bufferPort(slot); + return port == null ? 0 : port.getBuffer().getSlotLimit(bufferSlot(slot)); } @Override public boolean isItemValid(int slot, ItemStack stack) { - PortSlot target = StoragePortConsolidatorBlockEntity.this.itemSlot(slot); - return target != null && target.handler().isItemValid(target.slot(), stack); + IItemHandler storage = StoragePortConsolidatorBlockEntity.this.getDirectStorageHandler(); + if (storage != null) { + return storage.isItemValid(slot, stack); + } + var port = StoragePortConsolidatorBlockEntity.this.bufferPort(slot); + return port != null && port.getBuffer().isItemValid(bufferSlot(slot), stack); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/data/lang/JeiLang.java b/src/main/java/dev/dubhe/anvilcraft/data/lang/JeiLang.java index 43a3c5cf50..bc5c13f1f8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/data/lang/JeiLang.java +++ b/src/main/java/dev/dubhe/anvilcraft/data/lang/JeiLang.java @@ -88,7 +88,6 @@ public static void init(RegistrumLangProvider provider) { provider.add("gui.anvilcraft.category.beacon_conversion.activate", "Use this item to activate beacon"); provider.add("gui.anvilcraft.category.beacon_conversion.beacon_base", "Use this block as beacon base"); - provider.add("gui.anvilcraft.category.container_upgrade", "Container Upgrade"); provider.add("gui.anvilcraft.category.container_upgrade.drop_on_top", "Drop these items onto the container"); provider.add("gui.anvilcraft.category.container_upgrade.strike", "Strike with an anvil to upgrade the container"); provider.add("gui.anvilcraft.category.use_item_on_block", "Use Item on Block"); diff --git a/src/main/java/dev/dubhe/anvilcraft/entity/IonocraftEntity.java b/src/main/java/dev/dubhe/anvilcraft/entity/IonocraftEntity.java index 2f46d4e6ab..9a1dea2fc6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/entity/IonocraftEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/entity/IonocraftEntity.java @@ -1,12 +1,14 @@ package dev.dubhe.anvilcraft.entity; import dev.dubhe.anvilcraft.api.power.DynamicPowerComponent; +import dev.dubhe.anvilcraft.api.power.IPowerComponent; import dev.dubhe.anvilcraft.api.power.PowerGrid; import dev.dubhe.anvilcraft.api.power.SimplePowerGrid; import dev.dubhe.anvilcraft.client.support.PowerGridSupport; import dev.dubhe.anvilcraft.init.ModParticles; import dev.dubhe.anvilcraft.init.entity.ModEntities; import dev.dubhe.anvilcraft.init.item.ModItems; +import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.util.RandomSource; @@ -20,6 +22,9 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.BooleanOp; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.OnlyIn; import org.jetbrains.annotations.Nullable; @@ -27,12 +32,16 @@ import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import static net.minecraft.world.entity.vehicle.Boat.canVehicleCollide; public class IonocraftEntity extends VehicleEntity { public static final DynamicPowerComponent.PowerConsumption CONSUMPTION = new DynamicPowerComponent.PowerConsumption(2); + private static final double ASCENT_GAP = 0.01; + private static final int ASCENT_DELAY_TICKS = 4; private final DynamicPowerComponent component; + private int ascentDelay; public IonocraftEntity(Level level, Vec3 pos) { super(ModEntities.IONOCRAFT.get(), level); @@ -72,6 +81,7 @@ protected void defineSynchedData(SynchedEntityData.Builder builder) { @Override public void tick() { this.setDeltaMovement(this.getDeltaMovement().multiply(0.8, 0.8, 0.8)); + this.updateAscentDelay(); if (!level().isClientSide) { PowerGrid powerGrid = PowerGrid.findPowerGridContains(level(), this.getPowerSupplyingBoundingBox()).orElse(null); PowerGrid findSmaller = PowerGrid.findPowerGridContains(level(), this.getBoundingBox()).orElse(null); @@ -87,11 +97,18 @@ public void tick() { this.setDeltaMovement(this.getDeltaMovement().add(0, -0.01, 0)); } } + if (powerGrid != null) { + this.limitGridAscent(powerGrid.getComponents().stream().map(IPowerComponent::getShape)); + } } else { if (this.clientCompute()) { this.spawnExhaustParticles(); } } + if (this.ascentDelay > 0 && this.getDeltaMovement().y > 0) { + Vec3 motion = this.getDeltaMovement(); + this.setDeltaMovement(motion.x, 0, motion.z); + } this.move(MoverType.SELF, this.getDeltaMovement()); super.tick(); List list = this.level().getEntities( @@ -108,6 +125,16 @@ public void tick() { } } + private void updateAscentDelay() { + if (this.ascentDelay == 0) { + return; + } + AABB box = this.getBoundingBox(); + double ascent = getBlockAscent(box, ASCENT_GAP, + this.level().getBlockCollisions(this, box.expandTowards(0, ASCENT_GAP * 2, 0))); + this.ascentDelay = ascent > 1.0E-7 ? this.ascentDelay - 1 : ASCENT_DELAY_TICKS; + } + @OnlyIn(Dist.CLIENT) private Optional clientFindPowerGridContains(AABB aabb) { Collection powerGrids = PowerGridSupport.getGridMap().values(); @@ -123,21 +150,19 @@ private Optional clientFindPowerGridContains(AABB aabb) { private boolean clientCompute() { SimplePowerGrid powerGrid = this.clientFindPowerGridContains(this.getPowerSupplyingBoundingBox()).orElse(null); SimplePowerGrid findSmaller = this.clientFindPowerGridContains(this.getBoundingBox()).orElse(null); + boolean working = powerGrid != null && !powerGrid.isOverloaded(); if (findSmaller == null && powerGrid != null) { - if (powerGrid.isOverloaded()) { + if (!working) { this.setDeltaMovement(this.getDeltaMovement().add(0, -0.01, 0)); - return false; } - return true; } else { - if (powerGrid != null && !powerGrid.isOverloaded()) { - this.setDeltaMovement(this.getDeltaMovement().add(0, 0.04, 0)); - return true; - } else { - this.setDeltaMovement(this.getDeltaMovement().add(0, -0.01, 0)); - return false; - } + this.setDeltaMovement(this.getDeltaMovement().add(0, working ? 0.04 : -0.01, 0)); + } + if (powerGrid != null) { + this.limitGridAscent(powerGrid.getPowerComponentInfoList().stream() + .map(info -> new AABB(info.pos()).inflate(info.range()))); } + return working; } @OnlyIn(Dist.CLIENT) @@ -155,10 +180,49 @@ private void spawnExhaustParticles() { ); } + private void limitGridAscent(Stream ranges) { + Vec3 motion = this.getDeltaMovement(); + if (motion.y > 0) { + AABB box = this.getBoundingBox().expandTowards(motion.x, 0, motion.z); + this.setDeltaMovement(motion.x, getGridAscent(box, motion.y, ranges), motion.z); + } + } + + static double getGridAscent(AABB box, double ascent, Stream ranges) { + AABB probe = new AABB(box.minX, box.maxY, box.minZ, box.maxX, box.maxY + ascent + ASCENT_GAP, box.maxZ); + VoxelShape uncovered = Shapes.create(probe); + for (AABB range : ranges.filter(probe::intersects).toList()) { + uncovered = Shapes.join(uncovered, Shapes.create(range), BooleanOp.ONLY_FIRST); + if (uncovered.isEmpty()) { + return ascent; + } + } + return Math.max(0, Math.min(ascent, uncovered.min(Direction.Axis.Y) - box.maxY - ASCENT_GAP)); + } + + static double getBlockAscent(AABB box, double ascent, Iterable collisions) { + return Math.max(0, Shapes.collide(Direction.Axis.Y, box, collisions, ascent + ASCENT_GAP) - ASCENT_GAP); + } + @Override public void move(MoverType type, Vec3 motion) { + if (motion.y > 0) { + AABB box = this.getBoundingBox().expandTowards(motion.x, 0, motion.z); + double ascent = getBlockAscent(box, motion.y, + this.level().getBlockCollisions(this, box.expandTowards(0, motion.y + ASCENT_GAP, 0))); + if (ascent < motion.y - 1.0E-7) { + this.ascentDelay = ASCENT_DELAY_TICKS; + motion = new Vec3(motion.x, ascent, motion.z); + Vec3 velocity = this.getDeltaMovement(); + this.setDeltaMovement(velocity.x, Math.min(velocity.y, ascent), velocity.z); + } + } + double previousY = this.getY(); super.move(type, motion); - if (this.getDeltaMovement().y == 0) return; + double movedY = this.getY() - previousY; + if (movedY == 0) { + return; + } List list = this.level().getEntities( this, this.getBoundingBox().expandTowards(0, 1F, 0), @@ -166,10 +230,12 @@ public void move(MoverType type, Vec3 motion) { ); if (!list.isEmpty()) { for (Entity entity : list) { - if (entity instanceof IonocraftEntity) continue; + if (entity instanceof IonocraftEntity) { + continue; + } entity.setDeltaMovement( entity.getDeltaMovement().x, - entity.getDeltaMovement().y > 0 ? motion.y : entity.getDeltaMovement().y + motion.y * 2.5, + entity.getDeltaMovement().y > 0 ? movedY : entity.getDeltaMovement().y + movedY * 2.5, entity.getDeltaMovement().z ); } diff --git a/src/main/java/dev/dubhe/anvilcraft/event/anvil/AnvilEventListener.java b/src/main/java/dev/dubhe/anvilcraft/event/anvil/AnvilEventListener.java index bbc7153e48..3686640d03 100644 --- a/src/main/java/dev/dubhe/anvilcraft/event/anvil/AnvilEventListener.java +++ b/src/main/java/dev/dubhe/anvilcraft/event/anvil/AnvilEventListener.java @@ -22,7 +22,6 @@ import dev.dubhe.anvilcraft.recipe.anvil.outcome.DamageAnvil; import dev.dubhe.anvilcraft.recipe.anvil.procedural.ProceduralProcessStepManager; import dev.dubhe.anvilcraft.recipe.anvil.util.FishTankRecipes; -import dev.dubhe.anvilcraft.util.AnvilUtil; import dev.dubhe.anvilcraft.util.BlockMiningEffect; import dev.dubhe.anvilcraft.util.BreakBlockUtil; import dev.dubhe.anvilcraft.util.TriggerUtil; @@ -35,6 +34,7 @@ import net.minecraft.world.entity.ExperienceOrb; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.FallingBlockEntity; +import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -196,7 +196,21 @@ private static void brokeBlock(Level level, BlockPos pos, AnvilEvent.OnLand even } List drops = BreakBlockUtil.drop(serverLevel, pos, miningEffect); - AnvilUtil.dropItems(drops, level, pos.getCenter()); + Vec3 dropPos = pos.getCenter(); + for (ItemStack drop : drops) { + if (drop.isEmpty()) { + continue; + } + int maxStackSize = drop.getMaxStackSize(); + for (int remaining = drop.getCount(); remaining > 0; remaining -= maxStackSize) { + ItemEntity item = new ItemEntity( + level, dropPos.x, dropPos.y, dropPos.z, + drop.copyWithCount(Math.min(remaining, maxStackSize)), 0d, 0d, 0d + ); + item.anvilcraft$setIsAdsorbable(true); + level.addFreshEntity(item); + } + } level.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); } diff --git a/src/main/java/dev/dubhe/anvilcraft/init/block/ModBlocks.java b/src/main/java/dev/dubhe/anvilcraft/init/block/ModBlocks.java index b933796e4f..d13907b968 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/block/ModBlocks.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/block/ModBlocks.java @@ -1336,7 +1336,7 @@ public class ModBlocks { public static final BlockEntry BLOCK_PLACER = REGISTRUM.block("block_placer", BlockPlacerBlock::new) .simpleItem() .initialProperties(() -> Blocks.IRON_BLOCK) - .properties(properties -> properties.noOcclusion().isValidSpawn(Blocks::never)) + .properties(properties -> properties.noOcclusion().isValidSpawn(Blocks::never).explosionResistance(15F)) .tag(BlockTags.MINEABLE_WITH_PICKAXE) .blockstate(DataGenUtil::noExtraModelOrState) .recipe(RegistrumBlockRecipeLoader::blockPlacer) diff --git a/src/main/java/dev/dubhe/anvilcraft/init/entity/ModEntities.java b/src/main/java/dev/dubhe/anvilcraft/init/entity/ModEntities.java index 2e058c216e..cfa8df0ce7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/entity/ModEntities.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/entity/ModEntities.java @@ -83,7 +83,7 @@ public class ModEntities { public static final EntityEntry IONOCRAFT = AnvilCraft.REGISTRUM .entity("ionocraft", IonocraftEntity::new, MobCategory.MISC) - .properties(it -> it.sized(0.75f, 0.75f) + .properties(it -> it.sized(0.98f, 0.98f) .eyeHeight(0.5625F) .clientTrackingRange(10) ).renderer(() -> IonocraftRenderer::new) diff --git a/src/main/java/dev/dubhe/anvilcraft/integration/jei/AnvilCraftJeiPlugin.java b/src/main/java/dev/dubhe/anvilcraft/integration/jei/AnvilCraftJeiPlugin.java index 662e0e2f48..88085d3bf7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/integration/jei/AnvilCraftJeiPlugin.java +++ b/src/main/java/dev/dubhe/anvilcraft/integration/jei/AnvilCraftJeiPlugin.java @@ -16,7 +16,6 @@ import dev.dubhe.anvilcraft.integration.jei.category.AnvilCollisionCraftCategory; import dev.dubhe.anvilcraft.integration.jei.category.BeaconConversionCategory; import dev.dubhe.anvilcraft.integration.jei.category.ChargerChargingCategory; -import dev.dubhe.anvilcraft.integration.jei.category.ContainerUpgradeCategory; import dev.dubhe.anvilcraft.integration.jei.category.DecayCategory; import dev.dubhe.anvilcraft.integration.jei.category.EnergyWeaponCategory; import dev.dubhe.anvilcraft.integration.jei.category.FluidReactionCategory; @@ -51,7 +50,6 @@ import dev.dubhe.anvilcraft.integration.jei.category.multiblock.MultiBlockCraftingCategory; import dev.dubhe.anvilcraft.integration.jei.handlers.GhostIngredientHandler; import dev.dubhe.anvilcraft.integration.jei.recipe.BeaconConversionRecipe; -import dev.dubhe.anvilcraft.integration.jei.recipe.ContainerUpgradeRecipe; import dev.dubhe.anvilcraft.integration.jei.recipe.DecayRecipe; import dev.dubhe.anvilcraft.integration.jei.recipe.MeshRecipeGroup; import dev.dubhe.anvilcraft.integration.jei.recipe.MineralFountainJeiRecipe; @@ -141,8 +139,6 @@ public class AnvilCraftJeiPlugin implements IModPlugin { public static final RecipeType BEACON_CONVERSION = createRecipeType("beacon_conversion", BeaconConversionRecipe.class); public static final RecipeType DECAY = createRecipeType("decay", DecayRecipe.class); - public static final RecipeType CONTAINER_UPGRADE = - createRecipeType("container_upgrade", ContainerUpgradeRecipe.class); public static final RecipeType> BLOCK_COMPRESS = createRecipeHolderType("block_compress"); @@ -247,7 +243,6 @@ public void registerRecipes(IRecipeRegistration registration) { ProceduralProcessCategory.registerRecipes(registration); EnergyWeaponCategory.registerRecipes(registration); MineralFountainCategory.registerRecipes(registration); - ContainerUpgradeCategory.registerRecipes(registration); UseItemOnBlockCategory.registerRecipes(registration); } @@ -299,7 +294,6 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { ProceduralProcessCategory.registerRecipeCatalysts(registration); EnergyWeaponCategory.registerRecipeCatalysts(registration); MineralFountainCategory.registerRecipeCatalysts(registration); - ContainerUpgradeCategory.registerRecipeCatalysts(registration); registration.addRecipeCatalyst(new ItemStack(ModBlocks.BATCH_CRAFTER), RecipeTypes.CRAFTING); @@ -351,7 +345,6 @@ public void registerCategories(IRecipeCategoryRegistration registration) { registration.addRecipeCategories(new ProceduralProcessCategory(guiHelper)); registration.addRecipeCategories(new EnergyWeaponCategory(guiHelper)); registration.addRecipeCategories(new MineralFountainCategory(guiHelper)); - registration.addRecipeCategories(new ContainerUpgradeCategory(guiHelper)); registration.addRecipeCategories(new UseItemOnBlockCategory(guiHelper)); } diff --git a/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/ContainerUpgradeCategory.java b/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/ContainerUpgradeCategory.java deleted file mode 100644 index ad3b5ff419..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/ContainerUpgradeCategory.java +++ /dev/null @@ -1,215 +0,0 @@ -package dev.dubhe.anvilcraft.integration.jei.category; - -import dev.dubhe.anvilcraft.block.container.storage.LargeCrateBlock; -import dev.dubhe.anvilcraft.block.container.storage.ShulkerContainerBlock; -import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; -import dev.dubhe.anvilcraft.block.state.OpenedCube3x3PartHalf; -import dev.dubhe.anvilcraft.client.support.RenderSupport; -import dev.dubhe.anvilcraft.init.block.ModBlocks; -import dev.dubhe.anvilcraft.integration.jei.AnvilCraftJeiPlugin; -import dev.dubhe.anvilcraft.integration.jei.recipe.ContainerUpgradeRecipe; -import dev.dubhe.anvilcraft.integration.jei.util.JeiBlockIngredientUtil; -import dev.dubhe.anvilcraft.integration.jei.util.JeiRenderHelper; -import mezz.jei.api.gui.ITickTimer; -import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; -import mezz.jei.api.gui.drawable.IDrawable; -import mezz.jei.api.gui.ingredient.IRecipeSlotsView; -import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder; -import mezz.jei.api.helpers.IGuiHelper; -import mezz.jei.api.recipe.IFocusGroup; -import mezz.jei.api.recipe.RecipeIngredientRole; -import mezz.jei.api.recipe.RecipeType; -import mezz.jei.api.recipe.category.IRecipeCategory; -import mezz.jei.api.registration.IRecipeCatalystRegistration; -import mezz.jei.api.registration.IRecipeRegistration; -import net.minecraft.ChatFormatting; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Blocks; -import org.jetbrains.annotations.Nullable; - -public class ContainerUpgradeCategory implements IRecipeCategory { - public static final int WIDTH = 162; - public static final int HEIGHT = 64; - public static final int NETHERITE_BLOCK_COUNT = 6; - public static final int HYPERCUBE_COUNT = 16; - - private final IDrawable icon; - private final IDrawable slotDefault; - private final IDrawable arrowIn; - private final IDrawable arrowOutputFromBelow; - private final ITickTimer timer; - private final Component title; - private final Component dropOnTopTooltip; - private final Component strikeTooltip; - private final Component requiresExpansion; - - public ContainerUpgradeCategory(IGuiHelper helper) { - this.icon = helper.createDrawableItemStack(ModBlocks.SHULKER_CONTAINER.asStack()); - this.slotDefault = JeiRenderHelper.getSlotDefault(helper); - this.arrowIn = JeiRenderHelper.getArrowInput(helper); - this.arrowOutputFromBelow = JeiRenderHelper.getArrowOutputFromBelow(helper); - this.timer = helper.createTickTimer(30, 60, true); - this.title = Component.translatable("gui.anvilcraft.category.container_upgrade"); - this.dropOnTopTooltip = - Component.translatable("gui.anvilcraft.category.container_upgrade.drop_on_top") - .withStyle(ChatFormatting.GOLD); - this.strikeTooltip = - Component.translatable("gui.anvilcraft.category.container_upgrade.strike") - .withStyle(ChatFormatting.GOLD); - this.requiresExpansion = - Component.translatable("gui.anvilcraft.category.container_upgrade.requires_expansion") - .withStyle(ChatFormatting.GOLD); - } - - @Override - public RecipeType getRecipeType() { - return AnvilCraftJeiPlugin.CONTAINER_UPGRADE; - } - - @Override - public Component getTitle() { - return this.title; - } - - @Override - public int getWidth() { - return WIDTH; - } - - @Override - public int getHeight() { - return HEIGHT; - } - - @Override - public @Nullable IDrawable getIcon() { - return this.icon; - } - - @Override - public void setRecipe( - IRecipeLayoutBuilder builder, ContainerUpgradeRecipe recipe, IFocusGroup focuses) { - switch (recipe.type()) { - case CRATE_TO_CONTAINER -> { - builder.addSlot(RecipeIngredientRole.INPUT, 9, 8) - .addItemStack(ModBlocks.SPACE_OVERCOMPRESSOR.asStack()) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.dropOnTopTooltip)); - builder.addSlot(RecipeIngredientRole.INPUT, 31, 8) - .addItemStack(new ItemStack(Blocks.NETHERITE_BLOCK, NETHERITE_BLOCK_COUNT)) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.dropOnTopTooltip)); - JeiBlockIngredientUtil.addSlot( - builder, - RecipeIngredientRole.INPUT, - "crate", - 69, - 32, - 25, - 25, - ModBlocks.LARGE_CRATE.get() - ); - builder.addSlot(RecipeIngredientRole.OUTPUT, 128, 8) - .addItemStack(ModBlocks.SHULKER_CONTAINER.asStack()) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.strikeTooltip)); - } - case CONTAINER_TO_STATION -> { - builder.addSlot(RecipeIngredientRole.INPUT, 9, 8) - .addItemStack(ModBlocks.SINGULARITY_CRYSTAL.asStack()) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.dropOnTopTooltip)); - builder.addSlot(RecipeIngredientRole.INPUT, 31, 8) - .addItemStack(new ItemStack(ModBlocks.HYPERCUBE, HYPERCUBE_COUNT)) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.dropOnTopTooltip)); - JeiBlockIngredientUtil.addSlot( - builder, - RecipeIngredientRole.INPUT, - "container", - 69, - 32, - 25, - 25, - ModBlocks.SHULKER_CONTAINER.get() - ); - builder.addSlot(RecipeIngredientRole.OUTPUT, 128, 8) - .addItemStack(ModBlocks.HYPERDIMENSION_STORAGE_STATION.asStack()) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.strikeTooltip)); - builder.addSlot(RecipeIngredientRole.INPUT, 31, 41) - .addItemStack(ModBlocks.SPACE_OVERCOMPRESSOR.asStack(4)) - .addRichTooltipCallback((recipeSlotView, tooltip) -> tooltip.add(this.requiresExpansion)); - } - default -> {} - } - } - - @Override - public void createRecipeExtras( - IRecipeExtrasBuilder builder, ContainerUpgradeRecipe recipe, IFocusGroup focuses) { - JeiBlockIngredientUtil.suppressHoverOverlays(builder); - } - - @Override - public void draw( - ContainerUpgradeRecipe recipe, - IRecipeSlotsView recipeSlotsView, - GuiGraphics guiGraphics, - double mouseX, - double mouseY) { - float anvilYOffset = JeiRenderHelper.getAnvilAnimationOffset(this.timer); - RenderSupport.renderBlock( - guiGraphics, - Blocks.ANVIL.defaultBlockState(), - 81, - 22 + anvilYOffset, - 20, - 12, - RenderSupport.SINGLE_BLOCK); - - switch (recipe.type()) { - case CRATE_TO_CONTAINER -> RenderSupport.renderBlock( - guiGraphics, - ModBlocks.LARGE_CRATE.getDefaultState().setValue(LargeCrateBlock.HALF, Cube3x3PartHalf.MID_CENTER), - 81, - 44, - 10, - 8, - RenderSupport.SINGLE_BLOCK); - case CONTAINER_TO_STATION -> { - RenderSupport.renderBlock( - guiGraphics, - ModBlocks.SHULKER_CONTAINER.getDefaultState() - .setValue(ShulkerContainerBlock.HALF, OpenedCube3x3PartHalf.MID_CENTER), - 81, - 44, - 10, - 8, - RenderSupport.SINGLE_BLOCK); - this.slotDefault.draw(guiGraphics, 30, 40); - } - default -> {} - } - - this.arrowIn.draw(guiGraphics, 52, 30); - this.arrowOutputFromBelow.draw(guiGraphics, 94, 29); - - this.slotDefault.draw(guiGraphics, 8, 7); - this.slotDefault.draw(guiGraphics, 30, 7); - this.slotDefault.draw(guiGraphics, 127, 7); - } - - public static void registerRecipes(IRecipeRegistration registration) { - registration.addRecipes( - AnvilCraftJeiPlugin.CONTAINER_UPGRADE, - ContainerUpgradeRecipe.getAllRecipes() - ); - } - - public static void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { - AnvilCraftJeiPlugin.addAnvilProcessingCatalysts(registration, AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(ModBlocks.LARGE_CRATE.asStack(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(ModBlocks.SPACE_OVERCOMPRESSOR.asStack(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(Blocks.NETHERITE_BLOCK.asItem().getDefaultInstance(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(ModBlocks.SHULKER_CONTAINER.asStack(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(ModBlocks.SINGULARITY_CRYSTAL.asStack(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - registration.addRecipeCatalyst(ModBlocks.HYPERCUBE.asStack(), AnvilCraftJeiPlugin.CONTAINER_UPGRADE); - } -} diff --git a/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/anvil/ItemInjectCategory.java b/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/anvil/ItemInjectCategory.java index adb554e736..905d1277a2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/anvil/ItemInjectCategory.java +++ b/src/main/java/dev/dubhe/anvilcraft/integration/jei/category/anvil/ItemInjectCategory.java @@ -3,6 +3,11 @@ import dev.anvilcraft.lib.v2.util.predicate.ChanceItemStack; import dev.dubhe.anvilcraft.AnvilCraft; import dev.dubhe.anvilcraft.block.GiantAnvilBlock; +import dev.dubhe.anvilcraft.block.container.storage.HyperdimensionStorageStationBlock; +import dev.dubhe.anvilcraft.block.container.storage.LargeCrateBlock; +import dev.dubhe.anvilcraft.block.container.storage.ShulkerContainerBlock; +import dev.dubhe.anvilcraft.block.state.Cube3x3PartHalf; +import dev.dubhe.anvilcraft.block.state.OpenedCube3x3PartHalf; import dev.dubhe.anvilcraft.client.support.RenderSupport; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItems; @@ -49,6 +54,9 @@ public class ItemInjectCategory implements IRecipeCategory tooltip.add(Component.translatable( + "gui.anvilcraft.category.container_upgrade.requires_expansion" + ).withStyle(ChatFormatting.GOLD))); + } if (transcendiumTier >= 0) { addTranscendiumOutputSlots(builder, recipe, transcendiumTier); } else { @@ -172,14 +187,21 @@ public void draw( .orElse(input.getFirst()) ); boolean giantAnvil = renderedState.getBlock() instanceof GiantAnvilBlock; - int inputScale = giantAnvil ? 8 : JeiBlockIngredientUtil.getRenderablePreviewScale(renderedState, 12); - int inputY = giantAnvil ? 44 : 40; + boolean containerUpgrade = isContainerUpgrade(recipeHolder); + if (containerUpgrade) { + renderedState = getContainerPreviewState(renderedState); + } + int inputScale = giantAnvil || containerUpgrade ? 8 : JeiBlockIngredientUtil.getRenderablePreviewScale(renderedState, 12); + int inputY = giantAnvil || containerUpgrade ? 44 : 40; RenderSupport.renderBlock(guiGraphics, renderedState, 81, inputY, 10, inputScale, RenderSupport.SINGLE_BLOCK); this.arrowIn.draw(guiGraphics, 54, 30); this.arrowOut.draw(guiGraphics, 92, 29); JeiSlotUtil.drawDefaultInputSlots(guiGraphics, this.slotDefault, recipe.getInputItems().size()); + if (recipeHolder.id().equals(CONTAINER_TO_STATION)) { + this.slotDefault.draw(guiGraphics, 30, 42); + } int transcendiumTier = getTranscendiumTier(recipeHolder); if (transcendiumTier >= 0) { this.drawTranscendiumOutputSlots(guiGraphics, transcendiumTier); @@ -197,7 +219,10 @@ public void draw( if (!recipe.getResultBlocks().isEmpty()) { BlockState resultState = JeiBlockIngredientUtil.getRenderablePreviewState(recipe.getFirstResultBlock().state()); - int resultScale = JeiBlockIngredientUtil.getRenderablePreviewScale(resultState, 12); + if (containerUpgrade) { + resultState = getContainerPreviewState(resultState); + } + int resultScale = containerUpgrade ? 8 : JeiBlockIngredientUtil.getRenderablePreviewScale(resultState, 12); int resultY = transcendiumTier >= 0 ? 45 : recipe.getResultItems().isEmpty() ? 30 : 49; @@ -227,6 +252,16 @@ public void getTooltip( List states = recipe.getFirstInputBlock().constructStatesForRender(); if (!states.isEmpty()) { tooltip.addAll(TooltipUtil.tooltip(states.getFirst().getBlock())); + if (ItemInjectCategory.isContainerUpgrade(recipeHolder)) { + tooltip.add(Component.translatable("gui.anvilcraft.category.container_upgrade.drop_on_top") + .withStyle(ChatFormatting.GOLD)); + tooltip.add(Component.translatable("gui.anvilcraft.category.container_upgrade.strike") + .withStyle(ChatFormatting.GOLD)); + } + if (recipeHolder.id().equals(ItemInjectCategory.CONTAINER_TO_STATION)) { + tooltip.add(Component.translatable("gui.anvilcraft.category.container_upgrade.requires_expansion") + .withStyle(ChatFormatting.GOLD)); + } } } } @@ -343,11 +378,51 @@ public static void registerRecipes(IRecipeRegistration registration) { JeiRecipeUtil.getRecipeHoldersFromType(ModRecipeTypes.ITEM_INJECT_TYPE.get()) ); recipes.addAll(getTranscendiumRecipes()); + recipes.addAll(getContainerUpgradeRecipes()); registration.addRecipes( AnvilCraftJeiPlugin.ITEM_INJECT, recipes); } + private static BlockState getContainerPreviewState(BlockState state) { + return switch (state.getBlock()) { + case LargeCrateBlock ignored -> state.setValue(LargeCrateBlock.HALF, Cube3x3PartHalf.MID_CENTER); + case ShulkerContainerBlock ignored -> state.setValue(ShulkerContainerBlock.HALF, OpenedCube3x3PartHalf.MID_CENTER); + case HyperdimensionStorageStationBlock ignored -> { + yield state.setValue(HyperdimensionStorageStationBlock.HALF, Cube3x3PartHalf.MID_CENTER); + } + default -> throw new IllegalArgumentException("Unsupported container preview: " + state); + }; + } + + private static boolean isContainerUpgrade(RecipeHolder recipeHolder) { + ResourceLocation id = recipeHolder.id(); + return id.equals(ItemInjectCategory.CRATE_TO_CONTAINER) || id.equals(ItemInjectCategory.CONTAINER_TO_STATION); + } + + private static List> getContainerUpgradeRecipes() { + return List.of( + new RecipeHolder<>( + ItemInjectCategory.CRATE_TO_CONTAINER, + ItemInjectRecipe.builder() + .inputBlock(ModBlocks.LARGE_CRATE) + .requires(ModBlocks.SPACE_OVERCOMPRESSOR) + .requires(Blocks.NETHERITE_BLOCK, 6) + .resultBlock(ModBlocks.SHULKER_CONTAINER) + .buildRecipe() + ), + new RecipeHolder<>( + ItemInjectCategory.CONTAINER_TO_STATION, + ItemInjectRecipe.builder() + .inputBlock(ModBlocks.SHULKER_CONTAINER) + .requires(ModBlocks.SINGULARITY_CRYSTAL) + .requires(ModBlocks.HYPERCUBE, 16) + .resultBlock(ModBlocks.HYPERDIMENSION_STORAGE_STATION) + .buildRecipe() + ) + ); + } + private static List> getTranscendiumRecipes() { List> recipes = new ArrayList<>(); for (int index = 0; index < 5; index++) { @@ -379,5 +454,11 @@ private static List> getTranscendiumRecipes() { public static void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { AnvilCraftJeiPlugin.addAnvilProcessingCatalysts(registration, AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(ModBlocks.LARGE_CRATE.asStack(), AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(ModBlocks.SPACE_OVERCOMPRESSOR.asStack(), AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(Blocks.NETHERITE_BLOCK.asItem().getDefaultInstance(), AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(ModBlocks.SHULKER_CONTAINER.asStack(), AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(ModBlocks.SINGULARITY_CRYSTAL.asStack(), AnvilCraftJeiPlugin.ITEM_INJECT); + registration.addRecipeCatalyst(ModBlocks.HYPERCUBE.asStack(), AnvilCraftJeiPlugin.ITEM_INJECT); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/integration/jei/recipe/ContainerUpgradeRecipe.java b/src/main/java/dev/dubhe/anvilcraft/integration/jei/recipe/ContainerUpgradeRecipe.java deleted file mode 100644 index 42865913e5..0000000000 --- a/src/main/java/dev/dubhe/anvilcraft/integration/jei/recipe/ContainerUpgradeRecipe.java +++ /dev/null @@ -1,18 +0,0 @@ -package dev.dubhe.anvilcraft.integration.jei.recipe; - -import com.google.common.collect.ImmutableList; - -public record ContainerUpgradeRecipe(Type type) { - - public enum Type { - CRATE_TO_CONTAINER, - CONTAINER_TO_STATION - } - - public static ImmutableList getAllRecipes() { - return ImmutableList.of( - new ContainerUpgradeRecipe(Type.CRATE_TO_CONTAINER), - new ContainerUpgradeRecipe(Type.CONTAINER_TO_STATION) - ); - } -} diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/000_process/009.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/000_process/009.md index 2ccb062661..956dccc9aa 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/000_process/009.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/000_process/009.md @@ -30,7 +30,7 @@ In the early development of the mod, before fluid pipes existed, independently d - [Click here](../008_recipe/210_netherite_ingot.md) to see the process -- The manual provides an [example machine](../009_machine/201_netherite_block.md) +- The manual provides an [ancient debris machine](../009_machine/202_ancient_debris.md) and a [netherite block machine](../009_machine/203_netherite_block.md) > Consider building a fully automated production line diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/001_basic_minerals.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/001_basic_minerals.md index 201416b6a9..857e8c51cb 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/001_basic_minerals.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/001_basic_minerals.md @@ -29,7 +29,7 @@ navigation: # Cobblestone Generator -- The Source of Everything -You can try the prefab machines provided by this mod: [Cobblestone Generator](../009_machine/002_stone.md) / [Three-Mode Sand Machine](../009_machine/003_sand.md) +You can try the prefab machine provided by this mod: [Three-Mode Sand Machine](../009_machine/003_sand.md) # - Production Line diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/210_netherite_ingot.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/210_netherite_ingot.md index 9aa2145679..8c1332ae6f 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/210_netherite_ingot.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/008_recipe/210_netherite_ingot.md @@ -19,5 +19,5 @@ navigation: -If you don't want to design your own machine, refer to the [machine](../009_machine/201_netherite_block.md) in the manual +If you don't want to design your own machine, refer to the [ancient debris machine](../009_machine/202_ancient_debris.md) and [netherite block machine](../009_machine/203_netherite_block.md) in the manual diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/002_stone.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/002_stone.md deleted file mode 100644 index 4f31f9dad6..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/002_stone.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -navigation: - title: "Resource: Cobblestone Generator" - icon: "minecraft:cobblestone" ---- - -# Resource: Cobblestone Generator - - is very important, so you need to build a cobblestone generator. - -Utilize the [Anvil Block Destruction](../007_struct/000_anvil_processing.md) feature to automatically produce large amounts of - - - - -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height - - -## Diagram - -- All can be replaced with any full opaque block -- All can be replaced with any transparent block diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/003_sand.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/003_sand.md index 7e5dfbff2d..808b70f8e6 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/003_sand.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/003_sand.md @@ -10,22 +10,8 @@ A machine for producing gravel and sand, with a structure similar to the cobbles This three-mode sand-crushing machine can be controlled via levers to switch between producing cobblestone, gravel, or sand. - + -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height +Click a pulse generator in the structure to view its configuration. - -1. The piston 2 blocks to the right is *Switch 1*: the machine master switch -2. Below *Switch 1* is *Switch 2*: when enabled, produces cobblestone; when disabled, activates *Switch 3* -3. To the left of *Switch 1* is *Switch 3*: when enabled, produces sand; when disabled, produces gravel -4. Set the pulse generator behind *Switch 1* to loop mode: emit a 5gt signal every 10gt interval -5. Set the other pulse generator to rising edge mode: 6gt delay, emit a 17gt signal -6. Place a hopper minecart - - -Turn off the *master switch* before adjusting modes - - -- All can be replaced with any full opaque block -- All can be replaced with any transparent block diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/021_crush.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/021_crush.md index 184cedb264..2ca0bd3631 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/021_crush.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/021_crush.md @@ -12,8 +12,6 @@ navigation: If you need higher efficiency, you can simply extend it, or design your own more efficient machine. -## Diagram - @@ -23,7 +21,7 @@ Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust 1. Set the pulse generator to loop mode: emit an 8gt signal every 8gt interval - All can be replaced with any full opaque block -- All can be replaced with any slab +- All can be replaced with any block whose top surface is not a full face - All can be replaced with any anvil diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/022_mesh.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/022_mesh.md index c964f526f5..426e5b027f 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/022_mesh.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/022_mesh.md @@ -10,17 +10,8 @@ navigation: - However, only a portion of the material is used each *meshing* operation, and manually repeating the process is time-consuming and laborious - Below is an example machine for automatic meshing -## Diagram - - + Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height - -1. Set the pulse generator to loop mode: emit a 3gt signal every 5gt interval; drives the piston operation -2. Set the magnetic chute on the chest to filter: meshing material - -- All can be replaced with any full opaque block -- All can be replaced with any slab -- All can be replaced with any anvil diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/101_piezoelectric_crystal.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/101_piezoelectric_crystal.md index 7c558b8e99..9dd6162a3a 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/101_piezoelectric_crystal.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/101_piezoelectric_crystal.md @@ -12,19 +12,34 @@ Output: 4kW per anvil; 32kW total You can further expand upon this foundation. -## Diagram +### Diagram - -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height - - 1. Set the pulse generator to loop mode: emit a 5gt signal every 5gt interval, controlling the anvil drop - All can be replaced with any full opaque block - All can be replaced with any anvil +## Advanced Version + +You can also improve your first generator's efficiency with a few tricks: + +Output: 10kW per anvil; 80kW total + +### Diagram + + + +1. This design uses the boat-impact trick and 0t pulses to make the magnet switch rapidly + +- When an anvil hits a boat within 1 block of the ground, it lands instantly. A flower pot keeps the boat at just the right height within that range. +- A pulse generator emitting a 0gt signal every 4gt makes the magnet switch as fast as possible. + + +You can use these tricks elsewhere to improve your machines' efficiency. + + # Royal Anvil Downward-Bounce Piezoelectric Generator - As you progress further, the power from your first generator will likely become insufficient. It's time to upgrade. @@ -33,15 +48,20 @@ Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust Output: 15kW per anvil; 150kW total -## Diagram - -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height +Resin blocks are as bouncy as slime blocks, but do not stick to adjacent blocks. -1. Set the *pulse generator* next to the piston to rising edge mode: 3gt delay, emit a 3gt signal -2. Set the farther *pulse generator* to loop mode: emit a 9gt signal every 1gt interval +## Advanced Version -- All can be replaced with any full opaque block +Precise timing can greatly improve power output. The machine above is an older design to look over; this is the practical one. + +Output: 75kW per anvil; 300kW total + + + + +You can lengthen the machine to increase its power output. + diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_gem.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_gem.md index 8647ad54a8..a382bc12f8 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_gem.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_gem.md @@ -10,8 +10,6 @@ navigation: -Set the to (Loop Mode | 16gt | 6gt) - . .. @@ -24,19 +22,11 @@ Set the to (Loop Mode | 16gt | 6gt) This machine continuously swaps the work block underneath by pushing and pulling the cauldron, relying on complex and precise timing to achieve high processing speeds. - + + +1. Use a button to switch the copper bulb to its lit state +2. Load *equal quantities* of gem blocks and gems according to the labels -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height +Do not shut down the machine while it is running. Once it finishes, pull the lever down to shut it off. - -1. Use a button to modify the copper bulb so it defaults to the lit state (you can remove the button afterwards) -2. Use the anvil hammer to right-click the front of the cauldron to create an output slot -3. The *dropper* facing the *comparator* should be filled with emerald blocks -4. The farther *dropper* should be filled with an equal amount of gems -5. After loading materials, reset the lever to run -6. Do not shut down during operation. Pull the lever down to stop when finished - -- All can be replaced with any full opaque block -- All can be replaced with any copper bulb -- Ensure the is facing the correct direction diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_netherite_block.md deleted file mode 100644 index b9d9129fd4..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_netherite_block.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -navigation: - title: "Processing: Netherite" - icon: "minecraft:netherite_block" ---- - -# Processing: Netherite - -The following two machines implement [Mass Production of Netherite](../008_recipe/210_netherite_ingot.md) - -## Machine - - - -- Set the to (Loop Mode | 16gt | 0gt) -- All can be replaced with any full opaque block -- Configure the that outputs to output only one at a time (use scroll wheel to adjust quantity) - -![chute](../../textures/netherite_machine.png) - -## Machine - - - -- Fill both barrels with sufficient and -- Set the main loop (controlled by ) to (Loop Mode | 18gt | 2gt) -- Set the for the side to (Rising Edge Mode | 2gt | 50gt) -- Set the for the side to (Rising Edge Mode | 22gt | 30gt) -- Set the for the side to (Rising Edge Mode | 5"90 | 0gt) -- All can be replaced with any full opaque block diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md new file mode 100644 index 0000000000..83e3340e10 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md @@ -0,0 +1,27 @@ +--- +navigation: + title: "Processing: Ancient Debris" + icon: "minecraft:ancient_debris" +--- + +# Processing: Ancient Debris + +These machines handle ancient debris processing for [Mass Production of Netherite](../008_recipe/210_netherite_ingot.md) + +## Machine + + + +- Set the to (Loop Mode | 16gt | 0gt) +- All can be replaced with any full opaque block + +## Advanced Version + + + +This highly efficient machine processes 5 ancient debris blocks per second, making it ideal for stockpiling materials and then producing a large batch of ancient debris. +However, each shutdown ejects and wastes 1 extra netherite scrap. Remember to supply power to the heater before starting the machine! + + +You can also try designing other ancient debris machine layouts. + diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md new file mode 100644 index 0000000000..216151b44d --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md @@ -0,0 +1,25 @@ +--- +navigation: + title: "Processing: Netherite" + icon: "minecraft:netherite_block" +--- + +# Processing: Netherite + +This machine implements [Mass Production of Netherite](../008_recipe/210_netherite_ingot.md) + +## Machine + + + +In Survival mode, replace the two creative crates in the example with regular crates, then fill them with and , respectively.. + +## Advanced Version + + + +This highly efficient machine produces 5 netherite blocks per second, making it ideal for stockpiling materials and then producing a large batch of netherite blocks. Remember to supply power to the heater before starting the machine! + + +You can also try designing other netherite block machine layouts. + diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md index 898d5b85b9..fb39ed2e0a 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md +++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md @@ -8,7 +8,7 @@ navigation: Want an inexhaustible supply of wood? -If you have already seen the Log-to-Diamond Machine, you surely know that in AnvilCraft, wood can be processed into diamonds. +By now, you know that wood can be processed into diamonds in AnvilCraft. Build a **Giant Anvil Tree Farm** like this, and logs will continuously flow into the chest without consuming bone meal. @@ -16,21 +16,24 @@ Build a **Giant Anvil Tree Farm** like this, and logs will continuously flow int 2. Use 's earth-shaking shockwave to destroy large trees 3. Use to collect drops in a wide area -## Diagram - - - - -Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height - + The machine **_must not be rotated_**. Ensure the sapling is in the *northwest corner* of the machine, otherwise the tree cannot grow! -1. set collection radius: 8 -2. Set the on the side of the to filter: Sapling -3. Set the below the to filter: Logs, Sticks +## Advanced Version + + + +This tree farm is wild: it consumes about 90 stacks of bones per hour and produces over 600,000 logs per hour. +Make sure you have an efficient skeleton spawner to supply it, and you will never run out of logs again! + +- The machine has two sections, planting and chopping, each with its own switch. +- The planting switch is the pulse generator at the top. Set it to loop mode to start planting. +- The chopping switch is the lever on the lower level. Turn the lever off to start chopping. +- The machine has no built-in collection for the *logs* and *sticks* it produces. *You need to add your own collection system.* -- All can be replaced with any full opaque block -- All can be replaced with any full block + + The machine **_must not be rotated_**. Ensure the sapling is in the *northwest corner* of the machine, otherwise the tree cannot grow! + diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt index d09af43a75..b45298b68f 100644 Binary files a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt new file mode 100644 index 0000000000..c026163013 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt index 7b6fc397d9..c9e5bace5a 100644 Binary files a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt new file mode 100644 index 0000000000..e0dde691e5 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt deleted file mode 100644 index 01c399dcf4..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt +++ /dev/null @@ -1,75 +0,0 @@ -{ - DataVersion: 3955, - size: [4, 5, 5], - data: [ - {pos: [0, 0, 1], state: "anvilcraft:cursed_gold_block"}, - {pos: [0, 0, 2], state: "anvilcraft:cursed_gold_block"}, - {pos: [0, 0, 3], state: "anvilcraft:cursed_gold_block"}, - {pos: [1, 0, 1], state: "anvilcraft:cursed_gold_block"}, - {pos: [1, 0, 2], state: "anvilcraft:cursed_gold_block"}, - {pos: [1, 0, 3], state: "anvilcraft:cursed_gold_block"}, - {pos: [2, 0, 1], state: "anvilcraft:cursed_gold_block"}, - {pos: [2, 0, 2], state: "anvilcraft:cursed_gold_block"}, - {pos: [2, 0, 3], state: "anvilcraft:cursed_gold_block"}, - {pos: [0, 1, 1], state: "minecraft:chest{facing:north,type:single,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [0, 1, 3], state: "minecraft:note_block{instrument:iron_xylophone,note:1,powered:false}"}, - {pos: [1, 1, 1], state: "anvilcraft:chute{enabled:true,facing:west}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [1, 1, 2], state: "anvilcraft:corrupted_beacon{lit:true}", nbt: {id: "anvilcraft:corrupted_beacon"}}, - {pos: [1, 1, 3], state: "minecraft:observer{facing:east,powered:false}"}, - {pos: [2, 1, 2], state: "anvilcraft:heater{overload:false}", nbt: {id: "anvilcraft:heater"}}, - {pos: [2, 1, 3], state: "minecraft:observer{facing:up,powered:false}"}, - {pos: [3, 1, 3], state: "minecraft:smooth_stone"}, - {pos: [0, 2, 2], state: "minecraft:sticky_piston{extended:true,facing:east}"}, - {pos: [0, 2, 3], state: "minecraft:observer{facing:down,powered:false}"}, - {pos: [1, 2, 2], state: "minecraft:piston_head{facing:east,short:false,type:sticky}"}, - {pos: [1, 2, 3], state: "minecraft:observer{facing:down,powered:false}"}, - {pos: [2, 2, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [2, 2, 2], state: "minecraft:cauldron"}, - {pos: [2, 2, 3], state: "minecraft:observer{facing:north,powered:false}"}, - {pos: [2, 2, 4], state: "minecraft:smooth_stone"}, - {pos: [3, 2, 1], state: "minecraft:dropper{facing:west,triggered:true}", nbt: {Items: [], id: "minecraft:dropper"}}, - {pos: [3, 2, 2], state: "minecraft:dropper{facing:west,triggered:true}", nbt: {Items: [], id: "minecraft:dropper"}}, - {pos: [3, 2, 3], state: "minecraft:comparator{facing:south,mode:compare,powered:true}", nbt: {OutputSignal: 15, id: "minecraft:comparator"}}, - {pos: [3, 2, 4], state: "minecraft:weathered_copper_bulb{lit:true,powered:false}"}, - {pos: [0, 3, 2], state: "minecraft:note_block{instrument:harp,note:2,powered:true}"}, - {pos: [0, 3, 3], state: "minecraft:smooth_stone"}, - {pos: [1, 3, 2], state: "anvilcraft:spectral_anvil{facing:west,powered:false}"}, - {pos: [1, 3, 3], state: "minecraft:observer{facing:down,powered:false}"}, - {pos: [2, 3, 2], state: "anvilcraft:spectral_anvil{facing:west,powered:true}"}, - {pos: [2, 3, 3], state: "minecraft:observer{facing:down,powered:false}"}, - {pos: [3, 3, 4], state: "minecraft:oak_button{face:floor,facing:south,powered:false}"}, - {pos: [0, 4, 2], state: "minecraft:lever{face:floor,facing:west,powered:true}"}, - {pos: [1, 4, 2], state: "anvilcraft:hollow_magnet_block{lit:true,waterlogged:false}"}, - {pos: [1, 4, 3], state: "minecraft:smooth_stone"}, - {pos: [2, 4, 2], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [2, 4, 3], state: "minecraft:smooth_stone"} - ], - entities: [], - palette: [ - "anvilcraft:cursed_gold_block", - "minecraft:note_block{instrument:iron_xylophone,note:1,powered:false}", - "minecraft:observer{facing:east,powered:false}", - "minecraft:observer{facing:up,powered:false}", - "minecraft:smooth_stone", - "minecraft:observer{facing:down,powered:false}", - "minecraft:observer{facing:north,powered:false}", - "minecraft:weathered_copper_bulb{lit:true,powered:false}", - "minecraft:note_block{instrument:harp,note:2,powered:true}", - "minecraft:sticky_piston{extended:true,facing:east}", - "minecraft:piston_head{facing:east,short:false,type:sticky}", - "minecraft:cauldron", - "anvilcraft:spectral_anvil{facing:west,powered:false}", - "anvilcraft:spectral_anvil{facing:west,powered:true}", - "minecraft:oak_button{face:floor,facing:south,powered:false}", - "minecraft:lever{face:floor,facing:west,powered:true}", - "anvilcraft:hollow_magnet_block{lit:true,waterlogged:false}", - "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}", - "minecraft:chest{facing:north,type:single,waterlogged:false}", - "anvilcraft:chute{enabled:true,facing:west}", - "anvilcraft:corrupted_beacon{lit:true}", - "anvilcraft:heater{overload:false}", - "anvilcraft:chute{enabled:true,facing:south}", - "minecraft:dropper{facing:west,triggered:true}", - "minecraft:comparator{facing:south,mode:compare,powered:true}" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt new file mode 100644 index 0000000000..ad3445c593 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt deleted file mode 100644 index f32e8dd938..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt +++ /dev/null @@ -1,41 +0,0 @@ -{ - DataVersion: 3955, - size: [5, 5, 1], - data: [ - {pos: [0, 0, 0], state: "anvilcraft:chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [1, 0, 0], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [2, 0, 0], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [0, 1, 0], state: "minecraft:scaffolding{bottom:false,distance:0,waterlogged:false}"}, - {pos: [1, 1, 0], state: "anvilcraft:magnetic_chute{enabled:true,facing:up}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}}, - {pos: [2, 1, 0], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [3, 1, 0], state: "minecraft:smooth_stone"}, - {pos: [0, 2, 0], state: "minecraft:damaged_anvil{facing:west}"}, - {pos: [1, 2, 0], state: "anvilcraft:simple_chute{enabled:true,facing:west,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [2, 2, 0], state: "minecraft:comparator{facing:west,mode:compare,powered:false}", nbt: {OutputSignal: 0, id: "minecraft:comparator"}}, - {pos: [3, 2, 0], state: "minecraft:repeater{delay:4,facing:west,locked:false,powered:false}"}, - {pos: [4, 2, 0], state: "minecraft:smooth_stone"}, - {pos: [4, 3, 0], state: "minecraft:redstone_torch{lit:true}"}, - {pos: [1, 4, 0], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [2, 4, 0], state: "minecraft:sticky_piston{extended:false,facing:west}"}, - {pos: [3, 4, 0], state: "anvilcraft:pulse_generator{facing:east,powered:false}", nbt: {ExtraData: {Inputting: 1b, OutputMode: 0b, SignalDuration: 3, StartMode: 2b, State: 0b, WaitingTime: 5}, id: "anvilcraft:pulse_generator"}}, - {pos: [4, 4, 0], state: "minecraft:smooth_stone"} - ], - entities: [], - palette: [ - "minecraft:smooth_stone", - "minecraft:sticky_piston{extended:false,facing:west}", - "minecraft:scaffolding{bottom:false,distance:0,waterlogged:false}", - "minecraft:smooth_stone_slab{type:top,waterlogged:false}", - "minecraft:damaged_anvil{facing:west}", - "minecraft:repeater{delay:4,facing:west,locked:false,powered:false}", - "minecraft:redstone_torch{lit:true}", - "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}", - "anvilcraft:chute{enabled:true,facing:east}", - "minecraft:chest{facing:north,type:left,waterlogged:false}", - "minecraft:chest{facing:north,type:right,waterlogged:false}", - "anvilcraft:magnetic_chute{enabled:true,facing:up}", - "anvilcraft:simple_chute{enabled:true,facing:west,tall:false,waterlogged:false}", - "minecraft:comparator{facing:west,mode:compare,powered:false}", - "anvilcraft:pulse_generator{facing:east,powered:false}" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt new file mode 100644 index 0000000000..470cd1d2f5 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt new file mode 100644 index 0000000000..0fa8b0ff3e Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt new file mode 100644 index 0000000000..da608d2883 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt new file mode 100644 index 0000000000..c767127d62 Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt deleted file mode 100644 index 1839ffc145..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt +++ /dev/null @@ -1,130 +0,0 @@ -{ - DataVersion: 3955, - size: [7, 8, 5], - data: [ - {pos: [1, 0, 3], state: "minecraft:smooth_stone"}, - {pos: [2, 0, 3], state: "minecraft:smooth_stone"}, - {pos: [3, 0, 2], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [3, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [4, 0, 2], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:cobblestone"}, {Slot: 1b, count: 64, id: "minecraft:cobblestone"}, {Slot: 2b, count: 64, id: "minecraft:cobblestone"}, {Slot: 3b, count: 64, id: "minecraft:cobblestone"}, {Slot: 4b, count: 64, id: "minecraft:cobblestone"}, {Slot: 5b, count: 51, id: "minecraft:cobblestone"}, {Slot: 6b, count: 64, id: "minecraft:gravel"}, {Slot: 7b, count: 64, id: "minecraft:gravel"}, {Slot: 8b, count: 64, id: "minecraft:gravel"}, {Slot: 9b, count: 64, id: "minecraft:gravel"}, {Slot: 10b, count: 64, id: "minecraft:gravel"}, {Slot: 11b, count: 35, id: "minecraft:gravel"}, {Slot: 12b, count: 64, id: "minecraft:sand"}, {Slot: 13b, count: 1, id: "minecraft:sand"}], id: "minecraft:chest"}}, - {pos: [4, 0, 3], state: "minecraft:smooth_stone"}, - {pos: [5, 0, 3], state: "minecraft:smooth_stone"}, - {pos: [0, 1, 2], state: "minecraft:lever{face:wall,facing:north,powered:true}"}, - {pos: [0, 1, 3], state: "minecraft:smooth_stone"}, - {pos: [1, 1, 2], state: "minecraft:glass"}, - {pos: [1, 1, 3], state: "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}"}, - {pos: [1, 1, 4], state: "minecraft:smooth_stone"}, - {pos: [2, 1, 2], state: "minecraft:glass"}, - {pos: [2, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"}, - {pos: [2, 1, 4], state: "minecraft:smooth_stone"}, - {pos: [3, 1, 2], state: "minecraft:glass"}, - {pos: [3, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"}, - {pos: [3, 1, 4], state: "minecraft:smooth_stone"}, - {pos: [4, 1, 2], state: "minecraft:glass"}, - {pos: [4, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"}, - {pos: [4, 1, 4], state: "minecraft:smooth_stone"}, - {pos: [5, 1, 2], state: "minecraft:glass"}, - {pos: [5, 1, 3], state: "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}"}, - {pos: [5, 1, 4], state: "minecraft:smooth_stone"}, - {pos: [6, 1, 2], state: "minecraft:lever{face:wall,facing:north,powered:true}"}, - {pos: [6, 1, 3], state: "minecraft:smooth_stone"}, - {pos: [1, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"}, - {pos: [1, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"}, - {pos: [1, 2, 3], state: "minecraft:stonecutter{facing:west}"}, - {pos: [2, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"}, - {pos: [2, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"}, - {pos: [2, 2, 3], state: "minecraft:stonecutter{facing:west}"}, - {pos: [3, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"}, - {pos: [3, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"}, - {pos: [3, 2, 3], state: "minecraft:stonecutter{facing:west}"}, - {pos: [4, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"}, - {pos: [4, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"}, - {pos: [4, 2, 3], state: "minecraft:stonecutter{facing:west}"}, - {pos: [5, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"}, - {pos: [5, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"}, - {pos: [5, 2, 3], state: "minecraft:stonecutter{facing:west}"}, - {pos: [0, 3, 2], state: "minecraft:smooth_stone"}, - {pos: [1, 3, 0], state: "minecraft:lever{face:wall,facing:north,powered:true}"}, - {pos: [1, 3, 1], state: "minecraft:smooth_stone"}, - {pos: [1, 3, 2], state: "minecraft:lava{level:4}"}, - {pos: [1, 3, 3], state: "minecraft:cobblestone"}, - {pos: [1, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [2, 3, 1], state: "minecraft:smooth_stone"}, - {pos: [2, 3, 2], state: "minecraft:lava{level:2}"}, - {pos: [2, 3, 3], state: "minecraft:cobblestone"}, - {pos: [2, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [3, 3, 1], state: "minecraft:smooth_stone"}, - {pos: [3, 3, 2], state: "minecraft:lava{level:0}"}, - {pos: [3, 3, 3], state: "minecraft:cobblestone"}, - {pos: [3, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [4, 3, 1], state: "minecraft:smooth_stone"}, - {pos: [4, 3, 2], state: "minecraft:lava{level:2}"}, - {pos: [4, 3, 3], state: "minecraft:cobblestone"}, - {pos: [4, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [5, 3, 1], state: "minecraft:smooth_stone"}, - {pos: [5, 3, 2], state: "minecraft:lava{level:4}"}, - {pos: [5, 3, 3], state: "minecraft:cobblestone"}, - {pos: [5, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [6, 3, 2], state: "minecraft:smooth_stone"}, - {pos: [1, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:15,south:none,west:side}"}, - {pos: [2, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:14,south:none,west:side}"}, - {pos: [3, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:13,south:none,west:side}"}, - {pos: [4, 4, 1], state: "minecraft:redstone_wire{east:up,north:none,power:12,south:none,west:side}"}, - {pos: [5, 4, 1], state: "minecraft:smooth_stone"}, - {pos: [1, 5, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [2, 5, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [3, 5, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [4, 5, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [5, 5, 1], state: "minecraft:redstone_wire{east:side,north:none,power:11,south:none,west:side}"}, - {pos: [5, 5, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [1, 6, 0], state: "minecraft:lever{face:wall,facing:north,powered:true}"}, - {pos: [1, 6, 1], state: "minecraft:smooth_stone"}, - {pos: [1, 6, 2], state: "anvilcraft:pulse_generator{facing:north,powered:false}", nbt: {ExtraData: {Inputting: 1b, OutputMode: 0b, SignalDuration: 5, StartMode: 2b, State: 0b, WaitingTime: 10}, id: "anvilcraft:pulse_generator"}}, - {pos: [1, 6, 3], state: "anvilcraft:magnet_block{lit:false}"}, - {pos: [2, 6, 0], state: "minecraft:lever{face:wall,facing:north,powered:false}"}, - {pos: [2, 6, 1], state: "minecraft:smooth_stone"}, - {pos: [2, 6, 3], state: "anvilcraft:magnet_block{lit:false}"}, - {pos: [3, 6, 1], state: "minecraft:sticky_piston{extended:false,facing:east}"}, - {pos: [3, 6, 3], state: "anvilcraft:magnet_block{lit:false}"}, - {pos: [4, 6, 1], state: "minecraft:smooth_stone"}, - {pos: [4, 6, 3], state: "anvilcraft:magnet_block{lit:false}"}, - {pos: [5, 6, 2], state: "anvilcraft:pulse_generator{facing:south,powered:false}", nbt: {ExtraData: {Inputting: 0b, OutputMode: 0b, SignalDuration: 17, StartMode: 0b, State: 0b, WaitingTime: 6}, id: "anvilcraft:pulse_generator"}}, - {pos: [5, 6, 3], state: "anvilcraft:magnet_block{lit:false}"}, - {pos: [1, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [2, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [3, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [4, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [5, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"} - ], - entities: [], - palette: [ - "minecraft:smooth_stone", - "minecraft:glass", - "minecraft:cobblestone", - "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}", - "anvilcraft:magnet_block{lit:false}", - "minecraft:sticky_piston{extended:false,facing:east}", - "minecraft:lever{face:wall,facing:north,powered:true}", - "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}", - "minecraft:rail{shape:east_west,waterlogged:false}", - "minecraft:sticky_piston{extended:true,facing:south}", - "minecraft:piston_head{facing:south,short:false,type:sticky}", - "minecraft:stonecutter{facing:west}", - "minecraft:lava{level:4}", - "minecraft:lava{level:2}", - "minecraft:lava{level:0}", - "minecraft:redstone_wire{east:side,north:none,power:15,south:none,west:side}", - "minecraft:redstone_wire{east:side,north:none,power:14,south:none,west:side}", - "minecraft:redstone_wire{east:side,north:none,power:13,south:none,west:side}", - "minecraft:redstone_wire{east:up,north:none,power:12,south:none,west:side}", - "minecraft:anvil{facing:east}", - "minecraft:redstone_wire{east:side,north:none,power:11,south:none,west:side}", - "minecraft:lever{face:wall,facing:north,powered:false}", - "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}", - "minecraft:chest{facing:north,type:left,waterlogged:false}", - "anvilcraft:chute{enabled:true,facing:north}", - "minecraft:chest{facing:north,type:right,waterlogged:false}", - "anvilcraft:pulse_generator{facing:north,powered:false}", - "anvilcraft:pulse_generator{facing:south,powered:false}" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt deleted file mode 100644 index 7fea00309e..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt +++ /dev/null @@ -1,131 +0,0 @@ -{ - DataVersion: 3955, - size: [8, 7, 5], - data: [ - {pos: [2, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [2, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [2, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [3, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [3, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [3, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [4, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [4, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [4, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [5, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [5, 0, 2], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [5, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [6, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [6, 0, 2], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [6, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [2, 1, 1], state: "minecraft:stonecutter{facing:south}"}, - {pos: [2, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [2, 1, 3], state: "minecraft:stonecutter{facing:south}"}, - {pos: [3, 1, 1], state: "minecraft:stonecutter{facing:south}"}, - {pos: [3, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [3, 1, 3], state: "minecraft:stonecutter{facing:south}"}, - {pos: [4, 1, 1], state: "minecraft:stonecutter{facing:south}"}, - {pos: [4, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [4, 1, 3], state: "minecraft:stonecutter{facing:south}"}, - {pos: [5, 1, 1], state: "minecraft:stonecutter{facing:south}"}, - {pos: [5, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [5, 1, 3], state: "minecraft:stonecutter{facing:south}"}, - {pos: [6, 1, 1], state: "minecraft:stonecutter{facing:south}"}, - {pos: [6, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"}, - {pos: [6, 1, 3], state: "minecraft:stonecutter{facing:south}"}, - {pos: [1, 2, 2], state: "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}"}, - {pos: [2, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [2, 2, 1], state: "minecraft:cobblestone"}, - {pos: [2, 2, 2], state: "minecraft:lava{level:4}"}, - {pos: [2, 2, 3], state: "minecraft:cobblestone"}, - {pos: [2, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [3, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [3, 2, 1], state: "minecraft:cobblestone"}, - {pos: [3, 2, 2], state: "minecraft:lava{level:2}"}, - {pos: [3, 2, 3], state: "minecraft:cobblestone"}, - {pos: [3, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [4, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [4, 2, 1], state: "minecraft:cobblestone"}, - {pos: [4, 2, 2], state: "minecraft:lava{level:0}"}, - {pos: [4, 2, 3], state: "minecraft:cobblestone"}, - {pos: [4, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [5, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [5, 2, 1], state: "minecraft:cobblestone"}, - {pos: [5, 2, 2], state: "minecraft:lava{level:2}"}, - {pos: [5, 2, 3], state: "minecraft:cobblestone"}, - {pos: [5, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [6, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [6, 2, 1], state: "minecraft:cobblestone"}, - {pos: [6, 2, 2], state: "minecraft:lava{level:4}"}, - {pos: [6, 2, 3], state: "minecraft:cobblestone"}, - {pos: [6, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"}, - {pos: [7, 2, 2], state: "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}"}, - {pos: [2, 4, 1], state: "minecraft:anvil{facing:east}"}, - {pos: [2, 4, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [3, 4, 1], state: "minecraft:anvil{facing:east}"}, - {pos: [3, 4, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [4, 4, 1], state: "minecraft:anvil{facing:east}"}, - {pos: [4, 4, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [5, 4, 1], state: "minecraft:anvil{facing:east}"}, - {pos: [5, 4, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [6, 4, 1], state: "minecraft:anvil{facing:east}"}, - {pos: [6, 4, 3], state: "minecraft:anvil{facing:east}"}, - {pos: [0, 5, 1], state: "minecraft:lever{face:ceiling,facing:north,powered:true}"}, - {pos: [0, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [0, 5, 3], state: "minecraft:smooth_stone"}, - {pos: [1, 5, 1], state: "minecraft:smooth_stone"}, - {pos: [1, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [1, 5, 3], state: "minecraft:smooth_stone"}, - {pos: [2, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [2, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [2, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [3, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [3, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [3, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [4, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [4, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [4, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [5, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [5, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [5, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [6, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [6, 5, 2], state: "minecraft:smooth_stone"}, - {pos: [6, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"}, - {pos: [0, 6, 1], state: "minecraft:smooth_stone"}, - {pos: [0, 6, 2], state: "minecraft:repeater{delay:2,facing:south,locked:false,powered:false}"}, - {pos: [0, 6, 3], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:none,west:none}"}, - {pos: [1, 6, 1], state: "minecraft:redstone_wall_torch{facing:east,lit:false}"}, - {pos: [1, 6, 2], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:none}"}, - {pos: [1, 6, 3], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:none,west:side}"}, - {pos: [2, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [3, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [4, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [5, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [6, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"} - ], - entities: [], - palette: [ - "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}", - "minecraft:cobblestone", - "minecraft:smooth_stone", - "minecraft:stonecutter{facing:south}", - "minecraft:smooth_stone_slab{type:top,waterlogged:false}", - "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}", - "minecraft:lava{level:4}", - "minecraft:lava{level:2}", - "minecraft:lava{level:0}", - "minecraft:anvil{facing:east}", - "minecraft:lever{face:ceiling,facing:north,powered:true}", - "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}", - "minecraft:repeater{delay:2,facing:south,locked:false,powered:false}", - "minecraft:redstone_wire{east:side,north:side,power:0,south:none,west:none}", - "minecraft:redstone_wall_torch{facing:east,lit:false}", - "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:none}", - "minecraft:redstone_wire{east:none,north:side,power:0,south:none,west:side}", - "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}", - "anvilcraft:chute{enabled:true,facing:south}", - "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", - "anvilcraft:chute{enabled:true,facing:north}", - "minecraft:chest{facing:north,type:left,waterlogged:false}", - "minecraft:chest{facing:north,type:right,waterlogged:false}" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt new file mode 100644 index 0000000000..bc7842218c Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt deleted file mode 100644 index c257e02115..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt +++ /dev/null @@ -1,214 +0,0 @@ -{ - DataVersion: 3955, - size: [7, 11, 7], - data: [ - {pos: [0, 0, 0], state: "minecraft:podzol{snowy:false}"}, - {pos: [0, 0, 1], state: "minecraft:podzol{snowy:false}"}, - {pos: [1, 0, 0], state: "minecraft:podzol{snowy:false}"}, - {pos: [1, 0, 1], state: "minecraft:podzol{snowy:false}"}, - {pos: [1, 0, 2], state: "minecraft:smooth_stone"}, - {pos: [1, 0, 3], state: "minecraft:smooth_stone"}, - {pos: [2, 0, 0], state: "anvilcraft:induction_light{axis:y,color:pink,overload:false,powered:false,waterlogged:false}", nbt: {id: "anvilcraft:induction_light"}}, - {pos: [2, 0, 1], state: "minecraft:smooth_stone"}, - {pos: [2, 0, 2], state: "minecraft:smooth_stone"}, - {pos: [4, 0, 3], state: "anvilcraft:chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 1b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:stick"}, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}}, - {pos: [4, 0, 4], state: "minecraft:spruce_log{axis:y}"}, - {pos: [4, 0, 5], state: "minecraft:anvil{facing:east}"}, - {pos: [4, 0, 6], state: "minecraft:spruce_log{axis:y}"}, - {pos: [5, 0, 0], state: "minecraft:chest{facing:east,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [5, 0, 1], state: "minecraft:chest{facing:east,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:spruce_log"}, {Slot: 1b, count: 20, id: "minecraft:stick"}, {Slot: 2b, count: 64, id: "minecraft:spruce_log"}, {Slot: 3b, count: 64, id: "minecraft:spruce_log"}, {Slot: 4b, count: 64, id: "minecraft:spruce_log"}, {Slot: 5b, count: 64, id: "minecraft:spruce_log"}, {Slot: 6b, count: 60, id: "minecraft:spruce_log"}], id: "minecraft:chest"}}, - {pos: [5, 0, 2], state: "anvilcraft:magnetic_chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}}, - {pos: [5, 0, 3], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [5, 0, 4], state: "minecraft:anvil{facing:north}"}, - {pos: [5, 0, 5], state: "anvilcraft:heavy_iron_block"}, - {pos: [5, 0, 6], state: "minecraft:anvil{facing:north}"}, - {pos: [6, 0, 3], state: "minecraft:lava_cauldron"}, - {pos: [6, 0, 4], state: "minecraft:spruce_log{axis:y}"}, - {pos: [6, 0, 5], state: "minecraft:anvil{facing:west}"}, - {pos: [6, 0, 6], state: "minecraft:spruce_log{axis:y}"}, - {pos: [0, 1, 0], state: "minecraft:spruce_sapling{stage:0}"}, - {pos: [0, 1, 1], state: "minecraft:spruce_sapling{stage:0}"}, - {pos: [1, 1, 0], state: "minecraft:spruce_sapling{stage:0}"}, - {pos: [1, 1, 1], state: "minecraft:spruce_sapling{stage:0}"}, - {pos: [1, 1, 2], state: "minecraft:repeater{delay:1,facing:south,locked:false,powered:true}"}, - {pos: [1, 1, 3], state: "minecraft:lever{face:floor,facing:north,powered:true}"}, - {pos: [2, 1, 1], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:side,west:none}"}, - {pos: [2, 1, 2], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:up,west:none}"}, - {pos: [2, 1, 3], state: "minecraft:smooth_stone"}, - {pos: [3, 1, 0], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"}, - {pos: [3, 1, 1], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"}, - {pos: [4, 1, 0], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"}, - {pos: [4, 1, 1], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"}, - {pos: [4, 1, 3], state: "anvilcraft:item_collector{overload:false,powered:false}", nbt: {Cooldown: 2, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, RangeRadius: 3, cd: 2, id: "anvilcraft:item_collector"}}, - {pos: [5, 1, 0], state: "minecraft:chest{facing:east,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}}, - {pos: [5, 1, 1], state: "minecraft:chest{facing:east,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:spruce_sapling"}, {Slot: 1b, count: 33, id: "minecraft:spruce_sapling"}], id: "minecraft:chest"}}, - {pos: [5, 1, 2], state: "anvilcraft:magnetic_chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}}, - {pos: [5, 1, 3], state: "anvilcraft:magnetic_chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 1b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_sapling"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_sapling"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}}, - {pos: [6, 1, 3], state: "anvilcraft:simple_chute{enabled:true,facing:down,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}}, - {pos: [2, 2, 3], state: "minecraft:redstone_wire{east:up,north:side,power:0,south:none,west:none}"}, - {pos: [3, 2, 0], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"}, - {pos: [3, 2, 1], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"}, - {pos: [3, 2, 3], state: "minecraft:smooth_stone"}, - {pos: [4, 2, 0], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"}, - {pos: [4, 2, 1], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"}, - {pos: [3, 3, 0], state: "anvilcraft:magnet_block{lit:true}"}, - {pos: [3, 3, 1], state: "anvilcraft:magnet_block{lit:true}"}, - {pos: [3, 3, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}, - {pos: [4, 3, 0], state: "anvilcraft:magnet_block{lit:true}"}, - {pos: [4, 3, 1], state: "anvilcraft:magnet_block{lit:true}"}, - {pos: [4, 3, 2], state: "minecraft:smooth_stone"}, - {pos: [4, 3, 3], state: "minecraft:smooth_stone"}, - {pos: [4, 4, 0], state: "minecraft:redstone_wire{east:none,north:side,power:13,south:side,west:none}"}, - {pos: [4, 4, 1], state: "minecraft:redstone_wire{east:none,north:side,power:14,south:side,west:none}"}, - {pos: [4, 4, 2], state: "minecraft:redstone_wire{east:none,north:side,power:15,south:side,west:none}"}, - {pos: [4, 4, 3], state: "minecraft:redstone_torch{lit:true}"}, - {pos: [4, 5, 3], state: "minecraft:smooth_stone"}, - {pos: [4, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_wn}"}, - {pos: [4, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_w}"}, - {pos: [4, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_ws}"}, - {pos: [5, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_n}"}, - {pos: [5, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_center}"}, - {pos: [5, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_s}"}, - {pos: [6, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_en}"}, - {pos: [6, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_e}"}, - {pos: [6, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_es}"}, - {pos: [4, 6, 3], state: "minecraft:redstone_torch{lit:false}"}, - {pos: [4, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_wn}"}, - {pos: [4, 6, 5], state: "anvilcraft:giant_anvil{cube:corner,half:mid_w}"}, - {pos: [4, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_ws}"}, - {pos: [5, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_n}"}, - {pos: [5, 6, 5], state: "anvilcraft:giant_anvil{cube:center,half:mid_center}"}, - {pos: [5, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_s}"}, - {pos: [6, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_en}"}, - {pos: [6, 6, 5], state: "anvilcraft:giant_anvil{cube:corner,half:mid_e}"}, - {pos: [6, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_es}"}, - {pos: [4, 7, 3], state: "minecraft:smooth_stone"}, - {pos: [4, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_wn}"}, - {pos: [4, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_w}"}, - {pos: [4, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_ws}"}, - {pos: [5, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_n}"}, - {pos: [5, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_center}"}, - {pos: [5, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_s}"}, - {pos: [6, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_en}"}, - {pos: [6, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_e}"}, - {pos: [6, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_es}"}, - {pos: [4, 8, 3], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:side}"}, - {pos: [4, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [4, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [5, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}, - {pos: [6, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}} - ], - entities: [], - palette: [ - "minecraft:podzol{snowy:false}", - "minecraft:smooth_stone", - "minecraft:spruce_log{axis:y}", - "anvilcraft:heavy_iron_block", - "anvilcraft:magnet_block{lit:true}", - "minecraft:anvil{facing:east}", - "minecraft:anvil{facing:north}", - "minecraft:lava_cauldron", - "minecraft:anvil{facing:west}", - "minecraft:spruce_sapling{stage:0}", - "minecraft:repeater{delay:1,facing:south,locked:false,powered:true}", - "minecraft:lever{face:floor,facing:north,powered:true}", - "minecraft:redstone_wire{east:none,north:side,power:0,south:side,west:none}", - "minecraft:redstone_wire{east:none,north:side,power:0,south:up,west:none}", - "anvilcraft:block_placer{orientation:west_up,triggered:false}", - "minecraft:redstone_wire{east:up,north:side,power:0,south:none,west:none}", - "anvilcraft:spectral_anvil{facing:north,powered:false}", - "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}", - "minecraft:redstone_wire{east:none,north:side,power:13,south:side,west:none}", - "minecraft:redstone_wire{east:none,north:side,power:14,south:side,west:none}", - "minecraft:redstone_wire{east:none,north:side,power:15,south:side,west:none}", - "minecraft:redstone_torch{lit:true}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_wn}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_w}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_ws}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_n}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_center}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_s}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_en}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_e}", - "anvilcraft:giant_anvil{cube:corner,half:bottom_es}", - "minecraft:redstone_torch{lit:false}", - "anvilcraft:giant_anvil{cube:corner,half:mid_wn}", - "anvilcraft:giant_anvil{cube:corner,half:mid_w}", - "anvilcraft:giant_anvil{cube:corner,half:mid_ws}", - "anvilcraft:giant_anvil{cube:corner,half:mid_n}", - "anvilcraft:giant_anvil{cube:center,half:mid_center}", - "anvilcraft:giant_anvil{cube:corner,half:mid_s}", - "anvilcraft:giant_anvil{cube:corner,half:mid_en}", - "anvilcraft:giant_anvil{cube:corner,half:mid_e}", - "anvilcraft:giant_anvil{cube:corner,half:mid_es}", - "anvilcraft:giant_anvil{cube:corner,half:top_wn}", - "anvilcraft:giant_anvil{cube:corner,half:top_w}", - "anvilcraft:giant_anvil{cube:corner,half:top_ws}", - "anvilcraft:giant_anvil{cube:corner,half:top_n}", - "anvilcraft:giant_anvil{cube:corner,half:top_center}", - "anvilcraft:giant_anvil{cube:corner,half:top_s}", - "anvilcraft:giant_anvil{cube:corner,half:top_en}", - "anvilcraft:giant_anvil{cube:corner,half:top_e}", - "anvilcraft:giant_anvil{cube:corner,half:top_es}", - "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:side}", - "anvilcraft:induction_light{axis:y,color:pink,overload:false,powered:false,waterlogged:false}", - "anvilcraft:chute{enabled:true,facing:east}", - "minecraft:chest{facing:east,type:left,waterlogged:false}", - "minecraft:chest{facing:east,type:right,waterlogged:false}", - "anvilcraft:magnetic_chute{enabled:true,facing:north}", - "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", - "anvilcraft:item_collector{overload:false,powered:false}", - "anvilcraft:magnetic_chute{enabled:true,facing:east}", - "anvilcraft:simple_chute{enabled:true,facing:down,tall:false,waterlogged:false}", - "anvilcraft:deflection_ring{facing:up,half:bottom_wn,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_w,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_ws,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_n,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_center,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_s,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_en,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_e,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:bottom_es,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_wn,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_w,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_ws,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_n,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_center,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_s,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_en,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_e,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:mid_es,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_wn,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_w,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_ws,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_n,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_center,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_s,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_en,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_e,overload:false,switch:on}", - "anvilcraft:deflection_ring{facing:up,half:top_es,overload:false,switch:on}" - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt new file mode 100644 index 0000000000..0a6330a95d Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt differ diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md index 8c565e76fc..78476ab1fe 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md @@ -30,7 +30,7 @@ navigation: - [点我](../008_recipe/210_netherite_ingot.md)查看流程 -- 手册提供了[示例机器](../009_machine/201_netherite_block.md) +- 手册提供了[远古残骸机](../009_machine/202_ancient_debris.md)和[下界合金块机](../009_machine/203_netherite_block.md) > 可以考虑做一条全自动产线 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md index 4790112db8..d66532cad8 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md @@ -29,7 +29,7 @@ navigation: # 刷石机——万物之源 -可以试试本模组提供的预制机器:[刷石机](../009_machine/002_stone.md) / [三模沙机](../009_machine/003_sand.md) +可以试试本模组提供的预制机器:[三模沙机](../009_machine/003_sand.md) # -产线 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md index 8424a7dced..7ac334166d 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md @@ -19,5 +19,5 @@ navigation: -如果不想自己设计机器,可以参考手册的[机器](../009_machine/201_netherite_block.md) +如果不想自己设计机器,可以参考手册的[远古残骸机](../009_machine/202_ancient_debris.md)和[下界合金块机](../009_machine/203_netherite_block.md) diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md deleted file mode 100644 index 4332031af0..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -navigation: - title: "资源:刷石机" - icon: "minecraft:cobblestone" ---- - -# 资源:刷石机 - -十分重要,因此需要制作一台刷石机。 - -利用[铁砧破坏](../007_struct/000_anvil_processing.md)的特性,可以自动生产大量 - - - - -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - - -## 图示 - -- 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意透明方块 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md index 50e21e7fc1..af00159ef8 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md @@ -10,22 +10,8 @@ navigation: 接下来这台三模式砸沙机,可以控制拉杆切换产出圆石、沙砾还是沙子 - + -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - - -1. 活塞往右2格,是*1号开关*:机器总开关 -2. *1号开关*下面是*2号开关*:开启则生产圆石;关闭则启用*3号开关* -3. *1号开关*左边是*3号开关*:开启则生产沙子;关闭则生产沙砾 -4. *1号开关*后面的脉冲发生器设置为循环模式:每间隔 10gt 发出长度 5gt 的信号 -5. 脉冲发生器另一个设置为上升沿模式:延迟 6gt 发出长度 17gt 的信号 -6. 放一个漏斗矿车 - - -关闭*总开关*后,再调整模式 - - -- 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意透明方块 \ No newline at end of file +可以点击结构中的脉冲发生器来查看配置 + \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md index bfcccf71ee..b86099c197 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md @@ -12,8 +12,6 @@ navigation: 如果需要更高效率,可以简单地延长,也可以自行设计更高效的机器 -## 图示 - @@ -23,7 +21,7 @@ navigation: 1. 脉冲发生器设置为循环模式:每间隔 8gt 发出长度 8gt 的信号 - 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意台阶 +- 所有 可替换为 任意上表面不完整方块 - 所有 可替换为 任意铁砧 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md index b7c332735e..4a6f28983f 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md @@ -10,17 +10,8 @@ navigation: - 但每次*过筛*只有一部分原料能被使用,手动反复过筛费时又费力 - 下面给出一个自动过筛的示例机器 -## 图示 - - + 左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - -1. 脉冲发生器设置为循环模式:每间隔 5gt 发出长度 3gt 的信号;驱动活塞运行 -2. 箱子上的磁性溜槽设置过滤:过筛原料 - -- 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意台阶 -- 所有 可替换为 任意铁砧 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md index ca50b3dc54..0356e1830f 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md @@ -12,19 +12,34 @@ navigation: 可以在此基础上继续展开 -## 图示 +### 图示 - -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - - 1. 脉冲发生器设置为循环模式:每间隔 5gt 输出信号 5gt,控制铁砧下落 - 所有 可替换为 任意完整不透明方块 - 所有 可替换为 任意铁砧 +## 进阶版 + +第一个发电机也可以用一些小技巧提高发电效率: + +发电量 10kW/个铁砧;共计 80kW + +### 图示 + + + +1. 这里利用了砸船的小技巧和 0t 脉冲能让磁铁快速闪烁的小技巧 + +- 铁砧碰到船时,如果离地面 1格 以内,会瞬间落地,这里利用花盆控制船的高度正好在 1格 内 +- 脉冲发生器每经过 4gt 输出 0gt 信号时,可以让磁铁最快闪烁 + + +你也可以在其它地方使用这些小技巧增加机器的效率 + + # 皇家铁砧下弹压电发电机 - 随着进一步的发展,第一台发电机的电量很可能不够用了,是时候进行升级了 @@ -33,15 +48,20 @@ navigation: 发电量 15kW/个铁砧;共计 150kW -## 图示 - -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 +树脂块也有粘液块一样的弹性,同时不会粘旁边的方块 -1. 活塞边上的*脉冲发生器*设置为上升沿模式:延时 3gt 输出信号 3gt -2. 更远的*脉冲发生器*设置为循环模式:每间隔 1gt 输出信号 9gt +## 进阶版 -- 所有 可替换为 任意完整不透明方块 \ No newline at end of file +可以用一些精妙的时序控制大幅提高发电效率,总之上面那个是老机器看看就行了,这个才是真实用( + +发电量 75kW/个铁砧;共计 300kW + + + + +可以自行加长机器扩展发电量 + \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md index 305ae47b88..1f654b750d 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md @@ -10,8 +10,6 @@ navigation: -设为:循环模式 | 16gt | 6gt - . .. @@ -24,19 +22,11 @@ navigation: 这台机器通过推拉锅来不断切换下方的工作方块,依赖复杂精妙的时序使得加工速度很高。 - + + +1. 使用按钮修改铜灯,使其调整为亮起状态 +2. 按照标记放入*等量*宝石块和宝石 -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - - -1. 使用按钮修改铜灯,使其默认为亮起状态(之后可以把按钮拆了) -2. 使用铁砧锤右键炼药锅正面,创建输出槽 -3. *比较器*朝向的*投掷器*放入绿宝石块 -4. 更远的*投掷器*放入等量宝石 -5. 填入原料后,复位拉杆运行 -6. 运行过程中不可关机,结束后拉下拉杆关机 - -- 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意铜灯 -- 确保 方向正确 +运行过程中不可关机,结束后拉下拉杆关机 + \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md deleted file mode 100644 index 7eb099c30b..0000000000 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -navigation: - title: "§6加工:下界合金" - icon: "minecraft:netherite_block" ---- - -# 加工:下界合金 - -以下两台机器实现了[量产下界合金](../008_recipe/210_netherite_ingot.md) - -## 机 - - - -- 设为:循环模式 | 16gt | 0gt -- 所有 可替换为 任意完整不透明方块 -- 配置输出的单次仅输出一个(使用滚轮调整数量) - -![chute](../../textures/netherite_machine.png) - -## 机 - - - -- 两侧木桶填充足量的和 -- 控制的主循环设为:循环模式 | 18gt | 2gt -- 侧对应的设为:上升沿模式 | 2gt | 50gt -- 侧对应的设为:上升沿模式 | 22gt | 30gt -- 侧对应的设为:上升沿模式 | 5"90 | 0gt -- 所有 可替换为 任意完整不透明方块 diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/202_ancient_debris.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/202_ancient_debris.md new file mode 100644 index 0000000000..a89ffdddc7 --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/202_ancient_debris.md @@ -0,0 +1,27 @@ +--- +navigation: + title: "§6加工:远古残骸" + icon: "minecraft:ancient_debris" +--- + +# 加工:远古残骸 + +以下机器用于[量产下界合金](../008_recipe/210_netherite_ingot.md)中的远古残骸加工 + +## 机 + + + +- 设为(循环模式| 16gt | 0gt) +- 所有 可替换为 任意完整不透明方块 + +## 进阶版 + + + +这台机器每秒能加工 5块 远古残骸,效率极高,很适合存货一段时间后大量产出一批远古残骸。 +但每次关机会额外喷出 1 个下界合金碎片浪费掉。还有,开机前记得给加热器通电! + + +你也可以尝试设计其它架构的残骸机 + \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/203_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/203_netherite_block.md new file mode 100644 index 0000000000..23b871d7ad --- /dev/null +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/203_netherite_block.md @@ -0,0 +1,25 @@ +--- +navigation: + title: "§6加工:下界合金" + icon: "minecraft:netherite_block" +--- + +# 加工:下界合金 + +这台机器实现了[量产下界合金](../008_recipe/210_netherite_ingot.md) + +## 机 + + + +生存模式下,将示例中的两个创造板条箱替换为普通板条箱,并分别放入足量的和 + +## 进阶版 + + + +这台下界合金机每秒能加工出 5个 下界合金块,效率极高,很适合存货一段时间后大量产出一批下界合金块。开机前记得给加热器通电! + + +你也可以尝试设计其它架构的下界合金块机 + \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/210_tree.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/210_tree.md index fc3d2729a4..b5565e8acf 100644 --- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/210_tree.md +++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/210_tree.md @@ -8,7 +8,7 @@ navigation: 想要取之不尽用之不竭的木材吗? -如果你已经看过 原木钻石机,你一定知道了在铁砧工艺中木材可以加工成钻石 +看到这里你一定知道了在铁砧工艺中木材可以加工成钻石 建造这样一台**巨型铁砧树场**,原木就能源源不断进入箱子,并且不消耗骨粉 @@ -16,21 +16,24 @@ navigation: 2. 使用撼地的冲击波破坏大树 3. 使用范围收集掉落物 -## 图示 - - - - -左键调整位置;右键调整角度;PgUP/PgDN调整显示高度 - + 机器**_不可旋转_**,确保树苗在机器的*西北角*,否则树无法生长! -1. 设置收集半径: 8 -2. 侧边的设置过滤: 树苗 -3. 下方的设置过滤: 原木、木棍 +## 进阶版 + + + +这台树场非常疯狂,每小时消耗约 90组 骨头并产出 60万 以上原木。 +确保你有一个高效的骷髅刷怪笼能供应这台机器的消耗,以后就再也不缺原木了! + +- 机器分为两个部分,种树和砍树,各有一个开关 +- 种树的开关是顶部脉冲发生器,调整为循环模式即可开始种树 +- 砍树的开关是下层的拉杆,关闭拉杆就能开始砍树 +- 机器没有内置产物*原木*和*木棍*的收集,*你需要自己做收集* -- 所有 可替换为 任意完整不透明方块 -- 所有 可替换为 任意完整方块 \ No newline at end of file + + 机器**_不可旋转_**,确保树苗在机器的*西北角*,否则树无法生长! + \ No newline at end of file