diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java b/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java index 785201a..e392486 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalCreator.java @@ -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
The portal or null if its creation was denied
*/ @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(); diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java index ce90e7d..e27bd92 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalHandler.java @@ -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)); } /** diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalOpener.java b/src/main/java/net/knarcraft/stargate/portal/PortalOpener.java index aa2bcf3..1ff461d 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalOpener.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalOpener.java @@ -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(); } } diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java b/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java index 1948059..aed92cf 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalRegistry.java @@ -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 diff --git a/src/main/java/net/knarcraft/stargate/portal/property/PortalStructure.java b/src/main/java/net/knarcraft/stargate/portal/property/PortalStructure.java index ebf97f1..4308888 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/PortalStructure.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/PortalStructure.java @@ -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 - * - * @returnTrue if all control blocks were verified
- */ - 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 - * - * @returnTrue if this portal was verified
- */ - public boolean wasVerified() { - if (!Stargate.getGateConfig().verifyPortals()) { - return true; - } - return verified; - } - /** * Checks if all blocks in a gate matches the gate template * diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java index f405f11..7fe235c 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java @@ -88,16 +88,6 @@ public class Gate { return new HashMap<>(characterMaterialMap); } - /** - * Checks whether the given material is valid for control blocks - * - * @param materialThe material to check
- * @returnTrue if the material is valid for control blocks
- */ - 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 {