package ley.modding.dartcraft.util; import ley.modding.dartcraft.Config; import ley.modding.dartcraft.Dartcraft; import ley.modding.dartcraft.api.IForceConsumer; import ley.modding.dartcraft.api.inventory.ItemInventory; import ley.modding.dartcraft.item.DartItems; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import java.util.Random; import java.util.logging.Logger; public class ForceConsumerUtils { public static int getStoredForce(ItemStack stack) { return stack != null && stack.hasTagCompound() && stack.getTagCompound().hasKey("storedForce") ? stack.getTagCompound().getInteger("storedForce") : 0; } public static void initializeForceConsumer(ItemStack stack) { if (!stack.hasTagCompound()) { stack.setTagCompound(new NBTTagCompound()); } NBTTagCompound comp = stack.getTagCompound(); NBTTagList contents = new NBTTagList(); for (int i = 0; i < 1; ++i) { NBTTagCompound itemComp = new NBTTagCompound(); itemComp.setByte("Slot", (byte) i); contents.appendTag(itemComp); } comp.setTag("consumerContents", contents); comp.setInteger("ID", (new Random()).nextInt()); } public static boolean attemptRepair(ItemStack stack) { boolean repaired = false; IForceConsumer consumer = null; if (stack != null && stack.getItemDamage() > 0 && stack.getItem() instanceof IForceConsumer) { consumer = (IForceConsumer) stack.getItem(); } if (consumer != null) { for (int use = consumer.amountUsedBase(stack); stack.getItemDamage() > 0 && consumer.getStored(stack) >= use; repaired = true) { stack.setItemDamage(stack.getItemDamage() - 1); consumer.useForce(stack, use, true); } } return repaired; } public static boolean useForce(ItemStack stack, int amount, boolean use) { if ((stack == null) || (!stack.hasTagCompound()) || (amount < 0) || (stack.getItem() == null) || (!(stack.getItem() instanceof IForceConsumer))) { return false; } boolean canUse = stack.getTagCompound().getInteger("storedForce") >= amount; try { if (use) { stack.getTagCompound().setInteger( "storedForce", stack.getTagCompound().getInteger("storedForce") - amount ); ItemInventory inv = new ItemInventory(1, stack, "consumerContents"); IForceConsumer consumer = (IForceConsumer) stack.getItem(); ItemStack invStack = inv.getStackInSlot(0); int defecit = consumer.getMaxStored(stack) - stack.getTagCompound().getInteger("storedForce"); if ((defecit > 0) && (invStack != null) && (invStack.stackSize > 0)) { FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem( new ItemStack(invStack.getItem(), 1, invStack.getItemDamage()) ); if ((liquid == null) && (invStack.getItem() == DartItems.forcegem)) { liquid = new FluidStack( FluidRegistry.getFluid("liquidforce"), (int) (1000.0F * Config.gemValue) ); } if ((liquid != null) && (liquid.getFluid().getName().equalsIgnoreCase("liquidforce") )) { while ((defecit >= liquid.amount) && (invStack.stackSize > 0)) { stack.getTagCompound().setInteger( "storedForce", stack.getTagCompound().getInteger("storedForce") + liquid.amount ); invStack.stackSize -= 1; if (invStack.stackSize <= 0) { inv.setInventorySlotContents( 0, invStack.getItem().hasContainerItem() ? new ItemStack( invStack.getItem().getContainerItem() ) : (ItemStack) null ); } inv.save(); defecit = consumer.getMaxStored(stack) - stack.getTagCompound().getInteger("storedForce"); } } } } } catch (Exception e) { Logger.getLogger("DartCraft") .info("There was a problem in IForceConsumer implementation."); e.printStackTrace(); } return canUse; } public static boolean isForceContainer(ItemStack stack) { if (stack == null) { return false; } FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(stack); Fluid liquidForce = FluidRegistry.getFluid("liquidforce"); if ((liquid != null) && (liquidForce != null) && (liquid.getFluidID() == liquidForce.getID())) { return true; } return (stack.getItem() == DartItems.forcegem) || (stack.getItem() == DartItems.forceshard); } public static boolean openForceConsumerGui(EntityPlayer player, ItemStack stack) { if ((stack == null) || (stack.getItem() == null) || (!stack.hasTagCompound()) || (!(stack.getItem() instanceof IForceConsumer)) || (player == null)) { return false; } player.openGui( Dartcraft.instance, 16, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ ); return true; } }