Fixes Stargate verification
This commit is contained in:
		@@ -75,10 +75,10 @@ public class PortalCreator {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Get necessary information from the gate's sign
 | 
			
		||||
        String portalName = PortalHandler.filterName(event.getLine(0));
 | 
			
		||||
        String destinationName = PortalHandler.filterName(event.getLine(1));
 | 
			
		||||
        String network = PortalHandler.filterName(event.getLine(2));
 | 
			
		||||
        String options = PortalHandler.filterName(event.getLine(3)).toLowerCase();
 | 
			
		||||
        @NotNull String portalName = PortalHandler.filterName(event.getLine(0));
 | 
			
		||||
        @NotNull String destinationName = PortalHandler.filterName(event.getLine(1));
 | 
			
		||||
        @NotNull String network = PortalHandler.filterName(event.getLine(2));
 | 
			
		||||
        @NotNull String options = PortalHandler.filterName(event.getLine(3)).toLowerCase();
 | 
			
		||||
 | 
			
		||||
        PortalStrings portalStrings = new PortalStrings(portalName, network, destinationName);
 | 
			
		||||
 | 
			
		||||
@@ -230,7 +230,7 @@ public class PortalCreator {
 | 
			
		||||
     * @return <p>The portal or null if its creation was denied</p>
 | 
			
		||||
     */
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public Portal validatePortal(@NotNull String denyMessage, String[] lines, boolean deny) {
 | 
			
		||||
    public Portal validatePortal(@NotNull String denyMessage, @NotNull String[] lines, boolean deny) {
 | 
			
		||||
        PortalLocation portalLocation = portal.getLocation();
 | 
			
		||||
        Gate gate = portal.getStructure().getGate();
 | 
			
		||||
        PortalOptions portalOptions = portal.getOptions();
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package net.knarcraft.stargate.portal;
 | 
			
		||||
 | 
			
		||||
import net.knarcraft.stargate.Stargate;
 | 
			
		||||
import net.knarcraft.stargate.config.Message;
 | 
			
		||||
import net.knarcraft.stargate.config.material.BukkitTagSpecifier;
 | 
			
		||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
			
		||||
import net.knarcraft.stargate.container.RelativeBlockVector;
 | 
			
		||||
import net.knarcraft.stargate.portal.property.PortalLocation;
 | 
			
		||||
@@ -12,6 +13,7 @@ import net.knarcraft.stargate.portal.property.gate.GateHandler;
 | 
			
		||||
import net.knarcraft.stargate.utility.MaterialHelper;
 | 
			
		||||
import net.knarcraft.stargate.utility.PermissionHelper;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Tag;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
@@ -218,7 +220,7 @@ public class PortalHandler {
 | 
			
		||||
            Portal origin = getByName(originName, portal.getCleanNetwork());
 | 
			
		||||
            if (origin == null ||
 | 
			
		||||
                    !Portal.cleanString(origin.getDestinationName()).equals(portal.getCleanName()) ||
 | 
			
		||||
                    !origin.getStructure().isVerified()) {
 | 
			
		||||
                    !new BukkitTagSpecifier(Tag.WALL_SIGNS).asMaterials().contains(origin.getLocation().getSignLocation().getType())) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            //Update sign of fixed gates pointing at this gate
 | 
			
		||||
@@ -434,7 +436,18 @@ public class PortalHandler {
 | 
			
		||||
        for (Portal portal : PortalRegistry.getAllPortals()) {
 | 
			
		||||
            //Try and verify the portal. Invalidate it if it cannot be validated
 | 
			
		||||
            PortalStructure structure = portal.getStructure();
 | 
			
		||||
            if (!structure.wasVerified() && (!structure.isVerified() || !structure.checkIntegrity())) {
 | 
			
		||||
 | 
			
		||||
            Stargate.debug("PortalHandler::verifyAllPortals", "Checking portal: " + portal.getName() + " | " + portal.getNetwork());
 | 
			
		||||
            if (!portal.getOptions().hasNoSign() && !(new BukkitTagSpecifier(Tag.WALL_SIGNS).asMaterials().contains(
 | 
			
		||||
                    portal.getLocation().getSignLocation().getType()))) {
 | 
			
		||||
                Stargate.debug("PortalHandler::verifyAllPortals", "Stargate is missing its sign");
 | 
			
		||||
                invalidPortals.add(portal);
 | 
			
		||||
            } else if (!portal.getOptions().isAlwaysOn() && portal.getLocation().getButtonVector() != null &&
 | 
			
		||||
                    !MaterialHelper.isButtonCompatible(portal.getBlockAt(portal.getLocation().getButtonVector().addOut(1)).getType())) {
 | 
			
		||||
                Stargate.debug("PortalHandler::verifyAllPortals", "Stargate is missing a valid button");
 | 
			
		||||
                invalidPortals.add(portal);
 | 
			
		||||
            } else if (!structure.checkIntegrity()) {
 | 
			
		||||
                Stargate.debug("PortalHandler::verifyAllPortals", "Stargate's border or entrance has invalid blocks");
 | 
			
		||||
                invalidPortals.add(portal);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -462,7 +475,7 @@ public class PortalHandler {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        PortalRegistry.unregisterPortal(portal, false);
 | 
			
		||||
        Stargate.logInfo(String.format("Destroying stargate at %s", portal));
 | 
			
		||||
        Stargate.logInfo(String.format("Disabled stargate at %s", portal));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package net.knarcraft.stargate.portal;
 | 
			
		||||
 | 
			
		||||
import net.knarcraft.stargate.Stargate;
 | 
			
		||||
import net.knarcraft.stargate.config.material.BukkitTagSpecifier;
 | 
			
		||||
import net.knarcraft.stargate.container.BlockChangeRequest;
 | 
			
		||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
			
		||||
import net.knarcraft.stargate.event.StargateCloseEvent;
 | 
			
		||||
@@ -10,6 +11,7 @@ import net.knarcraft.stargate.utility.ListHelper;
 | 
			
		||||
import net.knarcraft.stargate.utility.MaterialHelper;
 | 
			
		||||
import org.bukkit.Axis;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.Tag;
 | 
			
		||||
import org.bukkit.block.data.Orientable;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
@@ -144,8 +146,8 @@ public class PortalOpener {
 | 
			
		||||
            //Set the destination portal to this opener's portal
 | 
			
		||||
            destination.getPortalActivator().setDestination(portal);
 | 
			
		||||
 | 
			
		||||
            //Update the destination's sign if it's verified
 | 
			
		||||
            if (destination.getStructure().isVerified()) {
 | 
			
		||||
            //Update the destination's sign if it exists
 | 
			
		||||
            if (new BukkitTagSpecifier(Tag.WALL_SIGNS).asMaterials().contains(destination.getLocation().getSignLocation().getType())) {
 | 
			
		||||
                destination.drawSign();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,10 @@ package net.knarcraft.stargate.portal;
 | 
			
		||||
 | 
			
		||||
import net.knarcraft.stargate.Stargate;
 | 
			
		||||
import net.knarcraft.stargate.config.DynmapManager;
 | 
			
		||||
import net.knarcraft.stargate.config.material.BukkitTagSpecifier;
 | 
			
		||||
import net.knarcraft.stargate.container.BlockLocation;
 | 
			
		||||
import net.knarcraft.stargate.utility.PortalFileHelper;
 | 
			
		||||
import org.bukkit.Tag;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
@@ -203,7 +205,7 @@ public class PortalRegistry {
 | 
			
		||||
            for (String originName : allPortalNetworks.get(networkName)) {
 | 
			
		||||
                Portal origin = PortalHandler.getByName(originName, portal.getCleanNetwork());
 | 
			
		||||
                if (origin == null || !origin.getDestinationName().equalsIgnoreCase(portalName) ||
 | 
			
		||||
                        !origin.getStructure().isVerified()) {
 | 
			
		||||
                        !new BukkitTagSpecifier(Tag.WALL_SIGNS).asMaterials().contains(origin.getLocation().getSignLocation().getType())) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                //Update the portal's sign
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,6 @@ public class PortalStructure {
 | 
			
		||||
    private BlockLocation button;
 | 
			
		||||
    private BlockLocation[] frame;
 | 
			
		||||
    private BlockLocation[] entrances;
 | 
			
		||||
    private boolean verified;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new portal structure
 | 
			
		||||
@@ -33,7 +32,6 @@ public class PortalStructure {
 | 
			
		||||
    public PortalStructure(@NotNull Portal portal, @NotNull Gate gate, @Nullable BlockLocation button) {
 | 
			
		||||
        this.portal = portal;
 | 
			
		||||
        this.gate = gate;
 | 
			
		||||
        this.verified = false;
 | 
			
		||||
        this.button = button;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -66,35 +64,6 @@ public class PortalStructure {
 | 
			
		||||
        this.button = button;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Verifies that all control blocks in this portal follows its gate template
 | 
			
		||||
     *
 | 
			
		||||
     * @return <p>True if all control blocks were verified</p>
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isVerified() {
 | 
			
		||||
        boolean verified = true;
 | 
			
		||||
        if (!Stargate.getGateConfig().verifyPortals()) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        for (RelativeBlockVector control : gate.getLayout().getControls()) {
 | 
			
		||||
            verified = verified && gate.isValidControlBlock(portal.getBlockAt(control).getBlock().getType());
 | 
			
		||||
        }
 | 
			
		||||
        this.verified = verified;
 | 
			
		||||
        return verified;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the result of the last portal verification
 | 
			
		||||
     *
 | 
			
		||||
     * @return <p>True if this portal was verified</p>
 | 
			
		||||
     */
 | 
			
		||||
    public boolean wasVerified() {
 | 
			
		||||
        if (!Stargate.getGateConfig().verifyPortals()) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return verified;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if all blocks in a gate matches the gate template
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -88,16 +88,6 @@ public class Gate {
 | 
			
		||||
        return new HashMap<>(characterMaterialMap);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks whether the given material is valid for control blocks
 | 
			
		||||
     *
 | 
			
		||||
     * @param material <p>The material to check</p>
 | 
			
		||||
     * @return <p>True if the material is valid for control blocks</p>
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isValidControlBlock(@NotNull Material material) {
 | 
			
		||||
        return getControlBlockMaterials().contains(new BukkitMaterialSpecifier(material));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets the material type used for this gate's control blocks
 | 
			
		||||
     *
 | 
			
		||||
@@ -233,7 +223,7 @@ public class Gate {
 | 
			
		||||
            if (materialInLayout != null) {
 | 
			
		||||
                if (!MaterialHelper.specifiersToMaterials(materialInLayout).contains(materialAtLocation)) {
 | 
			
		||||
                    Stargate.debug("Gate::Matches", String.format("Block Type Mismatch: %s != %s",
 | 
			
		||||
                            materialAtLocation, materialInLayout));
 | 
			
		||||
                            materialAtLocation, MaterialHelper.specifiersToMaterials(materialInLayout)));
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user