diff --git a/src/main/java/com/intellectualcrafters/plot/IPlotMain.java b/src/main/java/com/intellectualcrafters/plot/IPlotMain.java index 893fdb250..36e90d0f5 100644 --- a/src/main/java/com/intellectualcrafters/plot/IPlotMain.java +++ b/src/main/java/com/intellectualcrafters/plot/IPlotMain.java @@ -7,6 +7,7 @@ import com.intellectualcrafters.plot.generator.PlotGenerator; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ChatManager; import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.EconHandler; import com.intellectualcrafters.plot.util.EventUtil; @@ -68,6 +69,12 @@ public interface IPlotMain { */ SchematicHandler initSchematicHandler(); + /** + * Get the schematic handler + * @return + */ + ChatManager initChatManager(); + /** * The task manager will run and manage minecraft tasks * @return diff --git a/src/main/java/com/intellectualcrafters/plot/PS.java b/src/main/java/com/intellectualcrafters/plot/PS.java index b75135473..b39a55179 100644 --- a/src/main/java/com/intellectualcrafters/plot/PS.java +++ b/src/main/java/com/intellectualcrafters/plot/PS.java @@ -60,6 +60,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ChatManager; import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ClusterManager; import com.intellectualcrafters.plot.util.CommentManager; @@ -211,6 +212,8 @@ public class PS { SchematicHandler.manager = IMP.initSchematicHandler(); // Titles AbstractTitle.TITLE_CLASS = IMP.initTitleManager(); + // Chat + ChatManager.manager = IMP.initChatManager(); // Check for updates TaskManager.runTaskAsync(new Runnable() { diff --git a/src/main/java/com/intellectualcrafters/plot/commands/list.java b/src/main/java/com/intellectualcrafters/plot/commands/list.java index 1878f411b..aae23fddf 100644 --- a/src/main/java/com/intellectualcrafters/plot/commands/list.java +++ b/src/main/java/com/intellectualcrafters/plot/commands/list.java @@ -38,6 +38,7 @@ import com.intellectualcrafters.plot.flag.Flag; import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.object.ConsolePlayer; import com.intellectualcrafters.plot.object.Plot; +import com.intellectualcrafters.plot.object.PlotMessage; import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.Rating; import com.intellectualcrafters.plot.util.EconHandler; @@ -47,7 +48,6 @@ import com.intellectualcrafters.plot.util.Permissions; import com.intellectualcrafters.plot.util.StringComparison; import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.UUIDHandler; -import com.plotsquared.bukkit.chat.FancyMessage; import com.plotsquared.bukkit.object.BukkitPlayer; import com.plotsquared.general.commands.CommandDeclaration; @@ -388,166 +388,137 @@ public class list extends SubCommand { } } i++; - if (!ConsolePlayer.isConsole(player) && Settings.FANCY_CHAT) { - ChatColor color; - if (plot.owner == null) { - color = ChatColor.GOLD; - } - else if (plot.isOwner(player.getUUID())) { - color = ChatColor.BLUE; - } - else if (plot.isAdded(player.getUUID())) { - color = ChatColor.DARK_GREEN; - } - else if (plot.isDenied(player.getUUID())) { - color = ChatColor.RED; - } - else { - color = ChatColor.GOLD; - } - FancyMessage trusted = - new FancyMessage( - ChatColor.stripColor( - ChatColor.translateAlternateColorCodes('&', - C.PLOT_INFO_TRUSTED.s().replaceAll("%trusted%", Info.getPlayerList(plot.getTrusted()))))) - .color(ChatColor.GOLD); - - FancyMessage members = - new FancyMessage( - ChatColor.stripColor( - ChatColor.translateAlternateColorCodes('&', - C.PLOT_INFO_MEMBERS.s().replaceAll("%members%", Info.getPlayerList(plot.getMembers()))))) - .color(ChatColor.GOLD); - String strFlags = StringMan.join(plot.getSettings().flags.values(), ","); - if (strFlags.length() == 0) { - strFlags = C.NONE.s(); - } - FancyMessage flags = - new FancyMessage( - ChatColor.stripColor( - ChatColor.translateAlternateColorCodes('&', - C.PLOT_INFO_FLAGS.s().replaceAll("%flags%", strFlags)))) - .color(ChatColor.GOLD); - - FancyMessage message = new FancyMessage("") - .then("[") - .color(ChatColor.DARK_GRAY) - .then(i + "") - .command("/plot visit " + plot.world + ";" + plot.id) - .tooltip("/plot visit " + plot.world + ";" + plot.id) - .color(ChatColor.GOLD) - .then("]") - - // teleport tooltip - - .color(ChatColor.DARK_GRAY) - .then(" " + plot.toString()) - - .formattedTooltip(trusted, members, flags) - .command("/plot info " + plot.world + ";" + plot.id) - - .color(color) - .then(" - ") - .color(ChatColor.GRAY); - String prefix = ""; - for (UUID uuid : plot.getOwners()) { - String name = UUIDHandler.getName(uuid); - if (name == null) { - message = message - .then(prefix) - .color(ChatColor.DARK_GRAY) - .then("unknown") - .color(ChatColor.GRAY) - .tooltip(uuid.toString()) - .suggest(uuid.toString()); - } - else { - PlotPlayer pp = UUIDHandler.getPlayer(uuid); - if (pp != null) { - message = message - .then(prefix) - .color(ChatColor.DARK_GRAY) - .then(name).color(ChatColor.GOLD) - .formattedTooltip(new FancyMessage("Online").color(ChatColor.DARK_GREEN)); - } - else { - message = message - .then(prefix) - .color(ChatColor.DARK_GRAY) - .then(name).color(ChatColor.GOLD) - .formattedTooltip(new FancyMessage("Offline").color(ChatColor.RED)); - } - } - prefix = ", "; - } - message.send(((BukkitPlayer) player).player); + String color; + if (plot.owner == null) { + color = "$3"; + } + else if (plot.isOwner(player.getUUID())) { + color = "$1"; + } + else if (plot.isAdded(player.getUUID())) { + color = "$4"; + } + else if (plot.isDenied(player.getUUID())) { + color = "$2"; } else { - String message = C.PLOT_LIST_ITEM.s() - .replaceAll("%in", i + 1 + "") - .replaceAll("%id", plot.id.toString()) - .replaceAll("%world", plot.world) - .replaceAll("%owner", getName(plot.owner)) - - // Unused - - .replaceAll("%trusted%", "") - .replaceAll("%members%", "") - .replaceAll("%tp%", ""); - MainUtil.sendMessage(player, message); + color = "$1"; } + PlotMessage trusted = + new PlotMessage() + .text(C.color(C.PLOT_INFO_TRUSTED.s().replaceAll("%trusted%", Info.getPlayerList(plot.getTrusted())))) + .color("$1"); + + PlotMessage members = + new PlotMessage() + .text(C.color(C.PLOT_INFO_MEMBERS.s().replaceAll("%members%", Info.getPlayerList(plot.getMembers())))) + .color("$1"); + + String strFlags = StringMan.join(plot.getSettings().flags.values(), ","); + if (strFlags.length() == 0) { + strFlags = C.NONE.s(); + } + + PlotMessage flags = + new PlotMessage() + .text(C.color(C.PLOT_INFO_FLAGS.s().replaceAll("%flags%", strFlags))) + .color("$1"); + + PlotMessage message = new PlotMessage() + .text("[") + .color("$3") + .text(i + "") + .command("/plot visit " + plot.world + ";" + plot.id) + .tooltip("/plot visit " + plot.world + ";" + plot.id) + .color("$1") + .text("]") + .color("$3") + .text(" " + plot.toString()) + + .tooltip(trusted, members, flags) + .command("/plot info " + plot.world + ";" + plot.id) + + .color(color) + .text(" - ") + .color("$2"); + String prefix = ""; + for (UUID uuid : plot.getOwners()) { + String name = UUIDHandler.getName(uuid); + if (name == null) { + message = message + .text(prefix) + .color("$4") + .text("unknown") + .color("$2") + .tooltip(uuid.toString()) + .suggest(uuid.toString()); + } + else { + PlotPlayer pp = UUIDHandler.getPlayer(uuid); + if (pp != null) { + message = message + .text(prefix) + .color("$4") + .text(name).color("$1") + .tooltip(new PlotMessage("Online").color("$4")); + } + else { + message = message + .text(prefix) + .color("$4") + .text(name).color("$1") + .tooltip(new PlotMessage("Offline").color("$3")); + } + } + prefix = ", "; + } + message.send(player); } - if (!ConsolePlayer.isConsole(player) && Settings.FANCY_CHAT) { - if (page < totalPages && page > 0) { - // back | next - new FancyMessage("") - .then("<-") - .color(ChatColor.GOLD) - .command("/plot list " + args[0] + " " + (page)) - .then(" | ") - .color(ChatColor.DARK_GRAY) - .then("->") - .color(ChatColor.GOLD) - .command("/plot list " + args[0] + " " + (page + 2)) - .then(C.CLICKABLE.s()) - .color(ChatColor.GRAY) - .send(((BukkitPlayer) player).player); - return; - } - if (page == 0 && totalPages != 0) { - // next - new FancyMessage("") - .then("<-") - .color(ChatColor.DARK_GRAY) - .then(" | ") - .color(ChatColor.DARK_GRAY) - .then("->") - .color(ChatColor.GOLD) - .command("/plot list " + args[0] + " " + (page + 2)) - .then(C.CLICKABLE.s()) - .color(ChatColor.GRAY) - .send(((BukkitPlayer) player).player); - return; - } - if (page == totalPages && totalPages != 0) { - // back - new FancyMessage("") - .then("<-") - .color(ChatColor.GOLD) - .command("/plot list " + args[0] + " " + (page)) - .then(" | ") - .color(ChatColor.DARK_GRAY) - .then("->") - .color(ChatColor.DARK_GRAY) - .then(C.CLICKABLE.s()) - .color(ChatColor.GRAY) - .send(((BukkitPlayer) player).player); - return; - } + if (page < totalPages && page > 0) { + // back | next + new PlotMessage() + .text("<-") + .color("$1") + .command("/plot list " + args[0] + " " + (page)) + .text(" | ") + .color("$3") + .text("->") + .color("$1") + .command("/plot list " + args[0] + " " + (page + 2)) + .text(C.CLICKABLE.s()) + .color("$2") + .send(player); + return; } - else { - String footer = C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", plots.size() + "").replaceAll("%plot%", plots.size() == 1 ? "plot" : "plots"); - MainUtil.sendMessage(player, footer); + if (page == 0 && totalPages != 0) { + // next + new PlotMessage() + .text("<-") + .color("$3") + .text(" | ") + .color("$3") + .text("->") + .color("$1") + .command("/plot list " + args[0] + " " + (page + 2)) + .text(C.CLICKABLE.s()) + .color("$2") + .send(player); + return; + } + if (page == totalPages && totalPages != 0) { + // back + new PlotMessage() + .text("<-") + .color("$1") + .command("/plot list " + args[0] + " " + (page)) + .text(" | ") + .color("$3") + .text("->") + .color("$3") + .text(C.CLICKABLE.s()) + .color("$2") + .send(player); + return; } } diff --git a/src/main/java/com/plotsquared/bukkit/BukkitMain.java b/src/main/java/com/plotsquared/bukkit/BukkitMain.java index c43ec33ed..ce6c80db7 100644 --- a/src/main/java/com/plotsquared/bukkit/BukkitMain.java +++ b/src/main/java/com/plotsquared/bukkit/BukkitMain.java @@ -35,6 +35,7 @@ import com.intellectualcrafters.plot.object.SetupObject; import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockUpdateUtil; +import com.intellectualcrafters.plot.util.ChatManager; import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ConsoleColors; import com.intellectualcrafters.plot.util.EconHandler; @@ -64,12 +65,14 @@ import com.plotsquared.bukkit.listeners.WorldEvents; import com.plotsquared.bukkit.listeners.worldedit.WEListener; import com.plotsquared.bukkit.listeners.worldedit.WESubscriber; import com.plotsquared.bukkit.titles.DefaultTitle; +import com.plotsquared.bukkit.util.BukkitChatManager; import com.plotsquared.bukkit.util.BukkitChunkManager; import com.plotsquared.bukkit.util.BukkitCommand; import com.plotsquared.bukkit.util.BukkitEconHandler; import com.plotsquared.bukkit.util.BukkitEventUtil; import com.plotsquared.bukkit.util.BukkitHybridUtils; import com.plotsquared.bukkit.util.BukkitInventoryUtil; +import com.plotsquared.bukkit.util.BukkitPlainChatManager; import com.plotsquared.bukkit.util.BukkitSchematicHandler; import com.plotsquared.bukkit.util.BukkitSetBlockManager; import com.plotsquared.bukkit.util.BukkitSetupUtils; @@ -637,4 +640,14 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain { PS.debug("Unknown NMS package: " + StringMan.getString(pas)); return "1_8_R3"; } + + @Override + public ChatManager initChatManager() { + if (Settings.FANCY_CHAT) { + return new BukkitChatManager(); + } + else { + return new BukkitPlainChatManager(); + } + } } diff --git a/src/main/java/com/plotsquared/bukkit/chat/FancyMessage.java b/src/main/java/com/plotsquared/bukkit/chat/FancyMessage.java index 9e998f8d8..376cd323c 100644 --- a/src/main/java/com/plotsquared/bukkit/chat/FancyMessage.java +++ b/src/main/java/com/plotsquared/bukkit/chat/FancyMessage.java @@ -35,6 +35,7 @@ import com.google.gson.JsonParser; import com.google.gson.stream.JsonWriter; import com.intellectualcrafters.configuration.serialization.ConfigurationSerializable; import com.intellectualcrafters.configuration.serialization.ConfigurationSerialization; +import com.intellectualcrafters.plot.config.C; /** * Represents a formattable message. Such messages can use elements such as colors, formatting codes, hover and click data, and other features provided by the vanilla Minecraft JSON message formatter. @@ -134,9 +135,6 @@ public class FancyMessage implements JsonRepresentedObject, Cloneable, Iterable< * @exception IllegalArgumentException If the specified {@code ChatColor} enumeration value is not a color (but a format value). */ public FancyMessage color(final ChatColor color) { - if (!color.isColor()) { - throw new IllegalArgumentException(color.name() + " is not a color"); - } latest().color = color; dirty = true; return this; diff --git a/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java b/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java index 35965283f..913e17e11 100644 --- a/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java +++ b/src/main/java/com/plotsquared/bukkit/object/BukkitPlayer.java @@ -152,7 +152,7 @@ public class BukkitPlayer extends PlotPlayer { @Override public void setAttribute(String key) { key = "plotsquared_user_attributes." + key; - if (EconHandler.manager == null) { + if (EconHandler.manager == null || player.hasPermission("plotsquared_user_attributes.*")) { setMeta(key, true); return; } diff --git a/src/main/java/com/plotsquared/sponge/SpongeMain.java b/src/main/java/com/plotsquared/sponge/SpongeMain.java index 3422761c2..2d84c5ead 100644 --- a/src/main/java/com/plotsquared/sponge/SpongeMain.java +++ b/src/main/java/com/plotsquared/sponge/SpongeMain.java @@ -50,6 +50,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.BlockManager; +import com.intellectualcrafters.plot.util.ChatManager; import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.EconHandler; import com.intellectualcrafters.plot.util.EventUtil; @@ -66,6 +67,7 @@ import com.plotsquared.sponge.generator.WorldModify; import com.plotsquared.sponge.listener.MainListener; import com.plotsquared.sponge.util.KillRoadMobs; import com.plotsquared.sponge.util.SpongeBlockManager; +import com.plotsquared.sponge.util.SpongeChatManager; import com.plotsquared.sponge.util.SpongeChunkManager; import com.plotsquared.sponge.util.SpongeCommand; import com.plotsquared.sponge.util.SpongeEventUtil; @@ -229,10 +231,6 @@ public class SpongeMain implements IPlotMain, PluginContainer { PS.instance = new PS(this, "Sponge"); - // TODO Until P^2 has json chat stuff for sponge, disable this - Settings.FANCY_CHAT = false; - // done - registerBlocks(); ConfigurationSection worldSection = PS.get().config.getConfigurationSection("worlds"); @@ -638,4 +636,9 @@ public class SpongeMain implements IPlotMain, PluginContainer { public String getNMSPackage() { return "1_8_R3"; } + + @Override + public ChatManager initChatManager() { + return new SpongeChatManager(); + } } \ No newline at end of file diff --git a/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java b/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java index 4ddf029af..6916b355a 100644 --- a/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java +++ b/src/main/java/com/plotsquared/sponge/object/SpongePlayer.java @@ -10,7 +10,9 @@ import org.spongepowered.api.data.value.mutable.Value; import org.spongepowered.api.entity.player.Player; import org.spongepowered.api.entity.player.gamemode.GameMode; import org.spongepowered.api.entity.player.gamemode.GameModes; +import org.spongepowered.api.text.TextBuilder; import org.spongepowered.api.text.Texts; +import org.spongepowered.api.text.action.HoverAction; import org.spongepowered.api.text.chat.ChatTypes; import com.flowpowered.math.vector.Vector3d;