├── jitpack.yml ├── lombok.config ├── protocol └── src │ ├── test │ ├── resources │ │ └── simplelogger.properties │ └── java │ │ └── org │ │ └── geysermc │ │ └── mcprotocollib │ │ └── protocol │ │ ├── packet │ │ ├── status │ │ │ ├── serverbound │ │ │ │ ├── ServerboundStatusRequestPacketTest.java │ │ │ │ └── ServerboundPingRequestPacketTest.java │ │ │ └── clientbound │ │ │ │ └── ClientboundPongResponsePacketTest.java │ │ ├── login │ │ │ ├── clientbound │ │ │ │ ├── ClientboundLoginCompressionPacketTest.java │ │ │ │ ├── ClientboundLoginFinishedPacketTest.java │ │ │ │ ├── ClientboundLoginDisconnectPacketTest.java │ │ │ │ └── ClientboundCustomQueryPacketTest.java │ │ │ └── serverbound │ │ │ │ ├── ServerboundHelloPacketTest.java │ │ │ │ └── ServerboundCustomQueryAnswerPacketTest.java │ │ └── ingame │ │ │ └── clientbound │ │ │ └── level │ │ │ ├── ClientboundSectionBlocksUpdatePacketTest.java │ │ │ └── ClientboundBlockUpdatePacketTest.java │ │ └── data │ │ └── NetworkDataTests.java │ └── main │ ├── resources │ ├── networkCodec.nbt │ └── yggdrasil_session_pubkey.der │ └── java │ └── org │ └── geysermc │ └── mcprotocollib │ ├── protocol │ ├── data │ │ ├── game │ │ │ ├── statistic │ │ │ │ ├── Statistic.java │ │ │ │ ├── BreakItemStatistic.java │ │ │ │ ├── CraftItemStatistic.java │ │ │ │ ├── DropItemStatistic.java │ │ │ │ ├── UseItemStatistic.java │ │ │ │ ├── BreakBlockStatistic.java │ │ │ │ ├── PickupItemStatistic.java │ │ │ │ ├── KillEntityStatistic.java │ │ │ │ ├── KilledByEntityStatistic.java │ │ │ │ ├── StatisticFormat.java │ │ │ │ └── StatisticCategory.java │ │ │ ├── chat │ │ │ │ ├── numbers │ │ │ │ │ ├── NumberFormat.java │ │ │ │ │ ├── BlankFormat.java │ │ │ │ │ ├── FixedFormat.java │ │ │ │ │ └── StyledFormat.java │ │ │ │ ├── ChatCompletionAction.java │ │ │ │ ├── ChatFilterType.java │ │ │ │ ├── ChatType.java │ │ │ │ ├── ChatTypeDecoration.java │ │ │ │ └── MessageSignature.java │ │ │ ├── entity │ │ │ │ ├── object │ │ │ │ │ ├── ObjectData.java │ │ │ │ │ ├── GenericObjectData.java │ │ │ │ │ ├── ProjectileData.java │ │ │ │ │ ├── WardenData.java │ │ │ │ │ ├── FallingBlockData.java │ │ │ │ │ ├── MinecartType.java │ │ │ │ │ └── Direction.java │ │ │ │ ├── MinecartStep.java │ │ │ │ ├── player │ │ │ │ │ ├── Hand.java │ │ │ │ │ ├── HandPreference.java │ │ │ │ │ ├── InteractAction.java │ │ │ │ │ ├── PositionElement.java │ │ │ │ │ ├── PlayerAction.java │ │ │ │ │ ├── PlayerState.java │ │ │ │ │ ├── BlockBreakStage.java │ │ │ │ │ └── PlayerSpawnInfo.java │ │ │ │ ├── RotationOrigin.java │ │ │ │ ├── metadata │ │ │ │ │ ├── VillagerData.java │ │ │ │ │ ├── PaintingVariant.java │ │ │ │ │ ├── ArmadilloState.java │ │ │ │ │ ├── WeatheringCopperState.java │ │ │ │ │ ├── CopperGolemState.java │ │ │ │ │ ├── SnifferState.java │ │ │ │ │ ├── Equipment.java │ │ │ │ │ ├── Pose.java │ │ │ │ │ ├── type │ │ │ │ │ │ └── ObjectEntityMetadata.java │ │ │ │ │ └── GlobalPos.java │ │ │ │ └── attribute │ │ │ │ │ ├── ModifierOperation.java │ │ │ │ │ ├── AttributeModifier.java │ │ │ │ │ └── Attribute.java │ │ │ ├── item │ │ │ │ ├── component │ │ │ │ │ ├── Unit.java │ │ │ │ │ ├── Weapon.java │ │ │ │ │ ├── UseCooldown.java │ │ │ │ │ ├── DataComponentMatchers.java │ │ │ │ │ ├── TypedEntityData.java │ │ │ │ │ ├── SuspiciousStewEffect.java │ │ │ │ │ ├── Filterable.java │ │ │ │ │ ├── WritableBookContent.java │ │ │ │ │ ├── BlockStateProperties.java │ │ │ │ │ ├── FoodProperties.java │ │ │ │ │ ├── ItemEnchantments.java │ │ │ │ │ ├── ProvidesTrimMaterial.java │ │ │ │ │ ├── LodestoneTracker.java │ │ │ │ │ ├── MobEffectInstance.java │ │ │ │ │ ├── TooltipDisplay.java │ │ │ │ │ ├── BeehiveOccupant.java │ │ │ │ │ ├── MobEffectDetails.java │ │ │ │ │ ├── CustomModelData.java │ │ │ │ │ ├── type │ │ │ │ │ │ ├── ObjectDataComponent.java │ │ │ │ │ │ ├── IntDataComponent.java │ │ │ │ │ │ └── BooleanDataComponent.java │ │ │ │ │ ├── JukeboxPlayable.java │ │ │ │ │ ├── InstrumentComponent.java │ │ │ │ │ ├── BannerPatternLayer.java │ │ │ │ │ ├── Equippable.java │ │ │ │ │ ├── PotionContents.java │ │ │ │ │ └── WrittenBookContent.java │ │ │ │ ├── HashedStack.java │ │ │ │ └── ItemStack.java │ │ │ ├── level │ │ │ │ ├── event │ │ │ │ │ ├── LevelEventData.java │ │ │ │ │ ├── LevelEvent.java │ │ │ │ │ ├── RecordEventData.java │ │ │ │ │ ├── BreakBlockEventData.java │ │ │ │ │ ├── BreakPotionEventData.java │ │ │ │ │ ├── BonemealGrowEventData.java │ │ │ │ │ ├── TrialSpawnerDetectEventData.java │ │ │ │ │ ├── UnknownLevelEvent.java │ │ │ │ │ ├── UnknownLevelEventData.java │ │ │ │ │ ├── ComposterEventData.java │ │ │ │ │ ├── SmokeEventData.java │ │ │ │ │ ├── ElectricSparkData.java │ │ │ │ │ ├── FireExtinguishData.java │ │ │ │ │ └── DragonFireballEventData.java │ │ │ │ ├── notify │ │ │ │ │ ├── GameEventValue.java │ │ │ │ │ ├── ElderGuardianEffectValue.java │ │ │ │ │ ├── EnterCreditsValue.java │ │ │ │ │ ├── RespawnScreenValue.java │ │ │ │ │ ├── LimitedCraftingValue.java │ │ │ │ │ ├── RainStrengthValue.java │ │ │ │ │ ├── ThunderStrengthValue.java │ │ │ │ │ └── GameEvent.java │ │ │ │ ├── particle │ │ │ │ │ ├── ParticleData.java │ │ │ │ │ ├── positionsource │ │ │ │ │ │ ├── PositionSource.java │ │ │ │ │ │ ├── PositionSourceType.java │ │ │ │ │ │ ├── EntityPositionSource.java │ │ │ │ │ │ └── BlockPositionSource.java │ │ │ │ │ ├── TrailParticleData.java │ │ │ │ │ ├── ColorParticleData.java │ │ │ │ │ ├── BlockParticleData.java │ │ │ │ │ ├── PowerParticleData.java │ │ │ │ │ ├── ShriekParticleData.java │ │ │ │ │ ├── SculkChargeParticleData.java │ │ │ │ │ ├── SpellParticleData.java │ │ │ │ │ ├── Particle.java │ │ │ │ │ ├── DustParticleData.java │ │ │ │ │ ├── DustColorTransitionParticleData.java │ │ │ │ │ ├── VibrationParticleData.java │ │ │ │ │ └── ItemParticleData.java │ │ │ │ ├── waypoint │ │ │ │ │ ├── WaypointData.java │ │ │ │ │ ├── AzimuthWaypointData.java │ │ │ │ │ ├── ChunkWaypointData.java │ │ │ │ │ ├── Vec3iWaypointData.java │ │ │ │ │ ├── WaypointOperation.java │ │ │ │ │ └── TrackedWaypoint.java │ │ │ │ ├── block │ │ │ │ │ ├── value │ │ │ │ │ │ ├── BlockValue.java │ │ │ │ │ │ ├── BlockValueType.java │ │ │ │ │ │ ├── EndGatewayValue.java │ │ │ │ │ │ ├── MobSpawnerValue.java │ │ │ │ │ │ ├── NoteBlockValue.java │ │ │ │ │ │ ├── BeaconValueType.java │ │ │ │ │ │ ├── ChestValue.java │ │ │ │ │ │ ├── GenericBlockValue.java │ │ │ │ │ │ ├── BellValueType.java │ │ │ │ │ │ ├── ChestValueType.java │ │ │ │ │ │ ├── NoteBlockValueType.java │ │ │ │ │ │ ├── BellValue.java │ │ │ │ │ │ ├── EndGatewayValueType.java │ │ │ │ │ │ ├── MobSpawnerValueType.java │ │ │ │ │ │ ├── DecoratedPotValueType.java │ │ │ │ │ │ ├── PistonValue.java │ │ │ │ │ │ ├── GenericBlockValueType.java │ │ │ │ │ │ ├── PistonValueType.java │ │ │ │ │ │ └── DecoratedPotValue.java │ │ │ │ │ ├── WobbleStyle.java │ │ │ │ │ ├── CommandBlockMode.java │ │ │ │ │ ├── StructureMirror.java │ │ │ │ │ ├── BlockChangeEntry.java │ │ │ │ │ ├── StructureRotation.java │ │ │ │ │ ├── ExplosionInteraction.java │ │ │ │ │ ├── TestInstanceBlockEntity.java │ │ │ │ │ └── BlockEntityInfo.java │ │ │ │ ├── sound │ │ │ │ │ ├── Sound.java │ │ │ │ │ ├── CustomSound.java │ │ │ │ │ └── SoundCategory.java │ │ │ │ ├── map │ │ │ │ │ ├── MapData.java │ │ │ │ │ └── MapIcon.java │ │ │ │ └── HeightmapTypes.java │ │ │ ├── debug │ │ │ │ ├── DebugInfo.java │ │ │ │ ├── DebugOrientationInfo.java │ │ │ │ ├── DebugGameEventListenerInfo.java │ │ │ │ ├── DebugHiveInfo.java │ │ │ │ ├── RemoteDebugSampleType.java │ │ │ │ ├── DebugGameEventInfo.java │ │ │ │ ├── DebugNeighborUpdateInfo.java │ │ │ │ ├── DebugPoiInfo.java │ │ │ │ ├── DebugRaidsInfo.java │ │ │ │ ├── DebugVillageSectionsInfo.java │ │ │ │ ├── DebugGoalInfo.java │ │ │ │ ├── DedicatedServerTickTimeInfo.java │ │ │ │ ├── DebugBreezeInfo.java │ │ │ │ ├── DebugBeeInfo.java │ │ │ │ ├── DebugEntityBlockIntersection.java │ │ │ │ ├── DebugStructuresInfo.java │ │ │ │ ├── DebugSubscriptions.java │ │ │ │ └── DebugBrainDump.java │ │ │ ├── command │ │ │ │ ├── properties │ │ │ │ │ ├── CommandProperties.java │ │ │ │ │ ├── TimeProperties.java │ │ │ │ │ ├── RangeProperties.java │ │ │ │ │ ├── ScoreHolderProperties.java │ │ │ │ │ ├── LongProperties.java │ │ │ │ │ ├── EntityProperties.java │ │ │ │ │ ├── ResourceProperties.java │ │ │ │ │ ├── StringProperties.java │ │ │ │ │ ├── FloatProperties.java │ │ │ │ │ ├── DoubleProperties.java │ │ │ │ │ └── IntegerProperties.java │ │ │ │ └── CommandType.java │ │ │ ├── inventory │ │ │ │ ├── ContainerAction.java │ │ │ │ ├── property │ │ │ │ │ ├── ContainerProperty.java │ │ │ │ │ ├── AnvilProperty.java │ │ │ │ │ ├── BrewingStandProperty.java │ │ │ │ │ └── FurnaceProperty.java │ │ │ │ ├── AdvancementTabAction.java │ │ │ │ ├── UpdateStructureBlockMode.java │ │ │ │ ├── CraftingBookStateType.java │ │ │ │ ├── FillStackAction.java │ │ │ │ ├── UpdateStructureBlockAction.java │ │ │ │ ├── CreativeGrabAction.java │ │ │ │ ├── ClickItemAction.java │ │ │ │ ├── ShiftClickItemAction.java │ │ │ │ ├── ContainerActionType.java │ │ │ │ ├── DropItemAction.java │ │ │ │ └── ContainerType.java │ │ │ ├── recipe │ │ │ │ ├── display │ │ │ │ │ ├── slot │ │ │ │ │ │ ├── SlotDisplay.java │ │ │ │ │ │ ├── ItemSlotDisplay.java │ │ │ │ │ │ ├── AnyFuelSlotDisplay.java │ │ │ │ │ │ ├── TagSlotDisplay.java │ │ │ │ │ │ ├── WithRemainderSlotDisplay.java │ │ │ │ │ │ ├── CompositeSlotDisplay.java │ │ │ │ │ │ ├── EmptySlotDisplay.java │ │ │ │ │ │ ├── ItemStackSlotDisplay.java │ │ │ │ │ │ ├── RecipeSlotType.java │ │ │ │ │ │ └── SmithingTrimDemoSlotDisplay.java │ │ │ │ │ ├── RecipeDisplay.java │ │ │ │ │ ├── RecipeDisplayType.java │ │ │ │ │ ├── StonecutterRecipeDisplay.java │ │ │ │ │ ├── RecipeDisplayEntry.java │ │ │ │ │ ├── ShapelessCraftingRecipeDisplay.java │ │ │ │ │ ├── SmithingRecipeDisplay.java │ │ │ │ │ ├── FurnaceRecipeDisplay.java │ │ │ │ │ └── ShapedCraftingRecipeDisplay.java │ │ │ │ ├── Ingredient.java │ │ │ │ └── CraftingBookCategory.java │ │ │ ├── ServerLink.java │ │ │ ├── ArgumentSignature.java │ │ │ ├── KnownPack.java │ │ │ ├── ClientCommand.java │ │ │ ├── scoreboard │ │ │ │ ├── ScoreType.java │ │ │ │ ├── ObjectiveAction.java │ │ │ │ ├── TeamAction.java │ │ │ │ ├── CollisionRule.java │ │ │ │ ├── NameTagVisibility.java │ │ │ │ ├── TeamColor.java │ │ │ │ └── ScoreboardPosition.java │ │ │ ├── setting │ │ │ │ ├── SkinPart.java │ │ │ │ ├── ChatVisibility.java │ │ │ │ ├── ParticleStatus.java │ │ │ │ └── Difficulty.java │ │ │ ├── chunk │ │ │ │ ├── ChunkBiomeData.java │ │ │ │ └── palette │ │ │ │ │ ├── PaletteType.java │ │ │ │ │ ├── GlobalPalette.java │ │ │ │ │ └── SingletonPalette.java │ │ │ ├── UnlockRecipesAction.java │ │ │ ├── BossBarColor.java │ │ │ ├── BossBarDivision.java │ │ │ ├── BossBarAction.java │ │ │ ├── RegistryEntry.java │ │ │ ├── ResourcePackStatus.java │ │ │ ├── ServerLinkType.java │ │ │ └── PlayerListEntryAction.java │ │ ├── ProtocolState.java │ │ ├── status │ │ │ ├── handler │ │ │ │ ├── ServerPingTimeHandler.java │ │ │ │ ├── ServerInfoBuilder.java │ │ │ │ └── ServerInfoHandler.java │ │ │ ├── VersionInfo.java │ │ │ ├── PlayerInfo.java │ │ │ └── ServerStatusInfo.java │ │ ├── handshake │ │ │ └── HandshakeIntent.java │ │ ├── UnexpectedEncryptionException.java │ │ └── DefaultComponentSerializer.java │ ├── codec │ │ ├── MinecraftPacket.java │ │ ├── PacketFactory.java │ │ └── MinecraftPacketSerializer.java │ ├── packet │ │ ├── ingame │ │ │ ├── clientbound │ │ │ │ ├── ClientboundDelimiterPacket.java │ │ │ │ ├── level │ │ │ │ │ ├── ClientboundChunkBatchStartPacket.java │ │ │ │ │ ├── ClientboundChunkBatchFinishedPacket.java │ │ │ │ │ └── border │ │ │ │ │ │ └── ClientboundSetBorderSizePacket.java │ │ │ │ ├── ClientboundBundlePacket.java │ │ │ │ ├── entity │ │ │ │ │ └── player │ │ │ │ │ │ ├── ClientboundPlayerCombatEnterPacket.java │ │ │ │ │ │ ├── ClientboundPlayerCombatEndPacket.java │ │ │ │ │ │ └── ClientboundSetHeldSlotPacket.java │ │ │ │ ├── ClientboundStartConfigurationPacket.java │ │ │ │ ├── title │ │ │ │ │ └── ClientboundClearTitlesPacket.java │ │ │ │ ├── ClientboundTickingStepPacket.java │ │ │ │ └── ClientboundSetCameraPacket.java │ │ │ └── serverbound │ │ │ │ ├── ServerboundConfigurationAcknowledgedPacket.java │ │ │ │ ├── ServerboundPlayerLoadedPacket.java │ │ │ │ ├── ServerboundClientTickEndPacket.java │ │ │ │ ├── ServerboundChatAckPacket.java │ │ │ │ ├── ServerboundChatCommandPacket.java │ │ │ │ ├── ServerboundLockDifficultyPacket.java │ │ │ │ ├── player │ │ │ │ └── ServerboundSetCarriedItemPacket.java │ │ │ │ ├── level │ │ │ │ └── ServerboundChunkBatchReceivedPacket.java │ │ │ │ └── inventory │ │ │ │ └── ServerboundSelectTradePacket.java │ │ ├── configuration │ │ │ ├── clientbound │ │ │ │ ├── ClientboundResetChatPacket.java │ │ │ │ └── ClientboundFinishConfigurationPacket.java │ │ │ └── serverbound │ │ │ │ ├── ServerboundAcceptCodeOfConductPacket.java │ │ │ │ └── ServerboundFinishConfigurationPacket.java │ │ ├── status │ │ │ └── serverbound │ │ │ │ └── ServerboundStatusRequestPacket.java │ │ ├── login │ │ │ ├── serverbound │ │ │ │ └── ServerboundLoginAcknowledgedPacket.java │ │ │ └── clientbound │ │ │ │ └── ClientboundLoginCompressionPacket.java │ │ ├── common │ │ │ ├── serverbound │ │ │ │ ├── ServerboundPongPacket.java │ │ │ │ └── ServerboundKeepAlivePacket.java │ │ │ └── clientbound │ │ │ │ ├── ClientboundClearDialogPacket.java │ │ │ │ ├── ClientboundKeepAlivePacket.java │ │ │ │ └── ClientboundPingPacket.java │ │ └── ping │ │ │ ├── serverbound │ │ │ └── ServerboundPingRequestPacket.java │ │ │ └── clientbound │ │ │ └── ClientboundPongResponsePacket.java │ └── ServerLoginHandler.java │ ├── network │ ├── crypt │ │ └── EncryptionConfig.java │ ├── ServerSession.java │ ├── compression │ │ ├── CompressionConfig.java │ │ └── PacketCompression.java │ ├── event │ │ ├── server │ │ │ ├── ServerEvent.java │ │ │ ├── ServerAdapter.java │ │ │ ├── ServerClosedEvent.java │ │ │ ├── ServerBoundEvent.java │ │ │ └── ServerClosingEvent.java │ │ └── session │ │ │ ├── SessionEvent.java │ │ │ └── ConnectedEvent.java │ ├── codec │ │ └── PacketSerializer.java │ ├── Flag.java │ └── ClientSession.java │ └── auth │ └── util │ ├── UUIDUtils.java │ └── UndashedUUIDAdapter.java ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── example ├── build.gradle.kts └── src │ └── main │ └── java │ └── org │ └── geysermc │ └── mcprotocollib │ └── network │ └── example │ └── PingPacket.java ├── .editorconfig ├── .gitignore ├── settings.gradle.kts └── .github └── workflows └── build.yml /jitpack.yml: -------------------------------------------------------------------------------- 1 | jdk: 2 | - openjdk17 3 | -------------------------------------------------------------------------------- /lombok.config: -------------------------------------------------------------------------------- 1 | lombok.addNullAnnotations = checkerframework 2 | -------------------------------------------------------------------------------- /protocol/src/test/resources/simplelogger.properties: -------------------------------------------------------------------------------- 1 | org.slf4j.simpleLogger.defaultLogLevel=debug 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeyserMC/MCProtocolLib/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /protocol/src/main/resources/networkCodec.nbt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeyserMC/MCProtocolLib/HEAD/protocol/src/main/resources/networkCodec.nbt -------------------------------------------------------------------------------- /protocol/src/main/resources/yggdrasil_session_pubkey.der: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GeyserMC/MCProtocolLib/HEAD/protocol/src/main/resources/yggdrasil_session_pubkey.der -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/Statistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | public interface Statistic { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/crypt/EncryptionConfig.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.crypt; 2 | 3 | public record EncryptionConfig(PacketEncryption encryption) { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/numbers/NumberFormat.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat.numbers; 2 | 3 | public interface NumberFormat { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/ObjectData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | public interface ObjectData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/Unit.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | public enum Unit { 4 | INSTANCE; 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public interface LevelEventData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/GameEventValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | public interface GameEventValue { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/ParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | public interface ParticleData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/WaypointData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | public interface WaypointData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/BlockValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public interface BlockValue { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/BlockValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public interface BlockValueType { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/LevelEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public interface LevelEvent { 4 | int getId(); 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/ServerSession.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network; 2 | 3 | /** 4 | * A network server session. 5 | */ 6 | public interface ServerSession extends Session { 7 | } 8 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public interface DebugInfo { 4 | DebugSubscriptions getType(); 5 | } 6 | -------------------------------------------------------------------------------- /example/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | java 3 | } 4 | 5 | dependencies { 6 | implementation(projects.protocol) 7 | implementation(libs.slf4j.simple) 8 | } 9 | 10 | tasks.javadoc { 11 | enabled = false 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/CommandProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | public interface CommandProperties { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/ContainerAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public interface ContainerAction { 4 | int getId(); 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/EndGatewayValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public class EndGatewayValue implements BlockValue { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/MobSpawnerValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public class MobSpawnerValue implements BlockValue { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/NoteBlockValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public class NoteBlockValue implements BlockValue { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/property/ContainerProperty.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory.property; 2 | 3 | public interface ContainerProperty { 4 | int ordinal(); 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/SlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public interface SlotDisplay { 4 | RecipeSlotType getType(); 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/AzimuthWaypointData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | public record AzimuthWaypointData(float angle) implements WaypointData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/compression/CompressionConfig.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.compression; 2 | 3 | public record CompressionConfig(int threshold, PacketCompression compression, boolean validateDecompression) { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/ProtocolState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data; 2 | 3 | public enum ProtocolState { 4 | HANDSHAKE, 5 | LOGIN, 6 | GAME, 7 | STATUS, 8 | CONFIGURATION; 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/ChunkWaypointData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | public record ChunkWaypointData(int chunkX, int chunkZ) implements WaypointData { 4 | } 5 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/BeaconValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum BeaconValueType implements BlockValueType { 4 | RECALCULATE_BEAM; 5 | } 6 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/positionsource/PositionSource.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource; 2 | 3 | public interface PositionSource { 4 | 5 | PositionSourceType getType(); 6 | } 7 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/Sound.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.sound; 2 | 3 | public interface Sound { 4 | String getName(); 5 | 6 | boolean isNewSystem(); 7 | 8 | float getRange(); 9 | } 10 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/Weapon.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | 5 | @Builder(toBuilder = true) 6 | public record Weapon(int itemDamagePerAttack, float disableBlockingForSeconds) { 7 | } 8 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/Vec3iWaypointData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | public record Vec3iWaypointData(Vector3i vector) implements WaypointData { 6 | } 7 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/MinecartStep.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity; 2 | 3 | import org.cloudburstmc.math.vector.Vector3d; 4 | 5 | public record MinecartStep(Vector3d position, Vector3d movement, float yRot, float xRot, float weight) { 6 | } 7 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/handler/ServerPingTimeHandler.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status.handler; 2 | 3 | import org.geysermc.mcprotocollib.network.Session; 4 | 5 | public interface ServerPingTimeHandler { 6 | void handle(Session session, long pingTime); 7 | } 8 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/TrailParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import org.cloudburstmc.math.vector.Vector3d; 4 | 5 | public record TrailParticleData(Vector3d target, int color, int duration) implements ParticleData { 6 | } 7 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.codec; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import org.geysermc.mcprotocollib.network.packet.Packet; 5 | 6 | public interface MinecraftPacket extends Packet { 7 | 8 | void serialize(ByteBuf buf); 9 | } 10 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_size = 4 6 | indent_style = space 7 | insert_final_newline = true 8 | tab_width = 4 9 | max_line_length = off 10 | 11 | [*.java] 12 | ij_java_class_count_to_use_import_on_demand = 9999 13 | ij_java_doc_align_exception_comments = false 14 | ij_java_doc_align_param_comments = false 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLink.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | import net.kyori.adventure.text.Component; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | public record ServerLink(@Nullable ServerLinkType knownType, @Nullable Component unknownType, String link) { 7 | } 8 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/numbers/BlankFormat.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat.numbers; 2 | 3 | public class BlankFormat implements NumberFormat { 4 | 5 | public static final BlankFormat INSTANCE = new BlankFormat(); 6 | 7 | private BlankFormat() { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/ItemSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public record ItemSlotDisplay(int item) implements SlotDisplay { 4 | @Override 5 | public RecipeSlotType getType() { 6 | return RecipeSlotType.ITEM; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/AnyFuelSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public record AnyFuelSlotDisplay() implements SlotDisplay { 4 | @Override 5 | public RecipeSlotType getType() { 6 | return RecipeSlotType.ANY_FUEL; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/BreakItemStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BreakItemStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/CraftItemStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class CraftItemStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/DropItemStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class DropItemStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/UseItemStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class UseItemStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ArgumentSignature.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ArgumentSignature { 9 | private final String name; 10 | private final byte[] signature; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/BreakBlockStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BreakBlockStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/PickupItemStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class PickupItemStatistic implements Statistic { 9 | private final int id; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/KnownPack.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class KnownPack { 9 | private String namespace; 10 | private String id; 11 | private String version; 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/GenericObjectData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class GenericObjectData implements ObjectData { 9 | private final int value; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/ProjectileData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ProjectileData implements ObjectData { 9 | private final int ownerId; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/ChestValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ChestValue implements BlockValue { 9 | private final int viewers; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/RecordEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class RecordEventData implements LevelEventData { 9 | private final int recordId; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugOrientationInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public record DebugOrientationInfo(int orientationId) implements DebugInfo { 4 | @Override 5 | public DebugSubscriptions getType() { 6 | return DebugSubscriptions.REDSTONE_WIRE_ORIENTATIONS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/Hand.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum Hand { 4 | MAIN_HAND, 5 | OFF_HAND; 6 | 7 | private static final Hand[] VALUES = values(); 8 | 9 | public static Hand from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/ColorParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ColorParticleData implements ParticleData { 9 | private final int color; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ClientCommand.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum ClientCommand { 4 | RESPAWN, 5 | STATS; 6 | 7 | private static final ClientCommand[] VALUES = values(); 8 | 9 | public static ClientCommand from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/TimeProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class TimeProperties implements CommandProperties { 9 | private final int min; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/GenericBlockValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class GenericBlockValue implements BlockValue { 9 | private final int value; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/BreakBlockEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BreakBlockEventData implements LevelEventData { 9 | private final int blockState; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/BreakPotionEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BreakPotionEventData implements LevelEventData { 9 | private final int potionId; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/BlockParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BlockParticleData implements ParticleData { 9 | private final int blockState; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/PowerParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class PowerParticleData implements ParticleData { 9 | private final float power; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/RecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | public interface RecipeDisplay { 6 | RecipeDisplayType getType(); 7 | 8 | SlotDisplay result(); 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugGameEventListenerInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public record DebugGameEventListenerInfo(int listenerRadius) implements DebugInfo { 4 | @Override 5 | public DebugSubscriptions getType() { 6 | return DebugSubscriptions.GAME_EVENT_LISTENERS; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/ShriekParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ShriekParticleData implements ParticleData { 9 | private final int delay; 10 | } 11 | 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/ScoreType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum ScoreType { 4 | INTEGER, 5 | HEARTS; 6 | 7 | private static final ScoreType[] VALUES = values(); 8 | 9 | public static ScoreType from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/setting/SkinPart.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.setting; 2 | 3 | public enum SkinPart { 4 | CAPE, 5 | JACKET, 6 | LEFT_SLEEVE, 7 | RIGHT_SLEEVE, 8 | LEFT_PANTS_LEG, 9 | RIGHT_PANTS_LEG, 10 | HAT; 11 | 12 | public static final SkinPart[] VALUES = values(); 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chunk/ChunkBiomeData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chunk; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ChunkBiomeData { 9 | private final int x; 10 | private final int z; 11 | private final byte[] buffer; 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/BonemealGrowEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class BonemealGrowEventData implements LevelEventData { 9 | private final int particleCount; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/SculkChargeParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class SculkChargeParticleData implements ParticleData { 9 | private final float roll; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/handler/ServerInfoBuilder.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status.handler; 2 | 3 | import org.geysermc.mcprotocollib.network.Session; 4 | import org.geysermc.mcprotocollib.protocol.data.status.ServerStatusInfo; 5 | 6 | public interface ServerInfoBuilder { 7 | ServerStatusInfo buildInfo(Session session); 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/RangeProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class RangeProperties implements CommandProperties { 9 | private final boolean allowDecimals; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugHiveInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public record DebugHiveInfo(int blockType, int occupantCount, int honeyLevel, boolean sedated) implements DebugInfo { 4 | @Override 5 | public DebugSubscriptions getType() { 6 | return DebugSubscriptions.BEE_HIVES; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/RotationOrigin.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity; 2 | 3 | public enum RotationOrigin { 4 | FEET, 5 | EYES; 6 | 7 | private static final RotationOrigin[] VALUES = values(); 8 | 9 | public static RotationOrigin from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/UseCooldown.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.With; 4 | import net.kyori.adventure.key.Key; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | 7 | @With 8 | public record UseCooldown(float seconds, @Nullable Key cooldownGroup) { 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/WardenData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class WardenData implements ObjectData { 7 | private final boolean emerging; 8 | 9 | public WardenData(int data) { 10 | this.emerging = (data == 1); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/WobbleStyle.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | public enum WobbleStyle { 4 | POSITIVE, 5 | NEGATIVE; 6 | 7 | private static final WobbleStyle[] VALUES = values(); 8 | 9 | public static WobbleStyle from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/TrialSpawnerDetectEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class TrialSpawnerDetectEventData implements LevelEventData { 9 | private final int detectedPlayers; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/handler/ServerInfoHandler.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status.handler; 2 | 3 | import org.geysermc.mcprotocollib.network.Session; 4 | import org.geysermc.mcprotocollib.protocol.data.status.ServerStatusInfo; 5 | 6 | public interface ServerInfoHandler { 7 | void handle(Session session, ServerStatusInfo info); 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/server/ServerEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.server; 2 | 3 | /** 4 | * An event relating to servers. 5 | */ 6 | public interface ServerEvent { 7 | /** 8 | * Calls the event. 9 | * 10 | * @param listener Listener to call the event on. 11 | */ 12 | void call(ServerListener listener); 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/FallingBlockData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class FallingBlockData implements ObjectData { 9 | private final int id; 10 | private final int metadata; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/DataComponentMatchers.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | 5 | import java.util.Map; 6 | 7 | @Builder(toBuilder = true) 8 | public record DataComponentMatchers(Map, DataComponent> exactMatchers, int[] partialMatchers) { 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/session/SessionEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.session; 2 | 3 | /** 4 | * An event relating to sessions. 5 | */ 6 | public interface SessionEvent { 7 | /** 8 | * Calls the event. 9 | * 10 | * @param listener Listener to call the event on. 11 | */ 12 | void call(SessionListener listener); 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/ScoreHolderProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class ScoreHolderProperties implements CommandProperties { 9 | private final boolean allowMultiple; 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/RemoteDebugSampleType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public enum RemoteDebugSampleType { 4 | TICK_TIME; 5 | 6 | private static final RemoteDebugSampleType[] VALUES = values(); 7 | 8 | public static RemoteDebugSampleType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/SpellParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class SpellParticleData implements ParticleData { 9 | private final int color; 10 | private final float power; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/TagSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | import net.kyori.adventure.key.Key; 4 | 5 | public record TagSlotDisplay(Key tag) implements SlotDisplay { 6 | @Override 7 | public RecipeSlotType getType() { 8 | return RecipeSlotType.TAG; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/UnlockRecipesAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum UnlockRecipesAction { 4 | INIT, 5 | ADD, 6 | REMOVE; 7 | 8 | private static final UnlockRecipesAction[] VALUES = values(); 9 | 10 | public static UnlockRecipesAction from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/LongProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class LongProperties implements CommandProperties { 9 | private final long min; 10 | private final long max; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/VillagerData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class VillagerData { 9 | private final int type; 10 | private final int profession; 11 | private final int level; 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/Ingredient.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class Ingredient { 10 | private final HolderSet values; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/WithRemainderSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public record WithRemainderSlotDisplay(SlotDisplay input, SlotDisplay remainder) implements SlotDisplay { 4 | @Override 5 | public RecipeSlotType getType() { 6 | return RecipeSlotType.WITH_REMAINDER; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/setting/ChatVisibility.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.setting; 2 | 3 | public enum ChatVisibility { 4 | FULL, 5 | SYSTEM, 6 | HIDDEN; 7 | 8 | private static final ChatVisibility[] VALUES = values(); 9 | 10 | public static ChatVisibility from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/setting/ParticleStatus.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.setting; 2 | 3 | public enum ParticleStatus { 4 | ALL, 5 | DECREASED, 6 | MINIMAL; 7 | 8 | private static final ParticleStatus[] VALUES = values(); 9 | 10 | public static ParticleStatus from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/handshake/HandshakeIntent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.handshake; 2 | 3 | public enum HandshakeIntent { 4 | STATUS, 5 | LOGIN, 6 | TRANSFER; 7 | 8 | private static final HandshakeIntent[] VALUES = values(); 9 | 10 | public static HandshakeIntent from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/HandPreference.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum HandPreference { 4 | LEFT_HAND, 5 | RIGHT_HAND; 6 | 7 | private static final HandPreference[] VALUES = values(); 8 | 9 | public static HandPreference from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/TypedEntityData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import org.cloudburstmc.nbt.NbtMap; 5 | 6 | @Builder(toBuilder = true) 7 | public record TypedEntityData(T type, NbtMap tag) { 8 | // TODO: Improve this implementation, too bulky in DataComponentTypes 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/Particle.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class Particle { 10 | private final @NonNull ParticleType type; 11 | private final ParticleData data; 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/codec/PacketSerializer.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.codec; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import org.geysermc.mcprotocollib.network.packet.Packet; 5 | 6 | public interface PacketSerializer { 7 | 8 | void serialize(ByteBuf buf, T packet); 9 | 10 | T deserialize(ByteBuf buf, PacketDefinition definition); 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/compression/PacketCompression.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.compression; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | 5 | public interface PacketCompression { 6 | void inflate(ByteBuf source, ByteBuf destination, int uncompressedSize) throws Exception; 7 | 8 | void deflate(ByteBuf source, ByteBuf destination); 9 | 10 | void close(); 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatCompletionAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat; 2 | 3 | public enum ChatCompletionAction { 4 | ADD, 5 | REMOVE, 6 | SET; 7 | 8 | public static final ChatCompletionAction[] VALUES = values(); 9 | 10 | public static ChatCompletionAction from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/ObjectiveAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum ObjectiveAction { 4 | ADD, 5 | REMOVE, 6 | UPDATE; 7 | 8 | private static final ObjectiveAction[] VALUES = values(); 9 | 10 | public static ObjectiveAction from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugGameEventInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | public record DebugGameEventInfo(int eventId, Vector3i pos) implements DebugInfo { 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.GAME_EVENTS; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatFilterType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat; 2 | 3 | public enum ChatFilterType { 4 | PASS_THROUGH, 5 | FULLY_FILTERED, 6 | PARTIALLY_FILTERED; 7 | 8 | public static final ChatFilterType[] VALUES = values(); 9 | 10 | public static ChatFilterType from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugNeighborUpdateInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | public record DebugNeighborUpdateInfo(Vector3i pos) implements DebugInfo { 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.NEIGHBOR_UPDATES; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugPoiInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | public record DebugPoiInfo(Vector3i pos, int poiType, int freeTicketCount) implements DebugInfo { 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.POIS; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/PaintingVariant.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | import net.kyori.adventure.key.Key; 4 | import net.kyori.adventure.text.Component; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | public record PaintingVariant(int width, int height, Key assetId, @Nullable Component title, @Nullable Component author) { 8 | } 9 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/InteractAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum InteractAction { 4 | INTERACT, 5 | ATTACK, 6 | INTERACT_AT; 7 | 8 | private static final InteractAction[] VALUES = values(); 9 | 10 | public static InteractAction from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/SuspiciousStewEffect.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.With; 6 | 7 | @Data 8 | @With 9 | @AllArgsConstructor 10 | public class SuspiciousStewEffect { 11 | private final int mobEffectId; 12 | private final int duration; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/CommandBlockMode.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | public enum CommandBlockMode { 4 | SEQUENCE, 5 | AUTO, 6 | REDSTONE; 7 | 8 | private static final CommandBlockMode[] VALUES = values(); 9 | 10 | public static CommandBlockMode from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/StructureMirror.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | public enum StructureMirror { 4 | NONE, 5 | LEFT_RIGHT, 6 | FRONT_BACK; 7 | 8 | private static final StructureMirror[] VALUES = values(); 9 | 10 | public static StructureMirror from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/BellValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum BellValueType implements BlockValueType { 4 | SHAKE_DIRECTION; 5 | 6 | private static final BellValueType[] VALUES = values(); 7 | 8 | public static BellValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/CompositeSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | import java.util.List; 4 | 5 | public record CompositeSlotDisplay(List contents) implements SlotDisplay { 6 | @Override 7 | public RecipeSlotType getType() { 8 | return RecipeSlotType.COMPOSITE; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/EntityProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class EntityProperties implements CommandProperties { 9 | private final boolean singleTarget; 10 | private final boolean playersOnly; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/AdvancementTabAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum AdvancementTabAction { 4 | OPENED_TAB, 5 | CLOSED_SCREEN; 6 | 7 | private static final AdvancementTabAction[] VALUES = values(); 8 | 9 | public static AdvancementTabAction from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/ChestValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum ChestValueType implements BlockValueType { 4 | VIEWING_PLAYER_COUNT; 5 | 6 | private static final ChestValueType[] VALUES = values(); 7 | 8 | public static ChestValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/DustParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class DustParticleData implements ParticleData { 9 | private final int color; 10 | private final float scale; // clamped between 0.01 and 4 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/NoteBlockValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum NoteBlockValueType implements BlockValueType { 4 | PLAY_NOTE; 5 | 6 | private static final NoteBlockValueType[] VALUES = values(); 7 | 8 | public static NoteBlockValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/UnknownLevelEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public final class UnknownLevelEvent implements LevelEvent { 4 | private final int id; 5 | 6 | public UnknownLevelEvent(int id) { 7 | this.id = id; 8 | } 9 | 10 | @Override 11 | public int getId() { 12 | return id; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/setting/Difficulty.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.setting; 2 | 3 | public enum Difficulty { 4 | PEACEFUL, 5 | EASY, 6 | NORMAL, 7 | HARD; 8 | 9 | private static final Difficulty[] VALUES = values(); 10 | 11 | public static Difficulty from(int id) { 12 | return VALUES[Math.floorMod(id, VALUES.length)]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/BossBarColor.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum BossBarColor { 4 | PINK, 5 | CYAN, 6 | RED, 7 | LIME, 8 | YELLOW, 9 | PURPLE, 10 | WHITE; 11 | 12 | private static final BossBarColor[] VALUES = values(); 13 | 14 | public static BossBarColor from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/BossBarDivision.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum BossBarDivision { 4 | NONE, 5 | NOTCHES_6, 6 | NOTCHES_10, 7 | NOTCHES_12, 8 | NOTCHES_20; 9 | 10 | private static final BossBarDivision[] VALUES = values(); 11 | 12 | public static BossBarDivision from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/CommandType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command; 2 | 3 | public enum CommandType { 4 | ROOT, 5 | LITERAL, 6 | ARGUMENT; 7 | 8 | private static final CommandType[] VALUES = values(); 9 | 10 | public static CommandType from(int id) { 11 | return id >= 0 && id < VALUES.length ? VALUES[id] : VALUES[0]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugRaidsInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | import java.util.List; 6 | 7 | public record DebugRaidsInfo(List positions) implements DebugInfo { 8 | @Override 9 | public DebugSubscriptions getType() { 10 | return DebugSubscriptions.RAIDS; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/ArmadilloState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | public enum ArmadilloState { 4 | IDLE, 5 | ROLLING, 6 | SCARED, 7 | UNROLLING; 8 | 9 | private static final ArmadilloState[] VALUES = values(); 10 | 11 | public static ArmadilloState from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/UnknownLevelEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public final class UnknownLevelEventData implements LevelEventData { 4 | private final int data; 5 | 6 | public UnknownLevelEventData(int data) { 7 | this.data = data; 8 | } 9 | 10 | public int getData() { 11 | return data; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/EmptySlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public record EmptySlotDisplay() implements SlotDisplay { 4 | public static final EmptySlotDisplay INSTANCE = new EmptySlotDisplay(); 5 | 6 | @Override 7 | public RecipeSlotType getType() { 8 | return RecipeSlotType.EMPTY; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/TeamAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum TeamAction { 4 | CREATE, 5 | REMOVE, 6 | UPDATE, 7 | ADD_PLAYER, 8 | REMOVE_PLAYER; 9 | 10 | private static final TeamAction[] VALUES = values(); 11 | 12 | public static TeamAction from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/numbers/FixedFormat.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat.numbers; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import net.kyori.adventure.text.Component; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class FixedFormat implements NumberFormat { 11 | 12 | private final @NonNull Component value; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/HashedStack.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; 4 | 5 | import java.util.Map; 6 | import java.util.Set; 7 | 8 | public record HashedStack(int id, int count, Map, Integer> addedComponents, Set> removedComponents) { 9 | } 10 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/BellValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class BellValue implements BlockValue { 10 | private final Direction direction; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/EndGatewayValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum EndGatewayValueType implements BlockValueType { 4 | TRIGGER_BEAM; 5 | 6 | private static final EndGatewayValueType[] VALUES = values(); 7 | 8 | public static EndGatewayValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/MobSpawnerValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum MobSpawnerValueType implements BlockValueType { 4 | RESET_DELAY; 5 | 6 | private static final MobSpawnerValueType[] VALUES = values(); 7 | 8 | public static MobSpawnerValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/ComposterEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public enum ComposterEventData implements LevelEventData { 4 | FILL, 5 | FILL_SUCCESS; 6 | 7 | private static final ComposterEventData[] VALUES = values(); 8 | 9 | public static ComposterEventData from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/ElderGuardianEffectValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ElderGuardianEffectValue implements GameEventValue { 7 | private final boolean audible; 8 | 9 | public ElderGuardianEffectValue(float data) { 10 | this.audible = Math.round(data) == 1; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/EnterCreditsValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | public enum EnterCreditsValue implements GameEventValue { 4 | SEEN_BEFORE, 5 | FIRST_TIME; 6 | 7 | private static final EnterCreditsValue[] VALUES = values(); 8 | 9 | public static EnterCreditsValue from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/KillEntityStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class KillEntityStatistic implements Statistic { 10 | private final EntityType entity; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/Flag.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network; 2 | 3 | import lombok.RequiredArgsConstructor; 4 | 5 | @RequiredArgsConstructor 6 | public final class Flag { 7 | private final String key; 8 | private final Class type; 9 | 10 | public T cast(Object obj) { 11 | return type.cast(obj); 12 | } 13 | 14 | public String key() { 15 | return key; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/DecoratedPotValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum DecoratedPotValueType implements BlockValueType { 4 | WOBBLE_STYLE; 5 | 6 | private static final DecoratedPotValueType[] VALUES = values(); 7 | 8 | public static DecoratedPotValueType from(int id) { 9 | return VALUES[id]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/PistonValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class PistonValue implements BlockValue { 10 | private final Direction direction; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/SmokeEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class SmokeEventData implements LevelEventData { 10 | private final Direction direction; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/positionsource/PositionSourceType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource; 2 | 3 | public enum PositionSourceType { 4 | BLOCK, 5 | ENTITY; 6 | 7 | private static final PositionSourceType[] VALUES = values(); 8 | 9 | public static PositionSourceType from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/Filterable.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.With; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @Data 9 | @With 10 | @AllArgsConstructor 11 | public class Filterable { 12 | private final T raw; 13 | private final @Nullable T optional; 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/ElectricSparkData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class ElectricSparkData implements LevelEventData { 10 | private final Direction direction; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/FireExtinguishData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public enum FireExtinguishData implements LevelEventData { 4 | EXTINGUISH, 5 | GENERIC_EXTINGUISH; 6 | 7 | private static final FireExtinguishData[] VALUES = values(); 8 | 9 | public static FireExtinguishData from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/CraftingBookCategory.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe; 2 | 3 | public enum CraftingBookCategory { 4 | BUILDING, 5 | REDSTONE, 6 | EQUIPMENT, 7 | MISC; 8 | 9 | private static final CraftingBookCategory[] VALUES = values(); 10 | 11 | 12 | public static CraftingBookCategory from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/KilledByEntityStatistic.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class KilledByEntityStatistic implements Statistic { 10 | private final EntityType entity; 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/StatisticFormat.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | public enum StatisticFormat { 4 | /** 5 | * Distance in centimeters 6 | */ 7 | DISTANCE, 8 | 9 | /** 10 | * Time in ticks 11 | */ 12 | TIME, 13 | 14 | INTEGER, 15 | 16 | /** 17 | * Used for damage statistics. 18 | */ 19 | TENTHS 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/BossBarAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum BossBarAction { 4 | ADD, 5 | REMOVE, 6 | UPDATE_HEALTH, 7 | UPDATE_TITLE, 8 | UPDATE_STYLE, 9 | UPDATE_FLAGS; 10 | 11 | private static final BossBarAction[] VALUES = values(); 12 | 13 | public static BossBarAction from(int id) { 14 | return VALUES[id]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugVillageSectionsInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public record DebugVillageSectionsInfo() implements DebugInfo { 4 | public static final DebugVillageSectionsInfo INSTANCE = new DebugVillageSectionsInfo(); 5 | 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.VILLAGE_SECTIONS; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/ModifierOperation.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.attribute; 2 | 3 | public enum ModifierOperation { 4 | ADD, 5 | ADD_MULTIPLIED_BASE, 6 | ADD_MULTIPLIED_TOTAL; 7 | 8 | private static final ModifierOperation[] VALUES = values(); 9 | 10 | public static ModifierOperation from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/UpdateStructureBlockMode.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum UpdateStructureBlockMode { 4 | SAVE, 5 | LOAD, 6 | CORNER, 7 | DATA; 8 | 9 | private static final UpdateStructureBlockMode[] VALUES = values(); 10 | 11 | public static UpdateStructureBlockMode from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/CustomSound.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.sound; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class CustomSound implements Sound { 10 | private final @NonNull String name; 11 | private final boolean newSystem; 12 | private final float range; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/WaypointOperation.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | public enum WaypointOperation { 4 | TRACK, 5 | UNTRACK, 6 | UPDATE; 7 | 8 | private static final WaypointOperation[] VALUES = values(); 9 | 10 | public static WaypointOperation from(int id) { 11 | return VALUES[Math.floorMod(id, VALUES.length)]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/CraftingBookStateType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum CraftingBookStateType { 4 | CRAFTING, 5 | FURNACE, 6 | BLAST_FURNACE, 7 | SMOKER; 8 | 9 | private static final CraftingBookStateType[] VALUES = values(); 10 | 11 | public static CraftingBookStateType from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/BlockChangeEntry.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import org.cloudburstmc.math.vector.Vector3i; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class BlockChangeEntry { 11 | private final @NonNull Vector3i position; 12 | private final int block; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/StructureRotation.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | public enum StructureRotation { 4 | NONE, 5 | CLOCKWISE_90, 6 | CLOCKWISE_180, 7 | COUNTERCLOCKWISE_90; 8 | 9 | private static final StructureRotation[] VALUES = values(); 10 | 11 | public static StructureRotation from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/event/DragonFireballEventData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.event; 2 | 3 | public enum DragonFireballEventData implements LevelEventData { 4 | NO_SOUND, 5 | HAS_SOUND; 6 | 7 | private static final DragonFireballEventData[] VALUES = values(); 8 | 9 | public static DragonFireballEventData from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/RespawnScreenValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | public enum RespawnScreenValue implements GameEventValue { 4 | ENABLE_RESPAWN_SCREEN, 5 | IMMEDIATE_RESPAWN; 6 | 7 | private static final RespawnScreenValue[] VALUES = values(); 8 | 9 | public static RespawnScreenValue from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/ItemStackSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; 4 | 5 | public record ItemStackSlotDisplay(ItemStack itemStack) implements SlotDisplay { 6 | @Override 7 | public RecipeSlotType getType() { 8 | return RecipeSlotType.ITEM_STACK; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/WritableBookContent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | @Data 8 | public class WritableBookContent { 9 | private final List> pages; 10 | 11 | public WritableBookContent(List> pages) { 12 | this.pages = List.copyOf(pages); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/GenericBlockValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum GenericBlockValueType implements BlockValueType { 4 | GENERIC_0, 5 | GENERIC_1; 6 | 7 | private static final GenericBlockValueType[] VALUES = values(); 8 | 9 | public static GenericBlockValueType from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/PistonValueType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | public enum PistonValueType implements BlockValueType { 4 | PUSHING, 5 | PULLING, 6 | CANCELLED_MID_PUSH; 7 | 8 | private static final PistonValueType[] VALUES = values(); 9 | 10 | public static PistonValueType from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/LimitedCraftingValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | public enum LimitedCraftingValue implements GameEventValue { 4 | UNLIMITED_CRAFTING, 5 | LIMITED_CRAFTING; 6 | 7 | private static final LimitedCraftingValue[] VALUES = values(); 8 | 9 | public static LimitedCraftingValue from(int id) { 10 | return VALUES[id]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/VersionInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NonNull; 7 | import lombok.Setter; 8 | 9 | @Data 10 | @Setter(AccessLevel.NONE) 11 | @AllArgsConstructor 12 | public class VersionInfo { 13 | private @NonNull String versionName; 14 | private int protocolVersion; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/RegistryEntry.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import net.kyori.adventure.key.Key; 6 | import org.cloudburstmc.nbt.NbtMap; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | public class RegistryEntry { 12 | private final Key id; 13 | private final @Nullable NbtMap data; 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugGoalInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import java.util.List; 4 | 5 | public record DebugGoalInfo(List goals) implements DebugInfo { 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.GOAL_SELECTORS; 9 | } 10 | 11 | public record DebugGoal(int priority, boolean isRunning, String name) {} 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/WeatheringCopperState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | public enum WeatheringCopperState { 4 | UNAFFECTED, 5 | EXPOSED, 6 | WEATHERED, 7 | OXIDIZED; 8 | 9 | private static final WeatheringCopperState[] VALUES = values(); 10 | 11 | public static WeatheringCopperState from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/ExplosionInteraction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | public enum ExplosionInteraction { 4 | KEEP, 5 | DESTROY, 6 | DESTROY_WITH_DECAY, 7 | TRIGGER_BLOCK; 8 | 9 | private static final ExplosionInteraction[] VALUES = values(); 10 | 11 | public static ExplosionInteraction from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/ResourceProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.Data; 4 | import net.kyori.adventure.key.Key; 5 | 6 | @Data 7 | public class ResourceProperties implements CommandProperties { 8 | private final Key registryKey; 9 | 10 | public ResourceProperties(Key registryKey) { 11 | this.registryKey = registryKey; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DedicatedServerTickTimeInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public record DedicatedServerTickTimeInfo() implements DebugInfo { 4 | public static final DedicatedServerTickTimeInfo INSTANCE = new DedicatedServerTickTimeInfo(); 5 | 6 | @Override 7 | public DebugSubscriptions getType() { 8 | return DebugSubscriptions.DEDICATED_SERVER_TICK_TIME; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/BlockStateProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Map; 6 | 7 | @Data 8 | public class BlockStateProperties { 9 | private final Map properties; 10 | 11 | public BlockStateProperties(Map properties) { 12 | this.properties = Map.copyOf(properties); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/map/MapData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.map; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class MapData { 10 | private final int columns; 11 | private final int rows; 12 | private final int x; 13 | private final int y; 14 | private final byte @NonNull [] data; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/StringProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | public enum StringProperties implements CommandProperties { 4 | SINGLE_WORD, 5 | QUOTABLE_PHRASE, 6 | GREEDY_PHRASE; 7 | 8 | public static final StringProperties[] VALUES = values(); 9 | 10 | public static StringProperties from(int id) { 11 | return VALUES[id]; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/positionsource/EntityPositionSource.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource; 2 | 3 | import lombok.Value; 4 | 5 | @Value 6 | public class EntityPositionSource implements PositionSource { 7 | int entityId; 8 | float yOffset; 9 | 10 | @Override 11 | public PositionSourceType getType() { 12 | return PositionSourceType.ENTITY; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/CollisionRule.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum CollisionRule { 4 | ALWAYS, 5 | NEVER, 6 | PUSH_OTHER_TEAMS, 7 | PUSH_OWN_TEAM; 8 | 9 | private static final CollisionRule[] VALUES = values(); 10 | 11 | public static CollisionRule from(int id) { 12 | return id >= 0 && id < VALUES.length ? VALUES[id] : VALUES[0]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/FillStackAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum FillStackAction implements ContainerAction { 4 | FILL; 5 | 6 | public int getId() { 7 | return this.ordinal(); 8 | } 9 | 10 | private static final FillStackAction[] VALUES = values(); 11 | 12 | public static FillStackAction from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/CopperGolemState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | public enum CopperGolemState { 4 | IDLE, 5 | GETTING_ITEM, 6 | GETTING_NO_ITEM, 7 | DROPPING_ITEM, 8 | DROPPING_NO_ITEM; 9 | 10 | private static final CopperGolemState[] VALUES = values(); 11 | 12 | public static CopperGolemState from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/SnifferState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | public enum SnifferState { 4 | IDLING, 5 | FEELING_HAPPY, 6 | SCENTING, 7 | SNIFFING, 8 | SEARCHING, 9 | DIGGING, 10 | RISING; 11 | 12 | private static final SnifferState[] VALUES = values(); 13 | 14 | public static SnifferState from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/FoodProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | @Builder(toBuilder = true) 10 | public class FoodProperties { 11 | private final int nutrition; 12 | private final float saturationModifier; 13 | private final boolean canAlwaysEat; 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/RecipeDisplayType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | public enum RecipeDisplayType { 4 | CRAFTING_SHAPELESS, 5 | CRAFTING_SHAPED, 6 | FURNACE, 7 | STONECUTTER, 8 | SMITHING; 9 | 10 | private static final RecipeDisplayType[] VALUES = values(); 11 | 12 | public static RecipeDisplayType from(int id) { 13 | return VALUES[id]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/UpdateStructureBlockAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum UpdateStructureBlockAction { 4 | UPDATE_DATA, 5 | SAVE_STRUCTURE, 6 | LOAD_STRUCTURE, 7 | DETECT_SIZE; 8 | 9 | private static final UpdateStructureBlockAction[] VALUES = values(); 10 | 11 | public static UpdateStructureBlockAction from(int id) { 12 | return VALUES[id]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/status/serverbound/ServerboundStatusRequestPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.status.serverbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.junit.jupiter.api.BeforeEach; 5 | 6 | public class ServerboundStatusRequestPacketTest extends PacketTest { 7 | @BeforeEach 8 | public void setup() { 9 | this.setPackets(new ServerboundStatusRequestPacket()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled plugin files 2 | target/ 3 | 4 | # IDE files 5 | .idea/ 6 | .vscode/* 7 | .settings/* 8 | *.iml 9 | *.iws 10 | *.ipr 11 | .classpath 12 | .project 13 | .factorypath 14 | 15 | # UML 16 | *.plantuml 17 | 18 | # Gradle 19 | .gradle 20 | **/build/ 21 | !src/**/build/ 22 | **/run/ 23 | 24 | # Ignore Gradle GUI config 25 | gradle-app.setting 26 | 27 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 28 | !gradle-wrapper.jar 29 | 30 | # Cache of project 31 | .gradletasknamecache 32 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/MinecartType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | public enum MinecartType implements ObjectData { 4 | NORMAL, 5 | CHEST, 6 | POWERED, 7 | TNT, 8 | MOB_SPAWNER, 9 | HOPPER, 10 | COMMAND_BLOCK; 11 | 12 | private static final MinecartType[] VALUES = values(); 13 | 14 | public static MinecartType from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/CreativeGrabAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum CreativeGrabAction implements ContainerAction { 4 | GRAB; 5 | 6 | public int getId() { 7 | return this.ordinal() + 2; 8 | } 9 | 10 | private static final CreativeGrabAction[] VALUES = values(); 11 | 12 | public static CreativeGrabAction from(int id) { 13 | return VALUES[id - 2]; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/HeightmapTypes.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level; 2 | 3 | public enum HeightmapTypes { 4 | WORLD_SURFACE_WG, 5 | WORLD_SURFACE, 6 | OCEAN_FLOOR_WG, 7 | OCEAN_FLOOR, 8 | MOTION_BLOCKING, 9 | MOTION_BLOCKING_NO_LEAVES; 10 | 11 | private static final HeightmapTypes[] VALUES = values(); 12 | 13 | public static HeightmapTypes from(int id) { 14 | return VALUES[id]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/NameTagVisibility.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum NameTagVisibility { 4 | ALWAYS, 5 | NEVER, 6 | HIDE_FOR_OTHER_TEAMS, 7 | HIDE_FOR_OWN_TEAM; 8 | 9 | private static final NameTagVisibility[] VALUES = values(); 10 | 11 | public static NameTagVisibility from(int id) { 12 | return id >= 0 && id < VALUES.length ? VALUES[id] : VALUES[0]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/PositionElement.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum PositionElement { 4 | X, 5 | Y, 6 | Z, 7 | Y_ROT, 8 | X_ROT, 9 | DELTA_X, 10 | DELTA_Y, 11 | DELTA_Z, 12 | ROTATE_DELTA; 13 | 14 | private static final PositionElement[] VALUES = values(); 15 | 16 | public static PositionElement from(int id) { 17 | return VALUES[id]; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/ClickItemAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum ClickItemAction implements ContainerAction { 4 | LEFT_CLICK, 5 | RIGHT_CLICK; 6 | 7 | public int getId() { 8 | return this.ordinal(); 9 | } 10 | 11 | private static final ClickItemAction[] VALUES = values(); 12 | 13 | public static ClickItemAction from(int id) { 14 | return VALUES[id]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ItemEnchantments.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Data; 4 | import lombok.With; 5 | 6 | import java.util.Map; 7 | 8 | @Data 9 | @With 10 | public class ItemEnchantments { 11 | private final Map enchantments; 12 | 13 | public ItemEnchantments(Map enchantments) { 14 | this.enchantments = Map.copyOf(enchantments); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/value/DecoratedPotValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block.value; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import org.geysermc.mcprotocollib.protocol.data.game.level.block.WobbleStyle; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class DecoratedPotValue implements BlockValue { 11 | @NonNull 12 | private final WobbleStyle wobbleStyle; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/DustColorTransitionParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public class DustColorTransitionParticleData extends DustParticleData { 7 | private final int newColor; 8 | 9 | public DustColorTransitionParticleData(int color, float scale, int newColor) { 10 | super(color, scale); 11 | this.newColor = newColor; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/VibrationParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource.PositionSource; 6 | 7 | @Data 8 | @AllArgsConstructor 9 | public class VibrationParticleData implements ParticleData { 10 | PositionSource positionSource; 11 | 12 | int arrivalTicks; 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/positionsource/BlockPositionSource.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle.positionsource; 2 | 3 | import lombok.Value; 4 | import org.cloudburstmc.math.vector.Vector3i; 5 | 6 | @Value 7 | public class BlockPositionSource implements PositionSource { 8 | Vector3i position; 9 | 10 | @Override 11 | public PositionSourceType getType() { 12 | return PositionSourceType.BLOCK; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundDelimiterPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 5 | 6 | public class ClientboundDelimiterPacket implements MinecraftPacket { 7 | public ClientboundDelimiterPacket(ByteBuf in) { 8 | } 9 | 10 | @Override 11 | public void serialize(ByteBuf out) { 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/clientbound/ClientboundLoginCompressionPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.clientbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.junit.jupiter.api.BeforeEach; 5 | 6 | public class ClientboundLoginCompressionPacketTest extends PacketTest { 7 | @BeforeEach 8 | public void setup() { 9 | this.setPackets(new ClientboundLoginCompressionPacket(1)); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/ProvidesTrimMaterial.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import net.kyori.adventure.key.Key; 5 | import org.geysermc.mcprotocollib.protocol.data.game.Holder; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | @Builder(toBuilder = true) 9 | public record ProvidesTrimMaterial(@Nullable Holder materialHolder, @Nullable Key materialLocation) { 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/PlayerAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum PlayerAction { 4 | START_DIGGING, 5 | CANCEL_DIGGING, 6 | FINISH_DIGGING, 7 | DROP_ITEM_STACK, 8 | DROP_ITEM, 9 | RELEASE_USE_ITEM, 10 | SWAP_HANDS; 11 | 12 | private static final PlayerAction[] VALUES = values(); 13 | 14 | public static PlayerAction from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/particle/ItemParticleData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.particle; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class ItemParticleData implements ParticleData { 11 | private final @Nullable ItemStack itemStack; 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugBreezeInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | import java.util.OptionalInt; 7 | 8 | public record DebugBreezeInfo(OptionalInt attackTarget, @Nullable Vector3i jumpTarget) implements DebugInfo { 9 | @Override 10 | public DebugSubscriptions getType() { 11 | return DebugSubscriptions.BREEZES; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ResourcePackStatus.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum ResourcePackStatus { 4 | SUCCESSFULLY_LOADED, 5 | DECLINED, 6 | FAILED_DOWNLOAD, 7 | ACCEPTED, 8 | DOWNLOADED, 9 | INVALID_URL, 10 | FAILED_RELOAD, 11 | DISCARDED; 12 | 13 | private static final ResourcePackStatus[] VALUES = values(); 14 | 15 | public static ResourcePackStatus from(int id) { 16 | return VALUES[id]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/ShiftClickItemAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum ShiftClickItemAction implements ContainerAction { 4 | LEFT_CLICK, 5 | RIGHT_CLICK; 6 | 7 | public int getId() { 8 | return this.ordinal(); 9 | } 10 | 11 | private static final ShiftClickItemAction[] VALUES = values(); 12 | 13 | public static ShiftClickItemAction from(int id) { 14 | return VALUES[id]; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/StonecutterRecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | public record StonecutterRecipeDisplay(SlotDisplay input, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { 6 | @Override 7 | public RecipeDisplayType getType() { 8 | return RecipeDisplayType.STONECUTTER; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/RecipeSlotType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | public enum RecipeSlotType { 4 | EMPTY, 5 | ANY_FUEL, 6 | ITEM, 7 | ITEM_STACK, 8 | TAG, 9 | SMITHING_TRIM, 10 | WITH_REMAINDER, 11 | COMPOSITE; 12 | 13 | private static final RecipeSlotType[] VALUES = values(); 14 | 15 | public static RecipeSlotType from(int id) { 16 | return VALUES[id]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/ServerLinkType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum ServerLinkType { 4 | BUG_REPORT, 5 | COMMUNITY_GUIDELINES, 6 | SUPPORT, 7 | STATUS, 8 | FEEDBACK, 9 | COMMUNITY, 10 | WEBSITE, 11 | FORUMS, 12 | NEWS, 13 | ANNOUNCEMENTS; 14 | 15 | private static final ServerLinkType[] VALUES = values(); 16 | 17 | public static ServerLinkType from(int id) { 18 | return VALUES[id]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/PlayerState.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum PlayerState { 4 | LEAVE_BED, 5 | START_SPRINTING, 6 | STOP_SPRINTING, 7 | START_HORSE_JUMP, 8 | STOP_HORSE_JUMP, 9 | OPEN_VEHICLE_INVENTORY, 10 | START_ELYTRA_FLYING; 11 | 12 | private static final PlayerState[] VALUES = values(); 13 | 14 | public static PlayerState from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/FloatProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class FloatProperties implements CommandProperties { 9 | private final float min; 10 | private final float max; 11 | 12 | public FloatProperties() { 13 | this.min = -Float.MAX_VALUE; 14 | this.max = Float.MAX_VALUE; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/serverbound/ServerboundHelloPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.serverbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.junit.jupiter.api.BeforeEach; 5 | 6 | import java.util.UUID; 7 | 8 | public class ServerboundHelloPacketTest extends PacketTest { 9 | @BeforeEach 10 | public void setup() { 11 | this.setPackets(new ServerboundHelloPacket("Username", UUID.randomUUID())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/DoubleProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class DoubleProperties implements CommandProperties { 9 | private final double min; 10 | private final double max; 11 | 12 | public DoubleProperties() { 13 | this.min = -Double.MAX_VALUE; 14 | this.max = Double.MAX_VALUE; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/command/properties/IntegerProperties.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.command.properties; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | 6 | @Data 7 | @AllArgsConstructor 8 | public class IntegerProperties implements CommandProperties { 9 | private final int min; 10 | private final int max; 11 | 12 | public IntegerProperties() { 13 | this.min = Integer.MIN_VALUE; 14 | this.max = Integer.MAX_VALUE; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/sound/SoundCategory.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.sound; 2 | 3 | public enum SoundCategory { 4 | MASTER, 5 | MUSIC, 6 | RECORD, 7 | WEATHER, 8 | BLOCK, 9 | HOSTILE, 10 | NEUTRAL, 11 | PLAYER, 12 | AMBIENT, 13 | VOICE, 14 | UI; 15 | 16 | private static final SoundCategory[] VALUES = values(); 17 | 18 | 19 | public static SoundCategory from(int id) { 20 | return VALUES[id]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/numbers/StyledFormat.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat.numbers; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import net.kyori.adventure.text.format.Style; 7 | import org.cloudburstmc.nbt.NbtMap; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | public class StyledFormat implements NumberFormat { 12 | 13 | /** 14 | * Serialized {@link Style} 15 | */ 16 | private final @NonNull NbtMap style; 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat; 2 | 3 | import org.cloudburstmc.nbt.NbtMap; 4 | 5 | import java.util.List; 6 | 7 | public record ChatType(ChatTypeDecoration chat, ChatTypeDecoration narration) { 8 | public record ChatTypeDecorationImpl(String translationKey, 9 | List parameters, 10 | NbtMap style) implements ChatTypeDecoration { 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/LodestoneTracker.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.With; 6 | import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class LodestoneTracker { 13 | private final @Nullable GlobalPos pos; 14 | private final boolean tracked; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/TestInstanceBlockEntity.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | import net.kyori.adventure.key.Key; 4 | import net.kyori.adventure.text.Component; 5 | import org.cloudburstmc.math.vector.Vector3i; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | public record TestInstanceBlockEntity(@Nullable Key test, Vector3i size, int rotation, boolean ignoreEntities, 9 | int status, @Nullable Component errorMessage) { 10 | } 11 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/map/MapIcon.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.map; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import net.kyori.adventure.text.Component; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class MapIcon { 11 | private final int centerX; 12 | private final int centerZ; 13 | private final @NonNull MapIconType iconType; 14 | private final int iconRotation; 15 | private final Component displayName; 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/statistic/StatisticCategory.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.statistic; 2 | 3 | public enum StatisticCategory { 4 | BREAK_BLOCK, 5 | CRAFT_ITEM, 6 | USE_ITEM, 7 | BREAK_ITEM, 8 | PICKED_UP_ITEM, 9 | DROP_ITEM, 10 | KILL_ENTITY, 11 | KILLED_BY_ENTITY, 12 | CUSTOM; 13 | 14 | private static final StatisticCategory[] VALUES = values(); 15 | 16 | public static StatisticCategory from(int id) { 17 | return VALUES[id]; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/PlayerListEntryAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game; 2 | 3 | public enum PlayerListEntryAction { 4 | ADD_PLAYER, 5 | INITIALIZE_CHAT, 6 | UPDATE_GAME_MODE, 7 | UPDATE_LISTED, 8 | UPDATE_LATENCY, 9 | UPDATE_DISPLAY_NAME, 10 | UPDATE_LIST_ORDER, 11 | UPDATE_HAT; 12 | 13 | public static final PlayerListEntryAction[] VALUES = values(); 14 | 15 | public static PlayerListEntryAction from(int id) { 16 | return VALUES[id]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/MobEffectInstance.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NonNull; 7 | import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @Builder(toBuilder = true) 12 | public class MobEffectInstance { 13 | private final @NonNull Effect effect; 14 | private final @NonNull MobEffectDetails details; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/property/AnvilProperty.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory.property; 2 | 3 | /** 4 | * Container properties of an anvil. 5 | */ 6 | public enum AnvilProperty implements ContainerProperty { 7 | /** 8 | * The maximum cost of renaming or repairing in the anvil. 9 | */ 10 | MAXIMUM_COST; 11 | 12 | private static final AnvilProperty[] VALUES = values(); 13 | 14 | public static AnvilProperty from(int id) { 15 | return VALUES[id]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/RecipeDisplayEntry.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.checkerframework.checker.nullness.qual.Nullable; 4 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; 5 | 6 | import java.util.List; 7 | import java.util.OptionalInt; 8 | 9 | public record RecipeDisplayEntry(int id, RecipeDisplay display, OptionalInt group, 10 | int category, @Nullable List craftingRequirements) { 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/TooltipDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | 5 | import java.util.List; 6 | 7 | @Builder(toBuilder = true) 8 | public record TooltipDisplay(boolean hideTooltip, List> hiddenComponents) { 9 | public TooltipDisplay(boolean hideTooltip, List> hiddenComponents) { 10 | this.hideTooltip = hideTooltip; 11 | this.hiddenComponents = List.copyOf(hiddenComponents); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/block/BlockEntityInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.block; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | import org.cloudburstmc.nbt.NbtMap; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class BlockEntityInfo { 11 | private final int x; 12 | private final int y; 13 | private final int z; 14 | private final BlockEntityType type; 15 | private final @Nullable NbtMap nbt; 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/RainStrengthValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RainStrengthValue implements GameEventValue { 7 | private final float strength; 8 | 9 | public RainStrengthValue(float strength) { 10 | if (strength > 1) { 11 | strength = 1; 12 | } 13 | 14 | if (strength < 0) { 15 | strength = 0; 16 | } 17 | 18 | this.strength = strength; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/BeehiveOccupant.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | @Builder(toBuilder = true) 11 | public class BeehiveOccupant { 12 | private final TypedEntityData entityData; 13 | private final int ticksInHive; 14 | private final int minTicksInHive; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/ThunderStrengthValue.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class ThunderStrengthValue implements GameEventValue { 7 | private final float strength; 8 | 9 | public ThunderStrengthValue(float strength) { 10 | if (strength > 1) { 11 | strength = 1; 12 | } 13 | 14 | if (strength < 0) { 15 | strength = 0; 16 | } 17 | 18 | this.strength = strength; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugBeeInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | import java.util.List; 7 | 8 | public record DebugBeeInfo(@Nullable Vector3i hivePos, @Nullable Vector3i flowerPos, int travelTicks, 9 | List blacklistedHives) implements DebugInfo { 10 | @Override 11 | public DebugSubscriptions getType() { 12 | return DebugSubscriptions.BEES; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/ContainerActionType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum ContainerActionType { 4 | CLICK_ITEM, 5 | SHIFT_CLICK_ITEM, 6 | MOVE_TO_HOTBAR_SLOT, 7 | CREATIVE_GRAB_MAX_STACK, 8 | DROP_ITEM, 9 | SPREAD_ITEM, 10 | FILL_STACK; 11 | 12 | private static final ContainerActionType[] VALUES = values(); 13 | 14 | public static ContainerActionType from(int id) { 15 | return id >= 0 && id < VALUES.length ? VALUES[id] : VALUES[0]; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/ShapelessCraftingRecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | import java.util.List; 6 | 7 | public record ShapelessCraftingRecipeDisplay(List ingredients, SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { 8 | @Override 9 | public RecipeDisplayType getType() { 10 | return RecipeDisplayType.CRAFTING_SHAPELESS; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/PlayerInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NonNull; 7 | import lombok.Setter; 8 | import org.geysermc.mcprotocollib.auth.GameProfile; 9 | 10 | import java.util.List; 11 | 12 | @Data 13 | @Setter(AccessLevel.NONE) 14 | @AllArgsConstructor 15 | public class PlayerInfo { 16 | private int maxPlayers; 17 | private int onlinePlayers; 18 | private @NonNull List players; 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/DropItemAction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum DropItemAction implements ContainerAction { 4 | DROP_FROM_SELECTED, 5 | DROP_SELECTED_STACK, 6 | LEFT_CLICK_OUTSIDE_NOT_HOLDING, 7 | RIGHT_CLICK_OUTSIDE_NOT_HOLDING; 8 | 9 | public int getId() { 10 | return this.ordinal(); 11 | } 12 | 13 | private static final DropItemAction[] VALUES = values(); 14 | 15 | public static DropItemAction from(int id) { 16 | return VALUES[id]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/SmithingRecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | public record SmithingRecipeDisplay(SlotDisplay template, SlotDisplay base, SlotDisplay addition, 6 | SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { 7 | @Override 8 | public RecipeDisplayType getType() { 9 | return RecipeDisplayType.SMITHING; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/ServerLoginHandler.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol; 2 | 3 | import org.geysermc.mcprotocollib.network.Session; 4 | import org.geysermc.mcprotocollib.protocol.data.ProtocolState; 5 | 6 | /** 7 | * Interface for handling a session logging in to a server. 8 | */ 9 | public interface ServerLoginHandler { 10 | /** 11 | * Called when a session completes the initial login process and is now in the {@link ProtocolState}.GAME. 12 | * 13 | * @param session Session that logged in. 14 | */ 15 | void loggedIn(Session session); 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/FurnaceRecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | public record FurnaceRecipeDisplay(SlotDisplay ingredient, SlotDisplay fuel, SlotDisplay result, SlotDisplay craftingStation, 6 | int duration, float experience) implements RecipeDisplay { 7 | @Override 8 | public RecipeDisplayType getType() { 9 | return RecipeDisplayType.FURNACE; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/slot/SmithingTrimDemoSlotDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.Holder; 4 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.ArmorTrim; 5 | 6 | public record SmithingTrimDemoSlotDisplay(SlotDisplay base, SlotDisplay material, Holder pattern) implements SlotDisplay { 7 | @Override 8 | public RecipeSlotType getType() { 9 | return RecipeSlotType.SMITHING_TRIM; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/configuration/clientbound/ClientboundResetChatPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ClientboundResetChatPacket implements MinecraftPacket { 11 | public ClientboundResetChatPacket(ByteBuf in) { 12 | } 13 | 14 | @Override 15 | public void serialize(ByteBuf out) { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") 2 | 3 | dependencyResolutionManagement { 4 | repositories { 5 | maven("https://repo.opencollab.dev/maven-releases/") { 6 | name = "opencollab-releases" 7 | } 8 | maven("https://repo.opencollab.dev/maven-snapshots/") { 9 | name = "opencollab-snapshots" 10 | } 11 | maven("https://jitpack.io") { 12 | name = "jitpack" 13 | } 14 | mavenCentral() 15 | } 16 | } 17 | 18 | rootProject.name = "mcprotocollib" 19 | 20 | include( 21 | "protocol", 22 | "example" 23 | ) 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/PacketFactory.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.codec; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import org.geysermc.mcprotocollib.network.packet.Packet; 5 | 6 | /** 7 | * Factory for constructing {@link Packet}s. 8 | * 9 | * @param the packet type 10 | */ 11 | @FunctionalInterface 12 | public interface PacketFactory { 13 | 14 | /** 15 | * Constructs a new {@link Packet}. 16 | * 17 | * @param buf the input buffer 18 | * @return a new packet from the input 19 | */ 20 | T construct(ByteBuf buf); 21 | } 22 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/Equipment.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import org.checkerframework.checker.nullness.qual.Nullable; 7 | import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; 8 | import org.geysermc.mcprotocollib.protocol.data.game.item.ItemStack; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | public class Equipment { 13 | private @NonNull EquipmentSlot slot; 14 | private @Nullable ItemStack item; 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/level/ClientboundChunkBatchStartPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ClientboundChunkBatchStartPacket implements MinecraftPacket { 11 | 12 | public ClientboundChunkBatchStartPacket(ByteBuf in) { 13 | } 14 | 15 | public void serialize(ByteBuf out) { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/status/serverbound/ServerboundStatusRequestPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.status.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ServerboundStatusRequestPacket implements MinecraftPacket { 11 | 12 | public ServerboundStatusRequestPacket(ByteBuf in) { 13 | } 14 | 15 | @Override 16 | public void serialize(ByteBuf out) { 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/status/serverbound/ServerboundPingRequestPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.status.serverbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.geysermc.mcprotocollib.protocol.packet.ping.serverbound.ServerboundPingRequestPacket; 5 | import org.junit.jupiter.api.BeforeEach; 6 | 7 | public class ServerboundPingRequestPacketTest extends PacketTest { 8 | @BeforeEach 9 | public void setup() { 10 | this.setPackets(new ServerboundPingRequestPacket(System.currentTimeMillis())); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/status/clientbound/ClientboundPongResponsePacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.status.clientbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.geysermc.mcprotocollib.protocol.packet.ping.clientbound.ClientboundPongResponsePacket; 5 | import org.junit.jupiter.api.BeforeEach; 6 | 7 | public class ClientboundPongResponsePacketTest extends PacketTest { 8 | @BeforeEach 9 | public void setup() { 10 | this.setPackets(new ClientboundPongResponsePacket(System.currentTimeMillis())); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/TeamColor.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum TeamColor { 4 | BLACK, 5 | DARK_BLUE, 6 | DARK_GREEN, 7 | DARK_AQUA, 8 | DARK_RED, 9 | DARK_PURPLE, 10 | GOLD, 11 | GRAY, 12 | DARK_GRAY, 13 | BLUE, 14 | GREEN, 15 | AQUA, 16 | RED, 17 | LIGHT_PURPLE, 18 | YELLOW, 19 | WHITE, 20 | OBFUSCATED, 21 | BOLD, 22 | STRIKETHROUGH, 23 | UNDERLINED, 24 | ITALIC, 25 | RESET; 26 | 27 | public static final TeamColor[] VALUES = values(); 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/clientbound/ClientboundLoginFinishedPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.clientbound; 2 | 3 | import org.geysermc.mcprotocollib.auth.GameProfile; 4 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 5 | import org.junit.jupiter.api.BeforeEach; 6 | 7 | import java.util.UUID; 8 | 9 | public class ClientboundLoginFinishedPacketTest extends PacketTest { 10 | @BeforeEach 11 | public void setup() { 12 | this.setPackets(new ClientboundLoginFinishedPacket(new GameProfile(UUID.randomUUID(), "Username"))); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/UnexpectedEncryptionException.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * Thrown whenever a ClientboundHelloPacket is sent when we aren't expecting it 7 | * (I.E.: online mode server and offline mode client) 8 | */ 9 | public class UnexpectedEncryptionException extends IllegalStateException { 10 | @Serial 11 | private static final long serialVersionUID = 1L; 12 | 13 | public UnexpectedEncryptionException() { 14 | super("Cannot reply to ClientboundHelloPacket without profile and access token."); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/ChatTypeDecoration.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat; 2 | 3 | import org.cloudburstmc.nbt.NbtMap; 4 | 5 | import java.util.List; 6 | 7 | // Here for implementation if one wants to cache the Style tag while we don't have DFU Codecs. 8 | public interface ChatTypeDecoration { 9 | String translationKey(); 10 | 11 | List parameters(); 12 | 13 | NbtMap style(); 14 | 15 | enum Parameter { 16 | CONTENT, 17 | SENDER, 18 | TARGET; 19 | 20 | public static final Parameter[] VALUES = values(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/clientbound/ClientboundLoginDisconnectPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.clientbound; 2 | 3 | import net.kyori.adventure.text.Component; 4 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 5 | import org.junit.jupiter.api.BeforeEach; 6 | 7 | public class ClientboundLoginDisconnectPacketTest extends PacketTest { 8 | @BeforeEach 9 | public void setup() { 10 | this.setPackets(new ClientboundLoginDisconnectPacket("Message"), 11 | new ClientboundLoginDisconnectPacket(Component.text("Message"))); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/src/main/java/org/geysermc/mcprotocollib/network/example/PingPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.example; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import org.geysermc.mcprotocollib.network.packet.Packet; 5 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 6 | 7 | public class PingPacket implements Packet { 8 | private final String id; 9 | 10 | public PingPacket(ByteBuf buf) { 11 | this.id = MinecraftTypes.readString(buf); 12 | } 13 | 14 | public PingPacket(String id) { 15 | this.id = id; 16 | } 17 | 18 | public String getPingId() { 19 | return this.id; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/recipe/display/ShapedCraftingRecipeDisplay.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.recipe.display; 2 | 3 | import org.geysermc.mcprotocollib.protocol.data.game.recipe.display.slot.SlotDisplay; 4 | 5 | import java.util.List; 6 | 7 | public record ShapedCraftingRecipeDisplay(int width, int height, List ingredients, 8 | SlotDisplay result, SlotDisplay craftingStation) implements RecipeDisplay { 9 | @Override 10 | public RecipeDisplayType getType() { 11 | return RecipeDisplayType.CRAFTING_SHAPED; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/property/BrewingStandProperty.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory.property; 2 | 3 | /** 4 | * Container properties of a brewing stand. 5 | */ 6 | public enum BrewingStandProperty implements ContainerProperty { 7 | /** 8 | * Time remaining for potions to finish brewing. 9 | * Usually a value between 0 (done) and 400 (just started). 10 | */ 11 | BREW_TIME; 12 | 13 | private static final BrewingStandProperty[] VALUES = values(); 14 | 15 | public static BrewingStandProperty from(int id) { 16 | return VALUES[id]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chunk/palette/PaletteType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chunk.palette; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum PaletteType { 7 | BIOME(1, 3, 64), 8 | BLOCK_STATE(4, 8, 4096); 9 | 10 | private final int minBitsPerEntry; 11 | private final int maxBitsPerEntry; 12 | private final int storageSize; 13 | 14 | PaletteType(int minBitsPerEntry, int maxBitsPerEntry, int storageSize) { 15 | this.minBitsPerEntry = minBitsPerEntry; 16 | this.maxBitsPerEntry = maxBitsPerEntry; 17 | this.storageSize = storageSize; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugEntityBlockIntersection.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public enum DebugEntityBlockIntersection implements DebugInfo { 4 | IN_BLOCK, 5 | IN_FLUID, 6 | IN_AIR; 7 | 8 | @Override 9 | public DebugSubscriptions getType() { 10 | return DebugSubscriptions.ENTITY_BLOCK_INTERSECTIONS; 11 | } 12 | 13 | private static final DebugEntityBlockIntersection[] VALUES = values(); 14 | 15 | public static DebugEntityBlockIntersection from(int id) { 16 | return id >= 0 && id < VALUES.length ? VALUES[id] : VALUES[0]; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/Pose.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | public enum Pose { 4 | STANDING, 5 | FALL_FLYING, 6 | SLEEPING, 7 | SWIMMING, 8 | SPIN_ATTACK, 9 | SNEAKING, 10 | LONG_JUMPING, 11 | DYING, 12 | CROAKING, 13 | USING_TONGUE, 14 | SITTING, 15 | ROARING, 16 | SNIFFING, 17 | EMERGING, 18 | DIGGING, 19 | SLIDING, 20 | SHOOTING, 21 | INHALING; 22 | 23 | private static final Pose[] VALUES = values(); 24 | 25 | public static Pose from(int id) { 26 | return VALUES[id]; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/MobEffectDetails.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import org.checkerframework.checker.nullness.qual.Nullable; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | @Builder(toBuilder = true) 11 | public class MobEffectDetails { 12 | private final int amplifier; 13 | private final int duration; 14 | private final boolean ambient; 15 | private final boolean showParticles; 16 | private final boolean showIcon; 17 | private final @Nullable MobEffectDetails hiddenEffect; 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/clientbound/ClientboundCustomQueryPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.clientbound; 2 | 3 | import net.kyori.adventure.key.Key; 4 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 5 | import org.junit.jupiter.api.BeforeEach; 6 | 7 | import java.util.Random; 8 | 9 | public class ClientboundCustomQueryPacketTest extends PacketTest { 10 | @BeforeEach 11 | public void setup() { 12 | byte[] data = new byte[1024]; 13 | new Random().nextBytes(data); 14 | 15 | this.setPackets(new ClientboundCustomQueryPacket(0, Key.key("channel"), data)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugStructuresInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | import java.util.List; 6 | 7 | public record DebugStructuresInfo(List info) implements DebugInfo { 8 | @Override 9 | public DebugSubscriptions getType() { 10 | return DebugSubscriptions.STRUCTURES; 11 | } 12 | 13 | public record StructureInfo(BoundingBox boundingBox, List pieces) { 14 | public record Piece(BoundingBox boundingBox, boolean isStart) {} 15 | } 16 | 17 | public record BoundingBox(Vector3i min, Vector3i max) {} 18 | } 19 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/CustomModelData.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | 5 | import java.util.List; 6 | 7 | @Builder(toBuilder = true) 8 | public record CustomModelData(List floats, List flags, List strings, List colors) { 9 | public CustomModelData(List floats, List flags, List strings, List colors) { 10 | this.floats = List.copyOf(floats); 11 | this.flags = List.copyOf(flags); 12 | this.strings = List.copyOf(strings); 13 | this.colors = List.copyOf(colors); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/AttributeModifier.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.attribute; 2 | 3 | import lombok.Data; 4 | import lombok.NonNull; 5 | import net.kyori.adventure.key.Key; 6 | 7 | import java.util.UUID; 8 | 9 | @Data 10 | public class AttributeModifier { 11 | private final @NonNull Key id; 12 | private final double amount; 13 | private final @NonNull ModifierOperation operation; 14 | 15 | public AttributeModifier(@NonNull Key id, double amount, @NonNull ModifierOperation operation) { 16 | this.id = id; 17 | this.amount = amount; 18 | this.operation = operation; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/login/serverbound/ServerboundCustomQueryAnswerPacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.serverbound; 2 | 3 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 4 | import org.junit.jupiter.api.BeforeEach; 5 | 6 | import java.util.Random; 7 | 8 | public class ServerboundCustomQueryAnswerPacketTest extends PacketTest { 9 | @BeforeEach 10 | public void setup() { 11 | byte[] data = new byte[1024]; 12 | new Random().nextBytes(data); 13 | 14 | this.setPackets(new ServerboundCustomQueryAnswerPacket(0), 15 | new ServerboundCustomQueryAnswerPacket(0, data)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/status/ServerStatusInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.status; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NonNull; 7 | import lombok.Setter; 8 | import net.kyori.adventure.text.Component; 9 | import org.jetbrains.annotations.Nullable; 10 | 11 | @Data 12 | @Setter(AccessLevel.NONE) 13 | @AllArgsConstructor 14 | public class ServerStatusInfo { 15 | private @NonNull Component description; 16 | private @Nullable PlayerInfo playerInfo; 17 | private @Nullable VersionInfo versionInfo; 18 | private byte[] iconPng; 19 | private boolean enforcesSecureChat; 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/BlockBreakStage.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | public enum BlockBreakStage { 4 | STAGE_1, 5 | STAGE_2, 6 | STAGE_3, 7 | STAGE_4, 8 | STAGE_5, 9 | STAGE_6, 10 | STAGE_7, 11 | STAGE_8, 12 | STAGE_9, 13 | STAGE_10, 14 | RESET; 15 | 16 | /** 17 | * All stages, excluding reset 18 | */ 19 | public static final BlockBreakStage[] STAGES; 20 | 21 | static { 22 | BlockBreakStage[] allValues = values(); 23 | STAGES = new BlockBreakStage[allValues.length - 1]; 24 | System.arraycopy(allValues, 0, STAGES, 0, 10); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/notify/GameEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.notify; 2 | 3 | public enum GameEvent { 4 | NO_RESPAWN_BLOCK_AVAILABLE, 5 | START_RAINING, 6 | STOP_RAINING, 7 | CHANGE_GAME_MODE, 8 | WIN_GAME, 9 | DEMO_EVENT, 10 | PLAY_ARROW_HIT_SOUND, 11 | RAIN_LEVEL_CHANGE, 12 | THUNDER_LEVEL_CHANGE, 13 | PUFFER_FISH_STING, 14 | GUARDIAN_ELDER_EFFECT, 15 | IMMEDIATE_RESPAWN, 16 | LIMITED_CRAFTING, 17 | LEVEL_CHUNKS_LOAD_START; 18 | 19 | private static final GameEvent[] VALUES = values(); 20 | 21 | public static GameEvent from(int id) { 22 | return VALUES[id]; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/login/serverbound/ServerboundLoginAcknowledgedPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ServerboundLoginAcknowledgedPacket implements MinecraftPacket { 11 | public ServerboundLoginAcknowledgedPacket(ByteBuf in) { 12 | } 13 | 14 | @Override 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean isTerminal() { 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/ItemStack.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponents; 7 | 8 | @Data 9 | @AllArgsConstructor 10 | public class ItemStack { 11 | private final int id; 12 | private final int amount; 13 | private final @Nullable DataComponents dataComponentsPatch; 14 | 15 | public ItemStack(int id) { 16 | this(id, 1); 17 | } 18 | 19 | public ItemStack(int id, int amount) { 20 | this(id, amount, null); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundBundlePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | public class ClientboundBundlePacket implements MinecraftPacket { 13 | private final List packets; 14 | 15 | @Override 16 | public void serialize(ByteBuf out) { 17 | } 18 | 19 | @Override 20 | public boolean shouldRunOnGameThread() { 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/serverbound/ServerboundPongPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.common.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundPongPacket implements MinecraftPacket { 13 | private final int id; 14 | 15 | public ServerboundPongPacket(ByteBuf in) { 16 | this.id = in.readInt(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeInt(this.id); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundConfigurationAcknowledgedPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ServerboundConfigurationAcknowledgedPacket implements MinecraftPacket { 11 | 12 | public ServerboundConfigurationAcknowledgedPacket(ByteBuf in) { 13 | } 14 | 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean isTerminal() { 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/player/ClientboundPlayerCombatEnterPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @NoArgsConstructor 12 | public class ClientboundPlayerCombatEnterPacket implements MinecraftPacket { 13 | 14 | public ClientboundPlayerCombatEnterPacket(ByteBuf in) { 15 | // no-op 16 | } 17 | 18 | @Override 19 | public void serialize(ByteBuf out) { 20 | // no-op 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/server/ServerAdapter.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.server; 2 | 3 | /** 4 | * An adapter for picking server events to listen for. 5 | */ 6 | public class ServerAdapter implements ServerListener { 7 | @Override 8 | public void serverBound(ServerBoundEvent event) { 9 | } 10 | 11 | @Override 12 | public void serverClosing(ServerClosingEvent event) { 13 | } 14 | 15 | @Override 16 | public void serverClosed(ServerClosedEvent event) { 17 | } 18 | 19 | @Override 20 | public void sessionAdded(SessionAddedEvent event) { 21 | } 22 | 23 | @Override 24 | public void sessionRemoved(SessionRemovedEvent event) { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugSubscriptions.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | public enum DebugSubscriptions { 4 | DEDICATED_SERVER_TICK_TIME, 5 | BEES, 6 | BRAINS, 7 | BREEZES, 8 | GOAL_SELECTORS, 9 | ENTITY_PATHS, 10 | ENTITY_BLOCK_INTERSECTIONS, 11 | BEE_HIVES, 12 | POIS, 13 | REDSTONE_WIRE_ORIENTATIONS, 14 | VILLAGE_SECTIONS, 15 | RAIDS, 16 | STRUCTURES, 17 | GAME_EVENT_LISTENERS, 18 | NEIGHBOR_UPDATES, 19 | GAME_EVENTS; 20 | 21 | private static final DebugSubscriptions[] VALUES = values(); 22 | 23 | public static DebugSubscriptions from(int id) { 24 | return VALUES[id]; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/auth/util/UUIDUtils.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.auth.util; 2 | 3 | import java.util.HexFormat; 4 | import java.util.UUID; 5 | 6 | public class UUIDUtils { 7 | public static UUID convertToDashed(String noDashes) { 8 | if (noDashes == null) { 9 | return null; 10 | } 11 | 12 | return new UUID( 13 | HexFormat.fromHexDigitsToLong(noDashes, 0, 16), 14 | HexFormat.fromHexDigitsToLong(noDashes, 16, 32) 15 | ); 16 | } 17 | 18 | public static String convertToNoDashes(UUID uuid) { 19 | if (uuid == null) { 20 | return null; 21 | } 22 | 23 | return uuid.toString().replace("-", ""); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/type/ObjectDataComponent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component.type; 2 | 3 | import lombok.NonNull; 4 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; 5 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentType; 6 | 7 | public class ObjectDataComponent extends DataComponent> { 8 | private final T value; 9 | 10 | public ObjectDataComponent(@NonNull DataComponentType type, T value) { 11 | super(type); 12 | this.value = value; 13 | } 14 | 15 | @Override 16 | public T getValue() { 17 | return value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/type/ObjectEntityMetadata.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type; 2 | 3 | import lombok.NonNull; 4 | import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; 5 | import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; 6 | 7 | public class ObjectEntityMetadata extends EntityMetadata> { 8 | private final T value; 9 | 10 | public ObjectEntityMetadata(int id, @NonNull MetadataType type, T value) { 11 | super(id, type); 12 | this.value = value; 13 | } 14 | 15 | @Override 16 | public T getValue() { 17 | return value; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundClearDialogPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.common.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundClearDialogPacket implements MinecraftPacket { 13 | 14 | public ClientboundClearDialogPacket(ByteBuf in) { 15 | } 16 | 17 | @Override 18 | public void serialize(ByteBuf out) { 19 | } 20 | 21 | @Override 22 | public boolean shouldRunOnGameThread() { 23 | return true; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundKeepAlivePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.common.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundKeepAlivePacket implements MinecraftPacket { 13 | private final long pingId; 14 | 15 | public ClientboundKeepAlivePacket(ByteBuf in) { 16 | this.pingId = in.readLong(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeLong(this.pingId); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/serverbound/ServerboundKeepAlivePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.common.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundKeepAlivePacket implements MinecraftPacket { 13 | private final long pingId; 14 | 15 | public ServerboundKeepAlivePacket(ByteBuf in) { 16 | this.pingId = in.readLong(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeLong(this.pingId); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ping/serverbound/ServerboundPingRequestPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ping.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundPingRequestPacket implements MinecraftPacket { 13 | private final long pingTime; 14 | 15 | public ServerboundPingRequestPacket(ByteBuf in) { 16 | this.pingTime = in.readLong(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeLong(this.pingTime); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/debug/DebugBrainDump.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.debug; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | 5 | import java.util.List; 6 | 7 | public record DebugBrainDump(String name, String profession, int xp, float health, float maxHealth, 8 | String inventory, boolean wantsGolem, int angerLevel, List activities, 9 | List behaviors, List memories, List gossips, 10 | List pois, List potentialPois) implements DebugInfo { 11 | @Override 12 | public DebugSubscriptions getType() { 13 | return DebugSubscriptions.BRAINS; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ping/clientbound/ClientboundPongResponsePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ping.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundPongResponsePacket implements MinecraftPacket { 13 | private final long pingTime; 14 | 15 | public ClientboundPongResponsePacket(ByteBuf in) { 16 | this.pingTime = in.readLong(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeLong(this.pingTime); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/level/ClientboundSectionBlocksUpdatePacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockChangeEntry; 5 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 6 | import org.junit.jupiter.api.BeforeEach; 7 | 8 | public class ClientboundSectionBlocksUpdatePacketTest extends PacketTest { 9 | 10 | @BeforeEach 11 | public void setup() { 12 | this.setPackets( 13 | new ClientboundSectionBlocksUpdatePacket(3, 4, 12, new BlockChangeEntry(Vector3i.from(50, 65, 200), 3)) 14 | ); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/attribute/Attribute.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.attribute; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | public class Attribute { 13 | private final @NonNull AttributeType type; 14 | private final double value; 15 | private final @NonNull List modifiers; 16 | 17 | public Attribute(@NonNull AttributeType type) { 18 | this(type, 0); 19 | } 20 | 21 | public Attribute(@NonNull AttributeType type, double value) { 22 | this(type, value, new ArrayList<>()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/JukeboxPlayable.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import net.kyori.adventure.key.Key; 5 | import net.kyori.adventure.text.Component; 6 | import org.geysermc.mcprotocollib.protocol.data.game.Holder; 7 | import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | @Builder(toBuilder = true) 11 | public record JukeboxPlayable(@Nullable Holder songHolder, @Nullable Key songLocation) { 12 | 13 | @Builder(toBuilder = true) 14 | public record JukeboxSong(Sound soundEvent, Component description, float lengthInSeconds, int comparatorOutput) { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/level/ClientboundBlockUpdatePacketTest.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level; 2 | 3 | import org.cloudburstmc.math.vector.Vector3i; 4 | import org.geysermc.mcprotocollib.protocol.data.game.level.block.BlockChangeEntry; 5 | import org.geysermc.mcprotocollib.protocol.packet.PacketTest; 6 | import org.junit.jupiter.api.BeforeEach; 7 | 8 | public class ClientboundBlockUpdatePacketTest extends PacketTest { 9 | @BeforeEach 10 | public void setup() { 11 | this.setPackets( 12 | new ClientboundBlockUpdatePacket(new BlockChangeEntry( 13 | Vector3i.from(1, 61, -1), 3 14 | )) 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/InstrumentComponent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import net.kyori.adventure.key.Key; 5 | import net.kyori.adventure.text.Component; 6 | import org.geysermc.mcprotocollib.protocol.data.game.Holder; 7 | import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | @Builder(toBuilder = true) 11 | public record InstrumentComponent(@Nullable Holder instrumentHolder, @Nullable Key instrumentLocation) { 12 | 13 | @Builder(toBuilder = true) 14 | public record Instrument(Sound soundEvent, float useDuration, float range, Component description) { 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/BannerPatternLayer.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import net.kyori.adventure.key.Key; 7 | import org.geysermc.mcprotocollib.protocol.data.game.Holder; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | @Builder(toBuilder = true) 12 | public class BannerPatternLayer { 13 | private final Holder pattern; 14 | private final int colorId; 15 | 16 | @Data 17 | @AllArgsConstructor 18 | @Builder(toBuilder = true) 19 | public static class BannerPattern { 20 | private final Key assetId; 21 | private final String translationKey; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/auth/util/UndashedUUIDAdapter.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.auth.util; 2 | 3 | import com.google.gson.TypeAdapter; 4 | import com.google.gson.stream.JsonReader; 5 | import com.google.gson.stream.JsonWriter; 6 | 7 | import java.io.IOException; 8 | import java.util.UUID; 9 | 10 | /** 11 | * Utility class for serializing and deserializing undashed UUIDs. 12 | */ 13 | public class UndashedUUIDAdapter extends TypeAdapter { 14 | @Override 15 | public void write(JsonWriter out, UUID value) throws IOException { 16 | out.value(UUIDUtils.convertToNoDashes(value)); 17 | } 18 | 19 | @Override 20 | public UUID read(JsonReader in) throws IOException { 21 | return UUIDUtils.convertToDashed(in.nextString()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chunk/palette/GlobalPalette.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chunk.palette; 2 | 3 | import lombok.EqualsAndHashCode; 4 | 5 | /** 6 | * A global palette that maps 1:1. 7 | */ 8 | @EqualsAndHashCode 9 | public class GlobalPalette implements Palette { 10 | public static final GlobalPalette INSTANCE = new GlobalPalette(); 11 | 12 | @Override 13 | public int size() { 14 | return Integer.MAX_VALUE; 15 | } 16 | 17 | @Override 18 | public int stateToId(int state) { 19 | return state; 20 | } 21 | 22 | @Override 23 | public int idToState(int id) { 24 | return id; 25 | } 26 | 27 | @Override 28 | public GlobalPalette copy() { 29 | return this; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundPlayerLoadedPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AccessLevel; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 11 | public class ServerboundPlayerLoadedPacket implements MinecraftPacket { 12 | public static final ServerboundPlayerLoadedPacket INSTANCE = new ServerboundPlayerLoadedPacket(); 13 | 14 | @Override 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean shouldRunOnGameThread() { 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/codec/MinecraftPacketSerializer.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.codec; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.RequiredArgsConstructor; 5 | import org.geysermc.mcprotocollib.network.codec.PacketDefinition; 6 | import org.geysermc.mcprotocollib.network.codec.PacketSerializer; 7 | 8 | @RequiredArgsConstructor 9 | public class MinecraftPacketSerializer implements PacketSerializer { 10 | private final PacketFactory factory; 11 | 12 | @Override 13 | public void serialize(ByteBuf buf, T packet) { 14 | packet.serialize(buf); 15 | } 16 | 17 | @Override 18 | public T deserialize(ByteBuf buf, PacketDefinition definition) { 19 | return this.factory.construct(buf); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/Equippable.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import net.kyori.adventure.key.Key; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | import org.geysermc.mcprotocollib.protocol.data.game.entity.EquipmentSlot; 7 | import org.geysermc.mcprotocollib.protocol.data.game.level.sound.Sound; 8 | 9 | @Builder(toBuilder = true) 10 | public record Equippable(EquipmentSlot slot, Sound equipSound, @Nullable Key model, @Nullable Key cameraOverlay, 11 | @Nullable HolderSet allowedEntities, boolean dispensable, boolean swappable, boolean damageOnHurt, 12 | boolean equipOnInteract, boolean canBeSheared, Sound shearingSound) { 13 | } 14 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/level/waypoint/TrackedWaypoint.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.level.waypoint; 2 | 3 | import net.kyori.adventure.key.Key; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | import java.util.Optional; 7 | import java.util.UUID; 8 | 9 | public record TrackedWaypoint(@Nullable UUID uuid, @Nullable String id, Icon icon, Type type, @Nullable WaypointData data) { 10 | 11 | public record Icon(Key style, Optional color) { 12 | } 13 | 14 | public enum Type { 15 | EMPTY, 16 | VEC3I, 17 | CHUNK, 18 | AZIMUTH; 19 | 20 | private static final Type[] VALUES = values(); 21 | 22 | public static Type from(int id) { 23 | return VALUES[id]; 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundClientTickEndPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AccessLevel; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 11 | public class ServerboundClientTickEndPacket implements MinecraftPacket { 12 | public static final ServerboundClientTickEndPacket INSTANCE = new ServerboundClientTickEndPacket(); 13 | 14 | @Override 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean shouldRunOnGameThread() { 20 | return true; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundStartConfigurationPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ClientboundStartConfigurationPacket implements MinecraftPacket { 11 | 12 | public ClientboundStartConfigurationPacket(ByteBuf in) { 13 | } 14 | 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean shouldRunOnGameThread() { 20 | return true; 21 | } 22 | 23 | @Override 24 | public boolean isTerminal() { 25 | return true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/ClientSession.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network; 2 | 3 | import org.checkerframework.checker.nullness.qual.Nullable; 4 | 5 | /** 6 | * A network client session. 7 | */ 8 | public interface ClientSession extends Session { 9 | /** 10 | * Connects this session to its host and port. 11 | */ 12 | default void connect() { 13 | connect(true); 14 | } 15 | 16 | /** 17 | * Connects this session to its host and port. 18 | * 19 | * @param wait Whether to wait for the connection to be established before returning. 20 | */ 21 | void connect(boolean wait); 22 | 23 | /** 24 | * Get the proxy used by this session. 25 | * 26 | * @return The proxy used by this session. 27 | */ 28 | @Nullable ProxyInfo getProxy(); 29 | } 30 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/common/clientbound/ClientboundPingPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.common.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundPingPacket implements MinecraftPacket { 13 | private final int id; 14 | 15 | public ClientboundPingPacket(ByteBuf in) { 16 | this.id = in.readInt(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeInt(this.id); 22 | } 23 | 24 | @Override 25 | public boolean shouldRunOnGameThread() { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/ContainerType.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory; 2 | 3 | public enum ContainerType { 4 | GENERIC_9X1, 5 | GENERIC_9X2, 6 | GENERIC_9X3, 7 | GENERIC_9X4, 8 | GENERIC_9X5, 9 | GENERIC_9X6, 10 | GENERIC_3X3, 11 | CRAFTER_3x3, 12 | ANVIL, 13 | BEACON, 14 | BLAST_FURNACE, 15 | BREWING_STAND, 16 | CRAFTING, 17 | ENCHANTMENT, 18 | FURNACE, 19 | GRINDSTONE, 20 | HOPPER, 21 | LECTERN, 22 | LOOM, 23 | MERCHANT, 24 | SHULKER_BOX, 25 | SMITHING, 26 | SMOKER, 27 | CARTOGRAPHY, 28 | STONECUTTER; 29 | 30 | private static final ContainerType[] VALUES = values(); 31 | 32 | public static ContainerType from(int id) { 33 | return VALUES[id]; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/configuration/clientbound/ClientboundFinishConfigurationPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.configuration.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | public class ClientboundFinishConfigurationPacket implements MinecraftPacket { 11 | public ClientboundFinishConfigurationPacket(ByteBuf in) { 12 | } 13 | 14 | @Override 15 | public void serialize(ByteBuf out) { 16 | } 17 | 18 | @Override 19 | public boolean shouldRunOnGameThread() { 20 | return true; 21 | } 22 | 23 | @Override 24 | public boolean isTerminal() { 25 | return true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundChatAckPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ServerboundChatAckPacket implements MinecraftPacket { 14 | private final int offset; 15 | 16 | public ServerboundChatAckPacket(ByteBuf in) { 17 | this.offset = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.offset); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/DefaultComponentSerializer.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data; 2 | 3 | import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; 4 | import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer; 5 | 6 | public final class DefaultComponentSerializer { 7 | private static GsonComponentSerializer serializer = GsonComponentSerializer.builder() 8 | .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()) 9 | .build(); 10 | 11 | public static GsonComponentSerializer get() { 12 | return serializer; 13 | } 14 | 15 | public static void set(GsonComponentSerializer serializer) { 16 | DefaultComponentSerializer.serializer = serializer; 17 | } 18 | 19 | private DefaultComponentSerializer() { 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundChatCommandPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ServerboundChatCommandPacket implements MinecraftPacket { 14 | private final String command; 15 | 16 | public ServerboundChatCommandPacket(ByteBuf in) { 17 | this.command = MinecraftTypes.readString(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeString(out, this.command); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chunk/palette/SingletonPalette.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chunk.palette; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.RequiredArgsConstructor; 5 | 6 | /** 7 | * A palette containing one state. 8 | */ 9 | @EqualsAndHashCode 10 | @RequiredArgsConstructor 11 | public class SingletonPalette implements Palette { 12 | private final int state; 13 | 14 | @Override 15 | public int size() { 16 | return 1; 17 | } 18 | 19 | @Override 20 | public int stateToId(int state) { 21 | return this.state == state ? 0 : -1; 22 | } 23 | 24 | @Override 25 | public int idToState(int id) { 26 | return id == 0 ? this.state : 0; 27 | } 28 | 29 | @Override 30 | public SingletonPalette copy() { 31 | return this; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/level/ClientboundChunkBatchFinishedPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundChunkBatchFinishedPacket implements MinecraftPacket { 14 | private final int batchSize; 15 | 16 | public ClientboundChunkBatchFinishedPacket(ByteBuf in) { 17 | this.batchSize = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | public void serialize(ByteBuf out) { 21 | MinecraftTypes.writeVarInt(out, this.batchSize); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/login/clientbound/ClientboundLoginCompressionPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.login.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundLoginCompressionPacket implements MinecraftPacket { 14 | private final int threshold; 15 | 16 | public ClientboundLoginCompressionPacket(ByteBuf in) { 17 | this.threshold = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.threshold); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/ServerboundLockDifficultyPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundLockDifficultyPacket implements MinecraftPacket { 13 | private final boolean locked; 14 | 15 | public ServerboundLockDifficultyPacket(ByteBuf in) { 16 | this.locked = in.readBoolean(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeBoolean(this.locked); 22 | } 23 | 24 | @Override 25 | public boolean shouldRunOnGameThread() { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/player/ServerboundSetCarriedItemPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundSetCarriedItemPacket implements MinecraftPacket { 13 | private final int slot; 14 | 15 | public ServerboundSetCarriedItemPacket(ByteBuf in) { 16 | this.slot = in.readShort(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeShort(this.slot); 22 | } 23 | 24 | @Override 25 | public boolean shouldRunOnGameThread() { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/test/java/org/geysermc/mcprotocollib/protocol/data/NetworkDataTests.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import io.netty.buffer.Unpooled; 5 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 6 | import org.geysermc.mcprotocollib.protocol.data.game.entity.Effect; 7 | import org.junit.jupiter.api.Test; 8 | 9 | import static org.junit.jupiter.api.Assertions.assertEquals; 10 | 11 | /** 12 | * Miscellaneous tests for reading and writing classes to/from the network 13 | */ 14 | public class NetworkDataTests { 15 | 16 | @Test 17 | public void testEffects() { 18 | for (Effect effect : Effect.VALUES) { 19 | ByteBuf buf = Unpooled.buffer(); 20 | MinecraftTypes.writeEffect(buf, effect); 21 | 22 | assertEquals(effect, MinecraftTypes.readEffect(buf)); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/PotionContents.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import org.checkerframework.checker.nullness.qual.Nullable; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @Builder(toBuilder = true) 11 | public class PotionContents { 12 | private final int potionId; 13 | private final int customColor; 14 | private final List customEffects; 15 | private final @Nullable String customName; 16 | 17 | public PotionContents(int potionId, int customColor, List customEffects, @Nullable String customName) { 18 | this.potionId = potionId; 19 | this.customColor = customColor; 20 | this.customEffects = List.copyOf(customEffects); 21 | this.customName = customName; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/level/border/ClientboundSetBorderSizePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.level.border; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundSetBorderSizePacket implements MinecraftPacket { 13 | private final double size; 14 | 15 | public ClientboundSetBorderSizePacket(ByteBuf in) { 16 | this.size = in.readDouble(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeDouble(this.size); 22 | } 23 | 24 | @Override 25 | public boolean shouldRunOnGameThread() { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/title/ClientboundClearTitlesPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.title; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ClientboundClearTitlesPacket implements MinecraftPacket { 13 | private final boolean resetTimes; 14 | 15 | public ClientboundClearTitlesPacket(ByteBuf in) { 16 | this.resetTimes = in.readBoolean(); 17 | } 18 | 19 | @Override 20 | public void serialize(ByteBuf out) { 21 | out.writeBoolean(this.resetTimes); 22 | } 23 | 24 | @Override 25 | public boolean shouldRunOnGameThread() { 26 | return true; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/configuration/serverbound/ServerboundAcceptCodeOfConductPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.configuration.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AccessLevel; 5 | import lombok.NoArgsConstructor; 6 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 7 | import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.ServerboundClientTickEndPacket; 8 | 9 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 10 | public class ServerboundAcceptCodeOfConductPacket implements MinecraftPacket { 11 | public static final ServerboundAcceptCodeOfConductPacket INSTANCE = new ServerboundAcceptCodeOfConductPacket(); 12 | 13 | @Override 14 | public void serialize(ByteBuf out) {} 15 | 16 | @Override 17 | public boolean shouldRunOnGameThread() { 18 | return true; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/player/ClientboundPlayerCombatEndPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundPlayerCombatEndPacket implements MinecraftPacket { 14 | private final int duration; 15 | 16 | public ClientboundPlayerCombatEndPacket(ByteBuf in) { 17 | this.duration = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.duration); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/object/Direction.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.object; 2 | 3 | import lombok.Getter; 4 | 5 | public enum Direction implements ObjectData { 6 | DOWN(-1), 7 | UP(-1), 8 | NORTH(0), 9 | SOUTH(1), 10 | WEST(2), 11 | EAST(3); 12 | 13 | @Getter 14 | private final int horizontalIndex; 15 | 16 | Direction(int horizontalIndex) { 17 | this.horizontalIndex = horizontalIndex; 18 | } 19 | 20 | private static final Direction[] HORIZONTAL_VALUES = {NORTH, SOUTH, WEST, EAST}; 21 | public static final Direction[] VALUES = values(); 22 | 23 | public static Direction getByHorizontalIndex(int index) { 24 | return HORIZONTAL_VALUES[index % HORIZONTAL_VALUES.length]; 25 | } 26 | 27 | public static Direction from(int id) { 28 | return VALUES[id]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/scoreboard/ScoreboardPosition.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.scoreboard; 2 | 3 | public enum ScoreboardPosition { 4 | PLAYER_LIST, 5 | SIDEBAR, 6 | BELOW_NAME, 7 | 8 | SIDEBAR_TEAM_BLACK, 9 | SIDEBAR_TEAM_DARK_BLUE, 10 | SIDEBAR_TEAM_DARK_GREEN, 11 | SIDEBAR_TEAM_DARK_AQUA, 12 | SIDEBAR_TEAM_DARK_RED, 13 | SIDEBAR_TEAM_DARK_PURPLE, 14 | SIDEBAR_TEAM_GOLD, 15 | SIDEBAR_TEAM_GRAY, 16 | SIDEBAR_TEAM_DARK_GRAY, 17 | SIDEBAR_TEAM_BLUE, 18 | SIDEBAR_TEAM_GREEN, 19 | SIDEBAR_TEAM_AQUA, 20 | SIDEBAR_TEAM_RED, 21 | SIDEBAR_TEAM_LIGHT_PURPLE, 22 | SIDEBAR_TEAM_YELLOW, 23 | SIDEBAR_TEAM_WHITE; 24 | 25 | private static final ScoreboardPosition[] VALUES = values(); 26 | 27 | public static ScoreboardPosition from(int id) { 28 | return VALUES[id]; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/metadata/GlobalPos.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.metadata; 2 | 3 | import net.kyori.adventure.key.Key; 4 | import org.cloudburstmc.math.vector.Vector3i; 5 | 6 | public class GlobalPos { 7 | private final Key dimension; 8 | private final Vector3i position; 9 | 10 | public GlobalPos(Key dimension, Vector3i position) { 11 | this.dimension = dimension; 12 | this.position = position; 13 | } 14 | 15 | public Key getDimension() { 16 | return dimension; 17 | } 18 | 19 | public Vector3i getPosition() { 20 | return position; 21 | } 22 | 23 | public int getX() { 24 | return position.getX(); 25 | } 26 | 27 | public int getY() { 28 | return position.getY(); 29 | } 30 | 31 | public int getZ() { 32 | return position.getZ(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/server/ServerClosedEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.server; 2 | 3 | import org.geysermc.mcprotocollib.network.Server; 4 | 5 | /** 6 | * Called when the server is closed. 7 | */ 8 | public class ServerClosedEvent implements ServerEvent { 9 | private final Server server; 10 | 11 | /** 12 | * Creates a new ServerClosedEvent instance. 13 | * 14 | * @param server Server being closed. 15 | */ 16 | public ServerClosedEvent(Server server) { 17 | this.server = server; 18 | } 19 | 20 | /** 21 | * Gets the server involved in this event. 22 | * 23 | * @return The event's server. 24 | */ 25 | public Server getServer() { 26 | return this.server; 27 | } 28 | 29 | @Override 30 | public void call(ServerListener listener) { 31 | listener.serverClosed(this); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/level/ServerboundChunkBatchReceivedPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @With 11 | @AllArgsConstructor 12 | public class ServerboundChunkBatchReceivedPacket implements MinecraftPacket { 13 | private final float desiredChunksPerTick; 14 | 15 | public ServerboundChunkBatchReceivedPacket(ByteBuf in) { 16 | this.desiredChunksPerTick = in.readFloat(); 17 | } 18 | 19 | public void serialize(ByteBuf out) { 20 | out.writeFloat(this.desiredChunksPerTick); 21 | } 22 | 23 | @Override 24 | public boolean shouldRunOnGameThread() { 25 | return true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/session/ConnectedEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.session; 2 | 3 | import org.geysermc.mcprotocollib.network.Session; 4 | 5 | /** 6 | * Called when the session connects. 7 | */ 8 | public class ConnectedEvent implements SessionEvent { 9 | private final Session session; 10 | 11 | /** 12 | * Creates a new ConnectedEvent instance. 13 | * 14 | * @param session Session being connected. 15 | */ 16 | public ConnectedEvent(Session session) { 17 | this.session = session; 18 | } 19 | 20 | /** 21 | * Gets the session involved in this event. 22 | * 23 | * @return The event's session. 24 | */ 25 | public Session getSession() { 26 | return this.session; 27 | } 28 | 29 | @Override 30 | public void call(SessionListener listener) { 31 | listener.connected(this); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/configuration/serverbound/ServerboundFinishConfigurationPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.configuration.serverbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AccessLevel; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | 9 | @Data 10 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 11 | public class ServerboundFinishConfigurationPacket implements MinecraftPacket { 12 | public static final ServerboundFinishConfigurationPacket INSTANCE = new ServerboundFinishConfigurationPacket(); 13 | 14 | public void serialize(ByteBuf out) { 15 | } 16 | 17 | @Override 18 | public boolean shouldRunOnGameThread() { 19 | return true; 20 | } 21 | 22 | @Override 23 | public boolean isTerminal() { 24 | return true; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/server/ServerBoundEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.server; 2 | 3 | import org.geysermc.mcprotocollib.network.Server; 4 | 5 | /** 6 | * Called when the server is bound to its host and port. 7 | */ 8 | public class ServerBoundEvent implements ServerEvent { 9 | private final Server server; 10 | 11 | /** 12 | * Creates a new ServerBoundEvent instance. 13 | * 14 | * @param server Server being bound. 15 | */ 16 | public ServerBoundEvent(Server server) { 17 | this.server = server; 18 | } 19 | 20 | /** 21 | * Gets the server involved in this event. 22 | * 23 | * @return The event's server. 24 | */ 25 | public Server getServer() { 26 | return this.server; 27 | } 28 | 29 | @Override 30 | public void call(ServerListener listener) { 31 | listener.serverBound(this); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/network/event/server/ServerClosingEvent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.network.event.server; 2 | 3 | import org.geysermc.mcprotocollib.network.Server; 4 | 5 | /** 6 | * Called when the server is about to close. 7 | */ 8 | public class ServerClosingEvent implements ServerEvent { 9 | private final Server server; 10 | 11 | /** 12 | * Creates a new ServerClosingEvent instance. 13 | * 14 | * @param server Server being closed. 15 | */ 16 | public ServerClosingEvent(Server server) { 17 | this.server = server; 18 | } 19 | 20 | /** 21 | * Gets the server involved in this event. 22 | * 23 | * @return The event's server. 24 | */ 25 | public Server getServer() { 26 | return this.server; 27 | } 28 | 29 | @Override 30 | public void call(ServerListener listener) { 31 | listener.serverClosing(this); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/type/IntDataComponent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component.type; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.NonNull; 5 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; 6 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.IntComponentType; 7 | 8 | 9 | public class IntDataComponent extends DataComponent { 10 | private final Integer value; 11 | 12 | public IntDataComponent(@NonNull IntComponentType type, Integer value) { 13 | super(type); 14 | this.value = value; 15 | } 16 | 17 | @Override 18 | public Integer getValue() { 19 | return this.value; 20 | } 21 | 22 | @Override 23 | public void write(ByteBuf out) { 24 | this.type.writeDataComponentPrimitive(out, this.value); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/entity/player/PlayerSpawnInfo.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.entity.player; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NonNull; 6 | import net.kyori.adventure.key.Key; 7 | import org.checkerframework.checker.nullness.qual.Nullable; 8 | import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.GlobalPos; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | public class PlayerSpawnInfo { 13 | private final int dimension; 14 | private final @NonNull Key worldName; 15 | private final long hashedSeed; 16 | private final @NonNull GameMode gameMode; 17 | private final @Nullable GameMode previousGamemode; 18 | private final boolean debug; 19 | private final boolean flat; 20 | private final @Nullable GlobalPos lastDeathPos; 21 | private final int portalCooldown; 22 | private final int seaLevel; 23 | } 24 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/inventory/property/FurnaceProperty.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.inventory.property; 2 | 3 | /** 4 | * Container properties of a furnace. 5 | */ 6 | public enum FurnaceProperty implements ContainerProperty { 7 | /** 8 | * Number of ticks left before the current fuel runs out. 9 | */ 10 | BURN_TIME, 11 | 12 | /** 13 | * Number of ticks that the current item can keep the furnace burning. 14 | */ 15 | CURRENT_ITEM_BURN_TIME, 16 | 17 | /** 18 | * Number of ticks the item has been smelting for. 19 | */ 20 | COOK_TIME, 21 | 22 | /** 23 | * Number of ticks that the current item needs to be smelted. 24 | */ 25 | TOTAL_COOK_TIME; 26 | 27 | private static final FurnaceProperty[] VALUES = values(); 28 | 29 | public static FurnaceProperty from(int id) { 30 | return VALUES[id]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/WrittenBookContent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import net.kyori.adventure.text.Component; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | @Builder(toBuilder = true) 11 | public class WrittenBookContent { 12 | private final Filterable title; 13 | private final String author; 14 | private final int generation; 15 | private final List> pages; 16 | private final boolean resolved; 17 | 18 | public WrittenBookContent(Filterable title, String author, int generation, List> pages, boolean resolved) { 19 | this.title = title; 20 | this.author = author; 21 | this.generation = generation; 22 | this.pages = List.copyOf(pages); 23 | this.resolved = resolved; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/item/component/type/BooleanDataComponent.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.item.component.type; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.NonNull; 5 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.BooleanComponentType; 6 | import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponent; 7 | 8 | public class BooleanDataComponent extends DataComponent { 9 | private final Boolean value; 10 | 11 | public BooleanDataComponent(@NonNull BooleanComponentType type, Boolean value) { 12 | super(type); 13 | this.value = value; 14 | } 15 | 16 | @Override 17 | public Boolean getValue() { 18 | return this.value; 19 | } 20 | 21 | @Override 22 | public void write(ByteBuf out) { 23 | this.type.writeDataComponentPrimitive(out, this.value); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/data/game/chat/MessageSignature.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.data.game.chat; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import org.checkerframework.checker.nullness.qual.Nullable; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 8 | 9 | @Data 10 | @AllArgsConstructor 11 | public class MessageSignature { 12 | private final int id; 13 | private final byte @Nullable [] messageSignature; 14 | 15 | public static MessageSignature read(ByteBuf in) { 16 | int id = MinecraftTypes.readVarInt(in) - 1; 17 | byte[] messageSignature; 18 | if (id == -1) { 19 | messageSignature = new byte[256]; 20 | in.readBytes(messageSignature); 21 | } else { 22 | messageSignature = null; 23 | } 24 | return new MessageSignature(id, messageSignature); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Setup Gradle 12 | uses: GeyserMC/actions/setup-gradle-composite@master 13 | with: 14 | setup-java_java-version: 17 15 | 16 | - name: Build MCPL 17 | run: ./gradlew build 18 | 19 | - name: Publish to Maven Repository 20 | if: ${{ success() && github.repository == 'GeyserMC/MCProtocolLib' && (github.ref_name == 'master' || startsWith(github.ref_name, 'feature/')) }} 21 | uses: gradle/gradle-build-action@3bfe3a46584a206fb8361cdedd0647b0c4204232 22 | env: 23 | ORG_GRADLE_PROJECT_geysermcUsername: ${{ vars.DEPLOY_USER }} 24 | ORG_GRADLE_PROJECT_geysermcPassword: ${{ secrets.DEPLOY_PASS }} 25 | with: 26 | arguments: publish 27 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundTickingStepPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundTickingStepPacket implements MinecraftPacket { 14 | 15 | private final int tickSteps; 16 | 17 | public ClientboundTickingStepPacket(ByteBuf in) { 18 | this.tickSteps = MinecraftTypes.readVarInt(in); 19 | } 20 | 21 | @Override 22 | public void serialize(ByteBuf out) { 23 | MinecraftTypes.writeVarInt(out, this.tickSteps); 24 | } 25 | 26 | @Override 27 | public boolean shouldRunOnGameThread() { 28 | return true; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/serverbound/inventory/ServerboundSelectTradePacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.inventory; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ServerboundSelectTradePacket implements MinecraftPacket { 14 | private final int slot; 15 | 16 | public ServerboundSelectTradePacket(ByteBuf in) { 17 | this.slot = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.slot); 23 | } 24 | 25 | @Override 26 | public boolean shouldRunOnGameThread() { 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/ClientboundSetCameraPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundSetCameraPacket implements MinecraftPacket { 14 | private final int cameraEntityId; 15 | 16 | public ClientboundSetCameraPacket(ByteBuf in) { 17 | this.cameraEntityId = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.cameraEntityId); 23 | } 24 | 25 | @Override 26 | public boolean shouldRunOnGameThread() { 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /protocol/src/main/java/org/geysermc/mcprotocollib/protocol/packet/ingame/clientbound/entity/player/ClientboundSetHeldSlotPacket.java: -------------------------------------------------------------------------------- 1 | package org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.player; 2 | 3 | import io.netty.buffer.ByteBuf; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.With; 7 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftPacket; 8 | import org.geysermc.mcprotocollib.protocol.codec.MinecraftTypes; 9 | 10 | @Data 11 | @With 12 | @AllArgsConstructor 13 | public class ClientboundSetHeldSlotPacket implements MinecraftPacket { 14 | private final int slot; 15 | 16 | public ClientboundSetHeldSlotPacket(ByteBuf in) { 17 | this.slot = MinecraftTypes.readVarInt(in); 18 | } 19 | 20 | @Override 21 | public void serialize(ByteBuf out) { 22 | MinecraftTypes.writeVarInt(out, this.slot); 23 | } 24 | 25 | @Override 26 | public boolean shouldRunOnGameThread() { 27 | return true; 28 | } 29 | } 30 | --------------------------------------------------------------------------------