1414import org .bukkit .event .player .PlayerJoinEvent ;
1515import org .bukkit .plugin .java .JavaPlugin ;
1616
17+ import java .util .AbstractMap ;
1718import java .util .ArrayList ;
1819import java .util .List ;
1920import java .util .regex .Matcher ;
2223import java .util .stream .Stream ;
2324
2425public final class PlaytimeNameColor extends JavaPlugin implements Listener {
26+ public static final List <String > defaultColors = Stream .of (ChatColor .GRAY , ChatColor .WHITE , ChatColor .GREEN , ChatColor .BLUE , ChatColor .DARK_PURPLE , ChatColor .GOLD , ChatColor .RED , ChatColor .YELLOW , ChatColor .AQUA , ChatColor .DARK_RED ).map (ChatColor ::toString ).collect (Collectors .toList ());
2527 static final String pluginPrefix = ChatColor .WHITE + "<" + ChatColor .DARK_GREEN + "NC" + ChatColor .WHITE + "> " + ChatColor .RESET ;
2628 static final ArrayList <String > muted = new ArrayList <>();
27- final List <String > defaultColors = Stream .of (ChatColor .GRAY , ChatColor .WHITE , ChatColor .GREEN , ChatColor .BLUE , ChatColor .DARK_PURPLE , ChatColor .GOLD , ChatColor .RED , ChatColor .YELLOW , ChatColor .AQUA ).map (ChatColor ::toString ).collect (Collectors .toList ());
2829 // sanitize color statements [also at the start of the name string from the old config]
2930 // always uses first match group
3031 final Pattern regexPattern = Pattern .compile ("^(([Â]?§[0-9abcdefklmno])+).*$" );
3132 List <String > colors ;
3233 int maxPlaytime ;
3334 int maxJoinDate ;
3435 boolean boldEnabled ;
36+ int boldIndex ;
3537 boolean configModified = false ;
3638
3739 public static ChatColor getChatColor (String color ) {
@@ -51,9 +53,10 @@ public static ChatColor getChatColor(String color) {
5153 @ Override
5254 public void onEnable () {
5355 getConfig ().addDefault ("colors" , defaultColors );
54- getConfig ().addDefault ("play-time-h" , 384 );
55- getConfig ().addDefault ("join-date-d" , 365 );
56+ getConfig ().addDefault ("play-time-h" , 384 * 2 );
57+ getConfig ().addDefault ("join-date-d" , 365 * 2 );
5658 getConfig ().addDefault ("bold-enabled" , true );
59+ getConfig ().addDefault ("bold-index" , 8 );
5760
5861 getConfig ().options ().copyDefaults (true );
5962 saveConfig ();
@@ -62,6 +65,7 @@ public void onEnable() {
6265 maxPlaytime = getConfig ().getInt ("play-time-h" );
6366 maxJoinDate = getConfig ().getInt ("join-date-d" );
6467 boldEnabled = getConfig ().getBoolean ("bold-enabled" );
68+ boldIndex = getConfig ().getInt ("bold-index" );
6569
6670 getServer ().getPluginManager ().registerEvents (this , this );
6771
@@ -80,7 +84,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
8084 Bukkit .getScheduler ().runTaskAsynchronously (this , () -> {
8185 if (getConfig ().getString (event .getPlayer ().getUniqueId ().toString ()) != null ) {
8286 // If [UUID] entry exists then use this
83- String sanitizedColor = sanitizeAndSaveColoredName ( event . getPlayer (), getConfig ().getString (player .getUniqueId ().toString ()), false );
87+ String sanitizedColor = sanitizeColoredName ( getConfig ().getString (player .getUniqueId ().toString ()));
8488
8589 // set the name
8690 setColoredName (event .getPlayer (), sanitizedColor );
@@ -92,15 +96,17 @@ public void onPlayerJoin(PlayerJoinEvent event) {
9296 getConfig ().set (event .getPlayer ().getName (), null );
9397
9498 // add [UUID] entry and set color
95- String sanitizedColor = sanitizeAndSaveColoredName (event .getPlayer (), coloredName , true );
99+ String sanitizedColor = sanitizeColoredName (coloredName );
100+ saveColoredName (event .getPlayer (), sanitizedColor );
96101
97102 // set the name
98103 setColoredName (event .getPlayer (), sanitizedColor );
99104
100105 configModified = true ;
101106 } else {
102107 // set default color (first one)
103- String sanitizedColor = sanitizeAndSaveColoredName (event .getPlayer (), colors .get (0 ), true );
108+ String sanitizedColor = sanitizeColoredName (colors .get (0 ));
109+ saveColoredName (event .getPlayer (), sanitizedColor );
104110
105111 // set the new name
106112 setColoredName (event .getPlayer (), sanitizedColor );
@@ -126,15 +132,29 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
126132 return true ;
127133 }
128134
129- if (setColorFromCommand (sender , args [1 ], target )) {
135+ AbstractMap .SimpleEntry <Boolean , String > colorResult = getColorFromCommand (sender , args [1 ], target );
136+
137+ if (colorResult .getKey ()) {
138+ String sanitizedColor = colorResult .getValue ();
139+
140+ saveColoredName (target , sanitizedColor );
141+ setColoredName (target , sanitizedColor );
142+
130143 sender .sendMessage (pluginPrefix + "The name color of " + target .getDisplayName () + " has been changed." );
131144 target .sendMessage (pluginPrefix + "Your name color has been changed: " + target .getDisplayName () + "." );
132145 } else {
133146 sender .sendMessage (pluginPrefix + "Incorrect color specification or insufficient playing time or joining date. Type " + ChatColor .GOLD + "/nc" + ChatColor .RESET + " for help." );
134147 }
135148 } else if (args .length == 1 && sender instanceof Player ) {
136149 // Player Command
137- if (setColorFromCommand (sender , args [0 ], (Player ) sender )) {
150+ AbstractMap .SimpleEntry <Boolean , String > colorResult = getColorFromCommand (sender , args [0 ], (Player ) sender );
151+
152+ if (colorResult .getKey ()) {
153+ String sanitizedColor = colorResult .getValue ();
154+
155+ saveColoredName ((Player ) sender , sanitizedColor );
156+ setColoredName ((Player ) sender , sanitizedColor );
157+
138158 sender .sendMessage (pluginPrefix + "Your name color has been changed: " + ((Player ) sender ).getDisplayName () + "." );
139159 } else {
140160 sender .sendMessage (pluginPrefix + "Incorrect color specification or insufficient playing time or joining date. Type " + ChatColor .GOLD + "/nc" + ChatColor .RESET + " for help." );
@@ -211,7 +231,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String commandLabel,
211231 return false ;
212232 }
213233
214- private int getMaximumColorIndex (Player player ) {
234+ public int getMaximumColorIndex (Player player ) {
215235 double playTime = getPlayTimeInHours (player );
216236 double joinDate = getJoinDateInDays (player );
217237
@@ -231,7 +251,7 @@ private double getPlayTimeInHours(Player player) {
231251 return playTimeS / (60d * 60d );
232252 }
233253
234- private String sanitizeAndSaveColoredName ( Player player , String colorString , boolean save ) {
254+ private String sanitizeColoredName ( String colorString ) {
235255 // use sanitize regex
236256 Matcher matcher = regexPattern .matcher (colorString );
237257
@@ -244,20 +264,20 @@ private String sanitizeAndSaveColoredName(Player player, String colorString, boo
244264 colorString = colors .get (0 );
245265 }
246266
247- if (save ) {
248- getConfig ().set (player .getUniqueId ().toString (), colorString );
249- }
267+ return colorString ;
268+ }
250269
251- configModified = true ;
270+ private void saveColoredName (Player player , String colorString ) {
271+ getConfig ().set (player .getUniqueId ().toString (), colorString );
252272
253- return colorString ;
273+ configModified = true ;
254274 }
255275
256276 private void setColoredName (Player player , String colorString ) {
257277 player .setDisplayName (colorString + player .getName () + ChatColor .RESET );
258278 }
259279
260- private boolean setColorFromCommand (CommandSender sender , String colorString , Player target ) {
280+ private AbstractMap . SimpleEntry < Boolean , String > getColorFromCommand (CommandSender sender , String colorString , Player target ) {
261281 ChatColor color ;
262282 boolean bold = false ;
263283
@@ -271,25 +291,23 @@ private boolean setColorFromCommand(CommandSender sender, String colorString, Pl
271291 }
272292
273293 if (color == null )
274- return false ;
294+ return new AbstractMap . SimpleEntry <>( false , "" ) ;
275295
276296 if (!(sender instanceof ConsoleCommandSender ) && !sender .isOp ()) {
277297 int colorIndex = getChatColorIndex (color );
278298
279299 if (colorIndex < 0 || colorIndex > getMaximumColorIndex (target )) {
280- return false ;
300+ return new AbstractMap . SimpleEntry <>( false , "" ) ;
281301 }
282302
283- if (bold && getMaximumColorIndex (target ) < colors . size () - 1 ) {
303+ if (bold && getMaximumColorIndex (target ) < boldIndex ) {
284304 bold = false ;
285305 }
286306 }
287307
288- String sanitizedColor = sanitizeAndSaveColoredName (target , color .toString () + (bold ? ChatColor .BOLD : "" ), true );
289-
290- setColoredName (target , sanitizedColor );
308+ String sanitizedColor = sanitizeColoredName (color .toString () + (bold ? ChatColor .BOLD : "" ));
291309
292- return true ;
310+ return new AbstractMap . SimpleEntry <>( false , sanitizedColor ) ;
293311 }
294312
295313 private int getChatColorIndex (ChatColor color ) {
0 commit comments