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..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 @@ -20,14 +20,11 @@ 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; -import org.bukkit.block.data.BlockData; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -230,27 +227,29 @@ 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()) { - 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]); - } + if (!event.isUpdated()) + continue; + + for (Player player : mcLocation.getNearbyPlayers(64)) { + updateSign(player, mcLocation, entry.getKey(), sign); } - sign.update(false, false); - block.setBlockData(data); } } } + 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 7fa64e43a..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 @@ -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; @@ -336,23 +333,29 @@ 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()){ - 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(int i = 0; i<4; i++){ - sign.setLine(i, entry.getKey()[i]); + if (!event.isUpdated()) + continue; + + for (Player player : mcLocation.getNearbyPlayers(64)) { + updateSign(player, mcLocation, entry.getKey(), sign); } - 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;