Removing of storage networks
This commit is contained in:
@@ -31,7 +31,6 @@ import refinedstorage.tile.TileMachine;
|
||||
import refinedstorage.tile.TileWirelessTransmitter;
|
||||
import refinedstorage.tile.config.RedstoneMode;
|
||||
import refinedstorage.tile.controller.StorageHandler;
|
||||
import refinedstorage.tile.controller.TileController;
|
||||
import refinedstorage.tile.controller.WirelessGridHandler;
|
||||
|
||||
import java.util.*;
|
||||
@@ -82,7 +81,7 @@ public class StorageNetwork {
|
||||
public StorageNetwork(BlockPos pos, World world) {
|
||||
this.pos = pos;
|
||||
|
||||
setWorld(world);
|
||||
onAdded(world);
|
||||
}
|
||||
|
||||
public StorageNetwork(BlockPos pos) {
|
||||
@@ -111,23 +110,6 @@ public class StorageNetwork {
|
||||
return pos;
|
||||
}
|
||||
|
||||
public void setWorld(World world) {
|
||||
this.world = world;
|
||||
this.type = (EnumControllerType) world.getBlockState(pos).getValue(BlockController.TYPE);
|
||||
|
||||
for (BlockPos machine : machinesToLoad) {
|
||||
TileEntity tile = world.getTileEntity(machine);
|
||||
|
||||
if (tile instanceof TileMachine) {
|
||||
((TileMachine) tile).forceConnect(this);
|
||||
|
||||
machines.add((TileMachine) tile);
|
||||
}
|
||||
}
|
||||
|
||||
((TileController) world.getTileEntity(pos)).setNetwork(this);
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return world;
|
||||
}
|
||||
@@ -155,6 +137,9 @@ public class StorageNetwork {
|
||||
syncMachines();
|
||||
}
|
||||
|
||||
// @todo: If the chunk unloads, and we come back to the chunk
|
||||
// the machine tile will be reset to a new tile instance and nothing will work
|
||||
|
||||
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
||||
taskToCancel.onCancelled(this);
|
||||
}
|
||||
@@ -245,7 +230,7 @@ public class StorageNetwork {
|
||||
return wirelessGridRange;
|
||||
}
|
||||
|
||||
private void disconnectAll() {
|
||||
public void disconnectAll() {
|
||||
for (TileMachine machine : machines) {
|
||||
machine.onDisconnected(world);
|
||||
}
|
||||
@@ -253,6 +238,25 @@ public class StorageNetwork {
|
||||
machines.clear();
|
||||
}
|
||||
|
||||
public void onRemoved() {
|
||||
markDirty();
|
||||
}
|
||||
|
||||
public void onAdded(World world) {
|
||||
this.world = world;
|
||||
this.type = (EnumControllerType) world.getBlockState(pos).getValue(BlockController.TYPE);
|
||||
|
||||
for (BlockPos machine : machinesToLoad) {
|
||||
TileEntity tile = world.getTileEntity(machine);
|
||||
|
||||
if (tile instanceof TileMachine) {
|
||||
((TileMachine) tile).forceConnect(this);
|
||||
|
||||
machines.add((TileMachine) tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<ItemStack> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ public class StorageNetworkEventHandler {
|
||||
if (networks != null) {
|
||||
for (StorageNetwork network : networks.values()) {
|
||||
if (network.getWorld() == null) {
|
||||
network.setWorld(e.world);
|
||||
network.onAdded(e.world);
|
||||
}
|
||||
|
||||
network.update();
|
||||
|
||||
@@ -16,6 +16,13 @@ public class StorageNetworkRegistry {
|
||||
NETWORKS.get(dimension).put(network.getPos(), network);
|
||||
}
|
||||
|
||||
public static void remove(BlockPos pos, int dimension) {
|
||||
if (get(dimension) != null) {
|
||||
get(dimension).get(pos).onRemoved();
|
||||
get(dimension).remove(pos);
|
||||
}
|
||||
}
|
||||
|
||||
public static StorageNetwork get(BlockPos pos, int dimension) {
|
||||
return get(dimension) == null ? null : get(dimension).get(pos);
|
||||
}
|
||||
|
||||
@@ -90,22 +90,29 @@ public class BlockController extends BlockBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack itemStack) {
|
||||
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) {
|
||||
if (!world.isRemote) {
|
||||
StorageNetwork network = new StorageNetwork(pos, world);
|
||||
|
||||
NBTTagCompound tag = itemStack.getTagCompound();
|
||||
NBTTagCompound tag = stack.getTagCompound();
|
||||
|
||||
if (tag != null && tag.hasKey(StorageNetwork.NBT_ENERGY)) {
|
||||
network.getEnergy().receiveEnergy(tag.getInteger(StorageNetwork.NBT_ENERGY), false);
|
||||
}
|
||||
|
||||
StorageNetworkRegistry.add(network, world.provider.getDimension());
|
||||
|
||||
((TileController) world.getTileEntity(pos)).setNetwork(network);
|
||||
}
|
||||
|
||||
super.onBlockPlacedBy(world, pos, state, player, itemStack);
|
||||
super.onBlockPlacedBy(world, pos, state, player, stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, BlockPos pos, IBlockState state) {
|
||||
if (!world.isRemote) {
|
||||
StorageNetworkRegistry.remove(pos, world.provider.getDimension());
|
||||
}
|
||||
|
||||
super.breakBlock(world, pos, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,7 @@ import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.api.storagenet.StorageNetwork;
|
||||
import refinedstorage.api.storagenet.StorageNetworkRegistry;
|
||||
import refinedstorage.block.BlockController;
|
||||
import refinedstorage.block.EnumControllerType;
|
||||
import refinedstorage.container.ContainerController;
|
||||
@@ -32,15 +33,19 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
private EnumControllerType type;
|
||||
private RedstoneMode redstoneMode;
|
||||
|
||||
public void setNetwork(StorageNetwork network) {
|
||||
this.network = network;
|
||||
public StorageNetwork getNetwork() {
|
||||
if (network == null) {
|
||||
network = StorageNetworkRegistry.get(pos, worldObj.provider.getDimension());
|
||||
}
|
||||
|
||||
return network;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
||||
super.writeUpdate(tag);
|
||||
|
||||
tag.setInteger(StorageNetwork.NBT_ENERGY, network != null ? network.getEnergy().getEnergyStored() : 0);
|
||||
tag.setInteger(StorageNetwork.NBT_ENERGY, getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0);
|
||||
|
||||
return tag;
|
||||
}
|
||||
@@ -54,16 +59,16 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
|
||||
@Override
|
||||
public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) {
|
||||
return network.getEnergy().receiveEnergy(maxReceive, simulate);
|
||||
return getNetwork().getEnergy().receiveEnergy(maxReceive, simulate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyStored(EnumFacing from) {
|
||||
return network.getEnergy().getEnergyStored();
|
||||
return getNetwork().getEnergy().getEnergyStored();
|
||||
}
|
||||
|
||||
public int getEnergyScaled(int i) {
|
||||
float stored = worldObj.isRemote ? energy : network.getEnergy().getEnergyStored();
|
||||
float stored = worldObj.isRemote ? energy : getNetwork().getEnergy().getEnergyStored();
|
||||
float max = StorageNetwork.ENERGY_CAPACITY;
|
||||
|
||||
return (int) (stored / max * (float) i);
|
||||
@@ -71,7 +76,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
|
||||
@Override
|
||||
public int getMaxEnergyStored(EnumFacing from) {
|
||||
return network.getEnergy().getMaxEnergyStored();
|
||||
return getNetwork().getEnergy().getMaxEnergyStored();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -81,12 +86,12 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
|
||||
@Override
|
||||
public RedstoneMode getRedstoneMode() {
|
||||
return worldObj.isRemote ? redstoneMode : network.getRedstoneMode();
|
||||
return worldObj.isRemote ? redstoneMode : getNetwork().getRedstoneMode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRedstoneMode(RedstoneMode mode) {
|
||||
network.setRedstoneMode(mode);
|
||||
getNetwork().setRedstoneMode(mode);
|
||||
}
|
||||
|
||||
public List<ClientMachine> getClientMachines() {
|
||||
@@ -133,14 +138,14 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
|
||||
@Override
|
||||
public void writeContainerData(ByteBuf buf) {
|
||||
buf.writeInt(network.getEnergy().getEnergyStored());
|
||||
buf.writeInt(network.getEnergyUsage());
|
||||
buf.writeInt(getNetwork().getEnergy().getEnergyStored());
|
||||
buf.writeInt(getNetwork().getEnergyUsage());
|
||||
|
||||
buf.writeInt(network.getRedstoneMode().id);
|
||||
buf.writeInt(getNetwork().getRedstoneMode().id);
|
||||
|
||||
List<ClientMachine> m = new ArrayList<ClientMachine>();
|
||||
|
||||
for (TileMachine machine : network.getMachines()) {
|
||||
for (TileMachine machine : getNetwork().getMachines()) {
|
||||
if (machine.canUpdate()) {
|
||||
IBlockState state = worldObj.getBlockState(machine.getPos());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user