- 32
- 1
- 0
Привет всем.Я начинающий мододел, да и знаний в Java особых нет.Вот.
В общем такая суть.Хочу сделать генерацию руд(не одной).
Делаю по вики, сделал, работает.Но, при добавление ещё генераций руд, мир начинает генерироваться очень долго, спустя 30с, появляюсь в пустоте.Ещё 30с появляется пару чанков и генерация мира тормозится.
В режиме выживание блоки не ломаются.
Вот код:
Буду рад за помощь и советы.
Заранее Спасибо!
В общем такая суть.Хочу сделать генерацию руд(не одной).
Делаю по вики, сделал, работает.Но, при добавление ещё генераций руд, мир начинает генерироваться очень долго, спустя 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);
}
}
}
Заранее Спасибо!