package org.arkham.cs.cosmetics; import java.util.HashMap; import java.util.UUID; import org.arkham.cs.CosmeticSuite; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; public class PortalLink implements Listener { private Portal portal_1, portal_2; private Player player; private static HashMap<UUID, PortalLink> links = new HashMap<>(); public PortalLink(Portal p1, Portal p2, Player player) { if(!checkPerms(player)){ player.sendMessage(CosmeticSuite.PREFIX + "You cannot place a portal here."); return; } this.portal_1 = p1; this.portal_2 = p2; this.player = player; links.put(player.getUniqueId(), this); spark(); player.sendMessage(CosmeticSuite.PREFIX + "You have now linked 2 portal."); Bukkit.getPluginManager().registerEvents(this, CosmeticSuite.getInstance()); } public void spark(){ portal_1.spark(false); portal_2.spark(true); } /** * @return the portal_1 */ public Portal getPortal_1() { return portal_1; } /** * @param portal_1 set the portal_1 */ public void setPortal_1(Portal portal_1) { this.portal_1 = portal_1; } /** * @return the portal_2 */ public Portal getPortal_2() { return portal_2; } /** * @param portal_2 set the portal_2 */ public void setPortal_2(Portal portal_2) { this.portal_2 = portal_2; } /** * @return the player */ public Player getPlayer() { return player; } public boolean checkPerms(Player player) { WorldGuardPlugin api = (WorldGuardPlugin) Bukkit.getPluginManager().getPlugin("WorldGuard"); ApplicableRegionSet regions = api.getRegionManager(player.getLocation().getWorld()).getApplicableRegions(player.getLocation()); LocalPlayer lPlayer = api.wrapPlayer(player); if (regions.size() == 0) { return true; } return regions.canBuild(lPlayer); } @EventHandler public void onMove(PlayerMoveEvent event){ if(event.getTo().getBlockX() == event.getFrom().getBlockX() && event.getTo().getBlockZ() == event.getFrom().getBlockZ()){ return; } Player player = event.getPlayer(); Location loc = player.getLocation(); Block block = loc.getBlock(); if(block.getType() != Material.STATIONARY_WATER){ return; } if(block.hasMetadata("portal")){ player.teleport(portal_2.getLocation().getBlock().getRelative(BlockFace.NORTH).getLocation()); return; } if(block.hasMetadata("portal-2")){ player.teleport(portal_1.getLocation().getBlock().getRelative(BlockFace.NORTH).getLocation()); } } }