Removed ugly registry system, need to find a better alternative

This commit is contained in:
Raoul Van den Berge
2016-08-27 22:41:17 +02:00
parent 31fa44dd2d
commit f03c324521
10 changed files with 13 additions and 175 deletions

View File

@@ -1,55 +1,10 @@
package refinedstorage.api; package refinedstorage.api;
import net.minecraft.world.World;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.registry.INetworkRegistry;
import refinedstorage.api.network.registry.INetworkRegistryProvider;
import refinedstorage.api.solderer.ISoldererRegistry; import refinedstorage.api.solderer.ISoldererRegistry;
import java.util.HashMap;
import java.util.Map;
public final class RefinedStorageAPI { public final class RefinedStorageAPI {
/** /**
* The solderer registry, set in pre-initialization * The solderer registry, set in pre-initialization
*/ */
public static ISoldererRegistry SOLDERER_REGISTRY; public static ISoldererRegistry SOLDERER_REGISTRY;
/**
* The network registry provider, set in pre-initialization
*/
public static INetworkRegistryProvider NETWORK_REGISTRY_PROVIDER;
private static final Map<Integer, INetworkRegistry> NETWORK_REGISTRY = new HashMap<>();
public static INetworkRegistry getNetworkRegistry(World world) {
return getNetworkRegistry(world.provider.getDimension());
}
public static void removeNetworkRegistry(World world) {
NETWORK_REGISTRY.remove(world.provider.getDimension());
}
public static INetworkRegistry getNetworkRegistry(int dimension) {
if (!NETWORK_REGISTRY.containsKey(dimension)) {
NETWORK_REGISTRY.put(dimension, NETWORK_REGISTRY_PROVIDER.provide(dimension));
}
return NETWORK_REGISTRY.get(dimension);
}
public static INetworkMaster getNetwork(INetworkNode node) {
for (INetworkRegistry registry : NETWORK_REGISTRY.values()) {
for (INetworkMaster network : registry.getNetworks()) {
for (INetworkNode otherNode : network.getNodeGraph().all()) {
if (node.equals(otherNode)) {
return network;
}
}
}
}
return null;
}
} }

View File

@@ -1,41 +0,0 @@
package refinedstorage.api.network.registry;
import net.minecraft.util.math.BlockPos;
import refinedstorage.api.network.INetworkMaster;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
/**
* A registry of all Refined Storage networks on this server.
*/
public interface INetworkRegistry {
/**
* Adds a network to the registry.
*
* @param network The network
*/
void addNetwork(@Nonnull INetworkMaster network);
/**
* Removes a network from the registry.
*
* @param pos The position of the network
*/
void removeNetwork(@Nonnull BlockPos pos);
/**
* @return All the networks in this registry
*/
Collection<INetworkMaster> getNetworks();
/**
* Returns a network at a position.
*
* @param pos The position of the network
* @return The network
*/
@Nullable
INetworkMaster getNetwork(@Nonnull BlockPos pos);
}

View File

@@ -1,5 +0,0 @@
package refinedstorage.api.network.registry;
public interface INetworkRegistryProvider {
INetworkRegistry provide(int dimension);
}

View File

