Even more modularization
This commit is contained in:
parent
b2f20185e4
commit
f64ea42e43
14 changed files with 176 additions and 340 deletions
|
@ -13,7 +13,7 @@ import mekanism.common.EnergyNetwork;
|
|||
import mekanism.common.IMechanicalPipe;
|
||||
import mekanism.common.IUniversalCable;
|
||||
|
||||
public abstract class DynamicNetwork<T, A> implements ITransmitterNetwork
|
||||
public abstract class DynamicNetwork<T, A, N> implements ITransmitterNetwork<T, A, N>
|
||||
{
|
||||
public HashSet<T> transmitters = new HashSet<T>();
|
||||
|
||||
|
@ -30,6 +30,7 @@ public abstract class DynamicNetwork<T, A> implements ITransmitterNetwork
|
|||
transmitters.addAll(newTransmitters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeTransmitter(T transmitter)
|
||||
{
|
||||
transmitters.remove(transmitter);
|
||||
|
@ -40,6 +41,7 @@ public abstract class DynamicNetwork<T, A> implements ITransmitterNetwork
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void register()
|
||||
{
|
||||
try {
|
||||
|
@ -52,6 +54,7 @@ public abstract class DynamicNetwork<T, A> implements ITransmitterNetwork
|
|||
} catch(NoSuchElementException e) {}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregister()
|
||||
{
|
||||
transmitters.clear();
|
||||
|
@ -63,4 +66,19 @@ public abstract class DynamicNetwork<T, A> implements ITransmitterNetwork
|
|||
{
|
||||
return transmitters.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
if(!fixed)
|
||||
{
|
||||
++ticksSinceCreate;
|
||||
|
||||
if(ticksSinceCreate > 1200)
|
||||
{
|
||||
ticksSinceCreate = 0;
|
||||
fixMessedUpNetwork(transmitters.iterator().next());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ import net.minecraftforge.event.ForgeSubscribe;
|
|||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
|
||||
public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
||||
public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor, GasNetwork>
|
||||
{
|
||||
public GasNetwork(IPressurizedTube... varPipes)
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
|
||||
public int emit(int gasToSend, EnumGas transferType, TileEntity emitter)
|
||||
{
|
||||
List availableAcceptors = Arrays.asList(getGasAcceptors(transferType).toArray());
|
||||
List availableAcceptors = Arrays.asList(getAcceptors(transferType).toArray());
|
||||
|
||||
Collections.shuffle(availableAcceptors);
|
||||
|
||||
|
@ -84,8 +84,10 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
return gasToSend;
|
||||
}
|
||||
|
||||
public Set<IGasAcceptor> getGasAcceptors(EnumGas transferType)
|
||||
@Override
|
||||
public Set<IGasAcceptor> getAcceptors(Object... data)
|
||||
{
|
||||
EnumGas transferType = (EnumGas)data[0];
|
||||
Set<IGasAcceptor> toReturn = new HashSet<IGasAcceptor>();
|
||||
|
||||
for(IGasAcceptor acceptor : possibleAcceptors)
|
||||
|
@ -102,6 +104,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
return toReturn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh()
|
||||
{
|
||||
Set<IPressurizedTube> iterTubes = (Set<IPressurizedTube>) transmitters.clone();
|
||||
|
@ -139,6 +142,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void merge(GasNetwork network)
|
||||
{
|
||||
if(network != null && network != this)
|
||||
|
@ -151,6 +155,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void split(IPressurizedTube splitPoint)
|
||||
{
|
||||
if(splitPoint instanceof TileEntity)
|
||||
|
@ -215,6 +220,7 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fixMessedUpNetwork(IPressurizedTube tube)
|
||||
{
|
||||
if(tube instanceof TileEntity)
|
||||
|
@ -304,46 +310,9 @@ public class GasNetwork extends DynamicNetwork<IPressurizedTube, IGasAcceptor>
|
|||
}
|
||||
}
|
||||
|
||||
public static class NetworkLoader
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onChunkLoad(ChunkEvent.Load event)
|
||||
{
|
||||
if(event.getChunk() != null)
|
||||
{
|
||||
for(Object obj : event.getChunk().chunkTileEntityMap.values())
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
TileEntity tileEntity = (TileEntity)obj;
|
||||
|
||||
if(tileEntity instanceof IPressurizedTube)
|
||||
{
|
||||
((IPressurizedTube)tileEntity).refreshNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "[GasNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors.";
|
||||
}
|
||||
|
||||
public void tick()
|
||||
{
|
||||
//Fix weird behaviour periodically.
|
||||
if(!fixed)
|
||||
{
|
||||
++ticksSinceCreate;
|
||||
if(ticksSinceCreate > 1200)
|
||||
{
|
||||
ticksSinceCreate = 0;
|
||||
fixMessedUpNetwork(transmitters.iterator().next());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import java.util.Set;
|
|||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
|
||||
/**
|
||||
* A handy class containing several utilities for efficient gas transfer.
|
||||
|
@ -14,23 +13,6 @@ import net.minecraftforge.common.MinecraftForge;
|
|||
*/
|
||||
public final class GasTransmission
|
||||
{
|
||||
/** Do not mess with this, used to only register NetworkLoader once. */
|
||||
private static boolean networkLoader_loaded = false;
|
||||
|
||||
/**
|
||||
* Call this method in your mod's init phase in order for the GasNetwork to function properly.
|
||||
*/
|
||||
public static void register()
|
||||
{
|
||||
if(!networkLoader_loaded)
|
||||
{
|
||||
MinecraftForge.EVENT_BUS.register(new GasNetwork.NetworkLoader());
|
||||
networkLoader_loaded = true;
|
||||
|
||||
System.out.println("[Mekanism] Successfully loaded gas transmission NetworkLoader.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all the tubes around a tile entity.
|
||||
* @param tileEntity - center tile entity
|
||||
|
|
|
@ -2,7 +2,7 @@ package mekanism.api;
|
|||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public interface IPressurizedTube
|
||||
public interface IPressurizedTube extends ITransmitter<GasNetwork>
|
||||
{
|
||||
/**
|
||||
* Whether or not this tube can transfer gas.
|
||||
|
@ -22,41 +22,4 @@ public interface IPressurizedTube
|
|||
* @param type - the type of gas transferred
|
||||
*/
|
||||
public void onTransfer(EnumGas type);
|
||||
|
||||
/**
|
||||
* Gets the GasNetwork currently in use by this tube segment.
|
||||
* @return GasNetwork this cable is using
|
||||
*/
|
||||
public GasNetwork getNetwork();
|
||||
|
||||
/**
|
||||
* Gets the GasNetwork currently in use by this tube segment.
|
||||
* @param createIfNull - If true, the tube will try and connect to an
|
||||
* adjacent network, merging several if necessary, or creating a new one
|
||||
* if none is available
|
||||
* @return GasNetwork this cable is using
|
||||
*/
|
||||
public GasNetwork getNetwork(boolean createIfNull);
|
||||
|
||||
/**
|
||||
* Sets this cable segment's GasNetwork to a new value.
|
||||
* @param network - GasNetwork to set to
|
||||
*/
|
||||
public void setNetwork(GasNetwork network);
|
||||
|
||||
/**
|
||||
* Refreshes the tube's GasNetwork.
|
||||
*/
|
||||
public void refreshNetwork();
|
||||
|
||||
/**
|
||||
* Remove a tube from its network.
|
||||
*/
|
||||
public void removeFromNetwork();
|
||||
|
||||
/**
|
||||
* Call this if you're worried a tube's network is messed up and you want
|
||||
* it to try and fix itself.
|
||||
*/
|
||||
public void fixNetwork();
|
||||
}
|
||||
|
|
41
common/mekanism/api/ITransmitter.java
Normal file
41
common/mekanism/api/ITransmitter.java
Normal file
|
@ -0,0 +1,41 @@
|
|||
package mekanism.api;
|
||||
|
||||
public interface ITransmitter<N>
|
||||
{
|
||||
/**
|
||||
* Gets the network currently in use by this transmitter segment.
|
||||
* @return network this transmitter is using
|
||||
*/
|
||||
public N getNetwork();
|
||||
|
||||
/**
|
||||
* Gets the network currently in use by this transmitter segment.
|
||||
* @param createIfNull - If true, the transmitter will try and connect to an
|
||||
* adjacent network, merging several if necessary, or creating a new one
|
||||
* if none is available
|
||||
* @return network this transmitter is using
|
||||
*/
|
||||
public N getNetwork(boolean createIfNull);
|
||||
|
||||
/**
|
||||
* Sets this transmitter segment's network to a new value.
|
||||
* @param network - network to set to
|
||||
*/
|
||||
public void setNetwork(N network);
|
||||
|
||||
/**
|
||||
* Refreshes the transmitter's network.
|
||||
*/
|
||||
public void refreshNetwork();
|
||||
|
||||
/**
|
||||
* Remove this transmitter from its network.
|
||||
*/
|
||||
public void removeFromNetwork();
|
||||
|
||||
/**
|
||||
* Call this if you're worried a transmitter's network is messed up and you want
|
||||
* it to try and fix itself.
|
||||
*/
|
||||
public void fixNetwork();
|
||||
}
|
|
@ -1,8 +1,28 @@
|
|||
package mekanism.api;
|
||||
|
||||
public interface ITransmitterNetwork
|
||||
import java.util.Set;
|
||||
|
||||
import mekanism.common.IUniversalCable;
|
||||
|
||||
public interface ITransmitterNetwork<T, A, N>
|
||||
{
|
||||
public void tick();
|
||||
|
||||
public int getSize();
|
||||
|
||||
public Set<A> getAcceptors(Object... data);
|
||||
|
||||
public void removeTransmitter(T transmitter);
|
||||
|
||||
public void refresh();
|
||||
|
||||
public void split(T splitPoint);
|
||||
|
||||
public void merge(N network);
|
||||
|
||||
public void fixMessedUpNetwork(T transmitter);
|
||||
|
||||
public void register();
|
||||
|
||||
public void deregister();
|
||||
}
|
||||
|
|
|
@ -4,6 +4,10 @@ import java.util.EnumSet;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.ForgeSubscribe;
|
||||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
import cpw.mods.fml.common.ITickHandler;
|
||||
import cpw.mods.fml.common.TickType;
|
||||
import cpw.mods.fml.common.registry.TickRegistry;
|
||||
|
@ -12,6 +16,8 @@ import cpw.mods.fml.relauncher.Side;
|
|||
public class TransmitterNetworkRegistry implements ITickHandler
|
||||
{
|
||||
private static TransmitterNetworkRegistry INSTANCE = new TransmitterNetworkRegistry();
|
||||
private static boolean loaderRegistered = false;
|
||||
|
||||
private HashSet<ITransmitterNetwork> networks = new HashSet<ITransmitterNetwork>();
|
||||
|
||||
public TransmitterNetworkRegistry()
|
||||
|
@ -19,6 +25,16 @@ public class TransmitterNetworkRegistry implements ITickHandler
|
|||
TickRegistry.registerTickHandler(this, Side.SERVER);
|
||||
}
|
||||
|
||||
public static void initiate()
|
||||
{
|
||||
if(!loaderRegistered)
|
||||
{
|
||||
loaderRegistered = true;
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(getInstance());
|
||||
}
|
||||
}
|
||||
|
||||
public static TransmitterNetworkRegistry getInstance()
|
||||
{
|
||||
return INSTANCE;
|
||||
|
@ -85,4 +101,27 @@ public class TransmitterNetworkRegistry implements ITickHandler
|
|||
{
|
||||
return "Network Registry:\n" + networks;
|
||||
}
|
||||
|
||||
public static class NetworkLoader
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onChunkLoad(ChunkEvent.Load event)
|
||||
{
|
||||
if(event.getChunk() != null)
|
||||
{
|
||||
for(Object obj : event.getChunk().chunkTileEntityMap.values())
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
TileEntity tileEntity = (TileEntity)obj;
|
||||
|
||||
if(tileEntity instanceof ITransmitter)
|
||||
{
|
||||
((ITransmitter)tileEntity).refreshNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ import buildcraft.api.power.PowerHandler.PowerReceiver;
|
|||
import buildcraft.api.power.PowerHandler.Type;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
|
||||
public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
||||
public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity, EnergyNetwork>
|
||||
{
|
||||
private double lastPowerScale = 0;
|
||||
private double joulesTransmitted = 0;
|
||||
|
@ -63,7 +63,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
{
|
||||
double totalNeeded = 0;
|
||||
|
||||
for(TileEntity acceptor : getEnergyAcceptors())
|
||||
for(TileEntity acceptor : getAcceptors())
|
||||
{
|
||||
if(!ignored.contains(acceptor))
|
||||
{
|
||||
|
@ -94,7 +94,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
double energyAvailable = energyToSend;
|
||||
double sent;
|
||||
|
||||
List availableAcceptors = Arrays.asList(getEnergyAcceptors().toArray());
|
||||
List availableAcceptors = Arrays.asList(getAcceptors().toArray());
|
||||
|
||||
Collections.shuffle(availableAcceptors);
|
||||
|
||||
|
@ -146,7 +146,8 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
return energyToSend;
|
||||
}
|
||||
|
||||
public Set<TileEntity> getEnergyAcceptors()
|
||||
@Override
|
||||
public Set<TileEntity> getAcceptors(Object... data)
|
||||
{
|
||||
Set<TileEntity> toReturn = new HashSet<TileEntity>();
|
||||
|
||||
|
@ -197,6 +198,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
return toReturn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh()
|
||||
{
|
||||
Set<IUniversalCable> iterCables = (Set<IUniversalCable>) transmitters.clone();
|
||||
|
@ -242,6 +244,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void merge(EnergyNetwork network)
|
||||
{
|
||||
if(network != null && network != this)
|
||||
|
@ -254,6 +257,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void split(IUniversalCable splitPoint)
|
||||
{
|
||||
if(splitPoint instanceof TileEntity)
|
||||
|
@ -318,6 +322,7 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fixMessedUpNetwork(IUniversalCable cable)
|
||||
{
|
||||
if(cable instanceof TileEntity)
|
||||
|
@ -407,51 +412,21 @@ public class EnergyNetwork extends DynamicNetwork<IUniversalCable, TileEntity>
|
|||
}
|
||||
}
|
||||
|
||||
public static class NetworkLoader
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onChunkLoad(ChunkEvent.Load event)
|
||||
{
|
||||
if(event.getChunk() != null)
|
||||
{
|
||||
for(Object obj : event.getChunk().chunkTileEntityMap.values())
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
TileEntity tileEntity = (TileEntity)obj;
|
||||
|
||||
if(tileEntity instanceof IUniversalCable)
|
||||
{
|
||||
((IUniversalCable)tileEntity).refreshNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "[EnergyNetwork] " + transmitters.size() + " transmitters, " + possibleAcceptors.size() + " acceptors.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick()
|
||||
{
|
||||
clearJoulesTransmitted();
|
||||
|
||||
//Fix weird behaviour periodically.
|
||||
if(!fixed)
|
||||
{
|
||||
++ticksSinceCreate;
|
||||
if(ticksSinceCreate > 1200)
|
||||
{
|
||||
ticksSinceCreate = 0;
|
||||
fixMessedUpNetwork(transmitters.iterator().next());
|
||||
}
|
||||
}
|
||||
super.tick();
|
||||
|
||||
double currentPowerScale = getPowerScale();
|
||||
|
||||
if(currentPowerScale != lastPowerScale && FMLCommonHandler.instance().getEffectiveSide().isServer())
|
||||
{
|
||||
lastPowerScale = currentPowerScale;
|
||||
|
|
|
@ -3,30 +3,23 @@ package mekanism.common;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Set;
|
||||
|
||||
import mekanism.api.DynamicNetwork;
|
||||
import mekanism.api.ITransmitterNetwork;
|
||||
import mekanism.api.Object3D;
|
||||
import mekanism.api.TransmitterNetworkRegistry;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.Event;
|
||||
import net.minecraftforge.event.ForgeSubscribe;
|
||||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
|
||||
public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
||||
public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler, FluidNetwork>
|
||||
{
|
||||
public FluidNetwork(IMechanicalPipe... varPipes)
|
||||
{
|
||||
|
@ -51,7 +44,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
|
||||
public int emit(FluidStack fluidToSend, boolean doTransfer, TileEntity emitter)
|
||||
{
|
||||
List availableAcceptors = Arrays.asList(getFluidAcceptors(fluidToSend).toArray());
|
||||
List availableAcceptors = Arrays.asList(getAcceptors(fluidToSend).toArray());
|
||||
|
||||
Collections.shuffle(availableAcceptors);
|
||||
|
||||
|
@ -91,8 +84,10 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
return fluidSent;
|
||||
}
|
||||
|
||||
public Set<IFluidHandler> getFluidAcceptors(FluidStack fluidToSend)
|
||||
@Override
|
||||
public Set<IFluidHandler> getAcceptors(Object... data)
|
||||
{
|
||||
FluidStack fluidToSend = (FluidStack)data[0];
|
||||
Set<IFluidHandler> toReturn = new HashSet<IFluidHandler>();
|
||||
|
||||
for(IFluidHandler acceptor : possibleAcceptors)
|
||||
|
@ -106,6 +101,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
return toReturn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh()
|
||||
{
|
||||
Set<IMechanicalPipe> iterPipes = (Set<IMechanicalPipe>) transmitters.clone();
|
||||
|
@ -143,6 +139,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void merge(FluidNetwork network)
|
||||
{
|
||||
if(network != null && network != this)
|
||||
|
@ -155,6 +152,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void split(IMechanicalPipe splitPoint)
|
||||
{
|
||||
if(splitPoint instanceof TileEntity)
|
||||
|
@ -219,6 +217,7 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fixMessedUpNetwork(IMechanicalPipe pipe)
|
||||
{
|
||||
if(pipe instanceof TileEntity)
|
||||
|
@ -308,43 +307,6 @@ public class FluidNetwork extends DynamicNetwork<IMechanicalPipe, IFluidHandler>
|
|||
}
|
||||
}
|
||||
|
||||
public static class NetworkLoader
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onChunkLoad(ChunkEvent.Load event)
|
||||
{
|
||||
if(event.getChunk() != null)
|
||||
{
|
||||
for(Object obj : event.getChunk().chunkTileEntityMap.values())
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
TileEntity tileEntity = (TileEntity)obj;
|
||||
|
||||
if(tileEntity instanceof IMechanicalPipe)
|
||||
{
|
||||
((IMechanicalPipe)tileEntity).refreshNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tick()
|
||||
{
|
||||
//Fix weird behaviour periodically.
|
||||
if(!fixed)
|
||||
{
|
||||
++ticksSinceCreate;
|
||||
if(ticksSinceCreate > 1200)
|
||||
{
|
||||
ticksSinceCreate = 0;
|
||||
fixMessedUpNetwork(transmitters.iterator().next());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
|
|
@ -1,41 +1,8 @@
|
|||
package mekanism.common;
|
||||
|
||||
public interface ILogisticalTransporter
|
||||
import mekanism.api.ITransmitter;
|
||||
|
||||
public interface ILogisticalTransporter extends ITransmitter<InventoryNetwork>
|
||||
{
|
||||
/**
|
||||
* Gets the InventoryNetwork currently in use by this transporter segment.
|
||||
* @return InventoryNetwork this transporter is using
|
||||
*/
|
||||
public InventoryNetwork getNetwork();
|
||||
|
||||
/**
|
||||
* Gets the InventoryNetwork currently in use by this transporter segment.
|
||||
* @param createIfNull - If true, the transporter will try and connect to an
|
||||
* adjacent network, merging several if necessary, or creating a new one
|
||||
* if none is available
|
||||
* @return InventoryNetwork this transporter is using
|
||||
*/
|
||||
public InventoryNetwork getNetwork(boolean createIfNull);
|
||||
|
||||
/**
|
||||
* Sets this transporter segment's InventoryNetwork to a new value.
|
||||
* @param network - InventoryNetwork to set to
|
||||
*/
|
||||
public void setNetwork(InventoryNetwork network);
|
||||
|
||||
/**
|
||||
* Refreshes the transporter's InventoryNetwork.
|
||||
*/
|
||||
public void refreshNetwork();
|
||||
|
||||
/**
|
||||
* Remove a transporter from its network.
|
||||
*/
|
||||
public void removeFromNetwork();
|
||||
|
||||
/**
|
||||
* Call this if you're worried a transporter's network is messed up and you want
|
||||
* it to try and fix itself.
|
||||
*/
|
||||
public void fixNetwork();
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package mekanism.common;
|
||||
|
||||
import mekanism.api.ITransmitter;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
|
||||
/**
|
||||
|
@ -7,48 +8,11 @@ import net.minecraftforge.fluids.FluidStack;
|
|||
* @author AidanBrady
|
||||
*
|
||||
*/
|
||||
public interface IMechanicalPipe
|
||||
public interface IMechanicalPipe extends ITransmitter<FluidNetwork>
|
||||
{
|
||||
/**
|
||||
* Called when fluid is transferred through this pipe.
|
||||
* @param fluidStack - the fluid transferred
|
||||
*/
|
||||
public void onTransfer(FluidStack fluidStack);
|
||||
|
||||
/**
|
||||
* Gets the FluidNetwork currently in use by this pipe segment.
|
||||
* @return FluidNetwork this pipe is using
|
||||
*/
|
||||
public FluidNetwork getNetwork();
|
||||
|
||||
/**
|
||||
* Gets the FluidNetwork currently in use by this pipe segment.
|
||||
* @param createIfNull - If true, the pipe will try and connect to an
|
||||
* adjacent network, merging several if necessary, or creating a new one
|
||||
* if none is available
|
||||
* @return FluidNetwork this pipe is using
|
||||
*/
|
||||
public FluidNetwork getNetwork(boolean createIfNull);
|
||||
|
||||
/**
|
||||
* Sets this pipe segment's FluidNetwork to a new value.
|
||||
* @param network - FluidNetwork to set to
|
||||
*/
|
||||
public void setNetwork(FluidNetwork network);
|
||||
|
||||
/**
|
||||
* Refreshes the pipe's FluidNetwork.
|
||||
*/
|
||||
public void refreshNetwork();
|
||||
|
||||
/**
|
||||
* Remove a pipe from its network.
|
||||
*/
|
||||
public void removeFromNetwork();
|
||||
|
||||
/**
|
||||
* Call this if you're worried a pipe's network is messed up and you want
|
||||
* it to try and fix itself.
|
||||
*/
|
||||
public void fixNetwork();
|
||||
}
|
||||
|
|
|
@ -1,50 +1,14 @@
|
|||
package mekanism.common;
|
||||
|
||||
import mekanism.api.ITransmitter;
|
||||
|
||||
/**
|
||||
* Implement this in your TileEntity class if the block can transfer energy as a Universal Cable.
|
||||
* @author AidanBrady
|
||||
*
|
||||
*/
|
||||
public interface IUniversalCable
|
||||
public interface IUniversalCable extends ITransmitter<EnergyNetwork>
|
||||
{
|
||||
/**
|
||||
* Gets the EnergyNetwork currently in use by this cable segment.
|
||||
* Will try to connect to adjacent networks or create a new one
|
||||
* @return EnergyNetwork this cable is using
|
||||
*/
|
||||
public EnergyNetwork getNetwork();
|
||||
|
||||
/**
|
||||
* Gets the EnergyNetwork currently in use by this cable segment.
|
||||
* @param createIfNull - If true, the cable will try and connect to an
|
||||
* adjacent network, merging several if necessary, or creating a new one
|
||||
* if none is available
|
||||
* @return EnergyNetwork this cable is using
|
||||
*/
|
||||
public EnergyNetwork getNetwork(boolean createIfNull);
|
||||
|
||||
/**
|
||||
* Sets this cable segment's EnergyNetwork to a new value.
|
||||
* @param network - EnergyNetwork to set to
|
||||
*/
|
||||
public void setNetwork(EnergyNetwork network);
|
||||
|
||||
/**
|
||||
* Refreshes the cable's EnergyNetwork.
|
||||
*/
|
||||
public void refreshNetwork();
|
||||
|
||||
/**
|
||||
* Remove a cable from its network.
|
||||
*/
|
||||
public void removeFromNetwork();
|
||||
|
||||
/**
|
||||
* Call this if you're worried a cable's network is messed up and you want
|
||||
* it to try and fix itself.
|
||||
*/
|
||||
public void fixNetwork();
|
||||
|
||||
/**
|
||||
* Sets a Universal Cable's energy scale to a new value.
|
||||
* @param energyScale - energy scale to set
|
||||
|
|
|
@ -21,7 +21,7 @@ import net.minecraftforge.common.ForgeDirection;
|
|||
import net.minecraftforge.event.ForgeSubscribe;
|
||||
import net.minecraftforge.event.world.ChunkEvent;
|
||||
|
||||
public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IInventory>
|
||||
public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IInventory, InventoryNetwork>
|
||||
{
|
||||
public InventoryNetwork(ILogisticalTransporter... varTransporters)
|
||||
{
|
||||
|
@ -44,6 +44,13 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
|
|||
register();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IInventory> getAcceptors(Object... data)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh()
|
||||
{
|
||||
Set<ILogisticalTransporter> iterPipes = (Set<ILogisticalTransporter>)transmitters.clone();
|
||||
|
@ -81,6 +88,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void merge(InventoryNetwork network)
|
||||
{
|
||||
if(network != null && network != this)
|
||||
|
@ -93,6 +101,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void split(ILogisticalTransporter splitPoint)
|
||||
{
|
||||
if(splitPoint instanceof TileEntity)
|
||||
|
@ -158,6 +167,7 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fixMessedUpNetwork(ILogisticalTransporter pipe)
|
||||
{
|
||||
if(pipe instanceof TileEntity)
|
||||
|
@ -234,43 +244,6 @@ public class InventoryNetwork extends DynamicNetwork<ILogisticalTransporter, IIn
|
|||
}
|
||||
}
|
||||
|
||||
public static class NetworkLoader
|
||||
{
|
||||
@ForgeSubscribe
|
||||
public void onChunkLoad(ChunkEvent.Load event)
|
||||
{
|
||||
if(event.getChunk() != null)
|
||||
{
|
||||
for(Object obj : event.getChunk().chunkTileEntityMap.values())
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
TileEntity tileEntity = (TileEntity)obj;
|
||||
|
||||
if(tileEntity instanceof ILogisticalTransporter)
|
||||
{
|
||||
((ILogisticalTransporter)tileEntity).refreshNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void tick()
|
||||
{
|
||||
//Fix weird behaviour periodically.
|
||||
if(!fixed)
|
||||
{
|
||||
++ticksSinceCreate;
|
||||
if(ticksSinceCreate > 1200)
|
||||
{
|
||||
ticksSinceCreate = 0;
|
||||
fixMessedUpNetwork(transmitters.iterator().next());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
|
|
@ -16,6 +16,7 @@ import mekanism.api.InfuseRegistry;
|
|||
import mekanism.api.InfuseType;
|
||||
import mekanism.api.InfusionInput;
|
||||
import mekanism.api.Object3D;
|
||||
import mekanism.api.TransmitterNetworkRegistry;
|
||||
import mekanism.client.SoundHandler;
|
||||
import mekanism.common.EnergyNetwork.EnergyTransferEvent;
|
||||
import mekanism.common.FluidNetwork.FluidTransferEvent;
|
||||
|
@ -1168,11 +1169,9 @@ public class Mekanism
|
|||
//Register to receive subscribed events
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
MinecraftForge.EVENT_BUS.register(new IC2EnergyHandler());
|
||||
MinecraftForge.EVENT_BUS.register(new EnergyNetwork.NetworkLoader());
|
||||
MinecraftForge.EVENT_BUS.register(new FluidNetwork.NetworkLoader());
|
||||
|
||||
//Register with GasTransmission
|
||||
GasTransmission.register();
|
||||
//Register with TransmitterNetworkRegistry
|
||||
TransmitterNetworkRegistry.initiate();
|
||||
|
||||
//Load configuration
|
||||
proxy.loadConfiguration();
|
||||
|
|
Loading…
Reference in a new issue