/
CachedPlayer.java
153 lines (136 loc) · 4.76 KB
/
CachedPlayer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package net.ME1312.SubServers.Sync.Server;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Client.Common.Network.API.RemotePlayer;
import net.ME1312.SubServers.Client.Common.Network.API.Server;
import net.ME1312.SubServers.Sync.SubAPI;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.chat.ComponentSerializer;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
/**
* Cached RemotePlayer Data Class
*/
public class CachedPlayer extends RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compatibility.RemotePlayer {
/**
* Convert a Local Player to a Cached Remote Player
*
* @param player Local Player
* @return Raw representation of the Remote Player
*/
public static ObjectMap<String> translate(ProxiedPlayer player) {
ObjectMap<String> raw = new ObjectMap<String>();
raw = new ObjectMap<String>();
raw.set("name", player.getName());
raw.set("id", player.getUniqueId());
raw.set("address", player.getAddress().getAddress().getHostAddress() + ':' + player.getAddress().getPort());
if (player.getServer() != null) raw.set("server", player.getServer().getInfo().getName());
if (SubAPI.getInstance().getName() != null) raw.set("proxy", SubAPI.getInstance().getName());
return raw;
}
/**
* Convert a Local Player to a Cached Remote Player
*
* @param player Local Player
*/
public CachedPlayer(ProxiedPlayer player) {
this(translate(player));
}
/**
* Cache a Remote Player
*
* @param player Remote Player
*/
public CachedPlayer(RemotePlayer player) {
this(raw(player));
}
/**
* Create a Cached Remote Player
*
* @param raw Raw representation of the Remote Player
*/
public CachedPlayer(ObjectMap<String> raw) {
super(raw);
}
@Override
public ProxiedPlayer get() {
return ProxyServer.getInstance().getPlayer(getUniqueId());
}
@Override
public ServerInfo getServer() {
String name = getServerName();
return (name == null)? null : ProxyServer.getInstance().getServerInfo(name);
}
// These overrides prevent sending unnecessary packets
@Override
public void sendMessage(String[] messages, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
local.sendMessages(messages);
response.run(0);
} else {
super.sendMessage(messages, response);
}
}
@Override
public void sendMessage(BaseComponent[] messages, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
local.sendMessage(messages);
response.run(0);
} else {
super.sendRawMessage(new String[]{ComponentSerializer.toString(messages)}, response);
}
}
@Override
public void sendRawMessage(String[] messages, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
LinkedList<BaseComponent> components = new LinkedList<BaseComponent>();
for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message)));
local.sendMessage(components.toArray(new BaseComponent[0]));
response.run(0);
} else {
super.sendRawMessage(messages, response);
}
}
@Override
public void transfer(String server, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
ServerImpl info = SubAPI.getInstance().getInternals().servers.get(server.toLowerCase());
if (info != null) {
local.connect(info);
response.run(0);
} else response.run(1);
} else {
super.transfer(server, response);
}
}
@Override
public void transfer(ServerInfo server, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
local.connect(server);
response.run(0);
} else {
super.transfer(server.getName(), response);
}
}
@Override
public void disconnect(String message, Callback<Integer> response) {
ProxiedPlayer local = get();
if (local != null) {
if (message != null) {
local.disconnect(message);
} else local.disconnect();
response.run(0);
} else {
super.disconnect(message, response);
}
}
}