├── net └── craftventure │ ├── core │ ├── script │ │ ├── fountain │ │ │ └── package-info.java │ │ ├── ScriptControllerException.kt │ │ ├── particle │ │ │ └── ParticleMap.kt │ │ ├── fixture │ │ │ ├── Location.kt │ │ │ ├── fountain │ │ │ │ ├── Shooter.kt │ │ │ │ ├── OarsmanJet.kt │ │ │ │ ├── Bloom.kt │ │ │ │ └── LillyJet.kt │ │ │ └── property │ │ │ │ └── ObjectProperty.kt │ │ ├── action │ │ │ └── ScriptActionFrame.kt │ │ ├── timeline │ │ │ └── KeyFrame.kt │ │ ├── ScriptFrameMap.kt │ │ ├── armature │ │ │ └── ArmatureConfig.kt │ │ └── Script.kt │ ├── ktx │ │ ├── service │ │ │ ├── LoadService.kt │ │ │ ├── EnableService.kt │ │ │ └── CoreLoadService.kt │ │ ├── logging │ │ │ └── package-info.java │ │ ├── extension │ │ │ ├── CharExtensions.kt │ │ │ ├── ListExtensions.kt │ │ │ ├── LocaleExtensions.kt │ │ │ ├── OptionalExtensions.kt │ │ │ ├── DurationExtension.kt │ │ │ ├── RangeExtensions.kt │ │ │ ├── RandomExtensions.kt │ │ │ ├── DateExtensions.kt │ │ │ ├── DomExtensions.kt │ │ │ ├── MathExtensions.kt │ │ │ ├── IntegerExtensions.kt │ │ │ ├── UuidExtensions.kt │ │ │ └── ArrayExtensions.kt │ │ ├── util │ │ │ ├── BookUtils.kt │ │ │ ├── ColorUtils.kt │ │ │ ├── TimeUtils.kt │ │ │ ├── TracerUtils.kt │ │ │ ├── FileUtils.kt │ │ │ ├── BitFlags.kt │ │ │ └── Permissions.kt │ │ ├── concurrency │ │ │ ├── CoreDispatchers.kt │ │ │ ├── ThreadHelpers.kt │ │ │ └── CvExecutors.kt │ │ ├── data │ │ │ └── network │ │ │ │ └── HttpClientManager.kt │ │ └── json │ │ │ └── SerializeNulls.kt │ ├── npc │ │ ├── tracker │ │ │ ├── FullyManualNpcTracker.kt │ │ │ └── ManualNpcTracker.kt │ │ ├── json │ │ │ ├── JsonFloatConverter.kt │ │ │ ├── JsonBooleanConverter.kt │ │ │ ├── JsonPoseConverter.kt │ │ │ ├── JsonIntegerConverter.kt │ │ │ ├── JsonRotationsConverter.kt │ │ │ ├── JsonChatComponentConverter.kt │ │ │ └── JsonOptionalChatComponentConverter.kt │ │ └── actor │ │ │ ├── ActorFrame.kt │ │ │ └── action │ │ │ └── ActionDoubleSetting.kt │ ├── feature │ │ ├── minigame │ │ │ ├── Level.kt │ │ │ ├── autopia │ │ │ │ ├── AutopiaTrack.kt │ │ │ │ └── AutopiaTrackPoint.kt │ │ │ ├── lasergame │ │ │ │ ├── LaserGameTeamMode.kt │ │ │ │ ├── LaserGameArenaExtension.kt │ │ │ │ ├── LaserGameTeam.kt │ │ │ │ ├── LaserGameArenaMode.kt │ │ │ │ ├── EquippedLaserGameItem.kt │ │ │ │ ├── projectile │ │ │ │ │ └── LaserGameProjectile.kt │ │ │ │ ├── turret │ │ │ │ │ ├── LaserGameTurretType.kt │ │ │ │ │ └── LaserGameTurret.kt │ │ │ │ └── gun │ │ │ │ │ ├── LaserGameGunType.kt │ │ │ │ │ └── BaseLaserGun.kt │ │ │ ├── mobarena │ │ │ │ ├── MobArenaPlayer.kt │ │ │ │ └── MobArenaLevel.kt │ │ │ ├── gonbao │ │ │ │ ├── GonBaoLevel.kt │ │ │ │ └── GonBaoPlayer.kt │ │ │ ├── SpawnLocation.kt │ │ │ ├── jumpchallenge │ │ │ │ ├── JumpChallengeLevel.kt │ │ │ │ └── JumpChallengePlayer.kt │ │ │ ├── BaseMinigameLevel.kt │ │ │ └── beerbrawl │ │ │ │ └── BeerBrawlLevel.kt │ │ ├── kart │ │ │ ├── KartRespawnData.kt │ │ │ ├── actions │ │ │ │ ├── ExitHandler.kt │ │ │ │ ├── StopNbsSongAction.kt │ │ │ │ ├── ExitToSafeLocation.kt │ │ │ │ └── ExitNonVipToNearestWarp.kt │ │ │ ├── KartAction.kt │ │ │ ├── inputcontroller │ │ │ │ └── KartController.kt │ │ │ ├── KartOwner.kt │ │ │ ├── config │ │ │ │ ├── KartColorConfig.kt │ │ │ │ ├── KartExitAction.kt │ │ │ │ └── KartSteer.kt │ │ │ ├── KartSeat.kt │ │ │ └── KartNpc.kt │ │ ├── instrument │ │ │ └── InstrumentType.kt │ │ ├── jumppuzzle │ │ │ ├── JumpPuzzleCheckPoint.kt │ │ │ └── JumpPuzzlePlayer.kt │ │ ├── shop │ │ │ ├── ShopBalloonHolder.kt │ │ │ ├── dto │ │ │ │ ├── NpcFileShopKeeperDto.kt │ │ │ │ ├── ShopPresenterBalloonDto.kt │ │ │ │ ├── ShopPresenterBalloonHolderDto.kt │ │ │ │ ├── ShopItemDto.kt │ │ │ │ └── ShopPresenterDto.kt │ │ │ └── ShopBalloonDisplay.kt │ │ └── balloon │ │ │ ├── types │ │ │ └── Balloon.kt │ │ │ ├── holders │ │ │ ├── StaticLocationHolder.kt │ │ │ ├── BalloonHolder.kt │ │ │ └── NpcEntityHolder.kt │ │ │ ├── physics │ │ │ └── BalloonPhysics.kt │ │ │ └── extensions │ │ │ └── DebugExtension.kt │ ├── animation │ │ ├── keyframed │ │ │ ├── SimpleKeyFrame.kt │ │ │ ├── IntValueKeyFrame.kt │ │ │ ├── LongValueKeyFrame.kt │ │ │ ├── BooleanValueKeyFrame.kt │ │ │ └── DoubleValueKeyFrame.kt │ │ ├── TranslationCurve.kt │ │ ├── armature │ │ │ ├── WrappedJoint.kt │ │ │ └── JointKeyFrame.kt │ │ ├── model │ │ │ └── package-info.java │ │ ├── Door.kt │ │ └── IndexedIterationList.kt │ ├── ride │ │ ├── tracklessride │ │ │ ├── property │ │ │ │ ├── Property.kt │ │ │ │ ├── BooleanProperty.kt │ │ │ │ ├── DoublePropertyAnimator.kt │ │ │ │ └── DoubleProperty.kt │ │ │ ├── programpart │ │ │ │ ├── data │ │ │ │ │ ├── MoveType.kt │ │ │ │ │ ├── NavigationType.kt │ │ │ │ │ ├── TargetType.kt │ │ │ │ │ ├── MatchContext.kt │ │ │ │ │ ├── ConditionType.kt │ │ │ │ │ ├── TagContext.kt │ │ │ │ │ ├── DoubleSettingValueType.kt │ │ │ │ │ ├── PropertyTargetType.kt │ │ │ │ │ └── ProgramPartData.kt │ │ │ │ └── action │ │ │ │ │ ├── ActionData.kt │ │ │ │ │ └── Action.kt │ │ │ ├── navigation │ │ │ │ ├── Scorer.kt │ │ │ │ ├── DistanceScorer.kt │ │ │ │ ├── PathPosition.kt │ │ │ │ ├── LengthScorer.kt │ │ │ │ ├── GraphNodeConnection.kt │ │ │ │ └── RouteNode.kt │ │ │ ├── transport │ │ │ │ └── car │ │ │ │ │ ├── CarConfig.kt │ │ │ │ │ └── CarFactory.kt │ │ │ ├── scene │ │ │ │ ├── trigger │ │ │ │ │ └── SceneTriggerData.kt │ │ │ │ ├── SceneData.kt │ │ │ │ └── TracklessDefaultScene.kt │ │ │ ├── TagContainer.kt │ │ │ └── track │ │ │ │ └── PathPart.kt │ │ ├── trackedride │ │ │ ├── segment │ │ │ │ ├── OperableDependentSegment.kt │ │ │ │ └── OperableTrackSegment.kt │ │ │ ├── config │ │ │ │ └── SceneSettings.kt │ │ │ ├── RideTrainJson.kt │ │ │ ├── train │ │ │ │ └── CoasterRideTrainJson.kt │ │ │ ├── CoasterMathUtils.kt │ │ │ ├── car │ │ │ │ └── DynamicSeatedRideCarJson.kt │ │ │ └── TrackSegmentExtensions.kt │ │ ├── operator │ │ │ ├── CameraInfo.kt │ │ │ └── controls │ │ │ │ └── ControlColors.kt │ │ ├── shooter │ │ │ ├── config │ │ │ │ ├── ShooterParticleConfig.kt │ │ │ │ ├── ShooterSceneIdleEntityConfig.kt │ │ │ │ ├── ShooterConfig.kt │ │ │ │ ├── ShooterSceneConfig.kt │ │ │ │ └── ShooterSceneEntityConfig.kt │ │ │ ├── ShooterEntity.kt │ │ │ ├── ShooterParticlePathFactory.kt │ │ │ └── hitaction │ │ │ │ └── EntityHitAction.kt │ │ ├── RideInstance.kt │ │ └── RideManager.kt │ ├── utils │ │ ├── SimpleInterpolator.java │ │ ├── TimeSpan.kt │ │ ├── InterpolationUtils.kt │ │ ├── SmoothCoastersHelper.kt │ │ ├── MapUtil.java │ │ ├── WorldEditUtils.kt │ │ ├── LinePointCalculator.kt │ │ ├── LocationUtil.kt │ │ ├── EmojiHelper.kt │ │ └── GameTimeUtils.kt │ ├── config │ │ ├── ItemPackageList.kt │ │ ├── ItemPackageItem.kt │ │ ├── ItemPackage.kt │ │ ├── CraftventureAreasReloadedEvent.kt │ │ ├── CraftventureConfigReloadedEvent.kt │ │ └── BorderConfig.kt │ ├── map │ │ ├── renderer │ │ │ ├── InteractableRenderer.kt │ │ │ └── MapTask.kt │ │ └── fonts │ │ │ └── MinguaranaFont.kt │ ├── protocol │ │ └── packet │ │ │ └── AbstractPacket.java │ ├── command │ │ └── AnnotatableCommand.kt │ ├── effect │ │ ├── SimpleEffect.kt │ │ └── EffectManager.kt │ ├── extension │ │ ├── CommandSenderExtensions.kt │ │ ├── UuidExtensions.kt │ │ └── MathExtensions.kt │ ├── database │ │ ├── model │ │ │ └── ownable │ │ │ │ ├── PredecessorItem.kt │ │ │ │ └── PredecessorRideCount.kt │ │ └── metadata │ │ │ └── itemuse │ │ │ ├── FartItemUseEffect.kt │ │ │ ├── SendChatItemUseEffect.kt │ │ │ ├── AchievementRewardItemUseEffect.kt │ │ │ ├── SoundItemUseEffect.kt │ │ │ ├── AchievementIncrementItemUseEffect.kt │ │ │ ├── ItemUseEffect.kt │ │ │ └── ClearPotionItemUseEffect.kt │ ├── listener │ │ ├── GameModeChangeListener.kt │ │ ├── FallingBlockLandListener.kt │ │ └── InfiniteDispensers.kt │ ├── async │ │ ├── CvDispatchers.kt │ │ └── AsyncTask.kt │ ├── metadata │ │ └── TickingBaseMetadata.kt │ ├── serverevent │ │ ├── ScriptStopEvent.kt │ │ ├── ScriptLoadedEvent.kt │ │ ├── ScriptStartEvent.kt │ │ ├── ScriptUnloadedEvent.kt │ │ ├── BankAccountUpdateEvent.kt │ │ ├── PlayerEquippedItemsUpdateEvent.kt │ │ ├── KartStartEvent.kt │ │ ├── PlayerStuckEvent.kt │ │ └── AfkStatusChangeEvent.kt │ ├── task │ │ └── EurosatBotTask.kt │ └── manager │ │ ├── ProjectileEvents.kt │ │ └── GrantResult.kt │ ├── database │ ├── bukkit │ │ └── extensions │ │ │ ├── OwnableItemExtensions.kt │ │ │ ├── RideExtensions.kt │ │ │ ├── RideStateExtensions.kt │ │ │ ├── ProtectionExtensions.kt │ │ │ ├── RideLinkExtensions.kt │ │ │ ├── CoinBoosterExtensions.kt │ │ │ ├── BankAccountTypeExtensions.kt │ │ │ ├── GuestStatRepositoryExtensions.kt │ │ │ └── PlayerEquippedItemRepositoryExtensions.kt │ ├── MainRepositoryProvider.kt │ ├── extension │ │ ├── QueryExtensions.kt │ │ ├── PlayerEquippedItemExtensions.kt │ │ ├── EmojiExtensions.kt │ │ ├── PlayerTimezoneExtensions.kt │ │ └── PlayerLocaleExtensions.kt │ ├── type │ │ ├── MailType.kt │ │ ├── MinigameScoreType.kt │ │ ├── CoinBoosterType.kt │ │ ├── OperatorKind.kt │ │ ├── RideLogState.kt │ │ ├── ServerTypeType.kt │ │ ├── ServerPublicityType.kt │ │ ├── AchievementType.kt │ │ ├── BalloonParticleType.kt │ │ ├── AchievementCategoryType.kt │ │ ├── SlotMachineRewardType.kt │ │ ├── TransactionType.kt │ │ ├── ConsumableType.kt │ │ └── RideType.kt │ ├── repository │ │ ├── BaseDaoRepository.kt │ │ ├── EmojiRepository.kt │ │ ├── RealmRepository.kt │ │ ├── ConfigRepository.kt │ │ ├── ShopRepository.kt │ │ ├── StoreRepository.kt │ │ ├── TitleRepository.kt │ │ ├── ServerRepository.kt │ │ ├── OwnableItemRepository.kt │ │ ├── TebexPackageRepository.kt │ │ ├── AchievementRepository.kt │ │ ├── CoinBoosterRepository.kt │ │ ├── ItemStackDataRepository.kt │ │ ├── CachedGameProfileRepository.kt │ │ ├── SlotMachineItemsRepository.kt │ │ ├── DonationRepository.kt │ │ ├── TeamScoreMemberRepository.kt │ │ ├── RideLinkRepository.kt │ │ └── ShopOfferRepository.kt │ └── converter │ │ └── UuidBinaryConverter.kt │ ├── audioserver │ ├── config │ │ ├── AreaType.kt │ │ ├── RepeatType.kt │ │ ├── PlayerState.kt │ │ ├── AreaPartCorner.kt │ │ ├── Resource.kt │ │ ├── AudioMapOverlay.kt │ │ ├── AreaFilter.kt │ │ └── AudioMarker.kt │ ├── ProtocolConfig.kt │ ├── packet │ │ ├── PacketReload.kt │ │ ├── PacketKick.kt │ │ ├── AudioPacketPoint.kt │ │ ├── PacketDisplayAreaEnter.kt │ │ ├── PacketKeyValue.kt │ │ ├── PacketOperatorSlotUpdate.kt │ │ ├── PacketPing.kt │ │ ├── PacketMarkerRemove.kt │ │ ├── PacketPolygonOverlayRemove.kt │ │ ├── PacketAreaRemove.kt │ │ ├── PacketMapLayersRemove.kt │ │ ├── PacketSync.kt │ │ ├── PacketAreaState.kt │ │ ├── PacketSpatialAudioRemove.kt │ │ ├── AudioPacketArea.kt │ │ ├── PacketLocationUpdate.kt │ │ ├── PacketLogin.kt │ │ ├── PacketOperatorControlUpdate.kt │ │ ├── PacketVolume.kt │ │ ├── PacketOperatorControlClick.kt │ │ ├── PacketClientAccept.kt │ │ ├── PacketOperatorRideUpdate.kt │ │ ├── PacketParkPhoto.kt │ │ ├── PacketSpatialAudioDefinition.kt │ │ └── PacketPlayerList.kt │ ├── extensions │ │ └── AudioExtensions.kt │ ├── Server.kt │ └── event │ │ ├── AudioServerDisconnectedEvent.kt │ │ └── AudioServerConnectedEvent.kt │ ├── bukkit │ └── ktx │ │ ├── util │ │ ├── EntityConstants.kt │ │ ├── ListUtils.kt │ │ ├── TitleUtils.kt │ │ ├── BukkitLogger.kt │ │ └── CraftventureDatapackItems.kt │ │ ├── plugin │ │ ├── Environment.java │ │ └── PluginState.java │ │ ├── extension │ │ ├── ArmorStandExtensions.kt │ │ ├── ByteArrayExtensions.kt │ │ ├── MapCanvasExtensions.kt │ │ ├── UuidExtensions.kt │ │ ├── RegistryExtensions.kt │ │ ├── BoundingBoxExtensions.kt │ │ ├── ItemMetaExtensions.kt │ │ ├── InventoryExtensions.kt │ │ ├── EntityEquipmentExtensions.kt │ │ ├── SynchedEntityDataExtensions.kt │ │ ├── StringExtensions2.kt │ │ ├── AxisAlignedBBExtensions.kt │ │ ├── CommandContextExtensions.kt │ │ ├── EntityExtensions.kt │ │ ├── SynchedEntityData.kt │ │ ├── ComponentBuilderExtensions.kt │ │ └── PlayerExtension.kt │ │ ├── entitymeta │ │ ├── BaseEntityMetadata.kt │ │ ├── BaseMetadata.kt │ │ └── MetaListener.kt │ │ ├── manager │ │ ├── WorldBorderManager.kt │ │ └── EmojiLoader.kt │ │ ├── json │ │ ├── PotionEffectTypeAdapter.kt │ │ ├── ColorAdapter.kt │ │ └── VectorAdapter.kt │ │ └── event │ │ ├── FeatureToggledEvent.kt │ │ └── AsyncPlayerLocationChangedEvent.kt │ ├── chat │ └── bungee │ │ ├── util │ │ ├── DurationUtils.kt │ │ ├── ChatSpan.kt │ │ └── ChatHelpers.kt │ │ ├── extension │ │ ├── ChatColorExtensions.kt │ │ └── StringExtensions.kt │ │ └── span │ │ ├── CurseWordChatSpan.kt │ │ ├── PlayerTagSpan.kt │ │ └── UrlChatSpan.kt │ ├── temporary │ ├── SlotMachineItemExtensions.kt │ ├── PlayerOwnedItemExtensions.kt │ ├── MinigameScoreListener.kt │ └── TeamScoreListener.kt │ └── jsontools │ └── PolymorphicHint.kt └── readme.txt /net/craftventure/core/script/fountain/package-info.java: -------------------------------------------------------------------------------- 1 | @Deprecated 2 | package net.craftventure.core.script.fountain; -------------------------------------------------------------------------------- /net/craftventure/core/ktx/service/LoadService.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.service 2 | 3 | interface LoadService { 4 | fun init() 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/service/EnableService.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.service 2 | 3 | interface EnableService { 4 | fun init() 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/npc/tracker/FullyManualNpcTracker.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.tracker 2 | 3 | class FullyManualNpcTracker : NpcEntityTracker() -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/Level.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame 2 | 3 | interface Level { 4 | val maxSupportedPlayers: Int 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/animation/keyframed/SimpleKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.keyframed 2 | 3 | abstract class SimpleKeyFrame(val time: Double) -------------------------------------------------------------------------------- /net/craftventure/core/ktx/logging/package-info.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.logging; 2 | 3 | // Custom version of https://github.com/square/logcat basically -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/OwnableItemExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | // TODO: Migrate extensions to here -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/AreaType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | enum class AreaType { 4 | DEFAULT, RIDE, AMBIENT, SHOW 5 | } 6 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/RepeatType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | enum class RepeatType { 4 | REPEAT_SEQUENCE, PLAY_ONCE 5 | } 6 | -------------------------------------------------------------------------------- /net/craftventure/core/animation/TranslationCurve.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation 2 | 3 | interface TranslationCurve { 4 | fun translate(t: T): R 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/CharExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | fun Char.escapeUnicode() = "\\u${String.format("%04X", this.code)}" -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/property/Property.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.property 2 | 3 | interface Property { 4 | val id: String 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/autopia/AutopiaTrack.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.autopia 2 | 3 | data class AutopiaTrack(val points: List) -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/MoveType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class MoveType { 4 | SPEED 5 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/util/EntityConstants.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.util 2 | 3 | object EntityConstants { 4 | const val ArmorStandHeadOffset = 23.0 / 16.0 5 | 6 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/KartRespawnData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart 2 | 3 | import org.bukkit.util.Vector 4 | 5 | data class KartRespawnData(val location: Vector) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/plugin/Environment.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.plugin; 2 | 3 | public enum Environment { 4 | PRODUCTION, 5 | STAGING, 6 | DEVELOPMENT 7 | } 8 | -------------------------------------------------------------------------------- /net/craftventure/core/animation/keyframed/IntValueKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.keyframed 2 | 3 | class IntValueKeyFrame(time: Double, val value: Int) : SimpleKeyFrame(time) -------------------------------------------------------------------------------- /net/craftventure/core/animation/keyframed/LongValueKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.keyframed 2 | 3 | class LongValueKeyFrame(time: Double, val value: Long) : SimpleKeyFrame(time) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/LaserGameTeamMode.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame 2 | 3 | enum class LaserGameTeamMode { 4 | FFA, 5 | TEAMS 6 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/NavigationType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class NavigationType { 4 | TO_NODE 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/TargetType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class TargetType { 4 | CAR, 5 | GROUP 6 | } -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/util/DurationUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.util 2 | 3 | object DurationUtils { 4 | fun ofSecondsToTicks(seconds: Double): Int = (seconds * 20).toInt() 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/animation/keyframed/BooleanValueKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.keyframed 2 | 3 | class BooleanValueKeyFrame(time: Double, val value: Boolean) : SimpleKeyFrame(time) -------------------------------------------------------------------------------- /net/craftventure/core/animation/keyframed/DoubleValueKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.keyframed 2 | 3 | class DoubleValueKeyFrame(time: Double, val value: Double) : SimpleKeyFrame(time) -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/MatchContext.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class MatchContext { 4 | CAR, 5 | GROUP 6 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/ProtocolConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver 2 | 3 | object ProtocolConfig { 4 | val VERSION = 14 5 | val MIN_VERSION = 13 6 | val MAX_VERSION = 14 7 | } 8 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/PlayerState.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | enum class PlayerState { 4 | WALKING, 5 | IN_VEHICLE, 6 | ALWAYS, 7 | SPECTATING 8 | } 9 | -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/extension/ChatColorExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.extension 2 | 3 | operator fun net.md_5.bungee.api.ChatColor.plus(value: String?): String = toString() + value -------------------------------------------------------------------------------- /net/craftventure/core/feature/instrument/InstrumentType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.instrument 2 | 3 | enum class InstrumentType( 4 | val displayName: String, 5 | ) { 6 | Piano("Piano"), 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/segment/OperableDependentSegment.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride.segment 2 | 3 | interface OperableDependentSegment { 4 | fun onOperatorsChanged() 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/Scorer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | interface Scorer { 4 | fun score(from: GraphNode, to: GraphNode): Double 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/ScriptControllerException.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script 2 | 3 | class ScriptControllerException(message: String?, cause: Throwable?) : IllegalStateException(message, cause) -------------------------------------------------------------------------------- /net/craftventure/core/utils/SimpleInterpolator.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils; 2 | 3 | public interface SimpleInterpolator { 4 | double interpolate(double t, double b, double c, double d); 5 | } 6 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/LaserGameArenaExtension.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame 2 | 3 | interface LaserGameArenaExtension { 4 | fun update(game: LaserGame) 5 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/ConditionType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class ConditionType { 4 | IS_SET, 5 | IS_NOT_SET 6 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/util/ListUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.util 2 | 3 | import kotlin.contracts.ExperimentalContracts 4 | import kotlin.contracts.contract 5 | 6 | 7 | // Copied from some Android library -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/util/TitleUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.util 2 | 3 | import java.time.Duration 4 | 5 | object TitleUtils { 6 | fun durationOfTicks(ticks: Int) = Duration.ofMillis(50L * ticks) 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/TagContext.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class TagContext { 4 | CAR, 5 | GROUP, 6 | SCENE, 7 | GLOBAL 8 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketReload.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketReload : BasePacket(PacketID.RELOAD) -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/DoubleSettingValueType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class DoubleSettingValueType { 4 | ABSOLUTE, 5 | RELATIVE 6 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/LaserGameTeam.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame 2 | 3 | import org.bukkit.Color 4 | 5 | class LaserGameTeam( 6 | val id: String, 7 | val color: Color 8 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ride/operator/CameraInfo.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.operator 2 | 3 | import org.bukkit.Location 4 | 5 | class CameraInfo( 6 | val id: String, 7 | val name: String, 8 | val location: Location, 9 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/PropertyTargetType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | enum class PropertyTargetType { 4 | CAR, 5 | GROUP, 6 | CARS_IN_GROUP 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/property/BooleanProperty.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.property 2 | 3 | open class BooleanProperty( 4 | override val id: String, 5 | var value: Boolean 6 | ) : Property -------------------------------------------------------------------------------- /net/craftventure/core/config/ItemPackageList.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import com.google.gson.annotations.Expose 4 | 5 | data class ItemPackageList( 6 | @Expose 7 | val packages: List = listOf() 8 | ) 9 | -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/BookUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | object BookUtils { 4 | val PAGE_WIDTH = 114 5 | val PAGE_LINES = 14 6 | 7 | fun textWidth(word: String): Int = GlyphSizes.calculateWidth(word) 8 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/ColorUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | // Parts taken from https://android.googlesource.com/platform/frameworks/base/+/0fd833a/graphics/java/android/graphics/Color.java 4 | 5 | object ColorUtils { 6 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/ListExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | inline fun List.forEachAllocationless(crossinline run: (T) -> Unit) { 4 | for (i in 0 until size) { 5 | run.invoke(get(i)) 6 | } 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/map/renderer/InteractableRenderer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.map.renderer 2 | 3 | import org.bukkit.entity.Player 4 | 5 | interface InteractableRenderer { 6 | fun interact(player: Player, mapId: Int, x: Double, y: Double) 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/map/renderer/MapTask.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.map.renderer 2 | 3 | interface MapTask { 4 | fun isRunning(): Boolean 5 | 6 | @Throws(IllegalStateException::class) 7 | fun start(renderer: T) 8 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/concurrency/CoreDispatchers.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.concurrency 2 | 3 | import kotlinx.coroutines.asCoroutineDispatcher 4 | 5 | object CoreDispatchers { 6 | val Executor = CvExecutors.executor.asCoroutineDispatcher() 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/protocol/packet/AbstractPacket.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.protocol.packet; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | 6 | public abstract class AbstractPacket { 7 | public abstract void sendPlayer(Player player); 8 | } 9 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/action/ActionData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.action 2 | 3 | abstract class ActionData { 4 | // lateinit var type: String 5 | 6 | abstract fun toAction(): Action 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/transport/car/CarConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.transport.car 2 | 3 | import java.io.File 4 | 5 | abstract class CarConfig { 6 | abstract fun createFactory(directory: File): CarFactory 7 | } -------------------------------------------------------------------------------- /net/craftventure/database/MainRepositoryProvider.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database 2 | 3 | object MainRepositoryProvider : RepositoryProvider by MainRepositoryHolder.provider 4 | object MainRepositoryHolder { 5 | lateinit var provider: RepositoryProvider 6 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/plugin/PluginState.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.plugin; 2 | 3 | public enum PluginState { 4 | UNKNOWN, 5 | LOADING, 6 | LOADED, 7 | ENABLING, 8 | ENABLED, 9 | DISABLING, 10 | DISABLED 11 | } 12 | -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/TimeUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | object TimeUtils { 4 | @JvmStatic 5 | fun secondsFromNow(seconds: Double): Long { 6 | return System.currentTimeMillis() + (1000 * seconds).toLong() 7 | } 8 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketKick.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketKick( 7 | var message: String? = null 8 | ) : BasePacket(PacketID.KICK) 9 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/config/ShooterParticleConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | data class ShooterParticleConfig( 7 | val file: String, 8 | ) -------------------------------------------------------------------------------- /net/craftventure/core/script/particle/ParticleMap.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.particle 2 | 3 | import com.google.gson.annotations.Expose 4 | import java.util.* 5 | 6 | class ParticleMap { 7 | @Expose 8 | val paths: List = LinkedList() 9 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/AudioPacketPoint.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class AudioPacketPoint( 8 | var x: Double, 9 | var y: Double, 10 | ) -------------------------------------------------------------------------------- /net/craftventure/core/command/AnnotatableCommand.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.command 2 | 3 | interface AnnotatableCommand { 4 | fun isAnnotatable(command: List): AnnotationType 5 | 6 | enum class AnnotationType { 7 | VALID, INVALID, FORBIDDEN 8 | } 9 | } -------------------------------------------------------------------------------- /net/craftventure/core/config/ItemPackageItem.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import com.google.gson.annotations.Expose 4 | 5 | data class ItemPackageItem( 6 | @Expose 7 | val id: String? = null, 8 | @Expose 9 | val amount: Int = 1 10 | ) 11 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/config/SceneSettings.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class SceneSettings { 7 | var items: List = ArrayList() 8 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/actions/ExitHandler.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.actions 2 | 3 | import net.craftventure.core.feature.kart.Kart 4 | import org.bukkit.entity.Player 5 | 6 | fun interface ExitHandler { 7 | fun onExit(kart: Kart, player: Player) 8 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/ArmorStandExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.entity.ArmorStand 4 | import org.bukkit.inventory.EquipmentSlot 5 | 6 | fun ArmorStand.disableManipulations() { 7 | addDisabledSlots(EquipmentSlot.HEAD) 8 | } -------------------------------------------------------------------------------- /net/craftventure/core/effect/SimpleEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.effect 2 | 3 | 4 | interface SimpleEffect { 5 | val name: String 6 | 7 | fun isPlaying(): Boolean 8 | 9 | fun isStoppable(): Boolean 10 | 11 | fun play() 12 | 13 | fun stop() 14 | } 15 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/RideTrainJson.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride 2 | 3 | abstract class RideTrainJson { 4 | lateinit var spawnSegmentId: String 5 | var spawnDistance: Double = 0.0 6 | 7 | abstract fun create(ride: TrackedRide): RideTrain 8 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/Location.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture 2 | 3 | import org.bukkit.util.Vector 4 | 5 | data class Location( 6 | var x: Double, 7 | var y: Double, 8 | var z: Double 9 | ) { 10 | fun toVector() = Vector(x, y, z) 11 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/AreaPartCorner.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class AreaPartCorner( 7 | val x: Double, 8 | val y: Double, 9 | val z: Double 10 | ) 11 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/jumppuzzle/JumpPuzzleCheckPoint.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.jumppuzzle 2 | 3 | interface JumpPuzzleCheckPoint { 4 | fun getOrder(): Int 5 | 6 | fun shouldUnlock(player: JumpPuzzlePlayer): Boolean 7 | 8 | fun onUsed(player: JumpPuzzlePlayer) 9 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/TimeSpan.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import java.util.concurrent.TimeUnit 4 | 5 | data class TimeSpan(val value: Long, val timeUnit: TimeUnit) { 6 | fun toMillis() = timeUnit.toMillis(value) 7 | fun toSeconds() = timeUnit.toSeconds(value) 8 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketDisplayAreaEnter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketDisplayAreaEnter( 7 | val name: String? 8 | ) : BasePacket(PacketID.DISPLAY_AREA_ENTER) 9 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketKeyValue.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketKeyValue( 7 | val key: String, 8 | val value: Any 9 | ) : BasePacket(PacketID.KEY_VALUE) 10 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/DistanceScorer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | class DistanceScorer : Scorer { 4 | override fun score(from: GraphNode, to: GraphNode): Double { 5 | return from.location.distance(to.location) 6 | } 7 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/entitymeta/BaseEntityMetadata.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.entitymeta 2 | 3 | import org.bukkit.entity.Entity 4 | 5 | abstract class BaseEntityMetadata : BaseMetadata() { 6 | override fun isValid(target: Any): Boolean = if (target is Entity) target.isValid else true 7 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/property/DoublePropertyAnimator.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.property 2 | 3 | class DoublePropertyAnimator( 4 | /** 5 | * @return true when finished 6 | */ 7 | val animate: (timeDeltaMs: Long, property: DoubleProperty) -> Boolean, 8 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/LocaleExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.util.* 4 | 5 | fun String.parseAsLocale() = this.replace('_', '-').let { 6 | try { 7 | Locale.forLanguageTag(it) 8 | } catch (e: Exception) { 9 | null 10 | } 11 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/ByteArrayExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.extension 2 | 3 | import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder 4 | 5 | fun ByteArray.encodeAsBase64ToString() = Base64Coder.encode(this)?.joinToString("") 6 | fun String.decodeBase64ToByteArray() = Base64Coder.decode(this) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/MapCanvasExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.map.MapCanvas 4 | 5 | fun MapCanvas.drawHorizontalLine(xStart: Int, xEnd: Int, y: Int, color: Byte) { 6 | for (x in xStart until xEnd) { 7 | setPixel(x, y, color) 8 | } 9 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/OptionalExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.util.* 4 | 5 | fun Optional?.orElse() = this?.orElse(null) 6 | 7 | fun T?.toOptional() = Optional.ofNullable(this) 8 | 9 | val Optional?.force: T 10 | get() = this!!.get()!! -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketOperatorSlotUpdate.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketOperatorSlotUpdate( 7 | val data: PacketOperatorDefinition.OperatorSlot 8 | ) : BasePacket(PacketID.OPERATOR_SLOT_UPDATE) -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/RideExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.Ride 4 | import java.time.LocalDateTime 5 | 6 | val Ride.isNew: Boolean 7 | get() = openSince?.isAfter(LocalDateTime.now().minusDays(30)) ?: false -------------------------------------------------------------------------------- /net/craftventure/core/npc/tracker/ManualNpcTracker.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.tracker 2 | 3 | import org.bukkit.entity.Player 4 | 5 | class ManualNpcTracker(val player: Player) : NpcEntityTracker() { 6 | override fun onStartTracking() { 7 | super.onStartTracking() 8 | addPlayer(player) 9 | } 10 | } -------------------------------------------------------------------------------- /net/craftventure/core/config/ItemPackage.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import com.google.gson.annotations.Expose 4 | 5 | data class ItemPackage( 6 | @Expose 7 | val id: Int = 0, 8 | @Expose 9 | val items: List = listOf(), 10 | @Expose 11 | val mail: String? = null 12 | ) 13 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/KartAction.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart 2 | 3 | import org.bukkit.entity.Player 4 | 5 | interface KartAction { 6 | fun execute(kart: Kart, type: Type, target: Player? = null) 7 | 8 | enum class Type { 9 | LEFT_CLICK, 10 | RIGHT_CLICK 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/autopia/AutopiaTrackPoint.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.autopia 2 | 3 | import com.squareup.moshi.JsonClass 4 | import org.bukkit.Location 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class AutopiaTrackPoint( 8 | val location: Location, 9 | val size: Double 10 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/TracerUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | object TracerUtils { 4 | @JvmStatic 5 | fun getRootCause(throwable: Throwable?): Throwable? { 6 | return if (throwable!!.cause != null) { 7 | getRootCause(throwable.cause) 8 | } else throwable 9 | } 10 | } -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/RideStateExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.bukkit.ktx.util.Translation 4 | import net.craftventure.database.type.RideState 5 | 6 | val RideState.stateTranslation: Translation 7 | get() = Translation.valueOf(stateTranslationTypeName) -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketPing.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketPing( 8 | @Json(name = "send_time") 9 | val sendTime: Long 10 | ) : BasePacket(PacketID.PING) 11 | -------------------------------------------------------------------------------- /net/craftventure/core/animation/armature/WrappedJoint.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.armature 2 | 3 | class WrappedJoint( 4 | val joint: Joint, 5 | ) { 6 | private val originalTransform: Matrix4x4 = Matrix4x4(joint.transform) 7 | 8 | fun reset() { 9 | joint.transform.set(originalTransform) 10 | } 11 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketMarkerRemove.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketMarkerRemove( 7 | // ids 8 | val remove: Set?, 9 | val group: String? 10 | ) : BasePacket(PacketID.MARKER_REMOVE) 11 | -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/DurationExtension.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import kotlin.math.roundToInt 4 | import kotlin.math.roundToLong 5 | import kotlin.time.Duration 6 | 7 | fun Duration.asTicks() = (inWholeMilliseconds / 50.0).roundToLong() 8 | fun Duration.asTicksInt() = (inWholeMilliseconds / 50.0).roundToInt() -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketPolygonOverlayRemove.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketPolygonOverlayRemove( 7 | val remove: Set?, 8 | val group: String? 9 | ) : BasePacket(PacketID.POLYGON_OVERLAY_REMOVE) 10 | -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/extension/StringExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.extension 2 | 3 | import com.linkedin.urls.Url 4 | import com.linkedin.urls.detection.UrlDetector 5 | import com.linkedin.urls.detection.UrlDetectorOptions 6 | 7 | fun String.containingUrls(): MutableList = UrlDetector(this, UrlDetectorOptions.Default).detect() -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/segment/OperableTrackSegment.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride.segment 2 | 3 | import net.craftventure.core.ride.operator.controls.OperatorControl 4 | 5 | 6 | interface OperableTrackSegment { 7 | fun provideControls(): List 8 | 9 | fun onOperatorsChanged() 10 | } 11 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/PathPosition.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | import net.craftventure.core.ride.tracklessride.track.PathPart 4 | 5 | data class PathPosition( 6 | val part: PathPart, 7 | val at: Double 8 | ) { 9 | val location by lazy { part.positionAt(at) } 10 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/action/ScriptActionFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.action 2 | 3 | import com.google.gson.annotations.Expose 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class ScriptActionFrame( 8 | @Expose val time: Long, 9 | @Expose val action: T 10 | ) -------------------------------------------------------------------------------- /net/craftventure/database/extension/QueryExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.extension 2 | 3 | import org.jooq.Query 4 | 5 | fun T.execute(expect: Int = 1, successAction: (Int) -> Unit): Int { 6 | return this.execute().also { 7 | if (it == expect) { 8 | successAction(it) 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketAreaRemove.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketAreaRemove( 8 | @Json(name = "area_id") 9 | val areaId: String 10 | ) : BasePacket(PacketID.AREA_REMOVE) 11 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketMapLayersRemove.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketMapLayersRemove( 7 | // ids 8 | val remove: Set?, 9 | val group: String? 10 | ) : BasePacket(PacketID.REMOVE_MAP_LAYERS) 11 | -------------------------------------------------------------------------------- /net/craftventure/temporary/SlotMachineItemExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.temporary 2 | 3 | import net.craftventure.core.utils.ItemStackUtils 4 | import net.craftventure.database.generated.cvdata.tables.pojos.SlotMachineItem 5 | import org.bukkit.inventory.ItemStack 6 | 7 | fun SlotMachineItem.getResolvedItem(): ItemStack? = ItemStackUtils.fromString(itemId) -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketSync.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketSync( 8 | @Json(name = "area_id") 9 | val areaId: Long, 10 | val sync: Long 11 | ) : BasePacket(PacketID.SYNC) 12 | -------------------------------------------------------------------------------- /net/craftventure/core/animation/armature/JointKeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.armature 2 | 3 | class JointKeyFrame( 4 | val interpolation: String, 5 | val transform: Matrix4x4, 6 | val time: Double 7 | ) { 8 | fun clone() = JointKeyFrame( 9 | interpolation, 10 | transform.clone(), 11 | time 12 | ) 13 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/scene/trigger/SceneTriggerData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.scene.trigger 2 | 3 | import net.craftventure.core.ride.tracklessride.scene.TracklessRideScene 4 | 5 | abstract class SceneTriggerData { 6 | lateinit var type: String 7 | 8 | abstract fun toTrigger(scene: TracklessRideScene): SceneTrigger 9 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/extensions/AudioExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.extensions 2 | 3 | import net.craftventure.audioserver.websocket.AudioServerHandler 4 | import net.craftventure.audioserver.websocket.ChannelMetaData 5 | import org.bukkit.entity.Player 6 | 7 | fun Player.getAudioChannelMeta(): ChannelMetaData? = AudioServerHandler.getChannel(this) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/mobarena/MobArenaPlayer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.mobarena 2 | 3 | class MobArenaPlayer { 4 | var inLimbo = false 5 | var lastWaterDamage = 0L 6 | var lastFarAwayDamage = 0L 7 | var lastTeleportedWave: MobArena.Wave? = null 8 | 9 | fun update(level: MobArenaLevel) { 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/RangeExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.util.* 4 | 5 | fun IntRange.t(value: Number): Double { 6 | return ((value.toLong() - this.first).toDouble() / (this.last - this.first).toDouble()).clamp(0.0, 1.0) 7 | } 8 | 9 | fun ClosedRange.random() = Random().nextInt((endInclusive + 1) - start) + start -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/ProtectionExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.Protection 4 | import org.bukkit.Bukkit 5 | import org.bukkit.Location 6 | 7 | 8 | fun Protection.toLocation() = Location(Bukkit.getWorld(world!!), x!!.toDouble(), y!!.toDouble(), z!!.toDouble()) -------------------------------------------------------------------------------- /net/craftventure/database/extension/PlayerEquippedItemExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.extension 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.PlayerEquippedItem 4 | import net.craftventure.database.type.EquippedItemSlot 5 | 6 | 7 | fun Collection.firstOfSlot(slot: EquippedItemSlot) = this.firstOrNull { it.slot == slot } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketAreaState.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketAreaState( 8 | @Json(name = "area_id") 9 | val areaId: Long, 10 | val playing: Boolean 11 | ) : BasePacket(PacketID.AREA_STATE) 12 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketSpatialAudioRemove.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketSpatialAudioRemove( 8 | @Json(name = "audio_id") 9 | val audioId: String 10 | ) : BasePacket(PacketID.SPATIAL_AUDIO_REMOVE) 11 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/UuidExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.Bukkit 4 | import java.util.* 5 | 6 | val UUID.player 7 | get() = Bukkit.getPlayer(this) 8 | 9 | fun UUID.withV2Marker() = toString().let { uuidString -> 10 | UUID.fromString(uuidString.substring(0, 14) + "2" + uuidString.substring(15)) 11 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/LaserGameArenaMode.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame 2 | 3 | enum class LaserGameArenaMode(val compatibleWith: Array) { 4 | DEATHMATCH(arrayOf(LaserGameTeamMode.FFA, LaserGameTeamMode.TEAMS)), 5 | PAYLOAD(arrayOf(LaserGameTeamMode.TEAMS)), 6 | CTF(arrayOf(LaserGameTeamMode.TEAMS)) 7 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/AudioPacketArea.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | 6 | @JsonClass(generateAdapter = true) 7 | class AudioPacketArea( 8 | var xMin: Double, 9 | var yMin: Double, 10 | var zMin: Double, 11 | var xMax: Double, 12 | var yMax: Double, 13 | var zMax: Double, 14 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/config/ShooterSceneIdleEntityConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | data class ShooterSceneIdleEntityConfig( 7 | val npc: String, 8 | val despawnOnSceneStart: Boolean = true, 9 | val despawnOnAnimationEnd: Boolean = false, 10 | ) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/gonbao/GonBaoLevel.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.gonbao 2 | 3 | /* 4 | import net.craftventure.core.area.Area 5 | import net.craftventure.core.feature.minigame.BaseMinigameLevel 6 | 7 | class GonBaoLevel(area: Area) : BaseMinigameLevel( 8 | "gonbao_main", 9 | 10, 10 | 60 * 15, 11 | area 12 | )*/ 13 | -------------------------------------------------------------------------------- /net/craftventure/database/extension/EmojiExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.extension 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.Emoji 4 | 5 | val Emoji.actualAliases get() = aliases!!.split(" ") 6 | val Emoji.regex get() = Regex.escape(emoji!!).toRegex() 7 | val Emoji.aliasRegex get() = actualAliases.map { Regex.escape(it).toRegex(RegexOption.IGNORE_CASE) } -------------------------------------------------------------------------------- /net/craftventure/database/type/MailType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | enum class MailType { 6 | PLAYER_SENT, 7 | AUTO, 8 | ANNOUNCEMENT, 9 | BOUGHT_PACKAGE; 10 | 11 | companion object { 12 | class Converter : EnumConverter(String::class.java, MailType::class.java) 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/LengthScorer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | class LengthScorer : Scorer { 4 | override fun score(from: GraphNode, to: GraphNode): Double { 5 | val shortest = from.shortestConnectionTo(to) 6 | if (shortest != null) return shortest.length 7 | return Double.POSITIVE_INFINITY 8 | } 9 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketLocationUpdate.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketLocationUpdate( 7 | val x: Double?, 8 | val y: Double?, 9 | val z: Double?, 10 | val yaw: Float?, 11 | val pitch: Float? 12 | ) : BasePacket(PacketID.LOCATION_UPDATE) 13 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/entitymeta/BaseMetadata.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.entitymeta 2 | 3 | import net.kyori.adventure.text.Component 4 | 5 | abstract class BaseMetadata { 6 | // val creator = Logger.miniTrace(8) 7 | open fun onDestroy() {} 8 | 9 | open fun isValid(target: Any): Boolean = false 10 | 11 | abstract fun debugComponent(): Component?// = null 12 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/ShopBalloonHolder.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop 2 | 3 | import net.craftventure.core.feature.shop.dto.ShopPresenterBalloonHolderDto 4 | import net.craftventure.core.npc.NpcEntity 5 | 6 | 7 | data class ShopBalloonHolder( 8 | val shopPresenter: ShopPresenter, 9 | val npc: NpcEntity, 10 | val config: ShopPresenterBalloonHolderDto, 11 | ) -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/dto/NpcFileShopKeeperDto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop.dto 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class NpcFileShopKeeperDto( 7 | val id: String, 8 | val file: String, 9 | val offer: String? = null, 10 | val teamId: String? = null, 11 | val interactionRadius: Double? = null, 12 | ) -------------------------------------------------------------------------------- /net/craftventure/database/type/MinigameScoreType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | enum class MinigameScoreType { 6 | TOTAL, 7 | ROUND, 8 | KILLS, 9 | DEATHS; 10 | 11 | companion object { 12 | class Converter : EnumConverter(String::class.java, MinigameScoreType::class.java) 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketLogin.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.audioserver.ProtocolConfig 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketLogin( 8 | var version: Int = ProtocolConfig.VERSION, 9 | var uuid: String, 10 | var auth: String 11 | ) : BasePacket(PacketID.LOGIN) { 12 | } 13 | -------------------------------------------------------------------------------- /net/craftventure/core/extension/CommandSenderExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.extension 2 | 3 | import net.craftventure.chat.bungee.extension.plus 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import org.bukkit.command.CommandSender 6 | 7 | fun CommandSender.sendDatabaseFailError(exception: Exception? = null) { 8 | sendMessage(CVTextColor.serverError + "Failed to execute action") 9 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/jumppuzzle/JumpPuzzlePlayer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.jumppuzzle 2 | 3 | import org.bukkit.entity.Player 4 | 5 | class JumpPuzzlePlayer( 6 | val player: Player, 7 | var qualified: Boolean = true, 8 | val startTime: Long = System.currentTimeMillis() 9 | ) { 10 | fun cleanUp() {} 11 | fun timePlayed() = System.currentTimeMillis() - startTime 12 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/RandomExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.util.* 4 | 5 | fun Random.nextDoubleRange(min: Double, max: Double): Double { 6 | assert(min < max) 7 | return min + (nextDouble() * (max - min))//.also { 8 | // Logger.info("Double in range ${min.format(2)} - ${max.format(2)} returned ${it.format(2)}") 9 | //} 10 | } -------------------------------------------------------------------------------- /net/craftventure/database/extension/PlayerTimezoneExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.extension 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.PlayerTimezone 4 | import java.time.ZoneId 5 | 6 | fun PlayerTimezone.toZoneId(fallback: ZoneId? = ZoneId.systemDefault()) = try { 7 | zone?.let { ZoneId.of(it) } ?: fallback 8 | } catch (e: Exception) { 9 | fallback 10 | } -------------------------------------------------------------------------------- /net/craftventure/database/type/CoinBoosterType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class CoinBoosterType(val prefix: String) { 7 | ADD("+"), 8 | MULTIPLY("x"); 9 | 10 | companion object { 11 | class Converter : EnumConverter(String::class.java, CoinBoosterType::class.java) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /net/craftventure/database/type/OperatorKind.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class OperatorKind { 7 | NONE, 8 | ANYONE, 9 | VIP, 10 | CREW, 11 | OWNER; 12 | 13 | companion object { 14 | class Converter : EnumConverter(String::class.java, OperatorKind::class.java) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/manager/WorldBorderManager.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.manager 2 | 3 | import net.craftventure.bukkit.ktx.area.Area 4 | 5 | object WorldBorderManager { 6 | var borderParts: List = emptyList() 7 | 8 | data class BorderPart( 9 | val crewOnly: Boolean = true, 10 | val renderTiles: Boolean = false, 11 | val area: Area 12 | ) 13 | } -------------------------------------------------------------------------------- /net/craftventure/database/type/RideLogState.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class RideLogState { 7 | COMPLETED, 8 | LEFT, 9 | LEFT_BEFORE_START, 10 | ENTER; 11 | 12 | companion object { 13 | class Converter : EnumConverter(String::class.java, RideLogState::class.java) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /net/craftventure/database/type/ServerTypeType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class ServerTypeType { 7 | CRAFTVENTURE, 8 | LIMBO, 9 | OTHER; 10 | 11 | companion object { 12 | class Converter : 13 | EnumConverter(String::class.java, ServerTypeType::class.java) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/RegistryExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.minecraft.core.Registry 4 | import net.minecraft.resources.ResourceKey 5 | import org.bukkit.craftbukkit.v1_20_R1.CraftWorld 6 | 7 | //fun ResourceKey>.getInstanceByMainWorld() = 8 | // (org.bukkit.Bukkit.getWorlds().first() as CraftWorld).handle.registryAccess().registryOrThrow(this) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/EquippedLaserGameItem.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame 2 | 3 | import org.bukkit.inventory.ItemStack 4 | 5 | data class EquippedLaserGameItem( 6 | val id: String, 7 | val representation: ItemStack, 8 | val item: LaserGameItem 9 | ) { 10 | fun applySwitchCooldown(cooldown: Long = 700) = item.applySwitchCooldown(cooldown) 11 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/dto/ShopPresenterBalloonDto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop.dto 2 | 3 | import com.squareup.moshi.JsonClass 4 | import org.bukkit.Location 5 | 6 | @JsonClass(generateAdapter = true) 7 | class ShopPresenterBalloonDto( 8 | val balloonId: String, 9 | val location: Location?, 10 | val leashNpcId: String? = null, 11 | val maxLeashLength: Double? = null, 12 | ) -------------------------------------------------------------------------------- /net/craftventure/database/type/ServerPublicityType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class ServerPublicityType { 7 | PUBLIC, 8 | DEVELOPMENT; 9 | 10 | companion object { 11 | class Converter : 12 | EnumConverter(String::class.java, ServerPublicityType::class.java) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/Server.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver 2 | 3 | import net.craftventure.audioserver.packet.BasePacket 4 | import org.bukkit.entity.Player 5 | 6 | interface Server { 7 | fun hasJoined(player: Player): Boolean 8 | 9 | fun sendPacket(player: Player, basePacket: BasePacket): Boolean 10 | 11 | fun disconnect(player: Player, message: String) 12 | 13 | fun stop() 14 | } 15 | -------------------------------------------------------------------------------- /net/craftventure/core/extension/UuidExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.extension 2 | 3 | import net.craftventure.database.MainRepositoryProvider 4 | import java.util.* 5 | 6 | fun UUID.toName(): String { 7 | val guestStat = MainRepositoryProvider.guestStatRepository.findSilent(this) 8 | if (guestStat != null) { 9 | return guestStat.lastKnownName!! 10 | } 11 | return this.toString() 12 | } -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/RideLinkExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.RideLink 4 | import org.bukkit.Bukkit 5 | import org.bukkit.Location 6 | 7 | fun RideLink.toLocation() = Location( 8 | Bukkit.getWorld(world!!), 9 | x!!.toDouble(), 10 | y!!.toDouble(), 11 | z!!.toDouble(), 12 | ) 13 | -------------------------------------------------------------------------------- /net/craftventure/jsontools/PolymorphicHint.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.jsontools 2 | 3 | @Target(AnnotationTarget.CLASS) 4 | @Retention(AnnotationRetention.RUNTIME) 5 | annotation class PolymorphicHint( 6 | val keyName: String = "type", 7 | val types: Array, 8 | ) { 9 | annotation class PolymorphicHintType( 10 | val key: String, 11 | val qualifiedName: String, 12 | ) 13 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/train/CoasterRideTrainJson.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride.train 2 | 3 | import net.craftventure.core.ride.trackedride.RideTrain 4 | import net.craftventure.core.ride.trackedride.RideTrainJson 5 | import net.craftventure.core.ride.trackedride.TrackedRide 6 | 7 | class CoasterRideTrainJson : RideTrainJson() { 8 | override fun create(ride: TrackedRide): RideTrain = TODO() 9 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/timeline/KeyFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.timeline 2 | 3 | class KeyFrame( 4 | at: Long, 5 | var keyValue: Number, 6 | var inEasing: KeyFrameEasing = KeyFrameEasing.NONE, 7 | var outEasing: KeyFrameEasing = KeyFrameEasing.NONE 8 | ) { 9 | var at = at 10 | set(value) { 11 | field = if (value < 0) 0 12 | else value 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketOperatorControlUpdate.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketOperatorControlUpdate( 8 | @Json(name = "control_model") 9 | val controlModel: PacketOperatorDefinition.OperatorControlModel 10 | ) : BasePacket(PacketID.OPERATOR_CONTROL_UPDATE) -------------------------------------------------------------------------------- /net/craftventure/core/ride/RideInstance.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride 2 | 3 | import net.craftventure.core.ride.queue.RideQueue 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Ride 5 | 6 | interface RideInstance { 7 | val id: String 8 | val ride: Ride? 9 | 10 | fun displayName() = ride?.displayName ?: id 11 | 12 | // val queue: RideQueue? 13 | fun getQueues(): Set 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/dto/ShopPresenterBalloonHolderDto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop.dto 2 | 3 | import com.squareup.moshi.JsonClass 4 | import org.bukkit.Location 5 | import org.bukkit.entity.EntityType 6 | 7 | @JsonClass(generateAdapter = true) 8 | class ShopPresenterBalloonHolderDto( 9 | val id: String, 10 | val location: Location, 11 | val entityType: EntityType = EntityType.LEASH_HITCH, 12 | ) -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketVolume.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketVolume( 7 | val volume: Double, 8 | val type: String? 9 | ) : BasePacket(PacketID.VOLUME) { 10 | 11 | enum class VolumeType { 12 | master, 13 | music, 14 | effect, 15 | ambient 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/json/PotionEffectTypeAdapter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.json 2 | 3 | import com.squareup.moshi.FromJson 4 | import com.squareup.moshi.ToJson 5 | import org.bukkit.potion.PotionEffectType 6 | 7 | class PotionEffectTypeAdapter { 8 | @FromJson 9 | fun fromJson(json: String) = PotionEffectType.getByName(json) 10 | 11 | @ToJson 12 | fun toJson(instance: PotionEffectType) = instance.name 13 | } -------------------------------------------------------------------------------- /net/craftventure/core/map/fonts/MinguaranaFont.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.map.fonts 2 | 3 | import org.bukkit.map.MapFont 4 | 5 | // Minecraftified version of Minguarana font by https://www.deviantart.com/matiasromero 6 | // Minguarana was the main font of CV 7 | 8 | class MinguaranaFont private constructor() : MapFont() { 9 | companion object { 10 | @JvmStatic 11 | val FONT = MinguaranaFont() 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketOperatorControlClick.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketOperatorControlClick( 8 | @Json(name = "ride_id") 9 | val rideId: String, 10 | @Json(name = "control_id") 11 | val controlId: String 12 | ) : BasePacket(PacketID.OPERATOR_CONTROL_CLICK) -------------------------------------------------------------------------------- /net/craftventure/database/type/AchievementType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class AchievementType { 7 | ROAMING, 8 | ROAMING_DISPLAY_IF_UNLOCKED, 9 | SECRET, 10 | SECRET_ROOM, 11 | RIDE; 12 | 13 | companion object { 14 | class Converter : EnumConverter(String::class.java, AchievementType::class.java) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/database/type/BalloonParticleType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class BalloonParticleType { 7 | DEFAULT, 8 | HALLOWEEN_2016, 9 | SINGLE_TOP_MID_FLAME; 10 | 11 | companion object { 12 | class Converter : 13 | EnumConverter(String::class.java, BalloonParticleType::class.java) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/data/ProgramPartData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.data 2 | 3 | import net.craftventure.core.ride.tracklessride.programpart.ProgramPart 4 | import net.craftventure.core.ride.tracklessride.scene.TracklessRideScene 5 | 6 | abstract class ProgramPartData { 7 | // lateinit var type: String 8 | 9 | abstract fun toPart(scene: TracklessRideScene): ProgramPart 10 | } -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/CoinBoosterExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.core.ktx.util.DateUtils 4 | import net.craftventure.database.generated.cvdata.tables.pojos.CoinBooster 5 | 6 | 7 | fun CoinBooster.describe() = "${coinBoosterType!!.prefix}$value" 8 | fun CoinBooster.describeWithDuration() = 9 | "${coinBoosterType!!.prefix}$value for ${DateUtils.format(duration!!.toLong(), "?")}" -------------------------------------------------------------------------------- /net/craftventure/core/config/CraftventureAreasReloadedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import org.bukkit.event.Event 4 | import org.bukkit.event.HandlerList 5 | 6 | 7 | class CraftventureAreasReloadedEvent : Event() { 8 | 9 | override fun getHandlers(): HandlerList { 10 | return handlerList 11 | } 12 | 13 | companion object { 14 | @JvmStatic 15 | val handlerList = HandlerList() 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /net/craftventure/core/config/CraftventureConfigReloadedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import org.bukkit.event.Event 4 | import org.bukkit.event.HandlerList 5 | 6 | 7 | class CraftventureConfigReloadedEvent : Event() { 8 | 9 | override fun getHandlers(): HandlerList { 10 | return handlerList 11 | } 12 | 13 | companion object { 14 | @JvmStatic 15 | val handlerList = HandlerList() 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /net/craftventure/core/extension/MathExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.extension 2 | 3 | import net.craftventure.core.utils.InterpolationUtils 4 | 5 | inline fun Double.progressTo(newValue: Double, progress: Double) = 6 | InterpolationUtils.linearInterpolate(this, newValue, progress) 7 | 8 | inline fun Float.progressTo(newValue: Float, progress: Double) = 9 | InterpolationUtils.linearInterpolate(this.toDouble(), newValue.toDouble(), progress).toFloat() -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/actions/StopNbsSongAction.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.actions 2 | 3 | import net.craftventure.core.feature.kart.Kart 4 | import net.craftventure.core.feature.kart.KartAction 5 | import org.bukkit.entity.Player 6 | 7 | class StopNbsSongAction() : KartAction { 8 | override fun execute(kart: Kart, type: KartAction.Type, target: Player?) { 9 | kart.metadata["nbssong"]?.onDestroy() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/GraphNodeConnection.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | import net.craftventure.core.ride.tracklessride.track.PathPart 4 | 5 | data class GraphNodeConnection( 6 | val from: GraphNode, 7 | val to: GraphNode, 8 | val by: PathPart, 9 | val fromAt: Double, 10 | val toAt: Double, 11 | ) { 12 | val length = if (fromAt < toAt) toAt - fromAt else fromAt - toAt 13 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/DateExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.time.LocalDateTime 4 | import java.time.ZoneId 5 | import java.time.ZoneOffset 6 | import java.util.* 7 | 8 | val Date.asLocalDateTime: LocalDateTime 9 | get() = this.toInstant() 10 | .atZone(ZoneId.systemDefault()) 11 | .toLocalDateTime() 12 | 13 | val LocalDateTime.utcMillis: Long 14 | get() = toInstant(ZoneOffset.UTC).toEpochMilli() -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/ShooterEntity.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter 2 | 3 | import net.craftventure.core.npc.actor.ActorPlayback 4 | import net.craftventure.core.ride.shooter.config.ShooterSceneEntityConfig 5 | 6 | class ShooterEntity( 7 | val id: String, 8 | val context: ShooterRideContext, 9 | val playback: ActorPlayback, 10 | val config: ShooterSceneEntityConfig 11 | ) { 12 | val hitActions = config.onHit.map { it.toAction() } 13 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketClientAccept.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketClientAccept @JvmOverloads constructor( 8 | val servername: String, 9 | val uuid: String, 10 | @Json(name = "send_time") 11 | val sendTime: Long = System.currentTimeMillis() 12 | ) : BasePacket(PacketID.CLIENT_ACCEPTED) { 13 | } 14 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/BoundingBoxExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.util.BoundingBox 4 | 5 | fun BoundingBox.atCenter(x: Double, y: Double, z: Double): BoundingBox { 6 | return BoundingBox( 7 | x - (this.widthX / 2.0), 8 | y - (this.height / 2.0), 9 | z - (this.widthZ / 2.0), 10 | x + (this.widthX / 2.0), 11 | y + (this.height / 2.0), 12 | z + (this.widthZ / 2.0) 13 | ) 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/projectile/LaserGameProjectile.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame.projectile 2 | 3 | import net.craftventure.core.feature.minigame.lasergame.LaserGame 4 | import net.craftventure.core.feature.minigame.lasergame.LaserGameEntity 5 | 6 | interface LaserGameProjectile { 7 | val shooter: LaserGameEntity 8 | val isValid: Boolean 9 | val damageType: LaserGameEntity.DamageType 10 | fun update(game: LaserGame) 11 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/InterpolationUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | object InterpolationUtils { 4 | @JvmStatic 5 | fun linearInterpolate(y1: Double, y2: Double, mu: Double): Double { 6 | return if (y1 == y2) y1 else y1 * (1 - mu) + y2 * mu 7 | } 8 | 9 | /** 10 | * @return any double that is NOT clamped 11 | */ 12 | fun getMu(from: Double, to: Double, actualValue: Double): Double = (actualValue - from) / (to - from) 13 | 14 | 15 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/BaseDaoRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import org.jooq.DAO 4 | import org.jooq.DSLContext 5 | import org.jooq.UpdatableRecord 6 | 7 | abstract class BaseDaoRepository, P, T>( 8 | protected val dao: DAO 9 | ) : BaseRepository( 10 | dao.configuration(), 11 | dao.table, 12 | dao.dialect() 13 | ) { 14 | private val dsl: DSLContext 15 | get() = configuration.dsl() 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/turret/LaserGameTurretType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame.turret 2 | 3 | import net.craftventure.core.feature.minigame.lasergame.LaserGame 4 | import org.bukkit.Location 5 | 6 | enum class LaserGameTurretType( 7 | val displayName: String, 8 | val factory: (location: Location, game: LaserGame) -> LaserGameTurret 9 | ) { 10 | DEFAULT("Default", factory = { location, game -> DefaultTurret(location, game) }) 11 | } -------------------------------------------------------------------------------- /net/craftventure/database/type/AchievementCategoryType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class AchievementCategoryType( 7 | val isHideIfNoAchievementsUnlocked: Boolean = false 8 | ) { 9 | DEFAULT, 10 | SECRET(true); 11 | 12 | companion object { 13 | class Converter : 14 | EnumConverter(String::class.java, AchievementCategoryType::class.java) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/types/Balloon.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.types 2 | 3 | import net.craftventure.core.feature.balloon.holders.BalloonHolder 4 | import org.bukkit.Location 5 | 6 | 7 | interface Balloon { 8 | val balloonHolder: BalloonHolder? 9 | 10 | val balloonLocation: Location? 11 | val leashLength: Double get() = 1.8 12 | 13 | fun spawn(balloonHolder: BalloonHolder) 14 | fun update() 15 | fun despawn(withEffects: Boolean) 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonFloatConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class JsonFloatConverter(val value: Float) : EntityInteractorJson() { 8 | override fun apply(interactable: EntityMetadata.Interactable, interactor: EntityMetadata.Interactor) { 9 | interactable.applyInteractor(interactor, value) 10 | } 11 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/json/ColorAdapter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.json 2 | 3 | import com.squareup.moshi.FromJson 4 | import com.squareup.moshi.ToJson 5 | import net.craftventure.bukkit.ktx.extension.colorFromHex 6 | import net.craftventure.bukkit.ktx.extension.toHexColor 7 | import org.bukkit.Color 8 | 9 | class ColorAdapter { 10 | @FromJson 11 | fun fromJson(json: String) = colorFromHex(json) 12 | 13 | @ToJson 14 | fun toJson(instance: Color) = instance.toHexColor() 15 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/service/CoreLoadService.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.service 2 | 3 | import net.craftventure.annotationkit.GenerateService 4 | import net.craftventure.core.ktx.json.* 5 | 6 | @GenerateService 7 | class CoreLoadService : LoadService { 8 | override fun init() { 9 | MoshiBase.withBuilder() 10 | .add(OptionalJsonAdapterFactory()) 11 | .add(BaseJsonAdapters()) 12 | .add(DurationJson::class.java, KotlinDurationAdapter()) 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonBooleanConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class JsonBooleanConverter(val value: Boolean) : EntityInteractorJson() { 8 | override fun apply(interactable: EntityMetadata.Interactable, interactor: EntityMetadata.Interactor) { 9 | interactable.applyInteractor(interactor, value) 10 | } 11 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/ItemMetaExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.Color 4 | import org.bukkit.FireworkEffect 5 | import org.bukkit.inventory.meta.FireworkEffectMeta 6 | import org.bukkit.inventory.meta.FireworkMeta 7 | 8 | 9 | operator fun FireworkMeta.plusAssign(effect: FireworkEffect) { 10 | addEffect(effect) 11 | } 12 | 13 | fun FireworkEffectMeta.setColor(color: Color) { 14 | effect = FireworkEffect.builder().withColor(color).build() 15 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/event/AudioServerDisconnectedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.event 2 | 3 | import org.bukkit.entity.Player 4 | import org.bukkit.event.HandlerList 5 | import org.bukkit.event.player.PlayerEvent 6 | 7 | class AudioServerDisconnectedEvent(who: Player) : PlayerEvent(who) { 8 | override fun getHandlers(): HandlerList { 9 | return handlerList 10 | } 11 | 12 | companion object { 13 | @JvmStatic 14 | val handlerList = HandlerList() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/InventoryExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.inventory.Inventory 4 | import org.bukkit.inventory.ItemStack 5 | 6 | fun Inventory.updateItem(slot: Int, itemStack: ItemStack?) { 7 | if (this.getItem(slot) != itemStack) { 8 | this.setItem(slot, itemStack) 9 | } 10 | } 11 | 12 | operator fun Inventory.set(i: Int, value: ItemStack?) { 13 | setItem(i, value) 14 | } 15 | 16 | operator fun Inventory.get(i: Int) = getItem(i) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/gun/LaserGameGunType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame.gun 2 | 3 | import net.craftventure.core.feature.minigame.lasergame.LaserGameItem 4 | 5 | enum class LaserGameGunType(val displayName: String, val factory: () -> LaserGameItem) { 6 | DEFAULT("Handgun", factory = { DefaultGun() }), 7 | SNIPER("Sniper", factory = { SniperGun() }), 8 | SHOTGUN("Shotgun", factory = { ShotGun() }), 9 | BAZOOKA("Bazooka", factory = { BazookaGun() }) 10 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/SmoothCoastersHelper.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import me.m56738.smoothcoasters.api.SmoothCoastersAPI 4 | import net.craftventure.core.CraftventureCore 5 | 6 | // No it's not enabled on the server. Did have a branch where I replaced all trackedrides from vector to matrices, but it never made it to live 7 | 8 | object SmoothCoastersHelper { 9 | val api by lazy { SmoothCoastersAPI(CraftventureCore.getInstance()) } 10 | 11 | fun init() { 12 | api 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/Resource.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class Resource( 8 | var type: String?, 9 | var location: String, 10 | val artist: String?, 11 | val cover: String?, 12 | val name: String?, 13 | @Json(name = "spotify_uri") 14 | val spotifyUri: String?, 15 | @Json(name = "listen_url") 16 | val listenUrl: String? 17 | ) 18 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/SpawnLocation.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame 2 | 3 | import org.bukkit.Location 4 | import org.bukkit.World 5 | 6 | data class SpawnLocation( 7 | val x: Double, 8 | val y: Double, 9 | val z: Double, 10 | val yaw: Float, 11 | val pitch: Float = 0f 12 | ) { 13 | constructor(location: Location) : this(location.x, location.y, location.z, location.yaw, location.pitch) 14 | 15 | fun toLocation(world: World) = Location(world, x, y, z, yaw, pitch) 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/CoasterMathUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride 2 | 3 | object CoasterMathUtils { 4 | 5 | private const val TICKPART = 1.0 / 20.0 6 | 7 | @JvmStatic 8 | fun kmhToBpt(kmh: Double): Double { 9 | return kmh / 3.6 * TICKPART 10 | } 11 | 12 | @JvmStatic 13 | fun bptToKmh(bpt: Double): Double { 14 | return bpt / TICKPART * 3.6 15 | } 16 | 17 | fun btpToMps(bpt: Double): Double { 18 | return bpt / TICKPART 19 | } 20 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/EntityEquipmentExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import org.bukkit.inventory.EntityEquipment 4 | 5 | fun EntityEquipment.isNotEmpty() = !isEmpty() 6 | 7 | fun EntityEquipment.isEmpty() = helmet?.takeIfNotAir() == null && 8 | chestplate?.takeIfNotAir() == null && 9 | leggings?.takeIfNotAir() == null && 10 | boots?.takeIfNotAir() == null && 11 | itemInMainHand.takeIfNotAir() == null && 12 | itemInOffHand.takeIfNotAir() == null -------------------------------------------------------------------------------- /net/craftventure/core/database/model/ownable/PredecessorItem.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.model.ownable 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.database.MainRepositoryProvider 5 | import org.bukkit.entity.Player 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class PredecessorItem( 9 | val name: String, 10 | val onlyShowIfMissing: Boolean = false 11 | ) { 12 | fun hasCompleted(player: Player) = MainRepositoryProvider.playerOwnedItemRepository.owns(player.uniqueId, name) 13 | } -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/BankAccountTypeExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.bukkit.ktx.extension.updateMeta 4 | import net.craftventure.database.type.BankAccountType 5 | import org.bukkit.Material 6 | import org.bukkit.inventory.ItemStack 7 | import org.bukkit.inventory.meta.ItemMeta 8 | 9 | val BankAccountType.itemRepresentation: ItemStack 10 | get() = ItemStack(Material.GOLD_NUGGET) 11 | .updateMeta { setCustomModelData(modelDataId) } -------------------------------------------------------------------------------- /net/craftventure/database/repository/EmojiRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.EmojiDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Emoji 5 | import net.craftventure.database.generated.cvdata.tables.records.EmojiRecord 6 | import org.jooq.Configuration 7 | 8 | class EmojiRepository(configuration: Configuration) : BaseIdRepository( 9 | EmojiDao(configuration), 10 | shouldCache = true 11 | ) -------------------------------------------------------------------------------- /net/craftventure/database/repository/RealmRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.RealmDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Realm 5 | import net.craftventure.database.generated.cvdata.tables.records.RealmRecord 6 | import org.jooq.Configuration 7 | 8 | class RealmRepository(configuration: Configuration) : BaseIdRepository( 9 | RealmDao(configuration), 10 | shouldCache = true 11 | ) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/SynchedEntityDataExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.minecraft.network.syncher.SynchedEntityData 4 | 5 | private val packAllMethod by lazy { 6 | SynchedEntityData::class.java.getDeclaredMethod("packAll").apply { 7 | this.isAccessible = true 8 | } 9 | } 10 | 11 | fun SynchedEntityData.packAllReflection(): List> { 12 | return packAllMethod.invoke(this) as List>? ?: emptyList() 13 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/TagContainer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride 2 | 3 | import net.craftventure.core.ride.tracklessride.programpart.data.TagContext 4 | 5 | interface TagContainer { 6 | fun addTag(context: TagContext = TagContext.GLOBAL, tag: String) 7 | fun removeTag(context: TagContext = TagContext.GLOBAL, tag: String) 8 | fun hasTag(context: TagContext = TagContext.GLOBAL, tag: String): Boolean 9 | fun clear(context: TagContext) 10 | fun get(context: TagContext): Set 11 | } -------------------------------------------------------------------------------- /net/craftventure/database/extension/PlayerLocaleExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.extension 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.PlayerLocale 4 | import java.util.* 5 | 6 | fun PlayerLocale.getLocale(fallback: Locale? = Locale.getDefault()): Locale? = locale?.let { 7 | Locale.forLanguageTag(it.replace("_", "-")) 8 | } ?: fallback 9 | 10 | fun PlayerLocale.setLocale(locale: Locale) { 11 | this.locale = locale.let { Locale(it.language, it.country) }.toLanguageTag().replace("-", "_") 12 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/ConfigRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.ConfigDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Config 5 | import net.craftventure.database.generated.cvdata.tables.records.ConfigRecord 6 | import org.jooq.Configuration 7 | 8 | class ConfigRepository(configuration: Configuration) : BaseIdRepository( 9 | ConfigDao(configuration), 10 | shouldCache = true 11 | ) -------------------------------------------------------------------------------- /net/craftventure/database/repository/ShopRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.ShopDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Shop 5 | import net.craftventure.database.generated.cvdata.tables.records.ShopRecord 6 | import org.jooq.Configuration 7 | 8 | class ShopRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | ShopDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/StringExtensions2.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.kyori.adventure.text.Component 4 | import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer 5 | import org.bukkit.entity.Player 6 | import org.bukkit.inventory.ItemStack 7 | 8 | 9 | fun Component.sendTo(player: Player) { 10 | player.sendMessage(this) 11 | } 12 | 13 | fun ItemStack.displayNamePlain() = 14 | this.itemMeta?.displayName()?.let { PlainTextComponentSerializer.plainText().serialize(it) } -------------------------------------------------------------------------------- /net/craftventure/database/repository/StoreRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.StoreDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Store 5 | import net.craftventure.database.generated.cvdata.tables.records.StoreRecord 6 | import org.jooq.Configuration 7 | 8 | class StoreRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | StoreDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/database/repository/TitleRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.TitleDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Title 5 | import net.craftventure.database.generated.cvdata.tables.records.TitleRecord 6 | import org.jooq.Configuration 7 | 8 | class TitleRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | TitleDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/fountain/Shooter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture.fountain 2 | 3 | import net.craftventure.core.script.fixture.Location 4 | import net.craftventure.core.script.fixture.property.DoubleProperty 5 | 6 | class Shooter( 7 | name: String, 8 | location: Location 9 | ) : Fountain( 10 | name, 11 | location, 12 | "fountain:shooter" 13 | ) { 14 | init { 15 | properties += DoubleProperty("pressure", 0.0, min = 0.0, max = 2.0) 16 | } 17 | 18 | override fun destroy() {} 19 | } 20 | -------------------------------------------------------------------------------- /net/craftventure/database/repository/ServerRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.ServerDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Server 5 | import net.craftventure.database.generated.cvdata.tables.records.ServerRecord 6 | import org.jooq.Configuration 7 | 8 | class ServerRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | ServerDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/AudioMapOverlay.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.audioserver.packet.AudioPacketArea 5 | 6 | @JsonClass(generateAdapter = true) 7 | class AudioMapOverlay( 8 | val id: String, 9 | val group: String?, 10 | val base64: String?, 11 | val url: String?, 12 | val x: Int, 13 | val z: Int, 14 | val width: Int, 15 | val height: Int, 16 | val zIndex: Int, 17 | val visibilityAreas: List, 18 | ) 19 | -------------------------------------------------------------------------------- /net/craftventure/core/animation/model/package-info.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation.model; 2 | 3 | // Had to remove the code from this package as I took all of it from tutorials and other repos. Some sources include: 4 | // https://github.com/postspectacular/toxiclibs & https://github.com/postspectacular/toxiclibs/blob/master/src.core/toxi/geom/Matrix4x4.java 5 | // https://github.com/TheThinMatrix/OpenGL-Animation 6 | // StackOverflow 7 | // Some BKCommonLib code to fix a quaternion to MC euler angle conversion issuepackage net.craftventure.core.animation.model; -------------------------------------------------------------------------------- /net/craftventure/core/animation/Door.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation 2 | 3 | import java.time.Duration 4 | 5 | interface Door { 6 | fun open(duration: Duration) = open(duration.toMillis().toInt() / 50) 7 | fun open(ticks: Int) 8 | 9 | fun close(duration: Duration) = close(duration.toMillis().toInt() / 50) 10 | fun close(ticks: Int) 11 | 12 | fun open(open: Boolean, duration: Duration) = if (open) open(duration) else close(duration) 13 | 14 | fun open(open: Boolean, duration: Int) = if (open) open(duration) else close(duration) 15 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/programpart/action/Action.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.programpart.action 2 | 3 | import net.craftventure.core.ride.tracklessride.TracklessRide 4 | import net.craftventure.core.ride.tracklessride.transport.TracklessRideCarGroup 5 | import net.craftventure.core.ride.tracklessride.transport.car.TracklessRideCar 6 | 7 | abstract class Action { 8 | open val forceRunOnCompletion: Boolean get() = false 9 | 10 | abstract fun execute(ride: TracklessRide, group: TracklessRideCarGroup, car: TracklessRideCar) 11 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketOperatorRideUpdate.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketOperatorRideUpdate( 8 | val ride: RideUpdate 9 | ) : BasePacket(PacketID.OPERATOR_RIDE_UPDATE) { 10 | @JsonClass(generateAdapter = true) 11 | class RideUpdate( 12 | val id: String, 13 | val name: String? = null, 14 | @Json(name = "force_display") 15 | val forceDisplay: Boolean 16 | ) 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/RideManager.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride 2 | 3 | import net.craftventure.core.ride.trackedride.FlatrideManager 4 | import net.craftventure.core.ride.trackedride.TrackedRideManager 5 | import net.craftventure.core.ride.trackedride.TracklessRideManager 6 | 7 | object RideManager { 8 | var allowAutoDispatch = true 9 | 10 | fun getRide(id: String): RideInstance? { 11 | return TrackedRideManager.getTrackedRide(id) ?: TracklessRideManager.getRide(id) ?: FlatrideManager.getFlatride( 12 | id 13 | ) 14 | } 15 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/property/DoubleProperty.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.property 2 | 3 | import kotlin.reflect.KMutableProperty0 4 | 5 | open class DoubleProperty( 6 | override val id: String, 7 | open var value: Double 8 | ) : Property { 9 | companion object { 10 | fun ofDelegate(id: String, property: KMutableProperty0): DoubleProperty { 11 | return object : DoubleProperty(id, property.get()) { 12 | override var value by property 13 | } 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/property/ObjectProperty.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture.property 2 | 3 | import io.reactivex.Flowable 4 | import net.craftventure.core.script.timeline.KeyFrameEasing 5 | import java.util.* 6 | 7 | interface ObjectProperty { 8 | val name: String 9 | val clazz: Class 10 | val inEasingOverride: Optional 11 | val outEasingOverride: Optional 12 | 13 | // fun asString(): String 14 | 15 | // fun fromString(input: String):T 16 | 17 | fun asFlowable(): Flowable 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/inputcontroller/KartController.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.inputcontroller 2 | 3 | import net.craftventure.core.feature.kart.Kart 4 | 5 | 6 | interface KartController { 7 | /** 8 | * 1 = left, -1 = right 9 | */ 10 | fun sideways(): Float 11 | 12 | /** 13 | * 1 = forward, -1 = backward 14 | */ 15 | fun forward(): Float 16 | 17 | fun isHandbraking(): Boolean 18 | fun isDismounting(): Boolean 19 | 20 | fun start(kart: Kart) 21 | fun stop() 22 | fun resetValues() 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/core/npc/actor/ActorFrame.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.actor 2 | 3 | import com.google.gson.annotations.Expose 4 | import com.google.gson.annotations.SerializedName 5 | import com.squareup.moshi.JsonClass 6 | import net.craftventure.core.npc.actor.action.ActorAction 7 | 8 | @JsonClass(generateAdapter = true) 9 | class ActorFrame @JvmOverloads constructor( 10 | @field:Expose 11 | val time: Long, 12 | @field:Expose 13 | @field:SerializedName("data") 14 | val action: T, 15 | @field:Expose 16 | val type: Int = 0 17 | ) -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonPoseConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | import net.minecraft.world.entity.Pose 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class JsonPoseConverter(val pose: org.bukkit.entity.Pose) : EntityInteractorJson() { 9 | override fun apply(interactable: EntityMetadata.Interactable, interactor: EntityMetadata.Interactor) { 10 | interactable.applyInteractor(interactor, Pose.values()[pose.ordinal]) 11 | } 12 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/OwnableItemRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.OwnableItemDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.OwnableItem 5 | import net.craftventure.database.generated.cvdata.tables.records.OwnableItemRecord 6 | import org.jooq.Configuration 7 | 8 | class OwnableItemRepository(configuration: Configuration) : BaseIdRepository( 9 | OwnableItemDao(configuration), 10 | shouldCache = true 11 | ) -------------------------------------------------------------------------------- /net/craftventure/database/repository/TebexPackageRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.TebexPackageDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.TebexPackage 5 | import net.craftventure.database.generated.cvdata.tables.records.TebexPackageRecord 6 | import org.jooq.Configuration 7 | 8 | class TebexPackageRepository(configuration: Configuration) : BaseIdRepository( 9 | TebexPackageDao(configuration), 10 | shouldCache = true 11 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/navigation/RouteNode.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.navigation 2 | 3 | data class RouteNode( 4 | val current: GraphNode, 5 | var previous: GraphNode? = null, 6 | var routeScore: Double = Double.POSITIVE_INFINITY, 7 | var estimatedScore: Double = Double.POSITIVE_INFINITY, 8 | ) : Comparable { 9 | override fun compareTo(other: RouteNode): Int = when { 10 | this.estimatedScore > other.estimatedScore -> 1 11 | this.estimatedScore < other.estimatedScore -> -1 12 | else -> 0 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/AchievementRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.AchievementDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.Achievement 5 | import net.craftventure.database.generated.cvdata.tables.records.AchievementRecord 6 | import org.jooq.Configuration 7 | 8 | class AchievementRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | AchievementDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/database/repository/CoinBoosterRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.CoinBoosterDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.CoinBooster 5 | import net.craftventure.database.generated.cvdata.tables.records.CoinBoosterRecord 6 | import org.jooq.Configuration 7 | 8 | class CoinBoosterRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | CoinBoosterDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/core/listener/GameModeChangeListener.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.listener 2 | 3 | import net.craftventure.bukkit.ktx.manager.MessageBarManager 4 | import net.craftventure.core.async.executeSync 5 | import org.bukkit.event.EventHandler 6 | import org.bukkit.event.Listener 7 | import org.bukkit.event.player.PlayerGameModeChangeEvent 8 | 9 | class GameModeChangeListener : Listener { 10 | @EventHandler 11 | fun onGameModeChanged(event: PlayerGameModeChangeEvent) { 12 | executeSync { 13 | MessageBarManager.trigger(event.player) 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/ScriptFrameMap.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script 2 | 3 | import com.google.gson.annotations.Expose 4 | import com.squareup.moshi.JsonClass 5 | import net.craftventure.core.script.action.ScriptActionFrame 6 | import java.util.* 7 | 8 | @JsonClass(generateAdapter = true) 9 | data class ScriptFrameMap( 10 | @Expose val updateTick: Long = 0, 11 | @Expose val repeat: Boolean = true, 12 | @Expose val playWithoutPlayersInArea: Boolean = false, 13 | @Expose val targetDuration: Long = 0, 14 | @Expose val frames: List> = LinkedList(), 15 | ) -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/FartItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.listener.AprilFoolsListener 5 | import net.craftventure.core.manager.EquipmentManager 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | 9 | @JsonClass(generateAdapter = true) 10 | class FartItemUseEffect() : ItemUseEffect() { 11 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 12 | AprilFoolsListener.fart(player) 13 | } 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/ShooterParticlePathFactory.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter 2 | 3 | import net.craftventure.core.npc.tracker.NpcAreaTracker 4 | import net.craftventure.core.script.particle.ParticleMap 5 | import net.craftventure.core.script.particle.ParticlePlayback 6 | 7 | class ShooterParticlePathFactory( 8 | val id: String, 9 | val context: ShooterRideContext, 10 | val data: ParticleMap 11 | ) { 12 | fun createPlayback(tracker: NpcAreaTracker): List { 13 | return data.paths.map { ParticlePlayback(it, tracker, 0) } 14 | } 15 | } -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/util/ChatSpan.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.util 2 | 3 | import net.kyori.adventure.text.Component 4 | 5 | 6 | abstract class ChatSpan(val startIndexInclusive: Int, val endIndexInclusive: Int) { 7 | open fun applyEffects() {} 8 | 9 | fun overlaps(other: ChatSpan) = 10 | other.startIndexInclusive <= startIndexInclusive && other.endIndexInclusive >= startIndexInclusive 11 | 12 | fun overlaps(index: Int) = startIndexInclusive <= index && index <= endIndexInclusive 13 | 14 | abstract fun appendTo(source: String, component: Component): Component 15 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/ItemStackDataRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.ItemStackDataDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.ItemStackData 5 | import net.craftventure.database.generated.cvdata.tables.records.ItemStackDataRecord 6 | import org.jooq.Configuration 7 | 8 | class ItemStackDataRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | ItemStackDataDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/AxisAlignedBBExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.minecraft.world.phys.AABB 4 | 5 | 6 | fun AABB.overlaps(other: AABB): Boolean { 7 | return this.intersects(other) 8 | } 9 | 10 | @Deprecated("Does this actually function properly?") 11 | fun AABB.add(x: Double, y: Double, z: Double): AABB { 12 | return this.contract(x, y, z) 13 | } 14 | 15 | fun AABB.xMin() = this.minX 16 | fun AABB.yMin() = this.minY 17 | fun AABB.zMin() = this.minZ 18 | fun AABB.xMax() = this.maxX 19 | fun AABB.yMax() = this.maxY 20 | fun AABB.zMax() = this.maxZ -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/CommandContextExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import cloud.commandframework.context.CommandContext 4 | import net.craftventure.bukkit.ktx.util.sendServerError 5 | import org.bukkit.command.CommandSender 6 | import org.bukkit.entity.Player 7 | 8 | fun CommandContext.requirePlayerOrSendMessageAndReturnNull(): Player? { 9 | val commandSender = this.sender 10 | if (commandSender !is Player) { 11 | commandSender.sendServerError("You must be a player") 12 | return null 13 | } 14 | return commandSender 15 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/util/BukkitLogger.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.util 2 | 3 | import net.craftventure.core.ktx.util.Logger 4 | import net.kyori.adventure.text.format.NamedTextColor 5 | 6 | class BukkitLogger { 7 | companion object { 8 | val Logger.Level.color 9 | get() = when (this) { 10 | Logger.Level.SEVERE -> NamedTextColor.DARK_RED 11 | Logger.Level.WARNING -> NamedTextColor.YELLOW 12 | Logger.Level.INFO -> NamedTextColor.WHITE 13 | Logger.Level.DEBUG -> NamedTextColor.GRAY 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/event/AudioServerConnectedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.event 2 | 3 | import net.craftventure.audioserver.websocket.ChannelMetaData 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.HandlerList 6 | import org.bukkit.event.player.PlayerEvent 7 | 8 | class AudioServerConnectedEvent(who: Player, val channelMetaData: ChannelMetaData) : PlayerEvent(who) { 9 | override fun getHandlers(): HandlerList { 10 | return handlerList 11 | } 12 | 13 | companion object { 14 | @JvmStatic 15 | val handlerList = HandlerList() 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketParkPhoto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class PacketParkPhoto( 7 | val data: String, 8 | val persons: List, 9 | val name: String, 10 | val time: Long, 11 | val type: Type 12 | ) : BasePacket(PacketID.PARK_PHOTO) { 13 | 14 | @JsonClass(generateAdapter = true) 15 | class PhotoPerson( 16 | val name: String?, 17 | val uuid: String 18 | ) 19 | 20 | enum class Type { 21 | ONRIDE_PICTURE 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/holders/StaticLocationHolder.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.holders 2 | 3 | import org.bukkit.Location 4 | 5 | 6 | class StaticLocationHolder( 7 | override val leashHolderEntityId: Int?, 8 | override val tracker: TrackerInfo, 9 | override val anchorLocation: Location, 10 | override val ownerCenterLocation: Location = anchorLocation, 11 | override val maxLeashLength: Double? = null, 12 | private val validCheck: () -> Boolean = { true }, 13 | ) : BalloonHolder() { 14 | override val isValid: Boolean 15 | get() = validCheck() 16 | } 17 | -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/DomExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import org.w3c.dom.Element 4 | import org.w3c.dom.Node 5 | import org.w3c.dom.NodeList 6 | 7 | fun NodeList.forEach(action: (Node) -> Unit): Unit { 8 | for (i in 0 until length) { 9 | action(item(i)) 10 | } 11 | } 12 | 13 | fun NodeList.toList(): List { 14 | val items = mutableListOf() 15 | forEach { 16 | items += it 17 | } 18 | return items 19 | } 20 | 21 | val Node.childElements: List 22 | get() = childNodes.toList().filterIsInstance(Element::class.java) -------------------------------------------------------------------------------- /net/craftventure/core/async/CvDispatchers.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.async 2 | 3 | import kotlinx.coroutines.asCoroutineDispatcher 4 | import net.craftventure.core.CraftventureCore 5 | import org.bukkit.Bukkit 6 | import java.util.concurrent.Executor 7 | 8 | object CvDispatchers { 9 | val asyncMainThreadExecutor = Executor { command -> 10 | val task = Bukkit.getScheduler().callSyncMethod(CraftventureCore.getInstance()) { 11 | command.run() 12 | } 13 | while (!task.isDone) { 14 | } 15 | } 16 | val mainThreadDispatcher = asyncMainThreadExecutor.asCoroutineDispatcher() 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/metadata/TickingBaseMetadata.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.metadata 2 | 3 | import net.craftventure.bukkit.ktx.entitymeta.BaseMetadata 4 | import net.craftventure.core.CraftventureCore 5 | import org.bukkit.Bukkit 6 | 7 | abstract class TickingBaseMetadata : BaseMetadata() { 8 | private val task = Bukkit.getScheduler().scheduleSyncRepeatingTask(CraftventureCore.getInstance(), { 9 | update() 10 | }, 1L, 1L) 11 | 12 | protected open fun update() {} 13 | 14 | override fun onDestroy() { 15 | super.onDestroy() 16 | Bukkit.getScheduler().cancelTask(task) 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/EntityExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.craftventure.bukkit.ktx.util.EntityTable 4 | import org.bukkit.entity.Entity 5 | import org.bukkit.entity.EntityType 6 | import org.bukkit.entity.LivingEntity 7 | 8 | 9 | val EntityType.nmsTypeId: Int? 10 | get() = EntityTable.getTypeId(this) 11 | 12 | val EntityType.isLivingEntity: Boolean 13 | get() = LivingEntity::class.java.isAssignableFrom(this.entityClass) 14 | 15 | fun Entity.ejectAndRemove() { 16 | eject() 17 | remove() 18 | } 19 | 20 | fun T.takeIfValid() = takeIf { it.isValid } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/concurrency/ThreadHelpers.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.coroutine 2 | 3 | import net.craftventure.core.ktx.concurrency.CvExecutors 4 | import net.craftventure.core.ktx.util.Logger 5 | 6 | //val mainDispatcher = (Executor { command -> 7 | // Bukkit.getScheduler().runTask(CraftventureCore.getInstance(), command) 8 | //}).asCoroutineDispatcher() 9 | 10 | fun executeAsync(action: () -> Unit) = 11 | CvExecutors.executor.execute { 12 | try { 13 | action.invoke() 14 | } catch (e: Exception) { 15 | Logger.capture(e) 16 | throw e 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/config/ShooterConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import org.bukkit.entity.EntityType 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class ShooterConfig( 8 | val scenes: Map, 9 | val gunItem: String, 10 | val gunItemAlwaysInHand: Boolean, 11 | val gunCooldownSeconds: Double, 12 | val gravity: Double? = null, 13 | val shootSpeed: Double? = null, 14 | val bulletModel: Int = 1, 15 | val entityHitboxes: Map = emptyMap(), 16 | ) 17 | 18 | -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/ScriptStopEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.core.script.ScriptController 4 | import org.bukkit.Bukkit 5 | import org.bukkit.event.Event 6 | import org.bukkit.event.HandlerList 7 | 8 | 9 | class ScriptStopEvent( 10 | val script: ScriptController, 11 | val group: String, 12 | val name: String 13 | ) : Event(!Bukkit.isPrimaryThread()) { 14 | override fun getHandlers(): HandlerList { 15 | return handlerList 16 | } 17 | 18 | companion object { 19 | @JvmStatic 20 | val handlerList = HandlerList() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/event/FeatureToggledEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.event 2 | 3 | import net.craftventure.bukkit.ktx.manager.FeatureManager 4 | import org.bukkit.Bukkit 5 | import org.bukkit.event.Event 6 | import org.bukkit.event.HandlerList 7 | 8 | 9 | class FeatureToggledEvent( 10 | val feature: FeatureManager.Feature, 11 | val enabled: Boolean 12 | ) : Event(!Bukkit.isPrimaryThread()) { 13 | 14 | override fun getHandlers(): HandlerList { 15 | return handlerList 16 | } 17 | 18 | companion object { 19 | @JvmStatic 20 | val handlerList = HandlerList() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/physics/BalloonPhysics.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.physics 2 | 3 | import net.craftventure.core.feature.balloon.types.ExtensibleBalloon 4 | import org.bukkit.Location 5 | 6 | abstract class BalloonPhysics { 7 | open val currentRotationalForces: Double 8 | get() = 0.0 9 | 10 | abstract fun update( 11 | balloon: ExtensibleBalloon, 12 | ownerLocation: Location, 13 | balloonLocation: Location, 14 | oldBalloonLocation: Location 15 | ) 16 | 17 | abstract class Json { 18 | abstract fun toPhysics(): BalloonPhysics 19 | } 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/MathExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | 4 | fun Double.clamp(min: Double, max: Double): Double = Math.max(min, Math.min(this, max)) 5 | fun Float.clamp(min: Float, max: Float): Float = Math.max(min, Math.min(this, max)) 6 | fun Long.clamp(min: Double, max: Double): Double = Math.max(min, Math.min(this.toDouble(), max)) 7 | fun Int.clamp(min: Int, max: Int): Int = if (this > max) max else if (this < min) min else this 8 | 9 | fun Double.clampDegrees(): Double { 10 | var value = this 11 | while (value < 0) { 12 | value += 360 13 | } 14 | return value % 360 15 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/FileUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | import java.io.File 4 | 5 | fun File.getRelativeFileName(withExtension: Boolean = true, root: File?): String { 6 | val file = if (root != null) this.relativeTo(root) else this 7 | val path = file.toPath() 8 | 9 | var name = "" 10 | for (i in 0 until path.nameCount - 1) { 11 | if (name.isNotEmpty()) 12 | name += "/" 13 | name += path.getName(i) 14 | } 15 | if (name.isNotEmpty()) 16 | name += "/" 17 | name += if (withExtension) file.name else file.nameWithoutExtension 18 | return name 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/ScriptLoadedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.core.script.ScriptController 4 | import org.bukkit.Bukkit 5 | import org.bukkit.event.Event 6 | import org.bukkit.event.HandlerList 7 | 8 | 9 | class ScriptLoadedEvent( 10 | val script: ScriptController, 11 | val group: String, 12 | val name: String 13 | ) : Event(!Bukkit.isPrimaryThread()) { 14 | override fun getHandlers(): HandlerList { 15 | return handlerList 16 | } 17 | 18 | companion object { 19 | @JvmStatic 20 | val handlerList = HandlerList() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/ScriptStartEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.core.script.ScriptController 4 | import org.bukkit.Bukkit 5 | import org.bukkit.event.Event 6 | import org.bukkit.event.HandlerList 7 | 8 | 9 | class ScriptStartEvent( 10 | val script: ScriptController, 11 | val group: String, 12 | val name: String 13 | ) : Event(!Bukkit.isPrimaryThread()) { 14 | override fun getHandlers(): HandlerList { 15 | return handlerList 16 | } 17 | 18 | companion object { 19 | @JvmStatic 20 | val handlerList = HandlerList() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/database/repository/CachedGameProfileRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.CachedGameProfileDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.CachedGameProfile 5 | import net.craftventure.database.generated.cvdata.tables.records.CachedGameProfileRecord 6 | import org.jooq.Configuration 7 | 8 | class CachedGameProfileRepository( 9 | configuration: Configuration 10 | ) : BaseIdRepository( 11 | CachedGameProfileDao(configuration), 12 | shouldCache = true 13 | ) -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/ScriptUnloadedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.core.script.ScriptController 4 | import org.bukkit.Bukkit 5 | import org.bukkit.event.Event 6 | import org.bukkit.event.HandlerList 7 | 8 | 9 | class ScriptUnloadedEvent( 10 | val script: ScriptController, 11 | val group: String, 12 | val name: String 13 | ) : Event(!Bukkit.isPrimaryThread()) { 14 | override fun getHandlers(): HandlerList { 15 | return handlerList 16 | } 17 | 18 | companion object { 19 | @JvmStatic 20 | val handlerList = HandlerList() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/database/repository/SlotMachineItemsRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.tables.daos.SlotMachineItemDao 4 | import net.craftventure.database.generated.cvdata.tables.pojos.SlotMachineItem 5 | import net.craftventure.database.generated.cvdata.tables.records.SlotMachineItemRecord 6 | import org.jooq.Configuration 7 | import java.util.* 8 | 9 | class SlotMachineItemsRepository( 10 | configuration: Configuration 11 | ) : BaseIdRepository( 12 | SlotMachineItemDao(configuration), 13 | shouldCache = true 14 | ) -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/AreaFilter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | class AreaFilter( 7 | val areas: List, 8 | val feather: Double, 9 | val easing: String?, 10 | val kind: String, 11 | val type: String?, 12 | val frequency: AreaValuePair?, 13 | val detune: AreaValuePair?, 14 | val gain: AreaValuePair?, 15 | val q: AreaValuePair? 16 | ) 17 | 18 | @JsonClass(generateAdapter = true) 19 | class AreaValuePair( 20 | val active: T, 21 | val inactive: T 22 | ) 23 | -------------------------------------------------------------------------------- /net/craftventure/core/database/model/ownable/PredecessorRideCount.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.model.ownable 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.database.MainRepositoryProvider 5 | import org.bukkit.entity.Player 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class PredecessorRideCount( 9 | val name: String, 10 | val count: Int? = null, 11 | val onlyShowIfMissing: Boolean = false 12 | ) { 13 | fun hasCompleted(player: Player) = 14 | MainRepositoryProvider.rideCounterRepository.get(player.uniqueId, name)?.count?.let { 15 | it >= (count ?: 1) 16 | } ?: false 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/track/PathPart.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.track 2 | 3 | import org.bukkit.util.Vector 4 | 5 | abstract class PathPart { 6 | abstract val id: String 7 | 8 | // val nodes: Set 9 | abstract val length: Double 10 | 11 | // fun linkNode(node: Node, at: Double) 12 | // fun unlinkNode(node: Node) 13 | 14 | open fun positionAt(distance: Double): Vector = Vector().also { positionAt(distance, it) } 15 | abstract fun positionAt(distance: Double, vector: Vector) 16 | 17 | abstract class Data { 18 | abstract fun toPathPart(): PathPart 19 | } 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/config/BorderConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.bukkit.ktx.area.Area 5 | import net.craftventure.bukkit.ktx.area.SimpleArea 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class BorderConfig( 9 | val xMin: Long = 0, 10 | val xMax: Long = 0, 11 | val zMin: Long = 0, 12 | val zMax: Long = 0, 13 | val crewOnly: Boolean = true, 14 | val renderTiles: Boolean = false, 15 | ) { 16 | val area: Area by lazy { 17 | SimpleArea("world", xMin.toDouble(), -100.0, zMin.toDouble(), xMax.toDouble(), 300.0, zMax.toDouble()) 18 | } 19 | } -------------------------------------------------------------------------------- /net/craftventure/database/type/SlotMachineRewardType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class SlotMachineRewardType(val description: String) { 7 | X0_5("0.5x"), 8 | X1("1x"), 9 | X2("2x"), 10 | X3("3x"), 11 | X4("4x"), 12 | X5("5x"), 13 | X6("6x"), 14 | X8("8x"), 15 | X10("10x"), 16 | X15("15x"), 17 | X20("20x"), 18 | X25("25x"), 19 | X50("50x"); 20 | 21 | companion object { 22 | class Converter : 23 | EnumConverter(String::class.java, SlotMachineRewardType::class.java) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/scene/SceneData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.scene 2 | 3 | import net.craftventure.core.ride.tracklessride.TracklessRide 4 | import net.craftventure.core.ride.tracklessride.programpart.data.ProgramPartData 5 | import java.util.concurrent.TimeUnit 6 | 7 | abstract class SceneData { 8 | lateinit var type: String 9 | lateinit var exitsTo: List 10 | lateinit var program: Map>> 11 | val limitEntryValue: Int? = null 12 | val limitEntryUnit: TimeUnit? = null 13 | 14 | abstract fun toScene(tracklessRide: TracklessRide, id: String): TracklessRideScene 15 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/SynchedEntityData.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.minecraft.network.syncher.EntityDataAccessor 4 | import net.minecraft.network.syncher.SynchedEntityData 5 | 6 | 7 | 8 | //fun SynchedEntityData.setMetadata(field: EntityMetadata.Interactor, value: T) { 9 | // setMetadata(field.accessor, value, field.defaultValue) 10 | //} 11 | 12 | fun SynchedEntityData.setMetadata(field: EntityDataAccessor, value: T, defaultValue: T) { 13 | try { 14 | set(field, value) 15 | } catch (e: Exception) { 16 | define(field, defaultValue) 17 | set(field, value) 18 | } 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/KartOwner.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart 2 | 3 | import net.craftventure.core.serverevent.PlayerEquippedItemsUpdateEvent 4 | import org.bukkit.entity.Player 5 | 6 | interface KartOwner { 7 | fun isOwner(player: Player) = false 8 | 9 | fun handlePlayerWornItemUpdateEvent(event: PlayerEquippedItemsUpdateEvent) {} 10 | 11 | fun isKartEnabled(kart: Kart): Boolean = true 12 | fun canExit(kart: Kart): Boolean = true 13 | fun tryToExit(kart: Kart): Boolean = true 14 | fun onDestroyed(kart: Kart) {} 15 | fun shouldRespawn(kart: Kart): KartRespawnData? = null 16 | fun allowUserDestroying() = true 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/config/ShooterSceneConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.bukkit.ktx.area.Area 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class ShooterSceneConfig( 8 | val duration: Double, 9 | val keepPlayingSeconds: Double?, 10 | val gunCooldownSeconds: Double?, 11 | val area: Area.Json, 12 | val idleEntities: List? = null, 13 | val entities: List, 14 | val idleParticles: List? = null, 15 | val particles: List? = null, 16 | ) -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/ComponentBuilderExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.md_5.bungee.api.chat.ComponentBuilder 4 | import net.md_5.bungee.api.chat.TextComponent 5 | 6 | operator fun ComponentBuilder.plusAssign(text: String) { 7 | append(TextComponent.fromLegacyText(text), ComponentBuilder.FormatRetention.FORMATTING) 8 | } 9 | 10 | operator fun ComponentBuilder.plusAssign(text: TextComponent) { 11 | append(text, ComponentBuilder.FormatRetention.FORMATTING) 12 | } 13 | 14 | operator fun ComponentBuilder.plusAssign(texts: Array) { 15 | append(texts, ComponentBuilder.FormatRetention.FORMATTING) 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/IntegerExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | 4 | fun Int.asOrdinal(): String { 5 | val suffixes = arrayOf("th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th") 6 | return when (this % 100) { 7 | 11, 12, 13 -> "th" 8 | else -> suffixes[this % 10] 9 | } 10 | } 11 | 12 | fun Long.toRangedInteger(): Long { 13 | if (this >= Long.MAX_VALUE) 14 | return Long.MAX_VALUE - 1 15 | if (this <= Long.MIN_VALUE) 16 | return Long.MIN_VALUE + 1 17 | return this 18 | } 19 | 20 | fun Int.asOrdinalAppended(): String { 21 | return this.toString() + this.asOrdinal() 22 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/BitFlags.kt: -------------------------------------------------------------------------------- 1 | @file:Suppress("NOTHING_TO_INLINE") 2 | 3 | package net.craftventure 4 | 5 | 6 | import kotlin.experimental.and // Used for Byte 7 | import kotlin.experimental.inv // Used for Byte 8 | import kotlin.experimental.or // Used for Byte 9 | 10 | inline infix fun Int.hasFlag(flag: Int) = flag and this == flag 11 | inline infix fun Int.withFlag(flag: Int) = this or flag 12 | inline infix fun Int.minusFlag(flag: Int) = this and flag.inv() 13 | 14 | inline infix fun Byte.hasFlag(flag: Byte) = flag and this == flag 15 | inline infix fun Byte.withFlag(flag: Byte) = this or flag 16 | inline infix fun Byte.minusFlag(flag: Byte) = this and flag.inv() -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/config/KartColorConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.feature.kart.KartPart 5 | import net.craftventure.core.feature.kart.NamedPart 6 | import net.craftventure.core.ktx.extension.orElse 7 | import java.util.* 8 | 9 | @JsonClass(generateAdapter = true) 10 | data class KartColorConfig( 11 | override val id: String, 12 | override val displayName: String, 13 | override val extends: String? = null, 14 | val defaultColor: Optional? = null, 15 | ) : KartPart, NamedPart { 16 | override fun isValid() = defaultColor?.orElse() != null 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/fountain/OarsmanJet.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture.fountain 2 | 3 | import net.craftventure.core.script.fixture.Location 4 | import net.craftventure.core.script.fixture.property.DoubleProperty 5 | 6 | class OarsmanJet( 7 | name: String, 8 | location: Location 9 | ) : Fountain( 10 | name, 11 | location, 12 | "fountain:oarsmanjet" 13 | ) { 14 | init { 15 | properties.add(DoubleProperty("pressure", 0.0, min = 0.0, max = 2.0)) 16 | properties.add(DoubleProperty("heading", 0.0)) 17 | properties.add(DoubleProperty("pitch", -90.0)) 18 | } 19 | 20 | override fun destroy() {} 21 | } 22 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/json/VectorAdapter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.json 2 | 3 | import com.squareup.moshi.FromJson 4 | import com.squareup.moshi.JsonClass 5 | import com.squareup.moshi.ToJson 6 | import org.bukkit.Location 7 | import org.bukkit.util.Vector 8 | 9 | 10 | class VectorAdapter { 11 | @FromJson 12 | fun fromJson(json: Json) = Vector(json.x, json.y, json.z) 13 | 14 | @ToJson 15 | fun toJson(instance: Location) = Json(instance.x, instance.y, instance.z) 16 | 17 | @JsonClass(generateAdapter = true) 18 | data class Json( 19 | val x: Double = 0.0, 20 | val y: Double = 0.0, 21 | val z: Double = 0.0, 22 | ) 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/effect/EffectManager.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.effect 2 | 3 | 4 | object EffectManager { 5 | private val simpleEffects = HashMap() 6 | 7 | fun add(simpleEffect: SimpleEffect) { 8 | simpleEffects[simpleEffect.name] = simpleEffect 9 | } 10 | 11 | fun findByName(name: String): SimpleEffect? { 12 | return simpleEffects[name] 13 | } 14 | 15 | fun keys() = simpleEffects.keys 16 | 17 | fun shutdown() { 18 | for (simpleEffect in simpleEffects.values) { 19 | simpleEffect.stop() 20 | } 21 | } 22 | 23 | init { 24 | add(MatShopExitDoor()) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonIntegerConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class JsonIntegerConverter( 8 | val value: Int, 9 | val any: List? = null, 10 | ) : EntityInteractorJson() { 11 | override fun apply(interactable: EntityMetadata.Interactable, interactor: EntityMetadata.Interactor) { 12 | if (!any.isNullOrEmpty()) { 13 | interactable.applyInteractor(interactor, any.random()) 14 | } else 15 | interactable.applyInteractor(interactor, value) 16 | } 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/async/AsyncTask.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.async 2 | 3 | import net.craftventure.core.CraftventureCore 4 | import net.craftventure.core.ktx.util.Logger 5 | 6 | @Deprecated("Use executeAsync and executeSync") 7 | abstract class AsyncTask : Runnable { 8 | override fun run() { 9 | try { 10 | doInBackground() 11 | } catch (e: Exception) { 12 | Logger.capture(IllegalStateException("AsyncTask failed to execute its background task", e)) 13 | } 14 | 15 | } 16 | 17 | fun executeNow() { 18 | CraftventureCore.getExecutorService().execute(this) 19 | } 20 | 21 | abstract fun doInBackground() 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/GuestStatRepositoryExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.database.generated.cvdata.Cvdata 4 | import net.craftventure.database.repository.GuestStatRepository 5 | import org.bukkit.entity.Player 6 | import java.time.LocalDateTime 7 | 8 | fun GuestStatRepository.update(player: Player) = withDslIgnoreErrors(false) { dsl -> 9 | dsl.update(table) 10 | .set(Cvdata.CVDATA.GUEST_STAT.LAST_KNOWN_NAME, player.name) 11 | .set(Cvdata.CVDATA.GUEST_STAT.LAST_SEEN, LocalDateTime.now()) 12 | .where(Cvdata.CVDATA.GUEST_STAT.UUID.eq(player.uniqueId)) 13 | .execute() == 1 14 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/holders/BalloonHolder.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.holders 2 | 3 | import net.craftventure.core.npc.tracker.NpcEntityTracker 4 | import org.bukkit.Location 5 | 6 | 7 | abstract class BalloonHolder { 8 | abstract val anchorLocation: Location 9 | open val ownerCenterLocation: Location get() = anchorLocation 10 | abstract val isValid: Boolean 11 | abstract val leashHolderEntityId: Int? 12 | abstract val tracker: TrackerInfo 13 | open val maxLeashLength: Double? = null 14 | 15 | data class TrackerInfo( 16 | val tracker: NpcEntityTracker, 17 | val shouldHandleManagement: Boolean, 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/BankAccountUpdateEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.database.type.BankAccountType 4 | import org.bukkit.Bukkit 5 | import org.bukkit.entity.Player 6 | import org.bukkit.event.Event 7 | import org.bukkit.event.HandlerList 8 | 9 | 10 | class BankAccountUpdateEvent( 11 | val player: Player, 12 | val type: BankAccountType, 13 | val newBalance: Long 14 | ) : Event(!Bukkit.isPrimaryThread()) { 15 | 16 | override fun getHandlers(): HandlerList { 17 | return handlerList 18 | } 19 | 20 | companion object { 21 | @JvmStatic 22 | val handlerList = HandlerList() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /net/craftventure/database/type/TransactionType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class TransactionType { 7 | SHOP, 8 | ACHIEVEMENT, 9 | CASINO_WIN, 10 | CASINO_SPEND, 11 | COMMAND, 12 | ACTIVE_ONLINE_REWARD, 13 | SCAVENGER_PACKET, 14 | DAILY_WINTER_CHEST, 15 | DAILY_SUMMER_CHEST, 16 | MINIGAME, 17 | EVENT, 18 | ENTITY_KILL, 19 | WISHING_WELL, 20 | WVW_REWARD, 21 | SHOOTER_RIDE_REWARD, 22 | BARBER; 23 | 24 | companion object { 25 | class Converter : EnumConverter(String::class.java, TransactionType::class.java) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/SendChatItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.chat.bungee.util.parseWithCvMessage 5 | import net.craftventure.core.manager.EquipmentManager 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | 9 | @JsonClass(generateAdapter = true) 10 | class SendChatItemUseEffect( 11 | val message: String, 12 | ) : ItemUseEffect() { 13 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 14 | val parsed = message.parseWithCvMessage() 15 | player.sendMessage(parsed) 16 | } 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/KartSeat.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart 2 | 3 | import org.bukkit.entity.EntityType 4 | import org.bukkit.inventory.ItemStack 5 | 6 | data class KartSeat( 7 | var id: String = "default", 8 | var matrix: Matrix4x4, 9 | var shouldPlayerBeInvisible: Boolean, 10 | var allowItems: Boolean, 11 | var parentBone: String? = null, 12 | var passengerSeat: Boolean = true, 13 | var entityType: EntityType = EntityType.ARMOR_STAND, 14 | var enterPermission: String? = null, 15 | var matrixInterceptor: ((kart: Kart, matrix: Matrix4x4) -> Unit)? = null, 16 | var matrixPreInterceptor: ((kart: Kart, seat: Kart.Seat) -> Unit)? = null, 17 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/UuidExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.nio.ByteBuffer 4 | import java.nio.ByteOrder 5 | import java.util.* 6 | 7 | fun String.toUuid() = UUID.fromString(this) 8 | 9 | fun UUID.toBinary(): ByteArray { 10 | val uuidBytes = ByteArray(16) 11 | ByteBuffer.wrap(uuidBytes) 12 | .order(ByteOrder.BIG_ENDIAN) 13 | .putLong(mostSignificantBits) 14 | .putLong(leastSignificantBits) 15 | return uuidBytes 16 | } 17 | 18 | fun ByteArray.toUuid(): UUID { 19 | require(size == 16) 20 | val buf = ByteBuffer.wrap(this) 21 | .order(ByteOrder.BIG_ENDIAN) 22 | return UUID(buf.long, buf.long) 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonRotationsConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | import net.minecraft.core.Rotations 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class JsonRotationsConverter(val x: Float, val y: Float, val z: Float) : EntityInteractorJson() { 9 | override fun apply( 10 | interactable: EntityMetadata.Interactable, 11 | interactor: EntityMetadata.Interactor 12 | ) { 13 | interactable.applyInteractor( 14 | interactor, 15 | Rotations.createWithoutValidityChecks(x, y, z) 16 | ) 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/gonbao/GonBaoPlayer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.gonbao 2 | 3 | /*import net.craftventure.core.feature.minigame.MinigamePlayer 4 | import org.bukkit.entity.Player 5 | 6 | class GonBaoPlayer( 7 | player: Player 8 | ) : MinigamePlayer(player) { 9 | fun update(level: GonBaoLevel) { 10 | // if (!finished()) { 11 | // if (level.finish.isInArea(player)) { 12 | // finishTime = System.currentTimeMillis() 13 | // player.sendMessage(CVChatColor.COMMAND_GENERAL + "You finished! You'll have to wait for all players to finish or the time to run out though!") 14 | // } 15 | // } 16 | } 17 | }*/ 18 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/event/AsyncPlayerLocationChangedEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.event 2 | 3 | import org.bukkit.Location 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.HandlerList 6 | import org.bukkit.event.player.PlayerEvent 7 | 8 | 9 | class AsyncPlayerLocationChangedEvent( 10 | player: Player, 11 | val to: Location, 12 | val locationChanged: Boolean, 13 | val lookChanged: Boolean, 14 | val isTeleport: Boolean 15 | ) : PlayerEvent(player, true) { 16 | override fun getHandlers(): HandlerList { 17 | return handlerList 18 | } 19 | 20 | companion object { 21 | @JvmStatic 22 | val handlerList = HandlerList() 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/jumpchallenge/JumpChallengeLevel.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.jumpchallenge 2 | 3 | import net.craftventure.bukkit.ktx.area.Area 4 | import net.craftventure.core.feature.minigame.BaseMinigameLevel 5 | import net.craftventure.core.feature.minigame.SpawnLocation 6 | 7 | class JumpChallengeLevel( 8 | id: String, 9 | maxPlayers: Int = 12, 10 | playTimeInSeconds: Int, 11 | val spawnLocation: SpawnLocation, 12 | val finish: Area, 13 | area: Area 14 | ) : BaseMinigameLevel( 15 | id, 16 | maxPlayers, 17 | playTimeInSeconds, 18 | area 19 | ) { 20 | override fun toJson(): Json { 21 | TODO("Not yet implemented") 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/operator/controls/ControlColors.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.operator.controls 2 | 3 | import net.craftventure.bukkit.ktx.extension.colorFromHex 4 | import org.bukkit.Color 5 | 6 | object ControlColors { 7 | @JvmStatic 8 | val NEUTRAL_DARK = colorFromHex("#7b7b7b") 9 | 10 | @JvmStatic 11 | val NEUTRAL = Color.WHITE 12 | 13 | @JvmStatic 14 | val GREEN_BRIGHT = colorFromHex("#21b11a") 15 | 16 | @JvmStatic 17 | val GREEN = colorFromHex("#495b24") 18 | 19 | @JvmStatic 20 | val RED_BRIGHT = colorFromHex("#b92424") 21 | 22 | @JvmStatic 23 | val RED = colorFromHex("#8e2020") 24 | 25 | @JvmStatic 26 | val BLUE = colorFromHex("#2e3483") 27 | } -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/AchievementRewardItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.manager.EquipmentManager 5 | import net.craftventure.database.MainRepositoryProvider 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | 9 | @JsonClass(generateAdapter = true) 10 | class AchievementRewardItemUseEffect( 11 | val achievementId: String, 12 | ) : ItemUseEffect() { 13 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 14 | MainRepositoryProvider.achievementProgressRepository.reward(player.uniqueId, achievementId) 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/config/AudioMarker.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.audioserver.packet.AudioPacketPoint 5 | 6 | @JsonClass(generateAdapter = true) 7 | class AudioMarker( 8 | val id: String, 9 | val type: String? = null, 10 | val className: String? = null, 11 | val group: String? = null, 12 | val popupName: String? = null, 13 | val base64: String? = null, 14 | val url: String? = null, 15 | val x: Double, 16 | val z: Double, 17 | val zIndex: Int? = null, 18 | val size: AudioPacketPoint? = null, 19 | val anchor: AudioPacketPoint? = null, 20 | val popupAnchor: AudioPacketPoint? = null, 21 | ) 22 | -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/SoundItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.manager.EquipmentManager 5 | import org.bukkit.Location 6 | import org.bukkit.entity.Player 7 | 8 | @JsonClass(generateAdapter = true) 9 | class SoundItemUseEffect( 10 | val sounds: List, 11 | val volume: Float = 1f, 12 | val pitch: Float = 1f, 13 | ) : ItemUseEffect() { 14 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 15 | val sound = sounds.randomOrNull() ?: return 16 | player.world.playSound(player.location, sound, volume, pitch) 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/armature/ArmatureConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.armature 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.utils.ItemStackUtils 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class ArmatureConfig( 8 | val animation: String, 9 | val initial_models: List 10 | ) { 11 | @JsonClass(generateAdapter = true) 12 | data class ModelConfig( 13 | val joint: String, 14 | val model: String 15 | ) { 16 | val modelStack by lazy { ItemStackUtils.fromString(model) } 17 | 18 | val regex = joint.toRegex() 19 | } 20 | 21 | fun getModel(jointName: String) = initial_models.firstOrNull { it.regex.matches(jointName) } 22 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/fountain/Bloom.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture.fountain 2 | 3 | import net.craftventure.core.script.fixture.Location 4 | import net.craftventure.core.script.fixture.property.DoubleProperty 5 | import net.craftventure.core.script.fixture.property.IntProperty 6 | 7 | class Bloom( 8 | name: String, 9 | location: Location 10 | ) : Fountain( 11 | name, 12 | location, 13 | "fountain:bloom" 14 | ) { 15 | 16 | init { 17 | properties.add(DoubleProperty("pressure", 0.0, min = 0.0, max = 2.0)) 18 | properties.add(DoubleProperty("pitch", -50.0)) 19 | properties.add(IntProperty("rays", 0, 1, 10)) 20 | } 21 | 22 | override fun destroy() {} 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/database/type/ConsumableType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class ConsumableType( 7 | val displayName: String, 8 | val consumeUponUsage: Boolean, 9 | val allowOwningMultiple: Boolean = true 10 | ) { 11 | SINGLE(displayName = "permanent", consumeUponUsage = false, allowOwningMultiple = false), 12 | CONSUMABLE(displayName = "consumable", consumeUponUsage = true), 13 | CUSTOMIZABLE(displayName = "customizable", consumeUponUsage = false, allowOwningMultiple = true); 14 | 15 | companion object { 16 | class Converter : EnumConverter(String::class.java, ConsumableType::class.java) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/AchievementIncrementItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.manager.EquipmentManager 5 | import net.craftventure.database.MainRepositoryProvider 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | 9 | @JsonClass(generateAdapter = true) 10 | class AchievementIncrementItemUseEffect( 11 | val achievementId: String, 12 | ) : ItemUseEffect() { 13 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 14 | MainRepositoryProvider.achievementProgressRepository.increaseCounter(player.uniqueId, achievementId) 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/actions/ExitToSafeLocation.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.actions 2 | 3 | import net.craftventure.bukkit.ktx.extension.set 4 | import net.craftventure.core.feature.kart.Kart 5 | import net.craftventure.core.metadata.setLeaveLocation 6 | import org.bukkit.entity.Player 7 | 8 | class ExitToSafeLocation : ExitHandler { 9 | override fun onExit(kart: Kart, player: Player) { 10 | // logcat { "Handle kart exit for ${player.name}" } 11 | // Logger.debug("Exit handler to kart loc") 12 | val location = player.location.clone() 13 | location.set(kart.location) 14 | player.setLeaveLocation(location) 15 | // player.teleport(location) 16 | } 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/script/fixture/fountain/LillyJet.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script.fixture.fountain 2 | 3 | import net.craftventure.core.script.fixture.Location 4 | import net.craftventure.core.script.fixture.property.DoubleProperty 5 | import net.craftventure.core.script.fixture.property.IntProperty 6 | 7 | class LillyJet( 8 | name: String, 9 | location: Location 10 | ) : Fountain( 11 | name, 12 | location, 13 | "fountain:lillyjet" 14 | ) { 15 | init { 16 | properties.add(DoubleProperty("pressure", 0.0, min = 0.0, max = 2.0)) 17 | properties.add(DoubleProperty("pitch", -50.0)) 18 | properties.add(IntProperty("rays", 0, 1, 10)) 19 | } 20 | 21 | override fun destroy() {} 22 | } 23 | -------------------------------------------------------------------------------- /net/craftventure/core/task/EurosatBotTask.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.task 2 | 3 | import net.craftventure.audioserver.api.AudioServerApi 4 | import net.craftventure.core.CraftventureCore 5 | import net.craftventure.core.script.ScriptManager 6 | import org.bukkit.Bukkit 7 | 8 | object EurosatBotTask { 9 | fun init() { 10 | Bukkit.getScheduler().scheduleSyncRepeatingTask(CraftventureCore.getInstance(), { 11 | AudioServerApi.enable("spacemountain_eurosatbot") 12 | AudioServerApi.sync("spacemountain_eurosatbot", System.currentTimeMillis()) 13 | ScriptManager.stop("spacemountain", "robot") 14 | ScriptManager.start("spacemountain", "robot") 15 | }, 20L, 20 * 63) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/entitymeta/MetaListener.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.entitymeta 2 | 3 | import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.EventHandler 6 | import org.bukkit.event.EventPriority 7 | import org.bukkit.event.Listener 8 | 9 | class MetaListener : Listener { 10 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) 11 | fun onEntityRemoved(event: EntityRemoveFromWorldEvent) { 12 | // Logger.debug("Removed ${event.entity.type}") 13 | if (event.entity !is Player) { 14 | MetaAnnotations.cleanup(event.entity) 15 | EntityEvents.cleanup(event.entity) 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/config/KartExitAction.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.feature.kart.actions.ExitNonVipToNearestWarp 5 | import net.craftventure.core.feature.kart.actions.ExitToNearestWarp 6 | import net.craftventure.core.feature.kart.actions.ExitToSafeLocation 7 | 8 | @JsonClass(generateAdapter = true) 9 | data class KartExitAction( 10 | val type: String, 11 | val data: String? = null 12 | ) { 13 | fun toAction() = when (type) { 14 | "warp/nearest" -> ExitToNearestWarp() 15 | "warp/non_vip_nearest" -> ExitNonVipToNearestWarp() 16 | "safe" -> ExitToSafeLocation() 17 | else -> null 18 | } 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/car/DynamicSeatedRideCarJson.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride.car 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.ride.trackedride.RideCar 5 | import net.craftventure.core.ride.trackedride.TrackedRide 6 | import net.craftventure.core.ride.trackedride.car.seat.Seat 7 | 8 | @JsonClass(generateAdapter = true) 9 | class DynamicSeatedRideCarJson : RideCar.Json() { 10 | lateinit var seats: List 11 | 12 | override fun create(ride: TrackedRide): RideCar = DynamicSeatedRideCar(ride.name, length).also { car -> 13 | seats.forEach { seat -> 14 | car.addSeat(seat.create(ride, car)) 15 | } 16 | car.restore(this) 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/scene/TracklessDefaultScene.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.scene 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.ride.tracklessride.TracklessRide 5 | 6 | class TracklessDefaultScene( 7 | id: String, 8 | tracklessRide: TracklessRide, 9 | private val data: Data, 10 | ) : TracklessRideScene(id, tracklessRide, data) { 11 | 12 | companion object { 13 | const val type = "scene" 14 | } 15 | 16 | @JsonClass(generateAdapter = true) 17 | class Data : SceneData() { 18 | override fun toScene(tracklessRide: TracklessRide, id: String): TracklessRideScene = 19 | TracklessDefaultScene(id, tracklessRide, this) 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/core/manager/ProjectileEvents.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.manager 2 | 3 | import com.destroystokyo.paper.event.server.ServerTickEndEvent 4 | import net.craftventure.bukkit.ktx.entitymeta.EntityEvents.registerListenerAsLongAsValid 5 | import org.bukkit.entity.Entity 6 | import org.bukkit.event.EventHandler 7 | import org.bukkit.event.Listener 8 | 9 | 10 | object ProjectileEvents { 11 | fun Entity.removeUponEnteringBubbleColumn() { 12 | registerListenerAsLongAsValid(object : Listener { 13 | @EventHandler 14 | fun tick(event: ServerTickEndEvent) { 15 | if (isInBubbleColumn) { 16 | remove() 17 | } 18 | } 19 | }) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/KartNpc.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.CachedGameProfile 4 | import org.bukkit.entity.EntityType 5 | import org.bukkit.inventory.ItemStack 6 | 7 | data class KartNpc( 8 | val id: String = "default", 9 | var matrix: Matrix4x4, 10 | var useHeadRotation: Boolean, 11 | var parentBone: String? = null, 12 | var model: ItemStack? = null, 13 | var entityType: EntityType = EntityType.ARMOR_STAND, 14 | var cachedGameProfile: CachedGameProfile? = null, 15 | var matrixInterceptor: ((kart: Kart, matrix: Matrix4x4) -> Unit)? = null, 16 | var matrixPreInterceptor: ((kart: Kart, seat: Kart.VisualFakeSeat) -> Unit)? = null, 17 | ) -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/turret/LaserGameTurret.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame.turret 2 | 3 | import net.craftventure.core.feature.minigame.lasergame.LaserGame 4 | import net.craftventure.core.feature.minigame.lasergame.LaserGameEntity 5 | import net.craftventure.core.feature.minigame.lasergame.LaserGamePlayer 6 | import org.bukkit.Location 7 | 8 | interface LaserGameTurret : LaserGameEntity { 9 | val isValid: Boolean 10 | fun update(game: LaserGame) 11 | fun canBeReclaimed(): Boolean 12 | fun interactWith(player: LaserGamePlayer, location: Location): Boolean 13 | fun interactWith(player: LaserGamePlayer, entityId: Int): Boolean 14 | fun spawn() 15 | fun destroy(silent: Boolean) 16 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/data/network/HttpClientManager.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.data.network 2 | 3 | import okhttp3.OkHttpClient 4 | import java.util.concurrent.TimeUnit 5 | 6 | object HttpClientManager { 7 | fun createClient(): OkHttpClient { 8 | // val logging = HttpLoggingInterceptor() 9 | // if (PluginProvider.isTestServer()) logging.level = HttpLoggingInterceptor.Level.NONE 10 | return OkHttpClient.Builder() 11 | .readTimeout(30, TimeUnit.SECONDS) 12 | .writeTimeout(30, TimeUnit.SECONDS) 13 | .connectTimeout(30, TimeUnit.SECONDS) 14 | // .addInterceptor(logging) 15 | .build() 16 | } 17 | 18 | @JvmStatic 19 | val okhttpClient by lazy { createClient() } 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/extension/ArrayExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.extension 2 | 3 | import java.util.concurrent.ThreadLocalRandom 4 | 5 | @Deprecated(message = "Use Kotlin built in random") 6 | fun Array.random(): T? { 7 | if (this.isEmpty()) return null 8 | return this[ThreadLocalRandom.current().nextInt(size)] 9 | } 10 | 11 | @Deprecated(message = "Use Kotlin built in random") 12 | fun List.random(): T? { 13 | if (this.isEmpty()) return null 14 | return this[ThreadLocalRandom.current().nextInt(size)] 15 | } 16 | 17 | fun List.random(offset: Int, max: Int): T? { 18 | if (this.isEmpty()) return null 19 | return this[(offset - 1) + ThreadLocalRandom.current().nextInt(Math.min(size, offset + max))] 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/mobarena/MobArenaLevel.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.mobarena 2 | 3 | import net.craftventure.bukkit.ktx.area.SimpleArea 4 | import net.craftventure.core.feature.minigame.BaseMinigameLevel 5 | import org.bukkit.Location 6 | import org.bukkit.util.Vector 7 | 8 | class MobArenaLevel( 9 | id: String, 10 | maxPlayers: Int = 5, 11 | playTimeInSeconds: Int = 60 * 15, 12 | area: SimpleArea, 13 | val offset: Vector, 14 | val limboLocation: Location, 15 | val waves: Array 16 | ) : BaseMinigameLevel( 17 | id, 18 | maxPlayers, 19 | playTimeInSeconds, 20 | area 21 | ) { 22 | override fun toJson(): Json { 23 | TODO("Not yet implemented") 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /net/craftventure/database/converter/UuidBinaryConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.converter 2 | 3 | import net.craftventure.core.ktx.extension.toBinary 4 | import net.craftventure.core.ktx.extension.toUuid 5 | import org.jooq.Converter 6 | import java.util.* 7 | 8 | class UuidBinaryConverter : Converter { 9 | override fun from(databaseObject: ByteArray?): UUID? { 10 | if (databaseObject == null) return null 11 | require(databaseObject.size == 16) 12 | return databaseObject.toUuid() 13 | } 14 | 15 | override fun to(userObject: UUID?): ByteArray? = userObject?.toBinary() 16 | 17 | override fun fromType(): Class = ByteArray::class.java 18 | override fun toType(): Class = UUID::class.java 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/BaseMinigameLevel.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame 2 | 3 | import net.craftventure.bukkit.ktx.area.Area 4 | 5 | abstract class BaseMinigameLevel( 6 | val id: String, 7 | val maxPlayers: Int, 8 | val playTimeInSeconds: Int, 9 | val area: Area 10 | ) { 11 | abstract fun toJson(): Json 12 | 13 | open fun toJson(source: T): T { 14 | return source 15 | } 16 | 17 | open fun restore(source: T) { 18 | } 19 | 20 | abstract class Json { 21 | lateinit var id: String 22 | var maxPlayers: Int = 2 23 | var playTimeInSeconds: Int = 60 24 | lateinit var area: Area.Json 25 | 26 | abstract fun create(): BaseMinigameLevel 27 | } 28 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/hitaction/EntityHitAction.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.hitaction 2 | 3 | import net.craftventure.core.ride.operator.OperableRide 4 | import net.craftventure.core.ride.shooter.ShooterRideContext 5 | import net.craftventure.core.ride.shooter.ShooterScene 6 | import org.bukkit.entity.Player 7 | 8 | abstract class EntityHitAction { 9 | abstract val type: String 10 | 11 | abstract fun execute( 12 | ride: OperableRide, 13 | context: ShooterRideContext, 14 | team: ShooterRideContext.Team, 15 | player: Player, 16 | scene: ShooterScene, 17 | entity: ShooterScene.ManagedEntity, 18 | ) 19 | 20 | abstract class Data { 21 | abstract fun toAction(): EntityHitAction 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/trackedride/TrackSegmentExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.trackedride 2 | 3 | import org.bukkit.util.Vector 4 | 5 | fun TrackSegment.getDistanceClosestTo(location: Vector, precision: Double = 0.05, startDistance: Double = 0.0): Double { 6 | val position = Vector() 7 | var i = startDistance 8 | var distanceAtSegment = 0.0 9 | var distanceFromTarget = 100000000.0 10 | while (i < length) { 11 | getPosition(i, position) 12 | val positionDistance = location.distance(position) 13 | if (positionDistance < distanceFromTarget) { 14 | distanceAtSegment = i 15 | distanceFromTarget = positionDistance 16 | } 17 | i += precision 18 | } 19 | return distanceAtSegment 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/MapUtil.java: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils; 2 | 3 | import java.util.Collections; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | import java.util.stream.Collectors; 7 | 8 | 9 | public class MapUtil { 10 | public static > Map sortByValueReversed(Map map) { 11 | return map.entrySet() 12 | .stream() 13 | .sorted(Map.Entry.comparingByValue(Collections.reverseOrder())) 14 | .collect(Collectors.toMap( 15 | Map.Entry::getKey, 16 | Map.Entry::getValue, 17 | (e1, e2) -> e1, 18 | LinkedHashMap::new 19 | )); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /net/craftventure/temporary/PlayerOwnedItemExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.temporary 2 | 3 | import net.craftventure.core.database.metadata.OwnableItemMetadata 4 | import net.craftventure.core.ktx.json.CvMoshi 5 | import net.craftventure.database.generated.cvdata.tables.pojos.PlayerOwnedItem 6 | import net.craftventure.database.wrap.WrappedPlayerOwnedItem 7 | 8 | fun WrappedPlayerOwnedItem.getOwnableItemMetadata() = source.getOwnableItemMetadata() 9 | 10 | fun PlayerOwnedItem.getOwnableItemMetadata(): OwnableItemMetadata? { 11 | // if (this.cachedMetadata != null) return cachedMetadata 12 | if (this.metadata == null) return null 13 | return /*cachedMetadata =*/ CvMoshi.adapter(OwnableItemMetadata::class.java).fromJson(this.metadata) 14 | // return cachedMetadata 15 | } -------------------------------------------------------------------------------- /net/craftventure/database/type/RideType.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.type 2 | 3 | import org.jooq.impl.EnumConverter 4 | 5 | 6 | enum class RideType private constructor(val stateName: String) { 7 | UNKNOWN("Unknown"), 8 | COASTER("Roller Coaster"), 9 | FLATRIDE("Flatride"), 10 | WALK_THROUGH("Walk through"), 11 | DARKRIDE("Darkride"), 12 | WATERRIDE("Waterride"), 13 | INTERACTIVE_DARKRIDE("Interactive dark ride"), 14 | INTERACTIVE_RIDE("Interactive ride"), 15 | KARTING("Karting"), 16 | TRANSPORT("Transport"), 17 | SUSPENDED_FLIGHT("Suspended flight"), 18 | ROWING("Rowing boats"); 19 | 20 | companion object { 21 | class Converter : EnumConverter(String::class.java, RideType::class.java) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/util/CraftventureDatapackItems.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.util 2 | 3 | import net.minecraft.core.Registry 4 | import net.minecraft.core.registries.Registries 5 | import net.minecraft.resources.ResourceLocation 6 | import org.bukkit.World 7 | import org.bukkit.craftbukkit.v1_20_R1.CraftWorld 8 | 9 | object CraftventureDatapackItems { 10 | fun getCvBiomeNames(world: World) = 11 | (world as CraftWorld).handle.registryAccess().registryOrThrow(Registries.BIOME) 12 | .keySet().filter { it.namespace == "craftventure" } 13 | 14 | fun getCvBiome(world: World, name: String) = 15 | (world as CraftWorld).handle.registryAccess().registryOrThrow(Registries.BIOME) 16 | .get(ResourceLocation.of("craftventure:$name", ':')) 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/ItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import net.craftventure.core.manager.EquipmentManager 4 | import net.craftventure.jsontools.PolymorphicHint 5 | import net.kyori.adventure.text.Component 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | 9 | @PolymorphicHint( 10 | types = [ 11 | // PolymorphicHint.PolymorphicHintType( 12 | // "" 13 | // ) 14 | ] 15 | ) 16 | sealed class ItemUseEffect { 17 | abstract fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) 18 | 19 | /** 20 | * Returns the reason if it's blocked 21 | */ 22 | open fun shouldBlockConsumption(player: Player): Component? = null 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/core/ktx/concurrency/CvExecutors.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.concurrency 2 | 3 | import kotlinx.coroutines.Dispatchers 4 | import kotlinx.coroutines.asExecutor 5 | import net.craftventure.core.ktx.util.Logger.capture 6 | import java.util.concurrent.ScheduledThreadPoolExecutor 7 | 8 | object CvExecutors { 9 | val executor by lazy { Dispatchers.IO.asExecutor() } 10 | val scheduledExecutor by lazy { 11 | ScheduledThreadPoolExecutor( 12 | 10, ThreadFactoryBuilder() 13 | .setUncaughtExceptionHandler { t: Thread?, e: Throwable? -> 14 | capture( 15 | e!! 16 | ) 17 | } 18 | .setNameFormat("cv-scheduled-%d").build() 19 | ) 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/WorldEditUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import com.sk89q.worldedit.WorldEdit 4 | import com.sk89q.worldedit.bukkit.BukkitAdapter 5 | import com.sk89q.worldedit.regions.Region 6 | import org.bukkit.entity.Player 7 | 8 | object WorldEditUtils { 9 | fun Player.getSelectedRegion(): Region? { 10 | val wePlayer = BukkitAdapter.adapt(player) 11 | val weSession = WorldEdit.getInstance().sessionManager.get(wePlayer) 12 | if (!weSession.isSelectionDefined(wePlayer.world)) { 13 | return null 14 | } 15 | return try { 16 | weSession.getSelection(weSession.selectionWorld) 17 | } catch (e: Exception) { 18 | e.printStackTrace() 19 | null 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonChatComponentConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.npc.EntityMetadata 5 | import net.minecraft.network.chat.Component 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class JsonChatComponentConverter(val value: String) : EntityInteractorJson() { 9 | override fun apply( 10 | interactable: EntityMetadata.Interactable, 11 | interactor: EntityMetadata.Interactor 12 | ) { 13 | interactable.applyInteractor( 14 | interactor, 15 | /*PaperAdventure.asVanilla(PlainTextComponentSerializer.plainText().deserialize(value)) 16 | ?: */Component.Serializer.fromJson(value)!! 17 | ) 18 | } 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/actions/ExitNonVipToNearestWarp.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.actions 2 | 3 | import net.craftventure.bukkit.ktx.extension.isVIP 4 | import net.craftventure.bukkit.ktx.extension.set 5 | import net.craftventure.core.feature.kart.Kart 6 | import net.craftventure.core.metadata.setLeaveLocation 7 | import org.bukkit.entity.Player 8 | 9 | class ExitNonVipToNearestWarp : ExitToNearestWarp() { 10 | override fun onExit(kart: Kart, player: Player) { 11 | if (!player.isVIP()) { 12 | super.onExit(kart, player) 13 | } else { 14 | val location = player.location.clone() 15 | location.set(kart.location) 16 | player.setLeaveLocation(location) 17 | // player.teleport(location) 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/npc/actor/action/ActionDoubleSetting.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.actor.action 2 | 3 | import com.google.gson.annotations.Expose 4 | import com.squareup.moshi.JsonClass 5 | import net.craftventure.core.npc.NpcEntity 6 | 7 | @JsonClass(generateAdapter = true) 8 | class ActionDoubleSetting constructor( 9 | @field:Expose val value: Double 10 | ) : ActorAction() { 11 | @Expose 12 | var type = 0 13 | 14 | fun withType(type: Int): ActionDoubleSetting { 15 | this.type = type 16 | return this 17 | } 18 | 19 | override fun executeAction(npcEntity: NpcEntity?) { // npcEntity.move(x, y, z, yaw, pitch); 20 | // npcEntity.moveHead(headYaw); 21 | } 22 | 23 | override val actionTypeId: Int 24 | get() = Type.ANIMATED_MOVE 25 | 26 | } -------------------------------------------------------------------------------- /net/craftventure/core/listener/FallingBlockLandListener.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.listener 2 | 3 | import org.bukkit.entity.FallingBlock 4 | import org.bukkit.event.EventHandler 5 | import org.bukkit.event.Listener 6 | import org.bukkit.event.entity.EntityChangeBlockEvent 7 | 8 | 9 | class FallingBlockLandListener : Listener { 10 | 11 | @EventHandler 12 | fun onFallingBlockLand(event: EntityChangeBlockEvent) { 13 | if (event.entity is FallingBlock) { 14 | val fallingBlock = event.entity as FallingBlock 15 | //TODO: FIX13 16 | if (!fallingBlock.blockData.material.isSolid) { 17 | fallingBlock.dropItem = false 18 | fallingBlock.remove() 19 | event.isCancelled = true 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/core/npc/json/JsonOptionalChatComponentConverter.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.npc.json 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.ktx.extension.toOptional 5 | import net.craftventure.core.npc.EntityMetadata 6 | import net.minecraft.network.chat.Component 7 | import java.util.* 8 | 9 | @JsonClass(generateAdapter = true) 10 | data class JsonOptionalChatComponentConverter(val value: String) : EntityInteractorJson>() { 11 | override fun apply( 12 | interactable: EntityMetadata.Interactable, 13 | interactor: EntityMetadata.Interactor> 14 | ) { 15 | interactable.applyInteractor( 16 | interactor, 17 | Component.Serializer.fromJson(value).toOptional() 18 | ) 19 | } 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/PlayerEquippedItemsUpdateEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import net.craftventure.core.manager.EquipmentManager 4 | import net.craftventure.core.metadata.EquippedItemsMeta 5 | import org.bukkit.Bukkit 6 | import org.bukkit.entity.Player 7 | import org.bukkit.event.Event 8 | import org.bukkit.event.HandlerList 9 | 10 | 11 | class PlayerEquippedItemsUpdateEvent( 12 | val player: Player, 13 | val meta: EquippedItemsMeta, 14 | val appliedEquippedItems: EquipmentManager.AppliedEquippedItems, 15 | ) : Event(!Bukkit.isPrimaryThread()) { 16 | 17 | override fun getHandlers(): HandlerList { 18 | return handlerList 19 | } 20 | 21 | companion object { 22 | @JvmStatic 23 | val handlerList = HandlerList() 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/extensions/DebugExtension.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.extensions 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.feature.balloon.types.ExtensibleBalloon 5 | import net.craftventure.core.utils.spawnParticleX 6 | import org.bukkit.Particle 7 | 8 | class DebugExtension : ExtensibleBalloon.Extension() { 9 | override fun update(balloon: ExtensibleBalloon) { 10 | balloon.balloonLocation!!.spawnParticleX(Particle.END_ROD) 11 | } 12 | 13 | @JsonClass(generateAdapter = true) 14 | class Json : ExtensibleBalloon.Extension.Json() { 15 | override fun toExtension(): ExtensibleBalloon.Extension = DebugExtension() 16 | 17 | companion object { 18 | const val type = "debug" 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/balloon/holders/NpcEntityHolder.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.balloon.holders 2 | 3 | import net.craftventure.core.npc.NpcEntity 4 | import org.bukkit.Location 5 | import org.bukkit.util.Vector 6 | 7 | 8 | class NpcEntityHolder( 9 | override val tracker: TrackerInfo, 10 | val holder: NpcEntity, 11 | private val validCheck: () -> Boolean = { true }, 12 | private val offset: Vector = Vector(0.0, 0.8, 0.0) 13 | ) : BalloonHolder() { 14 | override val leashHolderEntityId: Int = holder.entityId 15 | override val anchorLocation: Location 16 | get() = holder.getLocation() 17 | override val ownerCenterLocation: Location 18 | get() = holder.getLocation().clone().add(offset) 19 | override val isValid: Boolean 20 | get() = validCheck() 21 | } 22 | -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/span/CurseWordChatSpan.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.span 2 | 3 | import net.craftventure.chat.bungee.extension.plus 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import net.craftventure.chat.bungee.util.ChatSpan 6 | import net.craftventure.chat.core.extension.generateGrawlix 7 | import net.kyori.adventure.text.Component 8 | 9 | class CurseWordChatSpan(startIndexInclusive: Int, endIndexInclusive: Int) : 10 | ChatSpan(startIndexInclusive, endIndexInclusive) { 11 | override fun appendTo(source: String, component: Component): Component { 12 | // logcat { "Applying grawlix to '$source' (${source.length})" } 13 | return component + Component.text(generateGrawlix(source.length)) 14 | .hoverEvent(Component.text(source, CVTextColor.CHAT_HOVER)) 15 | } 16 | } -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/span/PlayerTagSpan.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.span 2 | 3 | import net.craftventure.chat.bungee.extension.plus 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import net.craftventure.chat.bungee.util.ChatSpan 6 | import net.kyori.adventure.text.Component 7 | 8 | class PlayerTagSpan( 9 | startIndexInclusive: Int, 10 | endIndexInclusive: Int, 11 | val name: String, 12 | val effectHandler: (() -> Unit)? = null, 13 | ) : ChatSpan(startIndexInclusive, endIndexInclusive) { 14 | override fun applyEffects() { 15 | super.applyEffects() 16 | effectHandler?.invoke() 17 | } 18 | 19 | override fun appendTo(source: String, component: Component): Component { 20 | return component + Component.text("$name@", CVTextColor.serverNotice) 21 | } 22 | } -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/util/ChatHelpers.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.util 2 | 3 | import net.craftventure.chat.bungee.extension.containingUrls 4 | import net.craftventure.chat.core.extension.isAllowed 5 | 6 | 7 | object ChatHelpers { 8 | const val DEBUG_COMPILING = false 9 | 10 | fun replaceDisallowedUrls(message: String): String { 11 | var newMessage = message 12 | val messageUrls = newMessage.containingUrls() 13 | messageUrls.forEach { url -> 14 | if (!url.isAllowed()) { 15 | // Logger.debug("URL not allowed ${url.originalUrl}") 16 | newMessage = newMessage.replace(url.originalUrl, "***")//generateGrawlix(url.originalUrl.length)) 17 | } 18 | } 19 | return newMessage 20 | } 21 | 22 | // item span: [item:pirate_hat] 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/dto/ShopItemDto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop.dto 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.bukkit.ktx.util.BoundingBoxProducer 5 | import net.craftventure.core.npc.json.EntityInteractorJson 6 | import org.bukkit.Location 7 | import org.bukkit.entity.EntityType 8 | import org.bukkit.inventory.EquipmentSlot 9 | 10 | @JsonClass(generateAdapter = true) 11 | class ShopItemDto( 12 | val id: String, 13 | val type: EntityType, 14 | val location: Location, 15 | val boundingBoxProducers: Array = arrayOf(BoundingBoxProducer.SquareSizedProducer(1.0, false)), 16 | val interactionRadius: Double? = null, 17 | val equipmentSlot: EquipmentSlot = EquipmentSlot.HEAD, 18 | val metadata: List> = emptyList(), 19 | ) -------------------------------------------------------------------------------- /net/craftventure/core/ktx/util/Permissions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.util 2 | 3 | object Permissions { 4 | val FLY_SELF = "craftventure.fly.self" 5 | val FLY_OTHERS = "craftventure.fly.others" 6 | val VIPTRIAL_CREATE = "craftventure.vip.trial.create" 7 | val ADMIN_CHAT_SEND = "craftventure.adminchat.send" 8 | val ADMIN_CHAT_RECEIVE = "craftventure.adminchat.receive" 9 | 10 | val RESETTABLE = "craftventure.rank.resettable" 11 | val TRUSTED = "craftventure.rank.trusted" 12 | val CREW = "craftventure.rank.crew" 13 | val DRAGONCLAN = "craftventure.rank.dragonclan" 14 | val BUILDER = "craftventure.rank.builder" 15 | val OWNER = "craftventure.rank.owner" 16 | val YOUTUBE = "craftventure.rank.youtube" 17 | val VIP = "craftventure.rank.vip" 18 | val PAYED_VIP = "craftventure.rank.vip_paid" 19 | } 20 | -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/KartStartEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import org.bukkit.Bukkit 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.Cancellable 6 | import org.bukkit.event.Event 7 | import org.bukkit.event.HandlerList 8 | 9 | 10 | class KartStartEvent( 11 | val player: Player 12 | ) : Event(!Bukkit.isPrimaryThread()), Cancellable { 13 | private var cancelled: Boolean = false 14 | 15 | override fun getHandlers(): HandlerList { 16 | return handlerList 17 | } 18 | 19 | override fun isCancelled(): Boolean { 20 | return cancelled 21 | } 22 | 23 | override fun setCancelled(cancel: Boolean) { 24 | cancelled = cancel 25 | } 26 | 27 | companion object { 28 | @JvmStatic 29 | val handlerList = HandlerList() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/PlayerStuckEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import org.bukkit.Bukkit 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.Cancellable 6 | import org.bukkit.event.Event 7 | import org.bukkit.event.HandlerList 8 | 9 | 10 | class PlayerStuckEvent( 11 | val player: Player 12 | ) : Event(!Bukkit.isPrimaryThread()), Cancellable { 13 | private var cancelled: Boolean = false 14 | 15 | override fun getHandlers(): HandlerList { 16 | return handlerList 17 | } 18 | 19 | override fun isCancelled(): Boolean { 20 | return cancelled 21 | } 22 | 23 | override fun setCancelled(cancel: Boolean) { 24 | cancelled = cancel 25 | } 26 | 27 | companion object { 28 | @JvmStatic 29 | val handlerList = HandlerList() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/kart/config/KartSteer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.kart.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.animation.curve.LineairPointCurve 5 | import net.craftventure.core.feature.kart.KartPart 6 | import net.craftventure.core.feature.kart.NamedPart 7 | import net.craftventure.core.ktx.extension.orElse 8 | import java.util.* 9 | 10 | @JsonClass(generateAdapter = true) 11 | data class KartSteer( 12 | override val id: String = "default", 13 | override val displayName: String = "Default", 14 | override val extends: String? = null, 15 | val forceCurveForSpeed: Optional? = null, 16 | val oversteerCurveForSpeed: Optional? = null, 17 | ) : KartPart, NamedPart { 18 | override fun isValid() = forceCurveForSpeed?.orElse() != null 19 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/LinePointCalculator.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import net.craftventure.bukkit.ktx.extension.set 4 | import org.bukkit.util.Vector 5 | 6 | class LinePointCalculator { 7 | private val origin: Vector = Vector() 8 | private val direction: Vector = Vector() 9 | private val point: Vector = Vector() 10 | 11 | fun nearestPointOnLine(origin: Vector, direction: Vector, point: Vector, out: Vector): Vector { 12 | this.origin.set(origin) 13 | this.direction.set(direction) 14 | this.point.set(point) 15 | 16 | this.direction.normalize() 17 | val v = this.point.subtract(this.origin) 18 | val d = v.dot(this.direction) 19 | // Logger.debug("d=${d.format(2)}") 20 | out.set(this.origin) 21 | return out.add(this.direction.multiply(d)) 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/LocationUtil.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import com.comphenix.protocol.wrappers.BlockPosition 4 | import org.bukkit.Bukkit 5 | import org.bukkit.Location 6 | import org.bukkit.block.Block 7 | 8 | 9 | object LocationUtil { 10 | fun toLocation(blockPosition: BlockPosition): Location = 11 | Location( 12 | Bukkit.getWorlds()[0], 13 | blockPosition.x.toDouble(), 14 | blockPosition.y.toDouble(), 15 | blockPosition.z.toDouble() 16 | ) 17 | 18 | fun isZero(loc: Location): Boolean { 19 | return loc.x == 0.0 && loc.y == 0.0 && loc.z == 0.0 20 | } 21 | 22 | fun equals(location: Location, block: Block): Boolean = location.blockX == block.x && 23 | location.blockY == block.y && 24 | location.blockZ == block.z 25 | } 26 | -------------------------------------------------------------------------------- /net/craftventure/database/bukkit/extensions/PlayerEquippedItemRepositoryExtensions.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.bukkit.extensions 2 | 3 | import net.craftventure.database.generated.cvdata.tables.pojos.OwnableItem 4 | import net.craftventure.database.repository.PlayerEquippedItemRepository 5 | import net.craftventure.database.type.EquippedItemSlot 6 | import org.bukkit.entity.Player 7 | import java.util.* 8 | 9 | 10 | fun PlayerEquippedItemRepository.update( 11 | player: Player, 12 | slot: EquippedItemSlot, 13 | item: OwnableItem?, 14 | source: UUID? 15 | ): Boolean = 16 | update(player.uniqueId, slot, item, source) 17 | 18 | fun PlayerEquippedItemRepository.update( 19 | playerId: UUID, 20 | slot: EquippedItemSlot, 21 | item: OwnableItem?, 22 | source: UUID? 23 | ): Boolean = 24 | update(playerId, slot, item?.id, source) -------------------------------------------------------------------------------- /net/craftventure/database/repository/DonationRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.Cvdata 4 | import net.craftventure.database.generated.cvdata.tables.daos.DonationDao 5 | import net.craftventure.database.generated.cvdata.tables.pojos.Donation 6 | import net.craftventure.database.generated.cvdata.tables.records.DonationRecord 7 | import org.jooq.Configuration 8 | import java.util.* 9 | 10 | class DonationRepository(configuration: Configuration) : BaseIdRepository( 11 | DonationDao(configuration), 12 | shouldCache = true 13 | ) { 14 | fun findByPlayer(uuid: UUID) = withDslIgnoreErrors(emptyList()) { dsl -> 15 | dsl.selectFrom(table) 16 | .where(Cvdata.CVDATA.DONATION.UUID.eq(uuid)) 17 | .fetchInto(dao.type) 18 | } 19 | } -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | The Craftventure Plugin code 2 | 3 | What does this include? 4 | - Large portions of code. Basically took al Kotlin/Java files and combined it into a single directory. This means it's not a compilable project, as the only reason for release is to provide guidance towards those working on parks, and not to make your own bootleg Craftventure copy 5 | - Removed some parts that I took from tutorials and other projects. For most part I put links on where to find this original code 6 | - Removed parts of the config that would make it easier to copy Craftventure rides, as I don't want fake unpermitted Craftventure copies to arise and this should make that a bit harder 7 | - All the secrets that Craftventure 2 held, from hidden achievements to sometimes forgotten simple things like Roller Coaster Day every year at the 16th of August 8 | - Code from rides, karts, minigames and more -------------------------------------------------------------------------------- /net/craftventure/core/manager/GrantResult.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.manager 2 | 3 | import net.craftventure.bukkit.ktx.util.sendServerError 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import net.kyori.adventure.text.Component 6 | import org.bukkit.entity.Player 7 | 8 | sealed class GrantResult { 9 | fun isAllowed() = this is Allow 10 | fun isNotAllowed() = this !is Allow 11 | } 12 | 13 | object Allow : GrantResult() 14 | data class Deny constructor(val reason: String/*, val solve: (() -> Boolean)? = null*/) : GrantResult() { 15 | val errorComponent get() = Component.text(reason, CVTextColor.serverError) 16 | 17 | // operator fun plus(solve: () -> Boolean) = Deny(reason, solve) 18 | } 19 | 20 | fun Player.displayDenyResult(deny: Deny, prefix: String = "Denied") { 21 | sendServerError(Component.text("$prefix: ${deny.reason}")) 22 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/manager/EmojiLoader.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.manager 2 | 3 | import com.squareup.moshi.adapter 4 | import net.craftventure.bukkit.ktx.plugin.PluginProvider 5 | import net.craftventure.chat.bungee.util.AnnotatedChatUtils 6 | import net.craftventure.core.ktx.json.MoshiBase 7 | import net.craftventure.core.ktx.logging.logException 8 | import java.io.File 9 | 10 | object EmojiLoader { 11 | @OptIn(ExperimentalStdlibApi::class) 12 | fun loadEmojiMappings() { 13 | val file = File(PluginProvider.plugin.dataFolder, "twemoji.json") 14 | if (file.exists()) { 15 | try { 16 | AnnotatedChatUtils.emojis = MoshiBase.moshi.adapter>().fromJson(file.readText())!! 17 | } catch (e: Exception) { 18 | logException(e) 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /net/craftventure/temporary/MinigameScoreListener.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.temporary 2 | 3 | import net.craftventure.core.map.renderer.MapManager 4 | import net.craftventure.database.generated.cvdata.tables.pojos.MinigameScore 5 | import net.craftventure.database.repository.BaseIdRepository 6 | 7 | class MinigameScoreListener : BaseIdRepository.Listener() { 8 | override fun onMerge(item: MinigameScore) { 9 | MapManager.instance.invalidateGame(item.game) 10 | } 11 | 12 | override fun onInsert(item: MinigameScore) { 13 | MapManager.instance.invalidateGame(item.game) 14 | } 15 | 16 | override fun onUpdate(item: MinigameScore) { 17 | MapManager.instance.invalidateGame(item.game) 18 | } 19 | 20 | override fun onDelete(item: MinigameScore) { 21 | MapManager.instance.invalidateGame(item.game) 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/bukkit/ktx/extension/PlayerExtension.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.bukkit.ktx.extension 2 | 3 | import net.craftventure.bukkit.ktx.util.PermissionChecker 4 | import org.bukkit.permissions.Permissible 5 | 6 | fun Permissible.isResettableAccount(): Boolean = PermissionChecker.isJoey(this) 7 | fun Permissible.isJoey(): Boolean = PermissionChecker.isJoey(this) 8 | fun Permissible.isVIP(): Boolean = PermissionChecker.isVIP(this) 9 | fun Permissible.isPayedVIP(): Boolean = PermissionChecker.isPayedVIP(this) 10 | fun Permissible.isYouTuber(): Boolean = PermissionChecker.isYouTuber(this) 11 | fun Permissible.isCrew(): Boolean = PermissionChecker.isCrew(this) 12 | fun Permissible.isBuilder(): Boolean = PermissionChecker.isBuilder(this) 13 | fun Permissible.isOwner(): Boolean = PermissionChecker.isOwner(this) 14 | fun Permissible.isTrusted(): Boolean = PermissionChecker.isTrusted(this) -------------------------------------------------------------------------------- /net/craftventure/chat/bungee/span/UrlChatSpan.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.chat.bungee.span 2 | 3 | import net.craftventure.chat.bungee.extension.plus 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import net.craftventure.chat.bungee.util.ChatSpan 6 | import net.kyori.adventure.text.Component 7 | import net.kyori.adventure.text.event.ClickEvent 8 | import net.kyori.adventure.text.format.NamedTextColor 9 | 10 | class UrlChatSpan(startIndexInclusive: Int, endIndexInclusive: Int) : 11 | ChatSpan(startIndexInclusive, endIndexInclusive) { 12 | override fun appendTo(source: String, component: Component): Component { 13 | return component + Component.text(source, NamedTextColor.WHITE) 14 | .hoverEvent(Component.text("Click to open $source", CVTextColor.CHAT_HOVER).asHoverEvent()) 15 | .clickEvent(ClickEvent.openUrl(source)) 16 | } 17 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/EmojiHelper.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | import net.craftventure.chat.bungee.util.AnnotatedChatUtils 4 | import net.craftventure.database.MainRepositoryProvider 5 | import net.craftventure.database.extension.actualAliases 6 | import org.bukkit.Bukkit 7 | import org.bukkit.entity.Player 8 | 9 | object EmojiHelper { 10 | fun getAllEmojis() = 11 | AnnotatedChatUtils.emojis.keys + MainRepositoryProvider.emojiRepository.cachedItems.flatMap { it.actualAliases.toList() } 12 | 13 | fun updateEmojis(player: Player) { 14 | player.addAdditionalChatCompletions(getAllEmojis()) 15 | } 16 | 17 | fun updateEmojisForAllPlayers() { 18 | val allEmojis = getAllEmojis() 19 | Bukkit.getOnlinePlayers().forEach { player -> 20 | player.addAdditionalChatCompletions(allEmojis) 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketSpatialAudioDefinition.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.Json 4 | import com.squareup.moshi.JsonClass 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketSpatialAudioDefinition( 8 | @Json(name = "audio_id") 9 | val audioId: String, 10 | @Json(name = "sound_url") 11 | val soundUrl: String, 12 | @Json(name = "distance_model") 13 | val distanceModel: DistanceModel = DistanceModel.inverse, 14 | @Json(name = "panning_model") 15 | val panningModel: PanningModel = PanningModel.HRTF, 16 | val state: PacketSpatialAudioUpdate 17 | ) : BasePacket(PacketID.SPATIAL_AUDIO_DEFINITION) { 18 | enum class DistanceModel { 19 | inverse, 20 | exponential, 21 | linear 22 | } 23 | 24 | enum class PanningModel { 25 | HRTF 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/ShopBalloonDisplay.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop 2 | 3 | import net.craftventure.core.feature.balloon.BalloonManager 4 | import net.craftventure.core.feature.balloon.holders.BalloonHolder 5 | import net.craftventure.core.feature.balloon.types.Balloon 6 | import net.craftventure.core.feature.shop.dto.ShopPresenterBalloonDto 7 | 8 | 9 | data class ShopBalloonDisplay( 10 | val shopPresenter: ShopPresenter, 11 | val holderCreator: () -> BalloonHolder, 12 | val balloon: Balloon, 13 | val config: ShopPresenterBalloonDto, 14 | ) { 15 | private var holder: BalloonHolder? = null 16 | 17 | fun create() { 18 | destroy() 19 | holder = holderCreator() 20 | BalloonManager.create(holder!!, balloon) 21 | } 22 | 23 | fun destroy() { 24 | holder?.let { BalloonManager.remove(it) } 25 | } 26 | } -------------------------------------------------------------------------------- /net/craftventure/core/ktx/json/SerializeNulls.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ktx.json 2 | 3 | import com.squareup.moshi.JsonAdapter 4 | import com.squareup.moshi.JsonQualifier 5 | import com.squareup.moshi.Moshi 6 | import com.squareup.moshi.Types 7 | import java.lang.reflect.Type 8 | 9 | 10 | @Retention(AnnotationRetention.RUNTIME) 11 | @JsonQualifier 12 | annotation class SerializeNulls { 13 | companion object { 14 | val JSON_ADAPTER_FACTORY: JsonAdapter.Factory = object : JsonAdapter.Factory { 15 | override fun create(type: Type, annotations: Set, moshi: Moshi): JsonAdapter<*>? { 16 | val nextAnnotations = Types.nextAnnotations(annotations, SerializeNulls::class.java) ?: return null 17 | return moshi.nextAdapter(this, type, nextAnnotations).serializeNulls() 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /net/craftventure/core/script/Script.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.script 2 | 3 | abstract class Script { 4 | var scriptController: ScriptController? = null 5 | 6 | var isRunning: Boolean = false 7 | protected set 8 | 9 | abstract val repeats: Boolean 10 | abstract val isValid: Boolean 11 | 12 | open fun reset() {} 13 | 14 | @Throws(ScriptControllerException::class) 15 | open fun onLoad() { 16 | } 17 | 18 | @Throws(ScriptControllerException::class) 19 | open fun onStart() { 20 | isRunning = true 21 | } 22 | 23 | @Throws(ScriptControllerException::class) 24 | open fun onUpdate() { 25 | } 26 | 27 | @Throws(ScriptControllerException::class) 28 | open fun onStop() { 29 | isRunning = false 30 | } 31 | 32 | @Throws(ScriptControllerException::class) 33 | open fun onUnload() { 34 | } 35 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/TeamScoreMemberRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.Cvdata 4 | import net.craftventure.database.generated.cvdata.tables.daos.TeamScoreMemberDao 5 | import net.craftventure.database.generated.cvdata.tables.pojos.TeamScoreMember 6 | import net.craftventure.database.generated.cvdata.tables.records.TeamScoreMemberRecord 7 | import org.jooq.Configuration 8 | import java.util.* 9 | 10 | class TeamScoreMemberRepository( 11 | configuration: Configuration 12 | ) : BaseIdRepository( 13 | TeamScoreMemberDao(configuration) 14 | ) { 15 | fun getMembersForTeam(team: UUID) = withDslIgnoreErrors(emptyList()) { dsl -> 16 | dsl.selectFrom(table).where(Cvdata.CVDATA.TEAM_SCORE_MEMBER.TEAM.eq(team)).fetchInto(dao.type) 17 | } 18 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/shop/dto/ShopPresenterDto.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.shop.dto 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.bukkit.ktx.area.Area 5 | import net.craftventure.bukkit.ktx.area.CombinedArea 6 | 7 | @JsonClass(generateAdapter = true) 8 | class ShopPresenterDto( 9 | val shop: String, 10 | val interactionRadius: Double? = null, 11 | val visibilityArea: Array, 12 | val items: Array, 13 | val staticKeepers: Array = emptyArray(), 14 | val npcKeepers: Array = emptyArray(), 15 | val balloons: Array = emptyArray(), 16 | val balloonHolders: Array = emptyArray(), 17 | ) { 18 | @Transient 19 | val visibilityAreaCombined = CombinedArea(*visibilityArea.map { it.create() }.toTypedArray()) 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/serverevent/AfkStatusChangeEvent.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.serverevent 2 | 3 | import org.bukkit.Bukkit 4 | import org.bukkit.entity.Player 5 | import org.bukkit.event.Cancellable 6 | import org.bukkit.event.Event 7 | import org.bukkit.event.HandlerList 8 | 9 | 10 | class AfkStatusChangeEvent( 11 | val player: Player, 12 | val willBecomeAfk: Boolean 13 | ) : Event(!Bukkit.isPrimaryThread()), Cancellable { 14 | private var cancelled: Boolean = false 15 | 16 | override fun getHandlers(): HandlerList { 17 | return handlerList 18 | } 19 | 20 | override fun isCancelled(): Boolean { 21 | return cancelled 22 | } 23 | 24 | override fun setCancelled(cancel: Boolean) { 25 | cancelled = cancel 26 | } 27 | 28 | companion object { 29 | @JvmStatic 30 | val handlerList = HandlerList() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /net/craftventure/database/repository/RideLinkRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.Cvdata 4 | import net.craftventure.database.generated.cvdata.tables.daos.RideLinkDao 5 | import net.craftventure.database.generated.cvdata.tables.pojos.RideLink 6 | import net.craftventure.database.generated.cvdata.tables.records.RideLinkRecord 7 | import org.jooq.Configuration 8 | import java.util.* 9 | 10 | class RideLinkRepository( 11 | configuration: Configuration 12 | ) : BaseIdRepository( 13 | RideLinkDao(configuration), 14 | shouldCache = true 15 | ) { 16 | fun get(rideId: UUID): List = withDslIgnoreErrors(emptyList()) { dsl -> 17 | dsl.selectFrom(table) 18 | .where(Cvdata.CVDATA.RIDE_LINK.RIDE.eq(rideId)) 19 | .fetchInto(dao.type) 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/jumpchallenge/JumpChallengePlayer.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.jumpchallenge 2 | 3 | import net.craftventure.chat.bungee.extension.plus 4 | import net.craftventure.chat.bungee.util.CVTextColor 5 | import org.bukkit.entity.Player 6 | 7 | class JumpChallengePlayer( 8 | val player: Player 9 | ) { 10 | var finishTime = -1L 11 | private set 12 | 13 | fun finished() = finishTime != -1L 14 | 15 | fun update(level: JumpChallengeLevel) { 16 | if (!finished()) { 17 | if (level.finish.isInArea(player)) { 18 | finishTime = System.currentTimeMillis() 19 | player.sendMessage(CVTextColor.serverNotice + "You finished! You'll have to wait for all players to finish or the time to run out though! Feel free to roam around until then!") 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /net/craftventure/core/listener/InfiniteDispensers.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.listener 2 | 3 | import net.craftventure.core.async.executeSync 4 | import org.bukkit.event.EventHandler 5 | import org.bukkit.event.EventPriority 6 | import org.bukkit.event.Listener 7 | import org.bukkit.event.block.BlockDispenseEvent 8 | import org.bukkit.inventory.InventoryHolder 9 | 10 | class InfiniteDispensers : Listener { 11 | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) 12 | fun onDispense(event: BlockDispenseEvent) { 13 | // Logger.info("Block dispense") 14 | val inventoryHolder = event.block.state as? InventoryHolder ?: return 15 | try { 16 | executeSync(1) { 17 | inventoryHolder.inventory.addItem(event.item) 18 | } 19 | } catch (e: Exception) { 20 | e.printStackTrace() 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/core/animation/IndexedIterationList.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.animation 2 | 3 | class IndexedIterationList : ArrayList() { 4 | var index = 0 5 | 6 | fun increaseIndex(loop: Boolean): Boolean { 7 | if (index + 1 < size) { 8 | index++ 9 | return true 10 | } else if (index + 1 >= size && loop) { 11 | index++ 12 | index = index % size 13 | return true 14 | } 15 | return false 16 | } 17 | 18 | val current: T? 19 | get() { 20 | if (size > index) return get(index) 21 | return if (size > 0) get(size - 1) else null 22 | } 23 | 24 | fun getNext(loop: Boolean): T? { 25 | if (size > index + 1) return get(index + 1) else if (loop && !isEmpty()) { 26 | return get(0) 27 | } 28 | return current 29 | } 30 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/lasergame/gun/BaseLaserGun.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.lasergame.gun 2 | 3 | import net.craftventure.bukkit.ktx.util.SoundUtils 4 | import net.craftventure.core.CraftventureCore 5 | import net.craftventure.core.feature.minigame.lasergame.LaserGameItem 6 | import net.craftventure.core.utils.InterpolationUtils 7 | import org.bukkit.Location 8 | 9 | abstract class BaseLaserGun : LaserGameItem { 10 | protected fun doSound(location: Location) { 11 | val soundnumberLaser: Int = (1..5).random() 12 | val pitch = InterpolationUtils.linearInterpolate(0.8, 1.2, CraftventureCore.getRandom().nextDouble()).toFloat() 13 | 14 | location.world!!.playSound( 15 | location, 16 | "${SoundUtils.SOUND_PREFIX}:minigame.laser.laser.$soundnumberLaser", 17 | 1f, 18 | pitch 19 | ) 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/core/database/metadata/itemuse/ClearPotionItemUseEffect.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.database.metadata.itemuse 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.bukkit.ktx.extension.removeAllPotionEffects 5 | import net.craftventure.core.manager.EquipmentManager 6 | import org.bukkit.Location 7 | import org.bukkit.entity.Player 8 | import org.bukkit.potion.PotionEffectType 9 | 10 | @JsonClass(generateAdapter = true) 11 | class ClearPotionItemUseEffect( 12 | val clear: List = emptyList(), 13 | ) : ItemUseEffect() { 14 | override fun apply(player: Player, location: Location, data: EquipmentManager.EquippedItemData) { 15 | if (clear.isEmpty()) { 16 | player.removeAllPotionEffects() 17 | } else { 18 | clear.forEach { 19 | player.removePotionEffect(it) 20 | } 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /net/craftventure/database/repository/ShopOfferRepository.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.database.repository 2 | 3 | import net.craftventure.database.generated.cvdata.Cvdata 4 | import net.craftventure.database.generated.cvdata.tables.daos.ShopOfferDao 5 | import net.craftventure.database.generated.cvdata.tables.pojos.ShopOffer 6 | import net.craftventure.database.generated.cvdata.tables.records.ShopOfferRecord 7 | import org.jooq.Configuration 8 | import java.util.* 9 | 10 | class ShopOfferRepository( 11 | configuration: Configuration 12 | ) : BaseIdRepository( 13 | ShopOfferDao(configuration), 14 | shouldCache = true 15 | ) { 16 | fun getOffersByShopId(id: String): List = withDslIgnoreErrors(emptyList()) { dsl -> 17 | dsl.selectFrom(table) 18 | .where(Cvdata.CVDATA.SHOP_OFFER.SHOP_ID.eq(id)) 19 | .fetchInto(dao.type) 20 | } 21 | } -------------------------------------------------------------------------------- /net/craftventure/temporary/TeamScoreListener.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.temporary 2 | 3 | import net.craftventure.core.async.executeSync 4 | import net.craftventure.core.map.renderer.MapManager 5 | import net.craftventure.core.map.renderer.TeamScoreScoreboardRenderer 6 | import net.craftventure.database.generated.cvdata.tables.pojos.TeamScore 7 | import net.craftventure.database.repository.BaseIdRepository 8 | 9 | class TeamScoreListener : BaseIdRepository.Listener() { 10 | override fun onMerge(item: TeamScore) { 11 | executeSync { 12 | invalidate(item) 13 | } 14 | } 15 | 16 | override fun onInsert(item: TeamScore) { 17 | executeSync { 18 | invalidate(item) 19 | } 20 | } 21 | 22 | private fun invalidate(teamScore: TeamScore) { 23 | MapManager.instance.invalidate(teamScore.target!!) 24 | } 25 | } -------------------------------------------------------------------------------- /net/craftventure/core/ride/tracklessride/transport/car/CarFactory.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.tracklessride.transport.car 2 | 3 | import net.craftventure.core.ride.tracklessride.BaseTagContainer 4 | import net.craftventure.core.ride.tracklessride.TagContainer 5 | import net.craftventure.core.ride.tracklessride.TracklessRide 6 | import net.craftventure.core.ride.tracklessride.config.CarGroupCarConfig 7 | import net.craftventure.core.ride.tracklessride.config.CarGroupConfig 8 | import net.craftventure.core.ride.tracklessride.navigation.PathPosition 9 | 10 | abstract class CarFactory { 11 | abstract fun produce( 12 | position: PathPosition, 13 | groupId: Int, 14 | groupConfig: CarGroupConfig, 15 | carId: Int, 16 | carConfig: CarGroupCarConfig, 17 | trackedRide: TracklessRide, 18 | tagContainer: TagContainer = BaseTagContainer(), 19 | ): TracklessRideCar 20 | } -------------------------------------------------------------------------------- /net/craftventure/core/utils/GameTimeUtils.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.utils 2 | 3 | /** 4 | * This utility class is used for converting between the ingame time in ticks to ingame time as a friendly string. Note 5 | * that the time is INGAME. 6 | * 7 | * 8 | * http://www.minecraftwiki.net/wiki/Day/night_cycle 9 | * 10 | * @author Olof Larsson 11 | */ 12 | object GameTimeUtils { 13 | const val ticksAtMidnight = 18000 14 | const val ticksPerDay = 24000 15 | const val ticksPerHour = 1000 16 | const val ticksPerMinute = 1000.0 / 60.0 17 | const val ticksPerSecond = 1000.0 / 60.0 / 60.0 18 | 19 | fun hoursMinutesToTicks(hours: Int, minutes: Int): Long { 20 | var ret = ticksAtMidnight.toLong() 21 | ret += hours * ticksPerHour.toLong() 22 | ret += (minutes / 60.0 * ticksPerHour.toLong()).toLong() 23 | ret %= ticksPerDay.toLong() 24 | return ret 25 | } 26 | } -------------------------------------------------------------------------------- /net/craftventure/core/feature/minigame/beerbrawl/BeerBrawlLevel.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.feature.minigame.beerbrawl 2 | 3 | import net.craftventure.bukkit.ktx.area.Area 4 | import net.craftventure.bukkit.ktx.area.SimpleArea 5 | import net.craftventure.bukkit.ktx.plugin.PluginProvider 6 | import net.craftventure.core.feature.minigame.BaseMinigameLevel 7 | import org.bukkit.Location 8 | 9 | 10 | class BeerBrawlLevel( 11 | id: String, 12 | maxPlayers: Int = 5, 13 | playTimeInSeconds: Int = if (PluginProvider.isTestServer()) 5 else 24 + (60 * 3) + 10, 14 | var startLocation: Location, 15 | val beerLocation: Location, 16 | area: Area, 17 | val toiletArea: SimpleArea = SimpleArea("world", ) 18 | ) : BaseMinigameLevel( 19 | id, 20 | maxPlayers, 21 | playTimeInSeconds, 22 | area 23 | ) { 24 | override fun toJson(): Json { 25 | TODO("Not yet implemented") 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /net/craftventure/audioserver/packet/PacketPlayerList.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.audioserver.packet 2 | 3 | import com.squareup.moshi.JsonClass 4 | import org.bukkit.entity.Player 5 | 6 | @JsonClass(generateAdapter = true) 7 | class PacketPlayerList( 8 | val players: List 9 | ) : BasePacket(PacketID.PLAYER_LOCATIONS) { 10 | 11 | @JsonClass(generateAdapter = true) 12 | class PlayerLocation( 13 | val uuid: String, 14 | val name: String, 15 | val x: Double?, 16 | val y: Double?, 17 | val z: Double?, 18 | val hidden: Boolean? 19 | ) { 20 | constructor(player: Player, hidden: Boolean = player.isSneaking) : this( 21 | player.uniqueId.toString(), 22 | player.name, 23 | player.location.x, 24 | player.location.y, 25 | player.location.z, 26 | hidden 27 | ) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /net/craftventure/core/ride/shooter/config/ShooterSceneEntityConfig.kt: -------------------------------------------------------------------------------- 1 | package net.craftventure.core.ride.shooter.config 2 | 3 | import com.squareup.moshi.JsonClass 4 | import net.craftventure.core.ride.shooter.hitaction.EntityHitAction 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class ShooterSceneEntityConfig( 8 | val npc: String, 9 | val particles: List? = null, 10 | val repeat: Boolean = false, 11 | val firstSpawnAtSeconds: Double = 0.0, 12 | val stopOnSceneFinish: Boolean = true, 13 | val respawn: RespawnType = RespawnType.NEVER, 14 | val respawnInterval: Double? = null, 15 | val onHit: List, 16 | val hitboxConfig: ShooterHitboxConfig? = null, 17 | ) { 18 | companion object { 19 | enum class RespawnType { 20 | NEVER, 21 | INTERVAL_AFTER_HIT, 22 | INTERVAL_AFTER_SPAWN 23 | } 24 | } 25 | } --------------------------------------------------------------------------------