Skip to content

Commit 512feaa

Browse files
authored
Merge branch 'retromcorg:master' into master
2 parents 0b21df3 + f04dc53 commit 512feaa

36 files changed

+613
-250
lines changed

.github/workflows/build-and-test.yaml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
---
21
name: build-and-test
32
on:
43
pull_request:
@@ -23,20 +22,28 @@ jobs:
2322
uses: actions/setup-java@v2
2423
with:
2524
distribution: 'temurin'
26-
java-version: 21
25+
java-version: 8
2726

2827
- name: Set up Maven
2928
uses: stCarolas/setup-maven@v4.5
3029
with:
3130
maven-version: 3.9.1
3231

33-
- name: build application
32+
- name: Build application
3433
shell: bash
3534
run: |
3635
mvn clean install
37-
38-
- name: Upload artifact
39-
uses: actions/upload-artifact@v3
36+
- name: Upload JAR files from all modules
37+
uses: actions/upload-artifact@v4
4038
with:
41-
name: JVillage
42-
path: target/*.jar
39+
name: ${{ github.event.repository.name }}-${{ github.sha }}
40+
path: |
41+
Essentials/target/*.jar
42+
EssentialsChat/target/*.jar
43+
EssentialsGeoIP/target/*.jar
44+
EssentialsGroupBadge/target/*.jar
45+
EssentialsGroupManager/target/*.jar
46+
EssentialsPermissionsCommands/target/*.jar
47+
EssentialsProtect/target/*.jar
48+
EssentialsSpawn/target/*.jar
49+
EssentialsXMPP/target/*.jar

Build.bat

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cmd /c "mvn clean package"
2+
python collect_and_rename.py

Essentials/src/main/java/com/earth2me/essentials/ISettings.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ public interface ISettings extends IConf {
7575

7676
int getMultipleHomes();
7777

78-
boolean getSortListByGroups();
79-
8078
int getSpawnMobLimit();
8179

8280
int getStartingBalance();

Essentials/src/main/java/com/earth2me/essentials/Settings.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,6 @@ public boolean getPerWarpPermission() {
261261
return config.getBoolean("per-warp-permission", false);
262262
}
263263

264-
@Override
265-
public boolean getSortListByGroups() {
266-
return config.getBoolean("sort-list-by-groups", true);
267-
}
268-
269264
@Override
270265
public void reloadConfig() {
271266
config.load();

Essentials/src/main/java/com/earth2me/essentials/commands/Commandlist.java

Lines changed: 189 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -2,115 +2,210 @@
22

33
import com.earth2me.essentials.User;
44
import com.earth2me.essentials.Util;
5-
import org.bukkit.ChatColor;
5+
66
import org.bukkit.Server;
77
import org.bukkit.command.CommandSender;
88
import org.bukkit.entity.Player;
99

1010
import java.util.*;
1111

12-
1312
public class Commandlist extends EssentialsCommand {
13+
private final String SHOW_HIDDEN_PLAYERS_PERMISSION_NODE = "essentials.list.hidden";
14+
private final int PLAYERS_PER_PAGE = 15;
15+
1416
public Commandlist() {
1517
super("list");
1618
}
1719

1820
@Override
19-
public void run(Server server, CommandSender sender, String commandLabel, String[] args) throws Exception {
20-
boolean showhidden = false;
21-
if (sender instanceof Player) {
22-
if (ess.getUser(sender).isAuthorized("essentials.list.hidden")) {
23-
showhidden = true;
24-
}
25-
} else {
26-
showhidden = true;
21+
public void run(
22+
Server server,
23+
CommandSender sender,
24+
String commandLabel,
25+
String[] args
26+
) {
27+
boolean showHiddenPlayers = canListHiddenPlayers(sender);
28+
Player[] players = server.getOnlinePlayers();
29+
30+
List<Player> sortedPlayers = new ArrayList<>();
31+
32+
int hiddenPlayerCount = 0;
33+
if(showHiddenPlayers) {
34+
List<Player> hiddenPlayers = getHiddenPlayers(players);
35+
36+
hiddenPlayerCount = hiddenPlayers.size();
37+
sortedPlayers.addAll(hiddenPlayers);
38+
}
39+
sortedPlayers.addAll(getOnlinePlayers(players));
40+
41+
int playerCount = sortedPlayers.size();
42+
43+
int pageToView;
44+
int pageCount;
45+
try {
46+
int[] pageDetails = getPageDetails(playerCount, args);
47+
pageToView = pageDetails[0];
48+
pageCount = pageDetails[1];
49+
} catch (NumberFormatException e) {
50+
String errorMessage = Util.i18n("pageIsNotAnInteger");
51+
sender.sendMessage(errorMessage);
52+
53+
return;
54+
}
55+
56+
sendChatMessage(sender, sortedPlayers, playerCount, hiddenPlayerCount, pageToView, pageCount);
57+
}
58+
59+
private void sendChatMessage(
60+
CommandSender sender,
61+
List<Player> players,
62+
int playerCount,
63+
int hiddenPlayerCount,
64+
int pageToView,
65+
int pageCount
66+
) {
67+
String chatHeader = getChatHeader(playerCount, hiddenPlayerCount);
68+
sender.sendMessage(chatHeader);
69+
70+
int startIndex = (pageToView - 1) * PLAYERS_PER_PAGE;
71+
72+
addPlayers(sender, players, startIndex);
73+
74+
String chatFooter = getChatFooter(pageToView, pageCount);
75+
sender.sendMessage(chatFooter);
76+
}
77+
78+
private int[] getPageDetails(int playerCount, String[] args) throws NumberFormatException {
79+
int pagesAllowed = (playerCount + PLAYERS_PER_PAGE - 1) / PLAYERS_PER_PAGE;
80+
int[] output = new int[] {1, pagesAllowed};
81+
82+
if (args.length == 0)
83+
return output;
84+
85+
String pageString = args[0];
86+
int pageNumber = Integer.parseInt(pageString);
87+
88+
if (pageNumber < 1)
89+
return output;
90+
91+
if (pageNumber > pagesAllowed) {
92+
output[0] = pagesAllowed;
93+
return output;
94+
}
95+
96+
output[0] = pageNumber;
97+
return output;
98+
}
99+
100+
private String getChatHeader(int playerCount, int hiddenPlayerCount) {
101+
String output = "";
102+
103+
if (playerCount == 1)
104+
output = Util.format("playersOnlineSingle");
105+
else
106+
output = Util.format("playersOnlineMultiple", playerCount);
107+
108+
if (hiddenPlayerCount > 0)
109+
output += " " + Util.format("playersOnlineHiddenTag", hiddenPlayerCount);
110+
111+
output += ":";
112+
return output;
113+
}
114+
115+
private String getChatFooter(int page, int totalPages) {
116+
if(totalPages == 1)
117+
return Util.i18n("pageNumberDisplaySingle");
118+
119+
return Util.format("pageNumberDisplay", page, totalPages);
120+
}
121+
122+
private boolean canListHiddenPlayers(CommandSender sender) {
123+
// console check
124+
if (!(sender instanceof Player))
125+
return true;
126+
127+
User commandUser = ess.getUser(sender);
128+
if (commandUser.isAuthorized(SHOW_HIDDEN_PLAYERS_PERMISSION_NODE))
129+
return true;
130+
131+
return false;
132+
}
133+
134+
private boolean isHiddenPlayer(Player player) {
135+
return ess.getUser(player).isHidden();
136+
}
137+
138+
private List<Player> getOnlinePlayers(Player[] allPlayers) {
139+
List<Player> output = new ArrayList<>();
140+
141+
for (Player player : allPlayers) {
142+
if (isHiddenPlayer(player))
143+
continue;
144+
145+
output.add(player);
27146
}
28-
int playerHidden = 0;
29-
for (Player p : server.getOnlinePlayers()) {
30-
if (ess.getUser(p).isHidden()) {
31-
playerHidden++;
32-
}
147+
148+
return output;
149+
}
150+
151+
private List<Player> getHiddenPlayers(Player[] allPlayers) {
152+
List<Player> output = new ArrayList<>();
153+
154+
for (Player player : allPlayers) {
155+
if (isHiddenPlayer(player))
156+
output.add(player);
33157
}
34-
//TODO: move these to messages file
35-
StringBuilder online = new StringBuilder();
36-
online.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().length - playerHidden);
37-
if (showhidden && playerHidden > 0) {
38-
online.append(ChatColor.GRAY).append("/").append(playerHidden);
158+
159+
return output;
160+
}
161+
162+
private String getPlayerString(User user) {
163+
String output = "";
164+
165+
if (user.isHidden())
166+
output = "§7[§dHIDDEN§7]";
167+
if (user.isAfk())
168+
output += "§7[§8AFK§7]";
169+
170+
output += user.getDisplayName();
171+
return output;
172+
}
173+
174+
private int addPlayers(
175+
CommandSender sender,
176+
List<Player> players,
177+
int startIndex
178+
) {
179+
int playerCount = players.size();
180+
181+
if (playerCount == 0)
182+
return 0;
183+
184+
/**
185+
* this looks complicated, but it just generates a segment of the player list starting at the 'startIndex'.
186+
* it tries to get PLAYERS_PER_PAGE names, but will prevent IOOBE if there arent enough players present
187+
*/
188+
int namesAbleToPrint = Integer.min(playerCount - startIndex, PLAYERS_PER_PAGE);
189+
players = players.subList(
190+
startIndex,
191+
namesAbleToPrint + startIndex
192+
);
193+
194+
List<User> onlineUsers = new ArrayList<>();
195+
for (Player player : players) {
196+
User user = ess.getUser(player);
197+
onlineUsers.add(user);
39198
}
40-
online.append(ChatColor.BLUE).append(" out of a maximum ").append(ChatColor.RED).append(server.getMaxPlayers());
41-
online.append(ChatColor.BLUE).append(" players online.");
42-
sender.sendMessage(online.toString());
43-
44-
if (ess.getSettings().getSortListByGroups()) {
45-
Map<String, List<User>> sort = new HashMap<String, List<User>>();
46-
for (Player p : server.getOnlinePlayers()) {
47-
User u = ess.getUser(p);
48-
if (u.isHidden() && !showhidden) {
49-
continue;
50-
}
51-
String group = u.getGroup();
52-
List<User> list = sort.get(group);
53-
if (list == null) {
54-
list = new ArrayList<User>();
55-
sort.put(group, list);
56-
}
57-
list.add(u);
58-
}
59-
String[] groups = sort.keySet().toArray(new String[0]);
60-
Arrays.sort(groups, String.CASE_INSENSITIVE_ORDER);
61-
for (String group : groups) {
62-
StringBuilder groupString = new StringBuilder();
63-
groupString.append(group).append(": ");
64-
List<User> users = sort.get(group);
65-
Collections.sort(users);
66-
boolean first = true;
67-
for (User user : users) {
68-
if (!first) {
69-
groupString.append(", ");
70-
} else {
71-
first = false;
72-
}
73-
if (user.isAfk()) {
74-
groupString.append("§7[AFK]§f");
75-
}
76-
if (user.isHidden()) {
77-
groupString.append("§7[HIDDEN]§f");
78-
}
79-
groupString.append(user.getDisplayName());
80-
groupString.append("§f");
81-
}
82-
sender.sendMessage(groupString.toString());
83-
}
84-
} else {
85-
List<User> users = new ArrayList<User>();
86-
for (Player p : server.getOnlinePlayers()) {
87-
final User u = ess.getUser(p);
88-
if (u.isHidden() && !showhidden) {
89-
continue;
90-
}
91-
users.add(u);
92-
}
93-
Collections.sort(users);
94-
95-
StringBuilder onlineUsers = new StringBuilder();
96-
onlineUsers.append(Util.i18n("connectedPlayers"));
97-
boolean first = true;
98-
for (User user : users) {
99-
if (!first) {
100-
onlineUsers.append(", ");
101-
} else {
102-
first = false;
103-
}
104-
if (user.isAfk()) {
105-
onlineUsers.append("§7[AFK]§f");
106-
}
107-
if (user.isHidden()) {
108-
onlineUsers.append("§7[HIDDEN]§f");
109-
}
110-
onlineUsers.append(user.getDisplayName());
111-
onlineUsers.append("§f");
112-
}
113-
sender.sendMessage(onlineUsers.toString());
199+
200+
for (User user : onlineUsers) {
201+
String displayName = getPlayerString(user);
202+
203+
if(displayName.contains("~"))
204+
sender.sendMessage(Util.format("playersOnlineListElementNicknamed", displayName, user.getName()));
205+
else
206+
sender.sendMessage(Util.format("playersOnlineListElement", displayName));
114207
}
208+
209+
return namesAbleToPrint;
115210
}
116211
}

0 commit comments

Comments
 (0)