diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java index 5c23a7eac..31996552b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/ActuallyAdditions.java @@ -45,6 +45,7 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.update.UpdateChecker; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -66,6 +67,8 @@ public class ActuallyAdditions{ @SidedProxy(clientSide = ModUtil.PROXY_CLIENT, serverSide = ModUtil.PROXY_SERVER) public static IProxy proxy; + public static boolean teslaLoaded; + static{ //For some reason, this has to be done here FluidRegistry.enableUniversalBucket(); @@ -79,6 +82,14 @@ public class ActuallyAdditions{ Lenses.init(); InitBooklet.preInit(); + if(Loader.isModLoaded("Tesla")){ + ModUtil.LOGGER.info("Tesla loaded... Activating Tesla Power System integration..."); + ActuallyAdditions.teslaLoaded = true; + } + else{ + ModUtil.LOGGER.info("Tesla not found! Skipping Tesla Power System integration."); + } + new ConfigurationHandler(event.getSuggestedConfigurationFile()); PacketHandler.init(); InitToolMaterials.init(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java index e0871a873..6559d878a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerDrill.java @@ -11,9 +11,11 @@ package de.ellpeck.actuallyadditions.mod.inventory; import cofh.api.energy.IEnergyContainerItem; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemDrillUpgrade; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ClickType; @@ -39,7 +41,7 @@ public class ContainerDrill extends Container{ this.addSlotToContainer(new Slot(this.drillInventory, i, 44+i*18, 19){ @Override public boolean isItemValid(ItemStack stack){ - return stack.getItem() instanceof ItemDrillUpgrade || stack.getItem() instanceof IEnergyContainerItem; + return stack.getItem() instanceof ItemDrillUpgrade || stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaProducer, null)); } }); } @@ -80,7 +82,7 @@ public class ContainerDrill extends Container{ //Other Slots in Inventory excluded if(slot >= inventoryStart){ //Shift from Inventory - if(newStack.getItem() instanceof ItemDrillUpgrade || newStack.getItem() instanceof IEnergyContainerItem){ + if(newStack.getItem() instanceof ItemDrillUpgrade || newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaProducer, null))){ if(!this.mergeItemStack(newStack, 0, 5, false)){ return null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java index 4f3382ad8..2d467a4dc 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -11,9 +11,11 @@ package de.ellpeck.actuallyadditions.mod.inventory; import cofh.api.energy.IEnergyContainerItem; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnergizer; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -91,7 +93,7 @@ public class ContainerEnergizer extends Container{ //Other Slots in Inventory excluded else if(slot >= inventoryStart){ //Shift from Inventory - if(newStack.getItem() instanceof IEnergyContainerItem){ + if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaConsumer, null))){ if(!this.mergeItemStack(newStack, 0, 1, false)){ return null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java index d13fa3cd6..31f4aea10 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -11,9 +11,11 @@ package de.ellpeck.actuallyadditions.mod.inventory; import cofh.api.energy.IEnergyContainerItem; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotOutput; import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; import de.ellpeck.actuallyadditions.mod.tile.TileEntityEnervator; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -90,7 +92,7 @@ public class ContainerEnervator extends Container{ //Other Slots in Inventory excluded else if(slot >= inventoryStart){ //Shift from Inventory - if(newStack.getItem() instanceof IEnergyContainerItem){ + if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaProducer, null))){ if(!this.mergeItemStack(newStack, 0, 1, false)){ return null; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java index a1f0168e1..a2fa6e2b5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -10,9 +10,25 @@ package de.ellpeck.actuallyadditions.mod.items; +import cofh.api.energy.IEnergyContainerItem; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.items.base.ItemEnergy; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; +import de.ellpeck.actuallyadditions.mod.util.StringUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import java.util.List; public class ItemBattery extends ItemEnergy{ @@ -21,9 +37,71 @@ public class ItemBattery extends ItemEnergy{ this.setMaxStackSize(1); } - @Override public EnumRarity getRarity(ItemStack stack){ return EnumRarity.RARE; } + + @Override + public boolean hasEffect(ItemStack stack){ + return this.isDischargeMode(stack); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int itemSlot, boolean isSelected){ + if(!world.isRemote && entity instanceof EntityPlayer && this.isDischargeMode(stack)){ + EntityPlayer player = (EntityPlayer)entity; + for(int i = 0; i < player.inventory.getSizeInventory(); i++){ + ItemStack slot = player.inventory.getStackInSlot(i); + if(slot != null){ + int received = 0; + + Item item = slot.getItem(); + if(item instanceof IEnergyContainerItem){ + received = ((IEnergyContainerItem)item).receiveEnergy(slot, this.getEnergyStored(stack), false); + } + else if(ActuallyAdditions.teslaLoaded && slot.hasCapability(TeslaUtil.teslaConsumer, null)){ + ITeslaConsumer cap = slot.getCapability(TeslaUtil.teslaConsumer, null); + if(cap != null){ + received = (int)cap.givePower(this.getEnergyStored(stack), false); + } + } + + if(received > 0){ + this.extractEnergy(stack, received, false); + } + } + } + } + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World worldIn, EntityPlayer player, EnumHand hand){ + if(!worldIn.isRemote && player.isSneaking()){ + boolean isDischarge = this.isDischargeMode(stack); + this.setDischargeMode(stack, !isDischarge); + + return new ActionResult(EnumActionResult.SUCCESS, stack); + } + return super.onItemRightClick(stack, worldIn, player, hand); + } + + private boolean isDischargeMode(ItemStack stack){ + return stack.hasTagCompound() && stack.getTagCompound().getBoolean("DischargeMode"); + } + + private void setDischargeMode(ItemStack stack, boolean mode){ + if(!stack.hasTagCompound()){ + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound().setBoolean("DischargeMode", mode); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool){ + super.addInformation(stack, player, list, bool); + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".battery."+(this.isDischargeMode(stack) ? "discharge" : "noDischarge"))); + list.add(StringUtil.localize("tooltip."+ModUtil.MOD_ID+".battery.changeMode")); + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java index 857d0b4d3..56b7a9121 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemDrill.java @@ -22,6 +22,8 @@ import de.ellpeck.actuallyadditions.mod.tile.TileEntityInventoryBase; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.WorldUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; +import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -193,17 +195,24 @@ public class ItemDrill extends ItemEnergy{ loadSlotsFromNBT(slots, stack); if(slots != null && slots.length > 0){ for(ItemStack slotStack : slots){ - if(slotStack != null && slotStack.getItem() instanceof IEnergyContainerItem){ - if(this.getEnergyStored(stack) < this.getMaxEnergyStored(stack)){ - int energy = ((IEnergyContainerItem)slotStack.getItem()).getEnergyStored(slotStack); - if(energy > 0){ - //Charge the Drill and discharge the "Upgrade" - int toReceive = ((IEnergyContainerItem)stack.getItem()).receiveEnergy(stack, energy, true); - int actualReceive = ((IEnergyContainerItem)slotStack.getItem()).extractEnergy(slotStack, toReceive, false); - ((IEnergyContainerItem)stack.getItem()).receiveEnergy(stack, actualReceive, false); + if(slotStack != null){ + Item item = slotStack.getItem(); + int extracted = 0; + int maxExtract = this.getMaxEnergyStored(stack)-this.getEnergyStored(stack); + if(item instanceof IEnergyContainerItem){ + extracted = ((IEnergyContainerItem)item).extractEnergy(slotStack, maxExtract, false); + } + else if(ActuallyAdditions.teslaLoaded && slotStack.hasCapability(TeslaUtil.teslaProducer, null)){ + ITeslaProducer cap = slotStack.getCapability(TeslaUtil.teslaProducer, null); + if(cap != null){ + extracted = (int)cap.takePower(maxExtract, false); } } + + if(extracted > 0){ + this.receiveEnergy(stack, extracted, false); + } } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java index 35f0d50c8..f6cf6c66e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/base/ItemEnergy.java @@ -13,12 +13,14 @@ package de.ellpeck.actuallyadditions.mod.items.base; import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.ItemUtil; +import de.ellpeck.actuallyadditions.mod.util.compat.ItemTeslaWrapper; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -108,4 +110,9 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ compound.setInteger("Energy", energy); stack.setTagCompound(compound); } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt){ + return ActuallyAdditions.teslaLoaded ? new ItemTeslaWrapper(stack, this) : null; + } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 11b347a29..df21d0ba7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -12,6 +12,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.network.PacketHandler; import de.ellpeck.actuallyadditions.mod.network.PacketServerToClient; @@ -39,7 +40,6 @@ import net.minecraftforge.fml.common.registry.GameRegistry; public abstract class TileEntityBase extends TileEntity implements ITickable{ - public static boolean teslaLoaded; public final String name; public boolean isRedstonePowered; public boolean isPulseMode; @@ -105,14 +105,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ register(TileEntityBookletStand.class, "BookletStand"); register(TileEntityDisplayStand.class, "DisplayStand"); register(TileEntityShockSuppressor.class, "ShockSuppressor"); - - if(Loader.isModLoaded("Tesla")){ - ModUtil.LOGGER.info("Tesla loaded... Activating Tesla Power System integration..."); - teslaLoaded = true; - } - else{ - ModUtil.LOGGER.info("Tesla not found! Skipping Tesla Power System integration."); - } } private static void register(Class tileClass, String legacyName){ @@ -280,7 +272,7 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ return (T)tank; } } - else if(teslaLoaded){ + else if(ActuallyAdditions.teslaLoaded){ T cap = TeslaUtil.wrapTeslaToRF(this, capability, facing); if(cap != null){ return cap; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java index aec10a9e7..cb431e6b9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -13,6 +13,10 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyContainerItem; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -44,17 +48,40 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(this.slots[0] != null && this.slots[0].getItem() instanceof IEnergyContainerItem && this.slots[1] == null){ + if(this.slots[0] != null && this.slots[1] == null){ if(this.storage.getEnergyStored() > 0){ - int received = ((IEnergyContainerItem)this.slots[0].getItem()).receiveEnergy(this.slots[0], this.storage.getEnergyStored(), false); - this.storage.extractEnergy(received, false); - } + int received = 0; + boolean canTakeUp = false; - if(((IEnergyContainerItem)this.slots[0].getItem()).getEnergyStored(this.slots[0]) >= ((IEnergyContainerItem)this.slots[0].getItem()).getMaxEnergyStored(this.slots[0])){ - this.slots[1] = this.slots[0].copy(); - this.slots[0].stackSize--; - if(this.slots[0].stackSize <= 0){ - this.slots[0] = null; + if(this.slots[0].getItem() instanceof IEnergyContainerItem){ + IEnergyContainerItem item = (IEnergyContainerItem)this.slots[0].getItem(); + received = (item.receiveEnergy(this.slots[0], this.storage.getEnergyStored(), false)); + canTakeUp = item.getEnergyStored(this.slots[0]) >= item.getMaxEnergyStored(this.slots[0]); + } + else if(ActuallyAdditions.teslaLoaded){ + if(this.slots[0].hasCapability(TeslaUtil.teslaConsumer, null)){ + ITeslaConsumer cap = this.slots[0].getCapability(TeslaUtil.teslaConsumer, null); + if(cap != null){ + received = (int)cap.givePower(this.storage.getEnergyStored(), false); + } + } + if(this.slots[0].hasCapability(TeslaUtil.teslaHolder, null)){ + ITeslaHolder cap = this.slots[0].getCapability(TeslaUtil.teslaHolder, null); + if(cap != null){ + canTakeUp = cap.getStoredPower() >= cap.getCapacity(); + } + } + } + if(received > 0){ + this.storage.extractEnergy(received, false); + } + + if(canTakeUp){ + this.slots[1] = this.slots[0].copy(); + this.slots[0].stackSize--; + if(this.slots[0].stackSize <= 0){ + this.slots[0] = null; + } } } } @@ -67,7 +94,7 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements IEne @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && stack.getItem() instanceof IEnergyContainerItem; + return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaConsumer, null))); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java index 526c968f4..84cbb8d12 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -13,6 +13,10 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyContainerItem; import cofh.api.energy.IEnergyProvider; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; +import net.darkhax.tesla.api.ITeslaHolder; +import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -44,17 +48,41 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne public void updateEntity(){ super.updateEntity(); if(!this.worldObj.isRemote){ - if(this.slots[0] != null && this.slots[0].getItem() instanceof IEnergyContainerItem && this.slots[1] == null){ - if(((IEnergyContainerItem)this.slots[0].getItem()).getEnergyStored(this.slots[0]) > 0){ - int toReceive = ((IEnergyContainerItem)this.slots[0].getItem()).extractEnergy(this.slots[0], this.storage.getMaxEnergyStored()-this.storage.getEnergyStored(), false); - this.storage.receiveEnergy(toReceive, false); - } + if(this.slots[0] != null && this.slots[1] == null){ + if(this.storage.getEnergyStored() < this.storage.getMaxEnergyStored()){ + int extracted = 0; + boolean canTakeUp = false; - if(((IEnergyContainerItem)this.slots[0].getItem()).getEnergyStored(this.slots[0]) <= 0){ - this.slots[1] = this.slots[0].copy(); - this.slots[0].stackSize--; - if(this.slots[0].stackSize <= 0){ - this.slots[0] = null; + int maxExtract = this.storage.getMaxEnergyStored()-this.storage.getEnergyStored(); + if(this.slots[0].getItem() instanceof IEnergyContainerItem){ + IEnergyContainerItem item = (IEnergyContainerItem)this.slots[0].getItem(); + extracted = item.extractEnergy(this.slots[0], maxExtract, false); + canTakeUp = item.getEnergyStored(this.slots[0]) <= 0; + } + else if(ActuallyAdditions.teslaLoaded){ + if(this.slots[0].hasCapability(TeslaUtil.teslaProducer, null)){ + ITeslaProducer cap = this.slots[0].getCapability(TeslaUtil.teslaProducer, null); + if(cap != null){ + extracted = (int)cap.takePower(maxExtract, false); + } + } + if(this.slots[0].hasCapability(TeslaUtil.teslaHolder, null)){ + ITeslaHolder cap = this.slots[0].getCapability(TeslaUtil.teslaHolder, null); + if(cap != null){ + canTakeUp = cap.getStoredPower() <= 0; + } + } + } + if(extracted > 0){ + this.storage.receiveEnergy(extracted, false); + } + + if(canTakeUp){ + this.slots[1] = this.slots[0].copy(); + this.slots[0].stackSize--; + if(this.slots[0].stackSize <= 0){ + this.slots[0] = null; + } } } } @@ -67,7 +95,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements IEne @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && stack.getItem() instanceof IEnergyContainerItem; + return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaProducer, null))); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java index 59bbe060d..50c3bee39 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.config.values.ConfigBoolValues; -import de.ellpeck.actuallyadditions.mod.config.values.ConfigIntValues; import de.ellpeck.actuallyadditions.mod.misc.LaserRelayConnectionHandler; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.darkhax.tesla.api.ITeslaConsumer; @@ -78,7 +78,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements BlockPos pos = this.getPos().offset(side); TileEntity tile = this.worldObj.getTileEntity(pos); if(tile != null && !(tile instanceof TileEntityLaserRelay)){ - if(tile instanceof IEnergyReceiver || (teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, side.getOpposite()))){ + if(tile instanceof IEnergyReceiver || (ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, side.getOpposite()))){ this.receiversAround.put(side, tile); } } @@ -114,7 +114,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements transmitted += deduct; } } - else if(teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, opp)){ + else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, opp)){ ITeslaConsumer cap = tile.getCapability(TeslaUtil.teslaConsumer, opp); if(cap != null){ int theoreticalReceived = (int)cap.givePower(Math.min(maxTransfer, lowestCap)-transmitted, true); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java index 81cbf83b2..4c819a54d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -14,6 +14,7 @@ import cofh.api.energy.IEnergyConnection; import cofh.api.energy.IEnergyHandler; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.darkhax.tesla.api.ITeslaConsumer; @@ -37,7 +38,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyReceiver){ return ((IEnergyReceiver)tile).receiveEnergy(from, maxReceive, simulate); } - else if(teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, from)){ + else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, from)){ ITeslaConsumer cap = tile.getCapability(TeslaUtil.teslaConsumer, from); if(cap != null){ return (int)cap.givePower(maxReceive, simulate); @@ -56,7 +57,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyProvider){ return ((IEnergyProvider)tile).extractEnergy(from, maxExtract, simulate); } - else if(teslaLoaded && tile.hasCapability(TeslaUtil.teslaProducer, from)){ + else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaProducer, from)){ ITeslaProducer cap = tile.getCapability(TeslaUtil.teslaProducer, from); if(cap != null){ return (int)cap.takePower(maxExtract, simulate); @@ -75,7 +76,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyHandler){ return ((IEnergyHandler)tile).getEnergyStored(from); } - else if(teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ + else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ ITeslaHolder cap = tile.getCapability(TeslaUtil.teslaHolder, from); if(cap != null){ return (int)cap.getStoredPower(); @@ -94,7 +95,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyHandler){ return ((IEnergyHandler)tile).getMaxEnergyStored(from); } - else if(teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ + else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ ITeslaHolder cap = tile.getCapability(TeslaUtil.teslaHolder, from); if(cap != null){ return (int)cap.getCapacity(); @@ -109,7 +110,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement public boolean isBoundThingInRange(){ if(super.isBoundThingInRange()){ TileEntity tile = this.worldObj.getTileEntity(this.boundPosition); - return tile != null && (tile instanceof IEnergyHandler || (teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, null))); + return tile != null && (tile instanceof IEnergyHandler || (ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, null))); } else{ return false; @@ -125,7 +126,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement return ((IEnergyConnection)tile).canConnectEnergy(from); } else{ - return teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from); + return ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java index 0da9057ad..5eff581d0 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -13,7 +13,11 @@ package de.ellpeck.actuallyadditions.mod.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyContainerItem; import cofh.api.energy.IEnergyReceiver; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; +import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; +import net.darkhax.tesla.api.ITeslaConsumer; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -58,10 +62,23 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement for(int i = 0; i < player.inventory.getSizeInventory(); i++){ if(this.storage.getEnergyStored() > 0){ ItemStack slot = player.inventory.getStackInSlot(i); - if(slot != null && slot.getItem() instanceof IEnergyContainerItem){ - int received = ((IEnergyContainerItem)slot.getItem()).receiveEnergy(slot, this.storage.getEnergyStored(), false); - this.storage.extractEnergy(received, false); - changed = true; + if(slot != null){ + Item item = slot.getItem(); + + int received = 0; + if(item instanceof IEnergyContainerItem){ + received = ((IEnergyContainerItem)item).receiveEnergy(slot, this.storage.getEnergyStored(), false); + } + else if(ActuallyAdditions.teslaLoaded && slot.hasCapability(TeslaUtil.teslaConsumer, null)){ + ITeslaConsumer cap = slot.getCapability(TeslaUtil.teslaConsumer, null); + if(cap != null){ + received = (int)cap.givePower(this.storage.getEnergyStored(), false); + } + } + + if(received > 0){ + this.storage.extractEnergy(received, false); + } } } else{ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java index 5a5249038..66cf83b49 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.util; import cofh.api.energy.IEnergyProvider; import cofh.api.energy.IEnergyReceiver; -import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil; import net.minecraft.block.Block; import net.minecraft.block.BlockLiquid; @@ -118,7 +118,7 @@ public final class WorldUtil{ } } } - else if(TileEntityBase.teslaLoaded){ + else if(ActuallyAdditions.teslaLoaded){ TeslaUtil.doWrappedTeslaRFInteraction(tile, otherTile, side); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java new file mode 100644 index 000000000..86f130832 --- /dev/null +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java @@ -0,0 +1,64 @@ +/* + * This file ("ItemTeslaWrapper.java") is part of the Actually Additions mod for Minecraft. + * It is created and owned by Ellpeck and distributed + * under the Actually Additions License to be found at + * http://ellpeck.de/actaddlicense + * View the source code at https://github.com/Ellpeck/ActuallyAdditions + * + * © 2015-2016 Ellpeck + */ + +package de.ellpeck.actuallyadditions.mod.util.compat; + +import cofh.api.energy.IEnergyContainerItem; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; +import net.darkhax.tesla.api.ITeslaProducer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; + +import javax.annotation.Nullable; + +public class ItemTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaConsumer, ICapabilityProvider{ + + private final ItemStack stack; + private final IEnergyContainerItem item; + + public ItemTeslaWrapper(ItemStack stack, IEnergyContainerItem item){ + this.stack = stack; + this.item = item; + } + + @Override + public long givePower(long power, boolean simulated){ + return this.item.receiveEnergy(this.stack, (int)power, simulated); + } + + @Override + public long getStoredPower(){ + return this.item.getEnergyStored(this.stack); + } + + @Override + public long getCapacity(){ + return this.item.getMaxEnergyStored(this.stack); + } + + @Override + public long takePower(long power, boolean simulated){ + return this.item.extractEnergy(this.stack, (int)power, simulated); + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing){ + return capability == TeslaUtil.teslaProducer || capability == TeslaUtil.teslaHolder || capability == TeslaUtil.teslaConsumer; + } + + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing){ + return this.hasCapability(capability, facing) ? (T)this : null; + } +} diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java index 1461df0e4..93dca6dff 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java @@ -27,7 +27,7 @@ import java.util.Map; public final class TeslaUtil{ - private static final Map TESLA_MAP = new HashMap(); + private static final Map TESLA_MAP = new HashMap(); @CapabilityInject(ITeslaConsumer.class) public static Capability teslaConsumer; @CapabilityInject(ITeslaProducer.class) @@ -67,16 +67,16 @@ public final class TeslaUtil{ } } - private static TeslaHandler getHandler(TileEntityBase tile, EnumFacing facing){ - TeslaHandler[] handlers = TESLA_MAP.get(tile); + private static TileTeslaWrapper getHandler(TileEntityBase tile, EnumFacing facing){ + TileTeslaWrapper[] handlers = TESLA_MAP.get(tile); if(handlers == null || handlers.length != 6){ - handlers = new TeslaHandler[6]; + handlers = new TileTeslaWrapper[6]; TESLA_MAP.put(tile, handlers); } int side = facing.ordinal(); if(handlers[side] == null){ - handlers[side] = new TeslaHandler(tile, facing); + handlers[side] = new TileTeslaWrapper(tile, facing); } return handlers[side]; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TileTeslaWrapper.java similarity index 92% rename from src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java rename to src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TileTeslaWrapper.java index cce74a315..4ce13972a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TileTeslaWrapper.java @@ -19,12 +19,12 @@ import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.util.EnumFacing; -public class TeslaHandler implements ITeslaProducer, ITeslaHolder, ITeslaConsumer{ +public class TileTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaConsumer{ private final EnumFacing side; private final TileEntityBase tile; - public TeslaHandler(TileEntityBase tile, EnumFacing side){ + public TileTeslaWrapper(TileEntityBase tile, EnumFacing side){ this.tile = tile; this.side = side; } diff --git a/src/main/resources/assets/actuallyadditions/lang/en_US.lang b/src/main/resources/assets/actuallyadditions/lang/en_US.lang index 9ca47b99b..90df0bcf0 100644 --- a/src/main/resources/assets/actuallyadditions/lang/en_US.lang +++ b/src/main/resources/assets/actuallyadditions/lang/en_US.lang @@ -536,6 +536,9 @@ tooltip.actuallyadditions.playerProbe.disconnect.1=The player you were probing h tooltip.actuallyadditions.playerProbe.disconnect.2=The player you were probing has disconnected before you could strap him to the Player Interface! Data will be cleared! tooltip.actuallyadditions.playerProbe.probing=Probing tooltip.actuallyadditions.playerProbe.notice=Look out! Someone tried to probe you and strap you to a Player Interface, but they failed! +tooltip.actuallyadditions.battery.discharge=Charging other items in inventory +tooltip.actuallyadditions.battery.noDischarge=Not charging other items in inventory +tooltip.actuallyadditions.battery.changeMode=Sneak-right-click to toggle. #Gui Information info.actuallyadditions.gui.animals=Animals