diff --git a/README.md b/README.md index 9d12fcf..0e8956c 100644 --- a/README.md +++ b/README.md @@ -325,7 +325,8 @@ economy: useCost - The cost to use a stargate toOwner - Whether the money from gate-use goes to the owner or nobody chargeFreeDestination - Enable to make players pay for teleportation even if the destination is free - freeGatesGreen - Enable to make gates that won't cost the player money show up as green + freeGatesColored - Enable to make gates that won't cost the player money show up as green + freeGatesColor - This allows you to specify the color of the markings and name of free stargates debugging: debug - Whether to show massive debug output permissionDebug - Whether to show massive permission debug output @@ -396,6 +397,7 @@ portalInfoServer=Server: %server% - Excludes color codes from the counted character length to allow a colored, 13-character name - Makes portal names and networks case- and color-agnostic to prevent some confusion caused by typos or sloppy configuration +- Makes the free gate color configurable, and renames freeGatesGreen to freeGatesColored #### \[Version 0.9.1.2] EpicKnarvik97 fork diff --git a/src/main/java/net/knarcraft/stargate/command/ConfigTabCompleter.java b/src/main/java/net/knarcraft/stargate/command/ConfigTabCompleter.java index 046f4f2..8484322 100644 --- a/src/main/java/net/knarcraft/stargate/command/ConfigTabCompleter.java +++ b/src/main/java/net/knarcraft/stargate/command/ConfigTabCompleter.java @@ -86,6 +86,7 @@ public class ConfigTabCompleter implements TabCompleter { } case MAIN_SIGN_COLOR: case HIGHLIGHT_SIGN_COLOR: + case FREE_GATES_COLOR: //Return all colors return filterMatching(getColors(), typedText); } diff --git a/src/main/java/net/knarcraft/stargate/config/ConfigOption.java b/src/main/java/net/knarcraft/stargate/config/ConfigOption.java index da046b1..9bd6bf9 100644 --- a/src/main/java/net/knarcraft/stargate/config/ConfigOption.java +++ b/src/main/java/net/knarcraft/stargate/config/ConfigOption.java @@ -9,86 +9,144 @@ public enum ConfigOption { * The language used for player-interface text */ LANGUAGE("language", "The language used for all signs and all messages to players", "en"), + /** * The folder for portal files */ PORTAL_FOLDER("folders.portalFolder", "The folder containing the portal databases", "plugins/Stargate/portals/"), + /** * The folder for gate files */ GATE_FOLDER("folders.gateFolder", "The folder containing all gate files", "plugins/Stargate/gates/"), + /** * The max number of portals on a single network */ MAX_GATES_EACH_NETWORK("gates.maxGatesEachNetwork", "The max number of stargates in a single network", 0), + /** * The network used if not specified */ DEFAULT_GATE_NETWORK("gates.defaultGateNetwork", "The network used when no network is specified", "central"), + /** * Whether to remember the lastly used destination */ REMEMBER_DESTINATION("gates.cosmetic.rememberDestination", "Whether to remember the last destination used", false), + /** * Whether to sort the network destinations */ SORT_NETWORK_DESTINATIONS("gates.cosmetic.sortNetworkDestinations", "Whether to sort destinations by name", false), + /** * The main color to use for all signs */ MAIN_SIGN_COLOR("gates.cosmetic.mainSignColor", "The main text color of all stargate signs", "BLACK"), + /** * The color to use for highlighting sign text */ HIGHLIGHT_SIGN_COLOR("gates.cosmetic.highlightSignColor", "The text color used for highlighting stargate signs", "WHITE"), + /** * Whether to destroy portals when any blocks are broken by explosions */ DESTROYED_BY_EXPLOSION("gates.integrity.destroyedByExplosion", "Whether stargates should be destroyed by explosions", false), + /** * Whether to verify each portal's gate layout after each load */ VERIFY_PORTALS("gates.integrity.verifyPortals", "Whether to verify that portals match their gate layout on load", false), + /** * Whether to protect the entrance of portals */ PROTECT_ENTRANCE("gates.integrity.protectEntrance", "Whether to protect stargates' entrances", false), + /** * Whether to enable BungeeCord support */ ENABLE_BUNGEE("gates.functionality.enableBungee", "Whether to enable BungeeCord support", false), + /** * Whether to enable vehicle teleportation */ HANDLE_VEHICLES("gates.functionality.handleVehicles", "Whether to enable vehicle teleportation", true), + /** * Whether to enable teleportation of empty vehicles */ HANDLE_EMPTY_VEHICLES("gates.functionality.handleEmptyVehicles", "Whether to enable teleportation of empty vehicles", true), + /** * Whether to enable teleportation of creatures using vehicles */ HANDLE_CREATURE_TRANSPORTATION("gates.functionality.handleCreatureTransportation", "Whether to enable teleportation of vehicles containing non-player creatures", true), + /** * Whether to allow creatures to teleport alone, bypassing any access restrictions */ HANDLE_NON_PLAYER_VEHICLES("gates.functionality.handleNonPlayerVehicles", "Whether to enable teleportation of non-empty vehicles without a player", true), + /** * Whether to enable teleportations of creatures on a leash */ HANDLE_LEASHED_CREATURES("gates.functionality.handleLeashedCreatures", "Whether to enable players to teleport a creature on a leash", true), + + /** + * Whether to enable economy support for taking payment from players creating/destroying/using stargates + */ USE_ECONOMY("economy.useEconomy", "Whether to use economy to incur fees when stargates are used, created or destroyed", false), + + /** + * The cost of creating a new stargate + */ CREATE_COST("economy.createCost", "The cost of creating a new stargate", 0), + + /** + * The cost of destroying a stargate + */ DESTROY_COST("economy.destroyCost", "The cost of destroying a stargate. Negative to refund", 0), + + /** + * The cost of using (teleporting through) a stargate + */ USE_COST("economy.useCost", "The cost of using (teleporting through) a stargate", 0), + + /** + * Whether any payments should go to the stargate's owner + */ TO_OWNER("economy.toOwner", "Whether any teleportation fees should go to the owner of the used stargate", false), + + /** + * Whether to charge for using a stargate, even if its destination is free + */ CHARGE_FREE_DESTINATION("economy.chargeFreeDestination", "Whether to require payment if the destination is free, but the entrance stargate is not", true), - FREE_GATES_GREEN("economy.freeGatesGreen", "Whether to use green coloring to mark all free stargates", false), + + /** + * Whether to mark free gates with a different color + */ + FREE_GATES_COLORED("economy.freeGatesColored", "Whether to use coloring to mark all free stargates", false), + + /** + * The color to use for marking free stargates + */ + FREE_GATES_COLOR("economy.freeGatesColor", "The color to use for marking free stargates", "DARK_GREEN"), + + /** + * Whether to enable debug output + */ DEBUG("debugging.debug", "Whether to enable debugging output", false), + + /** + * Whether to enable debug output for debugging permissions + */ PERMISSION_DEBUG("debugging.permissionDebug", "Whether to enable permission debugging output", false); diff --git a/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java b/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java index 22ae241..6c645d8 100644 --- a/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/EconomyConfig.java @@ -2,10 +2,12 @@ package net.knarcraft.stargate.config; import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.portal.Portal; +import net.knarcraft.stargate.portal.PortalSignDrawer; import net.knarcraft.stargate.portal.property.gate.Gate; import net.knarcraft.stargate.utility.PermissionHelper; import net.milkbowl.vault.economy.Economy; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; @@ -28,7 +30,7 @@ public final class EconomyConfig { private int destroyCost = 0; private boolean toOwner = false; private boolean chargeFreeDestination = true; - private boolean freeGatesGreen = false; + private boolean freeGatesColored = false; /** * Instantiates a new economy config @@ -84,12 +86,12 @@ public final class EconomyConfig { } /** - * Gets whether free portals should be marked with green coloring + * Gets whether free portals should be marked with a different coloring * - * @return
Whether free portals should be green
+ * @returnWhether free portals should be colored
*/ - public boolean drawFreePortalsGreen() { - return freeGatesGreen; + public boolean drawFreePortalsColored() { + return freeGatesColored; } /** @@ -341,7 +343,14 @@ public final class EconomyConfig { setDefaultUseCost((Integer) configOptions.get(ConfigOption.USE_COST)); toOwner = (boolean) configOptions.get(ConfigOption.TO_OWNER); chargeFreeDestination = (boolean) configOptions.get(ConfigOption.CHARGE_FREE_DESTINATION); - freeGatesGreen = (boolean) configOptions.get(ConfigOption.FREE_GATES_GREEN); + freeGatesColored = (boolean) configOptions.get(ConfigOption.FREE_GATES_COLORED); + + try { + String freeColor = (String) configOptions.get(ConfigOption.FREE_GATES_COLOR); + PortalSignDrawer.setFreeColor(ChatColor.valueOf(freeColor.toUpperCase())); + } catch (IllegalArgumentException | NullPointerException ignored) { + PortalSignDrawer.setFreeColor(ChatColor.DARK_GREEN); + } } /** diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index f9e7144..88caa6a 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -309,9 +309,7 @@ public final class StargateConfig { FileConfiguration newConfig = Stargate.getInstance().getConfig(); boolean isMigrating = false; - if (newConfig.getString("lang") != null || - newConfig.getString("gates.integrity.ignoreEntrance") != null || - newConfig.getString("ignoreEntrance") != null) { + if (newConfig.getString("lang") != null || newConfig.getString("economy.freeGatesGreen") != null) { migrateConfig(newConfig); isMigrating = true; } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java index f14dd6b..f1640e0 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java @@ -188,7 +188,7 @@ public final class StargateGateConfig { * @param mainSignColorA string representing the main sign color
*/ private void loadSignColor(String mainSignColor, String highlightSignColor) { - if (mainSignColor != null) { + if (mainSignColor != null && highlightSignColor != null) { try { PortalSignDrawer.setColors(ChatColor.valueOf(mainSignColor.toUpperCase()), ChatColor.valueOf(highlightSignColor.toUpperCase())); diff --git a/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java b/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java index a09b732..2921bf8 100644 --- a/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java +++ b/src/main/java/net/knarcraft/stargate/portal/PortalSignDrawer.java @@ -15,7 +15,7 @@ public class PortalSignDrawer { private final Portal portal; private final static ChatColor errorColor = ChatColor.DARK_RED; - private final static ChatColor freeColor = ChatColor.DARK_GREEN; + private static ChatColor freeColor; private static ChatColor mainColor; private static ChatColor highlightColor; @@ -29,7 +29,7 @@ public class PortalSignDrawer { } /** - * Sets the main sign color + * Sets the main and highlighting sign colors * *The main sign color is used for most text on the sign, while the highlighting color is used for the markings * around portal names and network names ('>','<','-',')','(')
@@ -42,6 +42,15 @@ public class PortalSignDrawer { highlightColor = newHighlightColor; } + /** + * Sets the color to use for marking free stargates + * + * @param freeColorThe new color to use for marking free stargates
+ */ + public static void setFreeColor(ChatColor freeColor) { + PortalSignDrawer.freeColor = freeColor; + } + /** * Draws the sign of the portal this sign drawer is responsible for */ @@ -136,42 +145,42 @@ public class PortalSignDrawer { int maxIndex = destinations.getDestinations().size() - 1; int signLineIndex = 0; int destinationIndex = destinations.getDestinations().indexOf(portal.getDestinationName()); - boolean freeGatesGreen = Stargate.getEconomyConfig().useEconomy() && - Stargate.getEconomyConfig().drawFreePortalsGreen(); + boolean freeGatesColored = Stargate.getEconomyConfig().useEconomy() && + Stargate.getEconomyConfig().drawFreePortalsColored(); //Last, and not only entry. Draw the entry two back if ((destinationIndex == maxIndex) && (maxIndex > 1)) { - drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2); + drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex - 2); } //Not first entry. Draw the previous entry if (destinationIndex > 0) { - drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 1); + drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex - 1); } //Draw the chosen entry (line 2 or 3) - drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex); + drawNetworkSignChosenLine(freeGatesColored, sign, ++signLineIndex); //Has another entry and space on the sign if ((maxIndex >= destinationIndex + 1)) { - drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex + 1); + drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex + 1); } //Has another entry and space on the sign if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) { - drawNetworkSignLine(freeGatesGreen, sign, signLineIndex, destinationIndex + 2); + drawNetworkSignLine(freeGatesColored, sign, signLineIndex, destinationIndex + 2); } } /** * Draws the chosen destination on one sign line * - * @param freeGatesGreenWhether to display free gates in a green color
- * @param signThe sign to draw on
- * @param signLineIndexThe line to draw on
+ * @param freeGatesColoredWhether to display free gates in a different color
+ * @param signThe sign to draw on
+ * @param signLineIndexThe line to draw on
*/ - private void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex) { - if (freeGatesGreen) { + private void drawNetworkSignChosenLine(boolean freeGatesColored, Sign sign, int signLineIndex) { + if (freeGatesColored) { Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork()); - boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); - ChatColor nameColor = (green ? freeColor : highlightColor); - setLine(sign, signLineIndex, nameColor + ">" + (green ? freeColor : mainColor) + + boolean free = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); + ChatColor nameColor = (free ? freeColor : highlightColor); + setLine(sign, signLineIndex, nameColor + ">" + (free ? freeColor : mainColor) + fixColor(portal.getDestinationName()) + nameColor + "<"); } else { setLine(sign, signLineIndex, highlightColor + ">" + mainColor + @@ -193,18 +202,18 @@ public class PortalSignDrawer { /** * Draws one network destination on one sign line * - * @param freeGatesGreenWhether to display free gates in a green color
+ * @param freeGatesColoredWhether to display free gates in a different color
* @param signThe sign to draw on
* @param signLineIndexThe line to draw on
* @param destinationIndexThe index of the destination to draw
*/ - private void drawNetworkSignLine(boolean freeGatesGreen, Sign sign, int signLineIndex, int destinationIndex) { + private void drawNetworkSignLine(boolean freeGatesColored, Sign sign, int signLineIndex, int destinationIndex) { PortalActivator destinations = portal.getPortalActivator(); String destinationName = destinations.getDestinations().get(destinationIndex); - if (freeGatesGreen) { + if (freeGatesColored) { Portal destination = PortalHandler.getByName(destinationName, portal.getNetwork()); - boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); - setLine(sign, signLineIndex, (green ? freeColor : mainColor) + fixColor(destinationName)); + boolean free = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); + setLine(sign, signLineIndex, (free ? freeColor : mainColor) + fixColor(destinationName)); } else { setLine(sign, signLineIndex, mainColor + fixColor(destinationName)); } diff --git a/src/main/resources/config-migrations.txt b/src/main/resources/config-migrations.txt index 2de4df7..b38533f 100644 --- a/src/main/resources/config-migrations.txt +++ b/src/main/resources/config-migrations.txt @@ -24,4 +24,5 @@ usecost=economy.useCost toowner=economy.toOwner chargefreedestination=economy.chargeFreeDestination freegatesgreen=economy.freeGatesGreen -CheckUpdates= \ No newline at end of file +CheckUpdates= +economy.freeGatesGreen=economy.freeGatesColored \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index aa6aec7..4852940 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -27,7 +27,8 @@ # useCost - The cost to use a gate # toOwner - Whether the charge for using a gate goes to the gate's owner # chargeFreeDestination - Whether a gate whose destination is a free gate is still charged -# freeGatesGreen - Whether a free gate in the destination list is drawn green +# freeGatesColored - Whether a free gate in the destination list is marked with a color +# freeGatesColor - The color to use for marking free gates # I-------I-------I # # Debug options # # I-------I-------I # @@ -64,7 +65,8 @@ economy: useCost: 0 toOwner: false chargeFreeDestination: true - freeGatesGreen: false + freeGatesColored: false + freeGatesColor: DARK_GREEN debugging: debug: false permissionDebug: false \ No newline at end of file