Skip to content

Commit 918e9cd

Browse files
committed
Optimized a lot around the code, Introduced a new function Tab Customization it lets users have custom tab Header and Footer and Ping. added couple of checks around the code to ensure that if config.yml values are null that it doesn't proceed, this will avoid console spam.
I've used in.rs.milivojevic.KPManager.utils.PingUtil.java in order to get the ping values. This code was taken from xDefcon's spigot-ping project. Original code can be found at https://github.com/xDefcon/spigot-ping/blob/master/src/main/java/com/xdefcon/spigotping/utils/PingUtil.java Original author: Luigi Martinelli (xDefcon) License: GNU GENERAL PUBLIC LICENSE Version 3 This project uses the code under the terms of the license.
1 parent c554c86 commit 918e9cd

File tree

7 files changed

+132
-13
lines changed

7 files changed

+132
-13
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>in.rs.milivojevic</groupId>
88
<artifactId>KPManager</artifactId>
9-
<version>1.4-SNAPSHOT</version>
9+
<version>1.5-SNAPSHOT</version>
1010
<packaging>jar</packaging>
1111

1212
<name>KPManager</name>
@@ -78,7 +78,7 @@
7878
<dependency>
7979
<groupId>org.spigotmc</groupId>
8080
<artifactId>spigot-api</artifactId>
81-
<version>1.13.2-R0.1-SNAPSHOT</version>
81+
<version>1.19.3-R0.1-SNAPSHOT</version>
8282
</dependency>
8383
<dependency>
8484
<groupId>org.jsoup</groupId>

src/main/java/in/rs/milivojevic/KPManager/JoinWelcomer.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.jsoup.Jsoup;
1414
import org.jsoup.nodes.Document;
1515
import org.jsoup.select.Elements;
16-
1716
import java.io.IOException;
1817
import java.util.Objects;
1918

