From 97b651088092dca193a8400dd8b18cf6911c25e0 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 20 Aug 2024 18:23:32 +0200 Subject: [PATCH 1/4] Playerside sign update --- .../mapUpdater/update/CraftRotateCommand.java | 19 ++++++++++------- .../update/CraftTranslateCommand.java | 21 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java index 5998f6de3..d89e324f5 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java @@ -28,6 +28,7 @@ import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -233,20 +234,22 @@ public boolean equals(String[] a, String[] b) { // TODO: This is implemented only to fix client caching // ideally we wouldn't do the update and would instead fake it out to the player for (MovecraftLocation location : entry.getValue()) { - Block block = location.toBukkit(craft.getWorld()).getBlock(); + Location mcLocation = location.toBukkit(craft.getWorld()); + Block block = mcLocation.getBlock(); BlockState state = block.getState(); - BlockData data = block.getBlockData(); if (!(state instanceof Sign)) { continue; } + Sign sign = signStates.get(location); - if (event.isUpdated()) { - for (int i = 0; i < 4; i++) { - sign.setLine(i, entry.getKey()[i]); - } + for (Player player : mcLocation.getNearbyPlayers(64)) { + player.sendSignChange(mcLocation, entry.getKey(), sign.getColor(), sign.isGlowingText()); + } + /* + for(int i = 0; i<4; i++){ + sign.setLine(i, entry.getKey()[i]); } - sign.update(false, false); - block.setBlockData(data); + sign.update(false, false);*/ } } } diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java index 7fa64e43a..0c84c868d 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java @@ -20,15 +20,12 @@ import net.countercraft.movecraft.util.hitboxes.HitBox; import net.countercraft.movecraft.util.hitboxes.SetHitBox; import net.countercraft.movecraft.util.hitboxes.SolidHitBox; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Tag; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; import org.bukkit.block.data.Waterlogged; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.util.ArrayDeque; @@ -339,16 +336,26 @@ public boolean equals(String[] a, String[] b) { // TODO: This is implemented only to fix client caching // ideally we wouldn't do the update and would instead fake it out to the player for(MovecraftLocation location : entry.getValue()){ - Block block = location.toBukkit(craft.getWorld()).getBlock(); + Location mcLocation = location.toBukkit(craft.getWorld()); + Block block = mcLocation.getBlock(); BlockState state = block.getState(); if (!(state instanceof Sign)) { continue; } + Sign sign = signStates.get(location); + for (Player player : mcLocation.getNearbyPlayers(64)) { + DyeColor color = sign.getColor(); + if (color != null) + player.sendSignChange(mcLocation, entry.getKey(), color, sign.isGlowingText()); + else + player.sendSignChange(mcLocation, entry.getKey()); + } + /* for(int i = 0; i<4; i++){ sign.setLine(i, entry.getKey()[i]); } - sign.update(false, false); + sign.update(false, false);*/ } } } From 3b865fc226a3ec89e604d34dfcbad0031f9f0e0a Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 20 Aug 2024 18:32:52 +0200 Subject: [PATCH 2/4] Fix + DyeColor nullsafety --- .../mapUpdater/update/CraftRotateCommand.java | 15 ++++++++++----- .../mapUpdater/update/CraftTranslateCommand.java | 3 +++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java index d89e324f5..63bfbb833 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java @@ -20,10 +20,7 @@ import net.countercraft.movecraft.util.hitboxes.HitBox; import net.countercraft.movecraft.util.hitboxes.SetHitBox; import net.countercraft.movecraft.util.hitboxes.SolidHitBox; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Tag; +import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; @@ -242,9 +239,17 @@ public boolean equals(String[] a, String[] b) { } Sign sign = signStates.get(location); + if (!event.isUpdated()) + continue; + for (Player player : mcLocation.getNearbyPlayers(64)) { - player.sendSignChange(mcLocation, entry.getKey(), sign.getColor(), sign.isGlowingText()); + DyeColor color = sign.getColor(); + if (color != null) + player.sendSignChange(mcLocation, entry.getKey(), color, sign.isGlowingText()); + else + player.sendSignChange(mcLocation, entry.getKey()); } + /* for(int i = 0; i<4; i++){ sign.setLine(i, entry.getKey()[i]); diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java index 0c84c868d..458b1803d 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java @@ -344,6 +344,9 @@ public boolean equals(String[] a, String[] b) { } Sign sign = signStates.get(location); + if (!event.isUpdated()) + continue; + for (Player player : mcLocation.getNearbyPlayers(64)) { DyeColor color = sign.getColor(); if (color != null) From ae44561e22d9ed289e770d576d7371321abba174 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Tue, 3 Sep 2024 18:03:49 +0200 Subject: [PATCH 3/4] Use sendBlockChange (test) --- .../mapUpdater/update/CraftRotateCommand.java | 17 +++++------------ .../update/CraftTranslateCommand.java | 15 +++++---------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java index 63bfbb833..1677a5995 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java @@ -24,7 +24,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Sign; -import org.bukkit.block.data.BlockData; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -243,22 +242,16 @@ public boolean equals(String[] a, String[] b) { continue; for (Player player : mcLocation.getNearbyPlayers(64)) { - DyeColor color = sign.getColor(); - if (color != null) - player.sendSignChange(mcLocation, entry.getKey(), color, sign.isGlowingText()); - else - player.sendSignChange(mcLocation, entry.getKey()); + updateSign(player, mcLocation, entry.getKey(), sign); } - - /* - for(int i = 0; i<4; i++){ - sign.setLine(i, entry.getKey()[i]); - } - sign.update(false, false);*/ } } } + private void updateSign(Player player, Location location, String[] lines, Sign sign) { + player.sendBlockChange(location, sign.getBlockData()); + } + @NotNull public Craft getCraft() { return craft; diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java index 458b1803d..1ba1f3dfc 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java @@ -348,21 +348,16 @@ public boolean equals(String[] a, String[] b) { continue; for (Player player : mcLocation.getNearbyPlayers(64)) { - DyeColor color = sign.getColor(); - if (color != null) - player.sendSignChange(mcLocation, entry.getKey(), color, sign.isGlowingText()); - else - player.sendSignChange(mcLocation, entry.getKey()); + updateSign(player, mcLocation, entry.getKey(), sign); } - /* - for(int i = 0; i<4; i++){ - sign.setLine(i, entry.getKey()[i]); - } - sign.update(false, false);*/ } } } + private void updateSign(Player player, Location location, String[] lines, Sign sign) { + player.sendBlockChange(location, sign.getBlockData()); + } + @NotNull public Craft getCraft(){ return craft; From 3b5f19b8a62f9ae3d8f31344ff1c0aa3ca5b72e8 Mon Sep 17 00:00:00 2001 From: Intybyte Date: Fri, 6 Sep 2024 12:36:59 +0200 Subject: [PATCH 4/4] Remove TODOs --- .../movecraft/mapUpdater/update/CraftRotateCommand.java | 2 -- .../movecraft/mapUpdater/update/CraftTranslateCommand.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java index 1677a5995..73ceece1b 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftRotateCommand.java @@ -227,8 +227,6 @@ public boolean equals(String[] a, String[] b) { // if(!event.isUpdated()){ // continue; // } - // TODO: This is implemented only to fix client caching - // ideally we wouldn't do the update and would instead fake it out to the player for (MovecraftLocation location : entry.getValue()) { Location mcLocation = location.toBukkit(craft.getWorld()); Block block = mcLocation.getBlock(); diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java index 1ba1f3dfc..caa68d6b5 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/mapUpdater/update/CraftTranslateCommand.java @@ -333,8 +333,6 @@ public boolean equals(String[] a, String[] b) { // if(!event.isUpdated()){ // continue; // } - // TODO: This is implemented only to fix client caching - // ideally we wouldn't do the update and would instead fake it out to the player for(MovecraftLocation location : entry.getValue()){ Location mcLocation = location.toBukkit(craft.getWorld()); Block block = mcLocation.getBlock();