mirror of
https://github.com/Ellpeck/NaturesAura.git
synced 2024-06-28 13:19:09 +02:00
93 lines
3.3 KiB
Java
93 lines
3.3 KiB
Java
|
package de.ellpeck.naturesaura.items;
|
||
|
|
||
|
import de.ellpeck.naturesaura.aura.Capabilities;
|
||
|
import de.ellpeck.naturesaura.aura.IAuraContainer;
|
||
|
import de.ellpeck.naturesaura.aura.ItemAuraContainer;
|
||
|
import net.minecraft.creativetab.CreativeTabs;
|
||
|
import net.minecraft.entity.Entity;
|
||
|
import net.minecraft.entity.player.EntityPlayer;
|
||
|
import net.minecraft.item.ItemStack;
|
||
|
import net.minecraft.nbt.NBTTagCompound;
|
||
|
import net.minecraft.util.EnumFacing;
|
||
|
import net.minecraft.util.NonNullList;
|
||
|
import net.minecraft.world.World;
|
||
|
import net.minecraftforge.common.capabilities.Capability;
|
||
|
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||
|
|
||
|
import javax.annotation.Nonnull;
|
||
|
import javax.annotation.Nullable;
|
||
|
|
||
|
public class ItemAuraCache extends ItemImpl {
|
||
|
|
||
|
public ItemAuraCache() {
|
||
|
super("aura_cache");
|
||
|
this.setMaxStackSize(1);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onUpdate(ItemStack stackIn, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
|
||
|
if (!worldIn.isRemote && entityIn instanceof EntityPlayer) {
|
||
|
EntityPlayer player = (EntityPlayer) entityIn;
|
||
|
if (player.isSneaking()) {
|
||
|
ItemStack stack = player.getHeldItemMainhand();
|
||
|
if (stack.hasCapability(Capabilities.auraRecharge, null)) {
|
||
|
IAuraContainer container = stackIn.getCapability(Capabilities.auraContainer, null);
|
||
|
if (container.getStoredAura() >= 3 && stack.getCapability(Capabilities.auraRecharge, null).recharge()) {
|
||
|
container.drainAura(4, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
|
||
|
if (this.isInCreativeTab(tab)) {
|
||
|
items.add(new ItemStack(this));
|
||
|
|
||
|
ItemStack stack = new ItemStack(this);
|
||
|
IAuraContainer container = stack.getCapability(Capabilities.auraContainer, null);
|
||
|
container.storeAura(container.getMaxAura(), false);
|
||
|
items.add(stack);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean showDurabilityBar(ItemStack stack) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public double getDurabilityForDisplay(ItemStack stack) {
|
||
|
if (stack.hasCapability(Capabilities.auraContainer, null)) {
|
||
|
IAuraContainer container = stack.getCapability(Capabilities.auraContainer, null);
|
||
|
return 1 - container.getStoredAura() / (double) container.getMaxAura();
|
||
|
} else {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
@Override
|
||
|
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) {
|
||
|
return new ICapabilityProvider() {
|
||
|
private final ItemAuraContainer container = new ItemAuraContainer(stack, 4000, true);
|
||
|
|
||
|
@Override
|
||
|
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||
|
return capability == Capabilities.auraContainer;
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
@Override
|
||
|
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
|
||
|
if (capability == Capabilities.auraContainer) {
|
||
|
return (T) this.container;
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
}
|