From 74eef5953abeff378211b3d18b670c146195806d Mon Sep 17 00:00:00 2001
From: Nightenom <17338378+Nightenom@users.noreply.github.com>
Date: Sun, 25 Aug 2024 19:51:35 +0200
Subject: [PATCH] Hotfix building placement (#10165)

Hotfix building placement
---
 .../java/com/minecolonies/api/items/component/ColonyId.java  | 5 +++++
 .../render/worldevent/GuardTowerRallyBannerRenderer.java     | 2 +-
 .../core/network/messages/server/DirectPlaceMessage.java     | 2 +-
 .../core/placementhandlers/main/SurvivalHandler.java         | 2 +-
 4 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/main/java/com/minecolonies/api/items/component/ColonyId.java b/src/main/java/com/minecolonies/api/items/component/ColonyId.java
index 004c20591dc..befd142d7c1 100644
--- a/src/main/java/com/minecolonies/api/items/component/ColonyId.java
+++ b/src/main/java/com/minecolonies/api/items/component/ColonyId.java
@@ -31,6 +31,11 @@ public record ColonyId(int id, ResourceKey<Level> dimension)
         ColonyId::id, ResourceKey.streamCodec(Registries.DIMENSION), ColonyId::dimension,
         ColonyId::new);
 
+    public boolean hasColonyId()
+    {
+        return id != EMPTY.id;
+    }
+
     public void writeToItemStack(final ItemStack itemStack)
     {
         itemStack.set(ModDataComponents.COLONY_ID_COMPONENT, this);
diff --git a/src/main/java/com/minecolonies/core/client/render/worldevent/GuardTowerRallyBannerRenderer.java b/src/main/java/com/minecolonies/core/client/render/worldevent/GuardTowerRallyBannerRenderer.java
index e2d218aa444..f6eba2a1027 100644
--- a/src/main/java/com/minecolonies/core/client/render/worldevent/GuardTowerRallyBannerRenderer.java
+++ b/src/main/java/com/minecolonies/core/client/render/worldevent/GuardTowerRallyBannerRenderer.java
@@ -20,7 +20,7 @@ static void render(final WorldEventContext ctx)
         }
 
         final ColonyId component = ColonyId.readFromItemStack(ctx.mainHandItem);
-        if (component.id() == -1 || component.dimension() != ctx.clientLevel.dimension())
+        if (!component.hasColonyId() || component.dimension() != ctx.clientLevel.dimension())
         {
             return;
         }
diff --git a/src/main/java/com/minecolonies/core/network/messages/server/DirectPlaceMessage.java b/src/main/java/com/minecolonies/core/network/messages/server/DirectPlaceMessage.java
index 211296500c3..12e3c93ca03 100644
--- a/src/main/java/com/minecolonies/core/network/messages/server/DirectPlaceMessage.java
+++ b/src/main/java/com/minecolonies/core/network/messages/server/DirectPlaceMessage.java
@@ -102,7 +102,7 @@ protected void onExecute(final IPayloadContext ctxIn, final ServerPlayer player)
         if ((colony == null && state.getBlock() == ModBlocks.blockHutTownHall) || (colony != null && colony.getPermissions().hasPermission(player, Action.MANAGE_HUTS)))
         {
             final ColonyId colonyId = ColonyId.readFromItemStack(stack);
-            if (colony != null && colonyId != null && colony.getID() != colonyId.id())
+            if (colony != null && colonyId.hasColonyId() && colony.getID() != colonyId.id())
             {
                 MessageUtils.format(WRONG_COLONY, colonyId.id()).sendTo(player);
                 return;
diff --git a/src/main/java/com/minecolonies/core/placementhandlers/main/SurvivalHandler.java b/src/main/java/com/minecolonies/core/placementhandlers/main/SurvivalHandler.java
index 2bd57901f22..2b29829c9f6 100644
--- a/src/main/java/com/minecolonies/core/placementhandlers/main/SurvivalHandler.java
+++ b/src/main/java/com/minecolonies/core/placementhandlers/main/SurvivalHandler.java
@@ -155,7 +155,7 @@ public void handle(
                 final ItemStack inventoryStack = slot == -1 ? stack : player.getInventory().getItem(slot);
 
                 final ColonyId colonyComponent = ColonyId.readFromItemStack(stack);
-                if (colonyComponent != null && tempColony != null && tempColony.getID() != colonyComponent.id())
+                if (colonyComponent.hasColonyId() && tempColony != null && tempColony.getID() != colonyComponent.id())
                 {
                     MessageUtils.format(WRONG_COLONY, colonyComponent.id()).sendTo(player);
                     SoundUtils.playErrorSound(player, player.blockPosition());