Huge refactoring
Splits Portal into Portal and PortalHandler Adds EconomyHelper to make messaging of economy string easier Adds a lot of missing comments Adds vehicle teleportation again, but it needs a lot of changes to work properly
This commit is contained in:
		@@ -9,27 +9,6 @@ import org.bukkit.block.data.BlockData;
 | 
				
			|||||||
import org.bukkit.block.data.type.Sign;
 | 
					import org.bukkit.block.data.type.Sign;
 | 
				
			||||||
import org.bukkit.block.data.type.WallSign;
 | 
					import org.bukkit.block.data.type.WallSign;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Shaun (sturmeh)
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Dinnerbone
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This class represents a block location
 | 
					 * This class represents a block location
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,25 +9,6 @@ import org.bukkit.plugin.RegisteredServiceProvider;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
  stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
  Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
  Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
  <p>
 | 
					 | 
				
			||||||
  This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
  it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
  the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
  (at your option) any later version.
 | 
					 | 
				
			||||||
  <p>
 | 
					 | 
				
			||||||
  This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
  GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
  <p>
 | 
					 | 
				
			||||||
  You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This handler handles economy actions such as payment for using a gate
 | 
					 * This handler handles economy actions such as payment for using a gate
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,27 +15,6 @@ import java.util.Map;
 | 
				
			|||||||
import java.util.Scanner;
 | 
					import java.util.Scanner;
 | 
				
			||||||
