Вверх ↑
Этот топик читают: Гость
Продолжать?
1)
(13/17)
2)
(4/17)

Ответов: 247
Beta
лидер
#1: 2013-01-06 16:28:03 ЛС | профиль | цитата

Minecraft изнутри - статья 1, вступительная



Ну что же, привет всем. Я уже довольно долго думал, и все же решил начать цикл статей по внутреннему устройству майнкрафта.

Несмотря на внешнюю сложность и запутанность, на самом деле игра не так уж и нелепо устроена. Довольно много времени потребовалось чтоб разобраться и понять основные аспекты. Теперь же будем разбираться вместе


И так, в этой теме мы повторим основы - создадим блок.
Говорю сразу, мы исследуем и работаем с ваниллой - "чистым" MC, без модов типа ModLoader.

Приступим.


Создание блока

Так как с снапшота 12w18a клиент слился с сервером, моддить стало слегка легче - сразу же и MP тебе, и прочие прелести. Мы будем использовать версию 1.4.6.

Процесс настройки окружения описывался уже не раз и разжеван до мелочей. Я думаю, что вы знаете основы Java, скачали MCP, JDK, и выбрали среду разработки - Eclipse/NetBeans/просто блокнот. Для модификации я буду использовать Eclipse без MCP. Как такое реализовать, я расскажу позже (на примере эклипса). Декомпилируем код, и получаем набор исходников. Приступим.

Список блоков у нас хранится в классе Block. Наши действия:

  1. Отнаследоваться от класса Block, создав класс Block***
  2. Создать в классе Block public static final Block - переменную с именем блока и назначить ей значение в виде нового экземпляра нашего Block***
  3. Добавить наш блок в генераторы, создать крафт, etc по вкусу.


Для начала создадим сам наш блок. Рассмотрим, как устроена земля (BlockDirt)

package net.minecraft.src;