@@ -52,8 +52,8 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
while ((currentPos = toCheck.poll()) != null) { while ((currentPos = toCheck.poll()) != null) {
TileEntity tile = world.getTileEntity(currentPos); TileEntity tile = world.getTileEntity(currentPos);
if (tile instanceof TileController && !controller.getPos().equals(tile.getPos())) { if (tile instanceof TileController && !controller.getPos().equals(currentPos)) {
world.createExplosion(null, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), 4.5f, true); world.createExplosion(null, currentPos.getX(), currentPos.getY(), currentPos.getZ(), 3.5f, true);
} }
if (!(tile instanceof INetworkNode)) { if (!(tile instanceof INetworkNode)) {

View File

@@ -1,36 +0,0 @@
package refinedstorage.apiimpl.network.registry;
import net.minecraft.util.math.BlockPos;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.registry.INetworkRegistry;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class NetworkRegistry implements INetworkRegistry {
private Map<BlockPos, INetworkMaster> networks = new HashMap<>();
@Override
public void addNetwork(@Nonnull INetworkMaster network) {
networks.put(network.getPosition(), network);
}
@Override
public void removeNetwork(@Nonnull BlockPos pos) {
networks.remove(pos);
}
@Override
public Collection<INetworkMaster> getNetworks() {
return networks.values();
}
@Nullable
@Override
public INetworkMaster getNetwork(@Nonnull BlockPos pos) {
return networks.get(pos);
}
}

View File

@@ -1,11 +0,0 @@
package refinedstorage.apiimpl.network.registry;
import refinedstorage.api.network.registry.INetworkRegistry;
import refinedstorage.api.network.registry.INetworkRegistryProvider;
public class NetworkRegistryProvider implements INetworkRegistryProvider {
@Override
public INetworkRegistry provide(int dimension) {
return new NetworkRegistry();
}
}

View File

@@ -1,12 +0,0 @@
package refinedstorage.apiimpl.network.registry;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.Mod;
import refinedstorage.api.RefinedStorageAPI;
public class NetworkRegistryUnloader {
@Mod.EventHandler
public void onWorldUnload(WorldEvent.Unload e) {
RefinedStorageAPI.removeNetworkRegistry(e.getWorld());
}
}

View File

@@ -17,8 +17,6 @@ import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageItems;
import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.apiimpl.network.registry.NetworkRegistryProvider;
import refinedstorage.apiimpl.network.registry.NetworkRegistryUnloader;
import refinedstorage.apiimpl.solderer.*; import refinedstorage.apiimpl.solderer.*;
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.apiimpl.storage.item.ItemStorageNBT;
@@ -46,10 +44,6 @@ public class CommonProxy {
RefinedStorageAPI.SOLDERER_REGISTRY = new SoldererRegistry(); RefinedStorageAPI.SOLDERER_REGISTRY = new SoldererRegistry();
RefinedStorageAPI.NETWORK_REGISTRY_PROVIDER = new NetworkRegistryProvider();
MinecraftForge.EVENT_BUS.register(new NetworkRegistryUnloader());
int id = 0; int id = 0;
RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT);

View File

@@ -18,14 +18,12 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageBlocks;
import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingPatternContainer;
import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.network.*; import refinedstorage.api.network.*;
import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IFluidGridHandler;
import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.network.grid.IItemGridHandler;
import refinedstorage.api.network.registry.INetworkRegistry;
import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.CompareUtils;
import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IFluidStorage;
import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.storage.fluid.IGroupedFluidStorage;
@@ -186,8 +184,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
private IControllerEnergyIC2 energyEU; private IControllerEnergyIC2 energyEU;
private ControllerEnergyTesla energyTesla; private ControllerEnergyTesla energyTesla;
private boolean destroyed;
private int lastEnergyDisplay; private int lastEnergyDisplay;
private int lastEnergyComparator; private int lastEnergyComparator;
@@ -238,12 +234,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override @Override
public void update() { public void update() {
if (!worldObj.isRemote) { if (!worldObj.isRemote) {
INetworkRegistry registry = RefinedStorageAPI.getNetworkRegistry(worldObj);
if (!destroyed && registry.getNetwork(pos) == null) {
registry.addNetwork(this);
}
energyEU.update(); energyEU.update();
if (canRun()) { if (canRun()) {
@@ -370,14 +360,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
super.onChunkUnload(); super.onChunkUnload();
energyEU.onChunkUnload(); energyEU.onChunkUnload();
onDestroyed();
} }
public void onDestroyed() { public void onDestroyed() {
nodeGraph.disconnectAll(); nodeGraph.disconnectAll();
destroyed = true;
RefinedStorageAPI.getNetworkRegistry(worldObj).removeNetwork(pos);
} }
public IGroupedItemStorage getItemStorage() { public IGroupedItemStorage getItemStorage() {

View File

@@ -4,7 +4,6 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.NetworkUtils;
@@ -21,6 +20,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
private boolean active; private boolean active;
private boolean update; private boolean update;
private boolean connected; private boolean connected;
private INetworkMaster network;
protected boolean rebuildOnUpdateChange; protected boolean rebuildOnUpdateChange;
@@ -66,12 +66,18 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override @Override
public void onConnected(INetworkMaster network) { public void onConnected(INetworkMaster network) {
this.connected = true;
this.network = network;
onConnectionChange(network, true); onConnectionChange(network, true);
} }
@Override @Override
public void onDisconnected(INetworkMaster network) { public void onDisconnected(INetworkMaster network) {
onConnectionChange(network, false); onConnectionChange(network, false);
this.connected = false;
this.network = null;
} }
@Override @Override
@@ -86,7 +92,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override @Override
public INetworkMaster getNetwork() { public INetworkMaster getNetwork() {
return (worldObj != null && !worldObj.isRemote) ? RefinedStorageAPI.getNetwork(this) : null; return network;
} }
@Override @Override
@@ -101,7 +107,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override @Override
public boolean isConnected() { public boolean isConnected() {
return worldObj.isRemote ? connected : (getNetwork() != null); return connected;
} }
@Override @Override