Skip to content

Commit b0e8cde

Browse files
committed
fix: Update packet blocks on world change
1 parent 4f59265 commit b0e8cde

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

src/main/java/net/bitbylogic/packetblocks/listener/PacketBlockListener.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.bukkit.event.EventPriority;
1717
import org.bukkit.event.Listener;
1818
import org.bukkit.event.block.BlockBreakEvent;
19+
import org.bukkit.event.player.PlayerChangedWorldEvent;
1920
import org.bukkit.event.player.PlayerInteractEvent;
2021
import org.bukkit.event.player.PlayerJoinEvent;
2122
import org.bukkit.event.player.PlayerQuitEvent;
@@ -64,6 +65,34 @@ public void onJoin(PlayerJoinEvent event) {
6465
player.sendBlockChanges(states);
6566
}
6667

68+
@EventHandler
69+
public void onWorldChange(PlayerChangedWorldEvent event) {
70+
Player player = event.getPlayer();
71+
Set<BlockState> states = new HashSet<>();
72+
73+
manager.getBlocks(event.getFrom()).stream()
74+
.filter(packetBlockHolder -> packetBlockHolder.isViewer(player))
75+
.forEach(packetBlock -> packetBlock.removeViewer(player));
76+
77+
manager.getBlocks(event.getPlayer().getWorld()).stream()
78+
.filter(PacketBlockHolder::isAddViewerOnJoin)
79+
.forEach(packetBlock -> {
80+
if (packetBlock instanceof PacketBlock singleBlock) {
81+
singleBlock.attemptAddViewer(player, false)
82+
.ifPresent(pd -> states.add(((PacketBlock) packetBlock).getBlockState(player)));
83+
return;
84+
}
85+
86+
if (!(packetBlock instanceof PacketBlockGroup group)) {
87+
return;
88+
}
89+
90+
group.attemptAddViewer(player, false).ifPresent(pd -> states.addAll(group.getBlockStates(player)));
91+
});
92+
93+
player.sendBlockChanges(states);
94+
}
95+
6796
@EventHandler
6897
public void onQuit(PlayerQuitEvent event) {
6998
Player player = event.getPlayer();

0 commit comments

Comments
 (0)