mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
98 lines
2.6 KiB
Java
98 lines
2.6 KiB
Java
package api.hbm.energy;
|
|
|
|
import com.hbm.packet.AuxParticlePacketNT;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
|
|
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
/**
|
|
* For anything that connects to power and can be transferred power to, the bottom-level interface.
|
|
* This is mean for TILE ENTITIES
|
|
* @author hbm
|
|
*/
|
|
public interface IEnergyConnector extends ILoadedTile {
|
|
|
|
/**
|
|
* Returns the amount of power that remains in the source after transfer
|
|
* @param power
|
|
* @return
|
|
*/
|
|
public long transferPower(long power);
|
|
|
|
/**
|
|
* Whether the given side can be connected to
|
|
* @param dir
|
|
* @return
|
|
*/
|
|
public default boolean canConnect(ForgeDirection dir) {
|
|
return dir != ForgeDirection.UNKNOWN;
|
|
}
|
|
|
|
/**
|
|
* The current power of either the machine or an entire network
|
|
* @return
|
|
*/
|
|
public long getPower();
|
|
|
|
/**
|
|
* The capacity of either the machine or an entire network
|
|
* @return
|
|
*/
|
|
public long getMaxPower();
|
|
|
|
public default long getTransferWeight() {
|
|
return Math.max(getMaxPower() - getPower(), 0);
|
|
}
|
|
|
|
/**
|
|
* Basic implementation of subscribing to a nearby power grid
|
|
* @param world
|
|
* @param x
|
|
* @param y
|
|
* @param z
|
|
*/
|
|
public default void trySubscribe(World world, int x, int y, int z, ForgeDirection dir) {
|
|
|
|
TileEntity te = world.getTileEntity(x, y, z);
|
|
boolean red = false;
|
|
|
|
if(te instanceof IEnergyConductor) {
|
|
IEnergyConductor con = (IEnergyConductor) te;
|
|
|
|
if(!con.canConnect(dir.getOpposite().getOpposite()))
|
|
return;
|
|
|
|
if(con.getPowerNet() != null && !con.getPowerNet().isSubscribed(this))
|
|
con.getPowerNet().subscribe(this);
|
|
|
|
if(con.getPowerNet() != null)
|
|
red = true;
|
|
}
|
|
|
|
if(particleDebug) {
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
data.setString("type", "vanillaExt");
|
|
data.setString("mode", red ? "reddust" : "bluedust");
|
|
PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x + world.rand.nextDouble(), y + world.rand.nextDouble(), z + world.rand.nextDouble()), new TargetPoint(world.provider.dimensionId, x + 0.5, y + 0.5, z + 0.5, 25));
|
|
}
|
|
}
|
|
|
|
public default void tryUnsubscribe(World world, int x, int y, int z) {
|
|
|
|
TileEntity te = world.getTileEntity(x, y, z);
|
|
|
|
if(te instanceof IEnergyConductor) {
|
|
IEnergyConductor con = (IEnergyConductor) te;
|
|
|
|
if(con.getPowerNet() != null && con.getPowerNet().isSubscribed(this))
|
|
con.getPowerNet().unsubscribe(this);
|
|
}
|
|
}
|
|
|
|
public static final boolean particleDebug = false;
|
|
}
|