package net.diamonddominion.esaych.global; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.ArrayList; import net.diamonddominion.esaych.CustomPlugin; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; public class HubPortals { private CustomPlugin plugin; public HubPortals(CustomPlugin plugin) { this.plugin = plugin; } public void enable() { log("Enabled"); } private ArrayList<Player> queue = new ArrayList<Player>(); public void onPlayerMoveEvent(PlayerMoveEvent event) { Player player = event.getPlayer(); if (!queue.contains(player)) { Location playerLoc = player.getLocation(); if (playerLoc.getY() < 11) { if (inCreativeArea(playerLoc)) { send(player, "creative"); } if (inEventsArea(playerLoc)) { send(player, "events"); } if (inDestructionArea(playerLoc)) { send(player, "destruction"); } if (inSkyBlockArea(playerLoc)) { send(player, "skyblock"); } if (inEWPortal(playerLoc)) { send(player, "survival"); } if (inSBPortal(playerLoc)) { send(player, "survival"); } if (inCRPortal(playerLoc)) { send(player, "survival"); } } } } private void send(Player player, String server) { ByteArrayOutputStream b = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(b); try { out.writeUTF("Connect"); out.writeUTF(server); } catch (IOException e) { e.printStackTrace(); } player.sendPluginMessage(plugin, "BungeeCord", b.toByteArray()); queue.add(player); } public boolean inCreativeArea(Location l) { if (l.getWorld().getName().equals("Survival")) if (l.distance(new Location(l.getWorld(), 76.5, 0, 186.5)) < 10) return true; return false; } public boolean inEventsArea(Location l) { if (l.getWorld().getName().equals("Survival")) if (l.distance(new Location(l.getWorld(), 76.5, 0, 210.5)) < 10) return true; return false; } public boolean inDestructionArea(Location l) { if (l.getWorld().getName().equals("Survival")) if (l.distance(new Location(l.getWorld(), 52.5, 0, 186.5)) < 10) return true; return false; } public boolean inSkyBlockArea(Location l) { if (l.getWorld().getName().equals("Survival")) if (l.distance(new Location(l.getWorld(), 52.5, 0, 210.5)) < 10) return true; return false; } public boolean inEWPortal(Location l) { if (l.getWorld().getName().equals("EventWorld")) if (l.distance(new Location(l.getWorld(), -455.5, 0, -508.5)) < 10) return true; return false; } public boolean inSBPortal(Location l) { if (l.getWorld().getName().equals("SkyBlock")) if (l.distance(new Location(l.getWorld(), 38.5, 0, 110.5)) < 10) return true; return false; } public boolean inCRPortal(Location l) { if (l.getWorld().getName().equals("Build")) if (l.distance(new Location(l.getWorld(), 14.5, 0, 0.5)) < 10) return true; return false; } public boolean inAPortal(Player player) { Location l = player.getLocation(); if (l.getY() < 11) { if (inCreativeArea(l)) return true; if (inEventsArea(l)) return true; if (inDestructionArea(l)) return true; if (inSkyBlockArea(l)) return true; if (inEWPortal(l)) return true; if (inSBPortal(l)) return true; if (inCRPortal(l)) return true; } return false; } public void onPlayerFallEvent(EntityDamageEvent event) { if (event.getCause() == DamageCause.FALL && event.getEntity() instanceof Player) { Player player = (Player) event.getEntity(); if (inAPortal(player)) { event.setCancelled(true); } } } public void onJoinEvent(PlayerJoinEvent event) { Player player = event.getPlayer(); if (inAPortal(player)) { player.setFallDistance(0); player.teleport(player.getLocation().clone().add(0,20,0)); plugin.getServer().dispatchCommand(player, "worldspawn"); } if (queue.contains(player)) { queue.remove(player); } } public void log(String info) { plugin.getLogger().info("<HubPortals> " + info); } }