From e985bc6f69cd3021578e7155b723356284905936 Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Sun, 12 Apr 2020 23:00:23 +0100 Subject: [PATCH] Since we're syncing anyway, make the client do a deferred refresh to allow syncing to occur, rather than trying to keep track of prev stacks itself --- .../electroblob/wizardry/client/gui/GuiArcaneWorkbench.java | 4 ++++ .../wizardry/inventory/ContainerArcaneWorkbench.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java index 63289ffd..3fe7a09f 100644 --- a/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/client/gui/GuiArcaneWorkbench.java @@ -150,6 +150,10 @@ public class GuiArcaneWorkbench extends GuiContainer { @Override public void updateScreen(){ if(animationTimer > 0) animationTimer--; + if(arcaneWorkbenchContainer.needsRefresh){ + arcaneWorkbenchContainer.refreshBookshelfSlots(); + arcaneWorkbenchContainer.needsRefresh = false; + } } @Override diff --git a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java index 5f96ce39..926ffe14 100644 --- a/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java +++ b/src/main/java/electroblob/wizardry/inventory/ContainerArcaneWorkbench.java @@ -78,6 +78,8 @@ public class ContainerArcaneWorkbench extends Container implements ISpellSortabl private boolean sortDescending = false; private String searchText = ""; + public boolean needsRefresh; + public ContainerArcaneWorkbench(IInventory inventory, TileEntityArcaneWorkbench tileentity){ this.tileentity = tileentity; @@ -351,6 +353,10 @@ public class ContainerArcaneWorkbench extends Container implements ISpellSortabl */ private boolean mergeStackIntoBookshelves(ItemStack stack){ + // As far as the client is concerned, which stacks were *previously* in which slots never affects whether a + // given book can fit or not, so as long as it refreshes it doesn't matter where the book actually gets put + if(tileentity.getWorld().isRemote) this.needsRefresh = true; // It's a bit clunky but it works! + // LinkedHashSet preserves iteration order whilst ignoring duplicates - neat! Set slots = new LinkedHashSet<>(bookshelfSlots.size());