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());