Reworked storage network code, should fix weird machine disconnection issues

This commit is contained in:
Raoul Van den Berge
2016-08-26 19:37:37 +02:00
parent 528e3fcfe0
commit 6fe92e1b6c
28 changed files with 259 additions and 90 deletions

View File

@@ -1,10 +1,55 @@
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 java.util.HashMap;
import java.util.Map;
public final class RefinedStorageAPI {
/**
* The solderer registry, set in pre-initialization
*/
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

@@ -0,0 +1,41 @@
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

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

View File

@@ -0,0 +1,39 @@
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);
System.out.println("Added " + network.getPosition());
}
@Override
public void removeNetwork(@Nonnull BlockPos pos) {
networks.remove(pos);
System.out.println("Removed " + pos);
}
@Override
public Collection<INetworkMaster> getNetworks() {
return networks.values();
}
@Nullable
@Override
public INetworkMaster getNetwork(@Nonnull BlockPos pos) {
return networks.get(pos);
}
}

View File

@@ -0,0 +1,11 @@
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

@@ -0,0 +1,13 @@
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) {
System.out.println("Unloaded " + e.getWorld().provider.getDimension());
RefinedStorageAPI.removeNetworkRegistry(e.getWorld());
}
}

View File

@@ -106,7 +106,7 @@ public class BlockController extends BlockBase {
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state) {
if (!world.isRemote) {
((TileController) world.getTileEntity(pos)).getNodeGraph().disconnectAll();
((TileController) world.getTileEntity(pos)).onDestroyed();
}
super.breakBlock(world, pos, state);

View File

@@ -9,7 +9,6 @@ import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.oredict.OreDictionary;
@@ -18,6 +17,8 @@ import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageItems;
import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.apiimpl.network.registry.NetworkRegistryProvider;
import refinedstorage.apiimpl.network.registry.NetworkRegistryUnloader;
import refinedstorage.apiimpl.solderer.*;
import refinedstorage.apiimpl.storage.item.ItemStorageNBT;
import refinedstorage.block.*;
@@ -44,6 +45,10 @@ public class CommonProxy {
RefinedStorageAPI.SOLDERER_REGISTRY = new SoldererRegistry();
RefinedStorageAPI.NETWORK_REGISTRY_PROVIDER = new NetworkRegistryProvider();
MinecraftForge.EVENT_BUS.register(new NetworkRegistryUnloader());
int id = 0;
RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT);
@@ -65,7 +70,7 @@ public class CommonProxy {
RefinedStorage.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderClear.class, MessageProcessingPatternEncoderClear.class, id++, Side.SERVER);
RefinedStorage.INSTANCE.network.registerMessage(MessageGridFilterUpdate.class, MessageGridFilterUpdate.class, id++, Side.SERVER);
NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());
net.minecraftforge.fml.common.network.NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());
MinecraftForge.EVENT_BUS.register(new ContainerListener());

View File

@@ -236,4 +236,16 @@ public abstract class TileBase extends TileEntity implements ITickable {
return handler;
}
@Override
public boolean equals(Object o) {
return o instanceof TileBase && ((TileBase) o).getPos().equals(pos) && ((TileBase) o).getWorld().provider.getDimension() == worldObj.provider.getDimension();
}
@Override
public int hashCode() {
int result = pos.hashCode();
result = 31 * result + worldObj.provider.getDimension();
return result;
}
}

View File

