Skip to content

Commit d35993c

Browse files
committed
Let proxy control when backend removes from waiting
1 parent dbf7f27 commit d35993c

5 files changed

Lines changed: 22 additions & 6 deletions

File tree

spigot/src/main/java/com/convallyria/forcepack/spigot/event/MultiVersionResourcePackStatusEvent.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ public class MultiVersionResourcePackStatusEvent extends Event {
2121
private final UUID id;
2222
private final ResourcePackStatus status;
2323
private final boolean proxy;
24+
private final boolean proxyRemove;
2425

25-
public MultiVersionResourcePackStatusEvent(@NotNull final Player who, @NotNull UUID id, @NotNull ResourcePackStatus resourcePackStatus, boolean proxy) {
26+
public MultiVersionResourcePackStatusEvent(@NotNull final Player who, @NotNull UUID id, @NotNull ResourcePackStatus resourcePackStatus, boolean proxy, boolean proxyRemove) {
2627
super(true);
2728
this.player = who;
2829
this.id = id;
2930
this.status = resourcePackStatus;
3031
this.proxy = proxy;
32+
this.proxyRemove = proxyRemove;
3133
}
3234

3335
/**
@@ -65,6 +67,14 @@ public boolean isProxy() {
6567
return proxy;
6668
}
6769

70+
/**
71+
* Gets whether the proxy has indicated the player is no longer waiting.
72+
* @return whether the proxy has requested the removal of the player from waiting
73+
*/
74+
public boolean isProxyRemove() {
75+
return proxyRemove;
76+
}
77+
6878
@NotNull
6979
@Override
7080
public HandlerList getHandlers() {

spigot/src/main/java/com/convallyria/forcepack/spigot/listener/PacketListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void onPacketReceive(PacketReceiveEvent event) {
3232
final Player player = (Player) event.getPlayer();
3333
final WrapperPlayClientResourcePackStatus.Result result = status.getResult();
3434
final UUID packId = status.getPackId();
35-
Bukkit.getPluginManager().callEvent(new MultiVersionResourcePackStatusEvent(player, packId, ResourcePackStatus.valueOf(result.name()), false));
35+
Bukkit.getPluginManager().callEvent(new MultiVersionResourcePackStatusEvent(player, packId, ResourcePackStatus.valueOf(result.name()), false, false));
3636
}
3737
}
3838
}

spigot/src/main/java/com/convallyria/forcepack/spigot/listener/ResourcePackListener.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,13 @@ public void onStatus(MultiVersionResourcePackStatusEvent event) {
6363
// Only remove from waiting if they actually loaded the resource pack, rather than any status
6464
// Declined/failed is valid and should be allowed, server owner decides whether they get kicked
6565
if (status != ResourcePackStatus.ACCEPTED && status != ResourcePackStatus.DOWNLOADED) {
66-
plugin.processWaitingResourcePack(player, id);
66+
if (event.isProxy()) {
67+
if (event.isProxyRemove()) {
68+
plugin.removeFromWaiting(player);
69+
}
70+
} else {
71+
plugin.processWaitingResourcePack(player, id);
72+
}
6773
}
6874

6975
for (String cmd : getConfig().getStringList("Server.Actions." + status.name() + ".Commands")) {

spigot/src/main/java/com/convallyria/forcepack/spigot/listener/VelocityMessageListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ public void onPluginMessageReceived(String channel, Player player, byte[] messag
3232
plugin.log("Posted event");
3333

3434
final PlayerResourcePackStatusEvent.Status status = PlayerResourcePackStatusEvent.Status.valueOf(split[1]);
35-
plugin.getScheduler().executeAsync(() -> Bukkit.getPluginManager().callEvent(new MultiVersionResourcePackStatusEvent(player, UUID.fromString(split[0]), ResourcePackStatus.valueOf(status.name()), true)));
35+
plugin.getScheduler().executeAsync(() -> Bukkit.getPluginManager().callEvent(new MultiVersionResourcePackStatusEvent(player, UUID.fromString(split[0]), ResourcePackStatus.valueOf(status.name()), true, Boolean.parseBoolean(split[2]))));
3636
}
3737
}

velocity/src/main/java/com/convallyria/forcepack/velocity/listener/ResourcePackListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,9 @@ public void onPackStatus(PlayerResourcePackStatusEvent event) {
110110
if (status != PlayerResourcePackStatusEvent.Status.ACCEPTED && status != PlayerResourcePackStatusEvent.Status.DOWNLOADED && !kick) {
111111
plugin.log("Sent player '%s' plugin message downstream to '%s' for status '%s'", player.getUsername(), currentServer.get().getServerInfo().getName(), status.name());
112112
// No longer applying, remove them from the list
113-
final String name = status == PlayerResourcePackStatusEvent.Status.SUCCESSFUL ? "SUCCESSFULLY_LOADED" : status.name();
114-
currentServer.get().sendPluginMessage(PackHandler.FORCEPACK_STATUS_IDENTIFIER, (packByServer.getUUID().toString() + ";" + name).getBytes(StandardCharsets.UTF_8));
115113
plugin.getPackHandler().processWaitingResourcePack(player, packByServer.getUUID());
114+
final String name = status == PlayerResourcePackStatusEvent.Status.SUCCESSFUL ? "SUCCESSFULLY_LOADED" : status.name();
115+
currentServer.get().sendPluginMessage(PackHandler.FORCEPACK_STATUS_IDENTIFIER, (packByServer.getUUID().toString() + ";" + name + ";" + !plugin.getPackHandler().isWaiting(player)).getBytes(StandardCharsets.UTF_8));
116116
}
117117

118118
if (status != PlayerResourcePackStatusEvent.Status.ACCEPTED) sentAccept.remove(player.getUniqueId());

0 commit comments

Comments
 (0)