diff --git a/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java b/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java index df0f150..a5e6c32 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java +++ b/src/main/java/net/knarcraft/placeholdersigns/PlaceholderSigns.java @@ -154,13 +154,21 @@ public final class PlaceholderSigns extends JavaPlugin { } // Update placeholders + SignSide front = sign.getSide(Side.FRONT); + SignSide back = sign.getSide(Side.BACK); Map> placeholders = placeholderSign.placeholders(); - String[] frontLines = sign.getSide(Side.FRONT).getLines(); - String[] backLines = sign.getSide(Side.BACK).getLines(); + String[] frontLines = front.getLines(); + String[] backLines = back.getLines(); // Only update the sign if the text has changed - if (updatePlaceholders(frontLines, placeholders.get(Side.FRONT), sign.getSide(Side.FRONT)) || - updatePlaceholders(backLines, placeholders.get(Side.BACK), sign.getSide(Side.BACK))) { + boolean updateNecessary = false; + if (placeholders.get(Side.FRONT) != null) { + updateNecessary |= updatePlaceholders(frontLines, placeholders.get(Side.FRONT), front); + } + if (placeholders.get(Side.BACK) != null) { + updateNecessary |= updatePlaceholders(backLines, placeholders.get(Side.BACK), back); + } + if (updateNecessary) { sign.update(); } } diff --git a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java index 57bacf1..d65615c 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java +++ b/src/main/java/net/knarcraft/placeholdersigns/listener/SignClickListener.java @@ -45,7 +45,9 @@ public class SignClickListener implements Listener { // Check if the player has run the /editSign command SignLineChangeRequest request = PlaceholderSigns.getInstance().getSignChangeRequest(player); if (request != null) { - doSignChange(sign, request, event, player); + SignSide standingOn = sign.getTargetSide(player); + Side side = sign.getSide(Side.FRONT).equals(standingOn) ? Side.FRONT : Side.BACK; + doSignChange(sign, request, event, player, side); } } @@ -85,17 +87,18 @@ public class SignClickListener implements Listener { * @param player

The player triggering the sign change

*/ private void doSignChange(@NotNull Sign sign, @NotNull SignLineChangeRequest request, - @NotNull PlayerInteractEvent event, @NotNull Player player) { + @NotNull PlayerInteractEvent event, @NotNull Player player, @NotNull Side side) { // Cancel the event to prevent vanilla behavior event.setCancelled(true); - String[] lines = sign.getSide(Side.FRONT).getLines(); + SignSide signSide = sign.getSide(side); + String[] lines = signSide.getLines(); lines[request.line()] = request.text(); // Run the sign change event to allow protection plugins to cancel, and allow the sign text listener to trigger SignChangeEvent changeEvent = new SignChangeEvent(Objects.requireNonNull(event.getClickedBlock()), - player, lines, Side.FRONT); + player, lines, side); Bukkit.getPluginManager().callEvent(changeEvent); if (changeEvent.isCancelled()) { return; @@ -104,7 +107,7 @@ public class SignClickListener implements Listener { // Update the sign with the new text String[] finalLines = changeEvent.getLines(); for (int i = 0; i < finalLines.length; i++) { - sign.getSide(Side.FRONT).setLine(i, ColorHelper.translateAllColorCodes(finalLines[i])); + signSide.setLine(i, ColorHelper.translateAllColorCodes(finalLines[i])); } sign.update(); diff --git a/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java b/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java index 6af1d3d..0830b21 100644 --- a/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java +++ b/src/main/java/net/knarcraft/placeholdersigns/listener/SignTextListener.java @@ -53,7 +53,7 @@ public class SignTextListener implements Listener { signHandler.registerSign(placeholderSign); } else if (!placeholders.isEmpty()) { // Overwrite the placeholders of the existing placeholder sign - Map existing = existingSign.placeholders().get(event.getSide()); + Map existing = existingSign.placeholders().computeIfAbsent(event.getSide(), k -> new HashMap<>()); existing.putAll(placeholders); signHandler.save(); }