[1.7.10]Генерация Руд

32
1
0
Привет всем.Я начинающий мододел, да и знаний в Java особых нет.Вот.
В общем такая суть.Хочу сделать генерацию руд(не одной).
Делаю по вики, сделал, работает.Но, при добавление ещё генераций руд, мир начинает генерироваться очень долго, спустя  30с, появляюсь в пустоте.Ещё 30с появляется пару чанков и генерация мира тормозится.
В режиме выживание блоки не ломаются.
Вот код:

Код:
import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class OreGenerator implements IWorldGenerator {
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator,
            IChunkProvider chunkProvider)
    {
            switch(world.provider.dimensionId)
            {
                    case 0: generateOverworld(world, random, chunkX * 16, chunkZ * 16); break;
            }
            }

    

    private void generateOverworld(World world, Random random, int x, int z) 
    {
            this.addOreSpawn(TestMod.IronOr, world, random, x, z, 16, 16, 7 + random.nextInt(3), 10, 10, 50);
            this.addOreSpawn(TestMod.GoldOr, world, random, x, z, 14, 16, 2 + random.nextInt(3), 6, 30, 50);
            this.addOreSpawn(TestMod.FluchiiOr, world, random, x, z, 15, 16, 2 + random.nextInt(3), 5, 40, 50);
            //this.addOreSpawn(TestMod.DiamondOr, world, random, x, z, 16, 16, 5 + random.nextInt(3), 5, 40, 50);
            //this.addOreSpawn(TestMod.KeyworitOr, world, random, x, z, 16, 16, 5 + random.nextInt(3), 10, 10, 50);
            //this.addOreSpawn(TestMod.RedStoneOr, world, random, x, z, 16, 16, 7 + random.nextInt(3), 7, 35, 50);
            //(block, world, random, blockXPos, blockZPos, maxX, maxZ, maxVeinSize, chancesToSpawn, minY, maxY)
    }

    
    
/**
 * Добавляет генерацию руды в Minecraft. Просто воспользуйтесь этим методом для регистрации генерируемых руд.

 * @param block Блок, который хотите генерировать

 * @param world Мир (не измерение), в котором этот блок должен генерироваться

 * @param random Случайное число для получения координат генерации блока

 * @param blockXPos Число для того, чтобы было пустое место по координатам X для метода генерации (использует кварцевая руда)

 * @param blockZPos Число для того, чтобы было пустое место по координатам Z для метода генерации (использует кварцевая руда)

 * @param maxX Число, которое настроит максимальную X координату для генерации руды на оси X на чанк

 * @param maxZ Число, которое настроит максимальную Z координату для генерации руды на оси Z на чанк

 * @param maxVeinSize Максимальное число блоков руды в одной жиле

 * @param chancesToSpawn Шанс генерации блоков на чанк

 * @param minY Минимальная координата Y на которой руда может сгенерироваться

 * @param maxY Максимальная координата Y на которой руда может сгенерироваться
 */
    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ,
            int maxVeinSize, int chancesToSpawn, int minY, int maxY)
    {
            int maxPossY = minY + (maxY - 1);
            assert maxY > minY : "Максимальная Y должна быть больше минимальной";
            assert maxX > 0 && maxX <= 16 : "addOreSpawn: Максимальная X должна быть больше 0 и меньше 16";
            assert minY > 0 : "addOreSpawn: Минимальная Y должна быть больше 0";
            assert maxY < 256 && maxY > 0 : "addOreSpawn: Максимальная Y должна быть меньше 256 и больше 0";
            assert maxZ > 0 && maxZ <= 16 : "addOreSpawn: Максимальная Z должна быть больше 0 и меньше 16";

            int diffBtwnMinMaxY = maxY - minY;
            for (int x = 0; x < chancesToSpawn; x++)
            {
                    int posX = blockXPos + random.nextInt(maxX);
                    int posY = minY + random.nextInt(diffBtwnMinMaxY);
                    int posZ = blockZPos + random.nextInt(maxZ);
                    (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
            }
    }

}
Буду рад за помощь и советы.
Заранее Спасибо!
 
252
0
Код:
package ru.bobs;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;

