Давно наблюдаю в сети однообразные статьи, которые просто копируют все кому не лень. Решил поделится с вами своими открытиями в коде minecraft'а, определенно новыми и полезными.
Для моддинга нам понадобиться MCP, JDK, Notepad++, подробнее здесь. Так же необходимо знать программирование на минимальном уровне.
Урок 1. Изменение генерации мира на сервере.
После того как вы настроили все инструменты, проверили наличие исходников в папке src можно приступить к первому уроку.
За генерацию чанков плоского мира отвечает файл ChunkProviderFlat.java . Открыв его, можно найти там следующие строки:
За генерацию чанков плоского мира отвечает файл ChunkProviderFlat.java . Открыв его, можно найти там следующие строки:
Код
private void generate(byte[] par1ArrayOfByte)
{
int var2 = par1ArrayOfByte.length / 256;
for (int var3 = 0; var3 ‹ 16; ++var3)
{
for (int var4 = 0; var4 ‹ 16; ++var4)
{
for (int var5 = 0; var5 ‹ var2; ++var5)
{
int var6 = 0;
if (var5 == 0)
{
var6 = Block.bedrock.blockID;
}
else if (var5 ‹= 2)
{
var6 = Block.dirt.blockID;
}
else if (var5 == 3)
{
var6 = Block.grass.blockID;
}
par1ArrayOfByte[var3 ‹‹ 11 | var4 ‹‹ 7 | var5] = (byte)var6;
}
}
}
}
{
int var2 = par1ArrayOfByte.length / 256;
for (int var3 = 0; var3 ‹ 16; ++var3)
{
for (int var4 = 0; var4 ‹ 16; ++var4)
{
for (int var5 = 0; var5 ‹ var2; ++var5)
{
int var6 = 0;
if (var5 == 0)
{
var6 = Block.bedrock.blockID;
}
else if (var5 ‹= 2)
{
var6 = Block.dirt.blockID;
}
else if (var5 == 3)
{
var6 = Block.grass.blockID;
}
par1ArrayOfByte[var3 ‹‹ 11 | var4 ‹‹ 7 | var5] = (byte)var6;
}
}
}
}
var3,var4,var5 это координаты xzy, var6 указывает на id блока, который должен быть добавлен по координатам.
Давайте добавим в мир дорожки по краям чанков, для этого нам необходимо будет добавить следующие строки:
Давайте добавим в мир дорожки по краям чанков, для этого нам необходимо будет добавить следующие строки:
Код
private void generate(byte[] par1ArrayOfByte)
{
int var2 = par1ArrayOfByte.length / 256;
for (int var3 = 0; var3 ‹ 16; ++var3)
{
for (int var4 = 0; var4 ‹ 16; ++var4)
{
for (int var5 = 0; var5 ‹ var2; ++var5)
{
int var6 = 0;
if (var5 == 0)
{
var6 = Block.bedrock.blockID;
}
else if (var5 ‹= 2)
{
var6 = Block.dirt.blockID;
}
else if (var5 == 3)
{
if (var3 == 15 || var3 == 0 || var4 == 0 || var4 == 15)
{
var6 = Block.whiteStone.blockID;
}
else {
var6 = Block.grass.blockID; }
}
par1ArrayOfByte[var3 ‹‹ 11 | var4 ‹‹ 7 | var5] = (byte)var6;
}
}
}
}
{
int var2 = par1ArrayOfByte.length / 256;
for (int var3 = 0; var3 ‹ 16; ++var3)
{
for (int var4 = 0; var4 ‹ 16; ++var4)
{
for (int var5 = 0; var5 ‹ var2; ++var5)
{
int var6 = 0;
if (var5 == 0)
{
var6 = Block.bedrock.blockID;
}
else if (var5 ‹= 2)
{
var6 = Block.dirt.blockID;
}
else if (var5 == 3)
{
if (var3 == 15 || var3 == 0 || var4 == 0 || var4 == 15)
{
var6 = Block.whiteStone.blockID;
}
else {
var6 = Block.grass.blockID; }
}
par1ArrayOfByte[var3 ‹‹ 11 | var4 ‹‹ 7 | var5] = (byte)var6;
}
}
}
}
эти строки добавляют проверку, и если координаты x,z будут крайними(т.е. 0 и 15), то вместо травы будет генерироваться камень края.
Компилируем, устанавливаем в параметрах сервера level-type=FLAT и запускаем. Подключаемся. Результат должен быть примерно таким:
Компилируем, устанавливаем в параметрах сервера level-type=FLAT и запускаем. Подключаемся. Результат должен быть примерно таким:
Результат
В следующем уроке расскажу о том, как запретить игрокам ломать эти дорожки.