Вверх ↑
Этот топик читают: Гость
Ответов: 4557
#1: 2015-03-28 15:23:15 ЛС | профиль | цитата
Создание пилы



Item.java
  Для начала создадим в Item.java строчку:
public static Item hacksaw = (new ItemHacksaw(2012, EnumToolMaterial.EMERALD)).setUnlocalizedName("hacksaw");
Эта строчка прописывает наш Item в игре.
EnumToolMaterial.EMERALD - Материал - Алмаз (Не знаю, почему так записано в клиенте)

ItemHacksaw.java
  Переходим непосредственно к файлу нашего итема.
package net.minecraft.src;

public class ItemHacksaw extends ItemTool
{
private static Block[] blocksEffectiveAgainst = new Block[] {Block.wood};

protected ItemHacksaw(int par1, EnumToolMaterial par2EnumToolMaterial)
{
super(par1, 3, par2EnumToolMaterial, blocksEffectiveAgainst);
}

public boolean onBlockDestroyed(ItemStack iStack, World world, int blockID, int x, int y, int z, EntityLiving entity) {

if(!world.isRemote){
for(int j = y - 1; j ‹ y + 70; j++){
if(!(world.getBlockId(x, j, z) == Block.leaves.blockID)){
world.destroyBlock(x, j, z, true);
}

}
}

iStack.damageItem(1, entity);
return true;
}
public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
{
return par2Block != null && (par2Block.blockMaterial == Material.wood) ? this.efficiencyOnProperMaterial : super.getStrVsBlock(par1ItemStack, par2Block);
}
}



private static Block[] blocksEffectiveAgainst = new Block[] {Block.wood}; - список блоки, с которыми будет работать инструмент. Если ломать блоки не из списка, то эффективность разрушения ухудшается.

    public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
{
return par2Block != null && (par2Block.blockMaterial == Material.wood) ? this.efficiencyOnProperMaterial : super.getStrVsBlock(par1ItemStack, par2Block);
}

Задаем материалы, с которыми будет работать инструмент. В данном случае - дерево (не Log!)

А вот теперь начинается самое вкусное. Пила разрубает вверх определенное количество блоков.
В этом примере я ограничусь 70-ю блоками по Y.

    public boolean onBlockDestroyed(ItemStack iStack, World world, int blockID, int x, int y, int z, EntityLiving entity) {

if(!world.isRemote){
for(int j = y - 1; j ‹ y + 70; j++){
if(!(world.getBlockId(x, j, z) == Block.leaves.blockID)){
world.destroyBlock(x, j, z, true);
}

}
}

iStack.damageItem(1, entity);
return true;
}
Из названия понятно, что этот метод отвечает за ломание блоков.

        if(!world.isRemote){
for(int j = y - 1; j ‹ y + 70; j++){
if(!(world.getBlockId(x, j, z) == Block.leaves.blockID)){
world.destroyBlock(x, j, z, true);
}

}
}

Координаты.
На 70 Y вверх от места удара.

Также здесь идет небольшое правило:
     if(!(world.getBlockId(i, j, k) == Block.leaves.blockID)){
world.destroyBlock(i, j, k, true);
Листва не будет ломаться, если встретится по пути.


Таким образом мы получили свою собственную пилу, разрушающую
вверх на 70 блоков.
карма: 6
3
Голосовали:Nyan.Cat, ManaBreak, Astronaut, OTBETCTBEHHblN, MonkeyMini
Ответов: 318
ImmortaL
Кома
#2: 2015-03-28 15:32:59 ЛС | профиль | цитата
О Боже мой!
Ты гений
За основу взял мотыгу,верно? У нее похожий код...
карма: -5
Больше не играю.Играет на моем аккаунте он
0
Ответов: 4557
#3: 2015-03-28 15:46:12 ЛС | профиль | цитата
Dante_Demon писал(а):
За основу взял мотыгу,верно? У нее похожий код...

Нет.
Да и код совершенно другой.
Мотыга заменяет блок, а это ломает блоки.
карма: 6
0
Разработчик
Ответов: 3015
NeverClan
[W] Inactive
#4: 2015-03-28 15:46:30 ЛС | профиль | цитата
А теперь задачки посложнее:
1. Удалить быдлокод;
2. Срубка целиком дерева, а не только ствола;
2.1 Срубка ветвей (как у больших деревьев);
2.2 Срубка листьев без дропа;
3. Добавить проверки выхода за границы мира.
карма: 125
0
Ответов: 4557
#5: 2015-03-28 15:47:30 ЛС | профиль | цитата
Assasin писал(а):
1. Удалить быдлокод

Другого нет.
1.5.2 - чистый

Assasin писал(а):
2.2 Срубка листьев без дропа;

листва и так без дропа
карма: 6
0
Разработчик
Ответов: 3015
NeverClan
[W] Inactive
#6: 2015-03-28 15:56:29 ЛС | профиль | цитата
Flanagun писал(а):
Другого нет.
1.5.2 - чистый

Версия и наборы модов тут не при чем
карма: 125
0
Ответов: 4557
#7: 2015-03-28 15:57:45 ЛС | профиль | цитата
Assasin, я тут понял - пила ломает абсолютно все блоки, кроме листвы
карма: 6
0
Ведущий разработчик
Ответов: 445
#8: 2015-03-29 06:15:59 ЛС | профиль | цитата
Пила не так работает.
В коде описан старый вариант пилы.
карма: 66
Спокойно, парни, всё будет.
0
Ответов: 178
#9: 2015-03-31 17:44:58 ЛС | профиль | цитата
Нормально так-то)
карма: -8
:(
0
Ответов: 9308
Monte Carlo
Неактивен
#10: 2015-03-31 17:54:05 ЛС | профиль | цитата
я буду обновлять комментарии до написания
почему у меня уверенность, что если я поставлю среди дерева обсидиан или бедрок, то выпадет и он?
карма: 3
Правила, bbCode, Антигробы | Сломай бедрок и выпадет яйцо админа (с) FoxyStar
0
Ответов: 51
#11: 2015-04-02 10:09:42 ЛС | профиль | цитата
апну
карма: -15
-1
Голосовали:OTBETCTBEHHblN
11
Сообщение
...