Metadata World Gen
Активный0.0
Установок
Последнее обновление
Версии
Генерация мира с метаданными! Версия Beta 1.7.3
Данная разработка представляет собой скорее дополнение, нежели полноценный мод. Основное нововведение — специальный класс WorldGenMinableMetadata, который является усовершенствованной версией стандартного WorldGenMinable. Ключевая особенность заключается в возможности передачи метаданных блоков, что позволяет генерировать объекты с различными вариантами во время создания мира.
Доступные версии
В разделе загрузок представлены два варианта реализации — как для клиента, так и для сервера. Одна из версий помечена как «+ Пример Мода» и содержит демонстрационный модификатор на базе Modloader и ModloaderMP, который добавляет в мир все возможные цветовые варианты шерсти. Этот примерный мод не является обязательным для использования основного функционала — он создан исключительно для наглядной демонстрации возможностей и может быть полезен разработчикам, желающим разобраться в принципах работы системы.
Важно отметить: для работы демонстрационного мода потребуются Modloader Beta 1.7.3 и ModloaderMP Unofficial v2. Базовая версия Metadata World Gen может функционировать без этих компонентов.
Класс WorldGenMinableMetadata
package net.minecraft.src;
import java.util.Random;
public class WorldGenMinableMetadata extends WorldGenerator {
private int minableBlockId;
private int numberOfBlocks;
private int blockMetadata;
public WorldGenMinableMetadata(int i1, int i2, int i3) {
this.minableBlockId = i1;
this.blockMetadata = i2;
this.numberOfBlocks = i3;
}
public boolean generate(World world1, Random random2, int i3, int i4, int i5) {
float f6 = random2.nextFloat() (float)Math.PI;
double d7 = (double)((float)(i3 + 8) + MathHelper.sin(f6) (float)this.numberOfBlocks / 8.0F);
double d9 = (double)((float)(i3 + 8) - MathHelper.sin(f6) (float)this.numberOfBlocks / 8.0F);
double d11 = (double)((float)(i5 + 8) + MathHelper.cos(f6) (float)this.numberOfBlocks / 8.0F);
double d13 = (double)((float)(i5 + 8) - MathHelper.cos(f6) (float)this.numberOfBlocks / 8.0F);
double d15 = (double)(i4 + random2.nextInt(3) + 2);
double d17 = (double)(i4 + random2.nextInt(3) + 2);
for(int i19 = 0; i19 <= this.numberOfBlocks; ++i19) {
double d20 = d7 + (d9 - d7) (double)i19 / (double)this.numberOfBlocks;
double d22 = d15 + (d17 - d15) (double)i19 / (double)this.numberOfBlocks;
double d24 = d11 + (d13 - d11) (double)i19 / (double)this.numberOfBlocks;
double d26 = random2.nextDouble() (double)this.numberOfBlocks / 16.0D;
double d28 = (double)(MathHelper.sin((float)i19 (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) d26 + 1.0D;
double d30 = (double)(MathHelper.sin((float)i19 (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) d26 + 1.0D;
int i32 = MathHelper.floor_double(d20 - d28 / 2.0D);
int i33 = MathHelper.floor_double(d22 - d30 / 2.0D);
int i34 = MathHelper.floor_double(d24 - d28 / 2.0D);
int i35 = MathHelper.floor_double(d20 + d28 / 2.0D);
int i36 = MathHelper.floor_double(d22 + d30 / 2.0D);
int i37 = MathHelper.floor_double(d24 + d28 / 2.0D);
for(int i38 = i32; i38 <= i35; ++i38) {
double d39 = ((double)i38 + 0.5D - d20) / (d28 / 2.0D);
if(d39 d39 < 1.0D) {
for(int i41 = i33; i41 <= i36; ++i41) {
double d42 = ((double)i41 + 0.5D - d22) / (d30 / 2.0D);
if(d39 d39 + d42 d42 < 1.0D) {
for(int i44 = i34; i44 <= i37; ++i44) {
double d45 = ((double)i44 + 0.5D - d24) / (d28 / 2.0D);
if(d39 d39 + d42 d42 + d45 d45 < 1.0D && world1.getBlockId(i38, i41, i44) == Block.stone.blockID) {
world1.setBlockAndMetadata(i38, i41, i44, this.minableBlockId, this.blockMetadata);
}
}
}
}
}
}
}
return true;
}
}
Пример использования: mod_WorldGenMetadataExample
package net.minecraft.src;
import java.util.Random;
public class mod_WorldGenMetadataExample extends BaseModMp {
public mod_WorldGenMetadataExample() {
}
public void GenerateSurface(World world, Random random, int chunkX, int chunkZ) {
int posX;
int posY;
int posZ;
int i;
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 9, 16)).generate(world, random, posX, posY, posZ);
/
new WorldGenMinableMetadata — это модифицированная версия WorldGenMinable, которая поддерживает метаданные.
В отличие от стандартного вызова (new WorldGenMinable(Block.cloth.blockID, 16)).generate(world, random, posX, posY, posZ), который создает только белую шерсть,
теперь можно указать метаданные, например: (new WorldGenMinableMetadata(Block.cloth.blockID, 9, 16)).generate(world, random, posX, posY, posZ);
Число 9 соответствует конкретному значению метаданных — в данном случае это бирюзовая шерсть вместо белой
*/
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 0, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 1, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 2, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 3, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 4, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 5, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 6, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 7, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 8, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 10, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 11, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 12, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 13, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 14, 16)).generate(world, random, posX, posY, posZ);
}
for(i = 0; i < 32; ++i) {
posX = chunkX + random.nextInt(16);
posY = random.nextInt(128);
posZ = chunkZ + random.nextInt(16);
(new WorldGenMinableMetadata(Block.cloth.blockID, 15, 16)).generate(world, random, posX, posY, posZ);
}
}
public String Version() {
return "v1.0";
}
public String Name() {
return "Это пример использования Metadata World Gen.";
}
}