/** * Validates the sign's environment. * * @param signText * @return false to deny */ public static boolean validateEnvironment(CraftBookPlayer player, Vector pt, SignText signText) { ToggleArea area = new ToggleArea(player.getWorldType(), pt, signText); String activeID = area.getSignActiveStateID(); String inactiveID = area.getSignInactiveStateID(); String signNS = area.getSignNamespace(); String playerNS = StringUtil.trimLength(player.getName(), 15); boolean noInactiveCopy = inactiveID.equals("-"); if (!CopyManager.isValidName(activeID)) { player.printError("An invalid area name was indicated."); return false; } if (inactiveID.length() > 0 && !noInactiveCopy && !CopyManager.isValidName(inactiveID)) { player.printError("An invalid off state area name was indicated."); return false; } // Coerce the namespace to the player's name if (signNS.equals("") || signNS.equalsIgnoreCase(playerNS)) { signText.setLine3(playerNS); } else if (signNS.equals("@")) { if (!player.hasPermission("savensarea")) { player.printError("You are unable to make toggles for global areas."); return false; } } else { if (!player.hasPermission("savensarea")) { player.printError("You are unable to make toggles for global areas."); return false; } } if (area.isNewArea) { signText.setLine2("[Area]"); } else { signText.setLine2("[Toggle]"); } player.print("Area toggle created!"); return true; }
/** * Toggle the area. * * @param player * @param bag * @throws BlockSourceException */ public void playerToggle(CraftBookPlayer player, BlockBag bag) throws BlockSourceException { try { String namespace = getNamespace(); String activeID = getActiveStateID(); CuboidCopy copy = copyManager.load(namespace, activeID); if (!isNewArea && copy.distance(pt) > 4) { player.printError("This sign is too far away!"); return; } if (!copy.shouldClear()) { copy.paste(bag); } else { String inactiveID = getInactiveStateID(); if (inactiveID == null) { // Do nothing } else if (inactiveID.length() == 0) { copy.clear(bag); } else { copy = copyManager.load(namespace, inactiveID); copy.paste(bag); } } player.print("Toggled!"); } catch (InvalidSignNamespace e) { player.printError("The namespace on the sign is invalid."); } catch (InvalidSignStateID e) { player.printError("A copy ID on the sign is invalid."); } catch (MissingCuboidCopyException e) { player.printError("The '" + e.getCopyName() + "' area does not exist."); } catch (CuboidCopyException e) { player.printError("Could not load area: " + e.getMessage()); } catch (IOException e) { player.printError("Could not load area: " + e.getMessage()); } }