- 10
- 1
- 0
Всем здравия и доброго времени суток.
Делаю свой первый мод. Тема - пивоварение. Решил добавить ему возможность добавлять в кружку не только пиво, но и молоко. В общем, скопировал код из класса коровы, на заполнение предмета, получилось вот так:
В итоге всё работает, но когда использую последнюю кружку, то она просто исчезает. Залез в ItemUtils, посмотрел createFilledResult и вроде всё должно работать как надо, даже если предмет последний, но почему-то оно не работает :/
Вот код самого createFilledResult:
Если что, то вот так выглядит код в классе коровы:
Заранее благодарю за помощь
Делаю свой первый мод. Тема - пивоварение. Решил добавить ему возможность добавлять в кружку не только пиво, но и молоко. В общем, скопировал код из класса коровы, на заполнение предмета, получилось вот так:
Java:
@Override
public InteractionResult interactLivingEntity(ItemStack itemStack, Player player, LivingEntity entity, InteractionHand hand) {
Level level = player.getLevel();
if (entity instanceof Cow && !entity.isBaby()) {
player.playSound(SoundEvents.COW_MILK, 1.0f, 1.0f);
ItemStack item = ItemUtils.createFilledResult(itemStack, player, ModItems.MILK_MUG.get().getDefaultInstance());
player.setItemInHand(hand, item);
return InteractionResult.sidedSuccess(level.isClientSide);
} else {
return super.interactLivingEntity(itemStack, player, entity, hand);
}
}
Вот код самого createFilledResult:
Java:
public static ItemStack createFilledResult(ItemStack itemStack1, Player player, ItemStack itemStack2, boolean p_41821_) {
boolean $$4 = player.getAbilities().instabuild;
if (p_41821_ && $$4) {
if (!player.getInventory().contains(itemStack2)) {
player.getInventory().add(itemStack2);
}
return itemStack1;
} else {
if (!$$4) {
itemStack1.shrink(1);
}
if (itemStack1.isEmpty()) {
return itemStack2;
} else {
if (!player.getInventory().add(itemStack2)) {
player.drop(itemStack2, false);
}
return itemStack1;
}
}
}
//То что я вызываю
public static ItemStack createFilledResult(ItemStack itemStack1, Player player, ItemStack itemStack2) {
return createFilledResult(itemStack1, player, itemStack2, true);
}
Если что, то вот так выглядит код в классе коровы:
Java:
public InteractionResult mobInteract(Player player, InteractionHand hand) {
ItemStack $$2 = player.getItemInHand(hand);
if ($$2.is(Items.BUCKET) && !this.isBaby()) {
player.playSound(SoundEvents.COW_MILK, 1.0F, 1.0F);
ItemStack $$3 = ItemUtils.createFilledResult($$2, player, Items.MILK_BUCKET.getDefaultInstance());
player.setItemInHand(hand, $$3);
return InteractionResult.sidedSuccess(this.level.isClientSide);
} else {
return super.mobInteract(player, hand);
}
}
Заранее благодарю за помощь