From b6eaf25b992e9a18ab299d2b032add0686e77462 Mon Sep 17 00:00:00 2001 From: Vaern Date: Fri, 18 Aug 2023 18:13:00 -0700 Subject: [PATCH] i'm too tired dr kel larping --- .../java/com/hbm/items/tool/ItemWandD.java | 15 ++++++------- .../hbm/world/gen/MapGenSpecialFeatures.java | 18 +++++++--------- .../com/hbm/world/gen/NTMWorldGenerator.java | 8 ++++--- .../hbm/world/gen/component/Component.java | 21 +++++++++++++++++-- .../world/gen/component/OfficeFeatures.java | 11 ++++++++++ 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemWandD.java b/src/main/java/com/hbm/items/tool/ItemWandD.java index 35f8c6537..984f849d5 100644 --- a/src/main/java/com/hbm/items/tool/ItemWandD.java +++ b/src/main/java/com/hbm/items/tool/ItemWandD.java @@ -2,18 +2,15 @@ package com.hbm.items.tool; import java.util.List; -import com.hbm.handler.pollution.PollutionHandler; -import com.hbm.handler.pollution.PollutionHandler.PollutionType; +import com.hbm.lib.HbmWorld; import com.hbm.lib.Library; -import com.hbm.world.gen.MapGenNTMFeatures; -import com.hbm.world.gen.component.BrutalistFeatures.ElevatedPrefab1; +import com.hbm.world.gen.component.OfficeFeatures.LargeOfficeCorner; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; -import net.minecraft.world.gen.structure.StructureBoundingBox; public class ItemWandD extends Item { @@ -37,13 +34,17 @@ public class ItemWandD extends Item { //PollutionHandler.incrementPollution(world, pos.blockX, pos.blockY, pos.blockZ, PollutionType.SOOT, 15); + //HbmWorld.worldGenerator.specialFeatureGen.findClosestPosition(pos.blockX >> 4, pos.blockZ >> 4); + int i = pos.blockX >> 4; int j = pos.blockZ >> 4; - MapGenNTMFeatures.Start start = new MapGenNTMFeatures.Start(world, world.rand, i, j); + //MapGenNTMFeatures.Start start = new MapGenNTMFeatures.Start(world, world.rand, i, j); i = (i << 4) + 8; j = (j << 4) + 8; - start.generateStructure(world, world.rand, new StructureBoundingBox(i, j, i + 32, j + 32)); + LargeOfficeCorner corner = new LargeOfficeCorner(world.rand, i, 64, j); + corner.addComponentParts(world, world.rand, corner.getBoundingBox()); + //start.generateStructure(world, world.rand, new StructureBoundingBox(i, j, i + 32, j + 32)); /*TimeAnalyzer.startCount("setBlock"); world.setBlock(pos.blockX, pos.blockY, pos.blockZ, Blocks.dirt); diff --git a/src/main/java/com/hbm/world/gen/MapGenSpecialFeatures.java b/src/main/java/com/hbm/world/gen/MapGenSpecialFeatures.java index e10456e98..5cca710ce 100644 --- a/src/main/java/com/hbm/world/gen/MapGenSpecialFeatures.java +++ b/src/main/java/com/hbm/world/gen/MapGenSpecialFeatures.java @@ -32,6 +32,10 @@ public class MapGenSpecialFeatures extends MapGenStructure { return "NTMSpecialFeatures"; } + public void setWorld(World world) { + this.worldObj = world; + } + @Override protected boolean canSpawnStructureAtCoords(int chunkX, int chunkZ) { if(locs.isEmpty()) @@ -43,11 +47,9 @@ public class MapGenSpecialFeatures extends MapGenStructure { //i'll probs make a system to predict which locations are what in advance //seems like biomes can be cached/gen'd without creating the chunk, thankfully //vec3 will be the angle + distance from provided coords, given in chunk coords - /*public Vec3 findClosestPosition(int chunkX, int chunkZ) { + public Vec3 findClosestPosition(int chunkX, int chunkZ) { createBookList(); - long time = System.nanoTime(); - ChunkCoordIntPair pair = new ChunkCoordIntPair(0, 0); long dist = Long.MAX_VALUE; for(ChunkCoordIntPair loc : bookLocs) { @@ -61,8 +63,6 @@ public class MapGenSpecialFeatures extends MapGenStructure { } } - System.out.print(System.nanoTime() - time); - return Vec3.createVectorHelper(pair.chunkXPos - chunkX, 0, pair.chunkZPos - chunkZ); } @@ -72,18 +72,14 @@ public class MapGenSpecialFeatures extends MapGenStructure { if(!bookLocs.isEmpty()) return; - long time = System.nanoTime(); - for(ChunkCoordIntPair loc : locs) { bookLocs.add(loc); } - - System.out.print(System.nanoTime() - time); - }*/ + } protected void generatePositions() { //for safety: maybe mandate interactions with these methods to an outside class/wrapper who say "fuck you" - Random rand = new Random(this.worldObj.getSeed()); //TODO: worldObj is null until func_15139_a is called!! very bad!!! + Random rand = new Random(this.worldObj.getSeed()); double theta = rand.nextDouble() * Math.PI * 2; int ringMax = 4; //each ring of structures has more (and is farther) than the last int ringDist = 1; diff --git a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java index 3f168c68d..172c9bd2d 100644 --- a/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java +++ b/src/main/java/com/hbm/world/gen/NTMWorldGenerator.java @@ -19,15 +19,17 @@ import net.minecraftforge.event.world.WorldEvent; public class NTMWorldGenerator implements IWorldGenerator { private MapGenNTMFeatures scatteredFeatureGen; //looks like it's based! thank god! - private MapGenSpecialFeatures specialFeatureGen; //change back if it's actually cringe and throws NPEs + public MapGenSpecialFeatures specialFeatureGen; //change back if it's actually cringe and throws NPEs private final Random rand = new Random(); //A central random, used to cleanly generate our stuff without affecting vanilla or modded seeds. /** Inits all MapGen upon the loading of a new world. Hopefully clears out structureMaps and structureData when a different world is loaded. */ @SubscribeEvent public void onLoad(WorldEvent.Load event) { - scatteredFeatureGen = (MapGenNTMFeatures) getModdedMapGen(new MapGenNTMFeatures(), EventType.CUSTOM); //TODO: set worlds to a non-null value here. - specialFeatureGen = (MapGenSpecialFeatures) getModdedMapGen(new MapGenSpecialFeatures(), EventType.CUSTOM); //we've got access to it plain n simple here anyway + scatteredFeatureGen = (MapGenNTMFeatures) getModdedMapGen(new MapGenNTMFeatures(), EventType.CUSTOM); + specialFeatureGen = (MapGenSpecialFeatures) getModdedMapGen(new MapGenSpecialFeatures(), EventType.CUSTOM); + specialFeatureGen.setWorld(event.world); //doesn't matter on the client so we're good anyway + hasPopulationEvent = false; } diff --git a/src/main/java/com/hbm/world/gen/component/Component.java b/src/main/java/com/hbm/world/gen/component/Component.java index 0d86e2cac..d64f95ef4 100644 --- a/src/main/java/com/hbm/world/gen/component/Component.java +++ b/src/main/java/com/hbm/world/gen/component/Component.java @@ -6,6 +6,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.BobbleType; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; +import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.config.StructureConfig; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.tileentity.machine.TileEntityLockableBase; @@ -39,7 +40,7 @@ abstract public class Component extends StructureComponent { protected Component(Random rand, int minX, int minY, int minZ, int maxX, int maxY, int maxZ ) { super(0); - this.coordBaseMode = rand.nextInt(4); + this.coordBaseMode = 0;//rand.nextInt(4); switch(this.coordBaseMode) { case 0: @@ -435,6 +436,22 @@ abstract public class Component extends StructureComponent { } } + protected void placeLootBlock(World world, StructureBoundingBox box, Random rand, int featureX, int featureY, int featureZ, ItemStack stack) { + int posX = this.getXWithOffset(featureX, featureZ); + int posY = this.getYWithOffset(featureY); + int posZ = this.getZWithOffset(featureX, featureZ); + + if(!box.isVecInside(posX, posY, posZ)) return; + + world.setBlock(posX, posY, posZ, ModBlocks.deco_loot, 0, 2); + + TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(posX, posY, posZ); + + if(loot != null && loot.items.isEmpty()) { + loot.addItem(stack, rand.nextGaussian() * 0.02, 0, rand.nextGaussian() * 0.02); + } + } + /** * Places random bobblehead with a randomized orientation at specified location */ @@ -690,7 +707,7 @@ abstract public class Component extends StructureComponent { } } } - + //TODO replace the shitty block selector with something else. probably a lambda that returns a metablock for convenience protected void fillWithRandomizedBlocks(World world, StructureBoundingBox box, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, Random rand, BlockSelector selector) { //so i don't have to replace shit if(getYWithOffset(minY) < box.minY || getYWithOffset(maxY) > box.maxY) diff --git a/src/main/java/com/hbm/world/gen/component/OfficeFeatures.java b/src/main/java/com/hbm/world/gen/component/OfficeFeatures.java index 7fcba838a..a6322c4c6 100644 --- a/src/main/java/com/hbm/world/gen/component/OfficeFeatures.java +++ b/src/main/java/com/hbm/world/gen/component/OfficeFeatures.java @@ -3,10 +3,16 @@ package com.hbm.world.gen.component; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.items.special.ItemBookLore; import com.hbm.lib.HbmChestContents; +import com.hbm.lib.HbmWorld; import com.hbm.util.LootGenerator; + import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; +import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.World; import net.minecraft.world.gen.structure.MapGenStructureIO; import net.minecraft.world.gen.structure.StructureBoundingBox; @@ -546,6 +552,11 @@ public class OfficeFeatures { placeBlockAtCurrentPosition(world, ModBlocks.deco_loot, 0, 1, 10, 11, box); LootGenerator.lootMedicine(world, this.getXWithOffset(1, 11), this.getYWithOffset(10), this.getZWithOffset(1, 11)); + //if(rand.nextInt(3) == 0) { + Vec3 pair = HbmWorld.worldGenerator.specialFeatureGen.findClosestPosition(this.boundingBox.minX >> 4, this.boundingBox.minZ >> 4); + ItemStack book = ItemBookLore.createBook(pair.xCoord * 16 + ", " + pair.zCoord * 16, 1, 0x7F0037, 0xFFFFFF); + placeLootBlock(world, box, rand, 8, 10, 10, book); + //} //this hurt my soul return true;