diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java index 376e6d21b..4bbd8a026 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RankRewardData.java @@ -3,6 +3,7 @@ package mineplex.core.reward; import org.bukkit.inventory.ItemStack; import mineplex.core.account.permissions.PermissionGroup; +import mineplex.core.common.util.C; import mineplex.core.treasure.reward.RewardRarity; public class RankRewardData extends RewardData @@ -12,7 +13,7 @@ public class RankRewardData extends RewardData public RankRewardData(String friendlyName, ItemStack displayItem, RewardRarity rarity, PermissionGroup rank) { - super(null, friendlyName, displayItem, rarity); + super(C.cRed + "Rank Upgrade", friendlyName, displayItem, rarity); _rank = rank; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java index 8d527002c..9930a66f9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/RewardType.java @@ -7,7 +7,7 @@ public enum RewardType //% Chances Mythic Legend Rare Uncommon Common GAME_LOOT( 0.000001, 0.00001, 0.0001, 3, 0), - OLD_CHEST( 0, 0.06, 0.8, 16, 40), + OLD_CHEST( 20, 0.06, 0.8, 16, 40), ANCIENT_CHEST( 0, 2, 8, 32, 0), MYTHICAL_CHEST( 0.1, 4, 16, 72, 0), WINTER_CHEST( 0, 5, 18, 32, 0), diff --git a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java index 6cc1b87bd..938fab9e0 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/reward/rewards/RankReward.java @@ -25,7 +25,7 @@ public class RankReward extends Reward _canPassLegend = canPassLegend; } - private PermissionGroup getNext(PermissionGroup current, boolean canPassLegend) + private PermissionGroup getNext(PermissionGroup current) { PermissionGroup newGroup = null; @@ -41,16 +41,10 @@ public class RankReward extends Reward newGroup = PermissionGroup.LEGEND; break; case LEGEND: - if (canPassLegend) - { - newGroup = PermissionGroup.TITAN; - } + newGroup = PermissionGroup.TITAN; break; case TITAN: - if (canPassLegend) - { - newGroup = PermissionGroup.ETERNAL; - } + newGroup = PermissionGroup.ETERNAL; break; default: break; @@ -62,7 +56,7 @@ public class RankReward extends Reward @Override public RewardData giveRewardCustom(Player player) { - PermissionGroup group = getNext(CLIENT_MANAGER.Get(player).getPrimaryGroup(), _canPassLegend); + PermissionGroup group = getNext(CLIENT_MANAGER.Get(player).getPrimaryGroup()); if (group == null) { @@ -77,7 +71,7 @@ public class RankReward extends Reward @Override public RewardData getFakeRewardData(Player player) { - PermissionGroup group = getNext(CLIENT_MANAGER.Get(player).getPrimaryGroup(), true); + PermissionGroup group = getNext(CLIENT_MANAGER.Get(player).getPrimaryGroup()); if (group == null) { @@ -90,7 +84,7 @@ public class RankReward extends Reward @Override public boolean canGiveReward(Player player) { - return !CLIENT_MANAGER.Get(player).getPrimaryGroup().inheritsFrom(PermissionGroup.ETERNAL); + return !CLIENT_MANAGER.Get(player).getPrimaryGroup().inheritsFrom(_canPassLegend ? PermissionGroup.ETERNAL : PermissionGroup.LEGEND); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java index 67812972e..659a6c7df 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureLocation.java @@ -197,7 +197,7 @@ public class TreasureLocation implements Listener Bukkit.broadcastMessage(F.main(getManager().getName(), F.name(player.getName()) + " is opening " + (an ? "an" : "a") + " " + F.name(treasureName) + ".")); } - UtilTextMiddle.display(treasureName, "Choose " + C.cYellow + treasure.getRewardsPerChest() + C.cWhite + " to open"); + UtilTextMiddle.display(treasureName, "Choose " + C.cYellow + treasure.getRewardsPerChest() + C.cWhite + " to open", 10, 30, 10, player); } }, player, treasure.getTreasureType().getItemName(), -1); diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java index f8c2add95..f0d64f2ca 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureManager.java @@ -11,16 +11,20 @@ import org.bukkit.event.EventHandler; import mineplex.core.MiniPlugin; import mineplex.core.ReflectivelyCreateMiniPlugin; import mineplex.core.account.CoreClientManager; +import mineplex.core.blockrestore.BlockRestore; import mineplex.core.bonuses.BonusManager; import mineplex.core.common.util.F; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilServer; +import mineplex.core.disguise.DisguiseManager; import mineplex.core.donation.DonationManager; import mineplex.core.gadget.event.GadgetBlockEvent; import mineplex.core.gadget.event.GadgetSelectLocationEvent; import mineplex.core.inventory.InventoryManager; import mineplex.core.recharge.Recharge; import mineplex.core.treasure.reward.TreasureRewardManager; +import mineplex.core.treasure.types.AncientTreasure; +import mineplex.core.treasure.types.MythicalTreasure; import mineplex.core.treasure.types.OldTreasure; import mineplex.core.treasure.types.Treasure; @@ -28,8 +32,9 @@ import mineplex.core.treasure.types.Treasure; public class TreasureManager extends MiniPlugin { - private final BonusManager _bonusManager; + private final BlockRestore _blockRestore; private final CoreClientManager _clientManager; + private final DisguiseManager _disguiseManager; private final DonationManager _donationManager; private final InventoryManager _inventoryManager; private final TreasureRewardManager _rewardManager; @@ -41,8 +46,9 @@ public class TreasureManager extends MiniPlugin { super("Treasure"); - _bonusManager = require(BonusManager.class); + _blockRestore = require(BlockRestore.class); _clientManager = require(CoreClientManager.class); + _disguiseManager = require(DisguiseManager.class); _donationManager = require(DonationManager.class); _inventoryManager = require(InventoryManager.class); _rewardManager = require(TreasureRewardManager.class); @@ -56,6 +62,8 @@ public class TreasureManager extends MiniPlugin private void populateTreasureTypes() { addTreasureType(new OldTreasure()); + addTreasureType(new AncientTreasure()); + addTreasureType(new MythicalTreasure()); } private void addTreasureType(Treasure treasure) @@ -151,9 +159,9 @@ public class TreasureManager extends MiniPlugin return false; } - public BonusManager getBonusManager() + public BlockRestore getBlockRestore() { - return _bonusManager; + return _blockRestore; } public CoreClientManager getClientManager() @@ -161,6 +169,11 @@ public class TreasureManager extends MiniPlugin return _clientManager; } + public DisguiseManager getDisguiseManager() + { + return _disguiseManager; + } + public DonationManager getDonationManager() { return _donationManager; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java index 4ce494f16..6d571bb23 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/TreasureSession.java @@ -2,7 +2,9 @@ package mineplex.core.treasure; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.TimeUnit; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.LivingEntity; @@ -13,6 +15,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerQuitEvent; +import mineplex.core.common.util.F; import mineplex.core.common.util.UtilAction; import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; @@ -20,10 +23,13 @@ import mineplex.core.common.util.UtilEvent; import mineplex.core.common.util.UtilEvent.ActionType; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilServer; +import mineplex.core.common.util.UtilText; +import mineplex.core.common.util.UtilTime; import mineplex.core.reward.Reward; import mineplex.core.reward.RewardData; import mineplex.core.treasure.animation.TreasureAnimation; import mineplex.core.treasure.animation.TreasureRewardAnimation; +import mineplex.core.treasure.reward.RewardRarity; import mineplex.core.treasure.types.Treasure; import mineplex.core.treasure.util.TreasureUtil; import mineplex.core.updater.UpdateType; @@ -32,7 +38,8 @@ import mineplex.core.updater.event.UpdateEvent; public class TreasureSession implements Listener { - private static final int CHEST_RADIUS = 4; + private static final double CHEST_RADIUS = 3.2; + private static final long TIMEOUT = TimeUnit.MINUTES.toMillis(1); private final Player _player; private final TreasureLocation _treasureLocation; @@ -42,6 +49,7 @@ public class TreasureSession implements Listener private final List _rewards; private final List _rewardData; private final List _openedChests; + private final long _start; TreasureSession(Player player, TreasureLocation treasureLocation, Treasure treasure) { @@ -53,16 +61,11 @@ public class TreasureSession implements Listener _rewards = Treasure.getRewardManager().getRewards(player, treasure); _rewardData = new ArrayList<>(treasure.getRewardsPerChest()); _openedChests = new ArrayList<>(treasure.getRewardsPerChest()); + _start = System.currentTimeMillis(); if (!hasFailed()) { _rewards.forEach(reward -> reward.giveReward(player, _rewardData::add)); - - for (RewardData rewardData : _rewardData) - { - player.sendMessage(rewardData.getHeader() + " -> " + rewardData.getFriendlyName()); - } - _animation.setRunning(true); UtilServer.RegisterEvents(this); } @@ -115,6 +118,7 @@ public class TreasureSession implements Listener } RewardData rewardData = _rewardData.get(_openedChests.size()); + RewardRarity rarity = rewardData.getRarity(); TreasureRewardAnimation rewardAnimation = TreasureRewardAnimation.getAnimationFor(_treasure, _treasureLocation, location.clone().add(0.5, 1, 0.5), rewardData); Material material = event.getClickedBlock().getType(); @@ -123,6 +127,12 @@ public class TreasureSession implements Listener TreasureUtil.playChestOpen(location, true); } + if (rarity.ordinal() >= RewardRarity.RARE.ordinal()) + { + boolean an = UtilText.startsWithVowel(rewardData.getFriendlyName()); + Bukkit.broadcastMessage(F.main(_treasureLocation.getManager().getName(), F.name(player.getName()) + " found " + (an ? "an" : "a") + " " + F.name(rarity.getColor() + rarity.getName()) + " " + F.name(rewardData.getFriendlyName()) + ".")); + } + if (rewardAnimation != null) { _rewardAnimations.add(rewardAnimation); @@ -165,6 +175,10 @@ public class TreasureSession implements Listener return; } + _rewardAnimations.stream() + .filter(TreasureAnimation::isRunning) + .forEach(TreasureAnimation::run); + if (_animation.isRunning()) { _animation.run(); @@ -186,7 +200,7 @@ public class TreasureSession implements Listener { for (LivingEntity entity : UtilEnt.getInRadius(_treasureLocation.getChest(), CHEST_RADIUS).keySet()) { - if (entity.equals(_player)) + if (entity.equals(_player) || UtilEnt.hasFlag(entity, UtilEnt.FLAG_ENTITY_COMPONENT)) { continue; } @@ -205,12 +219,30 @@ public class TreasureSession implements Listener return; } - if (UtilMath.offsetSquared(player.getLocation(), _treasureLocation.getChest()) > CHEST_RADIUS * CHEST_RADIUS) + if (UtilMath.offset2dSquared(player.getLocation(), _treasureLocation.getChest()) > CHEST_RADIUS * CHEST_RADIUS) { event.setTo(event.getFrom()); } } + @EventHandler + public void updateTimeout(UpdateEvent event) + { + if (event.getType() != UpdateType.SLOW || !UtilTime.elapsed(_start, TIMEOUT)) + { + return; + } + + getPlayer().sendMessage(F.main(_treasureLocation.getManager().getName(), "You took too long opening your chest. I picked your rewards for you:")); + + for (RewardData rewardData : _rewardData) + { + getPlayer().sendMessage(F.main(_treasureLocation.getManager().getName(), rewardData.getHeader() + " : " + rewardData.getFriendlyName())); + } + + cleanup(); + } + public Player getPlayer() { return _player; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureAnimation.java index 93416e5c7..933d8a8f8 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureAnimation.java @@ -7,6 +7,7 @@ import org.bukkit.Location; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Entity; import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; import org.bukkit.util.EulerAngle; @@ -14,6 +15,7 @@ import mineplex.core.common.util.UtilAlg; import mineplex.core.common.util.UtilEnt; import mineplex.core.common.util.UtilMath; import mineplex.core.common.util.UtilServer; +import mineplex.core.disguise.disguises.DisguiseBase; import mineplex.core.treasure.TreasureLocation; import mineplex.core.treasure.TreasureSession; import mineplex.core.treasure.animation.event.TreasureAnimationFinishEvent; @@ -25,6 +27,7 @@ public abstract class TreasureAnimation implements Runnable private final Treasure _treasure; private final TreasureLocation _treasureLocation; + protected final List _entities; protected final List _stands; protected final List _items; @@ -36,6 +39,7 @@ public abstract class TreasureAnimation implements Runnable _treasure = treasure; _treasureLocation = treasureLocation; + _entities = new ArrayList<>(); _stands = new ArrayList<>(); _items = new ArrayList<>(); } @@ -63,12 +67,32 @@ public abstract class TreasureAnimation implements Runnable public void cleanup() { + _entities.forEach(Entity::remove); + _entities.clear(); _stands.forEach(Entity::remove); _stands.clear(); _items.forEach(Entity::remove); _items.clear(); } + protected T spawnEntity(Location location, Class clazz) + { + T entity = location.getWorld().spawn(location, clazz); + + UtilEnt.vegetate(entity); + UtilEnt.ghost(entity, true, false); + UtilEnt.CreatureLook(entity, location.getPitch(), location.getYaw()); + UtilEnt.addFlag(entity, UtilEnt.FLAG_ENTITY_COMPONENT); + _entities.add(entity); + + return entity; + } + + protected void disguise(DisguiseBase disguise) + { + _treasureLocation.getManager().getDisguiseManager().disguise(disguise); + } + protected ArmorStand spawnArmourStand(Location location) { float yaw = Math.round(UtilAlg.GetYaw(UtilAlg.getTrajectory(location, _treasureLocation.getChest())) / 90F) * 90F; @@ -139,7 +163,7 @@ public abstract class TreasureAnimation implements Runnable { _running = running; - if (_running) + if (running) { onStart(); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureOpenAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureOpenAnimation.java index 225a37497..5880aa6e9 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureOpenAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureOpenAnimation.java @@ -1,9 +1,19 @@ package mineplex.core.treasure.animation; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.scheduler.BukkitRunnable; +import mineplex.core.blockrestore.BlockRestore; import mineplex.core.common.util.MapUtil; +import mineplex.core.common.util.UtilBlock; +import mineplex.core.common.util.UtilServer; import mineplex.core.treasure.TreasureLocation; import mineplex.core.treasure.types.Treasure; import mineplex.core.treasure.util.TreasureUtil; @@ -11,13 +21,74 @@ import mineplex.core.treasure.util.TreasureUtil; public abstract class TreasureOpenAnimation extends TreasureAnimation { + private final List _blocksToRestore; + public TreasureOpenAnimation(Treasure treasure, TreasureLocation treasureLocation) { super(treasure, treasureLocation); + + _blocksToRestore = new ArrayList<>(); } protected void createChestAt(Location location, Material material) { MapUtil.QuickChangeBlockAt(location, material, TreasureUtil.getChestFacing(location.getYaw())); } + + protected int changeFloor(Material materialA, int dataA) + { + return changeFloor(materialA, dataA, materialA, dataA); + } + + protected int changeFloor(Material materialA, int dataA, Material materialB, int dataB) + { + BlockRestore blockRestore = getTreasureLocation().getManager().getBlockRestore(); + AtomicInteger size = new AtomicInteger(); + AtomicBoolean tick = new AtomicBoolean(); + Location center = getTreasureLocation().getChest().clone().subtract(0, 1, 0); + + UtilServer.runSyncTimer(new BukkitRunnable() + { + @Override + public void run() + { + int aSize = size.get(); + + if (aSize > 3) + { + cancel(); + return; + } + + int id = tick.get() ? materialA.getId() : materialB.getId(); + byte data = (byte) (tick.get() ? dataA : dataB); + + for (Block block : UtilBlock.getInBoundingBox(center.clone().add(aSize, 0, aSize), center.clone().subtract(aSize, 0, aSize))) + { + if (blockRestore.contains(block)) + { + continue; + } + + _blocksToRestore.add(block); + blockRestore.add(block, id, data, Long.MAX_VALUE); + } + + size.getAndIncrement(); + tick.set(!tick.get()); + + } + }, 0, 10); + + return getTicks() + 40; + } + + @Override + public void cleanup() + { + super.cleanup(); + + BlockRestore blockRestore = getTreasureLocation().getManager().getBlockRestore(); + _blocksToRestore.forEach(blockRestore::restore); + } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRewardAnimation.java index b8d9e6685..d29300975 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRewardAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/TreasureRewardAnimation.java @@ -4,8 +4,10 @@ import java.util.ArrayList; import java.util.List; import org.bukkit.Location; +import org.bukkit.Material; import org.bukkit.entity.ArmorStand; import org.bukkit.entity.Item; +import org.bukkit.inventory.ItemStack; import mineplex.core.Managers; import mineplex.core.common.currency.GlobalCurrency; @@ -17,6 +19,9 @@ import mineplex.core.hologram.HologramManager; import mineplex.core.reward.RewardData; import mineplex.core.treasure.TreasureLocation; import mineplex.core.treasure.animation.animations.reward.CommonRewardAnimation; +import mineplex.core.treasure.animation.animations.reward.LegendaryRewardAnimation; +import mineplex.core.treasure.animation.animations.reward.MythicalRewardAnimation; +import mineplex.core.treasure.animation.animations.reward.RareRewardAnimation; import mineplex.core.treasure.animation.animations.reward.UncommonRewardAnimation; import mineplex.core.treasure.types.Treasure; @@ -24,6 +29,7 @@ public abstract class TreasureRewardAnimation extends TreasureAnimation { private static final HologramManager HOLOGRAM_MANAGER = Managers.require(HologramManager.class); + private static final ItemStack FALL_BACK_ITEM = new ItemStack(Material.PRISMARINE_SHARD); public static TreasureRewardAnimation getAnimationFor(Treasure treasure, TreasureLocation treasureLocation, Location location, RewardData rewardData) { @@ -34,11 +40,11 @@ public abstract class TreasureRewardAnimation extends TreasureAnimation case UNCOMMON: return new UncommonRewardAnimation(treasure, treasureLocation, location, rewardData); case RARE: - return null; + return new RareRewardAnimation(treasure, treasureLocation, location, rewardData); case LEGENDARY: - return null; + return new LegendaryRewardAnimation(treasure, treasureLocation, location, rewardData); case MYTHICAL: - return null; + return new MythicalRewardAnimation(treasure, treasureLocation, location, rewardData); } return null; @@ -65,7 +71,7 @@ public abstract class TreasureRewardAnimation extends TreasureAnimation private void createHologramItemPair0() { ArmorStand itemHolder = spawnArmourStand(_location.clone().subtract(0, 1.5, 0)); - Item item = spawnItem(_location, _rewardData.getDisplayItem(), false); + Item item = spawnItem(_location, _rewardData.getDisplayItem() == null ? FALL_BACK_ITEM : _rewardData.getDisplayItem(), false); itemHolder.setPassenger(item); List text = new ArrayList<>(); @@ -99,9 +105,4 @@ public abstract class TreasureRewardAnimation extends TreasureAnimation { return _location; } - - public RewardData getRewardData() - { - return _rewardData; - } } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/AncientChestAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/AncientChestAnimation.java new file mode 100644 index 000000000..904887aa7 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/AncientChestAnimation.java @@ -0,0 +1,81 @@ +package mineplex.core.treasure.animation.animations; + +import org.bukkit.Effect; +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.UtilMath; +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.DisguiseBlaze; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureOpenAnimation; +import mineplex.core.treasure.types.Treasure; + +public class AncientChestAnimation extends TreasureOpenAnimation +{ + + public AncientChestAnimation(Treasure treasure, TreasureLocation treasureLocation) + { + super(treasure, treasureLocation); + } + + @Override + protected void onStart() + { + changeFloor(Material.NETHER_BRICK, 0); + + for (Location location : getTreasureLocation().getChestLocations()) + { + location = location.clone().add(0, UtilMath.rRange(4, 6) + Math.random(), 0); + ArmorStand stand = spawnArmourStand(location); + disguise(new DisguiseBlaze(stand)); + } + } + + @Override + public void onTick() + { + double y = getTreasureLocation().getChest().getY() + 0.5; + + _stands.removeIf(stand -> + { + Location location = stand.getLocation(); + + if (Math.random() < 0.05) + { + stand.getWorld().playSound(location, Sound.ZOMBIE_REMEDY, 1, 0.6F); + } + + stand.teleport(location.subtract(0, 0.1, 0)); + + if (stand.isValid() && location.getY() < y) + { + stand.getWorld().playEffect(location, Effect.ENDER_SIGNAL, 0); + stand.getWorld().playSound(location, Sound.EXPLODE, 1, 0.4F); + UtilParticle.PlayParticleToAll(ParticleType.LAVA, location, 0.5F, 0.5F, 0.5F, 0.1F, 10, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.FLAME, location, 0.2F, 0.2F, 0.2F, 0.1F, 10, ViewDist.NORMAL); + stand.remove(); + createChestAt(location, Material.TRAPPED_CHEST); + return true; + } + + return false; + }); + + if (_stands.isEmpty()) + { + setRunning(false); + } + } + + @Override + protected void onFinish() + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MythicalChestAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MythicalChestAnimation.java new file mode 100644 index 000000000..32e5fb8ef --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/MythicalChestAnimation.java @@ -0,0 +1,95 @@ +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 org.bukkit.inventory.ItemStack; + +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 MythicalChestAnimation extends TreasureOpenAnimation +{ + + private static final ItemStack HELMET = new ItemStack(Material.ENDER_CHEST); + 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 MythicalChestAnimation(Treasure treasure, TreasureLocation treasureLocation) + { + super(treasure, treasureLocation); + } + + @Override + protected void onStart() + { + changeFloor(Material.QUARTZ_BLOCK, 0, Material.QUARTZ_BLOCK, 1); + + List chests = getTreasureLocation().getChestLocations(); + _deltaTheta = Math.PI * 2 / (double) chests.size(); + + for (Location location : chests) + { + ArmorStand stand = spawnArmourStand(location); + stand.setHelmet(HELMET); + } + } + + @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.HAPPY_VILLAGER, 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.ANVIL_LAND, 1, 0.8F); + UtilParticle.PlayParticleToAll(ParticleType.LARGE_EXPLODE, location, 0, 0, 0, 0.1F, 1, ViewDist.NORMAL); + UtilParticle.PlayParticleToAll(ParticleType.HAPPY_VILLAGER, 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/reward/CommonRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/CommonRewardAnimation.java index c7cccd43b..3b2481809 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/CommonRewardAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/CommonRewardAnimation.java @@ -19,6 +19,7 @@ public class CommonRewardAnimation extends TreasureRewardAnimation protected void onStart() { createHologramItemPair(); + setRunning(false); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/LegendaryRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/LegendaryRewardAnimation.java new file mode 100644 index 000000000..89e71fadd --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/LegendaryRewardAnimation.java @@ -0,0 +1,68 @@ +package mineplex.core.treasure.animation.animations.reward; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Item; +import org.bukkit.inventory.ItemStack; +import org.bukkit.util.Vector; + +import mineplex.core.common.util.UtilFirework; +import mineplex.core.reward.RewardData; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureRewardAnimation; +import mineplex.core.treasure.types.Treasure; + +public class LegendaryRewardAnimation extends TreasureRewardAnimation +{ + + private static final FireworkEffect FIREWORK_EFFECT = FireworkEffect.builder() + .with(Type.BALL_LARGE) + .withColor(Color.LIME) + .withFade(Color.GREEN) + .withFlicker() + .build(); + private static final ItemStack ITEM_STACK = new ItemStack(Material.EMERALD); + + public LegendaryRewardAnimation(Treasure treasure, TreasureLocation treasureLocation, Location location, RewardData rewardData) + { + super(treasure, treasureLocation, location, rewardData); + } + + @Override + protected void onStart() + { + createHologramItemPair(); + getLocation().getWorld().playSound(getLocation(), Sound.ENDERDRAGON_DEATH, 1, 1); + getLocation().getWorld().strikeLightningEffect(getLocation()); + } + + @Override + public void onTick() + { + if (getTicks() % 5 == 0) + { + UtilFirework.playFirework(getLocation(), FIREWORK_EFFECT); + + for (int i = 0; i < 3; i++) + { + Item item = spawnItem(getLocation(), ITEM_STACK, true); + item.setVelocity(new Vector(Math.random() - 0.5, Math.random(), Math.random() - 0.5)); + } + } + + if (getTicks() > 80) + { + setRunning(false); + } + } + + @Override + protected void onFinish() + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/MythicalRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/MythicalRewardAnimation.java new file mode 100644 index 000000000..162cb351b --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/MythicalRewardAnimation.java @@ -0,0 +1,77 @@ +package mineplex.core.treasure.animation.animations.reward; + +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.FireworkEffect.Type; +import org.bukkit.Location; +import org.bukkit.Sound; + +import mineplex.core.common.util.UtilAlg; +import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilMath; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.reward.RewardData; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureRewardAnimation; +import mineplex.core.treasure.types.Treasure; + +public class MythicalRewardAnimation extends TreasureRewardAnimation +{ + + private static final FireworkEffect FIREWORK_EFFECT = FireworkEffect.builder() + .with(Type.STAR) + .withColor(Color.RED) + .withFade(Color.MAROON) + .withFlicker() + .build(); + + private long _currentTime; + + public MythicalRewardAnimation(Treasure treasure, TreasureLocation treasureLocation, Location location, RewardData rewardData) + { + super(treasure, treasureLocation, location, rewardData); + + _currentTime = location.getWorld().getTime(); + } + + @Override + protected void onStart() + { + createHologramItemPair(); + getLocation().getWorld().playSound(getLocation(), Sound.ENDERDRAGON_DEATH, 1, 0.5F); + UtilParticle.PlayParticleToAll(ParticleType.LAVA, getLocation(), 0.5F, 0.5F, 0.5F, 0.1F, 10, ViewDist.NORMAL); + } + + @Override + public void onTick() + { + if (getTicks() % 5 == 0) + { + getLocation().getWorld().setTime(getLocation().getWorld().getTime() + 12000); + } + + if (getTicks() % 2 == 0) + { + Location random = UtilAlg.getRandomLocation(getLocation(), 5, 0, 5); + + if (Math.random() < 0.3) + { + random.getWorld().strikeLightningEffect(random); + } + UtilFirework.launchFirework(random, FIREWORK_EFFECT, null, UtilMath.r(3) + 1); + } + + if (getTicks() > 80) + { + setRunning(false); + } + } + + @Override + protected void onFinish() + { + getLocation().getWorld().setTime(_currentTime); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/RareRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/RareRewardAnimation.java new file mode 100644 index 000000000..30e2ebf90 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/RareRewardAnimation.java @@ -0,0 +1,66 @@ +package mineplex.core.treasure.animation.animations.reward; + +import org.bukkit.Location; +import org.bukkit.Sound; + +import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; +import mineplex.core.common.util.UtilServer; +import mineplex.core.reward.RewardData; +import mineplex.core.treasure.TreasureLocation; +import mineplex.core.treasure.animation.TreasureRewardAnimation; +import mineplex.core.treasure.types.Treasure; + +public class RareRewardAnimation extends TreasureRewardAnimation +{ + + private double _radius = 3; + private double _height = -0.5; + + public RareRewardAnimation(Treasure treasure, TreasureLocation treasureLocation, Location location, RewardData rewardData) + { + super(treasure, treasureLocation, location, rewardData); + } + + @Override + protected void onStart() + { + createHologramItemPair(); + getLocation().getWorld().playSound(getLocation(), Sound.WITHER_SPAWN, 1, 0.5F); + UtilParticle.PlayParticleToAll(ParticleType.ENCHANTMENT_TABLE, getLocation(), 0.5F, 0.5F, 0.5F, 0.1F, 10, ViewDist.NORMAL); + } + + @Override + public void onTick() + { + UtilParticle.PlayParticleToAll(ParticleType.PORTAL, getLocation(), 0.5F, 0.5F, 0.5F, 0.1F, 4, ViewDist.NORMAL); + + if (getTicks() % 2 == 0) + { + for (double theta = 0; theta < 2 * Math.PI; theta += Math.PI / 20) + { + double x = _radius * Math.cos(theta); + double z = _radius * Math.sin(theta); + + UtilParticle.PlayParticleToAll(ParticleType.WITCH_MAGIC, getLocation().clone().add(x, _height, z), 0, 0, 0, 0.001F, 1, ViewDist.NORMAL); + } + + _radius -= 0.1; + _height += 0.1; + + if (_radius <= 0) + { + UtilParticle.PlayParticleToAll(ParticleType.FIREWORKS_SPARK, getLocation().clone().add(0, _height, 0), 0, 0, 0, 0.5F, 30, ViewDist.NORMAL); + setRunning(false); + } + } + } + + @Override + protected void onFinish() + { + + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/UncommonRewardAnimation.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/UncommonRewardAnimation.java index a7d42007d..246acb6b7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/UncommonRewardAnimation.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/animation/animations/reward/UncommonRewardAnimation.java @@ -6,6 +6,9 @@ import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import mineplex.core.common.util.UtilFirework; +import mineplex.core.common.util.UtilParticle; +import mineplex.core.common.util.UtilParticle.ParticleType; +import mineplex.core.common.util.UtilParticle.ViewDist; import mineplex.core.reward.RewardData; import mineplex.core.treasure.TreasureLocation; import mineplex.core.treasure.animation.TreasureRewardAnimation; @@ -30,7 +33,9 @@ public class UncommonRewardAnimation extends TreasureRewardAnimation protected void onStart() { createHologramItemPair(); + UtilParticle.PlayParticleToAll(ParticleType.HEART, getLocation(), 0.25F, 0.25F, 0.25F, 0.1F, 4, ViewDist.NORMAL); UtilFirework.playFirework(getLocation(), FIREWORK_EFFECT); + setRunning(false); } @Override diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/reward/TreasureRewardManager.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/reward/TreasureRewardManager.java index 2e4601931..e41f05b01 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/reward/TreasureRewardManager.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/reward/TreasureRewardManager.java @@ -196,7 +196,7 @@ public class TreasureRewardManager extends MiniPlugin // Due to the last reward always being an uncommon or better, we swap it randomly with another element as to // appear more random. - Collections.swap(rewards, rewards.size() - 1, UtilMath.r(rewardMap.size())); + Collections.swap(rewards, rewards.size() - 1, UtilMath.r(rewards.size())); return rewards; } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/AncientTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/AncientTreasure.java new file mode 100644 index 000000000..23294da84 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/AncientTreasure.java @@ -0,0 +1,21 @@ +package mineplex.core.treasure.types; + +import mineplex.core.reward.RewardType; +import mineplex.core.treasure.animation.animations.AncientChestAnimation; + +public class AncientTreasure extends NormalTreasure +{ + + public AncientTreasure() + { + super(TreasureType.ANCIENT); + + setAnimation(treasureLocation -> new AncientChestAnimation(this, treasureLocation)); + setRewards(RewardType.ANCIENT_CHEST); + setRewardsPerChest(4); + allowDuplicates(); + setPurchasable(5000); + purchaseableFromStore(); + enabledByDefault(); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MythicalTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MythicalTreasure.java new file mode 100644 index 000000000..6566cb26d --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/MythicalTreasure.java @@ -0,0 +1,45 @@ +package mineplex.core.treasure.types; + +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; +import mineplex.core.reward.RewardType; +import mineplex.core.treasure.animation.animations.MythicalChestAnimation; +import mineplex.core.treasure.reward.RewardRarity; + +public class MythicalTreasure extends NormalTreasure +{ + + public MythicalTreasure() + { + super(TreasureType.MYTHICAL); + + setAnimation(treasureLocation -> new MythicalChestAnimation(this, treasureLocation)); + setRewards(RewardType.MYTHICAL_CHEST); + setRewardsPerChest(4); + allowDuplicates(); + setPurchasable(10000); + purchaseableFromStore(); + enabledByDefault(); + } + + @Override + protected void addRare(RewardRarity rarity) + { + super.addRare(rarity); + + addGadgetReward(getGadget(HaloKitSelector.class), rarity, 100); + addGadgetReward(getGadget(RainbowDanceKitSelector.class), rarity, 100); + addGadgetReward(getGadget(ShimmeringRingKitSelector.class), rarity, 150); + addGadgetReward(getKitSelector(SingleParticleKitSelector.SingleParticleSelectors.FLAMES_OF_FURY), rarity, 150); + addGadgetReward(getKitSelector(SingleParticleKitSelector.SingleParticleSelectors.EMBER), rarity, 100); + addGadgetReward(getKitSelector(SingleParticleKitSelector.SingleParticleSelectors.LOVE), rarity, 100); + } + + @Override + protected void addMythical(RewardRarity rarity) + { + addRankReward(rarity, true, 100); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/NormalTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/NormalTreasure.java new file mode 100644 index 000000000..fc7d54519 --- /dev/null +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/NormalTreasure.java @@ -0,0 +1,277 @@ +package mineplex.core.treasure.types; + +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBlood; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailConfetti; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEmerald; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEnchant; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic; +import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailShadow; +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.DeathEmerald; +import mineplex.core.gadget.gadgets.death.DeathEnchant; +import mineplex.core.gadget.gadgets.death.DeathMusic; +import mineplex.core.gadget.gadgets.death.DeathPinataBurst; +import mineplex.core.gadget.gadgets.death.DeathShadow; +import mineplex.core.gadget.gadgets.death.DeathStorm; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBlood; +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.DoubleJumpMusic; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpShadow; +import mineplex.core.gadget.gadgets.doublejump.DoubleJumpStorm; +import mineplex.core.gadget.gadgets.item.ItemBatGun; +import mineplex.core.gadget.gadgets.item.ItemEtherealPearl; +import mineplex.core.gadget.gadgets.item.ItemFirework; +import mineplex.core.gadget.gadgets.item.ItemFleshHook; +import mineplex.core.gadget.gadgets.item.ItemMelonLauncher; +import mineplex.core.gadget.gadgets.item.ItemPaintballGun; +import mineplex.core.gadget.gadgets.item.ItemTNT; +import mineplex.core.gadget.gadgets.morph.MorphBat; +import mineplex.core.gadget.gadgets.morph.MorphBlock; +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.MorphSlime; +import mineplex.core.gadget.gadgets.morph.MorphVillager; +import mineplex.core.gadget.gadgets.mount.types.MountCart; +import mineplex.core.gadget.gadgets.mount.types.MountFrost; +import mineplex.core.gadget.gadgets.mount.types.MountMule; +import mineplex.core.gadget.gadgets.mount.types.MountSlime; +import mineplex.core.gadget.gadgets.mount.types.MountUndead; +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.particle.ParticleBlood; +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.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.ParticleWingsPixie; +import mineplex.core.gadget.gadgets.particle.ParticleYinYang; +import mineplex.core.gadget.gadgets.wineffect.WinEffectBabyChicken; +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.pet.PetType; +import mineplex.core.reward.RewardType; +import mineplex.core.treasure.animation.animations.OldChestAnimation; +import mineplex.core.treasure.reward.RewardRarity; + +public class NormalTreasure extends Treasure +{ + + NormalTreasure(TreasureType treasureType) + { + super(treasureType); + } + + @Override + protected void addCommon(RewardRarity rarity) + { + // Gadgets + addGadgetReward(getGadget(ItemBatGun.class), rarity, 10, 4, 10); + addGadgetReward(getGadget(ItemEtherealPearl.class), rarity, 10, 6, 15); + addGadgetReward(getGadget(ItemFirework.class), rarity, 10, 10, 25); + addGadgetReward(getGadget(ItemFleshHook.class), rarity, 10, 8, 20); + addGadgetReward(getGadget(ItemMelonLauncher.class), rarity, 10, 10, 25); + addGadgetReward(getGadget(ItemPaintballGun.class), rarity, 10, 20, 50); + addGadgetReward(getGadget(ItemTNT.class), rarity, 10, 4, 10); + } + + @Override + protected void addUncommon(RewardRarity rarity) + { + //Gadgets + addGadgetReward(getGadget(ItemBatGun.class), rarity, 250, 20, 40); + addGadgetReward(getGadget(ItemEtherealPearl.class), rarity, 250, 30, 60); + addGadgetReward(getGadget(ItemFirework.class), rarity, 250, 25, 50); + addGadgetReward(getGadget(ItemFleshHook.class), rarity, 250, 40, 80); + addGadgetReward(getGadget(ItemMelonLauncher.class), rarity, 250, 25, 50); + addGadgetReward(getGadget(ItemPaintballGun.class), rarity, 250, 100, 200); + addGadgetReward(getGadget(ItemTNT.class), rarity, 250, 20, 40); + + //Pets + addPetReward(PetType.CHICKEN, rarity, 143); + addPetReward(PetType.COW, rarity, 500); + addPetReward(PetType.MUSHROOM_COW, rarity, 200); + addPetReward(PetType.OCELOT, rarity, 167); + addPetReward(PetType.PIG, rarity, 200); + addPetReward(PetType.SHEEP, rarity, 333); + addPetReward(PetType.WOLF, rarity, 125); + + //Music Discs + addMusicReward("Blocks", rarity, 25); + addMusicReward("Cat", rarity, 25); + addMusicReward("Chirp", rarity, 25); + addMusicReward("Far", rarity, 25); + addMusicReward("Mall", rarity, 25); + addMusicReward("Mellohi", rarity, 25); + addMusicReward("Stal", rarity, 25); + addMusicReward("Strad", rarity, 25); + addMusicReward("Wait", rarity, 25); + addMusicReward("Ward", rarity, 25); + + // Balloons + 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) + { + //Morphs + addGadgetReward(getGadget(MorphVillager.class), rarity, 83); + addGadgetReward(getGadget(MorphCow.class), rarity, 167); + addGadgetReward(getGadget(MorphChicken.class), rarity, 50); + addGadgetReward(getGadget(MorphEnderman.class), rarity, 33); + + //Mounts + addGadgetReward(getGadget(MountFrost.class), rarity, 50); + addGadgetReward(getGadget(MountSlime.class), rarity, 67); + addGadgetReward(getGadget(MountCart.class), rarity, 100); + addGadgetReward(getGadget(MountMule.class), rarity, 200); + + //Outfit Rave + addGadgetReward(getGadget(OutfitRaveSuitHelmet.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitChestplate.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitLeggings.class), rarity, 30); + addGadgetReward(getGadget(OutfitRaveSuitBoots.class), rarity, 30); + //Outfit Space + addGadgetReward(getGadget(OutfitSpaceSuitHelmet.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitChestplate.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitLeggings.class), rarity, 50); + addGadgetReward(getGadget(OutfitSpaceSuitBoots.class), rarity, 50); + + //Arrow Trails + 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); + + //Double Jumps + addGadgetReward(getGadget(DoubleJumpFirecracker.class), rarity, 33); + addGadgetReward(getGadget(DoubleJumpEmerald.class), rarity, 25); + addGadgetReward(getGadget(DoubleJumpShadow.class), rarity, 15); + addGadgetReward(getGadget(DoubleJumpStorm.class), rarity, 30); + addGadgetReward(getGadget(DoubleJumpBlood.class), rarity, 50); + addGadgetReward(getGadget(DoubleJumpMusic.class), rarity, 20); + + //Death Effects + addGadgetReward(getGadget(DeathPinataBurst.class), rarity, 27); + addGadgetReward(getGadget(DeathEmerald.class), rarity, 25); + addGadgetReward(getGadget(DeathShadow.class), rarity, 15); + addGadgetReward(getGadget(DeathStorm.class), rarity, 30); + addGadgetReward(getGadget(DeathBlood.class), rarity, 50); + addGadgetReward(getGadget(DeathMusic.class), rarity, 20); + + //Particles + addGadgetReward(getGadget(ParticlePartyTime.class), rarity, 12); + + //Titles + 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); + + // Balloons + 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); + } + + @Override + protected void addLegendary(RewardRarity rarity) + { + //Enchant set + addGadgetReward(getGadget(ArrowTrailEnchant.class), rarity, 10); + addGadgetReward(getGadget(DeathEnchant.class), rarity, 10); + addGadgetReward(getGadget(DoubleJumpEnchant.class), rarity, 10); + + //Morphs + addGadgetReward(getGadget(MorphSlime.class), rarity, 10); + addGadgetReward(getGadget(MorphBat.class), rarity, 25); + addGadgetReward(getGadget(MorphBlock.class), rarity, 20); + + //Mounts + addGadgetReward(getGadget(MountUndead.class), rarity, 33); + + //Particle Trails + 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); + + //Win Effects + addGadgetReward(getGadget(WinEffectBabyChicken.class), rarity, 10); + addGadgetReward(getGadget(WinEffectLavaTrap.class), rarity, 20); + addGadgetReward(getGadget(WinEffectLightningStrike.class), rarity, 20); + addGadgetReward(getGadget(WinEffectMrPunchMan.class), rarity, 33); + addGadgetReward(getGadget(WinEffectRiseOfTheElderGuardian.class), rarity, 4); + + // Titles + addTitleReward("ayyye", rarity, 25); + addTitleReward("ameno", rarity, 15); + addTitleReward("magician", rarity, 25); + addTitleReward("fireball", rarity, 75); + addTitleReward("magic-missile", rarity, 75); + addTitleReward("pewpewpew", rarity, 75); + addTitleReward("stardust", rarity, 60); + addTitleReward("blow-a-kiss", rarity, 60); + addTitleReward("cool-guy", rarity, 60); + addTitleReward("deal-with-it", rarity, 60); + addTitleReward("party-time", rarity, 55); + addTitleReward("lalala", rarity, 30); + addTitleReward("gotta-go", rarity, 30); + addTitleReward("whaaat", rarity, 30); + + // Balloons + addBalloonReward(BalloonType.SQUID, rarity, 10); + addBalloonReward(BalloonType.SILVERFISH, rarity, 30); + addBalloonReward(BalloonType.GUARDIAN, rarity, 30); + addBalloonReward(BalloonType.EMERALD_BLOCK, rarity, 15); + } +} diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OldTreasure.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OldTreasure.java index 26169bfb1..8b4839ee4 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OldTreasure.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/OldTreasure.java @@ -1,80 +1,9 @@ package mineplex.core.treasure.types; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBlood; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailConfetti; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEmerald; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailEnchant; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic; -import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailShadow; -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.DeathEmerald; -import mineplex.core.gadget.gadgets.death.DeathEnchant; -import mineplex.core.gadget.gadgets.death.DeathMusic; -import mineplex.core.gadget.gadgets.death.DeathPinataBurst; -import mineplex.core.gadget.gadgets.death.DeathShadow; -import mineplex.core.gadget.gadgets.death.DeathStorm; -import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBlood; -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.DoubleJumpMusic; -import mineplex.core.gadget.gadgets.doublejump.DoubleJumpShadow; -import mineplex.core.gadget.gadgets.doublejump.DoubleJumpStorm; -import mineplex.core.gadget.gadgets.item.ItemBatGun; -import mineplex.core.gadget.gadgets.item.ItemEtherealPearl; -import mineplex.core.gadget.gadgets.item.ItemFirework; -import mineplex.core.gadget.gadgets.item.ItemFleshHook; -import mineplex.core.gadget.gadgets.item.ItemMelonLauncher; -import mineplex.core.gadget.gadgets.item.ItemPaintballGun; -import mineplex.core.gadget.gadgets.item.ItemTNT; -import mineplex.core.gadget.gadgets.morph.MorphBat; -import mineplex.core.gadget.gadgets.morph.MorphBlock; -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.MorphSlime; -import mineplex.core.gadget.gadgets.morph.MorphVillager; -import mineplex.core.gadget.gadgets.mount.types.MountCart; -import mineplex.core.gadget.gadgets.mount.types.MountFrost; -import mineplex.core.gadget.gadgets.mount.types.MountMule; -import mineplex.core.gadget.gadgets.mount.types.MountSlime; -import mineplex.core.gadget.gadgets.mount.types.MountUndead; -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.particle.ParticleBlood; -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.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.ParticleWingsPixie; -import mineplex.core.gadget.gadgets.particle.ParticleYinYang; -import mineplex.core.gadget.gadgets.wineffect.WinEffectBabyChicken; -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.pet.PetType; import mineplex.core.reward.RewardType; import mineplex.core.treasure.animation.animations.OldChestAnimation; -import mineplex.core.treasure.reward.RewardRarity; -public class OldTreasure extends Treasure +public class OldTreasure extends NormalTreasure { public OldTreasure() @@ -86,200 +15,7 @@ public class OldTreasure extends Treasure setRewardsPerChest(4); allowDuplicates(); setPurchasable(1000); - purchaseAbleFromStore(); + purchaseableFromStore(); enabledByDefault(); } - - @Override - protected void addCommon(RewardRarity rarity) - { - // Gadgets - addGadgetReward(getGadget(ItemBatGun.class), rarity, 10, 4, 10); - addGadgetReward(getGadget(ItemEtherealPearl.class), rarity, 10, 6, 15); - addGadgetReward(getGadget(ItemFirework.class), rarity, 10, 10, 25); - addGadgetReward(getGadget(ItemFleshHook.class), rarity, 10, 8, 20); - addGadgetReward(getGadget(ItemMelonLauncher.class), rarity, 10, 10, 25); - addGadgetReward(getGadget(ItemPaintballGun.class), rarity, 10, 20, 50); - addGadgetReward(getGadget(ItemTNT.class), rarity, 10, 4, 10); - } - - @Override - protected void addUncommon(RewardRarity rarity) - { - //Gadgets - addGadgetReward(getGadget(ItemBatGun.class), rarity, 250, 20, 40); - addGadgetReward(getGadget(ItemEtherealPearl.class), rarity, 250, 30, 60); - addGadgetReward(getGadget(ItemFirework.class), rarity, 250, 25, 50); - addGadgetReward(getGadget(ItemFleshHook.class), rarity, 250, 40, 80); - addGadgetReward(getGadget(ItemMelonLauncher.class), rarity, 250, 25, 50); - addGadgetReward(getGadget(ItemPaintballGun.class), rarity, 250, 100, 200); - addGadgetReward(getGadget(ItemTNT.class), rarity, 250, 20, 40); - - //Pets - addPetReward(PetType.CHICKEN, rarity, 143); - addPetReward(PetType.COW, rarity, 500); - addPetReward(PetType.MUSHROOM_COW, rarity, 200); - addPetReward(PetType.OCELOT, rarity, 167); - addPetReward(PetType.PIG, rarity, 200); - addPetReward(PetType.SHEEP, rarity, 333); - addPetReward(PetType.WOLF, rarity, 125); - - //Music Discs - addMusicReward("Blocks", rarity, 25); - addMusicReward("Cat", rarity, 25); - addMusicReward("Chirp", rarity, 25); - addMusicReward("Far", rarity, 25); - addMusicReward("Mall", rarity, 25); - addMusicReward("Mellohi", rarity, 25); - addMusicReward("Stal", rarity, 25); - addMusicReward("Strad", rarity, 25); - addMusicReward("Wait", rarity, 25); - addMusicReward("Ward", rarity, 25); - - // Balloons - 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) - { - //Morphs - addGadgetReward(getGadget(MorphVillager.class), rarity, 83); - addGadgetReward(getGadget(MorphCow.class), rarity, 167); - addGadgetReward(getGadget(MorphChicken.class), rarity, 50); - addGadgetReward(getGadget(MorphEnderman.class), rarity, 33); - - //Mounts - addGadgetReward(getGadget(MountFrost.class), rarity, 50); - addGadgetReward(getGadget(MountSlime.class), rarity, 67); - addGadgetReward(getGadget(MountCart.class), rarity, 100); - addGadgetReward(getGadget(MountMule.class), rarity, 200); - - //Outfit Rave - addGadgetReward(getGadget(OutfitRaveSuitHelmet.class), rarity, 30); - addGadgetReward(getGadget(OutfitRaveSuitChestplate.class), rarity, 30); - addGadgetReward(getGadget(OutfitRaveSuitLeggings.class), rarity, 30); - addGadgetReward(getGadget(OutfitRaveSuitBoots.class), rarity, 30); - //Outfit Space - addGadgetReward(getGadget(OutfitSpaceSuitHelmet.class), rarity, 50); - addGadgetReward(getGadget(OutfitSpaceSuitChestplate.class), rarity, 50); - addGadgetReward(getGadget(OutfitSpaceSuitLeggings.class), rarity, 50); - addGadgetReward(getGadget(OutfitSpaceSuitBoots.class), rarity, 50); - - //Arrow Trails - 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); - - //Double Jumps - addGadgetReward(getGadget(DoubleJumpFirecracker.class), rarity, 33); - addGadgetReward(getGadget(DoubleJumpEmerald.class), rarity, 25); - addGadgetReward(getGadget(DoubleJumpShadow.class), rarity, 15); - addGadgetReward(getGadget(DoubleJumpStorm.class), rarity, 30); - addGadgetReward(getGadget(DoubleJumpBlood.class), rarity, 50); - addGadgetReward(getGadget(DoubleJumpMusic.class), rarity, 20); - - //Death Effects - addGadgetReward(getGadget(DeathPinataBurst.class), rarity, 27); - addGadgetReward(getGadget(DeathEmerald.class), rarity, 25); - addGadgetReward(getGadget(DeathShadow.class), rarity, 15); - addGadgetReward(getGadget(DeathStorm.class), rarity, 30); - addGadgetReward(getGadget(DeathBlood.class), rarity, 50); - addGadgetReward(getGadget(DeathMusic.class), rarity, 20); - - //Particles - addGadgetReward(getGadget(ParticlePartyTime.class), rarity, 12); - - //Titles - 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); - - // Balloons - 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); - } - - @Override - protected void addLegendary(RewardRarity rarity) - { - //Enchant set - addGadgetReward(getGadget(ArrowTrailEnchant.class), rarity, 10); - addGadgetReward(getGadget(DeathEnchant.class), rarity, 10); - addGadgetReward(getGadget(DoubleJumpEnchant.class), rarity, 10); - - //Morphs - addGadgetReward(getGadget(MorphSlime.class), rarity, 10); - addGadgetReward(getGadget(MorphBat.class), rarity, 25); - addGadgetReward(getGadget(MorphBlock.class), rarity, 20); - - //Mounts - addGadgetReward(getGadget(MountUndead.class), rarity, 33); - - //Particle Trails - 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); - - //Win Effects - addGadgetReward(getGadget(WinEffectBabyChicken.class), rarity, 10); - addGadgetReward(getGadget(WinEffectLavaTrap.class), rarity, 20); - addGadgetReward(getGadget(WinEffectLightningStrike.class), rarity, 20); - addGadgetReward(getGadget(WinEffectMrPunchMan.class), rarity, 33); - addGadgetReward(getGadget(WinEffectRiseOfTheElderGuardian.class), rarity, 4); - - // Titles - addTitleReward("ayyye", rarity, 25); - addTitleReward("ameno", rarity, 15); - addTitleReward("magician", rarity, 25); - addTitleReward("fireball", rarity, 75); - addTitleReward("magic-missile", rarity, 75); - addTitleReward("pewpewpew", rarity, 75); - addTitleReward("stardust", rarity, 60); - addTitleReward("blow-a-kiss", rarity, 60); - addTitleReward("cool-guy", rarity, 60); - addTitleReward("deal-with-it", rarity, 60); - addTitleReward("party-time", rarity, 55); - addTitleReward("lalala", rarity, 30); - addTitleReward("gotta-go", rarity, 30); - addTitleReward("whaaat", rarity, 30); - - // Balloons - addBalloonReward(BalloonType.SQUID, rarity, 10); - addBalloonReward(BalloonType.SILVERFISH, rarity, 30); - addBalloonReward(BalloonType.GUARDIAN, rarity, 30); - addBalloonReward(BalloonType.EMERALD_BLOCK, rarity, 15); - } } 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 cba5fdf9f..11a65ee8c 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.kitselector.SingleParticleKitSelector; import mineplex.core.gadget.types.Gadget; import mineplex.core.gadget.types.GadgetType; import mineplex.core.gadget.types.ItemGadget; @@ -22,6 +23,7 @@ import mineplex.core.reward.RewardType; import mineplex.core.reward.rewards.GadgetReward; import mineplex.core.reward.rewards.InventoryReward; import mineplex.core.reward.rewards.PetReward; +import mineplex.core.reward.rewards.RankReward; import mineplex.core.reward.rewards.TitleReward; import mineplex.core.titles.tracks.TrackManager; import mineplex.core.treasure.TreasureLocation; @@ -43,10 +45,12 @@ public class Treasure .build(); private static final TreasureRewardManager TREASURE_REWARD_MANAGER = Managers.require(TreasureRewardManager.class); + public static TreasureRewardManager getRewardManager() { return TREASURE_REWARD_MANAGER; } + private static final GadgetManager GADGET_MANAGER = Managers.require(GadgetManager.class); private static final TrackManager TRACK_MANAGER = Managers.require(TrackManager.class); @@ -124,7 +128,7 @@ public class Treasure return _rewardsPerChest; } - protected void purchaseAbleFromStore() + protected void purchaseableFromStore() { addPurchaseMethod(PURCHASABLE_FROM_STORE); } @@ -277,6 +281,18 @@ public class Treasure return reward; } + protected RankReward addRankReward(RewardRarity rarity, boolean canPassLegend, int weight) + { + RankReward reward = new RankReward(rarity, 0, canPassLegend); + addReward(reward, weight); + return reward; + } + + protected SingleParticleKitSelector getKitSelector(SingleParticleKitSelector.SingleParticleSelectors singleParticleSelectors) + { + return GADGET_MANAGER.getSingleParticleKitSelector(singleParticleSelectors); + } + private 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 ecbb8011a..5d9a084c3 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/types/TreasureType.java @@ -20,8 +20,27 @@ public enum TreasureType "the straps they appear to contain", "many kinds of loot." ), - - ; + ANCIENT( + C.cGold + "Ancient Treasure", + "Ancient Chest", + "Ancient", + new ItemStack(Material.TRAPPED_CHEST), + "Some of our bravest adventurers", + "have discovered these chests within ", + "temples hidden in Minecrafts worlds." + ), + MYTHICAL( + C.cRed + "Mythical Treasure", + "Mythical Chest", + "Mythical", + new ItemStack(Material.ENDER_CHEST), + "All our previous adventurers have", + "perished in search of these chests.", + "However, legends of their existence", + "convinced Sterling, Chiss and Defek7", + "to venture out and discover the", + "location of these chests on their own." + ),; private final String _name; private final String _itemName; diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/PurchaseTreasurePage.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/PurchaseTreasurePage.java index 7ac77fe41..c70bf2794 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/PurchaseTreasurePage.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/ui/PurchaseTreasurePage.java @@ -69,7 +69,7 @@ public class PurchaseTreasurePage extends ShopPageBase lore.add(""); lore.add(C.cGreen + "Left-Click to open!"); } - if (treasure.isPurchasable()) { + if (!canOpen) + { + lore.add(""); + } + lore.add(C.cGreen + "Right-Click to purchase!"); } diff --git a/Plugins/Mineplex.Core/src/mineplex/core/treasure/util/TreasureUtil.java b/Plugins/Mineplex.Core/src/mineplex/core/treasure/util/TreasureUtil.java index 3f3d79e38..66e06dfc6 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/treasure/util/TreasureUtil.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/treasure/util/TreasureUtil.java @@ -1,7 +1,7 @@ package mineplex.core.treasure.util; import net.minecraft.server.v1_8_R3.BlockPosition; -import net.minecraft.server.v1_8_R3.TileEntityChest; +import net.minecraft.server.v1_8_R3.TileEntity; import net.minecraft.server.v1_8_R3.World; import org.bukkit.Location; @@ -17,9 +17,8 @@ public class TreasureUtil { World world = ((CraftWorld) location.getWorld()).getHandle(); BlockPosition position = new BlockPosition(location.getX(), location.getY(), location.getZ()); - TileEntityChest tileChest = (TileEntityChest) world.getTileEntity(position); - - world.playBlockAction(position, tileChest.w(), 1, open ? 1 : 0); + TileEntity tileEntity = world.getTileEntity(position); + world.playBlockAction(position, tileEntity.w(), 1, open ? 1 : 0); } public static byte getChestFacing(float yaw)