From 4018ff1cc16f2fde92b437244c16ec56f0f41faf Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Fri, 16 Mar 2012 05:35:54 -0700 Subject: [PATCH] Implemented User Overrides --- .../metropolis/MetropolisPlugin.java | 130 ++++++++++++++++-- .../metropolis/UserOverride.java | 17 +++ .../commands/MetropolisHomeMoveCommand.java | 33 ++++- Metropolis/src/main/resources/config.yml | 14 +- Metropolis/src/main/resources/plugin.yml | 2 +- 5 files changed, 179 insertions(+), 17 deletions(-) create mode 100644 Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/UserOverride.java diff --git a/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/MetropolisPlugin.java b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/MetropolisPlugin.java index 4263666..3026726 100644 --- a/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/MetropolisPlugin.java +++ b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/MetropolisPlugin.java @@ -2,7 +2,9 @@ package com.majinnaibu.bukkitplugins.metropolis; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Set; import java.util.logging.Logger; import org.bukkit.Material; @@ -15,6 +17,7 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import org.bukkit.configuration.Configuration; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginDescriptionFile; @@ -60,6 +63,8 @@ public class MetropolisPlugin extends JavaPlugin { public RegionManager regionManager = null; private List _occupiedPlots; + private HashMap> _ownedPlots; + private HashMap _userOverrides; private PlayerJoinListener _playerJoinListener = null; @@ -90,6 +95,8 @@ public class MetropolisPlugin extends JavaPlugin { private boolean generateWall = false; private Material wallMaterial = Material.GLASS; private int wallHeight = 128; + int _maxPlots = 1; + int _plotMultiplier = 1; private Cuboid _spawnCuboid = null; private Cuboid _cityCuboid = null; @@ -106,6 +113,9 @@ public class MetropolisPlugin extends JavaPlugin { public void onEnable() { pdf = getDescription(); + _ownedPlots = new HashMap>(); + _userOverrides = new HashMap(); + if(DEBUG){log.info("Checking config");} Configuration config = getConfig(); if(!config.contains("version")){ @@ -113,13 +123,15 @@ public class MetropolisPlugin extends JavaPlugin { if(DEBUG){log.info("No config exists. Assuming new installation.");} }else{ int configVersion = safeGetIntFromConfig(config, "version"); - if(DEBUG){log.info(String.format("Updating config from version v%s to v%s.", configVersion, version));} - if(configVersion != version){ - //upgrade config - config.set("version", version); + if(configVersion < version){ + if(DEBUG){log.info(String.format("Updating config from version v%s to v%s.", configVersion, version));} + if(configVersion != version){ + //upgrade config + config.set("version", version); + } + saveConfig(); + if(DEBUG){log.info("Config updated");} } - saveConfig(); - if(DEBUG){log.info("Config updated");} } config.set("version", version); @@ -149,6 +161,11 @@ public class MetropolisPlugin extends JavaPlugin { wallMaterial = safeGetMaterialFromConfig(config, "wall.material"); wallHeight = safeGetIntFromConfig(config, "wall.material"); worldName = safeGetStringFromConfig(config, "worldname"); + _maxPlots = safeGetIntFromConfig(config, "plot.multiplier"); + _plotMultiplier = safeGetIntFromConfig(config, "plot.maxPerPlayer"); + + buildUserOverrides(); + saveConfig(); if(DEBUG){log.info("Done reading config.");} @@ -268,6 +285,44 @@ public class MetropolisPlugin extends JavaPlugin { RegisterCommandHandler("metropolis-plot-reserve", new MetropolisPlotReserveCommand(this)); } + private void buildUserOverrides() { + if(getConfig().isList("userOverrides")){ + List list = getConfig().getList("userOverrides"); + + for(Object o2 : list){ + if(o2 instanceof HashMap){ + HashMapmap = (HashMap)o2; + String username = ""; + if(map.containsKey("username")){ + Object o3 = map.get("username"); + if(o3 instanceof String){ + username = (String)o3; + } + } + + int plotMultiplier = _plotMultiplier; + if(map.containsKey("plotMultiplier")){ + Object o3 = map.get("plotMultiplier"); + if(o3 instanceof Integer){ + plotMultiplier = (Integer)o3; + } + } + + int maxPlots = _maxPlots; + if(map.containsKey("maxPlots")){ + Object o3 = map.get("maxPlots"); + if(o3 instanceof Integer){ + maxPlots = (Integer)o3; + } + } + + UserOverride override = new UserOverride(username, plotMultiplier, maxPlots); + _userOverrides.put(username, override); + } + } + } + } + private Cuboid getCuboid(int row, int col) { BlockVector min = getPlotMin(row, col); BlockVector max = getPlotMax(row, col); @@ -362,6 +417,7 @@ public class MetropolisPlugin extends JavaPlugin { private void fillOccupiedPlots(){ _occupiedPlots.clear(); + _ownedPlots.clear(); for(ProtectedRegion region: regionManager.getRegions().values()){ if(region instanceof ProtectedCuboidRegion){ @@ -375,9 +431,42 @@ public class MetropolisPlugin extends JavaPlugin { } } + for(ProtectedRegion region: regionManager.getRegions().values()){ + if(region instanceof ProtectedCuboidRegion){ + ProtectedCuboidRegion cuboidRegion = (ProtectedCuboidRegion) region; + if(cuboidRegion.getId().startsWith("h_")){ + int homeNum = 0; + String regionId = cuboidRegion.getId(); + try{ + if(regionId.indexOf('_', 2) > 2){ + homeNum = Integer.parseInt(regionId.substring(2, regionId.indexOf('_', 2))); + } + }catch(NumberFormatException ex){ + homeNum = 0; + } + + if(homeNum > 0){ + addOwnedPlot(regionId.substring(regionId.indexOf('_',2)), Plot.get(cuboidRegion)); + } + }else if(cuboidRegion.getId().startsWith("r_")){ + } + } + } + size=calculateCitySize(); } + private void addOwnedPlot(String substring, Plot plot) { + if(_ownedPlots.containsKey(substring)){ + List plots = _ownedPlots.get(substring); + plots.add(plot); + }else{ + List plots = new ArrayList(); + plots.add(plot); + _ownedPlots.put(substring, plots); + } + } + @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { return super.onCommand(sender, command, label, args); @@ -836,13 +925,24 @@ public class MetropolisPlugin extends JavaPlugin { } public int getNumPlots(String name) { - // TODO Auto-generated method stub - return 0; + if(_ownedPlots.containsKey(name)){ + List plots = _ownedPlots.get(name); + if(plots == null){ + return 0; + }else{ + return plots.size(); + } + }else{ + return 0; + } } public int getMaxPlots(String name) { - // TODO Auto-generated method stub - return 0; + if(_userOverrides.containsKey(name)){ + return _userOverrides.get(name).getMaxPlots(); + }else{ + return _maxPlots; + } } public void assignPlot(Player player) { @@ -864,4 +964,14 @@ public class MetropolisPlugin extends JavaPlugin { // TODO Auto-generated method stub return null; } + + public boolean homeExists(String name, int newHomeNumber) { + // TODO Auto-generated method stub + return false; + } + + public void setHome(String name, int newHomeNumber) { + // TODO Auto-generated method stub + + } } diff --git a/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/UserOverride.java b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/UserOverride.java new file mode 100644 index 0000000..0d15199 --- /dev/null +++ b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/UserOverride.java @@ -0,0 +1,17 @@ +package com.majinnaibu.bukkitplugins.metropolis; + +public class UserOverride { + private String _username; + private int _plotMultiplier; + private int _maxPlots; + + public String getUsername(){return _username;} + public int getPlotMultiplier(){return _plotMultiplier;} + public int getMaxPlots(){return _maxPlots;} + + public UserOverride(String username, int plotMultiplier, int maxPlots){ + _username = username; + _plotMultiplier = plotMultiplier; + _maxPlots = maxPlots; + } +} diff --git a/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/commands/MetropolisHomeMoveCommand.java b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/commands/MetropolisHomeMoveCommand.java index 1a6c269..47dce50 100644 --- a/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/commands/MetropolisHomeMoveCommand.java +++ b/Metropolis/src/main/java/com/majinnaibu/bukkitplugins/metropolis/commands/MetropolisHomeMoveCommand.java @@ -1,5 +1,6 @@ package com.majinnaibu.bukkitplugins.metropolis.commands; +import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -15,10 +16,38 @@ public class MetropolisHomeMoveCommand implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + OfflinePlayer player = null; + int newHomeNumber = 0; + if(sender instanceof OfflinePlayer){ + player = (OfflinePlayer)sender; + } - // TODO Auto-generated method stub - return false; + if(args.length == 1){ + try{ + newHomeNumber = Integer.parseInt(args[0]); + }catch(NumberFormatException ex){ + return false; + } + }else if(args.length >= 2){ + try{ + newHomeNumber = Integer.parseInt(args[0]); + }catch(NumberFormatException ex){ + return false; + } + + player = _plugin.getPlayer(args[1]); + }else{ + return false; + } + + if(player == null || !_plugin.homeExists(player.getName(), newHomeNumber)){ + return false; + } + + _plugin.setHome(player.getName(), newHomeNumber); + + return true; } } diff --git a/Metropolis/src/main/resources/config.yml b/Metropolis/src/main/resources/config.yml index e1632a0..0940268 100644 --- a/Metropolis/src/main/resources/config.yml +++ b/Metropolis/src/main/resources/config.yml @@ -1,6 +1,6 @@ plot: - sizeX: 32 sizeY: 256 - sizeZ: 32 ovvsetX: 0 offsetY: 0 offsetZ: 0 defaultMultiplier: 1 maxPerPlayer: 1 initial: 1 + sizeX: 32 sizeY: 256 + sizeZ: 32 ovvsetX: 0 offsetY: 0 offsetZ: 0 multiplier: 1 maxPerPlayer: 1 initial: 1 floor: generate: true clearSpaceAbove: 66 @@ -9,8 +9,7 @@ plot: generate: true material: 1 sign: - generate: true userOverrides: - username: majinnaibu plotMultiplier: 2 maxPlots: 2 - username: hoggrim plotMultiplier: 2 maxPlots: 2 -road: + generate: true road: width: 4 clearSpaceAbove: 66 level: 62 @@ -27,3 +26,10 @@ wall: material: 7 height: 66 worldname: world +userOverrides: + - username: majinnaibu + plotMultiplier: 2 + maxPlots: 2 + - username: hoggrim + plotMultiplier: 2 + maxPlots: 2 diff --git a/Metropolis/src/main/resources/plugin.yml b/Metropolis/src/main/resources/plugin.yml index b2e931e..8de8ab6 100644 --- a/Metropolis/src/main/resources/plugin.yml +++ b/Metropolis/src/main/resources/plugin.yml @@ -7,4 +7,4 @@ database: false commands: metropolis: description: This command displays the current metropolis version. - usage: /metropolis metropolis-home-generate: description: This command generates a home for a user as if they'd just logged in. permission: metropolis.home.generate usage: /metropolis-home-generate metropolis-home-list: description: This lists the regions managed by Metropolis permission: metropolis.home.list usage: /metropolis-home-list metropolis-home-evict: description: This unassigns a player's current home. permission: metropolis.home.evict usage: /metropolis-home-evict metropolis-home-move: description: This command swaps a player's current home with a reserved plot. permission: metropolis.home.move usage: /metropolis-home-move metropolis-home-go: description: Teleports the user or another player to his home. permission: metropolis.home.go usage: /metropolis-home-go metropolis-flag-reset: description: This command resets the WorldGuard flags for all managed regions (city and h_*). permission: metropolis.flag.reset usage: /metropolis-flag-reset metropolis-plot-reserve: description: This command reserves a plot so it won't be assigned as a home. permission: metropolis.plot.reserve usage: /metropolis-plot-reserve metropolis-plot-go: description: This command teleports the user or another player to a plot. permission: metropolis.plot.go usage: /metropolis-plot-go [playerName] metropolis-debug-generatetesthomes: description: This command is ignored on non-debug builds. permission: metropolis.debug usage: /metropolis-debug-gentesthomes \ No newline at end of file + usage: /metropolis metropolis-home-generate: description: This command generates a home for a user as if they'd just logged in. permission: metropolis.home.generate usage: /metropolis-home-generate metropolis-home-list: description: This lists the regions managed by Metropolis permission: metropolis.home.list usage: /metropolis-home-list metropolis-home-evict: description: This unassigns a player's current home. permission: metropolis.home.evict usage: /metropolis-home-evict metropolis-home-move: description: This command swaps a player's current home with a reserved plot. permission: metropolis.home.move usage: /metropolis-home-move [player] metropolis-home-go: description: Teleports the user or another player to his home. permission: metropolis.home.go usage: /metropolis-home-go metropolis-flag-reset: description: This command resets the WorldGuard flags for all managed regions (city and h_*). permission: metropolis.flag.reset usage: /metropolis-flag-reset metropolis-plot-reserve: description: This command reserves a plot so it won't be assigned as a home. permission: metropolis.plot.reserve usage: /metropolis-plot-reserve metropolis-plot-go: description: This command teleports the user or another player to a plot. permission: metropolis.plot.go usage: /metropolis-plot-go [playerName] metropolis-debug-generatetesthomes: description: This command is ignored on non-debug builds. permission: metropolis.debug usage: /metropolis-debug-gentesthomes \ No newline at end of file