public class BlockDirt extends Block
{
protected BlockDirt(int par1, int par2)
{
super(par1, par2, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
}
}


Что делает данный код? Он декларирует класс BlockDirt, в своем конструкторе (public BlockDirt) вызывает конструктор родительского класса (Block) и добавляет наш блок на вкладку в режиме креатива.

Создадим наш блок под названием Test.
Для этого создадим по такому же образу и подобию одноименный класс:

package net.minecraft.src;

public class BlockTest extends Block
{
protected BlockTest(int par1, int par2)
{
super(par1, par2, Material.ground);
this.setCreativeTab(CreativeTabs.tabBlock);
}
}

Теперь добавим переменную в класс Block.

public static final Block test = (new BlockTest(146, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep).setBlockName("test");

А вот здесь остановимся и разберем код поподробнее.
new BlockTest(146, 2)
Создаем новый экземпляр класса BlockTest. Конструктор принимает ID блока и ID текстуры из terrain.png. Я оставил ее как у земли - третью по слету (нумерация идет с нуля).
.setHardness(0.5F)
Только что созданному блоку зададим прочность в 0.5F (*.*F - тип float, число с плавающей запятой.)
.setStepSound(soundGravelFootstep)
Зададим звук шагов по блоку как у гравия. Список всех звуков, доступных для нас, находится "вверху" класса Block:
    public static final StepSound soundPowderFootstep = new StepSound("stone", 1.0F, 1.0F);
public static final StepSound soundWoodFootstep = new StepSound("wood", 1.0F, 1.0F);
public static final StepSound soundGravelFootstep = new StepSound("gravel", 1.0F, 1.0F);
public static final StepSound soundGrassFootstep = new StepSound("grass", 1.0F, 1.0F);
public static final StepSound soundStoneFootstep = new StepSound("stone", 1.0F, 1.0F);
public static final StepSound soundMetalFootstep = new StepSound("stone", 1.0F, 1.5F);
public static final StepSound soundGlassFootstep = new StepSoundStone("stone", 1.0F, 1.0F);
public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F);
public static final StepSound soundSandFootstep = new StepSound("sand", 1.0F, 1.0F);
public static final StepSound soundSnowFootstep = new StepSound("snow", 1.0F, 1.0F);
public static final StepSound soundLadderFootstep = new StepSoundSand("ladder", 1.0F, 1.0F);
public static final StepSound soundAnvilFootstep = new StepSoundAnvil("anvil", 0.3F, 1.0F);
Потом, не сегодня, мы разберемся, как создавать свои звуки.

.setBlockName("test")
А это - имя блока. Что оно означает - мы увидим чуть позже.

Что ж, давайте скомпилируем и посмотрим на наш новоиспеченный тестовый блок.
Пикчи





Тадам! Мы создали свой блок и назначили ему текстуру, и он не стыкуется с настоящей землей. А теперь настала пора поговорить об имени. У нашего блока его нет. Чтоб его назначить, идем в /lang/**_**.lang. Я добавлю название для английского, для русского добавлять точно так же, только другое имя файла.
Открываю этот файл и вставляю строчку вида
группа.объект.параметр=значение
Я вставлю
tile.test.name=Test
И сохраню. Запустим еще раз:
Результат


Вот и все, мы создали и назвали блок.

На этом я завершу эту статью, а завтра мы поговорим о реализации сетевой подсистемы Minecraft. Скажу вам, что там есть довольно много интересного и ничего сложного.


С вами был 901.

901 специально для MCGL. При копировании указание копирайта обязательно.

карма: 0
0
Ответов: 2606
#2: 2013-01-06 16:30:21 ЛС | профиль | цитата
зачем нам это? у нас игровой сервер
карма: 12
0
Ответов: 882
#3: 2013-01-06 16:31:38 ЛС | профиль | цитата
Mr_Sumato, для этого существует раздел "разработка", но мне нравится, вроде все описано (надеюсь не скопипастено)
карма: 46
Тут нет подписи. Можешь не искать.
0
Ответов: 13949
#4: 2013-01-06 16:35:17 ЛС | профиль | цитата
Почему если переименовать BlockDirt на BlockNew - получается статья, ОЧЕНЬ сильно похожую на эту, но хуже?
карма: 54
Noir Villar!
0
Ответов: 247
Beta
лидер
#5: 2013-01-06 16:39:13 ЛС | профиль | цитата
Dtho_47, может быть потому, что это вступление и потом пойдут действительно серьезные вещи?
карма: 0
0
Ответов: 4072
St. Xenogen
I hate globes
#6: 2013-01-06 16:46:03 ЛС | профиль | цитата
Crip, тебе это может быть и не нужно, а мне пригодиться
Rammstein Няша ^_^. X

карма: -71
Связаться со мной можно через ВК (См. профиль)
0
Ответов: 3212
Eternity
Inactive
#7: 2013-01-06 17:19:59 ЛС | профиль | цитата
Все здорово, но неясно для кого написана статья. Люди уже разобравшиеся в чем-то не зачерпнут из нее ничего нового, а новички не в чем не разбирающиеся не смогут в ней понять ровным счетом ничего. Как не понял я.
карма: -5
0
Ответов: 1834
#8: 2013-01-06 17:23:18 ЛС | профиль | цитата
Каждый месяц создают тему про то как делать блоки вам не надоело?
карма: -25
0
Ответов: 247
Beta
лидер
#9: 2013-01-06 17:26:02 ЛС | профиль | цитата
antibagr, статья написана для тех, кто уже начал что-либо понимать, но не до конца. Тоесть основы уже знает.
карма: 0
0
Ответов: 3595
Eternity
Observers
#10: 2013-01-06 17:26:10 ЛС | профиль | цитата
Mr_Sumato писал(а):
С вами был 901.
Да ладно? Что-то даже не верится) Толко не пиши статьи про обычное создание блока/итема/текстур и прочей ерунды. Я же знаю, ты можешь большее
Выравнивание по центру как-то не тру, на мой взгляд. Точнее, не везде оно нужно.
Dtho_47, статьи-примеры о первых шагах все будут одинаковы. Можно брать только разные примеры. 901 должен написать интересные статьи, хвастался ведь своими разработками.
карма: 74
0
Ответов: 13949
#11: 2013-01-06 17:28:22 ЛС | профиль | цитата
уже пять статей про блоки сделали. Три без мод лоадера и две с мод лоадером (одну из них удалили)
карма: 54
Noir Villar!
0
Разработчик
Ответов: 3015
NeverClan
[W] Inactive
#12: 2013-01-06 17:34:12 ЛС | профиль | цитата
sabotajnik7 писал(а):
Да ладно? Что-то даже не верится)

Он, он. Он еще как способен, даже на более изощренный быдлокод, чем в Нотчевом майне
карма: 125
0
Ответов: 247
Beta
лидер
#13: 2013-01-06 17:35:26 ЛС | профиль | цитата
Assasin, ромном не в счет, движок переписан, быдлокод устранен
карма: 0
0
Ответов: 21
#14: 2013-01-06 18:29:36 ЛС | профиль | цитата
Это, по моему уже *** было.

--- Добавлено в 2013-01-06 18:30:58

Народ я хоч бан за мат можно мне такой на месяц?
карма: 7
0
Ответов: 540
Midnighters
житель
#15: 2013-01-06 18:37:17 ЛС | профиль | цитата
Dj_Xt, напишите на него заявку,а то не могу с айпада,давайте кому очко голосования?
карма: -11
0
Ответов: 21
#16: 2013-01-06 18:47:20 ЛС | профиль | цитата
Могу проматерится, но бан на месяц или на 2 нужен
карма: 7
0
Ответов: 247
Beta
лидер
#17: 2013-01-06 18:47:54 ЛС | профиль | цитата
Dj_Xt, заморозка не катит?
карма: 0
0
17
Сообщение
...