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