Генерация руд в чужом/кастомном измерений

Версия Minecraft
1.12.2
2,932
44
598
Доброго времени суток Земляне и Чужие!
Сегодня я столкнулся с таким вопросом: Как добавить генерацию руд в чужое измерение (В моём случае я пытаюсь добавить генерацию в Туманное измерение @Liahim"а)
В генераторе в методе generate я уже делал и такую проверку if (world.provider.getDimension() == Mist.dimensionID), и такую if (world.provider.getDimension() == 69).
В общем вот мой генератор, и я пытаюсь добавить генерацию своей руды в измерение из другого мода:
Java:
public class MistyThaumcraftWorldGenerator implements IWorldGenerator
{
    private WorldGenerator ore_amber;
  
    public MistyThaumcraftWorldGenerator()
    {
        ore_amber = new WorldGenMinable(RegisterBlocks.ore_amber.getDefaultState(), 9);
    }

    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider)
    {
        if (world.provider.getDimension() == Mist.dimensionID) {

            runGenerator(ore_amber, world, random, chunkX, chunkZ, 80, 5, 180);     

        }
      
    }
  
    private void runGenerator(WorldGenerator gen, World world, Random rand, int chunkX, int chunkZ, int chance, int minHeight, int maxHeight)
    {
        if(minHeight > maxHeight || minHeight < 0 || maxHeight > 256) throw new IllegalArgumentException("Ore generated out of bounds");
        int heightDiff = maxHeight - minHeight + 1;
      
        for(int i = 0; i < chance; i++)
        {
            int x = chunkX * 8 + rand.nextInt(8);
            int y = minHeight + rand.nextInt(heightDiff);
            int z = chunkZ * 8 + rand.nextInt(8);
          
            gen.generate(world, rand, new BlockPos(x, y, z));
        }
    }
}
(В интернете не нашёл как генерировать руду в чужом измерений)
Там в кастомных измерениях руду вроде бы через биомы (decorate()) генерируют.
 
Последнее редактирование:
4,045
63
645
Как я и говорил, надо бы выяснить, какой эвент использует этот генератор и просто пихнуть его в туманный мир...
Хотя, судя по разным модпакам, народ уже там что-то размещает... Значит должно фурычить.
 
2,932
44
598
Как я и говорил, надо бы выяснить, какой эвент использует этот генератор и просто пихнуть его в туманный мир...
Хм... Что-то типо такого надо:
Java:
    @SubscribeEvent
    public static void preventOres(OreGenEvent.GenerateMinable event)
    {
        OreGenEvent.GenerateMinable.EventType type = event.getType();
    }
 
2,932
44
598
Я сейчас посмотрел как сделана генерация деревьев и кристаллов в Тауме и понял что они там через биомы генерируются:
Java:
  public static float getBiomeSupportsGreatwood(int biomeId)
  {
    try
    {
      Set<BiomeDictionary.Type> types = BiomeDictionary.getTypes(Biome.getBiome(biomeId));
      for (BiomeDictionary.Type type : types) {
        if (((Boolean)((List)biomeInfo.get(type)).get(2)).booleanValue()) {
          return ((Float)((List)biomeInfo.get(type)).get(3)).floatValue();
        }
      }
    }
    catch (Exception localException) {}
    return 0.0F;
  }
Java:
public static boolean generateGreatwood(World world, Random random, int chunkX, int chunkZ)
  {
    int x = chunkX * 16 + 8 + MathHelper.getInt(random, -4, 4);
    int z = chunkZ * 16 + 8 + MathHelper.getInt(random, -4, 4);
    BlockPos bp = world.getPrecipitationHeight(new BlockPos(x, 0, z));
    int bio = Biome.getIdForBiome(world.getBiome(bp));
    if (BiomeHandler.getBiomeSupportsGreatwood(bio) > random.nextFloat())
    {
      boolean t = new WorldGenGreatwoodTrees(false, random.nextInt(8) == 0).generate(world, random, bp);
      return t;
    }
    return false;
  }
(Просто в ванильном Тауме деревья могут генерироваться в Туманном измерений)
 
2,932
44
598
Попробую сейчас переопределить ЧанкПровайдер измерения Лиахима.
Что-то типо этого:
Java:
dimID = 6; //actual dimID can be anything I think (there are bounds but I forgot them but I'm sure they're no lower than 255), but don't use -1, 0, or 1 or it'll have an ID conflict and crash the game
/*Setting up worldgen*/
WorldServer world = DimensionManager.getWorld(-1); //gets the Nether world
DimensionManager.registerProviderType(dimID, WorldProviderEnder.class, true);
DimensionManager.registerDimension(dimID, dimID);

@SubscribeEvent
public void onNetherGen(ChunkProviderEvent.InitNoiseField event)
{

 if (event.chunkProvider.getClass() == ChunkProviderNether.class)
 {
 ChunkProviderNetherModded gen = (ChunkProviderNetherModded)(new
 ChunkProviderNetherModded(DimensionManager.getWorld(-1), DimensionManager.getWorld(-1).getSeed())); //ChunkProviderNetherModded is your modded ChunkProviderNether which can be identical except for the class names for the glowstone gen
event.setResult(Result.DENY);
event.noisefield = gen.initializeNoiseField(null, event.posX, event.posY, event.posZ, event.sizeX, event.sizeY, event.sizeZ);
}
}
 
Сверху