From 029b0606d0a705e3b8350d212d67be42598c5793 Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 13 Oct 2017 04:34:52 +0100 Subject: [PATCH] Add all old chest types --- .../core/achievement/AchievementManager.java | 2 +- .../gadget/gadgets/morph/moba/MorphAnath.java | 2 +- .../src/mineplex/core/newnpc/NPC.java | 14 +- .../mineplex/core/newnpc/NewNPCManager.java | 6 +- .../core/reward/rewards/ChestReward.java | 2 - .../core/treasure/TreasureLocation.java | 1 + .../core/treasure/TreasureManager.java | 6 + .../core/treasure/TreasureSession.java | 7 +- .../animations/MOBAChestAnimation.java | 94 +++++ .../animations/MinestrikeChestAnimation.java | 61 +++ .../animations/OmegaChestAnimation.java | 102 +++++ .../core/treasure/types/MOBATreasure.java | 125 ++++++ .../treasure/types/MinestrikeTreasure.java | 66 +++ .../core/treasure/types/OmegaTreasure.java | 399 ++++++++++++++++++ .../core/treasure/types/Treasure.java | 15 +- .../core/treasure/types/TreasureType.java | 26 ++ .../treasure/types/TrickOrTreatTreasure.java | 3 + .../core/treasure/ui/TreasurePage.java | 5 +- .../Mineplex.Hub/src/mineplex/hub/Hub.java | 2 +- .../TemporaryGemHuntersServerSender.java | 5 +- .../mineplex/hub/parkour/ParkourManager.java | 40 +- .../src/mineplex/hub/plugin/HubPlugin.java | 4 +- .../mineplex/hub/server/ServerManager.java | 223 +++++----- 23 files changed, 1068 insertions(+), 142 deletions(-) create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MOBAChestAnimation.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MinestrikeChestAnimation.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/OmegaChestAnimation.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MOBATreasure.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MinestrikeTreasure.java create mode 100644 Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OmegaTreasure.java diff --git a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java index efd090ebf..1a7a9a44d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/achievement/AchievementManager.java @@ -54,7 +54,7 @@ public class AchievementManager extends MiniPlugin _clientManager = clientManager; _shop = new AchievementShop(this, _statsManager, clientManager, donationManager, "Achievement"); - new LevelingManager(this); + //new LevelingManager(this); generatePermissions(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/moba/MorphAnath.java b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/moba/MorphAnath.java index a5769707c..8316ea408 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/moba/MorphAnath.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/gadget/gadgets/morph/moba/MorphAnath.java @@ -183,7 +183,7 @@ public class MorphAnath extends MorphGadget Block block = player.getLocation().getBlock(); - while (!UtilBlock.solid(block)) + while (!UtilBlock.solid(block) && block.getLocation().getBlockY() > 10) { block = block.getRelative(BlockFace.DOWN); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NPC.java b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NPC.java index 8d09daf63..11d44065c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NPC.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NPC.java @@ -15,6 +15,7 @@ import mineplex.core.common.util.UtilEnt; import mineplex.core.hologram.Hologram; import mineplex.core.hologram.HologramManager; import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.utils.UtilVariant; import mineplex.serverdata.database.column.Column; import mineplex.serverdata.database.column.ColumnByte; import mineplex.serverdata.database.column.ColumnDouble; @@ -59,7 +60,18 @@ public class NPC public LivingEntity spawnEntity() { _spawn.getChunk().load(true); - LivingEntity entity = (LivingEntity) _spawn.getWorld().spawnEntity(_spawn, _entityType); + LivingEntity entity; + + //TODO remove this terrible hack + if (_name.contains("Halloween")) + { + entity = UtilVariant.spawnWitherSkeleton(_spawn); + } + else + { + entity = (LivingEntity) _spawn.getWorld().spawnEntity(_spawn, _entityType); + } + boolean nullName = _name.equals("NULL"); entity.setCanPickupItems(false); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java index 5ae259d2e..0decb30d9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/newnpc/NewNPCManager.java @@ -472,13 +472,13 @@ public class NewNPCManager extends MiniPlugin /** * @param metadata The metadata you wish to find all the NPCs of. - * @return A list of {@link NPC} that are unloaded (have no entity attached to them) and that have the metadata - * specified. + * @return A list of {@link NPC} that are unloaded (have no entity attached to them) and that have the metadata which + * starts with that specified. */ private List getUnloadedNPCs(String metadata) { return _npcs.stream() - .filter(npc -> npc.getMetadata().equals(metadata) && npc.getEntity() == null) + .filter(npc -> npc.getMetadata().startsWith(metadata) && npc.getEntity() == null) .collect(Collectors.toList()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ChestReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ChestReward.java index 2749a9c81..b796c5452 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ChestReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/ChestReward.java @@ -21,6 +21,4 @@ public class ChestReward extends InventoryReward { super(type.getName(), type.getItemName(), "Treasure Chest", min, max, type.getItemStack(), rarity, shardValue); } - - } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java index 4ff16902f..c432bdeae 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java @@ -185,6 +185,7 @@ public class TreasureLocation implements Listener if (_session.hasFailed()) { + getManager().getInventoryManager().addItemToInventory(null, player, treasure.getTreasureType().getItemName(), 1); _session = null; player.sendMessage(F.main(getManager().getName(), "Sorry, it looks like the rewards for the chest could not be generated.")); return; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java index e642360ed..1c7285945 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java @@ -24,8 +24,11 @@ import mineplex.core.recharge.Recharge; import mineplex.core.treasure.reward.TreasureRewardManager; import mineplex.core.treasure.types.AncientTreasure; import mineplex.core.treasure.types.IlluminatedTreasure; +import mineplex.core.treasure.types.MOBATreasure; +import mineplex.core.treasure.types.MinestrikeTreasure; import mineplex.core.treasure.types.MythicalTreasure; import mineplex.core.treasure.types.OldTreasure; +import mineplex.core.treasure.types.OmegaTreasure; import mineplex.core.treasure.types.Treasure; import mineplex.core.treasure.types.TrickOrTreatTreasure; @@ -66,6 +69,9 @@ public class TreasureManager extends MiniPlugin addTreasureType(new AncientTreasure()); addTreasureType(new MythicalTreasure()); addTreasureType(new IlluminatedTreasure()); + addTreasureType(new OmegaTreasure()); + addTreasureType(new MinestrikeTreasure()); + addTreasureType(new MOBATreasure()); addTreasureType(new TrickOrTreatTreasure()); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java index 83bdab95f..4397f4afd 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java @@ -82,11 +82,6 @@ public class TreasureSession implements Listener Player player = event.getPlayer(); Location location = event.getClickedBlock().getLocation(); - if (!player.equals(getPlayer())) - { - return; - } - boolean found = false; for (Location chestLocation : _treasureLocation.getChestLocations()) @@ -107,7 +102,7 @@ public class TreasureSession implements Listener event.setCancelled(true); - if (_openedChests.contains(location) || isDone()) + if (!player.equals(event.getPlayer()) || _openedChests.contains(location) || isDone()) { return; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MOBAChestAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MOBAChestAnimation.java new file mode 100644 index 000000000..7ec4beb22 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MOBAChestAnimation.java @@ -0,0 +1,94 @@ +package mineplex.core.treasure.animation.animations; + +import java.util.List; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.disguise.disguises.DisguiseGuardian; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureOpenAnimation; +import mineplex.core.treasure.types.Treasure; + +public class MOBAChestAnimation extends TreasureOpenAnimation +{ + + private static final int RADIUS = 3; + private static final double OFFSET_THETA = Math.PI / 10; + private static final double DELTA_THETA = Math.PI / 40; + private static final double TOTAL_THETA = 2 * Math.PI; + + private double _deltaTheta; + private double _totalTheta; + + public MOBAChestAnimation(Treasure treasure, TreasureLocation treasureLocation) + { + super(treasure, treasureLocation); + } + + @Override + protected void onStart() + { + changeFloor(Material.PRISMARINE, 0, Material.PRISMARINE, 1); + + List chests = getTreasureLocation().getChestLocations(); + _deltaTheta = Math.PI * 2 / (double) chests.size(); + + for (Location location : chests) + { + ArmorStand stand = spawnArmourStand(location); + disguise(new DisguiseGuardian(stand)); + } + } + + @Override + public void onTick() + { + _totalTheta += DELTA_THETA; + + int index = 0; + for (ArmorStand stand : _stands) + { + Location location = getTreasureLocation().getChest().clone(); + double x = RADIUS * Math.cos(_totalTheta + OFFSET_THETA + index * _deltaTheta); + double z = RADIUS * Math.sin(_totalTheta + OFFSET_THETA + index * _deltaTheta); + + location.add(x, 0, z); + + location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, getTreasureLocation().getChest()))); + + stand.teleport(location); + UtilParticle.PlayParticleToAll(ParticleType.DRIP_WATER, location.add(0, 1, 0), 0.25F, 0.25F, 0.25F, 0.1F, 1, ViewDist.NORMAL); + + index++; + } + + if (_totalTheta >= TOTAL_THETA) + { + for (ArmorStand stand : _stands) + { + Location location = stand.getLocation(); + stand.getWorld().playSound(location, Sound.NOTE_PLING, 1, 1.2F); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_EXPLODE, location, 0, 0, 0, 0.1F, 1, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.PORTAL, location, 0.8F, 0.8F, 0.8F, 0.1F, 20, ViewDist.NORMAL); + stand.remove(); + + createChestAt(location, Material.ENDER_CHEST); + } + + setRunning(false); + } + } + + @Override + protected void onFinish() + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MinestrikeChestAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MinestrikeChestAnimation.java new file mode 100644 index 000000000..18dc008c3 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MinestrikeChestAnimation.java @@ -0,0 +1,61 @@ +package mineplex.core.treasure.animation.animations; + +import org.bukkit.Effect; +import org.bukkit.Location; +import org.bukkit.Material; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureOpenAnimation; +import mineplex.core.treasure.types.Treasure; + +public class MinestrikeChestAnimation extends TreasureOpenAnimation +{ + + public MinestrikeChestAnimation(Treasure treasure, TreasureLocation treasureLocation) + { + super(treasure, treasureLocation); + } + + @Override + protected void onStart() + { + changeFloor(Material.SAND, 0, Material.SANDSTONE, 0); + } + + @Override + public void onTick() + { + if (getTicks() % 3 == 0) + { + for (Location location : getTreasureLocation().getChestLocations()) + { + UtilParticle.PlayParticleToAll(ParticleType.BLOCK_DUST.getParticle(Material.OBSIDIAN, 0), location.clone().add(0, 0.4, 0), 0.25F, 0.25F, 0.25F, 0, 3, ViewDist.NORMAL); + } + } + + if (getTicks() > 50) + { + setRunning(false); + } + } + + @Override + protected void onFinish() + { + for (Location location : getTreasureLocation().getChestLocations()) + { + location = location.clone(); + location.setYaw(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, getTreasureLocation().getChest()))); + location.getWorld().playEffect(location, Effect.STEP_SOUND, Material.CHEST); + createChestAt(location, Material.CHEST); + + location.add(0, 1, 0); + + UtilParticle.PlayParticleToAll(ParticleType.LARGE_EXPLODE, location, 0, 0, 0, 0.1F, 1, ViewDist.NORMAL); + } + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/OmegaChestAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/OmegaChestAnimation.java new file mode 100644 index 000000000..7d35237fe --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/OmegaChestAnimation.java @@ -0,0 +1,102 @@ +package mineplex.core.treasure.animation.animations; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.ArmorStand; +import org.bukkit.inventory.ItemStack; + +import mineplex.core.common.skin.SkinData; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureOpenAnimation; +import mineplex.core.treasure.types.Treasure; + +public class OmegaChestAnimation extends TreasureOpenAnimation +{ + + private static final ItemStack HELMET = SkinData.OMEGA_CHEST.getSkull(); + private static final double SHAKE_MAGNITUDE = Math.PI / 35D; + + private int _index; + + public OmegaChestAnimation(Treasure treasure, TreasureLocation treasureLocation) + { + super(treasure, treasureLocation); + } + + @Override + protected void onStart() + { + changeFloor(Material.WOOL, 15, Material.WOOL, 7); + + for (Location location : getTreasureLocation().getChestLocations()) + { + ArmorStand stand = spawnArmourStand(location.clone().subtract(0, 2.5, 0)); + + stand.setHelmet(HELMET); + } + } + + @Override + public void onTick() + { + if (getTicks() % 10 == 0 && _index != _stands.size()) + { + _index++; + } + + int chestY = getTreasureLocation().getChest().getBlockY(); + boolean moved = false; + + for (int i = 0; i < _index; i++) + { + ArmorStand stand = _stands.get(i); + Location location = stand.getLocation(); + + if (location.getY() > chestY - 1) + { + continue; + } + else if (Math.random() < 0.1) + { + stand.getWorld().playSound(location, Sound.ZOMBIE_UNFECT, 1, 0.7F); + } + + moved = true; + location.add(0, 0.05, 0); + stand.teleport(location); + UtilParticle.PlayParticleToAll(ParticleType.BLOCK_DUST.getParticle(Material.OBSIDIAN, 0), stand.getLocation().add(0, 1.5, 0), 0.25F, 0.25F, 0.25F, 0, 3, ViewDist.NORMAL); + + if (location.getY() > chestY - 1) + { + resetArmourStand(stand); + } + else + { + shakeArmourStand(stand, SHAKE_MAGNITUDE); + } + } + + if (!moved) + { + for (ArmorStand stand : _stands) + { + Location location = stand.getLocation().add(0, 1, 0); + UtilParticle.PlayParticleToAll(ParticleType.WITCH_MAGIC, location, 0.5F, 0.5F, 0.5F, 0.5F, 20, ViewDist.NORMAL); + createChestAt(location, Material.ENDER_CHEST); + stand.remove(); + } + + setRunning(false); + } + } + + @Override + protected void onFinish() + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MOBATreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MOBATreasure.java new file mode 100644 index 000000000..3a7c5b62d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MOBATreasure.java @@ -0,0 +1,125 @@ +package mineplex.core.treasure.types; + +import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType; +import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget; +import mineplex.core.gadget.gadgets.morph.moba.MorphAnath; +import mineplex.core.gadget.gadgets.morph.moba.MorphBardolf; +import mineplex.core.gadget.gadgets.morph.moba.MorphBiff; +import mineplex.core.gadget.gadgets.morph.moba.MorphDana; +import mineplex.core.gadget.gadgets.morph.moba.MorphDevon; +import mineplex.core.gadget.gadgets.morph.moba.MorphHattori; +import mineplex.core.gadget.gadgets.morph.moba.MorphIvy; +import mineplex.core.gadget.gadgets.morph.moba.MorphLarissa; +import mineplex.core.gadget.gadgets.morph.moba.MorphRowena; +import mineplex.core.reward.RewardType; +import mineplex.core.reward.rewards.GadgetReward; +import mineplex.core.treasure.animation.animations.MOBAChestAnimation; +import mineplex.core.treasure.animation.animations.TrickOrTreatChestAnimation; +import mineplex.core.treasure.reward.RewardRarity; + +public class MOBATreasure extends Treasure +{ + + public MOBATreasure() + { + super(TreasureType.MOBA); + + setAnimation(treasureLocation -> new MOBAChestAnimation(this, treasureLocation)); + setRewards(RewardType.MOBA); + setRewardsPerChest(4); + setPurchasable(20000); + purchasableFromStore(); + enabledByDefault(); + allowDuplicates(); + } + + @Override + protected void addUncommon(RewardRarity rarity) + { + for (ShopMorphType shopMorphType : ShopMorphType.values()) + { + if (shopMorphType.getRarity() == rarity) + { + addMOBAShopSkin(shopMorphType, rarity, 1); + } + } + + addAllMOBASkins(rarity); + } + + @Override + protected void addRare(RewardRarity rarity) + { + for (ShopMorphType shopMorphType : ShopMorphType.values()) + { + if (shopMorphType.getRarity() == rarity) + { + addMOBAShopSkin(shopMorphType, rarity, 1); + } + } + + addAllMOBASkins(rarity); + } + + @Override + protected void addLegendary(RewardRarity rarity) + { + addGadgetReward(getGadget(MorphHattori.class), rarity, 1); + addGadgetReward(getGadget(MorphDevon.class), rarity, 1); + addGadgetReward(getGadget(MorphAnath.class), rarity, 1); + addGadgetReward(getGadget(MorphDana.class), rarity, 1); + addGadgetReward(getGadget(MorphBardolf.class), rarity, 1); + addGadgetReward(getGadget(MorphRowena.class), rarity, 1); + addGadgetReward(getGadget(MorphLarissa.class), rarity, 1); + addGadgetReward(getGadget(MorphBiff.class), rarity, 1); + addGadgetReward(getGadget(MorphIvy.class), rarity, 1); + + addAllMOBASkins(rarity); + } + + @Override + protected void addMythical(RewardRarity rarity) + { + } + + private void addAllMOBASkins(RewardRarity rarity) + { + HeroSkinGadget.getSkins().forEach((name, dataList) -> + { + if (name.equals("Bardolf-Werewolf")) + { + return; + } + + dataList.forEach(data -> + { + if (data.getRarity() != rarity) + { + return; + } + + addMOBASkin(data.getGadget(), rarity, 1); + }); + }); + } + + public GadgetReward addMOBASkin(HeroSkinGadget gadget, RewardRarity rarity, int weight) + { + return addMOBASkin(gadget, rarity, weight, getShards(rarity)); + } + + public GadgetReward addMOBASkin(HeroSkinGadget gadget, RewardRarity rarity, int weight, int shards) + { + return addGadgetReward(gadget, rarity, weight, shards); + } + + public GadgetReward addMOBAShopSkin(ShopMorphType morphType, RewardRarity rarity, int weight) + { + return addMOBAShopSkin(morphType, rarity, weight, getShards(rarity)); + } + + public GadgetReward addMOBAShopSkin(ShopMorphType morphType, RewardRarity rarity, int weight, int shards) + { + return addGadgetReward(GADGET_MANAGER.getGameCosmeticManager().getGadgetFrom(morphType.getName()), rarity, weight, shards); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MinestrikeTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MinestrikeTreasure.java new file mode 100644 index 000000000..14b28c57e --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MinestrikeTreasure.java @@ -0,0 +1,66 @@ +package mineplex.core.treasure.types; + +import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin; +import mineplex.core.reward.RewardType; +import mineplex.core.reward.rewards.GadgetReward; +import mineplex.core.treasure.animation.animations.MinestrikeChestAnimation; +import mineplex.core.treasure.reward.RewardRarity; + +public class MinestrikeTreasure extends Treasure +{ + + public MinestrikeTreasure() + { + super(TreasureType.MINESTRIKE); + + setAnimation(treasureLocation -> new MinestrikeChestAnimation(this, treasureLocation)); + setRewards(RewardType.MINESTRIKE_CHEST); + setRewardsPerChest(2); + setPurchasable(10000); + purchasableFromStore(); + enabledByDefault(); + allowDuplicates(); + } + + @Override + protected void addRare(RewardRarity rarity) + { + addMineStrikeSkinReward(MineStrikeSkin.SSG_08_Blood_in_the_Water, rarity, 150, 1000); + addMineStrikeSkinReward(MineStrikeSkin.Galil_AR_Eco, rarity, 150, 1000); + addMineStrikeSkinReward(MineStrikeSkin.Nova_Koi, rarity, 100, 1000); + addMineStrikeSkinReward(MineStrikeSkin.Knife_M9_Bayonette_Fade, rarity, 30, 2500); + addMineStrikeSkinReward(MineStrikeSkin.PP_Bizon_Streak, rarity, 150, 1000); + addMineStrikeSkinReward(MineStrikeSkin.CZ75_Auto_Tigris, rarity, 100, 1000); + addMineStrikeSkinReward(MineStrikeSkin.XM1014_Tranquility, rarity, 100, 1000); + addMineStrikeSkinReward(MineStrikeSkin.Desert_Eagle_Golden_Gun, rarity, 30, 2500); + addMineStrikeSkinReward(MineStrikeSkin.P90_Asiimov, rarity, 100, 1000); + addMineStrikeSkinReward(MineStrikeSkin.SG553_Pulse, rarity, 100, 1000); + } + + @Override + protected void addLegendary(RewardRarity rarity) + { + addMineStrikeSkinReward(MineStrikeSkin.Desert_Eagle_Blaze, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.Glock_18_Fade, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.P250_Muertos, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.AK_47_Vulcan, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.Knife_Counter_Terrorist_Sword, rarity, 50, 6500); + addMineStrikeSkinReward(MineStrikeSkin.Knife_Terrorist_Sword, rarity, 50, 6500); + addMineStrikeSkinReward(MineStrikeSkin.Knife_M9_Bayonette_Glass, rarity, 50, 6500); + addMineStrikeSkinReward(MineStrikeSkin.AK_47_Guardian, rarity, 10, 7500); + addMineStrikeSkinReward(MineStrikeSkin.AWP_Asiimov, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.FAMAS_Pulse, rarity, 100, 5000); + addMineStrikeSkinReward(MineStrikeSkin.XM1014_Pig_Gun, rarity, 10, 7500); + addMineStrikeSkinReward(MineStrikeSkin.M4A4_Enderman, rarity, 10, 7500); + } + + @Override + protected void addMythical(RewardRarity rarity) + { + } + + private GadgetReward addMineStrikeSkinReward(MineStrikeSkin skin, RewardRarity rarity, int weight, int shards) + { + return addGadgetReward(GADGET_MANAGER.getGameCosmeticManager().getGadgetFrom(skin.getSkinName()), rarity, weight, shards); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OmegaTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OmegaTreasure.java new file mode 100644 index 000000000..ed5b8f2c1 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OmegaTreasure.java @@ -0,0 +1,399 @@ +package mineplex.core.treasure.types; + +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBlood; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailCandyCane; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailConfetti; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailCupid; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEmerald; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEnchant; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailFreedom; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailFrostLord; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailHalloween; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailRedWhite; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailShadow; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailSpring; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailStorm; +import mineplex.core.gadget.gadgets.balloons.BalloonType; +import mineplex.core.gadget.gadgets.death.DeathBlood; +import mineplex.core.gadget.gadgets.death.DeathCandyCane; +import mineplex.core.gadget.gadgets.death.DeathCupidsBrokenHeart; +import mineplex.core.gadget.gadgets.death.DeathEmerald; +import mineplex.core.gadget.gadgets.death.DeathEnchant; +import mineplex.core.gadget.gadgets.death.DeathFreedom; +import mineplex.core.gadget.gadgets.death.DeathFrostLord; +import mineplex.core.gadget.gadgets.death.DeathMapleLeaf; +import mineplex.core.gadget.gadgets.death.DeathMusic; +import mineplex.core.gadget.gadgets.death.DeathPinataBurst; +import mineplex.core.gadget.gadgets.death.DeathPresentDanger; +import mineplex.core.gadget.gadgets.death.DeathShadow; +import mineplex.core.gadget.gadgets.death.DeathSpring; +import mineplex.core.gadget.gadgets.death.DeathStorm; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBlood; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpCandyCane; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpCupidsWings; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEmerald; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpEnchant; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFirecracker; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFreedom; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpFrostLord; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpHalloween; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMaple; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMusic; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpShadow; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpSpring; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpStorm; +import mineplex.core.gadget.gadgets.hat.HatType; +import mineplex.core.gadget.gadgets.kitselector.HaloKitSelector; +import mineplex.core.gadget.gadgets.kitselector.RainbowDanceKitSelector; +import mineplex.core.gadget.gadgets.kitselector.ShimmeringRingKitSelector; +import mineplex.core.gadget.gadgets.kitselector.SingleParticleKitSelector.SingleParticleSelectors; +import mineplex.core.gadget.gadgets.morph.MorphAwkwardRabbit; +import mineplex.core.gadget.gadgets.morph.MorphBat; +import mineplex.core.gadget.gadgets.morph.MorphBlock; +import mineplex.core.gadget.gadgets.morph.MorphBunny; +import mineplex.core.gadget.gadgets.morph.MorphChicken; +import mineplex.core.gadget.gadgets.morph.MorphCow; +import mineplex.core.gadget.gadgets.morph.MorphEnderman; +import mineplex.core.gadget.gadgets.morph.MorphGrimReaper; +import mineplex.core.gadget.gadgets.morph.MorphLoveDoctor; +import mineplex.core.gadget.gadgets.morph.MorphPumpkinKing; +import mineplex.core.gadget.gadgets.morph.MorphSlime; +import mineplex.core.gadget.gadgets.morph.MorphSnowman; +import mineplex.core.gadget.gadgets.morph.MorphUncleSam; +import mineplex.core.gadget.gadgets.morph.MorphVillager; +import mineplex.core.gadget.gadgets.mount.types.MountBabyReindeer; +import mineplex.core.gadget.gadgets.mount.types.MountCake; +import mineplex.core.gadget.gadgets.mount.types.MountCart; +import mineplex.core.gadget.gadgets.mount.types.MountChicken; +import mineplex.core.gadget.gadgets.mount.types.MountFreedomHorse; +import mineplex.core.gadget.gadgets.mount.types.MountFrost; +import mineplex.core.gadget.gadgets.mount.types.MountLoveTrain; +import mineplex.core.gadget.gadgets.mount.types.MountMule; +import mineplex.core.gadget.gadgets.mount.types.MountNightmareSteed; +import mineplex.core.gadget.gadgets.mount.types.MountSlime; +import mineplex.core.gadget.gadgets.mount.types.MountSpider; +import mineplex.core.gadget.gadgets.mount.types.MountStPatricksHorse; +import mineplex.core.gadget.gadgets.mount.types.MountUndead; +import mineplex.core.gadget.gadgets.mount.types.MountValentinesSheep; +import mineplex.core.gadget.gadgets.mount.types.MountZombie; +import mineplex.core.gadget.gadgets.outfit.freezesuit.OutfitFreezeSuitBoots; +import mineplex.core.gadget.gadgets.outfit.freezesuit.OutfitFreezeSuitChestplate; +import mineplex.core.gadget.gadgets.outfit.freezesuit.OutfitFreezeSuitHelmet; +import mineplex.core.gadget.gadgets.outfit.freezesuit.OutfitFreezeSuitLeggings; +import mineplex.core.gadget.gadgets.outfit.ravesuit.OutfitRaveSuitBoots; +import mineplex.core.gadget.gadgets.outfit.ravesuit.OutfitRaveSuitChestplate; +import mineplex.core.gadget.gadgets.outfit.ravesuit.OutfitRaveSuitHelmet; +import mineplex.core.gadget.gadgets.outfit.ravesuit.OutfitRaveSuitLeggings; +import mineplex.core.gadget.gadgets.outfit.spacesuit.OutfitSpaceSuitBoots; +import mineplex.core.gadget.gadgets.outfit.spacesuit.OutfitSpaceSuitChestplate; +import mineplex.core.gadget.gadgets.outfit.spacesuit.OutfitSpaceSuitHelmet; +import mineplex.core.gadget.gadgets.outfit.spacesuit.OutfitSpaceSuitLeggings; +import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksBoots; +import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksChestplate; +import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksHat; +import mineplex.core.gadget.gadgets.outfit.stpatricks.OutfitStPatricksLeggings; +import mineplex.core.gadget.gadgets.particle.ParticleBlood; +import mineplex.core.gadget.gadgets.particle.ParticleCandyCane; +import mineplex.core.gadget.gadgets.particle.ParticleChristmasTree; +import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes; +import mineplex.core.gadget.gadgets.particle.ParticleEmerald; +import mineplex.core.gadget.gadgets.particle.ParticleEnchant; +import mineplex.core.gadget.gadgets.particle.ParticleFairy; +import mineplex.core.gadget.gadgets.particle.ParticleFireRings; +import mineplex.core.gadget.gadgets.particle.ParticleFoot; +import mineplex.core.gadget.gadgets.particle.ParticleFrostLord; +import mineplex.core.gadget.gadgets.particle.ParticleHeart; +import mineplex.core.gadget.gadgets.particle.ParticleMusic; +import mineplex.core.gadget.gadgets.particle.ParticlePartyTime; +import mineplex.core.gadget.gadgets.particle.ParticleRain; +import mineplex.core.gadget.gadgets.particle.ParticleWingsAngel; +import mineplex.core.gadget.gadgets.particle.ParticleWingsDemons; +import mineplex.core.gadget.gadgets.particle.ParticleWingsInfernal; +import mineplex.core.gadget.gadgets.particle.ParticleWingsLove; +import mineplex.core.gadget.gadgets.particle.ParticleWingsPixie; +import mineplex.core.gadget.gadgets.particle.ParticleYinYang; +import mineplex.core.gadget.gadgets.particle.freedom.ParticleAuraNiceness; +import mineplex.core.gadget.gadgets.particle.freedom.ParticleCanadian; +import mineplex.core.gadget.gadgets.particle.freedom.ParticleFreedom; +import mineplex.core.gadget.gadgets.particle.freedom.ParticleFreedomFireworks; +import mineplex.core.gadget.gadgets.particle.freedom.ParticleStarSpangled; +import mineplex.core.gadget.gadgets.particle.spring.ParticleSpringHalo; +import mineplex.core.gadget.gadgets.taunts.BlowAKissTaunt; +import mineplex.core.gadget.gadgets.taunts.RainbowTaunt; +import mineplex.core.gadget.gadgets.wineffect.WinEffectBabyChicken; +import mineplex.core.gadget.gadgets.wineffect.WinEffectFlames; +import mineplex.core.gadget.gadgets.wineffect.WinEffectHalloween; +import mineplex.core.gadget.gadgets.wineffect.WinEffectLavaTrap; +import mineplex.core.gadget.gadgets.wineffect.WinEffectLightningStrike; +import mineplex.core.gadget.gadgets.wineffect.WinEffectMrPunchMan; +import mineplex.core.gadget.gadgets.wineffect.WinEffectRiseOfTheElderGuardian; +import mineplex.core.gadget.gadgets.wineffect.WinEffectSnowTrails; +import mineplex.core.pet.PetType; +import mineplex.core.reward.RewardType; +import mineplex.core.treasure.animation.animations.OmegaChestAnimation; +import mineplex.core.treasure.reward.RewardRarity; + +public class OmegaTreasure extends Treasure +{ + + public OmegaTreasure() + { + super(TreasureType.OMEGA); + + setAnimation(treasureLocation -> new OmegaChestAnimation(this, treasureLocation)); + setRewards(RewardType.OMEGA_CHEST); + setRewardsPerChest(1); + enabledByDefault(); + } + + @Override + protected void addUncommon(RewardRarity rarity) + { + addGadgetReward(getGadget(ArrowTrailRedWhite.class), rarity, 2); + addGadgetReward(getGadget(ArrowTrailFreedom.class), rarity, 2); + + addMusicReward("Blocks Disc", rarity, 25); + addMusicReward("Cat Disc", rarity, 25); + addMusicReward("Chirp Disc", rarity, 25); + addMusicReward("Far Disc", rarity, 25); + addMusicReward("Mall Disc", rarity, 25); + addMusicReward("Mellohi Disc", rarity, 25); + addMusicReward("Stal Disc", rarity, 25); + addMusicReward("Strad Disc", rarity, 25); + addMusicReward("Wait Disc", rarity, 25); + addMusicReward("Ward Disc", rarity, 25); + + addGadgetReward(getGadget(ArrowTrailHalloween.class), rarity, 50); + + addHatReward(HatType.PUMPKIN, rarity, 75); + addHatReward(HatType.PRESENT, rarity, 5); + addHatReward(HatType.SNOWMAN, rarity, 5); + + addBalloonReward(BalloonType.BABY_COW, rarity, 10, 100); + addBalloonReward(BalloonType.BABY_PIG, rarity, 10, 100); + addBalloonReward(BalloonType.BABY_SHEEP, rarity, 15, 100); + } + + @Override + protected void addRare(RewardRarity rarity) + { + addTitleReward("shrug", rarity, 10, 500); + addTitleReward("tableflip", rarity, 10, 500); + addTitleReward("tablerespecter", rarity, 15, 500); + addTitleReward("tableflip-disgusted", rarity, 15, 500); + addTitleReward("tableflip-enraged", rarity, 15, 500); + addTitleReward("tableflip-riot", rarity, 10, 500); + addTitleReward("teddy-bear", rarity, 10, 500); + addTitleReward("disgust", rarity, 10, 500); + addTitleReward("old-man", rarity, 5, 500); + addTitleReward("jake", rarity, 5, 500); + addTitleReward("finn", rarity, 5, 500); + addTitleReward("finn-and-jake", rarity, 5, 500); + addTitleReward("boxer", rarity, 5, 500); + addTitleReward("zoidberg", rarity, 5, 500); + + addGadgetReward(getGadget(DoubleJumpFreedom.class), rarity, 5); + addGadgetReward(getGadget(DoubleJumpBlood.class), rarity, 50); + addGadgetReward(getGadget(DoubleJumpFirecracker.class), rarity, 33); + addGadgetReward(getGadget(DoubleJumpEmerald.class), rarity, 25); + addGadgetReward(getGadget(DoubleJumpMusic.class), rarity, 20); + addGadgetReward(getGadget(DoubleJumpShadow.class), rarity, 15); + addGadgetReward(getGadget(DoubleJumpStorm.class), rarity, 30); + addGadgetReward(getGadget(DoubleJumpCandyCane.class), rarity, 20); + addGadgetReward(getGadget(DoubleJumpHalloween.class), rarity, 50); + addGadgetReward(getGadget(DoubleJumpSpring.class), rarity, 40); + addGadgetReward(getGadget(DoubleJumpFreedom.class), rarity, 50); + addGadgetReward(getGadget(DoubleJumpMaple.class), rarity, 50); + + addGadgetReward(getGadget(DeathFreedom.class), rarity, 15); + addGadgetReward(getGadget(DeathStorm.class), rarity, 30); + addGadgetReward(getGadget(DeathBlood.class), rarity, 50); + addGadgetReward(getGadget(DeathEmerald.class), rarity, 25); + addGadgetReward(getGadget(DeathMusic.class), rarity, 20); + addGadgetReward(getGadget(DeathPinataBurst.class), rarity, 27); + addGadgetReward(getGadget(DeathShadow.class), rarity, 15); + addGadgetReward(getGadget(DeathCandyCane.class), rarity, 25); + addGadgetReward(getGadget(DeathSpring.class), rarity, 60); + addGadgetReward(getGadget(DeathMapleLeaf.class), rarity, 10); + + addGadgetReward(getGadget(ArrowTrailFreedom.class), rarity, 10); + addGadgetReward(getGadget(ArrowTrailConfetti.class), rarity, 27); + addGadgetReward(getGadget(ArrowTrailBlood.class), rarity, 50); + addGadgetReward(getGadget(ArrowTrailEmerald.class), rarity, 25); + addGadgetReward(getGadget(ArrowTrailMusic.class), rarity, 27); + addGadgetReward(getGadget(ArrowTrailStorm.class), rarity, 30); + addGadgetReward(getGadget(ArrowTrailShadow.class), rarity, 15); + addGadgetReward(getGadget(ArrowTrailCandyCane.class), rarity, 10); + addGadgetReward(getGadget(ArrowTrailSpring.class), rarity, 60); + + addHatReward(HatType.UNCLE_SAM, rarity, 25); + addHatReward(HatType.COMPANION_BLOCK, rarity, 15); + addHatReward(HatType.LOVESTRUCK, rarity, 20); + addHatReward(HatType.SECRET_PACKAGE, rarity, 25); + addHatReward(HatType.TEDDY_BEAR, rarity, 25); + addHatReward(HatType.SANTA, rarity, 25); + addHatReward(HatType.RUDOLPH, rarity, 25); + addHatReward(HatType.COAL, rarity, 25); + addHatReward(HatType.AMERICA, rarity, 50); + addHatReward(HatType.CANADA, rarity, 50); + + addGadgetReward(getGadget(MorphChicken.class), rarity, 50); + addGadgetReward(getGadget(MorphCow.class), rarity, 167); + addGadgetReward(getGadget(MorphEnderman.class), rarity, 33); + addGadgetReward(getGadget(MorphVillager.class), rarity, 83); + + addGadgetReward(getGadget(WinEffectFlames.class), rarity, 100); + addGadgetReward(getGadget(WinEffectSnowTrails.class), rarity, 100); + + addGadgetReward(getGadget(MountFrost.class), rarity, 50); + addGadgetReward(getGadget(MountCart.class), rarity, 100); + addGadgetReward(getGadget(MountMule.class), rarity, 200); + addGadgetReward(getGadget(MountSlime.class), rarity, 67); + addGadgetReward(getGadget(MountLoveTrain.class), rarity, 20); + + addGadgetReward(getGadget(OutfitRaveSuitBoots.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitChestplate.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitLeggings.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitHelmet.class), rarity, 30); + addGadgetReward(getGadget(OutfitSpaceSuitBoots.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitChestplate.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitLeggings.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitHelmet.class), rarity, 50); + addGadgetReward(getGadget(OutfitStPatricksChestplate.class), rarity, 50); + addGadgetReward(getGadget(OutfitStPatricksLeggings.class), rarity, 50); + addGadgetReward(getGadget(OutfitStPatricksBoots.class), rarity, 50); + addGadgetReward(getGadget(OutfitFreezeSuitChestplate.class), rarity, 50); + addGadgetReward(getGadget(OutfitFreezeSuitLeggings.class), rarity, 50); + addGadgetReward(getGadget(OutfitFreezeSuitBoots.class), rarity, 50); + + addGadgetReward(getGadget(ParticleCandyCane.class), rarity, 20); + addGadgetReward(getGadget(ParticleChristmasTree.class), rarity, 40); + + addBalloonReward(BalloonType.BABY_ZOMBIE, rarity, 25, 500); + addBalloonReward(BalloonType.BABY_MUSHROOM, rarity, 50, 500); + addBalloonReward(BalloonType.BABY_OCELOT, rarity, 50, 500); + addBalloonReward(BalloonType.BABY_WOLF, rarity, 75, 500); + addBalloonReward(BalloonType.BABY_VILLAGER, rarity, 25, 500); + addBalloonReward(BalloonType.BABY_SLIME, rarity, 25, 500); + addBalloonReward(BalloonType.BAT, rarity, 50, 500); + + addGadgetReward(getGadget(HaloKitSelector.class), rarity, 100); + addGadgetReward(getGadget(RainbowDanceKitSelector.class), rarity, 100); + addGadgetReward(getGadget(ShimmeringRingKitSelector.class), rarity, 100); + addGadgetReward(getKitSelector(SingleParticleSelectors.FLAMES_OF_FURY), rarity, 100); + } + + @Override + protected void addLegendary(RewardRarity rarity) + { + addTitleReward("ayyye", rarity, 25, 500); + addTitleReward("ameno", rarity, 15, 5000); + addTitleReward("magician", rarity, 25, 5000); + addTitleReward("fireball", rarity, 75, 5000); + addTitleReward("magic-missile", rarity, 75, 5000); + addTitleReward("pewpewpew", rarity, 75, 5000); + addTitleReward("stardust", rarity, 60, 5000); + addTitleReward("blow-a-kiss", rarity, 60, 5000); + addTitleReward("cool-guy", rarity, 60, 5000); + addTitleReward("deal-with-it", rarity, 60, 5000); + addTitleReward("party-time", rarity, 55, 5000); + addTitleReward("lalala", rarity, 30, 5000); + addTitleReward("gotta-go", rarity, 30, 5000); + addTitleReward("whaaat", rarity, 30, 5000); + + addPetReward(PetType.VILLAGER, rarity, 1); + addPetReward(PetType.ZOMBIE, rarity, 10); + addPetReward(PetType.PIG_ZOMBIE, rarity, 1); + addPetReward(PetType.BLAZE, rarity, 2); + addPetReward(PetType.RABBIT, rarity, 10); + addPetReward(PetType.KILLER_BUNNY, rarity, 3); + addPetReward(PetType.CUPID_PET, rarity, 40); + addPetReward(PetType.LEPRECHAUN, rarity, 8); + + addGadgetReward(getGadget(MorphBunny.class), rarity, 1); + addGadgetReward(getGadget(MorphUncleSam.class), rarity, 5); + addGadgetReward(getGadget(MorphPumpkinKing.class), rarity, 1); + addGadgetReward(getGadget(MorphBat.class), rarity, 25); + addGadgetReward(getGadget(MorphSlime.class), rarity, 10); + addGadgetReward(getGadget(MorphBlock.class), rarity, 20); + addGadgetReward(getGadget(MorphSnowman.class), rarity, 10); + addGadgetReward(getGadget(MorphGrimReaper.class), rarity, 25); + addGadgetReward(getGadget(MorphAwkwardRabbit.class), rarity, 30); + addGadgetReward(getGadget(MorphLoveDoctor.class), rarity, 40); + + addGadgetReward(getGadget(ParticleFreedom.class), rarity, 15); + addGadgetReward(getGadget(ParticleWingsAngel.class), rarity, 15); + addGadgetReward(getGadget(ParticleBlood.class), rarity, 10); + addGadgetReward(getGadget(ParticleWingsDemons.class), rarity, 15); + addGadgetReward(getGadget(ParticleEnchant.class), rarity, 25); + addGadgetReward(getGadget(ParticleFairy.class), rarity, 4); + addGadgetReward(getGadget(ParticleFireRings.class), rarity, 17); + addGadgetReward(getGadget(ParticleEmerald.class), rarity, 8); + addGadgetReward(getGadget(ParticleHeart.class), rarity, 2); + addGadgetReward(getGadget(ParticleWingsInfernal.class), rarity, 4); + addGadgetReward(getGadget(ParticleMusic.class), rarity, 15); + addGadgetReward(getGadget(ParticleWingsPixie.class), rarity, 4); + addGadgetReward(getGadget(ParticleRain.class), rarity, 13); + addGadgetReward(getGadget(ParticleFoot.class), rarity, 33); + addGadgetReward(getGadget(ParticleYinYang.class), rarity, 20); + addGadgetReward(getGadget(ParticleCoalFumes.class), rarity, 1); + addGadgetReward(getGadget(ParticleFrostLord.class), rarity, 10); + addGadgetReward(getGadget(ParticlePartyTime.class), rarity, 25); + addGadgetReward(getGadget(ParticleSpringHalo.class), rarity, 8); + addGadgetReward(getGadget(ParticleWingsLove.class), rarity, 10); + addGadgetReward(getGadget(ParticleFreedomFireworks.class), rarity, 24); + addGadgetReward(getGadget(ParticleAuraNiceness.class), rarity, 4); + addGadgetReward(getGadget(ParticleCanadian.class), rarity, 1); + addGadgetReward(getGadget(ParticleStarSpangled.class), rarity, 1); + + addGadgetReward(getGadget(MountFreedomHorse.class), rarity, 5); + addGadgetReward(getGadget(MountZombie.class), rarity, 1); + addGadgetReward(getGadget(MountSpider.class), rarity, 1); + addGadgetReward(getGadget(MountUndead.class), rarity, 1); + addGadgetReward(getGadget(MountValentinesSheep.class), rarity, 20); + addGadgetReward(getGadget(MountBabyReindeer.class), rarity, 1); + addGadgetReward(getGadget(MountNightmareSteed.class), rarity, 10); + addGadgetReward(getGadget(MountChicken.class), rarity, 5); + addGadgetReward(getGadget(MountCake.class), rarity, 10); + addGadgetReward(getGadget(MountStPatricksHorse.class), rarity, 3); + + addGadgetReward(getGadget(WinEffectBabyChicken.class), rarity, 10); + addGadgetReward(getGadget(WinEffectLavaTrap.class), rarity, 20); + addGadgetReward(getGadget(WinEffectRiseOfTheElderGuardian.class), rarity, 4); + addGadgetReward(getGadget(WinEffectLightningStrike.class), rarity, 20); + addGadgetReward(getGadget(WinEffectMrPunchMan.class), rarity, 33); + addGadgetReward(getGadget(WinEffectHalloween.class), rarity, 75); + + addGadgetReward(getGadget(DeathEnchant.class), rarity, 10); + addGadgetReward(getGadget(DeathCupidsBrokenHeart.class), rarity, 25); + addGadgetReward(getGadget(DeathFrostLord.class), rarity, 15); + addGadgetReward(getGadget(DeathPresentDanger.class), rarity, 27); + + addGadgetReward(getGadget(DoubleJumpEnchant.class), rarity, 10); + addGadgetReward(getGadget(DoubleJumpCupidsWings.class), rarity, 5); + addGadgetReward(getGadget(DoubleJumpFrostLord.class), rarity, 10); + + addGadgetReward(getGadget(ArrowTrailEnchant.class), rarity, 10); + addGadgetReward(getGadget(ArrowTrailFrostLord.class), rarity, 20); + addGadgetReward(getGadget(ArrowTrailCupid.class), rarity, 15); + + addHatReward(HatType.GRINCH, rarity, 25); + + addGadgetReward(getGadget(OutfitStPatricksHat.class), rarity, 5); + addGadgetReward(getGadget(OutfitFreezeSuitHelmet.class), rarity, 2); + + addBalloonReward(BalloonType.SQUID, rarity, 10, 5000); + addBalloonReward(BalloonType.SILVERFISH, rarity, 30, 5000); + addBalloonReward(BalloonType.GUARDIAN, rarity, 30, 5000); + addBalloonReward(BalloonType.EMERALD_BLOCK, rarity, 15, 5000); + + addGadgetReward(getGadget(BlowAKissTaunt.class), rarity, 7); + addGadgetReward(getGadget(RainbowTaunt.class), rarity, 1); + } + + @Override + protected void addMythical(RewardRarity rarity) + { + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/Treasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/Treasure.java index 997c47052..0e1c35949 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/Treasure.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/Treasure.java @@ -13,6 +13,7 @@ import mineplex.core.Managers; import mineplex.core.common.util.C; import mineplex.core.gadget.GadgetManager; import mineplex.core.gadget.gadgets.balloons.BalloonType; +import mineplex.core.gadget.gadgets.hat.HatType; import mineplex.core.gadget.gadgets.kitselector.SingleParticleKitSelector; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; @@ -51,7 +52,7 @@ public class Treasure return TREASURE_REWARD_MANAGER; } - private static final GadgetManager GADGET_MANAGER = Managers.require(GadgetManager.class); + protected static final GadgetManager GADGET_MANAGER = Managers.require(GadgetManager.class); private static final TrackManager TRACK_MANAGER = Managers.require(TrackManager.class); private final TreasureType _treasureType; @@ -288,12 +289,22 @@ public class Treasure return reward; } + protected GadgetReward addHatReward(HatType type, RewardRarity rarity, int weight) + { + return addHatReward(type, rarity, weight, getShards(rarity)); + } + + protected GadgetReward addHatReward(HatType type, RewardRarity rarity, int weight, int shards) + { + return addGadgetReward(GADGET_MANAGER.getHatGadget(type), rarity, weight, shards); + } + protected SingleParticleKitSelector getKitSelector(SingleParticleKitSelector.SingleParticleSelectors singleParticleSelectors) { return GADGET_MANAGER.getSingleParticleKitSelector(singleParticleSelectors); } - private int getShards(RewardRarity rarity) + protected int getShards(RewardRarity rarity) { return SHARD_WORTH.getOrDefault(rarity, 0); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java index f191de3d7..a26dc6c61 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java @@ -3,6 +3,7 @@ package mineplex.core.treasure.types; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import mineplex.core.common.skin.SkinData; import mineplex.core.common.util.C; public enum TreasureType @@ -50,6 +51,31 @@ public enum TreasureType "in the depths, always bringing a new", "treasure from the darkness." ), + OMEGA( + C.cAqua + "Omega Chest", + "Omega Chest", + "Omega", + SkinData.OMEGA_CHEST.getSkull(), + "The most powerful of all chests,", + "it is able to go back in time to find", + "loot that has been lost..." + ), + MINESTRIKE( + C.cGold + "MineStrike Treasure", + "Minestrike Chest", + "MinestrikeChest", + new ItemStack(Material.TNT), + "The Minestrike Chest is the only place to get", + "the unique skins for Minestrike weapons!" + ), + MOBA( + C.cAqua + "Heroes of GWEN Treasure", + "HOG Chest", + "HOGChest", + new ItemStack(Material.PRISMARINE), + "Heroes of GWEN exclusive cosmetics!", + "Each chest contains 4 exclusive items to the game!" + ), TRICK_OR_TREAT( C.cGold + "Trick or Treat Box", "Trick or Treat Chest", diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TrickOrTreatTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TrickOrTreatTreasure.java index 0ff844d12..5b1b024b0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TrickOrTreatTreasure.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TrickOrTreatTreasure.java @@ -3,6 +3,8 @@ package mineplex.core.treasure.types; import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailHalloween; import mineplex.core.gadget.gadgets.death.DeathHalloween; import mineplex.core.gadget.gadgets.doublejump.DoubleJumpHalloween; +import mineplex.core.gadget.gadgets.kitselector.HalloweenKitSelector; +import mineplex.core.gadget.gadgets.kitselector.SingleParticleKitSelector.SingleParticleSelectors; import mineplex.core.gadget.gadgets.particle.ParticleHalloween; import mineplex.core.gadget.gadgets.taunts.InfernalTaunt; import mineplex.core.reward.RewardType; @@ -30,6 +32,7 @@ public class TrickOrTreatTreasure extends Treasure addGadgetReward(getGadget(ArrowTrailHalloween.class), rarity, 10); addGadgetReward(getGadget(DeathHalloween.class), rarity, 10); addGadgetReward(getGadget(DoubleJumpHalloween.class), rarity, 10); + addGadgetReward(getGadget(HalloweenKitSelector.class), rarity, 10); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/TreasurePage.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/TreasurePage.java index 75b343b5f..fac2e156d 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/TreasurePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/TreasurePage.java @@ -63,10 +63,9 @@ public class TreasurePage extends ShopPageBase lore.add(C.cGray + description); } - lore.add(""); - if (treasure.isPurchasable()) { + lore.add(""); lore.addAll(treasure.getPurchaseMethods()); } @@ -128,7 +127,7 @@ public class TreasurePage extends ShopPageBase } } // Purchase - else + else if (_treasure.isPurchasable()) { getShop().openPageForPlayer(player, new PurchaseTreasurePage(getPlugin(), getShop(), getPlayer(), _treasure, TreasurePage.this)); } diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java index 66bdcdef1..6405c5544 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/Hub.java @@ -144,7 +144,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( blockRestore, clientManager, incognito, donationManager, inventoryManager, disguiseManager, portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, hologramManager, npcManager,packetHandler, punish, serverStatusManager, thankManager, boosterManager, castleManager); + HubManager hubManager = new HubManager(clientManager, donationManager, inventoryManager, disguiseManager, portal, partyManager, preferenceManager, petManager, pollManager, statsManager, achievementManager, hologramManager, npcManager, punish, thankManager, boosterManager); QueueManager queueManager = new QueueManager(this, clientManager, donationManager, eloManager, partyManager); new ServerManager(this, clientManager, donationManager, portal, partyManager, serverStatusManager, hubManager, queueManager, boosterManager); diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TemporaryGemHuntersServerSender.java b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TemporaryGemHuntersServerSender.java index a1e3e9d36..9921472fb 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TemporaryGemHuntersServerSender.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/modules/TemporaryGemHuntersServerSender.java @@ -9,6 +9,7 @@ import org.bukkit.event.EventHandler; import mineplex.core.MiniPlugin; import mineplex.core.common.util.UtilTime; +import mineplex.core.newnpc.event.NPCInteractEvent; import mineplex.core.npc.event.NpcInteractEntityEvent; import mineplex.core.portal.Intent; import mineplex.core.portal.Portal; @@ -70,9 +71,9 @@ public class TemporaryGemHuntersServerSender extends MiniPlugin } @EventHandler - public void onUseNPC(NpcInteractEntityEvent event) + public void onUseNPC(NPCInteractEvent event) { - if (event.getNpc().getName().contains("Gem Hunters")) + if (event.getNpc().getMetadata().equals("GAME_Gem Hunters")) { java.util.Optional info = _servers.entrySet().stream() // Ignore the type noise here; it's temporary diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/parkour/ParkourManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/parkour/ParkourManager.java index 3e096d356..b9ef6bee8 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/parkour/ParkourManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/parkour/ParkourManager.java @@ -58,26 +58,26 @@ public class ParkourManager extends MiniPlugin _attempts = new HashMap<>(); _parkours = new HashSet<>(); - _parkours.add(new ParkourData(this, "House")); - _parkours.add(new WaterParkourData(this)); - - List snakes = new ArrayList<>(); - List path = _worldData.getCustomLocation(String.valueOf(Material.QUARTZ_ORE.getId())); - - for (Location head : _worldData.getDataLocation("LIGHT_BLUE")) - { - snakes.add(new Snake(head, path)); - } - - _parkours.add(new SnakeParkourData(this, snakes)); - - NewNPCManager npcManager = require(NewNPCManager.class); - - for (ParkourData data : _parkours) - { - npcManager.spawnNPCs(data.getKey() + " START", null); - npcManager.spawnNPCs(data.getKey() + " END", null); - } +// _parkours.add(new ParkourData(this, "House")); +// _parkours.add(new WaterParkourData(this)); +// +// List snakes = new ArrayList<>(); +// List path = _worldData.getCustomLocation(String.valueOf(Material.QUARTZ_ORE.getId())); +// +// for (Location head : _worldData.getDataLocation("LIGHT_BLUE")) +// { +// snakes.add(new Snake(head, path)); +// } +// +// _parkours.add(new SnakeParkourData(this, snakes)); +// +// NewNPCManager npcManager = require(NewNPCManager.class); +// +// for (ParkourData data : _parkours) +// { +// npcManager.spawnNPCs(data.getKey() + " START", null); +// npcManager.spawnNPCs(data.getKey() + " END", null); +// } } public boolean isParkourMode(Player player) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/plugin/HubPlugin.java b/Plugins/Mineplex.Hub/src/mineplex/hub/plugin/HubPlugin.java index b54e6ef8b..73510e3bf 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/plugin/HubPlugin.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/plugin/HubPlugin.java @@ -51,8 +51,8 @@ public class HubPlugin extends MiniPlugin protected void addHubGames() { - addHubGame(new Tron(_hubGameManager)); - addHubGame(new Duels(_hubGameManager)); + //addHubGame(new Tron(_hubGameManager)); + //addHubGame(new Duels(_hubGameManager)); } protected final void addHubGame(HubGame game) diff --git a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java index 13dacc1d8..7cede52c9 100644 --- a/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java +++ b/Plugins/Mineplex.Hub/src/mineplex/hub/server/ServerManager.java @@ -19,7 +19,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.entity.EntityPortalEnterEvent; import org.bukkit.event.entity.EntityPortalEvent; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerPortalEvent; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; @@ -40,7 +39,8 @@ import mineplex.core.common.util.UtilPlayer; import mineplex.core.common.util.UtilTime; import mineplex.core.common.util.UtilTime.TimeUnit; import mineplex.core.donation.DonationManager; -import mineplex.core.itemstack.ItemStackFactory; +import mineplex.core.newnpc.NewNPCManager; +import mineplex.core.newnpc.event.NPCInteractEvent; import mineplex.core.party.PartyManager; import mineplex.core.party.event.PartySelectServerEvent; import mineplex.core.portal.Intent; @@ -71,10 +71,10 @@ public class ServerManager extends MiniPlugin private static final Random random = new Random(); - public final int TOP_SERVERS = 3; // The number of top contending servers for auto-joining games - public final int MIN_SLOTS_REQUIRED = 12; // The number of slots the max server must have for auto-join + public final int TOP_SERVERS = 3; // The number of top contending servers for auto-joining games + public final int MIN_SLOTS_REQUIRED = 12; // The number of slots the max server must have for auto-join - public final long QUEUE_COOLDOWN = 2000; // Cooldown (in milliseconds) between queueing again for players + public final long QUEUE_COOLDOWN = 2000; // Cooldown (in milliseconds) between queueing again for players private CoreClientManager _clientManager; private DonationManager _donationManager; private Portal _portal; @@ -91,20 +91,20 @@ public class ServerManager extends MiniPlugin private NautHashMap _serverInfoMap = new NautHashMap(); private NautHashMap _serverUpdate = new NautHashMap(); private NautHashMap _portalToServerKey = new NautHashMap(); - + private ClansServerShop _clansShop; private QuickShop _quickShop; private LobbyShop _lobbyShop; - + private boolean _alternateUpdateFire = false; private boolean _retrieving = false; private long _lastRetrieve = 0; - + public ServerManager(JavaPlugin plugin, CoreClientManager clientManager, DonationManager donationManager, Portal portal, PartyManager partyManager, ServerStatusManager statusManager, HubManager hubManager, QueueManager queueManager, BoosterManager boosterManager) { super("Server Manager", plugin); - + _clientManager = clientManager; _donationManager = donationManager; _portal = portal; @@ -112,20 +112,22 @@ public class ServerManager extends MiniPlugin _statusManager = statusManager; _hubManager = hubManager; _boosterManager = boosterManager; - + plugin.getServer().getMessenger().registerOutgoingPluginChannel(plugin, "BungeeCord"); - + loadServers(); - + _quickShop = new QuickShop(this, clientManager, donationManager, "Quick Menu"); _lobbyShop = new LobbyShop(this, clientManager, donationManager, "Lobby Menu"); - + // TODO: Find more appropriate place to initialize Clans server shop? _clansShop = new ClansServerShop(this, _clientManager, _donationManager); - + + require(NewNPCManager.class).spawnNPCs("GAME_", null); + generatePermissions(); } - + private void generatePermissions() { @@ -133,19 +135,41 @@ public class ServerManager extends MiniPlugin PermissionGroup.CONTENT.setPermission(Perm.FEATURE_SERVER, true, true); PermissionGroup.BUILDER.setPermission(Perm.FEATURE_SERVER, true, true); } - + + @EventHandler + public void npcInteract(NPCInteractEvent event) + { + String metadata = event.getNpc().getMetadata(); + String[] split = metadata.split("_"); + + if (split.length < 2) + { + return; + } + + String group = split[1]; + + _serverNpcShopMap.entrySet().forEach(entry -> + { + if (group.equals(entry.getKey())) + { + entry.getValue().attemptShopOpen(event.getPlayer()); + } + }); + } + @EventHandler(priority = EventPriority.LOW) public void playerPortalEvent(PlayerPortalEvent event) { event.setCancelled(true); } - + @EventHandler(priority = EventPriority.LOW) public void entityPortalEvent(EntityPortalEvent event) { event.setCancelled(true); } - + @EventHandler(priority = EventPriority.LOW) public void playerCheckPortalEvent(EntityPortalEnterEvent event) { @@ -153,22 +177,24 @@ public class ServerManager extends MiniPlugin { if (event.getEntity() instanceof LivingEntity) UtilAction.velocity(event.getEntity(), UtilAlg.getTrajectory(event.getEntity().getLocation(), _hubManager.GetSpawn()), 1, true, 0.8, 0, 1, true); - + return; } - - Player player = (Player)event.getEntity(); - if(!player.getWorld().getName().equalsIgnoreCase("world")) + Player player = (Player) event.getEntity(); + + if (!player.getWorld().getName().equalsIgnoreCase("world")) { return; } player.teleport(_hubManager.GetSpawn()); - runSyncLater(() -> {_quickShop.attemptShopOpen(player);}, 3L); + runSyncLater(() -> { + _quickShop.attemptShopOpen(player); + }, 3L); } - + @EventHandler public void checkQueuePrompts(UpdateEvent event) { @@ -193,7 +219,7 @@ public class ServerManager extends MiniPlugin } */ } - + @EventHandler public void playerInteract(PlayerInteractEvent event) { @@ -216,23 +242,23 @@ public class ServerManager extends MiniPlugin { _serverKeyInfoMap.put(serverGroup.getPrefix(), new HashSet()); } - + public void addServerNpc(ServerGroup serverGroup) { _serverNpcShopMap.put(serverGroup.getServerNpcName(), new ServerNpcShop(this, _clientManager, _donationManager, serverGroup)); } - + public void removeServerNpc(String serverNpcName) { Set mappedServers = _serverKeyInfoMap.remove(serverNpcName); _serverNpcShopMap.remove(serverNpcName); - + if (mappedServers != null) { for (ServerInfo mappedServer : mappedServers) { boolean isMappedElseWhere = false; - + for (String key : _serverKeyInfoMap.keySet()) { for (ServerInfo value : _serverKeyInfoMap.get(key)) @@ -243,27 +269,27 @@ public class ServerManager extends MiniPlugin break; } } - + if (isMappedElseWhere) break; } - + if (!isMappedElseWhere) _serverInfoMap.remove(mappedServer.Name); } } } - + public Collection getServerList(String serverKey) { return _serverKeyInfoMap.get(serverKey); } - + public Set getAllServers() { return _serverInfoMap.keySet(); } - + public ServerInfo getServerInfo(String serverName) { return _serverInfoMap.get(serverName); @@ -280,28 +306,28 @@ public class ServerManager extends MiniPlugin { if (event.getType() != UpdateType.SEC) return; - + _quickShop.UpdatePages(); - + for (ServerNpcShop shop : _serverNpcShopMap.values()) { shop.UpdatePages(); } } - + @EventHandler public void updateServers(UpdateEvent event) { if (event.getType() != UpdateType.SEC || (_retrieving && System.currentTimeMillis() - _lastRetrieve <= 5000)) return; - + _alternateUpdateFire = !_alternateUpdateFire; - + if (!_alternateUpdateFire) return; - + _retrieving = true; - + _statusManager.retrieveServerGroups(new Callback>() { public void run(final Collection serverGroups) @@ -406,7 +432,7 @@ public class ServerManager extends MiniPlugin }); } }); - + updateCooldowns(); } @@ -420,11 +446,11 @@ public class ServerManager extends MiniPlugin UtilPlayer.message(caller, F.help("/servernpc listnpcs", "Lists all server npcs.", ChatColor.DARK_RED)); UtilPlayer.message(caller, F.help("/servernpc listservers ", "Lists all servers.", ChatColor.DARK_RED)); UtilPlayer.message(caller, F.help("/servernpc listoffline", "Shows all servers offline.", ChatColor.DARK_RED)); - + if (message != null) UtilPlayer.message(caller, F.main(_moduleName, ChatColor.RED + message)); } - + public void help(Player caller) { help(caller, null); @@ -434,7 +460,7 @@ public class ServerManager extends MiniPlugin { return _partyManager; } - + public void selectServer(Player player, ServerInfo serverInfo) { player.leaveVehicle(); @@ -442,11 +468,12 @@ public class ServerManager extends MiniPlugin _portal.sendPlayerToServer(player, serverInfo.Name, Intent.PLAYER_REQUEST); } - + /** * Select a {@code serverType} for a {@code player} that wishes to automatically join the best server * available for that server type. - * @param player - the player hoping to select a server + * + * @param player - the player hoping to select a server * @param serverType - the name of the type of server to be joined */ public void selectServer(Player player, String serverType) @@ -455,7 +482,7 @@ public class ServerManager extends MiniPlugin { return; } - + ServerInfo bestServer = getBestServer(player, serverType); if (bestServer != null) @@ -464,37 +491,37 @@ public class ServerManager extends MiniPlugin addCooldown(player); } } - + private boolean isOnCooldown(Player player) { if (_queueCooldowns.containsKey(player.getName())) { long elapsed = System.currentTimeMillis() - _queueCooldowns.get(player.getName()); - + return elapsed < QUEUE_COOLDOWN; } - + return false; } - + private void addCooldown(Player player) { _queueCooldowns.put(player.getName(), System.currentTimeMillis()); } - + private void updateCooldowns() { - for (Iterator playerIterator = _queueCooldowns.keySet().iterator(); playerIterator.hasNext();) + for (Iterator playerIterator = _queueCooldowns.keySet().iterator(); playerIterator.hasNext(); ) { Player player = Bukkit.getPlayer(playerIterator.next()); - + if (player == null || !isOnCooldown(player)) { playerIterator.remove(); } } } - + /** * @param serverKey - the type of server that should be fetched * @return the best server that a new player should join according to a {@code serverType} constraint. @@ -503,17 +530,17 @@ public class ServerManager extends MiniPlugin { Collection serverList = getServerList(serverKey); if (serverList == null) return null; - + List servers = new ArrayList(serverList); - servers = fetchOpenServers(player, servers, servers.size()); // Removes all full servers from list + servers = fetchOpenServers(player, servers, servers.size()); // Removes all full servers from list Collections.sort(servers, new ServerCountSorter()); - + int count = Math.min(servers.size(), TOP_SERVERS); - + if (count > 0) { ServerInfo largestServer = servers.get(0); - + if (largestServer.getAvailableSlots() >= MIN_SLOTS_REQUIRED || largestServer.MaxPlayers > 40) { return largestServer; @@ -523,15 +550,15 @@ public class ServerManager extends MiniPlugin return servers.get(random.nextInt(count)); } } - + return null; } - + public List fetchOpenServers(Player player, List servers, int count) { List results = new ArrayList(); int requiredSlots = (servers.size() > 0) ? getRequiredSlots(player, servers.get(0).ServerType) : 0; - + for (ServerInfo server : servers) { if (isInProgress(server)) @@ -541,16 +568,16 @@ public class ServerManager extends MiniPlugin continue; if (results.size() >= count) break; - + if (server.getAvailableSlots() > requiredSlots) { results.add(server); } } - + return results; } - + private boolean isInProgress(ServerInfo serverInfo) { return serverInfo.MOTD.contains("Progress") || serverInfo.MOTD.contains("Restarting"); @@ -559,41 +586,41 @@ public class ServerManager extends MiniPlugin public void listServerNpcs(Player caller) { UtilPlayer.message(caller, F.main(getName(), "Listing Server Npcs:")); - + for (String serverNpc : _serverKeyInfoMap.keySet()) { UtilPlayer.message(caller, F.main(getName(), C.cYellow + serverNpc)); } } - + public void listServers(Player caller, String serverNpcName) { UtilPlayer.message(caller, F.main(getName(), "Listing Servers for '" + serverNpcName + "':")); - + for (ServerInfo serverNpc : _serverKeyInfoMap.get(serverNpcName)) { - UtilPlayer.message(caller, F.main(getName(), C.cYellow + serverNpc.Name + C.cWhite + " - " + serverNpc.MOTD + " " + serverNpc.CurrentPlayers + "/" + serverNpc.MaxPlayers)); + UtilPlayer.message(caller, F.main(getName(), C.cYellow + serverNpc.Name + C.cWhite + " - " + serverNpc.MOTD + " " + serverNpc.CurrentPlayers + "/" + serverNpc.MaxPlayers)); } } - + public void listOfflineServers(Player caller) { UtilPlayer.message(caller, F.main(getName(), "Listing Offline Servers:")); - + for (ServerInfo serverNpc : _serverInfoMap.values()) { if (serverNpc.MOTD.equalsIgnoreCase(ChatColor.DARK_RED + "OFFLINE")) { - UtilPlayer.message(caller, F.main(getName(), C.cYellow + serverNpc.Name + C.cWhite + " - " + F.time(UtilTime.convertString(System.currentTimeMillis() - _serverUpdate.get(serverNpc.Name), 0, TimeUnit.FIT)))); + UtilPlayer.message(caller, F.main(getName(), C.cYellow + serverNpc.Name + C.cWhite + " - " + F.time(UtilTime.convertString(System.currentTimeMillis() - _serverUpdate.get(serverNpc.Name), 0, TimeUnit.FIT)))); } } } - + public void loadServers() { _serverInfoMap.clear(); _serverUpdate.clear(); - + for (String npcName : _serverKeyInfoMap.keySet()) { _serverKeyInfoMap.get(npcName).clear(); @@ -615,11 +642,11 @@ public class ServerManager extends MiniPlugin Vector bottomVector = ParseVector(serverGroup.getPortalBottomCornerLocation()); Vector topVector = ParseVector(serverGroup.getPortalTopCornerLocation()); int blocks = 0; - + while (blocks < 10 && (bottomVector.getBlockX() != topVector.getBlockX() || bottomVector.getBlockZ() != topVector.getBlockZ())) { _portalToServerKey.put(new Vector(bottomVector.getBlockX(), bottomVector.getBlockY(), bottomVector.getBlockZ()), serverGroup.getPrefix()); - + if (bottomVector.getBlockX() != topVector.getBlockX()) { bottomVector.add(new Vector(-(bottomVector.getBlockX() - topVector.getBlockX()) / Math.abs(bottomVector.getBlockX() - topVector.getBlockX()), 0, 0)); @@ -628,10 +655,10 @@ public class ServerManager extends MiniPlugin { bottomVector.add(new Vector(0, 0, -(bottomVector.getBlockZ() - topVector.getBlockZ()) / Math.abs(bottomVector.getBlockZ() - topVector.getBlockZ()))); } - + blocks++; } - + _portalToServerKey.put(bottomVector, serverGroup.getPrefix()); } } @@ -640,7 +667,7 @@ public class ServerManager extends MiniPlugin { System.out.println("ServerManager - Error parsing servergroups : " + e.getMessage()); } - + // AddServerNpc("Event Servers", "EVENT"); // AddServerNpc("Mineplex Player Servers", "MPS"); @@ -659,7 +686,7 @@ public class ServerManager extends MiniPlugin if (!_clientManager.Get(player).hasPermission(Perm.JOIN_FULL) && !_donationManager.Get(player).ownsUnknownSalesPackage(serverType + " ULTRA")) slots++; - + return slots; } @@ -667,12 +694,12 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Mixed Arcade"); } - + public ServerNpcShop getServerNPCShopByName(String name) { - for(String shop : _serverNpcShopMap.keySet()) + for (String shop : _serverNpcShopMap.keySet()) { - if(shop.equalsIgnoreCase(name)) + if (shop.equalsIgnoreCase(name)) { return _serverNpcShopMap.get(shop); } @@ -690,7 +717,7 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Dominate"); } - + public ServerNpcShop getCtfShop() { return _serverNpcShopMap.get("Capture the Flag"); @@ -700,7 +727,7 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("The Bridges"); } - + public ServerNpcShop getSurvivalGamesShop() { return _serverNpcShopMap.get("Survival Games"); @@ -725,7 +752,7 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Skyfall"); } - + public ServerNpcShop getUHCShop() { return _serverNpcShopMap.get("Ultra Hardcore"); @@ -740,22 +767,22 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Mineplex Player Servers"); } - + public ServerNpcShop getShop(String name) { return _serverNpcShopMap.get(name); } - + private Vector ParseVector(String vectorString) { Vector vector = new Vector(); - - String [] parts = vectorString.trim().split(" "); - + + String[] parts = vectorString.trim().split(" "); + vector.setX(Double.parseDouble(parts[0])); vector.setY(Double.parseDouble(parts[1])); vector.setZ(Double.parseDouble(parts[2])); - + return vector; } @@ -763,12 +790,12 @@ public class ServerManager extends MiniPlugin { return _statusManager; } - + public ShopBase getCastleAssaultShop() { return _serverNpcShopMap.get("Castle Assault"); } - + public ShopBase getCastleAssaultTDMShop() { return _serverNpcShopMap.get("Castle Assault TDM"); @@ -816,12 +843,12 @@ public class ServerManager extends MiniPlugin { return _serverNpcShopMap.get("Master Builders"); } - + public ClansServerShop getClansShop() { return _clansShop; } - + public ShopBase getTypeWarsShop() { return _serverNpcShopMap.get("Type Wars");