Made batteries output by sneak-right-clicking and added tesla support for items

This commit is contained in:
Ellpeck 2016-07-25 02:07:16 +02:00
parent eeecb6c5cd
commit c166c3752d
18 changed files with 309 additions and 66 deletions

View file

@ -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();

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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<ItemStack> 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<ItemStack>(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"));
}
}

View file

@ -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);
}
}
}
}

View file

@ -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;
}
}

View file

@ -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<? extends TileEntityBase> 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;

View file

@ -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

View file

@ -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

View file

@ -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);

View file

@ -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);
}
}
}

View file

@ -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{

View file

@ -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);
}
}

View file

@ -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> T getCapability(Capability<T> capability, @Nullable EnumFacing facing){
return this.hasCapability(capability, facing) ? (T)this : null;
}
}

View file

@ -27,7 +27,7 @@ import java.util.Map;
public final class TeslaUtil{
private static final Map<TileEntityBase, TeslaHandler[]> TESLA_MAP = new HashMap<TileEntityBase, TeslaHandler[]>();
private static final Map<TileEntityBase, TileTeslaWrapper[]> TESLA_MAP = new HashMap<TileEntityBase, TileTeslaWrapper[]>();
@CapabilityInject(ITeslaConsumer.class)
public static Capability<ITeslaConsumer> 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];
}

View file

@ -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;
}

View file

@ -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