From 0e1e8a72d360d8a60812cfce47b8cb2605b660bb Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 20 Mar 2025 18:54:06 +0000 Subject: [PATCH] Fix syncing of colour between PocketBrain and item - Actually set colour when constructing the brain. - Sync it back after crafting, much like we do for upgrades (see dcc74e15c7ab88e5ec7bb4c83ca00d49c074b615) for more details. We should take a proper look at this on 1.21.4 and make these methods main-thread only, so we can sync immediately. Fixes #2157 --- .../shared/pocket/core/PocketBrain.java | 3 ++- .../shared/pocket/items/PocketComputerItem.java | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/pocket/core/PocketBrain.java b/projects/common/src/main/java/dan200/computercraft/shared/pocket/core/PocketBrain.java index e6f477437..59ff5f0fd 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/pocket/core/PocketBrain.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/pocket/core/PocketBrain.java @@ -44,11 +44,12 @@ public final class PocketBrain implements IPocketAccess { private int colour = -1; private int lightColour = -1; - public PocketBrain(PocketHolder holder, @Nullable UpgradeData upgrade, ServerComputer.Properties properties) { + public PocketBrain(PocketHolder holder, @Nullable UpgradeData upgrade, int colour, ServerComputer.Properties properties) { this.computer = new PocketServerComputer(this, holder, properties); this.holder = holder; this.position = holder.pos(); this.upgrade = UpgradeData.copyOf(upgrade); + this.colour = colour; invalidatePeripheral(); } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java b/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java index d58f29c3e..9d973e07c 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/pocket/items/PocketComputerItem.java @@ -272,7 +272,7 @@ public class PocketComputerItem extends Item implements IComputerItem, IColoured } var brain = new PocketBrain( - holder, getUpgradeWithData(stack), + holder, getUpgradeWithData(stack), getColour(stack), ServerComputer.properties(getComputerID(stack), getFamily()).label(getLabel(stack)) ); var computer = brain.computer(); @@ -314,10 +314,14 @@ public class PocketComputerItem extends Item implements IComputerItem, IColoured // item. However, if we've just crafted the computer with an upgrade, we should sync the other way, and update // the computer. var server = level.getServer(); - if (server != null) { - var computer = getServerComputer(server, stack); - if (computer != null) computer.getBrain().setUpgrade(getUpgradeWithData(stack)); - } + if (server == null) return; + + var computer = getServerComputer(server, stack); + if (computer == null) return; + + var brain = computer.getBrain(); + brain.setUpgrade(getUpgradeWithData(stack)); + brain.setColour(getColour(stack)); } // IComputerItem implementation