Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/12/18 in all areas

  1. Making a dungeon mod -- someone after my own heart. Well, for spawners I used this code: public static void placeSpawner(World world, int x, int y, int z, String mob) { // Place spawner block BlockPos pos = new BlockPos(x, y, z); if (MinecraftForge.TERRAIN_GEN_BUS.post(new DLDEvent.BeforePlaceSpawner(world, pos, mob))) return; if(isProtectedBlock(world, x, y, z)) return; if(!placeBlock(world, x, y, z, spawner)) return; TileEntityMobSpawner theSpawner = (TileEntityMobSpawner)world.getTileEntity(pos); // Set up spawner logic MobSpawnerBaseLogic logic = theSpawner.getSpawnerBaseLogic(); NBTTagCompound spawnData = new NBTTagCompound(); spawnData.setString("id", mob); logic.setNextSpawnData(new WeightedSpawnerEntity(1, spawnData)); } Note that I never did manage to add custom attributes to the spawner / mob (I tried once, when I added them to items). But for adding a mob, this works. I have code for chests too, though it refers through several classes and methods to pick items. The basic adding of items isn't hard though, if you want to see it. For custom, you just have to add whatever attributes you have created.
    1 point
  2. 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
    1 point
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.