1745 lines
61 KiB
Java
1745 lines
61 KiB
Java
|
package mineplex.core.gadget;
|
||
|
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.Arrays;
|
||
|
import java.util.Collection;
|
||
|
import java.util.Collections;
|
||
|
import java.util.HashMap;
|
||
|
import java.util.HashSet;
|
||
|
import java.util.List;
|
||
|
import java.util.Map;
|
||
|
import java.util.Set;
|
||
|
|
||
|
import org.bukkit.GameMode;
|
||
|
import org.bukkit.Location;
|
||
|
import org.bukkit.Material;
|
||
|
import org.bukkit.Sound;
|
||
|
import org.bukkit.block.Block;
|
||
|
import org.bukkit.entity.ArmorStand;
|
||
|
import org.bukkit.entity.Entity;
|
||
|
import org.bukkit.entity.Player;
|
||
|
import org.bukkit.event.EventHandler;
|
||
|
import org.bukkit.event.EventPriority;
|
||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||
|
import org.bukkit.event.player.PlayerToggleFlightEvent;
|
||
|
import org.bukkit.event.player.PlayerToggleSneakEvent;
|
||
|
import org.bukkit.inventory.AnvilInventory;
|
||
|
import org.bukkit.inventory.Inventory;
|
||
|
import org.bukkit.inventory.ItemStack;
|
||
|
|
||
|
import mineplex.core.MiniPlugin;
|
||
|
import mineplex.core.ReflectivelyCreateMiniPlugin;
|
||
|
import mineplex.core.account.CoreClientManager;
|
||
|
import mineplex.core.account.permissions.Permission;
|
||
|
import mineplex.core.account.permissions.PermissionGroup;
|
||
|
import mineplex.core.achievement.AchievementManager;
|
||
|
import mineplex.core.arcadeevents.CoreGameStartEvent;
|
||
|
import mineplex.core.arcadeevents.CoreGameStopEvent;
|
||
|
import mineplex.core.blockrestore.BlockRestore;
|
||
|
import mineplex.core.common.skin.SkinData;
|
||
|
import mineplex.core.common.util.F;
|
||
|
import mineplex.core.common.util.UtilEnt;
|
||
|
import mineplex.core.common.util.UtilPlayer;
|
||
|
import mineplex.core.common.util.UtilServer;
|
||
|
import mineplex.core.common.util.UtilTime;
|
||
|
import mineplex.core.cosmetic.ui.page.GadgetPage;
|
||
|
import mineplex.core.cosmetic.ui.page.gamemodifiers.GameCosmeticCategoryPage;
|
||
|
import mineplex.core.cosmetic.ui.page.gamemodifiers.moba.HeroSkinCategoryPage;
|
||
|
import mineplex.core.disguise.DisguiseManager;
|
||
|
import mineplex.core.donation.DonationManager;
|
||
|
import mineplex.core.gadget.commands.AmmoCommand;
|
||
|
import mineplex.core.gadget.commands.LockCosmeticsCommand;
|
||
|
import mineplex.core.gadget.commands.TestTauntCommand;
|
||
|
import mineplex.core.gadget.commands.UnlockCosmeticCommand;
|
||
|
import mineplex.core.gadget.commands.UnlockCosmeticsCommand;
|
||
|
import mineplex.core.gadget.event.GadgetBlockEvent;
|
||
|
import mineplex.core.gadget.event.GadgetChangeEvent;
|
||
|
import mineplex.core.gadget.event.GadgetChangeEvent.GadgetState;
|
||
|
import mineplex.core.gadget.event.GadgetCollideEntityEvent;
|
||
|
import mineplex.core.gadget.event.GadgetEnableEvent;
|
||
|
import mineplex.core.gadget.event.GadgetSelectLocationEvent;
|
||
|
import mineplex.core.gadget.event.PlayerToggleSwimEvent;
|
||
|
import mineplex.core.gadget.event.TauntCommandEvent;
|
||
|
import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailBalance;
|
||
|
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.ArrowTrailLegend;
|
||
|
import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailMusic;
|
||
|
import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailPresent;
|
||
|
import mineplex.core.gadget.gadgets.arrowtrail.ArrowTrailRainbow;
|
||
|
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.arrowtrail.ArrowTrailTitan;
|
||
|
import mineplex.core.gadget.gadgets.balloons.BalloonType;
|
||
|
import mineplex.core.gadget.gadgets.chat.LevelPrefixType;
|
||
|
import mineplex.core.gadget.gadgets.death.DeathBalance;
|
||
|
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.DeathHalloween;
|
||
|
import mineplex.core.gadget.gadgets.death.DeathLegend;
|
||
|
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.DeathRainbow;
|
||
|
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.death.DeathTitan;
|
||
|
import mineplex.core.gadget.gadgets.doublejump.DoubleJumpBalance;
|
||
|
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.DoubleJumpLegend;
|
||
|
import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMaple;
|
||
|
import mineplex.core.gadget.gadgets.doublejump.DoubleJumpMusic;
|
||
|
import mineplex.core.gadget.gadgets.doublejump.DoubleJumpPresent;
|
||
|
import mineplex.core.gadget.gadgets.doublejump.DoubleJumpRainbow;
|
||
|
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.doublejump.DoubleJumpTitan;
|
||
|
import mineplex.core.gadget.gadgets.flag.FlagType;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticCategory;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticManager;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.GameCosmeticType;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.GameModifierMineStrikeSkin;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.minestrike.MineStrikeSkin;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphGadget;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.shopmorph.ShopMorphType;
|
||
|
import mineplex.core.gadget.gadgets.gamemodifiers.moba.skins.HeroSkinGadget;
|
||
|
import mineplex.core.gadget.gadgets.hat.HatItem;
|
||
|
import mineplex.core.gadget.gadgets.hat.HatType;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemBallCatch;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemBatGun;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemBow;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemCandy;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemClacker;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemCoal;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemCoinBomb;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemConnect4;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemGrapplingHook;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemDuelingSword;
|
||
|
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.ItemFlowerGift;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemFreezeCannon;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemLovePotion;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemMaryPoppins;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemMelonLauncher;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemMobBomb;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemOAndX;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemPaintballGun;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemPaintbrush;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemPartyPopper;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemSnowball;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemSortal;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemTNT;
|
||
|
import mineplex.core.gadget.gadgets.item.ItemTrampoline;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.HalloweenKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.HaloKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.RainCloudKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.RainbowDanceKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.ShimmeringRingKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.SingleParticleKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.kitselector.WaterWingsKitSelector;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphAwkwardRabbit;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphBat;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphBlaze;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphBlock;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphBobRoss;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphBunny;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphChicken;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphChristmasKing;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphCow;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphCreeper;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphDinnerbone;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphEnderman;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphFreedomFighter;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphFrostGolem;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphGhast;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphGoldPot;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphGrimReaper;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphLoveDoctor;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphMelonHead;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphMetalMan;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphOcelot;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphPig;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphPumpkinKing;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphSanta;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphSkeleton;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphSlime;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphSnowman;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphSquid;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphTitan;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphTurkey;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphUncleSam;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphVillager;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphWitch;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphWither;
|
||
|
import mineplex.core.gadget.gadgets.morph.MorphWolf;
|
||
|
import mineplex.core.gadget.gadgets.morph.managers.SoulManager;
|
||
|
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.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.MountDragon;
|
||
|
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.MountPumpkin;
|
||
|
import mineplex.core.gadget.gadgets.mount.types.MountSledge;
|
||
|
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.MountTitan;
|
||
|
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.OutfitTeam;
|
||
|
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.reindeer.OutfitReindeerAntlers;
|
||
|
import mineplex.core.gadget.gadgets.outfit.reindeer.OutfitReindeerChest;
|
||
|
import mineplex.core.gadget.gadgets.outfit.reindeer.OutfitReindeerHooves;
|
||
|
import mineplex.core.gadget.gadgets.outfit.reindeer.OutfitReindeerLegs;
|
||
|
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.outfit.windup.OutfitWindupBoots;
|
||
|
import mineplex.core.gadget.gadgets.outfit.windup.OutfitWindupChestplate;
|
||
|
import mineplex.core.gadget.gadgets.outfit.windup.OutfitWindupHelmet;
|
||
|
import mineplex.core.gadget.gadgets.outfit.windup.OutfitWindupLeggings;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleBlood;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleCandyCane;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleCoalFumes;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleDeepSeaSwirl;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleFiveYear;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleInfused;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleEmerald;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleEnchant;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleWitchsCure;
|
||
|
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.ParticleHalloween;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleHeart;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleMacawWings;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleChickenWings;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleEnderDragonWings;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleFoxTail;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleJetPack;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleCape;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleLegendaryHero;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleWolfTail;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleLegend;
|
||
|
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.ParticleRainbow;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleRainbowTrail;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleTitan;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleWingsAngel;
|
||
|
import mineplex.core.gadget.gadgets.particle.ParticleWingsBee;
|
||
|
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.christmas.ParticleBlizzard;
|
||
|
import mineplex.core.gadget.gadgets.particle.christmas.ParticleChristmasTree;
|
||
|
import mineplex.core.gadget.gadgets.particle.christmas.ParticleFidgetSpinner;
|
||
|
import mineplex.core.gadget.gadgets.particle.christmas.ParticlePumpkinShield;
|
||
|
import mineplex.core.gadget.gadgets.particle.christmas.ParticleWingsChristmas;
|
||
|
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.king.CastleManager;
|
||
|
import mineplex.core.gadget.gadgets.particle.king.ParticleKing;
|
||
|
import mineplex.core.gadget.gadgets.particle.spring.ParticleSpringHalo;
|
||
|
import mineplex.core.gadget.gadgets.taunts.BlowAKissTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.ChickenTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.EasyModeTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.EmojiTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.EternalTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.FrostBreathTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.InfernalTaunt;
|
||
|
import mineplex.core.gadget.gadgets.taunts.RainbowTaunt;
|
||
|
import mineplex.core.gadget.gadgets.weaponname.WeaponNameType;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectBabyChicken;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectEarthquake;
|
||
|
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.WinEffectLogo;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectLoveIsABattlefield;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectMrPunchMan;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectPartyAnimal;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectPodium;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectRiseOfTheElderGuardian;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectSnowTrails;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectTornado;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.WinEffectWinterWarfare;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankEternal;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankHero;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankLegend;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankTitan;
|
||
|
import mineplex.core.gadget.gadgets.wineffect.rankrooms.rankwineffects.WinEffectRankUltra;
|
||
|
import mineplex.core.gadget.mission.GadgetUseTracker;
|
||
|
import mineplex.core.gadget.persistence.UserGadgetPersistence;
|
||
|
import mineplex.core.gadget.set.SetBalance;
|
||
|
import mineplex.core.gadget.set.SetCanadian;
|
||
|
import mineplex.core.gadget.set.SetCandyCane;
|
||
|
import mineplex.core.gadget.set.SetCupidsLove;
|
||
|
import mineplex.core.gadget.set.SetEmerald;
|
||
|
import mineplex.core.gadget.set.SetFreedom;
|
||
|
import mineplex.core.gadget.set.SetFrostLord;
|
||
|
import mineplex.core.gadget.set.SetHalloween;
|
||
|
import mineplex.core.gadget.set.SetHowlingWinds;
|
||
|
import mineplex.core.gadget.set.SetLegend;
|
||
|
import mineplex.core.gadget.set.SetMusic;
|
||
|
import mineplex.core.gadget.set.SetParty;
|
||
|
import mineplex.core.gadget.set.SetRainbow;
|
||
|
import mineplex.core.gadget.set.SetShadow;
|
||
|
import mineplex.core.gadget.set.SetSpring;
|
||
|
import mineplex.core.gadget.set.SetTitan;
|
||
|
import mineplex.core.gadget.set.SetVampire;
|
||
|
import mineplex.core.gadget.set.SetWisdom;
|
||
|
import mineplex.core.gadget.set.suits.SetFreezeSuit;
|
||
|
import mineplex.core.gadget.set.suits.SetRaveSuit;
|
||
|
import mineplex.core.gadget.set.suits.SetReindeerSuit;
|
||
|
import mineplex.core.gadget.set.suits.SetSpaceSuit;
|
||
|
import mineplex.core.gadget.set.suits.SetStPatricksSuit;
|
||
|
import mineplex.core.gadget.set.suits.SetWindup;
|
||
|
import mineplex.core.gadget.types.BalloonGadget;
|
||
|
import mineplex.core.gadget.types.DoubleJumpEffectGadget;
|
||
|
import mineplex.core.gadget.types.FlagGadget;
|
||
|
import mineplex.core.gadget.types.Gadget;
|
||
|
import mineplex.core.gadget.types.GadgetSet;
|
||
|
import mineplex.core.gadget.types.GadgetType;
|
||
|
import mineplex.core.gadget.types.HatGadget;
|
||
|
import mineplex.core.gadget.types.ItemGadget;
|
||
|
import mineplex.core.gadget.types.LevelPrefixGadget;
|
||
|
import mineplex.core.gadget.types.MusicGadget;
|
||
|
import mineplex.core.gadget.types.OutfitGadget;
|
||
|
import mineplex.core.gadget.types.OutfitGadget.ArmorSlot;
|
||
|
import mineplex.core.gadget.types.TauntGadget;
|
||
|
import mineplex.core.gadget.types.WeaponNameGadget;
|
||
|
import mineplex.core.gadget.util.CostConstants;
|
||
|
import mineplex.core.game.GameDisplay;
|
||
|
import mineplex.core.hologram.HologramManager;
|
||
|
import mineplex.core.incognito.IncognitoManager;
|
||
|
import mineplex.core.incognito.events.IncognitoStatusChangeEvent;
|
||
|
import mineplex.core.inventory.InventoryManager;
|
||
|
import mineplex.core.itemstack.ItemBuilder;
|
||
|
import mineplex.core.mission.MissionManager;
|
||
|
import mineplex.core.mission.MissionTrackerType;
|
||
|
import mineplex.core.packethandler.PacketHandler;
|
||
|
import mineplex.core.pet.PetManager;
|
||
|
import mineplex.core.preferences.PreferencesManager;
|
||
|
import mineplex.core.projectile.ProjectileManager;
|
||
|
import mineplex.core.recharge.Recharge;
|
||
|
import mineplex.core.stats.event.PlayerStatsLoadedEvent;
|
||
|
|
||
|
@ReflectivelyCreateMiniPlugin
|
||
|
public class GadgetManager extends MiniPlugin
|
||
|
{
|
||
|
|
||
|
public enum Perm implements Permission
|
||
|
{
|
||
|
TITAN_ARROW_TRAIL,
|
||
|
TITAN_DEATH_EFFECT,
|
||
|
TITAN_DOUBLE_JUMP,
|
||
|
ETERNAL_TAUNT,
|
||
|
LEGEND_PARTICLE_EFFECT,
|
||
|
TITAN_PARTICLE_EFFECT,
|
||
|
HERO_MORPH_BLAZE,
|
||
|
HERO_MORPH_CREEPER,
|
||
|
HERO_MOUNT,
|
||
|
ULTRA_MORPH,
|
||
|
TITAN_MORPH,
|
||
|
TITAN_MOUNT,
|
||
|
LEGEND_MORPH,
|
||
|
AMMO_COMMAND,
|
||
|
LOCK_INFUSED_COMMAND,
|
||
|
LOCK_COSMETICS_COMMAND,
|
||
|
UNLOCK_COSMETIC_COMMAND,
|
||
|
UNLOCK_COSMETICS_COMMAND,
|
||
|
TEST_TAUNT_COMMAND
|
||
|
}
|
||
|
|
||
|
private final CoreClientManager _clientManager;
|
||
|
private final DonationManager _donationManager;
|
||
|
private final InventoryManager _inventoryManager;
|
||
|
private final PetManager _petManager;
|
||
|
private final PreferencesManager _preferencesManager;
|
||
|
private final DisguiseManager _disguiseManager;
|
||
|
private final BlockRestore _blockRestore;
|
||
|
private final ProjectileManager _projectileManager;
|
||
|
private final AchievementManager _achievementManager;
|
||
|
private final PacketHandler _packetManager;
|
||
|
private final HologramManager _hologramManager;
|
||
|
private final IncognitoManager _incognitoManager;
|
||
|
private final GameCosmeticManager _gameCosmeticManager;
|
||
|
private final MissionManager _missionManager;
|
||
|
private SoulManager _soulManager;
|
||
|
private CastleManager _castleManager;
|
||
|
|
||
|
private Map<GadgetType, List<Gadget>> _gadgets;
|
||
|
private List<Gadget> _powerPlayGadgets;
|
||
|
private Map<SingleParticleKitSelector.SingleParticleSelectors, Gadget> _singleParticleSelectors;
|
||
|
|
||
|
private final Map<Player, Long> _lastMove = new HashMap<>();
|
||
|
private final Map<Player, Map<GadgetType, Gadget>> _playerActiveGadgetMap = new HashMap<>();
|
||
|
|
||
|
private final Set<GadgetSet> _sets = new HashSet<>();
|
||
|
|
||
|
private UserGadgetPersistence _userGadgetPersistence;
|
||
|
|
||
|
private boolean _hideParticles, _showWeaponNames = true;
|
||
|
private int _activeItemSlot = 3;
|
||
|
private boolean _gadgetsEnabled = true, _gameIsLive = false;
|
||
|
|
||
|
private final Set<Player> _swimmingPlayers = new HashSet<>();
|
||
|
|
||
|
private GadgetManager()
|
||
|
{
|
||
|
super("Gadget");
|
||
|
|
||
|
_clientManager = require(CoreClientManager.class);
|
||
|
_donationManager = require(DonationManager.class);
|
||
|
_inventoryManager = require(InventoryManager.class);
|
||
|
_petManager = require(PetManager.class);
|
||
|
_preferencesManager = require(PreferencesManager.class);
|
||
|
_disguiseManager = require(DisguiseManager.class);
|
||
|
_blockRestore = require(BlockRestore.class);
|
||
|
_projectileManager = require(ProjectileManager.class);
|
||
|
_achievementManager = require(AchievementManager.class);
|
||
|
_packetManager = require(PacketHandler.class);
|
||
|
_hologramManager = require(HologramManager.class);
|
||
|
_userGadgetPersistence = new UserGadgetPersistence(this);
|
||
|
_incognitoManager = require(IncognitoManager.class);
|
||
|
_gameCosmeticManager = require(GameCosmeticManager.class);
|
||
|
_soulManager = new SoulManager();
|
||
|
_castleManager = require(CastleManager.class);
|
||
|
|
||
|
createGadgets();
|
||
|
createSets();
|
||
|
|
||
|
_missionManager = require(MissionManager.class);
|
||
|
|
||
|
registerTrackers();
|
||
|
generatePermissions();
|
||
|
}
|
||
|
|
||
|
private void generatePermissions()
|
||
|
{
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_ARROW_TRAIL, true, true);
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_DEATH_EFFECT, true, true);
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_DOUBLE_JUMP, true, true);
|
||
|
PermissionGroup.ETERNAL.setPermission(Perm.ETERNAL_TAUNT, true, true);
|
||
|
PermissionGroup.LEGEND.setPermission(Perm.LEGEND_PARTICLE_EFFECT, true, true);
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_PARTICLE_EFFECT, true, true);
|
||
|
PermissionGroup.HERO.setPermission(Perm.HERO_MORPH_BLAZE, true, true);
|
||
|
PermissionGroup.HERO.setPermission(Perm.HERO_MORPH_CREEPER, true, true);
|
||
|
PermissionGroup.HERO.setPermission(Perm.HERO_MOUNT, true, true);
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_MOUNT, true, true);
|
||
|
PermissionGroup.ULTRA.setPermission(Perm.ULTRA_MORPH, true, true);
|
||
|
PermissionGroup.TITAN.setPermission(Perm.TITAN_MORPH, true, true);
|
||
|
PermissionGroup.LEGEND.setPermission(Perm.LEGEND_MORPH, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.AMMO_COMMAND, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.LOCK_INFUSED_COMMAND, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.UNLOCK_COSMETIC_COMMAND, true, true);
|
||
|
PermissionGroup.QA.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true);
|
||
|
PermissionGroup.QA.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.LOCK_COSMETICS_COMMAND, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.UNLOCK_COSMETICS_COMMAND, true, true);
|
||
|
PermissionGroup.ADMIN.setPermission(Perm.TEST_TAUNT_COMMAND, true, true);
|
||
|
|
||
|
if (UtilServer.isTestServer())
|
||
|
{
|
||
|
PermissionGroup.QA.setPermission(Perm.TEST_TAUNT_COMMAND, true, true);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void addCommands()
|
||
|
{
|
||
|
addCommand(new UnlockCosmeticCommand(this));
|
||
|
addCommand(new UnlockCosmeticsCommand(this));
|
||
|
addCommand(new LockCosmeticsCommand(this));
|
||
|
addCommand(new AmmoCommand(this));
|
||
|
addCommand(new TestTauntCommand(this));
|
||
|
}
|
||
|
|
||
|
private void createSets()
|
||
|
{
|
||
|
//Costumes
|
||
|
addSet(new SetRaveSuit(this));
|
||
|
addSet(new SetSpaceSuit(this));
|
||
|
addSet(new SetFreezeSuit(this));
|
||
|
addSet(new SetStPatricksSuit(this));
|
||
|
addSet(new SetReindeerSuit(this));
|
||
|
addSet(new SetWindup(this));
|
||
|
|
||
|
// Sets
|
||
|
addSet(new SetFrostLord(this));
|
||
|
addSet(new SetCandyCane(this));
|
||
|
addSet(new SetTitan(this));
|
||
|
addSet(new SetParty(this));
|
||
|
addSet(new SetCupidsLove(this));
|
||
|
addSet(new SetEmerald(this));
|
||
|
addSet(new SetShadow(this));
|
||
|
addSet(new SetWisdom(this));
|
||
|
addSet(new SetHowlingWinds(this));
|
||
|
addSet(new SetVampire(this));
|
||
|
addSet(new SetMusic(this));
|
||
|
addSet(new SetFreedom(this));
|
||
|
addSet(new SetSpring(this));
|
||
|
addSet(new SetCanadian(this));
|
||
|
addSet(new SetHalloween(this));
|
||
|
addSet(new SetRainbow(this));
|
||
|
addSet(new SetLegend(this));
|
||
|
addSet(new SetBalance(this));
|
||
|
}
|
||
|
|
||
|
private void createGadgets()
|
||
|
{
|
||
|
_gadgets = new HashMap<>(200);
|
||
|
_powerPlayGadgets = new ArrayList<>();
|
||
|
_singleParticleSelectors = new HashMap<>();
|
||
|
|
||
|
// Items
|
||
|
addGadget(new ItemEtherealPearl(this));
|
||
|
addGadget(new ItemFirework(this));
|
||
|
addGadget(new ItemTNT(this));
|
||
|
addGadget(new ItemMelonLauncher(this));
|
||
|
addGadget(new ItemFleshHook(this));
|
||
|
addGadget(new ItemPaintballGun(this));
|
||
|
addGadget(new ItemBatGun(this));
|
||
|
addGadget(new ItemCoinBomb(this));
|
||
|
addGadget(new ItemPaintbrush(this));
|
||
|
addGadget(new ItemDuelingSword(this));
|
||
|
addGadget(new ItemPartyPopper(this));
|
||
|
addGadget(new ItemCoal(this));
|
||
|
addGadget(new ItemFreezeCannon(this));
|
||
|
addGadget(new ItemSnowball(this));
|
||
|
addGadget(new ItemBow(this));
|
||
|
addGadget(new ItemLovePotion(this));
|
||
|
addGadget(new ItemFlowerGift(this));
|
||
|
addGadget(new ItemCandy(this));
|
||
|
addGadget(new ItemOAndX(this));
|
||
|
addGadget(new ItemMobBomb(this));
|
||
|
addGadget(new ItemBallCatch(this));
|
||
|
addGadget(new ItemTrampoline(this));
|
||
|
addGadget(new ItemConnect4(this));
|
||
|
addGadget(new ItemMaryPoppins(this));
|
||
|
addGadget(new ItemClacker(this));
|
||
|
addGadget(new ItemSortal(this));
|
||
|
addGadget(new ItemGrapplingHook(this));
|
||
|
|
||
|
// Costume
|
||
|
addGadget(new OutfitRaveSuitHelmet(this));
|
||
|
addGadget(new OutfitRaveSuitChestplate(this));
|
||
|
addGadget(new OutfitRaveSuitLeggings(this));
|
||
|
addGadget(new OutfitRaveSuitBoots(this));
|
||
|
|
||
|
addGadget(new OutfitSpaceSuitHelmet(this));
|
||
|
addGadget(new OutfitSpaceSuitChestplate(this));
|
||
|
addGadget(new OutfitSpaceSuitLeggings(this));
|
||
|
addGadget(new OutfitSpaceSuitBoots(this));
|
||
|
|
||
|
addGadget(new OutfitFreezeSuitHelmet(this));
|
||
|
addGadget(new OutfitFreezeSuitChestplate(this));
|
||
|
addGadget(new OutfitFreezeSuitLeggings(this));
|
||
|
addGadget(new OutfitFreezeSuitBoots(this));
|
||
|
|
||
|
addGadget(new OutfitStPatricksHat(this));
|
||
|
addGadget(new OutfitStPatricksChestplate(this));
|
||
|
addGadget(new OutfitStPatricksLeggings(this));
|
||
|
addGadget(new OutfitStPatricksBoots(this));
|
||
|
|
||
|
addGadget(new OutfitReindeerAntlers(this));
|
||
|
addGadget(new OutfitReindeerChest(this));
|
||
|
addGadget(new OutfitReindeerLegs(this));
|
||
|
addGadget(new OutfitReindeerHooves(this));
|
||
|
|
||
|
addGadget(new OutfitWindupHelmet(this));
|
||
|
addGadget(new OutfitWindupChestplate(this));
|
||
|
addGadget(new OutfitWindupLeggings(this));
|
||
|
addGadget(new OutfitWindupBoots(this));
|
||
|
|
||
|
addGadget(new OutfitTeam(this, "Team Helmet", -1, ArmorSlot.HELMET, Material.LEATHER_HELMET, (byte) 0));
|
||
|
addGadget(new OutfitTeam(this, "Team Shirt", -1, ArmorSlot.CHEST, Material.LEATHER_CHESTPLATE, (byte) 0));
|
||
|
addGadget(new OutfitTeam(this, "Team Pants", -1, ArmorSlot.LEGS, Material.LEATHER_LEGGINGS, (byte) 0));
|
||
|
addGadget(new OutfitTeam(this, "Team Boots", -1, ArmorSlot.BOOTS, Material.LEATHER_BOOTS, (byte) 0));
|
||
|
|
||
|
// Morphs
|
||
|
addGadget(new MorphVillager(this));
|
||
|
addGadget(new MorphCow(this));
|
||
|
addGadget(new MorphChicken(this));
|
||
|
addGadget(new MorphBlock(this));
|
||
|
addGadget(new MorphEnderman(this));
|
||
|
addGadget(new MorphBat(this));
|
||
|
addGadget(new MorphPumpkinKing(this));
|
||
|
addGadget(new MorphPig(this));
|
||
|
addGadget(new MorphCreeper(this));
|
||
|
addGadget(new MorphBlaze(this));
|
||
|
addGadget(new MorphWither(this));
|
||
|
addGadget(new MorphBunny(this));
|
||
|
addGadget(new MorphSlime(this, _achievementManager));
|
||
|
addGadget(new MorphTitan(this));
|
||
|
addGadget(new MorphSnowman(this));
|
||
|
addGadget(new MorphUncleSam(this));
|
||
|
addGadget(new MorphSquid(this));
|
||
|
addGadget(new MorphWitch(this));
|
||
|
addGadget(new MorphGrimReaper(this));
|
||
|
addGadget(new MorphMetalMan(this));
|
||
|
addGadget(new MorphTurkey(this));
|
||
|
addGadget(new MorphChristmasKing(this));
|
||
|
addGadget(new MorphSanta(this));
|
||
|
addGadget(new MorphDinnerbone(this));
|
||
|
addGadget(new MorphLoveDoctor(this));
|
||
|
addGadget(new MorphGoldPot(this));
|
||
|
addGadget(new MorphAwkwardRabbit(this));
|
||
|
addGadget(new MorphBobRoss(this, _hologramManager));
|
||
|
addGadget(new MorphFreedomFighter(this));
|
||
|
addGadget(new MorphMelonHead(this));
|
||
|
addGadget(new MorphHattori(this));
|
||
|
addGadget(new MorphDevon(this));
|
||
|
addGadget(new MorphAnath(this));
|
||
|
addGadget(new MorphDana(this));
|
||
|
addGadget(new MorphBardolf(this));
|
||
|
addGadget(new MorphRowena(this));
|
||
|
addGadget(new MorphLarissa(this));
|
||
|
addGadget(new MorphBiff(this));
|
||
|
addGadget(new MorphIvy(this));
|
||
|
addGadget(new MorphGhast(this));
|
||
|
addGadget(new MorphFrostGolem(this));
|
||
|
addGadget(new MorphSkeleton(this));
|
||
|
addGadget(new MorphOcelot(this));
|
||
|
addGadget(new MorphWolf(this));
|
||
|
|
||
|
// Mounts
|
||
|
addGadget(new MountUndead(this));
|
||
|
addGadget(new MountFrost(this));
|
||
|
addGadget(new MountMule(this));
|
||
|
addGadget(new MountDragon(this));
|
||
|
addGadget(new MountSlime(this));
|
||
|
addGadget(new MountCart(this));
|
||
|
addGadget(new MountSpider(this));
|
||
|
addGadget(new MountZombie(this));
|
||
|
addGadget(new MountTitan(this));
|
||
|
addGadget(new MountBabyReindeer(this));
|
||
|
addGadget(new MountValentinesSheep(this));
|
||
|
addGadget(new MountFreedomHorse(this));
|
||
|
addGadget(new MountNightmareSteed(this));
|
||
|
addGadget(new MountChicken(this));
|
||
|
addGadget(new MountCake(this));
|
||
|
addGadget(new MountLoveTrain(this));
|
||
|
addGadget(new MountStPatricksHorse(this));
|
||
|
addGadget(new MountPumpkin(this));
|
||
|
addGadget(new MountSledge(this));
|
||
|
|
||
|
// Particles
|
||
|
addGadget(new ParticleFoot(this));
|
||
|
addGadget(new ParticleEmerald(this));
|
||
|
addGadget(new ParticleRain(this));
|
||
|
addGadget(new ParticleBlood(this));
|
||
|
addGadget(new ParticleEnchant(this));
|
||
|
addGadget(new ParticleMusic(this));
|
||
|
addGadget(new ParticlePartyTime(this));
|
||
|
|
||
|
addGadget(new ParticleHeart(this));
|
||
|
addGadget(new ParticleCandyCane(this));
|
||
|
addGadget(new ParticleFrostLord(this));
|
||
|
addGadget(new ParticleLegend(this));
|
||
|
addGadget(new ParticleTitan(this));
|
||
|
addGadget(new ParticleYinYang(this));
|
||
|
addGadget(new ParticleKing(this, _castleManager));
|
||
|
|
||
|
addGadget(new ParticleWingsPixie(this));
|
||
|
addGadget(new ParticleWingsDemons(this));
|
||
|
addGadget(new ParticleWingsInfernal(this));
|
||
|
addGadget(new ParticleWingsAngel(this));
|
||
|
addGadget(new ParticleWingsLove(this));
|
||
|
addGadget(new ParticleFireRings(this));
|
||
|
addGadget(new ParticleFairy(this));
|
||
|
|
||
|
addGadget(new ParticleChristmasTree(this));
|
||
|
addGadget(new ParticleCoalFumes(this));
|
||
|
addGadget(new ParticleSpringHalo(this));
|
||
|
addGadget(new ParticleWingsBee(this));
|
||
|
|
||
|
addGadget(new ParticleFreedom(this));
|
||
|
addGadget(new ParticleFreedomFireworks(this));
|
||
|
addGadget(new ParticleStarSpangled(this));
|
||
|
addGadget(new ParticleAuraNiceness(this));
|
||
|
addGadget(new ParticleCanadian(this));
|
||
|
|
||
|
addGadget(new ParticleHalloween(this));
|
||
|
addGadget(new ParticleWingsChristmas(this));
|
||
|
addGadget(new ParticleBlizzard(this));
|
||
|
addGadget(new ParticleFidgetSpinner(this));
|
||
|
addGadget(new ParticlePumpkinShield(this));
|
||
|
addGadget(new ParticleRainbow(this, _achievementManager));
|
||
|
addGadget(new ParticleMacawWings(this));
|
||
|
addGadget(new ParticleChickenWings(this));
|
||
|
addGadget(new ParticleEnderDragonWings(this));
|
||
|
addGadget(new ParticleFoxTail(this));
|
||
|
addGadget(new ParticleJetPack(this));
|
||
|
addGadget(new ParticleCape(this));
|
||
|
addGadget(new ParticleLegendaryHero(this));
|
||
|
addGadget(new ParticleWolfTail(this));
|
||
|
addGadget(new ParticleWitchsCure(this));
|
||
|
addGadget(new ParticleRainbowTrail(this));
|
||
|
addGadget(new ParticleDeepSeaSwirl(this));
|
||
|
addGadget(new ParticleInfused(this));
|
||
|
addGadget(new ParticleFiveYear(this));
|
||
|
|
||
|
// Arrow Trails
|
||
|
addGadget(new ArrowTrailFrostLord(this));
|
||
|
addGadget(new ArrowTrailTitan(this));
|
||
|
addGadget(new ArrowTrailCandyCane(this));
|
||
|
addGadget(new ArrowTrailConfetti(this));
|
||
|
addGadget(new ArrowTrailCupid(this));
|
||
|
addGadget(new ArrowTrailEmerald(this));
|
||
|
addGadget(new ArrowTrailShadow(this));
|
||
|
addGadget(new ArrowTrailEnchant(this));
|
||
|
addGadget(new ArrowTrailStorm(this));
|
||
|
addGadget(new ArrowTrailBlood(this));
|
||
|
addGadget(new ArrowTrailMusic(this));
|
||
|
addGadget(new ArrowTrailFreedom(this));
|
||
|
addGadget(new ArrowTrailHalloween(this));
|
||
|
addGadget(new ArrowTrailSpring(this));
|
||
|
addGadget(new ArrowTrailRedWhite(this));
|
||
|
addGadget(new ArrowTrailPresent(this));
|
||
|
addGadget(new ArrowTrailRainbow(this, _achievementManager));
|
||
|
addGadget(new ArrowTrailLegend(this));
|
||
|
addGadget(new ArrowTrailBalance(this));
|
||
|
|
||
|
// Death Effect
|
||
|
addGadget(new DeathFrostLord(this));
|
||
|
addGadget(new DeathTitan(this));
|
||
|
addGadget(new DeathCandyCane(this));
|
||
|
addGadget(new DeathPinataBurst(this));
|
||
|
addGadget(new DeathCupidsBrokenHeart(this));
|
||
|
addGadget(new DeathEmerald(this));
|
||
|
addGadget(new DeathShadow(this));
|
||
|
addGadget(new DeathEnchant(this));
|
||
|
addGadget(new DeathStorm(this));
|
||
|
addGadget(new DeathBlood(this));
|
||
|
addGadget(new DeathMusic(this));
|
||
|
addGadget(new DeathFreedom(this));
|
||
|
addGadget(new DeathPresentDanger(this));
|
||
|
addGadget(new DeathSpring(this));
|
||
|
addGadget(new DeathMapleLeaf(this));
|
||
|
addGadget(new DeathHalloween(this));
|
||
|
addGadget(new DeathRainbow(this, _achievementManager));
|
||
|
addGadget(new DeathLegend(this));
|
||
|
addGadget(new DeathBalance(this));
|
||
|
|
||
|
// Double Jump
|
||
|
addGadget(new DoubleJumpFrostLord(this));
|
||
|
addGadget(new DoubleJumpTitan(this));
|
||
|
addGadget(new DoubleJumpCandyCane(this));
|
||
|
addGadget(new DoubleJumpFirecracker(this));
|
||
|
addGadget(new DoubleJumpCupidsWings(this));
|
||
|
addGadget(new DoubleJumpEmerald(this));
|
||
|
addGadget(new DoubleJumpShadow(this));
|
||
|
addGadget(new DoubleJumpEnchant(this));
|
||
|
addGadget(new DoubleJumpStorm(this));
|
||
|
addGadget(new DoubleJumpBlood(this));
|
||
|
addGadget(new DoubleJumpMusic(this));
|
||
|
addGadget(new DoubleJumpFreedom(this));
|
||
|
addGadget(new DoubleJumpHalloween(this));
|
||
|
addGadget(new DoubleJumpSpring(this));
|
||
|
addGadget(new DoubleJumpMaple(this));
|
||
|
addGadget(new DoubleJumpPresent(this));
|
||
|
addGadget(new DoubleJumpRainbow(this, _achievementManager));
|
||
|
addGadget(new DoubleJumpLegend(this));
|
||
|
addGadget(new DoubleJumpBalance(this));
|
||
|
|
||
|
// Hat
|
||
|
for (HatType hatType : HatType.values())
|
||
|
{
|
||
|
addGadget(new HatItem(this, hatType));
|
||
|
}
|
||
|
|
||
|
//Win Effects
|
||
|
addGadget(new WinEffectPodium(this));
|
||
|
addGadget(new WinEffectLogo(this));
|
||
|
addGadget(new WinEffectMrPunchMan(this));
|
||
|
addGadget(new WinEffectFlames(this));
|
||
|
addGadget(new WinEffectSnowTrails(this));
|
||
|
addGadget(new WinEffectBabyChicken(this));
|
||
|
addGadget(new WinEffectLightningStrike(this));
|
||
|
addGadget(new WinEffectRiseOfTheElderGuardian(this));
|
||
|
addGadget(new WinEffectLavaTrap(this));
|
||
|
addGadget(new WinEffectHalloween(this));
|
||
|
addGadget(new WinEffectWinterWarfare(this));
|
||
|
addGadget(new WinEffectLoveIsABattlefield(this));
|
||
|
addGadget(new WinEffectTornado(this));
|
||
|
addGadget(new WinEffectEarthquake(this));
|
||
|
addGadget(new WinEffectPartyAnimal(this));
|
||
|
|
||
|
// Rank based win effects
|
||
|
addGadget(new WinEffectRankUltra(this));
|
||
|
addGadget(new WinEffectRankHero(this));
|
||
|
addGadget(new WinEffectRankLegend(this));
|
||
|
addGadget(new WinEffectRankTitan(this));
|
||
|
addGadget(new WinEffectRankEternal(this));
|
||
|
|
||
|
// Music
|
||
|
addGadget(new MusicGadget(this, "13 Disc", new String[]{""}, -2, 2256, 178000));
|
||
|
addGadget(new MusicGadget(this, "Cat Disc", new String[]{""}, -2, 2257, 185000));
|
||
|
addGadget(new MusicGadget(this, "Blocks Disc", new String[]{""}, -2, 2258, 345000));
|
||
|
addGadget(new MusicGadget(this, "Chirp Disc", new String[]{""}, -2, 2259, 185000));
|
||
|
addGadget(new MusicGadget(this, "Far Disc", new String[]{""}, -2, 2260, 174000));
|
||
|
addGadget(new MusicGadget(this, "Mall Disc", new String[]{""}, -2, 2261, 197000));
|
||
|
addGadget(new MusicGadget(this, "Mellohi Disc", new String[]{""}, -2, 2262, 96000));
|
||
|
addGadget(new MusicGadget(this, "Stal Disc", new String[]{""}, -2, 2263, 150000));
|
||
|
addGadget(new MusicGadget(this, "Strad Disc", new String[]{""}, -2, 2264, 188000));
|
||
|
addGadget(new MusicGadget(this, "Ward Disc", new String[]{""}, -2, 2265, 251000));
|
||
|
addGadget(new MusicGadget(this, "Wait Disc", new String[]{""}, -2, 2267, 238000));
|
||
|
|
||
|
// Balloons
|
||
|
for (BalloonType balloonType : BalloonType.values())
|
||
|
{
|
||
|
addGadget(new BalloonGadget(this, balloonType));
|
||
|
}
|
||
|
|
||
|
// TAUNTS!!!
|
||
|
addGadget(new EternalTaunt(this));
|
||
|
addGadget(new BlowAKissTaunt(this));
|
||
|
addGadget(new RainbowTaunt(this));
|
||
|
addGadget(new InfernalTaunt(this));
|
||
|
addGadget(new FrostBreathTaunt(this));
|
||
|
addGadget(new EmojiTaunt(this));
|
||
|
addGadget(new EasyModeTaunt(this));
|
||
|
addGadget(new ChickenTaunt(this));
|
||
|
|
||
|
// Flags
|
||
|
addGadget(new FlagGadget(this, FlagType.CANADA));
|
||
|
addGadget(new FlagGadget(this, FlagType.USA));
|
||
|
addGadget(new FlagGadget(this, FlagType.MINEPLEX));
|
||
|
addGadget(new FlagGadget(this, FlagType.RUDOLPH));
|
||
|
addGadget(new FlagGadget(this, FlagType.CHRISTMAS_TREE));
|
||
|
addGadget(new FlagGadget(this, FlagType.PRESENT));
|
||
|
addGadget(new FlagGadget(this, FlagType.WREATH));
|
||
|
addGadget(new FlagGadget(this, FlagType.SNOW_FLAKE));
|
||
|
addGadget(new FlagGadget(this, FlagType.HEART));
|
||
|
|
||
|
// Kit Selectors
|
||
|
addGadget(new WaterWingsKitSelector(this));
|
||
|
addGadget(new HaloKitSelector(this));
|
||
|
addGadget(new RainbowDanceKitSelector(this));
|
||
|
addGadget(new RainCloudKitSelector(this));
|
||
|
addGadget(new ShimmeringRingKitSelector(this));
|
||
|
addGadget(new HalloweenKitSelector(this));
|
||
|
|
||
|
for (SingleParticleKitSelector.SingleParticleSelectors singleParticleSelectors : SingleParticleKitSelector.SingleParticleSelectors.values())
|
||
|
{
|
||
|
Gadget gadget = singleParticleSelectors.getKitSelectorGadget(this);
|
||
|
addGadget(gadget);
|
||
|
_singleParticleSelectors.put(singleParticleSelectors, gadget);
|
||
|
}
|
||
|
|
||
|
for (WeaponNameType weaponNameType : WeaponNameType.values())
|
||
|
{
|
||
|
addGadget(new WeaponNameGadget(this, weaponNameType));
|
||
|
}
|
||
|
|
||
|
for (LevelPrefixType prefixType : LevelPrefixType.values())
|
||
|
{
|
||
|
addGadget(new LevelPrefixGadget(this, prefixType));
|
||
|
}
|
||
|
|
||
|
new GameCosmeticType(this, GameDisplay.MineStrike)
|
||
|
{
|
||
|
@Override
|
||
|
public void addCategories()
|
||
|
{
|
||
|
new GameCosmeticCategory(this, "Pistol", new ItemStack(Material.NETHER_STALK), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(1))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "Shotgun", new ItemBuilder(Material.INK_SACK, (byte) 14).build(), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(2))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "SMG", new ItemStack(Material.INK_SACK), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(3))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "Rifle", new ItemBuilder(Material.INK_SACK, (byte) 7).build(), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(4))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "Sniper Rifle", new ItemStack(Material.SULPHUR), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(5))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "Knife", new ItemStack(Material.DIAMOND_SWORD), false)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (MineStrikeSkin mineStrikeSkin : MineStrikeSkin.getByCategory(6))
|
||
|
{
|
||
|
addGameGadget(new GameModifierMineStrikeSkin(getManager(), this, mineStrikeSkin, CostConstants.FOUND_IN_MINESTRIKE_CHESTS));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
new GameCosmeticType(this, GameDisplay.MOBA)
|
||
|
{
|
||
|
@Override
|
||
|
public void addCategories()
|
||
|
{
|
||
|
new GameCosmeticCategory(this, "Hero Skins", SkinData.HATTORI.getSkull(), true)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
HeroSkinGadget.getSkins().values().forEach(heroSkins -> heroSkins.forEach(skinData -> addGameGadget(new HeroSkinGadget(getManager(), this, skinData))));
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public GadgetPage getGadgetPage(GameCosmeticCategoryPage parent)
|
||
|
{
|
||
|
return new HeroSkinCategoryPage(parent.getPlugin(), parent.getShop(), parent.getClientManager(), parent.getDonationManager(), getCategoryName(), parent.getClient().GetPlayer(), parent);
|
||
|
}
|
||
|
};
|
||
|
new GameCosmeticCategory(this, "Shop Morph", new ItemStack(Material.GOLD_INGOT), false)
|
||
|
{
|
||
|
@Override
|
||
|
public void addGadgets()
|
||
|
{
|
||
|
for (ShopMorphType type : ShopMorphType.values())
|
||
|
{
|
||
|
addGameGadget(new ShopMorphGadget(getManager(), this, type));
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
for (GadgetType gadgetType : GadgetType.values())
|
||
|
{
|
||
|
_gadgets.putIfAbsent(gadgetType, new ArrayList<>());
|
||
|
}
|
||
|
|
||
|
for (Gadget gadget : getAllGadgets())
|
||
|
{
|
||
|
if (gadget.getYearMonth() != null)
|
||
|
{
|
||
|
_powerPlayGadgets.add(gadget);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Sort Power Play Gadgets in order of addition
|
||
|
_powerPlayGadgets.sort((o1, o2) ->
|
||
|
{
|
||
|
if (o1.getYearMonth().isAfter(o2.getYearMonth()))
|
||
|
{
|
||
|
return 1;
|
||
|
}
|
||
|
else if (o1.getYearMonth().equals(o2.getYearMonth()))
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return -1;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private void registerTrackers()
|
||
|
{
|
||
|
_missionManager.registerTrackers(new GadgetUseTracker(_missionManager));
|
||
|
}
|
||
|
|
||
|
public <T extends Gadget> T getGadget(Class<T> c)
|
||
|
{
|
||
|
for (GadgetType type : GadgetType.values())
|
||
|
{
|
||
|
for (Gadget gadget : getGadgets(type))
|
||
|
{
|
||
|
if (gadget.getClass().equals(c))
|
||
|
{
|
||
|
return (T) gadget;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public GadgetSet getGadgetSet(Class<? extends GadgetSet> c)
|
||
|
{
|
||
|
for (GadgetSet set : _sets)
|
||
|
{
|
||
|
if (set.getClass().equals(c)) return set;
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
private void addSet(GadgetSet set)
|
||
|
{
|
||
|
_sets.add(set);
|
||
|
}
|
||
|
|
||
|
public void addGadget(Gadget gadget)
|
||
|
{
|
||
|
_gadgets.computeIfAbsent(gadget.getGadgetType(), k -> new ArrayList<>()).add(gadget);
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void onPlayerJoin(PlayerJoinEvent event)
|
||
|
{
|
||
|
// Fixes win room speed bug
|
||
|
event.getPlayer().setWalkSpeed(0.2f);
|
||
|
event.getPlayer().setFlySpeed(0.1f);
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void statsLoaded(PlayerStatsLoadedEvent event)
|
||
|
{
|
||
|
_userGadgetPersistence.load(event.getPlayer());
|
||
|
}
|
||
|
|
||
|
public List<Gadget> getGadgets(GadgetType gadgetType)
|
||
|
{
|
||
|
return _gadgets.get(gadgetType);
|
||
|
}
|
||
|
|
||
|
public List<Gadget> getAllGadgets()
|
||
|
{
|
||
|
List<Gadget> gadgets = new ArrayList<>();
|
||
|
for (GadgetType gadgetType : GadgetType.values())
|
||
|
{
|
||
|
gadgets.addAll(getGadgets(gadgetType));
|
||
|
}
|
||
|
return gadgets;
|
||
|
}
|
||
|
|
||
|
public List<Gadget> getPowerPlayGadgets()
|
||
|
{
|
||
|
return _powerPlayGadgets;
|
||
|
}
|
||
|
|
||
|
public Gadget getGadget(String name, GadgetType gadgetType)
|
||
|
{
|
||
|
List<Gadget> gadgets = getGadgets(gadgetType);
|
||
|
for (Gadget gadget : gadgets)
|
||
|
{
|
||
|
if (gadget.getName().equalsIgnoreCase(name) || Arrays.asList(gadget.getAlternativePackageNames()).contains(name))
|
||
|
{
|
||
|
return gadget;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public HatGadget getHatGadget(HatType type)
|
||
|
{
|
||
|
for (Gadget gadget : getGadgets(GadgetType.HAT))
|
||
|
{
|
||
|
if (gadget instanceof HatGadget)
|
||
|
{
|
||
|
HatGadget hatGadget = (HatGadget) gadget;
|
||
|
if (type.equals(hatGadget.getHatType()))
|
||
|
return hatGadget;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public FlagGadget getFlagGadget(FlagType type)
|
||
|
{
|
||
|
for (Gadget gadget : getGadgets(GadgetType.FLAG))
|
||
|
{
|
||
|
if (gadget instanceof FlagGadget)
|
||
|
{
|
||
|
FlagGadget flagGadget = (FlagGadget) gadget;
|
||
|
|
||
|
if (type.equals(flagGadget.getFlagType()))
|
||
|
{
|
||
|
return flagGadget;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public BalloonGadget getBalloonGadget(BalloonType balloonType)
|
||
|
{
|
||
|
return (BalloonGadget) getGadgets(GadgetType.BALLOON).stream()
|
||
|
.filter(gadget -> ((BalloonGadget) gadget).getBalloonType() == balloonType)
|
||
|
.findFirst()
|
||
|
.orElse(null);
|
||
|
}
|
||
|
|
||
|
public WeaponNameGadget getWeaponNameGadget(WeaponNameType weaponNameType)
|
||
|
{
|
||
|
return (WeaponNameGadget) getGadgets(GadgetType.WEAPON_NAME).stream()
|
||
|
.filter(gadget -> ((WeaponNameGadget) gadget).getWeaponNameType() == weaponNameType)
|
||
|
.findFirst()
|
||
|
.orElse(null);
|
||
|
}
|
||
|
|
||
|
public SingleParticleKitSelector getSingleParticleKitSelector(SingleParticleKitSelector.SingleParticleSelectors singleParticleSelectors)
|
||
|
{
|
||
|
return (SingleParticleKitSelector) _singleParticleSelectors.get(singleParticleSelectors);
|
||
|
}
|
||
|
|
||
|
// Disallows two armor gadgets in same slot.
|
||
|
public void removeOutfit(Player player, ArmorSlot slot)
|
||
|
{
|
||
|
for (GadgetType gadgetType : _gadgets.keySet())
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(gadgetType))
|
||
|
{
|
||
|
if (gadget instanceof OutfitGadget)
|
||
|
{
|
||
|
OutfitGadget armor = (OutfitGadget) gadget;
|
||
|
|
||
|
if (armor.getSlot() == slot)
|
||
|
{
|
||
|
armor.disableCustom(player, true);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void removeGadgetType(Player player, GadgetType type)
|
||
|
{
|
||
|
List<Gadget> gadgets = _gadgets.get(type);
|
||
|
if (gadgets == null) return;
|
||
|
for (Gadget g : gadgets)
|
||
|
{
|
||
|
g.disable(player);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void removeGadgetType(Player player, GadgetType type, Gadget enabled)
|
||
|
{
|
||
|
List<Gadget> gadgets = _gadgets.get(type);
|
||
|
if (gadgets == null) return;
|
||
|
for (Gadget g : gadgets)
|
||
|
{
|
||
|
if (g != enabled)
|
||
|
g.disable(player);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void disableAll()
|
||
|
{
|
||
|
_userGadgetPersistence.setEnabled(false);
|
||
|
|
||
|
_gadgets.forEach((type, gadgets) ->
|
||
|
{
|
||
|
if (type.disableForGame())
|
||
|
{
|
||
|
gadgets.forEach(Gadget::disableForAll);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
public void disableAll(Player player)
|
||
|
{
|
||
|
for (GadgetType gadgetType : _gadgets.keySet())
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(gadgetType))
|
||
|
{
|
||
|
gadget.disable(player);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void disableAll(Player player, boolean winRooms)
|
||
|
{
|
||
|
if (winRooms)
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(GadgetType.PARTICLE))
|
||
|
{
|
||
|
gadget.disable(player, false);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
for (GadgetType gadgetType : _gadgets.keySet())
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(gadgetType))
|
||
|
{
|
||
|
gadget.disable(player, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void disableAll(Player player, List<String> dontDisable)
|
||
|
{
|
||
|
for (GadgetType gadgetType : _gadgets.keySet())
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(gadgetType))
|
||
|
{
|
||
|
if (dontDisable.contains(gadget.getName()))
|
||
|
continue;
|
||
|
|
||
|
gadget.disable(player);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean selectLocation(Gadget gadget, Location location)
|
||
|
{
|
||
|
GadgetSelectLocationEvent event = new GadgetSelectLocationEvent(gadget, location);
|
||
|
UtilServer.CallEvent(event);
|
||
|
return !event.isCancelled();
|
||
|
}
|
||
|
|
||
|
public boolean selectBlocks(Gadget gadget, Block block)
|
||
|
{
|
||
|
// Use an ArrayList since removing is unsupported for singletonLists
|
||
|
return selectBlocks(gadget, new ArrayList<>(Collections.singletonList(block)));
|
||
|
}
|
||
|
|
||
|
public boolean selectBlocks(Gadget gadget, Collection<Block> blocks)
|
||
|
{
|
||
|
GadgetBlockEvent event = new GadgetBlockEvent(gadget, blocks);
|
||
|
UtilServer.CallEvent(event);
|
||
|
|
||
|
if (event.getBlocks().isEmpty())
|
||
|
{
|
||
|
event.setCancelled(true);
|
||
|
}
|
||
|
|
||
|
return !event.isCancelled();
|
||
|
}
|
||
|
|
||
|
public boolean selectEntity(Gadget gadget, Entity entity)
|
||
|
{
|
||
|
GadgetCollideEntityEvent event = new GadgetCollideEntityEvent(gadget, entity);
|
||
|
event.setCancelled(entity instanceof ArmorStand);
|
||
|
UtilServer.CallEvent(event);
|
||
|
return !event.isCancelled();
|
||
|
}
|
||
|
|
||
|
public void informNoUse(Player player)
|
||
|
{
|
||
|
player.sendMessage(F.main(getName(), "You cannot use that cosmetic in this area."));
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||
|
public void doubleJump(PlayerToggleFlightEvent event)
|
||
|
{
|
||
|
playLeapEffect(event.getPlayer());
|
||
|
}
|
||
|
|
||
|
public void playLeapEffect(Player player)
|
||
|
{
|
||
|
GameMode gameMode = player.getGameMode();
|
||
|
|
||
|
if (gameMode == GameMode.CREATIVE || gameMode == GameMode.SPECTATOR || UtilPlayer.isSpectator(player) || player.isFlying())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!UtilServer.isHubServer())
|
||
|
{
|
||
|
_missionManager.incrementProgress(player, 1, MissionTrackerType.GAME_LEAP, null, null);
|
||
|
}
|
||
|
|
||
|
if (hideParticles())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Gadget gadget = getActive(player, GadgetType.DOUBLE_JUMP);
|
||
|
|
||
|
if (gadget != null)
|
||
|
{
|
||
|
((DoubleJumpEffectGadget) gadget).doEffect(player);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public PetManager getPetManager()
|
||
|
{
|
||
|
return _petManager;
|
||
|
}
|
||
|
|
||
|
public CoreClientManager getClientManager()
|
||
|
{
|
||
|
return _clientManager;
|
||
|
}
|
||
|
|
||
|
public DonationManager getDonationManager()
|
||
|
{
|
||
|
return _donationManager;
|
||
|
}
|
||
|
|
||
|
public PreferencesManager getPreferencesManager()
|
||
|
{
|
||
|
return _preferencesManager;
|
||
|
}
|
||
|
|
||
|
public ProjectileManager getProjectileManager()
|
||
|
{
|
||
|
return _projectileManager;
|
||
|
}
|
||
|
|
||
|
public DisguiseManager getDisguiseManager()
|
||
|
{
|
||
|
return _disguiseManager;
|
||
|
}
|
||
|
|
||
|
public HologramManager getHologramManager()
|
||
|
{
|
||
|
return _hologramManager;
|
||
|
}
|
||
|
|
||
|
public InventoryManager getInventoryManager()
|
||
|
{
|
||
|
return _inventoryManager;
|
||
|
}
|
||
|
|
||
|
public BlockRestore getBlockRestore()
|
||
|
{
|
||
|
return _blockRestore;
|
||
|
}
|
||
|
|
||
|
public PacketHandler getPacketManager()
|
||
|
{
|
||
|
return _packetManager;
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.MONITOR)
|
||
|
public void setMoving(PlayerMoveEvent event)
|
||
|
{
|
||
|
Location from = event.getFrom(), to = event.getTo();
|
||
|
|
||
|
if (from.getX() == to.getX() && from.getY() == to.getY() && from.getZ() == to.getZ())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
_lastMove.put(event.getPlayer(), System.currentTimeMillis());
|
||
|
}
|
||
|
|
||
|
public boolean isMoving(Player player)
|
||
|
{
|
||
|
return !UtilEnt.isGrounded(player) || !UtilTime.elapsed(_lastMove.getOrDefault(player, Long.MAX_VALUE), 500);
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void onPlayerQuit(PlayerQuitEvent event)
|
||
|
{
|
||
|
event.getPlayer().setWalkSpeed(0.2f);
|
||
|
event.getPlayer().setFlySpeed(0.1f);
|
||
|
disableAll(event.getPlayer(), false);
|
||
|
_lastMove.remove(event.getPlayer());
|
||
|
_playerActiveGadgetMap.remove(event.getPlayer());
|
||
|
event.getPlayer().setWalkSpeed(0.2f);
|
||
|
event.getPlayer().setFlySpeed(0.1f);
|
||
|
_soulManager.giveSoul(event.getPlayer());
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void death(PlayerDeathEvent event)
|
||
|
{
|
||
|
_lastMove.remove(event.getEntity());
|
||
|
}
|
||
|
|
||
|
public void setActive(Player player, Gadget gadget)
|
||
|
{
|
||
|
_playerActiveGadgetMap.computeIfAbsent(player, k -> new HashMap<>()).put(gadget.getGadgetType(), gadget);
|
||
|
}
|
||
|
|
||
|
public Gadget getActive(Player player, GadgetType gadgetType)
|
||
|
{
|
||
|
return _playerActiveGadgetMap.computeIfAbsent(player, k -> new HashMap<>()).get(gadgetType);
|
||
|
}
|
||
|
|
||
|
public void removeActive(Player player, Gadget gadget)
|
||
|
{
|
||
|
_playerActiveGadgetMap.computeIfAbsent(player, k -> new HashMap<>()).remove(gadget.getGadgetType());
|
||
|
}
|
||
|
|
||
|
public void setHideParticles(boolean b)
|
||
|
{
|
||
|
_hideParticles = b;
|
||
|
}
|
||
|
|
||
|
public boolean hideParticles()
|
||
|
{
|
||
|
return _hideParticles;
|
||
|
}
|
||
|
|
||
|
public void setShowWeaponNames(boolean showWeaponNames)
|
||
|
{
|
||
|
_showWeaponNames = showWeaponNames;
|
||
|
}
|
||
|
|
||
|
public boolean showWeaponNames()
|
||
|
{
|
||
|
return _showWeaponNames;
|
||
|
}
|
||
|
|
||
|
public void setActiveItemSlot(int i)
|
||
|
{
|
||
|
_activeItemSlot = i;
|
||
|
}
|
||
|
|
||
|
public int getActiveItemSlot()
|
||
|
{
|
||
|
return _activeItemSlot;
|
||
|
}
|
||
|
|
||
|
public void redisplayActiveItem(Player player)
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(GadgetType.ITEM))
|
||
|
{
|
||
|
if (gadget instanceof ItemGadget)
|
||
|
{
|
||
|
if (gadget.isActive(player))
|
||
|
{
|
||
|
((ItemGadget) gadget).ApplyItem(player, false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public boolean canPlaySongAt(Location location)
|
||
|
{
|
||
|
for (Gadget gadget : _gadgets.get(GadgetType.MUSIC_DISC))
|
||
|
{
|
||
|
if (gadget instanceof MusicGadget)
|
||
|
{
|
||
|
if (!((MusicGadget) gadget).canPlayAt(location))
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public boolean isGadgetEnabled()
|
||
|
{
|
||
|
return _gadgetsEnabled;
|
||
|
}
|
||
|
|
||
|
public void toggleGadgetEnabled()
|
||
|
{
|
||
|
setGadgetEnabled(!_gadgetsEnabled);
|
||
|
}
|
||
|
|
||
|
public void setGadgetEnabled(boolean enabled)
|
||
|
{
|
||
|
if (_gadgetsEnabled != enabled)
|
||
|
{
|
||
|
_gadgetsEnabled = enabled;
|
||
|
disableAll();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void chissMeow(PlayerToggleSneakEvent event)
|
||
|
{
|
||
|
if (event.getPlayer().isSneaking())
|
||
|
return;
|
||
|
|
||
|
if (event.getPlayer().getName().equalsIgnoreCase("Chiss"))
|
||
|
event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.CAT_MEOW, 1f, 1f);
|
||
|
|
||
|
if (event.getPlayer().getName().equalsIgnoreCase("defek7"))
|
||
|
event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.WOLF_BARK, 1f, 1f);
|
||
|
|
||
|
if (event.getPlayer().getName().equalsIgnoreCase("sterling_"))
|
||
|
event.getPlayer().getWorld().playSound(event.getPlayer().getLocation(), Sound.PIG_IDLE, 1f, 1f);
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void onGadgetEnable(GadgetEnableEvent event)
|
||
|
{
|
||
|
if (!_gadgetsEnabled)
|
||
|
event.setCancelled(true);
|
||
|
Player player = event.getPlayer();
|
||
|
if (_incognitoManager.Get(player).Hidden && event.getGadget().getGadgetType() == GadgetType.PARTICLE)
|
||
|
{
|
||
|
event.setCancelled(true);
|
||
|
player.sendMessage(F.main("Cosmetics", "You cannot enable particles while vanished!"));
|
||
|
}
|
||
|
if (event.getGadget().getGadgetType() == GadgetType.MORPH)
|
||
|
{
|
||
|
if (event.getGadget() instanceof MorphDinnerbone)
|
||
|
{
|
||
|
if (getActive(player, GadgetType.MOUNT) != null)
|
||
|
{
|
||
|
event.setCancelled(true);
|
||
|
UtilPlayer.message(player, F.main("Cosmetics", "You cannot morph into " + event.getGadget().getName() + " with an active mount!"));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
private void saveGadget(GadgetChangeEvent event)
|
||
|
{
|
||
|
Gadget gadget = event.getGadget();
|
||
|
|
||
|
if (gadget != null)
|
||
|
{
|
||
|
_userGadgetPersistence.save(event.getPlayer(), gadget, event.getGadgetState() == GadgetState.ENABLED);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void onVanish(IncognitoStatusChangeEvent event)
|
||
|
{
|
||
|
if (event.getNewState())
|
||
|
{
|
||
|
for (Gadget gadget : getGadgets(GadgetType.PARTICLE))
|
||
|
{
|
||
|
if (gadget.isActive(event.getPlayer()))
|
||
|
{
|
||
|
gadget.disable(event.getPlayer());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public UserGadgetPersistence getUserGadgetPersistence()
|
||
|
{
|
||
|
return _userGadgetPersistence;
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void checkPlayerSwim(PlayerMoveEvent event)
|
||
|
{
|
||
|
Player player = event.getPlayer();
|
||
|
boolean inWater = UtilEnt.isInWater(player);
|
||
|
|
||
|
if (inWater && _swimmingPlayers.add(player) || !inWater && _swimmingPlayers.remove(player))
|
||
|
{
|
||
|
UtilServer.CallEvent(new PlayerToggleSwimEvent(player, inWater));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SoulManager getSoulManager()
|
||
|
{
|
||
|
return _soulManager;
|
||
|
}
|
||
|
|
||
|
@EventHandler
|
||
|
public void onTauntCommand(TauntCommandEvent event)
|
||
|
{
|
||
|
Player player = event.getPlayer();
|
||
|
|
||
|
Gadget gadget = getActive(player, GadgetType.TAUNT);
|
||
|
|
||
|
if (gadget == null)
|
||
|
{
|
||
|
event.setState(TauntCommandEvent.TauntState.NO_TAUNT);
|
||
|
UtilPlayer.message(player, F.main("Taunt", event.getState().getMessage()));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (!(gadget instanceof TauntGadget))
|
||
|
{
|
||
|
event.setState(TauntCommandEvent.TauntState.NO_TAUNT);
|
||
|
UtilPlayer.message(player, F.main("Taunt", event.getState().getMessage()));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
TauntGadget taunt = (TauntGadget) gadget;
|
||
|
|
||
|
if (!event.isGameInProgress() && event.getState().equals(TauntCommandEvent.TauntState.NONE))
|
||
|
event.setState(TauntCommandEvent.TauntState.NOT_IN_GAME);
|
||
|
|
||
|
if (taunt.isGameDisabled(event.getGameDisplay()) && event.getState().equals(TauntCommandEvent.TauntState.NONE))
|
||
|
event.setState(TauntCommandEvent.TauntState.GAME_DISABLED);
|
||
|
|
||
|
if (!event.isAlive() && event.getState().equals(TauntCommandEvent.TauntState.NONE))
|
||
|
event.setState(TauntCommandEvent.TauntState.NOT_ALIVE);
|
||
|
|
||
|
if (event.isSpectator() && event.getState().equals(TauntCommandEvent.TauntState.NONE))
|
||
|
event.setState(TauntCommandEvent.TauntState.SPECTATOR);
|
||
|
|
||
|
if (event.isInPvp(taunt.getPvpCooldown()) && !taunt.canPlayWithPvp()
|
||
|
&& event.getState().equals(TauntCommandEvent.TauntState.NONE))
|
||
|
event.setState(TauntCommandEvent.TauntState.PVP);
|
||
|
|
||
|
if (event.getState() != TauntCommandEvent.TauntState.NONE)
|
||
|
{
|
||
|
UtilPlayer.message(player, F.main("Taunt", event.getState().getMessage()));
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// LCastr0 is an idiot so this is the only solution
|
||
|
if (Recharge.Instance.usable(player, taunt.getName()))
|
||
|
{
|
||
|
_missionManager.incrementProgress(player, 1, MissionTrackerType.GAME_TAUNT, null, gadget.getClass());
|
||
|
}
|
||
|
|
||
|
taunt.start(player);
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.HIGH)
|
||
|
public void anvilUse(InventoryClickEvent event)
|
||
|
{
|
||
|
if (event.isCancelled() || !showWeaponNames())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Inventory inventory = event.getClickedInventory();
|
||
|
|
||
|
if (inventory == null || !(inventory instanceof AnvilInventory) || event.getRawSlot() != 2)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ItemStack itemStack = inventory.getItem(event.getRawSlot());
|
||
|
|
||
|
if (itemStack == null || !itemStack.hasItemMeta() || !itemStack.getItemMeta().hasDisplayName())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
event.setCancelled(true);
|
||
|
|
||
|
Player player = (Player) event.getWhoClicked();
|
||
|
|
||
|
player.playSound(player.getLocation(), Sound.ITEM_BREAK, 1, 1);
|
||
|
player.sendMessage(F.main(_moduleName, "You cannot rename an item in an " + F.name("Anvil") + "."));
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||
|
public void gameStart(CoreGameStartEvent event)
|
||
|
{
|
||
|
_gameIsLive = true;
|
||
|
}
|
||
|
|
||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||
|
public void gameStop(CoreGameStopEvent event)
|
||
|
{
|
||
|
_gameIsLive = false;
|
||
|
}
|
||
|
|
||
|
public boolean isGameLive()
|
||
|
{
|
||
|
return _gameIsLive;
|
||
|
}
|
||
|
|
||
|
public CastleManager getCastleManager()
|
||
|
{
|
||
|
return _castleManager;
|
||
|
}
|
||
|
|
||
|
public GameCosmeticManager getGameCosmeticManager()
|
||
|
{
|
||
|
return _gameCosmeticManager;
|
||
|
}
|
||
|
|
||
|
public AchievementManager getAchievementManager()
|
||
|
{
|
||
|
return _achievementManager;
|
||
|
}
|
||
|
|
||
|
public MissionManager getMissionManager()
|
||
|
{
|
||
|
return _missionManager;
|
||
|
}
|
||
|
}
|