From 12f76591953465f044d4b655e5022126cf0a7737 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Tue, 25 Apr 2017 00:16:32 -0300 Subject: [PATCH 01/61] Added king particle --- .../core/common/shape/ShapeWings.java | 22 +- .../mineplex/core/gadget/GadgetManager.java | 4 +- .../gadget/gadgets/particle/ParticleKing.java | 224 ++++++++++++++++++ .../core/particleeffects/CircleEffect.java | 31 ++- 4 files changed, 271 insertions(+), 10 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java index 5e6621476..a1ec02bb5 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/shape/ShapeWings.java @@ -151,14 +151,32 @@ public class ShapeWings extends ShapeGrid implements CosmeticShape "$###$$$$$$$$$$$$$$", "$##$$$$$$$$$$$$$$$" }; + + public static final String[] KINGS_CAPE = new String[] + { + "00000$00000", + "0000$#$0000", + "000$###$000", + "000$###$000", + "00$#####$00", + "00$#####$00", + "00$#####$00", + "00$#####$00", + "0$#######$0", + "$#########$" + }; /** * Default rotation to give the wings a little tilt when displayed on players for instance */ public static double DEFAULT_ROTATION = Math.PI/0.05; - - + + /** + * Doesn't have any rotation, so it doesn't go inside the player + */ + public static double NO_ROTATION = 0; + private String _particle; private Vector _offsetData; private float _speed; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index 498bb6ae9..271280e26 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -167,6 +167,7 @@ import mineplex.core.gadget.gadgets.particle.ParticleChristmasTree; import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes; import mineplex.core.gadget.gadgets.particle.ParticleFairy; import mineplex.core.gadget.gadgets.particle.ParticleFireRings; +import mineplex.core.gadget.gadgets.particle.ParticleKing; import mineplex.core.gadget.gadgets.particle.ParticleLegend; import mineplex.core.gadget.gadgets.particle.spring.ParticleSpringHalo; import mineplex.core.gadget.gadgets.particle.ParticleWingsAngel; @@ -369,8 +370,6 @@ public class GadgetManager extends MiniPlugin addGadget(new ItemBow(this)); addGadget(new ItemLovePotion(this)); addGadget(new ItemFlowerGift(this)); - // NEXT MONTH'S PPC - //addGadget(new ItemBubbleBlaster(this)); // Costume addGadget(new OutfitRaveSuitHelmet(this)); @@ -461,6 +460,7 @@ public class GadgetManager extends MiniPlugin addGadget(new ParticleWingsLove(this)); addGadget(new ParticleSpringHalo(this)); addGadget(new ParticleWingsBee(this)); + addGadget(new ParticleKing(this)); // Arrow Trails addGadget(new ArrowTrailFrostLord(this)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java new file mode 100644 index 000000000..2e56a1b02 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java @@ -0,0 +1,224 @@ +package mineplex.core.gadget.gadgets.particle; + +import java.awt.Color; +import java.time.Month; +import java.time.YearMonth; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import mineplex.core.arcadeevents.CoreGameStartEvent; +import mineplex.core.common.shape.ShapeWings; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.LineFormat; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilTime; +import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.gadget.types.OutfitGadget; +import mineplex.core.gadget.types.ParticleGadget; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +public class ParticleKing extends ParticleGadget +{ + + private List _kings = new ArrayList<>(); + private Map _taggedPlayers = new HashMap<>(); + + private ShapeWings _capeRed = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.2,0.2,0.2), 1, 0, false, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); + private ShapeWings _capeWhite = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.1,0.1,0.1), 1, 0, true, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); + + public ParticleKing(GadgetManager manager) + { + super(manager, "King", UtilText.splitLinesToArray(new String[] + { + C.cGray + "Placeholder", + }, LineFormat.LORE), + -14, + Material.GOLD_HELMET, (byte) 0, YearMonth.of(2017, Month.MAY)); + } + + @Override + public void playParticle(Player player, UpdateEvent event) + { + + Location loc = player.getLocation().add(0, 0.8, 0).add(player.getLocation().getDirection().multiply(-0.3)); + if (Manager.isMoving(player)) + { + if (event.getType() == UpdateType.TICK) + { + _capeRed.displayColoredParticle(loc, Color.RED); + _capeWhite.displayColoredParticle(loc, Color.WHITE); + } + return; + } + + if (event.getType() == UpdateType.FAST) _capeRed.displayColored(loc, Color.RED); + if (event.getType() == UpdateType.FAST) _capeWhite.displayColored(loc, Color.WHITE); + + } + + @Override + public void enableCustom(Player player, boolean message) + { + super.enableCustom(player, message); + Manager.removeGadgetType(player, GadgetType.MORPH, this); + Manager.removeOutfit(player, OutfitGadget.ArmorSlot.HELMET); + player.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET)); + _kings.add(new King(player)); + } + + @Override + public void disableCustom(Player player, boolean message) + { + super.disableCustom(player, message); + player.getInventory().setHelmet(null); + _kings.removeIf(king -> king.getKing().equals(player)); + } + + @EventHandler + public void onGameStart(CoreGameStartEvent event) + { + for (King king : _kings) + { + Player player = king.getKing(); + player.getInventory().setHelmet(null); + } + } + + @EventHandler + public void tagPlayer(EntityDamageByEntityEvent event) + { + if (!(event.getDamager() instanceof Player)) + return; + + if (!(event.getEntity() instanceof Player)) + return; + + Player clicker = (Player) event.getDamager(); + Player clicked = (Player) event.getEntity(); + + // Checks if particle is active + if (!isActive(clicker)) + return; + + // Checks if the player isn't a king + if (isActive(clicked)) + return; + + // Checks if the clicked player isn't cooling down + if (isPlayerCoolingDown(clicked)) + { + UtilPlayer.message(clicker, F.main("King", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); + return; + } + + for (King king : _kings) + { + // Checks if the player is owned by anyone else, if it is, then remove + if (king.hasPlayer(clicked)) + { + king.removePlayer(clicked); + UtilPlayer.message(king.getKing(), F.main("King", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.count()) + " peasants!")); + } + // Finally, adds the player to the king that clicked the player + else if (king.getKing().equals(clicker)) + { + king.addPlayer(clicked); + UtilPlayer.message(clicker, F.main("King", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.count()) + " peasants!")); + } + } + } + + private boolean isPlayerCoolingDown(Player player) + { + if (!_taggedPlayers.containsKey(player)) + return true; + + if (UtilTime.elapsed(_taggedPlayers.get(player), 15000)) + { + _taggedPlayers.remove(player); + return false; + } + + return true; + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + for (King king : _kings) + { + if (king.hasPlayer(event.getPlayer())) + { + king.removePlayer(event.getPlayer()); + UtilPlayer.message(king.getKing(), F.main("King", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.count()) + " peasants!")); + } + } + _kings.removeIf(king -> king.getKing().equals(event.getPlayer())); + } + + public King getLobbyKing() + { + King lobbyKing = null; + int peasants = 0; + for (King king : _kings) + { + if (lobbyKing == null) + lobbyKing = king; + else if (king.count() > peasants) + lobbyKing = king; + } + return lobbyKing; + } + + private class King + { + private Player _king; + private List _players = new ArrayList<>(); + + public King(Player king) + { + _king = king; + } + + public Player getKing() + { + return _king; + } + + public void addPlayer(Player player) + { + _players.add(player); + } + + public void removePlayer(Player player) + { + _players.remove(player); + } + + public boolean hasPlayer(Player player) + { + return _players.contains(player); + } + + public int count() + { + return _players.size(); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/particleeffects/CircleEffect.java b/Plugins/Mineplex.Core/src/mineplex/core/particleeffects/CircleEffect.java index f9ff7b3a3..60d83be21 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/particleeffects/CircleEffect.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/particleeffects/CircleEffect.java @@ -25,9 +25,10 @@ public class CircleEffect extends Effect private int _maxCircles = -1; private int _totalCircles = 0; private double _yOffset = 0.0; + private int _particles = 20; + private boolean _infinite = false; private static final double RANDOM_COLOR_CHANCE = 0.5; - private static final int PARTICLES_PER_CIRCLE = 20; public CircleEffect(JavaPlugin plugin, Location location, double radius, Color color) { @@ -50,6 +51,18 @@ public class CircleEffect extends Effect _instantly = instantly; } + public CircleEffect(JavaPlugin plugin, Location location, double radius, Color color, boolean instantly, int particles) + { + this(plugin, location, radius, color, instantly); + _particles = particles; + } + + public CircleEffect(JavaPlugin plugin, Entity entity, double radius, Color color, boolean instantly, int particles) + { + this(plugin, entity, radius, color, instantly); + _particles = particles; + } + public void addRandomColor(Color color) { _randomColors.add(color); @@ -65,15 +78,20 @@ public class CircleEffect extends Effect _yOffset = yOffset; } + public void setInfinite(boolean infinite) + { + _infinite = infinite; + } + @Override public void runEffect() { if (_instantly) { - for (int i = 0; i < PARTICLES_PER_CIRCLE; i++) + for (int i = 0; i < _particles; i++) { Location location = getEffectLocation().getLocation().add(0, _yOffset, 0); - double increment = (2 * Math.PI) / PARTICLES_PER_CIRCLE; + double increment = (2 * Math.PI) / _particles; double angle = _steps * increment; Vector vector = new Vector(Math.cos(angle) * _radius, 0, Math.sin(angle) * _radius); ColoredParticle coloredParticle = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, new DustSpellColor(_color), location.add(vector)); @@ -89,7 +107,8 @@ public class CircleEffect extends Effect } _steps++; } - stop(); + if (!_infinite) + stop(); } else { @@ -102,7 +121,7 @@ public class CircleEffect extends Effect } } Location location = getEffectLocation().getLocation().add(0, _yOffset, 0); - double increment = (2 * Math.PI) / PARTICLES_PER_CIRCLE; + double increment = (2 * Math.PI) / _particles; double angle = _steps * increment; Vector vector = new Vector(Math.cos(angle) * _radius, 0, Math.sin(angle) * _radius); ColoredParticle coloredParticle = new ColoredParticle(UtilParticle.ParticleType.RED_DUST, new DustSpellColor(_color), location.add(vector)); @@ -117,7 +136,7 @@ public class CircleEffect extends Effect } } _steps++; - if (_steps >= PARTICLES_PER_CIRCLE) + if (_steps >= _particles) { _totalCircles++; _steps = 0; From d36b44e32d1b038cda27740097df8ad45bcba526 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Tue, 25 Apr 2017 12:12:51 -0300 Subject: [PATCH 02/61] Removed fountain in my code so I can test the castle --- Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 05b80b2e6..52c6c4b31 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -1,8 +1,5 @@ package mineplex.hub; -import static mineplex.core.Managers.require; - -import mineplex.hub.modules.AprilFoolsTreasureHunt; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; @@ -19,7 +16,6 @@ import mineplex.core.antihack.guardians.GuardianManager; import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.boosters.BoosterManager; -import mineplex.core.brawl.fountain.FountainManager; import mineplex.core.chat.Chat; import mineplex.core.chatsnap.SnapshotManager; import mineplex.core.chatsnap.SnapshotPlugin; @@ -79,6 +75,7 @@ import mineplex.core.updater.Updater; import mineplex.core.velocity.VelocityFix; import mineplex.core.visibility.VisibilityManager; import mineplex.core.website.WebsiteLinkManager; +import mineplex.hub.modules.AprilFoolsTreasureHunt; import mineplex.hub.modules.BillboardManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -93,6 +90,8 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.damage.DamageManager; import mineplex.minecraft.game.core.fire.Fire; +import static mineplex.core.Managers.require; + public class Hub extends JavaPlugin implements IRelation { private NpcManager _npcManager; @@ -185,7 +184,7 @@ public class Hub extends JavaPlugin implements IRelation QueueManager queueManager = new QueueManager(this, clientManager, donationManager, eloManager, partyManager); ServerManager serverManager = new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, queueManager, boosterManager); - new FountainManager(this, clientManager, donationManager, hologramManager, statsManager, serverManager); + //new FountainManager(this, clientManager, donationManager, hologramManager, statsManager, serverManager); Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName()); new MessageManager(this, incognito, clientManager, preferenceManager, ignoreManager, punish, friendManager, chat); From 19138eb501099e2ba99a0f0100795177eb2fe9ba Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 01:12:43 -0300 Subject: [PATCH 03/61] Added castle stuff for hub --- .../mineplex/core/common/util/UtilAlg.java | 1 - .../mineplex/core/gadget/GadgetManager.java | 9 +- .../gadgets/particle/king/CastleManager.java | 176 ++++++++++++++++++ .../gadget/gadgets/particle/king/King.java | 44 +++++ .../particle/{ => king}/ParticleKing.java | 99 +++++----- .../particle/king/events/UpdateKingEvent.java | 43 +++++ .../src/mineplex/clanshub/HubManager.java | 4 +- .../src/mineplex/hub/HubManager.java | 17 +- .../src/nautilus/game/arcade/Arcade.java | 7 +- .../src/mineplex/mavericks/review/Hub.java | 4 +- .../src/mineplex/gemhunters/GemHunters.java | 6 +- 11 files changed, 348 insertions(+), 62 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java rename Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/{ => king}/ParticleKing.java (77%) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java index e22672fa7..09d849d91 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/util/UtilAlg.java @@ -231,7 +231,6 @@ public class UtilAlg return true; } - public static boolean inBoundingBox(Location loc, Vector cornerA, Vector cornerB) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index 271280e26..db6b37ffd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -167,7 +167,8 @@ import mineplex.core.gadget.gadgets.particle.ParticleChristmasTree; import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes; import mineplex.core.gadget.gadgets.particle.ParticleFairy; import mineplex.core.gadget.gadgets.particle.ParticleFireRings; -import mineplex.core.gadget.gadgets.particle.ParticleKing; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; +import mineplex.core.gadget.gadgets.particle.king.ParticleKing; import mineplex.core.gadget.gadgets.particle.ParticleLegend; import mineplex.core.gadget.gadgets.particle.spring.ParticleSpringHalo; import mineplex.core.gadget.gadgets.particle.ParticleWingsAngel; @@ -268,6 +269,7 @@ public class GadgetManager extends MiniPlugin private final IncognitoManager _incognitoManager; private TreasureManager _treasureManager; private SoulManager _soulManager; + private CastleManager _castleManager; private Map> _gadgets; @@ -287,7 +289,7 @@ public class GadgetManager extends MiniPlugin public GadgetManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, InventoryManager inventoryManager, MountManager mountManager, PetManager petManager, PreferencesManager preferencesManager, DisguiseManager disguiseManager, BlockRestore blockRestore, ProjectileManager projectileManager, AchievementManager achievementManager, - PacketHandler packetHandler, HologramManager hologramManager, IncognitoManager incognitoManager) + PacketHandler packetHandler, HologramManager hologramManager, IncognitoManager incognitoManager, CastleManager castleManager) { super("Gadget Manager", plugin); @@ -307,6 +309,7 @@ public class GadgetManager extends MiniPlugin _boosterManager = new OutfitWindUpSuitBoosterManager(this); _incognitoManager = incognitoManager; _soulManager = new SoulManager(); + _castleManager = castleManager; createGadgets(); createSets(); @@ -460,7 +463,7 @@ public class GadgetManager extends MiniPlugin addGadget(new ParticleWingsLove(this)); addGadget(new ParticleSpringHalo(this)); addGadget(new ParticleWingsBee(this)); - addGadget(new ParticleKing(this)); + addGadget(new ParticleKing(this, _castleManager)); // Arrow Trails addGadget(new ArrowTrailFrostLord(this)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java new file mode 100644 index 000000000..84e63d2cf --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -0,0 +1,176 @@ +package mineplex.core.gadget.gadgets.particle.king; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import mineplex.core.MiniPlugin; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilAction; +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilWorld; +import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; +import mineplex.core.hologram.Hologram; +import mineplex.core.hologram.HologramManager; + +/** + * Manages the castle in the main lobbies + */ +public class CastleManager extends MiniPlugin +{ + + private King _king; + + private Location _castleLocationA = new Location(UtilWorld.getWorld("world"), 32, 71, -4); + private Location _castleLocationB = new Location(UtilWorld.getWorld("world"), 44, 82, 8); + + private Location _removedKingLocation = new Location(UtilWorld.getWorld("world"), 28, 71, 6); + + private Location _hologramLocation = new Location(UtilWorld.getWorld("world"), 28.5, 83, 2.5); + + private HologramManager _hologramManager; + private Hologram _hologram; + + private boolean _isHub = false; + + public CastleManager(JavaPlugin plugin, HologramManager hologramManager, boolean isHub) + { + super("CastleManager", plugin); + _hologramManager = hologramManager; + _isHub = isHub; + spawnHologram(); + } + + /** + * Sets the lobby's king + * @param king The new king + */ + public void setKing(King king) + { + _king = king; + updateHologram(); + } + + /** + * Gets the current king + * @return The king of that lobby + */ + public King getKing() + { + return _king; + } + + /** + * Checks if the server is a hub server or not + * @return + */ + public boolean isHub() + { + return _isHub; + } + + /** + * Stops entities from spawning inside the castle + * @param event + */ + @EventHandler + public void onEntitySpawn(EntitySpawnEvent event) + { + if (event.getEntity() instanceof Player) + return; + + if (UtilAlg.inBoundingBox(event.getLocation(), _castleLocationA, _castleLocationB)) + { + event.setCancelled(true); + } + } + + /** + * Stops players from walking inside the castle + * @param event + */ + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) + { + Player player = event.getPlayer(); + + if (_king != null) + { + Player king = _king.getKing(); + if (king.equals(player)) + { + return; + } + } + + Location fromLocation = event.getFrom(); + Location toLocation = event.getTo(); + if (!fromLocation.getWorld().equals(toLocation.getWorld())) return; + + // Cancels movement + if (UtilAlg.inBoundingBox(toLocation, _castleLocationA, _castleLocationB)) + { + Entity target = player; + while (target.getVehicle() != null) + { + target = target.getVehicle(); + } + Location spawnLocation = new Location(target.getWorld(), 0, 64, 0); + UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), spawnLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); + } + } + + /** + * Removes old king from castle if they are still in it + * @param event + */ + @EventHandler + public void onUpdateKing(UpdateKingEvent event) + { + King oldKing = event.getOldKing(); + King newKing = event.getNewKing(); + if (oldKing != null && oldKing.getKing().isOnline()) + { + // Removes old king from the throne + if (UtilAlg.inBoundingBox(oldKing.getKing().getLocation(), _castleLocationA, _castleLocationB)) + { + oldKing.getKing().teleport(_removedKingLocation); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); + } + } + Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); + setKing(newKing); + } + + /** + * Spawns the hologram above the castle + */ + private void spawnHologram() + { + _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name("No one") + "!"); + } + + /** + * Updates the hologram above the castle + */ + private void updateHologram() + { + if (_hologram == null) + return; + + if (_king != null && _king.getKing().isOnline()) + { + _hologram.setText("Mineplex Castle", "Current King: " + F.name(_king.getKing().getName()) + "!"); + } + else + { + _hologram.setText("Mineplex Castle", "Current King: " + F.name("No one") + "!"); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java new file mode 100644 index 000000000..8a1f05489 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java @@ -0,0 +1,44 @@ +package mineplex.core.gadget.gadgets.particle.king; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.entity.Player; + +public class King +{ + + private Player _king; + private List _peasants = new ArrayList<>(); + + public King(Player king) + { + _king = king; + } + + public Player getKing() + { + return _king; + } + + public int amountOfPeasants() + { + return _peasants.size(); + } + + public void addPeasant(Player peasant) + { + _peasants.add(peasant); + } + + public void removePeasant(Player peasant) + { + _peasants.remove(peasant); + } + + public boolean hasPeasant(Player peasant) + { + return _peasants.contains(peasant); + } +} + diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java similarity index 77% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index 2e56a1b02..ea6fc2e0d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets.particle; +package mineplex.core.gadget.gadgets.particle.king; import java.awt.Color; import java.time.Month; @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -27,6 +28,7 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilText; import mineplex.core.common.util.UtilTime; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.OutfitGadget; import mineplex.core.gadget.types.ParticleGadget; @@ -42,7 +44,10 @@ public class ParticleKing extends ParticleGadget private ShapeWings _capeRed = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.2,0.2,0.2), 1, 0, false, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); private ShapeWings _capeWhite = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.1,0.1,0.1), 1, 0, true, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); - public ParticleKing(GadgetManager manager) + private CastleManager _castleManager; + private boolean _inLobby = false; + + public ParticleKing(GadgetManager manager, CastleManager castleManager) { super(manager, "King", UtilText.splitLinesToArray(new String[] { @@ -50,6 +55,9 @@ public class ParticleKing extends ParticleGadget }, LineFormat.LORE), -14, Material.GOLD_HELMET, (byte) 0, YearMonth.of(2017, Month.MAY)); + _castleManager = castleManager; + if (_castleManager.isHub()) + _inLobby = true; } @Override @@ -79,7 +87,11 @@ public class ParticleKing extends ParticleGadget Manager.removeGadgetType(player, GadgetType.MORPH, this); Manager.removeOutfit(player, OutfitGadget.ArmorSlot.HELMET); player.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET)); - _kings.add(new King(player)); + if (_inLobby) + { + _kings.add(new King(player)); + updateKing(); + } } @Override @@ -87,7 +99,11 @@ public class ParticleKing extends ParticleGadget { super.disableCustom(player, message); player.getInventory().setHelmet(null); - _kings.removeIf(king -> king.getKing().equals(player)); + if (_inLobby) + { + _kings.removeIf(king -> king.getKing().equals(player)); + updateKing(); + } } @EventHandler @@ -103,6 +119,9 @@ public class ParticleKing extends ParticleGadget @EventHandler public void tagPlayer(EntityDamageByEntityEvent event) { + if (!_inLobby) + return; + if (!(event.getDamager() instanceof Player)) return; @@ -130,18 +149,19 @@ public class ParticleKing extends ParticleGadget for (King king : _kings) { // Checks if the player is owned by anyone else, if it is, then remove - if (king.hasPlayer(clicked)) + if (king.hasPeasant(clicked)) { - king.removePlayer(clicked); - UtilPlayer.message(king.getKing(), F.main("King", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.count()) + " peasants!")); + king.removePeasant(clicked); + UtilPlayer.message(king.getKing(), F.main("King", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } // Finally, adds the player to the king that clicked the player else if (king.getKing().equals(clicker)) { - king.addPlayer(clicked); - UtilPlayer.message(clicker, F.main("King", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.count()) + " peasants!")); + king.addPeasant(clicked); + UtilPlayer.message(clicker, F.main("King", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } } + updateKing(); } private boolean isPlayerCoolingDown(Player player) @@ -161,64 +181,53 @@ public class ParticleKing extends ParticleGadget @EventHandler public void onPlayerLeave(PlayerQuitEvent event) { + if (!_inLobby) + return; + for (King king : _kings) { - if (king.hasPlayer(event.getPlayer())) + if (king.hasPeasant(event.getPlayer())) { - king.removePlayer(event.getPlayer()); - UtilPlayer.message(king.getKing(), F.main("King", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.count()) + " peasants!")); + king.removePeasant(event.getPlayer()); + UtilPlayer.message(king.getKing(), F.main("King", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } } _kings.removeIf(king -> king.getKing().equals(event.getPlayer())); + updateKing(); } - public King getLobbyKing() + private King getLobbyKing() { + if (_kings.size() == 0) + return null; King lobbyKing = null; int peasants = 0; for (King king : _kings) { if (lobbyKing == null) lobbyKing = king; - else if (king.count() > peasants) + else if (king.amountOfPeasants() > peasants) lobbyKing = king; } return lobbyKing; } - private class King + private void updateKing() { - private Player _king; - private List _players = new ArrayList<>(); - - public King(Player king) + if (_inLobby) { - _king = king; - } - - public Player getKing() - { - return _king; - } - - public void addPlayer(Player player) - { - _players.add(player); - } - - public void removePlayer(Player player) - { - _players.remove(player); - } - - public boolean hasPlayer(Player player) - { - return _players.contains(player); - } - - public int count() - { - return _players.size(); + King king = getLobbyKing(); + King oldKing = _castleManager.getKing(); + if (king != null && oldKing != null) + { + if (!king.equals(oldKing)) + { + Bukkit.getPluginManager().callEvent(new UpdateKingEvent(oldKing, king)); + } + } else + { + Bukkit.getPluginManager().callEvent(new UpdateKingEvent(oldKing, king)); + } } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java new file mode 100644 index 000000000..b9ae6cea8 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java @@ -0,0 +1,43 @@ +package mineplex.core.gadget.gadgets.particle.king.events; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +import mineplex.core.gadget.gadgets.particle.king.King; + +public class UpdateKingEvent extends Event +{ + + private static final HandlerList handlers = new HandlerList(); + + private King _newKing; + private King _oldKing; + + public UpdateKingEvent(King newKing, King oldKing) + { + _newKing = newKing; + _oldKing = oldKing; + } + + public King getNewKing() + { + return _newKing; + } + + public King getOldKing() + { + return _oldKing; + } + + @Override + public HandlerList getHandlers() + { + return handlers; + } + + public static HandlerList getHandlerList() + { + return handlers; + } + +} diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java index 4ce00640d..a614f3c6e 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java @@ -84,6 +84,7 @@ import mineplex.core.facebook.FacebookManager; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.event.GadgetCollideEntityEvent; import mineplex.core.gadget.gadgets.morph.MorphWither; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.hologram.HologramManager; @@ -194,7 +195,8 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter _inventoryManager = inventoryManager; new BenefitManager(plugin, clientManager, _inventoryManager); - _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin), achievementManager, packetHandler, hologramManager, incognito); + CastleManager castleManager = new CastleManager(_plugin, hologramManager, false); + _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin), achievementManager, packetHandler, hologramManager, incognito, castleManager); FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager); YoutubeManager youtubeManager = new YoutubeManager(plugin, clientManager, donationManager); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 1e7dfd060..745d0afe4 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -4,6 +4,13 @@ import java.util.HashMap; import java.util.Iterator; import java.util.UUID; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.HoverEvent.Action; +import net.md_5.bungee.api.chat.TextComponent; +import net.minecraft.server.v1_8_R3.EntityInsentient; +import net.minecraft.server.v1_8_R3.EntityPlayer; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -69,6 +76,7 @@ import mineplex.core.donation.Donor; import mineplex.core.facebook.FacebookManager; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.event.GadgetCollideEntityEvent; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.hologram.HologramManager; import mineplex.core.incognito.IncognitoManager; import mineplex.core.incognito.events.IncognitoHidePlayerEvent; @@ -131,12 +139,6 @@ import mineplex.minecraft.game.classcombat.item.event.ItemTriggerEvent; import mineplex.minecraft.game.core.combat.DeathMessageType; import mineplex.minecraft.game.core.combat.event.CombatDeathEvent; import mineplex.minecraft.game.core.condition.ConditionManager; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.HoverEvent.Action; -import net.md_5.bungee.api.chat.TextComponent; -import net.minecraft.server.v1_8_R3.EntityInsentient; -import net.minecraft.server.v1_8_R3.EntityPlayer; public class HubManager extends MiniClientPlugin implements IChatMessageFormatter { @@ -222,7 +224,8 @@ public class HubManager extends MiniClientPlugin implements IChatMess _mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager); _inventoryManager = inventoryManager; new BenefitManager(plugin, clientManager, _inventoryManager); - _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, Managers.get(ProjectileManager.class), achievementManager, packetHandler, hologramManager, incognito); + CastleManager castleManager = new CastleManager(_plugin, hologramManager, true); + _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, Managers.get(ProjectileManager.class), achievementManager, packetHandler, hologramManager, incognito, castleManager); FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager); YoutubeManager youtubeManager = new YoutubeManager(plugin, clientManager, donationManager); 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 26a762345..61724f6ae 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -3,7 +3,6 @@ package nautilus.game.arcade; import java.io.File; import java.util.HashMap; -import mineplex.core.aprilfools.AprilFoolsManager; import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.Bukkit; @@ -24,6 +23,7 @@ import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.RelationProvider; import mineplex.core.antihack.logging.AntihackLogger; +import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.boosters.BoosterManager; @@ -44,6 +44,7 @@ import mineplex.core.donation.DonationManager; import mineplex.core.elo.EloManager; import mineplex.core.friend.FriendManager; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.give.Give; import mineplex.core.globalpacket.GlobalPacketManager; import mineplex.core.hologram.HologramManager; @@ -86,6 +87,7 @@ import mineplex.minecraft.game.core.damage.DamageManager; import nautilus.game.arcade.anticheatmetadata.GameInfoMetadata; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameServerConfig; + import static mineplex.core.Managers.require; public class Arcade extends JavaPlugin @@ -201,7 +203,8 @@ public class Arcade extends JavaPlugin InventoryManager inventoryManager = new InventoryManager(this, _clientManager); PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); - GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito); + CastleManager castleManager = new CastleManager(this, hologramManager, false); + GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); BoosterManager boosterManager = new BoosterManager(this, _serverConfiguration.getServerGroup().getBoosterGroup(), _clientManager, _donationManager, inventoryManager, thankManager); CosmeticManager cosmeticManager = new CosmeticManager(this, _clientManager, _donationManager, inventoryManager, gadgetManager, mountManager, petManager, null, boosterManager); diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java index f2e7831df..b707363ce 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java @@ -24,6 +24,7 @@ import mineplex.core.donation.DonationManager; import mineplex.core.elo.EloManager; import mineplex.core.friend.FriendManager; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.give.Give; import mineplex.core.hologram.HologramManager; import mineplex.core.ignore.IgnoreManager; @@ -129,8 +130,9 @@ public class Hub extends JavaPlugin InventoryManager inventoryManager = new InventoryManager(this, _clientManager); PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); + CastleManager castleManager = new CastleManager(this, hologramManager, false); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, - preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito); + preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); BoosterManager boosterManager = new BoosterManager(this, serverConfiguration.getServerGroup().getBoosterGroup(), _clientManager, _donationManager, inventoryManager, thankManager); RewardManager rewardManager = new RewardManager(_clientManager, _donationManager, inventoryManager, petManager, gadgetManager, statsManager); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java index f6f2cee55..da5473918 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java @@ -1,6 +1,5 @@ package mineplex.gemhunters; -import mineplex.core.aprilfools.AprilFoolsManager; import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.Bukkit; @@ -15,6 +14,7 @@ import mineplex.core.TimingsFix; import mineplex.core.account.CoreClientManager; import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; +import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.beta.BetaWhitelist; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.boosters.BoosterManager; @@ -36,6 +36,7 @@ import mineplex.core.elo.EloManager; import mineplex.core.explosion.Explosion; import mineplex.core.friend.FriendManager; import mineplex.core.gadget.GadgetManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.give.Give; import mineplex.core.hologram.HologramManager; import mineplex.core.ignore.IgnoreManager; @@ -252,7 +253,8 @@ public class GemHunters extends JavaPlugin MountManager mountManager = new MountManager(this, clientManager, donationManager, blockRestore, disguiseManager); PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore); ProjectileManager projectileManager = new ProjectileManager(this); - GadgetManager gadgetManager = new GadgetManager(this, clientManager, donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito); + CastleManager castleManager = new CastleManager(this, hologramManager, false); + GadgetManager gadgetManager = new GadgetManager(this, clientManager, donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, clientManager, donationManager); BoosterManager boosterManager = new BoosterManager(this, null, clientManager, donationManager, inventoryManager, thankManager); CosmeticManager cosmeticManager = new CosmeticManager(this, clientManager, donationManager, inventoryManager, gadgetManager, mountManager, petManager, null, boosterManager); From 9796b5acba2eaafd30f09e4736b263c12c97b337 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 01:26:01 -0300 Subject: [PATCH 04/61] Actually check if its a hub and start the hologram --- .../gadget/gadgets/particle/king/CastleManager.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 84e63d2cf..af78fbaa8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -82,6 +82,9 @@ public class CastleManager extends MiniPlugin @EventHandler public void onEntitySpawn(EntitySpawnEvent event) { + if (!isHub()) + return; + if (event.getEntity() instanceof Player) return; @@ -98,6 +101,9 @@ public class CastleManager extends MiniPlugin @EventHandler public void onPlayerMove(PlayerMoveEvent event) { + if (!isHub()) + return; + Player player = event.getPlayer(); if (_king != null) @@ -133,6 +139,9 @@ public class CastleManager extends MiniPlugin @EventHandler public void onUpdateKing(UpdateKingEvent event) { + if (!isHub()) + return; + King oldKing = event.getOldKing(); King newKing = event.getNewKing(); if (oldKing != null && oldKing.getKing().isOnline()) @@ -153,7 +162,11 @@ public class CastleManager extends MiniPlugin */ private void spawnHologram() { + if (!isHub()) + return; + _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name("No one") + "!"); + _hologram.start(); } /** From 6145d9f87d0e1597cc4cda2453f99b3d4b1cdd3d Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 01:35:11 -0300 Subject: [PATCH 05/61] Lower the hologram a bit --- .../core/gadget/gadgets/particle/king/CastleManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index af78fbaa8..6a8c4ec6c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -32,7 +32,7 @@ public class CastleManager extends MiniPlugin private Location _removedKingLocation = new Location(UtilWorld.getWorld("world"), 28, 71, 6); - private Location _hologramLocation = new Location(UtilWorld.getWorld("world"), 28.5, 83, 2.5); + private Location _hologramLocation = new Location(UtilWorld.getWorld("world"), 28.5, 74, 2.5); private HologramManager _hologramManager; private Hologram _hologram; @@ -84,7 +84,7 @@ public class CastleManager extends MiniPlugin { if (!isHub()) return; - + if (event.getEntity() instanceof Player) return; From 56f19ec9378476dad4c676012d3ceeeaf75aae7f Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 01:39:26 -0300 Subject: [PATCH 06/61] Null checker --- .../core/gadget/gadgets/particle/king/CastleManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 6a8c4ec6c..d81419bcd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -153,7 +153,8 @@ public class CastleManager extends MiniPlugin UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); } } - Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); + if (newKing != null && newKing.getKing().isOnline()) + Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); setKing(newKing); } From fb03e9adecf36085782f4238ea88dd5f27f0d9e1 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 11:14:43 -0300 Subject: [PATCH 07/61] Respawn holograms since setText doesn't work, and actually send the correct information to the event --- .../gadget/gadgets/particle/king/CastleManager.java | 12 ++++++++---- .../gadget/gadgets/particle/king/ParticleKing.java | 7 +++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index d81419bcd..b9ee81ca9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -175,16 +175,20 @@ public class CastleManager extends MiniPlugin */ private void updateHologram() { - if (_hologram == null) - return; + if (_hologram != null) + { + _hologram.stop(); + } if (_king != null && _king.getKing().isOnline()) { - _hologram.setText("Mineplex Castle", "Current King: " + F.name(_king.getKing().getName()) + "!"); + _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name(_king.getKing().getName()) + "!"); + _hologram.start(); } else { - _hologram.setText("Mineplex Castle", "Current King: " + F.name("No one") + "!"); + _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name("No one") + "!"); + _hologram.start(); } } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index ea6fc2e0d..8598ef2da 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -200,6 +200,9 @@ public class ParticleKing extends ParticleGadget { if (_kings.size() == 0) return null; + else if (_kings.size() == 1) + return _kings.get(0); + King lobbyKing = null; int peasants = 0; for (King king : _kings) @@ -222,11 +225,11 @@ public class ParticleKing extends ParticleGadget { if (!king.equals(oldKing)) { - Bukkit.getPluginManager().callEvent(new UpdateKingEvent(oldKing, king)); + Bukkit.getPluginManager().callEvent(new UpdateKingEvent(king, oldKing)); } } else { - Bukkit.getPluginManager().callEvent(new UpdateKingEvent(oldKing, king)); + Bukkit.getPluginManager().callEvent(new UpdateKingEvent(king, oldKing)); } } } From 25487ad0b1089de5a8df176590a809354e99304a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 11:17:03 -0300 Subject: [PATCH 08/61] Fix message prefix --- .../core/gadget/gadgets/particle/king/ParticleKing.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index 8598ef2da..4b85b754d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -142,7 +142,7 @@ public class ParticleKing extends ParticleGadget // Checks if the clicked player isn't cooling down if (isPlayerCoolingDown(clicked)) { - UtilPlayer.message(clicker, F.main("King", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); + UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); return; } @@ -152,13 +152,13 @@ public class ParticleKing extends ParticleGadget if (king.hasPeasant(clicked)) { king.removePeasant(clicked); - UtilPlayer.message(king.getKing(), F.main("King", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(king.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } // Finally, adds the player to the king that clicked the player else if (king.getKing().equals(clicker)) { king.addPeasant(clicked); - UtilPlayer.message(clicker, F.main("King", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } } updateKing(); @@ -189,7 +189,7 @@ public class ParticleKing extends ParticleGadget if (king.hasPeasant(event.getPlayer())) { king.removePeasant(event.getPlayer()); - UtilPlayer.message(king.getKing(), F.main("King", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(king.getKing(), F.main("Kingdom", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); } } _kings.removeIf(king -> king.getKing().equals(event.getPlayer())); From 124d22ce3157f274e6d96de6f6f2fc55cc20926e Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Wed, 26 Apr 2017 22:52:40 -0300 Subject: [PATCH 09/61] Added new class for peasants --- .../gadgets/particle/king/CastleManager.java | 95 +++++++++++ .../gadgets/particle/king/ParticleKing.java | 157 +++++++++--------- .../particle/king/events/UpdateKingEvent.java | 2 +- .../particle/king/{ => types}/King.java | 15 +- .../gadgets/particle/king/types/Peasant.java | 46 +++++ .../managers/ProgressingKitManager.java | 45 ++--- 6 files changed, 254 insertions(+), 106 deletions(-) rename Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/{ => types}/King.java (57%) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index b9ee81ca9..cde1ab88f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -1,5 +1,8 @@ package mineplex.core.gadget.gadgets.particle.king; +import java.util.HashMap; +import java.util.Map; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -16,6 +19,8 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; +import mineplex.core.gadget.gadgets.particle.king.types.King; +import mineplex.core.gadget.gadgets.particle.king.types.Peasant; import mineplex.core.hologram.Hologram; import mineplex.core.hologram.HologramManager; @@ -39,6 +44,9 @@ public class CastleManager extends MiniPlugin private boolean _isHub = false; + private Map _kings = new HashMap<>(); + private Map _peasants = new HashMap<>(); + public CastleManager(JavaPlugin plugin, HologramManager hologramManager, boolean isHub) { super("CastleManager", plugin); @@ -191,4 +199,91 @@ public class CastleManager extends MiniPlugin _hologram.start(); } } + + public void setPlayerAsKing(Player player) + { + if (isKing(player)) + return; + + if (isPeasant(player)) + removePeasant(player, false); + + _kings.put(player, new King(player)); + } + + public boolean isKing(Player player) + { + return _kings.containsKey(player); + } + + public void removeKing(Player player, boolean setPeasant) + { + if (!isKing(player)) + return; + + _kings.get(player).clearPeasants(); + _kings.remove(player); + + if (setPeasant) + setPlayerAsPeasant(player); + } + + public King getKing(Player player) + { + if (!isKing(player)) + return null; + + return _kings.get(player); + } + + public void setPlayerAsPeasant(Player player) + { + if (isPeasant(player)) + return; + + if (isKing(player)) + removeKing(player, false); + + _peasants.put(player, new Peasant(player)); + } + + public boolean isPeasant(Player player) + { + return _peasants.containsKey(player); + } + + public void removePeasant(Player player, boolean setKing) + { + if (!isPeasant(player)) + return; + + _peasants.remove(player); + + if (setKing) + setPlayerAsKing(player); + } + + public Peasant getPeasant(Player player) + { + if (!isPeasant(player)) + return null; + + return _peasants.get(player); + } + + public King getLobbyKing() + { + if (_kings.size() == 0) + return null; + + King lobbyKing = null; + for (King king : _kings.values()) + { + if (lobbyKing == null) + lobbyKing = king; + else if (lobbyKing.amountOfPeasants() < king.amountOfPeasants()) + lobbyKing = king; + } + return lobbyKing; + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index 4b85b754d..ae9d46831 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -3,9 +3,7 @@ package mineplex.core.gadget.gadgets.particle.king; import java.awt.Color; import java.time.Month; import java.time.YearMonth; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.bukkit.Bukkit; @@ -14,11 +12,10 @@ import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; -import mineplex.core.arcadeevents.CoreGameStartEvent; import mineplex.core.common.shape.ShapeWings; import mineplex.core.common.util.C; import mineplex.core.common.util.F; @@ -26,11 +23,10 @@ import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilText; -import mineplex.core.common.util.UtilTime; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; -import mineplex.core.gadget.types.GadgetType; -import mineplex.core.gadget.types.OutfitGadget; +import mineplex.core.gadget.gadgets.particle.king.types.King; +import mineplex.core.gadget.gadgets.particle.king.types.Peasant; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -38,7 +34,9 @@ import mineplex.core.updater.event.UpdateEvent; public class ParticleKing extends ParticleGadget { - private List _kings = new ArrayList<>(); + private static final int CROWN_POINTS = 12; + + private Map _kings = new HashMap<>(); private Map _taggedPlayers = new HashMap<>(); private ShapeWings _capeRed = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.2,0.2,0.2), 1, 0, false, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); @@ -75,8 +73,19 @@ public class ParticleKing extends ParticleGadget return; } - if (event.getType() == UpdateType.FAST) _capeRed.displayColored(loc, Color.RED); - if (event.getType() == UpdateType.FAST) _capeWhite.displayColored(loc, Color.WHITE); + if (event.getType() == UpdateType.FAST) + { + _capeRed.displayColored(loc, Color.RED); + _capeWhite.displayColored(loc, Color.WHITE); + for (int i = 0; i < 360; i += 360/CROWN_POINTS) + { + double angle = (i * Math.PI / 180); + double x = 0.5 * Math.cos(angle); + double z = 0.5 * Math.sin(angle); + Location crown = player.getEyeLocation().add(x, 0.15, z); + UtilParticle.PlayParticleToAll(UtilParticle.ParticleType.FLAME, crown, null, 0, 1, UtilParticle.ViewDist.NORMAL); + } + } } @@ -84,12 +93,9 @@ public class ParticleKing extends ParticleGadget public void enableCustom(Player player, boolean message) { super.enableCustom(player, message); - Manager.removeGadgetType(player, GadgetType.MORPH, this); - Manager.removeOutfit(player, OutfitGadget.ArmorSlot.HELMET); - player.getEquipment().setHelmet(new ItemStack(Material.GOLD_HELMET)); + _castleManager.setPlayerAsKing(player); if (_inLobby) { - _kings.add(new King(player)); updateKing(); } } @@ -98,24 +104,17 @@ public class ParticleKing extends ParticleGadget public void disableCustom(Player player, boolean message) { super.disableCustom(player, message); - player.getInventory().setHelmet(null); + _castleManager.setPlayerAsPeasant(player); if (_inLobby) { - _kings.removeIf(king -> king.getKing().equals(player)); updateKing(); } } - @EventHandler - public void onGameStart(CoreGameStartEvent event) - { - for (King king : _kings) - { - Player player = king.getKing(); - player.getInventory().setHelmet(null); - } - } - + /** + * When a player clicks another player, sets them as peasant + * @param event + */ @EventHandler public void tagPlayer(EntityDamageByEntityEvent event) { @@ -132,94 +131,94 @@ public class ParticleKing extends ParticleGadget Player clicked = (Player) event.getEntity(); // Checks if particle is active - if (!isActive(clicker)) + if (_castleManager.isPeasant(clicker)) return; - // Checks if the player isn't a king - if (isActive(clicked)) + // Checks if the clicked player isn't a king + if (_castleManager.isKing(clicked)) return; + Peasant peasant = _castleManager.getPeasant(clicked); + // Checks if the clicked player isn't cooling down - if (isPlayerCoolingDown(clicked)) + if (peasant.isInCooldown()) { UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); return; } - for (King king : _kings) + King king = _castleManager.getKing(clicker); + + if (king.hasPeasant(peasant)) { - // Checks if the player is owned by anyone else, if it is, then remove - if (king.hasPeasant(clicked)) - { - king.removePeasant(clicked); - UtilPlayer.message(king.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); - } - // Finally, adds the player to the king that clicked the player - else if (king.getKing().equals(clicker)) - { - king.addPeasant(clicked); - UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); - } + UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + "! That player is already your peasant!")); + return; } + + // Removes old king + if (peasant.getKing() != null) + { + King oldKing = peasant.getKing(); + oldKing.removePeasant(peasant); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + } + + peasant.setCooldown(); + king.addPeasant(peasant); + peasant.setKing(king); + UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "You were tagged by " + F.name(clicked.getName()) + " as a peasant!")); + updateKing(); } - private boolean isPlayerCoolingDown(Player player) + /** + * Sets player as peasant + * @param event + */ + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { - if (!_taggedPlayers.containsKey(player)) - return true; - - if (UtilTime.elapsed(_taggedPlayers.get(player), 15000)) - { - _taggedPlayers.remove(player); - return false; - } - - return true; + Player player = event.getPlayer(); + _castleManager.setPlayerAsPeasant(player); } + /** + * Removes peasant from king, or removes king from peasant + * @param event + */ @EventHandler public void onPlayerLeave(PlayerQuitEvent event) { if (!_inLobby) return; - for (King king : _kings) + Player player = event.getPlayer(); + + if (_castleManager.isPeasant(player)) { - if (king.hasPeasant(event.getPlayer())) + Peasant peasant = _castleManager.getPeasant(player); + if (peasant.getKing() != null) { - king.removePeasant(event.getPlayer()); - UtilPlayer.message(king.getKing(), F.main("Kingdom", "The peasant " + F.name(event.getPlayer().getName()) + " left your kingdom! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + peasant.setKing(null); } + _castleManager.removePeasant(player, false); + } + else if (_castleManager.isKing(player)) + { + _castleManager.removeKing(player, false); } - _kings.removeIf(king -> king.getKing().equals(event.getPlayer())); updateKing(); } - private King getLobbyKing() - { - if (_kings.size() == 0) - return null; - else if (_kings.size() == 1) - return _kings.get(0); - - King lobbyKing = null; - int peasants = 0; - for (King king : _kings) - { - if (lobbyKing == null) - lobbyKing = king; - else if (king.amountOfPeasants() > peasants) - lobbyKing = king; - } - return lobbyKing; - } - + /** + * Updates the current lobby king + */ private void updateKing() { if (_inLobby) { - King king = getLobbyKing(); + King king = _castleManager.getLobbyKing(); King oldKing = _castleManager.getKing(); if (king != null && oldKing != null) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java index b9ae6cea8..b07822bc3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/events/UpdateKingEvent.java @@ -3,7 +3,7 @@ package mineplex.core.gadget.gadgets.particle.king.events; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -import mineplex.core.gadget.gadgets.particle.king.King; +import mineplex.core.gadget.gadgets.particle.king.types.King; public class UpdateKingEvent extends Event { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java similarity index 57% rename from Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java rename to Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java index 8a1f05489..1f9dddf1f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/King.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java @@ -1,4 +1,4 @@ -package mineplex.core.gadget.gadgets.particle.king; +package mineplex.core.gadget.gadgets.particle.king.types; import java.util.ArrayList; import java.util.List; @@ -9,7 +9,7 @@ public class King { private Player _king; - private List _peasants = new ArrayList<>(); + private List _peasants = new ArrayList<>(); public King(Player king) { @@ -26,19 +26,24 @@ public class King return _peasants.size(); } - public void addPeasant(Player peasant) + public void addPeasant(Peasant peasant) { _peasants.add(peasant); } - public void removePeasant(Player peasant) + public void removePeasant(Peasant peasant) { _peasants.remove(peasant); } - public boolean hasPeasant(Player peasant) + public boolean hasPeasant(Peasant peasant) { return _peasants.contains(peasant); } + + public void clearPeasants() + { + _peasants.clear(); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java new file mode 100644 index 000000000..1b291bad2 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java @@ -0,0 +1,46 @@ +package mineplex.core.gadget.gadgets.particle.king.types; + +import org.bukkit.entity.Player; + +import mineplex.core.common.util.UtilTime; + +public class Peasant +{ + + private static final long PLAYER_COOLDOWN = 15000; + + private Player _player; + private long _cooldown = 0; + private King _king; + + public Peasant(Player player) + { + _player = player; + } + + public Player getPeasant() + { + return _player; + } + + public boolean isInCooldown() + { + return UtilTime.elapsed(_cooldown, PLAYER_COOLDOWN); + } + + public void setCooldown() + { + _cooldown = System.currentTimeMillis(); + } + + public King getKing() + { + return _king; + } + + public void setKing(King king) + { + _king = king; + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java index 2ce6c2ac3..6491ee32c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/managers/ProgressingKitManager.java @@ -1,24 +1,8 @@ package nautilus.game.arcade.managers; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.progression.data.PlayerKit; -import mineplex.core.progression.gui.guis.KitDisplayMenu; -import mineplex.core.progression.math.Calculations; -import nautilus.game.arcade.ArcadeFormat; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.events.GameStateChangeEvent; -import nautilus.game.arcade.events.PlayerKitApplyEvent; -import nautilus.game.arcade.game.Game; -import nautilus.game.arcade.game.Game.GameState; -import nautilus.game.arcade.kit.ChampionsKit; -import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.kit.KitProgressionData; -import nautilus.game.arcade.kit.ProgressingKit; +import java.util.Map; +import java.util.UUID; + import org.bukkit.Bukkit; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -31,8 +15,27 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; -import java.util.Map; -import java.util.UUID; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.progression.data.PlayerKit; +import mineplex.core.progression.gui.guis.KitDisplayMenu; +import mineplex.core.progression.math.Calculations; + +import nautilus.game.arcade.ArcadeFormat; +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.events.PlayerKitApplyEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.Game.GameState; +import nautilus.game.arcade.kit.ChampionsKit; +import nautilus.game.arcade.kit.Kit; +import nautilus.game.arcade.kit.KitProgressionData; +import nautilus.game.arcade.kit.ProgressingKit; /** * Manages all things related to the ProgressingKit System for Arcade From 02785d5dfd6c7f67be2adc20ac0a38c7403dae7a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 15:12:33 -0300 Subject: [PATCH 10/61] Moved everything to CastleManager, changed to rightclick --- .../gadgets/particle/king/CastleManager.java | 167 ++++++++++++++---- .../gadgets/particle/king/ParticleKing.java | 150 +--------------- .../gadgets/particle/king/types/King.java | 1 + .../gadgets/particle/king/types/Peasant.java | 7 +- 4 files changed, 141 insertions(+), 184 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index cde1ab88f..0a7715a38 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -9,7 +9,10 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; @@ -18,7 +21,6 @@ import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; -import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; import mineplex.core.gadget.gadgets.particle.king.types.King; import mineplex.core.gadget.gadgets.particle.king.types.Peasant; import mineplex.core.hologram.Hologram; @@ -140,30 +142,86 @@ public class CastleManager extends MiniPlugin } } - /** - * Removes old king from castle if they are still in it - * @param event - */ @EventHandler - public void onUpdateKing(UpdateKingEvent event) + public void onTagPeasant(PlayerInteractEntityEvent event) { if (!isHub()) return; - King oldKing = event.getOldKing(); - King newKing = event.getNewKing(); - if (oldKing != null && oldKing.getKing().isOnline()) + Player clicker = event.getPlayer(); + + if (!isKing(clicker)) + return; + + if (!(event.getRightClicked() instanceof Player)) + return; + + Player clicked = (Player) event.getRightClicked(); + + if (!isPeasant(clicked)) + return; + + King king = getKing(clicker); + Peasant peasant = getPeasant(clicked); + + if (peasant.isInCooldown()) { - // Removes old king from the throne - if (UtilAlg.inBoundingBox(oldKing.getKing().getLocation(), _castleLocationA, _castleLocationB)) - { - oldKing.getKing().teleport(_removedKingLocation); - UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); - } + UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); + return; } - if (newKing != null && newKing.getKing().isOnline()) - Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); - setKing(newKing); + + if (king.hasPeasant(peasant)) + { + UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + "! That player is already your peasant!")); + return; + } + + if (peasant.getKing() != null) + { + King oldKing = peasant.getKing(); + oldKing.removePeasant(peasant); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + } + + peasant.setCooldown(); + king.addPeasant(peasant); + peasant.setKing(king); + UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "You were tagged by " + F.name(clicked.getName()) + " as a peasant!")); + + updateLobbyKing(); + } + + /** + * Sets player as peasant + * @param event + */ + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) + { + Player player = event.getPlayer(); + setPlayerAsPeasant(player); + } + + @EventHandler + public void onPlayerLeave(PlayerQuitEvent event) + { + Player player = event.getPlayer(); + if (isPeasant(player)) + { + Peasant peasant = getPeasant(player); + if (peasant.getKing() != null) + { + peasant.getKing().removePeasant(peasant); + } + removePeasant(player); + } + else if (isKing(player)) + { + if (getKing(player) != null) + getKing(player).clearPeasants(); + } + updateLobbyKing(); } /** @@ -200,35 +258,57 @@ public class CastleManager extends MiniPlugin } } + private void updateKing(King oldKing, King newKing) + { + setKing(newKing); + + if (!isHub()) + return; + + if (oldKing != null && oldKing.getKing().isOnline()) + { + // Removes old king from the throne + if (UtilAlg.inBoundingBox(oldKing.getKing().getLocation(), _castleLocationA, _castleLocationB)) + { + Entity target = oldKing.getKing(); + while (target.getVehicle() != null) + { + target = target.getVehicle(); + } + UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), _removedKingLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); + } + } + if (newKing != null && newKing.getKing().isOnline()) + Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); + } + public void setPlayerAsKing(Player player) { if (isKing(player)) return; if (isPeasant(player)) - removePeasant(player, false); + removePeasant(player); _kings.put(player, new King(player)); } - public boolean isKing(Player player) + private boolean isKing(Player player) { return _kings.containsKey(player); } - public void removeKing(Player player, boolean setPeasant) + private void removeKing(Player player) { if (!isKing(player)) return; _kings.get(player).clearPeasants(); _kings.remove(player); - - if (setPeasant) - setPlayerAsPeasant(player); } - public King getKing(Player player) + private King getKing(Player player) { if (!isKing(player)) return null; @@ -242,28 +322,25 @@ public class CastleManager extends MiniPlugin return; if (isKing(player)) - removeKing(player, false); + removeKing(player); _peasants.put(player, new Peasant(player)); } - public boolean isPeasant(Player player) + private boolean isPeasant(Player player) { return _peasants.containsKey(player); } - public void removePeasant(Player player, boolean setKing) + private void removePeasant(Player player) { if (!isPeasant(player)) return; _peasants.remove(player); - - if (setKing) - setPlayerAsKing(player); } - public Peasant getPeasant(Player player) + private Peasant getPeasant(Player player) { if (!isPeasant(player)) return null; @@ -271,10 +348,13 @@ public class CastleManager extends MiniPlugin return _peasants.get(player); } - public King getLobbyKing() + public void updateLobbyKing() { if (_kings.size() == 0) - return null; + { + removeKing(); + return; + } King lobbyKing = null; for (King king : _kings.values()) @@ -284,6 +364,23 @@ public class CastleManager extends MiniPlugin else if (lobbyKing.amountOfPeasants() < king.amountOfPeasants()) lobbyKing = king; } - return lobbyKing; + + if (_king != null && lobbyKing != null) + { + if (!_king.equals(lobbyKing)) + { + updateKing(_king, lobbyKing); + } + } + else if (lobbyKing != null) + { + setKing(lobbyKing); + } + } + + private void removeKing() + { + _king = null; + updateHologram(); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index ae9d46831..b8fd35d81 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -3,30 +3,18 @@ package mineplex.core.gadget.gadgets.particle.king; import java.awt.Color; import java.time.Month; import java.time.YearMonth; -import java.util.HashMap; -import java.util.Map; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.util.Vector; import mineplex.core.common.shape.ShapeWings; import mineplex.core.common.util.C; -import mineplex.core.common.util.F; import mineplex.core.common.util.LineFormat; import mineplex.core.common.util.UtilParticle; -import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilText; import mineplex.core.gadget.GadgetManager; -import mineplex.core.gadget.gadgets.particle.king.events.UpdateKingEvent; -import mineplex.core.gadget.gadgets.particle.king.types.King; -import mineplex.core.gadget.gadgets.particle.king.types.Peasant; import mineplex.core.gadget.types.ParticleGadget; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; @@ -36,14 +24,10 @@ public class ParticleKing extends ParticleGadget private static final int CROWN_POINTS = 12; - private Map _kings = new HashMap<>(); - private Map _taggedPlayers = new HashMap<>(); - private ShapeWings _capeRed = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.2,0.2,0.2), 1, 0, false, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); private ShapeWings _capeWhite = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0.1,0.1,0.1), 1, 0, true, ShapeWings.NO_ROTATION, ShapeWings.KINGS_CAPE); private CastleManager _castleManager; - private boolean _inLobby = false; public ParticleKing(GadgetManager manager, CastleManager castleManager) { @@ -54,8 +38,6 @@ public class ParticleKing extends ParticleGadget -14, Material.GOLD_HELMET, (byte) 0, YearMonth.of(2017, Month.MAY)); _castleManager = castleManager; - if (_castleManager.isHub()) - _inLobby = true; } @Override @@ -94,10 +76,7 @@ public class ParticleKing extends ParticleGadget { super.enableCustom(player, message); _castleManager.setPlayerAsKing(player); - if (_inLobby) - { - updateKing(); - } + _castleManager.updateLobbyKing(); } @Override @@ -105,131 +84,6 @@ public class ParticleKing extends ParticleGadget { super.disableCustom(player, message); _castleManager.setPlayerAsPeasant(player); - if (_inLobby) - { - updateKing(); - } - } - - /** - * When a player clicks another player, sets them as peasant - * @param event - */ - @EventHandler - public void tagPlayer(EntityDamageByEntityEvent event) - { - if (!_inLobby) - return; - - if (!(event.getDamager() instanceof Player)) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player clicker = (Player) event.getDamager(); - Player clicked = (Player) event.getEntity(); - - // Checks if particle is active - if (_castleManager.isPeasant(clicker)) - return; - - // Checks if the clicked player isn't a king - if (_castleManager.isKing(clicked)) - return; - - Peasant peasant = _castleManager.getPeasant(clicked); - - // Checks if the clicked player isn't cooling down - if (peasant.isInCooldown()) - { - UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); - return; - } - - King king = _castleManager.getKing(clicker); - - if (king.hasPeasant(peasant)) - { - UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + "! That player is already your peasant!")); - return; - } - - // Removes old king - if (peasant.getKing() != null) - { - King oldKing = peasant.getKing(); - oldKing.removePeasant(peasant); - UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); - } - - peasant.setCooldown(); - king.addPeasant(peasant); - peasant.setKing(king); - UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); - UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "You were tagged by " + F.name(clicked.getName()) + " as a peasant!")); - - updateKing(); - } - - /** - * Sets player as peasant - * @param event - */ - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) - { - Player player = event.getPlayer(); - _castleManager.setPlayerAsPeasant(player); - } - - /** - * Removes peasant from king, or removes king from peasant - * @param event - */ - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event) - { - if (!_inLobby) - return; - - Player player = event.getPlayer(); - - if (_castleManager.isPeasant(player)) - { - Peasant peasant = _castleManager.getPeasant(player); - if (peasant.getKing() != null) - { - peasant.setKing(null); - } - _castleManager.removePeasant(player, false); - } - else if (_castleManager.isKing(player)) - { - _castleManager.removeKing(player, false); - } - updateKing(); - } - - /** - * Updates the current lobby king - */ - private void updateKing() - { - if (_inLobby) - { - King king = _castleManager.getLobbyKing(); - King oldKing = _castleManager.getKing(); - if (king != null && oldKing != null) - { - if (!king.equals(oldKing)) - { - Bukkit.getPluginManager().callEvent(new UpdateKingEvent(king, oldKing)); - } - } else - { - Bukkit.getPluginManager().callEvent(new UpdateKingEvent(king, oldKing)); - } - } + _castleManager.updateLobbyKing(); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java index 1f9dddf1f..0d82d33de 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/King.java @@ -43,6 +43,7 @@ public class King public void clearPeasants() { + _peasants.forEach(Peasant::removeKing); _peasants.clear(); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java index 1b291bad2..7a5d4ca26 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/types/Peasant.java @@ -25,7 +25,7 @@ public class Peasant public boolean isInCooldown() { - return UtilTime.elapsed(_cooldown, PLAYER_COOLDOWN); + return !UtilTime.elapsed(_cooldown, PLAYER_COOLDOWN); } public void setCooldown() @@ -43,4 +43,9 @@ public class Peasant _king = king; } + public void removeKing() + { + _king = null; + } + } From 2e476226fdddf8f2956c2c25b62cd638f93774a4 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 15:16:34 -0300 Subject: [PATCH 11/61] Javadocs for CastleManager --- .../gadgets/particle/king/CastleManager.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 0a7715a38..883a8141a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -142,6 +142,10 @@ public class CastleManager extends MiniPlugin } } + /** + * Detects when a player right clicks another player to tag them as their peasant + * @param event + */ @EventHandler public void onTagPeasant(PlayerInteractEntityEvent event) { @@ -258,6 +262,11 @@ public class CastleManager extends MiniPlugin } } + /** + * Updates the hub king + * @param oldKing The old king + * @param newKing The new king + */ private void updateKing(King oldKing, King newKing) { setKing(newKing); @@ -283,6 +292,10 @@ public class CastleManager extends MiniPlugin Bukkit.broadcastMessage(F.main("Kingdom", "" + F.name(newKing.getKing().getName()) + " is the new King of this lobby!")); } + /** + * Sets the player as king + * @param player The player + */ public void setPlayerAsKing(Player player) { if (isKing(player)) @@ -294,11 +307,20 @@ public class CastleManager extends MiniPlugin _kings.put(player, new King(player)); } + /** + * Checks if the player is a king + * @param player The player + * @return true if player is king + */ private boolean isKing(Player player) { return _kings.containsKey(player); } + /** + * Removes the player from the king map + * @param player The player + */ private void removeKing(Player player) { if (!isKing(player)) @@ -308,6 +330,11 @@ public class CastleManager extends MiniPlugin _kings.remove(player); } + /** + * Gets the king object for the player + * @param player The player + * @return The king object + */ private King getKing(Player player) { if (!isKing(player)) @@ -316,6 +343,10 @@ public class CastleManager extends MiniPlugin return _kings.get(player); } + /** + * Sets the player as a peasant + * @param player The player + */ public void setPlayerAsPeasant(Player player) { if (isPeasant(player)) @@ -327,11 +358,20 @@ public class CastleManager extends MiniPlugin _peasants.put(player, new Peasant(player)); } + /** + * Checks if the player is a peasant + * @param player The player + * @return true if player is peasant + */ private boolean isPeasant(Player player) { return _peasants.containsKey(player); } + /** + * Removes the player from the peasant map + * @param player The player + */ private void removePeasant(Player player) { if (!isPeasant(player)) @@ -340,6 +380,11 @@ public class CastleManager extends MiniPlugin _peasants.remove(player); } + /** + * Gets the peasant object for the player + * @param player The player + * @return The peasant object + */ private Peasant getPeasant(Player player) { if (!isPeasant(player)) @@ -348,6 +393,9 @@ public class CastleManager extends MiniPlugin return _peasants.get(player); } + /** + * Checks if the lobby should update the king (If a king has more peasants than the current king) + */ public void updateLobbyKing() { if (_kings.size() == 0) @@ -378,6 +426,9 @@ public class CastleManager extends MiniPlugin } } + /** + * Removes the lobby king + */ private void removeKing() { _king = null; From 0942942f5afe8593172961b07bbb4d5681078e22 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 15:43:31 -0300 Subject: [PATCH 12/61] Changed messages --- .../gadgets/particle/king/CastleManager.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 883a8141a..964a029ee 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -170,13 +170,13 @@ public class CastleManager extends MiniPlugin if (peasant.isInCooldown()) { - UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + " yet! That player is cooling down!")); + UtilPlayer.message(clicker, F.main("Kingdom", "You cannot claim " + F.name(clicked.getName()) + " because they have been claimed too recently! Try again later.")); return; } if (king.hasPeasant(peasant)) { - UtilPlayer.message(clicker, F.main("Kingdom", "You can't tag " + F.name(clicked.getName()) + "! That player is already your peasant!")); + UtilPlayer.message(clicker, F.main("Kingdom", "You cannot claim " + F.name(clicked.getName()) + " because they are already a member of your kingdom!")); return; } @@ -184,14 +184,16 @@ public class CastleManager extends MiniPlugin { King oldKing = peasant.getKing(); oldKing.removePeasant(peasant); - UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + " stole one of your peasants! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + ", a member of your kingdom, was kidnapped by the evil monarch " + F.name(clicker.getName()) + "!")); } peasant.setCooldown(); king.addPeasant(peasant); peasant.setKing(king); - UtilPlayer.message(clicker, F.main("Kingdom", "You tagged " + F.name(clicked.getName()) + " as a peasant! You now have " + F.count(king.amountOfPeasants()) + " peasants!")); - UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "You were tagged by " + F.name(clicked.getName()) + " as a peasant!")); + UtilPlayer.message(clicker, F.main("Kingdom", "You claimed " + F.name(clicked.getName()) + " as a member of your kingdom!")); + UtilPlayer.message(clicker, F.main("Kingdom", "Kingdom population: " + F.count(king.amountOfPeasants()))); + UtilPlayer.message(clicker, F.main("Kingdom", "Kingdom position: " + F.count("#" + getKingPosition(king)))); + UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "" + F.name(clicker.getName()) + " claimed you as a member of their kingdom!")); updateLobbyKing(); } @@ -434,4 +436,17 @@ public class CastleManager extends MiniPlugin _king = null; updateHologram(); } + + private int getKingPosition(King king) + { + int position = 1; + for (King otherKing : _kings.values()) + { + if (otherKing.equals(king)) + continue; + if (otherKing.amountOfPeasants() > king.amountOfPeasants()) + position++; + } + return position; + } } From 6a8cecad270cb54df5205f37276669b09145b475 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 15:43:55 -0300 Subject: [PATCH 13/61] Javadocs --- .../core/gadget/gadgets/particle/king/CastleManager.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 964a029ee..10e4f122e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -437,6 +437,11 @@ public class CastleManager extends MiniPlugin updateHologram(); } + /** + * Gets the position of a kingdom + * @param king The king + * @return The position of that kingdom + */ private int getKingPosition(King king) { int position = 1; From 5d5bc2d8473b600020b0941f9e9e64f782c45bb6 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 16:06:23 -0300 Subject: [PATCH 14/61] Reverted removal of fountain --- Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 52c6c4b31..dfa0f1847 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -16,6 +16,7 @@ import mineplex.core.antihack.guardians.GuardianManager; import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.boosters.BoosterManager; +import mineplex.core.brawl.fountain.FountainManager; import mineplex.core.chat.Chat; import mineplex.core.chatsnap.SnapshotManager; import mineplex.core.chatsnap.SnapshotPlugin; @@ -184,7 +185,7 @@ public class Hub extends JavaPlugin implements IRelation QueueManager queueManager = new QueueManager(this, clientManager, donationManager, eloManager, partyManager); ServerManager serverManager = new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, queueManager, boosterManager); - //new FountainManager(this, clientManager, donationManager, hologramManager, statsManager, serverManager); + new FountainManager(this, clientManager, donationManager, hologramManager, statsManager, serverManager); Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName()); new MessageManager(this, incognito, clientManager, preferenceManager, ignoreManager, punish, friendManager, chat); From 246c0c17883e3597236e1f106b3906d01abba0cd Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 16:28:09 -0300 Subject: [PATCH 15/61] Added wools to the top of the castle --- .../src/mineplex/core/common/Rank.java | 59 +++++++++++-------- .../gadgets/particle/king/CastleManager.java | 36 ++++++++++- 2 files changed, 69 insertions(+), 26 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index 6871107bb..ec5b64990 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -1,6 +1,7 @@ package mineplex.core.common; import org.bukkit.ChatColor; +import org.bukkit.DyeColor; import org.bukkit.entity.Player; import mineplex.core.common.util.C; @@ -10,44 +11,45 @@ import mineplex.core.common.util.UtilPlayer; public enum Rank { //Staff - LT("Leader", "lt", ChatColor.DARK_RED, "Leaders manage the operation of their respective team \nor projects. They usually operate on affairs within \nthe staff, development, or management team.", 11), - OWNER("Owner", "owner", ChatColor.DARK_RED, "Owners are the founders of Mineplex. \nEach owner manages a different aspect of the \nserver and ensures its efficient operation.", 55), - DEVELOPER("Dev", "dev", ChatColor.DARK_RED, "Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", 5), - ADMIN("Admin", "adm", ChatColor.DARK_RED, "An Administrator’s role is to manage \ntheir respective Senior Moderator team \nand all moderators within it.", 10), - JNR_DEV("Jr.Dev", "jrdev", ChatColor.GOLD, "Junior Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", -1), - SUPPORT("Support", "spp", ChatColor.BLUE, "Support agents handle tickets and \nprovide customer service.", 47), - CMOD("C.Mod", "cmod", ChatColor.GOLD, "Clans Moderators are members of the Clans Management Senior Mod team. \nTheir duties include moderation and support within the Clans servers. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32), - SNR_MODERATOR("Sr.Mod", "srmod", ChatColor.GOLD, "Senior Moderators are members of a special \nSenior Moderator team where they have to fulfill specific tasks. \nJust like Moderators, you can always ask them for help. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 44), - MODERATOR("Mod", "mod", ChatColor.GOLD, "Moderators enforce rules and provide help to \nanyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32), - HELPER("Trainee", "train", ChatColor.GOLD, "Trainees are moderators-in-training. \nTheir duties include enforcing the rules and \nproviding help to anyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 24), - MAPLEAD("MapLead", "mapl", ChatColor.BLUE, "Map Leaders are leaders of the Mineplex Build Team. \nThey oversee the creation of new maps and manage Builders.", 25), - MAPDEV("Builder", "mapd", ChatColor.BLUE, "Builders are members of the Mineplex Build Team. \nThey create many of the maps used across Mineplex.", 26), - MEDIA("Media", "media", ChatColor.BLUE, "The Media rank is given to talented artists who are\n endorsed to create content for Mineplex.", -1), + LT("Leader", "lt", ChatColor.DARK_RED, "Leaders manage the operation of their respective team \nor projects. They usually operate on affairs within \nthe staff, development, or management team.", 11, DyeColor.RED), + OWNER("Owner", "owner", ChatColor.DARK_RED, "Owners are the founders of Mineplex. \nEach owner manages a different aspect of the \nserver and ensures its efficient operation.", 55, DyeColor.RED), + DEVELOPER("Dev", "dev", ChatColor.DARK_RED, "Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", 5, DyeColor.RED), + ADMIN("Admin", "adm", ChatColor.DARK_RED, "An Administrator’s role is to manage \ntheir respective Senior Moderator team \nand all moderators within it.", 10, DyeColor.RED), + JNR_DEV("Jr.Dev", "jrdev", ChatColor.GOLD, "Junior Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", -1, DyeColor.RED), + SUPPORT("Support", "spp", ChatColor.BLUE, "Support agents handle tickets and \nprovide customer service.", 47, DyeColor.BLUE), + CMOD("C.Mod", "cmod", ChatColor.GOLD, "Clans Moderators are members of the Clans Management Senior Mod team. \nTheir duties include moderation and support within the Clans servers. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32, DyeColor.ORANGE), + SNR_MODERATOR("Sr.Mod", "srmod", ChatColor.GOLD, "Senior Moderators are members of a special \nSenior Moderator team where they have to fulfill specific tasks. \nJust like Moderators, you can always ask them for help. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 44, DyeColor.ORANGE), + MODERATOR("Mod", "mod", ChatColor.GOLD, "Moderators enforce rules and provide help to \nanyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32, DyeColor.ORANGE), + HELPER("Trainee", "train", ChatColor.GOLD, "Trainees are moderators-in-training. \nTheir duties include enforcing the rules and \nproviding help to anyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 24, DyeColor.ORANGE), + MAPLEAD("MapLead", "mapl", ChatColor.BLUE, "Map Leaders are leaders of the Mineplex Build Team. \nThey oversee the creation of new maps and manage Builders.", 25, DyeColor.BLUE), + MAPDEV("Builder", "mapd", ChatColor.BLUE, "Builders are members of the Mineplex Build Team. \nThey create many of the maps used across Mineplex.", 26, DyeColor.BLUE), + MEDIA("Media", "media", ChatColor.BLUE, "The Media rank is given to talented artists who are\n endorsed to create content for Mineplex.", -1, DyeColor.BLUE), - EVENT("Event", "evnt", ChatColor.WHITE, "A member of the official Mineplex Events team!", -1), + EVENT("Event", "evnt", ChatColor.WHITE, "A member of the official Mineplex Events team!", -1, DyeColor.WHITE), //Media - YOUTUBE("YouTube", "yt", ChatColor.RED, "A YouTuber who creates content for \nor related to Mineplex.", 22), - YOUTUBE_SMALL("YT", "ytsm", ChatColor.DARK_PURPLE, "A YouTuber who creates content for \nor related to Mineplex. \n\nThey have fewer subscribers than full YouTubers.", 20), - TWITCH("Twitch", "tw", ChatColor.DARK_PURPLE, "A Twitch streamer who often features \nMineplex in their streams.", 21), + YOUTUBE("YouTube", "yt", ChatColor.RED, "A YouTuber who creates content for \nor related to Mineplex.", 22, DyeColor.RED), + YOUTUBE_SMALL("YT", "ytsm", ChatColor.DARK_PURPLE, "A YouTuber who creates content for \nor related to Mineplex. \n\nThey have fewer subscribers than full YouTubers.", 20, DyeColor.PURPLE), + TWITCH("Twitch", "tw", ChatColor.DARK_PURPLE, "A Twitch streamer who often features \nMineplex in their streams.", 21, DyeColor.PURPLE), //Player - ETERNAL("Eternal", "et", ChatColor.DARK_AQUA, true, "Fantastic and magical, no one \nexcept the time lords truly understand \nthe power of this rank.\n\nThe fifth purchasable rank at Mineplex.com/shop", 18), - TITAN("Titan", "t", ChatColor.RED, true, "Ancient myths spoke of a gigantic being \nwith immense power... \n\nThe fourth purchasable rank at Mineplex.com/shop", 15), - LEGEND("Legend", "l", ChatColor.GREEN, true, "Years they have told stories of this rank, \nonly for the legends to be true. \n\nThe third purchasable rank at Mineplex.com/shop", 14), - HERO("Hero", "h", ChatColor.LIGHT_PURPLE, true, "There are many stories of a \nvaliant Hero who was brave enough to \ntame the most fearsome dragon in the land. \n\nThe second purchasable rank at Mineplex.com/shop", 13), - ULTRA("Ultra", "u", ChatColor.AQUA, true, "A first step into the stories of the mist. \nOnly those brave enough may enter. \n\nThe first purchasable rank at Mineplex.com/shop", 12), - ALL("", "", ChatColor.WHITE, null, -1); + ETERNAL("Eternal", "et", ChatColor.DARK_AQUA, true, "Fantastic and magical, no one \nexcept the time lords truly understand \nthe power of this rank.\n\nThe fifth purchasable rank at Mineplex.com/shop", 18, DyeColor.CYAN), + TITAN("Titan", "t", ChatColor.RED, true, "Ancient myths spoke of a gigantic being \nwith immense power... \n\nThe fourth purchasable rank at Mineplex.com/shop", 15, DyeColor.RED), + LEGEND("Legend", "l", ChatColor.GREEN, true, "Years they have told stories of this rank, \nonly for the legends to be true. \n\nThe third purchasable rank at Mineplex.com/shop", 14, DyeColor.GREEN), + HERO("Hero", "h", ChatColor.LIGHT_PURPLE, true, "There are many stories of a \nvaliant Hero who was brave enough to \ntame the most fearsome dragon in the land. \n\nThe second purchasable rank at Mineplex.com/shop", 13, DyeColor.MAGENTA), + ULTRA("Ultra", "u", ChatColor.AQUA, true, "A first step into the stories of the mist. \nOnly those brave enough may enter. \n\nThe first purchasable rank at Mineplex.com/shop", 12, DyeColor.LIGHT_BLUE), + ALL("", "", ChatColor.WHITE, null, -1, DyeColor.WHITE); private ChatColor _color; private boolean _donor; private String _description; private int _forumId; + private DyeColor _dyeColor; public String Name; public String ScoreboardTag; - Rank(String name, String scoreboardTag, ChatColor color, String description, int forumId) + Rank(String name, String scoreboardTag, ChatColor color, String description, int forumId, DyeColor dyeColor) { _color = color; Name = name; @@ -55,9 +57,10 @@ public enum Rank _description = description; ScoreboardTag = scoreboardTag; _forumId = forumId; + _dyeColor = dyeColor; } - Rank(String name, String scoreboardTag, ChatColor color, boolean donor, String description, int forumId) + Rank(String name, String scoreboardTag, ChatColor color, boolean donor, String description, int forumId, DyeColor dyeColor) { _color = color; Name = name; @@ -65,6 +68,7 @@ public enum Rank _description = description; ScoreboardTag = scoreboardTag; _forumId = forumId; + _dyeColor = dyeColor; } public String getDescription() @@ -151,4 +155,9 @@ public enum Rank { return _forumId; } + + public DyeColor getDyeColor() + { + return _dyeColor; + } } \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 10e4f122e..eda198153 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -5,6 +5,7 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -16,6 +17,8 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; +import mineplex.core.account.CoreClientManager; +import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; @@ -41,7 +44,11 @@ public class CastleManager extends MiniPlugin private Location _hologramLocation = new Location(UtilWorld.getWorld("world"), 28.5, 74, 2.5); + private int[] _woolLocationX = {33, 33, 43, 43}, _woolLocationY = {80}, _woolLocationZ = {-3, 7, 7, -3}; + + private CoreClientManager _coreClientManager; private HologramManager _hologramManager; + private Hologram _hologram; private boolean _isHub = false; @@ -49,9 +56,10 @@ public class CastleManager extends MiniPlugin private Map _kings = new HashMap<>(); private Map _peasants = new HashMap<>(); - public CastleManager(JavaPlugin plugin, HologramManager hologramManager, boolean isHub) + public CastleManager(JavaPlugin plugin, CoreClientManager coreClientManager, HologramManager hologramManager, boolean isHub) { super("CastleManager", plugin); + _coreClientManager = coreClientManager; _hologramManager = hologramManager; _isHub = isHub; spawnHologram(); @@ -262,6 +270,7 @@ public class CastleManager extends MiniPlugin _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name("No one") + "!"); _hologram.start(); } + updateWool(); } /** @@ -454,4 +463,29 @@ public class CastleManager extends MiniPlugin } return position; } + + /** + * Updates the wools above the castle + */ + private void updateWool() + { + Material material = Material.AIR; + byte data = (byte) 0; + if (_king != null) + { + King king = getKing(); + Rank rank = _coreClientManager.Get(king.getKing()).getRealOrDisguisedRank(); + material = Material.WOOL; + data = rank.getDyeColor().getWoolData(); + } + int i = 0; + for (int x : _woolLocationX) + { + int y = _woolLocationY[0]; + int z = _woolLocationZ[i]; + Location location = new Location(UtilWorld.getWorld("world"), x, y, z); + location.getBlock().setType(material); + location.getBlock().setData(data); + } + } } From d33aac9fd46cdcd1a5201b89963e029cb5f7b0aa Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 16:34:35 -0300 Subject: [PATCH 16/61] Fixed args --- .../Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java | 2 +- Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java | 2 +- .../Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java | 2 +- .../mavericks-review-hub/src/mineplex/mavericks/review/Hub.java | 2 +- .../src/mineplex/gemhunters/GemHunters.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java index a614f3c6e..bc74ec6f1 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/HubManager.java @@ -195,7 +195,7 @@ public class HubManager extends MiniPlugin implements IChatMessageFormatter _inventoryManager = inventoryManager; new BenefitManager(plugin, clientManager, _inventoryManager); - CastleManager castleManager = new CastleManager(_plugin, hologramManager, false); + CastleManager castleManager = new CastleManager(_plugin, _clientManager, hologramManager, false); _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, new ProjectileManager(plugin), achievementManager, packetHandler, hologramManager, incognito, castleManager); FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index 745d0afe4..e565740f2 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -224,7 +224,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess _mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager); _inventoryManager = inventoryManager; new BenefitManager(plugin, clientManager, _inventoryManager); - CastleManager castleManager = new CastleManager(_plugin, hologramManager, true); + CastleManager castleManager = new CastleManager(_plugin, _clientManager, hologramManager, true); _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, Managers.get(ProjectileManager.class), achievementManager, packetHandler, hologramManager, incognito, castleManager); FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager); 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 61724f6ae..7bddd6b75 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -203,7 +203,7 @@ public class Arcade extends JavaPlugin InventoryManager inventoryManager = new InventoryManager(this, _clientManager); PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); - CastleManager castleManager = new CastleManager(this, hologramManager, false); + CastleManager castleManager = new CastleManager(this, _clientManager, hologramManager, false); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); BoosterManager boosterManager = new BoosterManager(this, _serverConfiguration.getServerGroup().getBoosterGroup(), _clientManager, _donationManager, inventoryManager, thankManager); diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java index b707363ce..3bd1201c4 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java @@ -130,7 +130,7 @@ public class Hub extends JavaPlugin InventoryManager inventoryManager = new InventoryManager(this, _clientManager); PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); - CastleManager castleManager = new CastleManager(this, hologramManager, false); + CastleManager castleManager = new CastleManager(this, _clientManager, hologramManager, false); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java index da5473918..626e1682c 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java @@ -253,7 +253,7 @@ public class GemHunters extends JavaPlugin MountManager mountManager = new MountManager(this, clientManager, donationManager, blockRestore, disguiseManager); PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore); ProjectileManager projectileManager = new ProjectileManager(this); - CastleManager castleManager = new CastleManager(this, hologramManager, false); + CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, false); GadgetManager gadgetManager = new GadgetManager(this, clientManager, donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, clientManager, donationManager); BoosterManager boosterManager = new BoosterManager(this, null, clientManager, donationManager, inventoryManager, thankManager); From 2615cd6add125115414a8cd8e39dfca2554117ca Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 16:56:06 -0300 Subject: [PATCH 17/61] Fixed locations --- .../gadgets/particle/king/CastleManager.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index eda198153..729cd203a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -44,7 +44,13 @@ public class CastleManager extends MiniPlugin private Location _hologramLocation = new Location(UtilWorld.getWorld("world"), 28.5, 74, 2.5); - private int[] _woolLocationX = {33, 33, 43, 43}, _woolLocationY = {80}, _woolLocationZ = {-3, 7, 7, -3}; + private Location[] _woolLocations = new Location[] + { + new Location(UtilWorld.getWorld("world"), 33, 80, -3), + new Location(UtilWorld.getWorld("world"), 33, 80, 7), + new Location(UtilWorld.getWorld("world"), 43, 80, -3), + new Location(UtilWorld.getWorld("world"), 43, 80, 7) + }; private CoreClientManager _coreClientManager; private HologramManager _hologramManager; @@ -478,12 +484,8 @@ public class CastleManager extends MiniPlugin material = Material.WOOL; data = rank.getDyeColor().getWoolData(); } - int i = 0; - for (int x : _woolLocationX) + for (Location location : _woolLocations) { - int y = _woolLocationY[0]; - int z = _woolLocationZ[i]; - Location location = new Location(UtilWorld.getWorld("world"), x, y, z); location.getBlock().setType(material); location.getBlock().setData(data); } From 95f50604c061cb72e4a6f597b0423f35425af474 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 18:29:55 -0300 Subject: [PATCH 18/61] Fixed colors --- Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index ec5b64990..cd5a9ee82 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -15,7 +15,7 @@ public enum Rank OWNER("Owner", "owner", ChatColor.DARK_RED, "Owners are the founders of Mineplex. \nEach owner manages a different aspect of the \nserver and ensures its efficient operation.", 55, DyeColor.RED), DEVELOPER("Dev", "dev", ChatColor.DARK_RED, "Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", 5, DyeColor.RED), ADMIN("Admin", "adm", ChatColor.DARK_RED, "An Administrator’s role is to manage \ntheir respective Senior Moderator team \nand all moderators within it.", 10, DyeColor.RED), - JNR_DEV("Jr.Dev", "jrdev", ChatColor.GOLD, "Junior Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", -1, DyeColor.RED), + JNR_DEV("Jr.Dev", "jrdev", ChatColor.GOLD, "Junior Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", -1, DyeColor.ORANGE), SUPPORT("Support", "spp", ChatColor.BLUE, "Support agents handle tickets and \nprovide customer service.", 47, DyeColor.BLUE), CMOD("C.Mod", "cmod", ChatColor.GOLD, "Clans Moderators are members of the Clans Management Senior Mod team. \nTheir duties include moderation and support within the Clans servers. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32, DyeColor.ORANGE), SNR_MODERATOR("Sr.Mod", "srmod", ChatColor.GOLD, "Senior Moderators are members of a special \nSenior Moderator team where they have to fulfill specific tasks. \nJust like Moderators, you can always ask them for help. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 44, DyeColor.ORANGE), From e7c270847b9995154f482f66e6b912097076653d Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 20:32:46 -0300 Subject: [PATCH 19/61] Fixed message, and no longer updates without needing --- .../core/gadget/gadgets/particle/king/CastleManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 729cd203a..4495e003e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -198,7 +198,7 @@ public class CastleManager extends MiniPlugin { King oldKing = peasant.getKing(); oldKing.removePeasant(peasant); - UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicker.getName()) + ", a member of your kingdom, was kidnapped by the evil monarch " + F.name(clicker.getName()) + "!")); + UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "" + F.name(clicked.getName()) + ", a member of your kingdom, was kidnapped by the evil monarch " + F.name(clicker.getName()) + "!")); } peasant.setCooldown(); @@ -432,6 +432,9 @@ public class CastleManager extends MiniPlugin if (_king != null && lobbyKing != null) { + if (_king.amountOfPeasants() == lobbyKing.amountOfPeasants()) + return; + if (!_king.equals(lobbyKing)) { updateKing(_king, lobbyKing); From f1670bc550a08683fc32e4fc07c8cbffb8be7959 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 20:33:31 -0300 Subject: [PATCH 20/61] Increase the height of the crown --- .../core/gadget/gadgets/particle/king/ParticleKing.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index b8fd35d81..7e9f2701e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -64,7 +64,7 @@ public class ParticleKing extends ParticleGadget double angle = (i * Math.PI / 180); double x = 0.5 * Math.cos(angle); double z = 0.5 * Math.sin(angle); - Location crown = player.getEyeLocation().add(x, 0.15, z); + Location crown = player.getEyeLocation().add(x, 0.3, z); UtilParticle.PlayParticleToAll(UtilParticle.ParticleType.FLAME, crown, null, 0, 1, UtilParticle.ViewDist.NORMAL); } } From 601c9e31c66b4b0894c29fb05a2241bd6a295d76 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 20:54:49 -0300 Subject: [PATCH 21/61] Updated hologram to display the amount of peasants in the kingdom --- .../core/gadget/gadgets/particle/king/CastleManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 4495e003e..d7dd973e9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -268,7 +268,7 @@ public class CastleManager extends MiniPlugin if (_king != null && _king.getKing().isOnline()) { - _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name(_king.getKing().getName()) + "!"); + _hologram = new Hologram(_hologramManager, _hologramLocation, "Mineplex Castle", "Current King: " + F.name(_king.getKing().getName()) + " (" + F.count(_king.amountOfPeasants()) + ")!"); _hologram.start(); } else From d62d9a813ba9056db28a0c1c826a5a8a6115ac1a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 20:55:21 -0300 Subject: [PATCH 22/61] Javadocs --- .../core/gadget/gadgets/particle/king/CastleManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index d7dd973e9..aca47b4b7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -223,6 +223,10 @@ public class CastleManager extends MiniPlugin setPlayerAsPeasant(player); } + /** + * Removes peasant from king if they leave + * @param event + */ @EventHandler public void onPlayerLeave(PlayerQuitEvent event) { From 16e92638744ddc1a0e6190cb82df9edc9ce8515a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 21:05:03 -0300 Subject: [PATCH 23/61] Lets the player sit on the throne --- .../gadgets/particle/king/CastleManager.java | 57 +++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index aca47b4b7..d4020b924 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -6,11 +6,15 @@ import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Arrow; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; @@ -22,6 +26,7 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; import mineplex.core.gadget.gadgets.particle.king.types.King; @@ -46,10 +51,17 @@ public class CastleManager extends MiniPlugin private Location[] _woolLocations = new Location[] { - new Location(UtilWorld.getWorld("world"), 33, 80, -3), - new Location(UtilWorld.getWorld("world"), 33, 80, 7), - new Location(UtilWorld.getWorld("world"), 43, 80, -3), - new Location(UtilWorld.getWorld("world"), 43, 80, 7) + new Location(UtilWorld.getWorld("world"), 33, 80, -3), + new Location(UtilWorld.getWorld("world"), 33, 80, 7), + new Location(UtilWorld.getWorld("world"), 43, 80, -3), + new Location(UtilWorld.getWorld("world"), 43, 80, 7) + }; + + private Location[] _throneLocations = new Location[] + { + new Location(UtilWorld.getWorld("world"), 41, 76, 2), + new Location(UtilWorld.getWorld("world"), 42, 77, 2), + new Location(UtilWorld.getWorld("world"), 42, 78, 2), }; private CoreClientManager _coreClientManager; @@ -212,6 +224,43 @@ public class CastleManager extends MiniPlugin updateLobbyKing(); } + /** + * Lets player sit on throne + * @param event + */ + @EventHandler + public void onSitThrone(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + + if (!isKing(player)) + return; + + if (!getKing().getKing().equals(player)) + return; + + if (event.getAction() != Action.RIGHT_CLICK_BLOCK) + return; + + Block block = event.getClickedBlock(); + + boolean isThrone = false; + for (Location location : _throneLocations) + { + isThrone = block.getLocation().getBlockX() == location.getBlockX() + && block.getLocation().getBlockY() == location.getBlockY() + && block.getLocation().getBlockZ() == location.getBlockZ(); + } + + if (!isThrone) + return; + + Location arrowLoc = _throneLocations[0].clone().add(0, 0.25, 0); + Arrow arrow = arrowLoc.getWorld().spawn(arrowLoc, Arrow.class); + UtilEnt.vegetate(arrow, true); + arrow.setPassenger(player); + } + /** * Sets player as peasant * @param event From 99363d9af537a76bbbff36050832f1d5afd6df4f Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 21:06:35 -0300 Subject: [PATCH 24/61] Lore --- .../core/gadget/gadgets/particle/king/ParticleKing.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index 7e9f2701e..b2de2e217 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -33,7 +33,10 @@ public class ParticleKing extends ParticleGadget { super(manager, "King", UtilText.splitLinesToArray(new String[] { - C.cGray + "Placeholder", + C.cGray + "Hail to the King!", + C.cBlack + "", + C.cWhite + "Right Click players in the Lobby to claim them for your Kingdom.", + C.cWhite + "The King with the biggest Kingdom will own the Castle in our Lobby." }, LineFormat.LORE), -14, Material.GOLD_HELMET, (byte) 0, YearMonth.of(2017, Month.MAY)); From 55f85966c15b46e54111e79587a09857802ba5f3 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 21:17:05 -0300 Subject: [PATCH 25/61] Fixed arrow location --- .../core/gadget/gadgets/particle/king/CastleManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index d4020b924..36c04a0ff 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -247,6 +247,9 @@ public class CastleManager extends MiniPlugin boolean isThrone = false; for (Location location : _throneLocations) { + if (isThrone) + break; + isThrone = block.getLocation().getBlockX() == location.getBlockX() && block.getLocation().getBlockY() == location.getBlockY() && block.getLocation().getBlockZ() == location.getBlockZ(); @@ -255,7 +258,7 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location arrowLoc = _throneLocations[0].clone().add(0, 0.25, 0); + Location arrowLoc = _throneLocations[0].clone().add(0.5, 0.5, 0.5); Arrow arrow = arrowLoc.getWorld().spawn(arrowLoc, Arrow.class); UtilEnt.vegetate(arrow, true); arrow.setPassenger(player); From 073bc2eea7a894e2eed4f6e5ff8190a00e4ca704 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Thu, 27 Apr 2017 21:18:12 -0300 Subject: [PATCH 26/61] Update hologram when player claims peasant --- .../core/gadget/gadgets/particle/king/CastleManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 36c04a0ff..eb8bd87f6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -222,6 +222,7 @@ public class CastleManager extends MiniPlugin UtilPlayer.message(peasant.getPeasant(), F.main("Kingdom", "" + F.name(clicker.getName()) + " claimed you as a member of their kingdom!")); updateLobbyKing(); + updateHologram(); } /** From 0a1a5eae7a04cdcf8b0dee327ff18ee2b7846977 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Fri, 28 Apr 2017 21:37:39 -0300 Subject: [PATCH 27/61] Changed arrow to armor stand --- .../gadgets/particle/king/CastleManager.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index eb8bd87f6..04b349ab6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -7,7 +7,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.Arrow; +import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -18,6 +18,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.MiniPlugin; @@ -26,7 +27,6 @@ import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; -import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilWorld; import mineplex.core.gadget.gadgets.particle.king.types.King; @@ -74,6 +74,8 @@ public class CastleManager extends MiniPlugin private Map _kings = new HashMap<>(); private Map _peasants = new HashMap<>(); + private ArmorStand _armorStand; + public CastleManager(JavaPlugin plugin, CoreClientManager coreClientManager, HologramManager hologramManager, boolean isHub) { super("CastleManager", plugin); @@ -259,10 +261,32 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location arrowLoc = _throneLocations[0].clone().add(0.5, 0.5, 0.5); - Arrow arrow = arrowLoc.getWorld().spawn(arrowLoc, Arrow.class); - UtilEnt.vegetate(arrow, true); - arrow.setPassenger(player); + Location arrowLoc = _throneLocations[0].clone().add(0.5, -1.5, 0.5); + ArmorStand armorStand = arrowLoc.getWorld().spawn(arrowLoc, ArmorStand.class); + armorStand.setGravity(false); + armorStand.setVisible(false); + _armorStand = armorStand; + _armorStand.setPassenger(player); + } + + /** + * Removes armor stand after player leaves it + * @param event + */ + @EventHandler + public void onLeaveThrone(VehicleExitEvent event) + { + if (!(event.getVehicle() instanceof ArmorStand)) + return; + + if (_armorStand == null) + return; + + if (!event.getVehicle().equals(_armorStand)) + return; + + _armorStand.remove(); + _armorStand = null; } /** From 25adf3fa33531710ca305c21c966ac4cef657633 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Fri, 28 Apr 2017 22:04:00 -0300 Subject: [PATCH 28/61] Fix height --- .../core/gadget/gadgets/particle/king/CastleManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 04b349ab6..f078afd21 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -261,7 +261,7 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location arrowLoc = _throneLocations[0].clone().add(0.5, -1.5, 0.5); + Location arrowLoc = _throneLocations[0].clone().add(0.5, -1, 0.5); ArmorStand armorStand = arrowLoc.getWorld().spawn(arrowLoc, ArmorStand.class); armorStand.setGravity(false); armorStand.setVisible(false); From 146274001f8effb33ae5fb519e0c41ba4bb1465d Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Fri, 28 Apr 2017 22:32:40 -0300 Subject: [PATCH 29/61] Fix height (again) --- .../core/gadget/gadgets/particle/king/CastleManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index f078afd21..0ff65d1cc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -261,10 +261,11 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location arrowLoc = _throneLocations[0].clone().add(0.5, -1, 0.5); + Location arrowLoc = _throneLocations[0].clone().add(0.5, 0.5, 0.5); ArmorStand armorStand = arrowLoc.getWorld().spawn(arrowLoc, ArmorStand.class); armorStand.setGravity(false); armorStand.setVisible(false); + armorStand.setSmall(true); _armorStand = armorStand; _armorStand.setPassenger(player); } From 1879a922617312fb24f8c6e8ced30f60a8999db4 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sat, 29 Apr 2017 01:03:30 -0300 Subject: [PATCH 30/61] Changed to items... --- .../gadgets/particle/king/CastleManager.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 0ff65d1cc..b50a5e864 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -9,6 +9,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; @@ -19,7 +20,9 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.vehicle.VehicleExitEvent; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.util.Vector; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; @@ -74,7 +77,7 @@ public class CastleManager extends MiniPlugin private Map _kings = new HashMap<>(); private Map _peasants = new HashMap<>(); - private ArmorStand _armorStand; + private Item _item; public CastleManager(JavaPlugin plugin, CoreClientManager coreClientManager, HologramManager hologramManager, boolean isHub) { @@ -261,13 +264,13 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location arrowLoc = _throneLocations[0].clone().add(0.5, 0.5, 0.5); - ArmorStand armorStand = arrowLoc.getWorld().spawn(arrowLoc, ArmorStand.class); - armorStand.setGravity(false); - armorStand.setVisible(false); - armorStand.setSmall(true); - _armorStand = armorStand; - _armorStand.setPassenger(player); + Location loc = _throneLocations[0].clone().add(0.5, 0, 0.5); + loc.setYaw(90); + loc.setPitch(0); + Item item = loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.WOOL, 1, (byte) 14)); + item.setPickupDelay(Integer.MAX_VALUE); + item.setVelocity(new Vector().zero()); + item.setPassenger(player); } /** @@ -280,14 +283,14 @@ public class CastleManager extends MiniPlugin if (!(event.getVehicle() instanceof ArmorStand)) return; - if (_armorStand == null) + if (_item == null) return; - if (!event.getVehicle().equals(_armorStand)) + if (!event.getVehicle().equals(_item)) return; - _armorStand.remove(); - _armorStand = null; + _item.remove(); + _item = null; } /** From f5cba1eb1eb5a031ce145ae8539970649a26c83a Mon Sep 17 00:00:00 2001 From: Kenny Date: Sat, 29 Apr 2017 02:05:07 -0400 Subject: [PATCH 31/61] Rate limit book/sign edits as a temporary measure against a crash exploit --- .../src/mineplex/core/BookRateLimiter.java | 54 +++++++++++++++++++ .../src/mineplex/game/clans/Clans.java | 3 ++ .../src/mineplex/clanshub/ClansHub.java | 3 ++ .../Mineplex.Hub/src/mineplex/hub/Hub.java | 6 ++- .../src/nautilus/game/arcade/Arcade.java | 9 +++- 5 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java b/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java new file mode 100644 index 000000000..e1a5c8e97 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java @@ -0,0 +1,54 @@ +package mineplex.core; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketHandler.ListenerPriority; + +/** + * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. + *

