From 31428d60e4cebdcfddf908a88d56f9e876dfab9e Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Fri, 20 Dec 2019 05:15:45 +0100 Subject: [PATCH] Add some hover texts and clickable coords --- .../java/de/diddiz/LogBlock/BlockChange.java | 54 +++++++++---------- .../java/de/diddiz/LogBlock/ChatMessage.java | 2 +- .../de/diddiz/LogBlock/CommandsHandler.java | 2 +- .../java/de/diddiz/LogBlock/EntityChange.java | 4 +- src/main/java/de/diddiz/LogBlock/Kill.java | 4 +- .../diddiz/LogBlock/LookupCacheElement.java | 6 ++- .../diddiz/LogBlock/SummedBlockChanges.java | 2 +- .../diddiz/LogBlock/SummedEntityChanges.java | 2 +- .../java/de/diddiz/LogBlock/SummedKills.java | 2 +- .../java/de/diddiz/LogBlock/WorldEditor.java | 2 +- .../de/diddiz/LogBlock/config/Config.java | 11 +++- .../java/de/diddiz/util/MessagingUtil.java | 44 +++++++++++---- 12 files changed, 85 insertions(+), 50 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/BlockChange.java b/src/main/java/de/diddiz/LogBlock/BlockChange.java index 997926a..55b396a 100644 --- a/src/main/java/de/diddiz/LogBlock/BlockChange.java +++ b/src/main/java/de/diddiz/LogBlock/BlockChange.java @@ -101,11 +101,11 @@ public class BlockChange implements LookupCacheElement { @Override public String toString() { - return BaseComponent.toPlainText(getLogMessage()); + return BaseComponent.toPlainText(getLogMessage(-1)); } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { TextComponent msg = new TextComponent(); if (date > 0) { msg.addExtra(prettyDate(date)); @@ -132,108 +132,108 @@ public class BlockChange implements LookupCacheElement { } else if (ca != null) { if (ca.itemStack == null) { msg.addExtra(createTextComponentWithColor("looked inside ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (ca.remove) { msg.addExtra(createTextComponentWithColor("took ", DESTROY.getColor())); msg.addExtra(BukkitUtils.toString(ca.itemStack)); msg.addExtra(createTextComponentWithColor(" from ", DESTROY.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else { msg.addExtra(createTextComponentWithColor("put ", CREATE.getColor())); msg.addExtra(BukkitUtils.toString(ca.itemStack)); msg.addExtra(createTextComponentWithColor(" into ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } } else if (type instanceof Waterlogged && ((Waterlogged) type).isWaterlogged() != ((Waterlogged) replaced).isWaterlogged()) { if (((Waterlogged) type).isWaterlogged()) { msg.addExtra(createTextComponentWithColor("waterlogged ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else { msg.addExtra(createTextComponentWithColor("dried ", DESTROY.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } } else if (BukkitUtils.getContainerBlocks().contains(type.getMaterial())) { msg.addExtra(createTextComponentWithColor("opened ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type instanceof Openable && ((Openable) type).isOpen() != ((Openable) replaced).isOpen()) { // Door, Trapdoor, Fence gate msg.addExtra(createTextComponentWithColor(((Openable) type).isOpen() ? "opened " : "closed ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type.getMaterial() == Material.LEVER && ((Switch) type).isPowered() != ((Switch) replaced).isPowered()) { msg.addExtra(createTextComponentWithColor("switched ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(prettyState(((Switch) type).isPowered() ? " on" : " off")); } else if (type instanceof Switch && ((Switch) type).isPowered() != ((Switch) replaced).isPowered()) { msg.addExtra(createTextComponentWithColor("pressed ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type.getMaterial() == Material.CAKE) { msg.addExtra(createTextComponentWithColor("ate a piece of ", DESTROY.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type.getMaterial() == Material.NOTE_BLOCK) { Note note = ((NoteBlock) type).getNote(); msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(" to "); msg.addExtra(prettyState(note.getTone().name() + (note.isSharped() ? "#" : ""))); } else if (type.getMaterial() == Material.REPEATER) { msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(" to "); msg.addExtra(prettyState(((Repeater) type).getDelay())); msg.addExtra(createTextComponentWithColor(" ticks delay", DEFAULT.getColor())); } else if (type.getMaterial() == Material.COMPARATOR) { msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(" to "); msg.addExtra(prettyState(((Comparator) type).getMode())); } else if (type.getMaterial() == Material.DAYLIGHT_DETECTOR) { msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(" to "); msg.addExtra(prettyState(((DaylightDetector) type).isInverted() ? "inverted" : "normal")); } else if (type instanceof Lectern) { msg.addExtra(createTextComponentWithColor("changed the book on a ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(" to"); msg.addExtra(prettyState(typeDetails.length() == 0 ? " empty" : typeDetails)); } else if (type instanceof Powerable) { msg.addExtra(createTextComponentWithColor("stepped on ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type.getMaterial() == Material.TRIPWIRE) { msg.addExtra(createTextComponentWithColor("ran into ", INTERACT.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); } else if (type instanceof Sign || type instanceof WallSign) { msg.addExtra(createTextComponentWithColor("edited a ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(createTextComponentWithColor(" to ", CREATE.getColor())); msg.addExtra(prettyState(typeDetails)); } else { msg.addExtra(createTextComponentWithColor("replaced ", CREATE.getColor())); - msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyMaterial(replaced)); msg.addExtra(prettyState(replacedDetails)); msg.addExtra(createTextComponentWithColor(" with ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(prettyState(typeDetails)); } } else if (BukkitUtils.isEmpty(type.getMaterial())) { msg.addExtra(createTextComponentWithColor("destroyed ", DESTROY.getColor())); - msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyMaterial(replaced)); msg.addExtra(prettyState(replacedDetails)); } else if (BukkitUtils.isEmpty(replaced.getMaterial())) { msg.addExtra(createTextComponentWithColor("created ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(prettyState(typeDetails)); } else { msg.addExtra(createTextComponentWithColor("replaced ", CREATE.getColor())); - msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyMaterial(replaced)); msg.addExtra(prettyState(replacedDetails)); msg.addExtra(createTextComponentWithColor(" with ", CREATE.getColor())); - msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyMaterial(type)); msg.addExtra(prettyState(typeDetails)); } if (loc != null) { msg.addExtra(" at "); - msg.addExtra(prettyLocation(loc)); + msg.addExtra(prettyLocation(loc, entry)); } return new BaseComponent[] { msg }; } diff --git a/src/main/java/de/diddiz/LogBlock/ChatMessage.java b/src/main/java/de/diddiz/LogBlock/ChatMessage.java index 9c63262..1f55dd2 100644 --- a/src/main/java/de/diddiz/LogBlock/ChatMessage.java +++ b/src/main/java/de/diddiz/LogBlock/ChatMessage.java @@ -39,7 +39,7 @@ public class ChatMessage implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { TextComponent msg = new TextComponent(); if (date > 0) { msg.addExtra(prettyDate(date)); diff --git a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java index c309289..71f22a7 100755 --- a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java @@ -405,7 +405,7 @@ public class CommandsHandler implements CommandExecutor { if (lookupElements[i].getLocation() != null) { message.addExtra(new TextComponent("(" + (i + 1) + ") ")); } - for (BaseComponent component : lookupElements[i].getLogMessage()) { + for (BaseComponent component : lookupElements[i].getLogMessage(i + 1)) { message.addExtra(component); } sender.spigot().sendMessage(message); diff --git a/src/main/java/de/diddiz/LogBlock/EntityChange.java b/src/main/java/de/diddiz/LogBlock/EntityChange.java index 5f04cdb..a7e0e58 100644 --- a/src/main/java/de/diddiz/LogBlock/EntityChange.java +++ b/src/main/java/de/diddiz/LogBlock/EntityChange.java @@ -76,7 +76,7 @@ public class EntityChange implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { TextComponent msg = new TextComponent(); if (date > 0) { msg.addExtra(prettyDate(date)); @@ -123,7 +123,7 @@ public class EntityChange implements LookupCacheElement { } if (loc != null) { msg.addExtra(" at "); - msg.addExtra(prettyLocation(loc)); + msg.addExtra(prettyLocation(loc, entry)); } return new BaseComponent[] { msg }; } diff --git a/src/main/java/de/diddiz/LogBlock/Kill.java b/src/main/java/de/diddiz/LogBlock/Kill.java index f052b47..bec4f18 100755 --- a/src/main/java/de/diddiz/LogBlock/Kill.java +++ b/src/main/java/de/diddiz/LogBlock/Kill.java @@ -48,7 +48,7 @@ public class Kill implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { TextComponent msg = new TextComponent(); if (date > 0) { msg.addExtra(prettyDate(date)); @@ -58,7 +58,7 @@ public class Kill implements LookupCacheElement { msg.addExtra(new TextComponent(victimName)); if (loc != null) { msg.addExtra(" at "); - msg.addExtra(prettyLocation(loc)); + msg.addExtra(prettyLocation(loc, entry)); } if (weapon != 0) { msg.addExtra(" with "); diff --git a/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java b/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java index ea63ce4..402ec8a 100644 --- a/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java +++ b/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java @@ -6,5 +6,9 @@ import org.bukkit.Location; public interface LookupCacheElement { public Location getLocation(); - public BaseComponent[] getLogMessage(); + public default BaseComponent[] getLogMessage() { + return getLogMessage(-1); + } + + public BaseComponent[] getLogMessage(int entry); } diff --git a/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java b/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java index 7b07339..c9eceae 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java +++ b/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java @@ -31,7 +31,7 @@ public class SummedBlockChanges implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { return MessagingUtil.formatSummarizedChanges(created, destroyed, actor != null ? new TextComponent(actor.getName()) : prettyMaterial(Objects.toString(MaterialConverter.getMaterial(type))), 10, 10, spaceFactor); } } diff --git a/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java b/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java index 3b69784..5677cb0 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java +++ b/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java @@ -33,7 +33,7 @@ public class SummedEntityChanges implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { return MessagingUtil.formatSummarizedChanges(created, destroyed, actor != null ? new TextComponent(actor.getName()) : prettyMaterial(Objects.toString(EntityTypeConverter.getEntityType(type))), 10, 10, spaceFactor); } } diff --git a/src/main/java/de/diddiz/LogBlock/SummedKills.java b/src/main/java/de/diddiz/LogBlock/SummedKills.java index e0ea69a..6151a73 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedKills.java +++ b/src/main/java/de/diddiz/LogBlock/SummedKills.java @@ -25,7 +25,7 @@ public class SummedKills implements LookupCacheElement { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { return MessagingUtil.formatSummarizedChanges(kills, killed, new TextComponent(player.getName()), 6, 7, spaceFactor); } } diff --git a/src/main/java/de/diddiz/LogBlock/WorldEditor.java b/src/main/java/de/diddiz/LogBlock/WorldEditor.java index 972d11c..662d4be 100644 --- a/src/main/java/de/diddiz/LogBlock/WorldEditor.java +++ b/src/main/java/de/diddiz/LogBlock/WorldEditor.java @@ -476,7 +476,7 @@ public class WorldEditor implements Runnable { } @Override - public BaseComponent[] getLogMessage() { + public BaseComponent[] getLogMessage(int entry) { return TextComponent.fromLegacyText(getMessage()); } } diff --git a/src/main/java/de/diddiz/LogBlock/config/Config.java b/src/main/java/de/diddiz/LogBlock/config/Config.java index 103f349..3f1a61d 100644 --- a/src/main/java/de/diddiz/LogBlock/config/Config.java +++ b/src/main/java/de/diddiz/LogBlock/config/Config.java @@ -52,6 +52,7 @@ public class Config { public static Set hiddenPlayers; public static List ignoredChat; public static SimpleDateFormat formatter; + public static SimpleDateFormat formatterShort; public static boolean safetyIdCheck; public static boolean debug; public static boolean logEnvironmentalKills; @@ -121,11 +122,17 @@ public class Config { def.put("lookup.linesLimit", 1500); def.put("lookup.hardLinesLimit", 100000); try { - formatter = new SimpleDateFormat(config.getString("lookup.dateFormat", "MM-dd HH:mm:ss")); + formatter = new SimpleDateFormat(config.getString("lookup.dateFormat", "yyyy-MM-dd HH:mm:ss")); } catch (IllegalArgumentException e) { throw new DataFormatException("Invalid specification for date format, please see http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html : " + e.getMessage()); } - def.put("lookup.dateFormat", "MM-dd HH:mm:ss"); + def.put("lookup.dateFormat", "yyyy-MM-dd HH:mm:ss"); + try { + formatterShort = new SimpleDateFormat(config.getString("lookup.dateFormatShort", "MM-dd HH:mm")); + } catch (IllegalArgumentException e) { + throw new DataFormatException("Invalid specification for date format, please see http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html : " + e.getMessage()); + } + def.put("lookup.dateFormatShort", "MM-dd HH:mm"); def.put("questioner.askRollbacks", true); def.put("questioner.askRedos", true); def.put("questioner.askClearLogs", true); diff --git a/src/main/java/de/diddiz/util/MessagingUtil.java b/src/main/java/de/diddiz/util/MessagingUtil.java index a8d6663..f1c8128 100644 --- a/src/main/java/de/diddiz/util/MessagingUtil.java +++ b/src/main/java/de/diddiz/util/MessagingUtil.java @@ -8,9 +8,13 @@ import static de.diddiz.util.Utils.spaces; import de.diddiz.LogBlock.config.Config; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.data.BlockData; import org.bukkit.entity.EntityType; public class MessagingUtil { @@ -36,7 +40,9 @@ public class MessagingUtil { } public static TextComponent prettyDate(long date) { - return brackets(BracketType.STANDARD, createTextComponentWithColor(Config.formatter.format(date), TypeColor.DATE.getColor())); + TextComponent tc = brackets(BracketType.STANDARD, createTextComponentWithColor(Config.formatterShort.format(date), TypeColor.DATE.getColor())); + tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(Config.formatter.format(date)).create())); + return tc; } public static TextComponent prettyState(String stateName) { @@ -59,21 +65,39 @@ public class MessagingUtil { return prettyMaterial(material.name()); } + public static TextComponent prettyMaterial(BlockData material) { + TextComponent tc = prettyMaterial(material.getMaterial()); + String bdString = material.getAsString(); + int bracket = bdString.indexOf("["); + if (bracket >= 0) { + int bracket2 = bdString.indexOf("]", bracket); + if (bracket2 >= 0) { + String state = bdString.substring(bracket + 1, bracket2).replace(',', '\n'); + tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder(state).create())); + } + } + return tc; + } + public static TextComponent prettyEntityType(EntityType type) { return prettyMaterial(type.name()); } - public static TextComponent prettyLocation(Location loc) { - return prettyLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + public static TextComponent prettyLocation(Location loc, int entryId) { + return prettyLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), entryId); } - public static TextComponent prettyLocation(Number x, Number y, Number z) { - TextComponent tc = createTextComponentWithColor("X: ", DEFAULT.getColor()); - tc.addExtra(createTextComponentWithColor(Integer.toString(x.intValue()), TypeColor.COORDINATE.getColor())); - tc.addExtra(createTextComponentWithColor(", Y: ", DEFAULT.getColor())); - tc.addExtra(createTextComponentWithColor(Integer.toString(y.intValue()), TypeColor.COORDINATE.getColor())); - tc.addExtra(createTextComponentWithColor(", Z: ", DEFAULT.getColor())); - tc.addExtra(createTextComponentWithColor(Integer.toString(z.intValue()), TypeColor.COORDINATE.getColor())); + public static TextComponent prettyLocation(int x, int y, int z, int entryId) { + TextComponent tc = createTextComponentWithColor("", DEFAULT.getColor()); + tc.addExtra(createTextComponentWithColor(Integer.toString(x), TypeColor.COORDINATE.getColor())); + tc.addExtra(createTextComponentWithColor(", ", DEFAULT.getColor())); + tc.addExtra(createTextComponentWithColor(Integer.toString(y), TypeColor.COORDINATE.getColor())); + tc.addExtra(createTextComponentWithColor(", ", DEFAULT.getColor())); + tc.addExtra(createTextComponentWithColor(Integer.toString(z), TypeColor.COORDINATE.getColor())); + if (entryId > 0) { + tc.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/lb tp " + entryId)); + tc.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Teleport here").create())); + } return tc; }