From 8d62966abcfb956ff30824e2a88546dfc7b5eb07 Mon Sep 17 00:00:00 2001 From: Jonathan Williams Date: Wed, 12 Nov 2014 05:13:16 -0800 Subject: [PATCH] Created Clans project. Converted Fields code complete (not tested). --- .../core/database/column/ColumnByte.java | 43 +++ .../core/database/column/ColumnDouble.java | 43 +++ Plugins/Mineplex.Game.Clans/.classpath | 12 + .../.externalToolBuilders/ClansBuilder.launch | 13 + Plugins/Mineplex.Game.Clans/.project | 27 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 + .../src/me/chiss/Core/Field/Field.java | 41 +++ .../src/me/chiss/Core/Field/FieldBlock.java | 271 ++++---------- .../me/chiss/Core/Field/FieldBlockData.java | 8 +- .../chiss/Core/Field/FieldBlockLootData.java | 0 .../src/me/chiss/Core/Field/FieldMonster.java | 174 +++++++++ .../chiss/Core/Field/FieldMonsterInput.java | 0 .../src/me/chiss/Core/Field/FieldOre.java | 122 ++----- .../src/me/chiss/Core/Field/FieldOreData.java | 0 .../Core/Field/Monsters/FieldMonsterBase.java | 10 +- .../src/me/chiss/Core/Field/UtilField.java | 0 .../Field/commands/FieldBlockCommand.java | 145 ++++++++ .../Field/commands/FieldMonsterCommand.java | 170 +++++++++ .../Core/Field/commands/FieldOreCommand.java | 60 ++++ .../Field/repository/FieldBlockToken.java | 14 + .../Field/repository/FieldMonsterToken.java | 13 + .../Core/Field/repository/FieldOreToken.java | 7 + .../Field/repository/FieldRepository.java | 182 ++++++++++ .../src/mineplex/game/clans/Clans.java | 147 ++++++++ .../src/me/chiss/Core/Field/Field.java | 69 ---- .../src/me/chiss/Core/Field/FieldMonster.java | 332 ------------------ .../Field/repository/FieldRepository.java | 72 ---- Website/LOCWebsite.suo | Bin 474624 -> 474624 bytes 28 files changed, 1214 insertions(+), 772 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnByte.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnDouble.java create mode 100644 Plugins/Mineplex.Game.Clans/.classpath create mode 100644 Plugins/Mineplex.Game.Clans/.externalToolBuilders/ClansBuilder.launch create mode 100644 Plugins/Mineplex.Game.Clans/.project create mode 100644 Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Field.java rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldBlock.java (60%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldBlockData.java (94%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldBlockLootData.java (100%) create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonster.java rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldMonsterInput.java (100%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldOre.java (73%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/FieldOreData.java (100%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java (93%) rename Plugins/{Nautilus.Game.PvP => Mineplex.Game.Clans}/src/me/chiss/Core/Field/UtilField.java (100%) create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldBlockCommand.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldMonsterCommand.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldOreCommand.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldBlockToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldMonsterToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldOreToken.java create mode 100644 Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldRepository.java create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java delete mode 100644 Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Field.java delete mode 100644 Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonster.java delete mode 100644 Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/repository/FieldRepository.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnByte.java b/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnByte.java new file mode 100644 index 000000000..40464a318 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnByte.java @@ -0,0 +1,43 @@ +package mineplex.core.database.column; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class ColumnByte extends Column +{ + public ColumnByte(String name) + { + super(name); + Value = (byte)0; + } + + public ColumnByte(String name, Byte value) + { + super(name, value); + } + + @Override + public String getCreateString() + { + return Name + " TINYINT"; + } + + @Override + public Byte getValue(ResultSet resultSet) throws SQLException + { + return resultSet.getByte(Name); + } + + @Override + public void setValue(PreparedStatement preparedStatement, int columnNumber) throws SQLException + { + preparedStatement.setLong(columnNumber, Value); + } + + @Override + public ColumnByte clone() + { + return new ColumnByte(Name, Value); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnDouble.java b/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnDouble.java new file mode 100644 index 000000000..1163df926 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/database/column/ColumnDouble.java @@ -0,0 +1,43 @@ +package mineplex.core.database.column; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class ColumnDouble extends Column +{ + public ColumnDouble(String name) + { + super(name); + Value = 0.0; + } + + public ColumnDouble(String name, Double value) + { + super(name, value); + } + + @Override + public String getCreateString() + { + return Name + " DOUBLE"; + } + + @Override + public Double getValue(ResultSet resultSet) throws SQLException + { + return resultSet.getDouble(Name); + } + + @Override + public void setValue(PreparedStatement preparedStatement, int columnNumber) throws SQLException + { + preparedStatement.setDouble(columnNumber, Value); + } + + @Override + public ColumnDouble clone() + { + return new ColumnDouble(Name, Value); + } +} diff --git a/Plugins/Mineplex.Game.Clans/.classpath b/Plugins/Mineplex.Game.Clans/.classpath new file mode 100644 index 000000000..dbcbd71a8 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Game.Clans/.externalToolBuilders/ClansBuilder.launch b/Plugins/Mineplex.Game.Clans/.externalToolBuilders/ClansBuilder.launch new file mode 100644 index 000000000..71b1d0ddd --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/.externalToolBuilders/ClansBuilder.launch @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Plugins/Mineplex.Game.Clans/.project b/Plugins/Mineplex.Game.Clans/.project new file mode 100644 index 000000000..f5ddd40a1 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/.project @@ -0,0 +1,27 @@ + + + Mineplex.Game.Clans + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/ClansBuilder.launch + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs b/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..7341ab168 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Field.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Field.java new file mode 100644 index 000000000..05b34120f --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Field.java @@ -0,0 +1,41 @@ +package me.chiss.Core.Field; + +import org.bukkit.plugin.java.JavaPlugin; + +import me.chiss.Core.Field.repository.FieldRepository; +import mineplex.core.MiniPlugin; +import mineplex.core.creature.Creature; +import mineplex.core.energy.Energy; +import mineplex.minecraft.game.core.condition.ConditionFactory; + +public class Field extends MiniPlugin +{ + private FieldBlock _block; + private FieldOre _ore; + private FieldMonster _mob; + + public Field(JavaPlugin plugin, Creature creature, ConditionFactory condition, Energy energy, String serverName) + { + super("Field Factory", plugin); + + FieldRepository repository = new FieldRepository(plugin); + _block = new FieldBlock(plugin, condition, energy, repository, serverName); + _ore = new FieldOre(plugin, repository, serverName); + _mob = new FieldMonster(plugin, repository, creature, serverName); + } + + public FieldBlock GetBlock() + { + return _block; + } + + public FieldOre GetOre() + { + return _ore; + } + + public FieldMonster GetMonster() + { + return _mob; + } +} diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlock.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlock.java similarity index 60% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlock.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlock.java index 72d0d1d47..726ddb4d9 100644 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlock.java +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlock.java @@ -4,8 +4,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.WeakHashMap; -import nautilus.minecraft.core.webserver.token.Server.FieldBlockToken; - import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -17,19 +15,26 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin; -import me.chiss.Core.Module.AModule; -import mineplex.core.server.IRepository; +import me.chiss.Core.Field.repository.FieldBlockToken; +import me.chiss.Core.Field.repository.FieldRepository; +import mineplex.core.MiniPlugin; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.Rank; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.energy.Energy; +import mineplex.minecraft.game.core.condition.ConditionFactory; -public class FieldBlock extends AModule +public class FieldBlock extends MiniPlugin { + private ConditionFactory _conditionFactory; + private Energy _energy; + private FieldRepository _repository; private HashMap _blocks; private HashSet _active = new HashSet(); @@ -44,183 +49,25 @@ public class FieldBlock extends AModule private String _serverName; - public FieldBlock(JavaPlugin plugin, IRepository repository, String serverName) + public FieldBlock(JavaPlugin plugin, ConditionFactory conditionFactory, Energy energy, FieldRepository repository, String serverName) { - super("Field Block", plugin, repository); - + super("Field Block", plugin); + + _conditionFactory = conditionFactory; + _energy = energy; + _repository = repository; _blocks = new HashMap(); _serverName = serverName; load(); } - - //Module Functions - @Override - public void enable() - { - - } - - @Override - public void disable() - { - clean(); - } - - @Override - public void config() - { - - } - - @Override - public void commands() - { - AddCommand("fb"); - } - - @Override - public void command(Player caller, String cmd, String[] args) - { - if (!Clients().Get(caller).Rank().Has(Rank.ADMIN, true)) - return; - - if (args.length == 0) - { - showSettings(caller); - return; - } - - if (args[0].equalsIgnoreCase("toggle")) - { - if (!_active.remove(caller.getName())) - _active.add(caller.getName()); - - UtilPlayer.message(caller, F.main(GetName(), "Interact Active: " + F.tf(_active.contains(caller.getName())))); - } - - else if (args[0].equalsIgnoreCase("load")) - { - load(); - UtilPlayer.message(caller, F.main(_moduleName, "Reloaded Field Blocks from Database.")); - } - - else if (args[0].equalsIgnoreCase("wipe")) - { - wipe(caller); - } - - else if (args[0].equalsIgnoreCase("help")) - { - help(caller); - } - - else if (args.length <= 1) - { - help(caller); - } - - else if (args[0].equalsIgnoreCase("title")) - { - _title.put(caller, args[1]); - showSettings(caller); - } - - else if (args[0].equalsIgnoreCase("stock")) - { - try - { - int count = Integer.parseInt(args[1]); - if (count < 1) count = 1; - _stock.put(caller, count); - showSettings(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Stock Max.")); - } - } - - else if (args[0].equalsIgnoreCase("regen")) - { - try - { - double regen = Double.parseDouble(args[1]); - if (regen < 0) regen = 0; - _regen.put(caller, UtilMath.trim(1, regen)); - showSettings(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Stock Regeneration Time.")); - } - } - - else if (args[0].equalsIgnoreCase("empty")) - { - try - { - String[] toks = args[1].split(":"); - - int id = Integer.parseInt(toks[0]); - byte data = Byte.parseByte(toks[1]); - - _emptyId.put(caller, id); - _emptyData.put(caller, data); - showSettings(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Empty Block.")); - } - } - - - else if (args[0].equalsIgnoreCase("loot")) - { - boolean error = false; - for (String cur : args[1].split(",")) - { - String[] loot = cur.split(":"); - - if (loot.length != 5) - { - error = true; - break; - } - - try - { - Integer.parseInt(loot[0]); - Byte.parseByte(loot[1]); - Integer.parseInt(loot[2]); - Integer.parseInt(loot[3]); - Integer.parseInt(loot[4]); - } - catch (Exception e) - { - error = true; - break; - } - } - - if (error) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Loot String.")); - return; - } - - _lootString.put(caller, args[1]); - showSettings(caller); - } - } - - private void showSettings(Player caller) + + public void showSettings(Player caller) { populateSettings(caller); - UtilPlayer.message(caller, F.main(_moduleName, "Field Addition Settings;")); + UtilPlayer.message(caller, F.main(GetName(), "Field Addition Settings;")); UtilPlayer.message(caller, F.desc("Title", _title.get(caller))); UtilPlayer.message(caller, F.desc("Stock", _stock.get(caller)+"")); UtilPlayer.message(caller, F.desc("Regen", _regen.get(caller)+"")); @@ -257,34 +104,31 @@ public class FieldBlock extends AModule if (event.getPlayer().getItemInHand() != null && event.getPlayer().getItemInHand().getType().toString().contains("PICKAXE")) { - if (Util().Event().isAction(event, ActionType.R_BLOCK)) + if (UtilEvent.isAction(event, ActionType.R_BLOCK)) showBlock(event.getPlayer(), event); } - else if (Util().Gear().isMat(event.getPlayer().getItemInHand(), Material.GLOWSTONE_DUST)) + else if (UtilGear.isMat(event.getPlayer().getItemInHand(), Material.GLOWSTONE_DUST)) { - if (Util().Event().isAction(event, ActionType.L_BLOCK)) + if (UtilEvent.isAction(event, ActionType.L_BLOCK)) addBlock(event.getPlayer(), event); - else if (Util().Event().isAction(event, ActionType.R)) + else if (UtilEvent.isAction(event, ActionType.R)) glowBlocks(event.getPlayer(), event); } - else if (Util().Gear().isMat(event.getPlayer().getItemInHand(), Material.REDSTONE)) + else if (UtilGear.isMat(event.getPlayer().getItemInHand(), Material.REDSTONE)) { - if (Util().Event().isAction(event, ActionType.L_BLOCK)) + if (UtilEvent.isAction(event, ActionType.L_BLOCK)) delBlock(event.getPlayer(), event); - else if (Util().Event().isAction(event, ActionType.R)) + else if (UtilEvent.isAction(event, ActionType.R)) glowBlocks(event.getPlayer(), event); } } private void glowBlocks(Player player, PlayerInteractEvent event) { - if (!Clients().Get(player).Rank().Has(Rank.ADMIN, false)) - return; - load(); for (FieldBlockData cur : _blocks.values()) @@ -293,12 +137,12 @@ public class FieldBlock extends AModule event.setCancelled(true); } - private void wipe(Player player) + public void wipe(Player player) { for (FieldBlockData cur : _blocks.values()) { cur.setEmpty(); - GetRepository().DeleteFieldBlock(_serverName, UtilWorld.locToStr(cur.getLocation())); + _repository.deleteFieldBlock(_serverName, UtilWorld.locToStr(cur.getLocation())); } _blocks.clear(); @@ -308,10 +152,7 @@ public class FieldBlock extends AModule private void delBlock(Player player, PlayerInteractEvent event) { - if (!Clients().Get(player).Rank().Has(Rank.ADMIN, false)) - return; - - GetRepository().DeleteFieldBlock(_serverName, UtilWorld.locToStr(event.getClickedBlock().getLocation())); + _repository.deleteFieldBlock(_serverName, UtilWorld.locToStr(event.getClickedBlock().getLocation())); //Inform event.getClickedBlock().getWorld().playEffect(event.getClickedBlock().getLocation(), Effect.STEP_SOUND, 42); @@ -322,9 +163,6 @@ public class FieldBlock extends AModule private void addBlock(Player player, PlayerInteractEvent event) { - if (!Clients().Get(player).Rank().Has(Rank.ADMIN, false)) - return; - populateSettings(player); showSettings(player); @@ -340,7 +178,7 @@ public class FieldBlock extends AModule token.StockRegenTime = _regen.get(player); token.Loot = _lootString.get(player); - GetRepository().AddFieldBlock(token); + _repository.addFieldBlock(token); //Inform event.getClickedBlock().getWorld().playEffect(event.getClickedBlock().getLocation(), Effect.STEP_SOUND, 41); @@ -388,7 +226,7 @@ public class FieldBlock extends AModule { clean(); - for (FieldBlockToken token : GetRepository().GetFieldBlocks(_serverName)) + for (FieldBlockToken token : _repository.getFieldBlocks(_serverName)) { Location loc = UtilWorld.strToLoc(token.Location); _blocks.put(token.Location, new FieldBlockData(this, loc, token.BlockId, token.BlockData, token.EmptyId, token.EmptyData, token.StockMax, token.StockRegenTime, token.Loot)); @@ -409,5 +247,50 @@ public class FieldBlock extends AModule return _blocks.get(UtilWorld.locToStr(block.getLocation())); return null; + } + + public Energy getEnergy() + { + return _energy; + } + + public HashSet getActive() + { + return _active; + } + + public WeakHashMap getLootString() + { + return _lootString; + } + + public WeakHashMap getEmptyId() + { + return _emptyId; + } + + public WeakHashMap getEmptyData() + { + return _emptyData; + } + + public WeakHashMap getRegen() + { + return _regen; + } + + public WeakHashMap getStock() + { + return _stock; + } + + public WeakHashMap getTitle() + { + return null; + } + + public ConditionFactory getCondition() + { + return _conditionFactory; } } diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlockData.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlockData.java similarity index 94% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlockData.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlockData.java index 8dc5afe28..8fd91b4af 100644 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlockData.java +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlockData.java @@ -53,7 +53,7 @@ public class FieldBlockData if (loot.length != 5) { - Field.Log("Loot Failure: " + cur); + System.out.println("Loot Failure: " + cur); continue; } @@ -68,7 +68,7 @@ public class FieldBlockData } catch (Exception e) { - Field.Log("Loot Failure: " + cur); + System.out.println("Loot Failure: " + cur); } } @@ -129,7 +129,7 @@ public class FieldBlockData public void handleMined(Player player) { - if (!Field.Energy().use(player, "Mine Field Block", 60, true, true)) + if (!Field.getEnergy().Use(player, "Mine Field Block", 60, true, true)) return; //Set Break Time - Avoid Instant Regen @@ -151,7 +151,7 @@ public class FieldBlockData } //Slow - Field.Condition().Factory().Slow("Field Slow", player, player, 6, 1, false, true, false); + Field.getCondition().Slow("Field Slow", player, player, 6, 1, false, true, false, false); } public boolean tryMine() diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlockLootData.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlockLootData.java similarity index 100% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldBlockLootData.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldBlockLootData.java diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonster.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonster.java new file mode 100644 index 000000000..417e3e353 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonster.java @@ -0,0 +1,174 @@ +package me.chiss.Core.Field; + +import java.util.HashSet; +import java.util.WeakHashMap; + +import org.bukkit.Location; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.creature.Creature; +import me.chiss.Core.Field.Monsters.FieldMonsterBase; +import me.chiss.Core.Field.repository.FieldMonsterToken; +import me.chiss.Core.Field.repository.FieldRepository; + +public class FieldMonster extends MiniPlugin +{ + private Creature _creature; + private FieldRepository _repository; + private HashSet _pits; + private String _serverName; + + private WeakHashMap _input = new WeakHashMap(); + + public FieldMonster(JavaPlugin plugin, FieldRepository repository, Creature creature, String serverName) + { + super("Field Monster", plugin); + + _repository = repository; + _creature = creature; + _pits = new HashSet(); + _serverName = serverName; + + Load(); + } + + public void Help(Player caller) + { + UtilPlayer.message(caller, F.main(GetName(), "Commands List;")); + UtilPlayer.message(caller, F.help("/fm type ", "Set Monster Type", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm max <#>", "Set Monster Limit", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm rate ", "Set Monster Rate", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm radius <#>", "Set Area Radius", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm height <#>", "Set Area Height", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm create ", "Create at your Location", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm delete ", "Delete Field", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm list", "List Monster Fields", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm info ", "Display Monster Field", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm kill", "Kills all Field Monsters", Rank.ADMIN)); + UtilPlayer.message(caller, F.help("/fm wipe", "Delete All Monster Field (Database)", Rank.ADMIN)); + } + + public void Create(Player caller, String name) + { + FieldMonsterInput input = _input.get(caller); + + if (input.type == null) + { + UtilPlayer.message(caller, F.main(GetName(), "You have not set Monster Type.")); + return; + } + + for (FieldMonsterBase pit : _pits) + { + if (name.equalsIgnoreCase(pit.GetName())) + { + UtilPlayer.message(caller, F.main(GetName(), "Monster Field with this name already exists.")); + return; + } + } + + FieldMonsterBase pit = new FieldMonsterBase(this, name, _serverName, input.type, input.mobMax, input.mobRate, caller.getLocation(), input.radius, input.height); + Add(pit, true); + + UtilPlayer.message(caller, F.main(GetName(), "You created Monster Field.")); + pit.Display(caller); + } + + private void Add(FieldMonsterBase pit, boolean repo) + { + UtilServer.getServer().getPluginManager().registerEvents(pit, GetPlugin()); + _pits.add(pit); + + if (repo) + _repository.addFieldMonster(pit.GetToken()); + } + + public void Delete(Player caller, String name) + { + HashSet remove = new HashSet(); + + for (FieldMonsterBase pit : _pits) + if (pit.GetName().equalsIgnoreCase(name)) + remove.add(pit); + + int i = remove.size(); + + for (FieldMonsterBase pit : remove) + Delete(pit, true); + + UtilPlayer.message(caller, F.main(GetName(), "Deleted " + i + " Monster Field(s).")); + } + + private void Delete(FieldMonsterBase pit, boolean repo) + { + _pits.remove(pit); + pit.RemoveMonsters(); + HandlerList.unregisterAll(pit); + + if (repo) + _repository.deleteFieldMonster(_serverName, pit.GetToken().Name); + } + + public void Wipe(Player player, boolean repo) + { + HashSet remove = new HashSet(); + + for (FieldMonsterBase pit : _pits) + remove.add(pit); + + _pits.clear(); + + for (FieldMonsterBase pit : remove) + Delete(pit, repo); + + UtilPlayer.message(player, F.main(_moduleName, "Field Monsters Wiped.")); + } + + private void Load() + { + Wipe(null, false); + + for (FieldMonsterToken token : _repository.getFieldMonsters(_serverName)) + { + EntityType type = UtilEnt.searchEntity(null, token.Type, false); + if (type == null) continue; + + Location loc = UtilWorld.strToLoc(token.Centre); + if (loc == null) continue; + + FieldMonsterBase pit = new FieldMonsterBase(this, token.Name, _serverName, type, token.MobMax, token.MobRate, loc, token.Radius, token.Height); + Add(pit, false); + } + } + + private void Clean() + { + for (FieldMonsterBase pit : _pits) + pit.RemoveMonsters(); + } + + public WeakHashMap getInput() + { + return _input; + } + + public HashSet getPits() + { + return _pits; + } + + public Creature getCreature() + { + return _creature; + } +} diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonsterInput.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonsterInput.java similarity index 100% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonsterInput.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldMonsterInput.java diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldOre.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldOre.java similarity index 73% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldOre.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldOre.java index c64bf2609..e6a510ff9 100644 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldOre.java +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldOre.java @@ -3,8 +3,6 @@ package me.chiss.Core.Field; import java.util.ArrayList; import java.util.HashSet; -import nautilus.minecraft.core.webserver.token.Server.FieldOreToken; - import org.bukkit.Effect; import org.bukkit.Location; import org.bukkit.Material; @@ -16,20 +14,24 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin; -import me.chiss.Core.Module.AModule; -import mineplex.core.server.IRepository; +import me.chiss.Core.Field.repository.FieldOreToken; +import me.chiss.Core.Field.repository.FieldRepository; +import mineplex.core.MiniPlugin; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.Rank; import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilGear; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; import mineplex.core.common.util.UtilEvent.ActionType; -public class FieldOre extends AModule +public class FieldOre extends MiniPlugin { + private FieldRepository _repository; private HashSet _active = new HashSet(); private ArrayList _oreInactive = new ArrayList(); @@ -42,86 +44,15 @@ public class FieldOre extends AModule private String _serverName; - public FieldOre(JavaPlugin plugin, IRepository repository, String serverName) + public FieldOre(JavaPlugin plugin, FieldRepository repository, String serverName) { - super("Field Ore", plugin, repository); + super("Field Ore", plugin); + _repository = repository; _serverName = serverName; load(); } - - @Override - public void enable() - { - - } - - @Override - public void disable() - { - clean(); - } - - @Override - public void config() - { - - } - - @Override - public void commands() - { - AddCommand("fo"); - } - - @Override - public void command(Player caller, String cmd, String[] args) - { - if (!Clients().Get(caller).Rank().Has(Rank.ADMIN, true)) - return; - - if (args.length == 0) - { - help(caller); - return; - } - - if (args[0].equalsIgnoreCase("toggle")) - { - if (!_active.remove(caller.getName())) - _active.add(caller.getName()); - - UtilPlayer.message(caller, F.main(GetName(), "Interact Active: " + F.tf(_active.contains(caller.getName())))); - } - - else if (args[0].equalsIgnoreCase("help")) - { - help(caller); - } - - else if (args[0].equalsIgnoreCase("reset")) - { - reset(caller); - } - - else if (args[0].equalsIgnoreCase("fill")) - { - fill(caller); - } - - else if (args[0].equalsIgnoreCase("list")) - { - list(caller); - } - - else if (args[0].equalsIgnoreCase("wipe")) - { - wipe(caller); - } - - - } public void help(Player caller) { @@ -139,17 +70,17 @@ public class FieldOre extends AModule if (!_active.contains(event.getPlayer().getName())) return; - if (Util().Gear().isMat(event.getPlayer().getItemInHand(), Material.DIAMOND)) + if (UtilGear.isMat(event.getPlayer().getItemInHand(), Material.DIAMOND)) { - if (Util().Event().isAction(event, ActionType.L)) + if (UtilEvent.isAction(event, ActionType.L)) addBlock(event.getPlayer(), event); - else if (Util().Event().isAction(event, ActionType.R_BLOCK)) + else if (UtilEvent.isAction(event, ActionType.R_BLOCK)) delBlock(event.getPlayer(), event); } } - private void reset(Player player) + public void reset(Player player) { for (FieldOreData ore : _oreActive) { @@ -162,7 +93,7 @@ public class FieldOre extends AModule UtilPlayer.message(player, F.main(_moduleName, "Field Ore Reset.")); } - private void fill(Player player) + public void fill(Player player) { while (!_oreInactive.isEmpty()) _oreInactive.get(UtilMath.r(_oreInactive.size())).StartVein(2 + UtilMath.r(5)); @@ -170,20 +101,20 @@ public class FieldOre extends AModule UtilPlayer.message(player, F.main(_moduleName, "Field Ore Generated.")); } - private void list(Player player) + public void list(Player player) { UtilPlayer.message(player, F.main(_moduleName, F.value("Total", ""+_oreLocations.size()))); UtilPlayer.message(player, F.main(_moduleName, F.value("Active", ""+_oreActive.size()))); UtilPlayer.message(player, F.main(_moduleName, F.value("Inactive", ""+_oreInactive.size()))); } - private void wipe(Player player) + public void wipe(Player player) { reset(player); for (Location loc : _oreLocations) { - GetRepository().DeleteFieldOre(_serverName, UtilWorld.locToStr(loc)); + _repository.deleteFieldOre(_serverName, UtilWorld.locToStr(loc)); } _oreInactive.clear(); @@ -194,9 +125,6 @@ public class FieldOre extends AModule private void addBlock(Player player, PlayerInteractEvent event) { - if (!Clients().Get(player).Rank().Has(Rank.ADMIN, false)) - return; - Block block = player.getTargetBlock(null, 0); if (Get(block.getLocation()) != null) @@ -209,7 +137,7 @@ public class FieldOre extends AModule FieldOreToken token = new FieldOreToken(); token.Server = _serverName; token.Location = UtilWorld.locToStr(block.getLocation()); - GetRepository().AddFieldOre(token); + _repository.addFieldOre(token); //Memory _oreInactive.add(new FieldOreData(this, block.getLocation())); @@ -223,9 +151,6 @@ public class FieldOre extends AModule private void delBlock(Player player, PlayerInteractEvent event) { - if (!Clients().Get(player).Rank().Has(Rank.ADMIN, false)) - return; - event.setCancelled(true); FieldOreData ore = Get(event.getPlayer().getTargetBlock(null, 0).getLocation()); @@ -236,7 +161,7 @@ public class FieldOre extends AModule return; } - GetRepository().DeleteFieldOre(_serverName, UtilWorld.locToStr(event.getClickedBlock().getLocation())); + _repository.deleteFieldOre(_serverName, UtilWorld.locToStr(event.getClickedBlock().getLocation())); ore.GetLocation().getBlock().setType(Material.STONE); @@ -320,7 +245,7 @@ public class FieldOre extends AModule { clean(); - for (FieldOreToken token : GetRepository().GetFieldOres(_serverName)) + for (FieldOreToken token : _repository.getFieldOres(_serverName)) { Location loc = UtilWorld.strToLoc(token.Location); @@ -337,4 +262,9 @@ public class FieldOre extends AModule _oreActive.clear(); _oreLocations.clear(); } + + public HashSet getActivePlayers() + { + return _active; + } } diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldOreData.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldOreData.java similarity index 100% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldOreData.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/FieldOreData.java diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java similarity index 93% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java index 766fc4c5d..3ec4965ba 100644 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/Monsters/FieldMonsterBase.java @@ -6,6 +6,7 @@ import java.util.HashSet; import me.chiss.Core.Field.FieldMonster; import me.chiss.Core.Field.UtilField; +import me.chiss.Core.Field.repository.FieldMonsterToken; import mineplex.core.updater.event.UpdateEvent; import mineplex.core.updater.UpdateType; import mineplex.core.common.util.F; @@ -14,13 +15,12 @@ import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilWorld; -import nautilus.minecraft.core.webserver.token.Server.FieldMonsterToken; -import net.minecraft.server.v1_6_R3.EntityCreature; -import net.minecraft.server.v1_6_R3.Navigation; +import net.minecraft.server.v1_7_R4.EntityCreature; +import net.minecraft.server.v1_7_R4.Navigation; import org.bukkit.Location; import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_6_R3.entity.CraftCreature; +import org.bukkit.craftbukkit.v1_7_R4.entity.CraftCreature; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; @@ -84,7 +84,7 @@ public class FieldMonsterBase implements Listener _mobLast = System.currentTimeMillis(); - Entity ent = Manager.Creature().SpawnEntity(SelectLocation(), _type); + Entity ent = Manager.getCreature().SpawnEntity(SelectLocation(), _type); _mobs.put(ent, 0); } diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/UtilField.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/UtilField.java similarity index 100% rename from Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/UtilField.java rename to Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/UtilField.java diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldBlockCommand.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldBlockCommand.java new file mode 100644 index 000000000..1b3fdbfff --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldBlockCommand.java @@ -0,0 +1,145 @@ +package me.chiss.Core.Field.commands; + +import org.bukkit.entity.Player; + +import me.chiss.Core.Field.FieldBlock; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilPlayer; + +public class FieldBlockCommand extends CommandBase +{ + public FieldBlockCommand(FieldBlock plugin) + { + super(plugin, Rank.ADMIN, "fb"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args[0].equalsIgnoreCase("toggle")) + { + if (!Plugin.getActive().remove(caller.getName())) + Plugin.getActive().add(caller.getName()); + + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Interact Active: " + F.tf(Plugin.getActive().contains(caller.getName())))); + } + + else if (args[0].equalsIgnoreCase("load")) + { + Plugin.load(); + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Reloaded Field Blocks from Database.")); + } + + else if (args[0].equalsIgnoreCase("wipe")) + { + Plugin.wipe(caller); + } + + else if (args[0].equalsIgnoreCase("help")) + { + Plugin.help(caller); + } + + else if (args.length <= 1) + { + Plugin.help(caller); + } + + else if (args[0].equalsIgnoreCase("title")) + { + Plugin.getTitle().put(caller, args[1]); + Plugin.showSettings(caller); + } + + else if (args[0].equalsIgnoreCase("stock")) + { + try + { + int count = Integer.parseInt(args[1]); + if (count < 1) count = 1; + Plugin.getStock().put(caller, count); + Plugin.showSettings(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Stock Max.")); + } + } + + else if (args[0].equalsIgnoreCase("regen")) + { + try + { + double regen = Double.parseDouble(args[1]); + if (regen < 0) regen = 0; + Plugin.getRegen().put(caller, UtilMath.trim(1, regen)); + Plugin.showSettings(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Stock Regeneration Time.")); + } + } + + else if (args[0].equalsIgnoreCase("empty")) + { + try + { + String[] toks = args[1].split(":"); + + int id = Integer.parseInt(toks[0]); + byte data = Byte.parseByte(toks[1]); + + Plugin.getEmptyId().put(caller, id); + Plugin.getEmptyData().put(caller, data); + Plugin.showSettings(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Empty Block.")); + } + } + + + else if (args[0].equalsIgnoreCase("loot")) + { + boolean error = false; + for (String cur : args[1].split(",")) + { + String[] loot = cur.split(":"); + + if (loot.length != 5) + { + error = true; + break; + } + + try + { + Integer.parseInt(loot[0]); + Byte.parseByte(loot[1]); + Integer.parseInt(loot[2]); + Integer.parseInt(loot[3]); + Integer.parseInt(loot[4]); + } + catch (Exception e) + { + error = true; + break; + } + } + + if (error) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Loot String.")); + return; + } + + Plugin.getLootString().put(caller, args[1]); + Plugin.showSettings(caller); + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldMonsterCommand.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldMonsterCommand.java new file mode 100644 index 000000000..c313ebd79 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldMonsterCommand.java @@ -0,0 +1,170 @@ +package me.chiss.Core.Field.commands; + +import org.bukkit.entity.Player; + +import me.chiss.Core.Field.FieldMonster; +import me.chiss.Core.Field.FieldMonsterInput; +import me.chiss.Core.Field.Monsters.FieldMonsterBase; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilPlayer; + +public class FieldMonsterCommand extends CommandBase +{ + public FieldMonsterCommand(FieldMonster plugin) + { + super(plugin, Rank.ADMIN, "fm"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (!Plugin.getInput().containsKey(caller)) + Plugin.getInput().put(caller, new FieldMonsterInput()); + + FieldMonsterInput input = Plugin.getInput().get(caller); + + if (args.length == 0) + { + Plugin.getInput().get(caller).Display(caller); + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Type " + F.elem("/fm help") + " for commands.")); + } + + else if (args[0].equalsIgnoreCase("help")) + { + Plugin.Help(caller); + } + + else if (args[0].equalsIgnoreCase("type")) + { + try + { + input.type = UtilEnt.searchEntity(caller, args[1], true); + if (input.type != null) + input.Display(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Monster Type.")); + } + } + + else if (args[0].equalsIgnoreCase("max")) + { + try + { + int value = Integer.parseInt(args[1]); + if (value < 1) value = 1; + input.mobMax = value; + input.Display(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Monster Max.")); + } + } + + else if (args[0].equalsIgnoreCase("rate")) + { + try + { + double value = Double.parseDouble(args[1]); + if (value < 0) value = 0; + input.mobRate = value; + input.Display(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Monster Rate.")); + } + } + + else if (args[0].equalsIgnoreCase("radius")) + { + try + { + int integer = Integer.parseInt(args[1]); + if (integer < 1) integer = 1; + input.radius = integer; + input.Display(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Area Radius.")); + } + } + + else if (args[0].equalsIgnoreCase("height")) + { + try + { + int integer = Integer.parseInt(args[1]); + if (integer < 1) integer = 1; + input.height = integer; + input.Display(caller); + } + catch (Exception e) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Area Height.")); + } + } + + else if (args[0].equalsIgnoreCase("create")) + { + if (args.length < 2) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Missing Monster Field Name.")); + } + else + { + Plugin.Create(caller, args[1]); + } + } + + else if (args[0].equalsIgnoreCase("delete")) + { + if (args.length < 2) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Missing Monster Field Name.")); + } + else + { + Plugin.Delete(caller, args[1]); + } + } + + else if (args[0].equalsIgnoreCase("list")) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Listing Monster Fields;")); + + for (FieldMonsterBase pit : Plugin.getPits()) + pit.Display(caller); + } + + else if (args[0].equalsIgnoreCase("info")) + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Listing Monster Fields;")); + + for (FieldMonsterBase pit : Plugin.getPits()) + pit.Display(caller); + } + + else if (args[0].equalsIgnoreCase("wipe")) + { + Plugin.Wipe(caller, true); + } + + else if (args[0].equalsIgnoreCase("kill")) + { + for (FieldMonsterBase pit : Plugin.getPits()) + pit.RemoveMonsters(); + } + + else + { + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Invalid Command.")); + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldOreCommand.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldOreCommand.java new file mode 100644 index 000000000..9a129fa97 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/commands/FieldOreCommand.java @@ -0,0 +1,60 @@ +package me.chiss.Core.Field.commands; + +import org.bukkit.entity.Player; + +import me.chiss.Core.Field.FieldOre; +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; + +public class FieldOreCommand extends CommandBase +{ + public FieldOreCommand(FieldOre plugin) + { + super(plugin, Rank.ADMIN, "fo"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (args.length == 0) + { + Plugin.help(caller); + return; + } + + if (args[0].equalsIgnoreCase("toggle")) + { + if (!Plugin.getActivePlayers().remove(caller.getName())) + Plugin.getActivePlayers().add(caller.getName()); + + UtilPlayer.message(caller, F.main(Plugin.GetName(), "Interact Active: " + F.tf(Plugin.getActivePlayers().contains(caller.getName())))); + } + + else if (args[0].equalsIgnoreCase("help")) + { + Plugin.help(caller); + } + + else if (args[0].equalsIgnoreCase("reset")) + { + Plugin.reset(caller); + } + + else if (args[0].equalsIgnoreCase("fill")) + { + Plugin.fill(caller); + } + + else if (args[0].equalsIgnoreCase("list")) + { + Plugin.list(caller); + } + + else if (args[0].equalsIgnoreCase("wipe")) + { + Plugin.wipe(caller); + } + } +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldBlockToken.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldBlockToken.java new file mode 100644 index 000000000..5e14a9575 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldBlockToken.java @@ -0,0 +1,14 @@ +package me.chiss.Core.Field.repository; + +public class FieldBlockToken +{ + public String Server; + public String Location; + public int BlockId; + public byte BlockData; + public int EmptyId; + public byte EmptyData; + public int StockMax; + public double StockRegenTime; + public String Loot; +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldMonsterToken.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldMonsterToken.java new file mode 100644 index 000000000..4af6f408a --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldMonsterToken.java @@ -0,0 +1,13 @@ +package me.chiss.Core.Field.repository; + +public class FieldMonsterToken +{ + public String Name; + public String Server; + public String Type; + public int MobMax; + public double MobRate; + public String Centre; + public int Radius; + public int Height; +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldOreToken.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldOreToken.java new file mode 100644 index 000000000..ca8724762 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldOreToken.java @@ -0,0 +1,7 @@ +package me.chiss.Core.Field.repository; + +public class FieldOreToken +{ + public String Server; + public String Location; +} diff --git a/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldRepository.java b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldRepository.java new file mode 100644 index 000000000..55d8e538f --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/me/chiss/Core/Field/repository/FieldRepository.java @@ -0,0 +1,182 @@ +package me.chiss.Core.Field.repository; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.database.RepositoryBase; +import mineplex.core.database.ResultSetCallable; +import mineplex.core.database.column.ColumnByte; +import mineplex.core.database.column.ColumnDouble; +import mineplex.core.database.column.ColumnInt; +import mineplex.core.database.column.ColumnVarChar; + +public class FieldRepository extends RepositoryBase +{ + private static String CREATE_FIELD_BLOCK_TABLE = "CREATE TABLE IF NOT EXISTS fieldBlock (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), location VARCHAR(100), blockId INT, blockData TINYINT, emptyId INT, emptyData TINYINT, stockMax INT, stockRegenTime DOUBLE, loot VARCHAR(100) PRIMARY KEY (id), INDEX serverLocation (server, location));"; + private static String CREATE_FIELD_ORE_TABLE = "CREATE TABLE IF NOT EXISTS fieldOre (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), location VARCHAR(100), PRIMARY KEY (id), INDEX serverLocation (server, location));"; + private static String CREATE_FIELD_MONSTER_TABLE = "CREATE TABLE IF NOT EXISTS fieldMonster (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), name VARCHAR(100), type VARCHAR(100), mobMax INT, mobRate DOUBLE, center VARCHAR(100), radius INT, height INT PRIMARY KEY (id), INDEX serverName (server, name));"; + private static String RETRIEVE_FIELD_BLOCKS = "SELECT server, location, blockId, blockData, emptyId, emptyData, stockMax, stockRegen, loot FROM fieldBlock WHERE server = ?;"; + private static String ADD_FIELD_BLOCK = "INSERT INTO fieldBlock (server, location, blockId, blockData, emptyId, emptyData, stockMax, stockRegen, loot) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);"; + private static String DEL_FIELD_BLOCK = "DELETE FROM fieldBlock WHERE server = ? AND location = ?;"; + private static String RETRIEVE_FIELD_ORES = "SELECT server, location FROM fieldOre WHERE server = ?;"; + private static String ADD_FIELD_ORE = "INSERT INTO fieldBlock (server, location) VALUES (?, ?);"; + private static String DEL_FIELD_ORE = "DELETE FROM fieldOre WHERE server = ? AND location = ?;"; + private static String RETRIEVE_FIELD_MONSTERS = "SELECT server, name, type, mobMax, mobRate, center, radius, height FROM fieldMonster WHERE server = ?;"; + private static String ADD_FIELD_MONSTER = "INSERT INTO fieldBlock (server, name, type, mobMax, mobRate, center, radius, height) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"; + private static String DEL_FIELD_MONSTER = "DELETE FROM fieldBlock WHERE server = ? AND name = ?;"; + + public FieldRepository(JavaPlugin plugin) + { + super(plugin, "jdbc:mysql://db.mineplex.com:3306/Account?autoReconnect=true&failOverReadOnly=false&maxReconnects=10", "root", "tAbechAk3wR7tuTh"); + } + + public List getFieldBlocks(String server) + { + final List fieldBlocks = new ArrayList(); + + this.executeQuery(RETRIEVE_FIELD_BLOCKS, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + FieldBlockToken token = new FieldBlockToken(); + token.Server = resultSet.getString(1); + token.Location = resultSet.getString(2); + token.BlockId = resultSet.getInt(3); + token.BlockData = resultSet.getByte(4); + token.EmptyId = resultSet.getInt(5); + token.EmptyData = resultSet.getByte(6); + token.StockMax = resultSet.getInt(7); + token.StockRegenTime = resultSet.getLong(8); + token.Loot = resultSet.getString(9); + + fieldBlocks.add(token); + } + } + }, new ColumnVarChar("server", 100, server)); + + return fieldBlocks; + } + + public void addFieldBlock(FieldBlockToken token) + { + executeUpdate(ADD_FIELD_BLOCK, + new ColumnVarChar("server", 100, token.Server), + new ColumnVarChar("location", 100, token.Location), + new ColumnInt("blockId", token.BlockId), + new ColumnByte("blockData", token.BlockData), + new ColumnInt("emptyId", token.EmptyId), + new ColumnByte("emptyData", token.EmptyData), + new ColumnInt("stockMax", token.StockMax), + new ColumnDouble("stockRegen", token.StockRegenTime), + new ColumnVarChar("loot", 100, token.Loot) + ); + } + + public void deleteFieldBlock(String server, String location) + { + executeUpdate(DEL_FIELD_BLOCK, new ColumnVarChar("server", 100, server), new ColumnVarChar("location", 100, location)); + } + + public List getFieldOres(String server) + { + final List fieldOres = new ArrayList(); + + this.executeQuery(RETRIEVE_FIELD_ORES, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + FieldOreToken token = new FieldOreToken(); + token.Server = resultSet.getString(1); + token.Location = resultSet.getString(2); + + fieldOres.add(token); + } + } + }, new ColumnVarChar("server", 100, server)); + + return fieldOres; + } + + public void addFieldOre(FieldOreToken token) + { + executeUpdate(ADD_FIELD_ORE, + new ColumnVarChar("server", 100, token.Server), + new ColumnVarChar("location", 100, token.Location) + ); + } + + public void deleteFieldOre(String server, String location) + { + executeUpdate(DEL_FIELD_ORE, new ColumnVarChar("server", 100, server), new ColumnVarChar("location", 100, location)); + } + + public List getFieldMonsters(String server) + { + List fieldMonsters = new ArrayList(); + + this.executeQuery(RETRIEVE_FIELD_MONSTERS, new ResultSetCallable() + { + @Override + public void processResultSet(ResultSet resultSet) throws SQLException + { + while (resultSet.next()) + { + FieldMonsterToken token = new FieldMonsterToken(); + token.Name = resultSet.getString(1); + token.Server = resultSet.getString(2); + token.Type = resultSet.getString(3); + token.MobMax = resultSet.getInt(4); + token.MobRate = resultSet.getDouble(5); + token.Centre = resultSet.getString(6); + token.Radius = resultSet.getInt(7); + token.Height = resultSet.getInt(8); + } + } + }, new ColumnVarChar("server", 100, server)); + + return fieldMonsters; + } + + public void addFieldMonster(FieldMonsterToken token) + { + executeUpdate(ADD_FIELD_MONSTER, + new ColumnVarChar("server", 100, token.Server), + new ColumnVarChar("name", 100, token.Name), + new ColumnVarChar("blockId", 100, token.Type), + new ColumnInt("mobMax", token.MobMax), + new ColumnDouble("mobRate", token.MobRate), + new ColumnVarChar("center", 100, token.Centre), + new ColumnInt("redius", token.Radius), + new ColumnInt("height", token.Height) + ); + } + + public void deleteFieldMonster(String server, String name) + { + executeUpdate(DEL_FIELD_MONSTER, new ColumnVarChar("server", 100, server), new ColumnVarChar("name", 100, name)); + } + + @Override + protected void initialize() + { + executeUpdate(CREATE_FIELD_BLOCK_TABLE); + executeUpdate(CREATE_FIELD_ORE_TABLE); + executeUpdate(CREATE_FIELD_MONSTER_TABLE); + } + + @Override + protected void update() + { + } + +} diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java new file mode 100644 index 000000000..0a580d70d --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -0,0 +1,147 @@ +package mineplex.game.clans; + +import java.io.File; + +import mineplex.core.CustomTagFix; +import mineplex.core.account.CoreClientManager; +import mineplex.core.antihack.AntiHack; +import mineplex.core.antistack.AntiStack; +import mineplex.core.blockrestore.BlockRestore; +import mineplex.core.command.CommandCenter; +import mineplex.core.common.util.FileUtil; +import mineplex.core.cosmetic.CosmeticManager; +import mineplex.core.creature.Creature; +import mineplex.core.disguise.DisguiseManager; +import mineplex.core.donation.DonationManager; +import mineplex.core.friend.FriendManager; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.inventory.InventoryManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.logger.Logger; +import mineplex.core.memory.MemoryFix; +import mineplex.core.message.MessageManager; +import mineplex.core.monitor.LagMeter; +import mineplex.core.mount.MountManager; +import mineplex.core.npc.NpcManager; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.pet.PetManager; +import mineplex.core.portal.Portal; +import mineplex.core.preferences.PreferencesManager; +import mineplex.core.projectile.ProjectileManager; +import mineplex.core.punish.Punish; +import mineplex.core.recharge.Recharge; +import mineplex.core.serverConfig.ServerConfiguration; +import mineplex.core.spawn.Spawn; +import mineplex.core.status.ServerStatusManager; +import mineplex.core.teleport.Teleport; +import mineplex.core.updater.FileUpdater; +import mineplex.core.updater.Updater; +import mineplex.minecraft.game.core.combat.CombatManager; +import mineplex.minecraft.game.core.damage.DamageManager; +import net.minecraft.server.v1_7_R4.MinecraftServer; + +import org.bukkit.plugin.java.JavaPlugin; + +public class Clans extends JavaPlugin +{ + private String WEB_CONFIG = "webServer"; + + //Modules + private CoreClientManager _clientManager; + private DonationManager _donationManager; + private DamageManager _damageManager; + + private ServerConfiguration _serverConfiguration; + + @Override + public void onEnable() + { + //Delete Old Games Folders + DeleteFolders(); + + //Configs + getConfig().addDefault(WEB_CONFIG, "http://accounts.mineplex.com/"); + getConfig().set(WEB_CONFIG, getConfig().getString(WEB_CONFIG)); + saveConfig(); + + String webServerAddress = getConfig().getString(WEB_CONFIG); + + Logger.initialize(this); + + //Static Modules + CommandCenter.Initialize(this); + _clientManager = new CoreClientManager(this, webServerAddress); + CommandCenter.Instance.setClientManager(_clientManager); + + ItemStackFactory.Initialize(this, false); + Recharge.Initialize(this); + + _donationManager = new DonationManager(this, webServerAddress); + + _serverConfiguration = new ServerConfiguration(this); + + PreferencesManager preferenceManager = new PreferencesManager(this, _clientManager, _donationManager); + new MessageManager(this, _clientManager, preferenceManager); + + AntiStack antistack = new AntiStack(this); + Creature creature = new Creature(this); + Spawn spawn = new Spawn(this); + Teleport teleport = new Teleport(this, _clientManager, spawn); + ServerStatusManager serverStatusManager = new ServerStatusManager(this, new LagMeter(this, _clientManager)); + Portal portal = new Portal(this, serverStatusManager.getCurrentServerName()); + new FileUpdater(this, portal); + PacketHandler packetHandler = new PacketHandler(this); + + DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler); + + _damageManager = new DamageManager(this, new CombatManager(this), new NpcManager(this, creature), disguiseManager); + + Punish punish = new Punish(this, webServerAddress, _clientManager); + AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager); + AntiHack.Instance.setKick(false); + + BlockRestore blockRestore = new BlockRestore(this); + + ProjectileManager projectileManager = new ProjectileManager(this); + + //Inventory + InventoryManager inventoryManager = new InventoryManager(this); + PetManager petManager = new PetManager(this, _clientManager, _donationManager, creature, webServerAddress); + MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); + GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager); + CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, true); + cosmeticManager.setInterfaceSlot(7); + + new MemoryFix(this); + new CustomTagFix(this, packetHandler); + + new FriendManager(this, _clientManager, preferenceManager); + + //Updates + getServer().getScheduler().scheduleSyncRepeatingTask(this, new Updater(this), 1, 1); + + MinecraftServer.getServer().getPropertyManager().setProperty("debug", true); + } + + private void DeleteFolders() + { + File curDir = new File("."); + + File[] filesList = curDir.listFiles(); + for(File file : filesList) + { + if (!file.isDirectory()) + continue; + + if (file.getName().length() < 4) + continue; + + if (!file.getName().substring(0, 4).equalsIgnoreCase("Game")) + continue; + + FileUtil.DeleteFolder(file); + + System.out.println("Deleted Old Game: " + file.getName()); + } + } +} diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Field.java b/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Field.java deleted file mode 100644 index 8a1fb481c..000000000 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/Field.java +++ /dev/null @@ -1,69 +0,0 @@ -package me.chiss.Core.Field; - - -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - -import me.chiss.Core.Module.AModule; -import mineplex.core.server.IRepository; - -public class Field extends AModule -{ - private FieldBlock _block; - private FieldOre _ore; - private FieldMonster _mob; - - public Field(JavaPlugin plugin, IRepository repository, String serverName) - { - super("Field Factory", plugin, repository); - - _block = new FieldBlock(plugin, repository, serverName); - _ore = new FieldOre(plugin, repository, serverName); - _mob = new FieldMonster(plugin, repository, serverName); - } - - @Override - public void enable() - { - - } - - @Override - public void disable() - { - - } - - @Override - public void config() - { - - } - - @Override - public void commands() - { - - } - - @Override - public void command(Player caller, String cmd, String[] args) - { - - } - - public FieldBlock GetBlock() - { - return _block; - } - - public FieldOre GetOre() - { - return _ore; - } - - public FieldMonster GetMonster() - { - return _mob; - } -} diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonster.java b/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonster.java deleted file mode 100644 index 9f9dc5886..000000000 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/FieldMonster.java +++ /dev/null @@ -1,332 +0,0 @@ -package me.chiss.Core.Field; - -import java.util.HashSet; -import java.util.WeakHashMap; - -import nautilus.minecraft.core.webserver.token.Server.FieldMonsterToken; - -import org.bukkit.Location; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.plugin.java.JavaPlugin; - -import mineplex.core.server.IRepository; -import mineplex.core.common.Rank; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilWorld; -import me.chiss.Core.Field.Monsters.FieldMonsterBase; -import me.chiss.Core.Module.AModule; - -public class FieldMonster extends AModule -{ - private HashSet _pits; - private String _serverName; - - private WeakHashMap _input = new WeakHashMap(); - - public FieldMonster(JavaPlugin plugin, IRepository repository, String serverName) - { - super("Field Monster", plugin, repository); - - _pits = new HashSet(); - _serverName = serverName; - - Load(); - } - - @Override - public void enable() - { - - } - - @Override - public void disable() - { - Clean(); - } - - @Override - public void config() - { - - } - - @Override - public void commands() - { - AddCommand("fm"); - } - - @Override - public void command(Player caller, String cmd, String[] args) - { - if (!Clients().Get(caller).Rank().Has(Rank.ADMIN, true)) - return; - - if (!_input.containsKey(caller)) - _input.put(caller, new FieldMonsterInput()); - - FieldMonsterInput input = _input.get(caller); - - if (args.length == 0) - { - _input.get(caller).Display(caller); - UtilPlayer.message(caller, F.main(_moduleName, "Type " + F.elem("/fm help") + " for commands.")); - } - - else if (args[0].equalsIgnoreCase("help")) - { - Help(caller); - } - - else if (args[0].equalsIgnoreCase("type")) - { - try - { - input.type = UtilEnt.searchEntity(caller, args[1], true); - if (input.type != null) - input.Display(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Monster Type.")); - } - } - - else if (args[0].equalsIgnoreCase("max")) - { - try - { - int value = Integer.parseInt(args[1]); - if (value < 1) value = 1; - input.mobMax = value; - input.Display(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Monster Max.")); - } - } - - else if (args[0].equalsIgnoreCase("rate")) - { - try - { - double value = Double.parseDouble(args[1]); - if (value < 0) value = 0; - input.mobRate = value; - input.Display(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Monster Rate.")); - } - } - - else if (args[0].equalsIgnoreCase("radius")) - { - try - { - int integer = Integer.parseInt(args[1]); - if (integer < 1) integer = 1; - input.radius = integer; - input.Display(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Area Radius.")); - } - } - - else if (args[0].equalsIgnoreCase("height")) - { - try - { - int integer = Integer.parseInt(args[1]); - if (integer < 1) integer = 1; - input.height = integer; - input.Display(caller); - } - catch (Exception e) - { - UtilPlayer.message(caller, F.main(_moduleName, "Invalid Area Height.")); - } - } - - else if (args[0].equalsIgnoreCase("create")) - { - if (args.length < 2) - { - UtilPlayer.message(caller, F.main(_moduleName, "Missing Monster Field Name.")); - } - else - { - Create(caller, args[1]); - } - } - - else if (args[0].equalsIgnoreCase("delete")) - { - if (args.length < 2) - { - UtilPlayer.message(caller, F.main(_moduleName, "Missing Monster Field Name.")); - } - else - { - Delete(caller, args[1]); - } - } - - else if (args[0].equalsIgnoreCase("list")) - { - UtilPlayer.message(caller, F.main(_moduleName, "Listing Monster Fields;")); - - for (FieldMonsterBase pit : _pits) - pit.Display(caller); - } - - else if (args[0].equalsIgnoreCase("info")) - { - UtilPlayer.message(caller, F.main(GetName(), "Listing Monster Fields;")); - - for (FieldMonsterBase pit : _pits) - pit.Display(caller); - } - - else if (args[0].equalsIgnoreCase("wipe")) - { - Wipe(caller, true); - } - - else if (args[0].equalsIgnoreCase("kill")) - { - for (FieldMonsterBase pit : _pits) - pit.RemoveMonsters(); - } - - else - { - UtilPlayer.message(caller, F.main(GetName(), "Invalid Command.")); - } - } - - private void Help(Player caller) - { - UtilPlayer.message(caller, F.main(GetName(), "Commands List;")); - UtilPlayer.message(caller, F.help("/fm type ", "Set Monster Type", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm max <#>", "Set Monster Limit", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm rate ", "Set Monster Rate", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm radius <#>", "Set Area Radius", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm height <#>", "Set Area Height", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm create ", "Create at your Location", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm delete ", "Delete Field", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm list", "List Monster Fields", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm info ", "Display Monster Field", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm kill", "Kills all Field Monsters", Rank.ADMIN)); - UtilPlayer.message(caller, F.help("/fm wipe", "Delete All Monster Field (Database)", Rank.ADMIN)); - } - - private void Create(Player caller, String name) - { - FieldMonsterInput input = _input.get(caller); - - if (input.type == null) - { - UtilPlayer.message(caller, F.main(GetName(), "You have not set Monster Type.")); - return; - } - - for (FieldMonsterBase pit : _pits) - { - if (name.equalsIgnoreCase(pit.GetName())) - { - UtilPlayer.message(caller, F.main(GetName(), "Monster Field with this name already exists.")); - return; - } - } - - FieldMonsterBase pit = new FieldMonsterBase(this, name, _serverName, input.type, input.mobMax, input.mobRate, caller.getLocation(), input.radius, input.height); - Add(pit, true); - - UtilPlayer.message(caller, F.main(GetName(), "You created Monster Field.")); - pit.Display(caller); - } - - private void Add(FieldMonsterBase pit, boolean repo) - { - UtilServer.getServer().getPluginManager().registerEvents(pit, Plugin()); - _pits.add(pit); - - if (repo) - GetRepository().AddFieldMonster(pit.GetToken()); - } - - private void Delete(Player caller, String name) - { - HashSet remove = new HashSet(); - - for (FieldMonsterBase pit : _pits) - if (pit.GetName().equalsIgnoreCase(name)) - remove.add(pit); - - int i = remove.size(); - - for (FieldMonsterBase pit : remove) - Delete(pit, true); - - UtilPlayer.message(caller, F.main(GetName(), "Deleted " + i + " Monster Field(s).")); - } - - private void Delete(FieldMonsterBase pit, boolean repo) - { - _pits.remove(pit); - pit.RemoveMonsters(); - HandlerList.unregisterAll(pit); - - if (repo) - GetRepository().DeleteFieldMonster(_serverName, pit.GetToken().Name); - } - - private void Wipe(Player player, boolean repo) - { - HashSet remove = new HashSet(); - - for (FieldMonsterBase pit : _pits) - remove.add(pit); - - _pits.clear(); - - for (FieldMonsterBase pit : remove) - Delete(pit, repo); - - UtilPlayer.message(player, F.main(_moduleName, "Field Monsters Wiped.")); - } - - private void Load() - { - Wipe(null, false); - - for (FieldMonsterToken token : GetRepository().GetFieldMonsters(_serverName)) - { - EntityType type = UtilEnt.searchEntity(null, token.Type, false); - if (type == null) continue; - - Location loc = UtilWorld.strToLoc(token.Centre); - if (loc == null) continue; - - FieldMonsterBase pit = new FieldMonsterBase(this, token.Name, _serverName, type, token.MobMax, token.MobRate, loc, token.Radius, token.Height); - Add(pit, false); - } - } - - private void Clean() - { - for (FieldMonsterBase pit : _pits) - pit.RemoveMonsters(); - } -} diff --git a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/repository/FieldRepository.java b/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/repository/FieldRepository.java deleted file mode 100644 index 55722da6b..000000000 --- a/Plugins/Nautilus.Game.PvP/src/me/chiss/Core/Field/repository/FieldRepository.java +++ /dev/null @@ -1,72 +0,0 @@ -package me.chiss.Core.Field.repository; - -public class FieldRepository -{ - public List GetFieldBlocks(String server) - { - return new JsonWebCall(WebServerAddress + "Fields/GetFieldBlocks").Execute(new TypeToken>(){}.getType(), server); - } - - @Override - public void AddFieldBlock(FieldBlockToken token) - { - new AsyncJsonWebCall(WebServerAddress + "Fields/AddFieldBlock").Execute(token); - } - - @Override - public void DeleteFieldBlock(String server, String location) - { - FieldBlockToken token = new FieldBlockToken(); - token.Server = server; - token.Location = location; - - new AsyncJsonWebCall(WebServerAddress + "Fields/DeleteFieldBlock").Execute(token); - } - - //Field Ore - @Override - public List GetFieldOres(String server) - { - return new JsonWebCall(WebServerAddress + "Fields/GetFieldOres").Execute(new TypeToken>(){}.getType(), server); - } - - @Override - public void AddFieldOre(FieldOreToken token) - { - new AsyncJsonWebCall(WebServerAddress + "Fields/AddFieldOre").Execute(token); - } - - @Override - public void DeleteFieldOre(String server, String location) - { - FieldOreToken token = new FieldOreToken(); - token.Server = server; - token.Location = location; - - new AsyncJsonWebCall(WebServerAddress + "Fields/DeleteFieldOre").Execute(token); - } - - //Field Monster - @Override - public List GetFieldMonsters(String server) - { - return new JsonWebCall(WebServerAddress + "Fields/GetFieldMonsters").Execute(new TypeToken>(){}.getType(), server); - } - - @Override - public void AddFieldMonster(FieldMonsterToken token) - { - new AsyncJsonWebCall(WebServerAddress + "Fields/AddFieldMonster").Execute(token); - } - - @Override - public void DeleteFieldMonster(String server, String name) - { - FieldMonsterToken token = new FieldMonsterToken(); - token.Server = server; - token.Name = name; - - new AsyncJsonWebCall(WebServerAddress + "Fields/DeleteFieldMonster").Execute(token); - } - -} diff --git a/Website/LOCWebsite.suo b/Website/LOCWebsite.suo index 0f4dc2361f5354abbd804ac90862ca71ec3e9584..8a659d60e7b77976795f40580fd30f0400c71794 100644 GIT binary patch delta 13215 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 delta 13124 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