Fixed interactive chat colors + added interactive pages to sponge.

This commit is contained in:
boy0001 2015-08-25 02:28:32 +10:00
parent 83d0b8cebb
commit 68df5b1930
8 changed files with 161 additions and 164 deletions

View File

@ -7,6 +7,7 @@ import com.intellectualcrafters.plot.generator.PlotGenerator;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.AbstractTitle;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.ChatManager;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.EconHandler; import com.intellectualcrafters.plot.util.EconHandler;
import com.intellectualcrafters.plot.util.EventUtil; import com.intellectualcrafters.plot.util.EventUtil;
@ -68,6 +69,12 @@ public interface IPlotMain {
*/ */
SchematicHandler initSchematicHandler(); SchematicHandler initSchematicHandler();
/**
* Get the schematic handler
* @return
*/
ChatManager initChatManager();
/** /**
* The task manager will run and manage minecraft tasks * The task manager will run and manage minecraft tasks
* @return * @return

View File

@ -60,6 +60,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.AbstractTitle;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.ChatManager;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.ClusterManager; import com.intellectualcrafters.plot.util.ClusterManager;
import com.intellectualcrafters.plot.util.CommentManager; import com.intellectualcrafters.plot.util.CommentManager;
@ -211,6 +212,8 @@ public class PS {
SchematicHandler.manager = IMP.initSchematicHandler(); SchematicHandler.manager = IMP.initSchematicHandler();
// Titles // Titles
AbstractTitle.TITLE_CLASS = IMP.initTitleManager(); AbstractTitle.TITLE_CLASS = IMP.initTitleManager();
// Chat
ChatManager.manager = IMP.initChatManager();
// Check for updates // Check for updates
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {

View File

@ -38,6 +38,7 @@ import com.intellectualcrafters.plot.flag.Flag;
import com.intellectualcrafters.plot.flag.FlagManager; import com.intellectualcrafters.plot.flag.FlagManager;
import com.intellectualcrafters.plot.object.ConsolePlayer; import com.intellectualcrafters.plot.object.ConsolePlayer;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotMessage;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.Rating; import com.intellectualcrafters.plot.object.Rating;
import com.intellectualcrafters.plot.util.EconHandler; 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.StringComparison;
import com.intellectualcrafters.plot.util.StringMan; import com.intellectualcrafters.plot.util.StringMan;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
import com.plotsquared.bukkit.chat.FancyMessage;
import com.plotsquared.bukkit.object.BukkitPlayer; import com.plotsquared.bukkit.object.BukkitPlayer;
import com.plotsquared.general.commands.CommandDeclaration; import com.plotsquared.general.commands.CommandDeclaration;
@ -388,166 +388,137 @@ public class list extends SubCommand {
} }
} }
i++; i++;
if (!ConsolePlayer.isConsole(player) && Settings.FANCY_CHAT) { String color;
ChatColor color; if (plot.owner == null) {
if (plot.owner == null) { color = "$3";
color = ChatColor.GOLD; }
} else if (plot.isOwner(player.getUUID())) {
else if (plot.isOwner(player.getUUID())) { color = "$1";
color = ChatColor.BLUE; }
} else if (plot.isAdded(player.getUUID())) {
else if (plot.isAdded(player.getUUID())) { color = "$4";
color = ChatColor.DARK_GREEN; }
} else if (plot.isDenied(player.getUUID())) {
else if (plot.isDenied(player.getUUID())) { color = "$2";
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);
} }
else { else {
String message = C.PLOT_LIST_ITEM.s() color = "$1";
.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);
} }
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) {
if (page < totalPages && page > 0) { // back | next
// back | next new PlotMessage()
new FancyMessage("") .text("<-")
.then("<-") .color("$1")
.color(ChatColor.GOLD) .command("/plot list " + args[0] + " " + (page))
.command("/plot list " + args[0] + " " + (page)) .text(" | ")
.then(" | ") .color("$3")
.color(ChatColor.DARK_GRAY) .text("->")
.then("->") .color("$1")
.color(ChatColor.GOLD) .command("/plot list " + args[0] + " " + (page + 2))
.command("/plot list " + args[0] + " " + (page + 2)) .text(C.CLICKABLE.s())
.then(C.CLICKABLE.s()) .color("$2")
.color(ChatColor.GRAY) .send(player);
.send(((BukkitPlayer) player).player); return;
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;
}
} }
else { if (page == 0 && totalPages != 0) {
String footer = C.PLOT_LIST_FOOTER.s().replaceAll("%word%", "There is").replaceAll("%num%", plots.size() + "").replaceAll("%plot%", plots.size() == 1 ? "plot" : "plots"); // next
MainUtil.sendMessage(player, footer); 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;
} }
} }

View File

@ -35,6 +35,7 @@ import com.intellectualcrafters.plot.object.SetupObject;
import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.AbstractTitle;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.BlockUpdateUtil; import com.intellectualcrafters.plot.util.BlockUpdateUtil;
import com.intellectualcrafters.plot.util.ChatManager;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.ConsoleColors; import com.intellectualcrafters.plot.util.ConsoleColors;
import com.intellectualcrafters.plot.util.EconHandler; 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.WEListener;
import com.plotsquared.bukkit.listeners.worldedit.WESubscriber; import com.plotsquared.bukkit.listeners.worldedit.WESubscriber;
import com.plotsquared.bukkit.titles.DefaultTitle; import com.plotsquared.bukkit.titles.DefaultTitle;
import com.plotsquared.bukkit.util.BukkitChatManager;
import com.plotsquared.bukkit.util.BukkitChunkManager; import com.plotsquared.bukkit.util.BukkitChunkManager;
import com.plotsquared.bukkit.util.BukkitCommand; import com.plotsquared.bukkit.util.BukkitCommand;
import com.plotsquared.bukkit.util.BukkitEconHandler; import com.plotsquared.bukkit.util.BukkitEconHandler;
import com.plotsquared.bukkit.util.BukkitEventUtil; import com.plotsquared.bukkit.util.BukkitEventUtil;
import com.plotsquared.bukkit.util.BukkitHybridUtils; import com.plotsquared.bukkit.util.BukkitHybridUtils;
import com.plotsquared.bukkit.util.BukkitInventoryUtil; import com.plotsquared.bukkit.util.BukkitInventoryUtil;
import com.plotsquared.bukkit.util.BukkitPlainChatManager;
import com.plotsquared.bukkit.util.BukkitSchematicHandler; import com.plotsquared.bukkit.util.BukkitSchematicHandler;
import com.plotsquared.bukkit.util.BukkitSetBlockManager; import com.plotsquared.bukkit.util.BukkitSetBlockManager;
import com.plotsquared.bukkit.util.BukkitSetupUtils; 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)); PS.debug("Unknown NMS package: " + StringMan.getString(pas));
return "1_8_R3"; return "1_8_R3";
} }
@Override
public ChatManager<?> initChatManager() {
if (Settings.FANCY_CHAT) {
return new BukkitChatManager();
}
else {
return new BukkitPlainChatManager();
}
}
} }

View File

@ -35,6 +35,7 @@ import com.google.gson.JsonParser;
import com.google.gson.stream.JsonWriter; import com.google.gson.stream.JsonWriter;
import com.intellectualcrafters.configuration.serialization.ConfigurationSerializable; import com.intellectualcrafters.configuration.serialization.ConfigurationSerializable;
import com.intellectualcrafters.configuration.serialization.ConfigurationSerialization; 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 <a href="http://minecraft.gamepedia.com/Tellraw#Raw_JSON_Text">JSON message formatter</a>. * 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 <a href="http://minecraft.gamepedia.com/Tellraw#Raw_JSON_Text">JSON message formatter</a>.
@ -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). * @exception IllegalArgumentException If the specified {@code ChatColor} enumeration value is not a color (but a format value).
*/ */
public FancyMessage color(final ChatColor color) { public FancyMessage color(final ChatColor color) {
if (!color.isColor()) {
throw new IllegalArgumentException(color.name() + " is not a color");
}
latest().color = color; latest().color = color;
dirty = true; dirty = true;
return this; return this;

View File

@ -152,7 +152,7 @@ public class BukkitPlayer extends PlotPlayer {
@Override @Override
public void setAttribute(String key) { public void setAttribute(String key) {
key = "plotsquared_user_attributes." + key; key = "plotsquared_user_attributes." + key;
if (EconHandler.manager == null) { if (EconHandler.manager == null || player.hasPermission("plotsquared_user_attributes.*")) {
setMeta(key, true); setMeta(key, true);
return; return;
} }

View File

@ -50,6 +50,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.util.AbstractTitle; import com.intellectualcrafters.plot.util.AbstractTitle;
import com.intellectualcrafters.plot.util.BlockManager; import com.intellectualcrafters.plot.util.BlockManager;
import com.intellectualcrafters.plot.util.ChatManager;
import com.intellectualcrafters.plot.util.ChunkManager; import com.intellectualcrafters.plot.util.ChunkManager;
import com.intellectualcrafters.plot.util.EconHandler; import com.intellectualcrafters.plot.util.EconHandler;
import com.intellectualcrafters.plot.util.EventUtil; 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.listener.MainListener;
import com.plotsquared.sponge.util.KillRoadMobs; import com.plotsquared.sponge.util.KillRoadMobs;
import com.plotsquared.sponge.util.SpongeBlockManager; import com.plotsquared.sponge.util.SpongeBlockManager;
import com.plotsquared.sponge.util.SpongeChatManager;
import com.plotsquared.sponge.util.SpongeChunkManager; import com.plotsquared.sponge.util.SpongeChunkManager;
import com.plotsquared.sponge.util.SpongeCommand; import com.plotsquared.sponge.util.SpongeCommand;
import com.plotsquared.sponge.util.SpongeEventUtil; import com.plotsquared.sponge.util.SpongeEventUtil;
@ -229,10 +231,6 @@ public class SpongeMain implements IPlotMain, PluginContainer {
PS.instance = new PS(this, "Sponge"); PS.instance = new PS(this, "Sponge");
// TODO Until P^2 has json chat stuff for sponge, disable this
Settings.FANCY_CHAT = false;
// done
registerBlocks(); registerBlocks();
ConfigurationSection worldSection = PS.get().config.getConfigurationSection("worlds"); ConfigurationSection worldSection = PS.get().config.getConfigurationSection("worlds");
@ -638,4 +636,9 @@ public class SpongeMain implements IPlotMain, PluginContainer {
public String getNMSPackage() { public String getNMSPackage() {
return "1_8_R3"; return "1_8_R3";
} }
@Override
public ChatManager<?> initChatManager() {
return new SpongeChatManager();
}
} }

View File

@ -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.Player;
import org.spongepowered.api.entity.player.gamemode.GameMode; import org.spongepowered.api.entity.player.gamemode.GameMode;
import org.spongepowered.api.entity.player.gamemode.GameModes; 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.Texts;
import org.spongepowered.api.text.action.HoverAction;
import org.spongepowered.api.text.chat.ChatTypes; import org.spongepowered.api.text.chat.ChatTypes;
import com.flowpowered.math.vector.Vector3d; import com.flowpowered.math.vector.Vector3d;