So I wondered if you could add an easy way to add a custom structure to the /locate command, I think it would be best to put it in the WorldGenerator class and then like this (using a structure from my mod, the generate method):
while (worldIn.isAirBlock(position) && position.getY() > 2) {
position = position.down();
}
if (!IS_GRASS.apply(worldIn.getBlockState(position)) && !IS_HIGH_GRASS.apply(worldIn.getBlockState(position))) {
return false;
}
if(IS_HIGH_GRASS.apply(worldIn.getBlockState(position))) {
position = position.down();
}
Random random = worldIn.getChunkFromChunkCoords(position.getX(), position.getZ()).getRandomWithSeed(987234911L);
Rotation[] arotation = Rotation.values();
Rotation rotation = arotation[random.nextInt(arotation.length)];
ChunkPos chunkpos = new ChunkPos(position);
StructureBoundingBox structureboundingbox = new StructureBoundingBox(chunkpos.getXStart() - 16, 0, chunkpos.getZStart() - 16, chunkpos.getXEnd() + 16, 256, chunkpos.getZEnd() + 16);
PlacementSettings placementsettings = (new PlacementSettings()).setRotation(rotation).setBoundingBox(structureboundingbox).setRandom(random);
MinecraftServer minecraftserver = worldIn.getMinecraftServer();
TemplateManager templatemanager = worldIn.getSaveHandler().getStructureTemplateManager();
Template template = templatemanager.getTemplate(minecraftserver, HOUSE);
template.addBlocksToWorld(worldIn, position, placementsettings, 20);
*this.addStructureToLocate(position, "House");*
return true;
The params being: A BlockPos, obviously for where it generated, a String which is the name to use in the command
It would look something like this in the WorldGenerator class:
protected void addStructureToLocate(BlockPos pos, String name)
{
CommandLocate.STRUCTURES.add(name);
CommandLocate.addStructureLocation(pos, name);
}
And in the CommandLocate class itself:
public static String[] STRUCTURES = new String[] {"Stronghold", "Monument", "Village", "Mansion", "EndCity", "Fortress", "Temple", "Mineshaft"}
public List<String> getTabCompletionOptions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos pos)
{
return args.length == 1 ? getListOfStringsMatchingLastWord(args, STRUCTURES): Collections.<String>emptyList();
}
public void addStructureLocation(BlockPos pos, String name)
{
don't know how to do this but you might get the idea
}
I don't really know how lists sets and all work but jeh... gtg