From f499e6cf004ee1b49e548e86eec1d64036e05cb6 Mon Sep 17 00:00:00 2001 From: Lazzzycatwastaken Date: Thu, 18 Sep 2025 21:25:40 +0200 Subject: [PATCH] setro OWNS me... (we've lost the plot) --- .../java/com/hbm/config/StructureConfig.java | 2 + .../java/com/hbm/main/StructureManager.java | 2 + .../com/hbm/world/gen/NTMWorldGenerator.java | 6 +++ .../hbm/world/gen/util/LogicBlockActions.java | 35 ++++++++++++++++++ .../world/gen/util/LogicBlockConditions.java | 9 +++++ .../resources/assets/hbm/structures/crane.nbt | Bin 0 -> 11539 bytes 6 files changed, 54 insertions(+) create mode 100644 src/main/resources/assets/hbm/structures/crane.nbt diff --git a/src/main/java/com/hbm/config/StructureConfig.java b/src/main/java/com/hbm/config/StructureConfig.java index 2ed7b40e3..2f49923f3 100644 --- a/src/main/java/com/hbm/config/StructureConfig.java +++ b/src/main/java/com/hbm/config/StructureConfig.java @@ -51,6 +51,7 @@ public class StructureConfig { public static int forestPostSpawnWeight = 30; public static int spireSpawnWeight = 2; + public static int craneSpawnWeight = 20; public static int bunkerSpawnWeight = 6; public static int dishSpawnWeight = 20; public static int featuresSpawnWeight = 50; @@ -109,6 +110,7 @@ public class StructureConfig { ruinsJSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.34_ruinJSpawnWeight", "Spawn weight for ruin J structure.", 12); radioSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.35_radioSpawnWeight", "Spawn weight for radio structure.", 25); factorySpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.36_factorySpawnWeight", "Spawn weight for factory structure.", 40); + craneSpawnWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.37_craneSpawnWeight", "Spawn weight for crane structure.", 20); plainsNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.37_plainsNullWeight", "Null spawn weight for plains biome", 20); oceanNullWeight = CommonConfig.createConfigInt(config, CATEGORY_STRUCTURES, "5.38_oceanNullWeight", "Null spawn weight for ocean biomes", 35); diff --git a/src/main/java/com/hbm/main/StructureManager.java b/src/main/java/com/hbm/main/StructureManager.java index a5f70b5cb..8fba653e0 100644 --- a/src/main/java/com/hbm/main/StructureManager.java +++ b/src/main/java/com/hbm/main/StructureManager.java @@ -85,6 +85,8 @@ public class StructureManager { 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.nbt")); + public static final NBTStructure spire = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/spire.nbt")); // public static final NBTStructure test_rot = new NBTStructure(new ResourceLocation(RefStrings.MODID, "structures/test-rot.nbt")); diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 8d951f8a3..776396f84 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -145,6 +145,12 @@ public class NTMWorldGenerator implements IWorldGenerator { spawnWeight = StructureConfig.factorySpawnWeight; }}); + NBTStructure.registerStructure(0, new SpawnCondition("crane") {{ + canSpawn = flatbiomes::contains; + structure = new JigsawPiece("crane", StructureManager.crane, -10); + spawnWeight = StructureConfig.craneSpawnWeight; + }}); + NBTStructure.registerStructure(0, new SpawnCondition("plane1") {{ canSpawn = biome -> biome.heightVariation <= 0.3F; structure = new JigsawPiece("crashed_plane_1", StructureManager.plane1, -5); 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 7e5b8df3e..50f99aec2 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockActions.java @@ -116,6 +116,40 @@ public class LogicBlockActions { // world.setBlock(x, y, z, ModBlocks.block_steel); this is useless }; + public static Consumer COLLAPSE_ROOF_RAD_10 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + + if(tile.phase == 0) return; + + int r = 8; + int r2 = r * r; + int r22 = r2 / 2; + + for (int xx = -r; xx < r; xx++) { + int X = xx + x; + int XX = xx * xx; + for (int yy = -r; yy < r; yy++) { + int Y = yy + y; + int YY = XX + yy * yy; + for (int zz = -r; zz < r; zz++) { + int Z = zz + z; + int ZZ = YY + zz * zz; + if (ZZ < r22) { + + if (world.getBlock(X, Y, Z).getExplosionResistance(null) <= 70) { + EntityFallingBlockNT entityfallingblock = new EntityFallingBlockNT(world, X + 0.5, Y + 0.5, Z + 0.5, world.getBlock(X, Y, Z), world.getBlockMetadata(X, Y, Z)); + world.spawnEntityInWorld(entityfallingblock); + } + } + } + } + } + world.setBlock(x, y, z, Blocks.air); + }; + public static Consumer FODDER_WAVE = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; @@ -342,6 +376,7 @@ public class LogicBlockActions { actions.put("FODDER_WAVE", FODDER_WAVE); actions.put("ABERRATOR", PHASE_ABERRATOR); actions.put("COLLAPSE_ROOF_RAD_5", COLLAPSE_ROOF_RAD_5); + actions.put("COLLAPSE_ROOF_RAD_10", COLLAPSE_ROOF_RAD_10); actions.put("PUZZLE_TEST", PUZZLE_TEST); actions.put("MISSILE_STRIKE", MISSILE_STRIKE); actions.put("IRRADIATE_ENTITIES_AOE", RAD_CONTAINMENT_SYSTEM); diff --git a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java index f3eec59bb..b9bc15370 100644 --- a/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java +++ b/src/main/java/com/hbm/world/gen/util/LogicBlockConditions.java @@ -43,6 +43,14 @@ public class LogicBlockConditions { return false; }; + public static Function PLAYER_CUBE_3 = (tile) -> { + World world = tile.getWorldObj(); + int x = tile.xCoord; + int y = tile.yCoord; + int z = tile.zCoord; + return !world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y - 2, z + 1).expand(3, 3, 3)).isEmpty(); + }; + public static Function PLAYER_CUBE_5 = (tile) -> { World world = tile.getWorldObj(); int x = tile.xCoord; @@ -97,6 +105,7 @@ public class LogicBlockConditions { //example conditions conditions.put("EMPTY", EMPTY); conditions.put("ABERRATOR", ABERRATOR); + conditions.put("PLAYER_CUBE_3", PLAYER_CUBE_3); conditions.put("PLAYER_CUBE_5", PLAYER_CUBE_5); conditions.put("PLAYER_CUBE_25", PLAYER_CUBE_25); conditions.put("REDSTONE", REDSTONE); diff --git a/src/main/resources/assets/hbm/structures/crane.nbt b/src/main/resources/assets/hbm/structures/crane.nbt new file mode 100644 index 0000000000000000000000000000000000000000..5cde5147dd3167cee3dd042f182a0d498d08ea18 GIT binary patch literal 11539 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