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 9f852af9e..f21cd0701 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnergizer.java @@ -24,6 +24,7 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -94,7 +95,7 @@ public class ContainerEnergizer extends Container{ //Other Slots in Inventory excluded else if(slot >= inventoryStart){ //Shift from Inventory - if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaConsumer, null))){ + if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaConsumer, null)) || newStack.hasCapability(CapabilityEnergy.ENERGY, null)){ if(!this.mergeItemStack(newStack, 0, 1, false)){ return StackUtil.getNull(); } 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 f8b9b04ef..ac502a72e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerEnervator.java @@ -24,6 +24,7 @@ import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -93,7 +94,7 @@ public class ContainerEnervator extends Container{ //Other Slots in Inventory excluded else if(slot >= inventoryStart){ //Shift from Inventory - if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaProducer, null))){ + if(newStack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && newStack.hasCapability(TeslaUtil.teslaProducer, null)) || newStack.hasCapability(CapabilityEnergy.ENERGY, null)){ if(!this.mergeItemStack(newStack, 0, 1, false)){ return StackUtil.getNull(); } 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 37a5582ae..a553eb14d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/items/ItemBattery.java @@ -28,6 +28,8 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; import java.util.List; @@ -55,16 +57,22 @@ public class ItemBattery extends ItemEnergy{ for(int i = 0; i < player.inventory.getSizeInventory(); i++){ ItemStack slot = player.inventory.getStackInSlot(i); if(StackUtil.isValid(slot)){ + int extractable = this.extractEnergy(stack, Integer.MAX_VALUE, true); int received = 0; - Item item = slot.getItem(); - if(item instanceof IEnergyContainerItem){ - received = ((IEnergyContainerItem)item).receiveEnergy(slot, this.extractEnergy(stack, Integer.MAX_VALUE, true), false); + if(slot.getItem() instanceof IEnergyContainerItem){ + received = ((IEnergyContainerItem)slot.getItem()).receiveEnergy(slot, extractable, false); + } + else if(slot.hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = slot.getCapability(CapabilityEnergy.ENERGY, null); + if(cap != null){ + received = cap.receiveEnergy(extractable, 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.extractEnergy(stack, Integer.MAX_VALUE, true), false); + received = (int)cap.givePower(extractable, 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 316207307..08df4dcaa 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 @@ -10,6 +10,8 @@ package de.ellpeck.actuallyadditions.mod.items.base; +import cofh.api.energy.IEnergyContainerItem; +import cofh.api.energy.IEnergyStorage; import cofh.api.energy.ItemEnergyContainer; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.data.PlayerData; @@ -20,12 +22,17 @@ 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; import net.minecraft.util.NonNullList; import net.minecraft.util.math.MathHelper; +import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.text.NumberFormat; import java.util.List; @@ -119,7 +126,7 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ @Override public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt){ - return ActuallyAdditions.teslaLoaded ? new ItemTeslaWrapper(stack, this) : null; + return new EnergyCapabilityProvider(stack, this); } public int extractEnergyInternal(ItemStack stack, int maxExtract, boolean simulate){ @@ -141,4 +148,60 @@ public abstract class ItemEnergy extends ItemEnergyContainer{ this.setMaxReceive(before); return toReturn; } + + private static class EnergyCapabilityProvider implements ICapabilityProvider{ + + private final Object forgeUnitsWrapper; + private Object teslaWrapper; + + private final IEnergyContainerItem item; + private final ItemStack stack; + + public EnergyCapabilityProvider(final ItemStack stack, final IEnergyContainerItem item){ + this.stack = stack; + this.item = item; + + this.forgeUnitsWrapper = new IEnergyStorage(){ + @Override + public int receiveEnergy(int maxReceive, boolean simulate){ + return item.receiveEnergy(stack, maxReceive, simulate); + } + + @Override + public int extractEnergy(int maxExtract, boolean simulate){ + return item.extractEnergy(stack, maxExtract, simulate); + } + + @Override + public int getEnergyStored(){ + return item.getEnergyStored(stack); + } + + @Override + public int getMaxEnergyStored(){ + return item.getMaxEnergyStored(stack); + } + }; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing){ + return this.getCapability(capability, facing) != null; + } + + @Nullable + @Override + public T getCapability(Capability capability, EnumFacing facing){ + if(capability == CapabilityEnergy.ENERGY){ + return (T)this.forgeUnitsWrapper; + } + else if(ActuallyAdditions.teslaLoaded){ + if(this.teslaWrapper == null){ + this.teslaWrapper = new ItemTeslaWrapper(this.stack, this.item); + } + return (T)this.teslaWrapper; + } + return 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 979bb1ac2..137f5047a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -353,6 +353,15 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } + @Override + public void invalidate(){ + super.invalidate(); + + if(ActuallyAdditions.teslaLoaded){ + TeslaUtil.removeTile(this); + } + } + public enum NBTType{ SAVE_TILE, SYNC, 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 3aba6a2ab..3fefdffa9 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnergizer.java @@ -20,6 +20,7 @@ import net.darkhax.tesla.api.ITeslaHolder; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -59,6 +60,13 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements ICus received = (item.receiveEnergy(this.slots.get(0), this.storage.getEnergyStored(), false)); canTakeUp = item.getEnergyStored(this.slots.get(0)) >= item.getMaxEnergyStored(this.slots.get(0)); } + else if(this.slots.get(0).hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = this.slots.get(0).getCapability(CapabilityEnergy.ENERGY, null); + if(cap != null){ + received = cap.receiveEnergy(this.storage.getEnergyStored(), false); + canTakeUp = cap.getEnergyStored() >= cap.getMaxEnergyStored(); + } + } else if(ActuallyAdditions.teslaLoaded){ if(this.slots.get(0).hasCapability(TeslaUtil.teslaConsumer, null)){ ITeslaConsumer cap = this.slots.get(0).getCapability(TeslaUtil.teslaConsumer, null); @@ -92,7 +100,7 @@ public class TileEntityEnergizer extends TileEntityInventoryBase implements ICus @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaConsumer, null))); + return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaConsumer, null)) || stack.hasCapability(CapabilityEnergy.ENERGY, 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 36b2a225d..03ba55180 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityEnervator.java @@ -10,7 +10,6 @@ package de.ellpeck.actuallyadditions.mod.tile; -import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyContainerItem; import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -20,6 +19,7 @@ import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -60,6 +60,13 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements ISha extracted = item.extractEnergy(this.slots.get(0), maxExtract, false); canTakeUp = item.getEnergyStored(this.slots.get(0)) <= 0; } + else if(this.slots.get(0).hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = this.slots.get(0).getCapability(CapabilityEnergy.ENERGY, null); + if(cap != null){ + extracted = cap.extractEnergy(maxExtract, false); + canTakeUp = cap.getEnergyStored() <= 0; + } + } else if(ActuallyAdditions.teslaLoaded){ if(this.slots.get(0).hasCapability(TeslaUtil.teslaProducer, null)){ ITeslaProducer cap = this.slots.get(0).getCapability(TeslaUtil.teslaProducer, null); @@ -93,7 +100,7 @@ public class TileEntityEnervator extends TileEntityInventoryBase implements ISha @Override public boolean isItemValidForSlot(int i, ItemStack stack){ - return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaProducer, null))); + return i == 0 && (stack.getItem() instanceof IEnergyContainerItem || (ActuallyAdditions.teslaLoaded && stack.hasCapability(TeslaUtil.teslaProducer, null)) || stack.hasCapability(CapabilityEnergy.ENERGY, 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 89c4582f9..cd375aa02 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayEnergy.java @@ -23,6 +23,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; import java.util.ArrayList; import java.util.HashMap; @@ -89,7 +91,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 || (ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, side.getOpposite()))){ + if(tile instanceof IEnergyReceiver || (ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, side.getOpposite())) || tile.hasCapability(CapabilityEnergy.ENERGY, side.getOpposite())){ this.receiversAround.put(side, tile); TileEntity oldTile = old.get(side); @@ -165,6 +167,21 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements } } } + else if(tile.hasCapability(CapabilityEnergy.ENERGY, opp)){ + IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, opp); + if(cap != null){ + int theoreticalReceived = cap.receiveEnergy(Math.min(amountPer, lowestCap), true); + if(theoreticalReceived > 0){ + int deduct = this.calcDeduction(theoreticalReceived, highestLoss); + if(deduct >= theoreticalReceived){ //Happens with small numbers + deduct = 0; + } + + transmitted += cap.receiveEnergy(theoreticalReceived-deduct, simulate); + transmitted += deduct; + } + } + } else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, opp)){ ITeslaConsumer cap = tile.getCapability(TeslaUtil.teslaConsumer, opp); if(cap != null){ 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 da30f960f..a8432f3a2 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPhantomEnergyface.java @@ -22,6 +22,8 @@ import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; public class TileEntityPhantomEnergyface extends TileEntityPhantomface implements ICustomEnergyReceiver, ISharingEnergyProvider{ @@ -38,6 +40,12 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyReceiver){ return ((IEnergyReceiver)tile).receiveEnergy(from, maxReceive, simulate); } + else if(tile.hasCapability(CapabilityEnergy.ENERGY, from)){ + IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, from); + if(cap != null){ + return cap.receiveEnergy(maxReceive, simulate); + } + } else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaConsumer, from)){ ITeslaConsumer cap = tile.getCapability(TeslaUtil.teslaConsumer, from); if(cap != null){ @@ -57,6 +65,12 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyProvider){ return ((IEnergyProvider)tile).extractEnergy(from, maxExtract, simulate); } + else if(tile.hasCapability(CapabilityEnergy.ENERGY, from)){ + IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, from); + if(cap != null){ + return cap.extractEnergy(maxExtract, simulate); + } + } else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaProducer, from)){ ITeslaProducer cap = tile.getCapability(TeslaUtil.teslaProducer, from); if(cap != null){ @@ -76,6 +90,12 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyHandler){ return ((IEnergyHandler)tile).getEnergyStored(from); } + else if(tile.hasCapability(CapabilityEnergy.ENERGY, from)){ + IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, from); + if(cap != null){ + return cap.getEnergyStored(); + } + } else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ ITeslaHolder cap = tile.getCapability(TeslaUtil.teslaHolder, from); if(cap != null){ @@ -95,6 +115,12 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyHandler){ return ((IEnergyHandler)tile).getMaxEnergyStored(from); } + else if(tile.hasCapability(CapabilityEnergy.ENERGY, from)){ + IEnergyStorage cap = tile.getCapability(CapabilityEnergy.ENERGY, from); + if(cap != null){ + return cap.getMaxEnergyStored(); + } + } else if(ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from)){ ITeslaHolder cap = tile.getCapability(TeslaUtil.teslaHolder, from); if(cap != null){ @@ -114,11 +140,16 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement if(tile instanceof IEnergyHandler){ return true; } - else if(ActuallyAdditions.teslaLoaded){ + else{ for(EnumFacing facing : EnumFacing.values()){ - if(tile.hasCapability(TeslaUtil.teslaHolder, facing)){ + if(tile.hasCapability(CapabilityEnergy.ENERGY, facing)){ return true; } + else if(ActuallyAdditions.teslaLoaded){ + if(tile.hasCapability(TeslaUtil.teslaHolder, facing)){ + return true; + } + } } } } @@ -135,7 +166,7 @@ public class TileEntityPhantomEnergyface extends TileEntityPhantomface implement return ((IEnergyConnection)tile).canConnectEnergy(from); } else{ - return ActuallyAdditions.teslaLoaded && tile.hasCapability(TeslaUtil.teslaHolder, from); + return tile.hasCapability(CapabilityEnergy.ENERGY, from) || (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 052b94649..c17532397 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityPlayerInterface.java @@ -21,6 +21,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; +import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; import java.util.UUID; @@ -70,6 +71,12 @@ public class TileEntityPlayerInterface extends TileEntityInventoryBase implement if(item instanceof IEnergyContainerItem){ received = ((IEnergyContainerItem)item).receiveEnergy(slot, this.storage.getEnergyStored(), false); } + else if(slot.hasCapability(CapabilityEnergy.ENERGY, null)){ + IEnergyStorage cap = slot.getCapability(CapabilityEnergy.ENERGY, null); + if(cap != null){ + received = cap.receiveEnergy(this.storage.getEnergyStored(), false); + } + } else if(ActuallyAdditions.teslaLoaded && slot.hasCapability(TeslaUtil.teslaConsumer, null)){ ITeslaConsumer cap = slot.getCapability(TeslaUtil.teslaConsumer, null); if(cap != null){ 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 ae96da466..e650e778e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/WorldUtil.java @@ -91,12 +91,6 @@ public final class WorldUtil{ } } - if(ActuallyAdditions.teslaLoaded){ - if(TeslaUtil.doWrappedTeslaRFInteraction(tileFrom, tileTo, sideTo, maxTransfer)){ - return; - } - } - if(tileFrom.hasCapability(CapabilityEnergy.ENERGY, sideTo) && tileTo.hasCapability(CapabilityEnergy.ENERGY, sideTo.getOpposite())){ IEnergyStorage handlerFrom = tileFrom.getCapability(CapabilityEnergy.ENERGY, sideTo); IEnergyStorage handlerTo = tileTo.getCapability(CapabilityEnergy.ENERGY, sideTo.getOpposite()); @@ -106,9 +100,14 @@ public final class WorldUtil{ if(drain > 0){ int filled = handlerTo.receiveEnergy(drain, false); handlerFrom.extractEnergy(filled, false); + return; } } } + + if(ActuallyAdditions.teslaLoaded){ + TeslaUtil.doWrappedTeslaRFInteraction(tileFrom, tileTo, sideTo, maxTransfer); + } } } 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 index a8a1c783a..971595c85 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/ItemTeslaWrapper.java @@ -15,11 +15,8 @@ import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.api.ITeslaProducer; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -public class ItemTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaConsumer, ICapabilityProvider{ +public class ItemTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaConsumer{ private final ItemStack stack; private final IEnergyContainerItem item; @@ -48,14 +45,4 @@ public class ItemTeslaWrapper implements ITeslaProducer, ITeslaHolder, ITeslaCon public long takePower(long power, boolean simulated){ return this.item.extractEnergy(this.stack, (int)power, simulated); } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing){ - return capability == TeslaUtil.teslaProducer || capability == TeslaUtil.teslaHolder || capability == TeslaUtil.teslaConsumer; - } - - @Override - public T getCapability(Capability capability, 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 f2a2df574..9c61e2191 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 @@ -47,6 +47,10 @@ public final class TeslaUtil{ } } + public static void removeTile(TileEntityBase tile){ + TESLA_MAP.remove(tile); + } + public static boolean doWrappedTeslaRFInteraction(TileEntity tileFrom, TileEntity tileTo, EnumFacing side, int maxTransfer){ if(tileTo.hasCapability(teslaConsumer, side.getOpposite()) && tileFrom.hasCapability(teslaProducer, side)){ ITeslaConsumer handlerTo = tileTo.getCapability(teslaConsumer, side.getOpposite()); @@ -77,5 +81,4 @@ public final class TeslaUtil{ } return handlers[side]; } - }