Как заменить генерацию ванильного спавнера с CaveSpider'ом на другого моба в заброшенных шахтах (в моде на генерацию)?

Версия Minecraft
1.7.10
API
Forge
4
1
0
В ванилле в заброшенных шахтах есть спавнеры с ядовитыми пещерными пауками. Как их полностью менять на другого моба при генерации?

Класс: net/minecraft/world/gen/structure/StructureMineshaftPieces.java
Мод на Forge. Как через мод сделать замену моба в спавнерах при их генерации?

Пробовал даже менять в самом ванильном классе стрингу "CaveSpider" через InClassTranslator на свою, но сервер крашится, потому что при таком действии видите ли "пропадает какой-то method"...

Поэтому теперь хочу сделать через мод.
 
Решение
Не без труда, но мне удалось. В populate моего генератора, где

Java:
if (mapFeaturesEnabled)
{
    villageGenerated = villageGenerator.generateStructuresInChunk(worldObj, rand2, i, j);
    mineshaftGenerated = mineshaftGenerator.generateStructuresInChunk(worldObj, rand2, i, j);
}

Я сделал переменную "mineshaftGenerated" ^ и использовал ее в конце метода перед вызовом "PopulateChunkEvent.Post":

Java:
if (mineshaftGenerated && worldObj.getWorldInfo().getVanillaDimension() == 0) {
    Map<ChunkPosition, TileEntity> map = worldObj.getChunkFromChunkCoords(i, j).chunkTileEntityMap;
    if (map != null) {
        Iterator<Map.Entry<ChunkPosition, TileEntity>> it = map.entrySet().iterator();
        while (it.hasNext()) {...
7,099
324
1,510
Делаешь IWorldGenerator с низким весом(чтобы выполнялся позже остальных), который проходит по всему чанку и для каждого блока спаунера пауков в его тайле меняет тип моба
 
4
1
0
Не без труда, но мне удалось. В populate моего генератора, где

Java:
if (mapFeaturesEnabled)
{
    villageGenerated = villageGenerator.generateStructuresInChunk(worldObj, rand2, i, j);
    mineshaftGenerated = mineshaftGenerator.generateStructuresInChunk(worldObj, rand2, i, j);
}

Я сделал переменную "mineshaftGenerated" ^ и использовал ее в конце метода перед вызовом "PopulateChunkEvent.Post":

Java:
if (mineshaftGenerated && worldObj.getWorldInfo().getVanillaDimension() == 0) {
    Map<ChunkPosition, TileEntity> map = worldObj.getChunkFromChunkCoords(i, j).chunkTileEntityMap;
    if (map != null) {
        Iterator<Map.Entry<ChunkPosition, TileEntity>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<ChunkPosition, TileEntity> pair = it.next();
            TileEntity tile = pair.getValue();
            if (tile instanceof TileEntityMobSpawner) {
                TileEntityMobSpawner spawner = (TileEntityMobSpawner) tile;
                MobSpawnerBaseLogic logic = spawner.func_145881_a();
                if (logic.getEntityNameToSpawn().equals("FromMobName"))
                    logic.setEntityName("ToMobName");
            }
        }
    }
}

А дальше (в чанках, где точно сгенерировалась шахта) получил список TileEntity моб-спавнеров и поменял в них моба ^
 
Последнее редактирование:
Сверху