diff --git a/src/main/java/refinedstorage/block/BlockGrid.java b/src/main/java/refinedstorage/block/BlockGrid.java index 40b59052e..0719ae99b 100755 --- a/src/main/java/refinedstorage/block/BlockGrid.java +++ b/src/main/java/refinedstorage/block/BlockGrid.java @@ -61,9 +61,9 @@ public class BlockGrid extends BlockMachine { @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { - ((TileGrid) world.getTileEntity(pos)).onGridOpened(player); - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.GRID, world, pos.getX(), pos.getY(), pos.getZ()); + + ((TileGrid) world.getTileEntity(pos)).onGridOpened(player); } return true; diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 813a26f38..e187d5d15 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -79,7 +79,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr private int wirelessGridRange; private boolean couldRun; - private boolean syncing; private long lastEnergyUpdate; @@ -310,8 +309,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } private void syncItems() { - this.syncing = true; - itemGroups.clear(); for (IStorage storage : storages) { @@ -361,16 +358,12 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } itemGroups.removeAll(combinedGroups); - - this.syncing = false; } public void syncItemsWithClients() { - if (!syncing) { - for (EntityPlayer player : worldObj.playerEntities) { - if (player.openContainer.getClass() == ContainerGrid.class) { - syncItemsWithClient((EntityPlayerMP) player); - } + for (EntityPlayer player : worldObj.playerEntities) { + if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getControllerPos())) { + syncItemsWithClient((EntityPlayerMP) player); } } } diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 80a2392d0..c8b5b9bd1 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,5 +1,6 @@ package refinedstorage.tile.grid; +import net.minecraft.util.math.BlockPos; import refinedstorage.block.EnumGridType; import refinedstorage.storage.ItemGroup; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -13,6 +14,8 @@ public interface IGrid { void setItemGroups(List groups); + BlockPos getControllerPos(); + void onItemPush(int playerSlot, boolean one); void onItemPull(int id, int flags); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 95b2fb677..53151e618 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -7,6 +7,7 @@ import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import refinedstorage.RefinedStorage; @@ -97,6 +98,11 @@ public class TileGrid extends TileMachine implements IGrid { this.itemGroups = itemGroups; } + @Override + public BlockPos getControllerPos() { + return controller != null ? controller.getPos() : null; + } + public void onGridOpened(EntityPlayer player) { if (isConnected()) { controller.syncItemsWithClient((EntityPlayerMP) player); diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 54af5772e..d179ace16 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -21,8 +21,8 @@ import java.util.ArrayList; import java.util.List; public class WirelessGrid implements IGrid { - private ItemStack stack; private EnumHand hand; + private BlockPos controllerPos; private int sortingType; private int sortingDirection; private int searchBoxMode; @@ -30,8 +30,8 @@ public class WirelessGrid implements IGrid { private long lastUpdate; public WirelessGrid(ItemStack stack, EnumHand hand) { - this.stack = stack; this.hand = hand; + this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); @@ -53,18 +53,23 @@ public class WirelessGrid implements IGrid { this.lastUpdate = System.currentTimeMillis(); } + @Override + public BlockPos getControllerPos() { + return controllerPos; + } + @Override public void onItemPush(int playerSlot, boolean one) { - RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePush(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack), playerSlot, one)); + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePush(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), playerSlot, one)); } @Override public void onItemPull(int id, int flags) { - RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePull(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack), id, flags)); + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridStoragePull(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), id, flags)); } public void onClose(EntityPlayer player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack))); + TileEntity tile = player.worldObj.getTileEntity(controllerPos); if (tile instanceof TileController) { ((TileController) tile).getWirelessGridHandler().handleClose(player); @@ -109,7 +114,7 @@ public class WirelessGrid implements IGrid { @Override public void onCraftingRequested(int id, int quantity) { - RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridCraftingStart(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack), id, quantity)); + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridCraftingStart(controllerPos.getX(), controllerPos.getY(), controllerPos.getZ(), id, quantity)); } @Override