Eye | Дата: Среда, 24 Августа 2011, 06:51 | Сообщение # 1 |
заслуженный участник
Сейчас нет на сайте
| Глава 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(2001, 10, false).setItemName("pighead");
Разберем.
Первое число - ID, второе - количество половинок сердца для восстановления (всего 20 половинок), а false можно ли использовать на волке для привлечения. Далее все по прежнему. Code new Head(2001, 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(2001, 20, false, 16).setItemName("pighead");
Переименуйте pigHead.java в Head.java и весь код замените на: Code package net.minecraft.src;
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. Можете экспериментировать. Для дропа других итемов, пишите Item.название.shiftedIndex. Code 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);
Проверяем.
Вот и все. Пробуйте!
Глава 7. Создание нового инструмента (на основе стандартных материалов).
Сейчас мы сделаем веник. Он будет у нас аналогом алмазного меча.
Добавим к пабликам строку: Code public static final Item venik = new ItemSword(2002, EnumToolMaterial.EMERALD).setItemName("venik");
Разберем.
Обозначаем что это за предмет. Есть sword, axe, pickaxe и shovel. В нашем случае - меч.
ID.
Материал инструмента. WOOD - Дерево STONE - Камень IRON - Железо EMERALD - Алмаз GOLD - Золото Code EnumToolMaterial.EMERALD
Добавим все как обычно.
Code venik.iconIndex = ModLoader.addOverride("/gui/items.png", "/textures/venik.png"); ModLoader.AddName(venik, "Venik"); ModLoader.AddRecipe(new ItemStack(venik, 1), new Object[]{ "XXX", "#X#", "#X#", Character.valueOf('X'), Block.dirt});
Кидаем текстуру в minecraft.jar/textures. (размеры не изменять!)
Тестируем!
Глава 8. Создание нового инструмента и его свойств - Работает!
Открываем EnumToolMaterial.java.
Ищем строку: Code GOLD("GOLD", 4, 0, 32, 12F, 0),
И добавляем ниже новые характеристики: Code TITAN("TITAN", 5, 5, 100, 25F, 5);
Название.
Первая пятерка - порядковый номер свойства. Вторая - уровень разрушения. Сотня - количество разрушаемых блоков в общем (состояние инструмента). 25F - сила разрушения, скорость. 5 - сила удара для мобов.
Сравнивайте со стандартными свойствами и делайте новые. Теперь просто в mod_gcc, в строке инструмента: Code EnumToolMaterial.EMERALD Пишите ваше свойство. Например: Code EnumToolMaterial.TITAN
Так же хочу рассказать про уровень разрушения. На данный момент в игре используется только 4 уровня.
0 - дерево, камень. 1 - железо. 2 - золото. 3 - алмаз.
Открываем ItemPickaxe.java и смотрим код. Можно заметить что обсидиан разрушается только алмазной киркой - уровнем 3.
Когда стоит строка: Code getHarvestLevel() == 3
Значит разрушение происходит ТОЛЬКО 3 уровнем.
А когда стоит: Code getHarvestLevel() >= 1
То значит, разрушение происходит от 1 уровня до максимального.
Если хотите чтобы ваш блок разрушался только вашей киркой - ставите уровень 4 в свойстве. Затем дописываем в ItemPickaxe (или что у вас там) новую строку по типу: Code if(block == mod_gcc.newblock) { return toolMaterial.getHarvestLevel() == 4; }
Таким образом только одна кирка сможет разрушить данный блок, а точнее с вашей киркой разрушение пройдет быстрее и из блока может что-то выпасть.
ICQ: 422190728, E-Mail: funnyalien@yandex.ru, Jabber: funnyalien@jabber.ru, Steam: funnyalienvalentine, Twitter: MrFunnyAlien, Skype: happyconsole, ВКонтакте: vk.com/twinemen, Мобильный: +79199212414.
Сообщение отредактировал Eye - Среда, 24 Августа 2011, 06:57 |
|
| |
zahar998899 | Дата: Суббота, 12 Ноября 2011, 06:52 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| а как возможно убрать инструмент?
Minecraft Realistiks
|
|
| |