ActuallyAdditions/src/main/java/de/ellpeck/actuallyadditions/mod/util/compat/TeslaUtil.java

78 lines
3 KiB
Java
Raw Normal View History

2016-06-17 14:00:52 +02:00
/*
* This file ("TeslaUtil.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.IEnergyHandler;
import cofh.api.energy.IEnergyProvider;
import cofh.api.energy.IEnergyReceiver;
import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase;
import net.darkhax.tesla.api.ITeslaConsumer;
import net.darkhax.tesla.api.ITeslaProducer;
import net.darkhax.tesla.capability.TeslaCapabilities;
2016-06-17 14:00:52 +02:00
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import java.util.HashMap;
import java.util.Map;
public final class TeslaUtil{
2016-06-17 23:50:38 +02:00
private static final Map<TileEntityBase, TeslaHandler[]> TESLA_MAP = new HashMap<TileEntityBase, TeslaHandler[]>();
2016-06-17 14:00:52 +02:00
public static <T> T getTeslaCapability(TileEntityBase tile, Capability<T> capability, EnumFacing facing){
boolean receive = tile instanceof IEnergyReceiver && capability == TeslaCapabilities.CAPABILITY_CONSUMER;
boolean provide = tile instanceof IEnergyProvider && capability == TeslaCapabilities.CAPABILITY_PRODUCER;
boolean hold = tile instanceof IEnergyHandler && capability == TeslaCapabilities.CAPABILITY_HOLDER;
2016-06-17 14:00:52 +02:00
if(receive || provide || hold){
return (T)getHandler(tile, facing);
}
else{
return null;
}
}
2016-06-17 23:50:38 +02:00
public static void doTeslaInteraction(TileEntity tile, TileEntity otherTile, EnumFacing side){
2016-06-17 14:00:52 +02:00
ITeslaConsumer handlerTo = null;
ITeslaProducer handlerFrom = null;
for(int i = 0; i < 2; i++){
if(handlerFrom == null && handlerTo == null){
handlerFrom = (i == 0 ? tile : otherTile).getCapability(TeslaCapabilities.CAPABILITY_PRODUCER, i == 0 ? side : side.getOpposite());
handlerTo = (i == 0 ? otherTile : tile).getCapability(TeslaCapabilities.CAPABILITY_CONSUMER, i == 0 ? side.getOpposite() : side);
2016-06-17 14:00:52 +02:00
}
}
if(handlerFrom != null && handlerTo != null){
2016-06-17 15:00:25 +02:00
long drain = handlerFrom.takePower(Long.MAX_VALUE, true);
2016-06-17 14:00:52 +02:00
if(drain > 0){
long filled = handlerTo.givePower(drain, false);
handlerFrom.takePower(filled, false);
}
}
}
private static TeslaHandler getHandler(TileEntityBase tile, EnumFacing facing){
TeslaHandler[] handlers = TESLA_MAP.get(tile);
if(handlers == null || handlers.length != 6){
handlers = new TeslaHandler[6];
TESLA_MAP.put(tile, handlers);
}
int side = facing.ordinal();
if(handlers[side] == null){
handlers[side] = new TeslaHandler(tile, facing);
}
return handlers[side];
}
}