From 71500af23f3a04bd21f5b8409f162c67c092b1aa Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 9 Oct 2019 19:39:26 -0400 Subject: [PATCH] Added dungeon finder --- .../kaptainwutax/seedcracker/FinderQueue.java | 6 +++ .../finder/BuriedTreasureFinder.java | 3 +- .../seedcracker/finder/DungeonFinder.java | 54 +++++++++++++++++++ .../seedcracker/util/PosIterator.java | 24 +++++++++ 4 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/main/java/kaptainwutax/seedcracker/finder/DungeonFinder.java create mode 100644 src/main/java/kaptainwutax/seedcracker/util/PosIterator.java diff --git a/src/main/java/kaptainwutax/seedcracker/FinderQueue.java b/src/main/java/kaptainwutax/seedcracker/FinderQueue.java index 402f845..47d73d0 100644 --- a/src/main/java/kaptainwutax/seedcracker/FinderQueue.java +++ b/src/main/java/kaptainwutax/seedcracker/FinderQueue.java @@ -2,6 +2,7 @@ package kaptainwutax.seedcracker; import com.mojang.blaze3d.platform.GlStateManager; import kaptainwutax.seedcracker.finder.BuriedTreasureFinder; +import kaptainwutax.seedcracker.finder.DungeonFinder; import kaptainwutax.seedcracker.finder.Finder; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; @@ -26,7 +27,12 @@ public class FinderQueue { public void onChunkData(World world, ChunkPos chunkPos) { BuriedTreasureFinder buriedTreasure = new BuriedTreasureFinder(world, chunkPos); buriedTreasure.findInChunk(); + + DungeonFinder dungeonFinder = new DungeonFinder(world, chunkPos); + dungeonFinder.findInChunk(); + this.activeFinders.add(buriedTreasure); + this.activeFinders.add(dungeonFinder); } public void renderFinders() { diff --git a/src/main/java/kaptainwutax/seedcracker/finder/BuriedTreasureFinder.java b/src/main/java/kaptainwutax/seedcracker/finder/BuriedTreasureFinder.java index 90288eb..d85cf7e 100644 --- a/src/main/java/kaptainwutax/seedcracker/finder/BuriedTreasureFinder.java +++ b/src/main/java/kaptainwutax/seedcracker/finder/BuriedTreasureFinder.java @@ -3,6 +3,7 @@ package kaptainwutax.seedcracker.finder; import kaptainwutax.seedcracker.render.Cube; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.client.util.math.Vector4f; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ChunkPos; import net.minecraft.world.World; @@ -52,7 +53,7 @@ public class BuriedTreasureFinder extends BlockFinder { return false; }); - result.forEach(pos -> this.renderers.add(new Cube(pos))); + result.forEach(pos -> this.renderers.add(new Cube(pos, new Vector4f(1.0f, 1.0f, 0.0f, 1.0f)))); return result; } diff --git a/src/main/java/kaptainwutax/seedcracker/finder/DungeonFinder.java b/src/main/java/kaptainwutax/seedcracker/finder/DungeonFinder.java new file mode 100644 index 0000000..4175118 --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/finder/DungeonFinder.java @@ -0,0 +1,54 @@ +package kaptainwutax.seedcracker.finder; + +import kaptainwutax.seedcracker.render.Cube; +import kaptainwutax.seedcracker.util.PosIterator; +import net.minecraft.block.Block; +import net.minecraft.block.Blocks; +import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.MobSpawnerBlockEntity; +import net.minecraft.client.util.math.Vector4f; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.ChunkPos; +import net.minecraft.world.World; + +import java.util.List; +import java.util.Set; + +public class DungeonFinder extends BlockFinder { + + protected static Set FLOOR_POSITION = PosIterator.create( + new BlockPos(-3, -1, -3), + new BlockPos(3, -1, 3) + ); + + public DungeonFinder(World world, ChunkPos chunkPos) { + super(world, chunkPos, Blocks.SPAWNER); + } + + @Override + public List findInChunk() { + //Gets all the positions with a mob spawner in the chunk. + List result = super.findInChunk(); + + result.removeIf(pos -> { + BlockEntity blockEntity = this.world.getBlockEntity(pos); + if(!(blockEntity instanceof MobSpawnerBlockEntity))return true; + + for(BlockPos blockPos: FLOOR_POSITION) { + BlockPos currentPos = pos.add(blockPos); + Block currentBlock = this.world.getBlockState(currentPos).getBlock(); + + if(currentBlock == Blocks.COBBLESTONE) {} + else if(currentBlock == Blocks.MOSSY_COBBLESTONE) {} + else return true; + } + + return false; + }); + + result.forEach(pos -> this.renderers.add(new Cube(pos, new Vector4f(1.0f, 0.0f, 0.0f, 1.0f)))); + + return result; + } + +} diff --git a/src/main/java/kaptainwutax/seedcracker/util/PosIterator.java b/src/main/java/kaptainwutax/seedcracker/util/PosIterator.java new file mode 100644 index 0000000..9c9babd --- /dev/null +++ b/src/main/java/kaptainwutax/seedcracker/util/PosIterator.java @@ -0,0 +1,24 @@ +package kaptainwutax.seedcracker.util; + +import net.minecraft.util.math.BlockPos; + +import java.util.HashSet; +import java.util.Set; + +public class PosIterator { + + public static Set create(BlockPos start, BlockPos end) { + Set result = new HashSet<>(); + + for(int x = start.getX(); x <= end.getX(); x++) { + for(int z = start.getZ(); z <= end.getZ(); z++) { + for(int y = start.getY(); y <= end.getY(); y++) { + result.add(new BlockPos(x, y, z)); + } + } + } + + return result; + } + +}