From 169328e159e1b5dd71a00fdae9398f60888a814d Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Wed, 18 Dec 2019 01:33:40 +0100 Subject: [PATCH] Use ChatComponent API for log messages --- .../java/de/diddiz/LogBlock/BlockChange.java | 129 +++++++++++++----- .../java/de/diddiz/LogBlock/ChatMessage.java | 24 +++- .../de/diddiz/LogBlock/CommandsHandler.java | 14 +- .../java/de/diddiz/LogBlock/EntityChange.java | 52 ++++--- src/main/java/de/diddiz/LogBlock/Kill.java | 42 +++--- .../diddiz/LogBlock/LookupCacheElement.java | 3 +- .../diddiz/LogBlock/SummedBlockChanges.java | 16 +-- .../diddiz/LogBlock/SummedEntityChanges.java | 9 +- .../java/de/diddiz/LogBlock/SummedKills.java | 17 +-- .../java/de/diddiz/LogBlock/WorldEditor.java | 9 +- src/main/java/de/diddiz/util/ActionColor.java | 2 +- src/main/java/de/diddiz/util/BukkitUtils.java | 37 +++-- .../java/de/diddiz/util/MessagingUtil.java | 71 +++++++--- src/main/java/de/diddiz/util/TypeColor.java | 2 +- 14 files changed, 270 insertions(+), 157 deletions(-) diff --git a/src/main/java/de/diddiz/LogBlock/BlockChange.java b/src/main/java/de/diddiz/LogBlock/BlockChange.java index 821fd0c..997926a 100644 --- a/src/main/java/de/diddiz/LogBlock/BlockChange.java +++ b/src/main/java/de/diddiz/LogBlock/BlockChange.java @@ -3,7 +3,8 @@ package de.diddiz.LogBlock; import static de.diddiz.util.ActionColor.CREATE; import static de.diddiz.util.ActionColor.DESTROY; import static de.diddiz.util.ActionColor.INTERACT; -import static de.diddiz.util.MessagingUtil.brackets; +import static de.diddiz.util.TypeColor.DEFAULT; +import static de.diddiz.util.MessagingUtil.createTextComponentWithColor; import static de.diddiz.util.MessagingUtil.prettyDate; import static de.diddiz.util.MessagingUtil.prettyLocation; import static de.diddiz.util.MessagingUtil.prettyMaterial; @@ -11,11 +12,12 @@ import static de.diddiz.util.MessagingUtil.prettyState; import de.diddiz.LogBlock.blockstate.BlockStateCodecs; import de.diddiz.util.BukkitUtils; -import de.diddiz.util.MessagingUtil.BracketType; import de.diddiz.util.Utils; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Note; @@ -99,18 +101,25 @@ public class BlockChange implements LookupCacheElement { @Override public String toString() { - final StringBuilder msg = new StringBuilder(); + return BaseComponent.toPlainText(getLogMessage()); + } + + @Override + public BaseComponent[] getLogMessage() { + TextComponent msg = new TextComponent(); if (date > 0) { - msg.append(brackets(prettyDate(date), BracketType.STANDARD)).append(' '); + msg.addExtra(prettyDate(date)); + msg.addExtra(" "); } if (actor != null) { - msg.append(actor.getName()).append(" "); + msg.addExtra(actor.getName()); + msg.addExtra(" "); } BlockData type = getBlockSet(); BlockData replaced = getBlockReplaced(); if (type == null || replaced == null) { - msg.append("did an unknown block modification"); - return msg.toString(); + msg.addExtra("did an unknown block modification"); + return new BaseComponent[] { msg }; } // Process type details once for later use. @@ -119,63 +128,114 @@ public class BlockChange implements LookupCacheElement { if (type.getMaterial().equals(replaced.getMaterial())) { if (BukkitUtils.isEmpty(type.getMaterial())) { - msg.append(INTERACT).append("did an unspecified action"); + msg.addExtra(createTextComponentWithColor("did an unspecified action", INTERACT.getColor())); } else if (ca != null) { if (ca.itemStack == null) { - msg.append(INTERACT).append("looked inside ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("looked inside ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (ca.remove) { - msg.append(DESTROY).append("took ").append(BukkitUtils.toString(ca.itemStack)).append(" from ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("took ", DESTROY.getColor())); + msg.addExtra(BukkitUtils.toString(ca.itemStack)); + msg.addExtra(createTextComponentWithColor(" from ", DESTROY.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else { - msg.append(CREATE).append("put ").append(BukkitUtils.toString(ca.itemStack)).append(" into ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("put ", CREATE.getColor())); + msg.addExtra(BukkitUtils.toString(ca.itemStack)); + msg.addExtra(createTextComponentWithColor(" into ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } } else if (type instanceof Waterlogged && ((Waterlogged) type).isWaterlogged() != ((Waterlogged) replaced).isWaterlogged()) { if (((Waterlogged) type).isWaterlogged()) { - msg.append(CREATE).append("waterlogged ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("waterlogged ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else { - msg.append(DESTROY).append("dried ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("dried ", DESTROY.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } } else if (BukkitUtils.getContainerBlocks().contains(type.getMaterial())) { - msg.append(INTERACT).append("opened ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("opened ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type instanceof Openable && ((Openable) type).isOpen() != ((Openable) replaced).isOpen()) { // Door, Trapdoor, Fence gate - msg.append(INTERACT).append(((Openable) type).isOpen() ? "opened" : "closed").append(" ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor(((Openable) type).isOpen() ? "opened " : "closed ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type.getMaterial() == Material.LEVER && ((Switch) type).isPowered() != ((Switch) replaced).isPowered()) { - msg.append(INTERACT).append("switched ").append(prettyMaterial(type.getMaterial())).append(" ").append(prettyState(((Switch) type).isPowered() ? "on" : "off")); + msg.addExtra(createTextComponentWithColor("switched ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyState(((Switch) type).isPowered() ? " on" : " off")); } else if (type instanceof Switch && ((Switch) type).isPowered() != ((Switch) replaced).isPowered()) { - msg.append(INTERACT).append("pressed ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("pressed ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type.getMaterial() == Material.CAKE) { - msg.append(DESTROY).append("ate a piece of ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("ate a piece of ", DESTROY.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type.getMaterial() == Material.NOTE_BLOCK) { Note note = ((NoteBlock) type).getNote(); - msg.append(INTERACT).append("set ").append(prettyMaterial(type.getMaterial())).append(" to ").append(prettyState(note.getTone().name() + (note.isSharped() ? "#" : ""))); + msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(" to "); + msg.addExtra(prettyState(note.getTone().name() + (note.isSharped() ? "#" : ""))); } else if (type.getMaterial() == Material.REPEATER) { - msg.append(INTERACT).append("set ").append(prettyMaterial(type.getMaterial())).append(" to ").append(prettyState(((Repeater) type).getDelay())).append(" ticks delay"); + msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(" to "); + msg.addExtra(prettyState(((Repeater) type).getDelay())); + msg.addExtra(createTextComponentWithColor(" ticks delay", DEFAULT.getColor())); } else if (type.getMaterial() == Material.COMPARATOR) { - msg.append(INTERACT).append("set ").append(prettyMaterial(type.getMaterial())).append(" to ").append(prettyState(((Comparator) type).getMode())); + msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(" to "); + msg.addExtra(prettyState(((Comparator) type).getMode())); } else if (type.getMaterial() == Material.DAYLIGHT_DETECTOR) { - msg.append(INTERACT).append("set ").append(prettyMaterial(type.getMaterial())).append(" to ").append(prettyState(((DaylightDetector) type).isInverted() ? "inverted" : "normal")); + msg.addExtra(createTextComponentWithColor("set ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(" to "); + msg.addExtra(prettyState(((DaylightDetector) type).isInverted() ? "inverted" : "normal")); } else if (type instanceof Lectern) { - msg.append(INTERACT).append("changed the book on a ").append(prettyMaterial(type.getMaterial())).append(" to").append(prettyState(typeDetails.length() == 0 ? " empty" : typeDetails)); + msg.addExtra(createTextComponentWithColor("changed the book on a ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(" to"); + msg.addExtra(prettyState(typeDetails.length() == 0 ? " empty" : typeDetails)); } else if (type instanceof Powerable) { - msg.append(INTERACT).append("stepped on ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("stepped on ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type.getMaterial() == Material.TRIPWIRE) { - msg.append(INTERACT).append("ran into ").append(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor("ran into ", INTERACT.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); } else if (type instanceof Sign || type instanceof WallSign) { - msg.append(CREATE).append("edited a ").append(prettyMaterial(type.getMaterial())).append(CREATE).append(" to ").append(prettyState(typeDetails)); + msg.addExtra(createTextComponentWithColor("edited a ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(createTextComponentWithColor(" to ", CREATE.getColor())); + msg.addExtra(prettyState(typeDetails)); } else { - msg.append(CREATE).append("replaced ").append(prettyMaterial(replaced.getMaterial())).append(prettyState(replacedDetails)).append(CREATE).append(" with ").append(prettyMaterial(type.getMaterial())).append(prettyState(typeDetails)); + msg.addExtra(createTextComponentWithColor("replaced ", CREATE.getColor())); + msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyState(replacedDetails)); + msg.addExtra(createTextComponentWithColor(" with ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyState(typeDetails)); } } else if (BukkitUtils.isEmpty(type.getMaterial())) { - msg.append(DESTROY).append("destroyed ").append(prettyMaterial(replaced.getMaterial())).append(prettyState(replacedDetails)); + msg.addExtra(createTextComponentWithColor("destroyed ", DESTROY.getColor())); + msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyState(replacedDetails)); } else if (BukkitUtils.isEmpty(replaced.getMaterial())) { - msg.append(CREATE).append("created ").append(prettyMaterial(type.getMaterial())).append(prettyState(typeDetails)); + msg.addExtra(createTextComponentWithColor("created ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyState(typeDetails)); } else { - msg.append(CREATE).append("replaced ").append(prettyMaterial(replaced.getMaterial())).append(prettyState(replacedDetails)).append(CREATE).append(" with ").append(type.getMaterial().name()).append(typeDetails); + msg.addExtra(createTextComponentWithColor("replaced ", CREATE.getColor())); + msg.addExtra(prettyMaterial(replaced.getMaterial())); + msg.addExtra(prettyState(replacedDetails)); + msg.addExtra(createTextComponentWithColor(" with ", CREATE.getColor())); + msg.addExtra(prettyMaterial(type.getMaterial())); + msg.addExtra(prettyState(typeDetails)); } if (loc != null) { - msg.append(" at: ").append(prettyLocation(loc)); + msg.addExtra(" at "); + msg.addExtra(prettyLocation(loc)); } - return msg.toString(); + return new BaseComponent[] { msg }; } public BlockData getBlockReplaced() { @@ -190,9 +250,4 @@ public class BlockChange implements LookupCacheElement { public Location getLocation() { return loc; } - - @Override - public String getMessage() { - return toString(); - } } diff --git a/src/main/java/de/diddiz/LogBlock/ChatMessage.java b/src/main/java/de/diddiz/LogBlock/ChatMessage.java index 256a2f8..9c63262 100644 --- a/src/main/java/de/diddiz/LogBlock/ChatMessage.java +++ b/src/main/java/de/diddiz/LogBlock/ChatMessage.java @@ -1,13 +1,15 @@ package de.diddiz.LogBlock; -import static de.diddiz.util.ActionColor.CREATE; import static de.diddiz.util.LoggingUtil.checkText; import static de.diddiz.util.MessagingUtil.brackets; +import static de.diddiz.util.MessagingUtil.prettyDate; +import de.diddiz.util.MessagingUtil; import de.diddiz.util.MessagingUtil.BracketType; import java.sql.ResultSet; import java.sql.SQLException; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; public class ChatMessage implements LookupCacheElement { @@ -37,7 +39,21 @@ public class ChatMessage implements LookupCacheElement { } @Override - public String getMessage() { - return (playerName != null ? brackets(ChatColor.WHITE + playerName, BracketType.ANGLE) + ' ' : "") + (message != null ? CREATE + message : ""); + public BaseComponent[] getLogMessage() { + TextComponent msg = new TextComponent(); + if (date > 0) { + msg.addExtra(prettyDate(date)); + msg.addExtra(" "); + } + if (playerName != null) { + msg.addExtra(brackets(BracketType.ANGLE, MessagingUtil.createTextComponentWithColor(playerName, net.md_5.bungee.api.ChatColor.WHITE))); + msg.addExtra(" "); + } + if (message != null) { + for (BaseComponent messageComponent : TextComponent.fromLegacyText(message)) { + msg.addExtra(messageComponent); + } + } + return new BaseComponent[] { msg }; } } diff --git a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java index 7b38135..c309289 100755 --- a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java +++ b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java @@ -43,6 +43,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; @@ -398,7 +400,15 @@ public class CommandsHandler implements CommandExecutor { sender.sendMessage(HEADER + "Page " + page + "/" + numberOfPages); } for (int i = startpos; i <= stoppos; i++) { - sender.sendMessage(DEFAULT + (lookupElements[i].getLocation() != null ? "(" + (i + 1) + ") " : "") + lookupElements[i].getMessage()); + TextComponent message = new TextComponent(); + message.setColor(DEFAULT.getColor()); + if (lookupElements[i].getLocation() != null) { + message.addExtra(new TextComponent("(" + (i + 1) + ") ")); + } + for (BaseComponent component : lookupElements[i].getLogMessage()) { + message.addExtra(component); + } + sender.spigot().sendMessage(message); } if (setSessionPage) { getSession(sender).page = page; @@ -586,7 +596,7 @@ public class CommandsHandler implements CommandExecutor { } final LookupCacheElementFactory factory = new LookupCacheElementFactory(params, sender instanceof Player ? 2 / 3f : 1); while (rs.next()) { - writer.write(factory.getLookupCacheElement(rs).getMessage() + newline); + writer.write(BaseComponent.toPlainText(factory.getLookupCacheElement(rs).getLogMessage()) + newline); counter++; } writer.close(); diff --git a/src/main/java/de/diddiz/LogBlock/EntityChange.java b/src/main/java/de/diddiz/LogBlock/EntityChange.java index 71e9189..5f04cdb 100644 --- a/src/main/java/de/diddiz/LogBlock/EntityChange.java +++ b/src/main/java/de/diddiz/LogBlock/EntityChange.java @@ -3,17 +3,18 @@ package de.diddiz.LogBlock; import static de.diddiz.util.ActionColor.CREATE; import static de.diddiz.util.ActionColor.DESTROY; import static de.diddiz.util.ActionColor.INTERACT; -import static de.diddiz.util.MessagingUtil.brackets; +import static de.diddiz.util.MessagingUtil.createTextComponentWithColor; import static de.diddiz.util.MessagingUtil.prettyDate; import static de.diddiz.util.MessagingUtil.prettyEntityType; import static de.diddiz.util.MessagingUtil.prettyLocation; import static de.diddiz.util.MessagingUtil.prettyMaterial; -import de.diddiz.util.MessagingUtil.BracketType; import de.diddiz.util.Utils; import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.ArmorStand; @@ -71,57 +72,64 @@ public class EntityChange implements LookupCacheElement { @Override public String toString() { - final StringBuilder msg = new StringBuilder(); + return BaseComponent.toPlainText(getLogMessage()); + } + + @Override + public BaseComponent[] getLogMessage() { + TextComponent msg = new TextComponent(); if (date > 0) { - msg.append(brackets(prettyDate(date), BracketType.STANDARD)).append(' '); + msg.addExtra(prettyDate(date)); + msg.addExtra(" "); } if (actor != null) { - msg.append(actor.getName()).append(" "); + msg.addExtra(actor.getName()); + msg.addExtra(" "); } if (changeType == EntityChangeType.CREATE) { - msg.append(CREATE).append("created "); + msg.addExtra(createTextComponentWithColor("created ", CREATE.getColor())); } else if (changeType == EntityChangeType.KILL) { boolean living = type != null && LivingEntity.class.isAssignableFrom(type.getEntityClass()) && !ArmorStand.class.isAssignableFrom(type.getDeclaringClass()); - msg.append(DESTROY).append(living ? "killed " : "destroyed "); + msg.addExtra(createTextComponentWithColor(living ? "killed " : "destroyed ", DESTROY.getColor())); } else if (changeType == EntityChangeType.ADDEQUIP) { YamlConfiguration conf = Utils.deserializeYamlConfiguration(data); ItemStack stack = conf == null ? null : conf.getItemStack("item"); if (stack == null) { - msg.append(CREATE).append("added an item to "); + msg.addExtra(createTextComponentWithColor("added an item to ", CREATE.getColor())); } else { - msg.append(CREATE).append("added ").append(prettyMaterial(stack.getType())).append(" to "); + msg.addExtra(createTextComponentWithColor("added ", CREATE.getColor())); + msg.addExtra(prettyMaterial(stack.getType())); + msg.addExtra(" to "); } } else if (changeType == EntityChangeType.REMOVEEQUIP) { YamlConfiguration conf = Utils.deserializeYamlConfiguration(data); ItemStack stack = conf == null ? null : conf.getItemStack("item"); if (stack == null) { - msg.append(DESTROY).append("removed an item from "); + msg.addExtra(createTextComponentWithColor("removed an item from ", DESTROY.getColor())); } else { - msg.append(DESTROY).append("removed ").append(prettyMaterial(stack.getType())).append(" from "); + msg.addExtra(createTextComponentWithColor("removed ", DESTROY.getColor())); + msg.addExtra(prettyMaterial(stack.getType())); + msg.addExtra(" from "); } } else if (changeType == EntityChangeType.MODIFY) { - msg.append(INTERACT).append("modified "); + msg.addExtra(createTextComponentWithColor("modified ", INTERACT.getColor())); } else { - msg.append(INTERACT).append("did an unknown action to "); + msg.addExtra(createTextComponentWithColor("did an unknown action to ", INTERACT.getColor())); } if (type != null) { - msg.append(prettyEntityType(type)); + msg.addExtra(prettyEntityType(type)); } else { - msg.append(prettyMaterial("an unknown entity")); + msg.addExtra(prettyMaterial("an unknown entity")); } if (loc != null) { - msg.append(" at: ").append(prettyLocation(loc)); + msg.addExtra(" at "); + msg.addExtra(prettyLocation(loc)); } - return msg.toString(); + return new BaseComponent[] { msg }; } @Override public Location getLocation() { return loc; } - - @Override - public String getMessage() { - return toString(); - } } diff --git a/src/main/java/de/diddiz/LogBlock/Kill.java b/src/main/java/de/diddiz/LogBlock/Kill.java index 549dadf..f052b47 100755 --- a/src/main/java/de/diddiz/LogBlock/Kill.java +++ b/src/main/java/de/diddiz/LogBlock/Kill.java @@ -1,16 +1,15 @@ package de.diddiz.LogBlock; import static de.diddiz.util.ActionColor.DESTROY; -import static de.diddiz.util.MessagingUtil.brackets; import static de.diddiz.util.MessagingUtil.prettyDate; import static de.diddiz.util.MessagingUtil.prettyLocation; import static de.diddiz.util.MessagingUtil.prettyMaterial; -import static de.diddiz.util.TypeColor.DEFAULT; - import de.diddiz.util.BukkitUtils; -import de.diddiz.util.MessagingUtil.BracketType; +import de.diddiz.util.MessagingUtil; import java.sql.ResultSet; import java.sql.SQLException; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; import org.bukkit.Material; @@ -40,19 +39,7 @@ public class Kill implements LookupCacheElement { @Override public String toString() { - final StringBuilder msg = new StringBuilder(); - if (date > 0) { - msg.append(brackets(prettyDate(date), BracketType.STANDARD)).append(' '); - } - msg.append(killerName).append(DESTROY).append(" killed ").append(DEFAULT).append(victimName); - if (loc != null) { - msg.append(" at ").append(prettyLocation(loc)); - } - if (weapon != 0) { - String weaponName = prettyItemName(MaterialConverter.getMaterial(weapon)); - msg.append(" with ").append(weaponName); // + ("aeiou".contains(weaponName.substring(0, 1)) ? "an " : "a " ) - } - return msg.toString(); + return BaseComponent.toPlainText(getLogMessage()); } @Override @@ -61,11 +48,26 @@ public class Kill implements LookupCacheElement { } @Override - public String getMessage() { - return toString(); + public BaseComponent[] getLogMessage() { + TextComponent msg = new TextComponent(); + if (date > 0) { + msg.addExtra(prettyDate(date)); + msg.addExtra(" "); + } + msg.addExtra(MessagingUtil.createTextComponentWithColor(killerName + " killed ", DESTROY.getColor())); + msg.addExtra(new TextComponent(victimName)); + if (loc != null) { + msg.addExtra(" at "); + msg.addExtra(prettyLocation(loc)); + } + if (weapon != 0) { + msg.addExtra(" with "); + msg.addExtra(prettyItemName(MaterialConverter.getMaterial(weapon))); + } + return new BaseComponent[] { msg }; } - public String prettyItemName(Material t) { + public TextComponent prettyItemName(Material t) { if (t == null || BukkitUtils.isEmpty(t)) { return prettyMaterial("fist"); } diff --git a/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java b/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java index 595a2e3..ea63ce4 100644 --- a/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java +++ b/src/main/java/de/diddiz/LogBlock/LookupCacheElement.java @@ -1,9 +1,10 @@ package de.diddiz.LogBlock; +import net.md_5.bungee.api.chat.BaseComponent; import org.bukkit.Location; public interface LookupCacheElement { public Location getLocation(); - public String getMessage(); + public BaseComponent[] getLogMessage(); } diff --git a/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java b/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java index 183159e..7b07339 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java +++ b/src/main/java/de/diddiz/LogBlock/SummedBlockChanges.java @@ -1,15 +1,13 @@ package de.diddiz.LogBlock; -import static de.diddiz.util.ActionColor.CREATE; -import static de.diddiz.util.ActionColor.DESTROY; import static de.diddiz.util.MessagingUtil.prettyMaterial; -import static de.diddiz.util.TypeColor.DEFAULT; -import static de.diddiz.util.Utils.spaces; - import de.diddiz.LogBlock.QueryParams.SummarizationMode; +import de.diddiz.util.MessagingUtil; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Objects; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; public class SummedBlockChanges implements LookupCacheElement { @@ -33,11 +31,7 @@ public class SummedBlockChanges implements LookupCacheElement { } @Override - public String getMessage() { - StringBuilder builder = new StringBuilder(); - builder.append(CREATE).append(created).append(spaces((int) ((10 - String.valueOf(created).length()) / spaceFactor))); - builder.append(DESTROY).append(destroyed).append(spaces((int) ((10 - String.valueOf(destroyed).length()) / spaceFactor))); - builder.append(actor != null ? DEFAULT + actor.getName() : prettyMaterial(Objects.toString(MaterialConverter.getMaterial(type)))); - return builder.toString(); + public BaseComponent[] getLogMessage() { + 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 5b1fd45..3b69784 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java +++ b/src/main/java/de/diddiz/LogBlock/SummedEntityChanges.java @@ -1,13 +1,16 @@ package de.diddiz.LogBlock; import de.diddiz.LogBlock.QueryParams.SummarizationMode; +import de.diddiz.util.MessagingUtil; import org.bukkit.Location; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Objects; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; -import static de.diddiz.util.Utils.spaces; +import static de.diddiz.util.MessagingUtil.prettyMaterial; public class SummedEntityChanges implements LookupCacheElement { private final int type; @@ -30,7 +33,7 @@ public class SummedEntityChanges implements LookupCacheElement { } @Override - public String getMessage() { - return created + spaces((int) ((10 - String.valueOf(created).length()) / spaceFactor)) + destroyed + spaces((int) ((10 - String.valueOf(destroyed).length()) / spaceFactor)) + (actor != null ? actor.getName() : Objects.toString(EntityTypeConverter.getEntityType(type))); + public BaseComponent[] getLogMessage() { + 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 3594552..e0ea69a 100644 --- a/src/main/java/de/diddiz/LogBlock/SummedKills.java +++ b/src/main/java/de/diddiz/LogBlock/SummedKills.java @@ -1,12 +1,10 @@ package de.diddiz.LogBlock; -import static de.diddiz.util.ActionColor.CREATE; -import static de.diddiz.util.ActionColor.DESTROY; -import static de.diddiz.util.TypeColor.DEFAULT; -import static de.diddiz.util.Utils.spaces; - +import de.diddiz.util.MessagingUtil; import java.sql.ResultSet; import java.sql.SQLException; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Location; public class SummedKills implements LookupCacheElement { @@ -27,12 +25,7 @@ public class SummedKills implements LookupCacheElement { } @Override - public String getMessage() { - StringBuilder builder = new StringBuilder(); - builder.append(CREATE).append(kills).append(spaces((int) ((6 - String.valueOf(kills).length()) / spaceFactor))); - builder.append(DESTROY).append(killed).append(spaces((int) ((7 - String.valueOf(killed).length()) / spaceFactor))); - builder.append(DEFAULT).append(player.getName()); - return builder.toString(); - + public BaseComponent[] getLogMessage() { + 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 4e37747..972d11c 100644 --- a/src/main/java/de/diddiz/LogBlock/WorldEditor.java +++ b/src/main/java/de/diddiz/LogBlock/WorldEditor.java @@ -43,6 +43,8 @@ import java.util.HashMap; import java.util.List; import java.util.UUID; import java.util.logging.Level; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import static de.diddiz.LogBlock.config.Config.dontRollback; import static de.diddiz.LogBlock.config.Config.replaceAnyway; @@ -184,7 +186,7 @@ public class WorldEditor implements Runnable { file.getParentFile().mkdirs(); final PrintWriter writer = new PrintWriter(file); for (final LookupCacheElement err : errorList) { - writer.println(err.getMessage()); + writer.println(BaseComponent.toPlainText(err.getLogMessage())); } writer.close(); } catch (final Exception ex) { @@ -472,5 +474,10 @@ public class WorldEditor implements Runnable { public Location getLocation() { return loc; } + + @Override + public BaseComponent[] getLogMessage() { + return TextComponent.fromLegacyText(getMessage()); + } } } diff --git a/src/main/java/de/diddiz/util/ActionColor.java b/src/main/java/de/diddiz/util/ActionColor.java index 5573ba3..e336ba0 100644 --- a/src/main/java/de/diddiz/util/ActionColor.java +++ b/src/main/java/de/diddiz/util/ActionColor.java @@ -1,6 +1,6 @@ package de.diddiz.util; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; public enum ActionColor { DESTROY(ChatColor.RED), diff --git a/src/main/java/de/diddiz/util/BukkitUtils.java b/src/main/java/de/diddiz/util/BukkitUtils.java index d9903a8..d1bbc0a 100644 --- a/src/main/java/de/diddiz/util/BukkitUtils.java +++ b/src/main/java/de/diddiz/util/BukkitUtils.java @@ -1,8 +1,6 @@ package de.diddiz.util; import static de.diddiz.util.MessagingUtil.prettyMaterial; -import static de.diddiz.util.TypeColor.DEFAULT; - import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -15,6 +13,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.UUID; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.HoverEvent.Action; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Chunk; @@ -686,29 +688,26 @@ public class BukkitUtils { return m == Material.AIR || m == Material.CAVE_AIR || m == Material.VOID_AIR; } - public static String toString(ItemStack stack) { + public static TextComponent toString(ItemStack stack) { if (stack == null || stack.getAmount() == 0 || isEmpty(stack.getType())) { return prettyMaterial("nothing"); } - StringBuilder sb = new StringBuilder(); - sb.append(stack.getAmount()).append("x ").append(prettyMaterial(stack.getType())); - sb.append(TypeColor.STATE); + TextComponent msg = MessagingUtil.createTextComponentWithColor(stack.getAmount() + "x ", TypeColor.DEFAULT.getColor()); + msg.addExtra(prettyMaterial(stack.getType())); + ItemMeta meta = stack.getItemMeta(); + TextComponent hover = MessagingUtil.createTextComponentWithColor("", TypeColor.STATE.getColor()); boolean metaStarted = false; if (meta.hasEnchants()) { Map enchants = meta.getEnchants(); if (!enchants.isEmpty()) { for (Entry e : enchants.entrySet()) { if (!metaStarted) { - sb.append(" ["); metaStarted = true; } else { - sb.append(", "); - } - sb.append(formatMinecraftKey(e.getKey().getKey().getKey())); - if (e.getValue() > 1) { - sb.append(" ").append(maybeToRoman(e.getValue() - 1)); + hover.addExtra("\n"); } + hover.addExtra(formatMinecraftKey(e.getKey().getKey().getKey()) + ((e.getKey().getMaxLevel() != 1 || e.getValue() != 1) ? " " + maybeToRoman(e.getValue()) : "")); } } } @@ -719,24 +718,20 @@ public class BukkitUtils { if (!enchants.isEmpty()) { for (Entry e : enchants.entrySet()) { if (!metaStarted) { - sb.append(" ["); metaStarted = true; } else { - sb.append(", "); - } - sb.append(formatMinecraftKey(e.getKey().getKey().getKey())); - if (e.getValue() > 1) { - sb.append(" ").append(maybeToRoman(e.getValue() - 1)); + hover.addExtra("\n"); } + hover.addExtra(formatMinecraftKey(e.getKey().getKey().getKey()) + ((e.getKey().getMaxLevel() != 1 || e.getValue() != 1) ? " " + maybeToRoman(e.getValue()) : "")); } } } } if (metaStarted) { - sb.append("]"); + msg.setHoverEvent(new HoverEvent(Action.SHOW_TEXT, new BaseComponent[] { hover })); } - sb.append(DEFAULT); - return sb.toString(); + + return msg; } private static final String[] romanNumbers = new String[] { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "XI", "X" }; diff --git a/src/main/java/de/diddiz/util/MessagingUtil.java b/src/main/java/de/diddiz/util/MessagingUtil.java index 83765ef..a8d6663 100644 --- a/src/main/java/de/diddiz/util/MessagingUtil.java +++ b/src/main/java/de/diddiz/util/MessagingUtil.java @@ -1,69 +1,98 @@ package de.diddiz.util; +import static de.diddiz.util.ActionColor.CREATE; +import static de.diddiz.util.ActionColor.DESTROY; import static de.diddiz.util.TypeColor.DEFAULT; +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.TextComponent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.EntityType; public class MessagingUtil { - public static String brackets(String string, BracketType type) { - return TypeColor.BRACKETS + String.valueOf(type.getStarting()) + string + TypeColor.BRACKETS + type.getEnding() + DEFAULT; + public static BaseComponent[] formatSummarizedChanges(int created, int destroyed, BaseComponent actor, int createdWidth, int destroyedWidth, float spaceFactor) { + TextComponent textCreated = createTextComponentWithColor(created + spaces((int) ((10 - String.valueOf(created).length()) / spaceFactor)), CREATE.getColor()); + TextComponent textDestroyed = createTextComponentWithColor(destroyed + spaces((int) ((10 - String.valueOf(destroyed).length()) / spaceFactor)), DESTROY.getColor()); + return new BaseComponent[] { textCreated, textDestroyed, actor }; } - public static String prettyDate(long date) { - return TypeColor.DATE + Config.formatter.format(date) + DEFAULT; + public static TextComponent createTextComponentWithColor(String text, ChatColor color) { + TextComponent tc = new TextComponent(text); + tc.setColor(color); + return tc; } - public static String prettyState(String stateName) { - return TypeColor.STATE + stateName.toUpperCase() + DEFAULT; + public static TextComponent brackets(BracketType type, BaseComponent... content) { + TextComponent tc = createTextComponentWithColor(type.getStarting(), TypeColor.BRACKETS.getColor()); + for (BaseComponent c : content) { + tc.addExtra(c); + } + tc.addExtra(new TextComponent(type.getEnding())); + return tc; } - public static String prettyState(int stateValue) { + public static TextComponent prettyDate(long date) { + return brackets(BracketType.STANDARD, createTextComponentWithColor(Config.formatter.format(date), TypeColor.DATE.getColor())); + } + + public static TextComponent prettyState(String stateName) { + return createTextComponentWithColor(stateName, TypeColor.STATE.getColor()); + } + + public static TextComponent prettyState(int stateValue) { return prettyState(Integer.toString(stateValue)); } - public static > String prettyState(E enumerator) { + public static > TextComponent prettyState(E enumerator) { return prettyState(enumerator.toString()); } - public static String prettyMaterial(String materialName) { - return TypeColor.MATERIAL + materialName.toUpperCase() + DEFAULT; + public static TextComponent prettyMaterial(String materialName) { + return createTextComponentWithColor(materialName.toUpperCase(), TypeColor.MATERIAL.getColor()); } - public static String prettyMaterial(Material material) { + public static TextComponent prettyMaterial(Material material) { return prettyMaterial(material.name()); } - public static String prettyEntityType(EntityType type) { + public static TextComponent prettyEntityType(EntityType type) { return prettyMaterial(type.name()); } - public static String prettyLocation(Location loc) { + public static TextComponent prettyLocation(Location loc) { return prettyLocation(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); } - public static String prettyLocation(Number x, Number y, Number z) { - return DEFAULT + "X: " + TypeColor.COORDINATE + x.intValue() + DEFAULT + ", Y: " + TypeColor.COORDINATE + y.intValue() + DEFAULT + ", Z: " + TypeColor.COORDINATE + z.intValue() + DEFAULT; + 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())); + return tc; } public enum BracketType { - STANDARD('[', ']'), - ANGLE('<', '>'); + STANDARD("[", "]"), + ANGLE("<", ">"); - private char starting, ending; + private String starting, ending; - BracketType(char starting, char ending) { + BracketType(String starting, String ending) { this.starting = starting; this.ending = ending; } - public char getStarting() { + public String getStarting() { return starting; } - public char getEnding() { + public String getEnding() { return ending; } } diff --git a/src/main/java/de/diddiz/util/TypeColor.java b/src/main/java/de/diddiz/util/TypeColor.java index a35216a..00904d0 100644 --- a/src/main/java/de/diddiz/util/TypeColor.java +++ b/src/main/java/de/diddiz/util/TypeColor.java @@ -1,6 +1,6 @@ package de.diddiz.util; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; public enum TypeColor { DEFAULT(ChatColor.YELLOW),