+ * See: + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab + */ +public class BookRateLimiter extends MiniPlugin +{ + + private final PacketHandler _packetHandler = require(PacketHandler.class); + private final Cache _cache = CacheBuilder.newBuilder() + .expireAfterWrite(1, TimeUnit.SECONDS) + .build(); + + public BookRateLimiter() + { + super("PacketRateLimiter"); + + _packetHandler.addPacketHandler(info -> + { + PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); + String s = packet.a(); + if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) + { + return; + } + + if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) + { + info.setCancelled(true); + + return; + } + + _cache.put(info.getPlayer().getUniqueId(), 0); + + }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); + } + +} 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 8bddf656b..8599201ea 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -280,6 +280,9 @@ public class Clans extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; + + // TODO temporary fix for book related crashes. + new PacketRateLimiter(); } public static String prettifyName(Material material) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index e0997337b..51de3e615 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -183,6 +183,9 @@ public class ClansHub extends JavaPlugin require(Titles.class); require(TwoFactorAuth.class); new WebsiteLinkManager(this, clientManager); + + // TODO temporary fix for book related crashes. + new PacketRateLimiter(); } @Override diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 05b80b2e6..c1b7a822b 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -2,13 +2,13 @@ package mineplex.hub; import static mineplex.core.Managers.require; -import mineplex.hub.modules.AprilFoolsTreasureHunt; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.CustomTagFix; +import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TwitchIntegrationFix; import mineplex.core.account.CoreClientManager; @@ -79,6 +79,7 @@ import mineplex.core.updater.Updater; import mineplex.core.velocity.VelocityFix; import mineplex.core.visibility.VisibilityManager; import mineplex.core.website.WebsiteLinkManager; +import mineplex.hub.modules.AprilFoolsTreasureHunt; import mineplex.hub.modules.BillboardManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -244,6 +245,9 @@ public class Hub extends JavaPlugin implements IRelation require(AprilFoolsTreasureHunt.class); } require(TwitchIntegrationFix.class); + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } @Override 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 26a762345..0a699a9f6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -1,9 +1,10 @@ package nautilus.game.arcade; +import static mineplex.core.Managers.require; + import java.io.File; import java.util.HashMap; -import mineplex.core.aprilfools.AprilFoolsManager; import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.Bukkit; @@ -16,6 +17,7 @@ import org.spigotmc.SpigotConfig; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; +import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TimingsFix; import mineplex.core.TwitchIntegrationFix; @@ -24,6 +26,7 @@ import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.RelationProvider; import mineplex.core.antihack.logging.AntihackLogger; +import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.boosters.BoosterManager; @@ -86,7 +89,6 @@ import mineplex.minecraft.game.core.damage.DamageManager; import nautilus.game.arcade.anticheatmetadata.GameInfoMetadata; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameServerConfig; -import static mineplex.core.Managers.require; public class Arcade extends JavaPlugin { @@ -237,6 +239,9 @@ public class Arcade extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; + + // TODO temporary fix for book related crashes. + new BookRateLimiter(); } @Override From 7994ed082e25df9bbbbb823d35afdead58023fe4 Mon Sep 17 00:00:00 2001 From: Kenny Date: Sat, 29 Apr 2017 02:16:31 -0400 Subject: [PATCH 32/61] Enable 2x XP --- .../src/nautilus/game/arcade/game/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index 89fe831d5..b43b4408a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -296,7 +296,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public long PrepareTime = 9000; public boolean PlaySoundGameStart = true; - public double XpMult = 1; + public double XpMult = 2; public boolean SpeedMeasurement = false; From 20264ff1af98a85a2ab0454fc4c0a3618755a2de Mon Sep 17 00:00:00 2001 From: Kenny Date: Sat, 29 Apr 2017 02:17:50 -0400 Subject: [PATCH 33/61] Clans doesn't have access to this through core for some reason --- .../mineplex/game/clans/BookRateLimiter.java | 55 +++++++++++++++++++ .../src/mineplex/game/clans/Clans.java | 2 +- .../src/mineplex/clanshub/ClansHub.java | 7 ++- 3 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java new file mode 100644 index 000000000..49cdd7509 --- /dev/null +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java @@ -0,0 +1,55 @@ +package mineplex.game.clans; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; + +import mineplex.core.MiniPlugin; +import mineplex.core.packethandler.PacketHandler; +import mineplex.core.packethandler.PacketHandler.ListenerPriority; + +/** + * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. + *

