Skip to content

Commit d3605a6

Browse files
author
YoFuzzy3
committed
More new things...
Implemented much better handling for commands run for offline players. Removed the spacer config option. Fixed Metrics graph names. Some other minor things done too.
1 parent f73d1cd commit d3605a6

5 files changed

Lines changed: 131 additions & 31 deletions

File tree

CommandSyncClient/src/com/fuzzoland/CommandSyncClient/CSC.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,20 @@ public class CSC extends JavaPlugin{
1919
public ClientThread client;
2020
public List<String> oq = Collections.synchronizedList(new ArrayList<String>());
2121
public Integer qc = 0;
22-
public String spacer;
22+
public String spacer = "@#@";
2323

2424
public void onEnable(){
2525
String[] data = loadConfig();
26-
if(data[4].equals("UNSET")){
26+
if(data[3].equals("UNSET")){
2727
System.out.println("[CommandSync] !!! YOU MUST SET THE SERVER'S NAME IN THE CONFIG BEFORE THE PLUGIN WILL WORK FOR THIS SERVER !!!");
2828
return;
2929
}
3030
try{
31-
client = new ClientThread(this, InetAddress.getByName(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2]), data[4]);
31+
client = new ClientThread(this, InetAddress.getByName(data[0]), Integer.parseInt(data[1]), Integer.parseInt(data[2]), data[3]);
3232
client.start();
3333
}catch(Exception e){
3434
e.printStackTrace();
3535
}
36-
spacer = data[3];
3736
loadData();
3837
getCommand("Sync").setExecutor(new CommandSynchronize(this));
3938
}
@@ -43,7 +42,7 @@ public void onDisable(){
4342
}
4443

4544
private String[] loadConfig(){
46-
String[] data = new String[5];
45+
String[] data = new String[4];
4746
try{
4847
File file = getDataFolder();
4948
if(!file.exists()){
@@ -53,7 +52,6 @@ private String[] loadConfig(){
5352
ps.println("ip=localhost");
5453
ps.println("port=9190");
5554
ps.println("heartbeat=1000");
56-
ps.println("spacer=@#@");
5755
ps.println("name=UNSET");
5856
ps.close();
5957
System.out.println("[CommandSync] New configuration file created.");
@@ -82,9 +80,9 @@ private void saveData(){
8280
OutputStream os = new FileOutputStream(new File(getDataFolder(), "data.txt"));
8381
PrintStream ps = new PrintStream(os);
8482
for(String s : oq){
85-
ps.println("q:" + s);
83+
ps.println("oq:" + s);
8684
}
87-
ps.println("c:" + String.valueOf(qc));
85+
ps.println("qc:" + String.valueOf(qc));
8886
ps.close();
8987
System.out.println("[CommandSync] All data saved.");
9088
}catch(IOException e){
@@ -100,10 +98,10 @@ private void loadData(){
10098
try{
10199
String l = br.readLine();
102100
while(l != null){
103-
if(l.startsWith("q:")){
104-
oq.add(new String(l.substring(2)));
105-
}else if(l.startsWith("c:")){
106-
qc = Integer.parseInt(new String(l.substring(2)));
101+
if(l.startsWith("oq:")){
102+
oq.add(new String(l.substring(3)));
103+
}else if(l.startsWith("qc:")){
104+
qc = Integer.parseInt(new String(l.substring(3)));
107105
}
108106
l = br.readLine();
109107
}

CommandSyncServer/src/com/fuzzoland/CommandSyncServer/CSS.java

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.net.InetAddress;
1111
import java.net.ServerSocket;
1212
import java.util.ArrayList;
13+
import java.util.Arrays;
1314
import java.util.Collections;
1415
import java.util.HashMap;
1516
import java.util.List;
@@ -24,9 +25,9 @@ public class CSS extends Plugin{
2425

2526
public ServerSocket server;
2627
public List<String> oq = Collections.synchronizedList(new ArrayList<String>());
27-
public List<String> pq = Collections.synchronizedList(new ArrayList<String>());
28-
public Map<String, Integer> qc = new HashMap<String, Integer>();
29-
public String spacer;
28+
public Map<String, List<String>> pq = Collections.synchronizedMap(new HashMap<String, List<String>>());
29+
public Map<String, Integer> qc = Collections.synchronizedMap(new HashMap<String, Integer>());
30+
public String spacer = "@#@";
3031

3132
public void onEnable(){
3233
String[] data = loadConfig();
@@ -37,7 +38,6 @@ public void onEnable(){
3738
}catch(Exception e){
3839
e.printStackTrace();
3940
}
40-
spacer = data[3];
4141
loadData();
4242
try{
4343
Metrics metrics = new Metrics(this);
@@ -46,14 +46,21 @@ public void onEnable(){
4646
public int getValue(){
4747
return oq.size();
4848
}
49+
public String getColumnName(){
50+
return "Total queries sent";
51+
}
4952
});
5053
Graph graph2 = metrics.createGraph("Total servers linked");
5154
graph2.addPlotter(new Metrics.Plotter(){
5255
public int getValue(){
5356
return qc.keySet().size();
5457
}
58+
public String getColumnName(){
59+
return "Total servers linked";
60+
}
5561
});
5662
metrics.start();
63+
getProxy().getPluginManager().registerListener(this, new EventListener(this));
5764
}catch(IOException e){
5865
e.printStackTrace();
5966
}
@@ -64,7 +71,7 @@ public void onDisable(){
6471
}
6572

6673
private String[] loadConfig(){
67-
String[] data = new String[4];
74+
String[] data = new String[3];
6875
try{
6976
File file = getDataFolder();
7077
if(!file.exists()){
@@ -74,7 +81,6 @@ private String[] loadConfig(){
7481
ps.println("ip=localhost");
7582
ps.println("port=9190");
7683
ps.println("heartbeat=1000");
77-
ps.println("spacer=@#@");
7884
ps.close();
7985
System.out.println("[CommandSync] New configuration file created.");
8086
}
@@ -102,10 +108,16 @@ private void saveData(){
102108
OutputStream os = new FileOutputStream(new File(getDataFolder(), "data.txt"));
103109
PrintStream ps = new PrintStream(os);
104110
for(String s : oq){
105-
ps.println("q:" + s);
111+
ps.println("oq:" + s);
112+
}
113+
for(Entry<String, List<String>> e : pq.entrySet()){
114+
String name = e.getKey();
115+
for(String command : e.getValue()){
116+
ps.println("pq:" + name + spacer + command);
117+
}
106118
}
107119
for(Entry<String, Integer> e : qc.entrySet()){
108-
ps.println("c:" + e.getKey() + spacer + String.valueOf(e.getValue()));
120+
ps.println("qc:" + e.getKey() + spacer + String.valueOf(e.getValue()));
109121
}
110122
ps.close();
111123
System.out.println("[CommandSync] All data saved.");
@@ -122,10 +134,20 @@ private void loadData(){
122134
try{
123135
String l = br.readLine();
124136
while(l != null){
125-
if(l.startsWith("q:")){
126-
oq.add(new String(l.substring(2)));
127-
}else if(l.startsWith("c:")){
128-
String[] parts = new String(l.substring(2)).split(spacer);
137+
if(l.startsWith("oq:")){
138+
oq.add(new String(l.substring(3)));
139+
}else if(l.startsWith("pq:")){
140+
String[] parts = new String(l.substring(3)).split(spacer);
141+
if(pq.containsKey(parts[0])){
142+
List<String> commands = pq.get(parts[0]);
143+
commands.add(parts[1]);
144+
pq.put(parts[0], commands);
145+
}else{
146+
List<String> commands = new ArrayList<String>(Arrays.asList(parts[1]));
147+
pq.put(parts[0], commands);
148+
}
149+
}else if(l.startsWith("qc:")){
150+
String[] parts = new String(l.substring(3)).split(spacer);
129151
qc.put(parts[0], Integer.parseInt(parts[1]));
130152
}
131153
l = br.readLine();

CommandSyncServer/src/com/fuzzoland/CommandSyncServer/ClientHandler.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import java.io.InputStreamReader;
66
import java.io.PrintWriter;
77
import java.net.Socket;
8+
import java.util.ArrayList;
9+
import java.util.Arrays;
10+
import java.util.List;
811

9-
import net.md_5.bungee.api.ProxyServer;
1012
import net.md_5.bungee.api.connection.ProxiedPlayer;
1113

1214
public class ClientHandler extends Thread{
@@ -48,20 +50,36 @@ public void run(){
4850
String command = "/" + data[2].replaceAll("\\+", " ");
4951
if(data[1].equals("single")){
5052
String name = data[3];
51-
ProxiedPlayer player = ProxyServer.getInstance().getPlayer(name);
52-
if(player != null){
53-
player.chat(command);
53+
Boolean found = false;
54+
for(ProxiedPlayer player : plugin.getProxy().getPlayers()){
55+
if(name.equals(player.getName())){
56+
player.chat(command);
57+
System.out.println("[CommandSync] Ran command " + command + " for player " + name + ".");
58+
found = true;
59+
break;
60+
}
61+
}
62+
if(!found){
63+
if(plugin.pq.containsKey(name)){
64+
List<String> commands = plugin.pq.get(name);
65+
commands.add(command);
66+
plugin.pq.put(name, commands);
67+
}else{
68+
plugin.pq.put(name, new ArrayList<String>(Arrays.asList(command)));
69+
}
70+
System.out.println("[CommandSync] Since " + name + " is offline the command " + command + " will run when they come online.");
5471
}
55-
System.out.println("[CommandSync] Ran command " + command + " for player " + name + ".");
5672
}else if(data[1].equals("all")){
57-
for(ProxiedPlayer player : ProxyServer.getInstance().getPlayers()){
73+
for(ProxiedPlayer player : plugin.getProxy().getPlayers()){
5874
player.chat(command);
5975
}
6076
System.out.println("[CommandSync] Ran command " + command + " for all online players.");
6177
}
6278
}else{
6379
if(data[1].equals("bungee")){
64-
System.out.println("[CommandSync] A request to execute a BungeeCord command was received. Unfortunately this feature is not possible yet.");
80+
String command = data[2].replaceAll("\\+", " ");
81+
plugin.getProxy().getPluginManager().dispatchCommand(plugin.getProxy().getConsole(), command);
82+
System.out.println("[CommandSync] Ran command /" + command + ".");
6583
}else{
6684
plugin.oq.add(input);
6785
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.fuzzoland.CommandSyncServer;
2+
3+
import java.util.List;
4+
5+
import net.md_5.bungee.api.connection.ProxiedPlayer;
6+
7+
public class CommandThread extends Thread{
8+
9+
private CSS plugin;
10+
private ProxiedPlayer player;
11+
private String name;
12+
private List<String> commands;
13+
14+
public CommandThread(CSS plugin, ProxiedPlayer player){
15+
this.plugin = plugin;
16+
this.player = player;
17+
this.name = player.getName();
18+
this.commands = plugin.pq.get(name);
19+
}
20+
21+
public void run(){
22+
while(true){
23+
try{
24+
for(String command : commands){
25+
player.chat(command);
26+
System.out.println("[CommandSync] Ran command " + command + " for player " + name + ".");
27+
}
28+
plugin.pq.remove(name);
29+
return;
30+
}catch(IllegalStateException e1){
31+
try{
32+
sleep(1000);
33+
}catch(InterruptedException e2){
34+
e2.printStackTrace();
35+
}
36+
}
37+
}
38+
}
39+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.fuzzoland.CommandSyncServer;
2+
3+
import net.md_5.bungee.api.connection.ProxiedPlayer;
4+
import net.md_5.bungee.api.event.ServerConnectedEvent;
5+
import net.md_5.bungee.api.plugin.Listener;
6+
import net.md_5.bungee.event.EventHandler;
7+
8+
public class EventListener implements Listener{
9+
10+
private CSS plugin;
11+
12+
public EventListener(CSS plugin){
13+
this.plugin = plugin;
14+
}
15+
16+
@EventHandler
17+
public void onServerConnected(ServerConnectedEvent event){
18+
ProxiedPlayer player = event.getPlayer();
19+
if(plugin.pq.containsKey(player.getName())){
20+
new CommandThread(plugin, player).start();
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)