package com.bergerkiller.bukkit.common.server; import java.util.List; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import com.bergerkiller.bukkit.common.Task; import com.bergerkiller.bukkit.common.internal.CommonPlugin; import com.bergerkiller.bukkit.common.protocol.PacketType; import com.bergerkiller.bukkit.common.reflection.SafeField; import com.bergerkiller.bukkit.common.reflection.classes.EntityPlayerRef; import com.bergerkiller.bukkit.common.utils.CommonUtil; import com.bergerkiller.bukkit.common.utils.PacketUtil; public class SportBukkitServer extends CraftBukkitServer { private Task removeQueueFlusher; @Override public boolean init() { if (!super.init()) { return false; } return Bukkit.getServer().getVersion().contains("SportBukkit"); } @Override public void postInit() { super.postInit(); // Checkup that the Entity Remove queue for players is indeed missing if (SafeField.contains(EntityPlayerRef.TEMPLATE.getType(), "removeQueue")) { CommonPlugin.LOGGER.log(Level.WARNING, "Entity Removal queue of SportBukkit was added again! (update needed?)"); } } @Override public List<Integer> getEntityRemoveQueue(Player player) { return CommonPlugin.getInstance().getPlayerMeta(player).getRemoveQueue(); } @Override public void enable(CommonPlugin plugin) { removeQueueFlusher = new EntityRemoveQueueFlusher(plugin).start(1, 1); } @Override public void disable(CommonPlugin plugin) { Task.stop(removeQueueFlusher); removeQueueFlusher = null; } @Override public String getServerName() { return "SportBukkit"; } private class EntityRemoveQueueFlusher extends Task { public EntityRemoveQueueFlusher(JavaPlugin plugin) { super(plugin); } @Override public void run() { for (Player player : CommonUtil.getOnlinePlayers()) { List<Integer> idList = getEntityRemoveQueue(player); if (!idList.isEmpty()) { PacketUtil.sendPacket(player, PacketType.OUT_ENTITY_DESTROY.newInstance(idList)); idList.clear(); } } } } }