• Страница 1 из 1
  • 1
Модератор форума: KHz, mef_prog, Mo3RiN  
[Modloader]Основы Программирования Для Minecraft Часть 2
KHzДата: Пятница, 28.10.2011, 22:11 | Сообщение # 1
Группа: Администраторы
Сообщений: 29
Награды: 0
Репутация: 5
Статус: Offline
Глава 3. Создание предмета.

Для начала добавим одну строчку:

Code
public static final Item smileItem = new Smile(3000).setItemName("smileItem");


Непосредственно после строки нашего блока:

Code
public static Block newblock = new BlockNew(110, 0).setHardness(0.5F).setResistance(1.0F).setBlockName("newblock");


Разберем код предмета.

Code
Item smileItem


Вызываем предмет по тех. названию.

new Smile

Название для будущего Smile.java.

(3000)

ID предмета.

setItemName("smileItem")

Объявляем предмет, даем ему тех. название для идентификации.

Делаем отступ на одну строку от строки:

Code
newblock.blockIndexInTexture = ModLoader.addOverride("/terrain.png", "/textures/java.png");

И записываем следующее.

Code
ModLoader.AddName(smileItem, "Smile");


Code
(smileItem, "Smile")


Даем название в самой игре.

И последняя строка рецепта.

Code
ModLoader.AddRecipe(new ItemStack(smileItem, 5), new Object[]{ "X#", "#X", Character.valueOf('X'), Block.dirt});


Code
(smileItem, 5)


Число получаемых "смайлов" после крафтинга.

Code
"X#", "#X" Character.valueOf('X'), Block.dirt


Сам рецепт. По диагонали ставим грязь - получаем смайл.

Теперь нам нужно создать файлик Smile.java.

В первой строке как обычно:

Code
package net.minecraft.src;


В третьей и четвертой:

Code
public class Smile extends Item
{


А далее:

Code
   public Smile(int i) {
        super(i);
        maxStackSize = 64;
      }
}


Code
maxStackSize = 64;


Максимальное количество предмета в одном стаке (нап. 64).

Глава 3.1. Присвоение текстуры.

Возьмем текстуру смайлика


(размеры не изменять!)

И поместим ее в minecraft.jar/textures как обычно.

Пишем после рецепта:

smileItem.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/smile.png");

Разбираем.

smileItem.iconIndex

Определяет, чья иконка (текстура).

ModLoader.addOverride("/gui/items.png", "/textures/smile.png")

Это вам уже знакомо. Тут промолчу.

Проверяем.



Теперь вам осталось просто запустить recompile.bat и опробовать смайлы

Скриншоты из игры:



Глава 4. Генерация блока в мире.

Сейчас я попробую рассказать, как заставить наш блок генерироваться в игровом мире.
Для примера он будет появляться у камня (2-3 блока вниз).

Откроем mod_gcc.java.

После первой строки добавьте строку:

Code
import java.util.Random;


А после 13 строки сделаем отступ и запишем вот это.

Code
public void GenerateSurface(World world, Random rand, int chunkX, int chunkZ)
     {
          for(int i = 0; i < 150; i++)
          {
              int randPosX = chunkX + rand.nextInt(16);
              int randPosY = rand.nextInt(150);
              int randPosZ = chunkZ + rand.nextInt(16);
              (new WorldGenMinable(mod_gcc.newblock.blockID, 32)).generate(world, rand, randPosX, randPosY, randPosZ);
          }
      }


Разбираем.

Число 150 отвечает за редкость блока в игровом мире. 150 - это почти вездесущий, и его будет дохрена.
Для теста 150 подойдет отлично. Далее просто экспериментируйте.

Code
for(int i = 0; i < 150; i++)


150 - высота блока от админиума (бедрока). В нашем случае получается он выше камня на один блок в генерации. Тоже можно экспериментировать.

Code
int randPosY = rand.nextInt(150);


