74 lines
2.3 KiB
Java
74 lines
2.3 KiB
Java
/*
|
|
* Copyright (C) 2025 Minecon724
|
|
* Tweaks724 is licensed under the GNU General Public License. See the LICENSE.md file
|
|
* in the project root for the full license text.
|
|
*/
|
|
|
|
package eu.m724.tweaks.alert;
|
|
|
|
import com.comphenix.protocol.PacketType;
|
|
import com.comphenix.protocol.ProtocolLibrary;
|
|
import com.comphenix.protocol.events.PacketContainer;
|
|
import eu.m724.tweaks.TweaksModule;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class AlertModule extends TweaksModule {
|
|
private BukkitTask notifyTask;
|
|
static Alert current;
|
|
static Map<Player, Integer> pages = new HashMap<>();
|
|
|
|
@Override
|
|
protected void onInit() {
|
|
registerCommand("emergencyalert", new AlertCommand(this));
|
|
|
|
onPacketReceive(PacketType.Play.Client.ENCHANT_ITEM, (event) -> {
|
|
if (current == null) return;
|
|
if (!current.isOpen(event.getPlayer())) return;
|
|
|
|
PacketContainer packet = event.getPacket();
|
|
|
|
int windowId, buttonId;
|
|
windowId = packet.getIntegers().read(0);
|
|
buttonId = packet.getIntegers().read(1);
|
|
|
|
var page = pages.getOrDefault(event.getPlayer(),1);
|
|
|
|
if (buttonId == 1) { // prev page
|
|
page--;
|
|
} else if (buttonId == 2) { // nextc page
|
|
page++;
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
pages.put(event.getPlayer(), page);
|
|
var npacket = new PacketContainer(PacketType.Play.Server.WINDOW_DATA);
|
|
npacket.getIntegers().write(0, windowId);
|
|
npacket.getIntegers().write(1, 0);
|
|
npacket.getIntegers().write(2, page);
|
|
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), npacket);
|
|
});
|
|
}
|
|
|
|
public Alert start(String... content) {
|
|
stop();
|
|
current = new Alert(content);
|
|
notifyTask = new AlertRunnable(current, v -> this.stop()).runTaskTimer(getPlugin(), 0, 10);
|
|
return current;
|
|
}
|
|
|
|
public void stop() {
|
|
if (current == null) return;
|
|
for (Player player : getPlugin().getServer().getOnlinePlayers()) {
|
|
if (current.isOpen(player))
|
|
player.closeInventory();
|
|
}
|
|
pages.clear();
|
|
notifyTask.cancel();
|
|
current = null;
|
|
}
|
|
}
|