+ * See: + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e + * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab + */ +public class BookRateLimiter extends MiniPlugin +{ + + private final PacketHandler _packetHandler = require(PacketHandler.class); + private final Cache _cache = CacheBuilder.newBuilder() + .expireAfterWrite(1, TimeUnit.SECONDS) + .build(); + + public BookRateLimiter() + { + super("PacketRateLimiter"); + + _packetHandler.addPacketHandler(info -> + { + PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); + String s = packet.a(); + if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) + { + return; + } + + if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) + { + info.setCancelled(true); + + return; + } + + _cache.put(info.getPlayer().getUniqueId(), 0); + + }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); + } + +} 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 8599201ea..4cb014d4a 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -282,7 +282,7 @@ public class Clans extends JavaPlugin SpigotConfig.debug = false; // TODO temporary fix for book related crashes. - new PacketRateLimiter(); + new BookRateLimiter(); } public static String prettifyName(Material material) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index 51de3e615..d7a93e3f8 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -1,9 +1,12 @@ package mineplex.clanshub; +import static mineplex.core.Managers.require; + import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; +import mineplex.core.BookRateLimiter; import mineplex.core.CustomTagFix; import mineplex.core.PacketsInteractionFix; import mineplex.core.account.CoreClientManager; @@ -65,8 +68,6 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; -import static mineplex.core.Managers.require; - /** * Main class for clans hub */ @@ -185,7 +186,7 @@ public class ClansHub extends JavaPlugin new WebsiteLinkManager(this, clientManager); // TODO temporary fix for book related crashes. - new PacketRateLimiter(); + new BookRateLimiter(); } @Override From e6852d92f28f32cd048529042032a0d7e0b44445 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sat, 29 Apr 2017 13:24:27 -0300 Subject: [PATCH 34/61] Fixed item, spawn particles even if player is moving --- .../gadgets/particle/king/CastleManager.java | 20 +++++++++++-------- .../gadgets/particle/king/ParticleKing.java | 11 +++++----- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index b50a5e864..c93477763 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -7,7 +7,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; import org.bukkit.entity.Player; @@ -19,10 +18,10 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.vehicle.VehicleExitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; +import org.spigotmc.event.entity.EntityDismountEvent; import mineplex.core.MiniPlugin; import mineplex.core.account.CoreClientManager; @@ -129,6 +128,9 @@ public class CastleManager extends MiniPlugin if (event.getEntity() instanceof Player) return; + if (event.getEntity() instanceof Item) + return; + if (UtilAlg.inBoundingBox(event.getLocation(), _castleLocationA, _castleLocationB)) { event.setCancelled(true); @@ -264,13 +266,15 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location loc = _throneLocations[0].clone().add(0.5, 0, 0.5); + Location loc = _throneLocations[0].clone().add(0.5, 0.75, 0.5); loc.setYaw(90); loc.setPitch(0); - Item item = loc.getWorld().dropItemNaturally(loc, new ItemStack(Material.WOOL, 1, (byte) 14)); + Item item = loc.getWorld().dropItem(loc, new ItemStack(Material.WOOL, 1, (byte) 14)); item.setPickupDelay(Integer.MAX_VALUE); - item.setVelocity(new Vector().zero()); + item.teleport(loc); + item.setVelocity(new Vector(0, 0, 0)); item.setPassenger(player); + _item = item; } /** @@ -278,15 +282,15 @@ public class CastleManager extends MiniPlugin * @param event */ @EventHandler - public void onLeaveThrone(VehicleExitEvent event) + public void onLeaveThrone(EntityDismountEvent event) { - if (!(event.getVehicle() instanceof ArmorStand)) + if (!(event.getEntity() instanceof Item)) return; if (_item == null) return; - if (!event.getVehicle().equals(_item)) + if (!event.getEntity().equals(_item)) return; _item.remove(); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java index b2de2e217..7da074849 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/ParticleKing.java @@ -46,7 +46,6 @@ public class ParticleKing extends ParticleGadget @Override public void playParticle(Player player, UpdateEvent event) { - Location loc = player.getLocation().add(0, 0.8, 0).add(player.getLocation().getDirection().multiply(-0.3)); if (Manager.isMoving(player)) { @@ -55,14 +54,15 @@ public class ParticleKing extends ParticleGadget _capeRed.displayColoredParticle(loc, Color.RED); _capeWhite.displayColoredParticle(loc, Color.WHITE); } - return; } - - if (event.getType() == UpdateType.FAST) + else if (event.getType() == UpdateType.FAST) { _capeRed.displayColored(loc, Color.RED); _capeWhite.displayColored(loc, Color.WHITE); - for (int i = 0; i < 360; i += 360/CROWN_POINTS) + } + if (event.getType() == UpdateType.FAST) + { + for (int i = 0; i < 360; i += 360 / CROWN_POINTS) { double angle = (i * Math.PI / 180); double x = 0.5 * Math.cos(angle); @@ -71,7 +71,6 @@ public class ParticleKing extends ParticleGadget UtilParticle.PlayParticleToAll(UtilParticle.ParticleType.FLAME, crown, null, 0, 1, UtilParticle.ViewDist.NORMAL); } } - } @Override From f315689dda1445c50dacf28cc8d26a74f053da78 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 10 Apr 2017 23:46:09 +0100 Subject: [PATCH 35/61] Staff Oscars --- .../arcade/game/games/event/EventGame.java | 12 +- .../games/event/staffoscars/ChairData.java | 41 +++ .../games/event/staffoscars/RainbowSheep.java | 105 ++++++++ .../event/staffoscars/StaffOscarsModule.java | 252 ++++++++++++++++++ 4 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/ChairData.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java create mode 100644 Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java index 68767903c..efdbebb6c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventGame.java @@ -19,6 +19,7 @@ import nautilus.game.arcade.GameType; import nautilus.game.arcade.events.GameStateChangeEvent; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.games.event.kits.KitPlayer; +import nautilus.game.arcade.game.games.event.staffoscars.StaffOscarsModule; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; import nautilus.game.arcade.managers.GameHostManager; @@ -125,7 +126,16 @@ public class EventGame extends Game .setGiveCompassToAlive(false) .register(this); } - + + @Override + public void ParseData() + { + if (WorldData.MapName.equals("Staff Oscars")) + { + new StaffOscarsModule().register(this); + } + } + @EventHandler public void registerSigns(GameStateChangeEvent event) { diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/ChairData.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/ChairData.java new file mode 100644 index 000000000..4f15c0bdc --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/ChairData.java @@ -0,0 +1,41 @@ +package nautilus.game.arcade.game.games.event.staffoscars; + +import org.bukkit.block.Block; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; + +public class ChairData +{ + + private Player _player; + private Block _block; + private ArmorStand _stand; + + public ChairData(Player player, Block block) + { + _player = player; + _block = block; + _stand = block.getWorld().spawn(block.getLocation().add(0.5, -0.4, 0.5), ArmorStand.class); + + _stand.setGravity(false); + _stand.setSmall(true); + _stand.setVisible(false); + _stand.setPassenger(player); + } + + public Player getPlayer() + { + return _player; + } + + public Block getBlock() + { + return _block; + } + + public ArmorStand getStand() + { + return _stand; + } + +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java new file mode 100644 index 000000000..bcdddfc13 --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java @@ -0,0 +1,105 @@ +package nautilus.game.arcade.game.games.event.staffoscars; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilTime; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import org.bukkit.Color; +import org.bukkit.entity.Player; +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.util.Vector; + +import java.util.HashSet; +import java.util.Set; + +public class RainbowSheep implements Listener +{ + + private static final Color[] COLOURS = { + Color.RED, Color.ORANGE, Color.YELLOW, Color.LIME, Color.AQUA, Color.BLUE, Color.PURPLE + }; + + private final Set _sheep; + private Player _player; + private boolean _active; + private long _start; + + public RainbowSheep() + { + _sheep = new HashSet<>(); + } + + @EventHandler + public void updateSpawn(UpdateEvent event) + { + if (event.getType() != UpdateType.FASTER || !_active) + { + return; + } + + if (UtilTime.elapsed(_start, 50000)) + { + for (Sheep sheep : _sheep) + { + sheep.remove(); + } + + _sheep.clear(); + _active = false; + return; + } + + Vector direction = _player.getLocation().getDirection(); + Vector left = UtilAlg.getLeft(direction).add(direction.clone().multiply(1.5)); + Vector right = UtilAlg.getRight(direction).add(direction.clone().multiply(1.5)); + + spawnSheep(_player, direction); + spawnSheep(_player, left); + spawnSheep(_player, right); + } + + @EventHandler + public void updateParticles(UpdateEvent event) + { + if (event.getType() != UpdateType.TICK) + { + return; + } + + for (Sheep sheep : _sheep) + { + UtilParticle.playColoredParticleToAll(COLOURS[UtilMath.r(COLOURS.length)], UtilParticle.ParticleType.RED_DUST, sheep.getLocation().add(0, 0.75, 0), 2, UtilParticle.ViewDist.LONGER); + } + } + + @EventHandler + public void entityDamage(EntityDamageEvent event) + { + if (_sheep.contains(event.getEntity())) + { + event.setCancelled(true); + } + } + + private void spawnSheep(Player player, Vector vector) + { + Sheep sheep = player.getWorld().spawn(player.getEyeLocation(), Sheep.class); + + sheep.setCustomName("jeb_"); + sheep.setVelocity(vector); + + _sheep.add(sheep); + } + + public void setActive(Player player) + { + _player = player; + _active = true; + _start = System.currentTimeMillis(); + } +} diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java new file mode 100644 index 000000000..2e45e694a --- /dev/null +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java @@ -0,0 +1,252 @@ +package nautilus.game.arcade.game.games.event.staffoscars; + +import mineplex.core.common.util.*; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; +import nautilus.game.arcade.events.GameStateChangeEvent; +import nautilus.game.arcade.game.Game; +import nautilus.game.arcade.game.modules.Module; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerArmorStandManipulateEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class StaffOscarsModule extends Module +{ + + private static final int MAX_X = 18; + + private List _blocks; + private boolean _open; + private boolean _animate; + private int _x; + private Location _center; + + private Set _chairs; + + private List _fireworks; + + private RainbowSheep _sheep; + + @Override + protected void setup() + { + _chairs = new HashSet<>(); + _blocks = getGame().WorldData.GetCustomLocs(String.valueOf(Material.EMERALD_BLOCK.getId())); + _center = UtilAlg.getAverageLocation(_blocks); + _fireworks = getGame().WorldData.GetDataLocs("YELLOW"); + _sheep = new RainbowSheep(); + UtilServer.RegisterEvents(_sheep); + } + + @Override + public void cleanup() + { + UtilServer.Unregister(_sheep); + } + + @EventHandler + public void prepare(GameStateChangeEvent event) + { + if (event.GetState() != Game.GameState.Prepare) + { + return; + } + + for (Location location : _blocks) + { + MapUtil.QuickChangeBlockAt(location, Material.WOOL, (byte) 14); + } + } + + @EventHandler + public void update(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST || !_animate) + { + return; + } + + for (Location location : _blocks) + { + boolean in = UtilMath.offset2d(location, _center) < _x; + + if (in && _open) + { + MapUtil.QuickChangeBlockAt(location, Material.AIR); + } + else if (!in && !_open) + { + MapUtil.QuickChangeBlockAt(location, Material.WOOL, (byte) 14); + } + } + + if (_open) + { + _x++; + } + else + { + _x--; + } + + if (_open && _x == MAX_X || !_open && _x == -1) + { + _animate = false; + } + } + + @EventHandler + public void curtainCommand(PlayerCommandPreprocessEvent event) + { + String message = event.getMessage(); + + if (message.startsWith("/curtain") && getGame().getArcadeManager().GetGameHostManager().isAdmin(event.getPlayer(), false)) + { + _open = !_open; + _animate = true; + + event.setCancelled(true); + event.getPlayer().sendMessage(F.main("Event", "Curtain open state = " + _open + ".")); + } + } + + @EventHandler + public void chairInteract(PlayerInteractEvent event) + { + Player player = event.getPlayer(); + Block block = event.getClickedBlock(); + + if (block == null) + { + return; + } + + if (UtilBlock.usable(block)) + { + event.setCancelled(true); + } + + if (block.getType() != Material.WOOD_STAIRS) + { + return; + } + + for (ChairData data : _chairs) + { + if (data.getBlock().equals(block)) + { + return; + } + + if (data.getPlayer().equals(player)) + { + handleDismount(player); + break; + } + } + + _chairs.add(new ChairData(player, block)); + } + + @EventHandler + public void playerQuit(PlayerQuitEvent event) + { + handleDismount(event.getPlayer()); + } + + @EventHandler + public void updateDismount(UpdateEvent event) + { + if (event.getType() != UpdateType.FAST) + { + return; + } + + Iterator iterator = _chairs.iterator(); + + while (iterator.hasNext()) + { + ChairData data = iterator.next(); + + if (data.getPlayer().isInsideVehicle()) + { + continue; + } + + data.getStand().remove(); + iterator.remove(); + } + } + + private void handleDismount(Player player) + { + Iterator iterator = _chairs.iterator(); + + while (iterator.hasNext()) + { + ChairData data = iterator.next(); + + if (!data.getPlayer().equals(player)) + { + continue; + } + + data.getStand().remove(); + iterator.remove(); + } + } + + @EventHandler + public void armourStandEdit(PlayerArmorStandManipulateEvent event) + { + event.setCancelled(true); + } + + @EventHandler + public void fireworksCommand(PlayerCommandPreprocessEvent event) + { + String message = event.getMessage(); + + if (message.startsWith("/firework") && getGame().getArcadeManager().GetGameHostManager().isAdmin(event.getPlayer(), false)) + { + event.setCancelled(true); + + FireworkEffect fireworkEffect = FireworkEffect.builder().with(FireworkEffect.Type.BALL_LARGE).withColor(Color.YELLOW).build(); + + for (Location location : _fireworks) + { + for (int i = 0; i < 4; i++) + { + UtilFirework.launchFirework(location, fireworkEffect, null, UtilMath.r(3) + 1); + } + } + } + } + + @EventHandler + public void rainbowSheepCommand(PlayerCommandPreprocessEvent event) + { + String message = event.getMessage(); + + if (!message.startsWith("/deantm") || !getGame().getArcadeManager().GetGameHostManager().isAdmin(event.getPlayer(), false)) + { + return; + } + + event.setCancelled(true); + _sheep.setActive(event.getPlayer()); + } +} From ee7a29d387c92bf66af42523a147d607115a6893 Mon Sep 17 00:00:00 2001 From: Sam Date: Tue, 11 Apr 2017 01:55:49 +0100 Subject: [PATCH 36/61] Stop command spam --- .../arcade/game/games/event/staffoscars/RainbowSheep.java | 5 +++++ .../game/games/event/staffoscars/StaffOscarsModule.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java index bcdddfc13..6460c645a 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java @@ -102,4 +102,9 @@ public class RainbowSheep implements Listener _active = true; _start = System.currentTimeMillis(); } + + public boolean isActive() + { + return _active; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java index 2e45e694a..c560563d6 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/StaffOscarsModule.java @@ -246,6 +246,11 @@ public class StaffOscarsModule extends Module return; } + if (_sheep.isActive()) + { + return; + } + event.setCancelled(true); _sheep.setActive(event.getPlayer()); } From fd317063337e7b2406f897c7aa767b3bf1aae14a Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 24 Apr 2017 23:21:10 +0100 Subject: [PATCH 37/61] 5 seconds rather than 50 --- .../game/arcade/game/games/event/staffoscars/RainbowSheep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java index 6460c645a..ce068bac8 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/staffoscars/RainbowSheep.java @@ -42,7 +42,7 @@ public class RainbowSheep implements Listener return; } - if (UtilTime.elapsed(_start, 50000)) + if (UtilTime.elapsed(_start, 5000)) { for (Sheep sheep : _sheep) { From 0bbd0659a031cd9aed98d1866d6f82c148d472f3 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 24 Apr 2017 21:26:00 +0100 Subject: [PATCH 38/61] Fix the water not being replaced bug --- .../game/arcade/game/games/bridge/Bridge.java | 675 +++++++++++++----- .../custom/CustomBridgeAnimation.java | 27 +- 2 files changed, 522 insertions(+), 180 deletions(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java index 6a6d7b56c..dfc12db46 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/Bridge.java @@ -1,6 +1,5 @@ package nautilus.game.arcade.game.games.bridge; -import mineplex.core.common.Rank; import mineplex.core.common.util.*; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.explosion.ExplosionEvent; @@ -22,12 +21,9 @@ import nautilus.game.arcade.game.games.bridge.animation.custom.CustomBridgeAnima import nautilus.game.arcade.game.games.bridge.animation.custom.RadiusCustomBridgeAnimation; import nautilus.game.arcade.game.games.bridge.animation.custom.RandomCustomBridgeAnimation; import nautilus.game.arcade.game.games.bridge.kits.*; -import nautilus.game.arcade.game.modules.WorldBorderModule; import nautilus.game.arcade.game.modules.compass.CompassModule; import nautilus.game.arcade.kit.Kit; -import nautilus.game.arcade.kit.Perk; import nautilus.game.arcade.kit.perks.PerkBomber; -import nautilus.game.arcade.kit.perks.PerkDestructor; import nautilus.game.arcade.ore.OreHider; import nautilus.game.arcade.ore.OreObsfucation; import nautilus.game.arcade.stats.*; @@ -65,21 +61,21 @@ public class Bridge extends TeamGame implements OreObsfucation /** * When a block is broken of one of these materials, the item drop will be locked to the player that broke the block for 8 seconds. After that, anyone can pick up the item. */ - private static final Material[] PLAYER_DROP_DELAY_MATERIALS = new Material[] { Material.LOG, Material.LOG_2, Material.IRON_ORE, Material.DIAMOND_ORE, Material.COAL_ORE, Material.GOLD_ORE, Material.WORKBENCH, Material.FURNACE }; + private static final Material[] PLAYER_DROP_DELAY_MATERIALS = new Material[]{Material.LOG, Material.LOG_2, Material.IRON_ORE, Material.DIAMOND_ORE, Material.COAL_ORE, Material.GOLD_ORE, Material.WORKBENCH, Material.FURNACE}; /** * The number of milliseconds from the game start time til the bridges should be built. */ private static final long BRIDGE_TIME = TimeUnit.MINUTES.toMillis(10); - + private static final String CUSTOM_BRIDGE_KEY = "TYPE"; - + //Bridge private long _bridgeTime = BRIDGE_TIME; private boolean _bridgesDown = false; private BridgeAnimation _animation; private CustomBridgeAnimation[] _customAnimations; - + private HashSet _bridgeParts = new HashSet(); //Animals @@ -108,7 +104,7 @@ public class Bridge extends TeamGame implements OreObsfucation private long _tournamentKillMessageTimer = 0; private final Map _averageSpawns = new HashMap<>(); - + @SuppressWarnings("unchecked") public Bridge(ArcadeManager manager) { @@ -120,7 +116,7 @@ public class Bridge extends TeamGame implements OreObsfucation new TntMinerStatTracker(this), new KillFastStatTracker(this, 4, 10, "Rampage"), new DeathBomberStatTracker(this, 5) - ); + ); registerChatStats( Kills, @@ -132,31 +128,31 @@ public class Bridge extends TeamGame implements OreObsfucation DamageDealt ); } - + public Bridge(ArcadeManager manager, GameType type) { - this(manager, new Kit[] - { - new KitApple(manager), - new KitBerserker(manager), - new KitBrawler(manager), - new KitArcher(manager), - new KitMiner(manager), - new KitBomber(manager), - new KitDestructor(manager), + this(manager, new Kit[] + { + new KitApple(manager), + new KitBerserker(manager), + new KitBrawler(manager), + new KitArcher(manager), + new KitMiner(manager), + new KitBomber(manager), + new KitDestructor(manager), }, type); } - + public Bridge(ArcadeManager manager, Kit[] kitarray, GameType type) { super(manager, type, kitarray, - new String[] { - "Gather resources and prepare for combat.", - "After 10 minutes, The Bridges will emerge.", - "Special loot is located in the center.", - "The last team alive wins!" - }); + new String[]{ + "Gather resources and prepare for combat.", + "After 10 minutes, The Bridges will emerge.", + "Special loot is located in the center.", + "The last team alive wins!" + }); _ore = new OreHider(); @@ -173,7 +169,7 @@ public class Bridge extends TeamGame implements OreObsfucation ItemPickup = true; InventoryClick = true; - + AnnounceStay = false; PrivateBlocks = true; @@ -190,7 +186,7 @@ public class Bridge extends TeamGame implements OreObsfucation DeathDropItems = true; - GemMultiplier = 2.5; + GemMultiplier = 2.5; PrepareFreeze = false; @@ -199,26 +195,26 @@ public class Bridge extends TeamGame implements OreObsfucation { QuitOut = false; - _gameDesc = new String[] - { - "Gather resources and prepare for combat.", - "After 10 minutes, The Bridges will emerge.", - "Special loot is located in the center.", - "Killing yourself counts as -1 team kill.", - "Team with the most kills wins!" + _gameDesc = new String[] + { + "Gather resources and prepare for combat.", + "After 10 minutes, The Bridges will emerge.", + "Special loot is located in the center.", + "Killing yourself counts as -1 team kill.", + "Team with the most kills wins!" }; - + _tournament = true; } - _customAnimations = new CustomBridgeAnimation[] { + _customAnimations = new CustomBridgeAnimation[]{ new RandomCustomBridgeAnimation(this), new RadiusCustomBridgeAnimation(this) }; - + new CompassModule() - .setGiveCompassToAlive(true) - .register(this); + .setGiveCompassToAlive(true) + .register(this); // So that we can be 110% sure for (Kit kit : GetKits()) @@ -229,10 +225,10 @@ public class Bridge extends TeamGame implements OreObsfucation break; } } - + registerDebugCommand(new DebugCommand("bridge", getArcadeManager().getGameCommandRank()) { - + @Override public void Execute(Player caller, String[] args) { @@ -240,10 +236,10 @@ public class Bridge extends TeamGame implements OreObsfucation _bridgeTime = 3000; } }); - + registerDebugCommand(new DebugCommand("bridgeinfo", getArcadeManager().getGameCommandRank()) { - + @Override public void Execute(Player caller, String[] args) { @@ -252,7 +248,7 @@ public class Bridge extends TeamGame implements OreObsfucation caller.sendMessage(F.main("Debug", "The bridge animation for this map isn't a custom one.")); return; } - + caller.sendMessage(F.main("Debug", "Bridge Info:")); caller.sendMessage(_animation.toString()); } @@ -269,7 +265,7 @@ public class Bridge extends TeamGame implements OreObsfucation Manager.runSyncLater(() -> _animation.onParse(), 10); } - + @EventHandler(priority = EventPriority.MONITOR) public void live(GameStateChangeEvent event) { @@ -277,7 +273,7 @@ public class Bridge extends TeamGame implements OreObsfucation { return; } - + if (!WorldData.GetCustomLocs("WATER_DAMAGE").isEmpty()) { WorldWaterDamage = 4; @@ -299,10 +295,11 @@ public class Bridge extends TeamGame implements OreObsfucation } @Override - public void ParseData() + public void ParseData() { // Now we need to decide on what bridge animation. - typeLoop : for (BridgeAnimationType type : BridgeAnimationType.values()) + typeLoop: + for (BridgeAnimationType type : BridgeAnimationType.values()) { for (String colours : type.getColoursUsed()) { @@ -311,30 +308,31 @@ public class Bridge extends TeamGame implements OreObsfucation continue typeLoop; } } - + _animation = type.createInstance(this); break; } - + // If none of the premade ones are usable then we need a custom one! if (_animation == null) { - locationLoop : for (String key : WorldData.GetAllCustomLocs().keySet()) + locationLoop: + for (String key : WorldData.GetAllCustomLocs().keySet()) { if (!key.startsWith(CUSTOM_BRIDGE_KEY)) { continue; } - + String[] split = key.split(" "); - + if (split.length < 2) { continue; } - + String subKey = split[1]; - + for (CustomBridgeAnimation animation : _customAnimations) { if (animation.getTypeKey().equalsIgnoreCase(subKey)) @@ -354,30 +352,56 @@ public class Bridge extends TeamGame implements OreObsfucation ParseOre(WorldData.GetCustomLocs("56")); // Blue //Mass Teams - if (!WorldData.GetCustomLocs("152").isEmpty()) ParseOre(WorldData.GetCustomLocs("152")); - if (!WorldData.GetCustomLocs("41").isEmpty()) ParseOre(WorldData.GetCustomLocs("41")); - if (!WorldData.GetCustomLocs("133").isEmpty()) ParseOre(WorldData.GetCustomLocs("133")); - if (!WorldData.GetCustomLocs("57").isEmpty()) ParseOre(WorldData.GetCustomLocs("57")); + if (!WorldData.GetCustomLocs("152").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("152")); + } + if (!WorldData.GetCustomLocs("41").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("41")); + } + if (!WorldData.GetCustomLocs("133").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("133")); + } + if (!WorldData.GetCustomLocs("57").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("57")); + } - if (!WorldData.GetCustomLocs("100").isEmpty()) ParseOre(WorldData.GetCustomLocs("100")); - if (!WorldData.GetCustomLocs("86").isEmpty()) ParseOre(WorldData.GetCustomLocs("86")); - if (!WorldData.GetCustomLocs("103").isEmpty()) ParseOre(WorldData.GetCustomLocs("103")); - if (!WorldData.GetCustomLocs("22").isEmpty()) ParseOre(WorldData.GetCustomLocs("22")); + if (!WorldData.GetCustomLocs("100").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("100")); + } + if (!WorldData.GetCustomLocs("86").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("86")); + } + if (!WorldData.GetCustomLocs("103").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("103")); + } + if (!WorldData.GetCustomLocs("22").isEmpty()) + { + ParseOre(WorldData.GetCustomLocs("22")); + } } protected void ParseChests() { - for (Location loc : WorldData.GetCustomLocs("54")) + for (Location loc : WorldData.GetCustomLocs("54")) { if (loc.getBlock().getType() != Material.CHEST) + { loc.getBlock().setType(Material.CHEST); + } Chest chest = (Chest) loc.getBlock().getState(); chest.getBlockInventory().clear(); int count = 2 + UtilMath.r(5); - for (int i = 0; i < count; i++) + for (int i = 0; i < count; i++) { chest.getBlockInventory().addItem(GetChestItem()); } @@ -386,7 +410,7 @@ public class Bridge extends TeamGame implements OreObsfucation protected ItemStack GetChestItem() { - if (_chestLoot.isEmpty()) + if (_chestLoot.isEmpty()) { for (int i = 0; i < 1; i++) _chestLoot.add(new ItemStack(Material.DIAMOND_HELMET)); @@ -434,7 +458,9 @@ public class Bridge extends TeamGame implements OreObsfucation int amount = 1; if (stack.getType().getMaxStackSize() > 1) + { amount = stack.getAmount() + UtilMath.r(stack.getAmount()); + } return ItemStackFactory.Instance.CreateStack(stack.getTypeId(), amount); } @@ -443,18 +469,26 @@ public class Bridge extends TeamGame implements OreObsfucation public void ChestDeny(PlayerInteractEvent event) { if (_bridgesDown) + { return; + } if (event.getClickedBlock() == null) + { return; + } if (event.getClickedBlock().getType() != Material.CHEST) + { return; + } if (!UtilEvent.isAction(event, ActionType.R_BLOCK)) + { return; + } - for (Location loc : WorldData.GetCustomLocs("54")) + for (Location loc : WorldData.GetCustomLocs("54")) { if (loc.getBlock().equals(event.getClickedBlock())) { @@ -479,10 +513,14 @@ public class Bridge extends TeamGame implements OreObsfucation for (Location loc : teamOre) { if (loc.getBlockY() < lowY) + { lowY = loc.getBlockY(); + } if (loc.getBlockY() > highY) + { highY = loc.getBlockY(); + } loc.getBlock().setTypeId(1); } @@ -490,63 +528,79 @@ public class Bridge extends TeamGame implements OreObsfucation int varY = highY - lowY; //Gravel - for (int i = 0; i < gravel && !teamOre.isEmpty(); i++) + for (int i = 0; i < gravel && !teamOre.isEmpty(); i++) { int attempts = 20; int id = 0; - while (attempts > 0) + while (attempts > 0) { id = UtilMath.r(teamOre.size()); double height = (double) (teamOre.get(id).getBlockY() - lowY) / (double) varY; if (height > 0.8) + { break; + } else if (height > 0.6 && Math.random() > 0.4) + { break; + } else if (height > 0.4 && Math.random() > 0.6) + { break; + } else if (height > 0.2 && Math.random() > 0.8) + { break; + } } CreateOre(teamOre.remove(id), Material.GRAVEL, 6); } //Coal - for (int i = 0; i < coal && !teamOre.isEmpty(); i++) + for (int i = 0; i < coal && !teamOre.isEmpty(); i++) { int attempts = 20; int id = 0; - while (attempts > 0) + while (attempts > 0) { id = UtilMath.r(teamOre.size()); double height = (double) (teamOre.get(id).getBlockY() - lowY) / (double) varY; if (height > 0.8) + { break; + } else if (height > 0.6 && Math.random() > 0.4) + { break; + } else if (height > 0.4 && Math.random() > 0.6) + { break; + } else if (height > 0.2 && Math.random() > 0.8) + { break; + } } CreateOre(teamOre.remove(id), Material.COAL_ORE, 6); } //Iron - for (int i = 0; i < iron && !teamOre.isEmpty(); i++) + for (int i = 0; i < iron && !teamOre.isEmpty(); i++) { int id = UtilMath.r(teamOre.size()); @@ -554,12 +608,12 @@ public class Bridge extends TeamGame implements OreObsfucation } //Gold - for (int i = 0; i < gold && !teamOre.isEmpty(); i++) + for (int i = 0; i < gold && !teamOre.isEmpty(); i++) { int attempts = 20; int id = 0; - while (attempts > 0) + while (attempts > 0) { id = UtilMath.r(teamOre.size()); @@ -567,19 +621,29 @@ public class Bridge extends TeamGame implements OreObsfucation / (double) varY; if (height > 0.8 && Math.random() > 0.8) + { break; + } else if (height > 0.6 && Math.random() > 0.7) + { break; + } else if (height > 0.4 && Math.random() > 0.6) + { break; + } else if (height > 0.2 && Math.random() > 0.4) + { break; + } else if (Math.random() > 0.2) + { break; + } } CreateOre(teamOre.remove(id), Material.GOLD_ORE, 3); @@ -599,33 +663,43 @@ public class Bridge extends TeamGame implements OreObsfucation / (double) varY; if (height > 0.8) + { continue; + } else if (height > 0.6 && Math.random() > 0.9) + { break; + } else if (height > 0.4 && Math.random() > 0.7) + { break; + } else if (height > 0.2 && Math.random() > 0.5) + { break; + } else + { break; + } } CreateOre(teamOre.remove(id), Material.DIAMOND_ORE, 2); } } - public void CreateOre(Location loc, Material type, int amount) + public void CreateOre(Location loc, Material type, int amount) { double bonus = Math.random() + 1; amount = (int) (amount * bonus); int attempts = 100; - while (amount > 0 && attempts > 0) + while (amount > 0 && attempts > 0) { attempts--; @@ -636,45 +710,98 @@ public class Bridge extends TeamGame implements OreObsfucation { int rFace = UtilMath.r(6); - if (rFace == 0) faceY = BlockFace.UP; - else if (rFace == 1) faceY = BlockFace.DOWN; - else if (rFace == 2) faceXZ = BlockFace.NORTH; - else if (rFace == 3) faceXZ = BlockFace.SOUTH; - else if (rFace == 4) faceXZ = BlockFace.EAST; - else faceXZ = BlockFace.WEST; + if (rFace == 0) + { + faceY = BlockFace.UP; + } + else if (rFace == 1) + { + faceY = BlockFace.DOWN; + } + else if (rFace == 2) + { + faceXZ = BlockFace.NORTH; + } + else if (rFace == 3) + { + faceXZ = BlockFace.SOUTH; + } + else if (rFace == 4) + { + faceXZ = BlockFace.EAST; + } + else + { + faceXZ = BlockFace.WEST; + } } else { //Height int rFace = UtilMath.r(3); - if (rFace == 0) faceY = BlockFace.SELF; - else if (rFace == 1) faceY = BlockFace.UP; - else faceY = BlockFace.DOWN; + if (rFace == 0) + { + faceY = BlockFace.SELF; + } + else if (rFace == 1) + { + faceY = BlockFace.UP; + } + else + { + faceY = BlockFace.DOWN; + } //Flat if (faceY == BlockFace.SELF) { rFace = UtilMath.r(4); - if (rFace == 0) faceXZ = BlockFace.NORTH_EAST; - else if (rFace == 1) faceXZ = BlockFace.NORTH_WEST; - else if (rFace == 2) faceXZ = BlockFace.SOUTH_EAST; - else faceXZ = BlockFace.SOUTH_WEST; + if (rFace == 0) + { + faceXZ = BlockFace.NORTH_EAST; + } + else if (rFace == 1) + { + faceXZ = BlockFace.NORTH_WEST; + } + else if (rFace == 2) + { + faceXZ = BlockFace.SOUTH_EAST; + } + else + { + faceXZ = BlockFace.SOUTH_WEST; + } } else { rFace = UtilMath.r(4); - if (rFace == 0) faceXZ = BlockFace.NORTH; - else if (rFace == 1) faceXZ = BlockFace.SOUTH; - else if (rFace == 2) faceXZ = BlockFace.EAST; - else faceXZ = BlockFace.WEST; + if (rFace == 0) + { + faceXZ = BlockFace.NORTH; + } + else if (rFace == 1) + { + faceXZ = BlockFace.SOUTH; + } + else if (rFace == 2) + { + faceXZ = BlockFace.EAST; + } + else + { + faceXZ = BlockFace.WEST; + } } } if (loc.getBlock().getRelative(faceY).getRelative(faceXZ).getType() != Material.STONE) + { continue; + } loc = loc.getBlock().getRelative(faceY).getRelative(faceXZ).getLocation(); @@ -731,19 +858,25 @@ public class Bridge extends TeamGame implements OreObsfucation public void BridgeUpdate(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() != UpdateType.TICK) + { return; + } Iterator partIterator = _bridgeParts.iterator(); - while (partIterator.hasNext()) + while (partIterator.hasNext()) { BridgePart part = partIterator.next(); if (part.Update()) + { partIterator.remove(); + } } } @@ -751,20 +884,24 @@ public class Bridge extends TeamGame implements OreObsfucation public void BridgeForm(EntityChangeBlockEvent event) { for (BridgePart part : _bridgeParts) - if (part.Entity.equals(event.getEntity())) + if (part.Entity.equals(event.getEntity())) + { event.setCancelled(true); + } } @EventHandler - public void BridgeItem(ItemSpawnEvent event) + public void BridgeItem(ItemSpawnEvent event) { for (BridgePart part : _bridgeParts) if (part.ItemSpawn(event.getEntity())) + { event.setCancelled(true); + } } @EventHandler - public void IceForm(BlockFormEvent event) + public void IceForm(BlockFormEvent event) { event.setCancelled(true); } @@ -773,20 +910,28 @@ public class Bridge extends TeamGame implements OreObsfucation public void AnimalSpawn(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() != UpdateType.SEC) + { return; + } if (!UtilTime.elapsed(_lastAnimal, 30000)) + { return; + } _lastAnimal = System.currentTimeMillis(); - for (GameTeam team : GetTeamList()) + for (GameTeam team : GetTeamList()) { if (_animalSet.get(team) == null) + { _animalSet.put(team, new HashSet()); + } // Clean Iterator entIterator = _animalSet.get(team).iterator(); @@ -796,12 +941,16 @@ public class Bridge extends TeamGame implements OreObsfucation Entity ent = entIterator.next(); if (ent.isDead() || !ent.isValid()) + { entIterator.remove(); + } } // Too Many if (_animalSet.get(team).size() > 4) + { continue; + } // Spawn double rand = Math.random(); @@ -810,11 +959,17 @@ public class Bridge extends TeamGame implements OreObsfucation CreatureAllowOverride = true; if (rand > 0.66) + { ent = team.GetSpawn().getWorld().spawn(team.GetSpawn(), Cow.class); + } else if (rand > 0.33) + { ent = team.GetSpawn().getWorld().spawn(team.GetSpawn(), Pig.class); + } else + { ent = team.GetSpawn().getWorld().spawn(team.GetSpawn(), Chicken.class); + } CreatureAllowOverride = false; _animalSet.get(team).add(ent); @@ -825,45 +980,59 @@ public class Bridge extends TeamGame implements OreObsfucation public void MushroomSpawn(UpdateEvent event) { if (!IsLive()) + { return; + } if (event.getType() != UpdateType.SEC) + { return; + } if (!UtilTime.elapsed(_lastMushroom, 20000)) + { return; + } _lastMushroom = System.currentTimeMillis(); - for (GameTeam team : GetTeamList()) + for (GameTeam team : GetTeamList()) { Block block = team.GetSpawn().getBlock(); while (!UtilBlock.airFoliage(block)) { block = block.getRelative(BlockFace.UP); - + if (block.getY() >= 256) + { break; + } } while (UtilBlock.airFoliage(block)) { block = block.getRelative(BlockFace.DOWN); - + if (block.getY() <= 0) + { break; + } } - if (block.getType() != Material.SNOW) + if (block.getType() != Material.SNOW) { block = block.getRelative(BlockFace.UP); } - + if (Math.random() > 0.5) + { block.setTypeId(39); + } else + { block.setTypeId(40); + } } } @@ -872,7 +1041,7 @@ public class Bridge extends TeamGame implements OreObsfucation { // Reveal ore that are inside the explosion _ore.Explosion(event); - + NautHashMap> lootDrops = new NautHashMap>(); // Handle block ownership for explosion @@ -889,14 +1058,14 @@ public class Bridge extends TeamGame implements OreObsfucation { event.GetBlocks().remove(cur); lootDrops.put(cur, new HashSet()); - + lootDrops.get(cur).addAll(cur.getDrops()); } } } Manager.runSyncLater(new Runnable() // Run after the explosion has already happened - { + { @Override public void run() { @@ -912,17 +1081,21 @@ public class Bridge extends TeamGame implements OreObsfucation } } } - }, 1); + }, 1); } @EventHandler(priority = EventPriority.LOW) - public void BlockPlace(BlockPlaceEvent event) + public void BlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } //No water basing if (event.getBlock().getRelative(BlockFace.UP).isLiquid() || @@ -944,7 +1117,7 @@ public class Bridge extends TeamGame implements OreObsfucation event.getItemInHand().getTypeId() == 429 || //1.8 doors event.getItemInHand().getTypeId() == 430 || //1.8 doors event.getItemInHand().getTypeId() == 431 || //1.8 doors - event.getItemInHand().getType() == Material.TRAP_DOOR || + event.getItemInHand().getType() == Material.TRAP_DOOR || event.getItemInHand().getTypeId() == 167 || //Iron trap door event.getItemInHand().getType() == Material.LADDER || event.getItemInHand().getType() == Material.STONE_PLATE || @@ -976,7 +1149,7 @@ public class Bridge extends TeamGame implements OreObsfucation return; } } - + //Too High if (event.getBlock().getLocation().getBlockY() > GetHeightLimit()) { @@ -984,10 +1157,12 @@ public class Bridge extends TeamGame implements OreObsfucation "Cannot place blocks this high up.")); event.setCancelled(true); return; - } + } if (_bridgesDown) + { return; + } //In Liquid if (event.getBlock().getRelative(BlockFace.UP).isLiquid() || @@ -1006,34 +1181,36 @@ public class Bridge extends TeamGame implements OreObsfucation } //Above Water/Void - for (int i = 1; i <= event.getBlock().getLocation().getY(); i++) + for (int i = 1; i <= event.getBlock().getLocation().getY(); i++) { Block below = event.getBlock().getRelative(BlockFace.DOWN, i); if (below.isLiquid()) { UtilPlayer - .message( - event.getPlayer(), - F.main("Game", - "Cannot place blocks above water until Bridge is down.")); + .message( + event.getPlayer(), + F.main("Game", + "Cannot place blocks above water until Bridge is down.")); event.setCancelled(true); return; } - if (event.getBlock().getLocation().getY() - i <= 0) + if (event.getBlock().getLocation().getY() - i <= 0) { UtilPlayer - .message( - event.getPlayer(), - F.main("Game", - "Cannot place blocks above void until Bridge is down.")); + .message( + event.getPlayer(), + F.main("Game", + "Cannot place blocks above void until Bridge is down.")); event.setCancelled(true); return; } if (below.getTypeId() != 0) + { break; + } } } @@ -1043,13 +1220,19 @@ public class Bridge extends TeamGame implements OreObsfucation _ore.BlockBreak(event); if (!IsLive()) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } if (event.getPlayer().getGameMode() == GameMode.CREATIVE) + { return; + } List drops = new ArrayList(); @@ -1063,8 +1246,10 @@ public class Bridge extends TeamGame implements OreObsfucation } if (drops.isEmpty()) + { return; - + } + event.setCancelled(true); event.getBlock().setType(Material.AIR); @@ -1106,11 +1291,11 @@ public class Bridge extends TeamGame implements OreObsfucation } @EventHandler(priority = EventPriority.LOW) - public void ChestProtect(EntityExplodeEvent event) + public void ChestProtect(EntityExplodeEvent event) { Iterator blockIterator = event.blockList().iterator(); - while (blockIterator.hasNext()) + while (blockIterator.hasNext()) { Block block = blockIterator.next(); @@ -1118,16 +1303,20 @@ public class Bridge extends TeamGame implements OreObsfucation || block.getType() == Material.FURNACE || block.getType() == Material.BURNING_FURNACE || block.getType() == Material.WORKBENCH) + { blockIterator.remove(); + } } } @EventHandler(priority = EventPriority.LOW) - public void BucketEmpty(PlayerBucketEmptyEvent event) + public void BucketEmpty(PlayerBucketEmptyEvent event) { if (event.getBucket() != Material.WATER_BUCKET) + { return; + } if (WorldWaterDamage > 0) { @@ -1168,7 +1357,7 @@ public class Bridge extends TeamGame implements OreObsfucation } @Override - public OreHider GetOreHider() + public OreHider GetOreHider() { return _ore; } @@ -1177,19 +1366,25 @@ public class Bridge extends TeamGame implements OreObsfucation public void CraftingDeny(PrepareItemCraftEvent event) { if (event.getRecipe().getResult() == null) + { return; + } Material type = event.getRecipe().getResult().getType(); if (type != Material.GOLDEN_APPLE && - type != Material.GOLDEN_CARROT && + type != Material.GOLDEN_CARROT && type != Material.FLINT_AND_STEEL && type != Material.HOPPER) + { return; + } if (!(event.getInventory() instanceof CraftingInventory)) + { return; + } - CraftingInventory inv = (CraftingInventory)event.getInventory(); + CraftingInventory inv = (CraftingInventory) event.getInventory(); inv.setResult(null); } @@ -1198,7 +1393,9 @@ public class Bridge extends TeamGame implements OreObsfucation public void ScoreboardUpdate(UpdateEvent event) { if (event.getType() != UpdateType.FAST) + { return; + } //Wipe Last Scoreboard.reset(); @@ -1207,12 +1404,14 @@ public class Bridge extends TeamGame implements OreObsfucation if (!_tournament) { for (GameTeam team : this.GetTeamList()) - { + { //Display Individual Players if (this.GetPlayers(true).size() < 8) { if (!team.IsTeamAlive()) + { continue; + } Scoreboard.writeNewLine(); @@ -1223,7 +1422,7 @@ public class Bridge extends TeamGame implements OreObsfucation } //Display Players Alive - else + else { Scoreboard.writeNewLine(); Scoreboard.write(team.GetColor() + team.GetName() + " Team"); @@ -1235,10 +1434,12 @@ public class Bridge extends TeamGame implements OreObsfucation else { for (GameTeam team : this.GetTeamList()) - { + { int kills = 0; if (_tournamentKills.containsKey(team)) + { kills = _tournamentKills.get(team); + } Scoreboard.writeNewLine(); @@ -1262,7 +1463,7 @@ public class Bridge extends TeamGame implements OreObsfucation { Scoreboard.write(C.cYellow + C.Bold + "Time Left"); Scoreboard.write(UtilTime.MakeStr(GameTimeout - (System.currentTimeMillis() - GetStateTime()), 0)); - } + } Scoreboard.draw(); } @@ -1271,16 +1472,23 @@ public class Bridge extends TeamGame implements OreObsfucation public void RecordKill(CombatDeathEvent event) { Game game = Manager.GetGame(); - if (game == null) return; + if (game == null) + { + return; + } if (!(event.GetEvent().getEntity() instanceof Player)) + { return; + } - Player killed = (Player)event.GetEvent().getEntity(); + Player killed = (Player) event.GetEvent().getEntity(); GameTeam killedTeam = GetTeam(killed); - if (killedTeam == null) + if (killedTeam == null) + { return; + } if (event.GetLog().GetKiller() != null) { @@ -1289,33 +1497,49 @@ public class Bridge extends TeamGame implements OreObsfucation if (killer != null && !killer.equals(killed)) { GameTeam killerTeam = GetTeam(killer); - if (killerTeam == null) + if (killerTeam == null) + { return; + } if (killerTeam.equals(killedTeam)) + { return; + } if (!_tournamentKills.containsKey(killerTeam)) + { _tournamentKills.put(killerTeam, 1); + } else + { _tournamentKills.put(killerTeam, _tournamentKills.get(killerTeam) + 1); + } } //self kill else if (_bridgesDown) { if (!_tournamentKills.containsKey(killedTeam)) + { _tournamentKills.put(killedTeam, -1); + } else + { _tournamentKills.put(killedTeam, _tournamentKills.get(killedTeam) - 1); + } } } //self kill else if (_bridgesDown) { if (!_tournamentKills.containsKey(killedTeam)) + { _tournamentKills.put(killedTeam, -1); + } else + { _tournamentKills.put(killedTeam, _tournamentKills.get(killedTeam) - 1); + } } } @@ -1323,13 +1547,17 @@ public class Bridge extends TeamGame implements OreObsfucation public void EndCheck() { if (!IsLive()) + { return; + } ArrayList teamsAlive = new ArrayList(); for (GameTeam team : this.GetTeamList()) if (team.GetPlayers(true).size() > 0) + { teamsAlive.add(team); + } // if (!QuitOut) // { @@ -1344,7 +1572,9 @@ public class Bridge extends TeamGame implements OreObsfucation if (!_tournament) { if (teamsAlive.size() > 0) + { AnnounceEnd(teamsAlive.get(0)); + } } else { @@ -1366,7 +1596,9 @@ public class Bridge extends TeamGame implements OreObsfucation } if (bestTeam != null) + { AnnounceEnd(bestTeam); + } } @@ -1380,11 +1612,13 @@ public class Bridge extends TeamGame implements OreObsfucation for (Player player : team.GetPlayers(false)) if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } } //End - SetState(GameState.End); + SetState(GameState.End); } } @@ -1433,7 +1667,7 @@ public class Bridge extends TeamGame implements OreObsfucation //Team Won else - { + { AnnounceEnd(bestTeams.get(0)); for (GameTeam team : GetTeamList()) @@ -1446,12 +1680,14 @@ public class Bridge extends TeamGame implements OreObsfucation for (Player player : team.GetPlayers(false)) if (player.isOnline()) + { AddGems(player, 10, "Participation", false, false); + } } //End - SetState(GameState.End); - } + SetState(GameState.End); + } } public boolean isBridgesDown() @@ -1463,15 +1699,21 @@ public class Bridge extends TeamGame implements OreObsfucation public void CheatChestBreak(BlockBreakEvent event) { if (_bridgesDown) + { return; + } if (event.getBlock().getType() != Material.CHEST) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } - for (Location loc : WorldData.GetCustomLocs("54")) + for (Location loc : WorldData.GetCustomLocs("54")) { if (loc.getBlock().equals(event.getBlock())) { @@ -1486,15 +1728,21 @@ public class Bridge extends TeamGame implements OreObsfucation public void CheatChestBreak(BlockPlaceEvent event) { if (_bridgesDown) + { return; + } if (event.getBlock().getType() != Material.CHEST) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } - for (Location loc : WorldData.GetCustomLocs("54")) + for (Location loc : WorldData.GetCustomLocs("54")) { if (UtilMath.offset(loc, event.getBlock().getLocation()) < 2) { @@ -1509,18 +1757,26 @@ public class Bridge extends TeamGame implements OreObsfucation public void CheatChestInteract(PlayerInteractEvent event) { if (_bridgesDown) + { return; + } if (event.getClickedBlock() == null) - return; + { + return; + } if (event.getClickedBlock().getType() != Material.CHEST) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } - for (Location loc : WorldData.GetCustomLocs("54")) + for (Location loc : WorldData.GetCustomLocs("54")) { if (loc.getBlock().equals(event.getClickedBlock())) { @@ -1532,56 +1788,72 @@ public class Bridge extends TeamGame implements OreObsfucation } @EventHandler(priority = EventPriority.MONITOR) - public void PreBridgeDamage(CustomDamageEvent event) + public void PreBridgeDamage(CustomDamageEvent event) { if (event.IsCancelled()) + { return; + } if (_bridgesDown || event.GetProjectile() != null) + { return; + } GameTeam damageeTeam = GetTeam(event.GetDamageePlayer()); GameTeam damagerTeam = GetTeam(event.GetDamagerPlayer(false)); if (damageeTeam == null || damagerTeam == null) + { return; + } if (damageeTeam.equals(damagerTeam)) + { return; + } Player damagee = event.GetDamageePlayer(); Player damager = event.GetDamagerPlayer(false); //Damagee is closer to Damagers Island - if (UtilMath.offset(damagee.getLocation(), UtilWorld.averageLocation(damageeTeam.GetSpawns())) > - UtilMath.offset(damagee.getLocation(), UtilWorld.averageLocation(damagerTeam.GetSpawns()))) + if (UtilMath.offset(damagee.getLocation(), UtilWorld.averageLocation(damageeTeam.GetSpawns())) > + UtilMath.offset(damagee.getLocation(), UtilWorld.averageLocation(damagerTeam.GetSpawns()))) { cheaterKill(damagee); } //Damagee is closer to Damagees Island - if (UtilMath.offset(damager.getLocation(), UtilWorld.averageLocation(damagerTeam.GetSpawns())) > - UtilMath.offset(damager.getLocation(), UtilWorld.averageLocation(damageeTeam.GetSpawns()))) + if (UtilMath.offset(damager.getLocation(), UtilWorld.averageLocation(damagerTeam.GetSpawns())) > + UtilMath.offset(damager.getLocation(), UtilWorld.averageLocation(damageeTeam.GetSpawns()))) { cheaterKill(damager); } } - + @EventHandler public void preventMinecarts(PlayerInteractEvent event) { if (!IsLive()) + { return; + } if (!IsAlive(event.getPlayer())) + { return; + } if (!UtilEvent.isAction(event, ActionType.R)) + { return; - + } + if (event.getItem() == null) + { return; - + } + if (event.getItem().getType().toString().toLowerCase().contains("minecart")) { event.setCancelled(true); @@ -1593,7 +1865,9 @@ public class Bridge extends TeamGame implements OreObsfucation public void preventMinecarts(EntitySpawnEvent event) { if (!IsLive()) + { return; + } if (event.getEntityType().toString().toLowerCase().contains("minecart")) { @@ -1610,7 +1884,7 @@ public class Bridge extends TeamGame implements OreObsfucation @EventHandler public void liquidFlow(BlockFromToEvent event) - { + { if (!_bridgesDown) { if (!event.getToBlock().getRelative(BlockFace.UP).equals(event.getBlock())) @@ -1620,7 +1894,7 @@ public class Bridge extends TeamGame implements OreObsfucation } } - @EventHandler(priority=EventPriority.HIGHEST) + @EventHandler(priority = EventPriority.HIGHEST) public void revivePlayer(CustomDamageEvent event) { if (!IsLive() || event.isCancelled() || _bridgesDown || !(event.GetDamageeEntity() instanceof Player)) @@ -1634,7 +1908,7 @@ public class Bridge extends TeamGame implements OreObsfucation { return; } - + if (!_usedLife.contains(player.getName())) { _usedLife.add(player.getName()); @@ -1653,7 +1927,9 @@ public class Bridge extends TeamGame implements OreObsfucation public void vehicleDeny(PlayerInteractEvent event) { if (!UtilEvent.isAction(event, ActionType.R)) + { return; + } if (UtilGear.isMat(event.getPlayer().getItemInHand(), Material.BOAT)) { @@ -1668,53 +1944,59 @@ public class Bridge extends TeamGame implements OreObsfucation public double GetKillsGems(Player killer, Player killed, boolean assist) { if (assist) + { return 3; + } else + { return 12; + } } - + @EventHandler public void disableIceForm(BlockFormEvent event) { event.setCancelled(true); } - + @EventHandler public void disableWaterPickup(PlayerBucketFillEvent event) - { - if(_bridgesDown) - return; - UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot pickup liquids before the bridges have fallen.")); - event.setCancelled(true); - } - - @EventHandler - public void disableDoors(CraftItemEvent event) { if (_bridgesDown) { return; } - + UtilPlayer.message(event.getPlayer(), F.main("Game", "You cannot pickup liquids before the bridges have fallen.")); + event.setCancelled(true); + } + + @EventHandler + public void disableDoors(CraftItemEvent event) + { + if (_bridgesDown) + { + return; + } + Material type = event.getRecipe().getResult().getType(); - + if (type == Material.WOOD_DOOR || type == Material.IRON_DOOR) { event.setResult(null); event.setCancelled(true); } } - + @EventHandler - public void disableDoors(PlayerPickupItemEvent event) + public void disableDoors(PlayerPickupItemEvent event) { if (_bridgesDown) { return; } - + Material type = event.getItem().getItemStack().getType(); - + if (type == Material.WOOD_DOOR || type == Material.IRON_DOOR) { event.getItem().remove(); @@ -1765,31 +2047,66 @@ public class Bridge extends TeamGame implements OreObsfucation } } + @EventHandler + public void blockOutsideBorder(BlockBreakEvent event) + { + Player player = event.getPlayer(); + + if (_bridgesDown || player.getGameMode() != GameMode.SURVIVAL) + { + return; + } + + GameTeam team = GetTeam(player); + Block block = event.getBlock(); + + if (team == null) + { + return; + } + + List border = WorldData.GetCustomLocs("BORDER " + team.getDisplayName()); + + if (border.size() < 2) + { + return; + } + + Location one = border.get(0); + Location two = border.get(1); + + if (!UtilAlg.inBoundingBox(block.getLocation(), one, two)) + { + event.setCancelled(true); + player.sendMessage(F.main("Game", "You cannot break blocks outside the border.")); + } + } + public void setBridgeTime(int time) { _bridgeTime = time; } - + public boolean hasUsedRevive(Player player) { return _usedLife.contains(player.getName()); - } + } public double getOreDensity() { return _oreDensity; } - + public ArrayList getChestLoot() { return _chestLoot; } - + public HashSet getBridgeParts() { return _bridgeParts; } - + public boolean bridgesDown() { return _bridgesDown; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/animation/custom/CustomBridgeAnimation.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/animation/custom/CustomBridgeAnimation.java index b2d9e5752..e1fe59874 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/animation/custom/CustomBridgeAnimation.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/bridge/animation/custom/CustomBridgeAnimation.java @@ -21,6 +21,8 @@ import mineplex.core.common.util.UtilParticle.ParticleType; import mineplex.core.common.util.UtilParticle.ViewDist; import nautilus.game.arcade.game.games.bridge.Bridge; import nautilus.game.arcade.game.games.bridge.animation.BridgeAnimation; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; public abstract class CustomBridgeAnimation extends BridgeAnimation { @@ -198,7 +200,18 @@ public abstract class CustomBridgeAnimation extends BridgeAnimation _maxDistance = dist; } - _restore.add(block, Material.AIR.getId(), (byte) 0, Integer.MAX_VALUE); + int toSet = Material.AIR.getId(); + + for (Block surround : getNextBlocks(block)) + { + if (surround.getType() == Material.WATER || surround.getType() == Material.STATIONARY_WATER) + { + toSet = Material.STATIONARY_WATER.getId(); + break; + } + } + + _restore.add(block, toSet, (byte) 0, Integer.MAX_VALUE); _bridgeBlocks.put(block.getLocation(), dist); } } @@ -248,4 +261,16 @@ public abstract class CustomBridgeAnimation extends BridgeAnimation return builder.toString(); } + private List getNextBlocks(Block block) + { + List blocks = new ArrayList<>(4); + + blocks.add(block.getRelative(BlockFace.NORTH)); + blocks.add(block.getRelative(BlockFace.EAST)); + blocks.add(block.getRelative(BlockFace.SOUTH)); + blocks.add(block.getRelative(BlockFace.WEST)); + + return blocks; + } + } From fdee6b11639606130783a718ffb89084a79697a3 Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 15 Mar 2017 14:33:56 +0100 Subject: [PATCH 39/61] Add some more event commands, fix some existing event commands and change permissions for event related commands to be executeable by EVENT_MODERATOR --- .../src/mineplex/core/common/Rank.java | 3 +- .../HostEventServerCommand.java | 7 +- .../HostPersonalEventServer.java | 34 ++ .../personalServer/PersonalServerManager.java | 17 +- .../preferences/ui/menus/PreferenceMenu.java | 4 +- .../nautilus/game/arcade/ArcadeManager.java | 2 +- .../arcade/game/games/event/EventModule.java | 403 +++++++++++++----- .../arcade/game/games/smash/SuperSmash.java | 5 + .../games/survivalgames/SurvivalGames.java | 5 + .../button/PlayerHeadButton.java | 3 + 10 files changed, 366 insertions(+), 117 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index 6871107bb..a8796a426 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -17,6 +17,7 @@ public enum Rank JNR_DEV("Jr.Dev", "jrdev", ChatColor.GOLD, "Junior Developers work behind the scenes to \ncreate new games and features, and fix bugs to \ngive the best experience.", -1), SUPPORT("Support", "spp", ChatColor.BLUE, "Support agents handle tickets and \nprovide customer service.", 47), CMOD("C.Mod", "cmod", ChatColor.GOLD, "Clans Moderators are members of the Clans Management Senior Mod team. \nTheir duties include moderation and support within the Clans servers. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32), + EVENT_MODERATOR("Sr.Mod", "eventmod", ChatColor.GOLD, "Senior Moderators are members of a special \nSenior Moderator team where they have to fulfill specific tasks. \nJust like Moderators, you can always ask them for help. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 44), SNR_MODERATOR("Sr.Mod", "srmod", ChatColor.GOLD, "Senior Moderators are members of a special \nSenior Moderator team where they have to fulfill specific tasks. \nJust like Moderators, you can always ask them for help. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 44), MODERATOR("Mod", "mod", ChatColor.GOLD, "Moderators enforce rules and provide help to \nanyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 32), HELPER("Trainee", "train", ChatColor.GOLD, "Trainees are moderators-in-training. \nTheir duties include enforcing the rules and \nproviding help to anyone with questions or concerns. \n\nFor assistance, contact them using " + F.elem("/a ") + ".", 24), @@ -151,4 +152,4 @@ public enum Rank { return _forumId; } -} \ No newline at end of file +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java index 06667e96d..8b4ad8625 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java @@ -12,7 +12,10 @@ public class HostEventServerCommand extends CommandBase { public HostEventServerCommand(PersonalServerManager plugin) { - super(plugin, Rank.ADMIN, "hostevent"); + super(plugin, Rank.ADMIN, new Rank[] + { + Rank.EVENT_MODERATOR + }, "hostevent"); } @Override @@ -26,6 +29,6 @@ public class HostEventServerCommand extends CommandBase UtilPlayer.message(caller, F.main("Disguise", "You can't create a event server while you are disguised!")); return; } - Plugin.hostServer(caller, caller.getName(), true); + Plugin.hostServer(caller, caller.getName(), true); } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java new file mode 100644 index 000000000..92515d731 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java @@ -0,0 +1,34 @@ +package mineplex.core.personalServer; + +import org.bukkit.entity.Player; + +import mineplex.core.command.CommandBase; +import mineplex.core.common.Rank; +import mineplex.core.common.util.F; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.recharge.Recharge; + +public class HostPersonalEventServer extends CommandBase +{ + public HostPersonalEventServer(PersonalServerManager plugin) + { + super(plugin, Rank.ADMIN, new Rank[] + { + Rank.EVENT_MODERATOR + }, "hostmes"); + } + + @Override + public void Execute(Player caller, String[] args) + { + if (!Recharge.Instance.use(caller, "Host Event", 30000, false, false)) + return; + + if(Plugin.getClients().Get(caller).isDisguised()) + { + UtilPlayer.message(caller, F.main("Disguise", "You can't create a event server while you are disguised!")); + return; + } + Plugin.hostServer(caller, caller.getName(), false, true); + } +} \ No newline at end of file diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java index 976814e4d..556d3758a 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/PersonalServerManager.java @@ -106,6 +106,7 @@ public class PersonalServerManager extends MiniPlugin { addCommand(new HostServerCommand(this)); addCommand(new HostEventServerCommand(this)); + addCommand(new HostPersonalEventServer(this)); } private void setupConfigValues() @@ -124,6 +125,11 @@ public class PersonalServerManager extends MiniPlugin } public void hostServer(Player player, String serverName, boolean eventServer) + { + hostServer(player, serverName, eventServer, false); + } + + public void hostServer(Player player, String serverName, boolean eventServer, boolean eventgame) { int ram = 1024; int cpu = 1; @@ -143,7 +149,16 @@ public class PersonalServerManager extends MiniPlugin createGroup(player, "EVENT", ram, cpu, 40, 80, "Event", eventServer); } else - createGroup(player, serverName, ram, cpu, 40, 80, "Smash", eventServer); + { + if (eventgame) + { + createGroup(player, serverName, ram, cpu, 40, 80, "Event", eventServer); + } + else + { + createGroup(player, serverName, ram, cpu, 40, 80, "Smash", eventServer); + } + } } public void hostCommunityServer(Player host, Community community) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/menus/PreferenceMenu.java b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/menus/PreferenceMenu.java index 08aef8b47..c077facb8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/menus/PreferenceMenu.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/preferences/ui/menus/PreferenceMenu.java @@ -47,7 +47,9 @@ public class PreferenceMenu extends Menu if (rank.has(Rank.HELPER) && !rank.has(Rank.ADMIN)) { preferences.remove(Preference.INVISIBILITY); - preferences.remove(Preference.FORCE_FIELD); + + if (rank != Rank.EVENT_MODERATOR) + preferences.remove(Preference.FORCE_FIELD); } else if (rank == Rank.YOUTUBE || rank == Rank.TWITCH) { 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 af4d8cea5..20c226a03 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/ArcadeManager.java @@ -1632,7 +1632,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation { // Disables gadgets if player count is greater than 40 int playerCount = UtilServer.getPlayers().length; - getCosmeticManager().getGadgetManager().setGadgetEnabled(playerCount <= 40); + getCosmeticManager().getGadgetManager().setGadgetEnabled(playerCount <= (GetGameHostManager().isEventServer() ? 120 : 40)); } /*public void saveBasicStats(final Game game) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java index bb7c61020..fe0c42add 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/event/EventModule.java @@ -6,31 +6,6 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; -import mineplex.core.MiniPlugin; -import mineplex.core.common.Rank; -import mineplex.core.common.util.C; -import mineplex.core.common.util.F; -import mineplex.core.common.util.NautHashMap; -import mineplex.core.common.util.UtilEnt; -import mineplex.core.common.util.UtilEvent; -import mineplex.core.common.util.UtilPlayer; -import mineplex.core.common.util.UtilServer; -import mineplex.core.common.util.UtilText; -import mineplex.core.common.util.UtilTextMiddle; -import mineplex.core.common.util.UtilEvent.ActionType; -import mineplex.core.common.util.UtilInv; -import mineplex.core.creature.event.CreatureKillEntitiesEvent; -import mineplex.core.event.StackerEvent; -import mineplex.core.gadget.gadgets.morph.MorphBlock; -import mineplex.core.gadget.types.Gadget; -import mineplex.core.gadget.types.GadgetType; -import mineplex.core.give.Give; -import mineplex.core.mount.Mount; -import mineplex.core.updater.UpdateType; -import mineplex.core.updater.event.UpdateEvent; -import nautilus.game.arcade.ArcadeManager; -import nautilus.game.arcade.game.games.bridge.Bridge; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; @@ -54,6 +29,7 @@ import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityChangeBlockEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -62,6 +38,36 @@ import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import mineplex.core.MiniPlugin; +import mineplex.core.common.Rank; +import mineplex.core.common.util.C; +import mineplex.core.common.util.F; +import mineplex.core.common.util.NautHashMap; +import mineplex.core.common.util.UtilEnt; +import mineplex.core.common.util.UtilEvent; +import mineplex.core.common.util.UtilEvent.ActionType; +import mineplex.core.common.util.UtilInv; +import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilTextMiddle; +import mineplex.core.creature.event.CreatureKillEntitiesEvent; +import mineplex.core.event.StackerEvent; +import mineplex.core.gadget.gadgets.morph.MorphBlock; +import mineplex.core.gadget.types.Gadget; +import mineplex.core.gadget.types.GadgetType; +import mineplex.core.give.Give; +import mineplex.core.mount.Mount; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; + +import nautilus.game.arcade.ArcadeManager; +import nautilus.game.arcade.game.GameTeam.PlayerState; +import nautilus.game.arcade.game.games.bridge.Bridge; +import nautilus.game.arcade.game.games.smash.SuperSmash; +import nautilus.game.arcade.game.games.survivalgames.SurvivalGames; +import nautilus.game.arcade.kit.Kit; + public class EventModule extends MiniPlugin { @@ -78,6 +84,8 @@ public class EventModule extends MiniPlugin private ArrayList _damage; private boolean _allowStacker; + private boolean _keepInventory; + public EventModule(ArcadeManager manager, JavaPlugin plugin) { super("EventModule", plugin); @@ -159,7 +167,6 @@ public class EventModule extends MiniPlugin UtilPlayer.message(player, F.value("/e doublejump", "Toggles Double Jump")); UtilPlayer.message(player, F.value("/e bc", "Broadcast a message with colorcodes")); UtilPlayer.message(player, F.value("/e tempgadget", "Activates gadget for all player")); - UtilPlayer.message(player, F.value("/e playerdamage", "Toggles damage fpr player")); UtilPlayer.message(player, F.value("/e stacker [Player]", "toggles stacker global or for Players")); UtilPlayer.message(player, F.value("/e kick", "Remove a player from the event")); UtilPlayer.message(player, F.value("/e area PVP|ALL|PVE|EVP|Gadget|Effect / add", "Create and edit areas")); @@ -175,6 +182,18 @@ public class EventModule extends MiniPlugin UtilPlayer.message(player, F.value("/e effect ", "")); UtilPlayer.message(player, F.value("/e effect clear", "")); + + UtilPlayer.message(player, F.value("/e announce ", "Broadcasts a 1.8 announcement")); + UtilPlayer.message(player, F.value("/e clear ", "Clears player’s inventory")); + UtilPlayer.message(player, F.value("/e clear all", "Clears all inventories")); + UtilPlayer.message(player, F.value("/e bridge", "Forces Bridges countdown to 10 seconds")); + UtilPlayer.message(player, F.value("/e revive", "Revive a Player")); + UtilPlayer.message(player, F.value("/e keepinventory", "")); + UtilPlayer.message(player, F.value("/e gamekit", "Change kit of a Player")); + UtilPlayer.message(player, F.value("/e smash", "spawn smash Crystal in Smash")); + UtilPlayer.message(player, F.value("/e dm", "start dm in SG")); + UtilPlayer.message(player, F.value("/e supplydrop", "spawn supply Drop in SG")); + UtilPlayer.message(player, F.value("/ea", "Talk in event chat")); } public void commandHelpSettings(Player player) @@ -199,9 +218,6 @@ public class EventModule extends MiniPlugin UtilPlayer.message(player, F.value("/e blockbreak whitelist ", "")); UtilPlayer.message(player, F.value("/e blockbreak blacklist ", "")); UtilPlayer.message(player, F.value("/e time <-1 to 24000>", "Sets World Time")); - //UtilPlayer.message(player, F.value("/e joiningame", "toggles Join In Process for games")); - //UtilPlayer.message(player, F.value("/e deathout", "toggles Deathout in games")); - //UtilPlayer.message(player, F.value("/e quitout", "toggles Quitout in games")); UtilPlayer.message(player, F.value("/e mobgriefing", "toggles mobgriefing in games")); } @@ -209,24 +225,30 @@ public class EventModule extends MiniPlugin @EventHandler(priority = EventPriority.LOWEST) public void commandHandler(PlayerCommandPreprocessEvent event) { - if (Manager.GetGame() == null || !Manager.GetGame().InProgress()) - return; - - if (!event.getMessage().toLowerCase().startsWith("/e ")) + if (Manager.GetGame() == null) return; boolean eventTestServer = _plugin.getConfig().getString("serverstatus.name").equalsIgnoreCase("SMTestServer-1"); if(!Manager.GetGameHostManager().isEventServer() && !eventTestServer) return; + + //Trim off /e and split to args + String[] args = event.getMessage().substring(3, event.getMessage().length()).split(" "); + + if (event.getMessage().toLowerCase().startsWith("/ea")) + { + commandEventChat(event.getPlayer(), args); + event.setCancelled(true); + } - event.setCancelled(true); + if (!event.getMessage().toLowerCase().startsWith("/e ")) + return; if (!Manager.GetGameHostManager().isAdmin(event.getPlayer(), false)) return; - //Trim off /e and split to args - String[] args = event.getMessage().substring(3, event.getMessage().length()).split(" "); + event.setCancelled(true); if (args.length == 0 || args[0].equalsIgnoreCase("help")) { @@ -240,7 +262,6 @@ public class EventModule extends MiniPlugin commandHelpSettings(event.getPlayer()); } - //XXX Commands else if (args[0].equalsIgnoreCase("tp")) { commandTeleport(event.getPlayer(), args); @@ -257,9 +278,90 @@ public class EventModule extends MiniPlugin { commandAdmin(event.getPlayer(), args); } + else if (args[0].equalsIgnoreCase("whitelist")) + { + commandWhitelist(event.getPlayer(), args); + } + else if (args[0].equalsIgnoreCase("give")) + { + commandGive(event.getPlayer(), args); + } + else if (args[0].equalsIgnoreCase("effect")) + { + commandEffect(event.getPlayer(), args, null); + } + else if (args[0].equalsIgnoreCase("mob")) + { + if (args.length >= 2 && args[1].equalsIgnoreCase("kill")) + commandMobKill(event.getPlayer(), args); + else + commandMob(event.getPlayer(), args); + } + else if(args[0].equalsIgnoreCase("bc")) + { + commandBC(event.getPlayer(), args); + } + else if(args[0].equalsIgnoreCase("kick")) + { + if(Bukkit.getPlayer(args[1]) == null) + { + UtilPlayer.message(event.getPlayer(), "No matches for: " + C.cYellow + args[1]); + return; + } + if (Manager.GetGameHostManager().getBlacklist().contains(Bukkit.getPlayer(args[1]).getName())) + { + Manager.GetGameHostManager().getBlacklist().remove(Bukkit.getPlayer(args[1]).getName()); + } + else + { + Manager.GetGameHostManager().getBlacklist().add(Bukkit.getPlayer(args[1]).getName()); + UtilPlayer.message(event.getPlayer(), F.main("Event", "You removed " + C.cYellow + Bukkit.getPlayer(args[1]).getName())); + } + } + else if(args[0].equalsIgnoreCase("tempgadget")) + { + String gadget = args[1]; + for(int e = 2; e < args.length; e++) + gadget+= " " + args[e]; + + try + { + for(Player target : UtilServer.getPlayers()) + Manager.GetDonation().Get(target).addOwnedUnknownSalesPackage(gadget); + } + catch (Exception e) + { + UtilPlayer.message(event.getPlayer(), F.main("Event", "Gadget is not vallid")); + } + UtilPlayer.message(event.getPlayer(), F.main("Event", "You gave the gadget " + F.item(gadget) + " to all Players!")); + } + else if (args[0].equalsIgnoreCase("announce")) + { + String text = args[1]; + + for (int i = 2; i < args.length; i++) + { + text += " " + args[i]; + } + + UtilTextMiddle.display(C.cDGreenB + "Announcement", text); + UtilServer.broadcast(F.main("Event Announcement", text)); + } + + if (!Manager.GetGame().InProgress()) + return; + + //XXX Commands else if (args[0].equalsIgnoreCase("gm")) { commandGamemode(event.getPlayer(), args); + }else if (args[0].equalsIgnoreCase("gamekit")) + { + commandGameKit(event.getPlayer(), args); + } + else if (args[0].equalsIgnoreCase("keepinventory")) + { + commandKeepInventory(event.getPlayer()); } else if (args[0].equalsIgnoreCase("radius")) { @@ -273,28 +375,13 @@ public class EventModule extends MiniPlugin { commandScoreboard(event.getPlayer(), args); } - else if (args[0].equalsIgnoreCase("whitelist")) - { - commandWhitelist(event.getPlayer(), args); - } - else if (args[0].equalsIgnoreCase("give")) - { - commandGive(event.getPlayer(), args); - } - else if (args[0].equalsIgnoreCase("effect")) - { - commandEffect(event.getPlayer(), args, null); - } else if (args[0].equalsIgnoreCase("kit")) { commandKit(event.getPlayer(), args); } - else if (args[0].equalsIgnoreCase("mob")) + else if (args[0].equalsIgnoreCase("revive")) { - if (args.length >= 2 && args[1].equalsIgnoreCase("kill")) - commandMobKill(event.getPlayer(), args); - else - commandMob(event.getPlayer(), args); + commandRevive(event.getPlayer(), args); } @@ -366,22 +453,14 @@ public class EventModule extends MiniPlugin { commandTime(event.getPlayer(), args); } - /*else if(args[0].equalsIgnoreCase("joiningame")) - { - commandSpectators(event.getPlayer(), args); - } - else if(args[0].equalsIgnoreCase("deathout")) - { - commandDeathout(event.getPlayer(), args); - } - else if(args[0].equalsIgnoreCase("quitout")) - { - commandQuitOut(event.getPlayer(), args); - }*/ else if(args[0].equalsIgnoreCase("blockplacecreative")) { commandBlockPlaceInCreative(event.getPlayer(), args); } + else if(args[0].equalsIgnoreCase("blockbreakcreative")) + { + commandBlockBreakInCreative(event.getPlayer(), args); + } else if(args[0].equalsIgnoreCase("stacker")) { commandStacker(event.getPlayer(), args); @@ -405,10 +484,6 @@ public class EventModule extends MiniPlugin else _damage.add(Bukkit.getPlayer(args[1])); } - else if(args[0].equalsIgnoreCase("bc")) - { - commandBC(event.getPlayer(), args); - } else if(args[0].equalsIgnoreCase("area")) { if(!(Manager.GetGame() instanceof EventGame)) { @@ -422,46 +497,6 @@ public class EventModule extends MiniPlugin { commandMobGriefing(event.getPlayer(), args); } - else if(args[0].equalsIgnoreCase("kick")) - { - if(Bukkit.getPlayer(args[1]) == null) - { - UtilPlayer.message(event.getPlayer(), "No matches for: " + C.cYellow + args[1]); - return; - } - //Bukkit.getPlayer(args[1]).kickPlayer("You where kicked from the event, probably you didn't stick to the Event Rules."); - Manager.GetGameHostManager().getBlacklist().add(Bukkit.getPlayer(args[1]).getName()); - UtilPlayer.message(event.getPlayer(), F.main("Event", "You removed " + C.cYellow + Bukkit.getPlayer(args[1]).getName())); - } - else if(args[0].equalsIgnoreCase("tempgadget")) - { - String gadget = args[1]; - for(int e = 2; e < args.length; e++) - gadget+= " " + args[e]; - - try - { - for(Player target : UtilServer.getPlayers()) - Manager.GetDonation().Get(target).addOwnedUnknownSalesPackage(gadget); - } - catch (Exception e) - { - UtilPlayer.message(event.getPlayer(), F.main("Event", "Gadget is not vallid")); - } - UtilPlayer.message(event.getPlayer(), F.main("Event", "You gave the gadget " + F.item(gadget) + " to all Players!")); - } - else if (args[0].equalsIgnoreCase("announce")) - { - String text = args[1]; - - for (int i = 2; i < args.length; i++) - { - text += " " + args[i]; - } - - UtilTextMiddle.display(C.cDGreenB + "Announcement", text); - UtilServer.broadcast(F.main("Event Announcement", text)); - } else if (args[0].equalsIgnoreCase("clear")) { String playerName = args[1]; @@ -528,6 +563,50 @@ public class EventModule extends MiniPlugin ((Bridge) Manager.GetGame()).setBridgeTime((int) ((System.currentTimeMillis() - Manager.GetGame().GetStateTime()) + seconds * 1000)); UtilPlayer.message(event.getPlayer(), F.main("Event", "Bridges will drop in " + F.elem(seconds + " Seconds") + "!")); } + else if (args[0].equalsIgnoreCase("dm")) + { + if (!(Manager.GetGame() instanceof SurvivalGames)) + { + UtilPlayer.message(event.getPlayer(), F.main("Event", "You can only start the deathmatch in SG!")); + return; + } + + if (((SurvivalGames) Manager.GetGame()).isDeathMatchTeleported()) + { + UtilPlayer.message(event.getPlayer(), F.main("Event", "The Deathmatch has already began!")); + return; + } + + Manager.GetGame().Announce(C.cGreen + C.Bold + event.getPlayer().getName() + + " has initiated Deathmatch!"); + Manager.GetGame().Announce(C.cGreen + C.Bold + "Deathmatch starting in 60 seconds..."); + + ((SurvivalGames) Manager.GetGame()).setDeathMatchTime(60); + + for (Player player : UtilServer.getPlayers()) + player.playSound(player.getLocation(), Sound.ENDERDRAGON_GROWL, 1f, + 1f); + } + else if (args[0].equalsIgnoreCase("supplydrop")) + { + if (!(Manager.GetGame() instanceof SurvivalGames)) + { + UtilPlayer.message(event.getPlayer(), F.main("Event", "You can only start the Supply Srop in SG!")); + return; + } + + Manager.GetGame().WorldData.World.setTime(18000); + } + else if (args[0].equalsIgnoreCase("smash")) + { + if (!(Manager.GetGame() instanceof SuperSmash)) + { + UtilPlayer.message(event.getPlayer(), F.main("Event", "You can only add a Smash Crystal in Smash!")); + return; + } + + ((SuperSmash) Manager.GetGame()).setNextPowerupTime(100); + } } public void listSettings(Player player) @@ -560,6 +639,80 @@ public class EventModule extends MiniPlugin UtilPlayer.message(player, F.main("Settings", "BlockBreakCreative: " + F.tf(Manager.GetGame().BlockBreakCreative))); } + public void commandKeepInventory(Player player) + { + _keepInventory = !_keepInventory; + + UtilPlayer.message(player, F.main("Settings", "BlockBreakCreative: " + F.tf(_keepInventory))); + } + + public void commandGameKit(Player player, String[] args) + { + Player target = player; + String kitString = ""; + + if (args.length >= 3) + { + Player newTarget = UtilPlayer.searchOnline(player, args[1], true); + if (newTarget != null) + { + target = newTarget; + kitString = args[2]; + } + else + return; + } + else + return; + + Kit[] kits = Manager.GetGame().GetKits(); + Kit kit = null; + for (Kit otherKit : kits) + if (otherKit.GetName().replace(" ", "").equalsIgnoreCase(kitString)) + kit = otherKit; + + if (kit == null) + { + UtilPlayer.message(player, F.main("Event", "No Kit found")); + return; + } + + Manager.GetGame().SetKit(target, kit, true, true); + UtilPlayer.message(player, F.main("Event", "Kit [" + kit.GetName() + "] applied")); + } + + public void commandEventChat(Player player, String[] args) + { + String message = ChatColor.BLUE + "[Event Chat] " + ChatColor.GREEN + player.getName() + ": " + F.combine(args, 1, null, false); + UtilPlayer.message(player, message); + for (Player other : UtilServer.getPlayers()) + { + if (player == other) + continue; + + if (Manager.GetGameHostManager().isAdmin(other, true)) + UtilPlayer.message(other, message); + } + } + + public void commandRevive(Player player, String[] args) + { + Player target = player; + + if (args.length >= 2) + { + Player newTarget = UtilPlayer.searchOnline(player, args[1], true); + if (newTarget != null) + target = newTarget; + else + return; + } + + Manager.GetGame().SetPlayerState(target, PlayerState.IN); + Manager.GetGame().RespawnPlayer(target); + UtilPlayer.message(target, F.main("Game", "You have been Respawned!")); + } + public void commandStacker(Player player, String[] args) { if(args.length == 1) @@ -861,7 +1014,8 @@ public class EventModule extends MiniPlugin //Gadget Commands (Global & Individual) public void commandGadget(Player player, String[] args) { - if(!(Manager.GetGame() instanceof EventGame)) { + if(!(Manager.GetGame() instanceof EventGame)) + { UtilPlayer.message(player, F.main("Inventory", "You can only enable/disable gadgets in the Event game!")); return; } @@ -2003,6 +2157,33 @@ public class EventModule extends MiniPlugin } } + @EventHandler(priority=EventPriority.HIGHEST) + public void death(PlayerDeathEvent event) + { + if (Manager.GetGame() == null) + return; + + if (!Manager.GetGame().InProgress()) + return; + + if (!_keepInventory) + return; + + ArrayList stacks = new ArrayList<>(); + stacks.addAll(event.getDrops()); + event.getDrops().clear(); + + Manager.runSyncLater(new Runnable() + { + @Override + public void run() + { + for (ItemStack item : stacks) + event.getEntity().getInventory().addItem(item); + } + }, 40); + } + public ArrayList getDamagePlayers() { return _damage; diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java index ba21dfd17..6dd3ab954 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/smash/SuperSmash.java @@ -773,4 +773,9 @@ public abstract class SuperSmash extends Game _lives.put(player, MAX_LIVES); } } + + public void setNextPowerupTime(long time) + { + _nextPowerup = time; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java index 4dc2f850f..7596dc85c 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/games/survivalgames/SurvivalGames.java @@ -2184,5 +2184,10 @@ public abstract class SurvivalGames extends Game { return _spawn; } + + public void setDeathMatchTime(int time) + { + _deathMatchTime = time; + } } diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/button/PlayerHeadButton.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/button/PlayerHeadButton.java index 033be0d5a..47f9bbb19 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/button/PlayerHeadButton.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/gui/privateServer/button/PlayerHeadButton.java @@ -26,6 +26,9 @@ public class PlayerHeadButton implements IButton int maxCap = _arcadeManager.GetGameHostManager().getMaxPlayerCap(); + if (_arcadeManager.GetGameHostManager().isEventServer()) + maxCap = 120; + if (clickType.isLeftClick()) newMax = ++maxPlayers > maxCap ? maxCap : maxPlayers; else From 8a33eabe3db5311f409928fc4abdb35b112c6f8f Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 19 Apr 2017 01:40:23 +0200 Subject: [PATCH 40/61] Add a way to log commands --- .../src/mineplex/core/command/CommandCenter.java | 9 ++++++++- .../core/personalServer/HostEventServerCommand.java | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java b/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java index 5ab90fc5a..988c6316f 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/command/CommandCenter.java @@ -89,12 +89,13 @@ public class CommandCenter implements Listener, IPacketHandler public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String commandName = event.getMessage().substring(1); + String argString = event.getMessage().substring(event.getMessage().indexOf(' ') + 1); String[] args = new String[]{}; if (commandName.contains(" ")) { commandName = commandName.split(" ")[0]; - args = event.getMessage().substring(event.getMessage().indexOf(' ') + 1).split(" "); + args = argString.split(" "); } ICommand command = Commands.get(commandName.toLowerCase()); @@ -113,6 +114,12 @@ public class CommandCenter implements Listener, IPacketHandler } command.SetAliasUsed(commandName.toLowerCase()); + + if (command instanceof LoggedCommand) + { + ((LoggedCommand) command).execute(System.currentTimeMillis(), event.getPlayer().getName(), commandName, argString); + } + command.Execute(event.getPlayer(), args); } return; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java index 8b4ad8625..7d9f2590b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java @@ -3,6 +3,7 @@ package mineplex.core.personalServer; import org.bukkit.entity.Player; import mineplex.core.command.CommandBase; +import mineplex.core.command.LoggedCommand; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; From a0c00e86c40c41772ddef4363bcf4d582ebd6038 Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 19 Apr 2017 01:45:39 +0200 Subject: [PATCH 41/61] Implement LoggedCommand into Event Commands --- .../mineplex/core/personalServer/HostEventServerCommand.java | 2 +- .../mineplex/core/personalServer/HostPersonalEventServer.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java index 7d9f2590b..acad080eb 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostEventServerCommand.java @@ -9,7 +9,7 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; -public class HostEventServerCommand extends CommandBase +public class HostEventServerCommand extends CommandBase implements LoggedCommand { public HostEventServerCommand(PersonalServerManager plugin) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java index 92515d731..8284c78e9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/personalServer/HostPersonalEventServer.java @@ -3,12 +3,13 @@ package mineplex.core.personalServer; import org.bukkit.entity.Player; import mineplex.core.command.CommandBase; +import mineplex.core.command.LoggedCommand; import mineplex.core.common.Rank; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilPlayer; import mineplex.core.recharge.Recharge; -public class HostPersonalEventServer extends CommandBase +public class HostPersonalEventServer extends CommandBase implements LoggedCommand { public HostPersonalEventServer(PersonalServerManager plugin) { From dda09d51e5b8dd25c18dcc8b438044a208458559 Mon Sep 17 00:00:00 2001 From: Sarah Date: Wed, 19 Apr 2017 01:55:19 +0200 Subject: [PATCH 42/61] Fix Commit --- .../mineplex/core/command/LoggedCommand.java | 17 +++++++++++++ .../core/command/LoggingServerCommand.java | 24 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/command/LoggedCommand.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/command/LoggingServerCommand.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/command/LoggedCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/command/LoggedCommand.java new file mode 100644 index 000000000..fa6f21d74 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/command/LoggedCommand.java @@ -0,0 +1,17 @@ +package mineplex.core.command; + +/** + * LoggedCommand + * + * @author xXVevzZXx + */ +public interface LoggedCommand +{ + + default void execute(long time, String username, String command, String args) + { + LoggingServerCommand cmd = new LoggingServerCommand(time, username, command, args); + cmd.publish(); + } + +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/command/LoggingServerCommand.java b/Plugins/Mineplex.Core/src/mineplex/core/command/LoggingServerCommand.java new file mode 100644 index 000000000..34e02073d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/command/LoggingServerCommand.java @@ -0,0 +1,24 @@ +package mineplex.core.command; + +import mineplex.serverdata.commands.ServerCommand; + +/** + * LoggingServerCommand + * + * @author xXVevzZXx + */ +public class LoggingServerCommand extends ServerCommand +{ + private final long _time; + private final String _username; + private final String _command; + private final String _args; + + public LoggingServerCommand(long time, String username, String command, String args) + { + _time = time; + _username = username; + _command = command; + _args = args; + } +} From d99f51f3a973209f1eda0a0539226e8645db68e0 Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 30 Apr 2017 01:54:36 -0700 Subject: [PATCH 43/61] Revert "Clans doesn't have access to this through core for some reason" This reverts commit 20264ff1af98a85a2ab0454fc4c0a3618755a2de. --- .../mineplex/game/clans/BookRateLimiter.java | 55 ------------------- .../src/mineplex/game/clans/Clans.java | 2 +- .../src/mineplex/clanshub/ClansHub.java | 7 +-- 3 files changed, 4 insertions(+), 60 deletions(-) delete mode 100644 Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java diff --git a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java deleted file mode 100644 index 49cdd7509..000000000 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/BookRateLimiter.java +++ /dev/null @@ -1,55 +0,0 @@ -package mineplex.game.clans; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -import mineplex.core.MiniPlugin; -import mineplex.core.packethandler.PacketHandler; -import mineplex.core.packethandler.PacketHandler.ListenerPriority; - -/** - * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. - *

