From 9c6d23f11e5894d4c774a07ca43492f5de6c5e52 Mon Sep 17 00:00:00 2001 From: cnr Date: Sat, 16 Apr 2016 07:31:00 -0500 Subject: [PATCH 01/24] Correctly count cannon explosion effect attempts Previously, cannon explosions effects could lock up the main thread if: - The effect location selection RNG was sufficiently unlucky - The explosion occured sufficiently deep into a larger claimed territory --- .../game/clans/clans/siege/weapon/Cannon.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index bb880fcf0..648e6baf8 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -437,19 +437,19 @@ public class Cannon extends SiegeWeapon int attempts = 0; while (blocks.size() < 10 && (attempts < 30)) { + attempts++; Block block = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), (4 * getPowerLevel())).getBlock(); - - if (_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()) != null && !_siegeManager.getClansManager().getBlacklist().allowed(_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()).Owner)) + + ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); + if (claim != null && !_siegeManager.getClansManager().getBlacklist().allowed(claim.Owner)) { - continue; + continue; // This block is in a claimed territory } - + if ((block.getType() != Material.AIR) && (!blocks.contains(block))) { blocks.add(block); } - - attempts++; } _clans.getExplosion().BlockExplosion( From e375db5aecb88e276cba3d3ae93d71bf7ef2526e Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 17 Apr 2016 13:30:06 -0500 Subject: [PATCH 02/24] Refactor cannon explosion effect for clarity --- .../game/clans/clans/siege/weapon/Cannon.java | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index 648e6baf8..cc5026a1f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -1,6 +1,8 @@ package mineplex.game.clans.clans.siege.weapon; -import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.bukkit.Location; import org.bukkit.Material; @@ -41,6 +43,7 @@ import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile; import mineplex.game.clans.clans.siege.weapon.util.AccessRule; import mineplex.game.clans.clans.siege.weapon.util.AccessType; import mineplex.game.clans.clans.siege.weapon.util.WeaponStateInfo; +import mineplex.game.clans.core.repository.ClanTerritory; public class Cannon extends SiegeWeapon { @@ -425,32 +428,16 @@ public class Cannon extends SiegeWeapon @EventHandler public void explosionEffects(SiegeWeaponExplodeEvent event) { -// for (int i = 0; i < 8; i++) -// { -// // Explosion particle effects. -// Location point = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 5); -// UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, point, 0, 0, 0, 1, 2, ViewDist.MAX); -// } - - // Block explosion. - ArrayList blocks = new ArrayList<>(); - int attempts = 0; - while (blocks.size() < 10 && (attempts < 30)) - { - attempts++; - Block block = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), (4 * getPowerLevel())).getBlock(); - - ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); - if (claim != null && !_siegeManager.getClansManager().getBlacklist().allowed(claim.Owner)) + List blocks = Stream.generate(() -> UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 4 * getPowerLevel()).getBlock()) + .limit(30) // Generate up to 30 + .distinct() // distinct blocks, + .filter(block -> // filter for those unclaimed, { - continue; // This block is in a claimed territory - } - - if ((block.getType() != Material.AIR) && (!blocks.contains(block))) - { - blocks.add(block); - } - } + ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); + return claim == null || _siegeManager.getClansManager().getBlacklist().allowed(claim.Owner); + }) + .limit(10) // and take up to 10 of them. + .collect(Collectors.toList()); _clans.getExplosion().BlockExplosion( blocks, From 4227e24ae0e1a9ec598710bf86b81d8002220ac4 Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 17 Apr 2016 16:25:44 -0500 Subject: [PATCH 03/24] Reintroduce non-Air constraint to cannon explosion --- .../src/mineplex/game/clans/clans/siege/weapon/Cannon.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index cc5026a1f..a0e3e889d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -431,7 +431,8 @@ public class Cannon extends SiegeWeapon List blocks = Stream.generate(() -> UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 4 * getPowerLevel()).getBlock()) .limit(30) // Generate up to 30 .distinct() // distinct blocks, - .filter(block -> // filter for those unclaimed, + .filter(block -> block.getType() != Material.AIR) // filter for non-air + .filter(block -> // and blocks whose locations aren't blacklisted, { ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); return claim == null || _siegeManager.getClansManager().getBlacklist().allowed(claim.Owner); From b21939444cd200eccd2f24947f39bdd2d1179eb4 Mon Sep 17 00:00:00 2001 From: phobia Date: Sat, 23 Apr 2016 16:40:39 +1000 Subject: [PATCH 04/24] Some changes to error handlng for clans regions --- .../src/mineplex/game/clans/clans/ClansManager.java | 6 ++++-- .../game/clans/clans/map/ItemMapManager.java | 11 +++++++++-- .../game/clans/clans/regions/ClansRegions.java | 12 +++++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 4b4d008d9..6d433d3ae 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -351,7 +351,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati { loadClan(token); } - + + Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Replay|Restrict"); + + // new ClaimVisualizer(plugin, this); // RedisDataRepository(ConnectionData writeConn, ConnectionData @@ -404,7 +407,6 @@ public class ClansManager extends MiniClientPluginimplements IRelati hologram.start(); } - Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Replay|Restrict"); _siegeManager = new SiegeManager(this); // _netherManager = new NetherManager(this); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java index 76c2cc1ba..f73eb2280 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java @@ -423,8 +423,15 @@ public class ItemMapManager extends MiniPlugin } } - Byte color = Iterables.getFirst(Multisets.copyHighestCountFirst(hashmultiset), (byte) 0); - + Byte color; + try + { + color = Iterables.getFirst(Multisets.copyHighestCountFirst(hashmultiset), (byte) 0); + } + catch (Exception e) + { + color = (byte) 0; + } second[(x + _halfMapSize) / zoom][(z + _halfMapSize) / zoom] = color; } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java index ee09e4677..797f63f24 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java @@ -197,7 +197,17 @@ public class ClansRegions extends MiniPlugin { int x = chunkX + xOffset; int z = chunkZ + zOffset; - Chunk chunk = location.getWorld().getChunkAt(x, z); + Chunk chunk; + try + { //Corrupted chunk will hold up whole server + chunk = location.getWorld().getChunkAt(x, z); + } + catch(Exception e) + { + System.out.println("UNABLE TO LOAD CHUNK AT " + x + " , " + z); + e.printStackTrace(); + continue; + } String chunkStr = UtilWorld.chunkToStr(chunk); if (addNegative) From c814fc73f70005f51957c58af2ae0263a04072d3 Mon Sep 17 00:00:00 2001 From: phobia Date: Fri, 29 Apr 2016 12:53:20 +1000 Subject: [PATCH 05/24] Uncommented ClansBanManager's instances --- .../src/mineplex/game/clans/Clans.java | 4 +-- .../game/clans/clans/ClansManager.java | 27 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 15e9c9edc..7f15cbfbe 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -113,7 +113,7 @@ public class Clans extends JavaPlugin Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); -// ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager); + ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager); Punish punish = new Punish(this, webServerAddress, _clientManager); AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager); @@ -144,7 +144,7 @@ public class Clans extends JavaPlugin GearManager customGear = new GearManager(this, packetHandler, _clientManager, _donationManager); HologramManager hologram = new HologramManager(this, packetHandler); - _clansManager = new ClansManager(this, /*clansBans,*/ serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress); + _clansManager = new ClansManager(this, clansBans, serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress); new Recipes(this); new Farming(this); new BuildingShop(_clansManager, _clientManager, _donationManager); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 6d433d3ae..a37b131d3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -10,6 +10,7 @@ import java.util.TimeZone; import java.util.UUID; import mineplex.core.recharge.Recharge; +import mineplex.game.clans.clans.ban.ClansBanManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; @@ -224,19 +225,19 @@ public class ClansManager extends MiniClientPluginimplements IRelati public String UserDataDir = UtilServer.getServer().getWorlds().get(0).getWorldFolder().getPath() + File.separator + ".." + File.separator + "CLANS_USER_DATA" + File.separator; - /*private ClansBanManager _clansBans;*/ + private ClansBanManager _clansBans; public ClanTips ClanTips; // Spawn area - public ClansManager(JavaPlugin plugin/*, ClansBanManager clansBans*/, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress) + public ClansManager(JavaPlugin plugin, ClansBanManager clansBans, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress) { super("Clans Manager", plugin); _instance = this; - /*_clansBans = clansBans;*/ + _clansBans = clansBans; _punish = punish; _incognitoManager = incognitoManager; @@ -602,21 +603,21 @@ public class ClansManager extends MiniClientPluginimplements IRelati { event.setJoinMessage(null); - /*if (_clansBans.willBeKicked(event.getPlayer())) - { + if (_clansBans.willBeKicked(event.getPlayer())) + { return; - }*/ + } if (_incognitoManager.Get(event.getPlayer()).Status) { return; } - /*_clansBans.runAfterLoad(event.getPlayer().getName(), () -> { + _clansBans.runAfterLoad(event.getPlayer().getName(), () -> { if (_clansBans.Get(event.getPlayer().getName()).isBanned()) { return; - }*/ + } for (Player other : UtilServer.getPlayers()) { @@ -628,7 +629,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati other.sendMessage(F.sys("Join", event.getPlayer().getName())); } - /*});*/ + }); } @EventHandler(priority = EventPriority.HIGHEST) @@ -641,10 +642,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - /*if (_clansBans.willBeKicked(event.getPlayer())) + if (_clansBans.willBeKicked(event.getPlayer())) { return; - }*/ + } for (Player other : UtilServer.getPlayers()) { @@ -667,10 +668,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - /*if (_clansBans.willBeKicked(event.getPlayer())) + if (_clansBans.willBeKicked(event.getPlayer())) { return; - }*/ + } if (event.getReason().contains("You are banned from Clans")) { From f63a872bd42f8a9db1163be70110c290efbeb695 Mon Sep 17 00:00:00 2001 From: phobia Date: Fri, 29 Apr 2016 14:46:14 +1000 Subject: [PATCH 06/24] Changed resource packs to home hosted ones --- .../Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 7f15cbfbe..bb56d678e 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -135,8 +135,8 @@ public class Clans extends JavaPlugin ResourcePackManager resourcePackManager = new ResourcePackManager(this, portal); resourcePackManager.setResourcePack(new Pair[] { - Pair.create(MinecraftVersion.Version1_8, "http://phinary.ca/ResClans.zip"), - Pair.create(MinecraftVersion.Version1_9, "http://phinary.ca/ResClans19.zip") + Pair.create(MinecraftVersion.Version1_8, "file.mineplex.com/ResClans.zip"), + Pair.create(MinecraftVersion.Version1_9, "file.mineplex.com/ResClans19.zip") }, true); // Enable custom-gear related managers From f2f627116a45b0b810a64a8e87490f88fa1e0d01 Mon Sep 17 00:00:00 2001 From: cnr Date: Sat, 16 Apr 2016 07:31:00 -0500 Subject: [PATCH 07/24] Correctly count cannon explosion effect attempts Previously, cannon explosions effects could lock up the main thread if: - The effect location selection RNG was sufficiently unlucky - The explosion occured sufficiently deep into a larger claimed territory --- .../game/clans/clans/siege/weapon/Cannon.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index bb880fcf0..648e6baf8 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -437,19 +437,19 @@ public class Cannon extends SiegeWeapon int attempts = 0; while (blocks.size() < 10 && (attempts < 30)) { + attempts++; Block block = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), (4 * getPowerLevel())).getBlock(); - - if (_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()) != null && !_siegeManager.getClansManager().getBlacklist().allowed(_siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()).Owner)) + + ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); + if (claim != null && !_siegeManager.getClansManager().getBlacklist().allowed(claim.Owner)) { - continue; + continue; // This block is in a claimed territory } - + if ((block.getType() != Material.AIR) && (!blocks.contains(block))) { blocks.add(block); } - - attempts++; } _clans.getExplosion().BlockExplosion( From 2eb7b892e097d63a19af7c70090a3fdc76de192f Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 17 Apr 2016 13:30:06 -0500 Subject: [PATCH 08/24] Refactor cannon explosion effect for clarity --- .../game/clans/clans/siege/weapon/Cannon.java | 39 +++++++------------ 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index 648e6baf8..cc5026a1f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -1,6 +1,8 @@ package mineplex.game.clans.clans.siege.weapon; -import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import org.bukkit.Location; import org.bukkit.Material; @@ -41,6 +43,7 @@ import mineplex.game.clans.clans.siege.weapon.projectile.WeaponProjectile; import mineplex.game.clans.clans.siege.weapon.util.AccessRule; import mineplex.game.clans.clans.siege.weapon.util.AccessType; import mineplex.game.clans.clans.siege.weapon.util.WeaponStateInfo; +import mineplex.game.clans.core.repository.ClanTerritory; public class Cannon extends SiegeWeapon { @@ -425,32 +428,16 @@ public class Cannon extends SiegeWeapon @EventHandler public void explosionEffects(SiegeWeaponExplodeEvent event) { -// for (int i = 0; i < 8; i++) -// { -// // Explosion particle effects. -// Location point = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 5); -// UtilParticle.PlayParticle(ParticleType.HUGE_EXPLOSION, point, 0, 0, 0, 1, 2, ViewDist.MAX); -// } - - // Block explosion. - ArrayList blocks = new ArrayList<>(); - int attempts = 0; - while (blocks.size() < 10 && (attempts < 30)) - { - attempts++; - Block block = UtilAlg.getRandomLocation(event.getProjectile().getLocation(), (4 * getPowerLevel())).getBlock(); - - ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); - if (claim != null && !_siegeManager.getClansManager().getBlacklist().allowed(claim.Owner)) + List blocks = Stream.generate(() -> UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 4 * getPowerLevel()).getBlock()) + .limit(30) // Generate up to 30 + .distinct() // distinct blocks, + .filter(block -> // filter for those unclaimed, { - continue; // This block is in a claimed territory - } - - if ((block.getType() != Material.AIR) && (!blocks.contains(block))) - { - blocks.add(block); - } - } + ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); + return claim == null || _siegeManager.getClansManager().getBlacklist().allowed(claim.Owner); + }) + .limit(10) // and take up to 10 of them. + .collect(Collectors.toList()); _clans.getExplosion().BlockExplosion( blocks, From 634a34dd527aade23083127ecf738f58b74e5129 Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 17 Apr 2016 16:25:44 -0500 Subject: [PATCH 09/24] Reintroduce non-Air constraint to cannon explosion --- .../src/mineplex/game/clans/clans/siege/weapon/Cannon.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index cc5026a1f..a0e3e889d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -431,7 +431,8 @@ public class Cannon extends SiegeWeapon List blocks = Stream.generate(() -> UtilAlg.getRandomLocation(event.getProjectile().getLocation(), 4 * getPowerLevel()).getBlock()) .limit(30) // Generate up to 30 .distinct() // distinct blocks, - .filter(block -> // filter for those unclaimed, + .filter(block -> block.getType() != Material.AIR) // filter for non-air + .filter(block -> // and blocks whose locations aren't blacklisted, { ClanTerritory claim = _siegeManager.getClansManager().getClanUtility().getClaim(block.getLocation()); return claim == null || _siegeManager.getClansManager().getBlacklist().allowed(claim.Owner); From f1c2e71d564254a48350c83d8728d0ef8084412b Mon Sep 17 00:00:00 2001 From: phobia Date: Sat, 23 Apr 2016 16:40:39 +1000 Subject: [PATCH 10/24] Some changes to error handlng for clans regions --- .../src/mineplex/game/clans/clans/ClansManager.java | 6 ++++-- .../game/clans/clans/map/ItemMapManager.java | 11 +++++++++-- .../game/clans/clans/regions/ClansRegions.java | 12 +++++++++++- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 8b6dba49c..d36142220 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -354,7 +354,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati { loadClan(token); } - + + Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Replay|Restrict"); + + // new ClaimVisualizer(plugin, this); // RedisDataRepository(ConnectionData writeConn, ConnectionData @@ -407,7 +410,6 @@ public class ClansManager extends MiniClientPluginimplements IRelati hologram.start(); } - Bukkit.getMessenger().registerOutgoingPluginChannel(plugin, "Replay|Restrict"); _siegeManager = new SiegeManager(this); // _netherManager = new NetherManager(this); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java index 76c2cc1ba..f73eb2280 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/map/ItemMapManager.java @@ -423,8 +423,15 @@ public class ItemMapManager extends MiniPlugin } } - Byte color = Iterables.getFirst(Multisets.copyHighestCountFirst(hashmultiset), (byte) 0); - + Byte color; + try + { + color = Iterables.getFirst(Multisets.copyHighestCountFirst(hashmultiset), (byte) 0); + } + catch (Exception e) + { + color = (byte) 0; + } second[(x + _halfMapSize) / zoom][(z + _halfMapSize) / zoom] = color; } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java index ee09e4677..797f63f24 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/regions/ClansRegions.java @@ -197,7 +197,17 @@ public class ClansRegions extends MiniPlugin { int x = chunkX + xOffset; int z = chunkZ + zOffset; - Chunk chunk = location.getWorld().getChunkAt(x, z); + Chunk chunk; + try + { //Corrupted chunk will hold up whole server + chunk = location.getWorld().getChunkAt(x, z); + } + catch(Exception e) + { + System.out.println("UNABLE TO LOAD CHUNK AT " + x + " , " + z); + e.printStackTrace(); + continue; + } String chunkStr = UtilWorld.chunkToStr(chunk); if (addNegative) From 890ab9f67efeecf92035c7fa2307185528d7f8f2 Mon Sep 17 00:00:00 2001 From: phobia Date: Fri, 29 Apr 2016 12:53:20 +1000 Subject: [PATCH 11/24] Uncommented ClansBanManager's instances --- .../src/mineplex/game/clans/Clans.java | 5 ++-- .../game/clans/clans/ClansManager.java | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 60c35c372..3014fcb19 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -41,6 +41,7 @@ import mineplex.core.updater.FileUpdater; import mineplex.core.updater.Updater; import mineplex.core.visibility.VisibilityManager; import mineplex.game.clans.clans.ClansManager; +import mineplex.game.clans.clans.ban.ClansBanManager; import mineplex.game.clans.items.GearManager; import mineplex.game.clans.shop.building.BuildingShop; import mineplex.game.clans.shop.farming.FarmingShop; @@ -112,7 +113,7 @@ public class Clans extends JavaPlugin Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); -// ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager); + ClansBanManager clansBans = new ClansBanManager(this, _clientManager, _donationManager); Punish punish = new Punish(this, webServerAddress, _clientManager); AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager); @@ -144,7 +145,7 @@ public class Clans extends JavaPlugin GearManager customGear = new GearManager(this, packetHandler, _clientManager, _donationManager); HologramManager hologram = new HologramManager(this, packetHandler); - _clansManager = new ClansManager(this, /*clansBans,*/ serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress); + _clansManager = new ClansManager(this, clansBans, serverStatusManager.getCurrentServerName(), incognito, packetHandler, punish, _clientManager, _donationManager, preferenceManager, blockRestore, statsManager, teleport, chat, customGear, hologram, webServerAddress); new Recipes(this); new Farming(this); new BuildingShop(_clansManager, _clientManager, _donationManager); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index d36142220..9b400d5a3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -81,6 +81,7 @@ import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.Clans; import mineplex.game.clans.clans.ClanTips.TipType; import mineplex.game.clans.clans.ClansUtility.ClanRelation; +import mineplex.game.clans.clans.ban.ClansBanManager; import mineplex.game.clans.clans.commands.ClanManagementCommand; import mineplex.game.clans.clans.commands.ClansAllyChatCommand; import mineplex.game.clans.clans.commands.ClansChatCommand; @@ -226,19 +227,19 @@ public class ClansManager extends MiniClientPluginimplements IRelati public String UserDataDir = UtilServer.getServer().getWorlds().get(0).getWorldFolder().getPath() + File.separator + ".." + File.separator + "CLANS_USER_DATA" + File.separator; - /*private ClansBanManager _clansBans;*/ + private ClansBanManager _clansBans; public ClanTips ClanTips; // Spawn area - public ClansManager(JavaPlugin plugin/*, ClansBanManager clansBans*/, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress) + public ClansManager(JavaPlugin plugin, ClansBanManager clansBans, String serverName, IncognitoManager incognitoManager, PacketHandler packetHandler, Punish punish, CoreClientManager clientManager, DonationManager donationManager, PreferencesManager preferencesManager, BlockRestore blockRestore, StatsManager statsManager, Teleport teleport, Chat chat, GearManager gearManager, HologramManager hologramManager, String webServerAddress) { super("Clans Manager", plugin); _instance = this; - /*_clansBans = clansBans;*/ + _clansBans = clansBans; _punish = punish; _incognitoManager = incognitoManager; @@ -605,21 +606,21 @@ public class ClansManager extends MiniClientPluginimplements IRelati { event.setJoinMessage(null); - /*if (_clansBans.willBeKicked(event.getPlayer())) - { + if (_clansBans.willBeKicked(event.getPlayer())) + { return; - }*/ + } if (_incognitoManager.Get(event.getPlayer()).Status) { return; } - /*_clansBans.runAfterLoad(event.getPlayer().getName(), () -> { + _clansBans.runAfterLoad(event.getPlayer().getName(), () -> { if (_clansBans.Get(event.getPlayer().getName()).isBanned()) { return; - }*/ + } for (Player other : UtilServer.getPlayers()) { @@ -631,7 +632,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati other.sendMessage(F.sys("Join", event.getPlayer().getName())); } - /*});*/ + }); } @EventHandler(priority = EventPriority.HIGHEST) @@ -644,10 +645,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - /*if (_clansBans.willBeKicked(event.getPlayer())) + if (_clansBans.willBeKicked(event.getPlayer())) { return; - }*/ + } for (Player other : UtilServer.getPlayers()) { @@ -670,10 +671,10 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - /*if (_clansBans.willBeKicked(event.getPlayer())) + if (_clansBans.willBeKicked(event.getPlayer())) { return; - }*/ + } if (event.getReason().contains("You are banned from Clans")) { From 14204fba5cdde1901123c05319bb2d8f63731ab2 Mon Sep 17 00:00:00 2001 From: phobia Date: Fri, 29 Apr 2016 14:46:14 +1000 Subject: [PATCH 12/24] Changed resource packs to home hosted ones --- .../Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 3014fcb19..213437a97 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -136,8 +136,8 @@ public class Clans extends JavaPlugin ResourcePackManager resourcePackManager = new ResourcePackManager(this, portal); resourcePackManager.setResourcePack(new Pair[] { - Pair.create(MinecraftVersion.Version1_8, "http://phinary.ca/ResClans.zip"), - Pair.create(MinecraftVersion.Version1_9, "http://phinary.ca/ResClans19.zip") + Pair.create(MinecraftVersion.Version1_8, "file.mineplex.com/ResClans.zip"), + Pair.create(MinecraftVersion.Version1_9, "file.mineplex.com/ResClans19.zip") }, true); // Enable custom-gear related managers From 8ca38b25983a25318c7fc8b7e01febdaf7432f58 Mon Sep 17 00:00:00 2001 From: cnr Date: Sat, 30 Apr 2016 18:53:57 -0500 Subject: [PATCH 13/24] Prepend http:// to resource pack locations --- .../Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java index 213437a97..7a95f29f5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -136,8 +136,8 @@ public class Clans extends JavaPlugin ResourcePackManager resourcePackManager = new ResourcePackManager(this, portal); resourcePackManager.setResourcePack(new Pair[] { - Pair.create(MinecraftVersion.Version1_8, "file.mineplex.com/ResClans.zip"), - Pair.create(MinecraftVersion.Version1_9, "file.mineplex.com/ResClans19.zip") + Pair.create(MinecraftVersion.Version1_8, "http://file.mineplex.com/ResClans.zip"), + Pair.create(MinecraftVersion.Version1_9, "http://file.mineplex.com/ResClans19.zip") }, true); // Enable custom-gear related managers From 2337e89a93673adf38ccfd3bbceeda2370d33ffc Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 01:42:11 +0100 Subject: [PATCH 14/24] Improvements to the Clans ban system in general as it was performing more operations than required, and accessing the database more than was necessary. Polished up the Clans ban GUI as well. --- .../mineplex/core/common/util/UtilServer.java | 7 +- .../core/common/util/UtilStreams.java | 8 + .../mineplex/core/itemstack/ItemBuilder.java | 14 ++ .../game/clans/clans/ClansManager.java | 6 +- .../game/clans/clans/ban/ClansBan.java | 8 + .../game/clans/clans/ban/ClansBanClient.java | 13 +- .../game/clans/clans/ban/ClansBanManager.java | 105 ++++---- .../clans/clans/ban/ClansBanRepository.java | 102 +++----- .../clans/ban/commands/ClansBanCommand.java | 17 +- .../game/clans/clans/ban/ui/ClansBanPage.java | 227 ++++++++---------- 10 files changed, 231 insertions(+), 276 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java index 2b574345e..d8c49827a 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilServer.java @@ -141,7 +141,12 @@ public class UtilServer public static boolean IsOnline(String name) { - return !UtilStreams.IsEmpty(getPlayersCollection().stream().filter(player -> player.getName().equals(name))); + return !UtilStreams.IsEmpty(getPlayersCollection().stream().filter(name::equals)); + } + + public static boolean IsOffline(String name) + { + return !UtilStreams.IsEmpty(getPlayersCollection().stream().filter(name::equals)); } public static Player GetPlayer(String name) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilStreams.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilStreams.java index 4fea3c6de..8d2e5df4e 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilStreams.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilStreams.java @@ -2,10 +2,13 @@ package mineplex.core.common.util; import java.io.DataInputStream; import java.io.IOException; +import java.util.List; import java.util.stream.Stream; import org.apache.commons.lang.Validate; +import com.google.common.collect.Lists; + public class UtilStreams { public static boolean IsEmpty(Stream stream) @@ -55,4 +58,9 @@ public class UtilStreams return read; } + public static List ToList(Stream filter) + { + return Lists.newArrayList((T[]) ToArray(filter)); + } + } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java index 49d0af8e3..a424008c0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/itemstack/ItemBuilder.java @@ -24,6 +24,7 @@ import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.SkullMeta; import mineplex.core.common.util.C; +import mineplex.core.common.util.UtilInv; public class ItemBuilder { @@ -56,6 +57,7 @@ public class ItemBuilder private Material _mat; private String _title = null; private boolean _unbreakable; + private boolean _dullEnchantment; private String _playerHeadName = null; private HashSet _itemFlags = new HashSet(); @@ -268,6 +270,11 @@ public class ItemBuilder item.addUnsafeEnchantments(_enchants); + if (_dullEnchantment) + { + UtilInv.addDullEnchantment(item); + } + return item; } @@ -413,4 +420,11 @@ public class ItemBuilder return this; } + public ItemBuilder addDullEnchantment(boolean dullEnchantment) + { + _dullEnchantment = dullEnchantment; + + return this; + } + } \ No newline at end of file diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index a37b131d3..2fbc530bd 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -642,11 +642,11 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - if (_clansBans.willBeKicked(event.getPlayer())) + if (_clansBans.Get(event.getPlayer().getName()).isBanned()) { return; } - + for (Player other : UtilServer.getPlayers()) { if (_tutorial.inTutorial(other)) @@ -655,7 +655,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati continue; } - other.sendMessage(F.sys("Quit", event.getPlayer().getName())); + other.sendMessage(F.sys("Quit ", event.getPlayer().getName())); } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBan.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBan.java index 80af66e13..60ae2b90f 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBan.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBan.java @@ -6,6 +6,9 @@ import java.util.UUID; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilTime; +/** + * Stores the information about a ban in Clans. + */ public class ClansBan { private int _id; @@ -90,4 +93,9 @@ public class ClansBan { return _uuid; } + + public void remove() + { + _removed = true; + } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanClient.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanClient.java index af8e5b888..6ced4ca56 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanClient.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanClient.java @@ -1,17 +1,22 @@ package mineplex.game.clans.clans.ban; -import java.util.List; +import java.util.Set; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilTime; +/** + * Signifies a player on clans, and a Set of their current clan bans. + */ public class ClansBanClient { + public String Name; public String UUID; - public List Bans; + public Set Bans; - public ClansBanClient(String uuid, List bans) + public ClansBanClient(String name, String uuid, Set bans) { + Name = name; UUID = uuid; Bans = bans; } @@ -75,7 +80,7 @@ public class ClansBanClient continue; } - if (ban.getTimeLeft() > longest.getTimeLeft()) + if (ban.getTimeLeft() > longest.getTimeLeft() || ban.isPermanent()) { longest = ban; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanManager.java index b0c5d4601..0975ac2d8 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanManager.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; import org.bukkit.Bukkit; @@ -17,16 +16,15 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; -import com.google.common.collect.Lists; - import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.account.ILoginProcessor; import mineplex.core.common.DefaultHashMap; -import mineplex.core.common.Pair; import mineplex.core.common.util.C; import mineplex.core.common.util.Callback; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilStreams; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.donation.DonationManager; @@ -41,7 +39,7 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor private CoreClientManager _clientManager; private ClansBanRepository _repository; private Map _clients; - private Map> _cache; + private Map _cache; private DefaultHashMap> _runAfterLoad; private ClansBanShop _shop; @@ -55,7 +53,7 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor _clientManager = clientManager; - _repository = new ClansBanRepository(plugin, this); + _repository = new ClansBanRepository(plugin); _clients = new HashMap<>(); _cache = new HashMap<>(); @@ -85,29 +83,30 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor } player.kickPlayer(reason); + + runSyncLater(() -> { + _toKick.remove(name); + }, 20l); }); } - if (!event.getType().equals(UpdateType.MIN_01)) + if (event.getType().equals(UpdateType.MIN_01)) { - return; - } - - synchronized (_lock) - { - List purge = Lists.newArrayList(); - - _clients.keySet().stream().filter(name -> Bukkit.getPlayer(name) == null).forEach(purge::add); - - purge.forEach(this::UnloadClient); + synchronized (_lock) + { + UtilStreams.ToList(_clients.keySet().stream().filter(UtilServer::IsOnline)).forEach(this::UnloadClient); + } } } - public void ban(ClansBanClient client, String name, String admin, long time, String reason, Callback callback) + public void ban(ClansBanClient client, String admin, long time, String reason, Callback callback) { - _repository.ban(UUID.fromString(client.UUID), admin, time, reason, time == -1); - - LoadClient(name, callback); + runAsync(() -> { + _repository.ban(UUID.fromString(client.UUID), admin, time, reason, time == -1, ban -> { + client.Bans.add(ban); + callback.run(client); + }); + }); } public CoreClientManager getClientManager() @@ -154,21 +153,7 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor public void UnloadClient(ClansBanClient client) { - synchronized (_lock) - { - String name = ""; - - for (Entry entry : _clients.entrySet()) - { - if (entry.getValue().equals(client)) - { - name = entry.getKey(); - break; - } - } - - _clients.remove(name); - } + UnloadClient(client.Name); } public void UnloadClient(String name) @@ -179,17 +164,24 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor } } - public void LoadClient(final String name, Callback callback) + public void LoadClient(String name, Callback callback) { if (_clients.containsKey(name)) + { + System.out.println("Clans Bans> Soft Warning: Loading client even though client is already loaded."); _clients.remove(name); + } - GetRepository().loadBans(name, client -> { + GetRepository().loadClient(name, client -> { synchronized (_lock) { - _clients.put(name, client); + _clients.put(name.toLowerCase(), client); System.out.println("> CLIENTS: " + _clients); - if (callback != null) callback.run(client); + + if (callback != null) + { + callback.run(client); + } } }); } @@ -207,12 +199,12 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor return _shop; } - public void cache(Player player, String playerName, String reason) + public void cache(Player player, String victim, String reason) { - _cache.put(player.getName(), Pair.create(playerName, reason)); + _cache.put(player.getName(), new ClansBanCache(victim, reason)); } - public Pair getCachedData(Player player) + public ClansBanCache getCachedData(Player player) { return _cache.get(player.getName()); } @@ -222,50 +214,45 @@ public class ClansBanManager extends MiniPlugin implements ILoginProcessor _cache.remove(name); } - public void unban(ClansBanClient target, ClansBan ban, String name, Callback callback) + public void unban(ClansBanClient target, ClansBan ban, Callback callback) { if (!target.UUID.equals(ban.getUUID().toString())) { return; } + ban.remove(); _repository.removeBan(ban); - LoadClient(name, callback); + callback.run(target); } public boolean willBeKicked(Player player) { return _toKick.containsKey(player.getName()); } + + public void queueToKick(Player target, String reason) + { + _toKick.put(target.getName(), reason); + } public void processLoginResultSet(String playerName, int accountId, ResultSet resultSet) throws SQLException { - _repository.loadBans(playerName, client -> { + LoadClient(playerName, client -> { if (client.isBanned()) { String time = UtilTime.convertString(client.getLongestBan().getTimeLeft(), 0, TimeUnit.FIT); if (client.getLongestBan().isPermanent()) + { time = "Permanent"; + } String reason = C.cRedB + "You are banned from Clans for " + time + "\n" + C.cWhite + client.getLongestBan().getReason(); _toKick.put(playerName, reason); - - ClansManager.getInstance().runSyncLater(() -> { - if (Bukkit.getPlayer(playerName) != null) - { - Bukkit.getPlayer(playerName).kickPlayer(_toKick.remove(playerName)); - } - else - { - _runAfterLoad.get(playerName).forEach(Runnable::run); - _runAfterLoad.get(playerName).clear(); - } - }, 5L); - } }); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java index 0c4efadf1..a4dfa9f5c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanRepository.java @@ -1,14 +1,13 @@ package mineplex.game.clans.clans.ban; -import java.sql.ResultSet; import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.List; +import java.util.Set; import java.util.UUID; import org.bukkit.plugin.java.JavaPlugin; -import mineplex.core.account.CoreClient; +import com.google.common.collect.Sets; + import mineplex.core.common.util.Callback; import mineplex.core.common.util.UUIDFetcher; import mineplex.core.database.MinecraftRepository; @@ -20,65 +19,44 @@ import mineplex.serverdata.database.column.ColumnVarChar; public class ClansBanRepository extends MinecraftRepository { - private ClansBanManager _manager; - private static final String BAN_PLAYER = "INSERT INTO clanBans (uuid, admin, reason, banTime, unbanTime, permanent, removed) VALUES (?, ?, ?, ?, ?, ?, ?);"; private static final String REMOVE_BAN = "UPDATE clanBans SET removed = 1 WHERE id = ?;"; private static final String GET_ALL_BANS = "SELECT * FROM clanBans WHERE uuid = ?;"; - public ClansBanRepository(JavaPlugin plugin, ClansBanManager manager) + public ClansBanRepository(JavaPlugin plugin) { super(plugin, DBPool.getAccount()); - - _manager = manager; } - public void ban(UUID uuid, String admin, long time, String reason, boolean permanent) + public void ban(UUID uuid, String admin, long time, String reason, boolean permanent, Callback callback) { - executeInsert(BAN_PLAYER, null, + Timestamp banTime = new Timestamp(System.currentTimeMillis()); + Timestamp unbanTime = new Timestamp(System.currentTimeMillis() + time); + + executeInsert(BAN_PLAYER, + generatedKeys -> { + if (generatedKeys.next() && callback != null) + { + callback.run(new ClansBan(generatedKeys.getInt(1), uuid, admin, reason, banTime, unbanTime, permanent, false)); + } + }, + new ColumnVarChar("uuid", 36, uuid.toString()), new ColumnVarChar("admin", 16, admin), new ColumnVarChar("reason", 128, reason), - new ColumnTimestamp("banTime", new Timestamp(System.currentTimeMillis())), - new ColumnTimestamp("unbanTime", new Timestamp(System.currentTimeMillis() + time)), + new ColumnTimestamp("banTime", banTime), + new ColumnTimestamp("unbanTime", unbanTime), new ColumnBoolean("permanent", permanent), new ColumnBoolean("removed", false) ); } - public void loadBans(final String name, final Callback callback) + public void loadClient(String name, final Callback callback) { - loadClientByName(name, client -> { - String uuid = UUIDFetcher.getUUIDOf(client.GetPlayerName()).toString(); - - executeQuery(GET_ALL_BANS, resultSet -> { - final List list = new ArrayList(); - - while (resultSet.next()) - { - int id = resultSet.getInt(1); - String ruuid = resultSet.getString(2); - String admin = resultSet.getString(3); - String reason = resultSet.getString(4); - Timestamp banTime = resultSet.getTimestamp(5); - Timestamp unbanTime = resultSet.getTimestamp(6); - boolean permanent = resultSet.getBoolean(7); - boolean removed = resultSet.getBoolean(8); - - list.add(new ClansBan(id, UUID.fromString(ruuid), admin, reason, banTime, unbanTime, permanent, removed)); - } - - callback.run(new ClansBanClient(uuid, list)); - - }, new ColumnVarChar("uuid", 36, uuid)); - }); - } - - public void loadBans(final String name, final String uuid, final ResultSet resultSet, final Callback callback) - { - try - { - final List list = new ArrayList(); + String uuid = UUIDFetcher.getUUIDOf(name).toString(); + + executeQuery(GET_ALL_BANS, resultSet -> { + final Set bans = Sets.newConcurrentHashSet(); while (resultSet.next()) { @@ -90,33 +68,15 @@ public class ClansBanRepository extends MinecraftRepository Timestamp unbanTime = resultSet.getTimestamp(6); boolean permanent = resultSet.getBoolean(7); boolean removed = resultSet.getBoolean(8); - - list.add(new ClansBan(id, UUID.fromString(ruuid), admin, reason, banTime, unbanTime, permanent, removed)); - - System.out.println("Got ban for " + name); + + bans.add(new ClansBan(id, UUID.fromString(ruuid), admin, reason, banTime, unbanTime, permanent, removed)); } - callback.run(new ClansBanClient(uuid, list)); - - System.out.println("> Successfully handled result"); - System.out.println(">> FINISH"); - } - catch (Exception exception) - { - exception.printStackTrace(); - } - } - - private void loadClientByName(String name, Callback client) - { - if (_manager.getClientManager().Contains(name)) - { - client.run(_manager.getClientManager().Get(name)); - } - else - { - _manager.getClientManager().loadClientByName(name, () -> client.run(_manager.getClientManager().Get(name))); - } + if (callback != null) + { + callback.run(new ClansBanClient(name, uuid, bans)); + } + }, new ColumnVarChar("uuid", 36, uuid)); } @Override @@ -128,7 +88,7 @@ public class ClansBanRepository extends MinecraftRepository protected void update() { } - + public void removeBan(ClansBan ban) { executeUpdate(REMOVE_BAN, new ColumnInt("id", ban.getId())); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/commands/ClansBanCommand.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/commands/ClansBanCommand.java index 64d766b4a..dff0d8243 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/commands/ClansBanCommand.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/commands/ClansBanCommand.java @@ -5,7 +5,6 @@ import org.bukkit.entity.Player; import mineplex.core.command.CommandBase; import mineplex.core.common.Rank; import mineplex.core.common.util.C; -import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.game.clans.clans.ban.ClansBanManager; @@ -21,7 +20,7 @@ public class ClansBanCommand extends CommandBase { if (args == null || args.length < 1) { - UtilPlayer.message(caller, C.cGold + "/cb - Displays the \"Clans Punish\" GUI, allowing you to ban the player, and "); + UtilPlayer.message(caller, C.cBlue + "/cb " + C.cGray + " - " + C.cYellow + "Displays the \"Clans Punish\" GUI, allowing you to ban the player, and view thier past bans."); } else if (args.length > 1) { @@ -36,18 +35,6 @@ public class ClansBanCommand extends CommandBase final String finalReason = reason; - //Match exact online first - Player target = UtilPlayer.searchExact(playerName); - if (target != null) - { - Plugin.LoadClient(playerName, client -> { - Plugin.cache(caller, playerName, finalReason); - Plugin.getShop().attemptShopOpen(caller); - }); - - return; - } - Plugin.LoadClient(playerName, client -> { Plugin.cache(caller, playerName, finalReason); Plugin.getShop().attemptShopOpen(caller); @@ -55,7 +42,7 @@ public class ClansBanCommand extends CommandBase } else { - UtilPlayer.message(caller, C.cGold + "/cb - Displays the \"Clans Punish\" GUI, allowing you to ban the player, and "); + UtilPlayer.message(caller, C.cBlue + "/cb " + C.cGray + " - " + C.cYellow + "Displays the \"Clans Punish\" GUI, allowing you to ban the player, and view thier past bans."); } } } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ui/ClansBanPage.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ui/ClansBanPage.java index f7ce1faa5..53d25f11d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ui/ClansBanPage.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ui/ClansBanPage.java @@ -2,163 +2,144 @@ package mineplex.game.clans.clans.ban.ui; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.inventory.ClickType; import org.bukkit.inventory.ItemStack; import mineplex.core.account.CoreClientManager; -import mineplex.core.common.Pair; import mineplex.core.common.util.C; import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilInv; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.donation.DonationManager; import mineplex.core.itemstack.ItemBuilder; import mineplex.core.shop.page.ShopPageBase; import mineplex.game.clans.clans.ban.ClansBan; +import mineplex.game.clans.clans.ban.ClansBanClient; import mineplex.game.clans.clans.ban.ClansBanManager; public class ClansBanPage extends ShopPageBase { - private int _days; - private int _hours; + private long _time; private boolean _permanent; + private ClansBanClient _victimClient; + + private String _victim; + private String _reason; + public ClansBanPage(final ClansBanManager banManager, final ClansBanShop shop, final CoreClientManager clientManager, final DonationManager donationManager, final String name, final Player player) { super(banManager, shop, clientManager, donationManager, name, player); + _victim = getPlugin().getCachedData(player).getVictim(); + _reason = getPlugin().getCachedData(player).getReason(); + + _victimClient = getPlugin().Get(_victim); + buildPage(); } protected void buildPage() { - getPlugin().runAsync(() -> { - _days = Math.max(0, _days); - _hours = Math.max(0, _hours); - - Pair data = getPlugin().getCachedData(getPlayer()); - getPlugin().LoadClient(data.getLeft(), client -> { - int slot = 27; - - // Middle of first row - addButton(4, new ItemBuilder(Material.COAL_BLOCK) - .setTitle(C.cDGreenB + data.getLeft()) - .addLore(" ") - .addLore(C.cYellow + data.getRight()).build(), (player, click) -> {}); - - addButton((9 * 1) + 3, new ItemBuilder(Material.PAPER) - .setTitle(C.cRed + "-1 Hour").build(), - (player, click) -> { - _hours--; - refresh(); - }); - - addButton((9 * 1) + 2, new ItemBuilder(Material.PAPER) - .setTitle(C.cRed + "-1 Day").build(), - (player, click) -> { - _days--; - refresh(); - }); - - addButton((9 * 1) + 1, new ItemBuilder(Material.PAPER) - .setTitle(C.cRed + "-30 Days").build(), - (player, click) -> { - _days -= 30; - refresh(); - }); - - - addButton((9 * 1) + 5, new ItemBuilder(Material.PAPER) - .setTitle(C.cGreen + "+1 Hour").build(), - (player, click) -> { - _hours++; - refresh(); - }); - - addButton((9 * 1) + 6, new ItemBuilder(Material.PAPER) - .setTitle(C.cGreen + "+1 Day").build(), - (player, click) -> { - _days++; - refresh(); - }); - - addButton((9 * 1) + 7, new ItemBuilder(Material.PAPER) - .setTitle(C.cGreen + "+30 Days").build(), - (player, click) -> { - _days += 30; - refresh(); - }); - - // Middle of second row - addButton((9 * 1) + 4, new ItemBuilder(Material.WATCH) - .setTitle(C.cGold + "Time Options") - .addLore(" ") - .addLore("Permanent: " + F.elem(_permanent ? "Yes" : "No")) - .addLore("Days: " + F.elem(Integer.valueOf(_days))) - .addLore("Hours: " + F.elem(Integer.valueOf(_hours))) - .addLore(" ") - .addLore("Right-Click this button") - .addLore("to ban permanently.").build(), - (player, click) -> { - if (click == ClickType.RIGHT) - { - _permanent = !_permanent; - refresh(); - } - }); - - // Middle of third row - addButton((9 * 2) + 4, new ItemBuilder(Material.EMERALD_BLOCK) - .setTitle(C.cRedB + "BAN PLAYER") - .addLore(" ") - .addLore("Player: " + F.elem(data.getLeft())) - .addLore("Reason: " + F.elem(data.getRight())).build(), - (player, click) -> { - getPlugin().runAsync(() -> { - double time = _days + ((1.f / 24.f) * _hours); - getPlugin().ban(client, data.getLeft(), getPlayer().getName(), _permanent ? -1 : (long) (time * 24.f * 60.f * 60.f * 1000.f), data.getRight(), c -> { - UtilPlayer.message(getPlayer(), F.main("Clans", F.elem(data.getLeft()) + " is now banned " + c.getBanTimeFormatted() + ".")); - - getPlugin().runSync(() -> { - Player target = Bukkit.getPlayer(data.getLeft()); - - if (target != null) - target.kickPlayer(C.cRedB + "You have been banned from Clans " + c.getBanTimeFormatted() + "."); - }); - }); - }); - }); - - for (ClansBan ban : client.Bans) - { - ItemStack item = - new ItemBuilder(ban.isActive() ? Material.EMERALD_BLOCK : Material.REDSTONE_BLOCK) + _time = Math.max(0, _time); + + int slot = 27; + + // Middle of first row + addButton(4, new ItemBuilder(Material.SKULL_ITEM) + .setData((short) 3) + .setPlayerHead(_victim) + .setTitle(C.cDGreenB + _victim) + .addLore(" ") + .addLore(C.cYellow + _reason).build(), (player, click) -> {}); + + addTimeAdjuster((9 * 1 + 2), -(1000l * 60l * 60l)); + addTimeAdjuster((9 * 1 + 1), -(1000l * 60l * 60l * 24l)); + addTimeAdjuster((9 * 1 + 0), -(1000l * 60l * 60l * 24l * 30l)); + addTimeAdjuster((9 * 1 + 6), (1000l * 60l * 60l)); + addTimeAdjuster((9 * 1 + 7), (1000l * 60l * 60l * 24l)); + addTimeAdjuster((9 * 1 + 8), (1000l * 60l * 60l * 24l * 30l)); + + addButton((9 * 1) + 4, + new ItemBuilder(Material.RECORD_5) + .setTitle(C.cRedB + "Ban Player") + .setLore( + " ", + C.cGray + "Player: " + F.elem(_victim), + C.cGray + "Reason: " + F.elem(_reason), + C.cGray + "Time: " + F.elem(_permanent ? "Permanent" : UtilTime.MakeStr(_time)), + "", + C.cRed + C.Italics + "Left-Click to BAN PLAYER", + C.cGray + C.Italics + "Right-Click to toggle permanent ban setting" + ).build(), + (player, click) -> { + if (click == ClickType.RIGHT) + { + _permanent = !_permanent; + refresh(); + } + else + { + performBan(); + } + }); + + for (ClansBan ban : _victimClient.Bans) + { + ItemStack item = new ItemBuilder(ban.isActive() ? Material.EMERALD_BLOCK : Material.REDSTONE_BLOCK) .setTitle(ban.isActive() ? C.cGreenB + "Active" : C.cRedB + "Inactive") - .addLore(" ") - .addLore("Date banned: " + C.cYellow + UtilTime.date(ban.getBanTime().getTime())) - .addLore("Admin: " + C.cYellow + ban.getAdmin()) - .addLore("Time left: " + C.cYellow + (ban.isActive() ? ban.getBanTimeFormatted(false) : "None")) - .addLore("Permanent: " + C.cYellow + (ban.isPermanent() ? "Yes" : "No")) + .addLore(C.cGray + "Date banned: " + C.cYellow + UtilTime.date(ban.getBanTime().getTime())) + .addLore(C.cGray + "Admin: " + C.cYellow + ban.getAdmin()) + .addLore(C.cGray + "Time left: " + C.cYellow + (ban.isActive() ? ban.getBanTimeFormatted(false) : "None")) + .addLore(C.cGray + "Permanent: " + C.cYellow + (ban.isPermanent() ? "Yes" : "No")) .addLore(C.cGray + "Reason: " + C.cYellow + ban.getReason(), 16) - .addLore("Is Disabled: " + C.cYellow + (ban.isRemoved() ? "Yes" : "No")) - .addLore(!ban.isActive() ? null : C.cDAqua + "Left-Click to disable ban") - - .build(); - - if (ban.isActive()) - UtilInv.addDullEnchantment(item); - - addButton(slot++, item, (player, click) -> { - if (ban.isActive()) - { - getPlugin().runAsync(() -> getPlugin().unban(client, ban, data.getLeft(), c -> refresh())); - } + .addLore(C.cGray + "Is Disabled: " + C.cYellow + (ban.isRemoved() ? "Yes" : "No")) + .addLore(ban.isActive() ? " " : null) + .addLore(ban.isActive() ? C.cDAqua + "Left-Click to disable ban" : null) + .addDullEnchantment(ban.isActive()) + .build(); + + addButton(slot++, item, (player, click) -> { + if (ban.isActive()) + { + getPlugin().runAsync(() -> { + getPlugin().unban(_victimClient, ban, client -> { + refresh(); + player.playSound(player.getLocation(), Sound.NOTE_PLING, 1f, 1f); + }); }); } }); + } + } + + private void performBan() + { + getPlugin().runAsync(() -> { + getPlugin().ban(_victimClient, getPlayer().getName(), _permanent ? -1 : _time, _reason, client -> { + UtilPlayer.message(getPlayer(), F.main("Clans", F.elem(_victim) + " is now banned " + client.getBanTimeFormatted() + ".")); + + Player target = Bukkit.getPlayer(_victim); + + if (target != null) + { + getPlugin().queueToKick(target, C.cRedB + "You have been banned from Clans " + client.getBanTimeFormatted() + "."); + } + + refresh(); + }); }); } + + private void addTimeAdjuster(int index, long time) + { + addButton(index, new ItemBuilder(Material.PAPER).setTitle(C.cRed + (time < 0 ? "-" : "") + UtilTime.MakeStr(Math.abs(time))).build(), + (player, click) -> { + _time += time; + refresh(); + }); + } } From 4cffb399410e2b5999b55f88de638572f15eec73 Mon Sep 17 00:00:00 2001 From: cnr Date: Sat, 30 Apr 2016 22:02:22 -0500 Subject: [PATCH 15/24] Delay dismount teleport by one tick This mitigates a stack overflow caused by a teleport before a dismount event processes fully. --- .../src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java index 7974c50c4..94bc96849 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java @@ -458,7 +458,7 @@ public abstract class SiegeWeapon implements Listener private void dismount(Player player) { - player.teleport(player.getLocation().add(0, 1, 0)); + _clans.runSync(() -> player.teleport(player.getLocation().add(0, 1, 0))); } protected void handleLeftClick(Player player) From 9d97ea8d1e74cc8020a42e0fb07887052ac4cd33 Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 10:11:17 +0100 Subject: [PATCH 16/24] Missing Clans ban cache class (to do with the commit previously by me) --- .../game/clans/clans/ban/ClansBanCache.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanCache.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanCache.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanCache.java new file mode 100644 index 000000000..73178787c --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ban/ClansBanCache.java @@ -0,0 +1,26 @@ +package mineplex.game.clans.clans.ban; + +/** + * Stores the data provided through the /cban (Clans ban) command for use further in the plugin. + */ +public class ClansBanCache +{ + private String _victim; + private String _reason; + + public ClansBanCache(String victim, String reason) + { + _victim = victim; + _reason = reason; + } + + public String getVictim() + { + return _victim; + } + + public String getReason() + { + return _reason; + } +} From e139bea46513ef82fb7f7dee009da7e7fbd6e46a Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 23:03:18 +0100 Subject: [PATCH 17/24] Fix kill messages inserting a space below them in chat. --- .../mineplex/core/common/util/UtilPlayer.java | 9 ++++++- .../game/clans/clans/ClansManager.java | 27 +++++++++++-------- .../game/core/combat/CombatManager.java | 4 +-- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java index 316ffedd8..2e7447e79 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilPlayer.java @@ -28,6 +28,7 @@ import org.bukkit.util.BlockIterator; import org.bukkit.util.Vector; import mineplex.core.common.MinecraftVersion; +import mineplex.core.common.events.PlayerMessageEvent; import net.minecraft.server.v1_8_R3.EntityPlayer; import net.minecraft.server.v1_8_R3.Packet; import net.minecraft.server.v1_8_R3.PlayerConnection; @@ -276,7 +277,13 @@ public class UtilPlayer if (wiki) message = UtilWiki.link(message); */ - + + PlayerMessageEvent event = UtilServer.CallEvent(new PlayerMessageEvent((Player) client, message)); + + if (event.isCancelled()) + return; + + ((Player) client).sendMessage(message); } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 93e597064..66f606fb3 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -9,14 +9,11 @@ import java.util.Set; import java.util.TimeZone; import java.util.UUID; -import mineplex.core.recharge.Recharge; -import mineplex.game.clans.clans.ban.ClansBanManager; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Horse; import org.bukkit.entity.Player; -import org.bukkit.entity.Vehicle; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.block.Action; @@ -47,6 +44,7 @@ import mineplex.core.blockrestore.BlockRestore; import mineplex.core.chat.Chat; import mineplex.core.common.Pair; import mineplex.core.common.Rank; +import mineplex.core.common.events.PlayerMessageEvent; import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.NautHashMap; @@ -73,6 +71,7 @@ import mineplex.core.preferences.PreferencesManager; import mineplex.core.projectile.ProjectileManager; import mineplex.core.punish.Punish; import mineplex.core.punish.PunishClient; +import mineplex.core.recharge.Recharge; import mineplex.core.stats.StatsManager; import mineplex.core.task.TaskManager; import mineplex.core.teleport.Teleport; @@ -1305,17 +1304,23 @@ public class ClansManager extends MiniClientPluginimplements IRelati } } + @EventHandler + public void message(PlayerMessageEvent event) + { + if(!_tutorial.inTutorial(event.getPlayer())) + { + return; + } + + if (event.getMessage().startsWith(C.cBlue + "Death>")) + { + event.setCancelled(true); + } + } + @EventHandler(priority = EventPriority.HIGH) public void handleClansDeath(PlayerDeathEvent event) { - event.setDeathMessage(null); - - for(Player player : UtilServer.getPlayers()) - { - if(!_tutorial.inTutorial(player)) - player.sendMessage(event.getDeathMessage()); - } - PlayerClan playerClan; PlayerClan killerClan = null; diff --git a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java index e8cd54e15..c00c1b3d4 100644 --- a/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java +++ b/Plugins/Mineplex.Minecraft.Game.Core/src/mineplex/minecraft/game/core/combat/CombatManager.java @@ -411,7 +411,7 @@ public class CombatManager extends MiniPlugin } } - @EventHandler(priority = EventPriority.LOWEST) + @EventHandler(priority = EventPriority.LOW) public void HandleDeath(PlayerDeathEvent event) { event.setDeathMessage(null); @@ -485,7 +485,7 @@ public class CombatManager extends MiniPlugin killPlayer += " + " + log.GetAssists(); String weapon = log.GetKiller().GetLastDamageSource(); - + UtilPlayer.message( cur, F.main("Death", From 480cc0f9be51ec29331f7a9349a622c585f650ff Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 23:04:30 +0100 Subject: [PATCH 18/24] Fix NullPointerException when a player leaves the server without their Clans Ban client being loaded into memory beforehand. --- .../src/mineplex/game/clans/clans/ClansManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 66f606fb3..3f533f732 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -644,7 +644,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - if (_clansBans.Get(event.getPlayer().getName()).isBanned()) + if (_clansBans.Get(event.getPlayer().getName()) != null && _clansBans.Get(event.getPlayer().getName()).isBanned()) { return; } From 1e18707fd7dc9d101d0d8fd68dbe5adb76d5915f Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 23:06:30 +0100 Subject: [PATCH 19/24] Include the missing PlayerMessageEvent, as I had also forgotten to add documentation about the class. --- .../common/events/PlayerMessageEvent.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Plugins/Mineplex.Core.Common/src/mineplex/core/common/events/PlayerMessageEvent.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/events/PlayerMessageEvent.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/events/PlayerMessageEvent.java new file mode 100644 index 000000000..5ce3258b6 --- /dev/null +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/events/PlayerMessageEvent.java @@ -0,0 +1,61 @@ +package mineplex.core.common.events; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +/** + * Called just before UtilPlayer#message sends out a message to the specified Player. + */ +public class PlayerMessageEvent extends Event +{ + private static final HandlerList handlers = new HandlerList(); + + private Player _player; + private String _message; + + private boolean _cancelled; + + public PlayerMessageEvent(Player player, String message) + { + _player = player; + _message = message; + } + + public Player getPlayer() + { + return _player; + } + + public boolean isCancelled() + { + return _cancelled; + } + + public String getMessage() + { + return _message; + } + + public String getUnformattedMessage() + { + return ChatColor.stripColor(_message); + } + + public void setCancelled(boolean cancelled) + { + _cancelled = cancelled; + } + + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + +} \ No newline at end of file From 026ab15099d53664223751e7ecc589dc8797706e Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 1 May 2016 23:20:55 +0100 Subject: [PATCH 20/24] Fix multiple leaving messages being broadcasted to the server when a player is kicked from the server after getting cbanned. --- .../src/mineplex/game/clans/clans/ClansManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 3f533f732..6ea55ef22 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -675,7 +675,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati return; } - if (event.getReason().contains("You are banned from Clans")) + if (event.getReason().contains("banned from Clans")) { return; } From 8a1b5572a87dc14c1ee5aae45a6be350123c069f Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 2 May 2016 10:31:45 +0100 Subject: [PATCH 21/24] Fix players in tutorial receiving messages from the real game whenever the message sender is not in a clan. --- .../game/clans/clans/ClansManager.java | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java index 6ea55ef22..82a1b020d 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/ClansManager.java @@ -855,7 +855,13 @@ public class ClansManager extends MiniClientPluginimplements IRelati { if (clan == null) { - UtilServer.broadcast(String.format(rank + C.cYellow + "%s " + C.cWhite + "%s", event.getPlayer().getName(), _chat.getFilteredMessage(event.getPlayer(), event.getMessage()))); + for (Player other : event.getRecipients()) + { + if (_tutorial.inTutorial(other)) + continue; + + UtilPlayer.message(other, String.format(rank + C.cYellow + "%s " + C.cWhite + "%s", event.getPlayer().getName(), event.getMessage())); + } return; } @@ -903,28 +909,6 @@ public class ClansManager extends MiniClientPluginimplements IRelati @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void handlePlayerChat(AsyncPlayerChatEvent event) { -// PunishClient punishclient = _punish.GetClient(event.getPlayer().getName()); -// -// if (punishclient != null && punishclient.IsMuted()) -// { -// return; -// } -// -// if (_chat.SilenceCheck(event.getPlayer())) -// { -// return; -// } - - - -// MessageData lastMessage = _chat.lastMessage(event.getPlayer()); -// long chatSlowTime = 1000L * _chat.getChatSlow(); -// long timeDiff = System.currentTimeMillis() - lastMessage.getTimeSent(); -// if (timeDiff < chatSlowTime && !_clientManager.Get(event.getPlayer()).GetRank().has(Rank.HELPER)) -// { -// -// } - ClientClan client = Get(event.getPlayer()); if (client == null) From cd2bd8ac1dd50775333571686c68f6a80274428a Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 2 May 2016 11:49:56 +0100 Subject: [PATCH 22/24] Fix the TNT Cannon in the tutorial not exploding correctly when fired at the enemy base's doors, as that would cause the tnt entity to just slightly be out of the wall bound and that made the tutorial think that the player missed the wall, making that part of the tutorial near-impossible to pass unless known where to fire exactly. Along with this I also made the cannon rotation lock to a specific range so that people can't miss. Ever. --- .../game/clans/clans/siege/weapon/Cannon.java | 1 - .../clans/clans/siege/weapon/SiegeWeapon.java | 30 +++++++- .../goals/attackenemy/BlowUpWallGoal.java | 69 ++++++++----------- .../goals/attackenemy/MountCannonGoal.java | 4 +- 4 files changed, 62 insertions(+), 42 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java index a0e3e889d..0dc3b7a9a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/Cannon.java @@ -447,5 +447,4 @@ public class Cannon extends SiegeWeapon false ); } - } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java index 94bc96849..451477876 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/SiegeWeapon.java @@ -121,6 +121,8 @@ public abstract class SiegeWeapon implements Listener // Customizability private double[] _forcedVelocity; + private float[] _lockedYaw; + protected boolean _isRideable; protected boolean _invertRotation; protected AccessRule _mountAccess; @@ -299,6 +301,22 @@ public abstract class SiegeWeapon implements Listener double yaw = (float) ((float)standYaw + Math.min(dif / _rotSpeed, 4f)); + if (_lockedYaw != null) + { + float min = _lockedYaw[0]; + float max = _lockedYaw[1]; + + if (yaw < min) + { + yaw = min; + } + + if (yaw > max) + { + yaw = max; + } + } + armorStand.setHeadPose(new EulerAngle(0, Math.toRadians(CustomRotate(_yaw = yaw)), 0)); } } @@ -313,6 +331,11 @@ public abstract class SiegeWeapon implements Listener _forcedVelocity = new double[] { vertical, horizontal }; } + public void LockYaw(float minYaw, float maxYaw) + { + _lockedYaw = new float[] { minYaw, maxYaw }; + } + private void fire(Player player) { _lastFired = System.currentTimeMillis(); @@ -523,7 +546,12 @@ public abstract class SiegeWeapon implements Listener protected void CustomRightClick(Player player) { return; } protected void CustomCleanup() { return; } protected void CustomUpdateState(String state) { return; } - protected double CustomRotate(double yaw) { return yaw; } + + protected double CustomRotate(double yaw) + { + return yaw; + } + protected boolean CustomDismount(Player player, Entity entity) { return false; } protected boolean CustomMount(Player player) { return false; } diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/BlowUpWallGoal.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/BlowUpWallGoal.java index 23488e15a..b4010c28a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/BlowUpWallGoal.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/BlowUpWallGoal.java @@ -62,55 +62,46 @@ public class BlowUpWallGoal extends ObjectiveGoal TutorialRegion region = getObjective().getPlugin().getRegion(shooter); - if (getObjective().getPlugin().isIn(center, region, ClansMainTutorial.Bounds.ENEMY_ATTACK_AREA)) + double radius = 5.2; + + HashMap blockList = new HashMap(); + int iR = (int) radius + 1; + + for (int x = -iR; x <= iR; x++) { - double radius = 5.2; - - HashMap blockList = new HashMap(); - int iR = (int) radius + 1; - - for (int x = -iR; x <= iR; x++) + for (int z = -iR; z <= iR; z++) { - for (int z = -iR; z <= iR; z++) + for (int y = -iR; y <= iR; y++) { - for (int y = -iR; y <= iR; y++) + Block curBlock = center.getBlock().getRelative(x, y, z); + + double offset = UtilMath.offset(center, curBlock.getLocation()); + + if (offset <= radius) { - Block curBlock = center.getBlock().getRelative(x, y, z); - - double offset = UtilMath.offset(center, curBlock.getLocation()); - - if (offset <= radius) - { - blockList.put(curBlock, Double.valueOf(offset)); - } + blockList.put(curBlock, Double.valueOf(offset)); } } } + } + + blockList.forEach((block, dist) -> { - blockList.forEach((block, dist) -> { + if (block.getType() == Material.SMOOTH_BRICK + || block.getType() == Material.SMOOTH_STAIRS + || block.getType() == Material.IRON_DOOR_BLOCK) + + if (Math.random() < 0.2 + (dist.doubleValue() / 2.55) || dist.doubleValue() < 1.75) + { + block.setType(Material.AIR, false); - if (block.getType() == Material.SMOOTH_BRICK - || block.getType() == Material.SMOOTH_STAIRS - || block.getType() == Material.IRON_DOOR_BLOCK) - - if (Math.random() < 0.2 + (dist.doubleValue() / 2.55) || dist.doubleValue() < 1.75) - { - block.setType(Material.AIR, false); - - if (block.getType() != Material.IRON_DOOR_BLOCK && block.getType().name().endsWith("BANNER")) - FallingBlocks.Instance.Spawn(block.getLocation(), block.getType(), block.getData(), center); - } - }); + if (block.getType() != Material.IRON_DOOR_BLOCK && block.getType().name().endsWith("BANNER")) + FallingBlocks.Instance.Spawn(block.getLocation(), block.getType(), block.getData(), center); + } + }); - event.setCancelled(true); - finish(shooter); - } - else - { - UtilPlayer.message(shooter, F.main("Clans", "You missed! Try to hit the enemy's front wall, that should make a nice big hole!")); - UtilInv.give(shooter, Material.TNT); - event.setCancelled(true); - } + event.setCancelled(true); + finish(shooter); } @Override diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/MountCannonGoal.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/MountCannonGoal.java index c7bf9a287..8db5dfbfa 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/MountCannonGoal.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/tutorial/tutorials/clans/objective/goals/attackenemy/MountCannonGoal.java @@ -36,8 +36,10 @@ public class MountCannonGoal extends ObjectiveGoal protected void customStart(Player player) { getObjective().getCannons().put(player.getName(), _clansManager.getSiegeManager().spawnCannon(player, getObjective().getPlugin().getPoint(getObjective().getPlugin().getRegion(player), Point.CANNON), false)); - getObjective().getCannons().get(player.getName()).SetForcedVelocity(0.4, 2.45); + getObjective().getCannons().get(player.getName()).SetForcedVelocity(0.44, 2.45); getObjective().getCannons().get(player.getName()).setInvincible(true); + + getObjective().getCannons().get(player.getName()).LockYaw(-193, -173); TutorialSession session = getObjective().getPlugin().getTutorialSession(player); session.setMapTargetLocation(getObjective().getPlugin().getPoint(session.getRegion(), ClansMainTutorial.Point.CANNON)); From 57fca2a8d035e3f1ed51a1d7e3d7aa06bcb6d7ed Mon Sep 17 00:00:00 2001 From: cnr Date: Tue, 3 May 2016 04:54:51 -0500 Subject: [PATCH 23/24] Temporarily(?) mitigate spigot CME During a PlayerVelocityEvent in an unloaded chunk (usually as result of a teleport), if one calls Location#getChunk() on the player's location, and the chunk contains persistent entities, the server crashes with a ConcurrentModificationException. --- .../src/mineplex/game/clans/spawn/Spawn.java | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java index aa44d5d2f..59d1070a5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/spawn/Spawn.java @@ -212,17 +212,7 @@ public class Spawn extends MiniPlugin } } } - - @EventHandler - public void ignoreVelocity(PlayerVelocityEvent event) - { - if (_clansManager.getClanUtility().isSafe(event.getPlayer())) - { - event.setCancelled(true); - System.out.println("cancelled"); - } - } - + @EventHandler public void onSkill(SkillTriggerEvent event) { From 0e509898ec1b62abd6e6d535eaf87d718b3f74a1 Mon Sep 17 00:00:00 2001 From: AlexTheCoder Date: Tue, 3 May 2016 21:07:50 -0400 Subject: [PATCH 24/24] Add a method for simply checking if a player has been participating in the current game, and implement it in the ranked bans system --- .../src/nautilus/game/arcade/ArcadeManager.java | 16 ++++++++++++++++ .../game/arcade/game/RankedTeamGame.java | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java index 62940474c..29b45bbf8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -935,6 +935,22 @@ public class ArcadeManager extends MiniPlugin implements IRelation return _game.IsAlive(player); } + + /** + * Checks if a player is participating in/has been participating in the current game + * @param player The player to check + * @return Whether they are/have been playing + */ + public boolean hasBeenPlaying(Player player) + { + if (_game == null) + return false; + + if (_game.GetTeam(player) == null) + return false; + + return true; + } public void Clear(Player player) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/RankedTeamGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/RankedTeamGame.java index d2ac83ce6..7abcab96e 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/RankedTeamGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/RankedTeamGame.java @@ -114,12 +114,12 @@ public abstract class RankedTeamGame extends TeamGame event.disallow(Result.KICK_OTHER, message); } - @EventHandler + @EventHandler(priority = EventPriority.LOWEST) public void onQuit(PlayerQuitEvent event) { if (InProgress()) { - if (!Manager.IsObserver(event.getPlayer())) + if (Manager.hasBeenPlaying(event.getPlayer())) { Manager.getEloManager().banFromRanked(getAccountId(event.getPlayer().getUniqueId())); }