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> _gadgets; private List _powerPlayGadgets; private Map _singleParticleSelectors; private final Map _lastMove = new HashMap<>(); private final Map> _playerActiveGadgetMap = new HashMap<>(); private final Set _sets = new HashSet<>(); private UserGadgetPersistence _userGadgetPersistence; private boolean _hideParticles, _showWeaponNames = true; private int _activeItemSlot = 3; private boolean _gadgetsEnabled = true, _gameIsLive = false; private final Set _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 getGadget(Class 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 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 getGadgets(GadgetType gadgetType) { return _gadgets.get(gadgetType); } public List getAllGadgets() { List gadgets = new ArrayList<>(); for (GadgetType gadgetType : GadgetType.values()) { gadgets.addAll(getGadgets(gadgetType)); } return gadgets; } public List getPowerPlayGadgets() { return _powerPlayGadgets; } public Gadget getGadget(String name, GadgetType gadgetType) { List 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 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 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 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 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; } }