- * See: - * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e - * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab - */ -public class BookRateLimiter extends MiniPlugin -{ - - private final PacketHandler _packetHandler = require(PacketHandler.class); - private final Cache _cache = CacheBuilder.newBuilder() - .expireAfterWrite(1, TimeUnit.SECONDS) - .build(); - - public BookRateLimiter() - { - super("PacketRateLimiter"); - - _packetHandler.addPacketHandler(info -> - { - PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); - String s = packet.a(); - if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) - { - return; - } - - if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) - { - info.setCancelled(true); - - return; - } - - _cache.put(info.getPlayer().getUniqueId(), 0); - - }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); - } - -} 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 4cb014d4a..8599201ea 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -282,7 +282,7 @@ public class Clans extends JavaPlugin SpigotConfig.debug = false; // TODO temporary fix for book related crashes. - new BookRateLimiter(); + new PacketRateLimiter(); } public static String prettifyName(Material material) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index d7a93e3f8..51de3e615 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -1,12 +1,9 @@ package mineplex.clanshub; -import static mineplex.core.Managers.require; - import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.plugin.java.JavaPlugin; -import mineplex.core.BookRateLimiter; import mineplex.core.CustomTagFix; import mineplex.core.PacketsInteractionFix; import mineplex.core.account.CoreClientManager; @@ -68,6 +65,8 @@ import mineplex.minecraft.game.core.combat.CombatManager; import mineplex.minecraft.game.core.condition.ConditionManager; import mineplex.minecraft.game.core.damage.DamageManager; +import static mineplex.core.Managers.require; + /** * Main class for clans hub */ @@ -186,7 +185,7 @@ public class ClansHub extends JavaPlugin new WebsiteLinkManager(this, clientManager); // TODO temporary fix for book related crashes. - new BookRateLimiter(); + new PacketRateLimiter(); } @Override From 6ae6f7b6270dbcac94a87222d31f3a352be906ec Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 30 Apr 2017 01:54:43 -0700 Subject: [PATCH 44/61] Revert "Rate limit book/sign edits as a temporary measure against a crash exploit" This reverts commit f5cba1eb1eb5a031ce145ae8539970649a26c83a. --- .../src/mineplex/core/BookRateLimiter.java | 54 ------------------- .../src/mineplex/game/clans/Clans.java | 3 -- .../src/mineplex/clanshub/ClansHub.java | 3 -- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 6 +-- .../src/nautilus/game/arcade/Arcade.java | 9 +--- 5 files changed, 3 insertions(+), 72 deletions(-) delete mode 100644 Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java b/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java deleted file mode 100644 index e1a5c8e97..000000000 --- a/Plugins/Mineplex.Core/src/mineplex/core/BookRateLimiter.java +++ /dev/null @@ -1,54 +0,0 @@ -package mineplex.core; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import net.minecraft.server.v1_8_R3.PacketPlayInCustomPayload; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -import mineplex.core.packethandler.PacketHandler; -import mineplex.core.packethandler.PacketHandler.ListenerPriority; - -/** - * A temporary fix for book-related crashes. Adds a rate limit to book/sign edits. - *