@@ -76,7 +76,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
BlockPos front = pos.offset(getDirection());
if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) {
ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare);
ItemStack took = getNetwork().extractItem(itemFilters.getStackInSlot(0), 1, compare);
if (took != null) {
scheduler.resetSchedule();
@@ -88,7 +88,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
ItemStack craft = itemFilters.getStackInSlot(0);
if (scheduler.canSchedule(compare, craft)) {
scheduler.schedule(network, compare, craft);
scheduler.schedule(getNetwork(), compare, craft);
}
}
}
@@ -101,7 +101,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I
Block block = stack.getFluid().getBlock();
if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) {
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
FluidStack took = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
if (took != null) {
IBlockState state = block.getDefaultState();

View File

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

View File

@@ -21,8 +21,8 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer {
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (network != null) {
network.rebuildPatterns();
if (getNetwork() != null) {
getNetwork().rebuildPatterns();
}
}
};

View File

@@ -14,8 +14,8 @@ public class TileCraftingMonitor extends TileNode {
public static final TileDataParameter<List<ClientCraftingTask>> TASKS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ArrayList<>(), new ITileDataProducer<List<ClientCraftingTask>, TileCraftingMonitor>() {
@Override
public List<ClientCraftingTask> getValue(TileCraftingMonitor tile) {
if (tile.connected) {
List<ClientCraftingTask> tasks = tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask(
if (tile.isConnected()) {
List<ClientCraftingTask> tasks = tile.getNetwork().getCraftingTasks().stream().map(t -> new ClientCraftingTask(
t.getInfo(),
t.getPattern().getOutputs()
)).collect(Collectors.toList());

View File

@@ -85,10 +85,10 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
for (ItemStack drop : drops) {
// We check if the controller isn't null here because when a destructor faces a node and removes it
// it will essentially remove this block itself from the network without knowing
if (network == null) {
if (getNetwork() == null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop);
} else {
ItemStack remainder = network.insertItem(drop, drop.stackSize, false);
ItemStack remainder = getNetwork().insertItem(drop, drop.stackSize, false);
if (remainder != null) {
InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder);
@@ -113,10 +113,10 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && getNetwork().insertFluid(stack, stack.amount, true) == null) {
FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drained, drained.amount, false);
getNetwork().insertFluid(drained, drained.amount, false);
}
}
}

View File

@@ -106,7 +106,7 @@ public class TileDetector extends TileNode implements IComparable, IType {
ItemStack slot = itemFilters.getStackInSlot(0);
if (slot != null) {
ItemStack stack = network.getItemStorage().get(slot, compare);
ItemStack stack = getNetwork().getItemStorage().get(slot, compare);
powered = isPowered(stack == null ? null : stack.stackSize);
} else {
@@ -116,7 +116,7 @@ public class TileDetector extends TileNode implements IComparable, IType {
FluidStack slot = fluidFilters.getFluids()[0];
if (slot != null) {
FluidStack stack = network.getFluidStorage().get(slot, compare);
FluidStack stack = getNetwork().getFluidStorage().get(slot, compare);
powered = isPowered(stack == null ? null : stack.amount);
} else {

View File

@@ -114,9 +114,9 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
}
}
if (network != null) {
network.getItemStorage().rebuild();
network.getFluidStorage().rebuild();
if (getNetwork() != null) {
getNetwork().getItemStorage().rebuild();
getNetwork().getFluidStorage().rebuild();
}
}
}

View File

@@ -66,7 +66,7 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
ItemStack slot = itemFilters.getStackInSlot(i);
if (slot != null) {
ItemStack took = network.extractItem(slot, size, compare);
ItemStack took = getNetwork().extractItem(slot, size, compare);
if (took != null) {
scheduler.resetSchedule();
@@ -74,11 +74,11 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false);
if (remainder != null) {
network.insertItem(remainder, remainder.stackSize, false);
getNetwork().insertItem(remainder, remainder.stackSize, false);
}
} else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
if (scheduler.canSchedule(compare, slot)) {
scheduler.schedule(network, compare, slot);
scheduler.schedule(getNetwork(), compare, slot);
}
}
}
@@ -90,13 +90,13 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp
if (handler != null) {
for (FluidStack stack : fluidFilters.getFluids()) {
if (stack != null) {
FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
FluidStack took = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
if (took != null) {
int remainder = Fluid.BUCKET_VOLUME - handler.fill(took, true);
if (remainder > 0) {
network.insertFluid(took, remainder, false);
getNetwork().insertFluid(took, remainder, false);
}
}
}

View File

@@ -103,7 +103,7 @@ public class TileFluidInterface extends TileNode implements IComparable {
FluidStack drained = tankIn.drainInternal(Fluid.BUCKET_VOLUME, true);
if (drained != null) {
FluidStack remainder = network.insertFluid(drained, drained.amount, false);
FluidStack remainder = getNetwork().insertFluid(drained, drained.amount, false);
if (remainder != null) {
tankIn.fillInternal(remainder, true);
@@ -116,16 +116,16 @@ public class TileFluidInterface extends TileNode implements IComparable {
FluidStack remainder = tankOut.drainInternal(Fluid.BUCKET_VOLUME, true);
if (remainder != null) {
network.insertFluid(remainder, remainder.amount, false);
getNetwork().insertFluid(remainder, remainder.amount, false);
}
} else if (stack != null) {
FluidStack result = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
FluidStack result = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare);
if (result != null) {
int remainder = Fluid.BUCKET_VOLUME - tankOut.fillInternal(result, true);
if (remainder > 0) {
network.insertFluid(stack, remainder, false);
getNetwork().insertFluid(stack, remainder, false);
}
}
}

View File

@@ -93,8 +93,8 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider,
if (storage == null && storageTag != null) {
storage = new FluidStorage();
if (network != null) {
network.getFluidStorage().rebuild();
if (getNetwork() != null) {
getNetwork().getFluidStorage().rebuild();
}
}
}

View File

@@ -79,8 +79,8 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
ItemStack result = handler.extractItem(currentSlot, quantity, true);
if (result != null && network.insertItem(result, result.stackSize, true) == null) {
network.insertItem(result, result.stackSize, false);
if (result != null && getNetwork().insertItem(result, result.stackSize, true) == null) {
getNetwork().insertItem(result, result.stackSize, false);
handler.extractItem(currentSlot, quantity, false);
} else {
@@ -94,10 +94,10 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil
if (handler != null) {
FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false);
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) {
if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && getNetwork().insertFluid(stack, stack.amount, true) == null) {
FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true);
network.insertFluid(drain, drain.amount, false);
getNetwork().insertFluid(drain, drain.amount, false);
}
}
}

View File

@@ -50,7 +50,7 @@ public class TileInterface extends TileNode implements IComparable {
} else if (ticks % upgrades.getSpeed() == 0) {
int size = Math.min(slot.stackSize, upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1);
ItemStack remainder = network.insertItem(slot, size, false);
ItemStack remainder = getNetwork().insertItem(slot, size, false);
if (remainder == null) {
importItems.extractItem(currentSlot, size, false);
@@ -65,13 +65,13 @@ public class TileInterface extends TileNode implements IComparable {
if (wanted == null) {
if (got != null) {
exportItems.setStackInSlot(i, network.insertItem(got, got.stackSize, false));
exportItems.setStackInSlot(i, getNetwork().insertItem(got, got.stackSize, false));
}
} else {
int delta = got == null ? wanted.stackSize : (wanted.stackSize - got.stackSize);
if (delta > 0) {
ItemStack result = network.extractItem(wanted, delta, compare);
ItemStack result = getNetwork().extractItem(wanted, delta, compare);
if (result != null) {
if (got == null) {
@@ -81,7 +81,7 @@ public class TileInterface extends TileNode implements IComparable {
}
}
} else if (delta < 0) {
ItemStack remainder = network.insertItem(got, Math.abs(delta), false);
ItemStack remainder = getNetwork().insertItem(got, Math.abs(delta), false);
if (remainder == null) {
exportItems.extractItem(i, Math.abs(delta), false);

View File

@@ -70,8 +70,8 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC
public void onMicroblocksChanged() {
markDirty();
if (network != null) {
NetworkUtils.rebuildGraph(network);
if (getNetwork() != null) {
NetworkUtils.rebuildGraph(getNetwork());
} else if (worldObj != null) {
RefinedStorageBlocks.CABLE.attemptConnect(worldObj, pos);
}

View File

@@ -44,8 +44,8 @@ public class TileNetworkTransmitter extends TileNode {
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (network != null) {
NetworkUtils.rebuildGraph(network);
if (getNetwork() != null) {
NetworkUtils.rebuildGraph(getNetwork());
}
}
};
@@ -64,8 +64,8 @@ public class TileNetworkTransmitter extends TileNode {
receiverDimension = ItemNetworkCard.getDimension(card);
}
if (network != null) {
NetworkUtils.rebuildGraph(network);
if (getNetwork() != null) {
NetworkUtils.rebuildGraph(getNetwork());
}
}
};

View File

@@ -4,6 +4,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.NetworkUtils;
@@ -19,10 +20,9 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private boolean active;
private boolean update;
private boolean connected;
protected boolean rebuildOnUpdateChange;
protected boolean connected;
protected INetworkMaster network;
public TileNode() {
dataManager.addWatchedParameter(REDSTONE_MODE);
@@ -40,13 +40,13 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override
public void update() {
if (!worldObj.isRemote) {
if (update != canUpdate() && network != null) {
if (update != canUpdate() && getNetwork() != null) {
update = canUpdate();
onConnectionChange(network, update);
onConnectionChange(getNetwork(), update);
if (rebuildOnUpdateChange) {
NetworkUtils.rebuildGraph(network);
NetworkUtils.rebuildGraph(getNetwork());
}
}
@@ -66,18 +66,12 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override
public void onConnected(INetworkMaster network) {
this.connected = true;
this.network = network;
onConnectionChange(network, true);
}
@Override
public void onDisconnected(INetworkMaster network) {
onConnectionChange(network, false);
this.connected = false;
this.network = null;
}
@Override
@@ -92,7 +86,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override
public INetworkMaster getNetwork() {
return network;
return !worldObj.isRemote ? RefinedStorageAPI.getNetwork(this) : null;
}
@Override
@@ -107,11 +101,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override
public boolean isConnected() {
return connected;
}
public void setConnected(boolean connected) {
this.connected = connected;
return worldObj.isRemote ? connected : (getNetwork() != null);
}
@Override
@@ -165,16 +155,4 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
public boolean hasConnectivityState() {
return false;
}
@Override
public boolean equals(Object o) {
return o instanceof TileNode && ((TileNode) o).getPosition().equals(pos);
}
@Override
public int hashCode() {
int result = pos.hashCode();
result = 31 * result + worldObj.provider.getDimension();
return result;
}
}

View File

@@ -93,8 +93,8 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor
if (storage == null && storageTag != null) {
storage = new ItemStorage();
if (network != null) {
network.getItemStorage().rebuild();
if (getNetwork() != null) {
getNetwork().getItemStorage().rebuild();
}
}
}

View File

@@ -123,7 +123,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
@Override
public void update() {
if (!worldObj.isRemote && network != null) {
if (!worldObj.isRemote && getNetwork() != null) {
boolean itemChangeDetected = false, fluidChangeDetected = false;
for (ItemStorageExternal storage : itemStorages) {
@@ -139,17 +139,17 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
}
if (itemChangeDetected) {
network.getItemStorage().rebuild();
getNetwork().getItemStorage().rebuild();
}
if (fluidChangeDetected) {
network.getFluidStorage().rebuild();
getNetwork().getFluidStorage().rebuild();
}
if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) {
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
updateStorage(network);
updateStorage(getNetwork());
}
}

View File

@@ -188,27 +188,27 @@ public class TileGrid extends TileNode implements IGrid {
@Override
public BlockPos getNetworkPosition() {
return network != null ? network.getPosition() : null;
return getNetwork() != null ? getNetwork().getPosition() : null;
}
public void onGridOpened(EntityPlayer player) {
if (isConnected()) {
if (getType() == EnumGridType.FLUID) {
network.sendFluidStorageToClient((EntityPlayerMP) player);
getNetwork().sendFluidStorageToClient((EntityPlayerMP) player);
} else {
network.sendItemStorageToClient((EntityPlayerMP) player);
getNetwork().sendItemStorageToClient((EntityPlayerMP) player);
}
}
}
@Override
public IItemGridHandler getItemHandler() {
return isConnected() ? network.getItemGridHandler() : null;
return getNetwork() != null ? getNetwork().getItemGridHandler() : null;
}
@Override
public IFluidGridHandler getFluidHandler() {
return isConnected() ? network.getFluidGridHandler() : null;
return getNetwork() != null ? getNetwork().getFluidGridHandler() : null;
}
@Override
@@ -263,7 +263,7 @@ public class TileGrid extends TileNode implements IGrid {
} else {
if (slot != null) {
if (slot.stackSize == 1 && isConnected()) {
matrix.setInventorySlotContents(i, NetworkUtils.extractItem(network, slot, 1));
matrix.setInventorySlotContents(i, NetworkUtils.extractItem(getNetwork(), slot, 1));
} else {
matrix.decrStackSize(i, 1);
}
@@ -340,10 +340,10 @@ public class TileGrid extends TileNode implements IGrid {
if (slot != null) {
if (getType() == EnumGridType.CRAFTING) {
if (network.insertItem(slot, slot.stackSize, true) != null) {
if (getNetwork().insertItem(slot, slot.stackSize, true) != null) {
return;
} else {
network.insertItem(slot, slot.stackSize, false);
getNetwork().insertItem(slot, slot.stackSize, false);
}
}
@@ -357,7 +357,7 @@ public class TileGrid extends TileNode implements IGrid {
if (getType() == EnumGridType.CRAFTING) {
for (ItemStack possibility : possibilities) {
ItemStack took = NetworkUtils.extractItem(network, possibility, 1);
ItemStack took = NetworkUtils.extractItem(getNetwork(), possibility, 1);
if (took != null) {
matrix.setInventorySlotContents(i, took);