SteamWar/BauSystem2.0
Archiviert
12
0

Hotfix AntiCursorReCentering

Dieser Commit ist enthalten in:
yoyosource 2023-10-24 18:12:03 +02:00 committet von D4rkr34lm
Ursprung 41ed83dfe0
Commit d1ff80b9dc

Datei anzeigen

@ -21,16 +21,44 @@ package de.steamwar.bausystem.features.world;
import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.api.Enable;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Linked
public class AntiCursorReCentering implements Enable {
private final Set<Player> CLOSE_PACKETS = new HashSet<>();
private final Set<Player> CLOSE_NOW = new HashSet<>();
@Override
public void enable() {
// Fix GUI Closing causing a recentering of the Cursor
Class<?> clazz = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutCloseWindow");
TinyProtocol.instance.addFilter(clazz, (player, object) -> null);
Class<?> closeWindow = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutCloseWindow");
TinyProtocol.instance.addFilter(closeWindow, (player, object) -> {
if (CLOSE_NOW.remove(player)) {
return object;
}
CLOSE_PACKETS.add(player);
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
if (CLOSE_PACKETS.remove(player)) {
CLOSE_NOW.add(player);
TinyProtocol.instance.sendPacket(player, object);
}
}, 0);
return null;
});
Class<?> openWindow = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutOpenWindow");
TinyProtocol.instance.addFilter(openWindow, (player, object) -> {
CLOSE_PACKETS.remove(player);
return object;
});
}
}