From 7861b4e20f1060a2f8a7f8fd8e2b228df303226b Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 14 May 2025 23:27:10 +0200 Subject: [PATCH] getting jiggy with it --- .../hbm/blocks/generic/BlockWandJigsaw.java | 25 ++++++- .../com/hbm/itempool/ItemPoolsComponent.java | 18 ++++- .../java/com/hbm/items/tool/ItemWandD.java | 13 +++- .../com/hbm/items/weapon/ItemAmmoArty.java | 6 +- .../java/com/hbm/main/StructureManager.java | 24 +++++- .../hbm/particle/helper/ExplosionCreator.java | 2 +- .../world/biome/BiomeDecoratorNoMansLand.java | 10 +-- .../hbm/world/biome/BiomeGenNoMansLand.java | 2 +- .../java/com/hbm/world/gen/NBTStructure.java | 1 + .../com/hbm/world/gen/NTMWorldGenerator.java | 70 ++++++++++++++---- .../structures/trench/bunker_collapsed.nbt | Bin 0 -> 373 bytes .../hbm/structures/trench/bunker_folly.nbt | Bin 0 -> 540 bytes .../hbm/structures/trench/bunker_fuel.nbt | Bin 0 -> 387 bytes .../hbm/structures/trench/bunker_large.nbt | Bin 0 -> 1284 bytes .../hbm/structures/trench/bunker_small.nbt | Bin 0 -> 626 bytes .../assets/hbm/structures/trench/cross.nbt | Bin 0 -> 1334 bytes .../hbm/structures/trench/curve_inner.nbt | Bin 0 -> 676 bytes .../hbm/structures/trench/curve_outer.nbt | Bin 0 -> 697 bytes .../assets/hbm/structures/trench/end_left.nbt | Bin 0 -> 753 bytes .../hbm/structures/trench/end_right.nbt | Bin 0 -> 754 bytes .../assets/hbm/structures/trench/s_left.nbt | Bin 0 -> 587 bytes .../assets/hbm/structures/trench/s_right.nbt | Bin 0 -> 599 bytes .../assets/hbm/structures/trench/straight.nbt | Bin 0 -> 502 bytes .../hbm/structures/trench/straight_bridge.nbt | Bin 0 -> 532 bytes .../hbm/structures/trench/straight_dirt.nbt | Bin 0 -> 547 bytes .../structures/trench/straight_door_left.nbt | Bin 0 -> 588 bytes .../structures/trench/straight_door_right.nbt | Bin 0 -> 584 bytes .../hbm/structures/trench/straight_stairs.nbt | Bin 0 -> 520 bytes .../assets/hbm/structures/trench/t_inner.nbt | Bin 0 -> 756 bytes .../assets/hbm/structures/trench/t_outer.nbt | Bin 0 -> 773 bytes .../assets/hbm/structures/trench/trench.nbt | Bin 567 -> 0 bytes .../hbm/structures/trench/trench_junction.nbt | Bin 960 -> 0 bytes .../hbm/structures/trench/trench_left.nbt | Bin 472 -> 0 bytes .../hbm/structures/trench/trench_right.nbt | Bin 473 -> 0 bytes 34 files changed, 136 insertions(+), 35 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/trench/bunker_collapsed.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/bunker_folly.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/bunker_fuel.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/bunker_large.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/bunker_small.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/cross.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/curve_inner.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/curve_outer.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/end_left.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/end_right.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/s_left.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/s_right.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight_bridge.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight_dirt.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight_door_left.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight_door_right.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/straight_stairs.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/t_inner.nbt create mode 100644 src/main/resources/assets/hbm/structures/trench/t_outer.nbt delete mode 100644 src/main/resources/assets/hbm/structures/trench/trench.nbt delete mode 100644 src/main/resources/assets/hbm/structures/trench/trench_junction.nbt delete mode 100644 src/main/resources/assets/hbm/structures/trench/trench_left.nbt delete mode 100644 src/main/resources/assets/hbm/structures/trench/trench_right.nbt diff --git a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java index 365c42e56..55cd7aff9 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWandJigsaw.java @@ -36,6 +36,7 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.inventory.Container; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; @@ -133,6 +134,19 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio if(!(te instanceof TileEntityWandJigsaw)) return false; TileEntityWandJigsaw jigsaw = (TileEntityWandJigsaw) te; + + if(player.getHeldItem() != null && player.getHeldItem().getItem() == Items.paper) { + TileEntityWandJigsaw.copyMode = true; + if(!player.getHeldItem().hasTagCompound()) { + player.getHeldItem().stackTagCompound = new NBTTagCompound(); + jigsaw.writeToNBT(player.getHeldItem().stackTagCompound); + } else { + jigsaw.readFromNBT(player.getHeldItem().stackTagCompound); + jigsaw.markDirty(); + } + TileEntityWandJigsaw.copyMode = false; + return true; + } if(!player.isSneaking()) { Block block = getBlock(world, player.getHeldItem()); @@ -203,6 +217,7 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio private Block replaceBlock = Blocks.air; private int replaceMeta = 0; private boolean isRollable = true; // sets joint type, rollable joints can be placed in any orientation for vertical jigsaw connections + public static boolean copyMode = false; @Override public void updateEntity() { @@ -237,8 +252,10 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio @Override public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setInteger("direction", this.getBlockMetadata()); + if(!copyMode) { + super.writeToNBT(nbt); + nbt.setInteger("direction", this.getBlockMetadata()); + } nbt.setInteger("selection", selectionPriority); nbt.setInteger("placement", placementPriority); @@ -252,7 +269,9 @@ public class BlockWandJigsaw extends BlockContainer implements IBlockSideRotatio @Override public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); + if(!copyMode) { + super.readFromNBT(nbt); + } selectionPriority = nbt.getInteger("selection"); placementPriority = nbt.getInteger("placement"); diff --git a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java index 7bbeea0e0..1ffe8c61b 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsComponent.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsComponent.java @@ -28,6 +28,8 @@ public class ItemPoolsComponent { public static final String POOL_OIL_RIG = "POOL_OIL_RIG"; public static final String POOL_RTG = "POOL_RTG"; public static final String POOL_REPAIR_MATERIALS = "POOL_REPAIR_MATERIALS"; + public static final String POOL_TRENCH_ROOM = "POOL_TRENCH_ROOM"; + public static final String POOL_TRENCH_BUNKER = "POOL_TRENCH_BUNKER"; public static void init() { @@ -213,14 +215,14 @@ public class ItemPoolsComponent { weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), }; }}; - + new ItemPool(POOL_RTG) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.pellet_rtg_depleted, ItemRTGPelletDepleted.DepletedRTGMaterial.LEAD.ordinal(), 1, 1, 40), weighted(ModItems.pellet_rtg_weak,0, 0, 1, 1), }; }}; - + new ItemPool(POOL_REPAIR_MATERIALS) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.ingot_aluminium, 0, 2, 8, 3), @@ -239,5 +241,17 @@ public class ItemPoolsComponent { weighted(ModItems.circuit, EnumCircuitType.CAPACITOR.ordinal(), 1, 1, 3), }; }}; + + new ItemPool(POOL_TRENCH_ROOM) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.ingot_aluminium, 0, 2, 8, 3), + }; + }}; + + new ItemPool(POOL_TRENCH_BUNKER) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.ingot_aluminium, 0, 2, 8, 3), + }; + }}; } } diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index f6f0d2792..5c766fa45 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -1,5 +1,6 @@ package com.hbm.items.tool; +import java.util.HashMap; import java.util.List; import java.util.Random; @@ -11,12 +12,20 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.main.StructureManager; import com.hbm.tileentity.machine.storage.TileEntitySafe; +import com.hbm.world.biome.BiomeGenNoMansLand; +import com.hbm.world.gen.NBTStructure; +import com.hbm.world.gen.NTMWorldGenerator; +import com.hbm.world.gen.NBTStructure.JigsawPiece; +import com.hbm.world.gen.NBTStructure.JigsawPool; +import com.hbm.world.gen.NBTStructure.SpawnCondition; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.world.World; +import net.minecraft.world.gen.structure.StructureBoundingBox; public class ItemWandD extends Item { @@ -32,7 +41,9 @@ public class ItemWandD extends Item { int y = world.getHeightValue(pos.blockX, pos.blockZ); - StructureManager.spire.build(world, pos.blockX, y, pos.blockZ); + NTMWorldGenerator.TRENCH.canSpawn = biome -> { return true; }; + NBTStructure.Start start = new NBTStructure.Start(world, world.rand, NTMWorldGenerator.TRENCH, pos.blockX >> 4, pos.blockZ >> 4); + start.generateStructure(world, world.rand, new StructureBoundingBox(Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE)); /*ExplosionVNT vnt = new ExplosionVNT(world, pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, 7); vnt.setBlockAllocator(new BlockAllocatorBulkie(60)); diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index ff3bb0829..a61182139 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -245,9 +245,9 @@ public class ItemAmmoArty extends Item { private void init() { /* STANDARD SHELLS */ - this.itemTypes[NORMAL] = new ArtilleryShell("ammo_arty", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 10F, 3F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 10, 2F, 0.5F, 25F, 5, 0, 20, 0.75F, 1F, -2F, 150); }}; - this.itemTypes[CLASSIC] = new ArtilleryShell("ammo_arty_classic", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 5F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 15, 5F, 1F, 45F, 10, 0, 50, 1F, 3F, -2F, 200); }}; - this.itemTypes[EXPLOSIVE] = new ArtilleryShell("ammo_arty_he", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 3F, true); ExplosionCreator.composeEffect(shell.worldObj, mop.blockX + 0.5, mop.blockY + 0.5, mop.blockZ + 0.5, 15, 5F, 1F, 45F, 10, 16, 50, 1F, 3F, -2F, 200); }}; + this.itemTypes[NORMAL] = new ArtilleryShell("ammo_arty", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 10F, 3F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 10, 2F, 0.5F, 25F, 5, 0, 20, 0.75F, 1F, -2F, 150); }}; + this.itemTypes[CLASSIC] = new ArtilleryShell("ammo_arty_classic", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 5F, false); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, 5F, 1F, 45F, 10, 0, 50, 1F, 3F, -2F, 200); }}; + this.itemTypes[EXPLOSIVE] = new ArtilleryShell("ammo_arty_he", SpentCasing.COLOR_CASE_16INCH) { public void onImpact(EntityArtilleryShell shell, MovingObjectPosition mop) { standardExplosion(shell, mop, 15F, 3F, true); ExplosionCreator.composeEffect(shell.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 15, 5F, 1F, 45F, 10, 16, 50, 1F, 3F, -2F, 200); }}; /* MINI NUKE */ this.itemTypes[MINI_NUKE] = new ArtilleryShell("ammo_arty_mini_nuke", SpentCasing.COLOR_CASE_16INCH_NUKE) { diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 3bb2f2387..dfff91870 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -65,10 +65,26 @@ public class StructureManager { public static final NBTStructure spire = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/spire.nbt")); /// TRENCH /// - public static final NBTStructure trench = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/trench.nbt")); - public static final NBTStructure trench_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/trench_left.nbt")); - public static final NBTStructure trench_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/trench_right.nbt")); - public static final NBTStructure trench_junction = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/trench_junction.nbt")); + public static final NBTStructure trench_straight = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight.nbt")); + public static final NBTStructure trench_straight_dirt = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_dirt.nbt")); + public static final NBTStructure trench_straight_bridge = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_bridge.nbt")); + public static final NBTStructure trench_straight_stairs = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_stairs.nbt")); + public static final NBTStructure trench_straight_door_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_door_left.nbt")); + public static final NBTStructure trench_straight_door_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_door_right.nbt")); + public static final NBTStructure trench_t_outer = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/t_outer.nbt")); + public static final NBTStructure trench_t_inner = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/t_inner.nbt")); + public static final NBTStructure trench_s_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/s_left.nbt")); + public static final NBTStructure trench_s_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/s_right.nbt")); + public static final NBTStructure trench_end_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/end_left.nbt")); + public static final NBTStructure trench_end_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/end_right.nbt")); + public static final NBTStructure trench_cross = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/cross.nbt")); + public static final NBTStructure trench_curve_outer = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/curve_outer.nbt")); + public static final NBTStructure trench_curve_inner = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/curve_inner.nbt")); + public static final NBTStructure trench_bunker_small = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_small.nbt")); + public static final NBTStructure trench_bunker_large = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_large.nbt")); + public static final NBTStructure trench_bunker_fuel = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_fuel.nbt")); + public static final NBTStructure trench_bunker_collapsed = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_collapsed.nbt")); + public static final NBTStructure trench_bunker_folly = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_folly.nbt")); // public static final NBTStructure test_rot = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-rot.nbt")); // public static final NBTStructure test_jigsaw = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-jigsaw.nbt")); diff --git a/src/main/java/com/hbm/particle/helper/ExplosionCreator.java b/src/main/java/com/hbm/particle/helper/ExplosionCreator.java index dc59694ff..302422d7c 100644 --- a/src/main/java/com/hbm/particle/helper/ExplosionCreator.java +++ b/src/main/java/com/hbm/particle/helper/ExplosionCreator.java @@ -55,7 +55,7 @@ public class ExplosionCreator implements IParticleCreator { @Override @SideOnly(Side.CLIENT) public void makeParticle(World world, EntityPlayer player, TextureManager man, Random rand, double x, double y, double z, NBTTagCompound data) { - + int cloudCount = data.getByte("cloudCount"); float cloudScale = data.getFloat("cloudScale"); float cloudSpeedMult = data.getFloat("cloudSpeedMult"); diff --git a/src/main/java/com/hbm/world/biome/BiomeDecoratorNoMansLand.java b/src/main/java/com/hbm/world/biome/BiomeDecoratorNoMansLand.java index defdc37b2..6fff43ca8 100644 --- a/src/main/java/com/hbm/world/biome/BiomeDecoratorNoMansLand.java +++ b/src/main/java/com/hbm/world/biome/BiomeDecoratorNoMansLand.java @@ -8,9 +8,7 @@ import com.hbm.world.feature.WorldGenSurfaceSpot; import net.minecraft.init.Blocks; import net.minecraft.world.biome.BiomeDecorator; import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.gen.feature.WorldGenAbstractTree; import net.minecraft.world.gen.feature.WorldGenDeadBush; -import net.minecraft.world.gen.feature.WorldGenLiquids; import net.minecraft.world.gen.feature.WorldGenerator; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.terraingen.DecorateBiomeEvent; @@ -88,7 +86,7 @@ public class BiomeDecoratorNoMansLand extends BiomeDecorator { if(this.randomGenerator.nextInt(10) == 0) trees++; /// TREES /// - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, TREE); + /*doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, TREE); for(int i = 0; doGen && i < trees; ++i) { x = this.chunk_X + this.randomGenerator.nextInt(16) + 8; z = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; @@ -99,7 +97,7 @@ public class BiomeDecoratorNoMansLand extends BiomeDecorator { if(worldgenabstracttree.generate(this.currentWorld, this.randomGenerator, x, y, z)) { worldgenabstracttree.func_150524_b(this.currentWorld, this.randomGenerator, x, y, z); } - } + }*/ /// TALL GRASS /// doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, GRASS); @@ -121,7 +119,7 @@ public class BiomeDecoratorNoMansLand extends BiomeDecorator { } /// LAKES /// - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LAKE); + /*doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LAKE); if(doGen && this.generateLakes) { for(int i = 0; i < 50; ++i) { x = this.chunk_X + this.randomGenerator.nextInt(16) + 8; @@ -129,7 +127,7 @@ public class BiomeDecoratorNoMansLand extends BiomeDecorator { z = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; (new WorldGenLiquids(Blocks.flowing_water)).generate(this.currentWorld, this.randomGenerator, x, y, z); } - } + }*/ MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z)); } diff --git a/src/main/java/com/hbm/world/biome/BiomeGenNoMansLand.java b/src/main/java/com/hbm/world/biome/BiomeGenNoMansLand.java index 667d03ef8..7b9894085 100644 --- a/src/main/java/com/hbm/world/biome/BiomeGenNoMansLand.java +++ b/src/main/java/com/hbm/world/biome/BiomeGenNoMansLand.java @@ -36,7 +36,7 @@ public class BiomeGenNoMansLand extends BiomeGenBase { this.spawnableCreatureList.clear(); this.spawnableWaterCreatureList.clear(); this.spawnableCaveCreatureList.clear(); - this.setHeight(height_LowPlains); + this.setHeight(new BiomeGenBase.Height(0.125F, 0.0125F)); this.theBiomeDecorator.treesPerChunk = -999; this.theBiomeDecorator.flowersPerChunk = 0; this.theBiomeDecorator.grassPerChunk = 0; diff --git a/src/main/java/com/hbm/world/gen/NBTStructure.java b/src/main/java/com/hbm/world/gen/NBTStructure.java index 073a641d5..3e81e9864 100644 --- a/src/main/java/com/hbm/world/gen/NBTStructure.java +++ b/src/main/java/com/hbm/world/gen/NBTStructure.java @@ -684,6 +684,7 @@ public class NBTStructure { } protected JigsawPool getPool(String name) { + if(!pools.containsKey(name)) throw new IllegalStateException("Structure with start " + startPool + " trying to access invalid pool " + name); return pools.get(name).clone(); } diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index d1019b9e5..d560b01a1 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -8,6 +8,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.config.StructureConfig; +import com.hbm.lib.RefStrings; import com.hbm.main.StructureManager; import com.hbm.world.biome.BiomeGenNoMansLand; import com.hbm.world.gen.NBTStructure.JigsawPiece; @@ -22,6 +23,7 @@ import com.hbm.world.gen.component.Component.SupplyCrates; import cpw.mods.fml.common.IWorldGenerator; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.IChunkProvider; @@ -34,6 +36,59 @@ import net.minecraftforge.event.world.WorldEvent; public class NTMWorldGenerator implements IWorldGenerator { boolean regTest = false; + + public static final NBTStructure trench_straight = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight.nbt")); + public static final NBTStructure trench_straight_dirt = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_dirt.nbt")); + public static final NBTStructure trench_straight_bridge = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_bridge.nbt")); + public static final NBTStructure trench_straight_stairs = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_stairs.nbt")); + public static final NBTStructure trench_straight_door_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/straight_door_left.nbt")); + public static final NBTStructure trench_t_outer = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/t_outer.nbt")); + public static final NBTStructure trench_t_inner = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/t_inner.nbt")); + public static final NBTStructure trench_s_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/s_left.nbt")); + public static final NBTStructure trench_s_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/s_right.nbt")); + public static final NBTStructure trench_end_left = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/end_left.nbt")); + public static final NBTStructure trench_end_right = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/end_right.nbt")); + public static final NBTStructure trench_cross = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/cross.nbt")); + public static final NBTStructure trench_curve_outer = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/curve_outer.nbt")); + public static final NBTStructure trench_curve_inner = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/curve_inner.nbt")); + public static final NBTStructure trench_bunker_small = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_small.nbt")); + public static final NBTStructure trench_bunker_large = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_large.nbt")); + public static final NBTStructure trench_bunker_fuel = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_fuel.nbt")); + public static final NBTStructure trench_bunker_collapsed = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_collapsed.nbt")); + public static final NBTStructure trench_bunker_folly = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/trench/bunker_folly.nbt")); + + public static SpawnCondition TRENCH = new SpawnCondition() {{ + canSpawn = biome -> biome == BiomeGenNoMansLand.noMansLand; + sizeLimit = 128; + startPool = "trench"; + spawnWeight = 200; + pools = new HashMap() {{ + put("trench", new JigsawPool() {{ + add(new JigsawPiece("trench_straight", StructureManager.trench_straight) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_straight_dirt", StructureManager.trench_straight_dirt) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_straight_bridge", StructureManager.trench_straight_bridge) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_straight_stairs", StructureManager.trench_straight_stairs) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_straight_door_left", StructureManager.trench_straight_door_left) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_straight_door_right", StructureManager.trench_straight_door_right) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_s_left", StructureManager.trench_s_left) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_s_right", StructureManager.trench_s_right) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_end_left", StructureManager.trench_end_left) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_end_right", StructureManager.trench_end_right) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_curve_outer", StructureManager.trench_curve_outer) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_curve_inner", StructureManager.trench_curve_inner) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_t_outer", StructureManager.trench_t_outer) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_t_inner", StructureManager.trench_t_inner) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + add(new JigsawPiece("trench_cross", StructureManager.trench_cross) {{ heightOffset = -4; conformToTerrain = true; }}, 100); + }}); + put("bunker", new JigsawPool() {{ + add(new JigsawPiece("trench_bunker_small", StructureManager.trench_bunker_small) {{ heightOffset = -6; }}, 100); + add(new JigsawPiece("trench_bunker_large", StructureManager.trench_bunker_large) {{ heightOffset = -6; }}, 100); + add(new JigsawPiece("trench_bunker_fuel", StructureManager.trench_bunker_fuel) {{ heightOffset = -3; }}, 100); + add(new JigsawPiece("trench_bunker_collapsed", StructureManager.trench_bunker_collapsed) {{ heightOffset = -3; }}, 100); + add(new JigsawPiece("trench_bunker_folly", StructureManager.trench_bunker_folly) {{ heightOffset = -3; }}, 100); + }}); + }}; + }}; public NTMWorldGenerator() { final List invalidBiomes = Arrays.asList(new BiomeGenBase[] {BiomeGenBase.ocean, BiomeGenBase.river, BiomeGenBase.frozenOcean, BiomeGenBase.frozenRiver, BiomeGenBase.deepOcean}); @@ -49,20 +104,7 @@ public class NTMWorldGenerator implements IWorldGenerator { }}); /// TRENCH /// - NBTStructure.registerStructure(0, new SpawnCondition() {{ - canSpawn = biome -> biome == BiomeGenNoMansLand.noMansLand; - sizeLimit = 128; - startPool = "trench"; - spawnWeight = 200; - pools = new HashMap() {{ - put("trench", new JigsawPool() {{ - add(new JigsawPiece("trench", StructureManager.trench) {{ heightOffset = -4; conformToTerrain = true; }}, 100); - add(new JigsawPiece("trench_left", StructureManager.trench_left) {{ heightOffset = -4; conformToTerrain = true; }}, 25); - add(new JigsawPiece("trench_right", StructureManager.trench_right) {{ heightOffset = -4; conformToTerrain = true; }}, 25); - add(new JigsawPiece("trench_junction", StructureManager.trench_junction) {{ heightOffset = -4; conformToTerrain = true; }}, 35); - }}); - }}; - }}); + NBTStructure.registerStructure(0, TRENCH); NBTStructure.registerStructure(0, new SpawnCondition() {{ canSpawn = biome -> !invalidBiomes.contains(biome); diff --git a/src/main/resources/assets/hbm/structures/trench/bunker_collapsed.nbt b/src/main/resources/assets/hbm/structures/trench/bunker_collapsed.nbt new file mode 100644 index 0000000000000000000000000000000000000000..ed8807af74ec923cbbb6092a97552df2d961a549 GIT binary patch literal 373 zcmV-*0gC<~iwFP!000000F6^yPQx$|Tsukg-~)kxV;}_LheM#=pmLIJYUc4d~D-e2tj@e9jhN8?gnW&da~(RtL>GM( z5XsVJ5O+!mSXhm++7O7f5`tvzg6Re=q#ZMcHEv>Zg90ndm4rbwZqc$q7t(gOUJI0rU-5~W&2^dz~@G*ovbsUyoRU#W*EDl)t*_O4VXScR?o zbSRbAT>H|=jJ@*+q6?T%OZ=DwqMWuQp219YZn(vE$pl(IH7?xY*gvwQfMTgthq`}+ z*)d-7(r5bFXFAOgLWDa{FfQDZHD-qL>M4(&vRA5Jl}u}ndWQDyX%8pbsf{zNw@|SN T(r?t}&};&Kp2EavwFCeFJxa4o literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/bunker_folly.nbt b/src/main/resources/assets/hbm/structures/trench/bunker_folly.nbt new file mode 100644 index 0000000000000000000000000000000000000000..c1a491d11e0b4eb0754decec007444a29a8d10bd GIT binary patch literal 540 zcmV+%0^|K3iwFP!000000HsyiuG26OTsxO0K?osnllTK35CWdgD?Fp~2a%JwscB+I zw#yOx2)~Qn);`4~aU>#HYSP)6omH|^0hEv`_KPL}U{7IAYEKCT<(g?m71*nUyctA$ zRF%1TS3$xXT|hbsF+i>*QHu12y;O9dt!9G5St%W|~ynwmoNoFv30}l>( zLSJacSJ<<|tocGSzOn^Oj3@Lp#}oPr=Yu!+a+tM#@CIKF6XS{ba+oz9|9))1#CT%9 z{H!B9F<;)>3QxMhm&3$(LSIXm7*FVH3A6TnWgC1s%vwL$jIZ!}cbHf|vAy9iYdrY| zUk>xPuS+CUkTOk2Y*+N#-w3iVW@BrFA^%E7lLSWavc6y6tZ%NzS{+S5XtSgL)e7g6 zFJSP>yP9v9kHduXd14*i6VslL2NP`PTN{SE3aWc4CMs=M7T0J)pKYFfvw8Ny=hsb6 z!F<&RUlpd_Lcu3r@bXbch^}skl#I%#&eM@`+Dfw5cZ4m$KmM=Eb6=*+3>wm_sM4Fq elIy!sAH>iZu>^KMs8p9kNAL&SSlrXb2mk=~2>?9+ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/bunker_fuel.nbt b/src/main/resources/assets/hbm/structures/trench/bunker_fuel.nbt new file mode 100644 index 0000000000000000000000000000000000000000..6caf8365cfd906d514b277cee6575487b963fd71 GIT binary patch literal 387 zcmV-}0et=+iwFP!000000G(4?Zi6roTpJP|{iu{aj!{*u`qM*HxdAe;A#RL~Y^PCs z`Wi@_2tkQz$saZ|v+V3R1xO$?{09R7Xm@zp3B)KZw;T<$D}iM$RIxLuJFF528f8u- z0{tQZER1CqkBl)4oxzZS4w=Bv84SHbhYob;07I|n>xB8MFFMj!FoC($2}dx)zQ%Os z`U*z-N+FQBjUjB560o!yWw9j?Y9$1T-38MXT8J8E469sX5`zK@%aw#qG_29GP8Xtj zzu5>Z!O2NhqYKYo?oh|D=u!l?+q{0aT;Nls)n1k{P+r1gd(*}4J3BC0W}mz=?BGf@ zf)!Z1PkpJRoq3cOKS|G4MPd)cd#ma6-A4|tJS`nWhIiC_U-O`KVRMLm9{3bWz3v> zq0Jw^wcoGjQ^~ru#q{|>Kf{L|AJt|YSap1U;<2wR!agqo{5@WMJeR)Ui)4?PUjCu} zyYdEW?9cE^gz_AwiO6FzIO zkXhJr%hrN~q(eXW>T1~S_chD^o;P1=ckTJ}hG+WUKR90gLD=F4r_3J~zPdMSqR#*| z90swO*zFfSO@AfH)B40bt&Z54=pTb<{=Lb~$YgzQ%U*-AX#*2R%&`@Gsgk7`b z@6L3I_>;T_QU4k)eq#4|azIDs*BaY++rytEc|IpU{~R(u(ylqN?oG|SeK^0cJY(?w9gL@WYnP}uNdFG$k1z zS$g08E*ITh^1gdv#AV*B$?v41o@_on$?|OF@qN4AMO?n-ANf0E_ROYyyR8qFHm`4M ziq((aeD2buX*)NbvYGuQ;H+r1@x?12@|i@70_$R;%C%p=+t#~#YiV(n?(xb08O5Bw K{p?m@U;qHoiL7A& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/bunker_small.nbt b/src/main/resources/assets/hbm/structures/trench/bunker_small.nbt new file mode 100644 index 0000000000000000000000000000000000000000..3d348ca3e090a3ae0e8718cf75f3681d4a19248f GIT binary patch literal 626 zcmV-&0*(D2iwFP!000000G*b>j?*v@h9|MpBn7kxE$|iy*mBwH3W)=3s}=XkP28>_ zi7UrtS+2Ya4@%tDZfeDLw2>ku?Kd;O$A2`Q0_1>O_J<+>Q1|3`r#WP_kxVk$g1T~; ztSVmoY^UAJYznAZ$qew8^9s_EuF0;F5n#cqD#~CYiP%tS{y~tpw4#M%yn%fwTvJKZ zV+3ivTdylxLYJ>0H8oKgB>S51qGk;(1X;^#!bAo!E8&e~72QjGTt1MdT>fC2mOONo zwiPL8-Tif_l$T7H%D7ty+VWPfS6#9C9YNAcBI$9lLrl_Rq5%e3d143C&w~aSJR%Pc zC;3q5f#bmnYVJ^sHSozW&4meYW*zCZs3SXU&B2 zg!-%*UmoqV$g_6yZH!>h2*$S;n(^(0@pO-|zjx!;5lmlm;$ZrkCk`gm=h)IbR4cYL zyO@w>+haqTLmtB;yrCJNH#Fn(hGu-;(9F3v4kHQy>Sl*psCpv5yQk;9;gbLoT;5#$ z{dYcw_G9hkVm|-6{C@ZO_U6m-Za)8J=F!Dz9u@brm4}IRX-}kz^KK@lQn1a23VW>J z0lTISrr*ZQ!JrWg9>F95#S98gZM!Pw8I!bLkcvt((bMhWRh?h*DNGlF zZ>dn{o9yU^Xr{LQR-HgD?^pG;+Rk^qqXi5{y*E)8CTb)2t|=V>S0>=~sSM}kaz%t- zol%CvK0Yn%g9&?k9@a{+E96d4N8qQY)jPH0{L~i2U!C_{eLRksSx6az^cNNF;m8-k Me>Jozx#tQ10PIvc-2eap literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/cross.nbt b/src/main/resources/assets/hbm/structures/trench/cross.nbt new file mode 100644 index 0000000000000000000000000000000000000000..d8ac92226c54065d81824798f39dc54285405b5a GIT binary patch literal 1334 zcmV-61vsKHUktzeQz+eB+e{_5ZCk6k?M$=YMJnmqx{k8piL%=o zt7cub-C3>j-qdDotF}>xeUiPg<@jTy(*51dO>H)6FxHfNqmtU(43=ky-PFgs>-`H` z)#mGM*WNXoOvTkkeLg;OINl$tw`H?g{aS7N^6jwEZC$R-e)!XIqkL0!=Z%xW34Po4 z@D-1lRd(0c>SJb+1s_{0I{p_;n(qMG^`={!2%JTy04d(qtRG2D5Qlct){6bzSRV7MFu z!{rzlF2}%R0uvFxW*#PCVhD!Q0t}}Gm^6UNgfqthe$kwF?Iq?E01dS5liywLmd_u;1}6Fp{1cddQ-)n9*KDszze$<=cC)9RPkKfHSRgH5yU${YJ)y)(T%s`QkqRJW}i?AjqKwx**mvT*Ea=I0)UyY#?h0ZbksM-jj* z1SSqhp*SFg;(!#Q&DZ6-)O^8kO$rRxq`*je(dO%8B)#GQz2X49bbwwuKrbDj7ab~G zzDq*|7)dW_r~o7BMTZI>Bk83B^wNS}b9H(!T?`C234q}y0WjPo0EU|cz;KfQ7;X{( z!%YHUxJdvEHwl0#0+@xs(3V2myeP3qW#OqNP0>A3(VzxcpQN)CYyAsBUAl5pwX0!{ zG}W77Y;o^2RsE5NkyMwuAQ(w?+68@#q&n?_K1NcVc0nH_sV;RvFkBY|!*xM0l3r35 z1S9E1yP%KZ^h(w7!F47uTxSBqbtW)eX9B}@CNNxQO4WaFaF_4W4GxCO4KQ48fZ=ij zOeUO}-gG`j@=Kc3!AO2dcN7@OFIvk!M)FIlWiXOoQZ0kw{K`(b%GC}Su6Dq1wF8E$ zoy?K*^gS{#Tnxc*F$BZCO`kb()pZ^zSHVcK7R9W4YX+h0BigF=6hAq00`9A+=Kk#0Lx)pCTYWV5IX%@c|>*k>Ug9(#{9@ zHa&fDzHrF;*u!wLE&^l)!^yD-kQIz%N0Jo`wX>+K*f zuDvzg_-{AaNy+H>DBr75zNcrsCb}s1s&CG#sLGxN&&~@zyWgg5H>>Ni>#E`9k9*m7 z@3!pzc#rSjLM|&G{{8zN?jfOj_MQR%^t@_t%bL}?Y#y-Y{D!$_&GUB)#kc2WUtBKh sZFje}cbySq_{n+U;f3)~`=VOz0BV&Euc!Ot#Sy800rU>7Rfi@30Ml)jlK=n! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/curve_inner.nbt b/src/main/resources/assets/hbm/structures/trench/curve_inner.nbt new file mode 100644 index 0000000000000000000000000000000000000000..a542470612a00418bfc5b886dfe03b4dfd0aa0e0 GIT binary patch literal 676 zcmV;V0$cqbiwFP!000000JWFvj?*v@g(r5dMTkGZV;}_VpM40lZ&1?4Z4J3pj+Y9a zo}}%ht6AIQU5QFj)$|*m@i~*qT>(^(j{2{X05D(Gbfxoq1*Ph(wpxt<=P&Y2J8XZA ztLej!3gmGZu_%G-OF}l<+Nx`Xi%B9F!7vHYN<2&w!3c&C5n3WbOGIeN2rU_*C7)@n zK=vD3LV6sA7IJG;zda<7nxSoza=KBQy|R!Qy+2q9)u>vvwR-3;9i^SJ^*KE#y2stF zRSisw^>wEpZPjjCIXh1WygO{Vd#hXZX>W$dz9~WI20qSr&g1lFeX9Fr{ZsG9`ZNh0 z+j^_I>8p!S)o8N_3$iug7&9Le8Z%@ z)ejweAH(%5B6=1PJ=4d>)en7qd<@sKjObZ1J9qAL^lN9nQnd;g4$_&YwKO zA7n!QAX6|5=OHqAAa`U6W?!7o$Z%RBLW|1+8BR+wT17+_$b_;e96r;Yk>UEG9=g`y zJS-gkxYl{@PvkNCd}MyvDf@CV|1ZaEy8Y4-YvEx+v6d0BA`^x@E8cO?9Dy|+BYa^1Hi^Y${Qys?vU*b7s!;!W)1R(n0-^8~~rCtOVNirE0~c1A#Y?)wIEqh+^0C6MaAX%aDhQR$;J zkZE;184l$j8@V^C?_e&Qw$fBES1;P9!=aHijK#XDm5?^_FjmfH*YNJNYafhiLDa0t}1r%pyG7d+73P@1f66$TN@d%p*M8`|R>;@3YSj<(V)0!-@SthT3^#sGUcK z+WG7MkeClLDKQ^pvOw?lKD!te;m6)pmmhmqeOe(uJi?E?hb}+%9{RK>Kk1SwBQiyX z+A(CP9ZQ$I)>@f|;Y9Dqq=CLzgqFPaA=LPNqch>{&uLo8^dQRP6Pknef)%W#wS81)J_8fb0_qJ7?-0SLK9xCO-zuu;D fciXWqw;j6=43Ioy@a=$suVumq4R;m zM%n*B@C1|6Sy6>HI!Zx&zV(kke($y2B-|kJXV(7&5r$jl8FBk7Crc=WX|A(ay|6ZE zhA#KS+Le=^9bYc-BJ7IQiRO17HCVQKiCVk#7_uA;V0o-OgW=#A0iTY9MZ#)~QM#cl z|H3+$(!4fl-L81x9VilarN-mwEKLrT_~3cGB2LXGE8;a`|t1P>noe~%JQ#& z{`q@%zj^-pdwZhqoOv$amo>{UQtk58U1!YJgw3609PF#ul65S!w>n$xxYi@d)e|FT zJj{}r{9bbP#q9=mNpqkcRALdfmPo3|NRE*cYH4SAsOVVXA%I{C?$U4)cYU#lBUWT# zw^hm3T?ZqipUGW06SDm}Htf@qki?$+ZN-5@0xZsgJ^cwxEXH37(h{9mgcWDpFqGfy zep6z4ds_b{Lp}bpa;ZQ|XW5=Qw!_Ax`pS)(Ga!LoXXH%HAnNosyU+Z*@Pcjd?^t6f z{(d%b-GxIwnb&=uTu5Cve`CzLuZtza^)@d{-Wg+h^?jz^6VA%|TYq;m7nQI0r>~xJ zS*bo{rmI+5*36$Bs!L`*wD`#JI7)6-VeezDy=i9(-xVG`^?FOfs_9aByXU{XYUru3 zb6V2rltBaW-)k`-ViTPsK-*4#j zq&rnhHUFLb<3#;m8xid^wsOl_E_$-|?~k-~L;t012?R_{AvzbWf-rrk*r`nAft9 z1#h8yB`}$nP5!M-)tfIV(0VRoV4J2XVIl>u^K}4BG-VmY>Vr(IxCB=6rKFIwyyUqo zni_U(SjA=5{TV=1ZI{cEFF=h|XBCG~6sxrwIox%FN9%cYDT|W7Sczs^FJd6Y0-klB z?56i~cAM3U+1Fy#X1A)-rp$6)sekpIl0_lL&O|MOZkl#jYXJKfg|L;G|p{;LzB*drlE}?2!Gad#G^jCoF0!S(%-6h? z{b@MUPea)>QjIIsQCe|f+R}k$D>EAstK`FtOrlV1Pj4MJZ&Gi;&Q!nn2&Gi;BKTaE#tkD!FgxjRcGJX=+}`iV6J*OR_QKV z3NFTir-wF8vzW~@Aqw?d*l<{QEsr3K!}gJn=pvXhNfdVsSG@1+&)D}hb_ zcsO*jh51>7=p__J9Z&O*7EYqT3()E2?l4%A`Ho3ZvF5G!xHm@a}R0Z++$42 z56$p{dn2TUdn3lA{IG-{mXW(>)^hg@PcS%BT-Va~D|LB>C+fm^g|u*9AuXDrg|i50 z;VeR0ETP3Svhd7W7M>~oVlua|%YO84d)Rr~dyy>+PqiRdVAqKZ%$PaGCkRO`ihi3S}?Hclf+co5eW%ywUKSf4Md#1=>$^?UR$F+N=$Y9C@ zgENgWDJ`67h{1Wqn3NXI%Q3H%mHmV0q+Q+`H{<2fy&sob*ghCNO5@(2tLtJxKDrg+ zn_D5?E^ETge;>l5J}jf~N)j3HWf}19Sw`!2w-?4JX(Gcu|KG4@d#`&n$i|3+y%#Em Ze@e^&gUwHArpt0i;16f0^S+`C007D%BQgL0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/s_right.nbt b/src/main/resources/assets/hbm/structures/trench/s_right.nbt new file mode 100644 index 0000000000000000000000000000000000000000..fbba87c573a9527dddbbc7ecec7714cf2b99d4e2 GIT binary patch literal 599 zcmV-d0;v5TiwFP!000000JWCeu9Pqoh8JyN0AsvSAHx_AH~ZRav)^FSfzC{oQ%bix z`t))tGp_Wci6mqK^DX{=v3?3AKmlx&zXSz~fVuX1sAUidE^?fX- zgD(Zpp&w0A0_(;oq@(6qY!x;p{evlib|;+!8~VP1Oe@h<*94gAnI?wMZ=^KOcr1g>3Y9O3l`>;)h9g4cV&-NNLk`n*@YxmERjeLQicq)?8so4c2- l>_nybSwC>;!ax0+%7;Kp6b?Ux8rP*Yf#1r`slK8N0057+BxV2r literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight.nbt b/src/main/resources/assets/hbm/structures/trench/straight.nbt new file mode 100644 index 0000000000000000000000000000000000000000..4f0dc95eed3c264a69237c446d175860442fb86a GIT binary patch literal 502 zcmb2|=3sz;t<$2{%{CBlIL^;;q5t2Oa>>xE?IERtSMNHy98xLFHZa<^H!D1T4uh|5 z&+@5VEg~l*{r%h?7qSL4$z1UlVR(>ld3U!E*PA&-T}t|C!k?ZsK5kGpTpyV!W8qKN4fqp93nBiWeCC&Xgk+8f>2>c4#QF}7n{ zckOaLvBoO?*woG0W)+o|TjtNb^y691+2HFU2SS>#>{vuR7=a*Cy>% zY3-4+Kd+{(%$X8v^f}P!OWKTBNuTKrIR#q}dzSPjmh*HQ%sIfpq|E8_jon%2_}l$| zcUQ%D|A;@OsFd|{?yabk5doXFmI4Wh!<;<|29pk?u&DVP%z1E*^Bppw$MLS|0TLnf zuI3f@jT>TVY1y-9&0L$Cm9}l$%9%HBElX2VHmGdk{2l8i;g(?0D9GX_G^6Lh6Hc`^ z-z6p&@&C3xw&c#?x_(2=?;Gx4pRwV7vd<}76shlLxSwvQU1PfIsmP|+`ThU)ObrdN zjk>(}>+_9CQa9eroqs9*&y>2YXP)l<$^AMofBK4oS?)~t{s+(M_rCJ_e&8{a-_E&f fouoN`Pv8>X@Vl>U$6Q5;KTMYQKHogd#lQdnE=K(; literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight_bridge.nbt b/src/main/resources/assets/hbm/structures/trench/straight_bridge.nbt new file mode 100644 index 0000000000000000000000000000000000000000..383f8a61ecc6f87fdaa0c844aa064bee88d03a4f GIT binary patch literal 532 zcmb2|=3sz;t<$2{-7*kpJ3hTdrS^rl{_Yj4;^J1VTWDqNpeT7@t+0EaW>)xpl?e=X z68_qvCxr~}SNz!U!<5y5Z&UdGK!yW5o@|(uxVGrThSF1-ZxU;sPRQG`vhK^#4*D}s-N?g3fx z<8wiN-Z0ucll-r8n2|&Z>=@@go5|RB?8@tVH=UpIi9M`) z*uM0`)ukVdR9IH&z5O#$IpD*``L}A~R>j?q%Js??z2$IodBn_ytNvU5W?o4Az&`n$ K>(3r;1_l6J!w1Cx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight_dirt.nbt b/src/main/resources/assets/hbm/structures/trench/straight_dirt.nbt new file mode 100644 index 0000000000000000000000000000000000000000..abcb8787e7611ac335885da96083d905d17dabd8 GIT binary patch literal 547 zcmV+;0^I!{iwFP!000000JWCOuA49rK*tXV&_y?W{6*F0rknmjb^jnD;3RGhM#kw? z`}Ku@X|9X$G*Tm>1aijq@i5jD06Fkp{t^rT#*5F_E{9CCR$3`~7(Y3r2c@g;eKFj8 z$$@pccR?_JQwB+IODpDxHHIM={)8!jwFjF4@3dBsS|i%(On@7$6v>7Mr8x-;T#2J) zkoQ7~%1Yf%qwz-Aa{NhP*IbTAC2APPYRg7IV&v&OjGSD};Q9H`e6~`FHz%VnZJhy? zHM|<1T({!q{;_Q9{Wp2)%g14+PL-8thQFqn@>-f@X6mUCSo{_>5@5*27CB~Xs~xko z)sEo^Cb=ga)877DKCUVJFX>vf=MHcU++A?5ClUJ%&mJ8U^s$F5Obvw#;^Af6La_LJ;cP^{dx~EF?YY-*BHOv zLrly))&)5x_Rh!Z-7ztDzutX@A=bA4+4SFoCd- l_l3P%!d^cO>#ey|_F}}a@4Fwu^iwlL;5UMTEK2wb005K;2>Jj3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight_door_left.nbt b/src/main/resources/assets/hbm/structures/trench/straight_door_left.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b17a0430f08623b23ee24c8b3bfcc909e48f9592 GIT binary patch literal 588 zcmV-S0<--eiwFP!000000JWCej?*v@hR27bNf6=&cnpMKx!DUI0qq-9ZZmDo<|M~u z1y4_sHfiz3@pREfic~k>c>K?J#?AmzkgfiM0s#6~p5Ijp3078HjV<&~3h}0>w~uYs z4Zf!!nz|j0#zzQc6vqw9A5RkT5;MVH8 z8s-97qE-D*2CMS8+ZC8YH(RAjgjJ*3R_!r?Xjm1zJ8a5(s|)v_Zs!wK{7XY)AW zwg#*1;d!`afjfI!up^`Q2m30acBQdtD_x|y=@=RI&u*J%IDruaMiQ84Y4`imafw_r$|60>cT6ATW}^Lh2-hE6+yIb!*CZyf1_c_L`cOMhd?$*1H z32Arh-N%HqyY=2PZ?whoK^17HGU#rd!?3>srx|1qrf$&mSLEb;V6)HtDgC2ArQLHG z<_+#9gZGoc)q(A?`Z`&CxLDP7zTPNfG#ZcDm;W_;*&1)L`u4IVUgG|?)D>=x+Sz-h aefV9-i-6THH0|kH#NaO@xj|Yf4FCYCuqYP* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight_door_right.nbt b/src/main/resources/assets/hbm/structures/trench/straight_door_right.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5f6fbcd0333d775313df79d49587602b2582c632 GIT binary patch literal 584 zcmb2|=3sz;tpSPnZ zJ$b_NRi_lUu$}%pvC$-S-sT-U7x=V^rS!3DE37m;zV~V<=UtOc4y$kN=UMcq#^T8g zC*!b{TrCG)yt&aMQ?mKs^2h5cHdr0cpSki}suc5e&6?cxCH>#4e=j;!@_WhVsJ$k} zbBnefU$nDyrl#js$@FKvEf%3)ADmk7pOYhNwa&Li#XPeO&KxdaQs(GUF*sb9;*LRPv*}41cyX0$k?pDoDzEkzxF#BEJ-ro|A2`Y^s`Pf~zzrTyITl};B z_q+T(x&Qn8R;>$dd%vl5_e=3wPygvgUktq8Cg=1Dt9>%KT=+=xSnb;9#|qYvt^y UTewnxy=C+Md747|HF+5r0Nzy}VgLXD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/straight_stairs.nbt b/src/main/resources/assets/hbm/structures/trench/straight_stairs.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b94d39bac8cfc3e28c3b4ee45b6b5a7066d10908 GIT binary patch literal 520 zcmb2|=3sz;t<$2{%{CBlIL^;;q5t2PjoqvKSH4nOwY$0FfJ$Mufsx<(TUW(}7VH!| zcG=6-iR%f^;Y1TTaR$p1aeti{86ImcFP`q)wl>%=k^k{T=c)_Ke%%v4eDpb!OLc+d ziE|RXD>vT=OJ}cO~S&v?Kb%pnV$xo+bKAh!d_Ttn>_2$@OOF7eP1~#j8 zrCW}yx?EXNRCJc@{Q350-N91#=d9VerIan^>W8d7#kG6q|31EH?f3gvR_e>Q`^?qT z&S~49H}g}}O;uxg6_@m1H>Vyf;qa&mx0>T}U83yx28P3&JqiYs4ygD`Bw6O&|Mvb> zq3*+a&329zOUtveRg>dRUYmD#&!pBFzbBn!Q0C}SG2nbydx_&P=es!%&e?t!5H5bs zQtnp(BpeIG!Nk1kj?SIjO}jgGd|s)akQ_N<=GxS(v~AN?&b%45EG;d2=B$}52bKsP zd;eYKfB_TCdKR@_gS!3gGiL0*|6Wn;*}Lx`Q-1&5ckIVsxum3bC{n*q*aY*3<0*9;&ph4zllygG{&bD{S?o-9e}ZTE zdtW(iA9(D_Z|BUlPSPCJ+gtY5NnNw9UU}zelEQ~%o%s!S`M3Pd{e19&IV1a@OMkc+ F7yuDm{~-VX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/structures/trench/t_inner.nbt b/src/main/resources/assets/hbm/structures/trench/t_inner.nbt new file mode 100644 index 0000000000000000000000000000000000000000..fc57b3252deea78f2601da686a131f0630756d95 GIT binary patch literal 756 zcmVM$3Td-H+=}yH>jLslPvfrT5l=v z^w>$pbywb*Arcoviqxjx&g?m7$6aLwP(sq1-&z5{_+Aa~WO(N#6uNcB8QsJ9Dj{3f z-R65g5{~gwN;}bsr7ECoSwSDyTiJe%(D6cj$nkfHpE1^ytz?T7OR z8LkfJ4>DAp>D&|Ar!y^J6vJ>HPUmCB_|JqXdqx-M^W-(tD;D(PvY2Wyy%f_c5#)so zl@~HpUdSW@CVj>Hm;ZV~R%bJ5=>o$YX=JGAkx>F>9!C~nQUQ}O3^zW=aJu~Q2{D|m zSfDEw=;B5d8BUi!sv(Bcr3AVZqbt3fRqC;T4E0z*hI%X@Lp>IdNd-*CFx-40L*<1G zl@~H|U3q{>1x&^;+Eh-K8BUi!Um=Fm#myHooGxy@kl}Rs^A%z!UD@TVQuBoj zHDAb3^OXtCJTjDr$WYgbOmGg7;d*h`q)c!&kl}jyXT$H63-UsS$}1OSfedxc&ILXr z!`0zDM24zU2>d~Y@~05^gABJH&L3pBI-Ebqysjg>vYxJ=e|KX&-*W%SmDRtFmJ6{K z0fvgT6vT=Q6-OzE6&bD$7b`M;oj1nm=Ao*!o4!2CkLO>?M)wI=o8)C?V<1AFTjjycWZi3|C%4p<8F1(LIcx60%j@ zt$*|*@oNF9UAY31L)X=iIjh_CUO-~Ix)#OoMP+x|L2Auz?-Z21uJziPu7zWsq|vS# ze-w~6Pup#+H!uWit42do>+KLZJ!XS<`&IMcOszldZ1>b|3Xo<4AIEQw<^5hhSM6r` z-R%16c}R4qtF>;1Kb;bl8)K)$$sj@4%Qz~) z$cQ*HB94lPqnJ1%&>vqrGE{#=M1PRs>f!o>3>Sy%4>D978POkPsQ$=^{vgBE!}SLl zE)LfpWT-gPoDtfQp?Zi6)x*g%qGn_+bNOciGMp|Mk<0fYl#BCXx|m$PU!h#renlSR z$0PZ5r}*jQ|0l<|FFygCvlnUU3?qmULPka~)JP*kjWjaUNGIn}ywsJ=Fd~AH5sV^6 z2pMY3kfBC8IgdT3OGfCD5xV?U4b{x8Dl(id6`@N-=u#27{9_?hGj}W?L+MHZhkkxm zk)ier8EU_fq4oUhJ`2pD|Nj&jN*6MmF77c287>z$ z8(F}wP%h3dWT;$ugcrzAUgUv3`!yrO)x$mZBg4h<`xA=8^{0sF4>DALiirLo!_~v} z2N^C7*B@m5gU4+D5xNZ6TFfw%t!0F*$WV5a5w;@3#o=s4#*g#HINdx}wRY3Xqx^9C zb$m@$E@1I!yMwmlYqa9*q_`XH`!?G5e)8+W7YN_=dAiGYdFF<%(+wY9(sbQsxvH!+ z+Rohe<+j^i%6r?GRCrVQtmrcgZ24{N}$I_OAKHtHeI%NVK2PJ-4@)ueZ!F ziOX3wwd)D@A#)$Q+rJ7KCos!j(Lc$MAakehNS`m?%$!~$FFu1f%O$&aY47K6-TQME z^XuIQMFn@n@Ju?$p{y_J&Esewa?pU~u%J&EY+r!Lb>h_Q?G4g za2DWkHQ+f|z%p53MoH_(&3Z@H?ED=mo^ zOBK`3-aT){#=4;_-RME>^{W%4bZ>w1Xn4JDoo8CTz%K>fJHGtew%(Ec{mAj!CX-d! z%PSxCnlPRFopssf{r9bF4(!_`+S?L7-D@qM`)zg0`Kuq4E{=-K+Gx)2^pa=Ast5O0 zM9u3@wBN3NG3>T_sl<_!+g@h}o;qeX>(_s^PwuZP~Adm+kGR%7?KopWb0 r{QG%-SIwN$_u@{kGnQTPYfI44gwM{e5~KK-_A@@8a+05kmw^EQ6m=A< diff --git a/src/main/resources/assets/hbm/structures/trench/trench_junction.nbt b/src/main/resources/assets/hbm/structures/trench/trench_junction.nbt deleted file mode 100644 index 9c840c0de844eb52e90806e8622fe31ecf49cc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmV;x13&y9iwFP!000000M(goZW=KVhG)Nlr0So3+@flmb+f9oc@H^0V^Y}yV7;ZKr4*16J|#}Pgz6_|*`i2}@VoY=#}ia4<%PNImDDB`3f zP6881nwc9xx@p@Qa%W95zmFibZCyvB-5*N3G7c^eA53kvx_1eTJ5!svtJ>x;bGkOJ zJcv@Px65U17P}&*O}RF3@i??L%iTQLzJBm(T{UKI%cZ+5D?5U?TEIJ3)n;GrAJd1j zSxmoHtFC<5&94J`9m3d%%^RzZeql}OPl$Z(~J6s>}c6h~?m zWTZIHTgA_$3=?CEGa4ep)dCr=7RY1*6Onwf0K=^v8ENei$;UTWtjLGd(1Z%?XeIe<&%4Y%-lQjVTbVG(a-H_ohI@LJdwRncM|zr;Kt`>ztXJj~?3x&?eaO)}*IwK>+k#t5zigWe@_J8+31iJlkna5IG?3jznne|;+ z8#h$F*c{&W-_~4CU~*^Mjj{c=IitrVMIZZheCgNm`hK>)?KAwavhB86fPcW%FyQSl z;Gu07(^+Y4Wo%&B=kta=rFSZ50KXpaH&3%XDIFN~X&CkXG`G&#?c8mx5wm;Yz?<{b ixc*b^U!uy@S)*=*Q3({^jqMJt9l>u)R1__I8~^|+UC{~v diff --git a/src/main/resources/assets/hbm/structures/trench/trench_left.nbt b/src/main/resources/assets/hbm/structures/trench/trench_left.nbt deleted file mode 100644 index aa957a6370863e12431b68a12f40747f4203f8b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn<+iwFP!000000G*ZHZlf>|g~v8YfbME<`tu6Cs@iJzrVp{|8$=FF61N5; z+u3OQ^fe)n#=^uZ5<=kbFh}DvkOO3p81aD&0NOKg=d8VEkYa6x6=#0^{d- z%#WYv5Oc|opXV{g&+}Lf|mn2JTy-L^lWc@FujRt@U*CzT%CM;_ar{cU^pYrCpm+HO2-wA$4rj0^q@ zf}26GSE^jDxYh!7Kz6Egz6$~T_xGwi4YIp)nX!6T*qz3J@OcnkpMVNo|zH+XNNyrS8?7RGJmi*B7FLsyqT~1qA>BRceJiq P5eEMOWD{w23J3rI=-KRN