@@ -27,9 +26,18 @@ public final class JoinWelcomer implements Listener {
2726
public JoinWelcomer(Main plugin) {
2827
this.plugin = plugin;
2928
config = plugin.getConfig();
30-
messagePlayer = config.getString("messagePlayer").replace('&', ChatColor.COLOR_CHAR);
31-
messageEveryone = config.getString("messageEveryone").replace('&', ChatColor.COLOR_CHAR);
32-
messageError = config.getString("messageError").replace('&', ChatColor.COLOR_CHAR);
29+
30+
if (config.getString("tabHeader") !=null) {
31+
messagePlayer = config.getString("messagePlayer").replace('&', ChatColor.COLOR_CHAR);
32+
}
33+
34+
if (config.getString("tabHeader") !=null) {
35+
messageEveryone = config.getString("messageEveryone").replace('&', ChatColor.COLOR_CHAR);
36+
}
37+
38+
if (config.getString("tabHeader") !=null) {
39+
messageError = config.getString("messageError").replace('&', ChatColor.COLOR_CHAR);
40+
}
3341
}
3442

3543

src/main/java/in/rs/milivojevic/KPManager/Main.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package in.rs.milivojevic.KPManager;
22

33
import org.bukkit.Bukkit;
4-
import org.bukkit.ChatColor;
54
import org.bukkit.event.Listener;
65
import org.bukkit.plugin.java.JavaPlugin;
6+
import org.bukkit.scoreboard.Scoreboard;
77

88
public final class Main extends JavaPlugin implements Listener {
99

@@ -14,11 +14,11 @@ public void onEnable() {
1414
this.saveDefaultConfig();
1515
JoinWelcomer joinWelcomer = new JoinWelcomer(this);
1616
getServer().getPluginManager().registerEvents(joinWelcomer, this);
17-
}
18-
19-
20-
2117

18+
Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
19+
TabCustomizer tabCustomizer = new TabCustomizer(scoreboard,this);
20+
getServer().getPluginManager().registerEvents(tabCustomizer, this);
21+
}
2222
@Override
2323
public void onDisable() {
2424
Bukkit.getServer().getPluginManager().disablePlugin(this);
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package in.rs.milivojevic.KPManager;
2+
3+
import org.bukkit.Bukkit;
4+
import org.bukkit.ChatColor;
5+
import org.bukkit.configuration.file.FileConfiguration;
6+
import org.bukkit.entity.Player;
7+
import org.bukkit.event.EventHandler;
8+
import org.bukkit.event.Listener;
9+
import org.bukkit.event.player.PlayerJoinEvent;
10+
import org.bukkit.event.player.PlayerQuitEvent;
11+
import org.bukkit.scoreboard.Scoreboard;
12+
import org.bukkit.scoreboard.Team;
13+
import org.bukkit.scheduler.BukkitRunnable;
14+
import in.rs.milivojevic.KPManager.utils.PingUtil;
15+
16+
public class TabCustomizer implements Listener {
17+
private final Scoreboard scoreboard;
18+
private FileConfiguration config;
19+
private String tabHeader;
20+
private String tabFooter;
21+
private String pingInt;
22+
private final Main plugin;
23+
private boolean hasPingInt;
24+
private boolean hasTabHeaderFooter;
25+
public TabCustomizer(Scoreboard scoreboard, Main plugin) {
26+
this.scoreboard = scoreboard;
27+
this.plugin = plugin;
28+
config = plugin.getConfig();
29+
30+
hasPingInt = config.contains("pingInt") && config.getString("pingInt") != null;
31+
32+
hasTabHeaderFooter = config.contains("tabHeader") && config.getString("tabHeader") != null && config.contains("tabFooter") && config.getString("tabFooter") != null;
33+
34+
35+
36+
if (config.getString("tabHeader") !=null){
37+
tabHeader = config.getString("tabHeader").replace('&', ChatColor.COLOR_CHAR);
38+
}
39+
40+
if (config.getString("tabFooter") !=null) {
41+
tabFooter = config.getString("tabFooter").replace('&', ChatColor.COLOR_CHAR);
42+
}
43+
44+
if (config.getString("pingInt") !=null) {
45+
pingInt = config.getString("pingInt").replace('&', ChatColor.COLOR_CHAR);
46+
}
47+
}
48+
49+
@EventHandler
50+
public void onPlayerJoin(PlayerJoinEvent event) {
51+
Player player = event.getPlayer();
52+
String playerName = player.getName();
53+
Team team = scoreboard.getTeam(playerName);
54+
if (team == null) {
55+
team = scoreboard.registerNewTeam(playerName);
56+
}
57+
team.addEntry(playerName);
58+
59+
BukkitRunnable task = new BukkitRunnable() {
60+
@Override
61+
public void run() {
62+
int ping = PingUtil.getPing(player);
63+
if (hasPingInt) {
64+
player.setPlayerListName(playerName + ChatColor.translateAlternateColorCodes('&', pingInt.replace("{ping}", String.valueOf(ping))));
65+
}
66+
if (hasTabHeaderFooter) {
67+
player.setPlayerListHeaderFooter(ChatColor.translateAlternateColorCodes('&', tabHeader.replace("{playerName}", player.getName())), ChatColor.translateAlternateColorCodes('&', tabFooter.replace("{playerName}", player.getName())));
68+
}
69+
}
70+
};
71+
task.runTaskTimer(plugin, 0, 20);
72+
}
73+
@EventHandler
74+
public void onPlayerQuit(PlayerQuitEvent event) {
75+
Player player = event.getPlayer();
76+
Team team = scoreboard.getTeam(player.getName());
77+
if (team != null) {
78+
team.removeEntry(player.getName());
79+
}
80+
}
81+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
This code was taken from xDefcon's spigot-ping project.
3+
Original code can be found at https://github.com/xDefcon/spigot-ping/blob/master/src/main/java/com/xdefcon/spigotping/utils/PingUtil.java
4+
Original author: Luigi Martinelli (xDefcon)
5+
License: GNU GENERAL PUBLIC LICENSE Version 3
6+
This project uses the code under the terms of the license.
7+
*/
8+
9+
package in.rs.milivojevic.KPManager.utils;
10+
import org.bukkit.Bukkit;
11+
import org.bukkit.entity.Player;
12+
13+
public class PingUtil {
14+
public static int getPing(Player p) {
15+
String v = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
16+
if (!p.getClass().getName().equals("org.bukkit.craftbukkit." + v + ".entity.CraftPlayer")) { //compatibility with some plugins
17+
p = Bukkit.getPlayer(p.getUniqueId()); //cast to org.bukkit.entity.Player
18+
}
19+
try {
20+
int ping = p.getPing();
21+
return ping;
22+
} catch (Exception e) {
23+
e.printStackTrace();
24+
}
25+
return 0;
26+
}
27+
}

src/main/resources/config.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
messagePlayer: '&aWelcome &b{playerName} &ato my server! &bEnjoy your stay!'
22
messageEveryone: '&a{playerName} joined from &b{country}.'
3-
messageError: '&cWelcome, &6{playerName}, &cto the server! It seems you may have joined from localhost or there was an error with the API ip-api.com. Please check your internet connection and firewall settings.'
3+
messageError: '&cWelcome, &6{playerName}, &cto the server! It seems you may have joined from localhost or there was an error with the API ip-api.com. Please check your internet connection and firewall settings.'
4+
tabHeader: '&6Welcome {playerName} to our wonderful server! &6'
5+
tabFooter: '&6Make the most of your stay, {playerName} &6'
6+
pingInt: '&7[{ping}]'

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: KPManager
22
api-version: 1.19
3-
version: 1.4
3+
version: 1.5
44
main: in.rs.milivojevic.KPManager.Main
55
author: Kamey_
66
license: MIT

0 commit comments

Comments
 (0)