Skip to content

Commit 00765d5

Browse files
Added missing invite logic
1 parent 5623829 commit 00765d5

File tree

5 files changed

+147
-21
lines changed

5 files changed

+147
-21
lines changed

src/main/java/me/illusion/skyblockcore/bungee/SkyblockBungeePlugin.java

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ private void setupPackets() {
8383
packetManager.subscribe(PacketRegisterLoadedIsland.class, new LoadIslandPacketHandler(this));
8484
packetManager.subscribe(PacketPong.class, new PongPacketHandler(this));
8585
packetManager.subscribe(PacketUnregisterServer.class, new UnregisterPacketHandler(this));
86+
packetManager.subscribe(PacketInvitePlayer.class, new InvitePacketHandler(this));
87+
packetManager.subscribe(PacketRespondInvite.class, new InviteResponseHandler(this));
8688

8789
System.out.println("[SkyblockCore] Packet handlers registered!");
8890
packetManager.send(new PacketPing());

src/main/java/me/illusion/skyblockcore/bungee/data/PlayerFinder.java

+26
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.google.common.base.Enums;
44
import com.google.common.base.Optional;
5+
import com.google.common.cache.Cache;
6+
import com.google.common.cache.CacheBuilder;
57
import me.illusion.skyblockcore.bungee.SkyblockBungeePlugin;
68
import me.illusion.skyblockcore.bungee.comparison.AllocationType;
79
import me.illusion.skyblockcore.shared.data.IslandData;
@@ -32,6 +34,8 @@ public class PlayerFinder {
3234
private final Comparator<ServerInfo> comparator;
3335

3436
private final SkyblockBungeePlugin main;
37+
private final Cache<UUID, String> authedJoins = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build();
38+
3539

3640
public PlayerFinder(SkyblockBungeePlugin main) {
3741
this.main = main;
@@ -227,4 +231,26 @@ public void registerServer(String name, byte currentCount, byte maxCapacity) {
227231
public Set<String> getSkyblockServerNames() {
228232
return skyblockServerNames;
229233
}
234+
235+
public void authPlayer(UUID uuid, String server) {
236+
System.out.println("Authing player " + uuid + " on server " + server);
237+
238+
if (!skyblockServerNames.contains(server))
239+
return;
240+
241+
System.out.println("Player " + uuid + " is now authed on server " + server);
242+
authedJoins.put(uuid, server);
243+
}
244+
245+
public void unauthPlayer(UUID uuid) {
246+
authedJoins.invalidate(uuid);
247+
}
248+
249+
public String getAuthServer(UUID uuid) {
250+
return authedJoins.getIfPresent(uuid);
251+
}
252+
253+
public boolean isAuth(UUID uuid) {
254+
return getAuthServer(uuid) != null;
255+
}
230256
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.illusion.skyblockcore.bungee.handler;
2+
3+
4+
import me.illusion.skyblockcore.bungee.SkyblockBungeePlugin;
5+
import me.illusion.skyblockcore.shared.packet.PacketHandler;
6+
import me.illusion.skyblockcore.shared.packet.impl.instancetoproxy.PacketInvitePlayer;
7+
import me.illusion.skyblockcore.shared.packet.impl.proxytoinstance.PacketIndicateInvite;
8+
9+
public class InvitePacketHandler implements PacketHandler<PacketInvitePlayer> {
10+
11+
private final SkyblockBungeePlugin main;
12+
13+
public InvitePacketHandler(SkyblockBungeePlugin main) {
14+
this.main = main;
15+
}
16+
17+
@Override
18+
public void onReceive(PacketInvitePlayer packet) {
19+
PacketIndicateInvite invite = new PacketIndicateInvite(packet.getInvite());
20+
21+
main.getPacketManager().send(invite);
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package me.illusion.skyblockcore.bungee.handler;
2+
3+
4+
import me.illusion.skyblockcore.bungee.SkyblockBungeePlugin;
5+
import me.illusion.skyblockcore.shared.packet.PacketHandler;
6+
import me.illusion.skyblockcore.shared.packet.impl.instancetoproxy.PacketRespondInvite;
7+
import me.illusion.skyblockcore.shared.packet.impl.proxytoinstance.PacketInviteResponse;
8+
9+
public class InviteResponseHandler implements PacketHandler<PacketRespondInvite> {
10+
11+
private final SkyblockBungeePlugin main;
12+
13+
public InviteResponseHandler(SkyblockBungeePlugin main) {
14+
this.main = main;
15+
}
16+
17+
@Override
18+
public void onReceive(PacketRespondInvite packet) {
19+
PacketInviteResponse response = new PacketInviteResponse(packet.getInvite(), packet.getResponse());
20+
21+
main.getPacketManager().send(response);
22+
}
23+
}

src/main/java/me/illusion/skyblockcore/bungee/listener/ServerMovementListener.java

+73-21
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
import me.illusion.skyblockcore.bungee.data.PlayerFinder;
55
import me.illusion.skyblockcore.shared.data.IslandData;
66
import me.illusion.skyblockcore.shared.packet.impl.proxytoinstance.PacketRequestIslandUnload;
7+
import net.md_5.bungee.api.ChatColor;
8+
import net.md_5.bungee.api.chat.TextComponent;
79
import net.md_5.bungee.api.config.ServerInfo;
810
import net.md_5.bungee.api.connection.ProxiedPlayer;
11+
import net.md_5.bungee.api.connection.Server;
912
import net.md_5.bungee.api.event.PlayerDisconnectEvent;
1013
import net.md_5.bungee.api.event.ServerConnectEvent;
1114
import net.md_5.bungee.api.event.ServerSwitchEvent;
@@ -26,9 +29,15 @@ public ServerMovementListener(SkyblockBungeePlugin main) {
2629
@EventHandler
2730
public void onServerMove(PlayerDisconnectEvent event) {
2831
Set<String> ids = main.getPlayerFinder().getSkyblockServerNames();
29-
ServerInfo server = event.getPlayer().getServer().getInfo();
32+
Server server = event.getPlayer().getServer();
3033

31-
String serverId = server.getName();
34+
if (server == null) {
35+
return;
36+
}
37+
38+
ServerInfo info = event.getPlayer().getServer().getInfo();
39+
40+
String serverId = info.getName();
3241

3342
if (!ids.contains(serverId)) {
3443
return;
@@ -52,24 +61,6 @@ private void unload(UUID playerId) {
5261
});
5362
}
5463

55-
@EventHandler
56-
private void onConnect(ServerConnectEvent event) {
57-
ProxiedPlayer player = event.getPlayer();
58-
PlayerFinder playerFinder = main.getPlayerFinder();
59-
60-
playerFinder.requestIslandServer(player.getUniqueId()).whenComplete((servername, thr) -> {
61-
if (servername == null) // Assign available server if no members are online
62-
servername = playerFinder.getAvailableServer();
63-
64-
if (servername == null) // If no space found
65-
return;
66-
67-
ServerInfo targetServer = main.getProxy().getServerInfo(servername);
68-
69-
player.connect(targetServer);
70-
});
71-
}
72-
7364
@EventHandler
7465
public void onSwitch(ServerSwitchEvent event) {
7566
Set<String> ids = main.getPlayerFinder().getSkyblockServerNames();
@@ -88,7 +79,68 @@ public void onSwitch(ServerSwitchEvent event) {
8879
if (!ids.contains(oldServerId))
8980
return;
9081

82+
9183
UUID playerId = event.getPlayer().getUniqueId();
9284
unload(playerId);
9385
}
94-
}
86+
87+
@EventHandler
88+
public void onConnect(ServerConnectEvent event) {
89+
Set<String> ids = main.getPlayerFinder().getSkyblockServerNames();
90+
ServerInfo server = event.getTarget();
91+
92+
String serverId = server.getName();
93+
94+
if (!ids.contains(serverId))
95+
return;
96+
97+
auth(event);
98+
}
99+
100+
private void auth(ServerConnectEvent event) {
101+
PlayerFinder playerFinder = main.getPlayerFinder();
102+
ProxiedPlayer player = event.getPlayer();
103+
UUID playerId = player.getUniqueId();
104+
String serverId = event.getTarget().getName();
105+
106+
if (!playerFinder.isAuth(playerId)) {
107+
System.out.println("Player " + player.getName() + " is not authorized to enter Islands");
108+
event.setCancelled(true);
109+
auth(player);
110+
return;
111+
}
112+
113+
String authId = playerFinder.getAuthServer(playerId);
114+
115+
if (!authId.equals(serverId)) {
116+
System.out.println("[Housing] " + player.getName() + " is not on the correct server for their auth. Expected " + authId + " but got " + serverId);
117+
event.setCancelled(true);
118+
auth(player);
119+
}
120+
121+
}
122+
123+
private void auth(ProxiedPlayer player) {
124+
PlayerFinder playerFinder = main.getPlayerFinder();
125+
126+
System.out.println("re-Authing " + player.getName());
127+
128+
playerFinder.requestIslandServer(player.getUniqueId()).whenComplete((servername, thr) -> {
129+
System.out.println("Requested Island server: " + servername);
130+
131+
if (servername == null) {// If no space found
132+
player.sendMessage(TextComponent.fromLegacyText(ChatColor.RED + "There are no available housing servers."));
133+
return;
134+
}
135+
136+
if (servername.equalsIgnoreCase("NOT_AUTH")) {
137+
player.sendMessage(TextComponent.fromLegacyText(ChatColor.RED + "You are not authorized to enter housing."));
138+
return;
139+
}
140+
141+
playerFinder.authPlayer(player.getUniqueId(), servername);
142+
ServerInfo targetServer = main.getProxy().getServerInfo(servername);
143+
player.connect(targetServer);
144+
});
145+
}
146+
}

0 commit comments

Comments
 (0)