public class BlockMalachiteGenerator implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        
        switch(world.provider.dimensionId){
        case -1:
            generateNether(world, random, chunkX*16,chunkZ*16);
        case 0 :
            generateSurface(world, random, chunkX*16,chunkZ*16);
        case 1:
            generateEnd(world, random, chunkX*16,chunkZ*16);
        }
    }
    
    private void generateNether(World world, Random random, int x, int y) {
        
    }
    
    private void generateSurface(World world, Random random, int x, int y) {
        this.addOreSpawn(Main.BlockMalachite, world, random, x, y, 16, 16, 3+random.nextInt(2), 7, 0, 30);

    }
    
    private void generateEnd(World world, Random random, int x, int y) {
        
    }

    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY) {
        for(int i = 0; i < chancesToSpawn; i++) {
            int posX = blockXPos + random.nextInt(maxX);
            int posY = minY + random.nextInt(maxY - minY);
            int posZ = blockZPos + random.nextInt(maxZ);
            (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
        }
    }
}
Я пользовался этим кодом, все работает.
P.s
Я понимаю что я не супер пупер знаток, поправите меня, может мой код тоже кривой)
 
769
1
42
Зачем тебе пустые публик воид с краем и адом?
 
252
0
А я их не заполнял, специально, не хотел что бы та руда не генерировалась в этих мирах.
 
1,990
18
105
Оптимальнее было не создавать этих методов вообще и убрать свой свитч-кейс. Ну это я так, секретиками полезными делюсь.
 
32
1
0
IvanTur написал(а):
Код:
package ru.bobs;

import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;

public class BlockMalachiteGenerator implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        
        switch(world.provider.dimensionId){
        case -1:
            generateNether(world, random, chunkX*16,chunkZ*16);
        case 0 :
            generateSurface(world, random, chunkX*16,chunkZ*16);
        case 1:
            generateEnd(world, random, chunkX*16,chunkZ*16);
        }
    }
    
    private void generateNether(World world, Random random, int x, int y) {
        
    }
    
    private void generateSurface(World world, Random random, int x, int y) {
        this.addOreSpawn(Main.BlockMalachite, world, random, x, y, 16, 16, 3+random.nextInt(2), 7, 0, 30);

    }
    
    private void generateEnd(World world, Random random, int x, int y) {
        
    }

    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY) {
        for(int i = 0; i < chancesToSpawn; i++) {
            int posX = blockXPos + random.nextInt(maxX);
            int posY = minY + random.nextInt(maxY - minY);
            int posZ = blockZPos + random.nextInt(maxZ);
            (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
        }
    }
}
Я пользовался этим кодом, все работает.
P.s
Я понимаю что я не супер пупер знаток, поправите меня, может мой код тоже кривой)
Использовал твой код, проблема не убралась.
Но всё равно,спасибо.Вот.
 
32
1
0
IvanTur написал(а):
А ты изменял шанс спавна он у меня маленький был
Изменил, вроде-как.Мир всё также грузит очень долго, ещё и не грузит чанки.Вот собственно код.
Код:
import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import cpw.mods.fml.common.IWorldGenerator;

public class OreGenerator implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        
        switch(world.provider.dimensionId){
        case -1:
            generateNether(world, random, chunkX*16,chunkZ*16);
        case 0 :
            generateSurface(world, random, chunkX*16,chunkZ*16);
        case 1:
            generateEnd(world, random, chunkX*16,chunkZ*16);
        }
    }
    
    private void generateNether(World world, Random random, int x, int y) {
        
        
    }
    
    private void generateSurface(World world, Random random, int x, int y) {
        this.addOreSpawn(TestMod.IronOr, world, random, x, y, 16, 16, 7 + random.nextInt(2), 11, 10, 50);
        this.addOreSpawn(TestMod.GoldOr, world, random, x, y, 14, 16, 2 + random.nextInt(3), 6, 30, 50);
        this.addOreSpawn(TestMod.FluchiiOr, world, random, x, y, 15, 16, 2 + random.nextInt(4), 2, 40, 50);
        this.addOreSpawn(TestMod.KeyworitOr, world, random, x, y, 16, 16, 5 + random.nextInt(5), 4, 10, 50);
        this.addOreSpawn(TestMod.DiamondOr, world, random, x, y, 16, 16, 5 + random.nextInt(6), 5, 40, 50);
  this.addOreSpawn(TestMod.RedStoneOr, world, random, x, y, 16, 16, 7 + random.nextInt(7), 7, 35, 50);
  this.addOreSpawn(TestMod.Carmelit, world, random, x, y, 16, 16, 20 + random.nextInt(8), 7, 1, 30);

    }
    
    private void generateEnd(World world, Random random, int x, int y) {
        
    }

    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY) {
        for(int i = 0; i < chancesToSpawn; i++) {
            int posX = blockXPos + random.nextInt(maxX);
            int posY = minY + random.nextInt(maxY - minY);
            int posZ = blockZPos + random.nextInt(maxZ);
            (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
        }
    }
}
 
1,976
68
220
Насколько корявый у вас код, что мир так долго грузит?
[youtube]pqv5ZrLNkrQ[/youtube]
[youtube]EjM1NBWUw6E[/youtube]
 
Сверху