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 extends IonocraftEntity> 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)
-
-
-
-## Machine
-
-
-
-- Fill both barrels with sufficient and
-- Set the main loop (controlled by ) to (Loop Mode | 18gt | 2gt)
-- Set the for the side to (Rising Edge Mode | 2gt | 50gt)
-- Set the for the side to (Rising Edge Mode | 22gt | 30gt)
-- Set the for the side to (Rising Edge Mode | 5"90 | 0gt)
-- All can be replaced with any full opaque block
diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md
new file mode 100644
index 0000000000..83e3340e10
--- /dev/null
+++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/202_ancient_debris.md
@@ -0,0 +1,27 @@
+---
+navigation:
+ title: "Processing: Ancient Debris"
+ icon: "minecraft:ancient_debris"
+---
+
+# Processing: Ancient Debris
+
+These machines handle ancient debris processing for [Mass Production of Netherite](../008_recipe/210_netherite_ingot.md)
+
+## Machine
+
+
+
+- Set the to (Loop Mode | 16gt | 0gt)
+- All can be replaced with any full opaque block
+
+## Advanced Version
+
+
+
+This highly efficient machine processes 5 ancient debris blocks per second, making it ideal for stockpiling materials and then producing a large batch of ancient debris.
+However, each shutdown ejects and wastes 1 extra netherite scrap. Remember to supply power to the heater before starting the machine!
+
+
+You can also try designing other ancient debris machine layouts.
+
diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md
new file mode 100644
index 0000000000..216151b44d
--- /dev/null
+++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/203_netherite_block.md
@@ -0,0 +1,25 @@
+---
+navigation:
+ title: "Processing: Netherite"
+ icon: "minecraft:netherite_block"
+---
+
+# Processing: Netherite
+
+This machine implements [Mass Production of Netherite](../008_recipe/210_netherite_ingot.md)
+
+## Machine
+
+
+
+In Survival mode, replace the two creative crates in the example with regular crates, then fill them with and , respectively..
+
+## Advanced Version
+
+
+
+This highly efficient machine produces 5 netherite blocks per second, making it ideal for stockpiling materials and then producing a large batch of netherite blocks. Remember to supply power to the heater before starting the machine!
+
+
+You can also try designing other netherite block machine layouts.
+
diff --git a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md
index 898d5b85b9..fb39ed2e0a 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/en_us/009_machine/210_tree.md
@@ -8,7 +8,7 @@ navigation:
Want an inexhaustible supply of wood?
-If you have already seen the Log-to-Diamond Machine, you surely know that in AnvilCraft, wood can be processed into diamonds.
+By now, you know that wood can be processed into diamonds in AnvilCraft.
Build a **Giant Anvil Tree Farm** like this, and logs will continuously flow into the chest without consuming bone meal.
@@ -16,21 +16,24 @@ Build a **Giant Anvil Tree Farm** like this, and logs will continuously flow int
2. Use 's earth-shaking shockwave to destroy large trees
3. Use to collect drops in a wide area
-## Diagram
-
-
-
-
-Left-click to adjust position; right-click to adjust angle; PgUp/PgDn to adjust display height
-
+
The machine **_must not be rotated_**. Ensure the sapling is in the *northwest corner* of the machine, otherwise the tree cannot grow!
-1. set collection radius: 8
-2. Set the on the side of the to filter: Sapling
-3. Set the below the to filter: Logs, Sticks
+## Advanced Version
+
+
+
+This tree farm is wild: it consumes about 90 stacks of bones per hour and produces over 600,000 logs per hour.
+Make sure you have an efficient skeleton spawner to supply it, and you will never run out of logs again!
+
+- The machine has two sections, planting and chopping, each with its own switch.
+- The planting switch is the pulse generator at the top. Set it to loop mode to start planting.
+- The chopping switch is the lever on the lower level. Turn the lever off to start chopping.
+- The machine has no built-in collection for the *logs* and *sticks* it produces. *You need to add your own collection system.*
-- All can be replaced with any full opaque block
-- All can be replaced with any full block
+
+ The machine **_must not be rotated_**. Ensure the sapling is in the *northwest corner* of the machine, otherwise the tree cannot grow!
+
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt
index d09af43a75..b45298b68f 100644
Binary files a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt
new file mode 100644
index 0000000000..c026163013
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/ancient_debris_advanced.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt
index 7b6fc397d9..c9e5bace5a 100644
Binary files a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt
new file mode 100644
index 0000000000..e0dde691e5
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt
deleted file mode 100644
index 01c399dcf4..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/gem_old.snbt
+++ /dev/null
@@ -1,75 +0,0 @@
-{
- DataVersion: 3955,
- size: [4, 5, 5],
- data: [
- {pos: [0, 0, 1], state: "anvilcraft:cursed_gold_block"},
- {pos: [0, 0, 2], state: "anvilcraft:cursed_gold_block"},
- {pos: [0, 0, 3], state: "anvilcraft:cursed_gold_block"},
- {pos: [1, 0, 1], state: "anvilcraft:cursed_gold_block"},
- {pos: [1, 0, 2], state: "anvilcraft:cursed_gold_block"},
- {pos: [1, 0, 3], state: "anvilcraft:cursed_gold_block"},
- {pos: [2, 0, 1], state: "anvilcraft:cursed_gold_block"},
- {pos: [2, 0, 2], state: "anvilcraft:cursed_gold_block"},
- {pos: [2, 0, 3], state: "anvilcraft:cursed_gold_block"},
- {pos: [0, 1, 1], state: "minecraft:chest{facing:north,type:single,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [0, 1, 3], state: "minecraft:note_block{instrument:iron_xylophone,note:1,powered:false}"},
- {pos: [1, 1, 1], state: "anvilcraft:chute{enabled:true,facing:west}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [1, 1, 2], state: "anvilcraft:corrupted_beacon{lit:true}", nbt: {id: "anvilcraft:corrupted_beacon"}},
- {pos: [1, 1, 3], state: "minecraft:observer{facing:east,powered:false}"},
- {pos: [2, 1, 2], state: "anvilcraft:heater{overload:false}", nbt: {id: "anvilcraft:heater"}},
- {pos: [2, 1, 3], state: "minecraft:observer{facing:up,powered:false}"},
- {pos: [3, 1, 3], state: "minecraft:smooth_stone"},
- {pos: [0, 2, 2], state: "minecraft:sticky_piston{extended:true,facing:east}"},
- {pos: [0, 2, 3], state: "minecraft:observer{facing:down,powered:false}"},
- {pos: [1, 2, 2], state: "minecraft:piston_head{facing:east,short:false,type:sticky}"},
- {pos: [1, 2, 3], state: "minecraft:observer{facing:down,powered:false}"},
- {pos: [2, 2, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [2, 2, 2], state: "minecraft:cauldron"},
- {pos: [2, 2, 3], state: "minecraft:observer{facing:north,powered:false}"},
- {pos: [2, 2, 4], state: "minecraft:smooth_stone"},
- {pos: [3, 2, 1], state: "minecraft:dropper{facing:west,triggered:true}", nbt: {Items: [], id: "minecraft:dropper"}},
- {pos: [3, 2, 2], state: "minecraft:dropper{facing:west,triggered:true}", nbt: {Items: [], id: "minecraft:dropper"}},
- {pos: [3, 2, 3], state: "minecraft:comparator{facing:south,mode:compare,powered:true}", nbt: {OutputSignal: 15, id: "minecraft:comparator"}},
- {pos: [3, 2, 4], state: "minecraft:weathered_copper_bulb{lit:true,powered:false}"},
- {pos: [0, 3, 2], state: "minecraft:note_block{instrument:harp,note:2,powered:true}"},
- {pos: [0, 3, 3], state: "minecraft:smooth_stone"},
- {pos: [1, 3, 2], state: "anvilcraft:spectral_anvil{facing:west,powered:false}"},
- {pos: [1, 3, 3], state: "minecraft:observer{facing:down,powered:false}"},
- {pos: [2, 3, 2], state: "anvilcraft:spectral_anvil{facing:west,powered:true}"},
- {pos: [2, 3, 3], state: "minecraft:observer{facing:down,powered:false}"},
- {pos: [3, 3, 4], state: "minecraft:oak_button{face:floor,facing:south,powered:false}"},
- {pos: [0, 4, 2], state: "minecraft:lever{face:floor,facing:west,powered:true}"},
- {pos: [1, 4, 2], state: "anvilcraft:hollow_magnet_block{lit:true,waterlogged:false}"},
- {pos: [1, 4, 3], state: "minecraft:smooth_stone"},
- {pos: [2, 4, 2], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [2, 4, 3], state: "minecraft:smooth_stone"}
- ],
- entities: [],
- palette: [
- "anvilcraft:cursed_gold_block",
- "minecraft:note_block{instrument:iron_xylophone,note:1,powered:false}",
- "minecraft:observer{facing:east,powered:false}",
- "minecraft:observer{facing:up,powered:false}",
- "minecraft:smooth_stone",
- "minecraft:observer{facing:down,powered:false}",
- "minecraft:observer{facing:north,powered:false}",
- "minecraft:weathered_copper_bulb{lit:true,powered:false}",
- "minecraft:note_block{instrument:harp,note:2,powered:true}",
- "minecraft:sticky_piston{extended:true,facing:east}",
- "minecraft:piston_head{facing:east,short:false,type:sticky}",
- "minecraft:cauldron",
- "anvilcraft:spectral_anvil{facing:west,powered:false}",
- "anvilcraft:spectral_anvil{facing:west,powered:true}",
- "minecraft:oak_button{face:floor,facing:south,powered:false}",
- "minecraft:lever{face:floor,facing:west,powered:true}",
- "anvilcraft:hollow_magnet_block{lit:true,waterlogged:false}",
- "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}",
- "minecraft:chest{facing:north,type:single,waterlogged:false}",
- "anvilcraft:chute{enabled:true,facing:west}",
- "anvilcraft:corrupted_beacon{lit:true}",
- "anvilcraft:heater{overload:false}",
- "anvilcraft:chute{enabled:true,facing:south}",
- "minecraft:dropper{facing:west,triggered:true}",
- "minecraft:comparator{facing:south,mode:compare,powered:true}"
- ]
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt
new file mode 100644
index 0000000000..ad3445c593
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt
deleted file mode 100644
index f32e8dd938..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/mesh.snbt
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- DataVersion: 3955,
- size: [5, 5, 1],
- data: [
- {pos: [0, 0, 0], state: "anvilcraft:chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [1, 0, 0], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [2, 0, 0], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [0, 1, 0], state: "minecraft:scaffolding{bottom:false,distance:0,waterlogged:false}"},
- {pos: [1, 1, 0], state: "anvilcraft:magnetic_chute{enabled:true,facing:up}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}},
- {pos: [2, 1, 0], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [3, 1, 0], state: "minecraft:smooth_stone"},
- {pos: [0, 2, 0], state: "minecraft:damaged_anvil{facing:west}"},
- {pos: [1, 2, 0], state: "anvilcraft:simple_chute{enabled:true,facing:west,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [2, 2, 0], state: "minecraft:comparator{facing:west,mode:compare,powered:false}", nbt: {OutputSignal: 0, id: "minecraft:comparator"}},
- {pos: [3, 2, 0], state: "minecraft:repeater{delay:4,facing:west,locked:false,powered:false}"},
- {pos: [4, 2, 0], state: "minecraft:smooth_stone"},
- {pos: [4, 3, 0], state: "minecraft:redstone_torch{lit:true}"},
- {pos: [1, 4, 0], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [2, 4, 0], state: "minecraft:sticky_piston{extended:false,facing:west}"},
- {pos: [3, 4, 0], state: "anvilcraft:pulse_generator{facing:east,powered:false}", nbt: {ExtraData: {Inputting: 1b, OutputMode: 0b, SignalDuration: 3, StartMode: 2b, State: 0b, WaitingTime: 5}, id: "anvilcraft:pulse_generator"}},
- {pos: [4, 4, 0], state: "minecraft:smooth_stone"}
- ],
- entities: [],
- palette: [
- "minecraft:smooth_stone",
- "minecraft:sticky_piston{extended:false,facing:west}",
- "minecraft:scaffolding{bottom:false,distance:0,waterlogged:false}",
- "minecraft:smooth_stone_slab{type:top,waterlogged:false}",
- "minecraft:damaged_anvil{facing:west}",
- "minecraft:repeater{delay:4,facing:west,locked:false,powered:false}",
- "minecraft:redstone_torch{lit:true}",
- "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}",
- "anvilcraft:chute{enabled:true,facing:east}",
- "minecraft:chest{facing:north,type:left,waterlogged:false}",
- "minecraft:chest{facing:north,type:right,waterlogged:false}",
- "anvilcraft:magnetic_chute{enabled:true,facing:up}",
- "anvilcraft:simple_chute{enabled:true,facing:west,tall:false,waterlogged:false}",
- "minecraft:comparator{facing:west,mode:compare,powered:false}",
- "anvilcraft:pulse_generator{facing:east,powered:false}"
- ]
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt
new file mode 100644
index 0000000000..470cd1d2f5
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/netherite_block_advanced.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt
new file mode 100644
index 0000000000..0fa8b0ff3e
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_0.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt
new file mode 100644
index 0000000000..da608d2883
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/piezoelectric_crystal_1.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt
new file mode 100644
index 0000000000..c767127d62
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt
deleted file mode 100644
index 1839ffc145..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/sand.snbt
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- DataVersion: 3955,
- size: [7, 8, 5],
- data: [
- {pos: [1, 0, 3], state: "minecraft:smooth_stone"},
- {pos: [2, 0, 3], state: "minecraft:smooth_stone"},
- {pos: [3, 0, 2], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [3, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [4, 0, 2], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:cobblestone"}, {Slot: 1b, count: 64, id: "minecraft:cobblestone"}, {Slot: 2b, count: 64, id: "minecraft:cobblestone"}, {Slot: 3b, count: 64, id: "minecraft:cobblestone"}, {Slot: 4b, count: 64, id: "minecraft:cobblestone"}, {Slot: 5b, count: 51, id: "minecraft:cobblestone"}, {Slot: 6b, count: 64, id: "minecraft:gravel"}, {Slot: 7b, count: 64, id: "minecraft:gravel"}, {Slot: 8b, count: 64, id: "minecraft:gravel"}, {Slot: 9b, count: 64, id: "minecraft:gravel"}, {Slot: 10b, count: 64, id: "minecraft:gravel"}, {Slot: 11b, count: 35, id: "minecraft:gravel"}, {Slot: 12b, count: 64, id: "minecraft:sand"}, {Slot: 13b, count: 1, id: "minecraft:sand"}], id: "minecraft:chest"}},
- {pos: [4, 0, 3], state: "minecraft:smooth_stone"},
- {pos: [5, 0, 3], state: "minecraft:smooth_stone"},
- {pos: [0, 1, 2], state: "minecraft:lever{face:wall,facing:north,powered:true}"},
- {pos: [0, 1, 3], state: "minecraft:smooth_stone"},
- {pos: [1, 1, 2], state: "minecraft:glass"},
- {pos: [1, 1, 3], state: "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}"},
- {pos: [1, 1, 4], state: "minecraft:smooth_stone"},
- {pos: [2, 1, 2], state: "minecraft:glass"},
- {pos: [2, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"},
- {pos: [2, 1, 4], state: "minecraft:smooth_stone"},
- {pos: [3, 1, 2], state: "minecraft:glass"},
- {pos: [3, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"},
- {pos: [3, 1, 4], state: "minecraft:smooth_stone"},
- {pos: [4, 1, 2], state: "minecraft:glass"},
- {pos: [4, 1, 3], state: "minecraft:rail{shape:east_west,waterlogged:false}"},
- {pos: [4, 1, 4], state: "minecraft:smooth_stone"},
- {pos: [5, 1, 2], state: "minecraft:glass"},
- {pos: [5, 1, 3], state: "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}"},
- {pos: [5, 1, 4], state: "minecraft:smooth_stone"},
- {pos: [6, 1, 2], state: "minecraft:lever{face:wall,facing:north,powered:true}"},
- {pos: [6, 1, 3], state: "minecraft:smooth_stone"},
- {pos: [1, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"},
- {pos: [1, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"},
- {pos: [1, 2, 3], state: "minecraft:stonecutter{facing:west}"},
- {pos: [2, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"},
- {pos: [2, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"},
- {pos: [2, 2, 3], state: "minecraft:stonecutter{facing:west}"},
- {pos: [3, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"},
- {pos: [3, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"},
- {pos: [3, 2, 3], state: "minecraft:stonecutter{facing:west}"},
- {pos: [4, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"},
- {pos: [4, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"},
- {pos: [4, 2, 3], state: "minecraft:stonecutter{facing:west}"},
- {pos: [5, 2, 1], state: "minecraft:sticky_piston{extended:true,facing:south}"},
- {pos: [5, 2, 2], state: "minecraft:piston_head{facing:south,short:false,type:sticky}"},
- {pos: [5, 2, 3], state: "minecraft:stonecutter{facing:west}"},
- {pos: [0, 3, 2], state: "minecraft:smooth_stone"},
- {pos: [1, 3, 0], state: "minecraft:lever{face:wall,facing:north,powered:true}"},
- {pos: [1, 3, 1], state: "minecraft:smooth_stone"},
- {pos: [1, 3, 2], state: "minecraft:lava{level:4}"},
- {pos: [1, 3, 3], state: "minecraft:cobblestone"},
- {pos: [1, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [2, 3, 1], state: "minecraft:smooth_stone"},
- {pos: [2, 3, 2], state: "minecraft:lava{level:2}"},
- {pos: [2, 3, 3], state: "minecraft:cobblestone"},
- {pos: [2, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [3, 3, 1], state: "minecraft:smooth_stone"},
- {pos: [3, 3, 2], state: "minecraft:lava{level:0}"},
- {pos: [3, 3, 3], state: "minecraft:cobblestone"},
- {pos: [3, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [4, 3, 1], state: "minecraft:smooth_stone"},
- {pos: [4, 3, 2], state: "minecraft:lava{level:2}"},
- {pos: [4, 3, 3], state: "minecraft:cobblestone"},
- {pos: [4, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [5, 3, 1], state: "minecraft:smooth_stone"},
- {pos: [5, 3, 2], state: "minecraft:lava{level:4}"},
- {pos: [5, 3, 3], state: "minecraft:cobblestone"},
- {pos: [5, 3, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [6, 3, 2], state: "minecraft:smooth_stone"},
- {pos: [1, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:15,south:none,west:side}"},
- {pos: [2, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:14,south:none,west:side}"},
- {pos: [3, 4, 1], state: "minecraft:redstone_wire{east:side,north:none,power:13,south:none,west:side}"},
- {pos: [4, 4, 1], state: "minecraft:redstone_wire{east:up,north:none,power:12,south:none,west:side}"},
- {pos: [5, 4, 1], state: "minecraft:smooth_stone"},
- {pos: [1, 5, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [2, 5, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [3, 5, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [4, 5, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [5, 5, 1], state: "minecraft:redstone_wire{east:side,north:none,power:11,south:none,west:side}"},
- {pos: [5, 5, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [1, 6, 0], state: "minecraft:lever{face:wall,facing:north,powered:true}"},
- {pos: [1, 6, 1], state: "minecraft:smooth_stone"},
- {pos: [1, 6, 2], state: "anvilcraft:pulse_generator{facing:north,powered:false}", nbt: {ExtraData: {Inputting: 1b, OutputMode: 0b, SignalDuration: 5, StartMode: 2b, State: 0b, WaitingTime: 10}, id: "anvilcraft:pulse_generator"}},
- {pos: [1, 6, 3], state: "anvilcraft:magnet_block{lit:false}"},
- {pos: [2, 6, 0], state: "minecraft:lever{face:wall,facing:north,powered:false}"},
- {pos: [2, 6, 1], state: "minecraft:smooth_stone"},
- {pos: [2, 6, 3], state: "anvilcraft:magnet_block{lit:false}"},
- {pos: [3, 6, 1], state: "minecraft:sticky_piston{extended:false,facing:east}"},
- {pos: [3, 6, 3], state: "anvilcraft:magnet_block{lit:false}"},
- {pos: [4, 6, 1], state: "minecraft:smooth_stone"},
- {pos: [4, 6, 3], state: "anvilcraft:magnet_block{lit:false}"},
- {pos: [5, 6, 2], state: "anvilcraft:pulse_generator{facing:south,powered:false}", nbt: {ExtraData: {Inputting: 0b, OutputMode: 0b, SignalDuration: 17, StartMode: 0b, State: 0b, WaitingTime: 6}, id: "anvilcraft:pulse_generator"}},
- {pos: [5, 6, 3], state: "anvilcraft:magnet_block{lit:false}"},
- {pos: [1, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [2, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [3, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [4, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [5, 7, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}
- ],
- entities: [],
- palette: [
- "minecraft:smooth_stone",
- "minecraft:glass",
- "minecraft:cobblestone",
- "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}",
- "anvilcraft:magnet_block{lit:false}",
- "minecraft:sticky_piston{extended:false,facing:east}",
- "minecraft:lever{face:wall,facing:north,powered:true}",
- "minecraft:powered_rail{powered:true,shape:east_west,waterlogged:false}",
- "minecraft:rail{shape:east_west,waterlogged:false}",
- "minecraft:sticky_piston{extended:true,facing:south}",
- "minecraft:piston_head{facing:south,short:false,type:sticky}",
- "minecraft:stonecutter{facing:west}",
- "minecraft:lava{level:4}",
- "minecraft:lava{level:2}",
- "minecraft:lava{level:0}",
- "minecraft:redstone_wire{east:side,north:none,power:15,south:none,west:side}",
- "minecraft:redstone_wire{east:side,north:none,power:14,south:none,west:side}",
- "minecraft:redstone_wire{east:side,north:none,power:13,south:none,west:side}",
- "minecraft:redstone_wire{east:up,north:none,power:12,south:none,west:side}",
- "minecraft:anvil{facing:east}",
- "minecraft:redstone_wire{east:side,north:none,power:11,south:none,west:side}",
- "minecraft:lever{face:wall,facing:north,powered:false}",
- "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}",
- "minecraft:chest{facing:north,type:left,waterlogged:false}",
- "anvilcraft:chute{enabled:true,facing:north}",
- "minecraft:chest{facing:north,type:right,waterlogged:false}",
- "anvilcraft:pulse_generator{facing:north,powered:false}",
- "anvilcraft:pulse_generator{facing:south,powered:false}"
- ]
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt
deleted file mode 100644
index 7fea00309e..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/stone.snbt
+++ /dev/null
@@ -1,131 +0,0 @@
-{
- DataVersion: 3955,
- size: [8, 7, 5],
- data: [
- {pos: [2, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [2, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [2, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [3, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [3, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [3, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [4, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [4, 0, 2], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [4, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [5, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [5, 0, 2], state: "minecraft:chest{facing:north,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [5, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [6, 0, 1], state: "anvilcraft:chute{enabled:true,facing:south}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [6, 0, 2], state: "minecraft:chest{facing:north,type:right,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [6, 0, 3], state: "anvilcraft:chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [2, 1, 1], state: "minecraft:stonecutter{facing:south}"},
- {pos: [2, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [2, 1, 3], state: "minecraft:stonecutter{facing:south}"},
- {pos: [3, 1, 1], state: "minecraft:stonecutter{facing:south}"},
- {pos: [3, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [3, 1, 3], state: "minecraft:stonecutter{facing:south}"},
- {pos: [4, 1, 1], state: "minecraft:stonecutter{facing:south}"},
- {pos: [4, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [4, 1, 3], state: "minecraft:stonecutter{facing:south}"},
- {pos: [5, 1, 1], state: "minecraft:stonecutter{facing:south}"},
- {pos: [5, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [5, 1, 3], state: "minecraft:stonecutter{facing:south}"},
- {pos: [6, 1, 1], state: "minecraft:stonecutter{facing:south}"},
- {pos: [6, 1, 2], state: "minecraft:smooth_stone_slab{type:top,waterlogged:false}"},
- {pos: [6, 1, 3], state: "minecraft:stonecutter{facing:south}"},
- {pos: [1, 2, 2], state: "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}"},
- {pos: [2, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [2, 2, 1], state: "minecraft:cobblestone"},
- {pos: [2, 2, 2], state: "minecraft:lava{level:4}"},
- {pos: [2, 2, 3], state: "minecraft:cobblestone"},
- {pos: [2, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [3, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [3, 2, 1], state: "minecraft:cobblestone"},
- {pos: [3, 2, 2], state: "minecraft:lava{level:2}"},
- {pos: [3, 2, 3], state: "minecraft:cobblestone"},
- {pos: [3, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [4, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [4, 2, 1], state: "minecraft:cobblestone"},
- {pos: [4, 2, 2], state: "minecraft:lava{level:0}"},
- {pos: [4, 2, 3], state: "minecraft:cobblestone"},
- {pos: [4, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [5, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [5, 2, 1], state: "minecraft:cobblestone"},
- {pos: [5, 2, 2], state: "minecraft:lava{level:2}"},
- {pos: [5, 2, 3], state: "minecraft:cobblestone"},
- {pos: [5, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [6, 2, 0], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [6, 2, 1], state: "minecraft:cobblestone"},
- {pos: [6, 2, 2], state: "minecraft:lava{level:4}"},
- {pos: [6, 2, 3], state: "minecraft:cobblestone"},
- {pos: [6, 2, 4], state: "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}"},
- {pos: [7, 2, 2], state: "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}"},
- {pos: [2, 4, 1], state: "minecraft:anvil{facing:east}"},
- {pos: [2, 4, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [3, 4, 1], state: "minecraft:anvil{facing:east}"},
- {pos: [3, 4, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [4, 4, 1], state: "minecraft:anvil{facing:east}"},
- {pos: [4, 4, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [5, 4, 1], state: "minecraft:anvil{facing:east}"},
- {pos: [5, 4, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [6, 4, 1], state: "minecraft:anvil{facing:east}"},
- {pos: [6, 4, 3], state: "minecraft:anvil{facing:east}"},
- {pos: [0, 5, 1], state: "minecraft:lever{face:ceiling,facing:north,powered:true}"},
- {pos: [0, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [0, 5, 3], state: "minecraft:smooth_stone"},
- {pos: [1, 5, 1], state: "minecraft:smooth_stone"},
- {pos: [1, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [1, 5, 3], state: "minecraft:smooth_stone"},
- {pos: [2, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [2, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [2, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [3, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [3, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [3, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [4, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [4, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [4, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [5, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [5, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [5, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [6, 5, 1], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [6, 5, 2], state: "minecraft:smooth_stone"},
- {pos: [6, 5, 3], state: "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}"},
- {pos: [0, 6, 1], state: "minecraft:smooth_stone"},
- {pos: [0, 6, 2], state: "minecraft:repeater{delay:2,facing:south,locked:false,powered:false}"},
- {pos: [0, 6, 3], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:none,west:none}"},
- {pos: [1, 6, 1], state: "minecraft:redstone_wall_torch{facing:east,lit:false}"},
- {pos: [1, 6, 2], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:none}"},
- {pos: [1, 6, 3], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:none,west:side}"},
- {pos: [2, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [3, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [4, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [5, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [6, 6, 2], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"}
- ],
- entities: [],
- palette: [
- "minecraft:oak_leaves{distance:7,persistent:true,waterlogged:true}",
- "minecraft:cobblestone",
- "minecraft:smooth_stone",
- "minecraft:stonecutter{facing:south}",
- "minecraft:smooth_stone_slab{type:top,waterlogged:false}",
- "minecraft:smooth_stone_slab{type:bottom,waterlogged:false}",
- "minecraft:lava{level:4}",
- "minecraft:lava{level:2}",
- "minecraft:lava{level:0}",
- "minecraft:anvil{facing:east}",
- "minecraft:lever{face:ceiling,facing:north,powered:true}",
- "anvilcraft:hollow_magnet_block{lit:false,waterlogged:false}",
- "minecraft:repeater{delay:2,facing:south,locked:false,powered:false}",
- "minecraft:redstone_wire{east:side,north:side,power:0,south:none,west:none}",
- "minecraft:redstone_wall_torch{facing:east,lit:false}",
- "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:none}",
- "minecraft:redstone_wire{east:none,north:side,power:0,south:none,west:side}",
- "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}",
- "anvilcraft:chute{enabled:true,facing:south}",
- "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}",
- "anvilcraft:chute{enabled:true,facing:north}",
- "minecraft:chest{facing:north,type:left,waterlogged:false}",
- "minecraft:chest{facing:north,type:right,waterlogged:false}"
- ]
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt
new file mode 100644
index 0000000000..bc7842218c
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt
deleted file mode 100644
index c257e02115..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree.snbt
+++ /dev/null
@@ -1,214 +0,0 @@
-{
- DataVersion: 3955,
- size: [7, 11, 7],
- data: [
- {pos: [0, 0, 0], state: "minecraft:podzol{snowy:false}"},
- {pos: [0, 0, 1], state: "minecraft:podzol{snowy:false}"},
- {pos: [1, 0, 0], state: "minecraft:podzol{snowy:false}"},
- {pos: [1, 0, 1], state: "minecraft:podzol{snowy:false}"},
- {pos: [1, 0, 2], state: "minecraft:smooth_stone"},
- {pos: [1, 0, 3], state: "minecraft:smooth_stone"},
- {pos: [2, 0, 0], state: "anvilcraft:induction_light{axis:y,color:pink,overload:false,powered:false,waterlogged:false}", nbt: {id: "anvilcraft:induction_light"}},
- {pos: [2, 0, 1], state: "minecraft:smooth_stone"},
- {pos: [2, 0, 2], state: "minecraft:smooth_stone"},
- {pos: [4, 0, 3], state: "anvilcraft:chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 1b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_log"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:stick"}, SlotLimit: 64}], Size: 9}, id: "anvilcraft:chute"}},
- {pos: [4, 0, 4], state: "minecraft:spruce_log{axis:y}"},
- {pos: [4, 0, 5], state: "minecraft:anvil{facing:east}"},
- {pos: [4, 0, 6], state: "minecraft:spruce_log{axis:y}"},
- {pos: [5, 0, 0], state: "minecraft:chest{facing:east,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [5, 0, 1], state: "minecraft:chest{facing:east,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:spruce_log"}, {Slot: 1b, count: 20, id: "minecraft:stick"}, {Slot: 2b, count: 64, id: "minecraft:spruce_log"}, {Slot: 3b, count: 64, id: "minecraft:spruce_log"}, {Slot: 4b, count: 64, id: "minecraft:spruce_log"}, {Slot: 5b, count: 64, id: "minecraft:spruce_log"}, {Slot: 6b, count: 60, id: "minecraft:spruce_log"}], id: "minecraft:chest"}},
- {pos: [5, 0, 2], state: "anvilcraft:magnetic_chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}},
- {pos: [5, 0, 3], state: "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [5, 0, 4], state: "minecraft:anvil{facing:north}"},
- {pos: [5, 0, 5], state: "anvilcraft:heavy_iron_block"},
- {pos: [5, 0, 6], state: "minecraft:anvil{facing:north}"},
- {pos: [6, 0, 3], state: "minecraft:lava_cauldron"},
- {pos: [6, 0, 4], state: "minecraft:spruce_log{axis:y}"},
- {pos: [6, 0, 5], state: "minecraft:anvil{facing:west}"},
- {pos: [6, 0, 6], state: "minecraft:spruce_log{axis:y}"},
- {pos: [0, 1, 0], state: "minecraft:spruce_sapling{stage:0}"},
- {pos: [0, 1, 1], state: "minecraft:spruce_sapling{stage:0}"},
- {pos: [1, 1, 0], state: "minecraft:spruce_sapling{stage:0}"},
- {pos: [1, 1, 1], state: "minecraft:spruce_sapling{stage:0}"},
- {pos: [1, 1, 2], state: "minecraft:repeater{delay:1,facing:south,locked:false,powered:true}"},
- {pos: [1, 1, 3], state: "minecraft:lever{face:floor,facing:north,powered:true}"},
- {pos: [2, 1, 1], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:side,west:none}"},
- {pos: [2, 1, 2], state: "minecraft:redstone_wire{east:none,north:side,power:0,south:up,west:none}"},
- {pos: [2, 1, 3], state: "minecraft:smooth_stone"},
- {pos: [3, 1, 0], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"},
- {pos: [3, 1, 1], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"},
- {pos: [4, 1, 0], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"},
- {pos: [4, 1, 1], state: "anvilcraft:block_placer{orientation:west_up,triggered:false}"},
- {pos: [4, 1, 3], state: "anvilcraft:item_collector{overload:false,powered:false}", nbt: {Cooldown: 2, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, RangeRadius: 3, cd: 2, id: "anvilcraft:item_collector"}},
- {pos: [5, 1, 0], state: "minecraft:chest{facing:east,type:left,waterlogged:false}", nbt: {Items: [], id: "minecraft:chest"}},
- {pos: [5, 1, 1], state: "minecraft:chest{facing:east,type:right,waterlogged:false}", nbt: {Items: [{Slot: 0b, count: 64, id: "minecraft:spruce_sapling"}, {Slot: 1b, count: 33, id: "minecraft:spruce_sapling"}], id: "minecraft:chest"}},
- {pos: [5, 1, 2], state: "anvilcraft:magnetic_chute{enabled:true,facing:north}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 0b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}},
- {pos: [5, 1, 3], state: "anvilcraft:magnetic_chute{enabled:true,facing:east}", nbt: {Cooldown: 0, Inventory: {FilterEnabled: 1b, Inventory: [{Disabled: 0b, IsEmptySlot: 1b, Slot: 0, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_sapling"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 1, SlotFilterEnabled: 1b, SlotFilterItem: {count: 1, id: "minecraft:spruce_sapling"}, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 2, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 3, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 4, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 5, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 6, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 7, SlotFilterEnabled: 0b, SlotLimit: 64}, {Disabled: 0b, IsEmptySlot: 1b, Slot: 8, SlotFilterEnabled: 0b, SlotLimit: 64}], Size: 9}, id: "anvilcraft:magnetic_chute"}},
- {pos: [6, 1, 3], state: "anvilcraft:simple_chute{enabled:true,facing:down,tall:false,waterlogged:false}", nbt: {Cooldown: 0, Inventory: {Items: [], Size: 1}, id: "anvilcraft:simple_chute"}},
- {pos: [2, 2, 3], state: "minecraft:redstone_wire{east:up,north:side,power:0,south:none,west:none}"},
- {pos: [3, 2, 0], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"},
- {pos: [3, 2, 1], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"},
- {pos: [3, 2, 3], state: "minecraft:smooth_stone"},
- {pos: [4, 2, 0], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"},
- {pos: [4, 2, 1], state: "anvilcraft:spectral_anvil{facing:north,powered:false}"},
- {pos: [3, 3, 0], state: "anvilcraft:magnet_block{lit:true}"},
- {pos: [3, 3, 1], state: "anvilcraft:magnet_block{lit:true}"},
- {pos: [3, 3, 3], state: "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}"},
- {pos: [4, 3, 0], state: "anvilcraft:magnet_block{lit:true}"},
- {pos: [4, 3, 1], state: "anvilcraft:magnet_block{lit:true}"},
- {pos: [4, 3, 2], state: "minecraft:smooth_stone"},
- {pos: [4, 3, 3], state: "minecraft:smooth_stone"},
- {pos: [4, 4, 0], state: "minecraft:redstone_wire{east:none,north:side,power:13,south:side,west:none}"},
- {pos: [4, 4, 1], state: "minecraft:redstone_wire{east:none,north:side,power:14,south:side,west:none}"},
- {pos: [4, 4, 2], state: "minecraft:redstone_wire{east:none,north:side,power:15,south:side,west:none}"},
- {pos: [4, 4, 3], state: "minecraft:redstone_torch{lit:true}"},
- {pos: [4, 5, 3], state: "minecraft:smooth_stone"},
- {pos: [4, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_wn}"},
- {pos: [4, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_w}"},
- {pos: [4, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_ws}"},
- {pos: [5, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_n}"},
- {pos: [5, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_center}"},
- {pos: [5, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_s}"},
- {pos: [6, 5, 4], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_en}"},
- {pos: [6, 5, 5], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_e}"},
- {pos: [6, 5, 6], state: "anvilcraft:giant_anvil{cube:corner,half:bottom_es}"},
- {pos: [4, 6, 3], state: "minecraft:redstone_torch{lit:false}"},
- {pos: [4, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_wn}"},
- {pos: [4, 6, 5], state: "anvilcraft:giant_anvil{cube:corner,half:mid_w}"},
- {pos: [4, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_ws}"},
- {pos: [5, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_n}"},
- {pos: [5, 6, 5], state: "anvilcraft:giant_anvil{cube:center,half:mid_center}"},
- {pos: [5, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_s}"},
- {pos: [6, 6, 4], state: "anvilcraft:giant_anvil{cube:corner,half:mid_en}"},
- {pos: [6, 6, 5], state: "anvilcraft:giant_anvil{cube:corner,half:mid_e}"},
- {pos: [6, 6, 6], state: "anvilcraft:giant_anvil{cube:corner,half:mid_es}"},
- {pos: [4, 7, 3], state: "minecraft:smooth_stone"},
- {pos: [4, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_wn}"},
- {pos: [4, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_w}"},
- {pos: [4, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_ws}"},
- {pos: [5, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_n}"},
- {pos: [5, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_center}"},
- {pos: [5, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_s}"},
- {pos: [6, 7, 4], state: "anvilcraft:giant_anvil{cube:corner,half:top_en}"},
- {pos: [6, 7, 5], state: "anvilcraft:giant_anvil{cube:corner,half:top_e}"},
- {pos: [6, 7, 6], state: "anvilcraft:giant_anvil{cube:corner,half:top_es}"},
- {pos: [4, 8, 3], state: "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:side}"},
- {pos: [4, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 8, 4], state: "anvilcraft:deflection_ring{facing:up,half:bottom_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 8, 5], state: "anvilcraft:deflection_ring{facing:up,half:bottom_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 8, 6], state: "anvilcraft:deflection_ring{facing:up,half:bottom_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 9, 4], state: "anvilcraft:deflection_ring{facing:up,half:mid_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 9, 5], state: "anvilcraft:deflection_ring{facing:up,half:mid_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 9, 6], state: "anvilcraft:deflection_ring{facing:up,half:mid_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_wn,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_w,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [4, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_ws,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_n,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_center,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [5, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_s,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 10, 4], state: "anvilcraft:deflection_ring{facing:up,half:top_en,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 10, 5], state: "anvilcraft:deflection_ring{facing:up,half:top_e,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}},
- {pos: [6, 10, 6], state: "anvilcraft:deflection_ring{facing:up,half:top_es,overload:false,switch:on}", nbt: {id: "anvilcraft:deflection_ring", lastEntitySpeed: 0.0d}}
- ],
- entities: [],
- palette: [
- "minecraft:podzol{snowy:false}",
- "minecraft:smooth_stone",
- "minecraft:spruce_log{axis:y}",
- "anvilcraft:heavy_iron_block",
- "anvilcraft:magnet_block{lit:true}",
- "minecraft:anvil{facing:east}",
- "minecraft:anvil{facing:north}",
- "minecraft:lava_cauldron",
- "minecraft:anvil{facing:west}",
- "minecraft:spruce_sapling{stage:0}",
- "minecraft:repeater{delay:1,facing:south,locked:false,powered:true}",
- "minecraft:lever{face:floor,facing:north,powered:true}",
- "minecraft:redstone_wire{east:none,north:side,power:0,south:side,west:none}",
- "minecraft:redstone_wire{east:none,north:side,power:0,south:up,west:none}",
- "anvilcraft:block_placer{orientation:west_up,triggered:false}",
- "minecraft:redstone_wire{east:up,north:side,power:0,south:none,west:none}",
- "anvilcraft:spectral_anvil{facing:north,powered:false}",
- "minecraft:redstone_wire{east:side,north:none,power:0,south:none,west:side}",
- "minecraft:redstone_wire{east:none,north:side,power:13,south:side,west:none}",
- "minecraft:redstone_wire{east:none,north:side,power:14,south:side,west:none}",
- "minecraft:redstone_wire{east:none,north:side,power:15,south:side,west:none}",
- "minecraft:redstone_torch{lit:true}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_wn}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_w}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_ws}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_n}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_center}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_s}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_en}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_e}",
- "anvilcraft:giant_anvil{cube:corner,half:bottom_es}",
- "minecraft:redstone_torch{lit:false}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_wn}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_w}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_ws}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_n}",
- "anvilcraft:giant_anvil{cube:center,half:mid_center}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_s}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_en}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_e}",
- "anvilcraft:giant_anvil{cube:corner,half:mid_es}",
- "anvilcraft:giant_anvil{cube:corner,half:top_wn}",
- "anvilcraft:giant_anvil{cube:corner,half:top_w}",
- "anvilcraft:giant_anvil{cube:corner,half:top_ws}",
- "anvilcraft:giant_anvil{cube:corner,half:top_n}",
- "anvilcraft:giant_anvil{cube:corner,half:top_center}",
- "anvilcraft:giant_anvil{cube:corner,half:top_s}",
- "anvilcraft:giant_anvil{cube:corner,half:top_en}",
- "anvilcraft:giant_anvil{cube:corner,half:top_e}",
- "anvilcraft:giant_anvil{cube:corner,half:top_es}",
- "minecraft:redstone_wire{east:side,north:side,power:0,south:side,west:side}",
- "anvilcraft:induction_light{axis:y,color:pink,overload:false,powered:false,waterlogged:false}",
- "anvilcraft:chute{enabled:true,facing:east}",
- "minecraft:chest{facing:east,type:left,waterlogged:false}",
- "minecraft:chest{facing:east,type:right,waterlogged:false}",
- "anvilcraft:magnetic_chute{enabled:true,facing:north}",
- "anvilcraft:simple_chute{enabled:true,facing:east,tall:false,waterlogged:false}",
- "anvilcraft:item_collector{overload:false,powered:false}",
- "anvilcraft:magnetic_chute{enabled:true,facing:east}",
- "anvilcraft:simple_chute{enabled:true,facing:down,tall:false,waterlogged:false}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_wn,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_w,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_ws,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_n,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_center,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_s,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_en,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_e,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:bottom_es,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_wn,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_w,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_ws,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_n,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_center,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_s,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_en,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_e,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:mid_es,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_wn,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_w,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_ws,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_n,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_center,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_s,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_en,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_e,overload:false,switch:on}",
- "anvilcraft:deflection_ring{facing:up,half:top_es,overload:false,switch:on}"
- ]
-}
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt
new file mode 100644
index 0000000000..0a6330a95d
Binary files /dev/null and b/src/main/resources/assets/anvilcraft/ageratum/structures/machine/tree_advanced.nbt differ
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md
index 8c565e76fc..78476ab1fe 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/000_process/009.md
@@ -30,7 +30,7 @@ navigation:
- [点我](../008_recipe/210_netherite_ingot.md)查看流程
-- 手册提供了[示例机器](../009_machine/201_netherite_block.md)
+- 手册提供了[远古残骸机](../009_machine/202_ancient_debris.md)和[下界合金块机](../009_machine/203_netherite_block.md)
> 可以考虑做一条全自动产线
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md
index 4790112db8..d66532cad8 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/001_basic_minerals.md
@@ -29,7 +29,7 @@ navigation:
# 刷石机——万物之源
-可以试试本模组提供的预制机器:[刷石机](../009_machine/002_stone.md) / [三模沙机](../009_machine/003_sand.md)
+可以试试本模组提供的预制机器:[三模沙机](../009_machine/003_sand.md)
# -产线
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md
index 8424a7dced..7ac334166d 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/008_recipe/210_netherite_ingot.md
@@ -19,5 +19,5 @@ navigation:
-如果不想自己设计机器,可以参考手册的[机器](../009_machine/201_netherite_block.md)
+如果不想自己设计机器,可以参考手册的[远古残骸机](../009_machine/202_ancient_debris.md)和[下界合金块机](../009_machine/203_netherite_block.md)
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md
deleted file mode 100644
index 4332031af0..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/002_stone.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-navigation:
- title: "资源:刷石机"
- icon: "minecraft:cobblestone"
----
-
-# 资源:刷石机
-
-十分重要,因此需要制作一台刷石机。
-
-利用[铁砧破坏](../007_struct/000_anvil_processing.md)的特性,可以自动生产大量
-
-
-
-
-左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
-
-
-## 图示
-
-- 所有 可替换为 任意完整不透明方块
-- 所有 可替换为 任意透明方块
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md
index 50e21e7fc1..af00159ef8 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/003_sand.md
@@ -10,22 +10,8 @@ navigation:
接下来这台三模式砸沙机,可以控制拉杆切换产出圆石、沙砾还是沙子
-
+
-左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
-
-
-1. 活塞往右2格,是*1号开关*:机器总开关
-2. *1号开关*下面是*2号开关*:开启则生产圆石;关闭则启用*3号开关*
-3. *1号开关*左边是*3号开关*:开启则生产沙子;关闭则生产沙砾
-4. *1号开关*后面的脉冲发生器设置为循环模式:每间隔 10gt 发出长度 5gt 的信号
-5. 脉冲发生器另一个设置为上升沿模式:延迟 6gt 发出长度 17gt 的信号
-6. 放一个漏斗矿车
-
-
-关闭*总开关*后,再调整模式
-
-
-- 所有 可替换为 任意完整不透明方块
-- 所有 可替换为 任意透明方块
\ No newline at end of file
+可以点击结构中的脉冲发生器来查看配置
+
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md
index bfcccf71ee..b86099c197 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/021_crush.md
@@ -12,8 +12,6 @@ navigation:
如果需要更高效率,可以简单地延长,也可以自行设计更高效的机器
-## 图示
-
@@ -23,7 +21,7 @@ navigation:
1. 脉冲发生器设置为循环模式:每间隔 8gt 发出长度 8gt 的信号
- 所有 可替换为 任意完整不透明方块
-- 所有 可替换为 任意台阶
+- 所有 可替换为 任意上表面不完整方块
- 所有 可替换为 任意铁砧
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md
index b7c332735e..4a6f28983f 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/022_mesh.md
@@ -10,17 +10,8 @@ navigation:
- 但每次*过筛*只有一部分原料能被使用,手动反复过筛费时又费力
- 下面给出一个自动过筛的示例机器
-## 图示
-
-
+
左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
-
-1. 脉冲发生器设置为循环模式:每间隔 5gt 发出长度 3gt 的信号;驱动活塞运行
-2. 箱子上的磁性溜槽设置过滤:过筛原料
-
-- 所有 可替换为 任意完整不透明方块
-- 所有 可替换为 任意台阶
-- 所有 可替换为 任意铁砧
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md
index ca50b3dc54..0356e1830f 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/101_piezoelectric_crystal.md
@@ -12,19 +12,34 @@ navigation:
可以在此基础上继续展开
-## 图示
+### 图示
-
-左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
-
-
1. 脉冲发生器设置为循环模式:每间隔 5gt 输出信号 5gt,控制铁砧下落
- 所有 可替换为 任意完整不透明方块
- 所有 可替换为 任意铁砧
+## 进阶版
+
+第一个发电机也可以用一些小技巧提高发电效率:
+
+发电量 10kW/个铁砧;共计 80kW
+
+### 图示
+
+
+
+1. 这里利用了砸船的小技巧和 0t 脉冲能让磁铁快速闪烁的小技巧
+
+- 铁砧碰到船时,如果离地面 1格 以内,会瞬间落地,这里利用花盆控制船的高度正好在 1格 内
+- 脉冲发生器每经过 4gt 输出 0gt 信号时,可以让磁铁最快闪烁
+
+
+你也可以在其它地方使用这些小技巧增加机器的效率
+
+
# 皇家铁砧下弹压电发电机
- 随着进一步的发展,第一台发电机的电量很可能不够用了,是时候进行升级了
@@ -33,15 +48,20 @@ navigation:
发电量 15kW/个铁砧;共计 150kW
-## 图示
-
-左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
+树脂块也有粘液块一样的弹性,同时不会粘旁边的方块
-1. 活塞边上的*脉冲发生器*设置为上升沿模式:延时 3gt 输出信号 3gt
-2. 更远的*脉冲发生器*设置为循环模式:每间隔 1gt 输出信号 9gt
+## 进阶版
-- 所有 可替换为 任意完整不透明方块
\ No newline at end of file
+可以用一些精妙的时序控制大幅提高发电效率,总之上面那个是老机器看看就行了,这个才是真实用(
+
+发电量 75kW/个铁砧;共计 300kW
+
+
+
+
+可以自行加长机器扩展发电量
+
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md
index 305ae47b88..1f654b750d 100644
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md
+++ b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_gem.md
@@ -10,8 +10,6 @@ navigation:
-设为:循环模式 | 16gt | 6gt
-
.
..
@@ -24,19 +22,11 @@ navigation:
这台机器通过推拉锅来不断切换下方的工作方块,依赖复杂精妙的时序使得加工速度很高。
-
+
+
+1. 使用按钮修改铜灯,使其调整为亮起状态
+2. 按照标记放入*等量*宝石块和宝石
-左键调整位置;右键调整角度;PgUP/PgDN调整显示高度
-
-
-1. 使用按钮修改铜灯,使其默认为亮起状态(之后可以把按钮拆了)
-2. 使用铁砧锤右键炼药锅正面,创建输出槽
-3. *比较器*朝向的*投掷器*放入绿宝石块
-4. 更远的*投掷器*放入等量宝石
-5. 填入原料后,复位拉杆运行
-6. 运行过程中不可关机,结束后拉下拉杆关机
-
-- 所有 可替换为 任意完整不透明方块
-- 所有 可替换为 任意铜灯
-- 确保 方向正确
+运行过程中不可关机,结束后拉下拉杆关机
+
\ No newline at end of file
diff --git a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md b/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md
deleted file mode 100644
index 7eb099c30b..0000000000
--- a/src/main/resources/assets/anvilcraft/ageratum/zh_cn/009_machine/201_netherite_block.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-navigation:
- title: "§6加工:下界合金"
- icon: "minecraft:netherite_block"
----
-
-# 加工:下界合金
-
-以下两台机器实现了[量产下界合金](../008_recipe/210_netherite_ingot.md)
-
-## 机
-
-
-
-- 设为:循环模式 | 16gt | 0gt
-- 所有 可替换为 任意完整不透明方块
-- 配置输出的单次仅输出一个(使用滚轮调整数量)
-
-
-
-## 机
-
-
-
-- 两侧木桶填充足量的和
-- 控制的主循环设为:循环模式 | 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