From 95308c8bc90a85d1920b39e04223733dc70980e0 Mon Sep 17 00:00:00 2001 From: taoneill Date: Sun, 23 Oct 2011 14:45:13 -0400 Subject: [PATCH] Closes gh-305. Added maxzones setting to prevent zonesmakers from making too many zones. Default is 12 - hopefully not many servers have that many warzones. --- .../main/java/bukkit/tommytony/war/War.java | 14 +++++++++++ .../java/com/tommytony/war/ZoneSetter.java | 24 +++++++++++++++---- .../com/tommytony/war/mappers/WarMapper.java | 9 ++++++- war/src/main/java/plugin.yml | 8 +++---- war/target/classes/plugin.yml | 8 +++---- 5 files changed, 50 insertions(+), 13 deletions(-) diff --git a/war/src/main/java/bukkit/tommytony/war/War.java b/war/src/main/java/bukkit/tommytony/war/War.java index 9e93637..8643a48 100644 --- a/war/src/main/java/bukkit/tommytony/war/War.java +++ b/war/src/main/java/bukkit/tommytony/war/War.java @@ -64,6 +64,7 @@ public class War extends JavaPlugin { private boolean disablePvpMessage = false; private boolean buildInZonesOnly = false; private boolean tntInZonesOnly = false; + private int maxZones = 12; private final List deadlyAdjectives = new ArrayList(); private final List killerVerbs = new ArrayList(); @@ -505,6 +506,10 @@ public class War extends JavaPlugin { this.setTntInZonesOnly(onOff.equals("on") || onOff.equals("true")); returnMessage.append(" tntinzonesonly set to " + String.valueOf(war.isTntInZonesOnly()) + "."); } + if (namedParams.containsKey("maxzones")) { + this.setMaxZones(Integer.parseInt(namedParams.get("maxzones"))); + returnMessage.append(" maxzones set to " + war.getMaxZones() + "."); + } if (namedParams.containsKey("lifepool")) { this.setDefaultLifepool(Integer.parseInt(namedParams.get("lifepool"))); @@ -728,6 +733,7 @@ public class War extends JavaPlugin { + " disablepvpmessage:" + global + String.valueOf(this.isDisablePvpMessage()) + normal + " buildinzonesonly:" + global + String.valueOf(this.isBuildInZonesOnly()) + normal + " tntinzonesonly:" + global + String.valueOf(this.isTntInZonesOnly()) + normal + + " maxzones:" + global + this.getMaxZones() + normal + " - Warzone defaults -" + " lifepool:" + color + this.getDefaultLifepool() + normal + " teamsize:" + color + this.getDefaultTeamCap() + normal @@ -1316,4 +1322,12 @@ public class War extends JavaPlugin { this.defaultSaturation = defaultSaturation; } + public void setMaxZones(int maxZones) { + this.maxZones = maxZones; + } + + public int getMaxZones() { + return maxZones; + } + } diff --git a/war/src/main/java/com/tommytony/war/ZoneSetter.java b/war/src/main/java/com/tommytony/war/ZoneSetter.java index 7d807fa..7883895 100644 --- a/war/src/main/java/com/tommytony/war/ZoneSetter.java +++ b/war/src/main/java/com/tommytony/war/ZoneSetter.java @@ -29,7 +29,11 @@ public class ZoneSetter { Block northwestBlock = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation()); StringBuilder msgString = new StringBuilder(); try { - if (warzone == null) { + if (warzone == null && War.war.getWarzones().size() >= War.war.getMaxZones()) { + // max warzones reached + War.war.badMsg(player, "Too many warzones already! To change the maximum, use /warcfg maxzone:20."); + return; + } else if (warzone == null) { // create the warzone warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName); warzone.addAuthor(player.getName()); @@ -70,7 +74,11 @@ public class ZoneSetter { Block southeastBlock = this.player.getLocation().getWorld().getBlockAt(this.player.getLocation()); StringBuilder msgString = new StringBuilder(); try { - if (warzone == null) { + if (warzone == null && War.war.getWarzones().size() >= War.war.getMaxZones()) { + // max warzones reached + War.war.badMsg(player, "Too many warzones already! To change the maximum, use /warcfg maxzone:20."); + return; + } else if (warzone == null) { // create the warzone warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName); warzone.addAuthor(player.getName()); @@ -113,7 +121,11 @@ public class ZoneSetter { Warzone warzone = War.war.findWarzone(this.zoneName); StringBuilder msgString = new StringBuilder(); try { - if (warzone == null) { + if (warzone == null && War.war.getWarzones().size() >= War.war.getMaxZones()) { + // max warzones reached + War.war.badMsg(player, "Too many warzones already! To change the maximum, use /warcfg maxzone:20."); + return; + } else if (warzone == null) { // create the warzone warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName); warzone.addAuthor(player.getName()); @@ -151,7 +163,11 @@ public class ZoneSetter { Warzone warzone = War.war.findWarzone(this.zoneName); StringBuilder msgString = new StringBuilder(); try { - if (warzone == null) { + if (warzone == null && War.war.getWarzones().size() >= War.war.getMaxZones()) { + // max warzones reached + War.war.badMsg(player, "Too many warzones already! To change the maximum, use /warcfg maxzone:20."); + return; + } else if (warzone == null) { // create the warzone warzone = new Warzone(this.player.getLocation().getWorld(), this.zoneName); warzone.addAuthor(player.getName()); diff --git a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java index b9d261d..26f1cdf 100644 --- a/war/src/main/java/com/tommytony/war/mappers/WarMapper.java +++ b/war/src/main/java/com/tommytony/war/mappers/WarMapper.java @@ -24,7 +24,6 @@ import com.tommytony.war.jobs.RestoreWarzonesJob; public class WarMapper { public static void load() { - // war.getLogger().info("Loading war config..."); (War.war.getDataFolder()).mkdir(); (new File(War.war.getDataFolder().getPath() + "/dat")).mkdir(); PropertiesFile warConfig = new PropertiesFile(War.war.getDataFolder().getPath() + "/war.txt"); @@ -109,6 +108,11 @@ public class WarMapper { } } } + + // maxZones + if (warConfig.keyExists("maxZones")) { + War.war.setMaxZones(warConfig.getInt("maxZones")); + } // defaultLifePool if (warConfig.keyExists("defaultLifePool")) { @@ -325,6 +329,9 @@ public class WarMapper { } warConfig.setString("defaultExtraLoadouts", defaultExtraLoadoutsStr); + // maxZones + warConfig.setInt("maxZones", War.war.getMaxZones()); + // defaultLifepool warConfig.setInt("defaultLifePool", War.war.getDefaultLifepool()); diff --git a/war/src/main/java/plugin.yml b/war/src/main/java/plugin.yml index bfd02f8..25a0d36 100644 --- a/war/src/main/java/plugin.yml +++ b/war/src/main/java/plugin.yml @@ -15,7 +15,7 @@ permissions: war.build: true war.pvp: true war.zonemaker: - description: Create and edit warzones, but you can't edit warzones that you are not the author of. + description: Create and edit warzones, but you only edit a warzone if you are its author. default: false children: war.player: true @@ -199,7 +199,7 @@ commands: Ex - /zonemaker /zonemaker -# War admin commands (must have the 'war.*' permission or be op) +# War admin commands (must have the 'war.*' permission or be an op) # War hub setwarhub: description: War> Create or moves a wall of portals. One portal per warzone. Warzones get a portal back to the warhub. @@ -226,7 +226,7 @@ commands: description: War> Change gobal settings and the default warzone configuration values. usage: Change gobal settings and the default warzone configuration values. Ex - - /setwarconfig pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off => Global settings, + /setwarconfig pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off maxzones:12 => Global settings, /setwarconfig lifepool:8 teamsize:5 maxscore:7 autoassign:on ff:on blockheads:on spawnstyle: unbreakable:on nocreatures:on disabled:on monumentheal:<0-20> flagreturn: flagpointsonly:false glasswalls:on pvpinzone:true instabreak:false nodrops:false nohunger:false saturation:<0-20> minplayers:1 minteams:1 => Warzone defaults, @@ -239,7 +239,7 @@ commands: description: War> Alias for /setwarconfig usage: Change gobal settings and the default warzone configuration values. Ex - - /warcfg pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off => Global settings, + /warcfg pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off maxzones:12 => Global settings, /warcfg lifepool:8 teamsize:5 maxscore:7 autoassign:on ff:on blockheads:on spawnstyle: unbreakable:on nocreatures:on disabled:on monumentheal:<0-20> flagreturn: flagpointsonly:false glasswalls:on pvpinzone:true instabreak:false nodrops:false nohunger:false saturation:<0-20> minplayers:1 minteams:1 => Warzone defaults, diff --git a/war/target/classes/plugin.yml b/war/target/classes/plugin.yml index bfd02f8..25a0d36 100644 --- a/war/target/classes/plugin.yml +++ b/war/target/classes/plugin.yml @@ -15,7 +15,7 @@ permissions: war.build: true war.pvp: true war.zonemaker: - description: Create and edit warzones, but you can't edit warzones that you are not the author of. + description: Create and edit warzones, but you only edit a warzone if you are its author. default: false children: war.player: true @@ -199,7 +199,7 @@ commands: Ex - /zonemaker /zonemaker -# War admin commands (must have the 'war.*' permission or be op) +# War admin commands (must have the 'war.*' permission or be an op) # War hub setwarhub: description: War> Create or moves a wall of portals. One portal per warzone. Warzones get a portal back to the warhub. @@ -226,7 +226,7 @@ commands: description: War> Change gobal settings and the default warzone configuration values. usage: Change gobal settings and the default warzone configuration values. Ex - - /setwarconfig pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off => Global settings, + /setwarconfig pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off maxzones:12 => Global settings, /setwarconfig lifepool:8 teamsize:5 maxscore:7 autoassign:on ff:on blockheads:on spawnstyle: unbreakable:on nocreatures:on disabled:on monumentheal:<0-20> flagreturn: flagpointsonly:false glasswalls:on pvpinzone:true instabreak:false nodrops:false nohunger:false saturation:<0-20> minplayers:1 minteams:1 => Warzone defaults, @@ -239,7 +239,7 @@ commands: description: War> Alias for /setwarconfig usage: Change gobal settings and the default warzone configuration values. Ex - - /warcfg pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off => Global settings, + /warcfg pvpinzonesonly:on buildinzonesonly:on disablepvpmessage:off tntinzonesonly:off maxzones:12 => Global settings, /warcfg lifepool:8 teamsize:5 maxscore:7 autoassign:on ff:on blockheads:on spawnstyle: unbreakable:on nocreatures:on disabled:on monumentheal:<0-20> flagreturn: flagpointsonly:false glasswalls:on pvpinzone:true instabreak:false nodrops:false nohunger:false saturation:<0-20> minplayers:1 minteams:1 => Warzone defaults,