Finished Components

- Finished Componenets.
This commit is contained in:
Ryandw11 2019-07-27 19:38:09 -07:00
parent ff5cd60166
commit b6f67c6036
9 changed files with 278 additions and 26 deletions

View File

@ -45,18 +45,19 @@ Blocked_Words:
# This is a system to create JSON pockets with in a message.
# It uses a placerholder system to use.
#The name of the component:
example:
JSON_Components:
example:
#The base message of the component
Message: 'Example Message'
#The component events
Events:
Message: 'Example Message'
#The component events
Events:
#A click event {Optional}
Click:
Click:
# One and only one of the Click Operations. Full list includes: {Open_URL, Run_Command, Suggest_Command}
Open_URL: 'https://www.spigotmc.org/'
# When the player hovers over the base text.
Hover:
Show_Text:
Open_URL: 'https://www.spigotmc.org/'
# When the player hovers over the base text.
Hover:
Show_Text:
- 'This is the first line'
- '&cThis is the second line'
##############################################

View File

@ -34,6 +34,9 @@ import me.ryandw11.ultrachat.listner.StopChat;
import me.ryandw11.ultrachat.pluginhooks.AdvancedBanMute;
import me.ryandw11.ultrachat.pluginhooks.EssentialsMute;
import me.ryandw11.ultrachat.util.Metrics;
import me.ryandw11.ultrachat.util.papi.PAPIDisabled;
import me.ryandw11.ultrachat.util.papi.PAPIEnabled;
import me.ryandw11.ultrachat.util.papi.PlaceHolderAPIHook;
import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.permission.Permission;
@ -46,7 +49,7 @@ import org.bukkit.plugin.java.JavaPlugin;
/**
* Main Class
* @author Ryandw11
* @version 2.3.1
* @version 2.4
* Updated for 1.14.
* (Very few API methods here)
*/
@ -63,6 +66,8 @@ public class UltraChat extends JavaPlugin{
public String defaultChannel;
public ArrayList<UUID> stafftoggle = new ArrayList<>();
public ArrayList<UUID> spytoggle = new ArrayList<>();
public PlaceHolderAPIHook papi;
public File datafile = new File(getDataFolder() + "/data/players.yml");
public FileConfiguration data = YamlConfiguration.loadConfiguration(datafile);
@ -90,15 +95,13 @@ public class UltraChat extends JavaPlugin{
Bukkit.getPluginManager().disablePlugin(this);
return;
}
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") == null) {
getLogger().severe("§cWarning: You do not have PlaceholderAPI installed! This plugin is now disabled!");
Bukkit.getPluginManager().disablePlugin(this);
return;
}
else{
getLogger().info(String.format("UltraChat is enabled and running fine! V: %s", getDescription().getVersion()));
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
getLogger().info("Hooked into PlaceholderAPI! You can use the place holders!");
papi = new PAPIEnabled();
}else {
papi = new PAPIDisabled();
}
getLogger().info(String.format("UltraChat is enabled and running fine! V: %s", getDescription().getVersion()));
if(getServer().getPluginManager().getPlugin("AdvancedBan") != null && getConfig().getBoolean("pluginhooks.AdvancedBan")){
getLogger().info("AdvancedBan detected! Activating hook!");
getLogger().info("Mutes will now work with the chat types.");

View File

@ -2,6 +2,9 @@ package me.ryandw11.ultrachat.api;
import java.util.List;
import org.bukkit.entity.Player;
import me.ryandw11.ultrachat.UltraChat;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent;
@ -18,19 +21,42 @@ import net.md_5.bungee.api.chat.HoverEvent;
public class JSONChatBuilder {
private ComponentBuilder displayMessage;
private Player p;
/**
* Create a JSON Message
* @param displayMessage The base string that you would hover or click on.
*/
public JSONChatBuilder(String displayMessage) {
this.displayMessage = new ComponentBuilder(displayMessage);
p = null;
}
/**
* Add a hove message.
* Create a JSON Message
* @param displayMessage The base string that you would hover or click on.
* @param p The player to use when doing PlaceHolders.
*/
public JSONChatBuilder(String displayMessage, Player p) {
this.displayMessage = new ComponentBuilder(displayMessage);
this.p = p;
}
/**
* Add a hove message. (ChatColors are translated)
* @param lore Lore
*/
public JSONChatBuilder setHoverShowText(List<String> lore) {
ComponentBuilder lores = new ComponentBuilder("");
int i = 0;
for(String s : lore) {
lores.append(ChatColor.translateAlternateColorCodes('&', s));
if(p != null)
lores.append(UltraChat.plugin.papi.translatePlaceholders(ChatColor.translateAlternateColorCodes('&', s), p));
else
lores.append(ChatColor.translateAlternateColorCodes('&', s));
if(i < lore.size() - 1)
lores.append("\n");
i++;
}
this.displayMessage.event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, lores.create()));
return this;

View File

@ -2,6 +2,8 @@ package me.ryandw11.ultrachat.api;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.ComponentBuilder.FormatRetention;
import net.md_5.bungee.api.chat.TextComponent;
/**
* Easy Builder to build several JSON sections into a single message.
@ -23,7 +25,7 @@ public class MessageBuilder {
* @return The MessageBuilder to chain.
*/
public MessageBuilder addJSON(JSONChatBuilder json) {
compon.append(json.build());
compon.append(json.build(), FormatRetention.FORMATTING);
return this;
}
@ -33,7 +35,8 @@ public class MessageBuilder {
* @return the builder to chain
*/
public MessageBuilder addString(String s) {
compon.append(s);
TextComponent tc = new TextComponent(s);
compon.append(tc, FormatRetention.FORMATTING);
return this;
}
@ -43,7 +46,7 @@ public class MessageBuilder {
* @return The Buider to chain
*/
public MessageBuilder addBaseComponent(BaseComponent[] bc) {
compon.append(bc);
compon.append(bc, FormatRetention.FORMATTING);
return this;
}

View File

@ -0,0 +1,182 @@
package me.ryandw11.ultrachat.api.managers;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import me.ryandw11.ultrachat.UltraChat;
import me.ryandw11.ultrachat.api.JSONChatBuilder;
import me.ryandw11.ultrachat.api.MessageBuilder;
import net.md_5.bungee.api.chat.BaseComponent;
public class JComponentManager {
/**
* Get the final basecomponent from a message.
* @param message The string message
* @return The final basecomponent
*/
public static BaseComponent[] formatComponents(String message) {
/*
* Parse the message for JSON components
*/
List<String> msgs = new ArrayList<String>();
List<String> compName = new ArrayList<String>();
List<String> fin = new ArrayList<String>();
String temps = "";
for(int i = 0; i < message.length(); i++) {
char c = message.charAt(i);
if(c == '{') {
msgs.add(temps);
fin.add(temps);
temps = "";
}
else if(c == '}') {
compName.add(temps);
fin.add(temps);
temps = "";
}
else {
temps += c;
}
}
msgs.add(temps);
fin.add(temps);
/*
* Generate the final BaseComponent
*/
MessageBuilder mb = new MessageBuilder();
// Loops through the final array.
for(String s : fin) {
// If the message is a normal message.
if(msgs.contains(s)) {
mb.addString(s);
}
// If the message is a component
else if(compName.contains(s)) {
ConfigurationSection cs = null;
for(String st : UltraChat.plugin.getConfig().getConfigurationSection("JSON_Components").getKeys(false)) {
if(st.equals(s)) {
cs = UltraChat.plugin.getConfig().getConfigurationSection("JSON_Components." + st);
break;
}
}
if(cs == null) {
Bukkit.getLogger().warning("Error: Can not find JSON Component named: " + s);
}else {
JSONChatBuilder jsb = new JSONChatBuilder(cs.getString("Message"));
// If the component contains the click event.
if(cs.contains("Events.Click")) {
if(cs.contains("Events.Click.Open_URL"))
jsb.setClickOpenUrl(cs.getString("Events.Click.Open_URL"));
else if(cs.contains("Events.Click.Run_Command"))
jsb.setClickRunCommand(cs.getString("Events.Click.Run_Command"));
else if(cs.contains("Events.Click.Suggest_Command"))
jsb.setClickSuggestCommand(cs.getString("Events.Click.Suggest_Command"));
}
// If the component contains the hover event.
if(cs.contains("Events.Hover")) {
if(cs.contains("Events.Hover.Show_Text"))
jsb.setHoverShowText(cs.getStringList("Events.Hover.Show_Text"));
}
mb.addJSON(jsb);
}
}
}
// Build the message builder and return it
return mb.build();
}
/**
* Get the final basecomponent from a message.
* @param message The string message
* @param p The player to translate PAPI for.
* @return The final basecomponent
*/
public static BaseComponent[] formatComponents(String message, Player p) {
/*
* Parse the message for JSON components
*/
List<String> msgs = new ArrayList<String>();
List<String> compName = new ArrayList<String>();
List<String> fin = new ArrayList<String>();
String temps = "";
for(int i = 0; i < message.length(); i++) {
char c = message.charAt(i);
if(c == '{') {
msgs.add(temps);
fin.add(temps);
temps = "";
}
else if(c == '}') {
compName.add(temps);
fin.add(temps);
temps = "";
}
else {
temps += c;
}
}
msgs.add(temps);
fin.add(temps);
/*
* Generate the final BaseComponent
*/
MessageBuilder mb = new MessageBuilder();
// Loops through the final array.
for(String s : fin) {
// If the message is a normal message.
if(msgs.contains(s)) {
mb.addString(s);
}
// If the message is a component
else if(compName.contains(s)) {
ConfigurationSection cs = null;
for(String st : UltraChat.plugin.getConfig().getConfigurationSection("JSON_Components").getKeys(false)) {
if(st.equals(s)) {
cs = UltraChat.plugin.getConfig().getConfigurationSection("JSON_Components." + st);
break;
}
}
if(cs == null) {
Bukkit.getLogger().warning("Error: Can not find JSON Component named: " + s);
}else {
JSONChatBuilder jsb = new JSONChatBuilder(cs.getString("Message"), p);
// If the component contains the click event.
if(cs.contains("Events.Click")) {
if(cs.contains("Events.Click.Open_URL"))
jsb.setClickOpenUrl(cs.getString("Events.Click.Open_URL"));
else if(cs.contains("Events.Click.Run_Command"))
jsb.setClickRunCommand(cs.getString("Events.Click.Run_Command"));
else if(cs.contains("Events.Click.Suggest_Command"))
jsb.setClickSuggestCommand(cs.getString("Events.Click.Suggest_Command"));
}
// If the component contains the hover event.
if(cs.contains("Events.Hover")) {
if(cs.contains("Events.Hover.Show_Text"))
jsb.setHoverShowText(cs.getStringList("Events.Hover.Show_Text"));
}
mb.addJSON(jsb);
}
}
}
// Build the message builder and return it
return mb.build();
}
}

View File

@ -2,9 +2,9 @@ package me.ryandw11.ultrachat.listner;
import java.util.List;
import me.clip.placeholderapi.PlaceholderAPI;
import me.ryandw11.ultrachat.UltraChat;
import me.ryandw11.ultrachat.api.Lang;
import me.ryandw11.ultrachat.api.managers.JComponentManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@ -99,8 +99,8 @@ public class JoinListner implements Listener {
List <String> motd = plugin.getConfig().getStringList("Motd");
for(String OutPut : motd){
String message = OutPut;
message = PlaceholderAPI.setPlaceholders(p, message);
p.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
message = plugin.papi.translatePlaceholders(message, p);
p.spigot().sendMessage(JComponentManager.formatComponents(ChatColor.translateAlternateColorCodes('&', message), p));
}
}
@ -115,7 +115,10 @@ public class JoinListner implements Listener {
public void NewPlayer(PlayerJoinEvent event){
Player p = event.getPlayer();
if(!(p.hasPlayedBefore()) && !(plugin.getConfig().getString("New_Player").equalsIgnoreCase("none"))){
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("New_Player").replace("%player%", p.getDisplayName())));
String msg = ChatColor.translateAlternateColorCodes('&', plugin.getConfig().getString("New_Player").replace("%player%", p.getDisplayName()));
for(Player pl : Bukkit.getOnlinePlayers()) {
pl.spigot().sendMessage(JComponentManager.formatComponents(msg, p));
}
}
}

View File

@ -0,0 +1,12 @@
package me.ryandw11.ultrachat.util.papi;
import org.bukkit.entity.Player;
public class PAPIDisabled implements PlaceHolderAPIHook {
@Override
public String translatePlaceholders(String s, Player p) {
return s;
}
}

View File

@ -0,0 +1,15 @@
package me.ryandw11.ultrachat.util.papi;
import org.bukkit.entity.Player;
import me.clip.placeholderapi.PlaceholderAPI;
public class PAPIEnabled implements PlaceHolderAPIHook{
@Override
public String translatePlaceholders(String s, Player p) {
return PlaceholderAPI.setPlaceholders(p, s);
}
}

View File

@ -0,0 +1,7 @@
package me.ryandw11.ultrachat.util.papi;
import org.bukkit.entity.Player;
public interface PlaceHolderAPIHook {
public String translatePlaceholders(String s, Player p);
}