From c96673989ca8d4729ca5deaaed1c179d6ff93c9b Mon Sep 17 00:00:00 2001 From: Player Name Date: Sun, 28 Jun 2026 01:01:27 +0200 Subject: [PATCH] Fix POH flashing correctly --- Server/src/main/core/game/node/entity/player/Player.java | 5 +++++ .../src/main/core/game/world/update/MapChunkRenderer.kt | 8 ++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Server/src/main/core/game/node/entity/player/Player.java b/Server/src/main/core/game/node/entity/player/Player.java index cb94a83bd..ea08ea6bf 100644 --- a/Server/src/main/core/game/node/entity/player/Player.java +++ b/Server/src/main/core/game/node/entity/player/Player.java @@ -545,6 +545,11 @@ public class Player extends Entity { super.update(); if (playerFlags.isUpdateSceneGraph()) { updateSceneGraph(false); + // The scene graph rebuild wipes the client's build area. Reset lastViewport so MapChunkRenderer + // re-synchronizes every visible chunk this tick (restoring scenery immediately and re-sending + // each ground item exactly once), rather than only sending incremental updates for overlap. + // This fixes POHs flashing their cached states (hotspots) on z transition. + playerFlags.setLastViewport(new RegionChunk[13][13]); } PlayerRenderer.render(this); NPCRenderer.render(this); diff --git a/Server/src/main/core/game/world/update/MapChunkRenderer.kt b/Server/src/main/core/game/world/update/MapChunkRenderer.kt index 001327a93..8f1b84171 100644 --- a/Server/src/main/core/game/world/update/MapChunkRenderer.kt +++ b/Server/src/main/core/game/world/update/MapChunkRenderer.kt @@ -2,7 +2,6 @@ package core.game.world.update import core.game.node.entity.player.Player import core.game.world.map.RegionChunk -import core.game.world.map.build.DynamicRegion import core.net.packet.PacketRepository import core.net.packet.context.ClearChunkContext import core.net.packet.out.ClearRegionChunk @@ -41,12 +40,9 @@ object MapChunkRenderer { val previous = last[x][y] ?: continue if (containsChunk(current, previous)) { updated.add(previous) - continue + } else { + PacketRepository.send(ClearRegionChunk::class.java, ClearChunkContext(player, previous)) } - if (previous.region is DynamicRegion) { - continue //dynamic regions do not need a clear packet and briefly flash their cached states (e.g. POH with only hotspots) if you do send one - } - PacketRepository.send(ClearRegionChunk::class.java, ClearChunkContext(player, previous)) } } sizeX = current.size