2018-10-20 21:19:08 +02:00
|
|
|
package de.ellpeck.naturesaura.items;
|
|
|
|
|
2018-10-21 14:42:30 +02:00
|
|
|
import de.ellpeck.naturesaura.Helper;
|
2018-11-12 22:04:40 +01:00
|
|
|
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
|
2018-11-11 13:26:19 +01:00
|
|
|
import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
|
|
|
|
import de.ellpeck.naturesaura.api.aura.container.ItemAuraContainer;
|
2018-12-01 18:56:05 +01:00
|
|
|
import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge;
|
2018-11-21 20:36:55 +01:00
|
|
|
import de.ellpeck.naturesaura.api.render.ITrinketItem;
|
2018-10-21 14:42:30 +02:00
|
|
|
import net.minecraft.client.renderer.GlStateManager;
|
2018-10-20 21:19:08 +02:00
|
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2018-10-21 14:42:30 +02:00
|
|
|
import net.minecraft.inventory.EntityEquipmentSlot;
|
2018-10-20 21:19:08 +02:00
|
|
|
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;
|
2018-10-21 14:42:30 +02:00
|
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
|
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
2018-10-20 21:19:08 +02:00
|
|
|
|
|
|
|
import javax.annotation.Nonnull;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
|
2018-10-21 14:42:30 +02:00
|
|
|
public class ItemAuraCache extends ItemImpl implements ITrinketItem {
|
2018-10-20 21:19:08 +02:00
|
|
|
|
|
|
|
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()) {
|
2018-12-01 18:56:05 +01:00
|
|
|
IAuraContainer container = stackIn.getCapability(NaturesAuraAPI.capAuraContainer, null);
|
|
|
|
if (container.getStoredAura() <= 0)
|
|
|
|
return;
|
|
|
|
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
|
|
|
ItemStack stack = player.inventory.getStackInSlot(i);
|
|
|
|
if (stack.hasCapability(NaturesAuraAPI.capAuraRecharge, null)) {
|
|
|
|
IAuraRecharge recharge = stack.getCapability(NaturesAuraAPI.capAuraRecharge, null);
|
|
|
|
if (recharge.rechargeFromContainer(container, itemSlot, i, player.inventory.currentItem == i))
|
|
|
|
break;
|
|
|
|
}
|
2018-10-20 21:19:08 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void getSubItems(CreativeTabs tab, NonNullList<ItemStack> items) {
|
|
|
|
if (this.isInCreativeTab(tab)) {
|
|
|
|
items.add(new ItemStack(this));
|
|
|
|
|
|
|
|
ItemStack stack = new ItemStack(this);
|
2018-11-12 22:04:40 +01:00
|
|
|
IAuraContainer container = stack.getCapability(NaturesAuraAPI.capAuraContainer, null);
|
2018-10-20 21:19:08 +02:00
|
|
|
container.storeAura(container.getMaxAura(), false);
|
|
|
|
items.add(stack);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean showDurabilityBar(ItemStack stack) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getDurabilityForDisplay(ItemStack stack) {
|
2018-11-12 22:04:40 +01:00
|
|
|
if (stack.hasCapability(NaturesAuraAPI.capAuraContainer, null)) {
|
|
|
|
IAuraContainer container = stack.getCapability(NaturesAuraAPI.capAuraContainer, null);
|
2018-10-20 21:19:08 +02:00
|
|
|
return 1 - container.getStoredAura() / (double) container.getMaxAura();
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable NBTTagCompound nbt) {
|
|
|
|
return new ICapabilityProvider() {
|
2018-11-07 23:42:13 +01:00
|
|
|
private final ItemAuraContainer container = new ItemAuraContainer(stack, null, 4000);
|
2018-10-20 21:19:08 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
2018-11-12 22:04:40 +01:00
|
|
|
return capability == NaturesAuraAPI.capAuraContainer;
|
2018-10-20 21:19:08 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
@Override
|
|
|
|
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
|
2018-11-12 22:04:40 +01:00
|
|
|
if (capability == NaturesAuraAPI.capAuraContainer) {
|
2018-10-20 21:19:08 +02:00
|
|
|
return (T) this.container;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2018-10-21 14:42:30 +02:00
|
|
|
|
|
|
|
@Override
|
|
|
|
@SideOnly(Side.CLIENT)
|
2018-11-02 21:10:53 +01:00
|
|
|
public void render(ItemStack stack, EntityPlayer player, RenderType type, boolean isHolding) {
|
|
|
|
if (type == RenderType.BODY && !isHolding) {
|
|
|
|
boolean chest = !player.inventory.armorInventory.get(EntityEquipmentSlot.CHEST.getIndex()).isEmpty();
|
|
|
|
boolean legs = !player.inventory.armorInventory.get(EntityEquipmentSlot.LEGS.getIndex()).isEmpty();
|
2018-11-07 23:57:47 +01:00
|
|
|
GlStateManager.translate(-0.15F, 0.65F, chest ? -0.195F : (legs ? -0.165F : -0.1475F));
|
2018-10-21 14:44:16 +02:00
|
|
|
GlStateManager.scale(0.25F, 0.25F, 0.25F);
|
|
|
|
GlStateManager.rotate(180F, 1F, 0F, 0F);
|
|
|
|
Helper.renderItemInWorld(stack);
|
|
|
|
}
|
2018-10-21 14:42:30 +02:00
|
|
|
}
|
2018-10-20 21:19:08 +02:00
|
|
|
}
|