mod_gcc - наш мод. newblock - регистр блока. Число 32 - количество блоков на одном месторождении. Для теста я использовал 32 блока.

Code
(new WorldGenMinable(mod_gcc.newblock.blockID, 32))


Проверяем.



Вот и все. Запускайте и пробуйте!

Скриншоты из игры:



Глава 5.
Создание еды или как слепить хавку.

Добавляем к пабликам строку:

Code
public static final Item pighead = new ItemFood(3001, 10, false).setItemName("pighead");


Разберем.

Первое число - ID, второе - количество половинок сердца для восстановления (всего 20 половинок), а false можно ли использовать на волке для привлечения. Далее все по прежнему.

Code
new pigHead(3001, 20, false)


Запишем привычные строки.

Code
pighead.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/pighead.png");
ModLoader.AddName(pighead, "Pig Head");
ModLoader.AddRecipe(new ItemStack(pighead, 1), new Object[]{ "XX", "X#", Character.valueOf('X'), Block.dirt});


Закинем текстуру в minecraft.jar/textures.


(размеры не изменять!)

Создаем файлик pigHead.java.

Туда кидаем:

Code
package net.minecraft.src;

public class pigHead extends ItemFood {
       
     public pigHead(int i, int j) {
        super(i, j, true);
     }
}


Запускаем и пробуем!

Для развития:

Если хотите чтобы после поедания вашей еды выпадал предмет (например, если это суп), вместо старого паблика впишите новый:

Code
public static final Item pighead = new Head(3001, 20, false, 16).setItemName("pighead");


Переименуйте pigHead.java в Head.java и весь код замените на:

package net.minecraft.src;

Code
public class Head extends ItemFood   
{
       
     public Head(int i, int j, boolean flag, int k)
     {
        super(i, j, flag);
        healAmount = j;
        maxStackSize = k;
     }
       
      public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
      {
          itemstack.stackSize--;
          entityplayer.heal(healAmount);
          entityplayer.dropPlayerItem(new ItemStack(mod_gcc.pighead.shiftedIndex, 1, 0));
          return itemstack;
      }
            
          public int getHealAmount()
      {
          return healAmount;
      }

      protected int healAmount;
}


Единственное что вам тут понадобится - эта строка. После поедания еды выпадает она же в количестве 1. Можете экспериментировать. Для дропа других итемов,пишите

Code
Item.название.shiftedIndex.
entityplayer.dropPlayerItem(new ItemStack(mod_gcc.pighead.shiftedIndex, 1, 0))


Глава 6. Создание руды или как сделать чтобы из блока выпадали предметы.

Тут все очень просто.
Открываем BlockNew.java.

Ищем:

Code
public int idDropped(int i, int j)
          {
                          return mod_gcc.newblock.blockID;
        }
        public int quantityDropped(Random random)
        {
                          return 1;
        }
}


Меняем на:

Code
public int idDropped(int i, Random random)
      {
                  return Item.stick.shiftedIndex;
      }
            
      public int quantityDropped(Random random)
      {
          return 2 + random.nextInt(5);
      }
}


Разберем код выше.

Выкидываем палочки. Для дропа своих итемсов - пишите mod_gcc.nameItem.shiftedIndex - nameItem - название предмета.
Для дропа блоков - названиеблока.blockID.
Для дропа СВОИХ блоков или того же блока (по типу руды) - mod_gcc.названиеблока.blockID.

Code
return Item.stick.shiftedIndex;


Число 2 - минимальное значение дропа. Число 5 - максимальное значение. Значит игра будет рандомно давать вам от 2 до 5 палок с блока.

Code
return 2 + random.nextInt(5);


Проверяем.



© FunnyAlien


[Skype][Steam][Portfolio][CodHacks.ru]
 
  • Страница 1 из 1
  • 1
Поиск:

 

Полная статистика форума

Ваш текст ну или чего хотите