From 42a3b0416e2246e148042216d3bebea51629f724 Mon Sep 17 00:00:00 2001 From: Fff Date: Sun, 8 Nov 2026 07:25:17 -0800 Subject: [PATCH] =?UTF-8?q?feat(handbook):=20=E5=90=8C=E6=AD=A5=E6=89=8B?= =?UTF-8?q?=E5=86=8C=E6=9C=BA=E5=99=A8=E4=B8=8E=E4=BB=93=E5=82=A8=E9=A3=98?= =?UTF-8?q?=E5=8D=87=E6=9C=BA=E6=94=B9=E8=BF=9B=E5=88=B01.21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 同步中英文机器章节和蓝图,并适配 1.21 实体、告示牌及库存数据 - 合并容器升级 JEI 分类,保留升级材料与条件提示 - 同步仓储整合器缓存映射、直连核心和飘升机上升限制 - 允许铁砧破坏掉落物被吸附并调整方块放置器抗爆性 - 升级 Ageratum 至 1.21 对应的 build.137 --- gradle/libs.versions.toml | 2 +- .../assets/anvilcraft/lang/en_ud.json | 1 - .../assets/anvilcraft/lang/en_us.json | 1 - .../StoragePortConsolidatorBlockEntity.java | 112 +++++---- .../dubhe/anvilcraft/data/lang/JeiLang.java | 1 - .../anvilcraft/entity/IonocraftEntity.java | 92 ++++++-- .../event/anvil/AnvilEventListener.java | 18 +- .../anvilcraft/init/block/ModBlocks.java | 2 +- .../anvilcraft/init/entity/ModEntities.java | 2 +- .../integration/jei/AnvilCraftJeiPlugin.java | 7 - .../category/ContainerUpgradeCategory.java | 215 ------------------ .../category/anvil/ItemInjectCategory.java | 87 ++++++- .../jei/recipe/ContainerUpgradeRecipe.java | 18 -- .../ageratum/en_us/000_process/009.md | 2 +- .../en_us/008_recipe/001_basic_minerals.md | 2 +- .../en_us/008_recipe/210_netherite_ingot.md | 2 +- .../ageratum/en_us/009_machine/002_stone.md | 22 -- .../ageratum/en_us/009_machine/003_sand.md | 18 +- .../ageratum/en_us/009_machine/021_crush.md | 4 +- .../ageratum/en_us/009_machine/022_mesh.md | 11 +- .../009_machine/101_piezoelectric_crystal.md | 42 +++- .../ageratum/en_us/009_machine/201_gem.md | 20 +- .../en_us/009_machine/201_netherite_block.md | 30 --- .../en_us/009_machine/202_ancient_debris.md | 27 +++ .../en_us/009_machine/203_netherite_block.md | 25 ++ .../ageratum/en_us/009_machine/210_tree.md | 29 +-- .../structures/machine/ancient_debris.nbt | Bin 1947 -> 2157 bytes .../machine/ancient_debris_advanced.nbt | Bin 0 -> 1975 bytes .../ageratum/structures/machine/gem.nbt | Bin 1347 -> 1587 bytes .../ageratum/structures/machine/gem_old.nbt | Bin 0 -> 1612 bytes .../ageratum/structures/machine/gem_old.snbt | 75 ------ .../ageratum/structures/machine/mesh.nbt | Bin 0 -> 1275 bytes .../ageratum/structures/machine/mesh.snbt | 41 ---- .../machine/netherite_block_advanced.nbt | Bin 0 -> 2016 bytes .../machine/piezoelectric_crystal_0.nbt | Bin 0 -> 1000 bytes .../machine/piezoelectric_crystal_1.nbt | Bin 0 -> 1155 bytes .../ageratum/structures/machine/sand.nbt | Bin 0 -> 1919 bytes .../ageratum/structures/machine/sand.snbt | 130 ----------- .../ageratum/structures/machine/stone.snbt | 131 ----------- .../ageratum/structures/machine/tree.nbt | Bin 0 -> 2026 bytes .../ageratum/structures/machine/tree.snbt | 214 ----------------- .../structures/machine/tree_advanced.nbt | Bin 0 -> 3553 bytes .../ageratum/zh_cn/000_process/009.md | 2 +- .../zh_cn/008_recipe/001_basic_minerals.md | 2 +- .../zh_cn/008_recipe/210_netherite_ingot.md | 2 +- .../ageratum/zh_cn/009_machine/002_stone.md | 22 -- .../ageratum/zh_cn/009_machine/003_sand.md | 20 +- .../ageratum/zh_cn/009_machine/021_crush.md | 4 +- .../ageratum/zh_cn/009_machine/022_mesh.md | 11 +- .../009_machine/101_piezoelectric_crystal.md | 42 +++- .../ageratum/zh_cn/009_machine/201_gem.md | 22 +- .../zh_cn/009_machine/201_netherite_block.md | 30 --- .../zh_cn/009_machine/202_ancient_debris.md | 27 +++ .../zh_cn/009_machine/203_netherite_block.md | 25 ++ .../ageratum/zh_cn/009_machine/210_tree.md | 29 +-- 55 files changed, 474 insertions(+), 1147 deletions(-) delete mode 100644 src/main/java/dev/dubhe/anvilcraft/integration/jei/category/ContainerUpgradeCategory.java delete mode 100644 src/main/java/dev/dubhe/anvilcraft/integration/jei/recipe/ContainerUpgradeRecipe.java delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/002_stone.md delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/201_netherite_block.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt create mode 100644 src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md delete mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/202_ancient_debris.md create mode 100644 src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/203_netherite_block.md 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 d09af43a7529dc85aa64927fda55eb45563706a8..b45298b68f3c70f7fdbe4dbfec0ef10ed7f0c5a9 100644 GIT binary patch literal 2157 zcmV-z2$J_7iwFo+lJIH*|6y)pX=QG7Uu0!sa%poeZenx*?OM%`9K{u{p6;3Lnel$u zF*Y{XaEgFLQAA=zLXo`S^_u0wnC#jHq@-2bT{}~9Pgke9+G}$_h~$ElQ=&**5GMrU z1PBR%l;9J$B*X`hB3a5G07?#t;I?_yA2ZcG)iXWz5Gm2Fw3_MeSMUAmeZQ{hAY`E< zIJioEm*XArh>JrJbK*HzAo=$L=U*LkSRvT-2ekO&%DkQIi ztFa#tj<JrEIiZ4flE%mECrYsSd?sQ zb?fg5?;GcCB%iC_`)BgmK-N0tMDDK*yPy%3TS&zn9*F}%180Zh0qG*^;>C?MSZcld z>cQx>Kb-yiqmR$Ldur*}g9d7@(`&>7FbCGL@2}BFNGK@LYjcbGhPTlTzrq+rk!1>bZ$vdw8U z-JBQipSwB#{PSPD^yc5rKlHozKl;_FuRd9% z5eL0UkibbaP{W>oEZGy?u|3~<{oh~w`lY8HdE>FYXHVaH@Xea`yflkFO^rQQmv0p9 znT0FRw378n^8HC_-45!wY!I>loIe6~#e>z+BRUxks&3jPp1YP^z{GcERV0B2A6RhE`-3bt1ty?hyw> zfDIph-eSM`;PF4bcJhfAe)`=99>_3V&M19h>#PNV)B7C6f_>P9;d!F~*oJ80pVScI_v z=GG>(IzVc-QB&raB)Sl)P=4mUY8$l!0v*T%R}8d3djaGUDWJ6xOypl-E!D?c6=7wo zS+>G9%i}4PT_t?SXS_W0Op9UlTvgyqO*fg zT;KGW0AsY}=Tme*Wh!5lyx=#p;m1emj4KyaCfu@G0J!wLDt`zqx5a4I8365nO34`ON zz+61dJOb|DN&7~5mClrKAz*9wV0;^ce0JeWQBS!n_7=6*(i+th&VkWM{`Ir6?!lgJ*-sN#ZqVvR`9VV zG*iP=uFxFP$TDk9MyBlMaS-hgKB1|)nK#sVzpm!&Q6A{CFw{=EX35vSa~tjU&HYmG z|6eNX{ZjE?EER?(G!M@ZniutxnK9%^%X_oU{u+-WS29bU*aIB5V)bRca{(~c5VCs$Sc zu?piBA?me0iN>lyljAX`yr{EEedBSBTCI}m+ZtKclvfCi8hp$eG*%6o9J8vQdn)iu zqA_dGST$&JJZ23Ysxjiyn9#;ieOX=qLY%|eKMB4kJ-bRWdt1?{7v{+E#ikG0x+rnt!C8459*sZ~B-_T2$M}&={^Z06)^0zkwgST)&*}L%ipu=E zjLTE^bVjw44LWgXqqg9**HaWY0&m<3%6J@7>3+i}M-;alFb4Kayt6FGN;G6e)C1U=XIlXf z+L?Xws{{#ZNT+BfF@=mDj+|j63|u7<6~hS7N0PCSIk} zSrigiaO^wDy)laniFM=t80ysb6m!_M+2~OWT5{5cx7Lblq>)M+5asp literal 1947 zcmV;M2W0pkiwFP!00000|Lt1aj@vd6r9{e>z1iHF`>p986n*SdfhH{$=p{gk_R-MF zTw91N2@<`Vq zc8#G342DlMf}se^@G>yWg9#9r5P_ix3`1a|5lk>RgE3>i0)(#+;VVS=3K702!WTvO zq6l9M;Y(x2azkUrazkUrazkUrbZN|(E~3X3fq`;90CZ^#l=A_gOJks%hjeMom@bVO z)1@(Ex-BkkS(-7dJF;Ja`0H1&y&Z8zCj2Y*t2Lsh9q)TIE{4#>5W0x|G%&FTW9piDFi;IrfV0LxHE465doX64 zPdpf?z97zey#v*k&Buos=NldjR67u7hTzN)oJo&^ z=Az8veCokKwPUYyeHf^AAkN`6Fy?sO^k6~+h9WSgu3Mgc0O+}6bM|4Nx`4)uIyk#> z4C2fXoEd^MLvYp@s4gH~>JznoC6OF=6s~(3_YOmI=P0guTr^stdu4L}&6$`vakh zXj*OyA;15iFnOuIlFspC!?D;Ft48o*(f+#VLZr3imR<6NJd_mN+dbwGKI|z{68~71 z`Let!+`c!-s^B6^7wLK{xLkdn6_>maW&L3%YZj2xpR!yA=XH^s=X|MF%>!=UAx_Sk z*PBXwP%7B zYYE6STNSd=EqnR*4EYyXvtEd#csD1Lv%+J??uO3}y5XZuR`AYZQlyy-%woyU>#XsL zF$e3(*kIi@+vqiVTmbYq=`&WJXYCVU&=&M5vJ)iR>zdaxev3w)sN{V&cLR9syRFO! zfXoQKbk;AO^|N+XYRycZjuq=mqgb14Q{{YtnxO1=EDsB_Wjq`D-|Y2!Q75kwkpxn@ zNNVwGx#Tiw=Urn|N9rFdZFdt{v68hBy=~1|&hWqf)XwSWbk07f^T^@6pCs%aVQIOkk~VEAxzQC>R|gKmp+nV6 ziJ4YO&V?dN$Tu-zzscGn&&)^rwr=Dya3xju%P5U{uw&9}%2KQsjVKE)+0Nh8WyNdt z|IV09E|OGMvUFQ+#X2T2e=nD0OWD?|R!jipfmWnRHVhM#RjlHuj4uPtrrOOxaTZwOvY*U7UxbqO8?XAxXu3B>ID> zDzBui;M<+Qofyfc6LOW+2SeKX>&wF){TeReP@__{3#WGu!5o1J#Ay$m! zp$gJr9PgT*s%|&Jazb&s}trJYUHAOVk~X-EfCLz{EeCz*9BH2O zOYbo6g?)dR+d()|*uA7XSK6GpW@{>*%4dGQXwP8{?uQv~ue-0yyZ=AuoeiPQ8Y|ge zm^)u(u9mRfRI6{F*RS2ZYU(c?wRXqi_6htQwOi~8dDo-IHa2}ps)smM8xeV#95fZj z4yP-JtsO=?I`YoLZr0}Xl=mxveKGz$M%(u3u!Yh_Ry*09?ncJdl45dmKy^c=?>-sM zZ!3q%c4nkc?`(7fti8vQ$oV4xR%_syvjO<+R3f;M`yFP8zx=%D~m0 ztk}CB<0I?r9+=?<7j9qzyW8y88VJ+*tS~VlA9TgxT}X;pvg{rI^ZoC~j17czv=6(h)Uh~j zi&re{iGUN^!~)6JvzNX%(4GvzvJ()GQ&%Xcg#*D%&IA@jK~1Fl^d`|@lYH0UU5B^c zL=EB!Dk$*{cvcOhxyz!7>KB=y%&o`tg)arw7qCU$j-sG#7X<0ODVf18B%j^Yz;Ox3 z%ML**(oR#ZoK#TbvU`rRz_kH(c9C&`oimI%HtV|*62wVBq=>3q`}sCP2GS)14b?2z zER|OpNToJ9m{DE?ZpRnIHJ2S`t$>cRa?dGFqH`wRDf zc=`4pf4}zmcM7U4&^2O%FxwWe|M-z9IUin4ef{UX<1a10`@j1${yg

