mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 15:18:34 +01:00
Made batteries output by sneak-right-clicking and added tesla support for items
This commit is contained in:
parent
eeecb6c5cd
commit
c166c3752d
18 changed files with 309 additions and 66 deletions
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue