Как делать еду как в Dayz. Еда и дроп после трапезы.

Версия Minecraft
1.7.10

jopi

Попрошайка
1,421
30
260
Как делать еду как в Dayz. Еда и дроп после трапезы.
Мне нужно что-бы после того как стив захавает консерву, банка выпала, я сделал примерный код но почему-то падает
2 банки пустые, 1 не подбирается вообще, 2 подбирается, а сама консерва не съедается и остаётся как была...
Класс предмета

Java:
public class CannedFood extends ItemFood {
    public String textureIN, unlocalizedName; public boolean type; public int typ;

    public CannedFood(int h, boolean Type, String name, String out, int ao) {
        super(h, Type);
        this.textureIN = out; this.unlocalizedName = name; this.type = Type; this.typ = ao;
        this.setCreativeTab(CreativeTabs.tabFood);
        this.setTextureName("militaryfood:" + this.textureIN);
        this.setUnlocalizedName(unlocalizedName);
    }
    public ItemStack onEaten(ItemStack i, World w, EntityPlayer p)
    {
        if (this.typ==1)
        {
            p.dropItem(MilitaryFood.Empty[2], 1);
            return i;
        }
        else if(this.typ==0)
        {
            p.dropItem(MilitaryFood.Empty[1], 1);
            p.inventory.changeCurrentItem((int)-1);
            return i;
        }
        else if (this.typ==2)
        {
            p.dropItem(MilitaryFood.Empty[3], 1);
            return i;
        }
        else{}
        return i;
    }
}
 

timaxa007

Модератор
5,831
409
672
2 банки пустые, 1 не подбирается вообще,
Признак того, что нужно спавнить только на серверной части кода. Так как спавниться на обеих сторонах, на клиенте - которую нельзя подобрать и серверная - которую можно подобрать. Т.е. нужно сделать проверку на дроп:
if (!w.isRemote) p.dropItem(...);
---
Желательно любых: мобов, предметов - все кто связан с наследством от Entity спавнить, только на серверной стороне.
 
Последнее редактирование:

timaxa007

Модератор
5,831
409
672
@jopi, для уточнения у тебя банки сами выпадают (учитывая первый пост, то вроде как да)? Если да, то типа в начале тела метода onEaten, поставить "super.onEaten(i, w, p)".
 

timaxa007

Модератор
5,831
409
672
@jopi, не очень понял. А то что я понял, то тебе просто нужно воспроизвести другой звук (а тут уже придётся заместо super.onEaten(i, w, p) использовать его содержимое ради одной строчки, хотя это как ты сам решишь) и использовать по условию в getItemUseAction EnumAction.drink.
 
Сверху