?81GxIfI+=b{}6fRgwTIQlZ} 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 literal 1347 zcmV-J1-$wniwFP!00000|IJz3ZsRr(9Z?s{%4W0K7A<-~pZWoP?$ZKIwg}M60x8-@ zgOM4Vh%6csWq0?B`xos{G8INknXK!r*MMP5K00$|4mBj@3}6aT&EK&Q0Q7r;?|2F+ zD@F|3AQR@rzi-Zu@l1jF_!iEVwFwq`N;1Nq>_QeW3ViAv6 z#3L5*h^6$zgIIwDlMHx z`Q^%8V_bf@atHnCfpPg2diWK3_!WBiHH;OFV9Z#tr9Q6QHOA$aD|ceiGlp^b6?ym- zdH5B1_!W8h6?ypO(i3>-2|V-!9(ssJ4T*cE$USPSeOL|vel2Zehb%?W@`g*mNZ(GqBr0P>;X67`O2rexZ{3pKR!`uV7 zR9~Nl4k&ho=i2oi22Iy3on#LQhT?I(3I0>u%;;bN=ylx6fC+ zWL;3UVihfLwo{KL|Gy@8fPy3Ux&ss(x#b<8;K-ft00l>GfCnfzavwZE!I9hH0Sb=X z6%SBwU~?Qk+u4dyaxoY27kw@fZ_BI&1pjFP-Tm-|IZ;%&uizUt!$XX0 zS7uH@FOHyWyfg<096sxL6ga*9Q&#kfN*dtUleCgQi#fy2n|0$u9jU);T9YL&7dS1% zw=GQwXMa$x&i%$$Eo%fX-z;g(TAm;2im4y|-n~M2ev1Q&7FP|b!zp~?z~DY1kS)CyJT~ZbBUPAnifo|IUe9;3ehj92);J!)>Jj_JQt!bF77Sg zRAS94^*173vZTd5BsJz(Fwhj=8Wa`d<-MqKq`}=Q8X?(iyF}M}^!cNalvl$DXPEtr zm2>rmNLCHQb6d5IEyQAh_g;KYG4~Xn;Z7OTS2%S?HtSg}8o5m2LNVk^mOsokwAirz zigQg}D?4_lds&~E<>hM}J1zf_^kr(AUl?UqJntoDOCl_= z@3vX?Jl~kl7erBr?QBICC6gl~2GuZ_R9WbJSO?2fp#fJa@qp*F=*fC(R8jB{tAXufAlEtx?jMqLGw$p8INhje>UUPv?L=`=!#^T+6b23= F000-dmGJ-o 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 0000000000000000000000000000000000000000..e0dde691e57bd6d1926ad74a3831d530d4058c69 GIT binary patch literal 1612 zcmV-S2DAAeiwFo+lJIH*|7T@wUvF$=E^cCU0PR`JkK05TA3u`KW83YPK4?Ku2_XSO zs^|p?4&7?ETP<{H#nQ)CLhdAWO=R9t_Y@pgD{{m-`@517Pml+qBt};el z*7xN?aQe371r8($a|~F&hQm#^>-ilpvM#eQCa|(~D!%{i+RyQM^z5Jq(CE7)EXRkPKpx{lkBQ$tovklrx)*$SdZ zs^IruOIo&cV4+GI7Rx3zlG-dOwc$}~0Nr;`TCQ;xtafGM&)!9oHNTnG{Jpg1rzUF- z%>vxL(38XyCr8Hh@c`S|;ZQZD^k1BQ;nlzIum1i`@YQekKmXuU169_&+r&kh9)J+u z@hG_tmz(MJHdOW3^!f&Te_dC_;epgDE~ZtiC4GDLkN;^EkB<{fdf<(^P8|O}s(JH~ ztGV>N}rl4_; zjGUCPF-zEtI;Mm#ql7P`gfFv%FSCTNNt^?kn^P1 zL+ZZOjRa}L!vH{x4=jiRHg1_P107iRs382jFX!9^c4NCnV$s|P&-Vf`kdZ?+>hgTi z>vVlB)OtF||mP9?I# zWzM7ksV>H&wLQ~7s|sfo`OHpm>gFkRf*I#gAmAarMQ|IoXMLEeOS{PBMZL>q#buWO z4%aAZ)=?!VepPj=IfPZ4g&be1O)X<%X>95WAS_}p3?(pX2i2mq$-=k zY0`;jI$FzP@r0kZK`?1d-VCIzFZv_m;-}at=jnLc{eqs?A|d%B)OU zpU|W%YjZ@yCu?&w$Cp{a+0fW5<@hSH86AqvF%2I(!}+*|PuAv14WF#di5#4w*v%Z9 zg#c3`AHYr`6py;vqccblB)E0CeeP7$d^v>%$j8HYtfEg^?XArmXiUzge`5|!ZfubP0MJOG?Dgq*x z>x(;uH%c7A;W$^yD^u1A3E!ROn2TgaK_SlY-m&q$u*aC_I-vli%EvpH zFv31M#!f&TXe1XEz40#H2=N2_JQ|_mLm=H*pzI!V30g?@KcYZqDwgzuuJgxR=bkh* z^Zx7@s1JkLmG(|MZUUzj(N@l!o|$GkF{WM2gL#eVM6aGunm!CjTX0OB_`6)d!rm{B zXTy5f0Cp&2yr>0o3&rp)NU6}wLk@HyaYfrH(KMEJ&(Ji$GpaN*N?G6O;f_zl3|nOk zo00sza4pna!vbF=JdFQpS_-oScG|+!E KDd_l!8~^~(;3Q%I literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ad3445c593f8f0b37f572121d5909cb216d5040d GIT binary patch literal 1275 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 W)`m8*P*{Fx0RI7I1w`nb3IG6!w(FAs literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..da608d2883103c5787cfc6751dbac6d5e43f0abe GIT binary patch literal 1155 zcmV-}1bq7+iwFo+lJIH*|8Qw#dT(WHWn*-5X=7hwa(Q!fVQgP9E^cCU0L_?NZ`(E$ z$B#rgmhHCbl3svq81}f=?t&Hrc0)Q8d)O8r!}cgJ5@QpQNr9s3IPd#ya^aLJy-eksr*rgo9IOX$#GgZk_(WgIF zvZ&-4=Xu5#?2K1Tw+kUS`Hne0P%(oW_5P)LU*6r_{WgK&*$j(m-IEFIai|El>g{<9 zAis)B;|QdQpttd$2ngRp;sNjq{-JRf{tp3O^$U1g8eEG^i|-i|EU6jR|UcY zRN(8kx&r6`75L_@u0Z6hfcsAAn@gd`TnatrQs^-!k%u1Sp$B>BK^}S{iwPZiYz8^> z^f8e~F0E&%uNzF{&|@|&4y6L~PL z9 zAKa}D1P?Cgl;QkkC9tHN=@kg>*DH)`x(|AsziW*1qRLB>ObH_jWS%%Q+l^Nbp-RL1HqR#PwESuiwWL;akD6rq9QR&7Han*=hG?4U~q+% zJ7ZN7Udh?!lyPC4Hj10Gb?(zSWu!^X@pW=VSW5nz#P#~Wk++Rgah717xslvBF{9~dEL>NewxWR9nd$kj${7bsx_hAE-B z(zio+)B85d@umzpc}=?SWBtvzt23pf>GiU&Gw$1^q}j%x?OCHSVyYo)dp0M7dRq`a z`)r-==_Z}pZ{5XYK?U(jxQgmZxB}aRpB_5lCx=e>@u3qw+dJXf)vW_NY`w?*XgR!V zh#3kSyC?2h_76+qVQcj`rym1008meM5F)! literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c767127d6220794832877a989b001aa5ad221191 GIT binary patch literal 1919 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 IR0c-?0L(Mf0{{R3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0a6330a95d60eb230887671e0fb250152f7546c3 GIT binary patch literal 3553 zcmV<74Ic6ziwFo+lJIH*|8#O?WnW=rc42N~Wn?aHVsrrQUE8nRMj0R9y*@c7X_{-( zmJsd~N^Ye$plvPE1hZ|0kCypDyCiViv5HP3fL zXElDpb$W3>#7*0YQSx*5@87l10Sd6<_i-=uy0L^7oPHeGVGuhpmQVw!k@qrI$W6&_ zgZwU$U$cQs+>O21!%=Fnf%FwWaBoHyLelXDQhGs@-!%MDkQOCovpZ;v1i;7ui~_)@ z0E`B}=m3lXz?c9`{v!c2lmHq^01YL8h7v$S380|_&`<(sC;>E-0UF8x4P}6aGC)Ha zprH)VPzGoy12mKY8Y%z{6@Z2cKtlzfp#soQ0cfZIG*kc@DgX^tfQBkSLlvN*3eZpm zXs7}-Q~?^Q01Z`uh8jRa4WOY0&`<+tr~x$802*ol4K;v<8bCuGprH=XPzPwJ12ohD z8tMQIb%2ICKtmm%p#jj)0BC3cG&BGj8UPIqfQAM@Lj$0pQKF&5tlbhv!!nEvz$gHW z3c%!?WdLV-EszDAX^bMk(DR`xz|iroaX8CNyL1j`7GrRHO=2vhbXQ^vS#Hqj1zoZ` zhzMHRApi5P<0E;zA6R9lXnFn%FuVp&4g)qdRTr=Jo* zFL%j@*z2|=32DozGX*WYQcTm@ou_}8_bRV@X>h=8y+b!J11QvvxvBc_Na>f#iX=GZFhFo{LEqvW+ zdi`iH2xPaJ+`-Cdo(}@Q8LW2)rczbkVO1UQKT7fUV%)La!1u9B=v#@LYs6v@ZYoG! zCi}XCjf57T_52uz7rV}ikDF41!dU~v!sX~%y6JtJ#51qqoKyeR$e1hIAQrJZ#z@2q=e zXWgqi>t5Sg_xjGdH+I&&S?->fldyBCC0OIe*X4q>>Cen8dPuZ3p|Q0|qSq!QUYpR= zYm-*X+9YvwSSZrrFV%EFKpoVnbwIV~AaiusGt{B6;AL%%)E{;9dcH8|J@1A_bnk65ZGPyw2Y{@m+QfjoN)@Vzs(UxALEu%(TX1OiV zxYV)k-_m#hL2i6k;z*k0mH_1){=Kl`66ue|k-Cr`fm)WgTJaDJB`&im+N zr7&?cx#4Gt>=P`~O2KAT0$^kSMgd?{E`}$biWV;fL6|OLH$3;|;54oOreF#@JUIor zVLxi8Q+d+c3fh<0%a^#!7p8qrbV-Xv}A5e4%oy)gl@q-Q_S7B%86H+yHVNP zJ>|v_%_rjdM7(1YvB8P5{ZmBQyZk6SPDNSdb$ULw#leOI^DWKkUcr2;0_Iy9b3icP z7GV?sMg{Q6IcosU8i2C~;H&{SLkg@qfU^$ZtOGdf0M0sqvjO020M=pyuofGDwb&?K ziJ1~f_y`%KsZR05B#E`-~fN_wclfo1q4pruLa4KH3&%**<;DX0H zMZ6Aycgb5IBNjT8h|s6`H+CKUeGRygAsAo0i1OJXBzWi0cU#E_=tcrjrpj6GmZI}fHRHx zxPUW_`2=UotIVqNNzSY{iJ5-ZJ2$=_&i8fmecgOtH@2#>QT7mLhEXT-KYm0@fQXiA zis*y$h@MCEJfZ~=Ede4LvU4gr?>blWdDlD==aKmSI=o_|?4b%L6Z0sWN7+2eicTgb zql~{M7Co|@M=M>2`INv8jrlZZudOn*k%u{ZZ5Hzx&R)CBPVS4YX`B@JqA{lgzG%#8 zfiE4IOO!5#_V*?a`GarN~QaJL8W^NZW4go z)Yb0u1(jz2H=X165lF>*M!yEvFJCtr^H~9ZI%Xdg_$tDf91QQYNMmC5F;0xIn8!IW z!eX8fv`YoFs|b^Greps}0cRTXIRR%H^ZCl-^Cf-X9OKn;acX&KNM5=)J}n11#ptoH4*+t_%83 zE!ZU(T+9wVc+ZZDBU|_2{oxb;`rQxi{QRwd{^5_e|Mcd2Kl$yQU;pa%+drkAz<)#d z1is19Y+2CH^n7qb(9bmHD}sKeF)!Bh#l%~T+DCWM7ZZP(H2I#ceeta{P_R8Ja!>WKwdKP^Civ6ydi z+GPPM0v4bmV3kw^a$jY;QVXyvwI+6@d|zexjs?hfEI_`q0O+p;K!35As~kIf7+>EK zV9H)QwFkh5#b^Qy-S6M#@L6Q+*c?7A<~tl;EXIMnuHw0^sq{%xSNfFNURSZmZX>lzI*5Gg2I1(Fx{fJeFIdMRl21J{ zbbEN@HpI;+CO6sZUWf$_GZ&e|%qqa)*{yIm_>?)!fVsmnNsUXoUc+H2OEWoX@&hNoGPES# z3JGm8%rc=Xv|OlVb(0J0WIiGdZMDkHQlSwzH|=%D_wA$%KhZ&L>~M^wqm48IXL)ie z3s=|i=L3h3`zgp;;5F?I8Phnl)AyK9Xq7yn5s;1>cQg4mjB-J^9LHY^0h1sdlT{Qb zv<~P(q0iE9va_ypyXm}T;*A)0n-f;4ff5l*H#hB`m&_1T4Zd{NAr|A!9*OoaSqpjL zJb2ilXf>c`zI+fCtq|$dm$R8^0*1Fw_3TGyXQd7!rJTP&>OBw;+j;1{} z{d6zhlMRLkz+w(LMhl9awN2X#$zs6Y-T=3PH8iB^LfD8&ir4~(&3&vMZj5O$#2O%P zD~RLi=i!AQ^vL#OP-Zk!4|Wo)6RjFq9{abx$N;c=zTt=OtAOvUIkxNc{bo3su~e#oWVQOOsDk9zXD@?LLpZ8$tVA^q;aP3* z65zuVIW<35%Xq{=ueJzJY}FLuiK&?*ytvXimO#Q!5r!?TY0^kc)ws^5)Np;BP*>}>6+N95#Y^VNeO16ci!isyxYR42=H_UWU!Rx{hN1kA}2|Y>Xl|r`tIGZ=L zcv4k6&z`A1U12mcdBF5#69p|KkJ!A3!zg{oWpC6NJ0OloCg1Fn<=;+ji?V+xk3MT% b4?>@$TR{*uy)K#OBMJQvCCeqSv3dXi+xW)@ literal 0 HcmV?d00001 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