Makes the free gate color configurable

This commit is contained in:
Kristian Knarvik 2021-11-15 00:35:28 +01:00
parent 4699f717ec
commit 10c3914a60
9 changed files with 117 additions and 37 deletions

View File

@ -325,7 +325,8 @@ economy:
useCost - The cost to use a stargate useCost - The cost to use a stargate
toOwner - Whether the money from gate-use goes to the owner or nobody 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 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: debugging:
debug - Whether to show massive debug output debug - Whether to show massive debug output
permissionDebug - Whether to show massive permission 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 - 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 - Makes portal names and networks case- and color-agnostic to prevent some confusion caused by typos or sloppy
configuration configuration
- Makes the free gate color configurable, and renames freeGatesGreen to freeGatesColored
#### \[Version 0.9.1.2] EpicKnarvik97 fork #### \[Version 0.9.1.2] EpicKnarvik97 fork

View File

@ -86,6 +86,7 @@ public class ConfigTabCompleter implements TabCompleter {
} }
case MAIN_SIGN_COLOR: case MAIN_SIGN_COLOR:
case HIGHLIGHT_SIGN_COLOR: case HIGHLIGHT_SIGN_COLOR:
case FREE_GATES_COLOR:
//Return all colors //Return all colors
return filterMatching(getColors(), typedText); return filterMatching(getColors(), typedText);
} }

View File

