From 9c2caa6af88914a54c751d2670058aea59b98aa5 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Mon, 12 Jul 2021 03:57:36 +0200 Subject: [PATCH] Better display sign changes in log messages --- .../java/de/diddiz/LogBlock/BlockChange.java | 10 +++- .../LogBlock/blockstate/BlockStateCodec.java | 2 +- .../blockstate/BlockStateCodecBanner.java | 2 +- .../blockstate/BlockStateCodecLectern.java | 2 +- .../blockstate/BlockStateCodecShulkerBox.java | 2 +- .../blockstate/BlockStateCodecSign.java | 57 +++++++++++++++++-- .../blockstate/BlockStateCodecSkull.java | 2 +- .../blockstate/BlockStateCodecSpawner.java | 2 +- .../LogBlock/blockstate/BlockStateCodecs.java | 4 +- 9 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/BlockChange.java b/src/main/java/de/diddiz/LogBlock/BlockChange.java index 55b396a..da136f4 100644 --- a/src/main/java/de/diddiz/LogBlock/BlockChange.java +++ b/src/main/java/de/diddiz/LogBlock/BlockChange.java @@ -82,11 +82,15 @@ public class BlockChange implements LookupCacheElement { } private String getTypeDetails(BlockData type, byte[] typeState) { + return getTypeDetails(type, typeState, null, null); + } + + private String getTypeDetails(BlockData type, byte[] typeState, BlockData oldType, byte[] oldTypeState) { String typeDetails = null; if (BlockStateCodecs.hasCodec(type.getMaterial())) { try { - typeDetails = BlockStateCodecs.toString(type.getMaterial(), Utils.deserializeYamlConfiguration(typeState)); + typeDetails = BlockStateCodecs.toString(type.getMaterial(), Utils.deserializeYamlConfiguration(typeState), type.equals(oldType) ? Utils.deserializeYamlConfiguration(oldTypeState) : null); } catch (Exception e) { LogBlock.getInstance().getLogger().log(Level.SEVERE, "Could not parse BlockState for " + type.getMaterial(), e); } @@ -123,7 +127,7 @@ public class BlockChange implements LookupCacheElement { } // Process type details once for later use. - String typeDetails = getTypeDetails(type, typeState); + String typeDetails = getTypeDetails(type, typeState, replaced, replacedState); String replacedDetails = getTypeDetails(replaced, replacedState); if (type.getMaterial().equals(replaced.getMaterial())) { @@ -205,7 +209,7 @@ public class BlockChange implements LookupCacheElement { } else if (type instanceof Sign || type instanceof WallSign) { msg.addExtra(createTextComponentWithColor("edited a ", CREATE.getColor())); msg.addExtra(prettyMaterial(type)); - msg.addExtra(createTextComponentWithColor(" to ", CREATE.getColor())); + msg.addExtra(createTextComponentWithColor(" to", CREATE.getColor())); msg.addExtra(prettyState(typeDetails)); } else { msg.addExtra(createTextComponentWithColor("replaced ", CREATE.getColor())); diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodec.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodec.java index a3e5b0b..28e9e3f 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodec.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodec.java @@ -11,5 +11,5 @@ public interface BlockStateCodec { void deserialize(BlockState state, YamlConfiguration conf); - String toString(YamlConfiguration conf); + String toString(YamlConfiguration conf, YamlConfiguration oldState); } diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecBanner.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecBanner.java index 65359eb..8cd7a16 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecBanner.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecBanner.java @@ -64,7 +64,7 @@ public class BlockStateCodecBanner implements BlockStateCodec { } @Override - public String toString(YamlConfiguration conf) { + public String toString(YamlConfiguration conf, YamlConfiguration oldState) { return null; } } diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecLectern.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecLectern.java index ec45080..ab7f764 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecLectern.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecLectern.java @@ -43,7 +43,7 @@ public class BlockStateCodecLectern implements BlockStateCodec { } @Override - public String toString(YamlConfiguration conf) { + public String toString(YamlConfiguration conf, YamlConfiguration oldState) { if (conf != null) { StringBuilder sb = new StringBuilder(); sb.append("[").append("book").append("]"); diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecShulkerBox.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecShulkerBox.java index ac59c27..ccbeca8 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecShulkerBox.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecShulkerBox.java @@ -60,7 +60,7 @@ public class BlockStateCodecShulkerBox implements BlockStateCodec { } @Override - public String toString(YamlConfiguration conf) { + public String toString(YamlConfiguration conf, YamlConfiguration oldState) { if (conf != null) { StringBuilder sb = new StringBuilder(); sb.append("["); diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java index ee88302..656ec74 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSign.java @@ -40,6 +40,9 @@ public class BlockStateCodecSign implements BlockStateCodec { if (signColor != DyeColor.BLACK) { conf.set("color", signColor.name()); } + if (sign.isGlowingText()) { + conf.set("glowing", true); + } return conf; } } @@ -60,6 +63,7 @@ public class BlockStateCodecSign implements BlockStateCodec { if (state instanceof Sign) { Sign sign = (Sign) state; DyeColor signColor = DyeColor.BLACK; + boolean glowing = false; List lines = Collections.emptyList(); if (conf != null) { if (conf.contains("lines")) { @@ -72,24 +76,69 @@ public class BlockStateCodecSign implements BlockStateCodec { // ignored } } + glowing = conf.getBoolean("glowing", false); } for (int i = 0; i < 4; i++) { String line = lines.size() > i && lines.get(i) != null ? lines.get(i) : ""; sign.setLine(i, line); } sign.setColor(signColor); + sign.setGlowingText(glowing); } } @Override - public String toString(YamlConfiguration conf) { - if (conf != null) { + public String toString(YamlConfiguration state, YamlConfiguration oldState) { + if (state != null) { + List lines = state.getStringList("lines"); + List oldLines = Collections.emptyList(); + DyeColor signColor = DyeColor.BLACK; + if (state.contains("color")) { + try { + signColor = DyeColor.valueOf(state.getString("color")); + } catch (IllegalArgumentException | NullPointerException e) { + // ignored + } + } + DyeColor oldSignColor = DyeColor.BLACK; + boolean glowing = state.getBoolean("glowing", false); + boolean oldGlowing = false; + if (oldState != null) { + oldLines = oldState.getStringList("lines"); + if (oldState.contains("color")) { + try { + oldSignColor = DyeColor.valueOf(oldState.getString("color")); + } catch (IllegalArgumentException | NullPointerException e) { + // ignored + } + } + oldGlowing = oldState.getBoolean("glowing", false); + } + StringBuilder sb = new StringBuilder(); - for (String line : conf.getStringList("lines")) { + if (!lines.equals(oldLines)) { + for (String line : lines) { + if (sb.length() > 0) { + sb.append(" "); + } + sb.append("[").append(line).append("]"); + } + } + if (signColor != oldSignColor) { if (sb.length() > 0) { sb.append(" "); } - sb.append("[").append(line).append("]"); + sb.append("(color: " + signColor.name().toLowerCase() + ")"); + } + if (glowing != oldGlowing) { + if (sb.length() > 0) { + sb.append(" "); + } + if (glowing) { + sb.append("(glowing)"); + } else { + sb.append("(not glowing)"); + } } return sb.toString(); } diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSkull.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSkull.java index dbeeaf8..1939944 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSkull.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSkull.java @@ -43,7 +43,7 @@ public class BlockStateCodecSkull implements BlockStateCodec { } @Override - public String toString(YamlConfiguration conf) { + public String toString(YamlConfiguration conf, YamlConfiguration oldState) { UUID ownerId = conf == null ? null : UUID.fromString(conf.getString("owner")); if (ownerId != null) { OfflinePlayer owner = Bukkit.getOfflinePlayer(ownerId); diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSpawner.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSpawner.java index 3269684..0d93fe9 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSpawner.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecSpawner.java @@ -48,7 +48,7 @@ public class BlockStateCodecSpawner implements BlockStateCodec { } @Override - public String toString(YamlConfiguration conf) { + public String toString(YamlConfiguration conf, YamlConfiguration oldState) { if (conf != null) { EntityType entity = EntityType.valueOf(conf.getString("spawnedType")); if (entity != null) { diff --git a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java index b610fa3..515347b 100644 --- a/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java +++ b/src/main/java/de/diddiz/LogBlock/blockstate/BlockStateCodecs.java @@ -51,10 +51,10 @@ public class BlockStateCodecs { } } - public static String toString(Material material, YamlConfiguration state) { + public static String toString(Material material, YamlConfiguration state, YamlConfiguration oldState) { BlockStateCodec codec = codecs.get(material); if (codec != null) { - return codec.toString(state); + return codec.toString(state, oldState); } return null; }