Skip to content

Commit 3a3aa2b

Browse files
committed
Definitive configuration paste system
1 parent d2032cf commit 3a3aa2b

File tree

16 files changed

+155
-112
lines changed

16 files changed

+155
-112
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
# PlayerBalancer
22
[Spigot Resource](https://www.spigotmc.org/resources/10788/)
33

4-
[![Build Status](https://travis-ci.com/jaime29010/PlayerBalancer.svg?token=2yUi9WpA9QzSbJx9eTmy&branch=master)](https://travis-ci.com/jaime29010/LobbyBalancer)
4+
[![Build Status](https://travis-ci.com/jaime29010/PlayerBalancer.svg?token=2yUi9WpA9QzSbJx9eTmy&branch=master)](https://travis-ci.com/jaime29010/PlayerBalancer)
55

66
### Things to do:
77
- [x] Get dummy sections able to have already registered servers on other sections
88
- [x] Add a new message for when a player gets connected to a server and repurpose the connecting one
99
- [ ] Add support for wildcards, contains, equalsIgnoreCase and regex at the same time
1010
- [x] Add tooltip when you hover over a server in /section info
1111
- [ ] Stop using inventivetalent's deprecated bungee-update
12-
- [ ] Create a LobbyBalancer spigot addon that adds connector signs and placeholders
12+
- [ ] Create a spigot addon that adds connector signs and placeholders
1313
- [ ] Separate the types of connections in classes instead of being in ConnectionIntent
14-
- [ ] Make the plugin API not be so dependent on a instance of LobbyBalancer
14+
- [ ] Make the plugin API not be so dependent on a instance of PlayerBalancer
1515
- [ ] Separate connection providers in classes instead of being hardcoded in an enum
1616
- [ ] Make the feature `marker-descs` work per section
1717
- [ ] Add a identifier to get the servers of a section (auto complete)

pom.xml

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -88,19 +88,18 @@
8888
<artifactId>configme</artifactId>
8989
<version>0.4</version>
9090
<scope>compile</scope>
91+
<exclusions>
92+
<!-- This is already shaded in BungeeCord -->
93+
<exclusion>
94+
<groupId>org.yaml</groupId>
95+
<artifactId>snakeyaml</artifactId>
96+
</exclusion>
97+
</exclusions>
9198
</dependency>
92-
<dependency>
93-
<groupId>org.apache.httpcomponents</groupId>
94-
<artifactId>httpclient</artifactId>
95-
<version>4.5.2</version>
96-
<scope>compile</scope>
97-
</dependency>
98-
<dependency>
99-
<groupId>org.apache.httpcomponents</groupId>
100-
<artifactId>httpmime</artifactId>
101-
<version>4.3.6</version>
102-
</dependency>
99+
100+
103101
<!-- TODO Ditch this dependency, move to ConfigMe -->
102+
<!-- TODO This is shading commons lang3 -->
104103
<dependency>
105104
<groupId>me.jaimemartz</groupId>
106105
<artifactId>faucet-bungee</artifactId>
@@ -116,7 +115,7 @@
116115
<scope>compile</scope>
117116
</dependency>
118117

119-
<!-- TODO Replace with our own alternative to "RedisBunge" (maybe) -->
118+
<!-- TODO Replace with our own alternative to "RedisBungee" (maybe) -->
120119
<dependency>
121120
<groupId>com.imaginarycode.minecraft</groupId>
122121
<artifactId>RedisBungee</artifactId>

src/main/java/com/jaimemartz/playerbalancer/PlayerBalancer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private void enable() {
109109

110110
getProxy().getPluginManager().registerListener(this, new PlayerDisconnectListener(this));
111111

112-
getProxy().registerChannel("LobbyBalancer");
112+
getProxy().registerChannel("PlayerBalancer");
113113

114114
if (ConfigEntries.RECONNECT_KICK_ENABLED.get()) {
115115
kickListener = new ServerKickListener(this);

src/main/java/com/jaimemartz/playerbalancer/commands/MainCommand.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.jaimemartz.playerbalancer.commands;
22

3-
import com.jaimemartz.playerbalancer.manager.PasteHelper;
43
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.manager.PasteHelper;
55
import net.md_5.bungee.api.ChatColor;
66
import net.md_5.bungee.api.CommandSender;
77
import net.md_5.bungee.api.chat.ComponentBuilder;
@@ -21,17 +21,17 @@ public void execute(final CommandSender sender, String[] args) {
2121
if (args.length != 0) {
2222
switch (args[0].toLowerCase()) {
2323
case "paste": {
24-
if (sender.hasPermission("lobbybalancer.admin")) {
25-
PasteHelper.PLUGIN.send(plugin, sender, "Plugin config paste link: {response}");
26-
PasteHelper.BUNGEE.send(plugin, sender, "Bungee config paste link (IPs stripped): {response}");
24+
if (sender.hasPermission("playerbalancer.admin")) {
25+
PasteHelper.PLUGIN.send(plugin, sender);
26+
PasteHelper.BUNGEE.send(plugin, sender);
2727
} else {
2828
sender.sendMessage(new ComponentBuilder("You do not have permission to execute this command!").color(ChatColor.RED).create());
2929
}
3030
break;
3131
}
3232

3333
case "reload": {
34-
if (sender.hasPermission("lobbybalancer.admin")) {
34+
if (sender.hasPermission("playerbalancer.admin")) {
3535
sender.sendMessage(new ComponentBuilder("Reloading the configuration, this may take a while...").color(ChatColor.GREEN).create());
3636
if (plugin.reloadPlugin()) {
3737
sender.sendMessage(new ComponentBuilder("The plugin has successfully reloaded").color(ChatColor.GREEN).create());
@@ -50,7 +50,7 @@ public void execute(final CommandSender sender, String[] args) {
5050
}
5151
} else {
5252
sender.sendMessage(new ComponentBuilder(StringUtils.repeat('-', 53)).strikethrough(true).color(ChatColor.GRAY).create());
53-
sender.sendMessage(new ComponentBuilder("LobbyBalancer " + plugin.getDescription().getVersion()).color(ChatColor.GRAY).create());
53+
sender.sendMessage(new ComponentBuilder("PlayerBalancer " + plugin.getDescription().getVersion()).color(ChatColor.GRAY).create());
5454
sender.sendMessage(new ComponentBuilder("Available commands:").color(ChatColor.GRAY).create());
5555
sender.sendMessage(new ComponentBuilder("/balancer").color(ChatColor.AQUA).append(" - ").color(ChatColor.GRAY).append("Shows you this message").color(ChatColor.RED).create());
5656
sender.sendMessage(new ComponentBuilder("/balancer paste").color(ChatColor.AQUA).append(" - ").color(ChatColor.GRAY).append("Creates a paste with the important files").color(ChatColor.RED).create());

src/main/java/com/jaimemartz/playerbalancer/commands/ManageCommand.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,11 @@
1111
import net.md_5.bungee.api.chat.ClickEvent;
1212
import net.md_5.bungee.api.chat.ComponentBuilder;
1313
import net.md_5.bungee.api.chat.HoverEvent;
14-
import net.md_5.bungee.api.chat.TextComponent;
1514
import net.md_5.bungee.api.connection.ProxiedPlayer;
1615
import net.md_5.bungee.api.plugin.Command;
1716
import org.apache.commons.lang3.StringUtils;
1817

19-
import java.util.Iterator;
2018
import java.util.Map;
21-
import java.util.Set;
2219

2320
public class ManageCommand extends Command {
2421
private final PlayerBalancer plugin;
@@ -30,7 +27,7 @@ public ManageCommand(PlayerBalancer plugin) {
3027

3128
@Override
3229
public void execute(CommandSender sender, String[] args) {
33-
if (sender.hasPermission("lobbybalancer.admin")) {
30+
if (sender.hasPermission("playerbalancer.admin")) {
3431
if (args.length != 0) {
3532
switch (args[0].toLowerCase()) {
3633
case "connect": {

src/main/java/com/jaimemartz/playerbalancer/connection/ConnectionIntent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.jaimemartz.playerbalancer.connection;
22

3-
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
4-
import com.jaimemartz.playerbalancer.ping.ServerStatus;
53
import com.jaimemartz.playerbalancer.PlayerBalancer;
64
import com.jaimemartz.playerbalancer.configuration.ConfigEntries;
5+
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
6+
import com.jaimemartz.playerbalancer.ping.ServerStatus;
77
import com.jaimemartz.playerbalancer.section.ServerSection;
88
import com.jaimemartz.playerbalancer.utils.MessageUtils;
99
import net.md_5.bungee.api.config.ServerInfo;

src/main/java/com/jaimemartz/playerbalancer/listener/PlayerDisconnectListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.jaimemartz.playerbalancer.listener;
22

3-
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
43
import com.jaimemartz.playerbalancer.PlayerBalancer;
54
import com.jaimemartz.playerbalancer.configuration.ConfigEntries;
5+
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
66
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
77
import net.md_5.bungee.api.connection.ProxiedPlayer;
88
import net.md_5.bungee.api.event.PlayerDisconnectEvent;

src/main/java/com/jaimemartz/playerbalancer/listener/PluginMessageListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void onPluginMessage(PluginMessageEvent event) {
8282
e.printStackTrace();
8383
}
8484

85-
sender.sendData("LobbyBalancer", stream.toByteArray());
85+
sender.sendData("PlayerBalancer", stream.toByteArray());
8686
break;
8787
}
8888

src/main/java/com/jaimemartz/playerbalancer/listener/ServerConnectListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.jaimemartz.playerbalancer.listener;
22

3+
import com.jaimemartz.playerbalancer.PlayerBalancer;
4+
import com.jaimemartz.playerbalancer.configuration.ConfigEntries;
35
import com.jaimemartz.playerbalancer.connection.ConnectionIntent;
46
import com.jaimemartz.playerbalancer.connection.ServerAssignRegistry;
57
import com.jaimemartz.playerbalancer.manager.PlayerLocker;
6-
import com.jaimemartz.playerbalancer.PlayerBalancer;
7-
import com.jaimemartz.playerbalancer.configuration.ConfigEntries;
88
import com.jaimemartz.playerbalancer.section.ServerSection;
99
import com.jaimemartz.playerbalancer.utils.MessageUtils;
1010
import net.md_5.bungee.api.config.ServerInfo;

src/main/java/com/jaimemartz/playerbalancer/manager/PasteHelper.java

Lines changed: 60 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,35 @@
33
import com.google.common.io.CharStreams;
44
import com.jaimemartz.playerbalancer.PlayerBalancer;
55
import com.jaimemartz.playerbalancer.utils.GuestPaste;
6-
import net.md_5.bungee.api.Callback;
76
import net.md_5.bungee.api.ChatColor;
87
import net.md_5.bungee.api.CommandSender;
8+
import net.md_5.bungee.api.chat.ClickEvent;
99
import net.md_5.bungee.api.chat.ComponentBuilder;
10+
import net.md_5.bungee.api.connection.ProxiedPlayer;
1011
import net.md_5.bungee.api.scheduler.ScheduledTask;
11-
import org.apache.http.client.HttpClient;
12-
import org.apache.http.client.methods.HttpPost;
13-
import org.apache.http.impl.client.DefaultHttpClient;
14-
import org.apache.http.impl.client.HttpClients;
1512

1613
import java.io.File;
1714
import java.io.FileInputStream;
1815
import java.io.InputStreamReader;
16+
import java.net.URL;
1917
import java.util.concurrent.TimeUnit;
18+
import java.util.function.BiConsumer;
2019

2120
public enum PasteHelper {
22-
PLUGIN {
21+
PLUGIN((sender, url) -> {
22+
if (sender instanceof ProxiedPlayer) {
23+
sender.sendMessage(new ComponentBuilder("Click me for the plugin configuration")
24+
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, url.toString()))
25+
.color(ChatColor.GREEN)
26+
.create()
27+
);
28+
} else {
29+
sender.sendMessage(new ComponentBuilder("Plugin configuration link: " + url.toString()).create());
30+
}
31+
}) {
2332
@Override
24-
public String paste(PlayerBalancer plugin) throws Exception {
33+
public URL paste(PlayerBalancer plugin) throws Exception {
2534
File file = new File(plugin.getDataFolder(), "config.yml");
26-
if (!file.exists()) {
27-
return "File does not exist";
28-
}
29-
3035
try (FileInputStream stream = new FileInputStream(file)) {
3136
try (InputStreamReader reader = new InputStreamReader(stream, "UTF-8")) {
3237
String content = CharStreams.toString(reader);
@@ -47,18 +52,24 @@ public String paste(PlayerBalancer plugin) throws Exception {
4752
}
4853
}
4954
},
50-
BUNGEE {
55+
BUNGEE((sender, url) -> {
56+
if (sender instanceof ProxiedPlayer) {
57+
sender.sendMessage(new ComponentBuilder("Click me for the BungeeCord configuration")
58+
.event(new ClickEvent(ClickEvent.Action.OPEN_URL, url.toString()))
59+
.color(ChatColor.GREEN)
60+
.create()
61+
);
62+
} else {
63+
sender.sendMessage(new ComponentBuilder("BungeeCord configuration link: " + url.toString()).create());
64+
}
65+
}) {
5166
@Override
52-
public String paste(PlayerBalancer plugin) throws Exception {
67+
public URL paste(PlayerBalancer plugin) throws Exception {
5368
File file = new File("config.yml");
54-
if (!file.exists()) {
55-
return "File does not exist";
56-
}
57-
5869
try (FileInputStream stream = new FileInputStream(file)) {
5970
try (InputStreamReader reader = new InputStreamReader(stream, "UTF-8")) {
6071
String content = CharStreams.toString(reader);
61-
content = content.replaceAll("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}", "X.X.X.X");
72+
content = content.replaceAll("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}", "?.?.?.?");
6273
GuestPaste paste = new GuestPaste("e3ff18d8fb001a3ece08ae0d7d4a87bd", content);
6374

6475
paste.setName("{name} ({version}) Configuration"
@@ -76,24 +87,43 @@ public String paste(PlayerBalancer plugin) throws Exception {
7687
}
7788
};
7889

79-
//Cached link of the paste
80-
private String response;
90+
private URL url;
8191
private ScheduledTask task = null;
8292

83-
public void send(PlayerBalancer plugin, CommandSender sender, String message) {
84-
try {
85-
sender.sendMessage(new ComponentBuilder(message.replace("{response}", response == null ? response = paste(plugin) : response)).color(ChatColor.GREEN).create());
93+
private final BiConsumer<CommandSender, URL> consumer;
94+
PasteHelper(BiConsumer<CommandSender, URL> consumer) {
95+
this.consumer = consumer;
96+
}
8697

87-
if (task != null) {
88-
plugin.getProxy().getScheduler().cancel(task);
98+
public void send(PlayerBalancer plugin, CommandSender sender) {
99+
if (url == null) {
100+
try {
101+
url = paste(plugin);
102+
if (task != null) {
103+
task.cancel();
104+
}
105+
task = plugin.getProxy().getScheduler().schedule(plugin, () -> {
106+
url = null;
107+
}, 5, TimeUnit.MINUTES);
108+
} catch (GuestPaste.PasteException e) {
109+
sender.sendMessage(new ComponentBuilder("An pastebin exception occurred: " + e.getMessage())
110+
.color(ChatColor.RED)
111+
.create()
112+
);
113+
e.printStackTrace();
114+
} catch (Exception e) {
115+
sender.sendMessage(new ComponentBuilder("An internal error occurred while attempting to perform this command")
116+
.color(ChatColor.RED)
117+
.create()
118+
);
119+
e.printStackTrace();
89120
}
121+
}
90122

91-
task = plugin.getProxy().getScheduler().schedule(plugin, () -> response = null, 5, TimeUnit.MINUTES);
92-
} catch (Exception e) {
93-
sender.sendMessage(new ComponentBuilder("An internal error occurred while attempting to perform this command").color(ChatColor.RED).create());
94-
e.printStackTrace();
123+
if (url != null) {
124+
consumer.accept(sender, url);
95125
}
96126
}
97127

98-
public abstract String paste(PlayerBalancer plugin) throws Exception;
128+
public abstract URL paste(PlayerBalancer plugin) throws Exception;
99129
}

0 commit comments

Comments
 (0)