From 79a2ef3608e961ffa6e834c8c79440f709a01fe5 Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 7 Apr 2016 22:24:47 +0100 Subject: [PATCH 1/4] Fix staff members getting unhidden when in incognito whenever players are shown to the player (can happen when a regular player toggles player vision, and the staff member gets shown to all other players.) --- .../core/incognito/IncognitoManager.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java b/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java index afb328093..2bf7946fb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java @@ -131,6 +131,41 @@ public class IncognitoManager extends MiniDbClientPlugin } } } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + { + return; + } + + for (Player player : UtilServer.getPlayers()) + { + for (Player other : UtilServer.getPlayers()) + { + if (Get(player).Status) + { + IncognitoHidePlayerEvent customEvent = UtilServer.CallEvent(new IncognitoHidePlayerEvent(player)); + + if (!customEvent.isCancelled() && !_clientManager.hasRank(other, _clientManager.Get(player).GetRank())) + { + other.hidePlayer(player); + } + } + + if (Get(other).Status) + { + IncognitoHidePlayerEvent customEvent = UtilServer.CallEvent(new IncognitoHidePlayerEvent(other)); + + if (!customEvent.isCancelled() && !_clientManager.hasRank(player, _clientManager.Get(other).GetRank())) + { + player.hidePlayer(other); + } + } + } + } + } @EventHandler(priority = EventPriority.HIGHEST) public void Quit(PlayerQuitEvent event) From a04f7c23c6b749336c5f93492efc0b9f20e75b2e Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 8 Apr 2016 20:18:56 +0100 Subject: [PATCH 2/4] Disable incognito for staff in hub invisibility, and vice-versa --- .../core/incognito/IncognitoManager.java | 18 +++++--- .../commands/IncognitoToggleCommand.java | 6 +++ .../core/preferences/PreferencesManager.java | 41 ++++++++++++------- .../ui/ExclusivePreferencesPage.java | 8 ++++ .../src/mineplex/game/clans/Clans.java | 13 +++--- .../game/clans/clans/ClansManager.java | 4 +- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 7 +++- .../src/mineplex/staffServer/StaffServer.java | 2 +- .../src/nautilus/game/arcade/Arcade.java | 10 +++-- 9 files changed, 74 insertions(+), 35 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java b/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java index 2bf7946fb..18b94a27b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/incognito/IncognitoManager.java @@ -2,8 +2,6 @@ package mineplex.core.incognito; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -13,8 +11,6 @@ import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; -import com.google.common.base.Function; - import mineplex.core.MiniDbClientPlugin; import mineplex.core.account.CoreClientManager; import mineplex.core.common.Rank; @@ -27,6 +23,7 @@ import mineplex.core.incognito.events.IncognitoStatusChangeEvent; import mineplex.core.incognito.repository.IncognitoClient; import mineplex.core.incognito.repository.IncognitoRepository; import mineplex.core.packethandler.PacketHandler; +import mineplex.core.preferences.PreferencesManager; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -34,11 +31,12 @@ public class IncognitoManager extends MiniDbClientPlugin { private CoreClientManager _clientManager; private IncognitoRepository _repository; + private PreferencesManager _preferencesManager; public IncognitoManager(JavaPlugin plugin, CoreClientManager clientManager, PacketHandler packetHandler) { super("Incognito", plugin, clientManager); - + _repository = new IncognitoRepository(this); _clientManager = clientManager; } @@ -217,4 +215,14 @@ public class IncognitoManager extends MiniDbClientPlugin Get(playerName).Status = resultSet.getInt("status") == 1; } } + + public PreferencesManager getPreferences() + { + return _preferencesManager; + } + + public void setPreferencesManager(PreferencesManager preferencesManager) + { + _preferencesManager = preferencesManager; + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/incognito/commands/IncognitoToggleCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/incognito/commands/IncognitoToggleCommand.java index 23f54dca7..83eefcdc9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/incognito/commands/IncognitoToggleCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/incognito/commands/IncognitoToggleCommand.java @@ -18,6 +18,12 @@ public class IncognitoToggleCommand extends CommandBase @Override public void Execute(Player caller, String[] args) { + if (Plugin.getPreferences().Get(caller).Invisibility) + { + UtilPlayer.message(caller, F.main("Incognito", "You are not allowed to toggle incognito on while Hub Invisibility is enabled.")); + return; + } + if (Plugin.toggle(caller)) { UtilPlayer.message(caller, F.main("Incognito", "You are now incognito. Your status will only change when you run " + F.elem(AliasUsed) + " again.")); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java index ae7f67755..9d6439e46 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/PreferencesManager.java @@ -4,20 +4,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map.Entry; -import mineplex.core.MiniDbClientPlugin; -import mineplex.core.account.CoreClientManager; -import mineplex.core.common.util.C; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilGear; -import mineplex.core.common.util.UtilInv; -import mineplex.core.donation.DonationManager; -import mineplex.core.itemstack.ItemStackFactory; -import mineplex.core.preferences.command.PreferencesCommand; -import mineplex.core.preferences.ui.ExclusivePreferencesShop; -import mineplex.core.preferences.ui.PreferencesShop; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; - import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -29,17 +15,35 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.MiniDbClientPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.util.C; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilGear; +import mineplex.core.common.util.UtilInv; +import mineplex.core.donation.DonationManager; +import mineplex.core.incognito.IncognitoManager; +import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.preferences.command.PreferencesCommand; +import mineplex.core.preferences.ui.ExclusivePreferencesShop; +import mineplex.core.preferences.ui.PreferencesShop; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + public class PreferencesManager extends MiniDbClientPlugin { private PreferencesRepository _repository; private PreferencesShop _shop; private ExclusivePreferencesShop _exclusiveShop; + private IncognitoManager _incognitoManager; + private NautHashMap _saveBuffer = new NautHashMap(); public boolean GiveItem; - public PreferencesManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager) + public PreferencesManager(JavaPlugin plugin, IncognitoManager incognito, CoreClientManager clientManager, DonationManager donationManager) { super("Preferences", plugin, clientManager); @@ -47,6 +51,8 @@ public class PreferencesManager extends MiniDbClientPlugin _exclusiveShop = new ExclusivePreferencesShop(this, clientManager, donationManager); _shop = new PreferencesShop(this, clientManager, donationManager, _exclusiveShop); + _incognitoManager = incognito; + _exclusiveShop.setPreferencesShop(_shop); addCommand(new PreferencesCommand(this)); @@ -138,4 +144,9 @@ public class PreferencesManager extends MiniDbClientPlugin { return "SELECT games, visibility, showChat, friendChat, privateMessaging, partyRequests, invisibility, forcefield, showMacReports, ignoreVelocity, pendingFriendRequests, friendDisplayInventoryUI, clanTips, hubMusic, disableAds FROM accountPreferences WHERE accountPreferences.uuid = '" + uuid + "' LIMIT 1;"; } + + public IncognitoManager getIncognitoManager() + { + return _incognitoManager; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java index 2cde41914..65f7d4b58 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/ExclusivePreferencesPage.java @@ -8,6 +8,8 @@ import org.bukkit.event.inventory.ClickType; import mineplex.core.account.CoreClientManager; 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.core.common.util.UtilUI; import mineplex.core.donation.DonationManager; import mineplex.core.preferences.PreferencesManager; @@ -149,6 +151,12 @@ public class ExclusivePreferencesPage extends ShopPageBaseimplements IRelati // Spawn area - public ClansManager(JavaPlugin plugin/*, ClansBanManager clansBans*/, String serverName, 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); @@ -236,7 +236,7 @@ public class ClansManager extends MiniClientPluginimplements IRelati /*_clansBans = clansBans;*/ _punish = punish; - _incognitoManager = new IncognitoManager(plugin, clientManager, packetHandler); + _incognitoManager = incognitoManager; _serverName = serverName; _clientManager = clientManager; _combatManager = new CombatManager(plugin); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index b663e7f1d..3aa1d6eed 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -106,7 +106,11 @@ public class Hub extends JavaPlugin implements IRelation //Other Modules PacketHandler packetHandler = new PacketHandler(this); DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler); - PreferencesManager preferenceManager = new PreferencesManager(this, clientManager, donationManager); + IncognitoManager incognito = new IncognitoManager(this, clientManager, packetHandler); + PreferencesManager preferenceManager = new PreferencesManager(this, incognito, clientManager, donationManager); + + incognito.setPreferencesManager(preferenceManager); + preferenceManager.GiveItem = true; Creature creature = new Creature(this); NpcManager npcManager = new NpcManager(this, creature); @@ -140,7 +144,6 @@ public class Hub extends JavaPlugin implements IRelation QueueManager queueManager = new QueueManager(this, clientManager, donationManager, new EloManager(this, clientManager), partyManager); - IncognitoManager incognito = new IncognitoManager(this, clientManager, packetHandler); new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, new StackerManager(hubManager), queueManager); Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName()); diff --git a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java index 33e1eb2d5..14d2f9958 100644 --- a/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java +++ b/Plugins/Mineplex.StaffServer/src/mineplex/staffServer/StaffServer.java @@ -57,7 +57,7 @@ public class StaffServer extends JavaPlugin Punish punish = new Punish(this, webServerAddress, clientManager); new NpcManager(this, new Creature(this)); ServerStatusManager serverStatusManager = new ServerStatusManager(this, clientManager, new LagMeter(this, clientManager)); - PreferencesManager preferenceManager = new PreferencesManager(this, clientManager, donationManager); + PreferencesManager preferenceManager = new PreferencesManager(this, null, clientManager, donationManager); preferenceManager.GiveItem = false; Portal portal = new Portal(this, clientManager, serverStatusManager.getCurrentServerName()); diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java index 72b1024b1..08553888b 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -109,15 +109,19 @@ public class Arcade extends JavaPlugin _serverConfiguration = new ServerConfiguration(this, _clientManager); - PreferencesManager preferenceManager = new PreferencesManager(this, _clientManager, _donationManager); + PacketHandler packetHandler = new PacketHandler(this); + + IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler); + PreferencesManager preferenceManager = new PreferencesManager(this, incognito, _clientManager, _donationManager); + incognito.setPreferencesManager(preferenceManager); + Creature creature = new Creature(this); ServerStatusManager serverStatusManager = new ServerStatusManager(this, _clientManager, new LagMeter(this, _clientManager)); LeaderboardManager leaderboardManager = new LeaderboardManager(this, _clientManager); Teleport teleport = new Teleport(this, _clientManager); Portal portal = new Portal(this, _clientManager, serverStatusManager.getCurrentServerName()); new FileUpdater(this, portal, serverStatusManager.getCurrentServerName(), serverStatusManager.getRegion()); - PacketHandler packetHandler = new PacketHandler(this); DisguiseManager disguiseManager = new DisguiseManager(this, packetHandler); @@ -128,8 +132,6 @@ public class Arcade extends JavaPlugin AntiHack.Initialize(this, punish, portal, preferenceManager, _clientManager); AntiHack.Instance.setKick(false); - IncognitoManager incognito = new IncognitoManager(this, _clientManager, packetHandler); - IgnoreManager ignoreManager = new IgnoreManager(this, _clientManager, preferenceManager, portal); StatsManager statsManager = new StatsManager(this, _clientManager); AchievementManager achievementManager = new AchievementManager(statsManager, _clientManager, _donationManager); From 6e9ae04118e966b350f390382dfe963ee400621f Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 9 Apr 2016 00:27:24 +0100 Subject: [PATCH 3/4] Cut Gem to Gold conversion rate down to 16 Gems per Gold, instead of 32 --- .../src/mineplex/game/clans/economy/GoldManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java index 96cbf228b..ab3a0b03c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/economy/GoldManager.java @@ -41,7 +41,7 @@ import mineplex.game.clans.shop.bank.BankShop; public class GoldManager extends MiniPlugin { - public static final double GEM_CONVERSION_RATE = 32; // The number of gold coins when converted from a single gem + public static final double GEM_CONVERSION_RATE = 16; // The number of gold coins when converted from a single gem public static final double DEATH_TAX = 0.04d; // Percentage of gold lost on death public static final String META_STRING = "clans.goldAmount"; From 92195a12d2de8c8d6abc0554825fb72b99c65e09 Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 9 Apr 2016 00:37:20 +0100 Subject: [PATCH 4/4] Completely rework Cannon explosions to use the vanilla Minecraft explosions, as those seem to look much more visually appealing, and have less issues. Fixed a loading and saving bug with Cannons, they seem to be a lot more stable now than before. --- .../mineplex/core/common/util/UtilWorld.java | 10 +- .../game/clans/clans/siege/SiegeManager.java | 3 + .../repository/SiegeWeaponRepository.java | 34 +--- .../repository/tokens/SiegeWeaponToken.java | 1 - .../game/clans/clans/siege/weapon/Cannon.java | 68 ++++---- .../clans/clans/siege/weapon/SiegeWeapon.java | 21 +-- .../clans/siege/weapon/projectile/Crater.java | 146 +++++------------- 7 files changed, 92 insertions(+), 191 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java index f156f7f5a..19281c9ce 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilWorld.java @@ -1,8 +1,8 @@ package mineplex.core.common.util; import java.util.Collection; +import java.util.Iterator; import java.util.List; -import java.util.function.Predicate; import org.bukkit.Chunk; import org.bukkit.Location; @@ -10,10 +10,18 @@ import org.bukkit.World; import org.bukkit.World.Environment; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.bukkit.util.Vector; import com.google.common.collect.Lists; +import net.minecraft.server.v1_8_R3.EntityHuman; +import net.minecraft.server.v1_8_R3.EntityPlayer; +import net.minecraft.server.v1_8_R3.Explosion; +import net.minecraft.server.v1_8_R3.PacketPlayOutExplosion; +import net.minecraft.server.v1_8_R3.Vec3D; + public class UtilWorld { public static World getWorld(String world) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java index e48801344..902aa968a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/SiegeManager.java @@ -112,6 +112,7 @@ public class SiegeManager extends MiniPlugin if (!part) { + System.out.println("Removing slime..."); slime.remove(); } else @@ -162,11 +163,13 @@ public class SiegeManager extends MiniPlugin { if (((ArmorStand) entity).getHelmet() != null && ((ArmorStand) entity).getHelmet().getType().equals(Material.SPONGE)) { + System.out.println("Removing armor stand"); entity.remove(); } if (entity.getPassenger() != null && entity.getPassenger() instanceof Slime && entity.getPassenger().getPassenger() instanceof Slime) { + System.out.println("Removing armostand + children"); entity.getPassenger().getPassenger().remove(); entity.getPassenger().remove(); entity.remove(); diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java index b43d47d23..af1820380 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/SiegeWeaponRepository.java @@ -126,7 +126,6 @@ public class SiegeWeaponRepository extends MinecraftRepository token.Health = columns.getShort("health"); token.Yaw = columns.getShort("yaw"); token.LastFired = columns.getTimestamp("lastFired").getTime(); - token.Entities = decodeEntities(columns.getString("entities")); System.out.println("Siege Repo> Loaded weapon " + token.UniqueId); } @@ -158,41 +157,10 @@ public class SiegeWeaponRepository extends MinecraftRepository new ColumnInt("health", token.Health), new ColumnInt("yaw", token.Yaw), new ColumnTimestamp("lastFired", new Timestamp(token.LastFired)), - new ColumnVarChar("entities", 100, encodeEntities(token.Entities))) + new ColumnVarChar("entities", 100, "")) ); } - private String encodeEntities(Map entities) - { - StringBuilder builder = new StringBuilder(); - - int l = 0; - for (String name : entities.keySet()) - { - if (l != 0) - { - builder.append(","); - } - - builder.append(name + ":" + entities.get(name)); - l++; - } - - return builder.toString(); - } - - private Map decodeEntities(String data) - { - Map map = new HashMap<>(); - - for (String entries : data.split(",")) - { - map.put(entries.split(":")[0], entries.split(":")[1]); - } - - return map; - } - @Override protected void initialize() { diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/tokens/SiegeWeaponToken.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/tokens/SiegeWeaponToken.java index 876e73935..638aa800c 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/tokens/SiegeWeaponToken.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/repository/tokens/SiegeWeaponToken.java @@ -16,6 +16,5 @@ public class SiegeWeaponToken public int Health; public int Yaw; public long LastFired; - public Map Entities; } 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 45510438c..cd0e77876 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 @@ -55,6 +55,13 @@ public class Cannon extends SiegeWeapon { super(300, "Cannon", token, siegeManager.getClansManager(), siegeManager); + if (_ownerClan == null) + { + System.out.println("[cannon] owner clan null, killing"); + kill(); + return; + } + System.out.println("Siege> Loading Cannon from token " + token.UniqueId); setBoundingBox(1); @@ -107,11 +114,11 @@ public class Cannon extends SiegeWeapon enableInventory(UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cDAquaB + _name), new AccessRule(AccessType.RCLICK_BB, player -> player.equals(getRider()))); setRideable(new AccessRule(AccessType.RCLICK_BB, player -> { -// if (!_ownerClan.isMember(player)) -// { -// UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan.")); -// return false; -// } + if (!_ownerClan.isMember(player)) + { + UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan.")); + return false; + } if (getRider() != null && !getRider().equals(player)) { @@ -140,7 +147,7 @@ public class Cannon extends SiegeWeapon setStateInfo("Unloaded", new WeaponStateInfo(Material.SPONGE, (byte) 1)); setStateInfo("Loaded", new WeaponStateInfo(Material.SPONGE, (byte) 0)); - loadEntities(); + loadEntities(true); setFirepowerType(Material.SULPHUR); setAmmunitionType(Material.TNT); @@ -179,9 +186,9 @@ public class Cannon extends SiegeWeapon return false; } - if (System.currentTimeMillis() - _lastFired < 20000) + if (System.currentTimeMillis() - _lastFired < 30000) { - UtilPlayer.message(player, F.main("Clans", "Cannon is cooling down (" + F.time(UtilTime.MakeStr(20000 - (System.currentTimeMillis() - _lastFired))) + ")")); + UtilPlayer.message(player, F.main("Clans", "Cannon is cooling down (" + F.time(UtilTime.MakeStr(30000 - (System.currentTimeMillis() - _lastFired))) + ")")); return false; } @@ -191,11 +198,11 @@ public class Cannon extends SiegeWeapon enableInventory(UtilServer.getServer().createInventory(null, InventoryType.DISPENSER, C.cDAquaB + _name), new AccessRule(AccessType.RCLICK_BB, player -> player.equals(getRider()))); setRideable(new AccessRule(AccessType.RCLICK_BB, player -> { -// if (!_ownerClan.isMember(player)) -// { -// UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan.")); -// return false; -// } + if (!_ownerClan.isMember(player)) + { + UtilPlayer.message(player, F.main("Clans", "This Cannon is not owned by your Clan.")); + return false; + } if (getRider() != null && !getRider().equals(player)) { @@ -298,7 +305,7 @@ public class Cannon extends SiegeWeapon return true; // all slots are now filled; slot == 0 || slot == 1 || slot == 2; } - private void loadEntities() + private void loadEntities(boolean insert) { Slime filler = _location.getWorld().spawn(_location.clone(), Slime.class); @@ -332,8 +339,10 @@ public class Cannon extends SiegeWeapon addEntity(weapon, "WEAPON"); - - insert(); + if (insert) + { + insert(); + } } @Override @@ -341,20 +350,13 @@ public class Cannon extends SiegeWeapon { Lists.newArrayList(_location.getWorld().getEntities()) .forEach(entity -> { - for (Entry entry : _loadedToken.Entities.entrySet()) + if (Integer.toString(_uniqueId).equals(entity.getCustomName())) { - if (entity.getUniqueId().toString().equals(entry.getValue())) - { - addEntity(entity, entry.getKey()); - } + entity.remove(); } }); - if (getEntity("WEAPON") == null || getEntity("Filler_1") == null || getEntity("PLAYERMOUNT") == null) - { - System.out.println("[Cannon] Could not find all entities, killing."); - kill(); - } + loadEntities(false); } @Override @@ -428,12 +430,12 @@ 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); - } +// 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<>(); @@ -449,7 +451,7 @@ public class Cannon extends SiegeWeapon attempts++; } - _siegeManager.getClansManager().getExplosion().BlockExplosion( + _clans.getExplosion().BlockExplosion( blocks, event.getProjectile().getLocation(), 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 ba9089851..474b3f7d2 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 @@ -536,6 +536,9 @@ public abstract class SiegeWeapon implements Listener protected final void addEntity(Entity entity, String uniqueName) { + entity.setCustomName(Integer.toString(_uniqueId)); + entity.setCustomNameVisible(false); + _comprisedOf.add(entity); _entityMapping.put(uniqueName, entity); @@ -942,29 +945,19 @@ public abstract class SiegeWeapon implements Listener token.Location = _location; token.Health = _health; token.Yaw = (int) _yaw; - token.Entities = new HashMap<>(); - - _entityMapping.entrySet().forEach(entry -> - token.Entities.put(entry.getKey(), entry.getValue().getUniqueId().toString()) - ); return token; } public boolean isPartOf(UUID uniqueId) { - if (_loadedToken == null) + for (Entity entity : _comprisedOf) { - for (Entity entity : _comprisedOf) - { - if (entity.getUniqueId().equals(uniqueId)) - return true; - } - - return false; + if (entity.getUniqueId().equals(uniqueId)) + return true; } - return _loadedToken.Entities.values().contains(uniqueId.toString()); + return false; } public void setInvincible(boolean invincible) diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/projectile/Crater.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/projectile/Crater.java index 6443697b8..c16f4f5c5 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/projectile/Crater.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/clans/siege/weapon/projectile/Crater.java @@ -26,9 +26,9 @@ import mineplex.core.common.util.UtilServer; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; import mineplex.game.clans.clans.ClansManager; -import mineplex.game.clans.clans.nameblacklist.ClansBlacklist; import mineplex.game.clans.clans.siege.weapon.SiegeWeapon; import mineplex.game.clans.core.repository.ClanTerritory; +import net.minecraft.server.v1_8_R3.Explosion; public class Crater implements Listener { @@ -108,124 +108,52 @@ public class Crater implements Listener return; } - _blocks.add(new CraterBlock(_origin, 0, Material.AIR)); + boolean explosion = _origin.getWorld().createExplosion(_origin, 2.6f); - HashMap blockList = new HashMap(); - int iR = (int) _size + 1; + boolean floating = _origin.distance(UtilBlock.nearestFloor(_origin)) > 0.6; - for (int x = -iR; x <= iR; x++) + if (explosion) { - for (int z = -iR; z <= iR; z++) + for (Block block : UtilBlock.getInRadius(_origin.getBlock(), 2.6f).keySet()) { - for (int y = -iR; y <= iR; y++) + boolean charred = false; + double dist = block.getLocation().distance(_origin); + + if (floating) { - Block curBlock = _origin.getBlock().getRelative(x, y, z); - - double offset = UtilMath.offset(_origin, curBlock.getLocation()); - - if (offset <= _size) + if (!block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE) + && !block.getRelative(BlockFace.DOWN).getType().equals(Material.AIR) + && Math.random() > 0.79) { - blockList.put(curBlock, Double.valueOf(offset)); + charred = true; } } + else + { + if (block.getRelative(BlockFace.UP).getType().equals(Material.AIR) + && !block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE) + && !block.getRelative(BlockFace.DOWN).getType().equals(Material.AIR) + && Math.random() > 0.79) + { + charred = true; + } + } + + if (block.getType().equals(Material.SMOOTH_BRICK)) + { + charred = false; + } + + if (charred) + { + CraterBlock charredBlock = new CraterBlock(block.getLocation(), dist, CHARRED_TYPE, (byte) 0); + + charredBlock.set(); + + _blocks.add(charredBlock); + } } } - - for (Entry entry : blockList.entrySet()) - { - Block block = entry.getKey(); - - ClanTerritory territory = _weapon.getClans().getClanUtility().getClaim(block.getLocation()); - - if (territory != null && !ClansManager.getInstance().getBlacklist().allowed(territory.Owner)) - { - continue; - } - - double distance = entry.getValue().doubleValue(); - - boolean air = distance <= _airChance || (Math.random() > (distance) / 3.65d); - - if (block.getState() instanceof Chest) continue; - - if (block.getType() == Material.AIR) continue; - - if (air) - { - _blocks.add(new CraterBlock(block.getLocation(), distance, Material.AIR)); - - Block above = block; - - while (!UtilItem.isBoundless((above = above.getRelative(BlockFace.UP)).getType())) - { - _blocks.add(new CraterBlock(above.getLocation(), distance, Material.AIR)); - } - - if (!UtilItem.isBoundless(block.getRelative(BlockFace.DOWN).getType())) - { - if (_fire && Math.random() >= .5) - { - _blocks.add(new CraterBlock(block.getLocation(), distance, Material.FIRE)); - } - } - } - } - - _blocks.forEach(CraterBlock::set); - - for (Entry entry : blockList.entrySet()) - { - Block block = entry.getKey(); - - ClanTerritory territory = _weapon.getClans().getClanUtility().getClaim(block.getLocation()); - - if (territory != null && !ClansManager.getInstance().getBlacklist().allowed(territory.Owner)) - { - continue; - } - - double distance = entry.getValue().doubleValue(); - - if (block.getType() == Material.AIR) continue; - - if (block.getState() instanceof Chest) - { - Chest chest = (Chest) block.getState(); - - for (ItemStack item : chest.getBlockInventory().getContents()) - { - if (item == null) - { - continue; - } - - if (item.getType() == Material.AIR) - { - continue; - } - - _origin.getWorld().dropItemNaturally(_origin, item); - } - } - - if ( - distance > _airChance && - Math.random() > .75 && - UtilItem.isBoundless(block.getRelative(BlockFace.UP).getType()) && - !UtilItem.isBoundless(block.getRelative(BlockFace.DOWN).getType()) && - !block.getRelative(BlockFace.UP).getType().equals(CHARRED_TYPE) && - !block.getRelative(BlockFace.DOWN).getType().equals(CHARRED_TYPE)) - { - _blocks.add(new CraterBlock(block.getLocation(), distance, CHARRED_TYPE)); - - if (_fire) - { - _blocks.add(new CraterBlock(block.getRelative(BlockFace.UP).getLocation(), distance, Material.FIRE)); - } - } - } - - _blocks.forEach(CraterBlock::set); } }