├── .gitattributes ├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug-report.md │ ├── feature-request.md │ └── i-m-having-trouble.md ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── dist ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── dist │ └── Dist.java ├── paper ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── paper │ ├── PaperEventHelpers.java │ ├── PaperModule.java │ ├── events │ ├── AnvilBlockDamagedScriptEvent.java │ ├── AreaEnterExitScriptEventPaperImpl.java │ ├── BellRingScriptEvent.java │ ├── BlockPreDispenseScriptEvent.java │ ├── CreeperIgnitesScriptEvent.java │ ├── DragonEggFormScriptEvent.java │ ├── EntityAddToWorldScriptEvent.java │ ├── EntityKnocksbackEntityScriptEvent.java │ ├── EntityLoadCrossbowScriptEvent.java │ ├── EntityPathfindScriptEvent.java │ ├── EntityRemoveFromWorldScriptEvent.java │ ├── EntityStepsOnScriptEvent.java │ ├── EntityTeleportedByPortalScriptEvent.java │ ├── ExperienceOrbMergeScriptEvent.java │ ├── PlayerAbsorbsExperienceScriptEvent.java │ ├── PlayerBeaconEffectScriptEvent.java │ ├── PlayerChangesFramedItemScriptEvent.java │ ├── PlayerChoosesArrowScriptEvent.java │ ├── PlayerChunkUnloadScriptEvent.java │ ├── PlayerClicksFakeEntityScriptEvent.java │ ├── PlayerClicksInRecipeBookScriptEvent.java │ ├── PlayerClientOptionsChangeScriptEvent.java │ ├── PlayerCompletesAdvancementScriptEventPaperImpl.java │ ├── PlayerDeepSleepScriptEvent.java │ ├── PlayerElytraBoostScriptEvent.java │ ├── PlayerEquipsArmorScriptEvent.java │ ├── PlayerGrantedAdvancementCriterionScriptEvent.java │ ├── PlayerInventorySlotChangeScriptEvent.java │ ├── PlayerItemTakesDamageScriptEventPaperImpl.java │ ├── PlayerJumpsScriptEventPaperImpl.java │ ├── PlayerLecternPageChangeScriptEvent.java │ ├── PlayerLoomPatternSelectScriptEvent.java │ ├── PlayerNameEntityScriptEvent.java │ ├── PlayerOpenSignScriptEvent.java │ ├── PlayerPreparesGrindstoneCraftScriptEvent.java │ ├── PlayerQuitsScriptEventPaperImpl.java │ ├── PlayerRaiseLowerItemScriptEventPaperImpl.java │ ├── PlayerSelectsStonecutterRecipeScriptEvent.java │ ├── PlayerSetSpawnScriptEvent.java │ ├── PlayerShieldDisableScriptEvent.java │ ├── PlayerSpectatesEntityScriptEvent.java │ ├── PlayerStopsSpectatingScriptEvent.java │ ├── PlayerTracksEntityScriptEvent.java │ ├── PlayerTradesWithMerchantScriptEvent.java │ ├── PreEntitySpawnScriptEvent.java │ ├── PrePlayerAttackEntityScriptEvent.java │ ├── ProjectileCollideScriptEvent.java │ ├── ServerListPingScriptEventPaperImpl.java │ ├── ServerResourcesReloadedScriptEvent.java │ ├── SkeletonHorseTrapScriptEvent.java │ ├── TNTPrimesScriptEvent.java │ ├── TargetBlockHitScriptEvent.java │ ├── UnknownCommandScriptEvent.java │ ├── WardenChangesAngerLevelScriptEvent.java │ └── WorldGameRuleChangeScriptEvent.java │ ├── properties │ ├── EntityArmsRaised.java │ ├── EntityAutoExpire.java │ ├── EntityBodyStingers.java │ ├── EntityCanTick.java │ ├── EntityCarryingEgg.java │ ├── EntityDrinkingPotion.java │ ├── EntityEggLayTime.java │ ├── EntityFriction.java │ ├── EntityLeftHanded.java │ ├── EntityReputation.java │ ├── EntityShouldBurn.java │ ├── EntitySneaking.java │ ├── EntityWitherInvulnerable.java │ ├── ItemArmorStand.java │ ├── PaperElementExtensions.java │ ├── PaperEntityExtensions.java │ ├── PaperItemExtensions.java │ ├── PaperPlayerExtensions.java │ └── PaperWorldExtensions.java │ ├── tags │ └── PaperTagBase.java │ └── utilities │ ├── BlockTagsSetter.java │ └── PaperAPIToolsImpl.java ├── plugin ├── lib │ └── Vault.jar ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── denizenscript │ │ └── denizen │ │ ├── Denizen.java │ │ ├── events │ │ ├── BukkitScriptEvent.java │ │ ├── ScriptEventRegistry.java │ │ ├── block │ │ │ ├── BellRingScriptEvent.java │ │ │ ├── BlockBuiltScriptEvent.java │ │ │ ├── BlockBurnsScriptEvent.java │ │ │ ├── BlockCooksSmeltsItemScriptEvent.java │ │ │ ├── BlockDestroyedByExplosionEvent.java │ │ │ ├── BlockDispensesScriptEvent.java │ │ │ ├── BlockEquipsItemScriptEvent.java │ │ │ ├── BlockExplodesScriptEvent.java │ │ │ ├── BlockFadesScriptEvent.java │ │ │ ├── BlockFallsScriptEvent.java │ │ │ ├── BlockFormsScriptEvent.java │ │ │ ├── BlockGrowsScriptEvent.java │ │ │ ├── BlockIgnitesScriptEvent.java │ │ │ ├── BlockPhysicsScriptEvent.java │ │ │ ├── BlockShearEntityScriptEvent.java │ │ │ ├── BlockSpreadsScriptEvent.java │ │ │ ├── BrewingStandFueledScriptEvent.java │ │ │ ├── BrewingStartsScriptEvent.java │ │ │ ├── BrewsScriptEvent.java │ │ │ ├── CauldronLevelChangeScriptEvent.java │ │ │ ├── CrafterCraftsScriptEvent.java │ │ │ ├── FurnaceBurnsItemScriptEvent.java │ │ │ ├── FurnaceStartsSmeltingScriptEvent.java │ │ │ ├── LeafDecaysScriptEvent.java │ │ │ ├── LiquidLevelChangeScriptEvent.java │ │ │ ├── LiquidSpreadScriptEvent.java │ │ │ ├── MoistureChangeScriptEvent.java │ │ │ ├── NoteBlockPlaysNoteScriptEvent.java │ │ │ ├── PistonExtendsScriptEvent.java │ │ │ ├── PistonRetractsScriptEvent.java │ │ │ ├── RedstoneScriptEvent.java │ │ │ ├── SpongeAbsorbsScriptEvent.java │ │ │ └── TNTPrimesScriptEvent.java │ │ ├── bukkit │ │ │ ├── ExhaustedNPCEvent.java │ │ │ ├── SavesReloadEvent.java │ │ │ └── ScriptReloadEvent.java │ │ ├── entity │ │ │ ├── AreaEffectCloudApplyScriptEvent.java │ │ │ ├── AreaEnterExitScriptEvent.java │ │ │ ├── CreeperPoweredScriptEvent.java │ │ │ ├── DragonPhaseChangeScriptEvent.java │ │ │ ├── EntityAirLevelChangeScriptEvent.java │ │ │ ├── EntityBreaksHangingScriptEvent.java │ │ │ ├── EntityBreedScriptEvent.java │ │ │ ├── EntityChangesBlockScriptEvent.java │ │ │ ├── EntityChangesPoseScriptEvent.java │ │ │ ├── EntityCombustsScriptEvent.java │ │ │ ├── EntityCreatePortalScriptEvent.java │ │ │ ├── EntityDamagedScriptEvent.java │ │ │ ├── EntityDeathScriptEvent.java │ │ │ ├── EntityDespawnScriptEvent.java │ │ │ ├── EntityDropsItemScriptEvent.java │ │ │ ├── EntityEntersPortalScriptEvent.java │ │ │ ├── EntityEntersVehicleScriptEvent.java │ │ │ ├── EntityExitsPortalScriptEvent.java │ │ │ ├── EntityExitsVehicleScriptEvent.java │ │ │ ├── EntityExplodesScriptEvent.java │ │ │ ├── EntityExplosionPrimesScriptEvent.java │ │ │ ├── EntityFoodLevelChangeScriptEvent.java │ │ │ ├── EntityFormsBlockScriptEvent.java │ │ │ ├── EntityGlideScriptEvent.java │ │ │ ├── EntityGoesIntoBlockScriptEvent.java │ │ │ ├── EntityHealsScriptEvent.java │ │ │ ├── EntityInteractScriptEvent.java │ │ │ ├── EntityKilledScriptEvent.java │ │ │ ├── EntityPicksUpItemScriptEvent.java │ │ │ ├── EntityPotionEffectScriptEvent.java │ │ │ ├── EntityResurrectScriptEvent.java │ │ │ ├── EntityShootsBowScriptEvent.java │ │ │ ├── EntitySpawnScriptEvent.java │ │ │ ├── EntitySpawnerSpawnScriptEvent.java │ │ │ ├── EntitySpellCastScriptEvent.java │ │ │ ├── EntitySwimScriptEvent.java │ │ │ ├── EntityTamesScriptEvent.java │ │ │ ├── EntityTargetsScriptEvent.java │ │ │ ├── EntityTeleportScriptEvent.java │ │ │ ├── EntityTransformScriptEvent.java │ │ │ ├── EntityUnleashedScriptEvent.java │ │ │ ├── ExperienceBottleBreaksScriptEvent.java │ │ │ ├── FireworkBurstsScriptEvent.java │ │ │ ├── HangingBreaksScriptEvent.java │ │ │ ├── HorseJumpsScriptEvent.java │ │ │ ├── PigZappedScriptEvent.java │ │ │ ├── PiglinBarterScriptEvent.java │ │ │ ├── ProjectileHitScriptEvent.java │ │ │ ├── ProjectileLaunchedScriptEvent.java │ │ │ ├── SheepDyedScriptEvent.java │ │ │ ├── SheepRegrowsScriptEvent.java │ │ │ ├── SlimeSplitsScriptEvent.java │ │ │ ├── VillagerAcquiresTradeScriptEvent.java │ │ │ ├── VillagerChangesProfessionScriptEvent.java │ │ │ └── VillagerReplenishesTradeScriptEvent.java │ │ ├── item │ │ │ ├── InventoryPicksUpItemScriptEvent.java │ │ │ ├── ItemDespawnsScriptEvent.java │ │ │ ├── ItemEnchantedScriptEvent.java │ │ │ ├── ItemMergesScriptEvent.java │ │ │ ├── ItemMoveScriptEvent.java │ │ │ ├── ItemRecipeFormedScriptEvent.java │ │ │ └── ItemSpawnsScriptEvent.java │ │ ├── npc │ │ │ ├── NPCNavigationScriptEvent.java │ │ │ ├── NPCOpensScriptEvent.java │ │ │ ├── NPCSpawnScriptEvent.java │ │ │ └── NPCStuckScriptEvent.java │ │ ├── player │ │ │ ├── BiomeEnterExitScriptEvent.java │ │ │ ├── BlockDropsItemScriptEvent.java │ │ │ ├── ChatScriptEvent.java │ │ │ ├── HotbarScrollScriptEvent.java │ │ │ ├── PlayerAnimatesScriptEvent.java │ │ │ ├── PlayerArmorStandManipulateScriptEvent.java │ │ │ ├── PlayerBreaksBlockScriptEvent.java │ │ │ ├── PlayerBreaksItemScriptEvent.java │ │ │ ├── PlayerChangesGamemodeScriptEvent.java │ │ │ ├── PlayerChangesMainHandScriptEvent.java │ │ │ ├── PlayerChangesSignScriptEvent.java │ │ │ ├── PlayerChangesWorldScriptEvent.java │ │ │ ├── PlayerChangesXPScriptEvent.java │ │ │ ├── PlayerClicksBlockScriptEvent.java │ │ │ ├── PlayerClicksInInventoryScriptEvent.java │ │ │ ├── PlayerClosesInvScriptEvent.java │ │ │ ├── PlayerCompletesAdvancementScriptEvent.java │ │ │ ├── PlayerConsumesScriptEvent.java │ │ │ ├── PlayerCraftsItemScriptEvent.java │ │ │ ├── PlayerDamagesBlockScriptEvent.java │ │ │ ├── PlayerDragsInInvScriptEvent.java │ │ │ ├── PlayerEditsBookScriptEvent.java │ │ │ ├── PlayerEmptiesBucketScriptEvent.java │ │ │ ├── PlayerEntersBedScriptEvent.java │ │ │ ├── PlayerFillsBucketScriptEvent.java │ │ │ ├── PlayerFishesScriptEvent.java │ │ │ ├── PlayerFlyingScriptEvent.java │ │ │ ├── PlayerHearsSoundScriptEvent.java │ │ │ ├── PlayerIncreasesExhaustionLevelScriptEvent.java │ │ │ ├── PlayerItemTakesDamageScriptEvent.java │ │ │ ├── PlayerJoinsScriptEvent.java │ │ │ ├── PlayerJumpScriptEvent.java │ │ │ ├── PlayerKickedScriptEvent.java │ │ │ ├── PlayerLeashesEntityScriptEvent.java │ │ │ ├── PlayerLeavesBedScriptEvent.java │ │ │ ├── PlayerLevelsUpScriptEvent.java │ │ │ ├── PlayerLocaleChangeScriptEvent.java │ │ │ ├── PlayerLoginScriptEvent.java │ │ │ ├── PlayerMendsItemScriptEvent.java │ │ │ ├── PlayerOpensInvScriptEvent.java │ │ │ ├── PlayerPickupArrowScriptEvent.java │ │ │ ├── PlayerPlacesBlockScriptEvent.java │ │ │ ├── PlayerPlacesHangingScriptEvent.java │ │ │ ├── PlayerPreLoginScriptEvent.java │ │ │ ├── PlayerPreparesAnvilCraftScriptEvent.java │ │ │ ├── PlayerPreparesEnchantScriptEvent.java │ │ │ ├── PlayerPreparesSmithingTableScriptEvent.java │ │ │ ├── PlayerQuitsScriptEvent.java │ │ │ ├── PlayerRaiseLowerItemScriptEvent.java │ │ │ ├── PlayerReceivesActionbarScriptEvent.java │ │ │ ├── PlayerReceivesCommandsScriptEvent.java │ │ │ ├── PlayerReceivesMessageScriptEvent.java │ │ │ ├── PlayerReceivesPacketScriptEvent.java │ │ │ ├── PlayerReceivesTablistUpdateScriptEvent.java │ │ │ ├── PlayerRecipeDiscoverScriptEvent.java │ │ │ ├── PlayerRespawnsScriptEvent.java │ │ │ ├── PlayerRightClicksEntityScriptEvent.java │ │ │ ├── PlayerRiptideScriptEvent.java │ │ │ ├── PlayerSendPacketScriptEvent.java │ │ │ ├── PlayerShearsScriptEvent.java │ │ │ ├── PlayerSmithsItemScriptEvent.java │ │ │ ├── PlayerSneakScriptEvent.java │ │ │ ├── PlayerSprintScriptEvent.java │ │ │ ├── PlayerStandsOnScriptEvent.java │ │ │ ├── PlayerStatisticIncrementsScriptEvent.java │ │ │ ├── PlayerSteersEntityScriptEvent.java │ │ │ ├── PlayerStepsOnScriptEvent.java │ │ │ ├── PlayerStopsDamagingBlockScriptEvent.java │ │ │ ├── PlayerSwapsItemsScriptEvent.java │ │ │ ├── PlayerTakesFromFurnaceScriptEvent.java │ │ │ ├── PlayerTakesFromLecternScriptEvent.java │ │ │ ├── PlayerThrowsEggScriptEvent.java │ │ │ ├── PlayerTriggersRaidScriptEvent.java │ │ │ ├── PlayerUsesPortalScriptEvent.java │ │ │ ├── PlayerWalkScriptEvent.java │ │ │ ├── PlayerWalksOverScriptEvent.java │ │ │ └── ResourcePackStatusScriptEvent.java │ │ ├── server │ │ │ ├── CommandScriptEvent.java │ │ │ ├── InternalEventScriptEvent.java │ │ │ ├── ListPingScriptEvent.java │ │ │ ├── ServerPrestartScriptEvent.java │ │ │ ├── ServerStartScriptEvent.java │ │ │ └── TabCompleteScriptEvent.java │ │ ├── vehicle │ │ │ ├── VehicleCollidesBlockScriptEvent.java │ │ │ ├── VehicleCollidesEntityScriptEvent.java │ │ │ ├── VehicleCreatedScriptEvent.java │ │ │ ├── VehicleDamagedScriptEvent.java │ │ │ ├── VehicleDestroyedScriptEvent.java │ │ │ └── VehicleMoveScriptEvent.java │ │ └── world │ │ │ ├── ChunkLoadEntitiesScriptEvent.java │ │ │ ├── ChunkLoadScriptEvent.java │ │ │ ├── ChunkUnloadEntitiesScriptEvent.java │ │ │ ├── ChunkUnloadScriptEvent.java │ │ │ ├── GenericGameEventScriptEvent.java │ │ │ ├── LightningStrikesScriptEvent.java │ │ │ ├── LingeringPotionSplashScriptEvent.java │ │ │ ├── LootGenerateScriptEvent.java │ │ │ ├── PortalCreateScriptEvent.java │ │ │ ├── PotionSplashScriptEvent.java │ │ │ ├── RaidFinishesScriptEvent.java │ │ │ ├── RaidScriptEvent.java │ │ │ ├── RaidSpawnsWaveScriptEvent.java │ │ │ ├── RaidStopsScriptEvent.java │ │ │ ├── SpawnChangeScriptEvent.java │ │ │ ├── StructureGrowsScriptEvent.java │ │ │ ├── ThunderChangesScriptEvent.java │ │ │ ├── TimeChangeScriptEvent.java │ │ │ ├── WeatherChangesScriptEvent.java │ │ │ ├── WorldInitsScriptEvent.java │ │ │ ├── WorldLoadsScriptEvent.java │ │ │ ├── WorldSavesScriptEvent.java │ │ │ └── WorldUnloadsScriptEvent.java │ │ ├── nms │ │ ├── NMSHandler.java │ │ ├── NMSVersion.java │ │ ├── abstracts │ │ │ ├── AnimationHelper.java │ │ │ ├── BiomeNMS.java │ │ │ ├── BlockLight.java │ │ │ ├── ImprovedOfflinePlayer.java │ │ │ ├── ProfileEditor.java │ │ │ └── Sidebar.java │ │ ├── enums │ │ │ └── CustomEntityType.java │ │ ├── interfaces │ │ │ ├── AdvancementHelper.java │ │ │ ├── BlockHelper.java │ │ │ ├── ChunkHelper.java │ │ │ ├── CustomEntity.java │ │ │ ├── CustomEntityHelper.java │ │ │ ├── EnchantmentHelper.java │ │ │ ├── EntityAnimation.java │ │ │ ├── EntityHelper.java │ │ │ ├── FakeArrow.java │ │ │ ├── FakePlayer.java │ │ │ ├── FishingHelper.java │ │ │ ├── ItemHelper.java │ │ │ ├── ItemProjectile.java │ │ │ ├── PacketHelper.java │ │ │ ├── PlayerHelper.java │ │ │ ├── WorldHelper.java │ │ │ └── packets │ │ │ │ ├── PacketInResourcePackStatus.java │ │ │ │ ├── PacketInSteerVehicle.java │ │ │ │ ├── PacketOutChat.java │ │ │ │ ├── PacketOutSetSlot.java │ │ │ │ ├── PacketOutSpawnEntity.java │ │ │ │ ├── PacketOutTradeList.java │ │ │ │ └── PacketOutWindowItems.java │ │ └── util │ │ │ ├── Advancement.java │ │ │ ├── PlayerProfile.java │ │ │ ├── TradeOffer.java │ │ │ └── jnbt │ │ │ ├── ByteArrayTag.java │ │ │ ├── ByteTag.java │ │ │ ├── CompoundTag.java │ │ │ ├── CompoundTagBuilder.java │ │ │ ├── DoubleTag.java │ │ │ ├── EndTag.java │ │ │ ├── FloatTag.java │ │ │ ├── IntArrayTag.java │ │ │ ├── IntTag.java │ │ │ ├── JNBTListTag.java │ │ │ ├── ListTagBuilder.java │ │ │ ├── LongArrayTag.java │ │ │ ├── LongTag.java │ │ │ ├── NBTConstants.java │ │ │ ├── NBTInputStream.java │ │ │ ├── NBTOutputStream.java │ │ │ ├── NBTUtils.java │ │ │ ├── NamedTag.java │ │ │ ├── ShortTag.java │ │ │ ├── StringTag.java │ │ │ └── Tag.java │ │ ├── npc │ │ ├── DenizenNPCHelper.java │ │ ├── TraitRegistry.java │ │ ├── actions │ │ │ └── ActionHandler.java │ │ ├── speech │ │ │ └── DenizenSpeechContext.java │ │ └── traits │ │ │ ├── AssignmentTrait.java │ │ │ ├── ConstantsTrait.java │ │ │ ├── DenizenFlagsTrait.java │ │ │ ├── FishingTrait.java │ │ │ ├── HealthTrait.java │ │ │ ├── HungerTrait.java │ │ │ ├── InvisibleTrait.java │ │ │ ├── MirrorEquipmentTrait.java │ │ │ ├── MirrorNameTrait.java │ │ │ ├── MirrorTrait.java │ │ │ ├── MobproxTrait.java │ │ │ ├── NicknameTrait.java │ │ │ ├── PushableTrait.java │ │ │ ├── SittingTrait.java │ │ │ ├── SleepingTrait.java │ │ │ ├── SneakingTrait.java │ │ │ └── TriggerTrait.java │ │ ├── objects │ │ ├── AreaContainmentObject.java │ │ ├── BiomeTag.java │ │ ├── ChunkTag.java │ │ ├── CuboidTag.java │ │ ├── EllipsoidTag.java │ │ ├── EnchantmentTag.java │ │ ├── EntityFormObject.java │ │ ├── EntityTag.java │ │ ├── InventoryTag.java │ │ ├── ItemTag.java │ │ ├── LocationTag.java │ │ ├── MaterialTag.java │ │ ├── NPCTag.java │ │ ├── PlayerTag.java │ │ ├── PluginTag.java │ │ ├── PolygonTag.java │ │ ├── TradeTag.java │ │ ├── WorldTag.java │ │ └── properties │ │ │ ├── PropertyRegistry.java │ │ │ ├── bukkit │ │ │ ├── BukkitBinaryTagExtensions.java │ │ │ ├── BukkitColorExtensions.java │ │ │ ├── BukkitElementExtensions.java │ │ │ ├── BukkitListExtensions.java │ │ │ ├── BukkitMapExtensions.java │ │ │ ├── BukkitQueueExtensions.java │ │ │ └── BukkitScriptExtensions.java │ │ │ ├── entity │ │ │ ├── EntityAI.java │ │ │ ├── EntityAge.java │ │ │ ├── EntityAgeLocked.java │ │ │ ├── EntityAggressive.java │ │ │ ├── EntityAnger.java │ │ │ ├── EntityAngry.java │ │ │ ├── EntityAreaEffectCloud.java │ │ │ ├── EntityArmorBonus.java │ │ │ ├── EntityArmorPose.java │ │ │ ├── EntityArms.java │ │ │ ├── EntityArrowDamage.java │ │ │ ├── EntityArrowPierceLevel.java │ │ │ ├── EntityAttributeBaseValues.java │ │ │ ├── EntityAttributeModifiers.java │ │ │ ├── EntityAwake.java │ │ │ ├── EntityAware.java │ │ │ ├── EntityBackgroundColor.java │ │ │ ├── EntityBasePlate.java │ │ │ ├── EntityBeamTarget.java │ │ │ ├── EntityBoatType.java │ │ │ ├── EntityBodyArrows.java │ │ │ ├── EntityBoundingBox.java │ │ │ ├── EntityBrightness.java │ │ │ ├── EntityCanBreakDoors.java │ │ │ ├── EntityCanJoinRaid.java │ │ │ ├── EntityCannotEnterHive.java │ │ │ ├── EntityCharged.java │ │ │ ├── EntityChestCarrier.java │ │ │ ├── EntityColor.java │ │ │ ├── EntityConversionPlayer.java │ │ │ ├── EntityConversionTime.java │ │ │ ├── EntityCritical.java │ │ │ ├── EntityCustomName.java │ │ │ ├── EntityCustomNameVisible.java │ │ │ ├── EntityDarkDuration.java │ │ │ ├── EntityDefaultBackground.java │ │ │ ├── EntityDirection.java │ │ │ ├── EntityDisabledSlots.java │ │ │ ├── EntityDisplay.java │ │ │ ├── EntityDropsItem.java │ │ │ ├── EntityEquipment.java │ │ │ ├── EntityEquipmentDropChance.java │ │ │ ├── EntityExploredLocations.java │ │ │ ├── EntityExplosionFire.java │ │ │ ├── EntityExplosionRadius.java │ │ │ ├── EntityEyeTargetLocation.java │ │ │ ├── EntityFirework.java │ │ │ ├── EntityFireworkLifetime.java │ │ │ ├── EntityFixed.java │ │ │ ├── EntityFlags.java │ │ │ ├── EntityFlower.java │ │ │ ├── EntityFramed.java │ │ │ ├── EntityFreezeDuration.java │ │ │ ├── EntityGlowColor.java │ │ │ ├── EntityGravity.java │ │ │ ├── EntityHasNectar.java │ │ │ ├── EntityHasStung.java │ │ │ ├── EntityHealth.java │ │ │ ├── EntityHeight.java │ │ │ ├── EntityHive.java │ │ │ ├── EntityHorns.java │ │ │ ├── EntityImmune.java │ │ │ ├── EntityInWaterTime.java │ │ │ ├── EntityInterpolationDuration.java │ │ │ ├── EntityInterpolationStart.java │ │ │ ├── EntityInventory.java │ │ │ ├── EntityInvulnerable.java │ │ │ ├── EntityIsShowingBottom.java │ │ │ ├── EntityItem.java │ │ │ ├── EntityItemInHand.java │ │ │ ├── EntityItemInOffHand.java │ │ │ ├── EntityJumpStrength.java │ │ │ ├── EntityKnockback.java │ │ │ ├── EntityLeftRotation.java │ │ │ ├── EntityLineWidth.java │ │ │ ├── EntityMarker.java │ │ │ ├── EntityMaterial.java │ │ │ ├── EntityMaxFuseTicks.java │ │ │ ├── EntityMaxTemper.java │ │ │ ├── EntityOnBack.java │ │ │ ├── EntityOpacity.java │ │ │ ├── EntityPainting.java │ │ │ ├── EntityPatrolLeader.java │ │ │ ├── EntityPatrolTarget.java │ │ │ ├── EntityPickupStatus.java │ │ │ ├── EntityPivot.java │ │ │ ├── EntityPlayerCreated.java │ │ │ ├── EntityPlayingDead.java │ │ │ ├── EntityPotion.java │ │ │ ├── EntityPotionEffects.java │ │ │ ├── EntityPotionType.java │ │ │ ├── EntityPowered.java │ │ │ ├── EntityProfession.java │ │ │ ├── EntityProperty.java │ │ │ ├── EntityRightRotation.java │ │ │ ├── EntityRiptide.java │ │ │ ├── EntityRolling.java │ │ │ ├── EntityRotation.java │ │ │ ├── EntityScale.java │ │ │ ├── EntityScoreboardTags.java │ │ │ ├── EntitySeeThrough.java │ │ │ ├── EntityShadowRadius.java │ │ │ ├── EntityShadowStrength.java │ │ │ ├── EntitySheared.java │ │ │ ├── EntityShivering.java │ │ │ ├── EntityShotAtAngle.java │ │ │ ├── EntityShulkerPeek.java │ │ │ ├── EntitySilent.java │ │ │ ├── EntitySitting.java │ │ │ ├── EntitySize.java │ │ │ ├── EntitySmall.java │ │ │ ├── EntitySneezing.java │ │ │ ├── EntitySpeed.java │ │ │ ├── EntitySpell.java │ │ │ ├── EntityStepHeight.java │ │ │ ├── EntityStrength.java │ │ │ ├── EntityTame.java │ │ │ ├── EntityTeleportDuration.java │ │ │ ├── EntityTemper.java │ │ │ ├── EntityText.java │ │ │ ├── EntityTextShadowed.java │ │ │ ├── EntityTrades.java │ │ │ ├── EntityTranslation.java │ │ │ ├── EntityTrapTime.java │ │ │ ├── EntityTrapped.java │ │ │ ├── EntityVariant.java │ │ │ ├── EntityViewRange.java │ │ │ ├── EntityVillagerExperience.java │ │ │ ├── EntityVillagerLevel.java │ │ │ ├── EntityVisible.java │ │ │ ├── EntityVisualFire.java │ │ │ └── EntityWidth.java │ │ │ ├── inventory │ │ │ ├── InventoryContents.java │ │ │ ├── InventoryHolder.java │ │ │ ├── InventorySize.java │ │ │ ├── InventoryTitle.java │ │ │ ├── InventoryTrades.java │ │ │ └── InventoryUniquifier.java │ │ │ ├── item │ │ │ ├── ItemArmorPose.java │ │ │ ├── ItemAttributeModifiers.java │ │ │ ├── ItemAttributeNBT.java │ │ │ ├── ItemBaseColor.java │ │ │ ├── ItemBlockMaterial.java │ │ │ ├── ItemBook.java │ │ │ ├── ItemBookGeneration.java │ │ │ ├── ItemCanDestroy.java │ │ │ ├── ItemCanPlaceOn.java │ │ │ ├── ItemChargedProjectile.java │ │ │ ├── ItemColor.java │ │ │ ├── ItemComponentsPatch.java │ │ │ ├── ItemCustomData.java │ │ │ ├── ItemCustomModel.java │ │ │ ├── ItemDisplayname.java │ │ │ ├── ItemDurability.java │ │ │ ├── ItemEnchantments.java │ │ │ ├── ItemFirework.java │ │ │ ├── ItemFireworkPower.java │ │ │ ├── ItemFlags.java │ │ │ ├── ItemFrameInvisible.java │ │ │ ├── ItemHidden.java │ │ │ ├── ItemInstrument.java │ │ │ ├── ItemInventoryContents.java │ │ │ ├── ItemKnowledgeBookRecipes.java │ │ │ ├── ItemLock.java │ │ │ ├── ItemLodestoneLocation.java │ │ │ ├── ItemLodestoneTracked.java │ │ │ ├── ItemLore.java │ │ │ ├── ItemMap.java │ │ │ ├── ItemNBT.java │ │ │ ├── ItemPatterns.java │ │ │ ├── ItemPotion.java │ │ │ ├── ItemProperty.java │ │ │ ├── ItemQuantity.java │ │ │ ├── ItemRawNBT.java │ │ │ ├── ItemRepairCost.java │ │ │ ├── ItemScript.java │ │ │ ├── ItemSignContents.java │ │ │ ├── ItemSignIsWaxed.java │ │ │ ├── ItemSkullskin.java │ │ │ ├── ItemSpawnerCount.java │ │ │ ├── ItemSpawnerDelay.java │ │ │ ├── ItemSpawnerMaxNearbyEntities.java │ │ │ ├── ItemSpawnerPlayerRange.java │ │ │ ├── ItemSpawnerRange.java │ │ │ ├── ItemSpawnerType.java │ │ │ ├── ItemTrim.java │ │ │ └── ItemUnbreakable.java │ │ │ ├── material │ │ │ ├── MaterialAge.java │ │ │ ├── MaterialAttached.java │ │ │ ├── MaterialAttachmentFace.java │ │ │ ├── MaterialBlockType.java │ │ │ ├── MaterialBrewingStand.java │ │ │ ├── MaterialCampfire.java │ │ │ ├── MaterialCount.java │ │ │ ├── MaterialDelay.java │ │ │ ├── MaterialDirectional.java │ │ │ ├── MaterialDistance.java │ │ │ ├── MaterialDrags.java │ │ │ ├── MaterialFaces.java │ │ │ ├── MaterialHalf.java │ │ │ ├── MaterialHinge.java │ │ │ ├── MaterialInstrument.java │ │ │ ├── MaterialLeafSize.java │ │ │ ├── MaterialLevel.java │ │ │ ├── MaterialLightable.java │ │ │ ├── MaterialLocked.java │ │ │ ├── MaterialMode.java │ │ │ ├── MaterialNote.java │ │ │ ├── MaterialPersistent.java │ │ │ ├── MaterialPower.java │ │ │ ├── MaterialProperty.java │ │ │ ├── MaterialShape.java │ │ │ ├── MaterialSides.java │ │ │ ├── MaterialSnowable.java │ │ │ ├── MaterialSwitchable.java │ │ │ ├── MaterialUnstable.java │ │ │ └── MaterialWaterlogged.java │ │ │ └── trade │ │ │ ├── TradeDemand.java │ │ │ ├── TradeHasXp.java │ │ │ ├── TradeInputs.java │ │ │ ├── TradeMaxUses.java │ │ │ ├── TradePriceMultiplier.java │ │ │ ├── TradeProperty.java │ │ │ ├── TradeResult.java │ │ │ ├── TradeSpecialPrice.java │ │ │ ├── TradeUses.java │ │ │ └── TradeVillagerXP.java │ │ ├── scripts │ │ ├── commands │ │ │ ├── BukkitCommandRegistry.java │ │ │ ├── core │ │ │ │ ├── CooldownCommand.java │ │ │ │ ├── ResetCommand.java │ │ │ │ └── ZapCommand.java │ │ │ ├── entity │ │ │ │ ├── AgeCommand.java │ │ │ │ ├── AnimateCommand.java │ │ │ │ ├── AttachCommand.java │ │ │ │ ├── AttackCommand.java │ │ │ │ ├── BurnCommand.java │ │ │ │ ├── CastCommand.java │ │ │ │ ├── EquipCommand.java │ │ │ │ ├── FakeEquipCommand.java │ │ │ │ ├── FakeInternalDataCommand.java │ │ │ │ ├── FeedCommand.java │ │ │ │ ├── FlyCommand.java │ │ │ │ ├── FollowCommand.java │ │ │ │ ├── GlowCommand.java │ │ │ │ ├── HeadCommand.java │ │ │ │ ├── HealCommand.java │ │ │ │ ├── HealthCommand.java │ │ │ │ ├── HurtCommand.java │ │ │ │ ├── InvisibleCommand.java │ │ │ │ ├── KillCommand.java │ │ │ │ ├── LeashCommand.java │ │ │ │ ├── LookCommand.java │ │ │ │ ├── MountCommand.java │ │ │ │ ├── PushCommand.java │ │ │ │ ├── RemoveCommand.java │ │ │ │ ├── RenameCommand.java │ │ │ │ ├── RotateCommand.java │ │ │ │ ├── ShootCommand.java │ │ │ │ ├── SneakCommand.java │ │ │ │ ├── SpawnCommand.java │ │ │ │ ├── TeleportCommand.java │ │ │ │ ├── WalkCommand.java │ │ │ │ └── WalkCommandCitizensEvents.java │ │ │ ├── item │ │ │ │ ├── DisplayItemCommand.java │ │ │ │ ├── FakeItemCommand.java │ │ │ │ ├── GiveCommand.java │ │ │ │ ├── InventoryCommand.java │ │ │ │ ├── MapCommand.java │ │ │ │ └── TakeCommand.java │ │ │ ├── npc │ │ │ │ ├── ActionCommand.java │ │ │ │ ├── AnchorCommand.java │ │ │ │ ├── AssignmentCommand.java │ │ │ │ ├── BreakCommand.java │ │ │ │ ├── CreateCommand.java │ │ │ │ ├── DespawnCommand.java │ │ │ │ ├── DisengageCommand.java │ │ │ │ ├── EngageCommand.java │ │ │ │ ├── FishCommand.java │ │ │ │ ├── LookcloseCommand.java │ │ │ │ ├── NPCBossBarCommand.java │ │ │ │ ├── PauseCommand.java │ │ │ │ ├── PoseCommand.java │ │ │ │ ├── PushableCommand.java │ │ │ │ ├── SitCommand.java │ │ │ │ ├── SleepCommand.java │ │ │ │ ├── StandCommand.java │ │ │ │ ├── TraitCommand.java │ │ │ │ ├── TriggerCommand.java │ │ │ │ └── VulnerableCommand.java │ │ │ ├── player │ │ │ │ ├── ActionBarCommand.java │ │ │ │ ├── AdvancementCommand.java │ │ │ │ ├── BlockCrackCommand.java │ │ │ │ ├── ChatCommand.java │ │ │ │ ├── ClickableCommand.java │ │ │ │ ├── CompassCommand.java │ │ │ │ ├── DebugBlockCommand.java │ │ │ │ ├── DisguiseCommand.java │ │ │ │ ├── ExperienceCommand.java │ │ │ │ ├── FakeSpawnCommand.java │ │ │ │ ├── GroupCommand.java │ │ │ │ ├── ItemCooldownCommand.java │ │ │ │ ├── KickCommand.java │ │ │ │ ├── MoneyCommand.java │ │ │ │ ├── NarrateCommand.java │ │ │ │ ├── OpenTradesCommand.java │ │ │ │ ├── OxygenCommand.java │ │ │ │ ├── PermissionCommand.java │ │ │ │ ├── ResourcePackCommand.java │ │ │ │ ├── ShowFakeCommand.java │ │ │ │ ├── SidebarCommand.java │ │ │ │ ├── StatisticCommand.java │ │ │ │ ├── TablistCommand.java │ │ │ │ ├── TeamCommand.java │ │ │ │ ├── TitleCommand.java │ │ │ │ └── ToastCommand.java │ │ │ ├── server │ │ │ │ ├── AnnounceCommand.java │ │ │ │ ├── BanCommand.java │ │ │ │ ├── BossBarCommand.java │ │ │ │ ├── ExecuteCommand.java │ │ │ │ └── ScoreboardCommand.java │ │ │ └── world │ │ │ │ ├── AdjustBlockCommand.java │ │ │ │ ├── AnimateChestCommand.java │ │ │ │ ├── ChunkLoadCommand.java │ │ │ │ ├── CopyBlockCommand.java │ │ │ │ ├── CreateWorldCommand.java │ │ │ │ ├── DropCommand.java │ │ │ │ ├── ExplodeCommand.java │ │ │ │ ├── FireworkCommand.java │ │ │ │ ├── GameRuleCommand.java │ │ │ │ ├── LightCommand.java │ │ │ │ ├── MidiCommand.java │ │ │ │ ├── ModifyBlockCommand.java │ │ │ │ ├── PlayEffectCommand.java │ │ │ │ ├── PlaySoundCommand.java │ │ │ │ ├── SchematicCommand.java │ │ │ │ ├── SignCommand.java │ │ │ │ ├── StrikeCommand.java │ │ │ │ ├── SwitchCommand.java │ │ │ │ ├── TickCommand.java │ │ │ │ ├── TimeCommand.java │ │ │ │ ├── WeatherCommand.java │ │ │ │ └── WorldBorderCommand.java │ │ ├── containers │ │ │ ├── ContainerRegistry.java │ │ │ └── core │ │ │ │ ├── AssignmentScriptContainer.java │ │ │ │ ├── BookScriptContainer.java │ │ │ │ ├── BukkitWorldScriptHelper.java │ │ │ │ ├── CommandScriptContainer.java │ │ │ │ ├── CommandScriptHelper.java │ │ │ │ ├── EconomyScriptContainer.java │ │ │ │ ├── EnchantmentScriptContainer.java │ │ │ │ ├── EntityScriptContainer.java │ │ │ │ ├── EntityScriptHelper.java │ │ │ │ ├── FormatScriptContainer.java │ │ │ │ ├── InteractScriptContainer.java │ │ │ │ ├── InteractScriptHelper.java │ │ │ │ ├── InventoryScriptContainer.java │ │ │ │ ├── InventoryScriptHelper.java │ │ │ │ ├── ItemScriptContainer.java │ │ │ │ ├── ItemScriptHelper.java │ │ │ │ ├── MapScriptContainer.java │ │ │ │ └── VersionScriptContainer.java │ │ └── triggers │ │ │ ├── AbstractTrigger.java │ │ │ ├── TriggerRegistry.java │ │ │ └── core │ │ │ ├── ChatTrigger.java │ │ │ ├── ClickTrigger.java │ │ │ ├── DamageTrigger.java │ │ │ └── ProximityTrigger.java │ │ ├── tags │ │ ├── BukkitTagContext.java │ │ └── core │ │ │ ├── CustomColorTagBase.java │ │ │ ├── NPCTagBase.java │ │ │ ├── PlayerTagBase.java │ │ │ ├── ServerTagBase.java │ │ │ └── TextTagBase.java │ │ └── utilities │ │ ├── BukkitImplDeprecations.java │ │ ├── CommonRegistries.java │ │ ├── Conversion.java │ │ ├── DataPersistenceHelper.java │ │ ├── FormattedTextHelper.java │ │ ├── HoverFormatHelper.java │ │ ├── LegacyParticleNaming.java │ │ ├── LegacySavesUpdater.java │ │ ├── MultiVersionHelper1_18.java │ │ ├── MultiVersionHelper1_19.java │ │ ├── NotedAreaTracker.java │ │ ├── PaperAPITools.java │ │ ├── ScoreboardHelper.java │ │ ├── Settings.java │ │ ├── TextWidthHelper.java │ │ ├── Utilities.java │ │ ├── VanillaTagHelper.java │ │ ├── blocks │ │ ├── BlockSet.java │ │ ├── ChunkCoordinate.java │ │ ├── CuboidBlockSet.java │ │ ├── FakeBlock.java │ │ ├── FullBlockData.java │ │ ├── SpawnableHelper.java │ │ └── SpongeSchematicHelper.java │ │ ├── command │ │ ├── CommandEvents.java │ │ ├── DenizenCommandHandler.java │ │ ├── ExCommandHandler.java │ │ ├── ExSustainedCommandHandler.java │ │ ├── NPCCommandHandler.java │ │ ├── TabCompleteHelper.java │ │ ├── manager │ │ │ ├── Command.java │ │ │ ├── CommandAnnotationProcessor.java │ │ │ ├── CommandContext.java │ │ │ ├── CommandManager.java │ │ │ ├── Injector.java │ │ │ ├── Paginator.java │ │ │ ├── Requirements.java │ │ │ ├── RequirementsProcessor.java │ │ │ ├── exceptions │ │ │ │ ├── CommandException.java │ │ │ │ ├── CommandUsageException.java │ │ │ │ ├── NoPermissionsException.java │ │ │ │ ├── RequirementMissingException.java │ │ │ │ ├── ServerCommandException.java │ │ │ │ ├── UnhandledCommandException.java │ │ │ │ └── WrappedCommandException.java │ │ │ └── messaging │ │ │ │ ├── Colorizer.java │ │ │ │ └── Messaging.java │ │ └── scripted │ │ │ ├── DenizenAliasHelpTopic.java │ │ │ ├── DenizenCommand.java │ │ │ ├── DenizenCommandHelpTopic.java │ │ │ └── DenizenCommandSender.java │ │ ├── debugging │ │ ├── BStatsMetricsLite.java │ │ ├── Debug.java │ │ ├── DebugConsoleSender.java │ │ ├── DebugSubmit.java │ │ └── StatsRecord.java │ │ ├── depends │ │ └── Depends.java │ │ ├── entity │ │ ├── AreaEffectCloudHelper.java │ │ ├── BossBarHelper.java │ │ ├── DenizenEntityType.java │ │ ├── EntityAttachmentHelper.java │ │ ├── EntityMetadataCommandHelper.java │ │ ├── FakeEntity.java │ │ ├── Gravity.java │ │ ├── HideEntitiesHelper.java │ │ ├── Position.java │ │ ├── SpawnEntityHelper.java │ │ └── Velocity.java │ │ ├── flags │ │ ├── DataPersistenceFlagTracker.java │ │ ├── LocationFlagSearchHelper.java │ │ ├── PlayerFlagHandler.java │ │ └── WorldFlagHandler.java │ │ ├── implementation │ │ ├── BukkitScriptEntryData.java │ │ └── DenizenCoreImplementation.java │ │ ├── inventory │ │ ├── InventoryTrackerSystem.java │ │ ├── InventoryViewUtil.java │ │ ├── RecipeHelper.java │ │ └── SlotHelper.java │ │ ├── maps │ │ ├── DenizenMapManager.java │ │ ├── DenizenMapRenderer.java │ │ ├── MapCursor.java │ │ ├── MapDot.java │ │ ├── MapImage.java │ │ ├── MapObject.java │ │ └── MapText.java │ │ ├── midi │ │ ├── MidiUtil.java │ │ ├── NoteBlockReceiver.java │ │ └── ToneUtil.java │ │ ├── nbt │ │ ├── CustomNBT.java │ │ └── LeatherColorer.java │ │ ├── packets │ │ ├── DenizenPacketHandler.java │ │ ├── HideParticles.java │ │ ├── ItemChangeMessage.java │ │ ├── NetworkInterceptCodeGen.java │ │ └── NetworkInterceptHelper.java │ │ └── world │ │ ├── PathFinder.java │ │ ├── VoidGenerator.java │ │ └── WorldListChangeTracker.java │ └── resources │ ├── Denizen.mid │ ├── config.yml │ └── plugin.yml ├── pom.xml ├── v1_17 ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── nms │ └── v1_17 │ ├── Handler.java │ ├── ReflectionMappingsInfo.java │ ├── helpers │ ├── AdvancementHelperImpl.java │ ├── AnimationHelperImpl.java │ ├── BlockHelperImpl.java │ ├── ChunkHelperImpl.java │ ├── CustomEntityHelperImpl.java │ ├── EnchantmentHelperImpl.java │ ├── EntityHelperImpl.java │ ├── FishingHelperImpl.java │ ├── ItemHelperImpl.java │ ├── PacketHelperImpl.java │ ├── PlayerHelperImpl.java │ └── WorldHelperImpl.java │ └── impl │ ├── BiomeNMSImpl.java │ ├── ImprovedOfflinePlayerImpl.java │ ├── ProfileEditorImpl.java │ ├── SidebarImpl.java │ ├── blocks │ └── BlockLightImpl.java │ ├── entities │ ├── CraftFakeArrowImpl.java │ ├── CraftFakePlayerImpl.java │ ├── CraftItemProjectileImpl.java │ ├── EntityFakeArrowImpl.java │ ├── EntityFakePlayerImpl.java │ └── EntityItemProjectileImpl.java │ ├── jnbt │ └── CompoundTagImpl.java │ └── network │ ├── fakes │ ├── FakeChannelImpl.java │ ├── FakeNetworkManagerImpl.java │ └── FakePlayerConnectionImpl.java │ ├── handlers │ ├── AbstractListenerPlayInImpl.java │ ├── DenizenNetworkManagerImpl.java │ ├── DenizenPacketListenerImpl.java │ └── FakeBlockHelper.java │ └── packets │ ├── PacketInResourcePackStatusImpl.java │ ├── PacketInSteerVehicleImpl.java │ ├── PacketOutChatImpl.java │ ├── PacketOutSetSlotImpl.java │ ├── PacketOutSpawnEntityImpl.java │ ├── PacketOutTradeListImpl.java │ └── PacketOutWindowItemsImpl.java ├── v1_18 ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── nms │ └── v1_18 │ ├── Handler.java │ ├── ReflectionMappingsInfo.java │ ├── helpers │ ├── AdvancementHelperImpl.java │ ├── AnimationHelperImpl.java │ ├── BlockHelperImpl.java │ ├── ChunkHelperImpl.java │ ├── CustomEntityHelperImpl.java │ ├── EnchantmentHelperImpl.java │ ├── EntityHelperImpl.java │ ├── FishingHelperImpl.java │ ├── ItemHelperImpl.java │ ├── PacketHelperImpl.java │ ├── PlayerHelperImpl.java │ └── WorldHelperImpl.java │ └── impl │ ├── BiomeNMSImpl.java │ ├── ImprovedOfflinePlayerImpl.java │ ├── ProfileEditorImpl.java │ ├── SidebarImpl.java │ ├── blocks │ └── BlockLightImpl.java │ ├── entities │ ├── CraftFakeArrowImpl.java │ ├── CraftFakePlayerImpl.java │ ├── CraftItemProjectileImpl.java │ ├── EntityFakeArrowImpl.java │ ├── EntityFakePlayerImpl.java │ └── EntityItemProjectileImpl.java │ ├── jnbt │ └── CompoundTagImpl.java │ └── network │ ├── fakes │ ├── FakeChannelImpl.java │ ├── FakeNetworkManagerImpl.java │ └── FakePlayerConnectionImpl.java │ ├── handlers │ ├── AbstractListenerPlayInImpl.java │ ├── DenizenNetworkManagerImpl.java │ ├── DenizenPacketListenerImpl.java │ └── FakeBlockHelper.java │ └── packets │ ├── PacketInResourcePackStatusImpl.java │ ├── PacketInSteerVehicleImpl.java │ └── PacketOutChatImpl.java ├── v1_19 ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── nms │ └── v1_19 │ ├── Handler.java │ ├── ReflectionMappingsInfo.java │ ├── helpers │ ├── AdvancementHelperImpl.java │ ├── AnimationHelperImpl.java │ ├── BlockHelperImpl.java │ ├── ChunkHelperImpl.java │ ├── CustomEntityHelperImpl.java │ ├── EnchantmentHelperImpl.java │ ├── EntityHelperImpl.java │ ├── FishingHelperImpl.java │ ├── ItemHelperImpl.java │ ├── PacketHelperImpl.java │ ├── PlayerHelperImpl.java │ └── WorldHelperImpl.java │ └── impl │ ├── BiomeNMSImpl.java │ ├── ImprovedOfflinePlayerImpl.java │ ├── ProfileEditorImpl.java │ ├── SidebarImpl.java │ ├── blocks │ └── BlockLightImpl.java │ ├── entities │ ├── CraftFakeArrowImpl.java │ ├── CraftFakePlayerImpl.java │ ├── CraftItemProjectileImpl.java │ ├── EntityFakeArrowImpl.java │ ├── EntityFakePlayerImpl.java │ └── EntityItemProjectileImpl.java │ ├── jnbt │ └── CompoundTagImpl.java │ └── network │ ├── fakes │ ├── FakeChannelImpl.java │ ├── FakeNetworkManagerImpl.java │ └── FakePlayerConnectionImpl.java │ ├── handlers │ ├── AbstractListenerPlayInImpl.java │ ├── DenizenNetworkManagerImpl.java │ ├── DenizenPacketListenerImpl.java │ └── FakeBlockHelper.java │ └── packets │ ├── PacketInResourcePackStatusImpl.java │ ├── PacketInSteerVehicleImpl.java │ └── PacketOutChatImpl.java ├── v1_20 ├── pom.xml └── src │ └── main │ └── java │ └── com │ └── denizenscript │ └── denizen │ └── nms │ └── v1_20 │ ├── Handler.java │ ├── ReflectionMappingsInfo.java │ ├── helpers │ ├── AdvancementHelperImpl.java │ ├── AnimationHelperImpl.java │ ├── BlockHelperImpl.java │ ├── ChunkHelperImpl.java │ ├── CustomEntityHelperImpl.java │ ├── EnchantmentHelperImpl.java │ ├── EntityDataNameMapper.java │ ├── EntityHelperImpl.java │ ├── FishingHelperImpl.java │ ├── ItemHelperImpl.java │ ├── PacketHelperImpl.java │ ├── PlayerHelperImpl.java │ └── WorldHelperImpl.java │ └── impl │ ├── BiomeNMSImpl.java │ ├── ImprovedOfflinePlayerImpl.java │ ├── ProfileEditorImpl.java │ ├── SidebarImpl.java │ ├── blocks │ └── BlockLightImpl.java │ ├── entities │ ├── CraftFakeArrowImpl.java │ ├── CraftFakePlayerImpl.java │ ├── CraftItemProjectileImpl.java │ ├── EntityFakeArrowImpl.java │ ├── EntityFakePlayerImpl.java │ └── EntityItemProjectileImpl.java │ ├── jnbt │ └── CompoundTagImpl.java │ └── network │ ├── fakes │ ├── FakeChannelImpl.java │ ├── FakeNetworkManagerImpl.java │ └── FakePlayerConnectionImpl.java │ ├── handlers │ ├── AbstractListenerPlayInImpl.java │ ├── DenizenNetworkManagerImpl.java │ ├── DenizenPacketListenerImpl.java │ ├── FakeBlockHelper.java │ └── packet │ │ ├── ActionBarEventPacketHandlers.java │ │ ├── AttachPacketHandlers.java │ │ ├── BlockLightPacketHandlers.java │ │ ├── DenizenPacketHandlerPacketHandlers.java │ │ ├── DisguisePacketHandlers.java │ │ ├── EntityMetadataPacketHandlers.java │ │ ├── FakeBlocksPacketHandlers.java │ │ ├── FakeEquipmentPacketHandlers.java │ │ ├── FakePlayerPacketHandlers.java │ │ ├── HiddenEntitiesPacketHandlers.java │ │ ├── HideParticlesPacketHandlers.java │ │ ├── PlayerHearsSoundEventPacketHandlers.java │ │ └── TablistUpdateEventPacketHandlers.java │ └── packets │ ├── PacketInResourcePackStatusImpl.java │ ├── PacketInSteerVehicleImpl.java │ └── PacketOutChatImpl.java └── v1_21 ├── pom.xml └── src └── main └── java └── com └── denizenscript └── denizen └── nms └── v1_21 ├── Handler.java ├── ReflectionMappingsInfo.java ├── helpers ├── AdvancementHelperImpl.java ├── AnimationHelperImpl.java ├── BlockHelperImpl.java ├── ChunkHelperImpl.java ├── CustomEntityHelperImpl.java ├── EnchantmentHelperImpl.java ├── EntityDataNameMapper.java ├── EntityHelperImpl.java ├── FishingHelperImpl.java ├── ItemHelperImpl.java ├── PacketHelperImpl.java ├── PlayerHelperImpl.java └── WorldHelperImpl.java └── impl ├── BiomeNMSImpl.java ├── ImprovedOfflinePlayerImpl.java ├── ProfileEditorImpl.java ├── SidebarImpl.java ├── blocks └── BlockLightImpl.java ├── entities ├── CraftFakeArrowImpl.java ├── CraftFakePlayerImpl.java ├── CraftItemProjectileImpl.java ├── EntityFakeArrowImpl.java ├── EntityFakePlayerImpl.java └── EntityItemProjectileImpl.java ├── jnbt └── CompoundTagImpl.java └── network ├── fakes ├── FakeChannelImpl.java ├── FakeNetworkManagerImpl.java └── FakePlayerConnectionImpl.java ├── handlers ├── AbstractListenerPlayInImpl.java ├── DenizenNetworkManagerImpl.java ├── DenizenPacketListenerImpl.java ├── FakeBlockHelper.java └── packet │ ├── ActionBarEventPacketHandlers.java │ ├── AttachPacketHandlers.java │ ├── BlockLightPacketHandlers.java │ ├── DenizenPacketHandlerPacketHandlers.java │ ├── DisguisePacketHandlers.java │ ├── EntityMetadataPacketHandlers.java │ ├── FakeBlocksPacketHandlers.java │ ├── FakeEquipmentPacketHandlers.java │ ├── FakePlayerPacketHandlers.java │ ├── HiddenEntitiesPacketHandlers.java │ ├── HideParticlesPacketHandlers.java │ ├── PlayerHearsSoundEventPacketHandlers.java │ └── TablistUpdateEventPacketHandlers.java └── packets ├── PacketInResourcePackStatusImpl.java ├── PacketInSteerVehicleImpl.java └── PacketOutChatImpl.java /.gitattributes: -------------------------------------------------------------------------------- 1 | # Disable LF normalization for all files 2 | * -text 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: mcmonkey4eva 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Describe an issue with Denizen not working as expected. DO NOT POST HERE UNLESS SOMEONE TOLD YOU TO ON DISCORD. 4 | 5 | --- 6 | 7 | 14 | The output of `/version` on my server is: **paste here** 15 | The output of `/version denizen` on my server is: **paste here** 16 | (If relevant) A link to a paste of a script demonstrating the issue: **paste here** 17 | The issue is: 18 | **Describe your issue in full here** 19 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest something new to add. DO NOT POST HERE UNLESS SOMEONE TOLD YOU TO ON DISCORD. 4 | 5 | --- 6 | 7 | 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/i-m-having-trouble.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: I'm Having Trouble 3 | about: Make an issue post that seems to be trouble on your end (not a bug in Denizen itself) - ASK ON DISCORD https://discord.gg/Q6pZGSR 4 | 5 | --- 6 | 7 | **STOP** 8 | You shouldn't be on GitHub issues! 9 | Ask for help on Discord: https://discord.gg/Q6pZGSR 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Maven 2 | target/ 3 | dependency-reduced-pom.xml 4 | 5 | # IntelliJ 6 | .idea/ 7 | *.iml 8 | 9 | # Temporary/etc. 10 | *.bak 11 | *.exe 12 | .DS_Store 13 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019-2024 The Denizen Script Team 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /dist/src/main/java/com/denizenscript/denizen/dist/Dist.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.dist; 2 | 3 | public class Dist { 4 | // Empty class just to make things work. 5 | } 6 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/PaperEventHelpers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper; 2 | 3 | import com.denizenscript.denizen.objects.InventoryTag; 4 | import com.denizenscript.denizen.scripts.containers.core.InventoryScriptContainer; 5 | import com.denizenscript.denizen.utilities.VanillaTagHelper; 6 | import com.denizenscript.denizen.utilities.inventory.InventoryViewUtil; 7 | import com.denizenscript.denizencore.objects.core.ScriptTag; 8 | import com.destroystokyo.paper.event.player.PlayerRecipeBookClickEvent; 9 | import io.papermc.paper.event.server.ServerResourcesReloadedEvent; 10 | import org.bukkit.event.EventHandler; 11 | import org.bukkit.event.EventPriority; 12 | import org.bukkit.event.Listener; 13 | 14 | public class PaperEventHelpers implements Listener { 15 | 16 | @EventHandler 17 | public void onRecipeBookClick(PlayerRecipeBookClickEvent event) { 18 | InventoryTag inventory = InventoryTag.mirrorBukkitInventory(InventoryViewUtil.getTopInventory(event.getPlayer().getOpenInventory())); 19 | if (inventory.getIdHolder() instanceof ScriptTag) { 20 | if (((InventoryScriptContainer) ((ScriptTag) inventory.getIdHolder()).getContainer()).gui) { 21 | event.setCancelled(true); 22 | } 23 | } 24 | } 25 | 26 | @EventHandler(priority = EventPriority.LOWEST) 27 | public void onServerResourcesReloaded(ServerResourcesReloadedEvent event) { 28 | VanillaTagHelper.loadTagsCache(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerCompletesAdvancementScriptEventPaperImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.events; 2 | 3 | import com.denizenscript.denizen.events.player.PlayerCompletesAdvancementScriptEvent; 4 | import com.denizenscript.denizen.paper.PaperModule; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import com.denizenscript.denizencore.objects.ObjectTag; 7 | import com.denizenscript.denizencore.utilities.CoreUtilities; 8 | import net.md_5.bungee.api.ChatColor; 9 | 10 | public class PlayerCompletesAdvancementScriptEventPaperImpl extends PlayerCompletesAdvancementScriptEvent { 11 | 12 | @Override 13 | public ObjectTag getContext(String name) { 14 | switch (name) { 15 | case "message": return new ElementTag(PaperModule.stringifyComponent(event.message())); 16 | } 17 | return super.getContext(name); 18 | } 19 | 20 | @Override 21 | public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) { 22 | if (determinationObj instanceof ElementTag) { 23 | String determination = determinationObj.toString(); 24 | String lower = CoreUtilities.toLowerCase(determination); 25 | if (lower.equals("no_message")) { 26 | event.message(null); 27 | return true; 28 | } 29 | event.message(PaperModule.parseFormattedText(determination, ChatColor.WHITE)); 30 | return true; 31 | } 32 | else { 33 | return super.applyDetermination(path, determinationObj); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerDeepSleepScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.events; 2 | 3 | import com.denizenscript.denizen.events.BukkitScriptEvent; 4 | import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; 5 | import com.denizenscript.denizencore.scripts.ScriptEntryData; 6 | import io.papermc.paper.event.player.PlayerDeepSleepEvent; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | 10 | public class PlayerDeepSleepScriptEvent extends BukkitScriptEvent implements Listener { 11 | 12 | // <--[event] 13 | // @Events 14 | // player deep sleeps 15 | // 16 | // @Location true 17 | // 18 | // @Plugin Paper 19 | // 20 | // @Group Paper 21 | // 22 | // @Cancellable true 23 | // 24 | // @Triggers when a player has slept long enough in a bed to count as being in deep sleep and thus skip the night. Cancelling the event prevents the player from qualifying to skip the night. 25 | // 26 | // @Player Always. 27 | // 28 | // --> 29 | 30 | public PlayerDeepSleepScriptEvent() { 31 | registerCouldMatcher("player deep sleeps"); 32 | } 33 | 34 | public PlayerDeepSleepEvent event; 35 | 36 | @Override 37 | public boolean matches(ScriptPath path) { 38 | if (!runInCheck(path, event.getPlayer().getLocation())) { 39 | return false; 40 | } 41 | return super.matches(path); 42 | } 43 | 44 | @Override 45 | public ScriptEntryData getScriptEntryData() { 46 | return new BukkitScriptEntryData(event.getPlayer()); 47 | } 48 | 49 | @EventHandler 50 | public void playerDeepSleep(PlayerDeepSleepEvent event) { 51 | this.event = event; 52 | fire(event); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerItemTakesDamageScriptEventPaperImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.events; 2 | 3 | import com.denizenscript.denizen.events.player.PlayerItemTakesDamageScriptEvent; 4 | import com.denizenscript.denizen.nms.NMSHandler; 5 | import com.denizenscript.denizen.nms.NMSVersion; 6 | import com.denizenscript.denizencore.objects.ObjectTag; 7 | import com.denizenscript.denizencore.objects.core.ElementTag; 8 | 9 | public class PlayerItemTakesDamageScriptEventPaperImpl extends PlayerItemTakesDamageScriptEvent { 10 | 11 | @Override 12 | public ObjectTag getContext(String name) { 13 | switch (name) { 14 | case "original_damage": return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_18) ? new ElementTag(event.getOriginalDamage()) : null; 15 | } 16 | return super.getContext(name); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerJumpsScriptEventPaperImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.events; 2 | 3 | import com.denizenscript.denizen.events.player.PlayerJumpScriptEvent; 4 | import com.denizenscript.denizen.objects.EntityTag; 5 | import com.denizenscript.denizen.objects.LocationTag; 6 | import com.denizenscript.denizen.objects.PlayerTag; 7 | import com.destroystokyo.paper.event.player.PlayerJumpEvent; 8 | import org.bukkit.event.EventHandler; 9 | 10 | public class PlayerJumpsScriptEventPaperImpl extends PlayerJumpScriptEvent { 11 | 12 | @EventHandler 13 | public void onPlayerJumps(PlayerJumpEvent event) { 14 | if (EntityTag.isNPC(event.getPlayer())) { 15 | return; 16 | } 17 | location = new LocationTag(event.getFrom()); 18 | player = new PlayerTag(event.getPlayer()); 19 | fire(event); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/events/PlayerQuitsScriptEventPaperImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.events; 2 | 3 | import com.denizenscript.denizen.events.player.PlayerQuitsScriptEvent; 4 | import com.denizenscript.denizen.paper.PaperModule; 5 | import com.denizenscript.denizencore.objects.ObjectTag; 6 | import com.denizenscript.denizencore.objects.core.ElementTag; 7 | import net.md_5.bungee.api.ChatColor; 8 | 9 | 10 | public class PlayerQuitsScriptEventPaperImpl extends PlayerQuitsScriptEvent { 11 | 12 | public PlayerQuitsScriptEventPaperImpl() { 13 | registerSwitches("cause"); 14 | this.registerTextDetermination("none", (evt) -> { 15 | event.quitMessage(null); 16 | }); 17 | this.registerDetermination(null, ElementTag.class, (evt, context, determination) -> { 18 | event.quitMessage(PaperModule.parseFormattedText(determination.toString(), ChatColor.WHITE)); 19 | }); 20 | } 21 | 22 | @Override 23 | public boolean matches(ScriptPath path) { 24 | if (!runGenericSwitchCheck(path, "cause", event.getReason().name())) { 25 | return false; 26 | } 27 | return super.matches(path); 28 | } 29 | 30 | @Override 31 | public ObjectTag getContext(String name) { 32 | return switch (name) { 33 | case "message" -> new ElementTag(PaperModule.stringifyComponent(event.quitMessage())); 34 | case "cause" -> new ElementTag(event.getReason()); 35 | default -> super.getContext(name); 36 | }; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/properties/EntityBodyStingers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.properties; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.objects.properties.entity.EntityProperty; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ElementTag; 7 | 8 | public class EntityBodyStingers extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name body_stingers 13 | // @input ElementTag(Number) 14 | // @plugin Paper 15 | // @description 16 | // Controls the number of bee stingers stuck in an entity's body. 17 | // Note: Bee stingers will only be visible for players or player-type npcs. 18 | // --> 19 | 20 | public static boolean describes(EntityTag entity) { 21 | return entity.isLivingEntity(); 22 | } 23 | 24 | @Override 25 | public boolean isDefaultValue(ElementTag value) { 26 | return value.asInt() == 0; 27 | } 28 | 29 | @Override 30 | public ElementTag getPropertyValue() { 31 | return new ElementTag(getLivingEntity().getBeeStingersInBody()); 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "body_stingers"; 37 | } 38 | 39 | @Override 40 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 41 | if (mechanism.requireInteger()) { 42 | getLivingEntity().setBeeStingersInBody(param.asInt()); 43 | } 44 | } 45 | 46 | public static void register() { 47 | autoRegister("body_stingers", EntityBodyStingers.class, ElementTag.class, false); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/properties/EntityEggLayTime.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.properties; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.objects.properties.entity.EntityProperty; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.DurationTag; 7 | import org.bukkit.entity.Chicken; 8 | 9 | public class EntityEggLayTime extends EntityProperty { 10 | 11 | // <--[property] 12 | // @object EntityTag 13 | // @name egg_lay_time 14 | // @input DurationTag 15 | // @plugin Paper 16 | // @description 17 | // If the entity is a chicken, controls the duration of time until it next lays an egg. 18 | // --> 19 | 20 | public static boolean describes(EntityTag entity) { 21 | return entity.getBukkitEntity() instanceof Chicken; 22 | } 23 | 24 | @Override 25 | public DurationTag getPropertyValue() { 26 | return new DurationTag((long) as(Chicken.class).getEggLayTime()); 27 | } 28 | 29 | @Override 30 | public String getPropertyId() { 31 | return "egg_lay_time"; 32 | } 33 | 34 | @Override 35 | public void setPropertyValue(DurationTag param, Mechanism mechanism) { 36 | as(Chicken.class).setEggLayTime(param.getTicksAsInt()); 37 | } 38 | 39 | public static void register() { 40 | autoRegister("egg_lay_time", EntityEggLayTime.class, DurationTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/properties/EntityLeftHanded.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.properties; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.objects.properties.entity.EntityProperty; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ElementTag; 7 | import org.bukkit.entity.Mob; 8 | 9 | public class EntityLeftHanded extends EntityProperty { 10 | 11 | // <--[property] 12 | // @object EntityTag 13 | // @name left_handed 14 | // @input ElementTag(Boolean) 15 | // @plugin Paper 16 | // @description 17 | // Whether a mob is left-handed. Mobs have a rare chance of spawning left-handed. 18 | // --> 19 | 20 | public static boolean describes(EntityTag entity) { 21 | return entity.getBukkitEntity() instanceof Mob; 22 | } 23 | 24 | @Override 25 | public ElementTag getPropertyValue() { 26 | return new ElementTag(as(Mob.class).isLeftHanded()); 27 | } 28 | 29 | @Override 30 | public String getPropertyId() { 31 | return "left_handed"; 32 | } 33 | 34 | @Override 35 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 36 | if (mechanism.requireBoolean()) { 37 | as(Mob.class).setLeftHanded(param.asBoolean()); 38 | } 39 | } 40 | 41 | public static void register() { 42 | autoRegister("left_handed", EntityLeftHanded.class, ElementTag.class, false); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/properties/PaperItemExtensions.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.properties; 2 | 3 | import com.denizenscript.denizen.objects.ItemTag; 4 | import com.denizenscript.denizencore.objects.core.ElementTag; 5 | 6 | public class PaperItemExtensions { 7 | 8 | public static void register() { 9 | 10 | // <--[tag] 11 | // @attribute 12 | // @returns ElementTag 13 | // @group paper 14 | // @Plugin Paper 15 | // @description 16 | // Returns the rarity of an item, as "common", "uncommon", "rare", or "epic". 17 | // --> 18 | ItemTag.tagProcessor.registerTag(ElementTag.class, "rarity", (attribute, item) -> { 19 | return new ElementTag(item.getItemStack().getRarity()); 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /paper/src/main/java/com/denizenscript/denizen/paper/tags/PaperTagBase.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.paper.tags; 2 | 3 | import com.denizenscript.denizencore.objects.core.DurationTag; 4 | import com.denizenscript.denizencore.objects.core.ListTag; 5 | import com.denizenscript.denizencore.tags.*; 6 | import org.bukkit.Bukkit; 7 | 8 | public class PaperTagBase extends PseudoObjectTagBase { 9 | 10 | public static PaperTagBase instance; 11 | 12 | public PaperTagBase() { 13 | instance = this; 14 | TagManager.registerStaticTagBaseHandler(PaperTagBase.class, "paper", (t) -> instance); 15 | } 16 | 17 | @Override 18 | public void register() { 19 | 20 | // <--[tag] 21 | // @attribute 22 | // @returns ListTag(DurationTag) 23 | // @Plugin Paper 24 | // @description 25 | // Returns a sample of the server's last 5s of tick times as a list of durations. 26 | // On average, a tick should take 50ms or less for a stable 20tps. 27 | // --> 28 | tagProcessor.registerTag(ListTag.class, "tick_times", (attribute, object) -> { 29 | ListTag list = new ListTag(); 30 | for (long time : Bukkit.getServer().getTickTimes()) { 31 | list.addObject(new DurationTag(time / 1000000000D)); 32 | } 33 | return list; 34 | }); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /plugin/lib/Vault.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenizenScript/Denizen/7e4a352ee2e0766d9b109c7ce2dd334d78974562/plugin/lib/Vault.jar -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/bukkit/ExhaustedNPCEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.bukkit; 2 | 3 | import net.citizensnpcs.api.event.NPCEvent; 4 | import net.citizensnpcs.api.npc.NPC; 5 | import org.bukkit.event.Cancellable; 6 | import org.bukkit.event.HandlerList; 7 | 8 | /** 9 | * Bukkit event for when an NPC is exhausted. Exhausted NPCs cannot move 10 | * until their hunger level is below maxhunger, as tracked by the HungerTrait 11 | * provided by Denizen. 12 | */ 13 | public class ExhaustedNPCEvent extends NPCEvent implements Cancellable { 14 | 15 | private static final HandlerList handlers = new HandlerList(); 16 | private boolean cancelled = false; 17 | 18 | public ExhaustedNPCEvent(NPC npc) { 19 | super(npc); 20 | } 21 | 22 | public HandlerList getHandlers() { 23 | return handlers; 24 | } 25 | 26 | public static HandlerList getHandlerList() { 27 | return handlers; 28 | } 29 | 30 | @Override 31 | public boolean isCancelled() { 32 | return cancelled; 33 | } 34 | 35 | @Override 36 | public void setCancelled(boolean cancelled) { 37 | this.cancelled = cancelled; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/bukkit/SavesReloadEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.bukkit; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | /** 7 | * Bukkit event for when Denizen 'saves' are reloaded. 8 | */ 9 | public class SavesReloadEvent extends Event { 10 | 11 | private static final HandlerList handlers = new HandlerList(); 12 | 13 | public HandlerList getHandlers() { 14 | return handlers; 15 | } 16 | 17 | public static HandlerList getHandlerList() { 18 | return handlers; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/bukkit/ScriptReloadEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.bukkit; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | /** 7 | * Bukkit event for when Denizen dScripts are reloaded. This fires after scripts are reloaded. 8 | * Also fires when scripts are loaded for the first time, despite the 're' part of the name. 9 | */ 10 | public class ScriptReloadEvent extends Event { 11 | 12 | private static final HandlerList handlers = new HandlerList(); 13 | 14 | public HandlerList getHandlers() { 15 | return handlers; 16 | } 17 | 18 | public static HandlerList getHandlerList() { 19 | return handlers; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesActionbarScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.player; 2 | 3 | public class PlayerReceivesActionbarScriptEvent extends PlayerReceivesMessageScriptEvent { 4 | 5 | // <--[event] 6 | // @Events 7 | // player receives actionbar 8 | // 9 | // @Regex ^on player receives actionbar$ 10 | // 11 | // @Group Player 12 | // 13 | // @Cancellable true 14 | // 15 | // @Warning Triggering new actionbar messages in this event will cause it to re-fire. 16 | // 17 | // @Triggers when a player receives any actionbar from the server. 18 | // 19 | // @Context 20 | // returns an ElementTag of the actionbar. 21 | // returns an ElementTag of the raw JSON used for the actionbar. 22 | // 23 | // @Determine 24 | // "MESSAGE:" to change the actionbar. 25 | // "RAW_JSON:" to change the JSON used for the actionbar. 26 | // 27 | // @Player Always. 28 | // 29 | // --> 30 | 31 | public PlayerReceivesActionbarScriptEvent() { 32 | instance = this; 33 | } 34 | 35 | public static PlayerReceivesActionbarScriptEvent instance; 36 | 37 | @Override 38 | public boolean couldMatch(ScriptPath path) { 39 | return path.eventLower.startsWith("player receives actionbar"); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerTriggersRaidScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.player; 2 | 3 | import com.denizenscript.denizen.events.world.RaidScriptEvent; 4 | import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData; 5 | import com.denizenscript.denizencore.scripts.ScriptEntryData; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.raid.RaidTriggerEvent; 9 | 10 | public class PlayerTriggersRaidScriptEvent extends RaidScriptEvent implements Listener { 11 | 12 | // <--[event] 13 | // @Events 14 | // player triggers raid 15 | // 16 | // @Group Player 17 | // 18 | // @Location true 19 | // 20 | // @Cancellable true 21 | // 22 | // @Triggers when a player triggers a village raid. 23 | // 24 | // @Context 25 | // returns the raid data. See <@link language Raid Event Data>. 26 | // 27 | // @Player Always. 28 | // 29 | // --> 30 | 31 | public PlayerTriggersRaidScriptEvent() { 32 | super(false); 33 | registerCouldMatcher("player triggers raid"); 34 | } 35 | 36 | @Override 37 | public boolean matches(ScriptPath path) { 38 | if (!runInCheck(path, event.getPlayer().getLocation())) { 39 | return false; 40 | } 41 | return super.matches(path); 42 | } 43 | 44 | @Override 45 | public ScriptEntryData getScriptEntryData() { 46 | return new BukkitScriptEntryData(event.getPlayer()); 47 | } 48 | 49 | @EventHandler 50 | public void onPlayerTriggersRaid(RaidTriggerEvent event) { 51 | this.event = event; 52 | fire(event); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/server/ServerPrestartScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.server; 2 | 3 | import com.denizenscript.denizen.events.BukkitScriptEvent; 4 | import com.denizenscript.denizencore.events.ScriptEvent; 5 | import com.denizenscript.denizencore.scripts.containers.core.WorldScriptContainer; 6 | 7 | public class ServerPrestartScriptEvent extends BukkitScriptEvent { 8 | 9 | // <--[event] 10 | // @Events 11 | // server prestart 12 | // 13 | // @Group Server 14 | // 15 | // @Triggers before the server finishes starting... fired after some saves are loaded, but before other data is loaded. Use with extreme caution. 16 | // 17 | // @Warning This event uses special pre-loading tricks to fire before everything else. Use extreme caution. 18 | // 19 | // @Example 20 | // on server prestart: 21 | // - createworld my_extra_world 22 | // 23 | // --> 24 | 25 | public ServerPrestartScriptEvent() { 26 | instance = this; 27 | registerCouldMatcher("server prestart"); 28 | } 29 | 30 | public static ServerPrestartScriptEvent instance; 31 | 32 | public void specialHackRunEvent() { 33 | for (WorldScriptContainer container : ScriptEvent.worldContainers) { 34 | if (container.containsScriptSection("events.on server prestart") && container.shouldEnable()) { 35 | ScriptPath path = new ScriptPath(container, "server prestart", "on server prestart"); 36 | clone().run(path); 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/server/ServerStartScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.server; 2 | 3 | import com.denizenscript.denizen.events.BukkitScriptEvent; 4 | 5 | public class ServerStartScriptEvent extends BukkitScriptEvent { 6 | 7 | // <--[event] 8 | // @Events 9 | // server start 10 | // 11 | // @Group Server 12 | // 13 | // @Triggers when the server starts. 14 | // 15 | // --> 16 | 17 | public ServerStartScriptEvent() { 18 | instance = this; 19 | registerCouldMatcher("server start"); 20 | } 21 | 22 | public static ServerStartScriptEvent instance; 23 | } 24 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/world/ChunkUnloadScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.world; 2 | 3 | import com.denizenscript.denizen.objects.ChunkTag; 4 | import com.denizenscript.denizen.events.BukkitScriptEvent; 5 | import com.denizenscript.denizencore.objects.ObjectTag; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.world.ChunkUnloadEvent; 9 | 10 | public class ChunkUnloadScriptEvent extends BukkitScriptEvent implements Listener { 11 | 12 | // <--[event] 13 | // @Events 14 | // chunk unloads 15 | // 16 | // @Group World 17 | // 18 | // @Location true 19 | // 20 | // @Warning This event will fire *extremely* rapidly and often! 21 | // 22 | // @Cancellable true 23 | // 24 | // @Triggers when a chunk is unloaded 25 | // 26 | // @Context 27 | // returns the unloading chunk. 28 | // 29 | // --> 30 | 31 | public ChunkUnloadScriptEvent() { 32 | registerCouldMatcher("chunk unloads"); 33 | } 34 | 35 | 36 | public ChunkTag chunk; 37 | public ChunkUnloadEvent event; 38 | 39 | @Override 40 | public boolean matches(ScriptPath path) { 41 | if (!runInCheck(path, chunk.getCenter())) { 42 | return false; 43 | } 44 | return super.matches(path); 45 | } 46 | 47 | @Override 48 | public ObjectTag getContext(String name) { 49 | if (name.equals("chunk")) { 50 | return chunk; 51 | } 52 | return super.getContext(name); 53 | } 54 | 55 | @EventHandler 56 | public void onChunkUnload(ChunkUnloadEvent event) { 57 | chunk = new ChunkTag(event.getChunk()); 58 | this.event = event; 59 | fire(event); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/world/RaidFinishesScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.world; 2 | 3 | import com.denizenscript.denizen.objects.PlayerTag; 4 | import com.denizenscript.denizencore.objects.ObjectTag; 5 | import com.denizenscript.denizencore.objects.core.ListTag; 6 | import org.bukkit.entity.Player; 7 | import org.bukkit.event.EventHandler; 8 | import org.bukkit.event.Listener; 9 | import org.bukkit.event.raid.RaidFinishEvent; 10 | 11 | public class RaidFinishesScriptEvent extends RaidScriptEvent implements Listener { 12 | 13 | // <--[event] 14 | // @Events 15 | // raid finishes 16 | // 17 | // @Group World 18 | // 19 | // @Location true 20 | // 21 | // @Triggers when a village raid finishes normally. 22 | // 23 | // @Context 24 | // returns the raid data. See <@link language Raid Event Data>. 25 | // returns the ListTag of players who completed the raid. This is separate from the raid's heroes in that the winners are guaranteed to be online. 26 | // 27 | // --> 28 | 29 | public RaidFinishesScriptEvent() { 30 | super(true); 31 | registerCouldMatcher("raid finishes"); 32 | } 33 | 34 | @Override 35 | public ObjectTag getContext(String name) { 36 | switch (name) { 37 | case "winners": 38 | ListTag list = new ListTag(); 39 | for (Player player : event.getWinners()) { 40 | list.addObject(new PlayerTag(player)); 41 | } 42 | return list; 43 | } 44 | return super.getContext(name); 45 | } 46 | 47 | @EventHandler 48 | public void onRaidFinishes(RaidFinishEvent event) { 49 | this.event = event; 50 | fire(event); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/world/WorldInitsScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.world; 2 | 3 | import com.denizenscript.denizen.objects.WorldTag; 4 | import com.denizenscript.denizen.events.BukkitScriptEvent; 5 | import com.denizenscript.denizencore.objects.ObjectTag; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.world.WorldInitEvent; 9 | 10 | public class WorldInitsScriptEvent extends BukkitScriptEvent implements Listener { 11 | 12 | // <--[event] 13 | // @Events 14 | // initializes 15 | // 16 | // @Group World 17 | // 18 | // @Triggers when a world is initialized. 19 | // 20 | // @Context 21 | // returns the WorldTag that was initialized. 22 | // 23 | // --> 24 | 25 | public WorldInitsScriptEvent() { 26 | registerCouldMatcher(" initializes"); 27 | } 28 | 29 | public WorldTag world; 30 | public WorldInitEvent event; 31 | 32 | @Override 33 | public boolean matches(ScriptPath path) { 34 | if (!path.tryArgObject(0, world)) { 35 | return false; 36 | } 37 | return super.matches(path); 38 | } 39 | 40 | @Override 41 | public ObjectTag getContext(String name) { 42 | if (name.equals("world")) { 43 | return world; 44 | } 45 | return super.getContext(name); 46 | } 47 | 48 | @EventHandler 49 | public void onWorldInits(WorldInitEvent event) { 50 | world = new WorldTag(event.getWorld()); 51 | this.event = event; 52 | fire(event); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/events/world/WorldSavesScriptEvent.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.events.world; 2 | 3 | import com.denizenscript.denizen.objects.WorldTag; 4 | import com.denizenscript.denizen.events.BukkitScriptEvent; 5 | import com.denizenscript.denizencore.objects.ObjectTag; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.world.WorldSaveEvent; 9 | 10 | public class WorldSavesScriptEvent extends BukkitScriptEvent implements Listener { 11 | 12 | // <--[event] 13 | // @Events 14 | // saves 15 | // 16 | // @Group World 17 | // 18 | // @Triggers when a world is saved. 19 | // 20 | // @Context 21 | // returns the WorldTag that was saved. 22 | // 23 | // --> 24 | 25 | public WorldSavesScriptEvent() { 26 | registerCouldMatcher(" saves"); 27 | } 28 | 29 | public WorldTag world; 30 | public WorldSaveEvent event; 31 | 32 | @Override 33 | public boolean matches(ScriptPath path) { 34 | if (!path.tryArgObject(0, world)) { 35 | return false; 36 | } 37 | return super.matches(path); 38 | } 39 | 40 | @Override 41 | public ObjectTag getContext(String name) { 42 | if (name.equals("world")) { 43 | return world; 44 | } 45 | return super.getContext(name); 46 | } 47 | 48 | @EventHandler 49 | public void onWorldSaves(WorldSaveEvent event) { 50 | world = new WorldTag(event.getWorld()); 51 | this.event = event; 52 | fire(event); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/NMSVersion.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms; 2 | 3 | public enum NMSVersion { 4 | 5 | NOT_SUPPORTED("not_supported"), 6 | v1_17("1.17"), 7 | v1_18("1.18"), 8 | v1_19("1.19"), 9 | v1_20("1.20"), 10 | v1_21("1.21"); 11 | 12 | final String minecraftVersion; 13 | 14 | NMSVersion(String minecraftVersion) { 15 | this.minecraftVersion = minecraftVersion; 16 | } 17 | 18 | public boolean isAtLeast(NMSVersion version) { 19 | return ordinal() >= version.ordinal(); 20 | } 21 | 22 | public boolean isAtMost(NMSVersion version) { 23 | return ordinal() <= version.ordinal(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/enums/CustomEntityType.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.enums; 2 | 3 | public enum CustomEntityType { 4 | 5 | FAKE_ARROW, 6 | FAKE_PLAYER, 7 | ITEM_PROJECTILE 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/AdvancementHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import com.denizenscript.denizen.nms.util.Advancement; 4 | import com.denizenscript.denizen.utilities.Utilities; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.entity.Player; 7 | 8 | public abstract class AdvancementHelper { 9 | 10 | public static org.bukkit.advancement.Advancement getAdvancement(String name) { 11 | return Bukkit.getAdvancement(Utilities.parseNamespacedKey(name)); 12 | } 13 | 14 | public abstract void register(Advancement advancement); 15 | 16 | public abstract void unregister(Advancement advancement); 17 | 18 | public void grantPartial(Advancement advancement, Player player, int len) { 19 | throw new UnsupportedOperationException(); 20 | } 21 | 22 | public abstract void grant(Advancement advancement, Player player); 23 | 24 | public abstract void revoke(Advancement advancement, Player player); 25 | 26 | public abstract void update(Player player); 27 | } 28 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ChunkHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import com.denizenscript.denizen.nms.abstracts.BiomeNMS; 4 | import org.bukkit.Chunk; 5 | import org.bukkit.World; 6 | 7 | public interface ChunkHelper { 8 | 9 | default void refreshChunkSections(Chunk chunk) { 10 | throw new UnsupportedOperationException(); 11 | } 12 | 13 | int[] getHeightMap(Chunk chunk); 14 | 15 | default void changeChunkServerThread(World world) { 16 | // Do nothing by default. 17 | } 18 | 19 | default void restoreServerThread(World world) { 20 | // Do nothing by default. 21 | } 22 | 23 | default void setAllBiomes(Chunk chunk, BiomeNMS biome) { 24 | throw new UnsupportedOperationException(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/CustomEntity.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.entity.Entity; 4 | 5 | public interface CustomEntity extends Entity { 6 | 7 | String getEntityTypeName(); 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/CustomEntityHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.Location; 4 | import org.bukkit.inventory.ItemStack; 5 | 6 | public interface CustomEntityHelper { 7 | 8 | FakeArrow spawnFakeArrow(Location location); 9 | 10 | ItemProjectile spawnItemProjectile(Location location, ItemStack itemStack); 11 | 12 | FakePlayer spawnFakePlayer(Location location, String name, String skin, String blob, boolean doAdd); 13 | } 14 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityAnimation.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.entity.Entity; 4 | 5 | public interface EntityAnimation { 6 | 7 | void play(Entity entity); 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FakeArrow.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.entity.Vehicle; 4 | 5 | public interface FakeArrow extends CustomEntity, Vehicle { 6 | } 7 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FakePlayer.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface FakePlayer extends CustomEntity, Player { 6 | 7 | String getFullName(); 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FishingHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.Location; 4 | import org.bukkit.entity.FishHook; 5 | import org.bukkit.entity.Player; 6 | import org.bukkit.inventory.ItemStack; 7 | 8 | public interface FishingHelper { 9 | 10 | enum CatchType {NONE, DEFAULT, JUNK, TREASURE, FISH} 11 | 12 | ItemStack getResult(FishHook fishHook, CatchType catchType); 13 | 14 | FishHook spawnHook(Location location, Player player); 15 | 16 | FishHook getHookFrom(Player player); 17 | 18 | void setNibble(FishHook hook, int ticks); 19 | 20 | void setHookTime(FishHook hook, int ticks); 21 | 22 | int getLureTime(FishHook hook); 23 | 24 | void setLureTime(FishHook hook, int ticks); 25 | } 26 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/ItemProjectile.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import org.bukkit.entity.Item; 4 | import org.bukkit.entity.Projectile; 5 | 6 | public interface ItemProjectile extends CustomEntity, Item, Projectile { 7 | } 8 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/WorldHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces; 2 | 3 | import com.denizenscript.denizen.objects.BiomeTag; 4 | import org.bukkit.Location; 5 | import org.bukkit.World; 6 | 7 | public interface WorldHelper { 8 | 9 | boolean isStatic(World world); 10 | 11 | void setStatic(World world, boolean isStatic); 12 | 13 | float getLocalDifficulty(Location location); 14 | 15 | default Location getNearestBiomeLocation(Location start, BiomeTag biome) { 16 | throw new UnsupportedOperationException(); 17 | } 18 | 19 | boolean areEnoughSleeping(World world, int percentage); 20 | 21 | boolean areEnoughDeepSleeping(World world, int percentage); 22 | 23 | int getSkyDarken(World world); 24 | 25 | boolean isDay(World world); 26 | 27 | boolean isNight(World world); 28 | 29 | /** for setting the time without firing a CUSTOM TimeSkipEvent */ 30 | void setDayTime(World world, long time); 31 | 32 | void wakeUpAllPlayers(World world); 33 | 34 | /** for clearing weather without ignoring possible raised event results */ 35 | void clearWeather(World world); 36 | 37 | default void setGameTime(World world, long time) { 38 | throw new UnsupportedOperationException(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketInResourcePackStatus.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | public interface PacketInResourcePackStatus { 4 | 5 | String getStatus(); 6 | } 7 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketInSteerVehicle.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | public interface PacketInSteerVehicle { 4 | 5 | float getLeftwardInput(); 6 | 7 | float getForwardInput(); 8 | 9 | boolean getJumpInput(); 10 | 11 | boolean getDismountInput(); 12 | } 13 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutChat.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | import java.util.function.Function; 4 | 5 | public abstract class PacketOutChat { 6 | 7 | public abstract boolean isSystem(); 8 | 9 | public abstract boolean isActionbar(); 10 | 11 | public abstract String getMessage(); 12 | 13 | public abstract String getRawJson(); 14 | 15 | // TODO: once 1.20 is the minimum supported version, remove this 16 | public static Function convertComponentToJsonString; 17 | } 18 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutSetSlot.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | import org.bukkit.inventory.ItemStack; 4 | 5 | public interface PacketOutSetSlot { 6 | 7 | ItemStack getItemStack(); 8 | 9 | void setItemStack(ItemStack itemStack); 10 | } 11 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutSpawnEntity.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | public interface PacketOutSpawnEntity { 4 | 5 | int getEntityId(); 6 | } 7 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutTradeList.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | import com.denizenscript.denizen.nms.util.TradeOffer; 4 | 5 | import java.util.List; 6 | 7 | public interface PacketOutTradeList { 8 | 9 | List getTradeOffers(); 10 | 11 | void setTradeOffers(List tradeOffers); 12 | } 13 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/packets/PacketOutWindowItems.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.interfaces.packets; 2 | 3 | import org.bukkit.inventory.ItemStack; 4 | 5 | public interface PacketOutWindowItems { 6 | 7 | ItemStack[] getContents(); 8 | 9 | void setContents(ItemStack[] contents); 10 | } 11 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/Advancement.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.util; 2 | 3 | import org.bukkit.NamespacedKey; 4 | import org.bukkit.inventory.ItemStack; 5 | 6 | public class Advancement { 7 | 8 | public enum Frame {TASK, CHALLENGE, GOAL} 9 | 10 | public boolean temporary; 11 | public NamespacedKey key; 12 | public NamespacedKey parent; 13 | public ItemStack icon; 14 | public String title; 15 | public String description; 16 | public NamespacedKey background; 17 | public Frame frame; 18 | public boolean toast; 19 | public boolean announceToChat; 20 | public boolean hidden; 21 | 22 | public float xOffset; 23 | public float yOffset; 24 | 25 | public int length; 26 | 27 | public boolean registered; 28 | 29 | public Advancement(boolean temporary, NamespacedKey key, NamespacedKey parent, ItemStack icon, 30 | String title, String description, NamespacedKey background, Frame frame, 31 | boolean toast, boolean announceToChat, boolean hidden, float xOffset, float yOffset, int length) { 32 | this.temporary = temporary; 33 | this.key = key; 34 | this.parent = parent; 35 | this.icon = icon; 36 | this.title = title; 37 | this.description = description; 38 | this.background = background; 39 | this.frame = frame; 40 | this.toast = toast; 41 | this.announceToChat = announceToChat; 42 | this.hidden = hidden; 43 | this.xOffset = xOffset; 44 | this.yOffset = yOffset; 45 | this.length = length; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/PlayerProfile.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.util; 2 | 3 | import java.util.UUID; 4 | 5 | public class PlayerProfile { 6 | 7 | private String name; 8 | private UUID uuid; 9 | private String texture; 10 | private String textureSignature; 11 | 12 | public PlayerProfile(String name, UUID uuid) { 13 | this(name, uuid, null, null); 14 | } 15 | 16 | public PlayerProfile(String name, UUID uuid, String texture) { 17 | this(name, uuid, texture, null); 18 | } 19 | 20 | public PlayerProfile(String name, UUID uuid, String texture, String textureSignature) { 21 | this.name = name; 22 | this.uuid = uuid; 23 | this.texture = texture; 24 | this.textureSignature = textureSignature; 25 | } 26 | 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setName(String name) { 32 | this.name = name; 33 | } 34 | 35 | public UUID getUniqueId() { 36 | return uuid; 37 | } 38 | 39 | public void setUniqueId(UUID uuid) { 40 | this.uuid = uuid; 41 | } 42 | 43 | public String getTexture() { 44 | return texture; 45 | } 46 | 47 | public void setTexture(String texture) { 48 | this.texture = texture; 49 | } 50 | 51 | public boolean hasTexture() { 52 | return texture != null; 53 | } 54 | 55 | public String getTextureSignature() { 56 | return textureSignature; 57 | } 58 | 59 | public void setTextureSignature(String textureSignature) { 60 | this.textureSignature = textureSignature; 61 | } 62 | 63 | public boolean hasTextureSignature() { 64 | return textureSignature != null; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/ByteTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Byte} tag. 24 | */ 25 | public final class ByteTag extends Tag { 26 | 27 | private final byte value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public ByteTag(byte value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Byte getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Byte(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/DoubleTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Double} tag. 24 | */ 25 | public final class DoubleTag extends Tag { 26 | 27 | private final double value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public DoubleTag(double value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Double getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Double(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/EndTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_End} tag. 24 | */ 25 | public final class EndTag extends Tag { 26 | 27 | @Override 28 | public Object getValue() { 29 | return null; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "TAG_End"; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/FloatTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Float} tag. 24 | */ 25 | public final class FloatTag extends Tag { 26 | 27 | private final float value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public FloatTag(float value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Float getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Float(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/IntTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Int} tag. 24 | */ 25 | public final class IntTag extends Tag { 26 | 27 | private final int value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public IntTag(int value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Integer getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Int(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/LongTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Long} tag. 24 | */ 25 | public final class LongTag extends Tag { 26 | 27 | private final long value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public LongTag(long value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Long getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Long(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/ShortTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_Short} tag. 24 | */ 25 | public final class ShortTag extends Tag { 26 | 27 | private final short value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public ShortTag(short value) { 35 | super(); 36 | this.value = value; 37 | } 38 | 39 | @Override 40 | public Short getValue() { 41 | return value; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "TAG_Short(" + value + ")"; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/StringTag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * The {@code TAG_String} tag. 24 | */ 25 | public final class StringTag extends Tag { 26 | 27 | private final String value; 28 | 29 | /** 30 | * Creates the tag with an empty name. 31 | * 32 | * @param value the value of the tag 33 | */ 34 | public StringTag(String value) { 35 | super(); 36 | checkNotNull(value); 37 | this.value = value; 38 | } 39 | 40 | @Override 41 | public String getValue() { 42 | return value; 43 | } 44 | 45 | @Override 46 | public String toString() { 47 | return "TAG_String(" + value + ")"; 48 | } 49 | 50 | private static void checkNotNull(Object object) { 51 | if (object == null) { 52 | throw new NullPointerException(); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/nms/util/jnbt/Tag.java: -------------------------------------------------------------------------------- 1 | /* 2 | * WorldEdit, a Minecraft world manipulation toolkit 3 | * Copyright (C) sk89q 4 | * Copyright (C) WorldEdit team and contributors 5 | * 6 | * This program is free software: you can redistribute it and/or modify it 7 | * under the terms of the GNU Lesser General Public License as published by the 8 | * Free Software Foundation, either version 3 of the License, or 9 | * (at your option) any later version. 10 | * 11 | * This program is distributed in the hope that it will be useful, but WITHOUT 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 14 | * for more details. 15 | * 16 | * You should have received a copy of the GNU Lesser General Public License 17 | * along with this program. If not, see . 18 | */ 19 | 20 | package com.denizenscript.denizen.nms.util.jnbt; 21 | 22 | /** 23 | * Represents a NBT tag. 24 | */ 25 | public abstract class Tag { 26 | 27 | /** 28 | * Gets the value of this tag. 29 | * 30 | * @return the value 31 | */ 32 | public abstract Object getValue(); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/npc/speech/DenizenSpeechContext.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.npc.speech; 2 | 3 | import com.denizenscript.denizencore.scripts.ScriptEntry; 4 | import net.citizensnpcs.api.ai.speech.SpeechContext; 5 | 6 | public class DenizenSpeechContext extends SpeechContext { 7 | 8 | private final ScriptEntry scriptEntry; 9 | private final double chatRange; 10 | 11 | public DenizenSpeechContext(String message, ScriptEntry scriptEntry, double chatRange) { 12 | super(message); 13 | this.scriptEntry = scriptEntry; 14 | this.chatRange = chatRange; 15 | } 16 | 17 | public ScriptEntry getScriptEntry() { 18 | return scriptEntry; 19 | } 20 | 21 | public boolean isBystandersEnabled() { 22 | return chatRange >= 0; 23 | } 24 | 25 | public double getChatRange() { 26 | return chatRange; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/npc/traits/SneakingTrait.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.npc.traits; 2 | 3 | import com.denizenscript.denizen.nms.NMSHandler; 4 | import com.denizenscript.denizen.objects.NPCTag; 5 | import net.citizensnpcs.api.persistence.Persist; 6 | import net.citizensnpcs.api.trait.Trait; 7 | import org.bukkit.entity.EntityType; 8 | import org.bukkit.event.Listener; 9 | 10 | public class SneakingTrait extends Trait implements Listener { 11 | 12 | @Persist("sneaking") 13 | private boolean sneaking = false; 14 | 15 | @Override 16 | public void onSpawn() { 17 | if (sneaking) { 18 | sneak(); 19 | } 20 | } 21 | 22 | // <--[action] 23 | // @Actions 24 | // sneak 25 | // 26 | // @Triggers when the NPC starts sneaking. 27 | // 28 | // @Context 29 | // None 30 | // 31 | // --> 32 | 33 | /** 34 | * Makes the NPC sneak 35 | */ 36 | public void sneak() { 37 | new NPCTag(npc).action("sneak", null); 38 | if (npc.getEntity().getType() != EntityType.PLAYER) { 39 | return; 40 | } 41 | NMSHandler.entityHelper.setSneaking(npc.getEntity(), true); 42 | sneaking = true; 43 | } 44 | 45 | /** 46 | * Makes the NPC stand 47 | */ 48 | public void stand() { 49 | // Notated in SittingTrait 50 | new NPCTag(npc).action("stand", null); 51 | NMSHandler.entityHelper.setSneaking(npc.getEntity(), false); 52 | sneaking = false; 53 | } 54 | 55 | /** 56 | * Checks if the NPC is currently sneaking 57 | * 58 | * @return boolean 59 | */ 60 | public boolean isSneaking() { 61 | return sneaking; 62 | } 63 | 64 | public SneakingTrait() { 65 | super("sneaking"); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/EntityFormObject.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects; 2 | 3 | import com.denizenscript.denizencore.objects.ObjectTag; 4 | 5 | public interface EntityFormObject extends ObjectTag { 6 | 7 | EntityTag getDenizenEntity(); 8 | 9 | default LocationTag getLocation() { 10 | return getDenizenEntity().getLocation(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityAI.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class EntityAI extends EntityProperty { 8 | 9 | // <--[property] 10 | // @object EntityTag 11 | // @name has_ai 12 | // @input ElementTag(Boolean) 13 | // @description 14 | // Controls whether this entity will use the default Minecraft AI to roam and look around. 15 | // This tends to have implications for other vanilla functionality, including gravity. 16 | // This generally shouldn't be used with NPCs. NPCs do not have vanilla AI, regardless of what this tag returns. 17 | // Other programmatic methods of blocking AI might also not be accounted for by this tag. 18 | // --> 19 | 20 | public static boolean describes(EntityTag entity) { 21 | return entity.isLivingEntityType(); 22 | } 23 | 24 | @Override 25 | public ElementTag getPropertyValue() { 26 | return new ElementTag(getLivingEntity().hasAI()); 27 | } 28 | 29 | @Override 30 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 31 | if (mechanism.requireBoolean()) { 32 | getLivingEntity().setAI(param.asBoolean()); 33 | } 34 | } 35 | 36 | @Override 37 | public String getPropertyId() { 38 | return "has_ai"; 39 | } 40 | 41 | public static void register() { 42 | autoRegister("has_ai", EntityAI.class, ElementTag.class, false, "toggle_ai"); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityAggressive.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.nms.NMSHandler; 4 | import com.denizenscript.denizen.objects.EntityTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ElementTag; 7 | import org.bukkit.entity.Mob; 8 | 9 | public class EntityAggressive extends EntityProperty { 10 | 11 | // <--[property] 12 | // @object EntityTag 13 | // @name aggressive 14 | // @input ElementTag(Boolean) 15 | // @description 16 | // Controls whether the entity is currently aggressive. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Mob; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(NMSHandler.entityHelper.isAggressive(as(Mob.class))); 26 | } 27 | 28 | @Override 29 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 30 | if (mechanism.requireBoolean()) { 31 | NMSHandler.entityHelper.setAggressive(as(Mob.class), param.asBoolean()); 32 | } 33 | } 34 | 35 | @Override 36 | public String getPropertyId() { 37 | return "aggressive"; 38 | } 39 | 40 | public static void register() { 41 | autoRegister("aggressive", EntityAggressive.class, ElementTag.class, false); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityArms.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.core.ElementTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import org.bukkit.entity.ArmorStand; 7 | 8 | public class EntityArms extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name arms 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether an armor stand has arms. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof ArmorStand; 20 | } 21 | 22 | @Override 23 | public boolean isDefaultValue(ElementTag val) { 24 | return !val.asBoolean(); 25 | } 26 | 27 | @Override 28 | public ElementTag getPropertyValue() { 29 | return new ElementTag(as(ArmorStand.class).hasArms()); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(ArmorStand.class).setArms(param.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "arms"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("arms", EntityArms.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityArrowDamage.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.AbstractArrow; 7 | 8 | public class EntityArrowDamage extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name damage 13 | // @input ElementTag(Decimal) 14 | // @description 15 | // The amount of damage an arrow/trident will inflict. 16 | // Note that the actual damage dealt by the arrow/trident may be different depending on the projectile's flight speed. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof AbstractArrow; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(AbstractArrow.class).getDamage()); 26 | } 27 | 28 | @Override 29 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 30 | if (mechanism.requireDouble()) { 31 | as(AbstractArrow.class).setDamage(value.asDouble()); 32 | } 33 | } 34 | 35 | @Override 36 | public String getPropertyId() { 37 | return "damage"; 38 | } 39 | 40 | public static void register() { 41 | autoRegister("damage", EntityArrowDamage.class, ElementTag.class, false); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityArrowPierceLevel.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.AbstractArrow; 7 | 8 | public class EntityArrowPierceLevel extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name pierce_level 13 | // @input ElementTag(Number) 14 | // @description 15 | // The number of entities an arrow will pierce through while flying. Must be between 0 and 127. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof AbstractArrow; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(AbstractArrow.class).getPierceLevel()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 29 | if (mechanism.requireInteger()) { 30 | as(AbstractArrow.class).setPierceLevel(value.asInt()); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "pierce_level"; 37 | } 38 | 39 | public static void register() { 40 | autoRegister("pierce_level", EntityArrowPierceLevel.class, ElementTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityAwake.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Bat; 7 | 8 | public class EntityAwake extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name awake 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a bat is flying (awake/true) or hanging (asleep/false). 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Bat; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(Bat.class).isAwake()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 29 | if (mechanism.requireBoolean()) { 30 | as(Bat.class).setAwake(param.asBoolean()); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "awake"; 37 | } 38 | 39 | public static void register() { 40 | autoRegister("awake", EntityAwake.class, ElementTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityBasePlate.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.core.ElementTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import org.bukkit.entity.ArmorStand; 7 | 8 | public class EntityBasePlate extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name base_plate 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether an armor stand has a base plate. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof ArmorStand; 20 | } 21 | 22 | @Override 23 | public boolean isDefaultValue(ElementTag val) { 24 | return val.asBoolean(); 25 | } 26 | 27 | @Override 28 | public ElementTag getPropertyValue() { 29 | return new ElementTag(as(ArmorStand.class).hasBasePlate()); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(ArmorStand.class).setBasePlate(param.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "base_plate"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("base_plate", EntityBasePlate.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanBreakDoors.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Zombie; 7 | 8 | public class EntityCanBreakDoors extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name can_break_doors 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Whether a zombie can break doors. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Zombie; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(Zombie.class).canBreakDoors()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 29 | if (mechanism.requireBoolean()) { 30 | as(Zombie.class).setCanBreakDoors(param.asBoolean()); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "can_break_doors"; 37 | } 38 | 39 | public static void register() { 40 | autoRegister("can_break_doors", EntityCanBreakDoors.class, ElementTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanJoinRaid.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Raider; 7 | 8 | public class EntityCanJoinRaid extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name can_join_raid 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a raider mob (like a pillager), is allowed to join active raids. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Raider; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(Raider.class).isCanJoinRaid()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 29 | if (mechanism.requireBoolean()) { 30 | as(Raider.class).setCanJoinRaid(param.asBoolean()); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "can_join_raid"; 37 | } 38 | 39 | public static void register() { 40 | autoRegister("can_join_raid", EntityCanJoinRaid.class, ElementTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCannotEnterHive.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.DurationTag; 6 | import org.bukkit.entity.Bee; 7 | 8 | public class EntityCannotEnterHive extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name cannot_enter_hive 13 | // @input DurationTag 14 | // @description 15 | // Controls the minimum duration until a Bee is able to enter a hive. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Bee; 20 | } 21 | 22 | @Override 23 | public DurationTag getPropertyValue() { 24 | return new DurationTag((long) as(Bee.class).getCannotEnterHiveTicks()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(DurationTag param, Mechanism mechanism) { 29 | as(Bee.class).setCannotEnterHiveTicks(param.getTicksAsInt()); 30 | } 31 | 32 | @Override 33 | public String getPropertyId() { 34 | return "cannot_enter_hive"; 35 | } 36 | 37 | public static void register() { 38 | autoRegister("cannot_enter_hive", EntityCannotEnterHive.class, DurationTag.class, false); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityChestCarrier.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.core.ElementTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import org.bukkit.entity.ChestedHorse; 7 | 8 | public class EntityChestCarrier extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name carries_chest 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a horse-like entity is carrying a chest. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof ChestedHorse; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(ChestedHorse.class).isCarryingChest()); 25 | } 26 | 27 | @Override 28 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 29 | if (mechanism.requireBoolean()) { 30 | as(ChestedHorse.class).setCarryingChest(param.asBoolean()); 31 | } 32 | } 33 | 34 | @Override 35 | public String getPropertyId() { 36 | return "carries_chest"; 37 | } 38 | 39 | public static void register() { 40 | autoRegister("carries_chest", EntityChestCarrier.class, ElementTag.class, false); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDefaultBackground.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.TextDisplay; 7 | 8 | public class EntityDefaultBackground extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name default_background 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Whether a text display entity's background is default (same as the chat window), or custom set (see <@link property EntityTag.background_color>). 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof TextDisplay; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(TextDisplay.class).isDefaultBackground()); 25 | } 26 | 27 | @Override 28 | public boolean isDefaultValue(ElementTag value) { 29 | return !value.asBoolean(); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(TextDisplay.class).setDefaultBackground(value.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "default_background"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("default_background", EntityDefaultBackground.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityDropsItem.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.EnderSignal; 7 | 8 | public class EntityDropsItem extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name drops_item 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Whether an eye of ender drops an item when breaking or shatters. 16 | // See <@link property EntityTag.item> for controlling an eye's item. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof EnderSignal; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(EnderSignal.class).getDropItem()); 26 | } 27 | 28 | @Override 29 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 30 | if (mechanism.requireBoolean()) { 31 | as(EnderSignal.class).setDropItem(value.asBoolean()); 32 | } 33 | } 34 | 35 | @Override 36 | public String getPropertyId() { 37 | return "drops_item"; 38 | } 39 | 40 | public static void register() { 41 | autoRegister("drops_item", EntityDropsItem.class, ElementTag.class, false); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityExploredLocations.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.objects.LocationTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ListTag; 7 | import org.bukkit.entity.Sniffer; 8 | 9 | public class EntityExploredLocations extends EntityProperty { 10 | 11 | // <--[property] 12 | // @object EntityTag 13 | // @name explored_locations 14 | // @input ListTag(LocationTag) 15 | // @description 16 | // Controls a sniffer's explored locations. 17 | // @mechanism 18 | // Note that if the sniffer is not in the same world as the input LocationTag(s), then the LocationTag(s) will not be added to the list of explored locations. 19 | // --> 20 | 21 | public static boolean describes(EntityTag entity) { 22 | return entity.getBukkitEntity() instanceof Sniffer; 23 | } 24 | 25 | @Override 26 | public ListTag getPropertyValue() { 27 | return new ListTag(as(Sniffer.class).getExploredLocations(), LocationTag::new); 28 | } 29 | 30 | @Override 31 | public void setPropertyValue(ListTag param, Mechanism mechanism) { 32 | as(Sniffer.class).getExploredLocations().forEach(as(Sniffer.class)::removeExploredLocation); 33 | param.filter(LocationTag.class, mechanism.context).forEach(as(Sniffer.class)::addExploredLocation); 34 | } 35 | 36 | @Override 37 | public String getPropertyId() { 38 | return "explored_locations"; 39 | } 40 | 41 | public static void register() { 42 | autoRegister("explored_locations", EntityExploredLocations.class, ListTag.class, false); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityGlowColor.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.objects.properties.bukkit.BukkitColorExtensions; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ColorTag; 7 | import org.bukkit.Color; 8 | import org.bukkit.entity.Display; 9 | 10 | public class EntityGlowColor extends EntityProperty { 11 | 12 | // <--[property] 13 | // @object EntityTag 14 | // @name glow_color 15 | // @input ColorTag 16 | // @description 17 | // A display entity's glow color override, if any. 18 | // For the mechanism: provide no input to remove the override. 19 | // --> 20 | 21 | public static boolean describes(EntityTag entity) { 22 | return entity.getBukkitEntity() instanceof Display; 23 | } 24 | 25 | @Override 26 | public ColorTag getPropertyValue() { 27 | Color glowColorOverride = as(Display.class).getGlowColorOverride(); 28 | return glowColorOverride != null ? BukkitColorExtensions.fromColor(glowColorOverride) : null; 29 | } 30 | 31 | @Override 32 | public void setPropertyValue(ColorTag value, Mechanism mechanism) { 33 | as(Display.class).setGlowColorOverride(value != null ? BukkitColorExtensions.getColor(value) : null); 34 | } 35 | 36 | @Override 37 | public String getPropertyId() { 38 | return "glow_color"; 39 | } 40 | 41 | public static void register() { 42 | autoRegisterNullable("glow_color", EntityGlowColor.class, ColorTag.class, false); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityInterpolationDuration.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.DurationTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityInterpolationDuration extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name interpolation_duration 13 | // @input DurationTag 14 | // @description 15 | // The duration a display entity will spend interpolating between interpolated value(s). 16 | // See also <@link language Display entity interpolation>. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Display; 21 | } 22 | 23 | @Override 24 | public DurationTag getPropertyValue() { 25 | return new DurationTag((long) as(Display.class).getInterpolationDuration()); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(DurationTag value) { 30 | return value.getTicksAsInt() == 0; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(DurationTag value, Mechanism mechanism) { 35 | as(Display.class).setInterpolationDuration(value.getTicksAsInt()); 36 | } 37 | 38 | @Override 39 | public String getPropertyId() { 40 | return "interpolation_duration"; 41 | } 42 | 43 | public static void register() { 44 | autoRegister("interpolation_duration", EntityInterpolationDuration.class, DurationTag.class, false); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityLineWidth.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.TextDisplay; 7 | 8 | public class EntityLineWidth extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name line_width 13 | // @input ElementTag(Number) 14 | // @description 15 | // A text display entity's line width, used to split lines (note that newlines can still be added as normal). 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof TextDisplay; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(TextDisplay.class).getLineWidth()); 25 | } 26 | 27 | @Override 28 | public boolean isDefaultValue(ElementTag value) { 29 | return value.asInt() == 200; 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 34 | if (mechanism.requireInteger()) { 35 | as(TextDisplay.class).setLineWidth(value.asInt()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "line_width"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("line_width", EntityLineWidth.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityOnBack.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Panda; 7 | 8 | public class EntityOnBack extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name on_back 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a panda is on its back. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Panda; 20 | } 21 | 22 | @Override 23 | public boolean isDefaultValue(ElementTag val) { 24 | return !val.asBoolean(); 25 | } 26 | 27 | @Override 28 | public ElementTag getPropertyValue() { 29 | return new ElementTag(as(Panda.class).isOnBack()); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(Panda.class).setOnBack(param.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "on_back"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("on_back", EntityOnBack.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPivot.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityPivot extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name pivot 13 | // @input ElementTag 14 | // @synonyms EntityTag.billboard 15 | // @description 16 | // A display entity's pivot point/axes, can be any of <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Display.Billboard.html>. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Display; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(Display.class).getBillboard()); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(ElementTag value) { 30 | return value.asEnum(Display.Billboard.class) == Display.Billboard.FIXED; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 35 | if (mechanism.requireEnum(Display.Billboard.class)) { 36 | as(Display.class).setBillboard(value.asEnum(Display.Billboard.class)); 37 | } 38 | } 39 | 40 | @Override 41 | public String getPropertyId() { 42 | return "pivot"; 43 | } 44 | 45 | public static void register() { 46 | autoRegister("pivot", EntityPivot.class, ElementTag.class, false); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityProperty.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.ObjectTag; 5 | import com.denizenscript.denizencore.objects.properties.ObjectProperty; 6 | import org.bukkit.entity.Entity; 7 | import org.bukkit.entity.EntityType; 8 | import org.bukkit.entity.LivingEntity; 9 | 10 | public abstract class EntityProperty extends ObjectProperty { 11 | 12 | public EntityProperty() { 13 | } 14 | 15 | public EntityProperty(EntityTag entity) { 16 | object = entity; 17 | } 18 | 19 | public Entity getEntity() { 20 | return object.getBukkitEntity(); 21 | } 22 | 23 | public LivingEntity getLivingEntity() { 24 | return object.getLivingEntity(); 25 | } 26 | 27 | public EntityType getType() { 28 | return object.getBukkitEntityType(); 29 | } 30 | 31 | public T as(Class entityClass) { 32 | return (T) getEntity(); 33 | } 34 | 35 | public static String getReasonNotDescribed(EntityTag entity) { 36 | if (entity.getUUID() == null) { 37 | return "generic entity-types cannot match any properties, you must spawn an entity to interact with its properties directly."; 38 | } 39 | else if (!entity.isSpawnedOrValidForTag()) { 40 | return "that entity is not spawned."; 41 | } 42 | return "unspecified reason - are you sure this property applies to that EntityType?"; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityRolling.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Panda; 7 | 8 | public class EntityRolling extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name rolling 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a panda is rolling on the ground. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Panda; 20 | } 21 | 22 | @Override 23 | public boolean isDefaultValue(ElementTag val) { 24 | return !val.asBoolean(); 25 | } 26 | 27 | @Override 28 | public ElementTag getPropertyValue() { 29 | return new ElementTag(as(Panda.class).isRolling()); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(Panda.class).setRolling(param.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "rolling"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("rolling", EntityRolling.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySeeThrough.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.TextDisplay; 7 | 8 | public class EntitySeeThrough extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name see_through 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Whether a text display entity can be seen through blocks. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof TextDisplay; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(TextDisplay.class).isSeeThrough()); 25 | } 26 | 27 | @Override 28 | public boolean isDefaultValue(ElementTag value) { 29 | return !value.asBoolean(); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(TextDisplay.class).setSeeThrough(value.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "see_through"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("see_through", EntitySeeThrough.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShadowRadius.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityShadowRadius extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name shadow_radius 13 | // @input ElementTag(Decimal) 14 | // @description 15 | // The radius of a display entity's shadow. 16 | // Can be interpolated, see <@link language Display entity interpolation>. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Display; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(Display.class).getShadowRadius()); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(ElementTag value) { 30 | return value.asFloat() == 0f; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 35 | if (mechanism.requireFloat()) { 36 | as(Display.class).setShadowRadius(value.asFloat()); 37 | } 38 | } 39 | 40 | @Override 41 | public String getPropertyId() { 42 | return "shadow_radius"; 43 | } 44 | 45 | public static void register() { 46 | autoRegister("shadow_radius", EntityShadowRadius.class, ElementTag.class, false); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityShadowStrength.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityShadowStrength extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name shadow_strength 13 | // @input ElementTag(Decimal) 14 | // @description 15 | // The strength of a display entity's shadow. 16 | // Note that the final opacity will change based on the entity's distance to the block the shadow is on. 17 | // Can be interpolated, see <@link language Display entity interpolation>. 18 | // --> 19 | 20 | public static boolean describes(EntityTag entity) { 21 | return entity.getBukkitEntity() instanceof Display; 22 | } 23 | 24 | @Override 25 | public ElementTag getPropertyValue() { 26 | return new ElementTag(as(Display.class).getShadowStrength()); 27 | } 28 | 29 | @Override 30 | public boolean isDefaultValue(ElementTag value) { 31 | return value.asFloat() == 1f; 32 | } 33 | 34 | @Override 35 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 36 | if (mechanism.requireFloat()) { 37 | as(Display.class).setShadowStrength(value.asFloat()); 38 | } 39 | } 40 | 41 | @Override 42 | public String getPropertyId() { 43 | return "shadow_strength"; 44 | } 45 | 46 | public static void register() { 47 | autoRegister("shadow_strength", EntityShadowStrength.class, ElementTag.class, false); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntitySneezing.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Panda; 7 | 8 | public class EntitySneezing extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name sneezing 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Controls whether a panda is sneezing. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof Panda; 20 | } 21 | 22 | @Override 23 | public boolean isDefaultValue(ElementTag val) { 24 | return !val.asBoolean(); 25 | } 26 | 27 | @Override 28 | public ElementTag getPropertyValue() { 29 | return new ElementTag(as(Panda.class).isSneezing()); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag param, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(Panda.class).setSneezing(param.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "sneezing"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("sneezing", EntitySneezing.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTeleportDuration.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.DurationTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityTeleportDuration extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name teleport_duration 13 | // @input DurationTag 14 | // @description 15 | // The duration a display entity will spend teleporting between positions. 16 | // See also <@link language Display entity interpolation>. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Display; 21 | } 22 | 23 | @Override 24 | public DurationTag getPropertyValue() { 25 | return new DurationTag((long) as(Display.class).getTeleportDuration()); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(DurationTag value) { 30 | return value.getTicksAsInt() == 0; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(DurationTag value, Mechanism mechanism) { 35 | as(Display.class).setTeleportDuration(value.getTicksAsInt()); 36 | } 37 | 38 | @Override 39 | public String getPropertyId() { 40 | return "teleport_duration"; 41 | } 42 | 43 | public static void register() { 44 | autoRegister("teleport_duration", EntityTeleportDuration.class, DurationTag.class, false); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityText.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.utilities.PaperAPITools; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | import com.denizenscript.denizencore.objects.core.ElementTag; 7 | import org.bukkit.entity.TextDisplay; 8 | 9 | public class EntityText extends EntityProperty { 10 | 11 | // <--[property] 12 | // @object EntityTag 13 | // @name text 14 | // @input ElementTag 15 | // @description 16 | // A text display entity's text, supports new lines. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof TextDisplay; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(PaperAPITools.instance.getText(as(TextDisplay.class)), true); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(ElementTag value) { 30 | return value.asString().isEmpty(); 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 35 | PaperAPITools.instance.setText(as(TextDisplay.class), value.asString()); 36 | } 37 | 38 | @Override 39 | public String getPropertyId() { 40 | return "text"; 41 | } 42 | 43 | public static void register() { 44 | autoRegister("text", EntityText.class, ElementTag.class, false); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityTextShadowed.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.TextDisplay; 7 | 8 | public class EntityTextShadowed extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name text_shadowed 13 | // @input ElementTag(Boolean) 14 | // @description 15 | // Whether a text display entity's text has a shadow. 16 | // --> 17 | 18 | public static boolean describes(EntityTag entity) { 19 | return entity.getBukkitEntity() instanceof TextDisplay; 20 | } 21 | 22 | @Override 23 | public ElementTag getPropertyValue() { 24 | return new ElementTag(as(TextDisplay.class).isShadowed()); 25 | } 26 | 27 | @Override 28 | public boolean isDefaultValue(ElementTag value) { 29 | return !value.asBoolean(); 30 | } 31 | 32 | @Override 33 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 34 | if (mechanism.requireBoolean()) { 35 | as(TextDisplay.class).setShadowed(value.asBoolean()); 36 | } 37 | } 38 | 39 | @Override 40 | public String getPropertyId() { 41 | return "text_shadowed"; 42 | } 43 | 44 | public static void register() { 45 | autoRegister("text_shadowed", EntityTextShadowed.class, ElementTag.class, false); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityViewRange.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.entity.Display; 7 | 8 | public class EntityViewRange extends EntityProperty { 9 | 10 | // <--[property] 11 | // @object EntityTag 12 | // @name view_range 13 | // @input ElementTag(Decimal) 14 | // @description 15 | // A display entity's view range, how far away from a player will it still be visible to them. 16 | // Note that the final value used depends on client settings such as entity distance scaling, and is multiplied by 64 client-side. 17 | // --> 18 | 19 | public static boolean describes(EntityTag entity) { 20 | return entity.getBukkitEntity() instanceof Display; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(Display.class).getViewRange()); 26 | } 27 | 28 | @Override 29 | public boolean isDefaultValue(ElementTag value) { 30 | return value.asFloat() == 1f; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 35 | if (mechanism.requireFloat()) { 36 | as(Display.class).setViewRange(value.asFloat()); 37 | } 38 | } 39 | 40 | @Override 41 | public String getPropertyId() { 42 | return "view_range"; 43 | } 44 | 45 | public static void register() { 46 | autoRegister("view_range", EntityViewRange.class, ElementTag.class, false); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityVisualFire.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class EntityVisualFire extends EntityProperty { 8 | 9 | // <--[property] 10 | // @object EntityTag 11 | // @name visual_fire 12 | // @input ElementTag(Boolean) 13 | // @description 14 | // Whether an entity has a fake fire effect. For actual fire, see <@link command burn> and <@link tag EntityTag.on_fire>. 15 | // --> 16 | 17 | public static boolean describes(EntityTag entity) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getEntity().isVisualFire()); 24 | } 25 | 26 | @Override 27 | public boolean isDefaultValue(ElementTag value) { 28 | return !value.asBoolean(); 29 | } 30 | 31 | @Override 32 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 33 | if (mechanism.requireBoolean()) { 34 | getEntity().setVisualFire(value.asBoolean()); 35 | } 36 | } 37 | 38 | @Override 39 | public String getPropertyId() { 40 | return "visual_fire"; 41 | } 42 | 43 | public static void register() { 44 | autoRegister("visual_fire", EntityVisualFire.class, ElementTag.class, false); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/inventory/InventoryUniquifier.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.inventory; 2 | 3 | import com.denizenscript.denizen.objects.InventoryTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import com.denizenscript.denizencore.objects.properties.ObjectProperty; 7 | 8 | public class InventoryUniquifier extends ObjectProperty { 9 | 10 | public static boolean describes(InventoryTag inventory) { 11 | return inventory.isGeneric(); 12 | } 13 | 14 | @Override 15 | public ElementTag getPropertyValue() { 16 | if (object.uniquifier == null || object.isSaving) { 17 | return null; 18 | } 19 | return new ElementTag(object.uniquifier); 20 | } 21 | 22 | @Override 23 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 24 | throw new UnsupportedOperationException(); 25 | } 26 | 27 | @Override 28 | public String getPropertyId() { 29 | return "uniquifier"; 30 | } 31 | 32 | public static void register() { 33 | // Intentionally no tags. 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemFireworkPower.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.item; 2 | 3 | import com.denizenscript.denizen.objects.ItemTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | import org.bukkit.inventory.meta.FireworkMeta; 7 | 8 | public class ItemFireworkPower extends ItemProperty { 9 | 10 | // <--[property] 11 | // @object ItemTag 12 | // @name firework_power 13 | // @input ElementTag(Number) 14 | // @description 15 | // Controls the firework's power. 16 | // Power primarily affects how high the firework flies, with each level of power corresponding to approximately half a second of additional flight time. 17 | // --> 18 | 19 | public static boolean describes(ItemTag item) { 20 | return item.getItemMeta() instanceof FireworkMeta; 21 | } 22 | 23 | @Override 24 | public ElementTag getPropertyValue() { 25 | return new ElementTag(as(FireworkMeta.class).getPower()); 26 | } 27 | 28 | @Override 29 | public String getPropertyId() { 30 | return "firework_power"; 31 | } 32 | 33 | @Override 34 | public void setPropertyValue(ElementTag value, Mechanism mechanism) { 35 | if (mechanism.requireInteger()) { 36 | editMeta(FireworkMeta.class, fireworkMeta -> fireworkMeta.setPower(value.asInt())); 37 | } 38 | } 39 | 40 | public static void register() { 41 | autoRegister("firework_power", ItemFireworkPower.class, ElementTag.class, false); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemProperty.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.item; 2 | 3 | import com.denizenscript.denizen.objects.ItemTag; 4 | import com.denizenscript.denizen.objects.MaterialTag; 5 | import com.denizenscript.denizencore.objects.ObjectTag; 6 | import com.denizenscript.denizencore.objects.properties.ObjectProperty; 7 | import org.bukkit.Material; 8 | import org.bukkit.inventory.ItemStack; 9 | import org.bukkit.inventory.meta.ItemMeta; 10 | 11 | import java.util.function.Consumer; 12 | 13 | public abstract class ItemProperty extends ObjectProperty { 14 | 15 | public MaterialTag getMaterialTag() { 16 | return object.getMaterial(); 17 | } 18 | 19 | public Material getMaterial() { 20 | return object.getBukkitMaterial(); 21 | } 22 | 23 | public ItemStack getItemStack() { 24 | return object.getItemStack(); 25 | } 26 | 27 | public ItemMeta getItemMeta() { 28 | return object.getItemMeta(); 29 | } 30 | 31 | public void setItemStack(ItemStack item) { 32 | object.setItemStack(item); 33 | } 34 | 35 | public void setItemMeta(ItemMeta meta) { 36 | object.setItemMeta(meta); 37 | } 38 | 39 | public T as(Class metaType) { 40 | return (T) getItemMeta(); 41 | } 42 | 43 | public void editMeta(Class metaType, Consumer editor) { 44 | T meta = (T) getItemMeta(); 45 | editor.accept(meta); 46 | setItemMeta(meta); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialProperty.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.material; 2 | 3 | import com.denizenscript.denizen.objects.MaterialTag; 4 | import com.denizenscript.denizencore.objects.ObjectTag; 5 | import com.denizenscript.denizencore.objects.properties.ObjectProperty; 6 | import org.bukkit.block.data.BlockData; 7 | 8 | public abstract class MaterialProperty extends ObjectProperty { 9 | 10 | public MaterialProperty() { 11 | } 12 | 13 | public MaterialProperty(MaterialTag material) { 14 | object = material; 15 | } 16 | 17 | public BlockData getBlockData() { 18 | return object.getModernData(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeDemand.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeDemand extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name demand 12 | // @input ElementTag(Number) 13 | // @description 14 | // Controls the demand level of the trade. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getDemand()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireInteger()) { 29 | getRecipe().setDemand(mechanism.getValue().asInt()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "demand"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("demand", TradeDemand.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeHasXp.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeHasXp extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name has_xp 12 | // @input ElementTag(Boolean) 13 | // @description 14 | // Controls whether this trade will reward XP upon successful trading. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().hasExperienceReward()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireBoolean()) { 29 | getRecipe().setExperienceReward(mechanism.getValue().asBoolean()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "has_xp"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("has_xp", TradeHasXp.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeMaxUses.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeMaxUses extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name max_uses 12 | // @input ElementTag(Number) 13 | // @description 14 | // Controls the maximum amount of times that the trade can be used. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getMaxUses()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireInteger()) { 29 | getRecipe().setMaxUses(mechanism.getValue().asInt()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "max_uses"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("max_uses", TradeMaxUses.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradePriceMultiplier.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradePriceMultiplier extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name price_multiplier 12 | // @input ElementTag(Decimal) 13 | // @description 14 | // Controls the price multiplier for this trade. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getPriceMultiplier()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireFloat()) { 29 | getRecipe().setPriceMultiplier(mechanism.getValue().asFloat()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "price_multiplier"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("price_multiplier", TradePriceMultiplier.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeProperty.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.ObjectTag; 5 | import com.denizenscript.denizencore.objects.properties.ObjectProperty; 6 | import org.bukkit.inventory.MerchantRecipe; 7 | 8 | public abstract class TradeProperty extends ObjectProperty { 9 | 10 | public MerchantRecipe getRecipe() { 11 | return object.getRecipe(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeResult.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.ItemTag; 4 | import com.denizenscript.denizen.objects.TradeTag; 5 | import com.denizenscript.denizencore.objects.Mechanism; 6 | 7 | public class TradeResult extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name result 12 | // @input ItemTag 13 | // @description 14 | // Controls what the trade will give the player. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ItemTag getPropertyValue() { 23 | return new ItemTag(getRecipe().getResult()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ItemTag item, Mechanism mechanism) { 28 | object.setRecipe(TradeTag.duplicateRecipe(item.getItemStack(), getRecipe())); 29 | } 30 | 31 | @Override 32 | public String getPropertyId() { 33 | return "result"; 34 | } 35 | 36 | public static void register() { 37 | autoRegister("result", TradeResult.class, ItemTag.class, false); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeSpecialPrice.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeSpecialPrice extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name special_price 12 | // @input ElementTag(Number) 13 | // @description 14 | // Controls the special price for this trade. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getSpecialPrice()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireInteger()) { 29 | getRecipe().setSpecialPrice(mechanism.getValue().asInt()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "special_price"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("special_price", TradeSpecialPrice.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeUses.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeUses extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name uses 12 | // @input ElementTag(Number) 13 | // @description 14 | // Controls the amount of times the trade has been used. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getUses()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireInteger()) { 29 | getRecipe().setUses(mechanism.getValue().asInt()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "uses"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("uses", TradeUses.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/objects/properties/trade/TradeVillagerXP.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.objects.properties.trade; 2 | 3 | import com.denizenscript.denizen.objects.TradeTag; 4 | import com.denizenscript.denizencore.objects.Mechanism; 5 | import com.denizenscript.denizencore.objects.core.ElementTag; 6 | 7 | public class TradeVillagerXP extends TradeProperty { 8 | 9 | // <--[property] 10 | // @object TradeTag 11 | // @name villager_xp 12 | // @input ElementTag(Number) 13 | // @description 14 | // Controls the amount of experience a villager gains from this trade. 15 | // --> 16 | 17 | public static boolean describes(TradeTag recipe) { 18 | return true; 19 | } 20 | 21 | @Override 22 | public ElementTag getPropertyValue() { 23 | return new ElementTag(getRecipe().getVillagerExperience()); 24 | } 25 | 26 | @Override 27 | public void setPropertyValue(ElementTag val, Mechanism mechanism) { 28 | if (mechanism.requireInteger()) { 29 | getRecipe().setVillagerExperience(mechanism.getValue().asInt()); 30 | } 31 | } 32 | 33 | @Override 34 | public String getPropertyId() { 35 | return "villager_xp"; 36 | } 37 | 38 | public static void register() { 39 | autoRegister("villager_xp", TradeVillagerXP.class, ElementTag.class, false); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/scripts/containers/ContainerRegistry.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.scripts.containers; 2 | 3 | import com.denizenscript.denizen.scripts.containers.core.*; 4 | import com.denizenscript.denizen.utilities.depends.Depends; 5 | import com.denizenscript.denizencore.scripts.ScriptRegistry; 6 | 7 | public class ContainerRegistry { 8 | 9 | public static void registerMainContainers() { 10 | ScriptRegistry._registerType("assignment", AssignmentScriptContainer.class); 11 | ScriptRegistry._registerType("book", BookScriptContainer.class); 12 | ScriptRegistry._registerType("command", CommandScriptContainer.class); 13 | if (Depends.vault != null) { 14 | ScriptRegistry._registerType("economy", EconomyScriptContainer.class); 15 | } 16 | ScriptRegistry._registerType("enchantment", EnchantmentScriptContainer.class); 17 | ScriptRegistry._registerType("entity", EntityScriptContainer.class); 18 | ScriptRegistry._registerType("format", FormatScriptContainer.class); 19 | ScriptRegistry._registerType("interact", InteractScriptContainer.class); 20 | ScriptRegistry._registerType("inventory", InventoryScriptContainer.class); 21 | ScriptRegistry._registerType("item", ItemScriptContainer.class); 22 | ScriptRegistry._registerType("map", MapScriptContainer.class); 23 | ScriptRegistry._registerType("version", VersionScriptContainer.class); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/scripts/containers/core/VersionScriptContainer.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.scripts.containers.core; 2 | 3 | import com.denizenscript.denizencore.scripts.containers.ScriptContainer; 4 | import com.denizenscript.denizen.utilities.BukkitImplDeprecations; 5 | import com.denizenscript.denizencore.utilities.YamlConfiguration; 6 | 7 | public class VersionScriptContainer extends ScriptContainer { 8 | 9 | public VersionScriptContainer(YamlConfiguration configurationSection, String scriptContainerName) { 10 | super(configurationSection, scriptContainerName); 11 | canRunScripts = false; 12 | BukkitImplDeprecations.versionScripts.warn(this); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/MultiVersionHelper1_18.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities; 2 | 3 | import com.denizenscript.denizencore.objects.core.ElementTag; 4 | import org.bukkit.entity.Player; 5 | 6 | public class MultiVersionHelper1_18 { 7 | 8 | public static ElementTag getSkinModel(Player player) { 9 | return new ElementTag(player.getPlayerProfile().getTextures().getSkinModel()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/BlockSet.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.blocks; 2 | 3 | import com.denizenscript.denizen.objects.PlayerTag; 4 | import com.denizenscript.denizencore.objects.core.DurationTag; 5 | import org.bukkit.Location; 6 | import org.bukkit.Material; 7 | 8 | import java.util.HashSet; 9 | import java.util.List; 10 | 11 | public interface BlockSet { 12 | 13 | class InputParams { 14 | 15 | public Location centerLocation; 16 | 17 | public boolean noAir; 18 | 19 | public HashSet mask; 20 | 21 | public List fakeTo; 22 | 23 | public DurationTag fakeDuration; 24 | } 25 | 26 | FullBlockData[] getBlocks(); 27 | 28 | void setBlocksDelayed(final Runnable runme, final InputParams input, long maxDelayMs); 29 | 30 | void setBlocks(InputParams input); 31 | } 32 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/blocks/ChunkCoordinate.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.blocks; 2 | 3 | import com.denizenscript.denizen.objects.ChunkTag; 4 | import com.denizenscript.denizen.objects.WorldTag; 5 | import org.bukkit.Chunk; 6 | import org.bukkit.Location; 7 | 8 | public class ChunkCoordinate { 9 | 10 | public final int x; 11 | 12 | public final int z; 13 | 14 | public final String worldName; 15 | 16 | public ChunkCoordinate(int _x, int _z, String _worldName) { 17 | x = _x; 18 | z = _z; 19 | worldName = _worldName; 20 | } 21 | 22 | public ChunkCoordinate(Location location) { 23 | x = location.getBlockX() >> 4; 24 | z = location.getBlockZ() >> 4; 25 | worldName = location.getWorld().getName(); 26 | } 27 | 28 | public ChunkCoordinate(Chunk chunk) { 29 | x = chunk.getX(); 30 | z = chunk.getZ(); 31 | worldName = chunk.getWorld().getName(); 32 | } 33 | 34 | @Override 35 | public int hashCode() { 36 | return x + z + worldName.hashCode(); 37 | } 38 | 39 | @Override 40 | public boolean equals(Object other) { 41 | if (!(other instanceof ChunkCoordinate)) { 42 | return false; 43 | } 44 | return equals((ChunkCoordinate) other); 45 | } 46 | 47 | public boolean equals(ChunkCoordinate other) { 48 | if (other == null) { 49 | return false; 50 | } 51 | return x == other.x && z == other.z && worldName.equals(other.worldName); 52 | } 53 | 54 | @Override 55 | public String toString() { 56 | return x + "," + z + "," + worldName; 57 | } 58 | 59 | public ChunkTag getChunk() { 60 | return new ChunkTag(new WorldTag(worldName), x, z); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/CommandEvents.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command; 2 | 3 | import com.denizenscript.denizen.Denizen; 4 | import org.bukkit.Bukkit; 5 | import org.bukkit.event.EventHandler; 6 | import org.bukkit.event.EventPriority; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.player.PlayerCommandSendEvent; 9 | 10 | public class CommandEvents implements Listener { 11 | 12 | public CommandEvents() { 13 | Bukkit.getPluginManager().registerEvents(this, Denizen.getInstance()); 14 | } 15 | 16 | @EventHandler(priority = EventPriority.LOW) 17 | public void onPlayerCommandSend(PlayerCommandSendEvent event) { 18 | event.getCommands().remove("denizenclickable"); 19 | event.getCommands().remove("denizen:denizenclickable"); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/CommandAnnotationProcessor.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager; 2 | 3 | import com.denizenscript.denizen.utilities.command.manager.exceptions.CommandException; 4 | import org.bukkit.command.CommandSender; 5 | 6 | import java.lang.annotation.Annotation; 7 | 8 | public interface CommandAnnotationProcessor { 9 | 10 | /** 11 | * @return The {@link Annotation} class that this processor will accept. 12 | */ 13 | Class getAnnotationClass(); 14 | 15 | /** 16 | * @param sender The command sender 17 | * @param context The context of the command, including arguments 18 | * @param instance The {@link Annotation} instance 19 | * @param args The method arguments 20 | * @throws CommandException If an exception occurs 21 | */ 22 | void process(CommandSender sender, CommandContext context, Annotation instance, Object[] args) 23 | throws CommandException; 24 | } 25 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/Injector.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager; 2 | 3 | import com.denizenscript.denizencore.utilities.debugging.Debug; 4 | 5 | import java.lang.reflect.Constructor; 6 | import java.lang.reflect.InvocationTargetException; 7 | 8 | public class Injector { 9 | 10 | private final Class[] argClasses; 11 | private final Object[] args; 12 | 13 | public Injector(Object... args) { 14 | this.args = args; 15 | argClasses = new Class[args.length]; 16 | for (int i = 0; i < args.length; ++i) { 17 | argClasses[i] = args[i].getClass(); 18 | } 19 | } 20 | 21 | public Object getInstance(Class clazz) { 22 | try { 23 | Constructor ctr = clazz.getConstructor(argClasses); 24 | ctr.setAccessible(true); 25 | return ctr.newInstance(args); 26 | } 27 | catch (NoSuchMethodException e) { 28 | try { 29 | return clazz.newInstance(); 30 | } 31 | catch (Exception ex) { 32 | Debug.echoError("Error initializing commands class " + clazz + ": "); 33 | Debug.echoError(ex); 34 | return null; 35 | } 36 | } 37 | catch (InvocationTargetException | IllegalAccessException | InstantiationException e) { 38 | Debug.echoError("Error initializing commands class " + clazz + ": "); 39 | Debug.echoError(e); 40 | return null; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/Paginator.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager; 2 | 3 | import com.denizenscript.denizen.utilities.command.manager.messaging.Messaging; 4 | import org.bukkit.command.CommandSender; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | public class Paginator { 10 | 11 | private String header; 12 | private final List lines = new ArrayList<>(); 13 | 14 | public void addLine(String line) { 15 | lines.add(line); 16 | } 17 | 18 | public Paginator header(String header) { 19 | this.header = header; 20 | return this; 21 | } 22 | 23 | public boolean sendPage(CommandSender sender, int page) { 24 | int pages = (int) ((lines.size() / LINES_PER_PAGE == 0) ? 1 : Math.ceil((double) lines.size() / LINES_PER_PAGE)); 25 | if (page < 0 || page > pages) { 26 | return false; 27 | } 28 | 29 | int startIndex = LINES_PER_PAGE * page - LINES_PER_PAGE; 30 | int endIndex = page * LINES_PER_PAGE; 31 | 32 | Messaging.send(sender, wrapHeader("" + header + " " + page + "/" + pages)); 33 | 34 | if (lines.size() < endIndex) { 35 | endIndex = lines.size(); 36 | } 37 | for (String line : lines.subList(startIndex, endIndex)) { 38 | Messaging.send(sender, line); 39 | } 40 | return true; 41 | } 42 | 43 | public static String wrapHeader(Object string) { 44 | String highlight = ""; 45 | return highlight + "=====[ " + string.toString() + highlight + " ]====="; 46 | } 47 | 48 | private static final int LINES_PER_PAGE = 9; 49 | } 50 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/Requirements.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface Requirements { 8 | 9 | // TODO: add Denizen-based requirements/remove this system 10 | } 11 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/RequirementsProcessor.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager; 2 | 3 | import com.denizenscript.denizen.utilities.command.manager.exceptions.CommandException; 4 | import org.bukkit.command.CommandSender; 5 | 6 | import java.lang.annotation.Annotation; 7 | 8 | public class RequirementsProcessor implements CommandAnnotationProcessor { 9 | 10 | @Override 11 | public Class getAnnotationClass() { 12 | return Requirements.class; 13 | } 14 | 15 | @Override 16 | public void process(CommandSender sender, CommandContext context, Annotation instance, Object[] methodArgs) 17 | throws CommandException { 18 | // TODO: add Denizen-based requirements/remove this system 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/CommandException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class CommandException extends Exception { 4 | 5 | public CommandException() { 6 | super(); 7 | } 8 | 9 | public CommandException(String message) { 10 | super(message); 11 | } 12 | 13 | public CommandException(Throwable t) { 14 | super(t); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/CommandUsageException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class CommandUsageException extends CommandException { 4 | 5 | protected String usage; 6 | 7 | public CommandUsageException(String message, String usage) { 8 | super(message); 9 | this.usage = usage; 10 | } 11 | 12 | public String getUsage() { 13 | return usage; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/NoPermissionsException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class NoPermissionsException extends CommandException { 4 | 5 | public NoPermissionsException() { 6 | super("You don't have permission to execute that command."); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/RequirementMissingException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class RequirementMissingException extends CommandException { 4 | 5 | public RequirementMissingException(String message) { 6 | super(message); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/ServerCommandException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class ServerCommandException extends CommandException { 4 | 5 | // Placeholder 6 | } 7 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/UnhandledCommandException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class UnhandledCommandException extends CommandException { 4 | 5 | // Placeholder 6 | } 7 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/exceptions/WrappedCommandException.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.exceptions; 2 | 3 | public class WrappedCommandException extends CommandException { 4 | 5 | public WrappedCommandException(Throwable t) { 6 | super(t); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/manager/messaging/Colorizer.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.manager.messaging; 2 | 3 | import org.bukkit.ChatColor; 4 | 5 | import java.util.regex.Matcher; 6 | import java.util.regex.Pattern; 7 | 8 | public class Colorizer { 9 | 10 | public static String parseColors(String parsed) { 11 | Matcher matcher = COLOR_MATCHER.matcher(ChatColor.translateAlternateColorCodes('&', parsed)); 12 | return matcher.replaceAll(GROUP); 13 | } 14 | 15 | public static String stripColors(String parsed) { 16 | Matcher matcher = COLOR_MATCHER.matcher(parsed); 17 | return matcher.replaceAll(""); 18 | } 19 | 20 | private static Pattern COLOR_MATCHER; 21 | private static String GROUP = ChatColor.COLOR_CHAR + "$1"; 22 | 23 | static { 24 | StringBuilder colors = new StringBuilder("<(["); 25 | for (ChatColor color : ChatColor.values()) { 26 | colors.append(color.getChar()); 27 | } 28 | colors.append("])>"); 29 | COLOR_MATCHER = Pattern.compile(colors.toString(), Pattern.CASE_INSENSITIVE); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/scripted/DenizenAliasHelpTopic.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.scripted; 2 | 3 | import org.bukkit.ChatColor; 4 | import org.bukkit.command.CommandSender; 5 | import org.bukkit.help.HelpMap; 6 | import org.bukkit.help.HelpTopic; 7 | 8 | public class DenizenAliasHelpTopic extends HelpTopic { 9 | 10 | private final String aliasFor; 11 | private final HelpMap helpMap; 12 | 13 | public DenizenAliasHelpTopic(String alias, String aliasFor, HelpMap helpMap) { 14 | this.aliasFor = aliasFor.startsWith("/") ? aliasFor : "/" + aliasFor; 15 | this.helpMap = helpMap; 16 | this.name = alias.startsWith("/") ? alias : "/" + alias; 17 | if (name.equals(aliasFor)) { 18 | throw new IllegalArgumentException("Command " + this.name + " cannot be alias for itself"); 19 | } 20 | this.shortText = ChatColor.YELLOW + "Alias for " + ChatColor.WHITE + this.aliasFor; 21 | } 22 | 23 | public String getFullText(CommandSender forWho) { 24 | StringBuilder sb = new StringBuilder(this.shortText); 25 | HelpTopic aliasForTopic = this.helpMap.getHelpTopic(this.aliasFor); 26 | if (aliasForTopic != null) { 27 | sb.append("\n"); 28 | sb.append(aliasForTopic.getFullText(forWho)); 29 | } 30 | 31 | return sb.toString(); 32 | } 33 | 34 | public boolean canSee(CommandSender commandSender) { 35 | if (this.amendedPermission == null) { 36 | HelpTopic aliasForTopic = this.helpMap.getHelpTopic(this.aliasFor); 37 | return aliasForTopic != null && aliasForTopic.canSee(commandSender); 38 | } 39 | else { 40 | return commandSender.hasPermission(this.amendedPermission); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/command/scripted/DenizenCommandHelpTopic.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.command.scripted; 2 | 3 | import org.bukkit.command.CommandSender; 4 | import org.bukkit.help.GenericCommandHelpTopic; 5 | 6 | public class DenizenCommandHelpTopic extends GenericCommandHelpTopic { 7 | 8 | private final DenizenCommand denizenCommand; 9 | 10 | public DenizenCommandHelpTopic(DenizenCommand command) { 11 | super(command); 12 | this.denizenCommand = command; 13 | } 14 | 15 | @Override 16 | public boolean canSee(CommandSender sender) { 17 | return denizenCommand.canSeeHelp(sender); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/debugging/DebugConsoleSender.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.debugging; 2 | 3 | import com.denizenscript.denizen.utilities.PaperAPITools; 4 | import com.denizenscript.denizencore.utilities.CoreConfiguration; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.ChatColor; 7 | import org.bukkit.command.CommandSender; 8 | 9 | public class DebugConsoleSender { 10 | 11 | public static boolean showColor = true; 12 | 13 | static CommandSender commandSender = null; 14 | 15 | public static void sendMessage(String string) { 16 | if (commandSender == null) { 17 | commandSender = Bukkit.getServer().getConsoleSender(); 18 | } 19 | // "[HH:mm:ss INFO]: " 20 | string = CoreConfiguration.debugPrefix + string.replace("", " "); 21 | if (showColor) { 22 | PaperAPITools.instance.sendConsoleMessage(commandSender, string); 23 | } 24 | else { 25 | commandSender.sendMessage(ChatColor.stripColor(string)); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/entity/BossBarHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.entity; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.boss.BarColor; 5 | import org.bukkit.boss.BarStyle; 6 | import org.bukkit.boss.BossBar; 7 | import org.bukkit.entity.Player; 8 | 9 | import java.util.*; 10 | 11 | public class BossBarHelper { 12 | 13 | private static final Map> bossBars = new HashMap<>(); 14 | 15 | public static void showSimpleBossBar(Player player, String title, double progress) { 16 | UUID uuid = player.getUniqueId(); 17 | if (!bossBars.containsKey(uuid)) { 18 | bossBars.put(uuid, new ArrayList<>()); 19 | } 20 | List playerBars = bossBars.get(uuid); 21 | if (!playerBars.isEmpty()) { 22 | Iterator iterator = playerBars.iterator(); 23 | while (iterator.hasNext()) { 24 | BossBar bossBar = iterator.next(); 25 | bossBar.removePlayer(player); 26 | iterator.remove(); 27 | } 28 | } 29 | BossBar bossBar = Bukkit.createBossBar(title, BarColor.PURPLE, BarStyle.SOLID); 30 | bossBar.setProgress(progress); 31 | bossBar.addPlayer(player); 32 | bossBar.setVisible(true); 33 | playerBars.add(bossBar); 34 | } 35 | 36 | public static void removeSimpleBossBar(Player player) { 37 | UUID uuid = player.getUniqueId(); 38 | if (bossBars.containsKey(uuid) && !bossBars.get(uuid).isEmpty()) { 39 | Iterator iterator = bossBars.get(uuid).iterator(); 40 | while (iterator.hasNext()) { 41 | BossBar bossBar = iterator.next(); 42 | bossBar.removePlayer(player); 43 | iterator.remove(); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/entity/Gravity.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.entity; 2 | 3 | import org.bukkit.NamespacedKey; 4 | import org.bukkit.Registry; 5 | import org.bukkit.entity.EntityType; 6 | 7 | public class Gravity { 8 | 9 | // TODO once 1.20 is the minimum supported version can reference the enum directly 10 | public static final EntityType EXPERIENCE_BOTTLE_ENTITY_TYPE = Registry.ENTITY_TYPE.get(NamespacedKey.minecraft("experience_bottle")); 11 | 12 | public static double getGravity(EntityType entityType) { 13 | if (entityType == EXPERIENCE_BOTTLE_ENTITY_TYPE) { 14 | return 0.157; 15 | } 16 | switch (entityType) { 17 | case ARROW: 18 | return 0.118; 19 | case SNOWBALL: 20 | return 0.076; 21 | case EGG: 22 | return 0.074; 23 | default: 24 | return 0.115; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/entity/Position.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.entity; 2 | 3 | import org.bukkit.entity.Entity; 4 | 5 | import java.util.List; 6 | 7 | public class Position { 8 | 9 | public static void mount(List entities) { 10 | Entity lastEntity = null; 11 | for (Entity entity : entities) { 12 | if (entity != null) { 13 | if (lastEntity != null && entity != lastEntity) { 14 | if (!entity.getPassengers().contains(lastEntity)) { 15 | lastEntity.teleport(entity.getLocation()); 16 | entity.addPassenger(lastEntity); 17 | } 18 | } 19 | lastEntity = entity; 20 | } 21 | } 22 | } 23 | 24 | public static void dismount(List entities) { 25 | for (Entity entity : entities) { 26 | if (entity != null) { 27 | entity.leaveVehicle(); 28 | } 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/entity/SpawnEntityHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.entity; 2 | 3 | import com.denizenscript.denizen.objects.EntityTag; 4 | import com.denizenscript.denizen.scripts.containers.core.EntityScriptHelper; 5 | import com.denizenscript.denizen.utilities.PaperAPITools; 6 | import com.denizenscript.denizencore.objects.Mechanism; 7 | import com.denizenscript.denizencore.utilities.CoreUtilities; 8 | import org.bukkit.Location; 9 | import org.bukkit.entity.Entity; 10 | import org.bukkit.entity.EntityType; 11 | import org.bukkit.event.entity.CreatureSpawnEvent; 12 | import org.bukkit.util.Consumer; 13 | 14 | import java.util.ArrayList; 15 | 16 | /** 17 | * Applies mechanisms to an entity before spawning it 18 | */ 19 | public class SpawnEntityHelper { 20 | 21 | public static Entity spawn(Location location, EntityType bukkitEntityType, final ArrayList mechanisms, final String scriptName, final CreatureSpawnEvent.SpawnReason reason) { 22 | Consumer consumer = (Consumer) bukkitEntity -> { 23 | if (scriptName != null) { 24 | EntityScriptHelper.setEntityScript(bukkitEntity, scriptName); 25 | } 26 | EntityTag entity = new EntityTag(bukkitEntity); 27 | for (Mechanism mechanism : new ArrayList<>(mechanisms)) { 28 | if (EntityTag.earlyValidMechanisms.contains(CoreUtilities.toLowerCase(mechanism.getName()))) { 29 | entity.safeAdjustDuplicate(mechanism); 30 | //mechanisms.remove(mechanism); 31 | } 32 | } 33 | }; 34 | return PaperAPITools.instance.spawnEntity(location, (Class) bukkitEntityType.getEntityClass(), (Consumer) consumer, reason); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/flags/LocationFlagSearchHelper.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.flags; 2 | 3 | import com.denizenscript.denizen.objects.LocationTag; 4 | import com.denizenscript.denizencore.utilities.CoreUtilities; 5 | import org.bukkit.Chunk; 6 | import org.bukkit.Location; 7 | import org.bukkit.NamespacedKey; 8 | import org.bukkit.persistence.PersistentDataContainer; 9 | 10 | import java.util.List; 11 | import java.util.function.Consumer; 12 | 13 | public class LocationFlagSearchHelper { 14 | 15 | public static void getFlaggedLocations(Chunk chunk, String flagName, Consumer handleLocation) { 16 | int subKeyIndex = flagName.indexOf('.'); 17 | String fullPath = flagName; 18 | if (subKeyIndex != -1) { 19 | flagName = flagName.substring(0, subKeyIndex); 20 | } 21 | PersistentDataContainer container = chunk.getPersistentDataContainer(); 22 | Location ref = new Location(chunk.getWorld(), 0, 0, 0); 23 | for (NamespacedKey key : container.getKeys()) { 24 | if (key.getNamespace().equals("denizen") && key.getKey().startsWith("flag_tracker_") && key.getKey().endsWith(flagName)) { 25 | List split = CoreUtilities.split(key.getKey(), '_', 6); 26 | if (split.size() == 6 && split.get(5).equals(flagName)) { 27 | ref.setX(Integer.parseInt(split.get(2))); 28 | ref.setY(Integer.parseInt(split.get(3))); 29 | ref.setZ(Integer.parseInt(split.get(4))); 30 | if (new LocationTag(ref).getFlagTracker().hasFlag(fullPath)) { 31 | handleLocation.accept(ref); 32 | } 33 | } 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/midi/ToneUtil.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.midi; 2 | 3 | import javax.sound.midi.ShortMessage; 4 | 5 | /** 6 | * Utility for converting between different representations of a tone. 7 | * Calculations provided by github.com/sk89q/craftbook 8 | * 9 | * @author authorblues 10 | */ 11 | 12 | public class ToneUtil { 13 | 14 | public static double noteToPitch(byte note) { 15 | 16 | return (float) Math.pow(2.0D, (note - 12) / 12.0D); 17 | } 18 | 19 | // converts midi events into Note objects 20 | public static byte midiToNote(ShortMessage smsg) { 21 | 22 | int semitone = smsg.getData1(); 23 | 24 | if (semitone < 54) { 25 | return (byte) ((semitone - 6) % (18 - 6)); 26 | } 27 | else if (semitone > 78) { 28 | return (byte) ((semitone - 6) % (18 - 6) + 12); 29 | } 30 | else { 31 | return (byte) (semitone - 54); 32 | } 33 | } 34 | 35 | // converts midi events into pitch 36 | public static double midiToPitch(ShortMessage smsg) { 37 | 38 | return noteToPitch(midiToNote(smsg)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/nbt/LeatherColorer.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.nbt; 2 | 3 | import com.denizenscript.denizen.objects.properties.bukkit.BukkitColorExtensions; 4 | import com.denizenscript.denizencore.objects.core.ColorTag; 5 | import com.denizenscript.denizencore.utilities.debugging.Debug; 6 | import com.denizenscript.denizen.objects.ItemTag; 7 | import com.denizenscript.denizencore.utilities.CoreUtilities; 8 | import org.bukkit.inventory.meta.LeatherArmorMeta; 9 | 10 | public class LeatherColorer { 11 | 12 | public static void colorArmor(ItemTag item, String colorArg) { 13 | if (item == null) { 14 | return; 15 | } 16 | if (ColorTag.matches(colorArg)) { 17 | try { 18 | LeatherArmorMeta meta = (LeatherArmorMeta) item.getItemMeta(); 19 | meta.setColor(BukkitColorExtensions.getColor(ColorTag.valueOf(colorArg, CoreUtilities.basicContext))); 20 | item.setItemMeta(meta); 21 | } 22 | catch (Exception e) { 23 | Debug.echoError("Unable to color '" + item.identify() + "'."); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/packets/HideParticles.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.packets; 2 | 3 | import org.bukkit.Particle; 4 | 5 | import java.util.HashMap; 6 | import java.util.HashSet; 7 | import java.util.UUID; 8 | 9 | public class HideParticles { 10 | 11 | public static HashMap> hidden = new HashMap<>(); 12 | } 13 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/world/PathFinder.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.world; 2 | 3 | import com.denizenscript.denizen.objects.LocationTag; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.citizensnpcs.api.astar.AStarMachine; 6 | import net.citizensnpcs.api.astar.pathfinder.*; 7 | import org.bukkit.Location; 8 | import org.bukkit.util.Vector; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | /** 14 | * TODO: Potentially a separate implementation? 15 | */ 16 | public class PathFinder { 17 | 18 | public static AStarMachine ASTAR = AStarMachine.createWithDefaultStorage(); 19 | 20 | public static List getPath(Location start, Location dest) { 21 | VectorGoal goal = new VectorGoal(dest, 1); 22 | Path plan = (Path) ASTAR.runFully(goal, new VectorNode(goal, start, new ChunkBlockSource(start, 100), new MinecraftBlockExaminer()), 50000); 23 | if (plan == null) { 24 | Debug.verboseLog("PathFinder: No path found from " + start + " to " + dest + " (return null)"); 25 | return new ArrayList<>(); 26 | } 27 | if (plan.isComplete()) { 28 | Debug.verboseLog("PathFinder: path from " + start + " to " + dest + " is instantly completed"); 29 | return new ArrayList<>(); 30 | } 31 | else { 32 | List path = new ArrayList<>(); 33 | while (!plan.isComplete()) { 34 | Vector v = plan.getCurrentVector(); 35 | path.add(new LocationTag(start.getWorld(), v.getX(), v.getY(), v.getZ())); 36 | plan.update(null); 37 | } 38 | return path; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/world/VoidGenerator.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.world; 2 | 3 | import org.bukkit.block.Biome; 4 | import org.bukkit.generator.BiomeProvider; 5 | import org.bukkit.generator.ChunkGenerator; 6 | import org.bukkit.generator.WorldInfo; 7 | 8 | import java.util.List; 9 | 10 | public class VoidGenerator extends ChunkGenerator { 11 | 12 | final boolean setVoidBiome; 13 | 14 | public VoidGenerator(boolean setVoidBiome) { 15 | this.setVoidBiome = setVoidBiome; 16 | } 17 | 18 | public static class VoidBiomeProvider extends BiomeProvider { 19 | 20 | public static final List VOID_BIOME_LIST = List.of(Biome.THE_VOID); 21 | 22 | @Override 23 | public Biome getBiome(WorldInfo worldInfo, int i, int i1, int i2) { 24 | return Biome.THE_VOID; 25 | } 26 | 27 | @Override 28 | public List getBiomes(WorldInfo worldInfo) { 29 | return VOID_BIOME_LIST; 30 | } 31 | } 32 | 33 | public static final VoidBiomeProvider VOID_BIOME_PROVIDER = new VoidBiomeProvider(); 34 | 35 | @Override 36 | public BiomeProvider getDefaultBiomeProvider(WorldInfo worldInfo) { 37 | return setVoidBiome ? VOID_BIOME_PROVIDER : null; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /plugin/src/main/java/com/denizenscript/denizen/utilities/world/WorldListChangeTracker.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.utilities.world; 2 | 3 | import org.bukkit.event.EventHandler; 4 | import org.bukkit.event.Listener; 5 | import org.bukkit.event.world.WorldInitEvent; 6 | import org.bukkit.event.world.WorldLoadEvent; 7 | import org.bukkit.event.world.WorldUnloadEvent; 8 | 9 | public class WorldListChangeTracker implements Listener { 10 | 11 | public static int changes; 12 | 13 | @EventHandler 14 | public void onWorldLoaded(WorldLoadEvent event) { 15 | changes++; 16 | } 17 | 18 | @EventHandler 19 | public void onWorldUnloaded(WorldUnloadEvent event) { 20 | changes++; 21 | } 22 | 23 | @EventHandler 24 | public void onWorldInit(WorldInitEvent event) { 25 | changes++; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /plugin/src/main/resources/Denizen.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DenizenScript/Denizen/7e4a352ee2e0766d9b109c7ce2dd334d78974562/plugin/src/main/resources/Denizen.mid -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/entities/CraftFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.FakeArrow; 4 | import net.minecraft.world.entity.projectile.AbstractArrow; 5 | import org.bukkit.craftbukkit.v1_17_R1.CraftServer; 6 | import org.bukkit.craftbukkit.v1_17_R1.entity.CraftArrow; 7 | 8 | public class CraftFakeArrowImpl extends CraftArrow implements FakeArrow { 9 | 10 | public CraftFakeArrowImpl(CraftServer craftServer, AbstractArrow entityArrow) { 11 | super(craftServer, entityArrow); 12 | } 13 | 14 | @Override 15 | public void remove() { 16 | if (getPassenger() != null) { 17 | return; 18 | } 19 | super.remove(); 20 | } 21 | 22 | @Override 23 | public String getEntityTypeName() { 24 | return "FAKE_ARROW"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/entities/EntityFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.v1_17.Handler; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.minecraft.world.entity.projectile.SpectralArrow; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.Items; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.craftbukkit.v1_17_R1.CraftServer; 11 | import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; 12 | import org.bukkit.event.entity.CreatureSpawnEvent; 13 | 14 | public class EntityFakeArrowImpl extends SpectralArrow { 15 | 16 | public EntityFakeArrowImpl(CraftWorld craftWorld, Location location) { 17 | super(net.minecraft.world.entity.EntityType.SPECTRAL_ARROW, craftWorld.getHandle()); 18 | try { 19 | Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakeArrowImpl((CraftServer) Bukkit.getServer(), this)); 20 | } 21 | catch (Exception ex) { 22 | Debug.echoError(ex); 23 | } 24 | setPosRaw(location.getX(), location.getY(), location.getZ()); 25 | setRot(location.getYaw(), location.getPitch()); 26 | level.addEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); 27 | } 28 | 29 | @Override 30 | public void tick() { 31 | // Do nothing 32 | } 33 | 34 | @Override 35 | protected ItemStack getPickupItem() { 36 | return new ItemStack(Items.ARROW); 37 | } 38 | 39 | @Override 40 | public CraftFakeArrowImpl getBukkitEntity() { 41 | return (CraftFakeArrowImpl) super.getBukkitEntity(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/fakes/FakeNetworkManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.PacketFlow; 5 | 6 | import java.net.SocketAddress; 7 | 8 | public class FakeNetworkManagerImpl extends Connection { 9 | 10 | public FakeNetworkManagerImpl(PacketFlow enumprotocoldirection) { 11 | super(enumprotocoldirection); 12 | channel = new FakeChannelImpl(null); 13 | address = new SocketAddress() { 14 | }; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/fakes/FakePlayerConnectionImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.Packet; 5 | import net.minecraft.server.MinecraftServer; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 8 | 9 | public class FakePlayerConnectionImpl extends ServerGamePacketListenerImpl { 10 | 11 | public FakePlayerConnectionImpl(MinecraftServer minecraftserver, Connection networkmanager, ServerPlayer entityplayer) { 12 | super(minecraftserver, networkmanager, entityplayer); 13 | } 14 | 15 | @Override 16 | public void send(Packet packet) { 17 | // Do nothing 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketInResourcePackStatusImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInResourcePackStatus; 4 | import net.minecraft.network.protocol.game.ServerboundResourcePackPacket; 5 | 6 | public class PacketInResourcePackStatusImpl implements PacketInResourcePackStatus { 7 | 8 | private ServerboundResourcePackPacket internal; 9 | 10 | public PacketInResourcePackStatusImpl(ServerboundResourcePackPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public String getStatus() { 16 | return internal.action.name(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketInSteerVehicleImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInSteerVehicle; 4 | import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; 5 | 6 | public class PacketInSteerVehicleImpl implements PacketInSteerVehicle { 7 | 8 | private ServerboundPlayerInputPacket internal; 9 | 10 | public PacketInSteerVehicleImpl(ServerboundPlayerInputPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public float getLeftwardInput() { 16 | return internal.getXxa(); 17 | } 18 | 19 | @Override 20 | public float getForwardInput() { 21 | return internal.getZza(); 22 | } 23 | 24 | @Override 25 | public boolean getJumpInput() { 26 | return internal.isJumping(); 27 | } 28 | 29 | @Override 30 | public boolean getDismountInput() { 31 | return internal.isShiftKeyDown(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutSetSlotImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketOutSetSlot; 4 | import com.denizenscript.denizencore.utilities.ReflectionHelper; 5 | import com.denizenscript.denizencore.utilities.debugging.Debug; 6 | import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; 7 | import net.minecraft.world.item.ItemStack; 8 | import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; 9 | 10 | import java.lang.reflect.Field; 11 | 12 | public class PacketOutSetSlotImpl implements PacketOutSetSlot { 13 | 14 | private ClientboundContainerSetSlotPacket internal; 15 | private org.bukkit.inventory.ItemStack itemStack; 16 | 17 | public PacketOutSetSlotImpl(ClientboundContainerSetSlotPacket internal) { 18 | this.internal = internal; 19 | try { 20 | ItemStack nms = (ItemStack) ITEM_STACK.get(internal); 21 | itemStack = CraftItemStack.asBukkitCopy(nms); 22 | } 23 | catch (Exception e) { 24 | Debug.echoError(e); 25 | } 26 | } 27 | 28 | @Override 29 | public org.bukkit.inventory.ItemStack getItemStack() { 30 | return itemStack; 31 | } 32 | 33 | @Override 34 | public void setItemStack(org.bukkit.inventory.ItemStack itemStack) { 35 | try { 36 | ITEM_STACK.set(internal, CraftItemStack.asNMSCopy(itemStack)); 37 | } 38 | catch (Exception e) { 39 | Debug.echoError(e); 40 | } 41 | } 42 | 43 | private static final Field ITEM_STACK; 44 | 45 | static { 46 | ITEM_STACK = ReflectionHelper.getFields(ClientboundContainerSetSlotPacket.class).get("c"); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/impl/network/packets/PacketOutSpawnEntityImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_17.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketOutSpawnEntity; 4 | 5 | public class PacketOutSpawnEntityImpl implements PacketOutSpawnEntity { 6 | 7 | private int entityId; 8 | 9 | public PacketOutSpawnEntityImpl(int eid) { 10 | this.entityId = eid; 11 | } 12 | 13 | @Override 14 | public int getEntityId() { 15 | return entityId; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/entities/CraftFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.FakeArrow; 4 | import net.minecraft.world.entity.projectile.AbstractArrow; 5 | import org.bukkit.craftbukkit.v1_18_R2.CraftServer; 6 | import org.bukkit.craftbukkit.v1_18_R2.entity.CraftArrow; 7 | 8 | public class CraftFakeArrowImpl extends CraftArrow implements FakeArrow { 9 | 10 | public CraftFakeArrowImpl(CraftServer craftServer, AbstractArrow entityArrow) { 11 | super(craftServer, entityArrow); 12 | } 13 | 14 | @Override 15 | public void remove() { 16 | if (getPassenger() != null) { 17 | return; 18 | } 19 | super.remove(); 20 | } 21 | 22 | @Override 23 | public String getEntityTypeName() { 24 | return "FAKE_ARROW"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/entities/EntityFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.v1_18.Handler; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.minecraft.world.entity.projectile.SpectralArrow; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.Items; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.craftbukkit.v1_18_R2.CraftServer; 11 | import org.bukkit.craftbukkit.v1_18_R2.CraftWorld; 12 | import org.bukkit.event.entity.CreatureSpawnEvent; 13 | 14 | public class EntityFakeArrowImpl extends SpectralArrow { 15 | 16 | public EntityFakeArrowImpl(CraftWorld craftWorld, Location location) { 17 | super(net.minecraft.world.entity.EntityType.SPECTRAL_ARROW, craftWorld.getHandle()); 18 | try { 19 | Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakeArrowImpl((CraftServer) Bukkit.getServer(), this)); 20 | } 21 | catch (Exception ex) { 22 | Debug.echoError(ex); 23 | } 24 | setPosRaw(location.getX(), location.getY(), location.getZ()); 25 | setRot(location.getYaw(), location.getPitch()); 26 | level.addFreshEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); 27 | } 28 | 29 | @Override 30 | public void tick() { 31 | // Do nothing 32 | } 33 | 34 | @Override 35 | protected ItemStack getPickupItem() { 36 | return new ItemStack(Items.ARROW); 37 | } 38 | 39 | @Override 40 | public CraftFakeArrowImpl getBukkitEntity() { 41 | return (CraftFakeArrowImpl) super.getBukkitEntity(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/fakes/FakeNetworkManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.PacketFlow; 5 | 6 | import java.net.SocketAddress; 7 | 8 | public class FakeNetworkManagerImpl extends Connection { 9 | 10 | public FakeNetworkManagerImpl(PacketFlow enumprotocoldirection) { 11 | super(enumprotocoldirection); 12 | channel = new FakeChannelImpl(null); 13 | address = new SocketAddress() { 14 | }; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/fakes/FakePlayerConnectionImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.Packet; 5 | import net.minecraft.server.MinecraftServer; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 8 | 9 | public class FakePlayerConnectionImpl extends ServerGamePacketListenerImpl { 10 | 11 | public FakePlayerConnectionImpl(MinecraftServer minecraftserver, Connection networkmanager, ServerPlayer entityplayer) { 12 | super(minecraftserver, networkmanager, entityplayer); 13 | } 14 | 15 | @Override 16 | public void send(Packet packet) { 17 | // Do nothing 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketInResourcePackStatusImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInResourcePackStatus; 4 | import net.minecraft.network.protocol.game.ServerboundResourcePackPacket; 5 | 6 | public class PacketInResourcePackStatusImpl implements PacketInResourcePackStatus { 7 | 8 | private ServerboundResourcePackPacket internal; 9 | 10 | public PacketInResourcePackStatusImpl(ServerboundResourcePackPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public String getStatus() { 16 | return internal.action.name(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/impl/network/packets/PacketInSteerVehicleImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_18.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInSteerVehicle; 4 | import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; 5 | 6 | public class PacketInSteerVehicleImpl implements PacketInSteerVehicle { 7 | 8 | private ServerboundPlayerInputPacket internal; 9 | 10 | public PacketInSteerVehicleImpl(ServerboundPlayerInputPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public float getLeftwardInput() { 16 | return internal.getXxa(); 17 | } 18 | 19 | @Override 20 | public float getForwardInput() { 21 | return internal.getZza(); 22 | } 23 | 24 | @Override 25 | public boolean getJumpInput() { 26 | return internal.isJumping(); 27 | } 28 | 29 | @Override 30 | public boolean getDismountInput() { 31 | return internal.isShiftKeyDown(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/CraftFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.FakeArrow; 4 | import net.minecraft.world.entity.projectile.AbstractArrow; 5 | import org.bukkit.craftbukkit.v1_19_R3.CraftServer; 6 | import org.bukkit.craftbukkit.v1_19_R3.entity.CraftArrow; 7 | 8 | public class CraftFakeArrowImpl extends CraftArrow implements FakeArrow { 9 | 10 | public CraftFakeArrowImpl(CraftServer craftServer, AbstractArrow entityArrow) { 11 | super(craftServer, entityArrow); 12 | } 13 | 14 | @Override 15 | public void remove() { 16 | if (getPassenger() != null) { 17 | return; 18 | } 19 | super.remove(); 20 | } 21 | 22 | @Override 23 | public String getEntityTypeName() { 24 | return "FAKE_ARROW"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/entities/EntityFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.v1_19.Handler; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.minecraft.world.entity.projectile.SpectralArrow; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.Items; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.craftbukkit.v1_19_R3.CraftServer; 11 | import org.bukkit.craftbukkit.v1_19_R3.CraftWorld; 12 | import org.bukkit.event.entity.CreatureSpawnEvent; 13 | 14 | public class EntityFakeArrowImpl extends SpectralArrow { 15 | 16 | public EntityFakeArrowImpl(CraftWorld craftWorld, Location location) { 17 | super(net.minecraft.world.entity.EntityType.SPECTRAL_ARROW, craftWorld.getHandle()); 18 | try { 19 | Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakeArrowImpl((CraftServer) Bukkit.getServer(), this)); 20 | } 21 | catch (Exception ex) { 22 | Debug.echoError(ex); 23 | } 24 | setPosRaw(location.getX(), location.getY(), location.getZ()); 25 | setRot(location.getYaw(), location.getPitch()); 26 | level.addFreshEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); 27 | } 28 | 29 | @Override 30 | public void tick() { 31 | // Do nothing 32 | } 33 | 34 | @Override 35 | protected ItemStack getPickupItem() { 36 | return new ItemStack(Items.ARROW); 37 | } 38 | 39 | @Override 40 | public CraftFakeArrowImpl getBukkitEntity() { 41 | return (CraftFakeArrowImpl) super.getBukkitEntity(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/fakes/FakeNetworkManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.PacketFlow; 5 | 6 | import java.net.SocketAddress; 7 | 8 | public class FakeNetworkManagerImpl extends Connection { 9 | 10 | public FakeNetworkManagerImpl(PacketFlow enumprotocoldirection) { 11 | super(enumprotocoldirection); 12 | channel = new FakeChannelImpl(null); 13 | address = new SocketAddress() { 14 | }; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/fakes/FakePlayerConnectionImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.Packet; 5 | import net.minecraft.server.MinecraftServer; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 8 | 9 | public class FakePlayerConnectionImpl extends ServerGamePacketListenerImpl { 10 | 11 | public FakePlayerConnectionImpl(MinecraftServer minecraftserver, Connection networkmanager, ServerPlayer entityplayer) { 12 | super(minecraftserver, networkmanager, entityplayer); 13 | } 14 | 15 | @Override 16 | public void send(Packet packet) { 17 | // Do nothing 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketInResourcePackStatusImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInResourcePackStatus; 4 | import net.minecraft.network.protocol.game.ServerboundResourcePackPacket; 5 | 6 | public class PacketInResourcePackStatusImpl implements PacketInResourcePackStatus { 7 | 8 | private ServerboundResourcePackPacket internal; 9 | 10 | public PacketInResourcePackStatusImpl(ServerboundResourcePackPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public String getStatus() { 16 | return internal.action.name(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /v1_19/src/main/java/com/denizenscript/denizen/nms/v1_19/impl/network/packets/PacketInSteerVehicleImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_19.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInSteerVehicle; 4 | import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; 5 | 6 | public class PacketInSteerVehicleImpl implements PacketInSteerVehicle { 7 | 8 | private ServerboundPlayerInputPacket internal; 9 | 10 | public PacketInSteerVehicleImpl(ServerboundPlayerInputPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public float getLeftwardInput() { 16 | return internal.getXxa(); 17 | } 18 | 19 | @Override 20 | public float getForwardInput() { 21 | return internal.getZza(); 22 | } 23 | 24 | @Override 25 | public boolean getJumpInput() { 26 | return internal.isJumping(); 27 | } 28 | 29 | @Override 30 | public boolean getDismountInput() { 31 | return internal.isShiftKeyDown(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/entities/CraftFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.FakeArrow; 4 | import net.minecraft.world.entity.projectile.AbstractArrow; 5 | import org.bukkit.craftbukkit.v1_20_R4.CraftServer; 6 | import org.bukkit.craftbukkit.v1_20_R4.entity.CraftAbstractArrow; 7 | 8 | public class CraftFakeArrowImpl extends CraftAbstractArrow implements FakeArrow { 9 | 10 | public CraftFakeArrowImpl(CraftServer craftServer, AbstractArrow entityArrow) { 11 | super(craftServer, entityArrow); 12 | } 13 | 14 | @Override 15 | public void remove() { 16 | if (getPassenger() != null) { 17 | return; 18 | } 19 | super.remove(); 20 | } 21 | 22 | @Override 23 | public String getEntityTypeName() { 24 | return "FAKE_ARROW"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/entities/EntityFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.v1_20.Handler; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.minecraft.world.entity.projectile.SpectralArrow; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.Items; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.craftbukkit.v1_20_R4.CraftServer; 11 | import org.bukkit.craftbukkit.v1_20_R4.CraftWorld; 12 | import org.bukkit.event.entity.CreatureSpawnEvent; 13 | 14 | public class EntityFakeArrowImpl extends SpectralArrow { 15 | 16 | public EntityFakeArrowImpl(CraftWorld craftWorld, Location location) { 17 | super(net.minecraft.world.entity.EntityType.SPECTRAL_ARROW, craftWorld.getHandle()); 18 | try { 19 | Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakeArrowImpl((CraftServer) Bukkit.getServer(), this)); 20 | } 21 | catch (Exception ex) { 22 | Debug.echoError(ex); 23 | } 24 | setPosRaw(location.getX(), location.getY(), location.getZ()); 25 | setRot(location.getYaw(), location.getPitch()); 26 | level().addFreshEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); 27 | } 28 | 29 | @Override 30 | public void tick() { 31 | // Do nothing 32 | } 33 | 34 | @Override 35 | protected ItemStack getPickupItem() { 36 | return new ItemStack(Items.ARROW); 37 | } 38 | 39 | @Override 40 | public CraftFakeArrowImpl getBukkitEntity() { 41 | return (CraftFakeArrowImpl) super.getBukkitEntity(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/fakes/FakeNetworkManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.PacketFlow; 5 | 6 | import java.net.SocketAddress; 7 | 8 | public class FakeNetworkManagerImpl extends Connection { 9 | 10 | public FakeNetworkManagerImpl(PacketFlow enumprotocoldirection) { 11 | super(enumprotocoldirection); 12 | channel = new FakeChannelImpl(null); 13 | address = new SocketAddress() { 14 | }; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/fakes/FakePlayerConnectionImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.Packet; 5 | import net.minecraft.server.MinecraftServer; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.minecraft.server.network.CommonListenerCookie; 8 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 9 | 10 | public class FakePlayerConnectionImpl extends ServerGamePacketListenerImpl { 11 | 12 | public FakePlayerConnectionImpl(MinecraftServer minecraftserver, Connection networkmanager, ServerPlayer entityplayer, CommonListenerCookie cookie) { 13 | super(minecraftserver, networkmanager, entityplayer, cookie); 14 | } 15 | 16 | @Override 17 | public void send(Packet packet) { 18 | // Do nothing 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/handlers/packet/BlockLightPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.handlers.packet; 2 | 3 | import com.denizenscript.denizen.nms.abstracts.BlockLight; 4 | import com.denizenscript.denizen.nms.v1_20.impl.blocks.BlockLightImpl; 5 | import com.denizenscript.denizen.nms.v1_20.impl.network.handlers.DenizenNetworkManagerImpl; 6 | import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; 7 | import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket; 8 | 9 | public class BlockLightPacketHandlers { 10 | 11 | public static void registerHandlers() { 12 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundLightUpdatePacket.class, BlockLightPacketHandlers::processLightUpdatePacket); 13 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundBlockUpdatePacket.class, BlockLightPacketHandlers::processBlockUpdatePacket); 14 | } 15 | 16 | public static void processLightUpdatePacket(DenizenNetworkManagerImpl networkManager, ClientboundLightUpdatePacket lightUpdatePacket) { 17 | if (!BlockLight.lightsByChunk.isEmpty()) { 18 | BlockLightImpl.checkIfLightsBrokenByPacket(lightUpdatePacket, networkManager.player.level()); 19 | } 20 | } 21 | 22 | public static void processBlockUpdatePacket(DenizenNetworkManagerImpl networkManager, ClientboundBlockUpdatePacket blockUpdatePacket) { 23 | if (!BlockLight.lightsByChunk.isEmpty()) { 24 | BlockLightImpl.checkIfLightsBrokenByPacket(blockUpdatePacket, networkManager.player.level()); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/handlers/packet/FakePlayerPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.handlers.packet; 2 | 3 | /* 4 | import com.denizenscript.denizen.nms.NMSHandler; 5 | import com.denizenscript.denizen.nms.v1_20.impl.entities.EntityFakePlayerImpl; 6 | import com.denizenscript.denizen.nms.v1_20.impl.network.handlers.DenizenNetworkManagerImpl; 7 | import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; 8 | import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; 9 | import org.bukkit.Bukkit; 10 | 11 | import java.util.List; 12 | */ 13 | 14 | public class FakePlayerPacketHandlers { 15 | 16 | public static void registerHandlers() { 17 | // TODO: 1.20.2: Replace this. 18 | //DenizenNetworkManagerImpl.registerPacketHandler(ClientboundAddPlayerPacket.class, FakePlayerPacketHandlers::processAddPlayerPacket); 19 | } 20 | 21 | /* 22 | public static void processAddPlayerPacket(DenizenNetworkManagerImpl networkManager, ClientboundAddPlayerPacket addPlayerPacket) { 23 | if (networkManager.player.level().getEntity(addPlayerPacket.getEntityId()) instanceof EntityFakePlayerImpl fakePlayer) { 24 | networkManager.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, fakePlayer)); 25 | Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), 26 | () -> networkManager.send(new ClientboundPlayerInfoRemovePacket(List.of(fakePlayer.getUUID()))), 5); 27 | } 28 | }*/ 29 | } 30 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/handlers/packet/HideParticlesPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.handlers.packet; 2 | 3 | import com.denizenscript.denizen.nms.v1_20.impl.network.handlers.DenizenNetworkManagerImpl; 4 | import com.denizenscript.denizen.utilities.packets.HideParticles; 5 | import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket; 6 | import org.bukkit.Particle; 7 | import org.bukkit.craftbukkit.v1_20_R4.CraftParticle; 8 | 9 | import java.util.Set; 10 | 11 | public class HideParticlesPacketHandlers { 12 | 13 | public static void registerHandlers() { 14 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundLevelParticlesPacket.class, HideParticlesPacketHandlers::processParticlesPacket); 15 | } 16 | 17 | public static ClientboundLevelParticlesPacket processParticlesPacket(DenizenNetworkManagerImpl networkManager, ClientboundLevelParticlesPacket particlesPacket) { 18 | if (HideParticles.hidden.isEmpty()) { 19 | return particlesPacket; 20 | } 21 | Set hidden = HideParticles.hidden.get(networkManager.player.getUUID()); 22 | if (hidden == null) { 23 | return particlesPacket; 24 | } 25 | Particle bukkitParticle = CraftParticle.minecraftToBukkit(particlesPacket.getParticle().getType()); 26 | if (hidden.contains(bukkitParticle)) { 27 | return null; 28 | } 29 | return particlesPacket; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/packets/PacketInResourcePackStatusImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInResourcePackStatus; 4 | import net.minecraft.network.protocol.common.ServerboundResourcePackPacket; 5 | 6 | public class PacketInResourcePackStatusImpl implements PacketInResourcePackStatus { 7 | 8 | private ServerboundResourcePackPacket internal; 9 | 10 | public PacketInResourcePackStatusImpl(ServerboundResourcePackPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public String getStatus() { 16 | return internal.action().name(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/impl/network/packets/PacketInSteerVehicleImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_20.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInSteerVehicle; 4 | import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; 5 | 6 | public class PacketInSteerVehicleImpl implements PacketInSteerVehicle { 7 | 8 | private ServerboundPlayerInputPacket internal; 9 | 10 | public PacketInSteerVehicleImpl(ServerboundPlayerInputPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public float getLeftwardInput() { 16 | return internal.getXxa(); 17 | } 18 | 19 | @Override 20 | public float getForwardInput() { 21 | return internal.getZza(); 22 | } 23 | 24 | @Override 25 | public boolean getJumpInput() { 26 | return internal.isJumping(); 27 | } 28 | 29 | @Override 30 | public boolean getDismountInput() { 31 | return internal.isShiftKeyDown(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/entities/CraftFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.FakeArrow; 4 | import net.minecraft.world.entity.projectile.AbstractArrow; 5 | import org.bukkit.craftbukkit.v1_21_R4.CraftServer; 6 | import org.bukkit.craftbukkit.v1_21_R4.entity.CraftAbstractArrow; 7 | 8 | public class CraftFakeArrowImpl extends CraftAbstractArrow implements FakeArrow { 9 | 10 | public CraftFakeArrowImpl(CraftServer craftServer, AbstractArrow entityArrow) { 11 | super(craftServer, entityArrow); 12 | } 13 | 14 | @Override 15 | public void remove() { 16 | if (getPassenger() != null) { 17 | return; 18 | } 19 | super.remove(); 20 | } 21 | 22 | @Override 23 | public String getEntityTypeName() { 24 | return "FAKE_ARROW"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/entities/EntityFakeArrowImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.entities; 2 | 3 | import com.denizenscript.denizen.nms.v1_21.Handler; 4 | import com.denizenscript.denizencore.utilities.debugging.Debug; 5 | import net.minecraft.world.entity.projectile.SpectralArrow; 6 | import net.minecraft.world.item.ItemStack; 7 | import net.minecraft.world.item.Items; 8 | import org.bukkit.Bukkit; 9 | import org.bukkit.Location; 10 | import org.bukkit.craftbukkit.v1_21_R4.CraftServer; 11 | import org.bukkit.craftbukkit.v1_21_R4.CraftWorld; 12 | import org.bukkit.event.entity.CreatureSpawnEvent; 13 | 14 | public class EntityFakeArrowImpl extends SpectralArrow { 15 | 16 | public EntityFakeArrowImpl(CraftWorld craftWorld, Location location) { 17 | super(net.minecraft.world.entity.EntityType.SPECTRAL_ARROW, craftWorld.getHandle()); 18 | try { 19 | Handler.ENTITY_BUKKITYENTITY.set(this, new CraftFakeArrowImpl((CraftServer) Bukkit.getServer(), this)); 20 | } 21 | catch (Exception ex) { 22 | Debug.echoError(ex); 23 | } 24 | setPosRaw(location.getX(), location.getY(), location.getZ()); 25 | setRot(location.getYaw(), location.getPitch()); 26 | level().addFreshEntity(this, CreatureSpawnEvent.SpawnReason.CUSTOM); 27 | } 28 | 29 | @Override 30 | public void tick() { 31 | // Do nothing 32 | } 33 | 34 | @Override 35 | protected ItemStack getPickupItem() { 36 | return new ItemStack(Items.ARROW); 37 | } 38 | 39 | @Override 40 | public CraftFakeArrowImpl getBukkitEntity() { 41 | return (CraftFakeArrowImpl) super.getBukkitEntity(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/fakes/FakeNetworkManagerImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.PacketFlow; 5 | 6 | import java.net.SocketAddress; 7 | 8 | public class FakeNetworkManagerImpl extends Connection { 9 | 10 | public FakeNetworkManagerImpl(PacketFlow enumprotocoldirection) { 11 | super(enumprotocoldirection); 12 | channel = new FakeChannelImpl(null); 13 | address = new SocketAddress() { 14 | }; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/fakes/FakePlayerConnectionImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.fakes; 2 | 3 | import net.minecraft.network.Connection; 4 | import net.minecraft.network.protocol.Packet; 5 | import net.minecraft.server.MinecraftServer; 6 | import net.minecraft.server.level.ServerPlayer; 7 | import net.minecraft.server.network.CommonListenerCookie; 8 | import net.minecraft.server.network.ServerGamePacketListenerImpl; 9 | 10 | public class FakePlayerConnectionImpl extends ServerGamePacketListenerImpl { 11 | 12 | public FakePlayerConnectionImpl(MinecraftServer minecraftserver, Connection networkmanager, ServerPlayer entityplayer, CommonListenerCookie cookie) { 13 | super(minecraftserver, networkmanager, entityplayer, cookie); 14 | } 15 | 16 | @Override 17 | public void send(Packet packet) { 18 | // Do nothing 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/handlers/packet/BlockLightPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.handlers.packet; 2 | 3 | import com.denizenscript.denizen.nms.abstracts.BlockLight; 4 | import com.denizenscript.denizen.nms.v1_21.impl.blocks.BlockLightImpl; 5 | import com.denizenscript.denizen.nms.v1_21.impl.network.handlers.DenizenNetworkManagerImpl; 6 | import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket; 7 | import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket; 8 | 9 | public class BlockLightPacketHandlers { 10 | 11 | public static void registerHandlers() { 12 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundLightUpdatePacket.class, BlockLightPacketHandlers::processLightUpdatePacket); 13 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundBlockUpdatePacket.class, BlockLightPacketHandlers::processBlockUpdatePacket); 14 | } 15 | 16 | public static void processLightUpdatePacket(DenizenNetworkManagerImpl networkManager, ClientboundLightUpdatePacket lightUpdatePacket) { 17 | if (!BlockLight.lightsByChunk.isEmpty()) { 18 | BlockLightImpl.checkIfLightsBrokenByPacket(lightUpdatePacket, networkManager.player.level()); 19 | } 20 | } 21 | 22 | public static void processBlockUpdatePacket(DenizenNetworkManagerImpl networkManager, ClientboundBlockUpdatePacket blockUpdatePacket) { 23 | if (!BlockLight.lightsByChunk.isEmpty()) { 24 | BlockLightImpl.checkIfLightsBrokenByPacket(blockUpdatePacket, networkManager.player.level()); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/handlers/packet/FakePlayerPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.handlers.packet; 2 | 3 | /* 4 | import com.denizenscript.denizen.nms.NMSHandler; 5 | import com.denizenscript.denizen.nms.v1_20.impl.entities.EntityFakePlayerImpl; 6 | import com.denizenscript.denizen.nms.v1_20.impl.network.handlers.DenizenNetworkManagerImpl; 7 | import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; 8 | import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; 9 | import org.bukkit.Bukkit; 10 | 11 | import java.util.List; 12 | */ 13 | 14 | public class FakePlayerPacketHandlers { 15 | 16 | public static void registerHandlers() { 17 | // TODO: 1.20.2: Replace this. 18 | //DenizenNetworkManagerImpl.registerPacketHandler(ClientboundAddPlayerPacket.class, FakePlayerPacketHandlers::processAddPlayerPacket); 19 | } 20 | 21 | /* 22 | public static void processAddPlayerPacket(DenizenNetworkManagerImpl networkManager, ClientboundAddPlayerPacket addPlayerPacket) { 23 | if (networkManager.player.level().getEntity(addPlayerPacket.getEntityId()) instanceof EntityFakePlayerImpl fakePlayer) { 24 | networkManager.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.ADD_PLAYER, fakePlayer)); 25 | Bukkit.getScheduler().runTaskLater(NMSHandler.getJavaPlugin(), 26 | () -> networkManager.send(new ClientboundPlayerInfoRemovePacket(List.of(fakePlayer.getUUID()))), 5); 27 | } 28 | }*/ 29 | } 30 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/handlers/packet/HideParticlesPacketHandlers.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.handlers.packet; 2 | 3 | import com.denizenscript.denizen.nms.v1_21.impl.network.handlers.DenizenNetworkManagerImpl; 4 | import com.denizenscript.denizen.utilities.packets.HideParticles; 5 | import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket; 6 | import org.bukkit.Particle; 7 | import org.bukkit.craftbukkit.v1_21_R4.CraftParticle; 8 | 9 | import java.util.Set; 10 | 11 | public class HideParticlesPacketHandlers { 12 | 13 | public static void registerHandlers() { 14 | DenizenNetworkManagerImpl.registerPacketHandler(ClientboundLevelParticlesPacket.class, HideParticlesPacketHandlers::processParticlesPacket); 15 | } 16 | 17 | public static ClientboundLevelParticlesPacket processParticlesPacket(DenizenNetworkManagerImpl networkManager, ClientboundLevelParticlesPacket particlesPacket) { 18 | if (HideParticles.hidden.isEmpty()) { 19 | return particlesPacket; 20 | } 21 | Set hidden = HideParticles.hidden.get(networkManager.player.getUUID()); 22 | if (hidden == null) { 23 | return particlesPacket; 24 | } 25 | Particle bukkitParticle = CraftParticle.minecraftToBukkit(particlesPacket.getParticle().getType()); 26 | if (hidden.contains(bukkitParticle)) { 27 | return null; 28 | } 29 | return particlesPacket; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/packets/PacketInResourcePackStatusImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInResourcePackStatus; 4 | import net.minecraft.network.protocol.common.ServerboundResourcePackPacket; 5 | 6 | public class PacketInResourcePackStatusImpl implements PacketInResourcePackStatus { 7 | 8 | private ServerboundResourcePackPacket internal; 9 | 10 | public PacketInResourcePackStatusImpl(ServerboundResourcePackPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public String getStatus() { 16 | return internal.action().name(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/impl/network/packets/PacketInSteerVehicleImpl.java: -------------------------------------------------------------------------------- 1 | package com.denizenscript.denizen.nms.v1_21.impl.network.packets; 2 | 3 | import com.denizenscript.denizen.nms.interfaces.packets.PacketInSteerVehicle; 4 | import net.minecraft.network.protocol.game.ServerboundPlayerInputPacket; 5 | 6 | public class PacketInSteerVehicleImpl implements PacketInSteerVehicle { 7 | 8 | private ServerboundPlayerInputPacket internal; 9 | 10 | public PacketInSteerVehicleImpl(ServerboundPlayerInputPacket internal) { 11 | this.internal = internal; 12 | } 13 | 14 | @Override 15 | public float getLeftwardInput() { 16 | return internal.input().left() ? 1 : 0; 17 | } 18 | 19 | @Override 20 | public float getForwardInput() { 21 | return internal.input().forward() ? 1 : 0; 22 | } 23 | 24 | @Override 25 | public boolean getJumpInput() { 26 | return internal.input().jump(); 27 | } 28 | 29 | @Override 30 | public boolean getDismountInput() { 31 | return internal.input().shift(); 32 | } 33 | } 34 | --------------------------------------------------------------------------------