import java.util.logging.Level;
 | 
					import java.util.logging.Level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Shaun (sturmeh)
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Dinnerbone
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class Gate {
 | 
					public class Gate {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Character ANYTHING = ' ';
 | 
					    private static final Character ANYTHING = ' ';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,25 +18,6 @@ import java.util.List;
 | 
				
			|||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This class is responsible for loading all strings which are translated into several languages
 | 
					 * This class is responsible for loading all strings which are translated into several languages
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										865
									
								
								src/main/java/net/knarcraft/stargate/PortalHandler.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										865
									
								
								src/main/java/net/knarcraft/stargate/PortalHandler.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,865 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.stargate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.event.StargateCreateEvent;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.utility.EconomyHelper;
 | 
				
			||||||
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
 | 
					import org.bukkit.Location;
 | 
				
			||||||
 | 
					import org.bukkit.OfflinePlayer;
 | 
				
			||||||
 | 
					import org.bukkit.World;
 | 
				
			||||||
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
 | 
					import org.bukkit.block.BlockFace;
 | 
				
			||||||
 | 
					import org.bukkit.block.Sign;
 | 
				
			||||||
 | 
					import org.bukkit.block.data.Directional;
 | 
				
			||||||
 | 
					import org.bukkit.block.data.type.WallSign;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.event.block.SignChangeEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.BufferedWriter;
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileWriter;
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					import java.util.Scanner;
 | 
				
			||||||
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					import java.util.logging.Level;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class PortalHandler {
 | 
				
			||||||
 | 
					    // Static variables used to store portal lists
 | 
				
			||||||
 | 
					    private static final Map<BlockLocation, Portal> lookupBlocks = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final Map<BlockLocation, Portal> lookupEntrances = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final Map<BlockLocation, Portal> lookupControls = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final List<Portal> allPortals = new ArrayList<>();
 | 
				
			||||||
 | 
					    private static final HashMap<String, List<String>> allPortalsNet = new HashMap<>();
 | 
				
			||||||
 | 
					    private static final HashMap<String, HashMap<String, Portal>> lookupNamesNet = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // A list of Bungee gates
 | 
				
			||||||
 | 
					    private static final Map<String, Portal> bungeePortals = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static List<String> getNetwork(String network) {
 | 
				
			||||||
 | 
					        return allPortalsNet.get(network.toLowerCase());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets all destinations in the network viewable by the given player
 | 
				
			||||||
 | 
					     * @param player <p>The player who wants to see destinations</p>
 | 
				
			||||||
 | 
					     * @param network <p>The network to get destinations from</p>
 | 
				
			||||||
 | 
					     * @return <p>All destinations the player can go to</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static ArrayList<String> getDestinations(Player player, String network) {
 | 
				
			||||||
 | 
					        ArrayList<String> destinations = new ArrayList<>();
 | 
				
			||||||
 | 
					        for (String dest : allPortalsNet.get(network.toLowerCase())) {
 | 
				
			||||||
 | 
					            Portal portal = getByName(dest, network);
 | 
				
			||||||
 | 
					            if (portal == null) continue;
 | 
				
			||||||
 | 
					            // Check if dest is a random gate
 | 
				
			||||||
 | 
					            if (portal.isRandom()) continue;
 | 
				
			||||||
 | 
					            // Check if dest is always open (Don't show if so)
 | 
				
			||||||
 | 
					            if (portal.isAlwaysOn() && !portal.isShown()) continue;
 | 
				
			||||||
 | 
					            // Check if dest is this portal
 | 
				
			||||||
 | 
					            if (dest.equalsIgnoreCase(portal.getName())) continue;
 | 
				
			||||||
 | 
					            // Check if dest is a fixed gate not pointing to this gate
 | 
				
			||||||
 | 
					            if (portal.isFixed() && !portal.getDestinationName().equalsIgnoreCase(portal.getName())) continue;
 | 
				
			||||||
 | 
					            // Allow random use by non-players (Minecarts)
 | 
				
			||||||
 | 
					            if (player == null) {
 | 
				
			||||||
 | 
					                destinations.add(portal.getName());
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // Check if this player can access the dest world
 | 
				
			||||||
 | 
					            if (!Stargate.canAccessWorld(player, portal.getWorld().getName())) continue;
 | 
				
			||||||
 | 
					            // Visible to this player.
 | 
				
			||||||
 | 
					            if (Stargate.canSee(player, portal)) {
 | 
				
			||||||
 | 
					                destinations.add(portal.getName());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return destinations;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Un-registers the given portal
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to un-register</p>
 | 
				
			||||||
 | 
					     * @param removeAll <p>Whether to remove the portal from the list of all portals</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void unregister(Portal portal, boolean removeAll) {
 | 
				
			||||||
 | 
					        Stargate.debug("Unregister", "Unregistering gate " + portal.getName());
 | 
				
			||||||
 | 
					        portal.close(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (BlockLocation block : portal.getFrame()) {
 | 
				
			||||||
 | 
					            lookupBlocks.remove(block);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // Include the sign and button
 | 
				
			||||||
 | 
					        lookupBlocks.remove(portal.getId());
 | 
				
			||||||
 | 
					        lookupControls.remove(portal.getId());
 | 
				
			||||||
 | 
					        if (portal.getButton() != null) {
 | 
				
			||||||
 | 
					            lookupBlocks.remove(portal.getButton());
 | 
				
			||||||
 | 
					            lookupControls.remove(portal.getButton());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (BlockLocation entrance : portal.getEntrances()) {
 | 
				
			||||||
 | 
					            lookupEntrances.remove(entrance);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (removeAll) {
 | 
				
			||||||
 | 
					            allPortals.remove(portal);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (portal.isBungee()) {
 | 
				
			||||||
 | 
					            bungeePortals.remove(portal.getName().toLowerCase());
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            lookupNamesNet.get(portal.getNetwork().toLowerCase()).remove(portal.getName().toLowerCase());
 | 
				
			||||||
 | 
					            allPortalsNet.get(portal.getNetwork().toLowerCase()).remove(portal.getName().toLowerCase());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (String originName : allPortalsNet.get(portal.getNetwork().toLowerCase())) {
 | 
				
			||||||
 | 
					                Portal origin = getByName(originName, portal.getNetwork());
 | 
				
			||||||
 | 
					                if (origin == null) continue;
 | 
				
			||||||
 | 
					                if (!origin.getDestinationName().equalsIgnoreCase(portal.getName())) continue;
 | 
				
			||||||
 | 
					                if (!origin.isVerified()) continue;
 | 
				
			||||||
 | 
					                if (origin.isFixed()) origin.drawSign();
 | 
				
			||||||
 | 
					                if (origin.isAlwaysOn()) origin.close(true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (portal.getId().getBlock().getBlockData() instanceof WallSign) {
 | 
				
			||||||
 | 
					            Sign sign = (Sign) portal.getId().getBlock().getState();
 | 
				
			||||||
 | 
					            sign.setLine(0, portal.getName());
 | 
				
			||||||
 | 
					            sign.setLine(1, "");
 | 
				
			||||||
 | 
					            sign.setLine(2, "");
 | 
				
			||||||
 | 
					            sign.setLine(3, "");
 | 
				
			||||||
 | 
					            sign.update();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        saveAllGates(portal.getWorld());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Registers a portal
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to register</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    static void register(Portal portal) {
 | 
				
			||||||
 | 
					        portal.setFixed(portal.getDestinationName().length() > 0 || portal.isRandom() || portal.isBungee());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Bungee gates are stored in their own list
 | 
				
			||||||
 | 
					        if (portal.isBungee()) {
 | 
				
			||||||
 | 
					            bungeePortals.put(portal.getName().toLowerCase(), portal);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            // Check if network exists in our network list
 | 
				
			||||||
 | 
					            if (!lookupNamesNet.containsKey(portal.getNetwork().toLowerCase())) {
 | 
				
			||||||
 | 
					                Stargate.debug("register", "Network " + portal.getNetwork() + " not in lookupNamesNet, adding");
 | 
				
			||||||
 | 
					                lookupNamesNet.put(portal.getNetwork().toLowerCase(), new HashMap<>());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            lookupNamesNet.get(portal.getNetwork().toLowerCase()).put(portal.getName().toLowerCase(), portal);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check if this network exists
 | 
				
			||||||
 | 
					            if (!allPortalsNet.containsKey(portal.getNetwork().toLowerCase())) {
 | 
				
			||||||
 | 
					                Stargate.debug("register", "Network " + portal.getNetwork() + " not in allPortalsNet, adding");
 | 
				
			||||||
 | 
					                allPortalsNet.put(portal.getNetwork().toLowerCase(), new ArrayList<>());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            allPortalsNet.get(portal.getNetwork().toLowerCase()).add(portal.getName().toLowerCase());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (BlockLocation block : portal.getFrame()) {
 | 
				
			||||||
 | 
					            lookupBlocks.put(block, portal);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // Include the sign and button
 | 
				
			||||||
 | 
					        lookupBlocks.put(portal.getId(), portal);
 | 
				
			||||||
 | 
					        lookupControls.put(portal.getId(), portal);
 | 
				
			||||||
 | 
					        if (portal.getButton() != null) {
 | 
				
			||||||
 | 
					            lookupBlocks.put(portal.getButton(), portal);
 | 
				
			||||||
 | 
					            lookupControls.put(portal.getButton(), portal);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (BlockLocation entrance : portal.getEntrances()) {
 | 
				
			||||||
 | 
					            lookupEntrances.put(entrance, portal);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        allPortals.add(portal);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Creates a new portal
 | 
				
			||||||
 | 
					     * @param event <p>The sign change event which initialized the creation</p>
 | 
				
			||||||
 | 
					     * @param player <p>The player who's creating the portal</p>
 | 
				
			||||||
 | 
					     * @return <p>The created portal</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal createPortal(SignChangeEvent event, Player player) {
 | 
				
			||||||
 | 
					        BlockLocation id = new BlockLocation(event.getBlock());
 | 
				
			||||||
 | 
					        Block idParent = id.getParent();
 | 
				
			||||||
 | 
					        if (idParent == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (Gate.getGatesByControlBlock(idParent).length == 0) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (getByBlock(idParent) != null) {
 | 
				
			||||||
 | 
					            Stargate.debug("createPortal", "idParent belongs to existing gate");
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BlockLocation parent = new BlockLocation(player.getWorld(), idParent.getX(), idParent.getY(), idParent.getZ());
 | 
				
			||||||
 | 
					        BlockLocation topleft = null;
 | 
				
			||||||
 | 
					        String name = filterName(event.getLine(0));
 | 
				
			||||||
 | 
					        String destName = filterName(event.getLine(1));
 | 
				
			||||||
 | 
					        String network = filterName(event.getLine(2));
 | 
				
			||||||
 | 
					        String options = filterName(event.getLine(3)).toLowerCase();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        boolean hidden = (options.indexOf('h') != -1);
 | 
				
			||||||
 | 
					        boolean alwaysOn = (options.indexOf('a') != -1);
 | 
				
			||||||
 | 
					        boolean priv = (options.indexOf('p') != -1);
 | 
				
			||||||
 | 
					        boolean free = (options.indexOf('f') != -1);
 | 
				
			||||||
 | 
					        boolean backwards = (options.indexOf('b') != -1);
 | 
				
			||||||
 | 
					        boolean show = (options.indexOf('s') != -1);
 | 
				
			||||||
 | 
					        boolean noNetwork = (options.indexOf('n') != -1);
 | 
				
			||||||
 | 
					        boolean random = (options.indexOf('r') != -1);
 | 
				
			||||||
 | 
					        boolean bungee = (options.indexOf('u') != -1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check permissions for options.
 | 
				
			||||||
 | 
					        if (hidden && !Stargate.canOption(player, "hidden")) {
 | 
				
			||||||
 | 
					            hidden = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (alwaysOn && !Stargate.canOption(player, "alwayson")) {
 | 
				
			||||||
 | 
					            alwaysOn = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (priv && !Stargate.canOption(player, "private")) {
 | 
				
			||||||
 | 
					            priv = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (free && !Stargate.canOption(player, "free")) {
 | 
				
			||||||
 | 
					            free = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (backwards && !Stargate.canOption(player, "backwards")) {
 | 
				
			||||||
 | 
					            backwards = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (show && !Stargate.canOption(player, "show")) {
 | 
				
			||||||
 | 
					            show = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (noNetwork && !Stargate.canOption(player, "nonetwork")) {
 | 
				
			||||||
 | 
					            noNetwork = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (random && !Stargate.canOption(player, "random")) {
 | 
				
			||||||
 | 
					            random = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Can not create a non-fixed always-on gate.
 | 
				
			||||||
 | 
					        if (alwaysOn && destName.length() == 0) {
 | 
				
			||||||
 | 
					            alwaysOn = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Show isn't useful if A is false
 | 
				
			||||||
 | 
					        if (show && !alwaysOn) {
 | 
				
			||||||
 | 
					            show = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Random gates are always on and can't be shown
 | 
				
			||||||
 | 
					        if (random) {
 | 
				
			||||||
 | 
					            alwaysOn = true;
 | 
				
			||||||
 | 
					            show = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Bungee gates are always on and don't support Random
 | 
				
			||||||
 | 
					        if (bungee) {
 | 
				
			||||||
 | 
					            alwaysOn = true;
 | 
				
			||||||
 | 
					            random = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Moved the layout check so as to avoid invalid messages when not making a gate
 | 
				
			||||||
 | 
					        int modX = 0;
 | 
				
			||||||
 | 
					        int modZ = 0;
 | 
				
			||||||
 | 
					        float rotX = 0f;
 | 
				
			||||||
 | 
					        BlockFace buttonfacing = BlockFace.DOWN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (idParent.getX() > id.getBlock().getX()) {
 | 
				
			||||||
 | 
					            modZ -= 1;
 | 
				
			||||||
 | 
					            rotX = 90f;
 | 
				
			||||||
 | 
					            buttonfacing = BlockFace.WEST;
 | 
				
			||||||
 | 
					        } else if (idParent.getX() < id.getBlock().getX()) {
 | 
				
			||||||
 | 
					            modZ += 1;
 | 
				
			||||||
 | 
					            rotX = 270f;
 | 
				
			||||||
 | 
					            buttonfacing = BlockFace.EAST;
 | 
				
			||||||
 | 
					        } else if (idParent.getZ() > id.getBlock().getZ()) {
 | 
				
			||||||
 | 
					            modX += 1;
 | 
				
			||||||
 | 
					            rotX = 180f;
 | 
				
			||||||
 | 
					            buttonfacing = BlockFace.NORTH;
 | 
				
			||||||
 | 
					        } else if (idParent.getZ() < id.getBlock().getZ()) {
 | 
				
			||||||
 | 
					            modX -= 1;
 | 
				
			||||||
 | 
					            rotX = 0f;
 | 
				
			||||||
 | 
					            buttonfacing = BlockFace.SOUTH;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Gate[] possibleGates = Gate.getGatesByControlBlock(idParent);
 | 
				
			||||||
 | 
					        Gate gate = null;
 | 
				
			||||||
 | 
					        RelativeBlockVector buttonVector = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (Gate possibility : possibleGates) {
 | 
				
			||||||
 | 
					            if (gate != null || buttonVector != null) {
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            RelativeBlockVector[] vectors = possibility.getControls();
 | 
				
			||||||
 | 
					            RelativeBlockVector otherControl = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (RelativeBlockVector vector : vectors) {
 | 
				
			||||||
 | 
					                BlockLocation tl = parent.modRelative(-vector.getRight(), -vector.getDepth(), -vector.getDistance(), modX, 1, modZ);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (gate == null) {
 | 
				
			||||||
 | 
					                    if (possibility.matches(tl, modX, modZ, true)) {
 | 
				
			||||||
 | 
					                        gate = possibility;
 | 
				
			||||||
 | 
					                        topleft = tl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (otherControl != null) {
 | 
				
			||||||
 | 
					                            buttonVector = otherControl;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else if (otherControl != null) {
 | 
				
			||||||
 | 
					                    buttonVector = vector;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                otherControl = vector;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ((gate == null) || (buttonVector == null)) {
 | 
				
			||||||
 | 
					            Stargate.debug("createPortal", "Could not find matching gate layout");
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // If the player is trying to create a Bungee gate without permissions, drop out here
 | 
				
			||||||
 | 
					        // Do this after the gate layout check, in the least
 | 
				
			||||||
 | 
					        if (bungee) {
 | 
				
			||||||
 | 
					            if (!Stargate.enableBungee) {
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("bungeeDisabled"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            } else if (!Stargate.hasPerm(player, "stargate.admin.bungee")) {
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("bungeeDeny"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            } else if (destName.isEmpty() || network.isEmpty()) {
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("bungeeEmpty"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Debug
 | 
				
			||||||
 | 
					        Stargate.debug("createPortal", "h = " + hidden + " a = " + alwaysOn + " p = " + priv + " f = " + free + " b = " + backwards + " s = " + show + " n = " + noNetwork + " r = " + random + " u = " + bungee);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!bungee && (network.length() < 1 || network.length() > 11)) {
 | 
				
			||||||
 | 
					            network = Stargate.getDefaultNetwork();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        boolean deny = false;
 | 
				
			||||||
 | 
					        String denyMsg = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if the player can create gates on this network
 | 
				
			||||||
 | 
					        if (!bungee && !Stargate.canCreate(player, network)) {
 | 
				
			||||||
 | 
					            Stargate.debug("createPortal", "Player doesn't have create permissions on network. Trying personal");
 | 
				
			||||||
 | 
					            if (Stargate.canCreatePersonal(player)) {
 | 
				
			||||||
 | 
					                network = player.getName();
 | 
				
			||||||
 | 
					                if (network.length() > 11) network = network.substring(0, 11);
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal", "Creating personal portal");
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("createPersonal"));
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal", "Player does not have access to network");
 | 
				
			||||||
 | 
					                deny = true;
 | 
				
			||||||
 | 
					                denyMsg = Stargate.getString("createNetDeny");
 | 
				
			||||||
 | 
					                //return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if the player can create this gate layout
 | 
				
			||||||
 | 
					        String gateName = gate.getFilename();
 | 
				
			||||||
 | 
					        gateName = gateName.substring(0, gateName.indexOf('.'));
 | 
				
			||||||
 | 
					        if (!deny && !Stargate.canCreateGate(player, gateName)) {
 | 
				
			||||||
 | 
					            Stargate.debug("createPortal", "Player does not have access to gate layout");
 | 
				
			||||||
 | 
					            deny = true;
 | 
				
			||||||
 | 
					            denyMsg = Stargate.getString("createGateDeny");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if the user can create gates to this world.
 | 
				
			||||||
 | 
					        if (!bungee && !deny && destName.length() > 0) {
 | 
				
			||||||
 | 
					            Portal p = getByName(destName, network);
 | 
				
			||||||
 | 
					            if (p != null) {
 | 
				
			||||||
 | 
					                String world = p.getWorld().getName();
 | 
				
			||||||
 | 
					                if (!Stargate.canAccessWorld(player, world)) {
 | 
				
			||||||
 | 
					                    Stargate.debug("canCreate", "Player does not have access to destination world");
 | 
				
			||||||
 | 
					                    deny = true;
 | 
				
			||||||
 | 
					                    denyMsg = Stargate.getString("createWorldDeny");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Bleh, gotta check to make sure none of this gate belongs to another gate. Boo slow.
 | 
				
			||||||
 | 
					        for (RelativeBlockVector v : gate.getBorder()) {
 | 
				
			||||||
 | 
					            BlockLocation b = topleft.modRelative(v.getRight(), v.getDepth(), v.getDistance(), modX, 1, modZ);
 | 
				
			||||||
 | 
					            if (getByBlock(b.getBlock()) != null) {
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal", "Gate conflicts with existing gate");
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("createConflict"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        BlockLocation button = null;
 | 
				
			||||||
 | 
					        Portal portal;
 | 
				
			||||||
 | 
					        portal = new Portal(topleft, modX, modZ, rotX, id, button, destName, name, false, network, gate, player.getUniqueId(), player.getName(), hidden, alwaysOn, priv, free, backwards, show, noNetwork, random, bungee);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int cost = Stargate.getCreateCost(player, gate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Call StargateCreateEvent
 | 
				
			||||||
 | 
					        StargateCreateEvent cEvent = new StargateCreateEvent(player, portal, event.getLines(), deny, denyMsg, cost);
 | 
				
			||||||
 | 
					        Stargate.server.getPluginManager().callEvent(cEvent);
 | 
				
			||||||
 | 
					        if (cEvent.isCancelled()) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (cEvent.getDeny()) {
 | 
				
			||||||
 | 
					            Stargate.sendMessage(player, cEvent.getDenyReason());
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        cost = cEvent.getCost();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Name & Network can be changed in the event, so do these checks here.
 | 
				
			||||||
 | 
					        if (portal.getName().length() < 1 || portal.getName().length() > 11) {
 | 
				
			||||||
 | 
					            Stargate.debug("createPortal", "Name length error");
 | 
				
			||||||
 | 
					            Stargate.sendMessage(player, Stargate.getString("createNameLength"));
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Don't do network checks for bungee gates
 | 
				
			||||||
 | 
					        if (portal.isBungee()) {
 | 
				
			||||||
 | 
					            if (bungeePortals.get(portal.getName().toLowerCase()) != null) {
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal::Bungee", "Gate Exists");
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("createExists"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            if (getByName(portal.getName(), portal.getNetwork()) != null) {
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal", "Name Error");
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("createExists"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Check if there are too many gates in this network
 | 
				
			||||||
 | 
					            List<String> netList = allPortalsNet.get(portal.getNetwork().toLowerCase());
 | 
				
			||||||
 | 
					            if (Stargate.maxGates > 0 && netList != null && netList.size() >= Stargate.maxGates) {
 | 
				
			||||||
 | 
					                Stargate.sendMessage(player, Stargate.getString("createFull"));
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (cost > 0) {
 | 
				
			||||||
 | 
					            if (!Stargate.chargePlayer(player, cost)) {
 | 
				
			||||||
 | 
					                EconomyHelper.sendInsufficientFundsMessage(name, player, cost);
 | 
				
			||||||
 | 
					                Stargate.debug("createPortal", "Insufficient Funds");
 | 
				
			||||||
 | 
					                return null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            EconomyHelper.sendDeductMessage(name, player, cost);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // No button on an always-open gate.
 | 
				
			||||||
 | 
					        if (!alwaysOn) {
 | 
				
			||||||
 | 
					            button = topleft.modRelative(buttonVector.getRight(), buttonVector.getDepth(), buttonVector.getDistance() + 1, modX, 1, modZ);
 | 
				
			||||||
 | 
					            Directional buttondata = (Directional) Bukkit.createBlockData(gate.getButton());
 | 
				
			||||||
 | 
					            buttondata.setFacing(buttonfacing);
 | 
				
			||||||
 | 
					            button.getBlock().setBlockData(buttondata);
 | 
				
			||||||
 | 
					            portal.setButton(button);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        register(portal);
 | 
				
			||||||
 | 
					        portal.drawSign();
 | 
				
			||||||
 | 
					        // Open always on gate
 | 
				
			||||||
 | 
					        if (portal.isRandom() || portal.isBungee()) {
 | 
				
			||||||
 | 
					            portal.open(true);
 | 
				
			||||||
 | 
					        } else if (portal.isAlwaysOn()) {
 | 
				
			||||||
 | 
					            Portal dest = getByName(destName, portal.getNetwork());
 | 
				
			||||||
 | 
					            if (dest != null) {
 | 
				
			||||||
 | 
					                portal.open(true);
 | 
				
			||||||
 | 
					                dest.drawSign();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            // Set the inside of the gate to its closed material
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            for (BlockLocation inside : portal.getEntrances()) {
 | 
				
			||||||
 | 
					                inside.setType(portal.getGate().getPortalBlockClosed());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Don't do network stuff for bungee gates
 | 
				
			||||||
 | 
					        if (!portal.isBungee()) {
 | 
				
			||||||
 | 
					            // Open any always on gate pointing at this gate
 | 
				
			||||||
 | 
					            for (String originName : allPortalsNet.get(portal.getNetwork().toLowerCase())) {
 | 
				
			||||||
 | 
					                Portal origin = getByName(originName, portal.getNetwork());
 | 
				
			||||||
 | 
					                if (origin == null) continue;
 | 
				
			||||||
 | 
					                if (!origin.getDestinationName().equalsIgnoreCase(portal.getName())) continue;
 | 
				
			||||||
 | 
					                if (!origin.isVerified()) continue;
 | 
				
			||||||
 | 
					                if (origin.isFixed()) origin.drawSign();
 | 
				
			||||||
 | 
					                if (origin.isAlwaysOn()) origin.open(true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        saveAllGates(portal.getWorld());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return portal;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given its name
 | 
				
			||||||
 | 
					     * @param name <p>The name of the portal</p>
 | 
				
			||||||
 | 
					     * @param network <p>The network the portal is connected to</p>
 | 
				
			||||||
 | 
					     * @return <p>The portal with the given name or null</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByName(String name, String network) {
 | 
				
			||||||
 | 
					        if (!lookupNamesNet.containsKey(network.toLowerCase())) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return lookupNamesNet.get(network.toLowerCase()).get(name.toLowerCase());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given its entrance
 | 
				
			||||||
 | 
					     * @param location <p>The location of the portal's entrance</p>
 | 
				
			||||||
 | 
					     * @return <p>The portal at the given location</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByEntrance(Location location) {
 | 
				
			||||||
 | 
					        return lookupEntrances.get(new BlockLocation(location.getWorld(), location.getBlockX(), location.getBlockY(),
 | 
				
			||||||
 | 
					                location.getBlockZ()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given its entrance
 | 
				
			||||||
 | 
					     * @param block <p>The block at the portal's entrance</p>
 | 
				
			||||||
 | 
					     * @return <p>The portal at the given block's location</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByEntrance(Block block) {
 | 
				
			||||||
 | 
					        return lookupEntrances.get(new BlockLocation(block));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given a location adjacent to its entrance
 | 
				
			||||||
 | 
					     * @param loc <p>A location adjacent to the portal's entrance</p>
 | 
				
			||||||
 | 
					     * @return <p>The portal adjacent to the given location</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByAdjacentEntrance(Location loc) {
 | 
				
			||||||
 | 
					        int centerX = loc.getBlockX();
 | 
				
			||||||
 | 
					        int centerY = loc.getBlockY();
 | 
				
			||||||
 | 
					        int centerZ = loc.getBlockZ();
 | 
				
			||||||
 | 
					        World world = loc.getWorld();
 | 
				
			||||||
 | 
					        Portal portal = lookupEntrances.get(new BlockLocation(world, centerX, centerY, centerZ));
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            return portal;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        portal = lookupEntrances.get(new BlockLocation(world, centerX + 1, centerY, centerZ));
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            return portal;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        portal = lookupEntrances.get(new BlockLocation(world, centerX - 1, centerY, centerZ));
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            return portal;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        portal = lookupEntrances.get(new BlockLocation(world, centerX, centerY, centerZ + 1));
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            return portal;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        portal = lookupEntrances.get(new BlockLocation(world, centerX, centerY, centerZ - 1));
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            return portal;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given its control block (the block type used for the sign and button)
 | 
				
			||||||
 | 
					     * @param block <p>The portal's control block</p>
 | 
				
			||||||
 | 
					     * @return <p>The gate with the given control block</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByControl(Block block) {
 | 
				
			||||||
 | 
					        return lookupControls.get(new BlockLocation(block));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a portal given a block
 | 
				
			||||||
 | 
					     * @param block <p>One of the loaded lookup blocks</p>
 | 
				
			||||||
 | 
					     * @return <p>The portal corresponding to the block</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getByBlock(Block block) {
 | 
				
			||||||
 | 
					        return lookupBlocks.get(new BlockLocation(block));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a bungee gate given its name
 | 
				
			||||||
 | 
					     * @param name <p>The name of the bungee gate to get</p>
 | 
				
			||||||
 | 
					     * @return <p>A bungee gate</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static Portal getBungeeGate(String name) {
 | 
				
			||||||
 | 
					        return bungeePortals.get(name.toLowerCase());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Saves all gates for the given world
 | 
				
			||||||
 | 
					     * @param world <p>The world to save gates for</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void saveAllGates(World world) {
 | 
				
			||||||
 | 
					        Stargate.managedWorlds.add(world.getName());
 | 
				
			||||||
 | 
					        String loc = Stargate.getSaveLocation() + "/" + world.getName() + ".db";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            BufferedWriter bw = new BufferedWriter(new FileWriter(loc, false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            for (Portal portal : allPortals) {
 | 
				
			||||||
 | 
					                String wName = portal.getWorld().getName();
 | 
				
			||||||
 | 
					                if (!wName.equalsIgnoreCase(world.getName())) continue;
 | 
				
			||||||
 | 
					                StringBuilder builder = new StringBuilder();
 | 
				
			||||||
 | 
					                BlockLocation button = portal.getButton();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                builder.append(portal.getName());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getId().toString());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append((button != null) ? button.toString() : "");
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getModX());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getModZ());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getRotX());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getTopLeft().toString());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getGate().getFilename());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isFixed() ? portal.getDestinationName() : "");
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getNetwork());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                UUID owner = portal.getOwnerUUID();
 | 
				
			||||||
 | 
					                if (owner != null) {
 | 
				
			||||||
 | 
					                    builder.append(portal.getOwnerUUID().toString());
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    builder.append(portal.getOwnerName());
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isHidden());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isAlwaysOn());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isPrivate());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.getWorld().getName());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isFree());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isBackwards());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isShown());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isNoNetwork());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isRandom());
 | 
				
			||||||
 | 
					                builder.append(':');
 | 
				
			||||||
 | 
					                builder.append(portal.isBungee());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                bw.append(builder.toString());
 | 
				
			||||||
 | 
					                bw.newLine();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            bw.close();
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            Stargate.log.log(Level.SEVERE, "Exception while writing stargates to " + loc + ": " + e);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Clears all loaded gates and gate data
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void clearGates() {
 | 
				
			||||||
 | 
					        lookupBlocks.clear();
 | 
				
			||||||
 | 
					        lookupNamesNet.clear();
 | 
				
			||||||
 | 
					        lookupEntrances.clear();
 | 
				
			||||||
 | 
					        lookupControls.clear();
 | 
				
			||||||
 | 
					        allPortals.clear();
 | 
				
			||||||
 | 
					        allPortalsNet.clear();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Loads all gates for the given world
 | 
				
			||||||
 | 
					     * @param world <p>The world to load gates for</p>
 | 
				
			||||||
 | 
					     * @return <p>True if gates could be loaded</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean loadAllGates(World world) {
 | 
				
			||||||
 | 
					        String location = Stargate.getSaveLocation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        File database = new File(location, world.getName() + ".db");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (database.exists()) {
 | 
				
			||||||
 | 
					            return loadGates(world, database);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Stargate.log.info(Stargate.getString("prefix") + "{" + world.getName() + "} No stargates for world ");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Loads all the given gates
 | 
				
			||||||
 | 
					     * @param world <p>The world to load gates for</p>
 | 
				
			||||||
 | 
					     * @param database <p>The database file containing the gates</p>
 | 
				
			||||||
 | 
					     * @return <p>True if the gates were loaded successfully</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static boolean loadGates(World world, File database) {
 | 
				
			||||||
 | 
					        int l = 0;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            Scanner scanner = new Scanner(database);
 | 
				
			||||||
 | 
					            while (scanner.hasNextLine()) {
 | 
				
			||||||
 | 
					                l++;
 | 
				
			||||||
 | 
					                String line = scanner.nextLine().trim();
 | 
				
			||||||
 | 
					                if (line.startsWith("#") || line.isEmpty()) {
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                String[] portalData = line.split(":");
 | 
				
			||||||
 | 
					                if (portalData.length < 8) {
 | 
				
			||||||
 | 
					                    Stargate.log.info(Stargate.getString("prefix") + "Invalid line - " + l);
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                String name = portalData[0];
 | 
				
			||||||
 | 
					                BlockLocation sign = new BlockLocation(world, portalData[1]);
 | 
				
			||||||
 | 
					                BlockLocation button = (portalData[2].length() > 0) ? new BlockLocation(world, portalData[2]) : null;
 | 
				
			||||||
 | 
					                int modX = Integer.parseInt(portalData[3]);
 | 
				
			||||||
 | 
					                int modZ = Integer.parseInt(portalData[4]);
 | 
				
			||||||
 | 
					                float rotX = Float.parseFloat(portalData[5]);
 | 
				
			||||||
 | 
					                BlockLocation topLeft = new BlockLocation(world, portalData[6]);
 | 
				
			||||||
 | 
					                Gate gate = Gate.getGateByName(portalData[7]);
 | 
				
			||||||
 | 
					                if (gate == null) {
 | 
				
			||||||
 | 
					                    Stargate.log.info(Stargate.getString("prefix") + "Gate layout on line " + l + " does not exist [" + portalData[7] + "]");
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                String destination = (portalData.length > 8) ? portalData[8] : "";
 | 
				
			||||||
 | 
					                String network = (portalData.length > 9) ? portalData[9] : Stargate.getDefaultNetwork();
 | 
				
			||||||
 | 
					                if (network.isEmpty()) network = Stargate.getDefaultNetwork();
 | 
				
			||||||
 | 
					                String ownerString = (portalData.length > 10) ? portalData[10] : "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Attempt to get owner as UUID
 | 
				
			||||||
 | 
					                UUID ownerUUID = null;
 | 
				
			||||||
 | 
					                String ownerName;
 | 
				
			||||||
 | 
					                if (ownerString.length() > 16) {
 | 
				
			||||||
 | 
					                    try {
 | 
				
			||||||
 | 
					                        ownerUUID = UUID.fromString(ownerString);
 | 
				
			||||||
 | 
					                        OfflinePlayer offlineOwner = Bukkit.getServer().getOfflinePlayer(ownerUUID);
 | 
				
			||||||
 | 
					                        ownerName = offlineOwner.getName();
 | 
				
			||||||
 | 
					                    } catch (IllegalArgumentException ex) {
 | 
				
			||||||
 | 
					                        // neither name nor UUID, so keep it as-is
 | 
				
			||||||
 | 
					                        ownerName = ownerString;
 | 
				
			||||||
 | 
					                        Stargate.debug("loadAllGates", "Invalid stargate owner string: " + ownerString);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    ownerName = ownerString;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                //Creates the new portal
 | 
				
			||||||
 | 
					                Portal portal = new Portal(topLeft, modX, modZ, rotX, sign, button, destination, name, false, network,
 | 
				
			||||||
 | 
					                        gate, ownerUUID, ownerName);
 | 
				
			||||||
 | 
					                loadPortalOptions(portal, portalData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                register(portal);
 | 
				
			||||||
 | 
					                portal.close(true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            scanner.close();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Open any always-on gates. Do this here as it should be more efficient than in the loop.
 | 
				
			||||||
 | 
					            TwoTuple<Integer, Integer> portalCounts = openAlwaysOpenGates();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Stargate.log.info(Stargate.getString("prefix") + "{" + world.getName() + "} Loaded " + portalCounts.getSecondValue() + " stargates with " + portalCounts.getFirstValue() + " set as always-on");
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        } catch (Exception e) {
 | 
				
			||||||
 | 
					            Stargate.log.log(Level.SEVERE, "Exception while reading stargates from " + database.getName() + ": " + l);
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Loads all portal options and updates the given portal
 | 
				
			||||||
 | 
					     * @param portal <p>The portal to apply the options to</p>
 | 
				
			||||||
 | 
					     * @param portalData <p>The string list containing all information about a portal</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static void loadPortalOptions(Portal portal, String[] portalData) {
 | 
				
			||||||
 | 
					        boolean hidden = (portalData.length > 11) && portalData[11].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean alwaysOn = (portalData.length > 12) && portalData[12].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean isPrivate = (portalData.length > 13) && portalData[13].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean free = (portalData.length > 15) && portalData[15].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean backwards = (portalData.length > 16) && portalData[16].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean show = (portalData.length > 17) && portalData[17].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean noNetwork = (portalData.length > 18) && portalData[18].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean random = (portalData.length > 19) && portalData[19].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        boolean bungee = (portalData.length > 20) && portalData[20].equalsIgnoreCase("true");
 | 
				
			||||||
 | 
					        portal.setHidden(hidden).setAlwaysOn(alwaysOn).setPrivate(isPrivate).setFree(free).setBungee(bungee);
 | 
				
			||||||
 | 
					        portal.setBackwards(backwards).setShown(show).setNoNetwork(noNetwork).setRandom(random);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Opens all always open gates
 | 
				
			||||||
 | 
					     * @return <p>A TwoTuple where the first value is the number of always open gates and the second value is the total number of gates</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static TwoTuple<Integer, Integer> openAlwaysOpenGates() {
 | 
				
			||||||
 | 
					        int portalCount = 0;
 | 
				
			||||||
 | 
					        int openCount = 0;
 | 
				
			||||||
 | 
					        for (Iterator<Portal> iterator = allPortals.iterator(); iterator.hasNext(); ) {
 | 
				
			||||||
 | 
					            Portal portal = iterator.next();
 | 
				
			||||||
 | 
					            if (portal == null) {
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Verify portal integrity/register portal
 | 
				
			||||||
 | 
					            if (!portal.wasVerified() && (!portal.isVerified() || !portal.checkIntegrity())) {
 | 
				
			||||||
 | 
					                destroyInvalidStarGate(portal);
 | 
				
			||||||
 | 
					                iterator.remove();
 | 
				
			||||||
 | 
					                continue;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            portalCount++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Open the gate if it's set as always open or if it's a bungee gate
 | 
				
			||||||
 | 
					            if (portal.isFixed() && (Stargate.enableBungee && portal.isBungee() || portal.getDestination() != null &&
 | 
				
			||||||
 | 
					                    portal.isAlwaysOn())) {
 | 
				
			||||||
 | 
					                portal.open(true);
 | 
				
			||||||
 | 
					                openCount++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return new TwoTuple<>(openCount, portalCount);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Destroys a star gate which has failed its integrity test
 | 
				
			||||||
 | 
					     * @param portal <p>The portal of the star gate</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static void destroyInvalidStarGate(Portal portal) {
 | 
				
			||||||
 | 
					        // DEBUG
 | 
				
			||||||
 | 
					        for (RelativeBlockVector control : portal.getGate().getControls()) {
 | 
				
			||||||
 | 
					            if (!portal.getBlockAt(control).getBlock().getType().equals(portal.getGate().getControlBlock())) {
 | 
				
			||||||
 | 
					                Stargate.debug("loadAllGates", "Control Block Type == " + portal.getBlockAt(control).getBlock().getType().name());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        PortalHandler.unregister(portal, false);
 | 
				
			||||||
 | 
					        Stargate.log.info(Stargate.getString("prefix") + "Destroying stargate at " + portal.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Closes all star gate portals
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void closeAllGates() {
 | 
				
			||||||
 | 
					        Stargate.log.info("Closing all stargates.");
 | 
				
			||||||
 | 
					        for (Portal portal : allPortals) {
 | 
				
			||||||
 | 
					            if (portal != null) {
 | 
				
			||||||
 | 
					                portal.close(true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Removes the special characters |, : and # from a portal name
 | 
				
			||||||
 | 
					     * @param input <p>The name to filter</p>
 | 
				
			||||||
 | 
					     * @return <p>The filtered name</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static String filterName(String input) {
 | 
				
			||||||
 | 
					        if (input == null) {
 | 
				
			||||||
 | 
					            return "";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return input.replaceAll("[|:#]", "").trim();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,32 +1,22 @@
 | 
				
			|||||||
package net.knarcraft.stargate;
 | 
					package net.knarcraft.stargate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 * This stores a block location as a vector in an alternate coordinate system
 | 
				
			||||||
 * Copyright (C) 2011 Shaun (sturmeh)
 | 
					 *
 | 
				
			||||||
 * Copyright (C) 2011 Dinnerbone
 | 
					 * <p></p>
 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class RelativeBlockVector {
 | 
					public class RelativeBlockVector {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private int right = 0;
 | 
					    private int right;
 | 
				
			||||||
    private int depth = 0;
 | 
					    private int depth;
 | 
				
			||||||
    private int distance = 0;
 | 
					    private int distance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiates a new relative block vector
 | 
				
			||||||
 | 
					     * @param right <p>The x coordinate in the gate description</p>
 | 
				
			||||||
 | 
					     * @param depth <p>The y coordinate in the gate description</p>
 | 
				
			||||||
 | 
					     * @param distance <p></p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public RelativeBlockVector(int right, int depth, int distance) {
 | 
					    public RelativeBlockVector(int right, int depth, int distance) {
 | 
				
			||||||
        this.right = right;
 | 
					        this.right = right;
 | 
				
			||||||
        this.depth = depth;
 | 
					        this.depth = depth;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ import org.bukkit.plugin.PluginDescriptionFile;
 | 
				
			|||||||
import org.bukkit.plugin.PluginManager;
 | 
					import org.bukkit.plugin.PluginManager;
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
					import org.bukkit.plugin.java.JavaPlugin;
 | 
				
			||||||
import org.bukkit.plugin.java.JavaPluginLoader;
 | 
					import org.bukkit.plugin.java.JavaPluginLoader;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
@@ -36,27 +37,6 @@ import java.util.concurrent.ConcurrentLinkedQueue;
 | 
				
			|||||||
import java.util.logging.Level;
 | 
					import java.util.logging.Level;
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Shaun (sturmeh)
 | 
					 | 
				
			||||||
 * Copyright (C) 2011 Dinnerbone
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SuppressWarnings("unused")
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class Stargate extends JavaPlugin {
 | 
					public class Stargate extends JavaPlugin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,8 +101,8 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onDisable() {
 | 
					    public void onDisable() {
 | 
				
			||||||
        Portal.closeAllGates();
 | 
					        PortalHandler.closeAllGates();
 | 
				
			||||||
        Portal.clearGates();
 | 
					        PortalHandler.clearGates();
 | 
				
			||||||
        managedWorlds.clear();
 | 
					        managedWorlds.clear();
 | 
				
			||||||
        getServer().getScheduler().cancelTasks(this);
 | 
					        getServer().getScheduler().cancelTasks(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -251,7 +231,7 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
    public void loadAllPortals() {
 | 
					    public void loadAllPortals() {
 | 
				
			||||||
        for (World world : getServer().getWorlds()) {
 | 
					        for (World world : getServer().getWorlds()) {
 | 
				
			||||||
            if (!managedWorlds.contains(world.getName())) {
 | 
					            if (!managedWorlds.contains(world.getName())) {
 | 
				
			||||||
                Portal.loadAllGates(world);
 | 
					                PortalHandler.loadAllGates(world);
 | 
				
			||||||
                managedWorlds.add(world.getName());
 | 
					                managedWorlds.add(world.getName());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -261,11 +241,15 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
        // Only migrate if new file doesn't exist.
 | 
					        // Only migrate if new file doesn't exist.
 | 
				
			||||||
        File newPortalDir = new File(portalFolder);
 | 
					        File newPortalDir = new File(portalFolder);
 | 
				
			||||||
        if (!newPortalDir.exists()) {
 | 
					        if (!newPortalDir.exists()) {
 | 
				
			||||||
            newPortalDir.mkdirs();
 | 
					            if (!newPortalDir.mkdirs()) {
 | 
				
			||||||
 | 
					                log.severe("Unable to create portal directory");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        File newFile = new File(portalFolder, getServer().getWorlds().get(0).getName() + ".db");
 | 
					        File newFile = new File(portalFolder, getServer().getWorlds().get(0).getName() + ".db");
 | 
				
			||||||
        if (!newFile.exists()) {
 | 
					        if (!newFile.exists()) {
 | 
				
			||||||
            newFile.getParentFile().mkdirs();
 | 
					            if (!newFile.getParentFile().mkdirs()) {
 | 
				
			||||||
 | 
					                log.severe("Unable to create portal directory");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -652,7 +636,7 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
 | 
					    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
 | 
				
			||||||
        String cmd = command.getName();
 | 
					        String cmd = command.getName();
 | 
				
			||||||
        if (cmd.equalsIgnoreCase("sg")) {
 | 
					        if (cmd.equalsIgnoreCase("sg")) {
 | 
				
			||||||
            if (args.length != 1) return false;
 | 
					            if (args.length != 1) return false;
 | 
				
			||||||
@@ -680,7 +664,7 @@ public class Stargate extends JavaPlugin {
 | 
				
			|||||||
                activeList.clear();
 | 
					                activeList.clear();
 | 
				
			||||||
                openList.clear();
 | 
					                openList.clear();
 | 
				
			||||||
                managedWorlds.clear();
 | 
					                managedWorlds.clear();
 | 
				
			||||||
                Portal.clearGates();
 | 
					                PortalHandler.clearGates();
 | 
				
			||||||
                Gate.clearGates();
 | 
					                Gate.clearGates();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Store the old Bungee enabled value
 | 
					                // Store the old Bungee enabled value
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								src/main/java/net/knarcraft/stargate/TwoTuple.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/main/java/net/knarcraft/stargate/TwoTuple.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.stargate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This class allows storing two values of any type
 | 
				
			||||||
 | 
					 * @param <K> <p>The first type</p>
 | 
				
			||||||
 | 
					 * @param <L> <p>The second type</p>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class TwoTuple<K,L> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private K firstValue;
 | 
				
			||||||
 | 
					    private L secondValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiate a new TwoTuple
 | 
				
			||||||
 | 
					     * @param firstValue <p>The first value</p>
 | 
				
			||||||
 | 
					     * @param secondValue <p>The second value</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public TwoTuple(K firstValue, L secondValue) {
 | 
				
			||||||
 | 
					        this.firstValue = firstValue;
 | 
				
			||||||
 | 
					        this.secondValue = secondValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the first value
 | 
				
			||||||
 | 
					     * @return <p>The first value</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public K getFirstValue() {
 | 
				
			||||||
 | 
					        return firstValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the second value
 | 
				
			||||||
 | 
					     * @return <p>The second value</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public L getSecondValue() {
 | 
				
			||||||
 | 
					        return secondValue;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -4,26 +4,6 @@ import net.knarcraft.stargate.Portal;
 | 
				
			|||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * 
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@SuppressWarnings("unused")
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class StargateAccessEvent extends StargateEvent {
 | 
					public class StargateAccessEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,15 +12,21 @@ public class StargateAccessEvent extends StargateEvent {
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	private static final HandlerList handlers = new HandlerList();
 | 
						private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public HandlerList getHandlers() {
 | 
					 | 
				
			||||||
		return handlers;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a handler-list containing all event handlers
 | 
				
			||||||
 | 
					     * @return <p>A handler-list with all event handlers</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
	public static HandlerList getHandlerList() {
 | 
						public static HandlerList getHandlerList() {
 | 
				
			||||||
		return handlers;
 | 
							return handlers;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiates a new stargate access event
 | 
				
			||||||
 | 
					     * @param player <p>The player involved in the vent</p>
 | 
				
			||||||
 | 
					     * @param portal <p>The portal involved in the event</p>
 | 
				
			||||||
 | 
					     * @param deny <p>Whether the event should be denied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
	public StargateAccessEvent(Player player, Portal portal, boolean deny) {
 | 
						public StargateAccessEvent(Player player, Portal portal, boolean deny) {
 | 
				
			||||||
		super("StargateAccessEvent", portal);
 | 
							super("StargateAccessEvent", portal);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
@@ -63,9 +49,17 @@ public class StargateAccessEvent extends StargateEvent {
 | 
				
			|||||||
	public void setDeny(boolean deny) {
 | 
						public void setDeny(boolean deny) {
 | 
				
			||||||
		this.deny = deny;
 | 
							this.deny = deny;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the player involved in this stargate access event
 | 
				
			||||||
 | 
					     * @return <p>The player involved in this event</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
	public Player getPlayer() {
 | 
						public Player getPlayer() {
 | 
				
			||||||
		return this.player;
 | 
							return this.player;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public @org.jetbrains.annotations.NotNull HandlerList getHandlers() {
 | 
				
			||||||
 | 
					        return handlers;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,28 +3,10 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public class StargateActivateEvent extends StargateEvent {
 | 
					public class StargateActivateEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Player player;
 | 
					    private final Player player;
 | 
				
			||||||
@@ -33,6 +15,7 @@ public class StargateActivateEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,25 +2,7 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StargateCloseEvent extends StargateEvent {
 | 
					public class StargateCloseEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,6 +10,7 @@ public class StargateCloseEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,25 +3,7 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StargateCreateEvent extends StargateEvent {
 | 
					public class StargateCreateEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -33,6 +15,7 @@ public class StargateCreateEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,30 +2,13 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StargateDeactivateEvent extends StargateEvent {
 | 
					public class StargateDeactivateEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,26 +3,11 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 * This event represents an event where a star gate is destroyed or attempted to be destroyed
 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					 | 
				
			||||||
public class StargateDestroyEvent extends StargateEvent {
 | 
					public class StargateDestroyEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final Player player;
 | 
					    private final Player player;
 | 
				
			||||||
@@ -32,14 +17,27 @@ public class StargateDestroyEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets a handler-list containing all event handlers
 | 
				
			||||||
 | 
					     * @return <p>A handler-list with all event handlers</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public static HandlerList getHandlerList() {
 | 
					    public static HandlerList getHandlerList() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instantiates a new Stargate Destroy Event
 | 
				
			||||||
 | 
					     * @param portal <p>The portal destroyed</p>
 | 
				
			||||||
 | 
					     * @param player <p>The player destroying the portal</p>
 | 
				
			||||||
 | 
					     * @param deny <p>Whether the event should be denied (cancelled)</p>
 | 
				
			||||||
 | 
					     * @param denyMsg <p>The message to display if the event is denied</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The cost of destroying the portal</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public StargateDestroyEvent(Portal portal, Player player, boolean deny, String denyMsg, int cost) {
 | 
					    public StargateDestroyEvent(Portal portal, Player player, boolean deny, String denyMsg, int cost) {
 | 
				
			||||||
        super("StargateDestroyEvent", portal);
 | 
					        super("StargateDestroyEvent", portal);
 | 
				
			||||||
        this.player = player;
 | 
					        this.player = player;
 | 
				
			||||||
@@ -48,30 +46,58 @@ public class StargateDestroyEvent extends StargateEvent {
 | 
				
			|||||||
        this.cost = cost;
 | 
					        this.cost = cost;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the player causing the destroy event
 | 
				
			||||||
 | 
					     * @return <p>The player causing the destroy event</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Player getPlayer() {
 | 
					    public Player getPlayer() {
 | 
				
			||||||
        return player;
 | 
					        return player;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets whether this event should be denied
 | 
				
			||||||
 | 
					     * @return <p>Whether this event should be denied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public boolean getDeny() {
 | 
					    public boolean getDeny() {
 | 
				
			||||||
        return deny;
 | 
					        return deny;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sets whether this event should be denied
 | 
				
			||||||
 | 
					     * @param deny <p>Whether this event should be denied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setDeny(boolean deny) {
 | 
					    public void setDeny(boolean deny) {
 | 
				
			||||||
        this.deny = deny;
 | 
					        this.deny = deny;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the reason the event was denied
 | 
				
			||||||
 | 
					     * @return <p>The reason the event was denied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public String getDenyReason() {
 | 
					    public String getDenyReason() {
 | 
				
			||||||
        return denyReason;
 | 
					        return denyReason;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sets the reason the event was denied
 | 
				
			||||||
 | 
					     * @param denyReason <p>The reason the event was denied</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setDenyReason(String denyReason) {
 | 
					    public void setDenyReason(String denyReason) {
 | 
				
			||||||
        this.denyReason = denyReason;
 | 
					        this.denyReason = denyReason;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Gets the cost of destroying the portal
 | 
				
			||||||
 | 
					     * @return <p>The cost of destroying the portal</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public int getCost() {
 | 
					    public int getCost() {
 | 
				
			||||||
        return cost;
 | 
					        return cost;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sets the cost of destroying the portal
 | 
				
			||||||
 | 
					     * @param cost <p>The cost of destroying the portal</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setCost(int cost) {
 | 
					    public void setCost(int cost) {
 | 
				
			||||||
        this.cost = cost;
 | 
					        this.cost = cost;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,25 +4,6 @@ import net.knarcraft.stargate.Portal;
 | 
				
			|||||||
import org.bukkit.event.Cancellable;
 | 
					import org.bukkit.event.Cancellable;
 | 
				
			||||||
import org.bukkit.event.Event;
 | 
					import org.bukkit.event.Event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * An abstract event describing any stargate event
 | 
					 * An abstract event describing any stargate event
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@@ -37,6 +18,7 @@ public abstract class StargateEvent extends Event implements Cancellable {
 | 
				
			|||||||
        this.cancelled = false;
 | 
					        this.cancelled = false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Portal getPortal() {
 | 
					    public Portal getPortal() {
 | 
				
			||||||
        return portal;
 | 
					        return portal;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,25 +3,7 @@ package net.knarcraft.stargate.event;
 | 
				
			|||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StargateOpenEvent extends StargateEvent {
 | 
					public class StargateOpenEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,6 +12,7 @@ public class StargateOpenEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,25 +4,7 @@ import net.knarcraft.stargate.Portal;
 | 
				
			|||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * stargate - A portal plugin for Bukkit
 | 
					 | 
				
			||||||
 * Copyright (C) 2011, 2012 Steven "Drakia" Scott <Contact@TheDgtl.net>
 | 
					 | 
				
			||||||
 * Copyright (C) 2021 Kristian Knarvik
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
 * it under the terms of the GNU Lesser General Public License as published by
 | 
					 | 
				
			||||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
 * (at your option) any later version.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * This program is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
 * GNU Lesser General Public License for more details.
 | 
					 | 
				
			||||||
 * <p>
 | 
					 | 
				
			||||||
 * You should have received a copy of the GNU Lesser General Public License
 | 
					 | 
				
			||||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class StargatePortalEvent extends StargateEvent {
 | 
					public class StargatePortalEvent extends StargateEvent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,6 +14,7 @@ public class StargatePortalEvent extends StargateEvent {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private static final HandlerList handlers = new HandlerList();
 | 
					    private static final HandlerList handlers = new HandlerList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @NotNull
 | 
				
			||||||
    public HandlerList getHandlers() {
 | 
					    public HandlerList getHandlers() {
 | 
				
			||||||
        return handlers;
 | 
					        return handlers;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,10 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.EconomyHandler;
 | 
					 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import net.knarcraft.stargate.event.StargateDestroyEvent;
 | 
					import net.knarcraft.stargate.event.StargateDestroyEvent;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.utility.EconomyHelper;
 | 
				
			||||||
import net.knarcraft.stargate.utility.MaterialHelper;
 | 
					import net.knarcraft.stargate.utility.MaterialHelper;
 | 
				
			||||||
import org.bukkit.Material;
 | 
					import org.bukkit.Material;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
@@ -22,7 +23,17 @@ import org.bukkit.event.block.SignChangeEvent;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This class is responsible for listening to relevant block events related to creating and breaking portals
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class BlockEventListener implements Listener {
 | 
					public class BlockEventListener implements Listener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Detects sign changes to detect if the user is creating a new gate
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event <p>The triggered event</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onSignChange(SignChangeEvent event) {
 | 
					    public void onSignChange(SignChangeEvent event) {
 | 
				
			||||||
        if (event.isCancelled()) {
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
@@ -30,11 +41,12 @@ public class BlockEventListener implements Listener {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        Player player = event.getPlayer();
 | 
					        Player player = event.getPlayer();
 | 
				
			||||||
        Block block = event.getBlock();
 | 
					        Block block = event.getBlock();
 | 
				
			||||||
 | 
					        //Ignore normal signs
 | 
				
			||||||
        if (!(block.getBlockData() instanceof WallSign)) {
 | 
					        if (!(block.getBlockData() instanceof WallSign)) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        final Portal portal = Portal.createPortal(event, player);
 | 
					        final Portal portal = PortalHandler.createPortal(event, player);
 | 
				
			||||||
        // Not creating a gate, just placing a sign
 | 
					        // Not creating a gate, just placing a sign
 | 
				
			||||||
        if (portal == null) {
 | 
					        if (portal == null) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -42,69 +54,94 @@ public class BlockEventListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        Stargate.sendMessage(player, Stargate.getString("createMsg"), false);
 | 
					        Stargate.sendMessage(player, Stargate.getString("createMsg"), false);
 | 
				
			||||||
        Stargate.debug("onSignChange", "Initialized stargate: " + portal.getName());
 | 
					        Stargate.debug("onSignChange", "Initialized stargate: " + portal.getName());
 | 
				
			||||||
        Stargate.server.getScheduler().scheduleSyncDelayedTask(Stargate.stargate, () -> portal.drawSign(), 1);
 | 
					        Stargate.server.getScheduler().scheduleSyncDelayedTask(Stargate.stargate, portal::drawSign, 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Switch to HIGHEST priority so as to come after block protection plugins (Hopefully)
 | 
					    // Switch to HIGHEST priority so as to come after block protection plugins (Hopefully)
 | 
				
			||||||
    @EventHandler(priority = EventPriority.HIGHEST)
 | 
					    @EventHandler(priority = EventPriority.HIGHEST)
 | 
				
			||||||
    public void onBlockBreak(BlockBreakEvent event) {
 | 
					    public void onBlockBreak(BlockBreakEvent event) {
 | 
				
			||||||
        if (event.isCancelled()) return;
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        Block block = event.getBlock();
 | 
					        Block block = event.getBlock();
 | 
				
			||||||
        Player player = event.getPlayer();
 | 
					        Player player = event.getPlayer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal portal = Portal.getByBlock(block);
 | 
					        //Decide if a portal is broken
 | 
				
			||||||
        if (portal == null && Stargate.protectEntrance)
 | 
					        Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
            portal = Portal.getByEntrance(block);
 | 
					        if (portal == null && Stargate.protectEntrance) {
 | 
				
			||||||
        if (portal == null) return;
 | 
					            portal = PortalHandler.getByEntrance(block);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (portal == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        boolean deny = false;
 | 
					        boolean deny = false;
 | 
				
			||||||
        String denyMsg = "";
 | 
					        String denyMsg = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Decide if the user can destroy the portal
 | 
				
			||||||
        if (!Stargate.canDestroy(player, portal)) {
 | 
					        if (!Stargate.canDestroy(player, portal)) {
 | 
				
			||||||
            denyMsg = "Permission Denied"; // TODO: Change to stargate.getString()
 | 
					            denyMsg = Stargate.getString("denyMsg");
 | 
				
			||||||
            deny = true;
 | 
					            deny = true;
 | 
				
			||||||
            Stargate.log.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate");
 | 
					            Stargate.log.info(Stargate.getString("prefix") + player.getName() + " tried to destroy gate");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int cost = Stargate.getDestroyCost(player, portal.getGate());
 | 
					        int cost = Stargate.getDestroyCost(player, portal.getGate());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Create and call a StarGateDestroyEvent
 | 
				
			||||||
        StargateDestroyEvent destroyEvent = new StargateDestroyEvent(portal, player, deny, denyMsg, cost);
 | 
					        StargateDestroyEvent destroyEvent = new StargateDestroyEvent(portal, player, deny, denyMsg, cost);
 | 
				
			||||||
        Stargate.server.getPluginManager().callEvent(destroyEvent);
 | 
					        Stargate.server.getPluginManager().callEvent(destroyEvent);
 | 
				
			||||||
        if (destroyEvent.isCancelled()) {
 | 
					        if (destroyEvent.isCancelled()) {
 | 
				
			||||||
            event.setCancelled(true);
 | 
					            event.setCancelled(true);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Destroy denied
 | 
				
			||||||
        if (destroyEvent.getDeny()) {
 | 
					        if (destroyEvent.getDeny()) {
 | 
				
			||||||
            Stargate.sendMessage(player, destroyEvent.getDenyReason());
 | 
					            Stargate.sendMessage(player, destroyEvent.getDenyReason());
 | 
				
			||||||
            event.setCancelled(true);
 | 
					            event.setCancelled(true);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        cost = destroyEvent.getCost();
 | 
					        //Take care of payment transactions
 | 
				
			||||||
 | 
					        if (!handleEconomyPayment(destroyEvent, player, portal, event)) {
 | 
				
			||||||
        if (cost != 0) {
 | 
					            return;
 | 
				
			||||||
            if (!Stargate.chargePlayer(player, cost)) {
 | 
					 | 
				
			||||||
                Stargate.debug("onBlockBreak", "Insufficient Funds");
 | 
					 | 
				
			||||||
                Stargate.sendMessage(player, Stargate.getString("inFunds"));
 | 
					 | 
				
			||||||
                event.setCancelled(true);
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (cost > 0) {
 | 
					 | 
				
			||||||
                String deductMsg = Stargate.getString("ecoDeduct");
 | 
					 | 
				
			||||||
                deductMsg = Stargate.replaceVars(deductMsg, new String[]{"%cost%", "%portal%"}, new String[]{EconomyHandler.format(cost), portal.getName()});
 | 
					 | 
				
			||||||
                Stargate.sendMessage(player, deductMsg, false);
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                String refundMsg = Stargate.getString("ecoRefund");
 | 
					 | 
				
			||||||
                refundMsg = Stargate.replaceVars(refundMsg, new String[]{"%cost%", "%portal%"}, new String[]{EconomyHandler.format(-cost), portal.getName()});
 | 
					 | 
				
			||||||
                Stargate.sendMessage(player, refundMsg, false);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        portal.unregister(true);
 | 
					        PortalHandler.unregister(portal, true);
 | 
				
			||||||
        Stargate.sendMessage(player, Stargate.getString("destroyMsg"), false);
 | 
					        Stargate.sendMessage(player, Stargate.getString("destroyMsg"), false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Handles economy payment for breaking the portal
 | 
				
			||||||
 | 
					     * @param destroyEvent <p>The destroy event</p>
 | 
				
			||||||
 | 
					     * @param player <p>The player which triggered the event</p>
 | 
				
			||||||
 | 
					     * @param portal <p>The broken portal</p>
 | 
				
			||||||
 | 
					     * @param event <p>The break event</p>
 | 
				
			||||||
 | 
					     * @return <p>True if the payment was successful. False if the event was cancelled</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private boolean handleEconomyPayment(StargateDestroyEvent destroyEvent, Player player, Portal portal,
 | 
				
			||||||
 | 
					                                      BlockBreakEvent event) {
 | 
				
			||||||
 | 
					        int cost = destroyEvent.getCost();
 | 
				
			||||||
 | 
					        if (cost != 0) {
 | 
				
			||||||
 | 
					            if (!Stargate.chargePlayer(player, cost)) {
 | 
				
			||||||
 | 
					                Stargate.debug("onBlockBreak", "Insufficient Funds");
 | 
				
			||||||
 | 
					                EconomyHelper.sendInsufficientFundsMessage(portal.getName(), player, cost);
 | 
				
			||||||
 | 
					                event.setCancelled(true);
 | 
				
			||||||
 | 
					                return false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (cost > 0) {
 | 
				
			||||||
 | 
					                EconomyHelper.sendDeductMessage(portal.getName(), player, cost);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                EconomyHelper.sendRefundMessage(portal.getName(), player, cost);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Prevents any block physics events which may damage parts of the portal
 | 
				
			||||||
 | 
					     * @param event <p>The event to check and possibly cancel</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onBlockPhysics(BlockPhysicsEvent event) {
 | 
					    public void onBlockPhysics(BlockPhysicsEvent event) {
 | 
				
			||||||
        Block block = event.getBlock();
 | 
					        Block block = event.getBlock();
 | 
				
			||||||
@@ -112,27 +149,44 @@ public class BlockEventListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Handle keeping portal material and buttons around
 | 
					        // Handle keeping portal material and buttons around
 | 
				
			||||||
        if (block.getType() == Material.NETHER_PORTAL) {
 | 
					        if (block.getType() == Material.NETHER_PORTAL) {
 | 
				
			||||||
            portal = Portal.getByEntrance(block);
 | 
					            portal = PortalHandler.getByEntrance(block);
 | 
				
			||||||
        } else if (MaterialHelper.isButtonCompatible(block.getType())) {
 | 
					        } else if (MaterialHelper.isButtonCompatible(block.getType())) {
 | 
				
			||||||
            portal = Portal.getByControl(block);
 | 
					            portal = PortalHandler.getByControl(block);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (portal != null) {
 | 
				
			||||||
 | 
					            event.setCancelled(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (portal != null) event.setCancelled(true);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Cancels any block move events which may cause a block to enter the opening of a portal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event <p>The event to check and possibly cancel</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onBlockFromTo(BlockFromToEvent event) {
 | 
					    public void onBlockFromTo(BlockFromToEvent event) {
 | 
				
			||||||
        Portal portal = Portal.getByEntrance(event.getBlock());
 | 
					        Portal portal = PortalHandler.getByEntrance(event.getBlock());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (portal != null) {
 | 
					        if (portal != null) {
 | 
				
			||||||
            event.setCancelled((event.getBlock().getY() == event.getToBlock().getY()));
 | 
					            event.setCancelled((event.getBlock().getY() == event.getToBlock().getY()));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Cancels any piston extend events if the target block is part of a portal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event <p>The event to check and possibly cancel</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onPistonExtend(BlockPistonExtendEvent event) {
 | 
					    public void onPistonExtend(BlockPistonExtendEvent event) {
 | 
				
			||||||
        cancelPistonEvent(event, event.getBlocks());
 | 
					        cancelPistonEvent(event, event.getBlocks());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Cancels any piston retract events if the target block is part of a portal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event <p>The event to check and possibly cancel</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onPistonRetract(BlockPistonRetractEvent event) {
 | 
					    public void onPistonRetract(BlockPistonRetractEvent event) {
 | 
				
			||||||
        if (!event.isSticky()) {
 | 
					        if (!event.isSticky()) {
 | 
				
			||||||
@@ -143,16 +197,18 @@ public class BlockEventListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Cancels a piston event if it would destroy a portal
 | 
					     * Cancels a piston event if it would destroy a portal
 | 
				
			||||||
     * @param event <p>The event to cancel</p>
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event  <p>The event to cancel</p>
 | 
				
			||||||
     * @param blocks <p>The blocks included in the event</p>
 | 
					     * @param blocks <p>The blocks included in the event</p>
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private void cancelPistonEvent(BlockPistonEvent event, List<Block> blocks) {
 | 
					    private void cancelPistonEvent(BlockPistonEvent event, List<Block> blocks) {
 | 
				
			||||||
        for (Block block : blocks) {
 | 
					        for (Block block : blocks) {
 | 
				
			||||||
            Portal portal = Portal.getByBlock(block);
 | 
					            Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
            if (portal != null) {
 | 
					            if (portal != null) {
 | 
				
			||||||
                event.setCancelled(true);
 | 
					                event.setCancelled(true);
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,11 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.plugin.messaging.PluginMessageListener;
 | 
					import org.bukkit.plugin.messaging.PluginMessageListener;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.ByteArrayInputStream;
 | 
					import java.io.ByteArrayInputStream;
 | 
				
			||||||
import java.io.DataInputStream;
 | 
					import java.io.DataInputStream;
 | 
				
			||||||
@@ -19,7 +21,7 @@ import java.io.IOException;
 | 
				
			|||||||
public class BungeeCordListener implements PluginMessageListener {
 | 
					public class BungeeCordListener implements PluginMessageListener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onPluginMessageReceived(String channel, Player unused, byte[] message) {
 | 
					    public void onPluginMessageReceived(@NotNull String channel, @NotNull Player unused, @NotNull byte[] message) {
 | 
				
			||||||
        if (!Stargate.enableBungee || !channel.equals("BungeeCord")) {
 | 
					        if (!Stargate.enableBungee || !channel.equals("BungeeCord")) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -39,7 +41,7 @@ public class BungeeCordListener implements PluginMessageListener {
 | 
				
			|||||||
        if (player == null) {
 | 
					        if (player == null) {
 | 
				
			||||||
            Stargate.bungeeQueue.put(playerName.toLowerCase(), destination);
 | 
					            Stargate.bungeeQueue.put(playerName.toLowerCase(), destination);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            Portal destinationPortal = Portal.getBungeeGate(destination);
 | 
					            Portal destinationPortal = PortalHandler.getBungeeGate(destination);
 | 
				
			||||||
            // Specified an invalid gate. For now we'll just let them connect at their current location
 | 
					            // Specified an invalid gate. For now we'll just let them connect at their current location
 | 
				
			||||||
            if (destinationPortal == null) {
 | 
					            if (destinationPortal == null) {
 | 
				
			||||||
                Stargate.log.info(Stargate.getString("prefix") + "Bungee gate " + destination + " does not exist");
 | 
					                Stargate.log.info(Stargate.getString("prefix") + "Bungee gate " + destination + " does not exist");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,25 +1,39 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
import org.bukkit.event.Listener;
 | 
					import org.bukkit.event.Listener;
 | 
				
			||||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
					import org.bukkit.event.entity.EntityExplodeEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This listener listens for any relevant events on portal entities
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class EntityEventListener implements Listener {
 | 
					public class EntityEventListener implements Listener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This method catches any explosion events
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * <p>If destroyed by explosions is enabled, any portals destroyed by the explosion will be unregistered. If not,
 | 
				
			||||||
 | 
					     * the explosion will be cancelled.</p>
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param event <p>The triggered explosion event</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onEntityExplode(EntityExplodeEvent event) {
 | 
					    public void onEntityExplode(EntityExplodeEvent event) {
 | 
				
			||||||
        if (event.isCancelled()) {
 | 
					        if (event.isCancelled()) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for (Block b : event.blockList()) {
 | 
					        for (Block block : event.blockList()) {
 | 
				
			||||||
            Portal portal = Portal.getByBlock(b);
 | 
					            Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
            if (portal == null) {
 | 
					            if (portal == null) {
 | 
				
			||||||
                continue;
 | 
					                continue;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (Stargate.destroyedByExplosion()) {
 | 
					            if (Stargate.destroyedByExplosion()) {
 | 
				
			||||||
                portal.unregister(true);
 | 
					                PortalHandler.unregister(portal, true);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                event.setCancelled(true);
 | 
					                event.setCancelled(true);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.EconomyHandler;
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.utility.EconomyHelper;
 | 
				
			||||||
import net.knarcraft.stargate.utility.MaterialHelper;
 | 
					import net.knarcraft.stargate.utility.MaterialHelper;
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
@@ -39,7 +40,7 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal portal = Portal.getBungeeGate(destination);
 | 
					        Portal portal = PortalHandler.getBungeeGate(destination);
 | 
				
			||||||
        if (portal == null) {
 | 
					        if (portal == null) {
 | 
				
			||||||
            Stargate.debug("PlayerJoin", "Error fetching destination portal: " + destination);
 | 
					            Stargate.debug("PlayerJoin", "Error fetching destination portal: " + destination);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -54,7 +55,7 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
        if (!event.isCancelled()
 | 
					        if (!event.isCancelled()
 | 
				
			||||||
                && (cause == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL
 | 
					                && (cause == PlayerTeleportEvent.TeleportCause.NETHER_PORTAL
 | 
				
			||||||
                || cause == PlayerTeleportEvent.TeleportCause.END_GATEWAY && World.Environment.THE_END == event.getFrom().getWorld().getEnvironment())
 | 
					                || cause == PlayerTeleportEvent.TeleportCause.END_GATEWAY && World.Environment.THE_END == event.getFrom().getWorld().getEnvironment())
 | 
				
			||||||
                && Portal.getByAdjacentEntrance(event.getFrom()) != null) {
 | 
					                && PortalHandler.getByAdjacentEntrance(event.getFrom()) != null) {
 | 
				
			||||||
            event.setCancelled(true);
 | 
					            event.setCancelled(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -69,29 +70,29 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Player player = event.getPlayer();
 | 
					        Player player = event.getPlayer();
 | 
				
			||||||
        Portal portal = Portal.getByEntrance(event.getTo());
 | 
					        Portal entracePortal = PortalHandler.getByEntrance(event.getTo());
 | 
				
			||||||
        // No portal or not open
 | 
					        // No portal or not open
 | 
				
			||||||
        if (portal == null || !portal.isOpen()) return;
 | 
					        if (entracePortal == null || !entracePortal.isOpen()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Not open for this player
 | 
					        // Not open for this player
 | 
				
			||||||
        if (!portal.isOpenFor(player)) {
 | 
					        if (!entracePortal.isOpenFor(player)) {
 | 
				
			||||||
            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
					            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
				
			||||||
            portal.teleport(player, portal, event);
 | 
					            entracePortal.teleport(player, entracePortal, event);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal destination = portal.getDestination(player);
 | 
					        Portal destination = entracePortal.getDestination(player);
 | 
				
			||||||
        if (!portal.isBungee() && destination == null) return;
 | 
					        if (!entracePortal.isBungee() && destination == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        boolean deny = false;
 | 
					        boolean deny = false;
 | 
				
			||||||
        // Check if player has access to this server for Bungee gates
 | 
					        // Check if player has access to this server for Bungee gates
 | 
				
			||||||
        if (portal.isBungee()) {
 | 
					        if (entracePortal.isBungee()) {
 | 
				
			||||||
            if (!Stargate.canAccessServer(player, portal.getNetwork())) {
 | 
					            if (!Stargate.canAccessServer(player, entracePortal.getNetwork())) {
 | 
				
			||||||
                deny = true;
 | 
					                deny = true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // Check if player has access to this network
 | 
					            // Check if player has access to this network
 | 
				
			||||||
            if (!Stargate.canAccessNetwork(player, portal.getNetwork())) {
 | 
					            if (!Stargate.canAccessNetwork(player, entracePortal.getNetwork())) {
 | 
				
			||||||
                deny = true;
 | 
					                deny = true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -101,67 +102,42 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!Stargate.canAccessPortal(player, portal, deny)) {
 | 
					        if (!Stargate.canAccessPortal(player, entracePortal, deny)) {
 | 
				
			||||||
            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
					            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
				
			||||||
            portal.teleport(player, portal, event);
 | 
					            entracePortal.teleport(player, entracePortal, event);
 | 
				
			||||||
            portal.close(false);
 | 
					            entracePortal.close(false);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int cost = Stargate.getUseCost(player, portal, destination);
 | 
					        int cost = Stargate.getUseCost(player, entracePortal, destination);
 | 
				
			||||||
        if (cost > 0) {
 | 
					        if (cost > 0) {
 | 
				
			||||||
            boolean success;
 | 
					            if (!EconomyHelper.payTeleportFee(entracePortal, player, cost)) {
 | 
				
			||||||
            if (portal.getGate().getToOwner()) {
 | 
					 | 
				
			||||||
                success = portal.getOwnerUUID() != null && Stargate.chargePlayer(player, portal.getOwnerUUID(), cost);
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                success = Stargate.chargePlayer(player, cost);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (!success) {
 | 
					 | 
				
			||||||
                // Insufficient Funds
 | 
					 | 
				
			||||||
                Stargate.sendMessage(player, Stargate.getString("inFunds"));
 | 
					 | 
				
			||||||
                portal.close(false);
 | 
					 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            String deductMsg = Stargate.getString("ecoDeduct");
 | 
					 | 
				
			||||||
            deductMsg = Stargate.replaceVars(deductMsg, new String[]{"%cost%", "%portal%"}, new String[]{EconomyHandler.format(cost), portal.getName()});
 | 
					 | 
				
			||||||
            Stargate.sendMessage(player, deductMsg, false);
 | 
					 | 
				
			||||||
            if (portal.getGate().getToOwner() && portal.getOwnerUUID() != null) {
 | 
					 | 
				
			||||||
                Player p;
 | 
					 | 
				
			||||||
                if (portal.getOwnerUUID() != null) {
 | 
					 | 
				
			||||||
                    p = Stargate.server.getPlayer(portal.getOwnerUUID());
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    p = Stargate.server.getPlayer(portal.getOwnerName());
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                if (p != null) {
 | 
					 | 
				
			||||||
                    String obtainedMsg = Stargate.getString("ecoObtain");
 | 
					 | 
				
			||||||
                    obtainedMsg = Stargate.replaceVars(obtainedMsg, new String[]{"%cost%", "%portal%"}, new String[]{EconomyHandler.format(cost), portal.getName()});
 | 
					 | 
				
			||||||
                    Stargate.sendMessage(p, obtainedMsg, false);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false);
 | 
					        Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // BungeeCord Support
 | 
					        // BungeeCord Support
 | 
				
			||||||
        if (portal.isBungee()) {
 | 
					        if (entracePortal.isBungee()) {
 | 
				
			||||||
            if (!Stargate.enableBungee) {
 | 
					            if (!Stargate.enableBungee) {
 | 
				
			||||||
                player.sendMessage(Stargate.getString("bungeeDisabled"));
 | 
					                player.sendMessage(Stargate.getString("bungeeDisabled"));
 | 
				
			||||||
                portal.close(false);
 | 
					                entracePortal.close(false);
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Teleport the player back to this gate, for sanity's sake
 | 
					            // Teleport the player back to this gate, for sanity's sake
 | 
				
			||||||
            portal.teleport(player, portal, event);
 | 
					            entracePortal.teleport(player, entracePortal, event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Send the SGBungee packet first, it will be queued by BC if required
 | 
					            // Send the SGBungee packet first, it will be queued by BC if required
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                // Build the message, format is <player>#@#<destination>
 | 
					                // Build the message, format is <player>#@#<destination>
 | 
				
			||||||
                String msg = event.getPlayer().getName() + "#@#" + portal.getDestinationName();
 | 
					                String msg = event.getPlayer().getName() + "#@#" + entracePortal.getDestinationName();
 | 
				
			||||||
                // Build the message data, sent over the SGBungee bungeecord channel
 | 
					                // Build the message data, sent over the SGBungee bungeecord channel
 | 
				
			||||||
                ByteArrayOutputStream bao = new ByteArrayOutputStream();
 | 
					                ByteArrayOutputStream bao = new ByteArrayOutputStream();
 | 
				
			||||||
                DataOutputStream msgData = new DataOutputStream(bao);
 | 
					                DataOutputStream msgData = new DataOutputStream(bao);
 | 
				
			||||||
                msgData.writeUTF("Forward");
 | 
					                msgData.writeUTF("Forward");
 | 
				
			||||||
                msgData.writeUTF(portal.getNetwork());    // Server
 | 
					                msgData.writeUTF(entracePortal.getNetwork());    // Server
 | 
				
			||||||
                msgData.writeUTF("SGBungee");            // Channel
 | 
					                msgData.writeUTF("SGBungee");            // Channel
 | 
				
			||||||
                msgData.writeShort(msg.length());    // Data Length
 | 
					                msgData.writeShort(msg.length());    // Data Length
 | 
				
			||||||
                msgData.writeBytes(msg);            // Data
 | 
					                msgData.writeBytes(msg);            // Data
 | 
				
			||||||
@@ -177,7 +153,7 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
                ByteArrayOutputStream bao = new ByteArrayOutputStream();
 | 
					                ByteArrayOutputStream bao = new ByteArrayOutputStream();
 | 
				
			||||||
                DataOutputStream msgData = new DataOutputStream(bao);
 | 
					                DataOutputStream msgData = new DataOutputStream(bao);
 | 
				
			||||||
                msgData.writeUTF("Connect");
 | 
					                msgData.writeUTF("Connect");
 | 
				
			||||||
                msgData.writeUTF(portal.getNetwork());
 | 
					                msgData.writeUTF(entracePortal.getNetwork());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                player.sendPluginMessage(Stargate.stargate, "BungeeCord", bao.toByteArray());
 | 
					                player.sendPluginMessage(Stargate.stargate, "BungeeCord", bao.toByteArray());
 | 
				
			||||||
                bao.reset();
 | 
					                bao.reset();
 | 
				
			||||||
@@ -188,12 +164,12 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Close portal if required (Should never be)
 | 
					            // Close portal if required (Should never be)
 | 
				
			||||||
            portal.close(false);
 | 
					            entracePortal.close(false);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        destination.teleport(player, portal, event);
 | 
					        destination.teleport(player, entracePortal, event);
 | 
				
			||||||
        portal.close(false);
 | 
					        entracePortal.close(false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
@@ -208,7 +184,7 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
        // Right click
 | 
					        // Right click
 | 
				
			||||||
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
 | 
					        if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
 | 
				
			||||||
            if (block.getBlockData() instanceof WallSign) {
 | 
					            if (block.getBlockData() instanceof WallSign) {
 | 
				
			||||||
                Portal portal = Portal.getByBlock(block);
 | 
					                Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
                if (portal == null) {
 | 
					                if (portal == null) {
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -246,7 +222,7 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
                    eventTime = System.currentTimeMillis();
 | 
					                    eventTime = System.currentTimeMillis();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                Portal portal = Portal.getByBlock(block);
 | 
					                Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
                if (portal == null) {
 | 
					                if (portal == null) {
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -277,8 +253,10 @@ public class PlayerEventsListener implements Listener {
 | 
				
			|||||||
        if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
 | 
					        if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
 | 
				
			||||||
            // Check if we're scrolling a sign
 | 
					            // Check if we're scrolling a sign
 | 
				
			||||||
            if (block.getBlockData() instanceof WallSign) {
 | 
					            if (block.getBlockData() instanceof WallSign) {
 | 
				
			||||||
                Portal portal = Portal.getByBlock(block);
 | 
					                Portal portal = PortalHandler.getByBlock(block);
 | 
				
			||||||
                if (portal == null) return;
 | 
					                if (portal == null) {
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                event.setUseInteractedBlock(Event.Result.DENY);
 | 
					                event.setUseInteractedBlock(Event.Result.DENY);
 | 
				
			||||||
                // Only cancel event in creative mode
 | 
					                // Only cancel event in creative mode
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,9 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.utility.EconomyHelper;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.entity.Vehicle;
 | 
					import org.bukkit.entity.Vehicle;
 | 
				
			||||||
@@ -11,90 +13,86 @@ import org.bukkit.event.vehicle.VehicleMoveEvent;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@SuppressWarnings("unused")
 | 
				
			||||||
public class VehicleEventListener implements Listener {
 | 
					public class VehicleEventListener implements Listener {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Check for a vehicle moving through a portal
 | 
				
			||||||
 | 
					     * @param event <p>The triggered move event</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onVehicleMove(VehicleMoveEvent event) {
 | 
					    public void onVehicleMove(VehicleMoveEvent event) {
 | 
				
			||||||
        if (!Stargate.handleVehicles) return;
 | 
					        if (!Stargate.handleVehicles) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        List<Entity> passengers = event.getVehicle().getPassengers();
 | 
					        List<Entity> passengers = event.getVehicle().getPassengers();
 | 
				
			||||||
        Vehicle vehicle = event.getVehicle();
 | 
					        Vehicle vehicle = event.getVehicle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Portal portal = Portal.getByEntrance(event.getTo());
 | 
					        Portal entrancePortal = PortalHandler.getByEntrance(event.getTo());
 | 
				
			||||||
        if (portal == null || !portal.isOpen()) return;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // We don't support vehicles in Bungee portals
 | 
					        //Return if the portal cannot be teleported through
 | 
				
			||||||
        if (portal.isBungee()) return;
 | 
					        if (entrancePortal == null || !entrancePortal.isOpen() || entrancePortal.isBungee()) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!passengers.isEmpty() && passengers.get(0) instanceof Player) {
 | 
					        if (!passengers.isEmpty() && passengers.get(0) instanceof Player) {
 | 
				
			||||||
            /*
 | 
					            Stargate.log.info(Stargate.getString("prefox") + "Found passenger minecart");
 | 
				
			||||||
            Player player = (Player) passengers.get(0);
 | 
					            teleportPlayerAndVehicle(entrancePortal, vehicle, passengers);
 | 
				
			||||||
            if (!portal.isOpenFor(player)) {
 | 
					 | 
				
			||||||
                stargate.sendMessage(player, stargate.getString("denyMsg"));
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            Portal dest = portal.getDestination(player);
 | 
					 | 
				
			||||||
            if (dest == null) return;
 | 
					 | 
				
			||||||
            boolean deny = false;
 | 
					 | 
				
			||||||
            // Check if player has access to this network
 | 
					 | 
				
			||||||
            if (!canAccessNetwork(player, portal.getNetwork())) {
 | 
					 | 
				
			||||||
                deny = true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Check if player has access to destination world
 | 
					 | 
				
			||||||
            if (!canAccessWorld(player, dest.getWorld().getName())) {
 | 
					 | 
				
			||||||
                deny = true;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (!canAccessPortal(player, portal, deny)) {
 | 
					 | 
				
			||||||
                stargate.sendMessage(player, stargate.getString("denyMsg"));
 | 
					 | 
				
			||||||
                portal.close(false);
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            int cost = stargate.getUseCost(player, portal, dest);
 | 
					 | 
				
			||||||
            if (cost > 0) {
 | 
					 | 
				
			||||||
                boolean success;
 | 
					 | 
				
			||||||
                if(portal.getGate().getToOwner()) {
 | 
					 | 
				
			||||||
                    if(portal.getOwnerUUID() == null) {
 | 
					 | 
				
			||||||
                        success = stargate.chargePlayer(player, portal.getOwnerUUID(), cost);
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        success = stargate.chargePlayer(player, portal.getOwnerName(), cost);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    success = stargate.chargePlayer(player, cost);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                if(!success) {
 | 
					 | 
				
			||||||
                    // Insufficient Funds
 | 
					 | 
				
			||||||
                    stargate.sendMessage(player, stargate.getString("inFunds"));
 | 
					 | 
				
			||||||
                    portal.close(false);
 | 
					 | 
				
			||||||
                    return;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                String deductMsg = stargate.getString("ecoDeduct");
 | 
					 | 
				
			||||||
                deductMsg = stargate.replaceVars(deductMsg, new String[] {"%cost%", "%portal%"}, new String[] {EconomyHandler.format(cost), portal.getName()});
 | 
					 | 
				
			||||||
                sendMessage(player, deductMsg, false);
 | 
					 | 
				
			||||||
                if (portal.getGate().getToOwner()) {
 | 
					 | 
				
			||||||
                    Player p;
 | 
					 | 
				
			||||||
                    if(portal.getOwnerUUID() != null) {
 | 
					 | 
				
			||||||
                        p = server.getPlayer(portal.getOwnerUUID());
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        p = server.getPlayer(portal.getOwnerName());
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    if (p != null) {
 | 
					 | 
				
			||||||
                        String obtainedMsg = stargate.getString("ecoObtain");
 | 
					 | 
				
			||||||
                        obtainedMsg = stargate.replaceVars(obtainedMsg, new String[] {"%cost%", "%portal%"}, new String[] {EconomyHandler.format(cost), portal.getName()});
 | 
					 | 
				
			||||||
                        stargate.sendMessage(p, obtainedMsg, false);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            stargate.sendMessage(player, stargate.getString("teleportMsg"), false);
 | 
					 | 
				
			||||||
            dest.teleport(vehicle);
 | 
					 | 
				
			||||||
            portal.close(false);
 | 
					 | 
				
			||||||
             */
 | 
					 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            Portal dest = portal.getDestination();
 | 
					            Stargate.log.info(Stargate.getString("prefox") + "Found empty minecart");
 | 
				
			||||||
            if (dest == null) return;
 | 
					            Portal destinationPortal = entrancePortal.getDestination();
 | 
				
			||||||
            dest.teleport(vehicle);
 | 
					            if (destinationPortal == null) {
 | 
				
			||||||
 | 
					                Stargate.log.warning(Stargate.getString("prefox") + "Unable to find portal destination");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            destinationPortal.teleport(vehicle);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Teleports a player and the minecart the player sits in
 | 
				
			||||||
 | 
					     * @param entrancePortal <p>The portal the minecart entered</p>
 | 
				
			||||||
 | 
					     * @param vehicle <p>The vehicle to teleport</p>
 | 
				
			||||||
 | 
					     * @param passengers <p>Any entities sitting in the minecart</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void teleportPlayerAndVehicle(Portal entrancePortal, Vehicle vehicle, List<Entity> passengers) {
 | 
				
			||||||
 | 
					        Player player = (Player) passengers.get(0);
 | 
				
			||||||
 | 
					        if (!entrancePortal.isOpenFor(player)) {
 | 
				
			||||||
 | 
					            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Portal destinationPortal = entrancePortal.getDestination(player);
 | 
				
			||||||
 | 
					        if (destinationPortal == null) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        boolean deny = false;
 | 
				
			||||||
 | 
					        // Check if player has access to this network
 | 
				
			||||||
 | 
					        if (!Stargate.canAccessNetwork(player, entrancePortal.getNetwork())) {
 | 
				
			||||||
 | 
					            deny = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check if player has access to destination world
 | 
				
			||||||
 | 
					        if (!Stargate.canAccessWorld(player, destinationPortal.getWorld().getName())) {
 | 
				
			||||||
 | 
					            deny = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!Stargate.canAccessPortal(player, entrancePortal, deny)) {
 | 
				
			||||||
 | 
					            Stargate.sendMessage(player, Stargate.getString("denyMsg"));
 | 
				
			||||||
 | 
					            entrancePortal.close(false);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        int cost = Stargate.getUseCost(player, entrancePortal, destinationPortal);
 | 
				
			||||||
 | 
					        if (cost > 0) {
 | 
				
			||||||
 | 
					            if (!EconomyHelper.payTeleportFee(entrancePortal, player, cost)) {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Stargate.sendMessage(player, Stargate.getString("teleportMsg"), false);
 | 
				
			||||||
 | 
					        destinationPortal.teleport(vehicle);
 | 
				
			||||||
 | 
					        entrancePortal.close(false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
package net.knarcraft.stargate.listener;
 | 
					package net.knarcraft.stargate.listener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import net.knarcraft.stargate.Portal;
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.PortalHandler;
 | 
				
			||||||
import net.knarcraft.stargate.Stargate;
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
import org.bukkit.World;
 | 
					import org.bukkit.World;
 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
@@ -12,7 +13,7 @@ public class WorldEventListener implements Listener {
 | 
				
			|||||||
    @EventHandler
 | 
					    @EventHandler
 | 
				
			||||||
    public void onWorldLoad(WorldLoadEvent event) {
 | 
					    public void onWorldLoad(WorldLoadEvent event) {
 | 
				
			||||||
        if (!Stargate.managedWorlds.contains(event.getWorld().getName())
 | 
					        if (!Stargate.managedWorlds.contains(event.getWorld().getName())
 | 
				
			||||||
                && Portal.loadAllGates(event.getWorld())) {
 | 
					                && PortalHandler.loadAllGates(event.getWorld())) {
 | 
				
			||||||
            Stargate.managedWorlds.add(event.getWorld().getName());
 | 
					            Stargate.managedWorlds.add(event.getWorld().getName());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -24,10 +25,10 @@ public class WorldEventListener implements Listener {
 | 
				
			|||||||
        World w = event.getWorld();
 | 
					        World w = event.getWorld();
 | 
				
			||||||
        if (Stargate.managedWorlds.contains(w.getName())) {
 | 
					        if (Stargate.managedWorlds.contains(w.getName())) {
 | 
				
			||||||
            Stargate.managedWorlds.remove(w.getName());
 | 
					            Stargate.managedWorlds.remove(w.getName());
 | 
				
			||||||
            Portal.clearGates();
 | 
					            PortalHandler.clearGates();
 | 
				
			||||||
            for (World world : Stargate.server.getWorlds()) {
 | 
					            for (World world : Stargate.server.getWorlds()) {
 | 
				
			||||||
                if (Stargate.managedWorlds.contains(world.getName())) {
 | 
					                if (Stargate.managedWorlds.contains(world.getName())) {
 | 
				
			||||||
                    Portal.loadAllGates(world);
 | 
					                    PortalHandler.loadAllGates(world);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										113
									
								
								src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								src/main/java/net/knarcraft/stargate/utility/EconomyHelper.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.stargate.utility;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.EconomyHandler;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.Portal;
 | 
				
			||||||
 | 
					import net.knarcraft.stargate.Stargate;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class EconomyHelper {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Tries to make the given user pay the teleport fee
 | 
				
			||||||
 | 
					     * @param entrancePortal <p>The portal the player is entering</p>
 | 
				
			||||||
 | 
					     * @param player <p>The player wishing to teleport</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The cost of teleportation</p>
 | 
				
			||||||
 | 
					     * @return <p>True if payment was successful</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static boolean payTeleportFee(Portal entrancePortal, Player player, int cost) {
 | 
				
			||||||
 | 
					        boolean success;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Try to charge the player
 | 
				
			||||||
 | 
					        if (entrancePortal.getGate().getToOwner()) {
 | 
				
			||||||
 | 
					            success = entrancePortal.getOwnerUUID() != null && Stargate.chargePlayer(player, entrancePortal.getOwnerUUID(), cost);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            success = Stargate.chargePlayer(player, cost);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Insufficient Funds
 | 
				
			||||||
 | 
					        if (!success) {
 | 
				
			||||||
 | 
					            sendInsufficientFundsMessage(entrancePortal.getName(), player, cost);
 | 
				
			||||||
 | 
					            entrancePortal.close(false);
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //Send the deduct message to the player
 | 
				
			||||||
 | 
					        sendDeductMessage(entrancePortal.getName(), player, cost);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (entrancePortal.getGate().getToOwner()) {
 | 
				
			||||||
 | 
					            Player gateOwner;
 | 
				
			||||||
 | 
					            if (entrancePortal.getOwnerUUID() != null) {
 | 
				
			||||||
 | 
					                gateOwner = Stargate.server.getPlayer(entrancePortal.getOwnerUUID());
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                gateOwner = Stargate.server.getPlayer(entrancePortal.getOwnerName());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //Notify the gate owner of received payment
 | 
				
			||||||
 | 
					            if (gateOwner != null) {
 | 
				
			||||||
 | 
					                sendObtainMessage(entrancePortal.getName(), gateOwner, cost);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sends a message to the gate owner telling him/her how much he/she earned from a player using his/her gate
 | 
				
			||||||
 | 
					     * @param portalName <p>The name of the used portal</p>
 | 
				
			||||||
 | 
					     * @param portalOwner <p>The owner of the portal</p>
 | 
				
			||||||
 | 
					     * @param earnings <p>The amount the owner earned</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void sendObtainMessage(String portalName, Player portalOwner, int earnings) {
 | 
				
			||||||
 | 
					        String obtainedMsg = Stargate.getString("ecoObtain");
 | 
				
			||||||
 | 
					        obtainedMsg = replaceVars(obtainedMsg, portalName, earnings);
 | 
				
			||||||
 | 
					        Stargate.sendMessage(portalOwner, obtainedMsg, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sends a message telling the user how much they paid for interacting with a portal
 | 
				
			||||||
 | 
					     * @param portalName <p>The name of the portal interacted with</p>
 | 
				
			||||||
 | 
					     * @param player <p>The interacting player</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The cost of the interaction</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void sendDeductMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
 | 
					        String deductMsg = Stargate.getString("ecoDeduct");
 | 
				
			||||||
 | 
					        deductMsg = replaceVars(deductMsg, portalName, cost);
 | 
				
			||||||
 | 
					        Stargate.sendMessage(player, deductMsg, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sends a message telling the user they don't have enough funds to do a portal interaction
 | 
				
			||||||
 | 
					     * @param portalName <p>The name of the portal interacted with</p>
 | 
				
			||||||
 | 
					     * @param player <p>The interacting player</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The cost of the interaction</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void sendInsufficientFundsMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
 | 
					        String inFundMsg = Stargate.getString("ecoInFunds");
 | 
				
			||||||
 | 
					        inFundMsg = replaceVars(inFundMsg, portalName, cost);
 | 
				
			||||||
 | 
					        Stargate.sendMessage(player, inFundMsg);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sends a message telling the user how much they are refunded for breaking their portal
 | 
				
			||||||
 | 
					     * @param portalName <p>The name of the broken portal</p>
 | 
				
			||||||
 | 
					     * @param player <p>The player breaking the portal</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The amount the user has to pay for destroying the portal. (expects a negative value)</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static void sendRefundMessage(String portalName, Player player, int cost) {
 | 
				
			||||||
 | 
					        String refundMsg = Stargate.getString("ecoRefund");
 | 
				
			||||||
 | 
					        refundMsg = replaceVars(refundMsg, portalName, -cost);
 | 
				
			||||||
 | 
					        Stargate.sendMessage(player, refundMsg, false);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Replaces the cost and portal variables in a string
 | 
				
			||||||
 | 
					     * @param message <p>The message to replace variables in</p>
 | 
				
			||||||
 | 
					     * @param portalName <p>The name of the relevant portal</p>
 | 
				
			||||||
 | 
					     * @param cost <p>The cost for a given interaction</p>
 | 
				
			||||||
 | 
					     * @return <p>The same string with cost and portal variables replaced</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static String replaceVars(String message, String portalName, int cost) {
 | 
				
			||||||
 | 
					        return Stargate.replaceVars(message, new String[]{"%cost%", "%portal%"},
 | 
				
			||||||
 | 
					                new String[]{EconomyHandler.format(cost), portalName});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user