package com.laytonsmith.abstraction.bukkit.events; import com.laytonsmith.abstraction.MCCommand; import com.laytonsmith.abstraction.MCCommandSender; import com.laytonsmith.abstraction.MCPlayer; import com.laytonsmith.abstraction.bukkit.BukkitMCCommand; import com.laytonsmith.abstraction.bukkit.entities.BukkitMCPlayer; import com.laytonsmith.abstraction.events.MCCommandTabCompleteEvent; import com.laytonsmith.abstraction.events.MCConsoleCommandEvent; import com.laytonsmith.abstraction.events.MCPluginIncomingMessageEvent; import com.laytonsmith.abstraction.events.MCServerPingEvent; import org.bukkit.command.Command; import org.bukkit.entity.Player; import org.bukkit.event.server.ServerCommandEvent; import org.bukkit.event.server.ServerListPingEvent; import java.net.InetAddress; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; /** * * */ public class BukkitMiscEvents { public static class BukkitMCConsoleCommandEvent implements MCConsoleCommandEvent { ServerCommandEvent sce; public BukkitMCConsoleCommandEvent(ServerCommandEvent sce){ this.sce = sce; } @Override public Object _GetObject() { return sce; } @Override public String getCommand() { return sce.getCommand(); } @Override public void setCommand(String command) { sce.setCommand(command); } } /* * Not an actual event, but making it one. */ public static class BukkitMCPluginIncomingMessageEvent implements MCPluginIncomingMessageEvent { Player player; String channel; byte[] bytes; public BukkitMCPluginIncomingMessageEvent(Player player, String channel, byte[] bytes) { this.player = player; this.channel = channel; this.bytes = bytes; } @Override public String getChannel() { return channel; } @Override public byte[] getBytes() { return bytes; } @Override public MCPlayer getPlayer() { return new BukkitMCPlayer(player); } @Override public Object _GetObject() { return null; } } public static class BukkitMCServerPingEvent implements MCServerPingEvent { private final ServerListPingEvent slp; public BukkitMCServerPingEvent(ServerListPingEvent event) { slp = event; } @Override public Object _GetObject() { return slp; } @Override public InetAddress getAddress() { return slp.getAddress(); } @Override public int getMaxPlayers() { return slp.getMaxPlayers(); } @Override public String getMOTD() { return slp.getMotd(); } @Override public int getNumPlayers() { return slp.getNumPlayers(); } @Override public void setMaxPlayers(int max) { slp.setMaxPlayers(max); } @Override public void setMOTD(String motd) { slp.setMotd(motd); } @Override public Set<MCPlayer> getPlayers() { Set<MCPlayer> players = new HashSet<>(); try { Iterator<Player> iterator = slp.iterator(); while (iterator.hasNext()) { players.add(new BukkitMCPlayer(iterator.next())); } } catch(UnsupportedOperationException ex) { // not implemented, ignore } return players; } @Override public void setPlayers(Collection<MCPlayer> players) { Set<Player> ps = new HashSet<>(); for (MCPlayer player : players) { ps.add((Player) player.getHandle()); } try { Iterator<Player> iterator = slp.iterator(); while (iterator.hasNext()) { if (!ps.contains(iterator.next())) { iterator.remove(); } } } catch(UnsupportedOperationException ex) { // not implemented, ignore } } } public static class BukkitMCCommandTabCompleteEvent implements MCCommandTabCompleteEvent { List<String> comp; MCCommandSender sender; Command cmd; String alias; String[] args; public BukkitMCCommandTabCompleteEvent(MCCommandSender sender, Command cmd, String alias, String[] args) { this.comp = null; this.sender = sender; this.cmd = cmd; this.alias = alias; this.args = args; } @Override public Object _GetObject() { return comp; } @Override public MCCommandSender getCommandSender() { return sender; } @Override public MCCommand getCommand() { return new BukkitMCCommand(cmd); } @Override public String getAlias() { return alias; } @Override public String[] getArguments() { return args; } @Override public List<String> getCompletions() { return comp; } @Override public void setCompletions(List<String> completions) { this.comp = completions; } } }