- * See: - * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/1c3428e534283395dd1b85641a96a6f16842fc1e - * https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/commits/4acd0f49e07e0912096e79494472535baf0db2ab - */ -public class BookRateLimiter extends MiniPlugin -{ - - private final PacketHandler _packetHandler = require(PacketHandler.class); - private final Cache _cache = CacheBuilder.newBuilder() - .expireAfterWrite(1, TimeUnit.SECONDS) - .build(); - - public BookRateLimiter() - { - super("PacketRateLimiter"); - - _packetHandler.addPacketHandler(info -> - { - PacketPlayInCustomPayload packet = (PacketPlayInCustomPayload) info.getPacket(); - String s = packet.a(); - if (!s.equals("MC|BEdit") && !s.equals("MC|BSign")) - { - return; - } - - if (_cache.asMap().containsKey(info.getPlayer().getUniqueId())) - { - info.setCancelled(true); - - return; - } - - _cache.put(info.getPlayer().getUniqueId(), 0); - - }, ListenerPriority.LOW, true, PacketPlayInCustomPayload.class); - } - -} 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 8599201ea..8bddf656b 100644 --- a/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java +++ b/Plugins/Mineplex.Game.Clans/src/mineplex/game/clans/Clans.java @@ -280,9 +280,6 @@ public class Clans extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; - - // TODO temporary fix for book related crashes. - new PacketRateLimiter(); } public static String prettifyName(Material material) diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index 51de3e615..e0997337b 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -183,9 +183,6 @@ public class ClansHub extends JavaPlugin require(Titles.class); require(TwoFactorAuth.class); new WebsiteLinkManager(this, clientManager); - - // TODO temporary fix for book related crashes. - new PacketRateLimiter(); } @Override diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index c1b7a822b..05b80b2e6 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -2,13 +2,13 @@ package mineplex.hub; import static mineplex.core.Managers.require; +import mineplex.hub.modules.AprilFoolsTreasureHunt; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import mineplex.core.CustomTagFix; -import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TwitchIntegrationFix; import mineplex.core.account.CoreClientManager; @@ -79,7 +79,6 @@ import mineplex.core.updater.Updater; import mineplex.core.velocity.VelocityFix; import mineplex.core.visibility.VisibilityManager; import mineplex.core.website.WebsiteLinkManager; -import mineplex.hub.modules.AprilFoolsTreasureHunt; import mineplex.hub.modules.BillboardManager; import mineplex.hub.queue.QueueManager; import mineplex.hub.server.ServerManager; @@ -245,9 +244,6 @@ public class Hub extends JavaPlugin implements IRelation require(AprilFoolsTreasureHunt.class); } require(TwitchIntegrationFix.class); - - // TODO temporary fix for book related crashes. - new BookRateLimiter(); } @Override 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 0a699a9f6..26a762345 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -1,10 +1,9 @@ package nautilus.game.arcade; -import static mineplex.core.Managers.require; - import java.io.File; import java.util.HashMap; +import mineplex.core.aprilfools.AprilFoolsManager; import net.minecraft.server.v1_8_R3.MinecraftServer; import org.bukkit.Bukkit; @@ -17,7 +16,6 @@ import org.spigotmc.SpigotConfig; import mineplex.core.CustomTagFix; import mineplex.core.FoodDupeFix; -import mineplex.core.BookRateLimiter; import mineplex.core.PacketsInteractionFix; import mineplex.core.TimingsFix; import mineplex.core.TwitchIntegrationFix; @@ -26,7 +24,6 @@ import mineplex.core.achievement.AchievementManager; import mineplex.core.antihack.AntiHack; import mineplex.core.antihack.RelationProvider; import mineplex.core.antihack.logging.AntihackLogger; -import mineplex.core.aprilfools.AprilFoolsManager; import mineplex.core.blockrestore.BlockRestore; import mineplex.core.blood.Blood; import mineplex.core.boosters.BoosterManager; @@ -89,6 +86,7 @@ import mineplex.minecraft.game.core.damage.DamageManager; import nautilus.game.arcade.anticheatmetadata.GameInfoMetadata; import nautilus.game.arcade.game.Game; import nautilus.game.arcade.game.GameServerConfig; +import static mineplex.core.Managers.require; public class Arcade extends JavaPlugin { @@ -239,9 +237,6 @@ public class Arcade extends JavaPlugin MinecraftServer.getServer().getPropertyManager().setProperty("debug", false); SpigotConfig.debug = false; - - // TODO temporary fix for book related crashes. - new BookRateLimiter(); } @Override From 28a5a438f53c27b1b7f19260ec854d5bf2aa437a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 12:02:00 -0300 Subject: [PATCH 45/61] Fix item being thrown from the throne --- .../gadgets/particle/king/CastleManager.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index c93477763..c76c856ad 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -149,6 +149,22 @@ public class CastleManager extends MiniPlugin Player player = event.getPlayer(); + if (_item != null && event.getFrom().distanceSquared(event.getTo()) >= 2) + { + if (_item.getPassenger() != null) + { + if (_item.getPassenger().equals(player)) + { + event.setCancelled(true); + Location loc = _throneLocations[0].clone().add(0.5, 0.75, 0.5); + loc.setYaw(90); + loc.setPitch(0); + _item.teleport(loc); + _item.setPassenger(player); + } + } + } + if (_king != null) { Player king = _king.getKing(); @@ -411,6 +427,8 @@ public class CastleManager extends MiniPlugin removePeasant(player); _kings.put(player, new King(player)); + + updateLobbyKing(); } /** @@ -462,6 +480,7 @@ public class CastleManager extends MiniPlugin removeKing(player); _peasants.put(player, new Peasant(player)); + updateLobbyKing(); } /** From 3268a49f828ef11617868b4da8a2f22f51689791 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 12:05:30 -0300 Subject: [PATCH 46/61] Fixed more conflicts --- .../Mineplex.Core.Common/src/mineplex/core/common/Rank.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java index ae5f6bfed..d80564eda 100644 --- a/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java +++ b/Plugins/Mineplex.Core.Common/src/mineplex/core/common/Rank.java @@ -156,13 +156,9 @@ public enum Rank { return _forumId; } -<<<<<<< HEAD public DyeColor getDyeColor() { return _dyeColor; } } -======= -} ->>>>>>> develop From 49fd8d394185e16cdb4b89f8deb1e64a71cd29e5 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 12:52:00 -0300 Subject: [PATCH 47/61] Fixed item and king not resetting after disabling --- .../gadgets/particle/king/CastleManager.java | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index c76c856ad..d4a662f45 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -149,22 +149,6 @@ public class CastleManager extends MiniPlugin Player player = event.getPlayer(); - if (_item != null && event.getFrom().distanceSquared(event.getTo()) >= 2) - { - if (_item.getPassenger() != null) - { - if (_item.getPassenger().equals(player)) - { - event.setCancelled(true); - Location loc = _throneLocations[0].clone().add(0.5, 0.75, 0.5); - loc.setYaw(90); - loc.setPitch(0); - _item.teleport(loc); - _item.setPassenger(player); - } - } - } - if (_king != null) { Player king = _king.getKing(); @@ -282,13 +266,13 @@ public class CastleManager extends MiniPlugin if (!isThrone) return; - Location loc = _throneLocations[0].clone().add(0.5, 0.75, 0.5); + Location loc = _throneLocations[0].clone().add(0.5, 1, 0.5); loc.setYaw(90); loc.setPitch(0); Item item = loc.getWorld().dropItem(loc, new ItemStack(Material.WOOL, 1, (byte) 14)); item.setPickupDelay(Integer.MAX_VALUE); - item.teleport(loc); item.setVelocity(new Vector(0, 0, 0)); + item.teleport(loc); item.setPassenger(player); _item = item; } From d88f183726655876782706983de50af21de0f96c Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 17:52:36 -0300 Subject: [PATCH 48/61] Fixed bug with gadgets and kings not being updated --- .../mineplex/core/gadget/GadgetManager.java | 5 +++ .../core/gadget/gadgets/item/ItemBatGun.java | 28 +++++++++------ .../gadget/gadgets/item/ItemFleshHook.java | 3 ++ .../gadgets/item/ItemMelonLauncher.java | 2 +- .../core/gadget/gadgets/item/ItemTNT.java | 5 ++- .../gadgets/particle/king/CastleManager.java | 36 +++++++++++++++---- 6 files changed, 61 insertions(+), 18 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java index db6b37ffd..e1c7dbef9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/GadgetManager.java @@ -1410,4 +1410,9 @@ public class GadgetManager extends MiniPlugin taunt.start(player); } + public CastleManager getCastleManager() + { + return _castleManager; + } + } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java index 67aa5cc1e..49eb81e85 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemBatGun.java @@ -1,5 +1,16 @@ package mineplex.core.gadget.gadgets.item; +import java.util.ArrayList; +import java.util.HashMap; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Bat; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.util.Vector; + import mineplex.core.common.util.C; import mineplex.core.common.util.F; import mineplex.core.common.util.LineFormat; @@ -20,16 +31,6 @@ import mineplex.core.preferences.Preference; import mineplex.core.recharge.Recharge; import mineplex.core.updater.UpdateType; import mineplex.core.updater.event.UpdateEvent; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.entity.Bat; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.util.Vector; - -import java.util.ArrayList; -import java.util.HashMap; public class ItemBatGun extends ItemGadget { @@ -94,6 +95,13 @@ public class ItemBatGun extends ItemGadget { if (!bat.isValid()) continue; + + if (Manager.getCastleManager().isInsideCastle(bat.getLocation())) + { + bat.remove(); + continue; + } + Vector rand = new Vector((Math.random() - 0.5)/3, (Math.random() - 0.5)/3, (Math.random() - 0.5)/3); bat.setVelocity(loc.getDirection().clone().multiply(0.5).add(rand)); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java index 6c454ebff..82004ff2b 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemFleshHook.java @@ -73,6 +73,9 @@ public class ItemFleshHook extends ItemGadget implements IThrown if (target instanceof ArmorStand) return; + if (Manager.getCastleManager().isInsideCastle(target.getLocation())) + return; + //Pull UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), player.getLocation()), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java index 264118b41..30c732740 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemMelonLauncher.java @@ -74,7 +74,7 @@ public class ItemMelonLauncher extends ItemGadget implements IThrown { if (target != null) { - if (!(target instanceof ArmorStand)) + if (!(target instanceof ArmorStand) && !Manager.getCastleManager().isInsideCastle(target.getLocation())) { //Push UtilAction.velocity(target, diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java index eecba68e1..eb0d65b51 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/item/ItemTNT.java @@ -67,7 +67,10 @@ public class ItemTNT extends ItemGadget { if (Manager.collideEvent(killer, this, player)) continue; - + + if (Manager.getCastleManager().isInsideCastle(player.getLocation())) + continue; + double mult = players.get(player); //Knockback diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index d4a662f45..2cfa9c882 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -385,12 +385,7 @@ public class CastleManager extends MiniPlugin // Removes old king from the throne if (UtilAlg.inBoundingBox(oldKing.getKing().getLocation(), _castleLocationA, _castleLocationB)) { - Entity target = oldKing.getKing(); - while (target.getVehicle() != null) - { - target = target.getVehicle(); - } - UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), _removedKingLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); + oldKing.getKing().teleport(new Location(UtilWorld.getWorld("world"), 0, 78, -31)); UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); } } @@ -434,8 +429,23 @@ public class CastleManager extends MiniPlugin if (!isKing(player)) return; + if (getKing().equals(getKing(player))) + _king = null; + _kings.get(player).clearPeasants(); _kings.remove(player); + + if (_item != null) + { + if (_item.getPassenger() != null) + { + if (_item.getPassenger().equals(player)) + { + player.leaveVehicle(); + } + } + } + updateLobbyKing(); } /** @@ -486,6 +496,15 @@ public class CastleManager extends MiniPlugin if (!isPeasant(player)) return; + if (getPeasant(player) != null) + { + Peasant peasant = getPeasant(player); + if (peasant.getKing() != null) + { + peasant.getKing().removePeasant(peasant); + peasant.removeKing(); + } + } _peasants.remove(player); } @@ -585,4 +604,9 @@ public class CastleManager extends MiniPlugin location.getBlock().setData(data); } } + + public boolean isInsideCastle(Location location) + { + return UtilAlg.inBoundingBox(location, _castleLocationA, _castleLocationB); + } } From 04c0c63390c33d74d45368f9626ae005f2fd694a Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 18:26:02 -0300 Subject: [PATCH 49/61] Fix positions --- .../core/gadget/gadgets/particle/king/CastleManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 2cfa9c882..ce816cab0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -573,12 +573,15 @@ public class CastleManager extends MiniPlugin */ private int getKingPosition(King king) { + if (_king != null) + if (_king.equals(king)) + return 1; int position = 1; for (King otherKing : _kings.values()) { if (otherKing.equals(king)) continue; - if (otherKing.amountOfPeasants() > king.amountOfPeasants()) + if (otherKing.amountOfPeasants() >= king.amountOfPeasants()) position++; } return position; From d205d5fadac4557de0a423c03d33bc0114c9e549 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 18:56:37 -0300 Subject: [PATCH 50/61] Fixed item being despawned, fixed holograms not being updated, fixed king never being removed on leave --- .../gadgets/particle/king/CastleManager.java | 38 ++++++++++++++++++- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index ce816cab0..4cca80870 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -13,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntitySpawnEvent; +import org.bukkit.event.entity.ItemDespawnEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -293,6 +294,7 @@ public class CastleManager extends MiniPlugin if (!event.getEntity().equals(_item)) return; + _item.eject(); _item.remove(); _item = null; } @@ -306,6 +308,8 @@ public class CastleManager extends MiniPlugin { Player player = event.getPlayer(); setPlayerAsPeasant(player); + updateLobbyKing(); + updateHologram(); } /** @@ -327,10 +331,10 @@ public class CastleManager extends MiniPlugin } else if (isKing(player)) { - if (getKing(player) != null) - getKing(player).clearPeasants(); + removeKing(player); } updateLobbyKing(); + updateHologram(); } /** @@ -408,6 +412,7 @@ public class CastleManager extends MiniPlugin _kings.put(player, new King(player)); updateLobbyKing(); + updateHologram(); } /** @@ -446,6 +451,7 @@ public class CastleManager extends MiniPlugin } } updateLobbyKing(); + updateHologram(); } /** @@ -475,6 +481,7 @@ public class CastleManager extends MiniPlugin _peasants.put(player, new Peasant(player)); updateLobbyKing(); + updateHologram(); } /** @@ -506,6 +513,9 @@ public class CastleManager extends MiniPlugin } } _peasants.remove(player); + + updateLobbyKing(); + updateHologram(); } /** @@ -608,8 +618,32 @@ public class CastleManager extends MiniPlugin } } + /** + * Checks if location is inside the castle + * @param location + * @return + */ public boolean isInsideCastle(Location location) { return UtilAlg.inBoundingBox(location, _castleLocationA, _castleLocationB); } + + /** + * Cancels item despawn + * @param event + */ + @EventHandler + public void onItemDespawn(ItemDespawnEvent event) + { + if (_item != null) + { + if (event.getEntity().equals(_item)) + { + if (_item.getPassenger() != null) + { + event.setCancelled(true); + } + } + } + } } From 9e0424ea46813ced4cc58f296976e4bd4a7bf6a4 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:00:53 -0300 Subject: [PATCH 51/61] Checks if it's hub before doing event related stuff --- .../core/gadget/gadgets/particle/king/CastleManager.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 4cca80870..f2d3c8c09 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -251,6 +251,9 @@ public class CastleManager extends MiniPlugin if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; + if (!isHub()) + return; + Block block = event.getClickedBlock(); boolean isThrone = false; @@ -285,6 +288,9 @@ public class CastleManager extends MiniPlugin @EventHandler public void onLeaveThrone(EntityDismountEvent event) { + if (!isHub()) + return; + if (!(event.getEntity() instanceof Item)) return; @@ -625,6 +631,9 @@ public class CastleManager extends MiniPlugin */ public boolean isInsideCastle(Location location) { + if (!isHub()) + return false; + return UtilAlg.inBoundingBox(location, _castleLocationA, _castleLocationB); } From 5d3dbbb44be49a82f0ba3782d067b4d63b40861b Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:06:44 -0300 Subject: [PATCH 52/61] Checks for the correct world --- .../core/gadget/gadgets/particle/king/CastleManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index f2d3c8c09..9fadd16d6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -132,7 +132,7 @@ public class CastleManager extends MiniPlugin if (event.getEntity() instanceof Item) return; - if (UtilAlg.inBoundingBox(event.getLocation(), _castleLocationA, _castleLocationB)) + if (isInsideCastle(event.getLocation())) { event.setCancelled(true); } @@ -164,7 +164,7 @@ public class CastleManager extends MiniPlugin if (!fromLocation.getWorld().equals(toLocation.getWorld())) return; // Cancels movement - if (UtilAlg.inBoundingBox(toLocation, _castleLocationA, _castleLocationB)) + if (isInsideCastle(toLocation)) { Entity target = player; while (target.getVehicle() != null) @@ -393,7 +393,7 @@ public class CastleManager extends MiniPlugin if (oldKing != null && oldKing.getKing().isOnline()) { // Removes old king from the throne - if (UtilAlg.inBoundingBox(oldKing.getKing().getLocation(), _castleLocationA, _castleLocationB)) + if (isInsideCastle(oldKing.getKing().getLocation())) { oldKing.getKing().teleport(new Location(UtilWorld.getWorld("world"), 0, 78, -31)); UtilPlayer.message(oldKing.getKing(), F.main("Kingdom", "You are no longer the king of that castle!")); @@ -634,6 +634,9 @@ public class CastleManager extends MiniPlugin if (!isHub()) return false; + if (!location.getWorld().equals(_castleLocationA.getWorld())) + return false; + return UtilAlg.inBoundingBox(location, _castleLocationA, _castleLocationB); } From e3521c06fd2c26319b08a4d7acfb1ece2f5dc5a8 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:14:27 -0300 Subject: [PATCH 53/61] This shouldn't be there... --- .../core/gadget/gadgets/particle/king/CastleManager.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 9fadd16d6..67caf7346 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -300,7 +300,6 @@ public class CastleManager extends MiniPlugin if (!event.getEntity().equals(_item)) return; - _item.eject(); _item.remove(); _item = null; } From a37cf3b1c5fac198ae5d0f605a37a7a54c0ce128 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:33:38 -0300 Subject: [PATCH 54/61] Fixed pets and mounts not having any message when they are inside castle, fixed item despawning, stopped players from placing jukeboxes inside castle --- .../gadgets/particle/king/CastleManager.java | 43 ++++++++++++++----- .../core/gadget/types/MusicGadget.java | 9 +++- .../src/mineplex/core/pet/PetManager.java | 11 ++++- .../src/mineplex/clanshub/ClansHub.java | 7 +-- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 7 ++- .../src/nautilus/game/arcade/Arcade.java | 4 +- .../src/mineplex/mavericks/review/Hub.java | 6 +-- .../src/mineplex/gemhunters/GemHunters.java | 6 +-- 8 files changed, 68 insertions(+), 25 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 67caf7346..1c55c6b5e 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -13,7 +13,6 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntitySpawnEvent; -import org.bukkit.event.entity.ItemDespawnEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; @@ -36,6 +35,9 @@ import mineplex.core.gadget.gadgets.particle.king.types.King; import mineplex.core.gadget.gadgets.particle.king.types.Peasant; import mineplex.core.hologram.Hologram; import mineplex.core.hologram.HologramManager; +import mineplex.core.mount.event.MountActivateEvent; +import mineplex.core.updater.UpdateType; +import mineplex.core.updater.event.UpdateEvent; /** * Manages the castle in the main lobbies @@ -644,17 +646,38 @@ public class CastleManager extends MiniPlugin * @param event */ @EventHandler - public void onItemDespawn(ItemDespawnEvent event) + public void onItemDespawn(UpdateEvent event) { - if (_item != null) + if (!isHub()) + return; + + if (event.getType() != UpdateType.TICK) + return; + + if (_item == null) + return; + + if (!_item.isValid()) { - if (event.getEntity().equals(_item)) - { - if (_item.getPassenger() != null) - { - event.setCancelled(true); - } - } + Location loc = _throneLocations[0].clone().add(0.5, 1, 0.5); + loc.setYaw(90); + loc.setPitch(0); + Item item = loc.getWorld().dropItem(loc, new ItemStack(Material.WOOL, 1, (byte) 14)); + item.setPickupDelay(Integer.MAX_VALUE); + item.setVelocity(new Vector(0, 0, 0)); + item.teleport(loc); + item.setPassenger(_king.getKing()); + _item = item; } } + + @EventHandler + public void onMount(MountActivateEvent event) + { + if (!isHub()) + return; + + if (isInsideCastle(event.getPlayer().getLocation())) + event.setCancelled(true); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java index 708e5e5a6..c659ffd52 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java @@ -56,7 +56,14 @@ public class MusicGadget extends Gadget UtilPlayer.message(player, F.main("Music", "There is already a song playing.")); return; } - + + // Inside castle + if (Manager.getCastleManager().isInsideCastle(player.getLocation())) + { + UtilPlayer.message(player, F.main("Music", "Cannot play songs near Portals.")); + return; + } + //Near Portal for (Block block : UtilBlock.getInRadius(player.getLocation(), 3).keySet()) { diff --git a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java index 47c79138d..58b555539 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/pet/PetManager.java @@ -70,6 +70,7 @@ import mineplex.core.disguise.disguises.DisguiseVillager; import mineplex.core.disguise.disguises.DisguiseWither; import mineplex.core.disguise.disguises.DisguiseZombie; import mineplex.core.donation.DonationManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.inventory.InventoryManager; import mineplex.core.itemstack.ItemStackFactory; import mineplex.core.pet.repository.PetRepository; @@ -96,6 +97,7 @@ public class PetManager extends MiniClientPlugin private DonationManager _donationManager; private CoreClientManager _clientManager; private InventoryManager _inventoryManager; + private CastleManager _castleManager; private Map _flyingPets = new HashMap<>(); private Map _trueLovePets = new HashMap<>(); @@ -108,7 +110,8 @@ public class PetManager extends MiniClientPlugin private ShapeWings _cupidWingsEdge = new ShapeWings(UtilParticle.ParticleType.RED_DUST.particleName, new Vector(0, 0, 0), 1, 0, true, ShapeWings.DEFAULT_ROTATION, ShapeWings.SMALL_HEART_WING_PATTERN); public PetManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager - , InventoryManager inventoryManager, DisguiseManager disguiseManager, mineplex.core.creature.Creature creatureModule, BlockRestore restore) + , InventoryManager inventoryManager, DisguiseManager disguiseManager, mineplex.core.creature.Creature creatureModule, BlockRestore restore, + CastleManager castleManager) { super("Pet Manager", plugin); @@ -213,6 +216,12 @@ public class PetManager extends MiniClientPlugin return; } + if (_castleManager.isInsideCastle(location)) + { + UtilPlayer.message(player, F.main("Pets", "You cannot spawn a pet inside the castle!")); + return; + } + Entity pet; EntityType entityType = petType.getEntityType(); diff --git a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java index e0997337b..01567f155 100644 --- a/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java +++ b/Plugins/Mineplex.Hub.Clans/src/mineplex/clanshub/ClansHub.java @@ -23,6 +23,7 @@ import mineplex.core.disguise.DisguiseManager; import mineplex.core.donation.DonationManager; import mineplex.core.elo.EloManager; import mineplex.core.friend.FriendManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.give.Give; import mineplex.core.globalpacket.GlobalPacketManager; import mineplex.core.hologram.HologramManager; @@ -120,7 +121,9 @@ public class ClansHub extends JavaPlugin Creature creature = new Creature(this); NpcManager npcManager = new NpcManager(this, creature); InventoryManager inventoryManager = new InventoryManager(this, clientManager); - PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore); + HologramManager hologramManager = new HologramManager(this, packetHandler); + CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, false); + PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); PollManager pollManager = new PollManager(this, clientManager, donationManager); //Main Modules @@ -153,8 +156,6 @@ public class ClansHub extends JavaPlugin BoosterManager boosterManager = new BoosterManager(this, "", clientManager, donationManager, inventoryManager, thankManager); HubManager hubManager = new HubManager(this, blockRestore, clientManager, incognito, donationManager, inventoryManager, condition, disguiseManager, new TaskManager(this, clientManager), portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, new HologramManager(this, packetHandler), npcManager, packetHandler, punish, serverStatusManager, customDataManager, thankManager, boosterManager); - HologramManager hologramManager = new HologramManager(this, packetHandler); - ClansTransferManager serverManager = new ClansTransferManager(this, clientManager, donationManager, partyManager, portal, hubManager); Chat chat = new Chat(this, incognito, clientManager, preferenceManager, achievementManager, serverStatusManager.getCurrentServerName()); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index dfa0f1847..6ba076748 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -31,6 +31,7 @@ import mineplex.core.donation.DonationManager; import mineplex.core.elo.EloManager; import mineplex.core.energy.Energy; import mineplex.core.friend.FriendManager; +import mineplex.core.gadget.gadgets.particle.king.CastleManager; import mineplex.core.give.Give; import mineplex.core.globalpacket.GlobalPacketManager; import mineplex.core.hologram.HologramManager; @@ -138,12 +139,15 @@ public class Hub extends JavaPlugin implements IRelation incognito.setPreferencesManager(preferenceManager); + HologramManager hologramManager = new HologramManager(this, packetHandler); + preferenceManager.GiveItem = true; Creature creature = new Creature(this); NpcManager npcManager = new NpcManager(this, creature); _npcManager = npcManager; InventoryManager inventoryManager = new InventoryManager(this, clientManager); - PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore); + CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, false); + PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); PollManager pollManager = new PollManager(this, clientManager, donationManager); //new TournamentManager(this, clientManager, donationManager); @@ -181,7 +185,6 @@ public class Hub extends JavaPlugin implements IRelation ThankManager thankManager = new ThankManager(this, clientManager, donationManager); BoosterManager boosterManager = new BoosterManager(this, boosterGroup, clientManager, donationManager, inventoryManager, thankManager); HubManager hubManager = new HubManager(this, blockRestore, clientManager, incognito, donationManager, inventoryManager, conditionManager, disguiseManager, new TaskManager(this, clientManager), portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, new HologramManager(this, packetHandler), npcManager, personalServerManager, packetHandler, punish, serverStatusManager, customDataManager, thankManager, boosterManager); - HologramManager hologramManager = new HologramManager(this, packetHandler); QueueManager queueManager = new QueueManager(this, clientManager, donationManager, eloManager, partyManager); ServerManager serverManager = new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, queueManager, boosterManager); 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 7bddd6b75..d900d8ec3 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/Arcade.java @@ -201,9 +201,9 @@ public class Arcade extends JavaPlugin //Inventory InventoryManager inventoryManager = new InventoryManager(this, _clientManager); - PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); - MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); CastleManager castleManager = new CastleManager(this, _clientManager, hologramManager, false); + PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); + MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); BoosterManager boosterManager = new BoosterManager(this, _serverConfiguration.getServerGroup().getBoosterGroup(), _clientManager, _donationManager, inventoryManager, thankManager); diff --git a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java index 3bd1201c4..1c8d8d76e 100644 --- a/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java +++ b/Plugins/mavericks-review-hub/src/mineplex/mavericks/review/Hub.java @@ -127,10 +127,10 @@ public class Hub extends JavaPlugin ServerConfiguration serverConfiguration = new ServerConfiguration(this, _clientManager); // Inventory - InventoryManager inventoryManager = new InventoryManager(this, _clientManager); - PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore); - MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); CastleManager castleManager = new CastleManager(this, _clientManager, hologramManager, false); + InventoryManager inventoryManager = new InventoryManager(this, _clientManager); + PetManager petManager = new PetManager(this, _clientManager, _donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); + MountManager mountManager = new MountManager(this, _clientManager, _donationManager, blockRestore, disguiseManager); GadgetManager gadgetManager = new GadgetManager(this, _clientManager, _donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, _clientManager, _donationManager); diff --git a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java index 626e1682c..f44004315 100644 --- a/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java +++ b/Plugins/mineplex-game-gemhunters/src/mineplex/gemhunters/GemHunters.java @@ -250,10 +250,10 @@ public class GemHunters extends JavaPlugin // Gadgets, used for mounts, lots of managers for something really small // :( - MountManager mountManager = new MountManager(this, clientManager, donationManager, blockRestore, disguiseManager); - PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore); - ProjectileManager projectileManager = new ProjectileManager(this); CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, false); + MountManager mountManager = new MountManager(this, clientManager, donationManager, blockRestore, disguiseManager); + PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); + ProjectileManager projectileManager = new ProjectileManager(this); GadgetManager gadgetManager = new GadgetManager(this, clientManager, donationManager, inventoryManager, mountManager, petManager, preferenceManager, disguiseManager, blockRestore, projectileManager, achievementManager, packetHandler, hologramManager, incognito, castleManager); ThankManager thankManager = new ThankManager(this, clientManager, donationManager); BoosterManager boosterManager = new BoosterManager(this, null, clientManager, donationManager, inventoryManager, thankManager); From 8c644414039b5eba96acb7d95fd39e0815db62b9 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:41:57 -0300 Subject: [PATCH 55/61] Removed CastleManager from HubManager --- Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java | 2 +- Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 6ba076748..df00d4e4a 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -184,7 +184,7 @@ public class Hub extends JavaPlugin implements IRelation String boosterGroup = serverConfiguration.getServerGroup().getBoosterGroup(); ThankManager thankManager = new ThankManager(this, clientManager, donationManager); BoosterManager boosterManager = new BoosterManager(this, boosterGroup, clientManager, donationManager, inventoryManager, thankManager); - HubManager hubManager = new HubManager(this, blockRestore, clientManager, incognito, donationManager, inventoryManager, conditionManager, disguiseManager, new TaskManager(this, clientManager), portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, new HologramManager(this, packetHandler), npcManager, personalServerManager, packetHandler, punish, serverStatusManager, customDataManager, thankManager, boosterManager); + HubManager hubManager = new HubManager(this, blockRestore, clientManager, incognito, donationManager, inventoryManager, conditionManager, disguiseManager, new TaskManager(this, clientManager), portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, new HologramManager(this, packetHandler), npcManager, personalServerManager, packetHandler, punish, serverStatusManager, customDataManager, thankManager, boosterManager, castleManager); QueueManager queueManager = new QueueManager(this, clientManager, donationManager, eloManager, partyManager); ServerManager serverManager = new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, queueManager, boosterManager); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java index e565740f2..79cbfdd70 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/HubManager.java @@ -190,7 +190,7 @@ public class HubManager extends MiniClientPlugin implements IChatMess private HashMap> _creativeAdmin = new HashMap>(); - public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, IncognitoManager incognito, DonationManager donationManager, InventoryManager inventoryManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager, PreferencesManager preferences, PetManager petManager, PollManager pollManager, StatsManager statsManager, AchievementManager achievementManager, HologramManager hologramManager, NpcManager npcManager, PersonalServerManager personalServerManager, PacketHandler packetHandler, Punish punish, ServerStatusManager serverStatusManager, CustomDataManager customDataManager, ThankManager thankManager, BoosterManager boosterManager) + public HubManager(JavaPlugin plugin, BlockRestore blockRestore, CoreClientManager clientManager, IncognitoManager incognito, DonationManager donationManager, InventoryManager inventoryManager, ConditionManager conditionManager, DisguiseManager disguiseManager, TaskManager taskManager, Portal portal, PartyManager partyManager, PreferencesManager preferences, PetManager petManager, PollManager pollManager, StatsManager statsManager, AchievementManager achievementManager, HologramManager hologramManager, NpcManager npcManager, PersonalServerManager personalServerManager, PacketHandler packetHandler, Punish punish, ServerStatusManager serverStatusManager, CustomDataManager customDataManager, ThankManager thankManager, BoosterManager boosterManager, CastleManager castleManager) { super("Hub Manager", plugin); @@ -224,7 +224,6 @@ public class HubManager extends MiniClientPlugin implements IChatMess _mountManager = new MountManager(_plugin, clientManager, donationManager, blockRestore, _disguiseManager); _inventoryManager = inventoryManager; new BenefitManager(plugin, clientManager, _inventoryManager); - CastleManager castleManager = new CastleManager(_plugin, _clientManager, hologramManager, true); _gadgetManager = new GadgetManager(_plugin, clientManager, donationManager, _inventoryManager, _mountManager, petManager, preferences, disguiseManager, blockRestore, Managers.get(ProjectileManager.class), achievementManager, packetHandler, hologramManager, incognito, castleManager); FacebookManager facebookManager = new FacebookManager(plugin, clientManager, donationManager, inventoryManager); From 879ab605f1ebe642cb550f343f1bb70ebd9b550b Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 19:50:45 -0300 Subject: [PATCH 56/61] Set hub as true in Hub --- Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index df00d4e4a..bedf21851 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -146,7 +146,7 @@ public class Hub extends JavaPlugin implements IRelation NpcManager npcManager = new NpcManager(this, creature); _npcManager = npcManager; InventoryManager inventoryManager = new InventoryManager(this, clientManager); - CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, false); + CastleManager castleManager = new CastleManager(this, clientManager, hologramManager, true); PetManager petManager = new PetManager(this, clientManager, donationManager, inventoryManager, disguiseManager, creature, blockRestore, castleManager); PollManager pollManager = new PollManager(this, clientManager, donationManager); //new TournamentManager(this, clientManager, donationManager); From 734aa920bfdfbd5a6939a365ea7cc0d9b48d75c3 Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 20:00:29 -0300 Subject: [PATCH 57/61] Fixed jukebox message --- .../src/mineplex/core/gadget/types/MusicGadget.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java index c659ffd52..1fc52cbcd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/types/MusicGadget.java @@ -60,7 +60,7 @@ public class MusicGadget extends Gadget // Inside castle if (Manager.getCastleManager().isInsideCastle(player.getLocation())) { - UtilPlayer.message(player, F.main("Music", "Cannot play songs near Portals.")); + UtilPlayer.message(player, F.main("Music", "Cannot play songs inside the Castle.")); return; } From fc5c420176b5c481c7c526e031afd86d1742053f Mon Sep 17 00:00:00 2001 From: LCastr0 Date: Sun, 30 Apr 2017 21:19:02 -0300 Subject: [PATCH 58/61] Changed to update event --- .../gadgets/particle/king/CastleManager.java | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index 1c55c6b5e..d874792d5 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -16,7 +16,6 @@ import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; @@ -30,6 +29,7 @@ import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilPlayer; +import mineplex.core.common.util.UtilServer; import mineplex.core.common.util.UtilWorld; import mineplex.core.gadget.gadgets.particle.king.types.King; import mineplex.core.gadget.gadgets.particle.king.types.Peasant; @@ -145,37 +145,30 @@ public class CastleManager extends MiniPlugin * @param event */ @EventHandler - public void onPlayerMove(PlayerMoveEvent event) + public void onPlayerMove(UpdateEvent event) { if (!isHub()) return; - Player player = event.getPlayer(); + if (event.getType() != UpdateType.TICK) + return; - if (_king != null) + for (Player player : UtilServer.getPlayers()) { - Player king = _king.getKing(); - if (king.equals(player)) + if (_king != null) + if (_king.getKing().equals(player)) + continue; + if (isInsideCastle(player.getLocation())) { - return; + Entity target = player; + while (target.getVehicle() != null) + { + target = target.getVehicle(); + } + Location spawnLocation = new Location(target.getWorld(), 0, 64, 0); + UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), spawnLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); } } - - Location fromLocation = event.getFrom(); - Location toLocation = event.getTo(); - if (!fromLocation.getWorld().equals(toLocation.getWorld())) return; - - // Cancels movement - if (isInsideCastle(toLocation)) - { - Entity target = player; - while (target.getVehicle() != null) - { - target = target.getVehicle(); - } - Location spawnLocation = new Location(target.getWorld(), 0, 64, 0); - UtilAction.velocity(target, UtilAlg.getTrajectory(target.getLocation(), spawnLocation).multiply(-1), 1.5, true, 0.8, 0, 1.0, true); - } } /** From 63fae068312945e42e8fac78e05b504703d8647d Mon Sep 17 00:00:00 2001 From: cnr Date: Sun, 30 Apr 2017 21:09:11 -0700 Subject: [PATCH 59/61] Revert "Enable 2x XP" This reverts commit 7994ed082e25df9bbbbb823d35afdead58023fe4. --- .../src/nautilus/game/arcade/game/Game.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java index b43b4408a..89fe831d5 100644 --- a/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java +++ b/Plugins/Nautilus.Game.Arcade/src/nautilus/game/arcade/game/Game.java @@ -296,7 +296,7 @@ public abstract class Game extends ListenerComponent implements Lifetimed public long PrepareTime = 9000; public boolean PlaySoundGameStart = true; - public double XpMult = 2; + public double XpMult = 1; public boolean SpeedMeasurement = false; From d62006a426cadd30ad6790a611aa65b7544a18fa Mon Sep 17 00:00:00 2001 From: cnr Date: Mon, 1 May 2017 00:45:24 -0700 Subject: [PATCH 60/61] Add King item to PPC rewards --- .../src/mineplex/core/powerplayclub/PowerPlayClubRewards.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/powerplayclub/PowerPlayClubRewards.java b/Plugins/Mineplex.Core/src/mineplex/core/powerplayclub/PowerPlayClubRewards.java index 60f365341..1857154fc 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/powerplayclub/PowerPlayClubRewards.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/powerplayclub/PowerPlayClubRewards.java @@ -37,6 +37,7 @@ public class PowerPlayClubRewards .put(YearMonth.of(2017, Month.FEBRUARY), new PetItem(PetType.TRUE_LOVE_PET)) .put(YearMonth.of(2017, Month.MARCH), new UnknownSalesPackageItem("Gold Pot Morph")) .put(YearMonth.of(2017, Month.APRIL), new UnknownSalesPackageItem("Bumblebee's Wings")) + .put(YearMonth.of(2017, Month.MAY), new UnknownSalesPackageItem("King")) .build(); public interface PowerPlayClubItem From e2b43bb995e9f5e8901d0694998b8e6054c871bd Mon Sep 17 00:00:00 2001 From: cnr Date: Mon, 1 May 2017 00:49:21 -0700 Subject: [PATCH 61/61] Don't show holograms in non-lobby servers --- .../core/gadget/gadgets/particle/king/CastleManager.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java index d874792d5..20b830471 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/particle/king/CastleManager.java @@ -354,6 +354,10 @@ public class CastleManager extends MiniPlugin */ private void updateHologram() { + if (!isHub()) + { + return; + } if (_hologram != null) { _hologram.stop();