Можно и так сказать (написать).WerDei написал(а):Что, всё настолько плохо?
Да.WerDei написал(а):А можно ли тогда заменить все блоки глины, сгенерившиеся в мире, на другой?
GameRegistry.registerWorldGenerator(new GeneratorMyClay(), 0);
public class GeneratorMyClay 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);break;
case 0:generateSurface(world, random, chunkX * 16, chunkZ * 16);break;
case 1:generateEnd(world, random, chunkX * 16, chunkZ * 16);break;
}
}
private void generateEnd(World world, Random random, int x, int y) {
}
private void generateSurface(World world, Random random, int x, int z) {
for (int y = 1; y < world.getHeight(); ++y) {
for (int x1 = x; x < x + 16; x1++) {
for (int z1 = z; z < z + 16; z1++) {
if (world.getBlock(x1, y, z1) == Blocks.clay) {
world.setBlock(x1, y, z1, MyMod.block_my_clay);
}
}
}
}
}
private void generateNether(World world, Random random, int x, int y) {
}
}
@SubscribeEvent
public void populateChunk(PopulateChunkEvent.Pre event){
Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ);
for(ExtendedBlockStorage storage : chunk.getBlockStorageArray()){
if(storage != null){
for(int x = 0; x < 16; x++){
for(int z = 0; z < 16; z++){
for(int y = 0; y < 256; y++){
if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore){
storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(0));
}
}
}
}
}
}
Да, ты писал мне про это. В последнее время я другим занят. Про этот эвент я не знал. В некотором вроде, спасибо за код.Agravaine написал(а):Тимаха, я же тебе говорил, что так делать плохо.
Игра будет "висеть" при подгрузке чанков.
А куда его пихать? Я тут попробовал его вставить... Крашается при генерации мира:Agravaine написал(а):Тимаха, я же тебе говорил, что так делать плохо.
Игра будет "висеть" при подгрузке чанков.
Вот так лучше:
Код:@SubscribeEvent public void populateChunk(PopulateChunkEvent.Pre event){ Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ); for(ExtendedBlockStorage storage : chunk.getBlockStorageArray()){ if(storage != null){ for(int x = 0; x < 16; x++){ for(int z = 0; z < 16; z++){ for(int y = 0; y < 256; y++){ if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore){ storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(0)); } } } } } }
package assets.firstmod.src;
import java.util.Random;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent.Pre;
import cpw.mods.fml.common.IWorldGenerator;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
public class ClayChanger implements IWorldGenerator {
@Override
public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
PopulateChunkEvent.Pre event = new Pre(chunkGenerator, world, random, chunkZ, chunkZ, false);
populateChunk(event);
}
@SubscribeEvent
public void populateChunk(PopulateChunkEvent.Pre event){
Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ);
for(ExtendedBlockStorage storage : chunk.getBlockStorageArray()){
if(storage != null){
for(int x = 0; x < 16; x++){
for(int z = 0; z < 16; z++){
for(int y = 0; y < 256; y++){
if(storage.getBlockByExtId(x, y, z) == Blocks.clay){
storage.setExtBlockMetadata(x, y, z, FirstMod.White_clay_block.damageDropped(0));
}
}
}
}
}
}
}
}
WerDei написал(а):А куда его пихать?
Нужно пихать в эвант, регистрация эванта (наверное):WerDei написал(а):@SubscribeEvent
MinecraftForge.EVENT_BUS.register(new EventYouClass());