added ocean monument finder
This commit is contained in:
@@ -17,13 +17,7 @@ public class FinderQueue {
|
||||
private List<Finder> activeFinders = new ArrayList<>();
|
||||
|
||||
private FinderQueue() {
|
||||
this.finderBuilders.add(DungeonFinder::create);
|
||||
this.finderBuilders.add(BuriedTreasureFinder::create);
|
||||
this.finderBuilders.add(SwampHutFinder::create);
|
||||
this.finderBuilders.add(DesertTempleFinder::create);
|
||||
this.finderBuilders.add(JungleTempleFinder::create);
|
||||
this.finderBuilders.add(EndPillarsFinder::create);
|
||||
this.finderBuilders.add(BiomeFinder::create);
|
||||
this.clear();
|
||||
}
|
||||
|
||||
public static FinderQueue get() {
|
||||
@@ -63,6 +57,16 @@ public class FinderQueue {
|
||||
|
||||
public void clear() {
|
||||
this.activeFinders.clear();
|
||||
this.finderBuilders.clear();
|
||||
|
||||
this.finderBuilders.add(DungeonFinder::create);
|
||||
this.finderBuilders.add(BuriedTreasureFinder::create);
|
||||
this.finderBuilders.add(SwampHutFinder::create);
|
||||
this.finderBuilders.add(DesertTempleFinder::create);
|
||||
this.finderBuilders.add(JungleTempleFinder::create);
|
||||
this.finderBuilders.add(EndPillarsFinder::create);
|
||||
this.finderBuilders.add(BiomeFinder::create);
|
||||
this.finderBuilders.add(OceanMonumentFinder::create);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public abstract class AbstractTempleFinder extends Finder {
|
||||
});
|
||||
|
||||
buildStructure(finder);
|
||||
finders.add(finder);
|
||||
this.finders.add(finder);
|
||||
});
|
||||
|
||||
this.size = size;
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
package kaptainwutax.seedcracker.finder;
|
||||
|
||||
import kaptainwutax.seedcracker.SeedCracker;
|
||||
import kaptainwutax.seedcracker.cracker.StructureData;
|
||||
import kaptainwutax.seedcracker.render.Cube;
|
||||
import kaptainwutax.seedcracker.render.Cuboid;
|
||||
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.util.math.Direction;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.dimension.DimensionType;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class OceanMonumentFinder extends Finder {
|
||||
|
||||
protected List<PieceFinder> finders = new ArrayList<>();
|
||||
protected final Vec3i size = new Vec3i(8, 5, 8);
|
||||
|
||||
public OceanMonumentFinder(World world, ChunkPos chunkPos) {
|
||||
super(world, chunkPos);
|
||||
|
||||
PieceFinder finder = new PieceFinder(world, chunkPos, Direction.NORTH, size);
|
||||
|
||||
finder.searchPositions.removeIf(pos -> {
|
||||
if(pos.getY() != 56)return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
buildStructure(finder);
|
||||
this.finders.add(finder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BlockPos> findInChunk() {
|
||||
Map<PieceFinder, List<BlockPos>> result = this.findInChunkPieces();
|
||||
List<BlockPos> combinedResult = new ArrayList<>();
|
||||
|
||||
result.forEach((pieceFinder, positions) -> {
|
||||
positions.removeIf(pos -> {
|
||||
//Figure this out, it's not a trivial task.
|
||||
return false;
|
||||
});
|
||||
|
||||
combinedResult.addAll(positions);
|
||||
|
||||
positions.forEach(pos -> {
|
||||
this.renderers.add(new Cuboid(pos, pieceFinder.getLayout(), new Vector4f(0.0f, 0.0f, 1.0f, 1.0f)));
|
||||
ChunkPos monumentStart = new ChunkPos(this.chunkPos.x + 1, this.chunkPos.z + 1);
|
||||
this.renderers.add(new Cube(monumentStart.getCenterBlockPos().add(0, pos.getY(), 0), new Vector4f(0.0f, 0.0f, 1.0f, 1.0f)));
|
||||
SeedCracker.get().onStructureData(new StructureData(monumentStart, StructureData.OCEAN_MONUMENT));
|
||||
});
|
||||
});
|
||||
|
||||
return combinedResult;
|
||||
}
|
||||
|
||||
public Map<PieceFinder, List<BlockPos>> findInChunkPieces() {
|
||||
Map<PieceFinder, List<BlockPos>> result = new HashMap<>();
|
||||
|
||||
this.finders.forEach(pieceFinder -> {
|
||||
result.put(pieceFinder, pieceFinder.findInChunk());
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValidDimension(DimensionType dimension) {
|
||||
return dimension == DimensionType.OVERWORLD;
|
||||
}
|
||||
|
||||
public void buildStructure(PieceFinder finder) {
|
||||
BlockState prismarine = Blocks.PRISMARINE.getDefaultState();
|
||||
BlockState prismarineBricks = Blocks.PRISMARINE_BRICKS.getDefaultState();
|
||||
BlockState darkPrismarine = Blocks.DARK_PRISMARINE.getDefaultState();
|
||||
BlockState seaLantern = Blocks.SEA_LANTERN.getDefaultState();
|
||||
BlockState water = Blocks.WATER.getDefaultState();
|
||||
|
||||
//4 bottom pillars.
|
||||
for(int i = 0; i < 4; i++) {
|
||||
int x = i >= 2 ? 7 : 0;
|
||||
int z = i % 2 == 0 ? 0 : 7;
|
||||
|
||||
for(int y = 0; y < 3; y++) {
|
||||
finder.addBlock(prismarineBricks, x, y, z);
|
||||
}
|
||||
}
|
||||
|
||||
//First bend.
|
||||
for(int i = 0; i < 4; i++) {
|
||||
int x = i >= 2 ? 6 : 1;
|
||||
int z = i % 2 == 0 ? 1 : 6;
|
||||
finder.addBlock(prismarineBricks, x, 3, z);
|
||||
}
|
||||
|
||||
//Prismarine ring.
|
||||
for(int x = 2; x <= 5; x++) {
|
||||
for(int z = 2; z <= 5; z++) {
|
||||
if(x == 2 || x == 5 || z == 2 || z == 5) {
|
||||
finder.addBlock(prismarine, x, 4, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Second bend.
|
||||
for(int i = 0; i < 4; i++) {
|
||||
int x = i >= 2 ? 5 : 2;
|
||||
int z = i % 2 == 0 ? 2 : 5;
|
||||
finder.addBlock(prismarineBricks, x, 4, z);
|
||||
finder.addBlock(seaLantern, x, 3, z);
|
||||
}
|
||||
}
|
||||
|
||||
public static List<Finder> create(World world, ChunkPos chunkPos) {
|
||||
List<Finder> finders = new ArrayList<>();
|
||||
finders.add(new OceanMonumentFinder(world, chunkPos));
|
||||
finders.add(new OceanMonumentFinder(world, new ChunkPos(chunkPos.x - 1, chunkPos.z)));
|
||||
finders.add(new OceanMonumentFinder(world, new ChunkPos(chunkPos.x, chunkPos.z - 1)));
|
||||
finders.add(new OceanMonumentFinder(world, new ChunkPos(chunkPos.x - 1, chunkPos.z - 1)));
|
||||
return finders;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -64,6 +64,16 @@ public class PieceFinder extends Finder {
|
||||
|
||||
Chunk chunk = this.world.getChunk(this.chunkPos.getCenterBlockPos());
|
||||
|
||||
// FOR DEBUGGING PIECES.
|
||||
int y = this.rotation.ordinal() * 10 + this.mirror.ordinal() * 20 + 60;
|
||||
|
||||
if(this.chunkPos.x % 2 == 0 && this.chunkPos.z % 2 == 0) {
|
||||
this.structure.forEach((pos, state) -> {
|
||||
//this.world.setBlockState(this.chunkPos.getCenterBlockPos().add(pos).add(0, y, 0), state);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
for(BlockPos center: this.searchPositions) {
|
||||
boolean found = true;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user