@ -9,86 +9,144 @@ public enum ConfigOption {
* The language used for player-interface text * The language used for player-interface text
*/ */
LANGUAGE("language", "The language used for all signs and all messages to players", "en"), LANGUAGE("language", "The language used for all signs and all messages to players", "en"),
/** /**
* The folder for portal files * The folder for portal files
*/ */
PORTAL_FOLDER("folders.portalFolder", "The folder containing the portal databases", "plugins/Stargate/portals/"), PORTAL_FOLDER("folders.portalFolder", "The folder containing the portal databases", "plugins/Stargate/portals/"),
/** /**
* The folder for gate files * The folder for gate files
*/ */
GATE_FOLDER("folders.gateFolder", "The folder containing all gate files", "plugins/Stargate/gates/"), GATE_FOLDER("folders.gateFolder", "The folder containing all gate files", "plugins/Stargate/gates/"),
/** /**
* The max number of portals on a single network * 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), MAX_GATES_EACH_NETWORK("gates.maxGatesEachNetwork", "The max number of stargates in a single network", 0),
/** /**
* The network used if not specified * The network used if not specified
*/ */
DEFAULT_GATE_NETWORK("gates.defaultGateNetwork", "The network used when no network is specified", "central"), DEFAULT_GATE_NETWORK("gates.defaultGateNetwork", "The network used when no network is specified", "central"),
/** /**
* Whether to remember the lastly used destination * Whether to remember the lastly used destination
*/ */
REMEMBER_DESTINATION("gates.cosmetic.rememberDestination", "Whether to remember the last destination used", false), REMEMBER_DESTINATION("gates.cosmetic.rememberDestination", "Whether to remember the last destination used", false),
/** /**
* Whether to sort the network destinations * Whether to sort the network destinations
*/ */
SORT_NETWORK_DESTINATIONS("gates.cosmetic.sortNetworkDestinations", "Whether to sort destinations by name", false), SORT_NETWORK_DESTINATIONS("gates.cosmetic.sortNetworkDestinations", "Whether to sort destinations by name", false),
/** /**
* The main color to use for all signs * The main color to use for all signs
*/ */
MAIN_SIGN_COLOR("gates.cosmetic.mainSignColor", "The main text color of all stargate signs", "BLACK"), MAIN_SIGN_COLOR("gates.cosmetic.mainSignColor", "The main text color of all stargate signs", "BLACK"),
/** /**
* The color to use for highlighting sign text * The color to use for highlighting sign text
*/ */
HIGHLIGHT_SIGN_COLOR("gates.cosmetic.highlightSignColor", "The text color used for highlighting stargate signs", "WHITE"), 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 * 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), 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 * 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), VERIFY_PORTALS("gates.integrity.verifyPortals", "Whether to verify that portals match their gate layout on load", false),
/** /**
* Whether to protect the entrance of portals * Whether to protect the entrance of portals
*/ */
PROTECT_ENTRANCE("gates.integrity.protectEntrance", "Whether to protect stargates' entrances", false), PROTECT_ENTRANCE("gates.integrity.protectEntrance", "Whether to protect stargates' entrances", false),
/** /**
* Whether to enable BungeeCord support * Whether to enable BungeeCord support
*/ */
ENABLE_BUNGEE("gates.functionality.enableBungee", "Whether to enable BungeeCord support", false), ENABLE_BUNGEE("gates.functionality.enableBungee", "Whether to enable BungeeCord support", false),
/** /**
* Whether to enable vehicle teleportation * Whether to enable vehicle teleportation
*/ */
HANDLE_VEHICLES("gates.functionality.handleVehicles", "Whether to enable vehicle teleportation", true), HANDLE_VEHICLES("gates.functionality.handleVehicles", "Whether to enable vehicle teleportation", true),
/** /**
* Whether to enable teleportation of empty vehicles * Whether to enable teleportation of empty vehicles
*/ */
HANDLE_EMPTY_VEHICLES("gates.functionality.handleEmptyVehicles", "Whether to enable teleportation of empty vehicles", true), HANDLE_EMPTY_VEHICLES("gates.functionality.handleEmptyVehicles", "Whether to enable teleportation of empty vehicles", true),
/** /**
* Whether to enable teleportation of creatures using vehicles * Whether to enable teleportation of creatures using vehicles
*/ */
HANDLE_CREATURE_TRANSPORTATION("gates.functionality.handleCreatureTransportation", HANDLE_CREATURE_TRANSPORTATION("gates.functionality.handleCreatureTransportation",
"Whether to enable teleportation of vehicles containing non-player creatures", true), "Whether to enable teleportation of vehicles containing non-player creatures", true),
/** /**
* Whether to allow creatures to teleport alone, bypassing any access restrictions * Whether to allow creatures to teleport alone, bypassing any access restrictions
*/ */
HANDLE_NON_PLAYER_VEHICLES("gates.functionality.handleNonPlayerVehicles", HANDLE_NON_PLAYER_VEHICLES("gates.functionality.handleNonPlayerVehicles",
"Whether to enable teleportation of non-empty vehicles without a player", true), "Whether to enable teleportation of non-empty vehicles without a player", true),
/** /**
* Whether to enable teleportations of creatures on a leash * Whether to enable teleportations of creatures on a leash
*/ */
HANDLE_LEASHED_CREATURES("gates.functionality.handleLeashedCreatures", HANDLE_LEASHED_CREATURES("gates.functionality.handleLeashedCreatures",
"Whether to enable players to teleport a creature on a leash", true), "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), 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), 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), 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), 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), 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", CHARGE_FREE_DESTINATION("economy.chargeFreeDestination",
"Whether to require payment if the destination is free, but the entrance stargate is not", true), "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), 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); PERMISSION_DEBUG("debugging.permissionDebug", "Whether to enable permission debugging output", false);

View File

@ -2,10 +2,12 @@ package net.knarcraft.stargate.config;
import net.knarcraft.stargate.Stargate; import net.knarcraft.stargate.Stargate;
import net.knarcraft.stargate.portal.Portal; import net.knarcraft.stargate.portal.Portal;
import net.knarcraft.stargate.portal.PortalSignDrawer;
import net.knarcraft.stargate.portal.property.gate.Gate; import net.knarcraft.stargate.portal.property.gate.Gate;
import net.knarcraft.stargate.utility.PermissionHelper; import net.knarcraft.stargate.utility.PermissionHelper;
import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.economy.Economy;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@ -28,7 +30,7 @@ public final class EconomyConfig {
private int destroyCost = 0; private int destroyCost = 0;
private boolean toOwner = false; private boolean toOwner = false;
private boolean chargeFreeDestination = true; private boolean chargeFreeDestination = true;
private boolean freeGatesGreen = false; private boolean freeGatesColored = false;
/** /**
* Instantiates a new economy config * 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 <p>Whether free portals should be green</p> * @return <p>Whether free portals should be colored</p>
*/ */
public boolean drawFreePortalsGreen() { public boolean drawFreePortalsColored() {
return freeGatesGreen; return freeGatesColored;
} }
/** /**
@ -341,7 +343,14 @@ public final class EconomyConfig {
setDefaultUseCost((Integer) configOptions.get(ConfigOption.USE_COST)); setDefaultUseCost((Integer) configOptions.get(ConfigOption.USE_COST));
toOwner = (boolean) configOptions.get(ConfigOption.TO_OWNER); toOwner = (boolean) configOptions.get(ConfigOption.TO_OWNER);
chargeFreeDestination = (boolean) configOptions.get(ConfigOption.CHARGE_FREE_DESTINATION); 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);
}
} }
/** /**

View File

@ -309,9 +309,7 @@ public final class StargateConfig {
FileConfiguration newConfig = Stargate.getInstance().getConfig(); FileConfiguration newConfig = Stargate.getInstance().getConfig();
boolean isMigrating = false; boolean isMigrating = false;
if (newConfig.getString("lang") != null || if (newConfig.getString("lang") != null || newConfig.getString("economy.freeGatesGreen") != null) {
newConfig.getString("gates.integrity.ignoreEntrance") != null ||
newConfig.getString("ignoreEntrance") != null) {
migrateConfig(newConfig); migrateConfig(newConfig);
isMigrating = true; isMigrating = true;
} }

View File

@ -188,7 +188,7 @@ public final class StargateGateConfig {
* @param mainSignColor <p>A string representing the main sign color</p> * @param mainSignColor <p>A string representing the main sign color</p>
*/ */
private void loadSignColor(String mainSignColor, String highlightSignColor) { private void loadSignColor(String mainSignColor, String highlightSignColor) {
if (mainSignColor != null) { if (mainSignColor != null && highlightSignColor != null) {
try { try {
PortalSignDrawer.setColors(ChatColor.valueOf(mainSignColor.toUpperCase()), PortalSignDrawer.setColors(ChatColor.valueOf(mainSignColor.toUpperCase()),
ChatColor.valueOf(highlightSignColor.toUpperCase())); ChatColor.valueOf(highlightSignColor.toUpperCase()));

View File

@ -15,7 +15,7 @@ public class PortalSignDrawer {
private final Portal portal; private final Portal portal;
private final static ChatColor errorColor = ChatColor.DARK_RED; 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 mainColor;
private static ChatColor highlightColor; private static ChatColor highlightColor;
@ -29,7 +29,7 @@ public class PortalSignDrawer {
} }
/** /**
* Sets the main sign color * Sets the main and highlighting sign colors
* *
* <p>The main sign color is used for most text on the sign, while the highlighting color is used for the markings * <p>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 ('>','<','-',')','(')</p> * around portal names and network names ('>','<','-',')','(')</p>
@ -42,6 +42,15 @@ public class PortalSignDrawer {
highlightColor = newHighlightColor; highlightColor = newHighlightColor;
} }
/**
* Sets the color to use for marking free stargates
*
* @param freeColor <p>The new color to use for marking free stargates</p>
*/
public static void setFreeColor(ChatColor freeColor) {
PortalSignDrawer.freeColor = freeColor;
}
/** /**
* Draws the sign of the portal this sign drawer is responsible for * 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 maxIndex = destinations.getDestinations().size() - 1;
int signLineIndex = 0; int signLineIndex = 0;
int destinationIndex = destinations.getDestinations().indexOf(portal.getDestinationName()); int destinationIndex = destinations.getDestinations().indexOf(portal.getDestinationName());
boolean freeGatesGreen = Stargate.getEconomyConfig().useEconomy() && boolean freeGatesColored = Stargate.getEconomyConfig().useEconomy() &&
Stargate.getEconomyConfig().drawFreePortalsGreen(); Stargate.getEconomyConfig().drawFreePortalsColored();
//Last, and not only entry. Draw the entry two back //Last, and not only entry. Draw the entry two back
if ((destinationIndex == maxIndex) && (maxIndex > 1)) { if ((destinationIndex == maxIndex) && (maxIndex > 1)) {
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 2); drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex - 2);
} }
//Not first entry. Draw the previous entry //Not first entry. Draw the previous entry
if (destinationIndex > 0) { if (destinationIndex > 0) {
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex - 1); drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex - 1);
} }
//Draw the chosen entry (line 2 or 3) //Draw the chosen entry (line 2 or 3)
drawNetworkSignChosenLine(freeGatesGreen, sign, ++signLineIndex); drawNetworkSignChosenLine(freeGatesColored, sign, ++signLineIndex);
//Has another entry and space on the sign //Has another entry and space on the sign
if ((maxIndex >= destinationIndex + 1)) { if ((maxIndex >= destinationIndex + 1)) {
drawNetworkSignLine(freeGatesGreen, sign, ++signLineIndex, destinationIndex + 1); drawNetworkSignLine(freeGatesColored, sign, ++signLineIndex, destinationIndex + 1);
} }
//Has another entry and space on the sign //Has another entry and space on the sign
if ((maxIndex >= destinationIndex + 2) && (++signLineIndex <= 3)) { 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 * Draws the chosen destination on one sign line
* *
* @param freeGatesGreen <p>Whether to display free gates in a green color</p> * @param freeGatesColored <p>Whether to display free gates in a different color</p>
* @param sign <p>The sign to draw on</p> * @param sign <p>The sign to draw on</p>
* @param signLineIndex <p>The line to draw on</p> * @param signLineIndex <p>The line to draw on</p>
*/ */
private void drawNetworkSignChosenLine(boolean freeGatesGreen, Sign sign, int signLineIndex) { private void drawNetworkSignChosenLine(boolean freeGatesColored, Sign sign, int signLineIndex) {
if (freeGatesGreen) { if (freeGatesColored) {
Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork()); Portal destination = PortalHandler.getByName(portal.getDestinationName(), portal.getNetwork());
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); boolean free = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
ChatColor nameColor = (green ? freeColor : highlightColor); ChatColor nameColor = (free ? freeColor : highlightColor);
setLine(sign, signLineIndex, nameColor + ">" + (green ? freeColor : mainColor) + setLine(sign, signLineIndex, nameColor + ">" + (free ? freeColor : mainColor) +
fixColor(portal.getDestinationName()) + nameColor + "<"); fixColor(portal.getDestinationName()) + nameColor + "<");
} else { } else {
setLine(sign, signLineIndex, highlightColor + ">" + mainColor + setLine(sign, signLineIndex, highlightColor + ">" + mainColor +
@ -193,18 +202,18 @@ public class PortalSignDrawer {
/** /**
* Draws one network destination on one sign line * Draws one network destination on one sign line
* *
* @param freeGatesGreen <p>Whether to display free gates in a green color</p> * @param freeGatesColored <p>Whether to display free gates in a different color</p>
* @param sign <p>The sign to draw on</p> * @param sign <p>The sign to draw on</p>
* @param signLineIndex <p>The line to draw on</p> * @param signLineIndex <p>The line to draw on</p>
* @param destinationIndex <p>The index of the destination to draw</p> * @param destinationIndex <p>The index of the destination to draw</p>
*/ */
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(); PortalActivator destinations = portal.getPortalActivator();
String destinationName = destinations.getDestinations().get(destinationIndex); String destinationName = destinations.getDestinations().get(destinationIndex);
if (freeGatesGreen) { if (freeGatesColored) {
Portal destination = PortalHandler.getByName(destinationName, portal.getNetwork()); Portal destination = PortalHandler.getByName(destinationName, portal.getNetwork());
boolean green = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination); boolean free = PermissionHelper.isFree(portal.getActivePlayer(), portal, destination);
setLine(sign, signLineIndex, (green ? freeColor : mainColor) + fixColor(destinationName)); setLine(sign, signLineIndex, (free ? freeColor : mainColor) + fixColor(destinationName));
} else { } else {
setLine(sign, signLineIndex, mainColor + fixColor(destinationName)); setLine(sign, signLineIndex, mainColor + fixColor(destinationName));
} }

View File

@ -24,4 +24,5 @@ usecost=economy.useCost
toowner=economy.toOwner toowner=economy.toOwner
chargefreedestination=economy.chargeFreeDestination chargefreedestination=economy.chargeFreeDestination
freegatesgreen=economy.freeGatesGreen freegatesgreen=economy.freeGatesGreen
CheckUpdates= CheckUpdates=
economy.freeGatesGreen=economy.freeGatesColored

View File

@ -27,7 +27,8 @@
# useCost - The cost to use a gate # useCost - The cost to use a gate
# toOwner - Whether the charge for using a gate goes to the gate's owner # 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 # 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 # # I-------I-------I #
# Debug options # # Debug options #
# I-------I-------I # # I-------I-------I #
@ -64,7 +65,8 @@ economy:
useCost: 0 useCost: 0
toOwner: false toOwner: false
chargeFreeDestination: true chargeFreeDestination: true
freeGatesGreen: false freeGatesColored: false
freeGatesColor: DARK_GREEN
debugging: debugging:
debug: false debug: false
permissionDebug: false permissionDebug: false