From 60e339c7d7d161c3afa62e1c2ea7423120bcd695 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:22:41 +0200 Subject: [PATCH 1/6] Add files via upload --- .../assets/hbm/structures/tower_base.nbt | Bin 0 -> 6846 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/assets/hbm/structures/tower_base.nbt diff --git a/src/main/resources/assets/hbm/structures/tower_base.nbt b/src/main/resources/assets/hbm/structures/tower_base.nbt new file mode 100644 index 0000000000000000000000000000000000000000..f2af67a08ce17afa06ce01502a783bb568ce5ee9 GIT binary patch literal 6846 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 sA1eE}mg Date: Fri, 3 Jul 2026 15:26:20 +0200 Subject: [PATCH 2/6] Update StructureConfig.java le config --- src/main/java/com/hbm/config/StructureConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/hbm/config/StructureConfig.java b/src/main/java/com/hbm/config/StructureConfig.java index 279cf0a52..e20d2410c 100644 --- a/src/main/java/com/hbm/config/StructureConfig.java +++ b/src/main/java/com/hbm/config/StructureConfig.java @@ -50,6 +50,7 @@ public class StructureConfig { public static int radioSpawnWeight = 30; public static int forestChemSpawnWeight = 30; public static int forestPostSpawnWeight = 30; + public static int towerBaseSpawnWeight = 30; public static int spireSpawnWeight = 2; public static int craneSpawnWeight = 20; @@ -115,6 +116,7 @@ public class StructureConfig { oceanNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.38_oceanNullWeight", "Null spawn weight for ocean biomes", 35); craneSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.39_craneSpawnWeight", "Spawn weight for crane structure.", 20); broadcastingTowerSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.40_broadcastingTowerSpawnWeight", "Spawn weight for broadcasting tower structure.", 25); + towerBaseSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.41_towerBaseSpawnWeight", "Spawn weight for tower base.", 30); structureMinChunks = CommonConfig.setDef(structureMinChunks, 4); From 2e6a2d9f1deeaa906b454821c7bb2804eba476ed Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:27:41 +0200 Subject: [PATCH 3/6] le structure --- src/main/java/com/hbm/main/StructureManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index 1fa86803a..8b0709e87 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -82,6 +82,7 @@ public class StructureManager { public static final NBTStructure forest_chem = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/forest_chem.nbt")); public static final NBTStructure plane1 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_1.nbt")); public static final NBTStructure plane2 = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crashed_plane_2.nbt")); + public static final NBTStructure tower_base = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/tower_base.nbt")); public static final NBTStructure factory = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/factory.nbt")); public static final NBTStructure crane = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/crane_mod.nbt")); From b5faf15c5abc58b336cf2aa1c7a8668c5c32664d Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:30:26 +0200 Subject: [PATCH 4/6] le le structure --- src/main/java/com/hbm/world/gen/NTMWorldGenerator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index dbf6922fa..0d8f2d275 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -239,6 +239,11 @@ public class NTMWorldGenerator implements IWorldGenerator { structure = new JigsawPiece("NTMRuinsJ", StructureManager.ntmruinsJ, -1) {{conformToTerrain = true;}}; spawnWeight = StructureConfig.enableRuins ? StructureConfig.ruinsJSpawnWeight : 0; }}); + NBTStructure.registerStructure(0, new SpawnCondition("tower_base") {{ + canSpawn = biome -> biome.heightVariation <= 0.3F && !isInvalidBiome(biome); + structure = new JigsawPiece("tower_base", StructureManager.tower_base, -6); + spawnWeight = StructureConfig.towerBaseSpawnWeight; + }}); NBTStructure.registerNullWeight(0, StructureConfig.plainsNullWeight, biome -> biome == BiomeGenBase.plains); NBTStructure.registerNullWeight(0, StructureConfig.oceanNullWeight, biome -> BiomeDictionary.isBiomeOfType(biome, Type.OCEAN)); From ec36efc274a77910ed7a45e16b6e034add1aa730 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 15:32:55 +0200 Subject: [PATCH 5/6] le loot --- .../hbm/world/gen/util/LogicBlockActions.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index cbbf17142..c0b816fd0 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -487,6 +487,39 @@ public class LogicBlockActions { } }; + public static Consumer DEAD_GUY_BASE_TOWER = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + if(tile.phase == 1) { + world.setBlock(x, y, z, ModBlocks.skeleton_holder); + TileEntity te = world.getTileEntity(x, y, z); + EntityPlayer player = (EntityPlayer) world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(25, 25, 25)).get(0); + + if (te instanceof BlockSkeletonHolder.TileEntitySkeletonHolder) { + BlockSkeletonHolder.TileEntitySkeletonHolder skeleton = (BlockSkeletonHolder.TileEntitySkeletonHolder) te; + int roll = world.rand.nextInt(100); + + if (roll < 44) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 3, 91); + + } else if (roll < 71) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 92); + + } else if (roll < 92) { + skeleton.item = new ItemStack(ModItems.ammo_standard, 1, 73); + + } else if (roll < 96) { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 3); + + } else { + skeleton.item = new ItemStack(ModItems.item_secret, 1, 4); + } + } + } + }; + public static List getActionNames(){ return new ArrayList<>(actions.keySet()); } @@ -506,6 +539,7 @@ public class LogicBlockActions { actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); + actions.put("DEAD_GUY_CRANE", DEAD_GUY_TOWER_BASE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1); From 976ef4bbc00ccf85cd06ba87f1602b8943549037 Mon Sep 17 00:00:00 2001 From: polyvus Date: Fri, 3 Jul 2026 21:46:03 +0200 Subject: [PATCH 6/6] I forgor --- src/main/java/com/hbm/world/gen/util/LogicBlockActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java index c0b816fd0..1ef0b73d4 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -539,7 +539,7 @@ public class LogicBlockActions { actions.put("BOMB_TRAP", BOMB_TRAP); actions.put("BOMB_CRANE", BOMB_CRANE); actions.put("DEAD_GUY_CRANE", DEAD_GUY_CRANE); - actions.put("DEAD_GUY_CRANE", DEAD_GUY_TOWER_BASE); + actions.put("DEAD_GUY_TOWER_BASE", DEAD_GUY_TOWER_BASE); //Mob Block Actions actions.put("SKELETON_GUN_TIER_1", SKELETONS_GUN_TIER_1);