-
Notifications
You must be signed in to change notification settings - Fork 24
/
ItemNonStandardFood.java
102 lines (88 loc) · 2.87 KB
/
ItemNonStandardFood.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package squeek.applecore.example;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.world.World;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Optional;
import squeek.applecore.api.food.FoodValues;
import squeek.applecore.api.food.IEdible;
import squeek.applecore.api.food.ItemFoodProxy;
import javax.annotation.Nonnull;
@Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = "applecore")
public class ItemNonStandardFood extends Item implements IEdible
{
public ItemNonStandardFood()
{
this.setCreativeTab(CreativeTabs.FOOD);
}
@Optional.Method(modid = "applecore")
@Override
public FoodValues getFoodValues(@Nonnull ItemStack itemStack)
{
return new FoodValues(1, 1f);
}
// This needs to be abstracted into an Optional method,
// otherwise the ItemFoodProxy reference will cause problems
@Optional.Method(modid = "applecore")
public void onEatenCompatibility(@Nonnull ItemStack itemStack, EntityPlayer player)
{
// one possible compatible method
player.getFoodStats().addStats(new ItemFoodProxy(this), itemStack);
// another possible compatible method:
// new ItemFoodProxy(this).onEaten(itemStack, player);
}
@Override
@Nonnull
public ItemStack onItemUseFinish(@Nonnull ItemStack stack, World world, EntityLivingBase entityLiving) {
stack.shrink(1);
if (entityLiving instanceof EntityPlayer)
{
EntityPlayer player = (EntityPlayer)entityLiving;
if (Loader.isModLoaded("applecore"))
{
onEatenCompatibility(stack, player);
}
else
{
// this method is not compatible with AppleCore
player.getFoodStats().addStats(1, 1F);
}
player.addStat(StatList.getObjectUseStats(this));
world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_PLAYER_BURP, SoundCategory.PLAYERS, 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
}
return stack;
}
@Override
@Nonnull
public EnumAction getItemUseAction(@Nonnull ItemStack itemStack)
{
return EnumAction.EAT;
}
@Override
public int getMaxItemUseDuration(@Nonnull ItemStack itemStack)
{
return 32;
}
@Override
@Nonnull
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, @Nonnull EnumHand hand)
{
ItemStack stack = player.getHeldItem(hand);
if (player.canEat(true))
{
player.setActiveHand(hand);
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
}
return new ActionResult<>(EnumActionResult.FAIL, stack);
}
}