Showing preview only (2,353K chars total). Download the full file or copy to clipboard to get everything.
Repository: ViaVersion/ViaBackwards
Branch: master
Commit: 63afb2d06302
Files: 377
Total size: 2.1 MB
Directory structure:
gitextract_ph8u3uww/
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── build.yml
│ └── publish.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── build-logic/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── kotlin/
│ ├── extensions.kt
│ ├── vb.base-conventions.gradle.kts
│ ├── vb.build-logic.gradle.kts
│ └── vb.shadow-conventions.gradle.kts
├── build.gradle.kts
├── bukkit/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── BukkitPlugin.java
│ │ ├── listener/
│ │ │ ├── DurabilitySync1_11.java
│ │ │ ├── FireExtinguish1_16.java
│ │ │ ├── ItemDropSync1_17.java
│ │ │ ├── LecternInteract1_14.java
│ │ │ ├── PlayerHurtSound1_12.java
│ │ │ └── SpearAttack1_21_11.java
│ │ └── provider/
│ │ └── BukkitAdvancementCriteriaProvider.java
│ └── resources/
│ └── plugin.yml
├── common/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── ViaBackwards.java
│ │ ├── ViaBackwardsConfig.java
│ │ ├── ViaBackwardsPlatformImpl.java
│ │ ├── api/
│ │ │ ├── BackwardsProtocol.java
│ │ │ ├── DialogStyleConfig.java
│ │ │ ├── ViaBackwardsConfig.java
│ │ │ ├── ViaBackwardsPlatform.java
│ │ │ ├── data/
│ │ │ │ ├── BackwardsMappingData.java
│ │ │ │ ├── BackwardsMappingDataLoader.java
│ │ │ │ ├── ItemMappings.java
│ │ │ │ ├── MappedItem.java
│ │ │ │ ├── MappedLegacyBlockItem.java
│ │ │ │ └── TranslatableMappings.java
│ │ │ ├── entities/
│ │ │ │ └── storage/
│ │ │ │ ├── EntityObjectData.java
│ │ │ │ ├── EntityPositionHandler.java
│ │ │ │ ├── EntityPositionStorage.java
│ │ │ │ ├── EntityReplacement.java
│ │ │ │ ├── PlayerPositionStorage.java
│ │ │ │ └── WrappedEntityData.java
│ │ │ └── rewriters/
│ │ │ ├── BackwardsItemRewriter.java
│ │ │ ├── BackwardsItemRewriterBase.java
│ │ │ ├── BackwardsRegistryRewriter.java
│ │ │ ├── BackwardsStructuredItemRewriter.java
│ │ │ ├── EnchantmentRewriter.java
│ │ │ ├── EntityRewriter.java
│ │ │ ├── EntityRewriterBase.java
│ │ │ ├── LegacyBlockItemRewriter.java
│ │ │ ├── LegacyEnchantmentRewriter.java
│ │ │ ├── LegacyEntityRewriter.java
│ │ │ ├── LegacySoundRewriter.java
│ │ │ ├── MapColorRewriter.java
│ │ │ ├── SoundRewriter.java
│ │ │ ├── StructuredEnchantmentRewriter.java
│ │ │ └── text/
│ │ │ ├── JsonNBTComponentRewriter.java
│ │ │ ├── NBTComponentRewriter.java
│ │ │ └── TranslatableRewriter.java
│ │ ├── item/
│ │ │ └── DataItemWithExtras.java
│ │ ├── protocol/
│ │ │ ├── registration/
│ │ │ │ ├── BackwardsRegistrations.java
│ │ │ │ └── RegistryRegistrations.java
│ │ │ ├── template/
│ │ │ │ ├── BlockItemPacketRewriter99_1.java
│ │ │ │ ├── ComponentRewriter99_1.java
│ │ │ │ ├── EntityPacketRewriter99_1.java
│ │ │ │ └── Protocol99_1To98_1.java
│ │ │ ├── v1_10to1_9_3/
│ │ │ │ ├── Protocol1_10To1_9_3.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_10.java
│ │ │ │ └── EntityPacketRewriter1_10.java
│ │ │ ├── v1_11_1to1_11/
│ │ │ │ ├── Protocol1_11_1To1_11.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── EntityPacketRewriter1_11_1.java
│ │ │ │ └── ItemPacketRewriter1_11_1.java
│ │ │ ├── v1_11to1_10/
│ │ │ │ ├── Protocol1_11To1_10.java
│ │ │ │ ├── data/
│ │ │ │ │ └── SplashPotionMappings1_10.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_11.java
│ │ │ │ │ ├── EntityPacketRewriter1_11.java
│ │ │ │ │ └── PlayerPacketRewriter1_11.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChestedHorseStorage.java
│ │ │ │ └── WindowTracker.java
│ │ │ ├── v1_12_1to1_12/
│ │ │ │ └── Protocol1_12_1To1_12.java
│ │ │ ├── v1_12_2to1_12_1/
│ │ │ │ ├── Protocol1_12_2To1_12_1.java
│ │ │ │ └── storage/
│ │ │ │ └── KeepAliveTracker.java
│ │ │ ├── v1_12to1_11_1/
│ │ │ │ ├── Protocol1_12To1_11_1.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BlockColors1_11_1.java
│ │ │ │ │ └── MapColorMappings1_11_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_12.java
│ │ │ │ │ ├── ComponentRewriter1_12.java
│ │ │ │ │ ├── EntityPacketRewriter1_12.java
│ │ │ │ │ └── SoundPacketRewriter1_12.java
│ │ │ │ └── storage/
│ │ │ │ ├── ParrotStorage.java
│ │ │ │ └── ShoulderTracker.java
│ │ │ ├── v1_13_1to1_13/
│ │ │ │ ├── Protocol1_13_1To1_13.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── CommandRewriter1_13_1.java
│ │ │ │ ├── EntityPacketRewriter1_13_1.java
│ │ │ │ ├── ItemPacketRewriter1_13_1.java
│ │ │ │ └── WorldPacketRewriter1_13_1.java
│ │ │ ├── v1_13_2to1_13_1/
│ │ │ │ ├── Protocol1_13_2To1_13_1.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── EntityPacketRewriter1_13_2.java
│ │ │ │ ├── ItemPacketRewriter1_13_2.java
│ │ │ │ └── WorldPacketRewriter1_13_2.java
│ │ │ ├── v1_13to1_12_2/
│ │ │ │ ├── Protocol1_13To1_12_2.java
│ │ │ │ ├── block_entity_handlers/
│ │ │ │ │ ├── BannerHandler.java
│ │ │ │ │ ├── BedHandler.java
│ │ │ │ │ ├── FlowerPotHandler.java
│ │ │ │ │ ├── PistonHandler.java
│ │ │ │ │ ├── SkullHandler.java
│ │ │ │ │ └── SpawnerHandler.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_13.java
│ │ │ │ │ ├── EntityIdMappings1_12_2.java
│ │ │ │ │ ├── EntityNameMappings1_12_2.java
│ │ │ │ │ ├── NamedSoundMappings1_12_2.java
│ │ │ │ │ ├── PaintingNames1_13.java
│ │ │ │ │ └── ParticleIdMappings1_12_2.java
│ │ │ │ ├── provider/
│ │ │ │ │ └── BackwardsBlockEntityProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_13.java
│ │ │ │ │ ├── EntityPacketRewriter1_13.java
│ │ │ │ │ ├── PlayerPacketRewriter1_13.java
│ │ │ │ │ └── SoundPacketRewriter1_13.java
│ │ │ │ └── storage/
│ │ │ │ ├── BackwardsBlockStorage.java
│ │ │ │ ├── NoteBlockStorage.java
│ │ │ │ ├── PlayerPositionStorage1_13.java
│ │ │ │ └── TabCompleteStorage.java
│ │ │ ├── v1_14_1to1_14/
│ │ │ │ ├── Protocol1_14_1To1_14.java
│ │ │ │ └── rewriter/
│ │ │ │ └── EntityPacketRewriter1_14_1.java
│ │ │ ├── v1_14_2to1_14_1/
│ │ │ │ └── Protocol1_14_2To1_14_1.java
│ │ │ ├── v1_14_3to1_14_2/
│ │ │ │ └── Protocol1_14_3To1_14_2.java
│ │ │ ├── v1_14_4to1_14_3/
│ │ │ │ └── Protocol1_14_4To1_14_3.java
│ │ │ ├── v1_14to1_13_2/
│ │ │ │ ├── Protocol1_14To1_13_2.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_14.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_14.java
│ │ │ │ │ ├── CommandRewriter1_14.java
│ │ │ │ │ ├── EntityPacketRewriter1_14.java
│ │ │ │ │ ├── PlayerPacketRewriter1_14.java
│ │ │ │ │ └── SoundPacketRewriter1_14.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChunkLightStorage.java
│ │ │ │ ├── DifficultyStorage.java
│ │ │ │ └── EntityPositionStorage1_14.java
│ │ │ ├── v1_15_1to1_15/
│ │ │ │ └── Protocol1_15_1To1_15.java
│ │ │ ├── v1_15_2to1_15_1/
│ │ │ │ └── Protocol1_15_2To1_15_1.java
│ │ │ ├── v1_15to1_14_4/
│ │ │ │ ├── Protocol1_15To1_14_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_15.java
│ │ │ │ │ └── EntityPacketRewriter1_15.java
│ │ │ │ └── storage/
│ │ │ │ └── ImmediateRespawnStorage.java
│ │ │ ├── v1_16_1to1_16/
│ │ │ │ └── Protocol1_16_1To1_16.java
│ │ │ ├── v1_16_2to1_16_1/
│ │ │ │ ├── Protocol1_16_2To1_16_1.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BiomeMappings1_16_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_16_2.java
│ │ │ │ │ ├── CommandRewriter1_16_2.java
│ │ │ │ │ └── EntityPacketRewriter1_16_2.java
│ │ │ │ └── storage/
│ │ │ │ └── BiomeStorage.java
│ │ │ ├── v1_16_3to1_16_2/
│ │ │ │ └── Protocol1_16_3To1_16_2.java
│ │ │ ├── v1_16_4to1_16_3/
│ │ │ │ ├── Protocol1_16_4To1_16_3.java
│ │ │ │ └── storage/
│ │ │ │ └── PlayerHandStorage.java
│ │ │ ├── v1_16to1_15_2/
│ │ │ │ ├── Protocol1_16To1_15_2.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_16.java
│ │ │ │ │ └── MapColorMappings1_15_2.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_16.java
│ │ │ │ │ ├── CommandRewriter1_16.java
│ │ │ │ │ ├── EntityPacketRewriter1_16.java
│ │ │ │ │ └── TranslatableRewriter1_16.java
│ │ │ │ └── storage/
│ │ │ │ ├── PlayerAttributesStorage.java
│ │ │ │ ├── PlayerSneakStorage.java
│ │ │ │ ├── WolfDataMaskStorage.java
│ │ │ │ └── WorldNameTracker.java
│ │ │ ├── v1_17_1to1_17/
│ │ │ │ ├── Protocol1_17_1To1_17.java
│ │ │ │ └── storage/
│ │ │ │ └── InventoryStateIds.java
│ │ │ ├── v1_17to1_16_4/
│ │ │ │ ├── Protocol1_17To1_16_4.java
│ │ │ │ ├── data/
│ │ │ │ │ └── MapColorMappings1_16_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_17.java
│ │ │ │ │ └── EntityPacketRewriter1_17.java
│ │ │ │ └── storage/
│ │ │ │ └── PlayerLastCursorItem.java
│ │ │ ├── v1_18_2to1_18/
│ │ │ │ ├── Protocol1_18_2To1_18.java
│ │ │ │ └── rewriter/
│ │ │ │ └── CommandRewriter1_18_2.java
│ │ │ ├── v1_18to1_17_1/
│ │ │ │ ├── Protocol1_18To1_17_1.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_18.java
│ │ │ │ │ └── BlockEntityMappings1_17_1.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_18.java
│ │ │ │ └── EntityPacketRewriter1_18.java
│ │ │ ├── v1_19_1to1_19/
│ │ │ │ ├── Protocol1_19_1To1_19.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ └── EntityPacketRewriter1_19_1.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChatRegistryStorage.java
│ │ │ │ ├── ChatRegistryStorage1_19_1.java
│ │ │ │ ├── NonceStorage.java
│ │ │ │ └── ReceivedMessagesStorage.java
│ │ │ ├── v1_19_3to1_19_1/
│ │ │ │ ├── Protocol1_19_3To1_19_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19_3.java
│ │ │ │ │ └── EntityPacketRewriter1_19_3.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChatSessionStorage.java
│ │ │ │ ├── ChatTypeStorage1_19_3.java
│ │ │ │ └── NonceStorage.java
│ │ │ ├── v1_19_4to1_19_3/
│ │ │ │ ├── Protocol1_19_4To1_19_3.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19_4.java
│ │ │ │ │ └── EntityPacketRewriter1_19_4.java
│ │ │ │ └── storage/
│ │ │ │ ├── EntityTracker1_19_4.java
│ │ │ │ └── LinkedEntityStorage.java
│ │ │ ├── v1_19to1_18_2/
│ │ │ │ ├── Protocol1_19To1_18_2.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_19.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19.java
│ │ │ │ │ ├── CommandRewriter1_19.java
│ │ │ │ │ └── EntityPacketRewriter1_19.java
│ │ │ │ └── storage/
│ │ │ │ ├── DimensionRegistryStorage.java
│ │ │ │ ├── EntityTracker1_19.java
│ │ │ │ ├── LastDeathPosition.java
│ │ │ │ ├── NonceStorage.java
│ │ │ │ └── StoredPainting.java
│ │ │ ├── v1_20_2to1_20/
│ │ │ │ ├── Protocol1_20_2To1_20.java
│ │ │ │ ├── provider/
│ │ │ │ │ └── AdvancementCriteriaProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_2.java
│ │ │ │ │ ├── BlockRewriter1_20_2.java
│ │ │ │ │ └── EntityPacketRewriter1_20_2.java
│ │ │ │ └── storage/
│ │ │ │ └── ConfigurationPacketStorage.java
│ │ │ ├── v1_20_3to1_20_2/
│ │ │ │ ├── Protocol1_20_3To1_20_2.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_3.java
│ │ │ │ │ ├── BlockPacketRewriter1_20_3.java
│ │ │ │ │ └── EntityPacketRewriter1_20_3.java
│ │ │ │ └── storage/
│ │ │ │ ├── ResourcepackIDStorage.java
│ │ │ │ └── SpawnPositionStorage.java
│ │ │ ├── v1_20_5to1_20_3/
│ │ │ │ ├── Protocol1_20_5To1_20_3.java
│ │ │ │ ├── Types1_20_3.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── NoopTransferProvider.java
│ │ │ │ │ └── TransferProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_5.java
│ │ │ │ │ ├── BlockPacketRewriter1_20_5.java
│ │ │ │ │ ├── ComponentRewriter1_20_5.java
│ │ │ │ │ └── EntityPacketRewriter1_20_5.java
│ │ │ │ └── storage/
│ │ │ │ ├── CookieStorage.java
│ │ │ │ ├── RegistryDataStorage.java
│ │ │ │ └── SecureChatStorage.java
│ │ │ ├── v1_20to1_19_4/
│ │ │ │ ├── Protocol1_20To1_19_4.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_20.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20.java
│ │ │ │ │ ├── BlockPacketRewriter1_20.java
│ │ │ │ │ └── EntityPacketRewriter1_20.java
│ │ │ │ └── storage/
│ │ │ │ └── BackSignEditStorage.java
│ │ │ ├── v1_21_11to1_21_9/
│ │ │ │ ├── Protocol1_21_11To1_21_9.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_11.java
│ │ │ │ │ ├── ComponentRewriter1_21_11.java
│ │ │ │ │ └── EntityPacketRewriter1_21_11.java
│ │ │ │ └── storage/
│ │ │ │ └── GameTimeStorage.java
│ │ │ ├── v1_21_2to1_21/
│ │ │ │ ├── Protocol1_21_2To1_21.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_2.java
│ │ │ │ │ ├── ComponentRewriter1_21_2.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_2.java
│ │ │ │ │ └── ParticleRewriter1_21_2.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── InventoryStateIdStorage.java
│ │ │ │ │ ├── ItemTagStorage.java
│ │ │ │ │ ├── PlayerStorage.java
│ │ │ │ │ ├── RecipeStorage.java
│ │ │ │ │ └── SignStorage.java
│ │ │ │ └── task/
│ │ │ │ └── PlayerPacketsTickTask.java
│ │ │ ├── v1_21_4to1_21_2/
│ │ │ │ ├── Protocol1_21_4To1_21_2.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_21_4.java
│ │ │ │ ├── ComponentRewriter1_21_4.java
│ │ │ │ ├── EntityPacketRewriter1_21_4.java
│ │ │ │ └── ParticleRewriter1_21_4.java
│ │ │ ├── v1_21_5to1_21_4/
│ │ │ │ ├── Protocol1_21_5To1_21_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_5.java
│ │ │ │ │ ├── BlockPacketRewriter1_21_5.java
│ │ │ │ │ ├── ComponentRewriter1_21_5.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_5.java
│ │ │ │ │ └── RegistryDataRewriter1_21_5.java
│ │ │ │ └── storage/
│ │ │ │ ├── HashedItemConverterStorage.java
│ │ │ │ └── HorseDataStorage.java
│ │ │ ├── v1_21_6to1_21_5/
│ │ │ │ ├── Protocol1_21_6To1_21_5.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── Button.java
│ │ │ │ │ ├── Dialog.java
│ │ │ │ │ ├── Template.java
│ │ │ │ │ ├── input/
│ │ │ │ │ │ ├── BooleanInput.java
│ │ │ │ │ │ ├── Input.java
│ │ │ │ │ │ ├── NumberRangeInput.java
│ │ │ │ │ │ ├── SingleOptionInput.java
│ │ │ │ │ │ └── TextInput.java
│ │ │ │ │ └── widget/
│ │ │ │ │ ├── ItemWidget.java
│ │ │ │ │ ├── TextWidget.java
│ │ │ │ │ └── Widget.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── ChestDialogViewProvider.java
│ │ │ │ │ └── DialogViewProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_6.java
│ │ │ │ │ ├── ComponentRewriter1_21_6.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_6.java
│ │ │ │ │ └── RegistryDataRewriter1_21_6.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── ChestDialogStorage.java
│ │ │ │ │ ├── ClickEvents.java
│ │ │ │ │ ├── RegistryAndTags.java
│ │ │ │ │ └── ServerLinks.java
│ │ │ │ └── task/
│ │ │ │ └── ChestDialogViewTask.java
│ │ │ ├── v1_21_7to1_21_6/
│ │ │ │ ├── Protocol1_21_7To1_21_6.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_21_7.java
│ │ │ │ └── EntityPacketRewriter1_21_7.java
│ │ │ ├── v1_21_9to1_21_7/
│ │ │ │ ├── Protocol1_21_9To1_21_7.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_9.java
│ │ │ │ │ ├── ComponentRewriter1_21_9.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_9.java
│ │ │ │ │ ├── ParticleRewriter1_21_9.java
│ │ │ │ │ └── RegistryDataRewriter1_21_9.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── DimensionScaleStorage.java
│ │ │ │ │ ├── MannequinData.java
│ │ │ │ │ └── PlayerRotationStorage.java
│ │ │ │ └── tracker/
│ │ │ │ └── EntityTracker1_21_9.java
│ │ │ ├── v1_21to1_20_5/
│ │ │ │ ├── Protocol1_21To1_20_5.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21.java
│ │ │ │ │ ├── ComponentRewriter1_21.java
│ │ │ │ │ └── EntityPacketRewriter1_21.java
│ │ │ │ └── storage/
│ │ │ │ ├── EnchantmentsPaintingsStorage.java
│ │ │ │ ├── OpenScreenStorage.java
│ │ │ │ └── PlayerRotationStorage.java
│ │ │ ├── v1_9_1to1_9/
│ │ │ │ └── Protocol1_9_1To1_9.java
│ │ │ ├── v1_9_3to1_9_1/
│ │ │ │ ├── Protocol1_9_3To1_9_1.java
│ │ │ │ └── data/
│ │ │ │ └── BlockEntity1_9_1.java
│ │ │ └── v26_1to1_21_11/
│ │ │ ├── Protocol26_1To1_21_11.java
│ │ │ ├── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter26_1.java
│ │ │ │ ├── ComponentRewriter26_1.java
│ │ │ │ └── EntityPacketRewriter26_1.java
│ │ │ └── storage/
│ │ │ ├── DayTimeStorage.java
│ │ │ └── GameModeStorage.java
│ │ └── utils/
│ │ ├── BackwardsProtocolLogger.java
│ │ ├── ChatUtil.java
│ │ └── VelocityUtil.java
│ ├── java-templates/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ └── utils/
│ │ └── VersionInfo.java
│ └── resources/
│ └── assets/
│ └── viabackwards/
│ ├── config.yml
│ └── data/
│ ├── biome-mappings.json
│ ├── chat-types-1.19.1.nbt
│ ├── item-mappings-1.10.json
│ ├── item-mappings-1.11.1.json
│ ├── item-mappings-1.11.json
│ ├── item-mappings-1.12.json
│ ├── mappings-1.10to1.9.4.nbt
│ ├── mappings-1.11to1.10.nbt
│ ├── mappings-1.12to1.11.nbt
│ ├── mappings-1.13.2to1.13.nbt
│ ├── mappings-1.13to1.12.nbt
│ ├── mappings-1.14to1.13.2.nbt
│ ├── mappings-1.15to1.14.nbt
│ ├── mappings-1.16.2to1.16.nbt
│ ├── mappings-1.16to1.15.nbt
│ ├── mappings-1.17to1.16.2.nbt
│ ├── mappings-1.18to1.17.nbt
│ ├── mappings-1.19.3to1.19.nbt
│ ├── mappings-1.19.4to1.19.3.nbt
│ ├── mappings-1.19to1.18.nbt
│ ├── mappings-1.20.2to1.20.nbt
│ ├── mappings-1.20.3to1.20.2.nbt
│ ├── mappings-1.20.5to1.20.3.nbt
│ ├── mappings-1.20to1.19.4.nbt
│ ├── mappings-1.21.11to1.21.9.nbt
│ ├── mappings-1.21.2to1.21.nbt
│ ├── mappings-1.21.4to1.21.2.nbt
│ ├── mappings-1.21.5to1.21.4.nbt
│ ├── mappings-1.21.6to1.21.5.nbt
│ ├── mappings-1.21.7to1.21.6.nbt
│ ├── mappings-1.21.9to1.21.7.nbt
│ ├── mappings-1.21to1.20.5.nbt
│ ├── mappings-26.1to1.21.11.nbt
│ ├── translation-mappings.json
│ └── trim_pattern-1.19.4.nbt
├── fabric/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── ViaFabricAddon.java
│ │ └── fabric/
│ │ └── util/
│ │ └── LoggerWrapper.java
│ └── resources/
│ └── fabric.mod.json
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
├── sponge/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── resources/
│ └── META-INF/
│ └── sponge_plugins.json
├── universal/
│ └── build.gradle.kts
└── velocity/
├── build.gradle.kts
└── src/
└── main/
└── java/
└── com/
└── viaversion/
└── viabackwards/
└── VelocityPlugin.java
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
[*]
charset = utf-8
indent_size = 4
indent_style = space
insert_final_newline = true
tab_width = 4
[*.java]
ij_java_class_count_to_use_import_on_demand = 999999
ij_java_names_count_to_use_import_on_demand = 999999
ij_java_imports_layout = *, |, $*
ij_java_generate_final_locals = true
ij_java_generate_final_parameters = true
[{*.json,*.yml}]
indent_size = 2
================================================
FILE: .github/FUNDING.yml
================================================
github: kennytv
patreon: kennytv
custom: ['https://florianreuth.de/donate']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Report a bug or console error
labels: [unconfirmed]
body:
- type: markdown
attributes:
value: "**Before reporting a bug, please see if using master/dev builds from https://ci.viaversion.com/ fixes your issue.**"
- type: input
attributes:
label: "'/viaversion dump' Output"
description: |
Run `/viaversion dump` in the console or in the chat, then copy and paste the given link here.
placeholder: |
https://dump.viaversion.com/...
validations:
required: true
- type: textarea
attributes:
label: Server/Client Error
description: |
If you encounter warnings/errors in your console, **paste them with https://mclo.gs/ and put the paste link here**.
If the error is small/less than 10 lines, you may put it directly into this field.
**Important**: If you are kicked for `Network Protocol Error` or an encoder/decoder exception, please click the `Open Report Directory` button on your client and paste the newest disconnect file contents.
value: |
```
Put the mclo.gs link or text here.
```
placeholder: Please do not remove the grave accents; simply replace the line of text in the middle.
validations:
required: false
- type: textarea
attributes:
label: Bug Description
description: |
Describe the unexpected behavior.
If you want to attach screenshots, use the comment field at the bottom of the page.
placeholder: |
Example: "Placing signs on 1.16.5 causes text to disappear."
validations:
required: true
- type: textarea
attributes:
label: Steps to Reproduce
description: |
List the steps on how we can reproduce the issue. Make sure we can easily understand what you mean with each step.
**Please always include the client version(s) with which the issue happens. Ideally also try to find out from what specific version downward/in what version range the issue happens.**
placeholder: |
Example:
1. Login with a 1.16.5 client
2. Place a sign
3. The sign text disappears
validations:
required: true
- type: textarea
attributes:
label: Additional Server Info
description: |
Do you use a proxy (eg. Velocity)? What software do you use and what plugins?
placeholder: |
Example: "I also use Velocity with the following plugins: x, y, z"
validations:
required: false
- type: checkboxes
attributes:
label: Checklist
description: Make sure you have followed each of the steps outlined here.
options:
- label: Via plugins are only running on **EITHER** the backend servers (e.g. Paper) **OR** the proxy (e.g. Velocity), **not on both**.
required: true
- label: I have included a ViaVersion dump.
required: true
- label: If applicable, I have included a paste (**not a screenshot**) of the error.
required: true
- label: I have tried a build from https://ci.viaversion.com/ and the issue still persists.
required: true
- type: markdown
attributes:
value: |
## Comments And Screenshots
If needed, add **screenshots to help explain your problem** in the comment field below.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Dev builds
url: https://ci.viaversion.com/
about: Before reporting a bug, please check if using master/dev builds from our ci fixes your issue.
- name: ViaVersion Discord
url: https://discord.gg/viaversion
about: For smaller issues or questions, you can also join our Discord server.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Suggest a feature to be added
labels: [Feature Request]
body:
- type: textarea
attributes:
label: Problem Description
description: |
Describe the issue you are facing or why you need the feature to be added.
placeholder: |
I am always frustrated with...
validations:
required: true
- type: textarea
attributes:
label: Solution Description
description: |
Describe the solution you would like to see.
validations:
required: true
- type: textarea
attributes:
label: Alternatives
description: |
Describe alternatives you have considered.
validations:
required: false
- type: textarea
attributes:
label: Additional Info
description: |
Does the feature apply to any specific version or environment?
validations:
required: false
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
cooldown:
default-days: 7
directory: "/"
schedule:
interval: "monthly"
- package-ecosystem: "gradle"
cooldown:
default-days: 7
directory: "/"
schedule:
interval: "monthly"
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on: [pull_request, push, workflow_dispatch]
permissions:
contents: read
jobs:
build:
# Only run on PRs if the source branch is on a different repo. We do not need to run everything twice.
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Set up Gradle
uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # 5.0.1
- name: Set up JDK 17
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # 5.2.0
with:
distribution: 'temurin'
java-version: 17
check-latest: true
- name: Build with Gradle
run: ./gradlew build --refresh-dependencies
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish to Hangar and Modrinth
on:
push:
branches:
- master
- dev
workflow_dispatch:
permissions:
contents: read
jobs:
publish:
if: github.repository_owner == 'ViaVersion'
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout Repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Set up Gradle
uses: gradle/actions/setup-gradle@f29f5a9d7b09a7c6b29859002d29d24e1674c884 # 5.0.1
- name: Set up JDK 17
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # 5.2.0
with:
distribution: 'temurin'
java-version: 17
check-latest: true
- name: Build with Gradle
run: ./gradlew build --refresh-dependencies
- name: Publish to Hangar
env:
HANGAR_TOKEN: ${{ secrets.HANGAR_TOKEN }}
run: ./gradlew publishAllPublicationsToHangar --stacktrace
continue-on-error: true
- name: Publish to Modrinth
env:
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
run: ./gradlew modrinth --stacktrace
continue-on-error: true
================================================
FILE: .gitignore
================================================
# Gradle
.gradle/
build/
out/
classes/
.kotlin/
# Eclipse
*.launch
# Idea
.idea/
!.idea/copyright/*
!.idea/scopes/*
*.iml
*.ipr
*.iws
# VSCode
.settings/
.vscode/
bin/
.classpath
.project
# macOS
.DS_Store
# Misc
run/
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
# ViaBackwards
[](https://github.com/ViaVersion/ViaBackwards/releases)
[](https://github.com/ViaVersion/ViaBackwards/actions)
[](https://viaversion.com/discord)
**Allows the connection of older clients to newer server versions for Minecraft servers.**
Requires [ViaVersion](https://hangar.papermc.io/ViaVersion/ViaVersion) to be installed.
Supported Versions
-
As a plugin, ViaBackwards runs on servers on releases 1.10-latest. You can also use ViaBackwards in ViaFabric or ViaFabricPlus.
- in **ViaFabric**, put ViaBackwards into the `mods` folder
- in **ViaFabricPlus**, put ViaBackwards into the `config/viafabriclus/jars` folder
See [HERE](https://viaversion.com) for an overview of the different Via* projects.
Snapshot support
--------
**ViaBackwards will only be released a few days *after* a Minecraft update** unless the protocol changes of the update were trivial. If you want early-access, usually days or even weeks before the final release, you can subscribe to either:
- [GitHub Sponsors](https://github.com/sponsors/kennytv/sponsorships?sponsor=kennytv&tier_id=385613&preview=false) (preferred option. Use the `/verify` command on this Discord after), or alternatively
- [Patreon](https://www.patreon.com/kennytv/membership) (see the highest tier and make sure to link Patreon to your Discord account under Settings->Connections)
This also includes access to a private repository with the code, which will be pushed to the public repository after the given delay on a Minecraft update.
Releases/Dev Builds
-
You can find releases in the following places:
- **Hangar (for our plugins)**: https://hangar.papermc.io/ViaVersion/ViaBackwards
- **Modrinth (for our mods)**: https://modrinth.com/mod/viabackwards
- **GitHub**: https://github.com/ViaVersion/ViaBackwards/releases
Dev builds for **all** of our projects are on our Jenkins server:
- **Jenkins**: https://ci.viaversion.com/view/ViaBackwards/
Known issues
-
* 1.17+ min_y and height world values that are not 0/256 **are not supported**. Clients older than
1.17 will not be able to see or interact with blocks below y=0 and above y=255
* <1.17 clients on 1.17+ servers might experience inventory desyncs on certain inventory click actions
* Sound mappings are incomplete ([see here](https://github.com/ViaVersion/ViaBackwards/issues/326))
* <1.19.4 clients on 1.20+ servers won't be able to use the smithing table. This can be fixed by
installing [AxSmithing](https://github.com/ViaVersionAddons/AxSmithing)
Other Links
-
**Maven:** https://repo.viaversion.com
**List of contributors:** https://github.com/ViaVersion/ViaBackwards/graphs/contributors
Building
-
After cloning this repository, build the project with Gradle by running `./gradlew build` and take the created jar out
of the `build/libs` directory.
You need JDK 17 or newer to build ViaBackwards.
License
-
This project is licensed under the [GNU General Public License Version 3](LICENSE).
Special Thanks
-

[YourKit](https://www.yourkit.com/) supports open source projects with innovative and intelligent tools
for monitoring and profiling Java and .NET applications.
YourKit is the creator of [YourKit Java Profiler](https://www.yourkit.com/java/profiler/),
[YourKit .NET Profiler](https://www.yourkit.com/.net/profiler/),
and [YourKit YouMonitor](https://www.yourkit.com/youmonitor/).
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Reporting a Vulnerability
If you discover a **security vulnerability**, please **do not** open a public issue. Instead, use one of the following **confidential contact methods**:
* **Email:** [security@viaversion.com](mailto:security@viaversion.com)
* **Discord:** Join our [Discord server](https://discord.gg/viaversion) and visit the [#exploit-report](https://discord.com/channels/316206679014244363/1388847764137316485) channel for further instructions.
If your issue is **not security-related** (e.g., bug reports, feature requests, or usage questions), please use the [GitHub Issues page](https://github.com/ViaVersion/ViaBackwards/issues) or contact us via the [Discord server](https://discord.gg/viaversion).
================================================
FILE: build-logic/build.gradle.kts
================================================
plugins {
`kotlin-dsl`
}
repositories {
gradlePluginPortal()
}
dependencies {
// version must be manually kept in sync with the one in root project settings.gradle.kts
implementation("com.gradleup.shadow:shadow-gradle-plugin:9.4.1")
// A nice no-conflict comment for patching in downgrading
}
================================================
FILE: build-logic/src/main/kotlin/extensions.kt
================================================
import org.gradle.api.Project
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.ValueSource
import org.gradle.api.provider.ValueSourceParameters
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.process.ExecOperations
import java.io.ByteArrayOutputStream
import javax.inject.Inject
fun Project.latestCommitHash(): String {
return runGitCommand(listOf("rev-parse", "--short", "HEAD"))
}
fun Project.latestCommitMessage(): String {
return runGitCommand(listOf("log", "-1", "--pretty=%B"))
}
fun Project.branchName(): String {
return runGitCommand(listOf("rev-parse", "--abbrev-ref", "HEAD"))
}
fun Project.runGitCommand(args: List<String>): String {
return providers.of(GitCommand::class.java) { parameters.args.set(args) }.getOrNull() ?: "unknown"
}
abstract class GitCommand : ValueSource<String, GitCommand.GitCommandParameters> {
@get:Inject
abstract val execOperations: ExecOperations
interface GitCommandParameters : ValueSourceParameters {
val args: ListProperty<String>
}
override fun obtain(): String? {
try {
val command = listOf("git") + parameters.args.get()
val output = ByteArrayOutputStream()
execOperations.exec {
commandLine = command
standardOutput = output
isIgnoreExitValue = true
}
return output.toString(Charsets.UTF_8).trim().takeIf { it.isNotBlank() }
} catch (e: Exception) {
return null
}
}
}
fun Project.parseMinecraftSnapshotVersion(version: String): String? {
val separatorIndex = version.indexOf('-')
val lastSeparatorIndex = version.lastIndexOf('-')
if (separatorIndex == -1 || separatorIndex == lastSeparatorIndex) {
return null
}
return version.substring(separatorIndex + 1, lastSeparatorIndex)
}
fun JavaPluginExtension.javaTarget(version: Int) {
toolchain.languageVersion.set(JavaLanguageVersion.of(version))
}
================================================
FILE: build-logic/src/main/kotlin/vb.base-conventions.gradle.kts
================================================
plugins {
`java-library`
}
tasks {
// Variable replacements
processResources {
val ver = project.version.toString()
val desc = project.description
filesMatching(listOf("plugin.yml", "META-INF/sponge_plugins.json", "fabric.mod.json")) {
expand(mapOf("version" to ver, "description" to desc))
}
}
javadoc {
options.encoding = Charsets.UTF_8.name()
(options as StandardJavadocDocletOptions).addStringOption("Xdoclint:none", "-quiet")
}
compileJava {
options.encoding = Charsets.UTF_8.name()
options.compilerArgs.addAll(listOf("-nowarn", "-Xlint:-unchecked", "-Xlint:-deprecation"))
options.isFork = true
}
}
java {
javaTarget(17)
withSourcesJar()
}
================================================
FILE: build-logic/src/main/kotlin/vb.build-logic.gradle.kts
================================================
================================================
FILE: build-logic/src/main/kotlin/vb.shadow-conventions.gradle.kts
================================================
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.named
plugins {
id("vb.base-conventions")
id("maven-publish")
id("com.gradleup.shadow")
}
tasks {
named<Jar>("jar") {
archiveClassifier.set("unshaded")
from(project.rootProject.file("LICENSE"))
}
val shadowJar = named<ShadowJar>("shadowJar") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveClassifier.set("")
configureRelocations()
}
named("build") {
dependsOn(shadowJar)
}
}
publishing {
publications.create<MavenPublication>("mavenJava") {
groupId = rootProject.group as String
artifactId = project.name
version = rootProject.version as String
artifact(tasks["shadowJar"])
artifact(tasks["sourcesJar"])
}
repositories.maven {
name = "Via"
url = uri("https://repo.viaversion.com/")
credentials(PasswordCredentials::class)
authentication {
create<BasicAuthentication>("basic")
}
}
}
fun ShadowJar.configureRelocations() {
relocate("com.google.gson", "com.viaversion.viaversion.libs.gson")
relocate("it.unimi.dsi.fastutil", "com.viaversion.viaversion.libs.fastutil")
}
================================================
FILE: build.gradle.kts
================================================
plugins {
base
id("vb.build-logic")
}
allprojects {
group = "com.viaversion"
version = property("projectVersion") as String // from gradle.properties
description = "Allows the connection of older clients to newer server versions for Minecraft servers."
}
val main = setOf(
projects.viabackwards,
projects.viabackwardsCommon,
projects.viabackwardsBukkit,
projects.viabackwardsVelocity
).map { it.path }
subprojects {
when (path) {
in main -> plugins.apply("vb.shadow-conventions")
else -> plugins.apply("vb.base-conventions")
}
}
================================================
FILE: bukkit/build.gradle.kts
================================================
dependencies {
compileOnlyApi(projects.viabackwardsCommon)
compileOnly(libs.paper) {
exclude("com.google.code.gson", "gson")
exclude("javax.persistence", "persistence-api")
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards;
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
import com.viaversion.viabackwards.listener.DurabilitySync1_11;
import com.viaversion.viabackwards.listener.PlayerHurtSound1_12;
import com.viaversion.viabackwards.listener.FireExtinguish1_16;
import com.viaversion.viabackwards.listener.LecternInteract1_14;
import com.viaversion.viabackwards.listener.ItemDropSync1_17;
import com.viaversion.viabackwards.listener.SpearAttack1_21_11;
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.provider.AdvancementCriteriaProvider;
import com.viaversion.viabackwards.provider.BukkitAdvancementCriteriaProvider;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.platform.providers.ViaProviders;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import java.io.File;
import org.bukkit.plugin.java.JavaPlugin;
public class BukkitPlugin extends JavaPlugin implements ViaBackwardsPlatform {
public BukkitPlugin() {
Via.getManager().addEnableListener(() -> init(new File(getDataFolder(), "config.yml")));
}
@Override
public void onEnable() {
if (Via.getManager().getInjector().lateProtocolVersionSetting()) {
// Enable in the next tick
Via.getPlatform().runSync(this::enable, 1);
} else {
enable();
}
}
@Override
public void enable() {
ViaBackwardsPlatform.super.enable();
final ProtocolVersion protocolVersion = Via.getAPI().getServerVersion().highestSupportedProtocolVersion();
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_11)) {
new SpearAttack1_21_11(this).register();
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_17)) {
new ItemDropSync1_17(this).register();
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_16)) {
new FireExtinguish1_16(this).register();
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_14)) {
new LecternInteract1_14(this).register();
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_12)) {
new PlayerHurtSound1_12(this).register();
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_11)) {
new DurabilitySync1_11(this).register();
}
final ViaProviders providers = Via.getManager().getProviders();
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_20_2)) {
providers.use(AdvancementCriteriaProvider.class, new BukkitAdvancementCriteriaProvider());
}
}
@Override
public void disable() {
getPluginLoader().disablePlugin(this);
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.GameMode;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
public class DurabilitySync1_11 extends ViaBukkitListener {
public DurabilitySync1_11(final BukkitPlugin plugin) {
super(plugin, Protocol1_11To1_10.class);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onBlockBreak(final BlockBreakEvent event) {
if (!event.isCancelled()) {
return;
}
final Player player = event.getPlayer();
if (player.getGameMode() == GameMode.CREATIVE || !isOnPipe(player)) {
return;
}
// Resend the item in the hand to sync durability
final int slot = player.getInventory().getHeldItemSlot();
final ItemStack item = player.getInventory().getItem(slot);
if (item != null && item.getType().getMaxDurability() > 0) {
player.getInventory().setItem(slot, item);
}
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
public class FireExtinguish1_16 extends ViaBukkitListener {
public FireExtinguish1_16(BukkitPlugin plugin) {
super(plugin, Protocol1_16To1_15_2.class);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onFireExtinguish(PlayerInteractEvent event) {
if (event.getAction() != Action.LEFT_CLICK_BLOCK) return;
Block block = event.getClickedBlock();
if (block == null) return;
Player player = event.getPlayer();
if (!isOnPipe(player)) return;
Block relative = block.getRelative(event.getBlockFace());
if (relative.getType() == Material.FIRE) {
event.setCancelled(true);
relative.setType(Material.AIR);
}
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.Protocol1_13_1To1_13;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.inventory.ItemStack;
public class ItemDropSync1_17 extends ViaBukkitListener {
public ItemDropSync1_17(final BukkitPlugin plugin) {
super(plugin, Protocol1_13_1To1_13.class); // Starts with 1.13 clients on 1.17 servers
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onItemDrop(final PlayerDropItemEvent event) {
final Player player = event.getPlayer();
if (!isOnPipe(player)) {
return;
}
// Resend the item in the hand
final int slot = player.getInventory().getHeldItemSlot();
final ItemStack item = player.getInventory().getItem(slot);
player.getInventory().setItem(slot, item);
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.Protocol1_14To1_13_2;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Lectern;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
public class LecternInteract1_14 extends ViaBukkitListener {
public LecternInteract1_14(BukkitPlugin plugin) {
super(plugin, Protocol1_14To1_13_2.class);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onLecternInteract(PlayerInteractEvent event) {
Block block = event.getClickedBlock();
if (block == null || block.getType() != Material.LECTERN) return;
Player player = event.getPlayer();
if (!isOnPipe(player)) return;
Lectern lectern = (Lectern) block.getState();
ItemStack book = lectern.getInventory().getItem(0);
if (book == null) return;
BookMeta meta = (BookMeta) book.getItemMeta();
// Open a book with the text of the lectern's writable book
ItemStack newBook = new ItemStack(Material.WRITTEN_BOOK);
BookMeta newBookMeta = (BookMeta) newBook.getItemMeta();
//noinspection deprecation
newBookMeta.setPages(meta.getPages());
newBookMeta.setAuthor("an upsidedown person");
newBookMeta.setTitle("buk");
newBook.setItemMeta(newBookMeta);
player.openBook(newBook);
event.setCancelled(true);
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.Sound;
import org.bukkit.SoundCategory;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageEvent;
public class PlayerHurtSound1_12 extends ViaBukkitListener {
public PlayerHurtSound1_12(BukkitPlugin plugin) {
super(plugin, Protocol1_12To1_11_1.class);
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onFireDamage(EntityDamageEvent event) {
if (event.getEntityType() != EntityType.PLAYER) return;
EntityDamageEvent.DamageCause cause = event.getCause();
if (cause != EntityDamageEvent.DamageCause.FIRE
&& cause != EntityDamageEvent.DamageCause.FIRE_TICK
&& cause != EntityDamageEvent.DamageCause.LAVA
&& cause != EntityDamageEvent.DamageCause.DROWNING) {
return;
}
Player player = (Player) event.getEntity();
if (isOnPipe(player)) {
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_HURT, SoundCategory.PLAYERS, 1, 1);
}
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.listener;
import com.viaversion.viabackwards.BukkitPlugin;
import com.viaversion.viabackwards.protocol.v1_21_11to1_21_9.Protocol1_21_11To1_21_9;
import com.viaversion.viaversion.bukkit.listeners.ViaBukkitListener;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack;
public class SpearAttack1_21_11 extends ViaBukkitListener {
public SpearAttack1_21_11(final BukkitPlugin plugin) {
super(plugin, Protocol1_21_11To1_21_9.class);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event) {
final Player player = event.getPlayer();
if (!isOnPipe(player)) {
return;
}
final ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType().name().endsWith("_SPEAR")) {
// Prevent spears from breaking blocks
event.setCancelled(true);
}
}
}
================================================
FILE: bukkit/src/main/java/com/viaversion/viabackwards/provider/BukkitAdvancementCriteriaProvider.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.provider;
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.provider.AdvancementCriteriaProvider;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.advancement.Advancement;
public final class BukkitAdvancementCriteriaProvider extends AdvancementCriteriaProvider {
private static final String[] EMPTY_CRITERIA = new String[0];
@Override
public String[] getCriteria(final String advancementKey) {
final Advancement advancement = Bukkit.getAdvancement(NamespacedKey.fromString(advancementKey));
return advancement == null ? EMPTY_CRITERIA : advancement.getCriteria().toArray(EMPTY_CRITERIA);
}
}
================================================
FILE: bukkit/src/main/resources/plugin.yml
================================================
name: ViaBackwards
version: ${version}
description: ${description}
main: com.viaversion.viabackwards.BukkitPlugin
api-version: 1.13
folia-supported: true
authors: [Matsv, kennytv, Gerrygames, creeper123123321, ForceUpdate1, EnZaXD]
website: "https://viaversion.com/backwards"
depend: [ViaVersion]
================================================
FILE: common/build.gradle.kts
================================================
plugins {
id("net.kyori.blossom")
id("org.jetbrains.gradle.plugin.idea-ext")
}
sourceSets {
main {
blossom {
javaSources {
property("version", project.version.toString())
property("impl_version", "git-ViaBackwards-${project.version}:${rootProject.latestCommitHash()}")
}
}
}
}
dependencies {
compileOnlyApi(libs.viaver)
compileOnlyApi(libs.netty)
compileOnlyApi(libs.guava)
compileOnlyApi(libs.checkerQual)
}
java {
withJavadocJar()
}
// Task to quickly test/debug code changes using https://github.com/ViaVersion/ViaProxy
// For further instructions see the ViaProxy repository README
val prepareViaProxyFiles by tasks.registering(Copy::class) {
dependsOn(project.tasks.shadowJar)
from(project.tasks.shadowJar.map { it.archiveFile.get().asFile })
into(layout.projectDirectory.dir("run/jars"))
val projectName = project.name
rename { "${projectName}.jar" }
}
val cleanupViaProxyFiles by tasks.registering(Delete::class) {
delete(
layout.projectDirectory.file("run/jars/${project.name}.jar"),
layout.projectDirectory.dir("run/logs")
)
}
val viaProxyConfiguration: Configuration by configurations.creating {
dependencies.add(rootProject.libs.viaProxy.get().copy().setTransitive(false))
}
tasks.register<JavaExec>("runViaProxy") {
dependsOn(prepareViaProxyFiles)
finalizedBy(cleanupViaProxyFiles)
mainClass.set("net.raphimc.viaproxy.ViaProxy")
classpath = viaProxyConfiguration
workingDir = layout.projectDirectory.dir("run").asFile
jvmArgs = listOf("-DskipUpdateCheck")
if (System.getProperty("viaproxy.gui.autoStart") != null) {
jvmArgs("-Dviaproxy.gui.autoStart")
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwards.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards;
import com.google.common.base.Preconditions;
import com.viaversion.viabackwards.api.ViaBackwardsConfig;
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
public final class ViaBackwards {
private static ViaBackwardsPlatform platform;
private static ViaBackwardsConfig config;
public static void init(ViaBackwardsPlatform platform, ViaBackwardsConfig config) {
Preconditions.checkArgument(ViaBackwards.platform == null, "ViaBackwards is already initialized");
ViaBackwards.platform = platform;
ViaBackwards.config = config;
}
public static ViaBackwardsPlatform getPlatform() {
return platform;
}
public static ViaBackwardsConfig getConfig() {
return config;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwardsConfig.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards;
import com.viaversion.viabackwards.api.DialogStyleConfig;
import com.viaversion.viaversion.util.ChatColorUtil;
import com.viaversion.viaversion.util.Config;
import com.viaversion.viaversion.util.ConfigSection;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class ViaBackwardsConfig extends Config implements com.viaversion.viabackwards.api.ViaBackwardsConfig {
private boolean addCustomEnchantsToLore;
private boolean addTeamColorToPrefix;
private boolean fix1_13FacePlayer;
private boolean alwaysShowOriginalMobName;
private boolean fix1_13FormattedInventoryTitles;
private boolean handlePingsAsInvAcknowledgements;
private boolean bedrockAtY0;
private boolean sculkShriekersToCryingObsidian;
private boolean scaffoldingToWater;
private boolean mapDarknessEffect;
private boolean mapCustomModelData;
private boolean mapDisplayEntities;
private boolean suppressEmulationWarnings;
private boolean dialogsViaChests;
private DialogStyleConfig dialogStyleConfig;
private boolean codeOfConductAsDialog;
private boolean passOriginalItemNameToResourcePacks;
public ViaBackwardsConfig(File configFile, Logger logger) {
super(configFile, logger);
}
@Override
public void reload() {
super.reload();
loadFields();
}
private void loadFields() {
addCustomEnchantsToLore = getBoolean("add-custom-enchants-into-lore", true);
addTeamColorToPrefix = getBoolean("add-teamcolor-to-prefix", true);
fix1_13FacePlayer = getBoolean("fix-1_13-face-player", false);
fix1_13FormattedInventoryTitles = getBoolean("fix-formatted-inventory-titles", true);
alwaysShowOriginalMobName = getBoolean("always-show-original-mob-name", true);
handlePingsAsInvAcknowledgements = getBoolean("handle-pings-as-inv-acknowledgements", false);
bedrockAtY0 = getBoolean("bedrock-at-y-0", false);
sculkShriekersToCryingObsidian = getBoolean("sculk-shriekers-to-crying-obsidian", false);
scaffoldingToWater = getBoolean("scaffolding-to-water", false);
mapDarknessEffect = getBoolean("map-darkness-effect", true);
mapCustomModelData = getBoolean("map-custom-model-data", true);
mapDisplayEntities = getBoolean("map-display-entities", true);
suppressEmulationWarnings = getBoolean("suppress-emulation-warnings", false);
dialogsViaChests = getBoolean("dialogs-via-chests", true);
dialogStyleConfig = loadDialogStyleConfig(getSection("dialog-style"));
codeOfConductAsDialog = getBoolean("code-of-conduct-as-dialog", true);
passOriginalItemNameToResourcePacks = getBoolean("pass-original-item-name-to-resource-packs", true);
}
private DialogStyleConfig loadDialogStyleConfig(final ConfigSection section) {
return new DialogStyleConfig(
getString(section, "page-navigation-title", "&9&lPage navigation"),
getString(section, "page-navigation-next", "&9Left click: &6Go to next page"),
getString(section, "page-navigation-previous", "&9Right click: &6Go to previous page"),
getString(section, "increase-value", "&9Left click: &6Increase value by %s"),
getString(section, "decrease-value", "&9Right click: &6Decrease value by %s"),
getString(section, "value-range", "&7(Value between &a%s &7and &a%s&7)"),
getString(section, "next-option", "&9Left click: &6Go to next option"),
getString(section, "previous-option", "&9Right click: &6Go to previous option"),
getString(section, "current-value", "&7Current value: &a%s"),
getString(section, "edit-value", "&9Left click: &6Edit text"),
getString(section, "set-text", "&9Left click/close: &6Set text"),
getString(section, "close", "&9Left click: &6Close"),
getString(section, "toggle-value", "&9Left click: &6Toggle value")
);
}
protected String getString(final ConfigSection section, final String key, final String def) {
return ChatColorUtil.translateAlternateColorCodes(section.getString(key, def));
}
@Override
public boolean addCustomEnchantsToLore() {
return addCustomEnchantsToLore;
}
@Override
public boolean addTeamColorTo1_13Prefix() {
return addTeamColorToPrefix;
}
@Override
public boolean isFix1_13FacePlayer() {
return fix1_13FacePlayer;
}
@Override
public boolean fix1_13FormattedInventoryTitle() {
return fix1_13FormattedInventoryTitles;
}
@Override
public boolean alwaysShowOriginalMobName() {
return alwaysShowOriginalMobName;
}
@Override
public boolean handlePingsAsInvAcknowledgements() {
return handlePingsAsInvAcknowledgements || Boolean.getBoolean("com.viaversion.handlePingsAsInvAcknowledgements");
}
@Override
public boolean bedrockAtY0() {
return bedrockAtY0;
}
@Override
public boolean sculkShriekerToCryingObsidian() {
return sculkShriekersToCryingObsidian;
}
@Override
public boolean scaffoldingToWater() {
return scaffoldingToWater;
}
@Override
public boolean mapDarknessEffect() {
return mapDarknessEffect;
}
@Override
public boolean mapCustomModelData() {
return mapCustomModelData;
}
@Override
public boolean mapDisplayEntities() {
return mapDisplayEntities;
}
@Override
public boolean suppressEmulationWarnings() {
return suppressEmulationWarnings;
}
@Override
public boolean dialogsViaChests() {
return dialogsViaChests;
}
@Override
public DialogStyleConfig dialogStyleConfig() {
return dialogStyleConfig;
}
@Override
public boolean codeOfConductAsDialog() {
return codeOfConductAsDialog;
}
@Override
public boolean passOriginalItemNameToResourcePacks() {
return passOriginalItemNameToResourcePacks;
}
@Override
public URL getDefaultConfigURL() {
return getClass().getClassLoader().getResource("assets/viabackwards/config.yml");
}
@Override
public InputStream getDefaultConfigInputStream() {
return getClass().getClassLoader().getResourceAsStream("assets/viabackwards/config.yml");
}
@Override
protected void handleConfig(Map<String, Object> map) {
}
@Override
public List<String> getUnsupportedOptions() {
return Collections.emptyList();
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwardsPlatformImpl.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards;
import com.viaversion.viabackwards.api.ViaBackwardsPlatform;
import com.viaversion.viaversion.api.Via;
import java.io.File;
import java.util.logging.Logger;
public class ViaBackwardsPlatformImpl implements ViaBackwardsPlatform {
private final Logger logger;
public ViaBackwardsPlatformImpl() {
logger = Via.getPlatform().createLogger("ViaBackwards");
init(new File(getDataFolder(), "viabackwards.yml"));
enable();
}
@Override
public Logger getLogger() {
return logger;
}
@Override
public void disable() {
}
@Override
public File getDataFolder() {
return Via.getPlatform().getDataFolder();
}
@Override
public boolean isOutdated() {
return false;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/BackwardsProtocol.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api;
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
import com.viaversion.viabackwards.api.rewriters.BackwardsRegistryRewriter;
import com.viaversion.viabackwards.protocol.registration.BackwardsRegistrations;
import com.viaversion.viabackwards.utils.BackwardsProtocolLogger;
import com.viaversion.viaversion.api.protocol.AbstractProtocol;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.util.ProtocolLogger;
import org.checkerframework.checker.nullness.qual.Nullable;
public abstract class BackwardsProtocol<CU extends ClientboundPacketType, CM extends ClientboundPacketType, SM extends ServerboundPacketType, SU extends ServerboundPacketType>
extends AbstractProtocol<CU, CM, SM, SU> {
@Deprecated
protected BackwardsProtocol() {
}
protected BackwardsProtocol(@Nullable Class<CU> oldClientboundPacketEnum, @Nullable Class<CM> clientboundPacketEnum,
@Nullable Class<SM> oldServerboundPacketEnum, @Nullable Class<SU> serverboundPacketEnum) {
super(oldClientboundPacketEnum, clientboundPacketEnum, oldServerboundPacketEnum, serverboundPacketEnum);
}
@Override
protected void applySharedRegistrations() {
super.applySharedRegistrations();
BackwardsRegistrations.registrations().applyMatching(this);
}
@Override
protected ProtocolLogger createLogger() {
return new BackwardsProtocolLogger(getClass());
}
@Override
public @Nullable Class<? extends Protocol<?, ?, ?, ?>> dependsOn() {
return getMappingData() != null ? getMappingData().getViaVersionProtocolClass() : null;
}
@Override
public @Nullable BackwardsMappingData getMappingData() {
return null;
}
@Override
public @Nullable BackwardsRegistryRewriter getRegistryDataRewriter() {
return null;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/DialogStyleConfig.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api;
public record DialogStyleConfig(String pageNavigationTitle, String pageNavigationNext, String pageNavigationPrevious,
String increaseValue, String decreaseValue, String valueRange, String nextOption,
String previousOption, String currentValue, String editValue, String setText,
String close, String toggleValue) {
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsConfig.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api;
import com.viaversion.viaversion.api.configuration.Config;
public interface ViaBackwardsConfig extends Config {
/**
* Mimics name and level of a custom enchant through the item's lore.
*
* @return true if enabled
*/
boolean addCustomEnchantsToLore();
/**
* Writes the color of the scoreboard team after the prefix.
*
* @return true if enabled
*/
boolean addTeamColorTo1_13Prefix();
/**
* Converts the new 1.13 face player packets to look packets.
*
* @return true if enabled
*/
boolean isFix1_13FacePlayer();
/**
* Converts the 1.13 face look-at packet for 1.12- players. Requires a bit of extra caching.
*
* @return true if enabled
*/
boolean fix1_13FormattedInventoryTitle();
/**
* Always shows the original mob's name instead of only when hovering over them with the cursor.
*
* @return true if enabled
*/
boolean alwaysShowOriginalMobName();
/**
* Sends inventory acknowledgement packets to act as a replacement for ping packets for sub 1.17 clients.
* This only takes effect for ids in the short range. Useful for anticheat compatibility.
*
* @return true if enabled
*/
boolean handlePingsAsInvAcknowledgements();
/**
* Adds bedrock at y=0 for sub 1.17 clients.
*
* @return true if enabled
*/
boolean bedrockAtY0();
/**
* Shows sculk shriekers as crying obsidian for 1.18.2 clients on 1.19+ servers. This fixes collision and block breaking issues.
*
* @return true if enabled
*/
boolean sculkShriekerToCryingObsidian();
/**
* Shows scaffolding as water for 1.13.2 clients on 1.14+ servers. This fixes collision issues.
*
* @return true if enabled
*/
boolean scaffoldingToWater();
/**
* Maps the darkness effect to blindness for 1.18.2 clients on 1.19+ servers.
*
* @return true if enabled
*/
boolean mapDarknessEffect();
/**
* If enabled, 1.21.3 clients will receive the first float of 1.21.4+ custom model data as int. Disable if you handle this change yourself.
*
* @return true if enabled
*/
boolean mapCustomModelData();
/**
* If enabled, 1.19.3 clients will receive display entities as armor stands with custom entity data on 1.19.4+ servers.
*
* @return true if enabled
*/
boolean mapDisplayEntities();
/**
* Suppresses warnings of missing emulations for certain features that are not supported (e.g. world height in 1.17+).
*
* @return true if enabled
*/
boolean suppressEmulationWarnings();
/**
* If enabled, dialogs will be shown via chest inventories for 1.21.5 clients on 1.21.6+ servers.
*
* @return true if enabled
*/
boolean dialogsViaChests();
/**
* Returns the dialog style configuration.
*
* @return the dialog style configuration
*/
DialogStyleConfig dialogStyleConfig();
/**
* If true, the code of conduct will be displayed as a dialog for 1.21.7 clients on 1.21.9+ servers.
*
* @return true if enabled
*/
boolean codeOfConductAsDialog();
/**
* Injects the original vanilla 1.21.4+ item name into custom_model_data strings for resource packs.
* Disable if your server creates custom items using modern items as their base.
* Tip: For server custom items, base them on items in the game before 1.21.4 (e.g. saddle) to ensure compatibility.
*
* @return true if enabled
*/
boolean passOriginalItemNameToResourcePacks();
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.ViaBackwardsConfig;
import com.viaversion.viabackwards.api.data.TranslatableMappings;
import com.viaversion.viabackwards.protocol.registration.BackwardsRegistrations;
import com.viaversion.viabackwards.protocol.v1_10to1_9_3.Protocol1_10To1_9_3;
import com.viaversion.viabackwards.protocol.v1_11_1to1_11.Protocol1_11_1To1_11;
import com.viaversion.viabackwards.protocol.v1_11to1_10.Protocol1_11To1_10;
import com.viaversion.viabackwards.protocol.v1_12_1to1_12.Protocol1_12_1To1_12;
import com.viaversion.viabackwards.protocol.v1_12_2to1_12_1.Protocol1_12_2To1_12_1;
import com.viaversion.viabackwards.protocol.v1_12to1_11_1.Protocol1_12To1_11_1;
import com.viaversion.viabackwards.protocol.v1_13_1to1_13.Protocol1_13_1To1_13;
import com.viaversion.viabackwards.protocol.v1_13_2to1_13_1.Protocol1_13_2To1_13_1;
import com.viaversion.viabackwards.protocol.v1_13to1_12_2.Protocol1_13To1_12_2;
import com.viaversion.viabackwards.protocol.v1_14_1to1_14.Protocol1_14_1To1_14;
import com.viaversion.viabackwards.protocol.v1_14_2to1_14_1.Protocol1_14_2To1_14_1;
import com.viaversion.viabackwards.protocol.v1_14_3to1_14_2.Protocol1_14_3To1_14_2;
import com.viaversion.viabackwards.protocol.v1_14_4to1_14_3.Protocol1_14_4To1_14_3;
import com.viaversion.viabackwards.protocol.v1_14to1_13_2.Protocol1_14To1_13_2;
import com.viaversion.viabackwards.protocol.v1_15_1to1_15.Protocol1_15_1To1_15;
import com.viaversion.viabackwards.protocol.v1_15_2to1_15_1.Protocol1_15_2To1_15_1;
import com.viaversion.viabackwards.protocol.v1_15to1_14_4.Protocol1_15To1_14_4;
import com.viaversion.viabackwards.protocol.v1_16_1to1_16.Protocol1_16_1To1_16;
import com.viaversion.viabackwards.protocol.v1_16_2to1_16_1.Protocol1_16_2To1_16_1;
import com.viaversion.viabackwards.protocol.v1_16_3to1_16_2.Protocol1_16_3To1_16_2;
import com.viaversion.viabackwards.protocol.v1_16_4to1_16_3.Protocol1_16_4To1_16_3;
import com.viaversion.viabackwards.protocol.v1_16to1_15_2.Protocol1_16To1_15_2;
import com.viaversion.viabackwards.protocol.v1_17_1to1_17.Protocol1_17_1To1_17;
import com.viaversion.viabackwards.protocol.v1_17to1_16_4.Protocol1_17To1_16_4;
import com.viaversion.viabackwards.protocol.v1_18_2to1_18.Protocol1_18_2To1_18;
import com.viaversion.viabackwards.protocol.v1_18to1_17_1.Protocol1_18To1_17_1;
import com.viaversion.viabackwards.protocol.v1_19_1to1_19.Protocol1_19_1To1_19;
import com.viaversion.viabackwards.protocol.v1_19_3to1_19_1.Protocol1_19_3To1_19_1;
import com.viaversion.viabackwards.protocol.v1_19_4to1_19_3.Protocol1_19_4To1_19_3;
import com.viaversion.viabackwards.protocol.v1_19to1_18_2.Protocol1_19To1_18_2;
import com.viaversion.viabackwards.protocol.v1_20_2to1_20.Protocol1_20_2To1_20;
import com.viaversion.viabackwards.protocol.v1_20_3to1_20_2.Protocol1_20_3To1_20_2;
import com.viaversion.viabackwards.protocol.v1_20_5to1_20_3.Protocol1_20_5To1_20_3;
import com.viaversion.viabackwards.protocol.v1_20to1_19_4.Protocol1_20To1_19_4;
import com.viaversion.viabackwards.protocol.v1_21_11to1_21_9.Protocol1_21_11To1_21_9;
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.Protocol1_21_2To1_21;
import com.viaversion.viabackwards.protocol.v1_21_2to1_21.task.PlayerPacketsTickTask;
import com.viaversion.viabackwards.protocol.v1_21_4to1_21_2.Protocol1_21_4To1_21_2;
import com.viaversion.viabackwards.protocol.v1_21_5to1_21_4.Protocol1_21_5To1_21_4;
import com.viaversion.viabackwards.protocol.v1_21_6to1_21_5.Protocol1_21_6To1_21_5;
import com.viaversion.viabackwards.protocol.v1_21_6to1_21_5.task.ChestDialogViewTask;
import com.viaversion.viabackwards.protocol.v1_21_7to1_21_6.Protocol1_21_7To1_21_6;
import com.viaversion.viabackwards.protocol.v1_21_9to1_21_7.Protocol1_21_9To1_21_7;
import com.viaversion.viabackwards.protocol.v1_21to1_20_5.Protocol1_21To1_20_5;
import com.viaversion.viabackwards.protocol.v1_9_1to1_9.Protocol1_9_1To1_9;
import com.viaversion.viabackwards.protocol.v1_9_3to1_9_1.Protocol1_9_3To1_9_1;
import com.viaversion.viabackwards.protocol.v26_1to1_21_11.Protocol26_1To1_21_11;
import com.viaversion.viabackwards.utils.VersionInfo;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.protocol.ProtocolManager;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.update.Version;
import java.io.File;
import java.util.Arrays;
import java.util.logging.Logger;
public interface ViaBackwardsPlatform {
String MINIMUM_VV_VERSION = "5.8.1";
default void init(final File configFile) {
init(new ViaBackwardsConfig(configFile, getLogger()));
}
/**
* Initialize ViaBackwards.
*/
default void init(final com.viaversion.viabackwards.api.ViaBackwardsConfig config) {
config.reload();
Via.getManager().getConfigurationProvider().register(config);
ViaBackwards.init(this, config);
if (isOutdated()) {
disable();
return;
}
Via.getManager().getSubPlatforms().add(VersionInfo.getImplementationVersion());
getLogger().info("Loading translations...");
TranslatableMappings.loadTranslatables();
getLogger().info("Registering protocols...");
BackwardsRegistrations.apply();
final ProtocolManager protocolManager = Via.getManager().getProtocolManager();
protocolManager.registerProtocol(new Protocol1_9_1To1_9(), ProtocolVersion.v1_9, ProtocolVersion.v1_9_1);
protocolManager.registerProtocol(new Protocol1_9_3To1_9_1(), Arrays.asList(ProtocolVersion.v1_9_1, ProtocolVersion.v1_9_2), ProtocolVersion.v1_9_3);
protocolManager.registerProtocol(new Protocol1_10To1_9_3(), ProtocolVersion.v1_9_3, ProtocolVersion.v1_10);
protocolManager.registerProtocol(new Protocol1_11To1_10(), ProtocolVersion.v1_10, ProtocolVersion.v1_11);
protocolManager.registerProtocol(new Protocol1_11_1To1_11(), ProtocolVersion.v1_11, ProtocolVersion.v1_11_1);
protocolManager.registerProtocol(new Protocol1_12To1_11_1(), ProtocolVersion.v1_11_1, ProtocolVersion.v1_12);
protocolManager.registerProtocol(new Protocol1_12_1To1_12(), ProtocolVersion.v1_12, ProtocolVersion.v1_12_1);
protocolManager.registerProtocol(new Protocol1_12_2To1_12_1(), ProtocolVersion.v1_12_1, ProtocolVersion.v1_12_2);
protocolManager.registerProtocol(new Protocol1_13To1_12_2(), ProtocolVersion.v1_12_2, ProtocolVersion.v1_13);
protocolManager.registerProtocol(new Protocol1_13_1To1_13(), ProtocolVersion.v1_13, ProtocolVersion.v1_13_1);
protocolManager.registerProtocol(new Protocol1_13_2To1_13_1(), ProtocolVersion.v1_13_1, ProtocolVersion.v1_13_2);
protocolManager.registerProtocol(new Protocol1_14To1_13_2(), ProtocolVersion.v1_13_2, ProtocolVersion.v1_14);
protocolManager.registerProtocol(new Protocol1_14_1To1_14(), ProtocolVersion.v1_14, ProtocolVersion.v1_14_1);
protocolManager.registerProtocol(new Protocol1_14_2To1_14_1(), ProtocolVersion.v1_14_1, ProtocolVersion.v1_14_2);
protocolManager.registerProtocol(new Protocol1_14_3To1_14_2(), ProtocolVersion.v1_14_2, ProtocolVersion.v1_14_3);
protocolManager.registerProtocol(new Protocol1_14_4To1_14_3(), ProtocolVersion.v1_14_3, ProtocolVersion.v1_14_4);
protocolManager.registerProtocol(new Protocol1_15To1_14_4(), ProtocolVersion.v1_14_4, ProtocolVersion.v1_15);
protocolManager.registerProtocol(new Protocol1_15_1To1_15(), ProtocolVersion.v1_15, ProtocolVersion.v1_15_1);
protocolManager.registerProtocol(new Protocol1_15_2To1_15_1(), ProtocolVersion.v1_15_1, ProtocolVersion.v1_15_2);
protocolManager.registerProtocol(new Protocol1_16To1_15_2(), ProtocolVersion.v1_15_2, ProtocolVersion.v1_16);
protocolManager.registerProtocol(new Protocol1_16_1To1_16(), ProtocolVersion.v1_16, ProtocolVersion.v1_16_1);
protocolManager.registerProtocol(new Protocol1_16_2To1_16_1(), ProtocolVersion.v1_16_1, ProtocolVersion.v1_16_2);
protocolManager.registerProtocol(new Protocol1_16_3To1_16_2(), ProtocolVersion.v1_16_2, ProtocolVersion.v1_16_3);
protocolManager.registerProtocol(new Protocol1_16_4To1_16_3(), ProtocolVersion.v1_16_3, ProtocolVersion.v1_16_4);
protocolManager.registerProtocol(new Protocol1_17To1_16_4(), ProtocolVersion.v1_16_4, ProtocolVersion.v1_17);
protocolManager.registerProtocol(new Protocol1_17_1To1_17(), ProtocolVersion.v1_17, ProtocolVersion.v1_17_1);
protocolManager.registerProtocol(new Protocol1_18To1_17_1(), ProtocolVersion.v1_17_1, ProtocolVersion.v1_18);
protocolManager.registerProtocol(new Protocol1_18_2To1_18(), ProtocolVersion.v1_18, ProtocolVersion.v1_18_2);
protocolManager.registerProtocol(new Protocol1_19To1_18_2(), ProtocolVersion.v1_18_2, ProtocolVersion.v1_19);
protocolManager.registerProtocol(new Protocol1_19_1To1_19(), ProtocolVersion.v1_19, ProtocolVersion.v1_19_1);
protocolManager.registerProtocol(new Protocol1_19_3To1_19_1(), ProtocolVersion.v1_19_1, ProtocolVersion.v1_19_3);
protocolManager.registerProtocol(new Protocol1_19_4To1_19_3(), ProtocolVersion.v1_19_3, ProtocolVersion.v1_19_4);
protocolManager.registerProtocol(new Protocol1_20To1_19_4(), ProtocolVersion.v1_19_4, ProtocolVersion.v1_20);
protocolManager.registerProtocol(new Protocol1_20_2To1_20(), ProtocolVersion.v1_20, ProtocolVersion.v1_20_2);
protocolManager.registerProtocol(new Protocol1_20_3To1_20_2(), ProtocolVersion.v1_20_2, ProtocolVersion.v1_20_3);
protocolManager.registerProtocol(new Protocol1_20_5To1_20_3(), ProtocolVersion.v1_20_3, ProtocolVersion.v1_20_5);
protocolManager.registerProtocol(new Protocol1_21To1_20_5(), ProtocolVersion.v1_20_5, ProtocolVersion.v1_21);
protocolManager.registerProtocol(new Protocol1_21_2To1_21(), ProtocolVersion.v1_21, ProtocolVersion.v1_21_2);
protocolManager.registerProtocol(new Protocol1_21_4To1_21_2(), ProtocolVersion.v1_21_2, ProtocolVersion.v1_21_4);
protocolManager.registerProtocol(new Protocol1_21_5To1_21_4(), ProtocolVersion.v1_21_4, ProtocolVersion.v1_21_5);
protocolManager.registerProtocol(new Protocol1_21_6To1_21_5(), ProtocolVersion.v1_21_5, ProtocolVersion.v1_21_6);
protocolManager.registerProtocol(new Protocol1_21_7To1_21_6(), ProtocolVersion.v1_21_6, ProtocolVersion.v1_21_7);
protocolManager.registerProtocol(new Protocol1_21_9To1_21_7(), ProtocolVersion.v1_21_7, ProtocolVersion.v1_21_9);
protocolManager.registerProtocol(new Protocol1_21_11To1_21_9(), ProtocolVersion.v1_21_9, ProtocolVersion.v1_21_11);
protocolManager.registerProtocol(new Protocol26_1To1_21_11(), ProtocolVersion.v1_21_11, ProtocolVersion.v26_1);
}
default void enable() {
final ProtocolVersion protocolVersion = Via.getAPI().getServerVersion().highestSupportedProtocolVersion();
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_2)) {
Via.getPlatform().runRepeatingSync(new PlayerPacketsTickTask(), 1L);
}
if (protocolVersion.newerThanOrEqualTo(ProtocolVersion.v1_21_6)) {
Via.getPlatform().runRepeatingSync(new ChestDialogViewTask(), 20L);
}
}
/**
* Logger provided by the platform.
*
* @return logger instance
*/
Logger getLogger();
default boolean isOutdated() {
String vvVersion = Via.getPlatform().getPluginVersion();
if (vvVersion != null && new Version(vvVersion).compareTo(new Version(MINIMUM_VV_VERSION + "--")) < 0) {
getLogger().severe("================================");
getLogger().severe("YOUR VIAVERSION IS OUTDATED (you are running " + vvVersion + ")");
getLogger().severe("PLEASE USE VIAVERSION " + MINIMUM_VV_VERSION + " OR NEWER");
getLogger().severe("LINK: https://ci.viaversion.com/");
getLogger().severe("VIABACKWARDS WILL NOW DISABLE");
getLogger().severe("================================");
return true;
}
return false;
}
/**
* Disable the plugin.
*/
void disable();
/**
* Returns ViaBackwards's data folder.
*
* @return data folder
*/
File getDataFolder();
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingData.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.google.common.base.Preconditions;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.NumberTag;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.data.BiMappings;
import com.viaversion.viaversion.api.data.IdentityMappings;
import com.viaversion.viaversion.api.data.MappingData;
import com.viaversion.viaversion.api.data.MappingDataBase;
import com.viaversion.viaversion.api.data.Mappings;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectArrayMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.checkerframework.checker.nullness.qual.Nullable;
public class BackwardsMappingData extends MappingDataBase {
private final Class<? extends Protocol<?, ?, ?, ?>> vvProtocolClass;
protected Int2ObjectMap<MappedItem> backwardsItemMappings;
private Map<String, String> entityNames;
private Int2ObjectMap<String> enchantmentNames;
public BackwardsMappingData(final String unmappedVersion, final String mappedVersion) {
this(unmappedVersion, mappedVersion, null);
}
public BackwardsMappingData(final String unmappedVersion, final String mappedVersion, @Nullable final Class<? extends Protocol<?, ?, ?, ?>> vvProtocolClass) {
super(unmappedVersion, mappedVersion);
Preconditions.checkArgument(vvProtocolClass == null || !BackwardsProtocol.class.isAssignableFrom(vvProtocolClass));
this.vvProtocolClass = vvProtocolClass;
}
@Override
protected void loadExtras(final CompoundTag data) {
final CompoundTag itemNames = data.getCompoundTag("itemnames");
if (itemNames != null) {
Preconditions.checkNotNull(itemMappings);
backwardsItemMappings = new Int2ObjectOpenHashMap<>(itemNames.size());
final CompoundTag extraItemData = data.getCompoundTag("itemdata");
for (final Map.Entry<String, Tag> entry : itemNames.entrySet()) {
final StringTag name = (StringTag) entry.getValue();
final int id = Integer.parseInt(entry.getKey());
Integer customModelData = null;
if (extraItemData != null && extraItemData.contains(entry.getKey())) {
final CompoundTag entryTag = extraItemData.getCompoundTag(entry.getKey());
final NumberTag customModelDataTag = entryTag.getNumberTag("custom_model_data");
customModelData = customModelDataTag != null ? customModelDataTag.asInt() : null;
}
backwardsItemMappings.put(id, new MappedItem(getNewItemId(id), name.getValue(), customModelData));
}
}
this.entityNames = loadNameByStringMappings(data, "entitynames");
this.enchantmentNames = loadNameByIdMappings(data, "enchantmentnames");
}
private @Nullable Map<String, String> loadNameByStringMappings(final CompoundTag data, final String key) {
final CompoundTag nameMappings = data.getCompoundTag(key);
if (nameMappings == null) {
return null;
}
final Map<String, String> map = new HashMap<>(nameMappings.size());
for (final Map.Entry<String, Tag> entry : nameMappings.entrySet()) {
final StringTag mappedTag = (StringTag) entry.getValue();
map.put(entry.getKey(), mappedTag.getValue());
}
return map;
}
private @Nullable Int2ObjectMap<String> loadNameByIdMappings(final CompoundTag data, final String key) {
final CompoundTag nameMappings = data.getCompoundTag(key);
if (nameMappings == null) {
return null;
}
final Int2ObjectMap<String> map = new Int2ObjectArrayMap<>(nameMappings.size());
for (final Map.Entry<String, Tag> entry : nameMappings.entrySet()) {
final StringTag mappedTag = (StringTag) entry.getValue();
map.put(Integer.parseInt(entry.getKey()), mappedTag.getValue());
}
return map;
}
@Override
protected @Nullable BiMappings loadBiMappings(final CompoundTag data, final String key) {
if (key.equals("items") && vvProtocolClass != null) {
Mappings mappings = super.loadMappings(data, key);
final MappingData mappingData = Via.getManager().getProtocolManager().getProtocol(vvProtocolClass).getMappingData();
if (mappingData != null && mappingData.getItemMappings() != null) {
final BiMappings vvItemMappings = mappingData.getItemMappings();
if (mappings == null) {
mappings = new IdentityMappings(vvItemMappings.mappedSize(), vvItemMappings.size());
}
return ItemMappings.of(mappings, vvItemMappings);
}
}
return super.loadBiMappings(data, key);
}
/**
* @see #getMappedItem(int) for custom backwards mappings
*/
@Override
public int getNewItemId(final int id) {
// Don't warn on missing here
return this.itemMappings.getNewId(id);
}
@Override
public int getNewBlockId(final int id) {
// Don't warn on missing here
return this.blockMappings.getNewId(id);
}
@Override
public int getOldItemId(final int id) {
// Warn on missing
return checkValidity(id, this.itemMappings.inverse().getNewId(id), "item");
}
@Override
public int getNewAttributeId(final int id) {
return this.attributeMappings.getNewId(id);
}
public @Nullable MappedItem getMappedItem(final int id) {
return backwardsItemMappings != null ? backwardsItemMappings.get(id) : null;
}
public @Nullable String getMappedNamedSound(final String id) {
return getFullSoundMappings().mappedIdentifier(id);
}
public @Nullable String mappedEntityName(final String entityName) {
if (entityNames == null) {
getLogger().log(Level.SEVERE, "No entity mappings found when requesting them for " + entityName, new RuntimeException());
return null;
}
return entityNames.get(entityName);
}
public @Nullable String mappedEnchantmentName(final int enchantmentId) {
if (enchantmentNames == null) {
ViaBackwards.getPlatform().getLogger().log(Level.SEVERE, "No enchantment name mappings found when requesting " + enchantmentId, new RuntimeException());
return null;
}
return enchantmentNames.get(enchantmentId);
}
public @Nullable Int2ObjectMap<MappedItem> getBackwardsItemMappings() {
return backwardsItemMappings;
}
public @Nullable Class<? extends Protocol<?, ?, ?, ?>> getViaVersionProtocolClass() {
return vvProtocolClass;
}
@Override
protected Logger getLogger() {
return ViaBackwards.getPlatform().getLogger();
}
@Override
protected @Nullable CompoundTag readMappingsFile(final String name) {
return BackwardsMappingDataLoader.INSTANCE.loadNBTFromDir(name);
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingDataLoader.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viaversion.api.data.MappingDataLoader;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.logging.Logger;
import org.checkerframework.checker.nullness.qual.Nullable;
public class BackwardsMappingDataLoader extends MappingDataLoader {
public static final BackwardsMappingDataLoader INSTANCE = new BackwardsMappingDataLoader(BackwardsMappingDataLoader.class, "assets/viabackwards/data/");
public BackwardsMappingDataLoader(final Class<?> dataLoaderClass, final String dataPath) {
super(dataLoaderClass, dataPath);
}
/**
* Returns nbt data from the plugin folder or packed assets.
* If a file with the same name exists in the plugin folder, the data of the original packed tag will be merged with the file's tag.
*
* @param name name of the file
* @return nbt data from the plugin folder or packed assets
*/
public @Nullable CompoundTag loadNBTFromDir(final String name) {
final CompoundTag packedData = loadNBT(name);
final File file = new File(getDataFolder(), name);
if (!file.exists()) {
return packedData;
}
getLogger().info("Loading " + name + " from plugin folder");
try {
final CompoundTag fileData = MAPPINGS_READER.read(file.toPath(), false);
return mergeTags(packedData, fileData);
} catch (final IOException e) {
throw new RuntimeException(e);
}
}
private CompoundTag mergeTags(final CompoundTag original, final CompoundTag extra) {
for (final Map.Entry<String, Tag> entry : extra.entrySet()) {
if (entry.getValue() instanceof CompoundTag) {
// For compound tags, don't replace the entire tag
final CompoundTag originalEntry = original.getCompoundTag(entry.getKey());
if (originalEntry != null) {
mergeTags(originalEntry, (CompoundTag) entry.getValue());
continue;
}
}
original.put(entry.getKey(), entry.getValue());
}
return original;
}
@Override
public Logger getLogger() {
return ViaBackwards.getPlatform().getLogger();
}
@Override
public File getDataFolder() {
return ViaBackwards.getPlatform().getDataFolder();
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/ItemMappings.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.viaversion.viaversion.api.data.BiMappingsBase;
import com.viaversion.viaversion.api.data.Mappings;
public final class ItemMappings extends BiMappingsBase {
private ItemMappings(final Mappings mappings, final Mappings inverse) {
super(mappings, inverse);
}
public static ItemMappings of(final Mappings mappings, final Mappings inverse) {
return new ItemMappings(mappings, inverse);
}
@Override
public void setNewId(final int id, final int mappedId) {
// Only set one-way
mappings.setNewId(id, mappedId);
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/MappedItem.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viaversion.util.ComponentUtil;
import org.checkerframework.checker.nullness.qual.Nullable;
public class MappedItem {
private final int id;
private final String jsonName;
private final Tag tagName;
private final Integer customModelData;
public MappedItem(final int id, final String name) {
this(id, name, null);
}
public MappedItem(final int id, final String name, @Nullable final Integer customModelData) {
this.id = id;
this.jsonName = ComponentUtil.legacyToJsonString("§f" + name, true);
this.tagName = ComponentUtil.jsonStringToTag(jsonName);
this.customModelData = customModelData;
}
public int id() {
return id;
}
public String jsonName() {
return jsonName;
}
public Tag tagName() {
return tagName;
}
public @Nullable Integer customModelData() {
return customModelData;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/MappedLegacyBlockItem.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.viaversion.util.IdAndData;
import org.checkerframework.checker.nullness.qual.Nullable;
public class MappedLegacyBlockItem {
private final int id;
private final short data;
private final String name;
private final IdAndData block;
private BlockEntityHandler blockEntityHandler;
public MappedLegacyBlockItem(int id) {
this(id, (short) -1, null, Type.ITEM);
}
public MappedLegacyBlockItem(int id, short data, @Nullable String name, Type type) {
this.id = id;
this.data = data;
this.name = name != null ? "§f" + name : null;
this.block = type != Type.ITEM ? data != -1 ? new IdAndData(id, data) : new IdAndData(id) : null;
}
public int getId() {
return id;
}
public short getData() {
return data;
}
public String getName() {
return name;
}
public IdAndData getBlock() {
return block;
}
public boolean hasBlockEntityHandler() {
return blockEntityHandler != null;
}
public @Nullable BlockEntityHandler getBlockEntityHandler() {
return blockEntityHandler;
}
public void setBlockEntityHandler(@Nullable BlockEntityHandler blockEntityHandler) {
this.blockEntityHandler = blockEntityHandler;
}
@FunctionalInterface
public interface BlockEntityHandler {
void handleCompoundTag(int block, CompoundTag tag);
}
public enum Type {
ITEM("items"),
BLOCK_ITEM("block-items"),
BLOCK("blocks");
final String name;
Type(final String name) {
this.name = name;
}
public String getName() {
return name;
}
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/TranslatableMappings.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.data;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viaversion.api.protocol.Protocol;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.libs.gson.JsonObject;
import java.util.HashMap;
import java.util.Map;
import org.checkerframework.checker.nullness.qual.Nullable;
public final class TranslatableMappings {
private static final Map<String, Map<String, String>> TRANSLATABLES = new HashMap<>();
public static void loadTranslatables() {
if (!TRANSLATABLES.isEmpty()) {
throw new IllegalStateException("Translatables already loaded!");
}
fillTranslatables(BackwardsMappingDataLoader.INSTANCE.loadFromDataDir("translation-mappings.json"), TRANSLATABLES);
}
public static void fillTranslatables(final JsonObject jsonObject, final Map<String, Map<String, String>> translatables) {
for (final Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
final Map<String, String> versionMappings = new HashMap<>();
translatables.put(entry.getKey(), versionMappings);
for (final Map.Entry<String, JsonElement> translationEntry : entry.getValue().getAsJsonObject().entrySet()) {
versionMappings.put(translationEntry.getKey(), translationEntry.getValue().getAsString());
}
}
}
public static Map<String, String> translatablesFor(final Protocol<?, ?, ?, ?> protocol) {
final String version = protocol.getClass().getSimpleName()
.replace("Protocol", "")
.split("To")[0]
.replace("_", ".");
return translatablesFor(version);
}
public static Map<String, String> translatablesFor(final String version) {
final Map<String, String> translatableMappings = getTranslatableMappings(version);
if (translatableMappings == null) {
ViaBackwards.getPlatform().getLogger().warning("Missing " + version + " translatables!");
return new HashMap<>();
}
return translatableMappings;
}
public static @Nullable Map<String, String> getTranslatableMappings(final String sectionIdentifier) {
return TRANSLATABLES.get(sectionIdentifier);
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityObjectData.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.viabackwards.api.BackwardsProtocol;
public class EntityObjectData extends EntityReplacement {
private final int objectData;
public EntityObjectData(BackwardsProtocol<?, ?, ?, ?> protocol, String key, int id, int replacementId, int objectData) {
super(protocol, key, id, replacementId);
this.objectData = objectData;
}
@Override
public boolean isObjectType() {
return true;
}
@Override
public int objectData() {
return objectData;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionHandler.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.viabackwards.api.rewriters.EntityRewriterBase;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.util.ProtocolLogger;
import java.util.function.Supplier;
public class EntityPositionHandler {
public static final double RELATIVE_MOVE_FACTOR = 32 * 128;
private final EntityRewriterBase<?, ?> entityRewriter;
private final Class<? extends EntityPositionStorage> storageClass;
private final Supplier<? extends EntityPositionStorage> storageSupplier;
private boolean warnedForMissingEntity;
public EntityPositionHandler(EntityRewriterBase<?, ?> entityRewriter,
Class<? extends EntityPositionStorage> storageClass, Supplier<? extends EntityPositionStorage> storageSupplier) {
this.entityRewriter = entityRewriter;
this.storageClass = storageClass;
this.storageSupplier = storageSupplier;
}
public void cacheEntityPosition(PacketWrapper wrapper, boolean create, boolean relative) {
cacheEntityPosition(wrapper,
wrapper.get(Types.DOUBLE, 0), wrapper.get(Types.DOUBLE, 1), wrapper.get(Types.DOUBLE, 2), create, relative);
}
public void cacheEntityPosition(PacketWrapper wrapper, double x, double y, double z, boolean create, boolean relative) {
cacheEntityPosition(wrapper, wrapper.get(Types.VAR_INT, 0), x, y, z, create, relative);
}
public void cacheEntityPosition(PacketWrapper wrapper, int entityId, double x, double y, double z, boolean create, boolean relative) {
StoredEntityData storedEntity = entityRewriter.tracker(wrapper.user()).entityData(entityId);
if (storedEntity == null) {
if (Via.getManager().isDebug()) { // There is too many plugins violating this out there, and reading seems to be hard! :>
ProtocolLogger logger = entityRewriter.protocol().getLogger();
logger.warning("Stored entity with id " + entityId + " missing at position: " + x + " - " + y + " - " + z + " in " + storageClass.getSimpleName());
if (entityId == -1 && x == 0 && y == 0 && z == 0) {
logger.warning("DO NOT REPORT THIS TO VIA, THIS IS A PLUGIN ISSUE");
} else if (!warnedForMissingEntity) {
warnedForMissingEntity = true;
logger.warning("This is very likely caused by a plugin sending a teleport packet for an entity outside of the player's range.");
}
}
return;
}
EntityPositionStorage positionStorage;
if (create) {
positionStorage = storageSupplier.get();
storedEntity.put(positionStorage);
} else {
positionStorage = storedEntity.get(storageClass);
if (positionStorage == null) {
entityRewriter.protocol().getLogger().warning("Stored entity with id " + entityId + " missing " + storageClass.getSimpleName());
return;
}
}
if (relative) {
positionStorage.addRelativePosition(x, y, z);
} else {
positionStorage.setPosition(x, y, z);
}
}
public EntityPositionStorage getStorage(UserConnection user, int entityId) {
StoredEntityData storedEntity = entityRewriter.tracker(user).entityData(entityId);
EntityPositionStorage entityStorage;
if (storedEntity == null || (entityStorage = storedEntity.get(EntityPositionStorage.class)) == null) {
entityRewriter.protocol().getLogger().warning("Untracked entity with id " + entityId + " in " + storageClass.getSimpleName());
return null;
}
return entityStorage;
}
public static void writeFacingAngles(PacketWrapper wrapper, double x, double y, double z, double targetX, double targetY, double targetZ) {
double dX = targetX - x;
double dY = targetY - y;
double dZ = targetZ - z;
double r = Math.sqrt(dX * dX + dY * dY + dZ * dZ);
double yaw = -Math.atan2(dX, dZ) / Math.PI * 180;
if (yaw < 0) {
yaw = 360 + yaw;
}
double pitch = -Math.asin(dY / r) / Math.PI * 180;
wrapper.write(Types.BYTE, (byte) (yaw * 256f / 360f));
wrapper.write(Types.BYTE, (byte) (pitch * 256f / 360f));
}
public static void writeFacingDegrees(PacketWrapper wrapper, double x, double y, double z, double targetX, double targetY, double targetZ) {
double dX = targetX - x;
double dY = targetY - y;
double dZ = targetZ - z;
double r = Math.sqrt(dX * dX + dY * dY + dZ * dZ);
double yaw = -Math.atan2(dX, dZ) / Math.PI * 180;
if (yaw < 0) {
yaw = 360 + yaw;
}
double pitch = -Math.asin(dY / r) / Math.PI * 180;
wrapper.write(Types.FLOAT, (float) yaw);
wrapper.write(Types.FLOAT, (float) pitch);
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionStorage.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
public abstract class EntityPositionStorage {
private double x;
private double y;
private double z;
public double x() {
return x;
}
public double y() {
return y;
}
public double z() {
return z;
}
public void setPosition(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
public void addRelativePosition(double relX, double relY, double relZ) {
this.x += relX;
this.y += relY;
this.z += relZ;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityReplacement.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.util.ComponentUtil;
import java.util.Locale;
import org.checkerframework.checker.nullness.qual.Nullable;
public class EntityReplacement {
private final BackwardsProtocol<?, ?, ?, ?> protocol;
private final int id;
private final int replacementId;
private final String key;
private ComponentType componentType = ComponentType.NONE;
private EntityDataCreator defaultData;
public EntityReplacement(BackwardsProtocol<?, ?, ?, ?> protocol, EntityType type, int replacementId) {
this(protocol, type.name(), type.getId(), replacementId);
}
public EntityReplacement(BackwardsProtocol<?, ?, ?, ?> protocol, String key, int id, int replacementId) {
this.protocol = protocol;
this.id = id;
this.replacementId = replacementId;
this.key = key.toLowerCase(Locale.ROOT);
}
public EntityReplacement jsonName() {
this.componentType = ComponentType.JSON;
return this;
}
public EntityReplacement tagName() {
this.componentType = ComponentType.TAG;
return this;
}
public EntityReplacement plainName() {
this.componentType = ComponentType.PLAIN;
return this;
}
public EntityReplacement spawnEntityData(EntityDataCreator handler) {
this.defaultData = handler;
return this;
}
public boolean hasBaseData() {
return this.defaultData != null;
}
public int typeId() {
return id;
}
/**
* @return custom mobname, can be either a String or a JsonElement
*/
public @Nullable Object entityName() {
if (componentType == ComponentType.NONE) {
return null;
}
final String name = protocol.getMappingData().mappedEntityName(key);
if (name == null) {
return null;
}
if (componentType == ComponentType.JSON) {
return ComponentUtil.legacyToJson(name);
} else if (componentType == ComponentType.TAG) {
return new StringTag(name);
}
return name;
}
public int replacementId() {
return replacementId;
}
public @Nullable EntityDataCreator defaultData() {
return defaultData;
}
public boolean isObjectType() {
return false;
}
public int objectData() {
return -1;
}
@Override
public String toString() {
return "EntityReplacement{" +
"protocol=" + protocol +
", id=" + id +
", replacementId=" + replacementId +
", key='" + key + '\'' +
", componentType=" + componentType +
", defaultData=" + defaultData +
'}';
}
@FunctionalInterface
public interface EntityDataCreator {
void createData(WrappedEntityData storage);
}
private enum ComponentType {
PLAIN,
JSON,
TAG,
NONE
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/PlayerPositionStorage.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.viaversion.api.connection.StorableObject;
public abstract class PlayerPositionStorage implements StorableObject {
private double x;
private double y;
private double z;
protected PlayerPositionStorage() {
}
public double x() {
return x;
}
public double y() {
return y;
}
public double z() {
return z;
}
public void setX(final double x) {
this.x = x;
}
public void setY(final double y) {
this.y = y;
}
public void setZ(final double z) {
this.z = z;
}
public void setPosition(double x, double y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
public void addRelativePosition(double relX, double relY, double relZ) {
this.x += relX;
this.y += relY;
this.z += relZ;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/WrappedEntityData.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.entities.storage;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
public record WrappedEntityData(List<EntityData> entityDataList) {
public boolean has(EntityData data) {
return this.entityDataList.contains(data);
}
public void remove(EntityData data) {
this.entityDataList.remove(data);
}
public void remove(int index) {
entityDataList.removeIf(data -> data.id() == index);
}
public void add(EntityData data) {
this.entityDataList.add(data);
}
public @Nullable EntityData get(int index) {
for (EntityData data : this.entityDataList) {
if (index == data.id()) {
return data;
}
}
return null;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriter.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.nbt.tag.ByteTag;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.IntTag;
import com.viaversion.nbt.tag.ListTag;
import com.viaversion.nbt.tag.NumberTag;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.MappedItem;
import com.viaversion.viabackwards.item.DataItemWithExtras;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.libs.gson.JsonElement;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
public class BackwardsItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
T extends BackwardsProtocol<C, ?, ?, S>> extends BackwardsItemRewriterBase<C, S, T> {
public BackwardsItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType) {
super(protocol, itemType, itemArrayType, true);
}
public BackwardsItemRewriter(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType) {
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType, true);
}
@Override
public @Nullable Item handleItemToClient(UserConnection connection, @Nullable Item item) {
if (item == null) {
return null;
}
CompoundTag display = item.tag() != null ? item.tag().getCompoundTag("display") : null;
if (protocol.getComponentRewriter() != null && display != null) {
final DataItemWithExtras fullItem;
if (item instanceof DataItemWithExtras) {
fullItem = (DataItemWithExtras) item;
} else {
item = fullItem = new DataItemWithExtras(item);
}
// Handle name and lore components
final JsonElement name = fullItem.name();
if (name != null) {
final JsonElement updatedName = name.deepCopy();
protocol.getComponentRewriter().processText(connection, updatedName);
if (!updatedName.equals(name)) {
final StringTag rawName = fullItem.rawName();
saveStringTag(display, rawName, "Name");
rawName.setValue(updatedName.toString());
}
}
final List<JsonElement> lore = fullItem.lore();
if (lore != null) {
boolean changed = false;
final ListTag<StringTag> rawLore = fullItem.rawLore();
for (int i = 0; i < lore.size(); i++) {
final JsonElement loreEntry = lore.get(i);
final JsonElement updatedLoreEntry = loreEntry.deepCopy();
protocol.getComponentRewriter().processText(connection, updatedLoreEntry);
if (updatedLoreEntry.equals(loreEntry)) {
continue;
}
if (!changed) {
// Backup original lore before doing any modifications
changed = true;
saveListTag(display, rawLore, "Lore");
}
final StringTag rawLoreEntry = rawLore.get(i);
rawLoreEntry.setValue(updatedLoreEntry.toString());
}
}
}
MappedItem data = protocol.getMappingData() != null ? protocol.getMappingData().getMappedItem(item.identifier()) : null;
if (data == null) {
// Just rewrite the id
return super.handleItemToClient(connection, item);
}
if (item.tag() == null) {
item.setTag(new CompoundTag());
}
// Save original id, set remapped id
item.tag().putInt(nbtTagName("id"), item.identifier());
item.setIdentifier(data.id());
// Add custom model data
if (data.customModelData() != null && !item.tag().contains("CustomModelData")) {
item.tag().putInt("CustomModelData", data.customModelData());
}
// Set custom name - only done if there is no original one
if (display == null) {
item.tag().put("display", display = new CompoundTag());
}
if (!display.contains("Name")) {
display.put("Name", new StringTag(data.jsonName()));
display.put(nbtTagName("customName"), new ByteTag(false));
}
return item;
}
@Override
public @Nullable Item handleItemToServer(UserConnection connection, @Nullable Item item) {
if (item == null) return null;
item = super.handleItemToServer(connection, item);
if (item.tag() != null) {
Tag originalId = item.tag().remove(nbtTagName("id"));
if (originalId instanceof IntTag) {
item.setIdentifier(((NumberTag) originalId).asInt());
}
}
return item;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriterBase.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.ListTag;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.rewriter.ItemRewriter;
import org.checkerframework.checker.nullness.qual.Nullable;
public abstract class BackwardsItemRewriterBase<C extends ClientboundPacketType, S extends ServerboundPacketType,
T extends BackwardsProtocol<C, ?, ?, S>> extends ItemRewriter<C, S, T> {
protected final boolean jsonNameFormat;
protected BackwardsItemRewriterBase(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, Type<Item> mappedItemType, Type<Item[]> mappedItemArrayType, boolean jsonFormat) {
super(protocol, itemType, itemArrayType, mappedItemType, mappedItemArrayType);
this.jsonNameFormat = jsonFormat;
}
protected BackwardsItemRewriterBase(T protocol, Type<Item> itemType, Type<Item[]> itemArrayType, boolean jsonNameFormat) {
this(protocol, itemType, itemArrayType, itemType, itemArrayType, jsonNameFormat);
}
@Override
public @Nullable Item handleItemToServer(UserConnection connection, @Nullable Item item) {
if (item == null) return null;
item = super.handleItemToServer(connection, item);
restoreDisplayTag(item);
return item;
}
protected boolean hasBackupTag(CompoundTag tag, String tagName) {
return tag.contains(nbtTagName(tagName));
}
protected void saveStringTag(CompoundTag tag, StringTag original, String name) {
// Multiple places might try to backup data
String backupName = nbtTagName(name);
if (!tag.contains(backupName)) {
tag.putString(backupName, original.getValue());
}
}
protected void saveListTag(CompoundTag tag, ListTag<?> original, String name) {
// Multiple places might try to backup data
String backupName = nbtTagName(name);
if (!tag.contains(backupName)) {
tag.put(backupName, original.copy());
}
}
protected void restoreDisplayTag(Item item) {
if (item.tag() == null) return;
CompoundTag display = item.tag().getCompoundTag("display");
if (display != null) {
// Remove custom name / restore original name
if (display.remove(nbtTagName("customName")) != null) {
display.remove("Name");
} else {
restoreStringTag(display, "Name");
}
// Restore lore
restoreListTag(display, "Lore");
}
}
protected void restoreStringTag(CompoundTag tag, String tagName) {
Tag original = tag.remove(nbtTagName(tagName));
if (original instanceof StringTag) {
tag.putString(tagName, ((StringTag) original).getValue());
}
}
protected void restoreListTag(CompoundTag tag, String tagName) {
Tag original = tag.remove(nbtTagName(tagName));
if (original instanceof ListTag) {
tag.put(tagName, ((ListTag<?>) original).copy());
}
}
@Override
public String nbtTagName() {
return "VB|" + protocol.getClass().getSimpleName();
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsRegistryRewriter.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.RegistryEntry;
import com.viaversion.viaversion.rewriter.RegistryDataRewriter;
import com.viaversion.viaversion.util.Key;
public class BackwardsRegistryRewriter extends RegistryDataRewriter {
private final BackwardsProtocol<?, ?, ?, ?> protocol;
public BackwardsRegistryRewriter(final BackwardsProtocol<?, ?, ?, ?> protocol) {
super(protocol);
this.protocol = protocol;
}
@Override
public RegistryEntry[] handle(final UserConnection connection, final String key, final RegistryEntry[] entries) {
if (Key.stripMinecraftNamespace(key).equals("worldgen/biome")) {
for (final RegistryEntry entry : entries) {
final CompoundTag biome = (CompoundTag) entry.tag();
if (biome == null) {
continue;
}
final CompoundTag effects = biome.getCompoundTag("effects");
updateBiomeEffects(effects);
}
}
return super.handle(connection, key, entries);
}
@Override
public void updateJukeboxSongs(final RegistryEntry[] entries) {
for (final RegistryEntry entry : entries) {
if (entry.tag() == null) {
continue;
}
updateSound((CompoundTag) entry.tag(), "sound_event");
}
}
private void updateBiomeEffects(final CompoundTag effects) {
updateSound(effects.getCompoundTag("mood_sound"), "sound");
updateSound(effects.getCompoundTag("additions_sound"), "sound");
updateSound(effects.getCompoundTag("music"), "sound");
updateSound(effects, "ambient_sound");
}
private void updateSound(final CompoundTag tag, final String name) {
if (tag == null) {
return;
}
final String sound = tag.getString(name);
if (sound == null) {
return;
}
final String mappedSound = protocol.getMappingData().getMappedNamedSound(sound);
if (mappedSound == null) {
return;
}
if (mappedSound.isEmpty()) {
tag.putString(name, "minecraft:intentionally_empty");
} else {
tag.putString(name, mappedSound);
}
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.FloatTag;
import com.viaversion.nbt.tag.IntArrayTag;
import com.viaversion.nbt.tag.IntTag;
import com.viaversion.nbt.tag.ListTag;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.nbt.tag.Tag;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.data.BackwardsMappingData;
import com.viaversion.viabackwards.api.data.MappedItem;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.minecraft.EitherHolder;
import com.viaversion.viaversion.api.minecraft.Holder;
import com.viaversion.viaversion.api.minecraft.HolderSet;
import com.viaversion.viaversion.api.minecraft.SoundEvent;
import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer;
import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.api.minecraft.item.data.CustomModelData1_21_4;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.rewriter.StructuredItemRewriter;
import com.viaversion.viaversion.util.ArrayUtil;
import com.viaversion.viaversion.util.Key;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Function;
import org.checkerframework.checker.nullness.qual.Nullable;
public class BackwardsStructuredItemRewriter<C extends ClientboundPacketType, S extends ServerboundPacketType,
T extends BackwardsProtocol<C, ?, ?, S>> extends StructuredItemRewriter<C, S, T> {
private static final int[] EMPTY_INT_ARRAY = new int[0];
private static final String GLOBAL_MODEL_DATA_MARKER = "VB|injected_cmd";
private final String nbtTagName;
public BackwardsStructuredItemRewriter(T protocol) {
super(protocol);
this.nbtTagName = "VB|" + protocol.getClass().getSimpleName();
}
@Override
protected void backupInconvertibleData(final UserConnection connection, final Item item, final StructuredDataContainer dataContainer, final CompoundTag backupTag) {
super.backupInconvertibleData(connection, item, dataContainer, backupTag);
final BackwardsMappingData mappingData = protocol.getMappingData();
final MappedItem mappedItem = mappingData != null ? mappingData.getMappedItem(item.identifier()) : null;
if (mappedItem == null) {
return;
}
final CompoundTag customTag = createCustomTag(item);
customTag.putInt(nbtTagName("id"), item.identifier()); // Save original id
// Add custom model data
final boolean addOriginalIdentifier = ViaBackwards.getConfig().passOriginalItemNameToResourcePacks();
if (mappedItem.customModelData() != null || addOriginalIdentifier) {
if (connection.getProtocolInfo().protocolVersion().newerThanOrEqualTo(ProtocolVersion.v1_21_4)) {
addCustomModelData(item, addOriginalIdentifier, mappedItem, customTag);
} else if (mappedItem.customModelData() != null && !dataContainer.has(StructuredDataKey.CUSTOM_MODEL_DATA1_20_5)) {
dataContainer.set(StructuredDataKey.CUSTOM_MODEL_DATA1_20_5, mappedItem.customModelData());
}
}
// Set custom name - only done if there is no original one
if (!dataContainer.has(StructuredDataKey.CUSTOM_NAME)) {
dataContainer.set(StructuredDataKey.CUSTOM_NAME, mappedItem.tagName());
customTag.putBoolean(nbtTagName("added_custom_name"), true);
}
}
private void addCustomModelData(final Item item, final boolean addOriginalIdentifier, final MappedItem mappedItem, final CompoundTag customTag) {
final StructuredDataContainer dataContainer = item.dataContainer();
CustomModelData1_21_4 customModelData = dataContainer.get(StructuredDataKey.CUSTOM_MODEL_DATA1_21_4);
if (customModelData == null) {
final String[] strings = addOriginalIdentifier
? new String[]{protocol.getMappingData().getFullItemMappings().identifier(item.identifier())}
: new String[0];
customModelData = new CustomModelData1_21_4(
mappedItem.customModelData() != null ? new float[]{mappedItem.customModelData().floatValue()} : new float[0],
new boolean[0],
strings,
EMPTY_INT_ARRAY
);
dataContainer.set(StructuredDataKey.CUSTOM_MODEL_DATA1_21_4, customModelData);
// Add one global marker and one for this specific version, so it is removed at the correct protocol
customTag.putBoolean(GLOBAL_MODEL_DATA_MARKER, true);
customTag.putBoolean(nbtTagName("added_custom_model_data"), true);
} else if (addOriginalIdentifier && !customTag.contains(GLOBAL_MODEL_DATA_MARKER)) {
final String identifier = protocol.getMappingData().getFullItemMappings().identifier(item.identifier());
dataContainer.set(StructuredDataKey.CUSTOM_MODEL_DATA1_21_4, new CustomModelData1_21_4(
customModelData.floats(), customModelData.booleans(), ArrayUtil.add(customModelData.strings(), identifier), customModelData.colors()
));
customTag.putBoolean(GLOBAL_MODEL_DATA_MARKER, true);
customTag.putString(nbtTagName("injected_custom_model_data"), identifier);
}
}
@Override
protected void restoreBackupData(final Item item, final StructuredDataContainer container, final CompoundTag customData) {
super.restoreBackupData(item, container, customData);
if (removeBackupTag(customData, "id") instanceof final IntTag originalTag) {
item.setIdentifier(originalTag.asInt());
removeCustomTag(container, customData);
}
if (removeBackupTag(customData, "injected_custom_model_data") instanceof StringTag injectedCustomModelData) {
customData.remove(GLOBAL_MODEL_DATA_MARKER);
container.replace(StructuredDataKey.CUSTOM_MODEL_DATA1_21_4, customModelData -> {
final String target = injectedCustomModelData.getValue();
final String[] strings = customModelData.strings();
for (int i = 0; i < strings.length; i++) {
if (strings[i].equals(target)) {
// Remove the injected string
final String[] filteredStrings = ArrayUtil.remove(strings, i);
return new CustomModelData1_21_4(customModelData.floats(), customModelData.booleans(), filteredStrings, customModelData.colors());
}
}
return customModelData;
});
} else if (removeBackupTag(customData, "added_custom_model_data") != null) {
customData.remove(GLOBAL_MODEL_DATA_MARKER);
container.remove(StructuredDataKey.CUSTOM_MODEL_DATA1_21_4);
}
}
protected void saveListTag(CompoundTag tag, ListTag<?> original, String name) {
// Multiple places might try to backup data
String backupName = nbtTagName(name);
if (!tag.contains(backupName)) {
tag.put(backupName, original.copy());
}
}
public <T extends Tag> @Nullable ListTag<T> removeListTag(CompoundTag tag, String tagName, Class<T> tagType) {
String backupName = nbtTagName(tagName);
ListTag<T> data = tag.getListTag(backupName, tagType);
if (data == null) {
return null;
}
tag.remove(backupName);
return data;
}
protected void saveGenericTagList(CompoundTag tag, List<Tag> original, String name) {
// List tags cannot contain tags of different types, so we have to store them a bit more awkwardly as an indexed compound tag
String backupName = nbtTagName(name);
if (!tag.contains(backupName)) {
CompoundTag output = new CompoundTag();
for (int i = 0; i < original.size(); i++) {
output.put(Integer.toString(i), original.get(i));
}
tag.put(backupName, output);
}
}
protected List<Tag> removeGenericTagList(CompoundTag tag, String name) {
String backupName = nbtTagName(name);
CompoundTag data = tag.getCompoundTag(backupName);
if (data == null) {
return null;
}
tag.remove(backupName);
return new ArrayList<>(data.values());
}
protected Tag holderSetToTag(final HolderSet set) {
if (set.hasIds()) {
return new IntArrayTag(set.ids());
} else {
return new StringTag(set.tagKey());
}
}
protected HolderSet restoreHolderSet(final CompoundTag tag, final String key) {
final Tag savedTag = tag.get(key);
if (savedTag == null) {
return HolderSet.of(EMPTY_INT_ARRAY);
}
if (savedTag instanceof StringTag tagKey) {
return HolderSet.of(tagKey.getValue());
} else if (savedTag instanceof IntArrayTag idsTag) {
return HolderSet.of(idsTag.getValue());
} else {
return HolderSet.of(EMPTY_INT_ARRAY);
}
}
protected <V> Tag holderToTag(final Holder<V> holder, final BiConsumer<V, CompoundTag> valueSaveFunction) {
if (holder.hasId()) {
return new IntTag(holder.id());
} else {
final CompoundTag savedTag = new CompoundTag();
valueSaveFunction.accept(holder.value(), savedTag);
return savedTag;
}
}
protected <V> Tag eitherHolderToTag(final EitherHolder<V> holder, final BiConsumer<V, CompoundTag> valueSaveFunction) {
if (holder.hasKey()) {
return new StringTag(holder.key());
} else {
return holderToTag(holder.holder(), valueSaveFunction);
}
}
protected <V> void saveEitherHolderData(final StructuredDataKey<EitherHolder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final BiConsumer<V, CompoundTag> valueSaveFunction) {
final EitherHolder<V> holder = data.get(key);
if (holder != null) {
backupTag.put(key.identifier(), eitherHolderToTag(holder, valueSaveFunction));
}
}
protected <V> void saveHolderData(final StructuredDataKey<Holder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final BiConsumer<V, CompoundTag> valueSaveFunction) {
final Holder<V> holder = data.get(key);
if (holder != null) {
backupTag.put(key.identifier(), holderToTag(holder, valueSaveFunction));
}
}
protected <V> Holder<V> restoreHolder(final CompoundTag tag, final String key, final Function<CompoundTag, V> valueRestoreFunction) {
final Tag savedTag = tag.get(key);
if (savedTag == null) {
return Holder.of(0);
}
if (savedTag instanceof IntTag idTag) {
return Holder.of(idTag.asInt());
} else if (savedTag instanceof CompoundTag compoundTag) {
return Holder.of(valueRestoreFunction.apply(compoundTag));
} else {
return Holder.of(0);
}
}
protected <V> EitherHolder<V> restoreEitherHolder(final CompoundTag tag, final String key, final Function<CompoundTag, V> valueRestoreFunction) {
final Tag savedTag = tag.get(key);
if (savedTag == null) {
return EitherHolder.of(Holder.of(0));
}
if (savedTag instanceof StringTag keyTag) {
return EitherHolder.of(keyTag.getValue());
} else {
return EitherHolder.of(restoreHolder(tag, key, valueRestoreFunction));
}
}
protected <V> void restoreHolderData(final StructuredDataKey<Holder<V>> key, final StructuredDataContainer data, final CompoundTag backupTag, final Function<CompoundTag, V> valueRestoreFunction) {
if (backupTag.contains(key.identifier())) {
data.set(key, restoreHolder(backupTag, key.identifier(), valueRestoreFunction));
}
}
protected void saveStringData(final StructuredDataKey<String> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final String value = data.get(key);
if (value != null) {
backupTag.putString(key.identifier(), value);
}
}
protected void restoreStringData(final StructuredDataKey<String> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final String value = backupTag.getString(key.identifier());
if (value != null) {
data.set(key, value);
}
}
protected void saveKeyData(final StructuredDataKey<Key> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final Key value = data.get(key);
if (value != null) {
backupTag.putString(key.identifier(), value.original());
}
}
protected void restoreKeyData(final StructuredDataKey<Key> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final String value = backupTag.getString(key.identifier());
if (value != null) {
data.set(key, Key.of(value));
}
}
protected void saveIntData(final StructuredDataKey<Integer> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final Integer variant = data.get(key);
if (variant != null) {
backupTag.putInt(key.identifier(), variant);
}
}
protected void restoreIntData(final StructuredDataKey<Integer> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final IntTag variant = backupTag.getIntTag(key.identifier());
if (variant != null) {
data.set(key, variant.asInt());
}
}
protected void saveFloatData(final StructuredDataKey<Float> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final Float variant = data.get(key);
if (variant != null) {
backupTag.putFloat(key.identifier(), variant);
}
}
protected void restoreFloatData(final StructuredDataKey<Float> key, final StructuredDataContainer data, final CompoundTag backupTag) {
final FloatTag variant = backupTag.getFloatTag(key.identifier());
if (variant != null) {
data.set(key, variant.asFloat());
}
}
protected void saveSoundEventHolder(final CompoundTag tag, final Holder<SoundEvent> holder) {
tag.put("sound_event", holderToTag(holder, this::saveSoundEvent));
}
protected void saveSoundEvent(final SoundEvent soundEvent, final CompoundTag tag) {
tag.putString("identifier", soundEvent.identifier());
if (soundEvent.fixedRange() != null) {
tag.putFloat("fixed_range", soundEvent.fixedRange());
}
}
protected Holder<SoundEvent> restoreSoundEventHolder(final CompoundTag tag) {
return restoreSoundEventHolder(tag, "sound_event");
}
protected Holder<SoundEvent> restoreSoundEventHolder(final CompoundTag tag, final String key) {
return restoreHolder(tag, key, soundEventTag -> {
final String identifier = soundEventTag.getString("identifier");
final FloatTag fixedRange = soundEventTag.getFloatTag("fixed_range");
return new SoundEvent(identifier, fixedRange != null ? fixedRange.asFloat() : null);
});
}
@Override
public String nbtTagName() {
return this.nbtTagName;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EnchantmentRewriter.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.nbt.tag.CompoundTag;
import com.viaversion.nbt.tag.ListTag;
import com.viaversion.nbt.tag.NumberTag;
import com.viaversion.nbt.tag.StringTag;
import com.viaversion.viabackwards.utils.ChatUtil;
import com.viaversion.viaversion.api.minecraft.item.Item;
import com.viaversion.viaversion.util.Key;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Rewriter to handle the addition of new enchantments.
*/
public class EnchantmentRewriter {
public static final String ENCHANTMENT_LEVEL_TRANSLATION = "enchantment.level.%s";
protected final Map<String, String> enchantmentMappings = new HashMap<>();
protected final BackwardsItemRewriter<?, ?, ?> itemRewriter;
private final boolean jsonFormat;
public EnchantmentRewriter(BackwardsItemRewriter<?, ?, ?> itemRewriter, boolean jsonFormat) {
this.itemRewriter = itemRewriter;
this.jsonFormat = jsonFormat;
}
public EnchantmentRewriter(BackwardsItemRewriter<?, ?, ?> itemRewriter) {
this(itemRewriter, true);
}
public void registerEnchantment(String key, String replacementLore) {
enchantmentMappings.put(Key.stripMinecraftNamespace(key), replacementLore);
}
public void handleToClient(Item item) {
CompoundTag tag = item.tag();
if (tag == null) return;
if (tag.getListTag("Enchantments") != null) {
rewriteEnchantmentsToClient(tag, false);
}
if (tag.getListTag("StoredEnchantments") != null) {
rewriteEnchantmentsToClient(tag, true);
}
}
public void handleToServer(Item item) {
CompoundTag tag = item.tag();
if (tag == null) return;
if (tag.contains(itemRewriter.nbtTagName("Enchantments"))) {
rewriteEnchantmentsToServer(tag, false);
}
if (tag.contains(itemRewriter.nbtTagName("StoredEnchantments"))) {
rewriteEnchantmentsToServer(tag, true);
}
}
public void rewriteEnchantmentsToClient(CompoundTag tag, boolean storedEnchant) {
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
ListTag<CompoundTag> enchantments = tag.getListTag(key, CompoundTag.class);
List<StringTag> loreToAdd = new ArrayList<>();
boolean changed = false;
Iterator<CompoundTag> iterator = enchantments.iterator();
while (iterator.hasNext()) {
CompoundTag enchantmentEntry = iterator.next();
StringTag idTag = enchantmentEntry.getStringTag("id");
if (idTag == null) {
continue;
}
String enchantmentId = Key.stripMinecraftNamespace(idTag.getValue());
String remappedName = enchantmentMappings.get(enchantmentId);
if (remappedName != null) {
if (!changed) {
// Backup original before doing modifications
itemRewriter.saveListTag(tag, enchantments, key);
changed = true;
}
iterator.remove();
NumberTag levelTag = enchantmentEntry.getNumberTag("lvl");
int level = levelTag != null ? levelTag.asInt() : 1;
String loreValue;
if (jsonFormat) {
loreValue = ChatUtil.legacyToJsonString(remappedName, ENCHANTMENT_LEVEL_TRANSLATION.formatted(level), true);
} else {
loreValue = remappedName + " " + getRomanNumber(level);
}
loreToAdd.add(new StringTag(loreValue));
}
}
if (!loreToAdd.isEmpty()) {
// Add dummy enchant for the glow effect if there are no actual enchantments left
if (!storedEnchant && enchantments.isEmpty()) {
CompoundTag dummyEnchantment = new CompoundTag();
dummyEnchantment.putString("id", "");
dummyEnchantment.putShort("lvl", (short) 0);
enchantments.add(dummyEnchantment);
}
CompoundTag display = tag.getCompoundTag("display");
if (display == null) {
tag.put("display", display = new CompoundTag());
}
ListTag<StringTag> loreTag = display.getListTag("Lore", StringTag.class);
if (loreTag == null) {
display.put("Lore", loreTag = new ListTag<>(StringTag.class));
} else {
// Save original lore
itemRewriter.saveListTag(display, loreTag, "Lore");
}
loreToAdd.addAll(loreTag.getValue());
loreTag.setValue(loreToAdd);
}
}
public void rewriteEnchantmentsToServer(CompoundTag tag, boolean storedEnchant) {
// Just restore the original tag ig present (lore is always restored in the item rewriter)
String key = storedEnchant ? "StoredEnchantments" : "Enchantments";
itemRewriter.restoreListTag(tag, key);
}
public static String getRomanNumber(int number) {
return switch (number) {
case 1 -> "I";
case 2 -> "II";
case 3 -> "III";
case 4 -> "IV";
case 5 -> "V";
case 6 -> "VI";
case 7 -> "VII";
case 8 -> "VIII";
case 9 -> "IX";
case 10 -> "X";
default -> ENCHANTMENT_LEVEL_TRANSLATION.formatted(number); // Fallback to translation to match vanilla style
};
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityDataType;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.packet.PacketWrapper;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.api.type.types.version.Types1_14;
public abstract class EntityRewriter<C extends ClientboundPacketType, T extends BackwardsProtocol<C, ?, ?, ?>> extends EntityRewriterBase<C, T> {
protected EntityRewriter(T protocol) {
this(protocol, Types1_14.ENTITY_DATA_TYPES.optionalComponentType, Types1_14.ENTITY_DATA_TYPES.booleanType);
}
protected EntityRewriter(T protocol, EntityDataType displayType, EntityDataType displayVisibilityType) {
super(protocol, displayType, 2, displayVisibilityType, 3);
}
@Override
public void registerTrackerWithData(C packetType) {
protocol.registerClientbound(packetType, wrapper -> {
wrapper.passthrough(Types.VAR_INT); // Entity ID
wrapper.passthrough(Types.UUID); // Entity UUID
wrapper.passthrough(Types.VAR_INT); // Entity Type
wrapper.passthrough(Types.DOUBLE); // X
wrapper.passthrough(Types.DOUBLE); // Y
wrapper.passthrough(Types.DOUBLE); // Z
wrapper.passthrough(Types.BYTE); // Pitch
wrapper.passthrough(Types.BYTE); // Yaw
wrapper.passthrough(Types.INT); // Data
getSpawnTrackerWithDataHandler().handle(wrapper);
});
}
@Override
public void registerTrackerWithData1_19(C packetType) {
protocol.registerClientbound(packetType, wrapper -> {
wrapper.passthrough(Types.VAR_INT); // Entity id
wrapper.passthrough(Types.UUID); // Entity UUID
wrapper.passthrough(Types.VAR_INT); // Entity type
wrapper.passthrough(Types.DOUBLE); // X
wrapper.passthrough(Types.DOUBLE); // Y
wrapper.passthrough(Types.DOUBLE); // Z
wrapper.passthrough(Types.BYTE); // Pitch
wrapper.passthrough(Types.BYTE); // Yaw
wrapper.passthrough(Types.BYTE); // Head yaw
wrapper.passthrough(Types.VAR_INT); // Data
getSpawnTrackerWithDataHandler1_19().handle(wrapper);
});
}
public PacketHandler getSpawnTrackerWithDataHandler() {
return wrapper -> {
// Check against the UNMAPPED entity type
EntityType entityType = trackAndMapEntity(wrapper);
if (entityType == typeFromId("falling_block")) {
int blockState = wrapper.get(Types.INT, 0);
wrapper.set(Types.INT, 0, protocol.getMappingData().getNewBlockStateId(blockState));
}
};
}
public PacketHandler getSpawnTrackerWithDataHandler1_19() {
return wrapper -> {
if (protocol.getMappingData() == null) {
return;
}
// Check against the UNMAPPED entity type
EntityType entityType = trackAndMapEntity(wrapper);
if (entityType == typeFromId("falling_block")) {
int blockState = wrapper.get(Types.VAR_INT, 2);
wrapper.set(Types.VAR_INT, 2, protocol.getMappingData().getNewBlockStateId(blockState));
}
};
}
@Override
public void registerTracker(C packetType) {
protocol.registerClientbound(packetType, wrapper -> {
wrapper.passthrough(Types.VAR_INT); // Entity ID
wrapper.passthrough(Types.UUID); // Entity UUID
wrapper.passthrough(Types.VAR_INT); // Entity Type
trackAndMapEntity(wrapper);
});
}
/**
* Returns a handler to track the current world and uncache entity data on world changes.
*
* @return handler to track the current world
*/
public PacketHandler worldTrackerHandlerByKey() {
return wrapper -> {
EntityTracker tracker = tracker(wrapper.user());
String world = wrapper.get(Types.STRING, 1);
if (tracker.currentWorld() != null && !tracker.currentWorld().equals(world)) {
tracker.clearEntities();
}
tracker.setCurrentWorld(world);
};
}
/**
* Sets the mapped entity id and returns the unmapped entity type.
*
* @param wrapper packet wrapper
* @return unmapped (!) entity type
*/
protected EntityType trackAndMapEntity(PacketWrapper wrapper) {
int typeId = wrapper.get(Types.VAR_INT, 1);
EntityType entityType = typeFromId(typeId);
if (entityType == null) {
return null;
}
tracker(wrapper.user()).addEntity(wrapper.get(Types.VAR_INT, 0), entityType);
int mappedTypeId = newEntityId(entityType.getId());
if (typeId != mappedTypeId) {
wrapper.set(Types.VAR_INT, 1, mappedTypeId);
}
return entityType;
}
}
================================================
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java
================================================
/*
* This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards
* Copyright (C) 2016-2026 ViaVersion and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.viaversion.viabackwards.api.rewriters;
import com.google.common.base.Preconditions;
import com.viaversion.viabackwards.ViaBackwards;
import com.viaversion.viabackwards.api.BackwardsProtocol;
import com.viaversion.viabackwards.api.entities.storage.EntityReplacement;
import com.viaversion.viabackwards.api.entities.storage.WrappedEntityData;
import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.data.entity.EntityTracker;
import com.viaversion.viaversion.api.data.entity.StoredEntityData;
import com.viaversion.viaversion.api.data.entity.TrackedEntity;
import com.viaversion.viaversion.api.minecraft.ClientWorld;
import com.viaversion.viaversion.api.minecraft.Particle;
import com.viaversion.viaversion.api.minecraft.entities.EntityType;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityData;
import com.viaversion.viaversion.api.minecraft.entitydata.EntityDataType;
import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType;
import com.viaversion.viaversion.api.protocol.remapper.PacketHandler;
import com.viaversion.viaversion.api.type.Type;
import com.viaversion.viaversion.api.type.Types;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap;
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.gson.JsonElement;
import com.viaversion.viaversion.rewriter.EntityRewriter;
import com.viaversion.viaversion.rewriter.entitydata.EntityDataHandlerEvent;
import java.util.List;
import org.checkerframework.checker.nullness.qual.Nullable;
/**
* Entity rewriter base class.
*
* @see com.viaversion.viabackwards.api.rewriters.EntityRewriter
* @see LegacyEntityRewriter
*/
public abstract class EntityRewriterBase<C extends ClientboundPacketType, T extends BackwardsProtocol<C, ?, ?, ?>> extends EntityRewriter<C, T> {
private final Int2ObjectMap<EntityReplacement> entityDataMappings = new Int2ObjectOpenHashMap<>();
private final EntityDataType displayNameDataType;
private final EntityDataType displayVisibilityDataType;
private final int displayNameIndex;
private final int displayVisibilityIndex;
EntityRewriterBase(T protocol, EntityDataType displayNameDataType, int displayNameIndex,
EntityDataType displayVisibilityDataType, int displayVisibilityIndex) {
super(protocol, false);
this.displayNameDataType = displayNameDataType;
this.displayNameIndex = displayNameIndex;
this.displayVisibilityDataType = displayVisibilityDataType;
this.displayVisibilityIndex = displayVisibilityIndex;
}
@Override
public void handleEntityData(int entityId, List<EntityData> entityDataList, UserConnection connection) {
final TrackedEntity entity = tracker(connection).entity(entityId);
final boolean initialEntityData = !(entity != null && entity.hasSentEntityData());
super.handleEntityData(entityId, entityDataList, connection);
if (entity == null) {
return; // Don't handle untracked entities - basically always the fault of a plugin sending virtual entities through concurrency-unsafe handling
}
// Set the mapped entity name if there is no custom name set already
final EntityReplacement entityMapping = entityDataForType(entity.entityType());
final Object displayNameObject;
if (entityMapping != null && (displayNameObject = entityMapping.entityName()) != null) {
final EntityData displayName = getData(displayNameIndex, entityDataList);
if (initialEntityData) {
if (displayName == null) {
// Add it as new entity data
entityDataList.add(new EntityData(displayNameIndex, displayNameDataType, displayNameObject));
addDisplayVisibilityData(entityDataList);
} else if (displayName.getValue() == null || displayName.getValue().toString().isEmpty()) {
// Overwrite the existing null/empty display name
displayName.setValue(displayNameObject);
addDisplayVisibilityData(entityDataList);
}
} else if (displayName != null && (displayName.getValue() == null || displayName.getValue().toString().isEmpty())) {
// Overwrite null/empty display name
displayName.setValue(displayNameObject);
addDisplayVisibilityData(entityDataList);
}
}
// Add any other extra data for mapped entities
if (entityMapping != null && entityMapping.hasBaseData() && initialEntityData) {
entityMapping.defaultData().createData(new WrappedEntityData(entityDataList));
}
}
private void addDisplayVisibilityData(List<EntityData> entityDataList) {
if (alwaysShowOriginalMobName()) {
removeData(displayVisibilityIndex, entityDataList)
gitextract_ph8u3uww/
├── .editorconfig
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── dependabot.yml
│ └── workflows/
│ ├── build.yml
│ └── publish.yml
├── .gitignore
├── LICENSE
├── README.md
├── SECURITY.md
├── build-logic/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── kotlin/
│ ├── extensions.kt
│ ├── vb.base-conventions.gradle.kts
│ ├── vb.build-logic.gradle.kts
│ └── vb.shadow-conventions.gradle.kts
├── build.gradle.kts
├── bukkit/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── BukkitPlugin.java
│ │ ├── listener/
│ │ │ ├── DurabilitySync1_11.java
│ │ │ ├── FireExtinguish1_16.java
│ │ │ ├── ItemDropSync1_17.java
│ │ │ ├── LecternInteract1_14.java
│ │ │ ├── PlayerHurtSound1_12.java
│ │ │ └── SpearAttack1_21_11.java
│ │ └── provider/
│ │ └── BukkitAdvancementCriteriaProvider.java
│ └── resources/
│ └── plugin.yml
├── common/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── ViaBackwards.java
│ │ ├── ViaBackwardsConfig.java
│ │ ├── ViaBackwardsPlatformImpl.java
│ │ ├── api/
│ │ │ ├── BackwardsProtocol.java
│ │ │ ├── DialogStyleConfig.java
│ │ │ ├── ViaBackwardsConfig.java
│ │ │ ├── ViaBackwardsPlatform.java
│ │ │ ├── data/
│ │ │ │ ├── BackwardsMappingData.java
│ │ │ │ ├── BackwardsMappingDataLoader.java
│ │ │ │ ├── ItemMappings.java
│ │ │ │ ├── MappedItem.java
│ │ │ │ ├── MappedLegacyBlockItem.java
│ │ │ │ └── TranslatableMappings.java
│ │ │ ├── entities/
│ │ │ │ └── storage/
│ │ │ │ ├── EntityObjectData.java
│ │ │ │ ├── EntityPositionHandler.java
│ │ │ │ ├── EntityPositionStorage.java
│ │ │ │ ├── EntityReplacement.java
│ │ │ │ ├── PlayerPositionStorage.java
│ │ │ │ └── WrappedEntityData.java
│ │ │ └── rewriters/
│ │ │ ├── BackwardsItemRewriter.java
│ │ │ ├── BackwardsItemRewriterBase.java
│ │ │ ├── BackwardsRegistryRewriter.java
│ │ │ ├── BackwardsStructuredItemRewriter.java
│ │ │ ├── EnchantmentRewriter.java
│ │ │ ├── EntityRewriter.java
│ │ │ ├── EntityRewriterBase.java
│ │ │ ├── LegacyBlockItemRewriter.java
│ │ │ ├── LegacyEnchantmentRewriter.java
│ │ │ ├── LegacyEntityRewriter.java
│ │ │ ├── LegacySoundRewriter.java
│ │ │ ├── MapColorRewriter.java
│ │ │ ├── SoundRewriter.java
│ │ │ ├── StructuredEnchantmentRewriter.java
│ │ │ └── text/
│ │ │ ├── JsonNBTComponentRewriter.java
│ │ │ ├── NBTComponentRewriter.java
│ │ │ └── TranslatableRewriter.java
│ │ ├── item/
│ │ │ └── DataItemWithExtras.java
│ │ ├── protocol/
│ │ │ ├── registration/
│ │ │ │ ├── BackwardsRegistrations.java
│ │ │ │ └── RegistryRegistrations.java
│ │ │ ├── template/
│ │ │ │ ├── BlockItemPacketRewriter99_1.java
│ │ │ │ ├── ComponentRewriter99_1.java
│ │ │ │ ├── EntityPacketRewriter99_1.java
│ │ │ │ └── Protocol99_1To98_1.java
│ │ │ ├── v1_10to1_9_3/
│ │ │ │ ├── Protocol1_10To1_9_3.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_10.java
│ │ │ │ └── EntityPacketRewriter1_10.java
│ │ │ ├── v1_11_1to1_11/
│ │ │ │ ├── Protocol1_11_1To1_11.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── EntityPacketRewriter1_11_1.java
│ │ │ │ └── ItemPacketRewriter1_11_1.java
│ │ │ ├── v1_11to1_10/
│ │ │ │ ├── Protocol1_11To1_10.java
│ │ │ │ ├── data/
│ │ │ │ │ └── SplashPotionMappings1_10.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_11.java
│ │ │ │ │ ├── EntityPacketRewriter1_11.java
│ │ │ │ │ └── PlayerPacketRewriter1_11.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChestedHorseStorage.java
│ │ │ │ └── WindowTracker.java
│ │ │ ├── v1_12_1to1_12/
│ │ │ │ └── Protocol1_12_1To1_12.java
│ │ │ ├── v1_12_2to1_12_1/
│ │ │ │ ├── Protocol1_12_2To1_12_1.java
│ │ │ │ └── storage/
│ │ │ │ └── KeepAliveTracker.java
│ │ │ ├── v1_12to1_11_1/
│ │ │ │ ├── Protocol1_12To1_11_1.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BlockColors1_11_1.java
│ │ │ │ │ └── MapColorMappings1_11_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_12.java
│ │ │ │ │ ├── ComponentRewriter1_12.java
│ │ │ │ │ ├── EntityPacketRewriter1_12.java
│ │ │ │ │ └── SoundPacketRewriter1_12.java
│ │ │ │ └── storage/
│ │ │ │ ├── ParrotStorage.java
│ │ │ │ └── ShoulderTracker.java
│ │ │ ├── v1_13_1to1_13/
│ │ │ │ ├── Protocol1_13_1To1_13.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── CommandRewriter1_13_1.java
│ │ │ │ ├── EntityPacketRewriter1_13_1.java
│ │ │ │ ├── ItemPacketRewriter1_13_1.java
│ │ │ │ └── WorldPacketRewriter1_13_1.java
│ │ │ ├── v1_13_2to1_13_1/
│ │ │ │ ├── Protocol1_13_2To1_13_1.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── EntityPacketRewriter1_13_2.java
│ │ │ │ ├── ItemPacketRewriter1_13_2.java
│ │ │ │ └── WorldPacketRewriter1_13_2.java
│ │ │ ├── v1_13to1_12_2/
│ │ │ │ ├── Protocol1_13To1_12_2.java
│ │ │ │ ├── block_entity_handlers/
│ │ │ │ │ ├── BannerHandler.java
│ │ │ │ │ ├── BedHandler.java
│ │ │ │ │ ├── FlowerPotHandler.java
│ │ │ │ │ ├── PistonHandler.java
│ │ │ │ │ ├── SkullHandler.java
│ │ │ │ │ └── SpawnerHandler.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_13.java
│ │ │ │ │ ├── EntityIdMappings1_12_2.java
│ │ │ │ │ ├── EntityNameMappings1_12_2.java
│ │ │ │ │ ├── NamedSoundMappings1_12_2.java
│ │ │ │ │ ├── PaintingNames1_13.java
│ │ │ │ │ └── ParticleIdMappings1_12_2.java
│ │ │ │ ├── provider/
│ │ │ │ │ └── BackwardsBlockEntityProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_13.java
│ │ │ │ │ ├── EntityPacketRewriter1_13.java
│ │ │ │ │ ├── PlayerPacketRewriter1_13.java
│ │ │ │ │ └── SoundPacketRewriter1_13.java
│ │ │ │ └── storage/
│ │ │ │ ├── BackwardsBlockStorage.java
│ │ │ │ ├── NoteBlockStorage.java
│ │ │ │ ├── PlayerPositionStorage1_13.java
│ │ │ │ └── TabCompleteStorage.java
│ │ │ ├── v1_14_1to1_14/
│ │ │ │ ├── Protocol1_14_1To1_14.java
│ │ │ │ └── rewriter/
│ │ │ │ └── EntityPacketRewriter1_14_1.java
│ │ │ ├── v1_14_2to1_14_1/
│ │ │ │ └── Protocol1_14_2To1_14_1.java
│ │ │ ├── v1_14_3to1_14_2/
│ │ │ │ └── Protocol1_14_3To1_14_2.java
│ │ │ ├── v1_14_4to1_14_3/
│ │ │ │ └── Protocol1_14_4To1_14_3.java
│ │ │ ├── v1_14to1_13_2/
│ │ │ │ ├── Protocol1_14To1_13_2.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_14.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_14.java
│ │ │ │ │ ├── CommandRewriter1_14.java
│ │ │ │ │ ├── EntityPacketRewriter1_14.java
│ │ │ │ │ ├── PlayerPacketRewriter1_14.java
│ │ │ │ │ └── SoundPacketRewriter1_14.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChunkLightStorage.java
│ │ │ │ ├── DifficultyStorage.java
│ │ │ │ └── EntityPositionStorage1_14.java
│ │ │ ├── v1_15_1to1_15/
│ │ │ │ └── Protocol1_15_1To1_15.java
│ │ │ ├── v1_15_2to1_15_1/
│ │ │ │ └── Protocol1_15_2To1_15_1.java
│ │ │ ├── v1_15to1_14_4/
│ │ │ │ ├── Protocol1_15To1_14_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_15.java
│ │ │ │ │ └── EntityPacketRewriter1_15.java
│ │ │ │ └── storage/
│ │ │ │ └── ImmediateRespawnStorage.java
│ │ │ ├── v1_16_1to1_16/
│ │ │ │ └── Protocol1_16_1To1_16.java
│ │ │ ├── v1_16_2to1_16_1/
│ │ │ │ ├── Protocol1_16_2To1_16_1.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BiomeMappings1_16_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_16_2.java
│ │ │ │ │ ├── CommandRewriter1_16_2.java
│ │ │ │ │ └── EntityPacketRewriter1_16_2.java
│ │ │ │ └── storage/
│ │ │ │ └── BiomeStorage.java
│ │ │ ├── v1_16_3to1_16_2/
│ │ │ │ └── Protocol1_16_3To1_16_2.java
│ │ │ ├── v1_16_4to1_16_3/
│ │ │ │ ├── Protocol1_16_4To1_16_3.java
│ │ │ │ └── storage/
│ │ │ │ └── PlayerHandStorage.java
│ │ │ ├── v1_16to1_15_2/
│ │ │ │ ├── Protocol1_16To1_15_2.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_16.java
│ │ │ │ │ └── MapColorMappings1_15_2.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_16.java
│ │ │ │ │ ├── CommandRewriter1_16.java
│ │ │ │ │ ├── EntityPacketRewriter1_16.java
│ │ │ │ │ └── TranslatableRewriter1_16.java
│ │ │ │ └── storage/
│ │ │ │ ├── PlayerAttributesStorage.java
│ │ │ │ ├── PlayerSneakStorage.java
│ │ │ │ ├── WolfDataMaskStorage.java
│ │ │ │ └── WorldNameTracker.java
│ │ │ ├── v1_17_1to1_17/
│ │ │ │ ├── Protocol1_17_1To1_17.java
│ │ │ │ └── storage/
│ │ │ │ └── InventoryStateIds.java
│ │ │ ├── v1_17to1_16_4/
│ │ │ │ ├── Protocol1_17To1_16_4.java
│ │ │ │ ├── data/
│ │ │ │ │ └── MapColorMappings1_16_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_17.java
│ │ │ │ │ └── EntityPacketRewriter1_17.java
│ │ │ │ └── storage/
│ │ │ │ └── PlayerLastCursorItem.java
│ │ │ ├── v1_18_2to1_18/
│ │ │ │ ├── Protocol1_18_2To1_18.java
│ │ │ │ └── rewriter/
│ │ │ │ └── CommandRewriter1_18_2.java
│ │ │ ├── v1_18to1_17_1/
│ │ │ │ ├── Protocol1_18To1_17_1.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── BackwardsMappingData1_18.java
│ │ │ │ │ └── BlockEntityMappings1_17_1.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_18.java
│ │ │ │ └── EntityPacketRewriter1_18.java
│ │ │ ├── v1_19_1to1_19/
│ │ │ │ ├── Protocol1_19_1To1_19.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ └── EntityPacketRewriter1_19_1.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChatRegistryStorage.java
│ │ │ │ ├── ChatRegistryStorage1_19_1.java
│ │ │ │ ├── NonceStorage.java
│ │ │ │ └── ReceivedMessagesStorage.java
│ │ │ ├── v1_19_3to1_19_1/
│ │ │ │ ├── Protocol1_19_3To1_19_1.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19_3.java
│ │ │ │ │ └── EntityPacketRewriter1_19_3.java
│ │ │ │ └── storage/
│ │ │ │ ├── ChatSessionStorage.java
│ │ │ │ ├── ChatTypeStorage1_19_3.java
│ │ │ │ └── NonceStorage.java
│ │ │ ├── v1_19_4to1_19_3/
│ │ │ │ ├── Protocol1_19_4To1_19_3.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19_4.java
│ │ │ │ │ └── EntityPacketRewriter1_19_4.java
│ │ │ │ └── storage/
│ │ │ │ ├── EntityTracker1_19_4.java
│ │ │ │ └── LinkedEntityStorage.java
│ │ │ ├── v1_19to1_18_2/
│ │ │ │ ├── Protocol1_19To1_18_2.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_19.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_19.java
│ │ │ │ │ ├── CommandRewriter1_19.java
│ │ │ │ │ └── EntityPacketRewriter1_19.java
│ │ │ │ └── storage/
│ │ │ │ ├── DimensionRegistryStorage.java
│ │ │ │ ├── EntityTracker1_19.java
│ │ │ │ ├── LastDeathPosition.java
│ │ │ │ ├── NonceStorage.java
│ │ │ │ └── StoredPainting.java
│ │ │ ├── v1_20_2to1_20/
│ │ │ │ ├── Protocol1_20_2To1_20.java
│ │ │ │ ├── provider/
│ │ │ │ │ └── AdvancementCriteriaProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_2.java
│ │ │ │ │ ├── BlockRewriter1_20_2.java
│ │ │ │ │ └── EntityPacketRewriter1_20_2.java
│ │ │ │ └── storage/
│ │ │ │ └── ConfigurationPacketStorage.java
│ │ │ ├── v1_20_3to1_20_2/
│ │ │ │ ├── Protocol1_20_3To1_20_2.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_3.java
│ │ │ │ │ ├── BlockPacketRewriter1_20_3.java
│ │ │ │ │ └── EntityPacketRewriter1_20_3.java
│ │ │ │ └── storage/
│ │ │ │ ├── ResourcepackIDStorage.java
│ │ │ │ └── SpawnPositionStorage.java
│ │ │ ├── v1_20_5to1_20_3/
│ │ │ │ ├── Protocol1_20_5To1_20_3.java
│ │ │ │ ├── Types1_20_3.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── NoopTransferProvider.java
│ │ │ │ │ └── TransferProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20_5.java
│ │ │ │ │ ├── BlockPacketRewriter1_20_5.java
│ │ │ │ │ ├── ComponentRewriter1_20_5.java
│ │ │ │ │ └── EntityPacketRewriter1_20_5.java
│ │ │ │ └── storage/
│ │ │ │ ├── CookieStorage.java
│ │ │ │ ├── RegistryDataStorage.java
│ │ │ │ └── SecureChatStorage.java
│ │ │ ├── v1_20to1_19_4/
│ │ │ │ ├── Protocol1_20To1_19_4.java
│ │ │ │ ├── data/
│ │ │ │ │ └── BackwardsMappingData1_20.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_20.java
│ │ │ │ │ ├── BlockPacketRewriter1_20.java
│ │ │ │ │ └── EntityPacketRewriter1_20.java
│ │ │ │ └── storage/
│ │ │ │ └── BackSignEditStorage.java
│ │ │ ├── v1_21_11to1_21_9/
│ │ │ │ ├── Protocol1_21_11To1_21_9.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_11.java
│ │ │ │ │ ├── ComponentRewriter1_21_11.java
│ │ │ │ │ └── EntityPacketRewriter1_21_11.java
│ │ │ │ └── storage/
│ │ │ │ └── GameTimeStorage.java
│ │ │ ├── v1_21_2to1_21/
│ │ │ │ ├── Protocol1_21_2To1_21.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_2.java
│ │ │ │ │ ├── ComponentRewriter1_21_2.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_2.java
│ │ │ │ │ └── ParticleRewriter1_21_2.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── InventoryStateIdStorage.java
│ │ │ │ │ ├── ItemTagStorage.java
│ │ │ │ │ ├── PlayerStorage.java
│ │ │ │ │ ├── RecipeStorage.java
│ │ │ │ │ └── SignStorage.java
│ │ │ │ └── task/
│ │ │ │ └── PlayerPacketsTickTask.java
│ │ │ ├── v1_21_4to1_21_2/
│ │ │ │ ├── Protocol1_21_4To1_21_2.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_21_4.java
│ │ │ │ ├── ComponentRewriter1_21_4.java
│ │ │ │ ├── EntityPacketRewriter1_21_4.java
│ │ │ │ └── ParticleRewriter1_21_4.java
│ │ │ ├── v1_21_5to1_21_4/
│ │ │ │ ├── Protocol1_21_5To1_21_4.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_5.java
│ │ │ │ │ ├── BlockPacketRewriter1_21_5.java
│ │ │ │ │ ├── ComponentRewriter1_21_5.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_5.java
│ │ │ │ │ └── RegistryDataRewriter1_21_5.java
│ │ │ │ └── storage/
│ │ │ │ ├── HashedItemConverterStorage.java
│ │ │ │ └── HorseDataStorage.java
│ │ │ ├── v1_21_6to1_21_5/
│ │ │ │ ├── Protocol1_21_6To1_21_5.java
│ │ │ │ ├── data/
│ │ │ │ │ ├── Button.java
│ │ │ │ │ ├── Dialog.java
│ │ │ │ │ ├── Template.java
│ │ │ │ │ ├── input/
│ │ │ │ │ │ ├── BooleanInput.java
│ │ │ │ │ │ ├── Input.java
│ │ │ │ │ │ ├── NumberRangeInput.java
│ │ │ │ │ │ ├── SingleOptionInput.java
│ │ │ │ │ │ └── TextInput.java
│ │ │ │ │ └── widget/
│ │ │ │ │ ├── ItemWidget.java
│ │ │ │ │ ├── TextWidget.java
│ │ │ │ │ └── Widget.java
│ │ │ │ ├── provider/
│ │ │ │ │ ├── ChestDialogViewProvider.java
│ │ │ │ │ └── DialogViewProvider.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_6.java
│ │ │ │ │ ├── ComponentRewriter1_21_6.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_6.java
│ │ │ │ │ └── RegistryDataRewriter1_21_6.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── ChestDialogStorage.java
│ │ │ │ │ ├── ClickEvents.java
│ │ │ │ │ ├── RegistryAndTags.java
│ │ │ │ │ └── ServerLinks.java
│ │ │ │ └── task/
│ │ │ │ └── ChestDialogViewTask.java
│ │ │ ├── v1_21_7to1_21_6/
│ │ │ │ ├── Protocol1_21_7To1_21_6.java
│ │ │ │ └── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter1_21_7.java
│ │ │ │ └── EntityPacketRewriter1_21_7.java
│ │ │ ├── v1_21_9to1_21_7/
│ │ │ │ ├── Protocol1_21_9To1_21_7.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21_9.java
│ │ │ │ │ ├── ComponentRewriter1_21_9.java
│ │ │ │ │ ├── EntityPacketRewriter1_21_9.java
│ │ │ │ │ ├── ParticleRewriter1_21_9.java
│ │ │ │ │ └── RegistryDataRewriter1_21_9.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── DimensionScaleStorage.java
│ │ │ │ │ ├── MannequinData.java
│ │ │ │ │ └── PlayerRotationStorage.java
│ │ │ │ └── tracker/
│ │ │ │ └── EntityTracker1_21_9.java
│ │ │ ├── v1_21to1_20_5/
│ │ │ │ ├── Protocol1_21To1_20_5.java
│ │ │ │ ├── rewriter/
│ │ │ │ │ ├── BlockItemPacketRewriter1_21.java
│ │ │ │ │ ├── ComponentRewriter1_21.java
│ │ │ │ │ └── EntityPacketRewriter1_21.java
│ │ │ │ └── storage/
│ │ │ │ ├── EnchantmentsPaintingsStorage.java
│ │ │ │ ├── OpenScreenStorage.java
│ │ │ │ └── PlayerRotationStorage.java
│ │ │ ├── v1_9_1to1_9/
│ │ │ │ └── Protocol1_9_1To1_9.java
│ │ │ ├── v1_9_3to1_9_1/
│ │ │ │ ├── Protocol1_9_3To1_9_1.java
│ │ │ │ └── data/
│ │ │ │ └── BlockEntity1_9_1.java
│ │ │ └── v26_1to1_21_11/
│ │ │ ├── Protocol26_1To1_21_11.java
│ │ │ ├── rewriter/
│ │ │ │ ├── BlockItemPacketRewriter26_1.java
│ │ │ │ ├── ComponentRewriter26_1.java
│ │ │ │ └── EntityPacketRewriter26_1.java
│ │ │ └── storage/
│ │ │ ├── DayTimeStorage.java
│ │ │ └── GameModeStorage.java
│ │ └── utils/
│ │ ├── BackwardsProtocolLogger.java
│ │ ├── ChatUtil.java
│ │ └── VelocityUtil.java
│ ├── java-templates/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ └── utils/
│ │ └── VersionInfo.java
│ └── resources/
│ └── assets/
│ └── viabackwards/
│ ├── config.yml
│ └── data/
│ ├── biome-mappings.json
│ ├── chat-types-1.19.1.nbt
│ ├── item-mappings-1.10.json
│ ├── item-mappings-1.11.1.json
│ ├── item-mappings-1.11.json
│ ├── item-mappings-1.12.json
│ ├── mappings-1.10to1.9.4.nbt
│ ├── mappings-1.11to1.10.nbt
│ ├── mappings-1.12to1.11.nbt
│ ├── mappings-1.13.2to1.13.nbt
│ ├── mappings-1.13to1.12.nbt
│ ├── mappings-1.14to1.13.2.nbt
│ ├── mappings-1.15to1.14.nbt
│ ├── mappings-1.16.2to1.16.nbt
│ ├── mappings-1.16to1.15.nbt
│ ├── mappings-1.17to1.16.2.nbt
│ ├── mappings-1.18to1.17.nbt
│ ├── mappings-1.19.3to1.19.nbt
│ ├── mappings-1.19.4to1.19.3.nbt
│ ├── mappings-1.19to1.18.nbt
│ ├── mappings-1.20.2to1.20.nbt
│ ├── mappings-1.20.3to1.20.2.nbt
│ ├── mappings-1.20.5to1.20.3.nbt
│ ├── mappings-1.20to1.19.4.nbt
│ ├── mappings-1.21.11to1.21.9.nbt
│ ├── mappings-1.21.2to1.21.nbt
│ ├── mappings-1.21.4to1.21.2.nbt
│ ├── mappings-1.21.5to1.21.4.nbt
│ ├── mappings-1.21.6to1.21.5.nbt
│ ├── mappings-1.21.7to1.21.6.nbt
│ ├── mappings-1.21.9to1.21.7.nbt
│ ├── mappings-1.21to1.20.5.nbt
│ ├── mappings-26.1to1.21.11.nbt
│ ├── translation-mappings.json
│ └── trim_pattern-1.19.4.nbt
├── fabric/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── viaversion/
│ │ └── viabackwards/
│ │ ├── ViaFabricAddon.java
│ │ └── fabric/
│ │ └── util/
│ │ └── LoggerWrapper.java
│ └── resources/
│ └── fabric.mod.json
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── settings.gradle.kts
├── sponge/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── resources/
│ └── META-INF/
│ └── sponge_plugins.json
├── universal/
│ └── build.gradle.kts
└── velocity/
├── build.gradle.kts
└── src/
└── main/
└── java/
└── com/
└── viaversion/
└── viabackwards/
└── VelocityPlugin.java
SYMBOL INDEX (2075 symbols across 299 files)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java
class BukkitPlugin (line 36) | public class BukkitPlugin extends JavaPlugin implements ViaBackwardsPlat...
method BukkitPlugin (line 38) | public BukkitPlugin() {
method onEnable (line 42) | @Override
method enable (line 52) | @Override
method disable (line 82) | @Override
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java
class DurabilitySync1_11 (line 30) | public class DurabilitySync1_11 extends ViaBukkitListener {
method DurabilitySync1_11 (line 32) | public DurabilitySync1_11(final BukkitPlugin plugin) {
method onBlockBreak (line 36) | @EventHandler(priority = EventPriority.MONITOR)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java
class FireExtinguish1_16 (line 31) | public class FireExtinguish1_16 extends ViaBukkitListener {
method FireExtinguish1_16 (line 33) | public FireExtinguish1_16(BukkitPlugin plugin) {
method onFireExtinguish (line 37) | @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java
class ItemDropSync1_17 (line 30) | public class ItemDropSync1_17 extends ViaBukkitListener {
method ItemDropSync1_17 (line 32) | public ItemDropSync1_17(final BukkitPlugin plugin) {
method onItemDrop (line 36) | @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java
class LecternInteract1_14 (line 33) | public class LecternInteract1_14 extends ViaBukkitListener {
method LecternInteract1_14 (line 35) | public LecternInteract1_14(BukkitPlugin plugin) {
method onLecternInteract (line 39) | @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java
class PlayerHurtSound1_12 (line 31) | public class PlayerHurtSound1_12 extends ViaBukkitListener {
method PlayerHurtSound1_12 (line 33) | public PlayerHurtSound1_12(BukkitPlugin plugin) {
method onFireDamage (line 37) | @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java
class SpearAttack1_21_11 (line 29) | public class SpearAttack1_21_11 extends ViaBukkitListener {
method SpearAttack1_21_11 (line 31) | public SpearAttack1_21_11(final BukkitPlugin plugin) {
method onBlockBreak (line 35) | @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
FILE: bukkit/src/main/java/com/viaversion/viabackwards/provider/BukkitAdvancementCriteriaProvider.java
class BukkitAdvancementCriteriaProvider (line 25) | public final class BukkitAdvancementCriteriaProvider extends Advancement...
method getCriteria (line 29) | @Override
FILE: common/src/main/java-templates/com/viaversion/viabackwards/utils/VersionInfo.java
class VersionInfo (line 20) | public final class VersionInfo {
method getVersion (line 25) | public static String getVersion() {
method getImplementationVersion (line 29) | public static String getImplementationVersion() {
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwards.java
class ViaBackwards (line 25) | public final class ViaBackwards {
method init (line 30) | public static void init(ViaBackwardsPlatform platform, ViaBackwardsCon...
method getPlatform (line 37) | public static ViaBackwardsPlatform getPlatform() {
method getConfig (line 41) | public static ViaBackwardsConfig getConfig() {
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwardsConfig.java
class ViaBackwardsConfig (line 32) | public class ViaBackwardsConfig extends Config implements com.viaversion...
method ViaBackwardsConfig (line 52) | public ViaBackwardsConfig(File configFile, Logger logger) {
method reload (line 56) | @Override
method loadFields (line 62) | private void loadFields() {
method loadDialogStyleConfig (line 82) | private DialogStyleConfig loadDialogStyleConfig(final ConfigSection se...
method getString (line 100) | protected String getString(final ConfigSection section, final String k...
method addCustomEnchantsToLore (line 104) | @Override
method addTeamColorTo1_13Prefix (line 109) | @Override
method isFix1_13FacePlayer (line 114) | @Override
method fix1_13FormattedInventoryTitle (line 119) | @Override
method alwaysShowOriginalMobName (line 124) | @Override
method handlePingsAsInvAcknowledgements (line 129) | @Override
method bedrockAtY0 (line 134) | @Override
method sculkShriekerToCryingObsidian (line 139) | @Override
method scaffoldingToWater (line 144) | @Override
method mapDarknessEffect (line 149) | @Override
method mapCustomModelData (line 154) | @Override
method mapDisplayEntities (line 159) | @Override
method suppressEmulationWarnings (line 164) | @Override
method dialogsViaChests (line 169) | @Override
method dialogStyleConfig (line 174) | @Override
method codeOfConductAsDialog (line 179) | @Override
method passOriginalItemNameToResourcePacks (line 184) | @Override
method getDefaultConfigURL (line 189) | @Override
method getDefaultConfigInputStream (line 194) | @Override
method handleConfig (line 199) | @Override
method getUnsupportedOptions (line 203) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/ViaBackwardsPlatformImpl.java
class ViaBackwardsPlatformImpl (line 25) | public class ViaBackwardsPlatformImpl implements ViaBackwardsPlatform {
method ViaBackwardsPlatformImpl (line 29) | public ViaBackwardsPlatformImpl() {
method getLogger (line 35) | @Override
method disable (line 40) | @Override
method getDataFolder (line 44) | @Override
method isOutdated (line 49) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/BackwardsProtocol.java
class BackwardsProtocol (line 31) | public abstract class BackwardsProtocol<CU extends ClientboundPacketType...
method BackwardsProtocol (line 34) | @Deprecated
method BackwardsProtocol (line 38) | protected BackwardsProtocol(@Nullable Class<CU> oldClientboundPacketEn...
method applySharedRegistrations (line 43) | @Override
method createLogger (line 49) | @Override
method dependsOn (line 54) | @Override
method getMappingData (line 59) | @Override
method getRegistryDataRewriter (line 64) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsConfig.java
type ViaBackwardsConfig (line 22) | public interface ViaBackwardsConfig extends Config {
method addCustomEnchantsToLore (line 29) | boolean addCustomEnchantsToLore();
method addTeamColorTo1_13Prefix (line 36) | boolean addTeamColorTo1_13Prefix();
method isFix1_13FacePlayer (line 43) | boolean isFix1_13FacePlayer();
method fix1_13FormattedInventoryTitle (line 50) | boolean fix1_13FormattedInventoryTitle();
method alwaysShowOriginalMobName (line 57) | boolean alwaysShowOriginalMobName();
method handlePingsAsInvAcknowledgements (line 65) | boolean handlePingsAsInvAcknowledgements();
method bedrockAtY0 (line 72) | boolean bedrockAtY0();
method sculkShriekerToCryingObsidian (line 79) | boolean sculkShriekerToCryingObsidian();
method scaffoldingToWater (line 86) | boolean scaffoldingToWater();
method mapDarknessEffect (line 93) | boolean mapDarknessEffect();
method mapCustomModelData (line 100) | boolean mapCustomModelData();
method mapDisplayEntities (line 107) | boolean mapDisplayEntities();
method suppressEmulationWarnings (line 114) | boolean suppressEmulationWarnings();
method dialogsViaChests (line 121) | boolean dialogsViaChests();
method dialogStyleConfig (line 128) | DialogStyleConfig dialogStyleConfig();
method codeOfConductAsDialog (line 135) | boolean codeOfConductAsDialog();
method passOriginalItemNameToResourcePacks (line 144) | boolean passOriginalItemNameToResourcePacks();
FILE: common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java
type ViaBackwardsPlatform (line 81) | public interface ViaBackwardsPlatform {
method init (line 85) | default void init(final File configFile) {
method init (line 92) | default void init(final com.viaversion.viabackwards.api.ViaBackwardsCo...
method enable (line 172) | default void enable() {
method getLogger (line 188) | Logger getLogger();
method isOutdated (line 190) | default boolean isOutdated() {
method disable (line 207) | void disable();
method getDataFolder (line 214) | File getDataFolder();
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingData.java
class BackwardsMappingData (line 43) | public class BackwardsMappingData extends MappingDataBase {
method BackwardsMappingData (line 50) | public BackwardsMappingData(final String unmappedVersion, final String...
method BackwardsMappingData (line 54) | public BackwardsMappingData(final String unmappedVersion, final String...
method loadExtras (line 60) | @Override
method loadNameByStringMappings (line 86) | private @Nullable Map<String, String> loadNameByStringMappings(final C...
method loadNameByIdMappings (line 100) | private @Nullable Int2ObjectMap<String> loadNameByIdMappings(final Com...
method loadBiMappings (line 114) | @Override
method getNewItemId (line 133) | @Override
method getNewBlockId (line 139) | @Override
method getOldItemId (line 145) | @Override
method getNewAttributeId (line 151) | @Override
method getMappedItem (line 156) | public @Nullable MappedItem getMappedItem(final int id) {
method getMappedNamedSound (line 160) | public @Nullable String getMappedNamedSound(final String id) {
method mappedEntityName (line 164) | public @Nullable String mappedEntityName(final String entityName) {
method mappedEnchantmentName (line 172) | public @Nullable String mappedEnchantmentName(final int enchantmentId) {
method getBackwardsItemMappings (line 180) | public @Nullable Int2ObjectMap<MappedItem> getBackwardsItemMappings() {
method getViaVersionProtocolClass (line 184) | public @Nullable Class<? extends Protocol<?, ?, ?, ?>> getViaVersionPr...
method getLogger (line 188) | @Override
method readMappingsFile (line 193) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingDataLoader.java
class BackwardsMappingDataLoader (line 30) | public class BackwardsMappingDataLoader extends MappingDataLoader {
method BackwardsMappingDataLoader (line 34) | public BackwardsMappingDataLoader(final Class<?> dataLoaderClass, fina...
method loadNBTFromDir (line 45) | public @Nullable CompoundTag loadNBTFromDir(final String name) {
method mergeTags (line 62) | private CompoundTag mergeTags(final CompoundTag original, final Compou...
method getLogger (line 78) | @Override
method getDataFolder (line 83) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/ItemMappings.java
class ItemMappings (line 23) | public final class ItemMappings extends BiMappingsBase {
method ItemMappings (line 25) | private ItemMappings(final Mappings mappings, final Mappings inverse) {
method of (line 29) | public static ItemMappings of(final Mappings mappings, final Mappings ...
method setNewId (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/MappedItem.java
class MappedItem (line 24) | public class MappedItem {
method MappedItem (line 31) | public MappedItem(final int id, final String name) {
method MappedItem (line 35) | public MappedItem(final int id, final String name, @Nullable final Int...
method id (line 42) | public int id() {
method jsonName (line 46) | public String jsonName() {
method tagName (line 50) | public Tag tagName() {
method customModelData (line 54) | public @Nullable Integer customModelData() {
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/MappedLegacyBlockItem.java
class MappedLegacyBlockItem (line 24) | public class MappedLegacyBlockItem {
method MappedLegacyBlockItem (line 32) | public MappedLegacyBlockItem(int id) {
method MappedLegacyBlockItem (line 36) | public MappedLegacyBlockItem(int id, short data, @Nullable String name...
method getId (line 43) | public int getId() {
method getData (line 47) | public short getData() {
method getName (line 51) | public String getName() {
method getBlock (line 55) | public IdAndData getBlock() {
method hasBlockEntityHandler (line 59) | public boolean hasBlockEntityHandler() {
method getBlockEntityHandler (line 63) | public @Nullable BlockEntityHandler getBlockEntityHandler() {
method setBlockEntityHandler (line 67) | public void setBlockEntityHandler(@Nullable BlockEntityHandler blockEn...
type BlockEntityHandler (line 71) | @FunctionalInterface
method handleCompoundTag (line 74) | void handleCompoundTag(int block, CompoundTag tag);
type Type (line 77) | public enum Type {
method Type (line 85) | Type(final String name) {
method getName (line 89) | public String getName() {
FILE: common/src/main/java/com/viaversion/viabackwards/api/data/TranslatableMappings.java
class TranslatableMappings (line 28) | public final class TranslatableMappings {
method loadTranslatables (line 32) | public static void loadTranslatables() {
method fillTranslatables (line 39) | public static void fillTranslatables(final JsonObject jsonObject, fina...
method translatablesFor (line 49) | public static Map<String, String> translatablesFor(final Protocol<?, ?...
method translatablesFor (line 57) | public static Map<String, String> translatablesFor(final String versio...
method getTranslatableMappings (line 66) | public static @Nullable Map<String, String> getTranslatableMappings(fi...
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityObjectData.java
class EntityObjectData (line 22) | public class EntityObjectData extends EntityReplacement {
method EntityObjectData (line 25) | public EntityObjectData(BackwardsProtocol<?, ?, ?, ?> protocol, String...
method isObjectType (line 30) | @Override
method objectData (line 35) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionHandler.java
class EntityPositionHandler (line 29) | public class EntityPositionHandler {
method EntityPositionHandler (line 37) | public EntityPositionHandler(EntityRewriterBase<?, ?> entityRewriter,
method cacheEntityPosition (line 44) | public void cacheEntityPosition(PacketWrapper wrapper, boolean create,...
method cacheEntityPosition (line 49) | public void cacheEntityPosition(PacketWrapper wrapper, double x, doubl...
method cacheEntityPosition (line 53) | public void cacheEntityPosition(PacketWrapper wrapper, int entityId, d...
method getStorage (line 88) | public EntityPositionStorage getStorage(UserConnection user, int entit...
method writeFacingAngles (line 98) | public static void writeFacingAngles(PacketWrapper wrapper, double x, ...
method writeFacingDegrees (line 113) | public static void writeFacingDegrees(PacketWrapper wrapper, double x,...
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionStorage.java
class EntityPositionStorage (line 20) | public abstract class EntityPositionStorage {
method x (line 25) | public double x() {
method y (line 29) | public double y() {
method z (line 33) | public double z() {
method setPosition (line 37) | public void setPosition(double x, double y, double z) {
method addRelativePosition (line 43) | public void addRelativePosition(double relX, double relY, double relZ) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityReplacement.java
class EntityReplacement (line 28) | public class EntityReplacement {
method EntityReplacement (line 36) | public EntityReplacement(BackwardsProtocol<?, ?, ?, ?> protocol, Entit...
method EntityReplacement (line 40) | public EntityReplacement(BackwardsProtocol<?, ?, ?, ?> protocol, Strin...
method jsonName (line 47) | public EntityReplacement jsonName() {
method tagName (line 52) | public EntityReplacement tagName() {
method plainName (line 57) | public EntityReplacement plainName() {
method spawnEntityData (line 62) | public EntityReplacement spawnEntityData(EntityDataCreator handler) {
method hasBaseData (line 67) | public boolean hasBaseData() {
method typeId (line 71) | public int typeId() {
method entityName (line 78) | public @Nullable Object entityName() {
method replacementId (line 96) | public int replacementId() {
method defaultData (line 100) | public @Nullable EntityDataCreator defaultData() {
method isObjectType (line 104) | public boolean isObjectType() {
method objectData (line 108) | public int objectData() {
method toString (line 112) | @Override
type EntityDataCreator (line 124) | @FunctionalInterface
method createData (line 127) | void createData(WrappedEntityData storage);
type ComponentType (line 130) | private enum ComponentType {
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/PlayerPositionStorage.java
class PlayerPositionStorage (line 22) | public abstract class PlayerPositionStorage implements StorableObject {
method PlayerPositionStorage (line 27) | protected PlayerPositionStorage() {
method x (line 30) | public double x() {
method y (line 34) | public double y() {
method z (line 38) | public double z() {
method setX (line 42) | public void setX(final double x) {
method setY (line 46) | public void setY(final double y) {
method setZ (line 50) | public void setZ(final double z) {
method setPosition (line 54) | public void setPosition(double x, double y, double z) {
method addRelativePosition (line 60) | public void addRelativePosition(double relX, double relY, double relZ) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/entities/storage/WrappedEntityData.java
method has (line 27) | public boolean has(EntityData data) {
method remove (line 31) | public void remove(EntityData data) {
method remove (line 35) | public void remove(int index) {
method add (line 39) | public void add(EntityData data) {
method get (line 43) | public @Nullable EntityData get(int index) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriter.java
class BackwardsItemRewriter (line 39) | public class BackwardsItemRewriter<C extends ClientboundPacketType, S ex...
method BackwardsItemRewriter (line 42) | public BackwardsItemRewriter(T protocol, Type<Item> itemType, Type<Ite...
method BackwardsItemRewriter (line 46) | public BackwardsItemRewriter(T protocol, Type<Item> itemType, Type<Ite...
method handleItemToClient (line 50) | @Override
method handleItemToServer (line 131) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriterBase.java
class BackwardsItemRewriterBase (line 33) | public abstract class BackwardsItemRewriterBase<C extends ClientboundPac...
method BackwardsItemRewriterBase (line 38) | protected BackwardsItemRewriterBase(T protocol, Type<Item> itemType, T...
method BackwardsItemRewriterBase (line 43) | protected BackwardsItemRewriterBase(T protocol, Type<Item> itemType, T...
method handleItemToServer (line 47) | @Override
method hasBackupTag (line 56) | protected boolean hasBackupTag(CompoundTag tag, String tagName) {
method saveStringTag (line 60) | protected void saveStringTag(CompoundTag tag, StringTag original, Stri...
method saveListTag (line 68) | protected void saveListTag(CompoundTag tag, ListTag<?> original, Strin...
method restoreDisplayTag (line 76) | protected void restoreDisplayTag(Item item) {
method restoreStringTag (line 93) | protected void restoreStringTag(CompoundTag tag, String tagName) {
method restoreListTag (line 100) | protected void restoreListTag(CompoundTag tag, String tagName) {
method nbtTagName (line 107) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsRegistryRewriter.java
class BackwardsRegistryRewriter (line 27) | public class BackwardsRegistryRewriter extends RegistryDataRewriter {
method BackwardsRegistryRewriter (line 31) | public BackwardsRegistryRewriter(final BackwardsProtocol<?, ?, ?, ?> p...
method handle (line 36) | @Override
method updateJukeboxSongs (line 52) | @Override
method updateBiomeEffects (line 63) | private void updateBiomeEffects(final CompoundTag effects) {
method updateSound (line 70) | private void updateSound(final CompoundTag tag, final String name) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java
class BackwardsStructuredItemRewriter (line 52) | public class BackwardsStructuredItemRewriter<C extends ClientboundPacket...
method BackwardsStructuredItemRewriter (line 60) | public BackwardsStructuredItemRewriter(T protocol) {
method backupInconvertibleData (line 65) | @Override
method addCustomModelData (line 95) | private void addCustomModelData(final Item item, final boolean addOrig...
method restoreBackupData (line 122) | @Override
method saveListTag (line 150) | protected void saveListTag(CompoundTag tag, ListTag<?> original, Strin...
method removeListTag (line 158) | public <T extends Tag> @Nullable ListTag<T> removeListTag(CompoundTag ...
method saveGenericTagList (line 169) | protected void saveGenericTagList(CompoundTag tag, List<Tag> original,...
method removeGenericTagList (line 181) | protected List<Tag> removeGenericTagList(CompoundTag tag, String name) {
method holderSetToTag (line 192) | protected Tag holderSetToTag(final HolderSet set) {
method restoreHolderSet (line 200) | protected HolderSet restoreHolderSet(final CompoundTag tag, final Stri...
method holderToTag (line 215) | protected <V> Tag holderToTag(final Holder<V> holder, final BiConsumer...
method eitherHolderToTag (line 225) | protected <V> Tag eitherHolderToTag(final EitherHolder<V> holder, fina...
method saveEitherHolderData (line 233) | protected <V> void saveEitherHolderData(final StructuredDataKey<Either...
method saveHolderData (line 240) | protected <V> void saveHolderData(final StructuredDataKey<Holder<V>> k...
method restoreHolder (line 247) | protected <V> Holder<V> restoreHolder(final CompoundTag tag, final Str...
method restoreEitherHolder (line 262) | protected <V> EitherHolder<V> restoreEitherHolder(final CompoundTag ta...
method restoreHolderData (line 275) | protected <V> void restoreHolderData(final StructuredDataKey<Holder<V>...
method saveStringData (line 281) | protected void saveStringData(final StructuredDataKey<String> key, fin...
method restoreStringData (line 288) | protected void restoreStringData(final StructuredDataKey<String> key, ...
method saveKeyData (line 295) | protected void saveKeyData(final StructuredDataKey<Key> key, final Str...
method restoreKeyData (line 302) | protected void restoreKeyData(final StructuredDataKey<Key> key, final ...
method saveIntData (line 309) | protected void saveIntData(final StructuredDataKey<Integer> key, final...
method restoreIntData (line 316) | protected void restoreIntData(final StructuredDataKey<Integer> key, fi...
method saveFloatData (line 323) | protected void saveFloatData(final StructuredDataKey<Float> key, final...
method restoreFloatData (line 330) | protected void restoreFloatData(final StructuredDataKey<Float> key, fi...
method saveSoundEventHolder (line 337) | protected void saveSoundEventHolder(final CompoundTag tag, final Holde...
method saveSoundEvent (line 341) | protected void saveSoundEvent(final SoundEvent soundEvent, final Compo...
method restoreSoundEventHolder (line 348) | protected Holder<SoundEvent> restoreSoundEventHolder(final CompoundTag...
method restoreSoundEventHolder (line 352) | protected Holder<SoundEvent> restoreSoundEventHolder(final CompoundTag...
method nbtTagName (line 360) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EnchantmentRewriter.java
class EnchantmentRewriter (line 36) | public class EnchantmentRewriter {
method EnchantmentRewriter (line 44) | public EnchantmentRewriter(BackwardsItemRewriter<?, ?, ?> itemRewriter...
method EnchantmentRewriter (line 49) | public EnchantmentRewriter(BackwardsItemRewriter<?, ?, ?> itemRewriter) {
method registerEnchantment (line 53) | public void registerEnchantment(String key, String replacementLore) {
method handleToClient (line 57) | public void handleToClient(Item item) {
method handleToServer (line 69) | public void handleToServer(Item item) {
method rewriteEnchantmentsToClient (line 81) | public void rewriteEnchantmentsToClient(CompoundTag tag, boolean store...
method rewriteEnchantmentsToServer (line 146) | public void rewriteEnchantmentsToServer(CompoundTag tag, boolean store...
method getRomanNumber (line 152) | public static String getRomanNumber(int number) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java
class EntityRewriter (line 30) | public abstract class EntityRewriter<C extends ClientboundPacketType, T ...
method EntityRewriter (line 32) | protected EntityRewriter(T protocol) {
method EntityRewriter (line 36) | protected EntityRewriter(T protocol, EntityDataType displayType, Entit...
method registerTrackerWithData (line 40) | @Override
method registerTrackerWithData1_19 (line 56) | @Override
method getSpawnTrackerWithDataHandler (line 73) | public PacketHandler getSpawnTrackerWithDataHandler() {
method getSpawnTrackerWithDataHandler1_19 (line 84) | public PacketHandler getSpawnTrackerWithDataHandler1_19() {
method registerTracker (line 99) | @Override
method worldTrackerHandlerByKey (line 114) | public PacketHandler worldTrackerHandlerByKey() {
method trackAndMapEntity (line 131) | protected EntityType trackAndMapEntity(PacketWrapper wrapper) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java
class EntityRewriterBase (line 52) | public abstract class EntityRewriterBase<C extends ClientboundPacketType...
method EntityRewriterBase (line 59) | EntityRewriterBase(T protocol, EntityDataType displayNameDataType, int...
method handleEntityData (line 68) | @Override
method addDisplayVisibilityData (line 107) | private void addDisplayVisibilityData(List<EntityData> entityDataList) {
method getDisplayVisibilityDataValue (line 114) | protected Object getDisplayVisibilityDataValue() {
method alwaysShowOriginalMobName (line 118) | protected boolean alwaysShowOriginalMobName() {
method getData (line 122) | protected @Nullable EntityData getData(int dataIndex, List<EntityData>...
method removeData (line 131) | protected void removeData(int dataIndex, List<EntityData> entityDataLi...
method hasData (line 135) | protected boolean hasData(EntityType type) {
method entityDataForType (line 139) | protected @Nullable EntityReplacement entityDataForType(EntityType typ...
method storedEntityData (line 143) | protected @Nullable StoredEntityData storedEntityData(EntityDataHandle...
method mapEntityTypeWithData (line 156) | protected EntityReplacement mapEntityTypeWithData(EntityType type, Ent...
method registerEntityDataTypeHandler (line 167) | public void registerEntityDataTypeHandler(
method registerEntityDataTypeHandler1_20_3 (line 196) | public void registerEntityDataTypeHandler1_20_3(
method getTrackerHandler (line 231) | protected PacketHandler getTrackerHandler(Type<? extends Number> intTy...
method getTrackerHandler (line 241) | protected PacketHandler getTrackerHandler() {
method getTrackerHandler (line 245) | protected PacketHandler getTrackerHandler(EntityType entityType) {
method getPlayerTrackerHandler (line 249) | protected PacketHandler getPlayerTrackerHandler() {
method getDimensionHandler (line 259) | protected PacketHandler getDimensionHandler(int index) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyBlockItemRewriter.java
class LegacyBlockItemRewriter (line 57) | public abstract class LegacyBlockItemRewriter<C extends ClientboundPacke...
method LegacyBlockItemRewriter (line 63) | protected LegacyBlockItemRewriter(T protocol, String name, Type<Item> ...
method LegacyBlockItemRewriter (line 76) | protected LegacyBlockItemRewriter(T protocol, String name, Type<Item> ...
method LegacyBlockItemRewriter (line 80) | protected LegacyBlockItemRewriter(T protocol, String name) {
method addMappings (line 84) | private void addMappings(MappedLegacyBlockItem.Type type, JsonObject o...
method addMapping (line 93) | private void addMapping(String key, JsonObject object, MappedLegacyBlo...
method registerBlockChange (line 133) | public void registerBlockChange(C packetType) {
method registerMultiBlockChange (line 148) | public void registerMultiBlockChange(C packetType) {
method handleItemToClient (line 165) | @Override
method handleItemToServer (line 210) | @Override
method getFallingBlockHandler (line 227) | public PacketHandler getFallingBlockHandler() {
method handleBlock (line 240) | public @Nullable IdAndData handleBlock(int blockId, int data) {
method handleBlockId (line 254) | public int handleBlockId(final int rawId) {
method handleChunk (line 264) | public void handleChunk(Chunk chunk) {
method getNamedTag (line 352) | protected CompoundTag getNamedTag(String text) {
method getMappedBlock (line 361) | private @Nullable MappedLegacyBlockItem getMappedBlock(int id, int dat...
method getMappedItem (line 366) | private @Nullable MappedLegacyBlockItem getMappedItem(int id, int data) {
method getMappedBlock (line 371) | private @Nullable MappedLegacyBlockItem getMappedBlock(int rawId) {
method readMappingsFile (line 377) | protected JsonObject readMappingsFile(final String name) {
method compress (line 381) | protected int compress(final int id, final int data) {
method Pos (line 388) | public Pos(int x, int y, int z) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEnchantmentRewriter.java
class LegacyEnchantmentRewriter (line 35) | public class LegacyEnchantmentRewriter {
method LegacyEnchantmentRewriter (line 43) | public LegacyEnchantmentRewriter(String nbtTagName) {
method LegacyEnchantmentRewriter (line 47) | public LegacyEnchantmentRewriter(String nbtTagName, boolean dummyEncha...
method registerEnchantment (line 52) | public void registerEnchantment(int id, String replacementLore) {
method handleToClient (line 56) | public void handleToClient(Item item) {
method handleToServer (line 68) | public void handleToServer(Item item) {
method rewriteEnchantmentsToClient (line 80) | public void rewriteEnchantmentsToClient(CompoundTag tag, boolean store...
method rewriteEnchantmentsToServer (line 139) | public void rewriteEnchantmentsToServer(CompoundTag tag, boolean store...
method setHideLevelForEnchants (line 185) | public void setHideLevelForEnchants(int... enchants) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java
class LegacyEntityRewriter (line 41) | public abstract class LegacyEntityRewriter<C extends ClientboundPacketTy...
method LegacyEntityRewriter (line 44) | protected LegacyEntityRewriter(T protocol) {
method LegacyEntityRewriter (line 48) | protected LegacyEntityRewriter(T protocol, EntityDataType displayType,...
method mapObjectType (line 52) | protected EntityObjectData mapObjectType(ObjectType oldObjectType, Obj...
method getObjectData (line 58) | protected @Nullable EntityReplacement getObjectData(ObjectType type) {
method registerRespawn (line 62) | protected void registerRespawn(C packetType) {
method registerJoinGame (line 77) | protected void registerJoinGame(C packetType, EntityType playerType) {
method getMobSpawnRewriter (line 96) | protected PacketHandler getMobSpawnRewriter(Type<List<EntityData>> dat...
method getMobSpawnRewriter (line 117) | public PacketHandler getMobSpawnRewriter(Type<List<EntityData>> dataTy...
method getMobSpawnRewriter1_11 (line 121) | public PacketHandler getMobSpawnRewriter1_11(Type<List<EntityData>> da...
method getObjectTrackerHandler (line 125) | protected PacketHandler getObjectTrackerHandler() {
method getTrackerAndDataHandler (line 138) | protected PacketHandler getTrackerAndDataHandler(Type<List<EntityData>...
method getObjectRewriter (line 146) | protected PacketHandler getObjectRewriter(ObjectTypeGetter objectGette...
type IdSetter (line 165) | @FunctionalInterface
method setId (line 168) | void setId(PacketWrapper wrapper, int id);
type ObjectTypeGetter (line 171) | @FunctionalInterface
method get (line 174) | ObjectType get(int id, int data);
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacySoundRewriter.java
class LegacySoundRewriter (line 26) | @Deprecated
method LegacySoundRewriter (line 30) | protected LegacySoundRewriter(T protocol) {
method added (line 34) | public SoundData added(int id, int replacement) {
method added (line 38) | public SoundData added(int id, int replacement, float newPitch) {
method removed (line 44) | public SoundData removed(int id) {
method handleSounds (line 50) | public int handleSounds(int soundId) {
method hasPitch (line 67) | public boolean hasPitch(int soundId) {
method handlePitch (line 72) | public float handlePitch(int soundId) {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/MapColorRewriter.java
class MapColorRewriter (line 25) | public final class MapColorRewriter {
method rewriteMapColors (line 34) | public static void rewriteMapColors(PacketWrapper wrapper, IdRewriteFu...
method getRewriteHandler (line 67) | public static PacketHandler getRewriteHandler(IdRewriteFunction rewrit...
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/SoundRewriter.java
class SoundRewriter (line 26) | public class SoundRewriter<C extends ClientboundPacketType> extends com....
method SoundRewriter (line 28) | public SoundRewriter(final AbstractProtocol<C, ?, ?, ?> protocol) {
method registerNamedSound (line 32) | public void registerNamedSound(final C packetType) {
method registerStopSound (line 42) | public void registerStopSound(final C packetType) {
method getNamedSoundHandler (line 70) | public PacketHandler getNamedSoundHandler() {
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java
class StructuredEnchantmentRewriter (line 42) | public class StructuredEnchantmentRewriter {
method StructuredEnchantmentRewriter (line 47) | public StructuredEnchantmentRewriter(final BackwardsStructuredItemRewr...
method handleToClient (line 51) | public void handleToClient(final Item item) {
method handleToServer (line 66) | public void handleToServer(final Item item) {
method rewriteEnchantmentsToClient (line 75) | public void rewriteEnchantmentsToClient(final StructuredDataContainer ...
method customData (line 157) | private CompoundTag customData(final StructuredDataContainer data) {
method asTag (line 166) | private ListTag<CompoundTag> asTag(final Enchantments enchantments) {
method rewriteEnchantmentsToServer (line 177) | public void rewriteEnchantmentsToServer(final StructuredDataContainer ...
method setRewriteIds (line 204) | public void setRewriteIds(final boolean rewriteIds) {
type DescriptionSupplier (line 208) | @FunctionalInterface
method get (line 211) | Tag get(int id, int level);
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/JsonNBTComponentRewriter.java
class JsonNBTComponentRewriter (line 30) | public class JsonNBTComponentRewriter<C extends ClientboundPacketType> e...
method JsonNBTComponentRewriter (line 34) | public JsonNBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> pr...
method JsonNBTComponentRewriter (line 39) | public JsonNBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> pr...
method handleTranslate (line 44) | @Override
method handleTranslate (line 52) | @Override
method mappedTranslationKey (line 60) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/NBTComponentRewriter.java
class NBTComponentRewriter (line 30) | public class NBTComponentRewriter<C extends ClientboundPacketType> exten...
method NBTComponentRewriter (line 34) | public NBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protoc...
method NBTComponentRewriter (line 39) | public NBTComponentRewriter(final BackwardsProtocol<C, ?, ?, ?> protoc...
method handleTranslate (line 44) | @Override
method handleTranslate (line 52) | @Override
method mappedTranslationKey (line 60) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/TranslatableRewriter.java
type TranslatableRewriter (line 23) | public interface TranslatableRewriter extends ComponentRewriter {
method mappedTranslationKey (line 25) | @Nullable
FILE: common/src/main/java/com/viaversion/viabackwards/item/DataItemWithExtras.java
class DataItemWithExtras (line 38) | public final class DataItemWithExtras extends DataItem {
method DataItemWithExtras (line 43) | public DataItemWithExtras(final Item from) {
method name (line 72) | public @Nullable JsonElement name() {
method rawName (line 76) | public @Nullable StringTag rawName() {
method lore (line 84) | public @Nullable List<JsonElement> lore() {
method rawLore (line 88) | public @Nullable ListTag<StringTag> rawLore() {
method parse (line 96) | private JsonElement parse(final String value) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/registration/BackwardsRegistrations.java
class BackwardsRegistrations (line 23) | public final class BackwardsRegistrations {
method apply (line 27) | public static void apply() {
method registrations (line 35) | public static SharedRegistrations registrations() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/registration/RegistryRegistrations.java
class RegistryRegistrations (line 27) | final class RegistryRegistrations {
method registerNamedSound1_10 (line 29) | static <CU extends ClientboundPacketType> void registerNamedSound1_10(...
method registerStopSound1_14 (line 33) | static <CU extends ClientboundPacketType> void registerStopSound1_14(f...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/template/BlockItemPacketRewriter99_1.java
class BlockItemPacketRewriter99_1 (line 31) | final class BlockItemPacketRewriter99_1 extends BackwardsStructuredItemR...
method BlockItemPacketRewriter99_1 (line 33) | public BlockItemPacketRewriter99_1(final Protocol99_1To98_1 protocol) {
method registerPackets (line 37) | @Override
method handleItemDataComponentsToClient (line 41) | @Override
method handleItemDataComponentsToServer (line 47) | @Override
method restoreBackupData (line 53) | @Override
method backupInconvertibleData (line 59) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/template/ComponentRewriter99_1.java
class ComponentRewriter99_1 (line 26) | final class ComponentRewriter99_1 extends NBTComponentRewriter<Clientbou...
method ComponentRewriter99_1 (line 28) | public ComponentRewriter99_1(final BackwardsProtocol<ClientboundPacket...
method handleShowItem (line 32) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/template/EntityPacketRewriter99_1.java
class EntityPacketRewriter99_1 (line 29) | final class EntityPacketRewriter99_1 extends EntityRewriter<ClientboundP...
method EntityPacketRewriter99_1 (line 33) | public EntityPacketRewriter99_1(final Protocol99_1To98_1 protocol) {
method registerPackets (line 37) | @Override
method registerRewrites (line 41) | @Override
method onMappingDataLoaded (line 65) | @Override
method typeFromId (line 71) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/template/Protocol99_1To98_1.java
class Protocol99_1To98_1 (line 58) | final class Protocol99_1To98_1 extends BackwardsProtocol<ClientboundPack...
method Protocol99_1To98_1 (line 71) | public Protocol99_1To98_1() {
method registerPackets (line 75) | @Override
method init (line 80) | @Override
method getMappingData (line 86) | @Override
method getEntityRewriter (line 91) | @Override
method getItemRewriter (line 96) | @Override
method getBlockRewriter (line 101) | @Override
method getRecipeRewriter (line 106) | @Override
method getRegistryDataRewriter (line 111) | @Override
method getParticleRewriter (line 116) | @Override
method getComponentRewriter (line 121) | @Override
method getTagRewriter (line 126) | @Override
method types (line 131) | @Override
method mappedTypes (line 136) | @Override
method createPacketTypesProvider (line 141) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java
class Protocol1_10To1_9_3 (line 39) | public class Protocol1_10To1_9_3 extends BackwardsProtocol<ClientboundPa...
method transform (line 43) | public Short transform(PacketWrapper packetWrapper, Float inputValue) {
method Protocol1_10To1_9_3 (line 50) | public Protocol1_10To1_9_3() {
method registerPackets (line 54) | @Override
method init (line 99) | @Override
method getMappingData (line 105) | @Override
method getEntityRewriter (line 110) | @Override
method getItemRewriter (line 115) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java
class BlockItemPacketRewriter1_10 (line 32) | public class BlockItemPacketRewriter1_10 extends LegacyBlockItemRewriter...
method BlockItemPacketRewriter1_10 (line 34) | public BlockItemPacketRewriter1_10(Protocol1_10To1_9_3 protocol) {
method registerPackets (line 38) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/EntityPacketRewriter1_10.java
class EntityPacketRewriter1_10 (line 35) | public class EntityPacketRewriter1_10 extends LegacyEntityRewriter<Clien...
method EntityPacketRewriter1_10 (line 37) | public EntityPacketRewriter1_10(Protocol1_10To1_9_3 protocol) {
method registerPackets (line 41) | @Override
method registerRewrites (line 134) | @Override
method typeFromId (line 167) | @Override
method objectTypeFromId (line 172) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java
class Protocol1_11_1To1_11 (line 31) | public class Protocol1_11_1To1_11 extends BackwardsProtocol<ClientboundP...
method Protocol1_11_1To1_11 (line 36) | public Protocol1_11_1To1_11() {
method init (line 40) | @Override
method getEntityRewriter (line 46) | @Override
method getItemRewriter (line 51) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/rewriter/EntityPacketRewriter1_11_1.java
class EntityPacketRewriter1_11_1 (line 29) | public class EntityPacketRewriter1_11_1 extends LegacyEntityRewriter<Cli...
method EntityPacketRewriter1_11_1 (line 31) | public EntityPacketRewriter1_11_1(Protocol1_11_1To1_11 protocol) {
method registerPackets (line 35) | @Override
method registerRewrites (line 108) | @Override
method typeFromId (line 117) | @Override
method objectTypeFromId (line 122) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/rewriter/ItemPacketRewriter1_11_1.java
class ItemPacketRewriter1_11_1 (line 30) | public class ItemPacketRewriter1_11_1 extends LegacyBlockItemRewriter<Cl...
method ItemPacketRewriter1_11_1 (line 34) | public ItemPacketRewriter1_11_1(Protocol1_11_1To1_11 protocol) {
method registerPackets (line 38) | @Override
method registerRewrites (line 56) | @Override
method handleItemToClient (line 62) | @Override
method handleItemToServer (line 71) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java
class Protocol1_11To1_10 (line 36) | public class Protocol1_11To1_10 extends BackwardsProtocol<ClientboundPac...
method Protocol1_11To1_10 (line 43) | public Protocol1_11To1_10() {
method registerPackets (line 47) | @Override
method init (line 57) | @Override
method getMappingData (line 67) | @Override
method getEntityRewriter (line 72) | @Override
method getItemRewriter (line 77) | @Override
method getComponentRewriter (line 82) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/data/SplashPotionMappings1_10.java
class SplashPotionMappings1_10 (line 23) | public class SplashPotionMappings1_10 {
method getOldData (line 45) | public static int getOldData(int data) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java
class BlockItemPacketRewriter1_11 (line 47) | public class BlockItemPacketRewriter1_11 extends LegacyBlockItemRewriter...
method BlockItemPacketRewriter1_11 (line 51) | public BlockItemPacketRewriter1_11(Protocol1_11To1_10 protocol) {
method registerPackets (line 55) | @Override
method registerRewrites (line 252) | @Override
method handleItemToClient (line 265) | @Override
method handleItemToServer (line 280) | @Override
method isLlama (line 295) | private boolean isLlama(UserConnection user) {
method getChestedHorse (line 305) | private Optional<ChestedHorseStorage> getChestedHorse(UserConnection u...
method getNewSlotId (line 316) | private int getNewSlotId(ChestedHorseStorage storage, int slotId) {
method getOldSlotId (line 329) | private int getOldSlotId(ChestedHorseStorage storage, int slotId) {
method getNewItem (line 344) | private Item getNewItem(ChestedHorseStorage storage, int slotId, Item ...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/EntityPacketRewriter1_11.java
class EntityPacketRewriter1_11 (line 36) | public class EntityPacketRewriter1_11 extends LegacyEntityRewriter<Clien...
method EntityPacketRewriter1_11 (line 38) | public EntityPacketRewriter1_11(Protocol1_11To1_10 protocol) {
method registerPackets (line 42) | @Override
method registerRewrites (line 180) | @Override
method getSkeletonTypeData (line 333) | private EntityData getSkeletonTypeData(int type) {
method getZombieTypeData (line 342) | private EntityData getZombieTypeData(int type) {
method handleZombieType (line 346) | private void handleZombieType(WrappedEntityData storage, int type) {
method getHorseDataType (line 360) | private EntityData getHorseDataType(int type) {
method typeFromId (line 364) | @Override
method objectTypeFromId (line 369) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/PlayerPacketRewriter1_11.java
class PlayerPacketRewriter1_11 (line 32) | public class PlayerPacketRewriter1_11 {
method transform (line 34) | @Override
method register (line 40) | public static void register(Protocol1_11To1_10 protocol) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/storage/ChestedHorseStorage.java
class ChestedHorseStorage (line 21) | public class ChestedHorseStorage {
method isChested (line 27) | public boolean isChested() {
method setChested (line 31) | public void setChested(boolean chested) {
method getLiamaStrength (line 35) | public int getLiamaStrength() {
method setLiamaStrength (line 39) | public void setLiamaStrength(int liamaStrength) {
method getLiamaCarpetColor (line 43) | public int getLiamaCarpetColor() {
method setLiamaCarpetColor (line 47) | public void setLiamaCarpetColor(int liamaCarpetColor) {
method getLiamaVariant (line 51) | public int getLiamaVariant() {
method setLiamaVariant (line 55) | public void setLiamaVariant(int liamaVariant) {
method toString (line 59) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/storage/WindowTracker.java
class WindowTracker (line 23) | public class WindowTracker implements StorableObject {
method getInventory (line 27) | public String getInventory() {
method setInventory (line 31) | public void setInventory(String inventory) {
method getEntityId (line 35) | public int getEntityId() {
method setEntityId (line 39) | public void setEntityId(int entityId) {
method toString (line 43) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_1to1_12/Protocol1_12_1To1_12.java
class Protocol1_12_1To1_12 (line 26) | public class Protocol1_12_1To1_12 extends BackwardsProtocol<ClientboundP...
method Protocol1_12_1To1_12 (line 28) | public Protocol1_12_1To1_12() {
method registerPackets (line 32) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_2to1_12_1/Protocol1_12_2To1_12_1.java
class Protocol1_12_2To1_12_1 (line 29) | public class Protocol1_12_2To1_12_1 extends BackwardsProtocol<Clientboun...
method Protocol1_12_2To1_12_1 (line 31) | public Protocol1_12_2To1_12_1() {
method registerPackets (line 35) | @Override
method init (line 66) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_2to1_12_1/storage/KeepAliveTracker.java
class KeepAliveTracker (line 23) | public class KeepAliveTracker implements StorableObject {
method getKeepAlive (line 26) | public long getKeepAlive() {
method setKeepAlive (line 30) | public void setKeepAlive(long keepAlive) {
method toString (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java
class Protocol1_12To1_11_1 (line 40) | public class Protocol1_12To1_11_1 extends BackwardsProtocol<ClientboundP...
method Protocol1_12To1_11_1 (line 47) | public Protocol1_12To1_11_1() {
method registerPackets (line 51) | @Override
method init (line 72) | @Override
method getMappingData (line 80) | @Override
method getEntityRewriter (line 85) | @Override
method getItemRewriter (line 90) | @Override
method getComponentRewriter (line 95) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/data/BlockColors1_11_1.java
class BlockColors1_11_1 (line 21) | public class BlockColors1_11_1 {
method get (line 43) | public static String get(int key) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/data/MapColorMappings1_11_1.java
class MapColorMappings1_11_1 (line 23) | public class MapColorMappings1_11_1 {
method getNearestOldColor (line 94) | public static int getNearestOldColor(int color) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java
class BlockItemPacketRewriter1_12 (line 47) | public class BlockItemPacketRewriter1_12 extends LegacyBlockItemRewriter...
method BlockItemPacketRewriter1_12 (line 49) | public BlockItemPacketRewriter1_12(Protocol1_12To1_11_1 protocol) {
method registerPackets (line 53) | @Override
method handleSignText (line 191) | private void handleSignText(final CompoundTag tag) {
method handleItemToClient (line 203) | @Override
method handleNbtToClient (line 218) | private boolean handleNbtToClient(CompoundTag compoundTag, CompoundTag...
method handleItemToServer (line 238) | @Override
method handleNbtToServer (line 252) | private void handleNbtToServer(CompoundTag compoundTag, CompoundTag ba...
method fromLongArrayTag (line 264) | private IntArrayTag fromLongArrayTag(LongArrayTag tag) {
method fromIntArrayTag (line 275) | private LongArrayTag fromIntArrayTag(IntArrayTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/ComponentRewriter1_12.java
class ComponentRewriter1_12 (line 29) | public class ComponentRewriter1_12 extends JsonNBTComponentRewriter<Clie...
method ComponentRewriter1_12 (line 31) | public ComponentRewriter1_12(Protocol1_12To1_11_1 protocol) {
method processText (line 35) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java
class EntityPacketRewriter1_12 (line 38) | public class EntityPacketRewriter1_12 extends LegacyEntityRewriter<Clien...
method EntityPacketRewriter1_12 (line 40) | public EntityPacketRewriter1_12(Protocol1_12To1_11_1 protocol) {
method registerPackets (line 44) | @Override
method registerRewrites (line 185) | @Override
method typeFromId (line 284) | @Override
method objectTypeFromId (line 289) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/SoundPacketRewriter1_12.java
class SoundPacketRewriter1_12 (line 27) | public class SoundPacketRewriter1_12 extends LegacySoundRewriter<Protoco...
method SoundPacketRewriter1_12 (line 29) | public SoundPacketRewriter1_12(Protocol1_12To1_11_1 protocol) {
method registerPackets (line 33) | @Override
method registerRewrites (line 64) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/storage/ParrotStorage.java
class ParrotStorage (line 21) | public class ParrotStorage {
method isTamed (line 25) | public boolean isTamed() {
method setTamed (line 29) | public void setTamed(boolean tamed) {
method isSitting (line 33) | public boolean isSitting() {
method setSitting (line 37) | public void setSitting(boolean sitting) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/storage/ShoulderTracker.java
class ShoulderTracker (line 32) | public class ShoulderTracker extends StoredObject {
method ShoulderTracker (line 37) | public ShoulderTracker(UserConnection user) {
method update (line 41) | public void update() {
method generateString (line 60) | private String generateString() {
method getName (line 82) | private String getName(String current) {
method getEntityId (line 97) | public int getEntityId() {
method setEntityId (line 101) | public void setEntityId(int entityId) {
method getLeftShoulder (line 105) | public String getLeftShoulder() {
method setLeftShoulder (line 109) | public void setLeftShoulder(String leftShoulder) {
method getRightShoulder (line 113) | public String getRightShoulder() {
method setRightShoulder (line 117) | public void setRightShoulder(String rightShoulder) {
method toString (line 121) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java
class Protocol1_13_1To1_13 (line 48) | public class Protocol1_13_1To1_13 extends BackwardsProtocol<ClientboundP...
method Protocol1_13_1To1_13 (line 57) | public Protocol1_13_1To1_13() {
method registerPackets (line 61) | @Override
method init (line 160) | @Override
method getMappingData (line 166) | @Override
method getEntityRewriter (line 171) | @Override
method getItemRewriter (line 176) | @Override
method getParticleRewriter (line 181) | @Override
method getComponentRewriter (line 186) | @Override
method translatableRewriter (line 191) | public JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRe...
method getTagRewriter (line 195) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/CommandRewriter1_13_1.java
class CommandRewriter1_13_1 (line 26) | public class CommandRewriter1_13_1 extends CommandRewriter<ClientboundPa...
method CommandRewriter1_13_1 (line 28) | public CommandRewriter1_13_1(Protocol1_13_1To1_13 protocol) {
method handleArgumentType (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/EntityPacketRewriter1_13_1.java
class EntityPacketRewriter1_13_1 (line 34) | public class EntityPacketRewriter1_13_1 extends LegacyEntityRewriter<Cli...
method EntityPacketRewriter1_13_1 (line 36) | public EntityPacketRewriter1_13_1(Protocol1_13_1To1_13 protocol) {
method registerPackets (line 40) | @Override
method registerRewrites (line 128) | @Override
method typeFromId (line 159) | @Override
method objectTypeFromId (line 164) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/ItemPacketRewriter1_13_1.java
class ItemPacketRewriter1_13_1 (line 26) | public class ItemPacketRewriter1_13_1 extends ItemRewriter<ClientboundPa...
method ItemPacketRewriter1_13_1 (line 28) | public ItemPacketRewriter1_13_1(Protocol1_13_1To1_13 protocol) {
method registerPackets (line 32) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java
class WorldPacketRewriter1_13_1 (line 31) | public class WorldPacketRewriter1_13_1 {
method register (line 33) | public static void register(Protocol1_13_1To1_13 protocol) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/Protocol1_13_2To1_13_1.java
class Protocol1_13_2To1_13_1 (line 30) | public class Protocol1_13_2To1_13_1 extends BackwardsProtocol<Clientboun...
method Protocol1_13_2To1_13_1 (line 32) | public Protocol1_13_2To1_13_1() {
method registerPackets (line 36) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/EntityPacketRewriter1_13_2.java
class EntityPacketRewriter1_13_2 (line 32) | public class EntityPacketRewriter1_13_2 {
method register (line 35) | public static void register(Protocol1_13_2To1_13_1 protocol) {
method updateEntityData (line 84) | private static void updateEntityData(final PacketWrapper wrapper) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/ItemPacketRewriter1_13_2.java
class ItemPacketRewriter1_13_2 (line 26) | public class ItemPacketRewriter1_13_2 {
method register (line 28) | public static void register(Protocol1_13_2To1_13_1 protocol) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/WorldPacketRewriter1_13_2.java
class WorldPacketRewriter1_13_2 (line 25) | public class WorldPacketRewriter1_13_2 {
method register (line 27) | public static void register(Protocol1_13_2To1_13_1 protocol) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java
class Protocol1_13To1_12_2 (line 55) | public class Protocol1_13To1_12_2 extends BackwardsProtocol<ClientboundP...
method handleTranslate (line 62) | @Override
method handleTranslate (line 71) | @Override
method Protocol1_13To1_12_2 (line 80) | public Protocol1_13To1_12_2() {
method registerPackets (line 84) | @Override
method init (line 114) | @Override
method getMappingData (line 129) | @Override
method getLogger (line 134) | @Override
method getEntityRewriter (line 139) | @Override
method getItemRewriter (line 144) | @Override
method translatableRewriter (line 150) | public JsonNBTComponentRewriter<ClientboundPackets1_13> translatableRe...
method jsonToLegacy (line 154) | public String jsonToLegacy(UserConnection connection, String value) {
method jsonToLegacy (line 167) | public String jsonToLegacy(UserConnection connection, @Nullable JsonEl...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/BannerHandler.java
class BannerHandler (line 27) | public class BannerHandler implements BackwardsBlockEntityHandler {
method transform (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/BedHandler.java
class BedHandler (line 24) | public class BedHandler implements BackwardsBlockEntityProvider.Backward...
method transform (line 26) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/FlowerPotHandler.java
class FlowerPotHandler (line 27) | public class FlowerPotHandler implements BackwardsBlockEntityProvider.Ba...
method register (line 57) | private static void register(int id, String identifier, byte data) {
method isFlowah (line 61) | public static boolean isFlowah(int id) {
method getOrDefault (line 65) | public Pair<String, Byte> getOrDefault(int blockId) {
method transform (line 71) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/PistonHandler.java
class PistonHandler (line 34) | public class PistonHandler implements BackwardsBlockEntityProvider.Backw...
method PistonHandler (line 38) | public PistonHandler() {
method addEntries (line 64) | private void addEntries(String data, int id) {
method transform (line 78) | @Override
method getDataFromTag (line 98) | private String getDataFromTag(CompoundTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/SkullHandler.java
class SkullHandler (line 24) | public class SkullHandler implements BackwardsBlockEntityHandler {
method transform (line 27) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/SpawnerHandler.java
class SpawnerHandler (line 26) | public class SpawnerHandler implements BackwardsBlockEntityProvider.Back...
method transform (line 28) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/BackwardsMappingData1_13.java
class BackwardsMappingData1_13 (line 30) | public class BackwardsMappingData1_13 extends BackwardsMappingData {
method BackwardsMappingData1_13 (line 34) | public BackwardsMappingData1_13() {
method loadExtras (line 38) | @Override
method getNewBlockStateId (line 50) | @Override
method checkValidity (line 75) | @Override
method getStatisticMappings (line 81) | public Int2ObjectMap<String> getStatisticMappings() {
method getTranslateMappings (line 85) | public Map<String, String> getTranslateMappings() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/EntityIdMappings1_12_2.java
class EntityIdMappings1_12_2 (line 24) | public class EntityIdMappings1_12_2 {
method getOldId (line 34) | public static int getOldId(int type1_13) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/EntityNameMappings1_12_2.java
class EntityNameMappings1_12_2 (line 26) | public class EntityNameMappings1_12_2 {
method reg (line 46) | private static void reg(String past, String future) {
method rewrite (line 50) | public static String rewrite(String entName) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/NamedSoundMappings1_12_2.java
class NamedSoundMappings1_12_2 (line 26) | public class NamedSoundMappings1_12_2 {
method getOldId (line 40) | public static String getOldId(String sound1_13) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/PaintingNames1_13.java
class PaintingNames1_13 (line 23) | public class PaintingNames1_13 {
method init (line 26) | public static void init() {
method add (line 55) | private static void add(String motive) {
method getStringId (line 59) | public static String getStringId(int id) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/ParticleIdMappings1_12_2.java
class ParticleIdMappings1_12_2 (line 29) | public class ParticleIdMappings1_12_2 {
method rewrite (line 34) | @Override
method rewrite (line 39) | @Override
method rewrite (line 44) | private int[] rewrite(int newType) {
method isBlockHandler (line 52) | @Override
method rewrite (line 72) | @Override
method rewrite (line 88) | @Override
method rewrite (line 110) | @Override
method rewrite (line 115) | @Override
method rewrite (line 120) | private int[] rewrite(Protocol1_13To1_12_2 protocol, Item newItem) {
method getMapping (line 150) | public static ParticleData getMapping(int id) {
method rewrite (line 154) | private static ParticleData rewrite(int replacementId) {
method rewrite (line 158) | private static ParticleData rewrite(int replacementId, ParticleHandler...
type ParticleHandler (line 162) | public interface ParticleHandler {
method rewrite (line 164) | int[] rewrite(Protocol1_13To1_12_2 protocol, PacketWrapper wrapper);
method rewrite (line 166) | int[] rewrite(Protocol1_13To1_12_2 protocol, List<Particle.ParticleD...
method isBlockHandler (line 168) | default boolean isBlockHandler() {
class ParticleData (line 173) | public static final class ParticleData {
method ParticleData (line 177) | private ParticleData(int historyId, ParticleHandler handler) {
method ParticleData (line 182) | private ParticleData(int historyId) {
method rewriteData (line 186) | public int @Nullable [] rewriteData(Protocol1_13To1_12_2 protocol, P...
method rewriteMeta (line 191) | public int @Nullable [] rewriteMeta(Protocol1_13To1_12_2 protocol, L...
method getHistoryId (line 196) | public int getHistoryId() {
method getHandler (line 200) | public ParticleHandler getHandler() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/provider/BackwardsBlockEntityProvider.java
class BackwardsBlockEntityProvider (line 37) | public class BackwardsBlockEntityProvider implements Provider {
method BackwardsBlockEntityProvider (line 40) | public BackwardsBlockEntityProvider() {
method isHandled (line 55) | public boolean isHandled(String key) {
method transform (line 66) | public CompoundTag transform(UserConnection user, BlockPosition positi...
method transform (line 94) | public CompoundTag transform(UserConnection user, BlockPosition positi...
type BackwardsBlockEntityHandler (line 104) | @FunctionalInterface
method transform (line 107) | CompoundTag transform(int blockId, CompoundTag tag);
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java
class BlockItemPacketRewriter1_13 (line 69) | public class BlockItemPacketRewriter1_13 extends BackwardsItemRewriter<C...
method BlockItemPacketRewriter1_13 (line 74) | public BlockItemPacketRewriter1_13(Protocol1_13To1_12_2 protocol) {
method isDamageable (line 79) | public static boolean isDamageable(int id) {
method registerPackets (line 93) | @Override
method registerRewrites (line 400) | @Override
method handleItemToClient (line 408) | @Override
method itemIdToRaw (line 494) | private int itemIdToRaw(int oldId, Item item, CompoundTag tag) {
method rewriteCanPlaceToClient (line 511) | private void rewriteCanPlaceToClient(CompoundTag tag, String tagName) {
method rewriteEnchantmentsToClient (line 534) | private void rewriteEnchantmentsToClient(CompoundTag tag, boolean stor...
method handleItemToServer (line 653) | @Override
method rewriteCanPlaceToServer (line 762) | private void rewriteCanPlaceToServer(CompoundTag tag, String tagName) {
method rewriteEnchantmentsToServer (line 794) | private void rewriteEnchantmentsToServer(CompoundTag tag, boolean stor...
method invertShieldAndBannerId (line 867) | private void invertShieldAndBannerId(Item item, CompoundTag tag) {
method flowerPotSpecialTreatment (line 888) | private static void flowerPotSpecialTreatment(UserConnection user, int...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java
class EntityPacketRewriter1_13 (line 47) | public class EntityPacketRewriter1_13 extends LegacyEntityRewriter<Clien...
method EntityPacketRewriter1_13 (line 49) | public EntityPacketRewriter1_13(Protocol1_13To1_12_2 protocol) {
method registerPackets (line 53) | @Override
method registerRewrites (line 256) | @Override
method typeFromId (line 357) | @Override
method objectTypeFromId (line 362) | @Override
method newEntityId (line 367) | @Override
method toSet (line 372) | private static double toSet(int field, int bitIndex, double origin, do...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/PlayerPacketRewriter1_13.java
class PlayerPacketRewriter1_13 (line 51) | public class PlayerPacketRewriter1_13 extends RewriterBase<Protocol1_13T...
method PlayerPacketRewriter1_13 (line 55) | public PlayerPacketRewriter1_13(Protocol1_13To1_12_2 protocol) {
method registerPackets (line 59) | @Override
method startsWithIgnoreCase (line 530) | private static boolean startsWithIgnoreCase(String string, String pref...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/SoundPacketRewriter1_13.java
class SoundPacketRewriter1_13 (line 27) | public class SoundPacketRewriter1_13 extends RewriterBase<Protocol1_13To...
method SoundPacketRewriter1_13 (line 30) | public SoundPacketRewriter1_13(Protocol1_13To1_12_2 protocol) {
method registerPackets (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/BackwardsBlockStorage.java
class BackwardsBlockStorage (line 29) | public class BackwardsBlockStorage implements StorableObject {
method checkAndStore (line 71) | public void checkAndStore(BlockPosition position, int block) {
method get (line 81) | public @Nullable Integer get(BlockPosition position) {
method remove (line 85) | public int remove(BlockPosition position) {
method clear (line 89) | public void clear() {
method getBlocks (line 93) | public Map<BlockPosition, Integer> getBlocks() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/NoteBlockStorage.java
class NoteBlockStorage (line 26) | public class NoteBlockStorage implements StorableObject {
method storeNoteBlockUpdate (line 32) | public void storeNoteBlockUpdate(final BlockPosition position, final i...
method getNoteBlockUpdate (line 36) | public Pair<Integer, Integer> getNoteBlockUpdate(final BlockPosition p...
method clear (line 46) | public void clear() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/PlayerPositionStorage1_13.java
class PlayerPositionStorage1_13 (line 22) | public class PlayerPositionStorage1_13 extends PlayerPositionStorage {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/TabCompleteStorage.java
class TabCompleteStorage (line 27) | public class TabCompleteStorage implements StorableObject {
method usernames (line 34) | public Map<UUID, String> usernames() {
method commands (line 38) | public Set<String> commands() {
method lastId (line 42) | public int lastId() {
method setLastId (line 46) | public void setLastId(final int lastId) {
method lastRequest (line 50) | public String lastRequest() {
method setLastRequest (line 54) | public void setLastRequest(String lastRequest) {
method isLastAssumeCommand (line 58) | public boolean isLastAssumeCommand() {
method setLastAssumeCommand (line 62) | public void setLastAssumeCommand(boolean lastAssumeCommand) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_1to1_14/Protocol1_14_1To1_14.java
class Protocol1_14_1To1_14 (line 29) | public class Protocol1_14_1To1_14 extends BackwardsProtocol<ClientboundP...
method Protocol1_14_1To1_14 (line 33) | public Protocol1_14_1To1_14() {
method registerPackets (line 37) | @Override
method init (line 42) | @Override
method getEntityRewriter (line 48) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_1to1_14/rewriter/EntityPacketRewriter1_14_1.java
class EntityPacketRewriter1_14_1 (line 31) | public class EntityPacketRewriter1_14_1 extends LegacyEntityRewriter<Cli...
method EntityPacketRewriter1_14_1 (line 33) | public EntityPacketRewriter1_14_1(Protocol1_14_1To1_14 protocol) {
method registerPackets (line 37) | @Override
method registerRewrites (line 91) | @Override
method typeFromId (line 98) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_2to1_14_1/Protocol1_14_2To1_14_1.java
class Protocol1_14_2To1_14_1 (line 24) | public class Protocol1_14_2To1_14_1 extends BackwardsProtocol<Clientboun...
method Protocol1_14_2To1_14_1 (line 26) | public Protocol1_14_2To1_14_1() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_3to1_14_2/Protocol1_14_3To1_14_2.java
class Protocol1_14_3To1_14_2 (line 27) | public class Protocol1_14_3To1_14_2 extends BackwardsProtocol<Clientboun...
method Protocol1_14_3To1_14_2 (line 29) | public Protocol1_14_3To1_14_2() {
method registerPackets (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_4to1_14_3/Protocol1_14_4To1_14_3.java
class Protocol1_14_4To1_14_3 (line 27) | public class Protocol1_14_4To1_14_3 extends BackwardsProtocol<Clientboun...
method Protocol1_14_4To1_14_3 (line 29) | public Protocol1_14_4To1_14_3() {
method registerPackets (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java
class Protocol1_14To1_13_2 (line 44) | public class Protocol1_14To1_13_2 extends BackwardsProtocol<ClientboundP...
method Protocol1_14To1_13_2 (line 53) | public Protocol1_14To1_13_2() {
method registerPackets (line 57) | @Override
method isSet (line 152) | private static boolean isSet(int mask, int i) {
method init (line 156) | @Override
method getMappingData (line 168) | @Override
method getEntityRewriter (line 173) | @Override
method getItemRewriter (line 178) | @Override
method getBlockRewriter (line 183) | @Override
method getParticleRewriter (line 188) | @Override
method getComponentRewriter (line 193) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/data/BackwardsMappingData1_14.java
class BackwardsMappingData1_14 (line 25) | public final class BackwardsMappingData1_14 extends BackwardsMappingData {
method BackwardsMappingData1_14 (line 27) | public BackwardsMappingData1_14() {
method loadExtras (line 31) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java
class BlockItemPacketRewriter1_14 (line 68) | public class BlockItemPacketRewriter1_14 extends BackwardsItemRewriter<C...
method BlockItemPacketRewriter1_14 (line 72) | public BlockItemPacketRewriter1_14(Protocol1_14To1_13_2 protocol) {
method registerPackets (line 76) | @Override
method registerRewrites (line 437) | @Override
method handleItemToClient (line 445) | @Override
method handleItemToServer (line 484) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/CommandRewriter1_14.java
class CommandRewriter1_14 (line 26) | public class CommandRewriter1_14 extends CommandRewriter<ClientboundPack...
method CommandRewriter1_14 (line 28) | public CommandRewriter1_14(Protocol1_14To1_13_2 protocol) {
method handleArgumentType (line 38) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java
class EntityPacketRewriter1_14 (line 48) | public class EntityPacketRewriter1_14 extends LegacyEntityRewriter<Clien...
method EntityPacketRewriter1_14 (line 52) | public EntityPacketRewriter1_14(Protocol1_14To1_13_2 protocol) {
method registerPackets (line 56) | @Override
method trackAndCacheEntityPosition (line 360) | private void trackAndCacheEntityPosition(PacketWrapper wrapper, Entity...
method registerRewrites (line 372) | @Override
method villagerDataToProfession (line 494) | public int villagerDataToProfession(VillagerData data) {
method onMappingDataLoaded (line 521) | @Override
method typeFromId (line 533) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/PlayerPacketRewriter1_14.java
class PlayerPacketRewriter1_14 (line 29) | public class PlayerPacketRewriter1_14 extends RewriterBase<Protocol1_14T...
method PlayerPacketRewriter1_14 (line 31) | public PlayerPacketRewriter1_14(Protocol1_14To1_13_2 protocol) {
method registerPackets (line 35) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/SoundPacketRewriter1_14.java
class SoundPacketRewriter1_14 (line 29) | public class SoundPacketRewriter1_14 extends RewriterBase<Protocol1_14To...
method SoundPacketRewriter1_14 (line 31) | public SoundPacketRewriter1_14(Protocol1_14To1_13_2 protocol) {
method registerPackets (line 35) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/ChunkLightStorage.java
class ChunkLightStorage (line 27) | public class ChunkLightStorage implements StorableObject {
method setStoredLight (line 43) | public void setStoredLight(byte[][] skyLight, byte[][] blockLight, int...
method getStoredLight (line 47) | public ChunkLight getStoredLight(int x, int z) {
method clear (line 51) | public void clear() {
method unloadChunk (line 55) | public void unloadChunk(int x, int z) {
method getChunkSectionIndex (line 59) | private long getChunkSectionIndex(int x, int z) {
method createLongObjectMap (line 63) | private Map<Long, ChunkLight> createLongObjectMap() {
method equals (line 76) | @Override
method hashCode (line 85) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/DifficultyStorage.java
class DifficultyStorage (line 22) | public class DifficultyStorage implements StorableObject {
method getDifficulty (line 25) | public byte getDifficulty() {
method setDifficulty (line 29) | public void setDifficulty(byte difficulty) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/EntityPositionStorage1_14.java
class EntityPositionStorage1_14 (line 22) | public class EntityPositionStorage1_14 extends EntityPositionStorage {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15_1to1_15/Protocol1_15_1To1_15.java
class Protocol1_15_1To1_15 (line 24) | public class Protocol1_15_1To1_15 extends BackwardsProtocol<ClientboundP...
method Protocol1_15_1To1_15 (line 26) | public Protocol1_15_1To1_15() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15_2to1_15_1/Protocol1_15_2To1_15_1.java
class Protocol1_15_2To1_15_1 (line 24) | public class Protocol1_15_2To1_15_1 extends BackwardsProtocol<Clientboun...
method Protocol1_15_2To1_15_1 (line 26) | public Protocol1_15_2To1_15_1() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java
class Protocol1_15To1_14_4 (line 43) | public class Protocol1_15To1_14_4 extends BackwardsProtocol<ClientboundP...
method Protocol1_15To1_14_4 (line 53) | public Protocol1_15To1_14_4() {
method registerPackets (line 57) | @Override
method init (line 89) | @Override
method getMappingData (line 97) | @Override
method getEntityRewriter (line 102) | @Override
method getItemRewriter (line 107) | @Override
method getBlockRewriter (line 112) | @Override
method getParticleRewriter (line 117) | @Override
method getTagRewriter (line 122) | @Override
method getComponentRewriter (line 127) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java
class BlockItemPacketRewriter1_15 (line 32) | public class BlockItemPacketRewriter1_15 extends BackwardsItemRewriter<C...
method BlockItemPacketRewriter1_15 (line 34) | public BlockItemPacketRewriter1_15(Protocol1_15To1_14_4 protocol) {
method registerPackets (line 38) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java
class EntityPacketRewriter1_15 (line 34) | public class EntityPacketRewriter1_15 extends EntityRewriter<Clientbound...
method EntityPacketRewriter1_15 (line 36) | public EntityPacketRewriter1_15(Protocol1_15To1_14_4 protocol) {
method registerPackets (line 40) | @Override
method registerRewrites (line 191) | @Override
method onMappingDataLoaded (line 211) | @Override
method typeFromId (line 220) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/storage/ImmediateRespawnStorage.java
class ImmediateRespawnStorage (line 22) | public class ImmediateRespawnStorage implements StorableObject {
method isImmediateRespawn (line 25) | public boolean isImmediateRespawn() {
method setImmediateRespawn (line 29) | public void setImmediateRespawn(boolean immediateRespawn) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_1to1_16/Protocol1_16_1To1_16.java
class Protocol1_16_1To1_16 (line 24) | public class Protocol1_16_1To1_16 extends BackwardsProtocol<ClientboundP...
method Protocol1_16_1To1_16 (line 26) | public Protocol1_16_1To1_16() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/Protocol1_16_2To1_16_1.java
class Protocol1_16_2To1_16_1 (line 46) | public class Protocol1_16_2To1_16_1 extends BackwardsProtocol<Clientboun...
method Protocol1_16_2To1_16_1 (line 57) | public Protocol1_16_2To1_16_1() {
method registerPackets (line 61) | @Override
method sendSeenRecipePacket (line 99) | private static void sendSeenRecipePacket(int recipeType, PacketWrapper...
method init (line 110) | @Override
method getComponentRewriter (line 116) | @Override
method getMappingData (line 121) | @Override
method getLogger (line 126) | @Override
method getEntityRewriter (line 131) | @Override
method getItemRewriter (line 136) | @Override
method getBlockRewriter (line 141) | @Override
method getParticleRewriter (line 146) | @Override
method getTagRewriter (line 151) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/data/BiomeMappings1_16_1.java
class BiomeMappings1_16_1 (line 30) | public final class BiomeMappings1_16_1 {
method add (line 132) | private static void add(final int id, final String biome) {
method toLegacyBiome (line 136) | public static int toLegacyBiome(String biome) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/BlockItemPacketRewriter1_16_2.java
class BlockItemPacketRewriter1_16_2 (line 40) | public class BlockItemPacketRewriter1_16_2 extends BackwardsItemRewriter...
method BlockItemPacketRewriter1_16_2 (line 42) | public BlockItemPacketRewriter1_16_2(Protocol1_16_2To1_16_1 protocol) {
method registerPackets (line 46) | @Override
method handleItemToClient (line 105) | @Override
method handleBlockEntity (line 113) | private void handleBlockEntity(CompoundTag tag) {
method addValueHashAsId (line 120) | private void addValueHashAsId(CompoundTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/CommandRewriter1_16_2.java
class CommandRewriter1_16_2 (line 26) | public class CommandRewriter1_16_2 extends CommandRewriter<ClientboundPa...
method CommandRewriter1_16_2 (line 28) | public CommandRewriter1_16_2(Protocol1_16_2To1_16_1 protocol) {
method handleArgumentType (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java
class EntityPacketRewriter1_16_2 (line 41) | public class EntityPacketRewriter1_16_2 extends EntityRewriter<Clientbou...
method EntityPacketRewriter1_16_2 (line 46) | public EntityPacketRewriter1_16_2(Protocol1_16_2To1_16_1 protocol) {
method registerPackets (line 50) | @Override
method getDimensionFromData (line 118) | private String getDimensionFromData(CompoundTag dimensionData) {
method registerRewrites (line 125) | @Override
method onMappingDataLoaded (line 134) | @Override
method typeFromId (line 140) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/storage/BiomeStorage.java
class BiomeStorage (line 25) | public final class BiomeStorage implements StorableObject {
method BiomeStorage (line 29) | public BiomeStorage() {
method addBiome (line 33) | public void addBiome(final String biome, final int id) {
method legacyBiome (line 37) | public int legacyBiome(final int biome) {
method clear (line 41) | public void clear() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_3to1_16_2/Protocol1_16_3To1_16_2.java
class Protocol1_16_3To1_16_2 (line 24) | public class Protocol1_16_3To1_16_2 extends BackwardsProtocol<Clientboun...
method Protocol1_16_3To1_16_2 (line 26) | public Protocol1_16_3To1_16_2() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_4to1_16_3/Protocol1_16_4To1_16_3.java
class Protocol1_16_4To1_16_3 (line 28) | public class Protocol1_16_4To1_16_3 extends BackwardsProtocol<Clientboun...
method Protocol1_16_4To1_16_3 (line 30) | public Protocol1_16_4To1_16_3() {
method registerPackets (line 34) | @Override
method init (line 58) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_4to1_16_3/storage/PlayerHandStorage.java
class PlayerHandStorage (line 22) | public class PlayerHandStorage implements StorableObject {
method getCurrentHand (line 26) | public int getCurrentHand() {
method setCurrentHand (line 30) | public void setCurrentHand(int currentHand) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java
class Protocol1_16To1_15_2 (line 51) | public class Protocol1_16To1_15_2 extends BackwardsProtocol<ClientboundP...
method Protocol1_16To1_15_2 (line 61) | public Protocol1_16To1_15_2() {
method registerPackets (line 65) | @Override
method init (line 156) | @Override
method getComponentRewriter (line 166) | @Override
method getMappingData (line 171) | @Override
method getEntityRewriter (line 176) | @Override
method getItemRewriter (line 181) | @Override
method getBlockRewriter (line 186) | @Override
method getParticleRewriter (line 191) | @Override
method getTagRewriter (line 196) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/data/BackwardsMappingData1_16.java
class BackwardsMappingData1_16 (line 28) | public class BackwardsMappingData1_16 extends BackwardsMappingData {
method BackwardsMappingData1_16 (line 31) | public BackwardsMappingData1_16() {
method loadExtras (line 35) | @Override
method mappedAttributeIdentifier (line 43) | public String mappedAttributeIdentifier(final String identifier) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/data/MapColorMappings1_15_2.java
class MapColorMappings1_15_2 (line 23) | public final class MapColorMappings1_15_2 {
method getMappedColor (line 58) | public static int getMappedColor(int color) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java
class BlockItemPacketRewriter1_16 (line 54) | public class BlockItemPacketRewriter1_16 extends BackwardsItemRewriter<C...
method BlockItemPacketRewriter1_16 (line 58) | public BlockItemPacketRewriter1_16(Protocol1_16To1_15_2 protocol) {
method registerPackets (line 62) | @Override
method handleBlockEntity (line 208) | private void handleBlockEntity(CompoundTag tag) {
method registerRewrites (line 237) | @Override
method handleItemToClient (line 243) | @Override
method handleItemToServer (line 277) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/CommandRewriter1_16.java
class CommandRewriter1_16 (line 25) | public class CommandRewriter1_16 extends CommandRewriter<ClientboundPack...
method CommandRewriter1_16 (line 27) | public CommandRewriter1_16(Protocol1_16To1_15_2 protocol) {
method handleArgumentType (line 31) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java
class EntityPacketRewriter1_16 (line 47) | public class EntityPacketRewriter1_16 extends EntityRewriter<Clientbound...
method transform (line 50) | @Override
method EntityPacketRewriter1_16 (line 61) | public EntityPacketRewriter1_16(Protocol1_16To1_15_2 protocol) {
method registerPackets (line 65) | @Override
method registerRewrites (line 247) | @Override
method onMappingDataLoaded (line 314) | @Override
method typeFromId (line 323) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/TranslatableRewriter1_16.java
class TranslatableRewriter1_16 (line 30) | public class TranslatableRewriter1_16 extends JsonNBTComponentRewriter<C...
method TranslatableRewriter1_16 (line 51) | public TranslatableRewriter1_16(Protocol1_16To1_15_2 protocol) {
method processText (line 55) | @Override
method getClosestChatColor (line 91) | private String getClosestChatColor(int rgb) {
class ChatColor (line 120) | private static final class ChatColor {
method ChatColor (line 128) | ChatColor(String colorName, int rgb) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/PlayerAttributesStorage.java
class PlayerAttributesStorage (line 30) | public final class PlayerAttributesStorage implements StorableObject {
method sendAttributes (line 34) | public void sendAttributes(final UserConnection connection, final int ...
method clearAttributes (line 54) | public void clearAttributes() {
method addAttribute (line 58) | public void addAttribute(final String key, final Attribute attribute) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/PlayerSneakStorage.java
class PlayerSneakStorage (line 22) | public class PlayerSneakStorage implements StorableObject {
method isSneaking (line 25) | public boolean isSneaking() {
method setSneaking (line 29) | public void setSneaking(boolean sneaking) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/WolfDataMaskStorage.java
class WolfDataMaskStorage (line 20) | public final class WolfDataMaskStorage {
method WolfDataMaskStorage (line 24) | public WolfDataMaskStorage(byte tameableMask) {
method setTameableMask (line 28) | public void setTameableMask(byte tameableMask) {
method tameableMask (line 32) | public byte tameableMask() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/WorldNameTracker.java
class WorldNameTracker (line 22) | public class WorldNameTracker implements StorableObject {
method getWorldName (line 25) | public String getWorldName() {
method setWorldName (line 29) | public void setWorldName(String worldName) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17_1to1_17/Protocol1_17_1To1_17.java
class Protocol1_17_1To1_17 (line 34) | public final class Protocol1_17_1To1_17 extends BackwardsProtocol<Client...
method Protocol1_17_1To1_17 (line 40) | public Protocol1_17_1To1_17() {
method registerPackets (line 44) | @Override
method init (line 160) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17_1to1_17/storage/InventoryStateIds.java
class InventoryStateIds (line 24) | public final class InventoryStateIds implements StorableObject {
method InventoryStateIds (line 27) | public InventoryStateIds() {
method setStateId (line 31) | public void setStateId(int containerId, int id) {
method removeStateId (line 35) | public int removeStateId(int containerId) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/Protocol1_17To1_16_4.java
class Protocol1_17To1_16_4 (line 53) | public final class Protocol1_17To1_16_4 extends BackwardsProtocol<Client...
method Protocol1_17To1_16_4 (line 65) | public Protocol1_17To1_16_4() {
method registerPackets (line 69) | @Override
method init (line 205) | @Override
method getMappingData (line 211) | @Override
method getComponentRewriter (line 216) | @Override
method mergePacket (line 221) | public void mergePacket(ClientboundPackets1_17 newPacketType, Clientbo...
method rewriteTitlePacket (line 226) | private void rewriteTitlePacket(ClientboundPackets1_17 newPacketType, ...
method getEntityRewriter (line 234) | @Override
method getItemRewriter (line 239) | @Override
method getBlockRewriter (line 244) | @Override
method getParticleRewriter (line 249) | @Override
method getTagRewriter (line 254) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/data/MapColorMappings1_16_4.java
class MapColorMappings1_16_4 (line 23) | public final class MapColorMappings1_16_4 {
method getMappedColor (line 42) | public static int getMappedColor(int color) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java
class BlockItemPacketRewriter1_17 (line 55) | public final class BlockItemPacketRewriter1_17 extends BackwardsItemRewr...
method BlockItemPacketRewriter1_17 (line 59) | public BlockItemPacketRewriter1_17(Protocol1_17To1_16_4 protocol) {
method registerPackets (line 63) | @Override
method cutLightMask (line 443) | private int cutLightMask(long[] mask, int startFromSection) {
method cutMask (line 448) | private int cutMask(BitSet mask, int startFromSection, boolean lightMa...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java
class EntityPacketRewriter1_17 (line 40) | public final class EntityPacketRewriter1_17 extends EntityRewriter<Clien...
method EntityPacketRewriter1_17 (line 44) | public EntityPacketRewriter1_17(Protocol1_17To1_16_4 protocol) {
method registerPackets (line 48) | @Override
method registerRewrites (line 171) | @Override
method onMappingDataLoaded (line 220) | @Override
method typeFromId (line 229) | @Override
method reduceExtendedHeight (line 234) | private void reduceExtendedHeight(CompoundTag tag, boolean warn) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/storage/PlayerLastCursorItem.java
class PlayerLastCursorItem (line 23) | public class PlayerLastCursorItem implements StorableObject {
method getLastCursorItem (line 26) | public Item getLastCursorItem() {
method setLastCursorItem (line 30) | public void setLastCursorItem(Item item) {
method setLastCursorItem (line 34) | public void setLastCursorItem(Item item, int amount) {
method isSet (line 39) | public boolean isSet() {
method copyItem (line 43) | private static Item copyItem(Item item) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18_2to1_18/Protocol1_18_2To1_18.java
class Protocol1_18_2To1_18 (line 33) | public final class Protocol1_18_2To1_18 extends BackwardsProtocol<Client...
method Protocol1_18_2To1_18 (line 35) | public Protocol1_18_2To1_18() {
method registerPackets (line 39) | @Override
method removeTagPrefix (line 96) | private void removeTagPrefix(CompoundTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18_2to1_18/rewriter/CommandRewriter1_18_2.java
class CommandRewriter1_18_2 (line 26) | public final class CommandRewriter1_18_2 extends CommandRewriter<Clientb...
method CommandRewriter1_18_2 (line 28) | public CommandRewriter1_18_2(Protocol1_18_2To1_18 protocol) {
method handleArgumentType (line 42) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/Protocol1_18To1_17_1.java
class Protocol1_18To1_17_1 (line 40) | public final class Protocol1_18To1_17_1 extends BackwardsProtocol<Client...
method Protocol1_18To1_17_1 (line 49) | public Protocol1_18To1_17_1() {
method registerPackets (line 53) | @Override
method cutName (line 95) | private PacketHandler cutName(final int index, final int maxLength) {
method init (line 105) | @Override
method getMappingData (line 110) | @Override
method getEntityRewriter (line 115) | @Override
method getItemRewriter (line 120) | @Override
method getParticleRewriter (line 125) | @Override
method getComponentRewriter (line 130) | @Override
method getTagRewriter (line 135) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/data/BackwardsMappingData1_18.java
class BackwardsMappingData1_18 (line 28) | public final class BackwardsMappingData1_18 extends BackwardsMappingData {
method BackwardsMappingData1_18 (line 32) | public BackwardsMappingData1_18() {
method loadExtras (line 36) | @Override
method blockEntities (line 45) | public Int2ObjectMap<String> blockEntities() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/data/BlockEntityMappings1_17_1.java
class BlockEntityMappings1_17_1 (line 23) | public final class BlockEntityMappings1_17_1 {
method mappedId (line 39) | public static int mappedId(final int id) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/rewriter/BlockItemPacketRewriter1_18.java
class BlockItemPacketRewriter1_18 (line 48) | public final class BlockItemPacketRewriter1_18 extends BackwardsItemRewr...
method BlockItemPacketRewriter1_18 (line 50) | public BlockItemPacketRewriter1_18(final Protocol1_18To1_17_1 protocol) {
method registerPackets (line 54) | @Override
method handleSpawner (line 239) | private void handleSpawner(final int typeId, final CompoundTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/rewriter/EntityPacketRewriter1_18.java
class EntityPacketRewriter1_18 (line 36) | public final class EntityPacketRewriter1_18 extends EntityRewriter<Clien...
method EntityPacketRewriter1_18 (line 38) | public EntityPacketRewriter1_18(final Protocol1_18To1_17_1 protocol) {
method registerPackets (line 42) | @Override
method registerRewrites (line 93) | @Override
method typeFromId (line 122) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/Protocol1_19_1To1_19.java
class Protocol1_19_1To1_19 (line 64) | public final class Protocol1_19_1To1_19 extends BackwardsProtocol<Client...
method Protocol1_19_1To1_19 (line 73) | public Protocol1_19_1To1_19() {
method registerPackets (line 77) | @Override
method init (line 378) | @Override
method getComponentRewriter (line 385) | @Override
method getEntityRewriter (line 390) | @Override
method decorateChatMessage (line 395) | public static @Nullable JsonElement decorateChatMessage(final Protocol...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/rewriter/EntityPacketRewriter1_19_1.java
class EntityPacketRewriter1_19_1 (line 27) | public final class EntityPacketRewriter1_19_1 extends EntityRewriter<Cli...
method EntityPacketRewriter1_19_1 (line 29) | public EntityPacketRewriter1_19_1(final Protocol1_19_1To1_19 protocol) {
method registerPackets (line 33) | @Override
method registerRewrites (line 38) | @Override
method typeFromId (line 44) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ChatRegistryStorage.java
class ChatRegistryStorage (line 27) | public abstract class ChatRegistryStorage implements StorableObject {
method chatType (line 31) | public @Nullable CompoundTag chatType(final int id) {
method addChatType (line 35) | public void addChatType(final int id, final CompoundTag chatType) {
method clear (line 39) | public void clear() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ChatRegistryStorage1_19_1.java
class ChatRegistryStorage1_19_1 (line 20) | public final class ChatRegistryStorage1_19_1 extends ChatRegistryStorage {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ReceivedMessagesStorage.java
class ReceivedMessagesStorage (line 24) | public final class ReceivedMessagesStorage implements StorableObject {
method add (line 29) | public void add(final PlayerMessageSignature signature) {
method lastSignatures (line 45) | public PlayerMessageSignature[] lastSignatures() {
method tickUnacknowledged (line 49) | public int tickUnacknowledged() {
method resetUnacknowledgedCount (line 53) | public void resetUnacknowledgedCount() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/Protocol1_19_3To1_19_1.java
class Protocol1_19_3To1_19_1 (line 70) | public final class Protocol1_19_3To1_19_1 extends BackwardsProtocol<Clie...
method Protocol1_19_3To1_19_1 (line 82) | public Protocol1_19_3To1_19_1() {
method registerPackets (line 86) | @Override
method rewriteSound (line 352) | private @Nullable String rewriteSound(final PacketWrapper wrapper) {
method init (line 380) | @Override
method getMappingData (line 387) | @Override
method getComponentRewriter (line 392) | @Override
method getItemRewriter (line 397) | @Override
method getBlockRewriter (line 402) | @Override
method getParticleRewriter (line 407) | @Override
method getEntityRewriter (line 412) | @Override
method getTagRewriter (line 417) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/rewriter/BlockItemPacketRewriter1_19_3.java
class BlockItemPacketRewriter1_19_3 (line 30) | public final class BlockItemPacketRewriter1_19_3 extends BackwardsItemRe...
method BlockItemPacketRewriter1_19_3 (line 32) | public BlockItemPacketRewriter1_19_3(final Protocol1_19_3To1_19_1 prot...
method registerPackets (line 36) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/rewriter/EntityPacketRewriter1_19_3.java
class EntityPacketRewriter1_19_3 (line 45) | public final class EntityPacketRewriter1_19_3 extends EntityRewriter<Cli...
method EntityPacketRewriter1_19_3 (line 55) | public EntityPacketRewriter1_19_3(final Protocol1_19_3To1_19_1 protoco...
method registerPackets (line 59) | @Override
method sendPlayerProfileUpdate (line 200) | private void sendPlayerProfileUpdate(final UserConnection connection, ...
method registerRewrites (line 219) | @Override
method onMappingDataLoaded (line 247) | @Override
method typeFromId (line 253) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/storage/ChatSessionStorage.java
class ChatSessionStorage (line 23) | public final class ChatSessionStorage implements StorableObject {
method uuid (line 27) | public UUID uuid() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/storage/ChatTypeStorage1_19_3.java
class ChatTypeStorage1_19_3 (line 22) | public final class ChatTypeStorage1_19_3 extends ChatRegistryStorage {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/Protocol1_19_4To1_19_3.java
class Protocol1_19_4To1_19_3 (line 44) | public final class Protocol1_19_4To1_19_3 extends BackwardsProtocol<Clie...
method Protocol1_19_4To1_19_3 (line 54) | public Protocol1_19_4To1_19_3() {
method registerPackets (line 58) | @Override
method init (line 95) | @Override
method getMappingData (line 100) | @Override
method getItemRewriter (line 105) | @Override
method getBlockRewriter (line 110) | @Override
method getParticleRewriter (line 115) | @Override
method getEntityRewriter (line 120) | @Override
method getComponentRewriter (line 125) | @Override
method getTagRewriter (line 130) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/rewriter/BlockItemPacketRewriter1_19_4.java
class BlockItemPacketRewriter1_19_4 (line 30) | public final class BlockItemPacketRewriter1_19_4 extends BackwardsItemRe...
method BlockItemPacketRewriter1_19_4 (line 32) | public BlockItemPacketRewriter1_19_4(final Protocol1_19_4To1_19_3 prot...
method registerPackets (line 36) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/rewriter/EntityPacketRewriter1_19_4.java
class EntityPacketRewriter1_19_4 (line 46) | public final class EntityPacketRewriter1_19_4 extends EntityRewriter<Cli...
method EntityPacketRewriter1_19_4 (line 50) | public EntityPacketRewriter1_19_4(final Protocol1_19_4To1_19_3 protoco...
method registerPackets (line 54) | @Override
method registerRewrites (line 233) | @Override
method onMappingDataLoaded (line 308) | @Override
method typeFromId (line 325) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/storage/EntityTracker1_19_4.java
class EntityTracker1_19_4 (line 34) | public final class EntityTracker1_19_4 extends EntityTrackerBase {
method EntityTracker1_19_4 (line 38) | public EntityTracker1_19_4(final UserConnection connection) {
method spawnEntity (line 42) | public int spawnEntity(final EntityTypes1_19_3 entityType, final doubl...
method clearEntities (line 66) | @Override
method removeEntity (line 74) | @Override
method clearLinkedEntities (line 80) | public void clearLinkedEntities(final int id) {
method linkedEntityStorage (line 88) | public LinkedEntityStorage linkedEntityStorage(final int id) {
method nextEntityId (line 96) | private int nextEntityId() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/storage/LinkedEntityStorage.java
class LinkedEntityStorage (line 28) | public class LinkedEntityStorage extends EntityPositionStorage implement...
method entities (line 32) | public int[] entities() {
method setEntities (line 36) | public void setEntities(final int... entities) {
method remove (line 40) | public void remove(final UserConnection connection) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/Protocol1_19To1_18_2.java
class Protocol1_19To1_18_2 (line 65) | public final class Protocol1_19To1_18_2 extends BackwardsProtocol<Client...
method Protocol1_19To1_18_2 (line 77) | public Protocol1_19To1_18_2() {
method registerPackets (line 81) | @Override
method init (line 344) | @Override
method getMappingData (line 350) | @Override
method getComponentRewriter (line 355) | @Override
method getEntityRewriter (line 360) | @Override
method getItemRewriter (line 365) | @Override
method getBlockRewriter (line 370) | @Override
method getParticleRewriter (line 375) | @Override
method getTagRewriter (line 380) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/data/BackwardsMappingData1_19.java
class BackwardsMappingData1_19 (line 31) | public final class BackwardsMappingData1_19 extends BackwardsMappingData {
method BackwardsMappingData1_19 (line 35) | public BackwardsMappingData1_19() {
method loadExtras (line 39) | @Override
method chatType (line 57) | public @Nullable CompoundTag chatType(final int id) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/BlockItemPacketRewriter1_19.java
class BlockItemPacketRewriter1_19 (line 43) | public final class BlockItemPacketRewriter1_19 extends BackwardsItemRewr...
method BlockItemPacketRewriter1_19 (line 47) | public BlockItemPacketRewriter1_19(final Protocol1_19To1_18_2 protocol) {
method registerPackets (line 51) | @Override
method registerRewrites (line 179) | @Override
method handleItemToClient (line 184) | @Override
method handleItemToServer (line 213) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/CommandRewriter1_19.java
class CommandRewriter1_19 (line 25) | public final class CommandRewriter1_19 extends CommandRewriter<Clientbou...
method CommandRewriter1_19 (line 27) | public CommandRewriter1_19(Protocol1_19To1_18_2 protocol) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/rewriter/EntityPacketRewriter1_19.java
class EntityPacketRewriter1_19 (line 50) | public final class EntityPacketRewriter1_19 extends EntityRewriter<Clien...
method EntityPacketRewriter1_19 (line 58) | public EntityPacketRewriter1_19(final Protocol1_19To1_18_2 protocol) {
method registerPackets (line 62) | @Override
method registerRewrites (line 322) | @Override
method onMappingDataLoaded (line 397) | @Override
method typeFromId (line 407) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/DimensionRegistryStorage.java
class DimensionRegistryStorage (line 30) | public final class DimensionRegistryStorage implements StorableObject {
method dimension (line 35) | public @Nullable CompoundTag dimension(final String dimensionKey) {
method addDimension (line 40) | public void addDimension(final String dimensionKey, final CompoundTag ...
method chatType (line 44) | public @Nullable CompoundTag chatType(final int id) {
method addChatType (line 48) | public void addChatType(final int id, final CompoundTag chatType) {
method clear (line 52) | public void clear() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/EntityTracker1_19.java
class EntityTracker1_19 (line 26) | public final class EntityTracker1_19 extends EntityTrackerBase {
method EntityTracker1_19 (line 31) | public EntityTracker1_19(final UserConnection connection) {
method removeEntity (line 35) | @Override
method getAffectedByBlindness (line 42) | public IntList getAffectedByBlindness() {
method getAffectedByDarkness (line 46) | public IntList getAffectedByDarkness() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_19to1_18_2/storage/StoredPainting.java
class StoredPainting (line 24) | public final class StoredPainting implements StorableObject {
method StoredPainting (line 31) | public StoredPainting(int entityId, UUID uuid, BlockPosition position,...
method StoredPainting (line 38) | public StoredPainting(final int entityId, final UUID uuid, final Block...
method to2dDirection (line 42) | private static byte to2dDirection(int direction) {
method entityId (line 53) | public int entityId() {
method uuid (line 57) | public UUID uuid() {
method position (line 61) | public BlockPosition position() {
method direction (line 65) | public byte direction() {
method type (line 69) | public int type() {
method setType (line 73) | public void setType(final int type) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/Protocol1_20_2To1_20.java
class Protocol1_20_2To1_20 (line 52) | public final class Protocol1_20_2To1_20 extends BackwardsProtocol<Client...
method Protocol1_20_2To1_20 (line 61) | public Protocol1_20_2To1_20() {
method registerPackets (line 65) | @Override
method register (line 163) | @Override
method transform (line 168) | @Override
method registerConfigurationChangeHandlers (line 198) | @Override
method init (line 203) | @Override
method getMappingData (line 208) | @Override
method getEntityRewriter (line 213) | @Override
method getItemRewriter (line 218) | @Override
method getBlockRewriter (line 223) | @Override
method getParticleRewriter (line 228) | @Override
method getTagRewriter (line 233) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/provider/AdvancementCriteriaProvider.java
class AdvancementCriteriaProvider (line 22) | public class AdvancementCriteriaProvider implements Provider {
method getCriteria (line 24) | public String[] getCriteria(final String advancementKey) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java
class BlockItemPacketRewriter1_20_2 (line 50) | public final class BlockItemPacketRewriter1_20_2 extends BackwardsItemRe...
method BlockItemPacketRewriter1_20_2 (line 52) | public BlockItemPacketRewriter1_20_2(final Protocol1_20_2To1_20 protoc...
method registerPackets (line 56) | @Override
method handleItemToClient (line 177) | @Override
method handleItemToServer (line 194) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/BlockRewriter1_20_2.java
class BlockRewriter1_20_2 (line 35) | public final class BlockRewriter1_20_2 extends BlockRewriter<Clientbound...
method BlockRewriter1_20_2 (line 37) | public BlockRewriter1_20_2(final Protocol<ClientboundPackets1_20_2, ?,...
method handleBlockEntity (line 41) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/rewriter/EntityPacketRewriter1_20_2.java
class EntityPacketRewriter1_20_2 (line 35) | public final class EntityPacketRewriter1_20_2 extends EntityRewriter<Cli...
method EntityPacketRewriter1_20_2 (line 37) | public EntityPacketRewriter1_20_2(final Protocol1_20_2To1_20 protocol) {
method registerPackets (line 41) | @Override
method registerRewrites (line 198) | @Override
method typeFromId (line 207) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_2to1_20/storage/ConfigurationPacketStorage.java
class ConfigurationPacketStorage (line 34) | public final class ConfigurationPacketStorage implements StorableObject {
method setResourcePack (line 42) | public void setResourcePack(final PacketWrapper wrapper) {
method registry (line 46) | public CompoundTag registry() {
method setRegistry (line 51) | public void setRegistry(final CompoundTag registry) {
method enabledFeatures (line 55) | public String @Nullable [] enabledFeatures() {
method setEnabledFeatures (line 59) | public void setEnabledFeatures(final String[] enabledFeatures) {
method addRawPacket (line 63) | public void addRawPacket(final PacketWrapper wrapper, final PacketType...
method toQueuedPacket (line 67) | private QueuedPacket toQueuedPacket(final PacketWrapper wrapper, final...
method sendQueuedPackets (line 78) | public void sendQueuedPackets(final UserConnection connection) {
method isFinished (line 99) | public boolean isFinished() {
method setFinished (line 103) | public void setFinished(final boolean finished) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/Protocol1_20_3To1_20_2.java
class Protocol1_20_3To1_20_2 (line 64) | public final class Protocol1_20_3To1_20_2 extends BackwardsProtocol<Clie...
method Protocol1_20_3To1_20_2 (line 74) | public Protocol1_20_3To1_20_2() {
method registerPackets (line 78) | @Override
method resourcePackStatusHandler (line 339) | private PacketHandler resourcePackStatusHandler() {
method resourcePackHandler (line 346) | private PacketHandler resourcePackHandler() {
method convertComponent (line 358) | private void convertComponent(final PacketWrapper wrapper) {
method convertOptionalComponent (line 364) | private void convertOptionalComponent(final PacketWrapper wrapper) {
method init (line 370) | @Override
method getMappingData (line 376) | @Override
method getItemRewriter (line 381) | @Override
method getBlockRewriter (line 386) | @Override
method getParticleRewriter (line 391) | @Override
method getEntityRewriter (line 396) | @Override
method getComponentRewriter (line 401) | @Override
method getTagRewriter (line 406) | @Override
method createPacketTypesProvider (line 411) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java
class BlockItemPacketRewriter1_20_3 (line 32) | public final class BlockItemPacketRewriter1_20_3 extends BackwardsItemRe...
method BlockItemPacketRewriter1_20_3 (line 34) | public BlockItemPacketRewriter1_20_3(final Protocol1_20_3To1_20_2 prot...
method registerPackets (line 38) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/rewriter/BlockPacketRewriter1_20_3.java
class BlockPacketRewriter1_20_3 (line 36) | public final class BlockPacketRewriter1_20_3 extends BlockRewriter<Clien...
method BlockPacketRewriter1_20_3 (line 38) | public BlockPacketRewriter1_20_3(final Protocol1_20_3To1_20_2 protocol) {
method handleBlockEntity (line 42) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/rewriter/EntityPacketRewriter1_20_3.java
class EntityPacketRewriter1_20_3 (line 38) | public final class EntityPacketRewriter1_20_3 extends EntityRewriter<Cli...
method EntityPacketRewriter1_20_3 (line 40) | public EntityPacketRewriter1_20_3(final Protocol1_20_3To1_20_2 protoco...
method registerPackets (line 44) | @Override
method spawnPositionHandler (line 88) | private PacketHandler spawnPositionHandler() {
method registerRewrites (line 95) | @Override
method onMappingDataLoaded (line 140) | @Override
method typeFromId (line 147) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_3to1_20_2/storage/SpawnPositionStorage.java
class SpawnPositionStorage (line 25) | public class SpawnPositionStorage implements StorableObject {
method getSpawnPosition (line 31) | public Pair<BlockPosition, Float> getSpawnPosition() {
method setSpawnPosition (line 35) | public void setSpawnPosition(final Pair<BlockPosition, Float> spawnPos...
method setDimension (line 44) | public void setDimension(final String dimension) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/Protocol1_20_5To1_20_3.java
class Protocol1_20_5To1_20_3 (line 69) | public final class Protocol1_20_5To1_20_3 extends BackwardsProtocol<Clie...
method Protocol1_20_5To1_20_3 (line 79) | public Protocol1_20_5To1_20_3() {
method registerPackets (line 83) | @Override
method sendRegistryData (line 158) | private void sendRegistryData(final UserConnection connection) {
method handleStoreCookie (line 170) | private void handleStoreCookie(final PacketWrapper wrapper) {
method handleCookieRequest (line 182) | private void handleCookieRequest(final PacketWrapper wrapper, final Se...
method handleTransfer (line 193) | private void handleTransfer(final PacketWrapper wrapper) {
method init (line 201) | @Override
method register (line 211) | @Override
method getMappingData (line 216) | @Override
method getEntityRewriter (line 221) | @Override
method getItemRewriter (line 226) | @Override
method getBlockRewriter (line 231) | @Override
method getParticleRewriter (line 236) | @Override
method getComponentRewriter (line 241) | @Override
method getTagRewriter (line 246) | @Override
method types (line 251) | @Override
method mappedTypes (line 256) | @Override
method createPacketTypesProvider (line 261) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/Types1_20_3.java
class Types1_20_3 (line 34) | final class Types1_20_3 implements VersionedTypesHolder {
method item (line 35) | @Override
method itemArray (line 40) | @Override
method itemTemplate (line 45) | @Override
method optionalItemTemplate (line 50) | @Override
method itemTemplateArray (line 55) | @Override
method itemCost (line 60) | @Override
method optionalItemCost (line 65) | @Override
method lengthPrefixedItem (line 70) | @Override
method structuredData (line 75) | @Override
method structuredDataArray (line 80) | @Override
method structuredDataKeys (line 85) | @Override
method particle (line 90) | @Override
method particles (line 95) | @Override
method entityDataTypes (line 100) | @Override
method entityDataList (line 105) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/provider/NoopTransferProvider.java
class NoopTransferProvider (line 22) | final class NoopTransferProvider implements TransferProvider {
method connectToServer (line 24) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/provider/TransferProvider.java
type TransferProvider (line 23) | @FunctionalInterface
method connectToServer (line 28) | void connectToServer(UserConnection connection, String host, int port);
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java
class BlockItemPacketRewriter1_20_5 (line 51) | public final class BlockItemPacketRewriter1_20_5 extends BackwardsStruct...
method BlockItemPacketRewriter1_20_5 (line 57) | public BlockItemPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 prot...
method registerPackets (line 62) | @Override
method cleanInput (line 205) | private void cleanInput(@Nullable final Item item) {
method removeEmptyList (line 234) | private void removeEmptyList(final CompoundTag tag, final String key) {
method handleItemToClient (line 241) | @Override
method handleItemDataComponentsToClient (line 292) | @Override
method handleItemDataComponentsToServer (line 296) | @Override
method handleRewritablesToClient (line 300) | @Override
method handleRewritablesToServer (line 304) | @Override
method handleItemToServer (line 308) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockPacketRewriter1_20_5.java
class BlockPacketRewriter1_20_5 (line 36) | public final class BlockPacketRewriter1_20_5 extends BlockRewriter<Clien...
method BlockPacketRewriter1_20_5 (line 38) | public BlockPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protocol) {
method handleBlockEntity (line 42) | @Override
method updateBlockEntityTag (line 47) | public void updateBlockEntityTag(@Nullable final CompoundTag tag) {
method updateProfileTag (line 80) | private void updateProfileTag(final CompoundTag tag, final CompoundTag...
method colorId (line 117) | private static int colorId(final String color) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/ComponentRewriter1_20_5.java
class ComponentRewriter1_20_5 (line 36) | public final class ComponentRewriter1_20_5 extends JsonNBTComponentRewri...
method ComponentRewriter1_20_5 (line 40) | public ComponentRewriter1_20_5(final BackwardsProtocol<ClientboundPack...
method handleShowItem (line 45) | @Override
method inputSerializerVersion (line 76) | @Override
method outputSerializerVersion (line 81) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/EntityPacketRewriter1_20_5.java
class EntityPacketRewriter1_20_5 (line 61) | public final class EntityPacketRewriter1_20_5 extends EntityRewriter<Cli...
method EntityPacketRewriter1_20_5 (line 63) | public EntityPacketRewriter1_20_5(final Protocol1_20_5To1_20_3 protoco...
method registerPackets (line 67) | @Override
method toMappings (line 310) | private KeyMappings toMappings(final RegistryEntry[] entries) {
method updateParticleFormat (line 318) | private void updateParticleFormat(final CompoundTag options, final Str...
method encodeARGB (line 354) | private int encodeARGB(final float a, final float r, final float g, fi...
method encodeColorPart (line 362) | private int encodeColorPart(final float part) {
method removeAlpha (line 366) | private int removeAlpha(final int argb) {
method moveTag (line 370) | private void moveTag(final CompoundTag compoundTag, final String from,...
method updateDimensionTypeData (line 377) | private void updateDimensionTypeData(final CompoundTag elementTag) {
method sendCarpetColorUpdate (line 387) | private void sendCarpetColorUpdate(final UserConnection connection, fi...
method registerRewrites (line 403) | @Override
method onMappingDataLoaded (line 463) | @Override
method typeFromId (line 472) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/storage/CookieStorage.java
class CookieStorage (line 24) | public final class CookieStorage implements StorableObject {
method cookies (line 28) | public Map<String, byte[]> cookies() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/storage/RegistryDataStorage.java
class RegistryDataStorage (line 24) | public final class RegistryDataStorage implements StorableObject {
method registryData (line 30) | public CompoundTag registryData() {
method sentRegistryData (line 34) | public boolean sentRegistryData() {
method setSentRegistryData (line 38) | public void setSentRegistryData() {
method dimensionKeys (line 42) | public String @Nullable [] dimensionKeys() {
method setDimensionKeys (line 46) | public void setDimensionKeys(final String[] dimensionKeys) {
method clear (line 50) | public void clear() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/storage/SecureChatStorage.java
class SecureChatStorage (line 22) | public final class SecureChatStorage implements StorableObject {
method setEnforcesSecureChat (line 25) | public void setEnforcesSecureChat(final boolean enforcesSecureChat) {
method enforcesSecureChat (line 29) | public boolean enforcesSecureChat() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20to1_19_4/Protocol1_20To1_19_4.java
class Protocol1_20To1_19_4 (line 39) | public final class Protocol1_20To1_19_4 extends BackwardsProtocol<Client...
method Protocol1_20To1_19_4 (line 49) | public Protocol1_20To1_19_4() {
method registerPackets (line 53) | @Override
method init (line 75) | @Override
method getMappingData (line 80) | @Override
method getEntityRewriter (line 85) | @Override
method getItemRewriter (line 90) | @Override
method getBlockRewriter (line 95) | @Override
method getParticleRewriter (line 100) | @Override
method getComponentRewriter (line 105) | @Override
method getTagRewriter (line 110) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20to1_19_4/data/BackwardsMappingData1_20.java
class BackwardsMappingData1_20 (line 25) | public class BackwardsMappingData1_20 extends BackwardsMappingData {
method BackwardsMappingData1_20 (line 29) | public BackwardsMappingData1_20() {
method loadExtras (line 33) | @Override
method getTrimPatternRegistry (line 40) | public CompoundTag getTrimPatternRegistry() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20to1_19_4/rewriter/BlockItemPacketRewriter1_20.java
class BlockItemPacketRewriter1_20 (line 42) | public final class BlockItemPacketRewriter1_20 extends BackwardsItemRewr...
method BlockItemPacketRewriter1_20 (line 46) | public BlockItemPacketRewriter1_20(final Protocol1_20To1_19_4 protocol) {
method registerPackets (line 50) | @Override
method handleItemToClient (line 133) | @Override
method handleItemToServer (line 157) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20to1_19_4/rewriter/BlockPacketRewriter1_20.java
class BlockPacketRewriter1_20 (line 32) | public final class BlockPacketRewriter1_20 extends BlockRewriter<Clientb...
method BlockPacketRewriter1_20 (line 34) | public BlockPacketRewriter1_20(final Protocol1_20To1_19_4 protocol) {
method handleBlockEntity (line 38) | @Override
method writeMessages (line 64) | private void writeMessages(final CompoundTag frontText, final Compound...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_20to1_19_4/rewriter/EntityPacketRewriter1_20.java
class EntityPacketRewriter1_20 (line 38) | public final class EntityPacketRewriter1_20 extends EntityRewriter<Clien...
method EntityPacketRewriter1_20 (line 44) | public EntityPacketRewriter1_20(final Protocol1_20To1_19_4 protocol) {
method registerPackets (line 48) | @Override
method registerRewrites (line 121) | @Override
method typeFromId (line 144) | @Override
method rotateY180 (line 149) | private Quaternion rotateY180(final Quaternion quaternion) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/Protocol1_21_11To1_21_9.java
class Protocol1_21_11To1_21_9 (line 67) | public final class Protocol1_21_11To1_21_9 extends BackwardsProtocol<Cli...
method updateType (line 80) | @Override
method Protocol1_21_11To1_21_9 (line 97) | public Protocol1_21_11To1_21_9() {
method moveAttribute (line 101) | private void moveAttribute(final CompoundTag baseTag, @Nullable final ...
method floatsToARGB (line 110) | private int floatsToARGB(final float r, final float g, final float b) {
method registerPackets (line 114) | @Override
method init (line 240) | @Override
method getMappingData (line 247) | @Override
method getEntityRewriter (line 252) | @Override
method getItemRewriter (line 257) | @Override
method getBlockRewriter (line 262) | @Override
method getRegistryDataRewriter (line 267) | @Override
method getRecipeRewriter (line 272) | @Override
method getParticleRewriter (line 277) | @Override
method getComponentRewriter (line 282) | @Override
method getTagRewriter (line 287) | @Override
method types (line 292) | @Override
method mappedTypes (line 297) | @Override
method createPacketTypesProvider (line 302) | @Override
method mapColor (line 312) | private Tag mapColor(final Tag attributeTag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/rewriter/BlockItemPacketRewriter1_21_11.java
class BlockItemPacketRewriter1_21_11 (line 50) | public final class BlockItemPacketRewriter1_21_11 extends BackwardsStruc...
method BlockItemPacketRewriter1_21_11 (line 52) | public BlockItemPacketRewriter1_21_11(final Protocol1_21_11To1_21_9 pr...
method registerPackets (line 56) | @Override
method handleItemDataComponentsToClient (line 79) | @Override
method handleItemDataComponentsToServer (line 85) | @Override
method restoreBackupData (line 91) | @Override
method loadDamageCondition (line 169) | private KineticWeapon.Condition loadDamageCondition(final CompoundTag ...
method backupInconvertibleData (line 181) | @Override
method saveDamageCondition (line 268) | private void saveDamageCondition(final CompoundTag tag, final String k...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/rewriter/ComponentRewriter1_21_11.java
class ComponentRewriter1_21_11 (line 27) | public final class ComponentRewriter1_21_11 extends NBTComponentRewriter...
method ComponentRewriter1_21_11 (line 29) | public ComponentRewriter1_21_11(final BackwardsProtocol<ClientboundPac...
method handleShowItem (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/rewriter/EntityPacketRewriter1_21_11.java
class EntityPacketRewriter1_21_11 (line 36) | public final class EntityPacketRewriter1_21_11 extends EntityRewriter<Cl...
method EntityPacketRewriter1_21_11 (line 38) | public EntityPacketRewriter1_21_11(final Protocol1_21_11To1_21_9 proto...
method registerPackets (line 42) | @Override
method registerRewrites (line 62) | @Override
method absoluteToRelativeTicks (line 94) | private void absoluteToRelativeTicks(final EntityDataHandlerEvent even...
method onMappingDataLoaded (line 101) | @Override
method typeFromId (line 110) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_11to1_21_9/storage/GameTimeStorage.java
class GameTimeStorage (line 22) | public final class GameTimeStorage implements StorableObject {
method gameTime (line 26) | public long gameTime() {
method setGameTime (line 30) | public void setGameTime(final long gameTime) {
method incrementGameTime (line 34) | public void incrementGameTime() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/Protocol1_21_2To1_21.java
class Protocol1_21_2To1_21 (line 62) | public final class Protocol1_21_2To1_21 extends BackwardsProtocol<Client...
method Protocol1_21_2To1_21 (line 73) | public Protocol1_21_2To1_21() {
method registerPackets (line 77) | @Override
method storeTags (line 117) | private void storeTags(final PacketWrapper wrapper) {
method clientInformation (line 123) | private void clientInformation(final PacketWrapper wrapper) {
method init (line 135) | @Override
method getMappingData (line 145) | @Override
method getEntityRewriter (line 150) | @Override
method getItemRewriter (line 155) | @Override
method getBlockRewriter (line 160) | @Override
method getParticleRewriter (line 165) | @Override
method getRegistryDataRewriter (line 170) | @Override
method getComponentRewriter (line 175) | @Override
method getTagRewriter (line 180) | @Override
method types (line 185) | @Override
method mappedTypes (line 190) | @Override
method createPacketTypesProvider (line 195) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/rewriter/BlockItemPacketRewriter1_21_2.java
class BlockItemPacketRewriter1_21_2 (line 75) | public final class BlockItemPacketRewriter1_21_2 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_2 (line 77) | public BlockItemPacketRewriter1_21_2(final Protocol1_21_2To1_21 protoc...
method registerPackets (line 81) | @Override
method varIntToUnsignedByte (line 381) | private void varIntToUnsignedByte(final PacketWrapper wrapper) {
method varIntToByte (line 386) | private void varIntToByte(final PacketWrapper wrapper) {
method byteToVarInt (line 391) | private void byteToVarInt(final PacketWrapper wrapper) {
method signBlockState (line 396) | private boolean signBlockState(final int blockStateId) {
method handleItemToClient (line 402) | @Override
method handleItemToServer (line 410) | @Override
method backupInconvertibleData (line 443) | private void backupInconvertibleData(final Item item) {
method convertConsumableEffect (line 529) | private void convertConsumableEffect(final CompoundTag tag, Consumable...
method convertPotionEffectData (line 560) | private void convertPotionEffectData(final CompoundTag tag, final Poti...
method convertConsumableEffect (line 573) | private Consumable1_21_2.ConsumeEffect<?> convertConsumableEffect(fina...
method convertPotionEffectData (line 602) | private PotionEffectData convertPotionEffectData(final CompoundTag tag) {
method restoreInconvertibleData (line 612) | private void restoreInconvertibleData(final Item item) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/rewriter/ComponentRewriter1_21_2.java
class ComponentRewriter1_21_2 (line 30) | public final class ComponentRewriter1_21_2 extends JsonNBTComponentRewri...
method ComponentRewriter1_21_2 (line 32) | public ComponentRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
method handleShowItem (line 36) | @Override
method inputSerializerVersion (line 63) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/rewriter/EntityPacketRewriter1_21_2.java
class EntityPacketRewriter1_21_2 (line 56) | public final class EntityPacketRewriter1_21_2 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_2 (line 69) | public EntityPacketRewriter1_21_2(final Protocol1_21_2To1_21 protocol) {
method registerPackets (line 73) | @Override
method updateParticleFormat (line 444) | private void updateParticleFormat(final CompoundTag options, final Str...
method replaceColor (line 454) | private void replaceColor(final CompoundTag options, final String to_c...
method writePackedRotation (line 467) | private void writePackedRotation(final PacketWrapper wrapper, final fl...
method handleRelativeArguments (line 473) | private void handleRelativeArguments(
method sendSneakingPlayerCommand (line 563) | private void sendSneakingPlayerCommand(final PacketWrapper wrapper, fi...
method boatTypeFromEntityType (line 574) | private int boatTypeFromEntityType(final EntityType type) {
method chestBoatTypeFromEntityType (line 598) | private int chestBoatTypeFromEntityType(final EntityType type) {
method fixOnGround (line 622) | private void fixOnGround(final PacketWrapper wrapper) {
method registerRewrites (line 627) | @Override
method typeFromId (line 651) | @Override
method onMappingDataLoaded (line 656) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/rewriter/ParticleRewriter1_21_2.java
class ParticleRewriter1_21_2 (line 27) | public final class ParticleRewriter1_21_2 extends ParticleRewriter<Clien...
method ParticleRewriter1_21_2 (line 29) | public ParticleRewriter1_21_2(final Protocol<ClientboundPacket1_21_2, ...
method rewriteParticle (line 33) | @Override
method argbToVector (line 51) | private void argbToVector(final Particle particle, final int index) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/storage/InventoryStateIdStorage.java
class InventoryStateIdStorage (line 22) | public final class InventoryStateIdStorage implements StorableObject {
method stateId (line 27) | public int stateId() {
method setStateId (line 31) | public void setStateId(final int stateId) {
method smithingTableOpen (line 35) | public boolean smithingTableOpen() {
method setSmithingTableOpen (line 39) | public void setSmithingTableOpen(final boolean smithingTableOpen) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/storage/ItemTagStorage.java
class ItemTagStorage (line 28) | public final class ItemTagStorage implements StorableObject {
method itemTag (line 32) | public int @Nullable [] itemTag(final String key) {
method readItemTags (line 36) | public void readItemTags(final PacketWrapper wrapper) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/storage/PlayerStorage.java
class PlayerStorage (line 27) | public final class PlayerStorage extends PlayerPositionStorage {
method tick (line 42) | public void tick(final UserConnection user) {
method yaw (line 86) | public float yaw() {
method pitch (line 90) | public float pitch() {
method setRotation (line 94) | public void setRotation(final float yaw, final float pitch) {
method setPlayerCommandTrackedSneaking (line 99) | public void setPlayerCommandTrackedSneaking(final boolean playerComman...
method setPlayerCommandTrackedSprinting (line 103) | public void setPlayerCommandTrackedSprinting(final boolean playerComma...
method setSneaking (line 107) | public boolean setSneaking(final boolean sneaking) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/storage/RecipeStorage.java
class RecipeStorage (line 38) | public final class RecipeStorage implements StorableObject {
method RecipeStorage (line 49) | public RecipeStorage(final Protocol1_21_2To1_21 protocol) {
class Recipe (line 53) | abstract static class Recipe {
method write (line 62) | abstract void write(PacketWrapper wrapper);
method writeGroup (line 64) | void writeGroup(final PacketWrapper wrapper) {
method writeIngredients (line 68) | void writeIngredients(final PacketWrapper wrapper, final Item[][] in...
method writeIngredient (line 75) | void writeIngredient(final PacketWrapper wrapper, final Item[] ingre...
method writeResult (line 83) | void writeResult(final PacketWrapper wrapper, final Item result) {
method writeCategory (line 87) | void writeCategory(final PacketWrapper wrapper) {
method category (line 98) | int category() {
method sendRecipes (line 103) | public void sendRecipes(final UserConnection connection) {
method identifier (line 137) | private static String identifier(final int recipeIndex) {
method lockRecipes (line 142) | public void lockRecipes(final PacketWrapper wrapper, final int[] ids) {
method sendUnlockedRecipes (line 159) | private void sendUnlockedRecipes(final UserConnection connection, fina...
method readRecipe (line 182) | public void readRecipe(final PacketWrapper wrapper) {
method readShapeless (line 213) | private Recipe readShapeless(final PacketWrapper wrapper) {
method readShaped (line 220) | private Recipe readShaped(final PacketWrapper wrapper) {
method readFurnace (line 229) | private Recipe readFurnace(final PacketWrapper wrapper) {
method readStoneCutter (line 239) | private Recipe readStoneCutter(final PacketWrapper wrapper) {
method readSmithing (line 247) | private Recipe readSmithing(final PacketWrapper wrapper) {
method add (line 257) | private Recipe add(final Recipe recipe) {
method readSlotDisplayList (line 262) | private Item[][] readSlotDisplayList(final PacketWrapper wrapper) {
method readSingleSlotDisplay (line 271) | private Item readSingleSlotDisplay(final PacketWrapper wrapper) {
method readSlotDisplay (line 276) | private Item[] readSlotDisplay(final PacketWrapper wrapper) {
method rewriteItemId (line 316) | private int rewriteItemId(final int id) {
method readStoneCutterRecipes (line 320) | public void readStoneCutterRecipes(final PacketWrapper wrapper) {
method readHolderSet (line 332) | private Item[] readHolderSet(final PacketWrapper wrapper) {
class ShapelessRecipe (line 350) | private static final class ShapelessRecipe extends Recipe {
method ShapelessRecipe (line 355) | private ShapelessRecipe(final Item[][] ingredients, final Item resul...
method write (line 360) | @Override
class ShapedRecipe (line 370) | private static final class ShapedRecipe extends Recipe {
method ShapedRecipe (line 377) | private ShapedRecipe(final int width, final int height, final Item[]...
method write (line 384) | @Override
class FurnaceRecipe (line 401) | private static final class FurnaceRecipe extends Recipe {
method FurnaceRecipe (line 407) | private FurnaceRecipe(final Item[] ingredient, final Item result, fi...
method write (line 414) | @Override
method serializerId (line 425) | private int serializerId() {
class StoneCutterRecipe (line 436) | private static final class StoneCutterRecipe extends Recipe {
method StoneCutterRecipe (line 441) | private StoneCutterRecipe(final Item[] ingredient, final Item result) {
method write (line 446) | @Override
method setRecipeBookSettings (line 455) | public void setRecipeBookSettings(final boolean[] recipeBookSettings) {
method clearRecipes (line 459) | public void clearRecipes() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/storage/SignStorage.java
class SignStorage (line 25) | public final class SignStorage implements StorableObject {
method addSign (line 29) | public void addSign(final BlockPosition position) {
method isSign (line 33) | public boolean isSign(final BlockPosition position) {
method removeSign (line 37) | public void removeSign(final BlockPosition position) {
method removeSigns (line 41) | public void removeSigns(final int chunkX, final int chunkZ) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_2to1_21/task/PlayerPacketsTickTask.java
class PlayerPacketsTickTask (line 33) | public final class PlayerPacketsTickTask extends StorableObjectTask<Play...
method PlayerPacketsTickTask (line 35) | public PlayerPacketsTickTask() {
method run (line 39) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/Protocol1_21_4To1_21_2.java
class Protocol1_21_4To1_21_2 (line 61) | public final class Protocol1_21_4To1_21_2 extends BackwardsProtocol<Clie...
method handle (line 72) | @Override
method Protocol1_21_4To1_21_2 (line 111) | public Protocol1_21_4To1_21_2() {
method registerPackets (line 115) | @Override
method onMappingDataLoaded (line 185) | @Override
method init (line 192) | @Override
method getMappingData (line 197) | @Override
method getEntityRewriter (line 202) | @Override
method getItemRewriter (line 207) | @Override
method getBlockRewriter (line 212) | @Override
method getParticleRewriter (line 217) | @Override
method getComponentRewriter (line 222) | @Override
method getTagRewriter (line 227) | @Override
method getRecipeRewriter (line 232) | @Override
method getRegistryDataRewriter (line 237) | @Override
method types (line 242) | @Override
method mappedTypes (line 247) | @Override
method createPacketTypesProvider (line 252) | @Override
method itemModelIndex (line 262) | private float itemModelIndex(final String trim) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/rewriter/BlockItemPacketRewriter1_21_4.java
class BlockItemPacketRewriter1_21_4 (line 42) | public final class BlockItemPacketRewriter1_21_4 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_4 (line 44) | public BlockItemPacketRewriter1_21_4(final Protocol1_21_4To1_21_2 prot...
method registerPackets (line 48) | @Override
method handleItemToClient (line 58) | @Override
method handleItemToServer (line 77) | @Override
method customModelDataFromTag (line 94) | private CustomModelData1_21_4 customModelDataFromTag(final CompoundTag...
method customModelDataToTag (line 117) | private CompoundTag customModelDataToTag(final CustomModelData1_21_4 c...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/rewriter/ComponentRewriter1_21_4.java
class ComponentRewriter1_21_4 (line 28) | public final class ComponentRewriter1_21_4 extends JsonNBTComponentRewri...
method ComponentRewriter1_21_4 (line 30) | public ComponentRewriter1_21_4(final BackwardsProtocol<ClientboundPack...
method handleShowItem (line 34) | @Override
method inputSerializerVersion (line 44) | @Override
method outputSerializerVersion (line 49) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/rewriter/EntityPacketRewriter1_21_4.java
class EntityPacketRewriter1_21_4 (line 32) | public final class EntityPacketRewriter1_21_4 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_4 (line 34) | public EntityPacketRewriter1_21_4(final Protocol1_21_4To1_21_2 protoco...
method registerPackets (line 38) | @Override
method registerRewrites (line 78) | @Override
method typeFromId (line 105) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_4to1_21_2/rewriter/ParticleRewriter1_21_4.java
class ParticleRewriter1_21_4 (line 26) | public final class ParticleRewriter1_21_4 extends ParticleRewriter<Clien...
method ParticleRewriter1_21_4 (line 28) | public ParticleRewriter1_21_4(final Protocol<ClientboundPacket1_21_2, ...
method rewriteParticle (line 32) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/Protocol1_21_5To1_21_4.java
class Protocol1_21_5To1_21_4 (line 67) | public final class Protocol1_21_5To1_21_4 extends BackwardsProtocol<Clie...
method rewriteParticle (line 73) | @Override
method handleSmithingTrimSlotDisplay (line 84) | @Override
method Protocol1_21_5To1_21_4 (line 96) | public Protocol1_21_5To1_21_4() {
method registerPackets (line 100) | @Override
method init (line 178) | @Override
method getMappingData (line 184) | @Override
method getEntityRewriter (line 189) | @Override
method getItemRewriter (line 194) | @Override
method getBlockRewriter (line 199) | @Override
method getRegistryDataRewriter (line 204) | @Override
method getParticleRewriter (line 209) | @Override
method getComponentRewriter (line 214) | @Override
method getTagRewriter (line 219) | @Override
method getRecipeRewriter (line 224) | @Override
method types (line 229) | @Override
method mappedTypes (line 234) | @Override
method createPacketTypesProvider (line 239) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/BlockItemPacketRewriter1_21_5.java
class BlockItemPacketRewriter1_21_5 (line 88) | public final class BlockItemPacketRewriter1_21_5 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_5 (line 92) | public BlockItemPacketRewriter1_21_5(final Protocol1_21_5To1_21_4 prot...
method registerPackets (line 96) | @Override
method convertClientAsset (line 254) | private void convertClientAsset(final PacketWrapper wrapper) {
method sendSaddledEntityData (line 261) | private void sendSaddledEntityData(final UserConnection connection, fi...
method heightmapType (line 302) | private String heightmapType(final int id) {
method backupInconvertibleData (line 314) | @Override
method handleItemDataComponentsToClient (line 442) | @Override
method handleItemDataComponentsToServer (line 448) | @Override
method restoreBackupData (line 454) | @Override
method tagToSound (line 571) | private SoundEvent tagToSound(final CompoundTag tag) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/BlockPacketRewriter1_21_5.java
class BlockPacketRewriter1_21_5 (line 32) | public final class BlockPacketRewriter1_21_5 extends BlockRewriter<Clien...
method BlockPacketRewriter1_21_5 (line 38) | public BlockPacketRewriter1_21_5(final Protocol1_21_5To1_21_4 protocol) {
method handleBlockEntity (line 43) | @Override
method updateSignMessages (line 61) | private void updateSignMessages(final UserConnection connection, final...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/ComponentRewriter1_21_5.java
class ComponentRewriter1_21_5 (line 43) | public final class ComponentRewriter1_21_5 extends NBTComponentRewriter<...
method ComponentRewriter1_21_5 (line 45) | public ComponentRewriter1_21_5(final BackwardsProtocol<ClientboundPack...
method processCompoundTag (line 49) | @Override
method handleHoverEvent (line 62) | @Override
method updateClickEvent (line 76) | private void updateClickEvent(final CompoundTag clickEventTag) {
method updateShowTextHover (line 96) | private void updateShowTextHover(final CompoundTag hoverEventTag) {
method updateShowItemHover (line 101) | private void updateShowItemHover(final UserConnection connection, fina...
method handleShowItem (line 120) | @Override
method updateDataComponents (line 133) | private void updateDataComponents(final CompoundTag componentsTag) {
method updateShowInTooltip (line 179) | private void updateShowInTooltip(final CompoundTag tag, final String k...
method handleAdventureModePredicate (line 186) | private void handleAdventureModePredicate(final CompoundTag components...
method handleEnchantments (line 199) | private void handleEnchantments(final CompoundTag componentsTag, final...
method insertUglyJson (line 210) | private void insertUglyJson(final CompoundTag componentsTag, final Use...
method updateComponentList (line 221) | public ListTag<StringTag> updateComponentList(final UserConnection con...
method insertUglyJson (line 229) | private void insertUglyJson(final CompoundTag componentsTag, final Str...
method updateShowEntityHover (line 239) | private void updateShowEntityHover(final CompoundTag hoverEventTag) {
method toUglyJson (line 259) | String toUglyJson(final UserConnection connection, final Tag value) {
method handleWrittenBookContents (line 264) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/EntityPacketRewriter1_21_5.java
class EntityPacketRewriter1_21_5 (line 39) | public final class EntityPacketRewriter1_21_5 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_5 (line 41) | public EntityPacketRewriter1_21_5(final Protocol1_21_5To1_21_4 protoco...
method registerPackets (line 45) | @Override
method visibility (line 115) | private String visibility(final int id) {
method collision (line 125) | private String collision(final int id) {
method registerRewrites (line 135) | @Override
method typeFromId (line 242) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/rewriter/RegistryDataRewriter1_21_5.java
class RegistryDataRewriter1_21_5 (line 29) | public final class RegistryDataRewriter1_21_5 extends BackwardsRegistryR...
method RegistryDataRewriter1_21_5 (line 31) | public RegistryDataRewriter1_21_5(final BackwardsProtocol<?, ?, ?, ?> ...
method handle (line 41) | @Override
method updateTrim (line 65) | private void updateTrim(final RegistryEntry[] entries, final String it...
method updateEnchantment (line 76) | private void updateEnchantment(final RegistryEntry[] entries) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_5to1_21_4/storage/HashedItemConverterStorage.java
class HashedItemConverterStorage (line 29) | public class HashedItemConverterStorage implements StorableObject {
method HashedItemConverterStorage (line 33) | public HashedItemConverterStorage(final Protocol<?, ?, ?, ?> protocol) {
method hasher (line 39) | public Hasher hasher() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/Protocol1_21_6To1_21_5.java
class Protocol1_21_6To1_21_5 (line 76) | public final class Protocol1_21_6To1_21_5 extends BackwardsProtocol<Clie...
method Protocol1_21_6To1_21_5 (line 88) | public Protocol1_21_6To1_21_5() {
method registerPackets (line 92) | @Override
method fixSoundSource (line 233) | private void fixSoundSource(final PacketWrapper wrapper) {
method updateTags (line 240) | private void updateTags(final PacketWrapper wrapper) {
method clearDialog (line 271) | private void clearDialog(final PacketWrapper wrapper) {
method storeServerLinks (line 281) | private void storeServerLinks(final PacketWrapper wrapper) {
method handleClickEvents (line 298) | private void handleClickEvents(final PacketWrapper wrapper) {
method init (line 307) | @Override
method register (line 315) | @Override
method getMappingData (line 320) | @Override
method getEntityRewriter (line 325) | @Override
method getItemRewriter (line 330) | @Override
method getBlockRewriter (line 335) | @Override
method getRegistryDataRewriter (line 340) | @Override
method getParticleRewriter (line 345) | @Override
method getComponentRewriter (line 350) | @Override
method getTagRewriter (line 355) | @Override
method getRecipeRewriter (line 360) | @Override
method types (line 365) | @Override
method mappedTypes (line 370) | @Override
method createPacketTypesProvider (line 375) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/Button.java
class Button (line 29) | public class Button implements Widget {
method Button (line 54) | public Button(final Dialog dialog, final CompoundTag tag) {
method defaulted (line 91) | private static Button defaulted() {
method openUrl (line 100) | public static Button openUrl(final Tag label, final String url) {
method clickEvent (line 118) | public @Nullable CompoundTag clickEvent() {
method label (line 160) | public Tag label() {
method tooltip (line 164) | public @Nullable Tag tooltip() {
method width (line 168) | public int width() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/Dialog.java
class Dialog (line 46) | public final class Dialog implements Widget {
method Dialog (line 61) | public Dialog(final RegistryAndTags registryAndTags, final ServerLinks...
method fillBodyWidget (line 103) | private void fillBodyWidget(final CompoundTag tag) {
method fillInputWidget (line 118) | private void fillInputWidget(final CompoundTag tag) {
method fillNoticeDialog (line 133) | private void fillNoticeDialog(final CompoundTag tag) {
method fillServerLinksDialog (line 138) | private void fillServerLinksDialog(final ServerLinks serverLinks, fina...
method fillDialogList (line 152) | private void fillDialogList(final RegistryAndTags registryAndTags, fin...
method fillDialogBase (line 188) | private void fillDialogBase(final CompoundTag tag) {
method fillMultiActionDialog (line 199) | private void fillMultiActionDialog(final CompoundTag tag) {
method fillConfirmationDialog (line 209) | private void fillConfirmationDialog(final CompoundTag tag) {
method title (line 214) | public Tag title() {
method externalTitle (line 218) | public @Nullable Tag externalTitle() {
method canCloseWithEscape (line 222) | public boolean canCloseWithEscape() {
method afterAction (line 226) | public AfterAction afterAction() {
type AfterAction (line 230) | public enum AfterAction {
method actionButton (line 236) | public @Nullable Button actionButton() {
method yesButton (line 240) | public @Nullable Button yesButton() {
method noButton (line 244) | public @Nullable Button noButton() {
method columns (line 248) | public int columns() {
method buttonWidth (line 252) | public int buttonWidth() {
method widgets (line 256) | public List<Widget> widgets() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/Template.java
method fromString (line 29) | public static Template fromString(final String string) {
method isValidVariableName (line 66) | private static boolean isValidVariableName(final String string) {
method instantiate (line 77) | public String instantiate(final Map<String, String> map) {
method substitute (line 81) | private String substitute(final List<String> list) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/input/BooleanInput.java
class BooleanInput (line 24) | public final class BooleanInput implements Input {
method BooleanInput (line 34) | public BooleanInput(final CompoundTag tag) {
method key (line 44) | @Override
method asCommandSubstitution (line 49) | @Override
method asTag (line 54) | @Override
method label (line 59) | public Tag label() {
method initial (line 63) | public boolean initial() {
method onTrue (line 67) | public String onTrue() {
method onFalse (line 71) | public String onFalse() {
method value (line 75) | public boolean value() {
method setValue (line 79) | public void setValue(final boolean value) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/input/Input.java
type Input (line 23) | public interface Input extends Widget {
method key (line 25) | String key();
method asCommandSubstitution (line 27) | String asCommandSubstitution();
method asTag (line 29) | Tag asTag();
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/input/NumberRangeInput.java
class NumberRangeInput (line 26) | public final class NumberRangeInput implements Input {
method NumberRangeInput (line 38) | public NumberRangeInput(final CompoundTag tag) {
method key (line 54) | @Override
method asCommandSubstitution (line 59) | @Override
method asTag (line 64) | @Override
method label (line 69) | public Tag label() {
method labelFormat (line 73) | public String labelFormat() {
method start (line 77) | public float start() {
method end (line 81) | public float end() {
method initial (line 85) | public float initial() {
method step (line 89) | public float step() {
method value (line 93) | public float value() {
method valueAsString (line 97) | public String valueAsString() {
method setValue (line 102) | public void setValue(final float value) {
method setClampedValue (line 106) | public void setClampedValue(final float value) {
method displayName (line 110) | public Tag displayName() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/input/SingleOptionInput.java
class SingleOptionInput (line 27) | public final class SingleOptionInput implements Input {
method SingleOptionInput (line 35) | public SingleOptionInput(final CompoundTag tag) {
method key (line 55) | @Override
method asCommandSubstitution (line 60) | @Override
method asTag (line 65) | @Override
method options (line 70) | public Entry[] options() {
method label (line 74) | public @Nullable Tag label() {
method value (line 78) | public int value() {
method setValue (line 82) | public void setValue(final int value) {
method setClampedValue (line 89) | public void setClampedValue(final int value) {
class Entry (line 99) | public static class Entry {
method Entry (line 104) | public Entry(final CompoundTag tag) {
method id (line 110) | public String id() {
method display (line 114) | public Tag display() {
method initial (line 118) | public boolean initial() {
method computeDisplay (line 122) | public Tag computeDisplay() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/input/TextInput.java
class TextInput (line 27) | public final class TextInput implements Input {
method TextInput (line 37) | public TextInput(final CompoundTag tag) {
method key (line 55) | @Override
method asCommandSubstitution (line 60) | @Override
method asTag (line 65) | @Override
method label (line 70) | public @Nullable Tag label() {
method initial (line 74) | public String initial() {
method maxLength (line 78) | public int maxLength() {
method options (line 82) | public @Nullable MultilineOptions[] options() {
method value (line 86) | public String value() {
method setValue (line 90) | public void setValue(final String value) {
method setClampedValue (line 97) | public void setClampedValue(final String value) {
class MultilineOptions (line 105) | public static class MultilineOptions {
method MultilineOptions (line 109) | public MultilineOptions(final CompoundTag tag) {
method maxLines (line 117) | public @Nullable Integer maxLines() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/widget/ItemWidget.java
class ItemWidget (line 23) | public final class ItemWidget implements Widget {
method ItemWidget (line 31) | public ItemWidget(final CompoundTag tag) {
method item (line 50) | public CompoundTag item() {
method description (line 54) | public @Nullable TextWidget description() {
method showTooltip (line 58) | public boolean showTooltip() {
method width (line 62) | public int width() {
method height (line 66) | public int height() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/widget/TextWidget.java
class TextWidget (line 23) | public final class TextWidget implements Widget {
method TextWidget (line 28) | public TextWidget(final CompoundTag tag) {
method label (line 33) | public Tag label() {
method width (line 37) | public int width() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/data/widget/Widget.java
type Widget (line 20) | public interface Widget {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/provider/ChestDialogViewProvider.java
class ChestDialogViewProvider (line 62) | public class ChestDialogViewProvider implements DialogViewProvider {
method ChestDialogViewProvider (line 69) | public ChestDialogViewProvider(final Protocol1_21_6To1_21_5 protocol) {
method openDialog (line 73) | @Override
method openChestView (line 110) | public void openChestView(final UserConnection connection, final Chest...
method closeDialog (line 121) | @Override
method clickDialog (line 144) | public boolean clickDialog(final UserConnection connection, final int ...
method updateDialog (line 228) | public void updateDialog(final UserConnection connection, final Dialog...
method createPageNavigationItem (line 239) | protected Item createPageNavigationItem() {
method createActionButtonItem (line 251) | protected Item createActionButtonItem(final UserConnection connection,...
method createCloseButtonItem (line 260) | protected Item createCloseButtonItem(final Tag label) {
method getItemWidget (line 264) | protected Item getItemWidget(final UserConnection connection, final It...
method getMultiTextWidget (line 284) | protected Item getMultiTextWidget(final UserConnection connection, fin...
method getBooleanInput (line 300) | protected Item getBooleanInput(final UserConnection connection, final ...
method clickBooleanInput (line 327) | protected void clickBooleanInput(final BooleanInput booleanInput) {
method getNumberRangeInput (line 331) | protected Item getNumberRangeInput(final UserConnection connection, fi...
method clickNumberRangeInput (line 345) | protected void clickNumberRangeInput(final NumberRangeInput numberRang...
method getTextInput (line 355) | protected Item getTextInput(final UserConnection connection, final Tex...
method clickTextInput (line 367) | protected void clickTextInput(final UserConnection connection, final T...
method getSingleOptionInput (line 372) | protected Item getSingleOptionInput(final UserConnection connection, f...
method clickSingleOptionInput (line 390) | protected void clickSingleOptionInput(final SingleOptionInput singleOp...
method getButton (line 394) | protected Item getButton(final UserConnection connection, final Button...
method clickButton (line 398) | public void clickButton(final UserConnection connection, final Dialog....
method createTextInputItem (line 438) | protected Item createTextInputItem(final String value) {
method createTextCopyItem (line 443) | protected Item createTextCopyItem(final String value) {
method openAnvilView (line 448) | protected void openAnvilView(
method updateAnvilText (line 475) | public void updateAnvilText(final UserConnection connection, final Str...
method getDialog (line 486) | protected Item getDialog(final UserConnection connection, final Dialog...
method clickDialogButton (line 491) | protected void clickDialogButton(final UserConnection connection, fina...
method getItem (line 496) | protected Item getItem(final UserConnection connection, final Widget w...
method getItems (line 518) | protected Item[] getItems(final UserConnection connection, final Chest...
method handleTag (line 574) | protected @Nullable Tag handleTag(final UserConnection connection, fin...
method createItem (line 593) | protected Item createItem(final String identifier, final Tag name) {
method createItem (line 597) | protected Item createItem(final String identifier, final Tag name, fin...
method createItem (line 609) | protected Item createItem(final String identifier, final Tag name, fin...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/provider/DialogViewProvider.java
type DialogViewProvider (line 32) | public interface DialogViewProvider extends Provider {
method openDialog (line 34) | void openDialog(final UserConnection connection, final Dialog dialog);
method closeDialog (line 36) | void closeDialog(final UserConnection connection);
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/BlockItemPacketRewriter1_21_6.java
class BlockItemPacketRewriter1_21_6 (line 36) | public final class BlockItemPacketRewriter1_21_6 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_6 (line 38) | public BlockItemPacketRewriter1_21_6(final Protocol1_21_6To1_21_5 prot...
method handleItemDataComponentsToClient (line 42) | @Override
method handleItemDataComponentsToServer (line 48) | @Override
method backupInconvertibleData (line 54) | @Override
method restoreBackupData (line 87) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/ComponentRewriter1_21_6.java
class ComponentRewriter1_21_6 (line 27) | public final class ComponentRewriter1_21_6 extends NBTComponentRewriter<...
method ComponentRewriter1_21_6 (line 29) | public ComponentRewriter1_21_6(final BackwardsProtocol<ClientboundPack...
method handleClickEvent (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/EntityPacketRewriter1_21_6.java
class EntityPacketRewriter1_21_6 (line 33) | public final class EntityPacketRewriter1_21_6 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_6 (line 35) | public EntityPacketRewriter1_21_6(final Protocol1_21_6To1_21_5 protoco...
method registerPackets (line 39) | @Override
method registerRewrites (line 84) | @Override
method onMappingDataLoaded (line 103) | @Override
method typeFromId (line 109) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/rewriter/RegistryDataRewriter1_21_6.java
class RegistryDataRewriter1_21_6 (line 31) | public final class RegistryDataRewriter1_21_6 extends BackwardsRegistryR...
method RegistryDataRewriter1_21_6 (line 33) | public RegistryDataRewriter1_21_6(final BackwardsProtocol<?, ?, ?, ?> ...
method handle (line 39) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/storage/ChestDialogStorage.java
class ChestDialogStorage (line 39) | public final class ChestDialogStorage implements StorableObject {
method ChestDialogStorage (line 78) | public ChestDialogStorage(final ChestDialogViewProvider provider, fina...
method tick (line 83) | public void tick(final UserConnection connection) {
method dialog (line 98) | public Dialog dialog() {
method previousDialog (line 102) | public @Nullable Dialog previousDialog() {
method setPreviousDialog (line 106) | public void setPreviousDialog(final Dialog previousDialog) {
method containerId (line 110) | public int containerId() {
method items (line 114) | public Item[] items() {
method setItems (line 118) | public void setItems(final Item[] items, final int confirmationYesInde...
method confirmationYesIndex (line 125) | public int confirmationYesIndex() {
method confirmationNoIndex (line 129) | public int confirmationNoIndex() {
method actionIndex (line 133) | public int actionIndex() {
method phase (line 137) | public @Nullable Phase phase() {
method closeButtonEnabled (line 141) | public boolean closeButtonEnabled() {
method closeButtonLabel (line 145) | public Tag closeButtonLabel() {
method currentTextInput (line 149) | public TextInput currentTextInput() {
method allowClosing (line 153) | public boolean allowClosing() {
method setPhase (line 157) | public void setPhase(final UserConnection connection, final @Nullable ...
method setCurrentTextInput (line 178) | public void setCurrentTextInput(final TextInput currentTextInput) {
method setAllowClosing (line 182) | public void setAllowClosing(final boolean allowClosing) {
type Phase (line 186) | public enum Phase {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/storage/ClickEvents.java
class ClickEvents (line 37) | public final class ClickEvents implements StorableObject {
method storeClickEvent (line 41) | public String storeClickEvent(final CompoundTag clickEvent) {
method handleChatCommand (line 50) | public boolean handleChatCommand(final UserConnection connection, fina...
method handleClickEvent (line 60) | public static void handleClickEvent(final UserConnection connection, f...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/storage/RegistryAndTags.java
class RegistryAndTags (line 27) | public final class RegistryAndTags implements StorableObject {
method storeRegistry (line 34) | public void storeRegistry(final KeyMappings dialogMappings, final Obje...
method fromRegistry (line 39) | public CompoundTag fromRegistry(final int id) {
method fromRegistry (line 43) | public CompoundTag fromRegistry(final String key) {
method tagsSent (line 47) | public boolean tagsSent() {
method storeTags (line 51) | public void storeTags(final String key, final int[] ids) {
method fromKey (line 58) | public int[] fromKey(final String key) {
method fromRegistryKey (line 62) | public CompoundTag[] fromRegistryKey(final String key) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/storage/ServerLinks.java
class ServerLinks (line 28) | public final class ServerLinks implements StorableObject {
method storeLink (line 43) | public void storeLink(final Tag tag, final String uri) {
method storeLink (line 47) | public void storeLink(final int id, final String uri) {
method links (line 62) | public Object2ObjectMap<Tag, String> links() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_6to1_21_5/task/ChestDialogViewTask.java
class ChestDialogViewTask (line 24) | public final class ChestDialogViewTask extends StorableObjectTask<ChestD...
method ChestDialogViewTask (line 26) | public ChestDialogViewTask() {
method run (line 30) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_7to1_21_6/Protocol1_21_7To1_21_6.java
class Protocol1_21_7To1_21_6 (line 52) | public final class Protocol1_21_7To1_21_6 extends BackwardsProtocol<Clie...
method Protocol1_21_7To1_21_6 (line 64) | public Protocol1_21_7To1_21_6() {
method init (line 68) | @Override
method getMappingData (line 74) | @Override
method types (line 79) | @Override
method mappedTypes (line 84) | @Override
method getComponentRewriter (line 89) | @Override
method getEntityRewriter (line 94) | @Override
method getItemRewriter (line 99) | @Override
method getBlockRewriter (line 104) | @Override
method getRegistryDataRewriter (line 109) | @Override
method getRecipeRewriter (line 114) | @Override
method getParticleRewriter (line 119) | @Override
method getTagRewriter (line 124) | @Override
method createPacketTypesProvider (line 129) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_7to1_21_6/rewriter/BlockItemPacketRewriter1_21_7.java
class BlockItemPacketRewriter1_21_7 (line 25) | public final class BlockItemPacketRewriter1_21_7 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_7 (line 27) | public BlockItemPacketRewriter1_21_7(final Protocol1_21_7To1_21_6 prot...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_7to1_21_6/rewriter/EntityPacketRewriter1_21_7.java
class EntityPacketRewriter1_21_7 (line 29) | public final class EntityPacketRewriter1_21_7 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_7 (line 31) | public EntityPacketRewriter1_21_7(final Protocol1_21_7To1_21_6 protoco...
method registerRewrites (line 35) | @Override
method typeFromId (line 49) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/Protocol1_21_9To1_21_7.java
class Protocol1_21_9To1_21_7 (line 71) | public final class Protocol1_21_9To1_21_7 extends BackwardsProtocol<Clie...
method Protocol1_21_9To1_21_7 (line 83) | public Protocol1_21_9To1_21_7() {
method registerPackets (line 87) | @Override
method init (line 193) | @Override
method getMappingData (line 202) | @Override
method getEntityRewriter (line 207) | @Override
method getItemRewriter (line 212) | @Override
method getBlockRewriter (line 217) | @Override
method getRegistryDataRewriter (line 222) | @Override
method getParticleRewriter (line 227) | @Override
method getComponentRewriter (line 232) | @Override
method getTagRewriter (line 237) | @Override
method getRecipeRewriter (line 242) | @Override
method types (line 247) | @Override
method mappedTypes (line 252) | @Override
method createPacketTypesProvider (line 257) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/BlockItemPacketRewriter1_21_9.java
class BlockItemPacketRewriter1_21_9 (line 39) | public final class BlockItemPacketRewriter1_21_9 extends BackwardsStruct...
method BlockItemPacketRewriter1_21_9 (line 41) | public BlockItemPacketRewriter1_21_9(final Protocol1_21_9To1_21_7 prot...
method registerPackets (line 45) | @Override
method handleItemDataComponentsToClient (line 51) | @Override
method handleItemDataComponentsToServer (line 57) | @Override
method backupInconvertibleData (line 63) | @Override
method restoreBackupData (line 87) | @Override
method updateBorderCenter (line 105) | private void updateBorderCenter(final PacketWrapper wrapper) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/ComponentRewriter1_21_9.java
class ComponentRewriter1_21_9 (line 29) | public final class ComponentRewriter1_21_9 extends NBTComponentRewriter<...
method ComponentRewriter1_21_9 (line 31) | public ComponentRewriter1_21_9(final BackwardsProtocol<ClientboundPack...
method processCompoundTag (line 35) | @Override
method handleShowItem (line 61) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/EntityPacketRewriter1_21_9.java
class EntityPacketRewriter1_21_9 (line 60) | public final class EntityPacketRewriter1_21_9 extends EntityRewriter<Cli...
method EntityPacketRewriter1_21_9 (line 62) | public EntityPacketRewriter1_21_9(final Protocol1_21_9To1_21_7 protoco...
method registerPackets (line 66) | @Override
method trackMannequinTeleport (line 202) | private void trackMannequinTeleport(final PacketWrapper wrapper) {
method storeMovementMannequinData (line 230) | private void storeMovementMannequinData(final PacketWrapper wrapper, f...
method sendInitialPlayerInfoUpdate (line 257) | private void sendInitialPlayerInfoUpdate(final UserConnection connecti...
method sendPlayerInfoDisplayNameUpdate (line 281) | private void sendPlayerInfoDisplayNameUpdate(final UserConnection conn...
method sendPlayerTeamDisplayName (line 294) | private void sendPlayerTeamDisplayName(final UserConnection connection...
method randomHackyEmptyName (line 314) | private String randomHackyEmptyName() {
method writeMovementShorts (line 325) | private void writeMovementShorts(final PacketWrapper wrapper, final Ve...
method storePlayerRotation (line 331) | private void storePlayerRotation(final PacketWrapper wrapper) {
method registerRewrites (line 338) | @Override
method handleEntityData (line 476) | @Override
method onMappingDataLoaded (line 499) | @Override
method typeFromId (line 506) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/ParticleRewriter1_21_9.java
class ParticleRewriter1_21_9 (line 26) | public final class ParticleRewriter1_21_9 extends ParticleRewriter<Clien...
method ParticleRewriter1_21_9 (line 28) | public ParticleRewriter1_21_9(final Protocol<ClientboundPacket1_21_9, ...
method rewriteParticle (line 32) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/rewriter/RegistryDataRewriter1_21_9.java
class RegistryDataRewriter1_21_9 (line 27) | public final class RegistryDataRewriter1_21_9 extends BackwardsRegistryR...
method RegistryDataRewriter1_21_9 (line 29) | public RegistryDataRewriter1_21_9(final BackwardsProtocol<?, ?, ?, ?> ...
method trackDimensionAndBiomes (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/DimensionScaleStorage.java
class DimensionScaleStorage (line 24) | public final class DimensionScaleStorage implements StorableObject {
method getScale (line 28) | public double getScale(final int dimensionId) {
method setScale (line 32) | public void setScale(final int dimensionId, final double scale) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/MannequinData.java
class MannequinData (line 30) | public final class MannequinData {
method MannequinData (line 51) | public MannequinData(final UUID uuid, final String name) {
method setHasTeam (line 56) | public void setHasTeam(final boolean hasTeam) {
method hasTeam (line 60) | public boolean hasTeam() {
method uuid (line 64) | public UUID uuid() {
method name (line 68) | public String name() {
method setPosition (line 72) | public void setPosition(final double x, final double y, final double z) {
method setRotation (line 78) | public void setRotation(final byte yaw, final byte pitch) {
method setPassengers (line 83) | public void setPassengers(final int[] passengers) {
method x (line 87) | public double x() {
method y (line 91) | public double y() {
method z (line 95) | public double z() {
method yaw (line 99) | public byte yaw() {
method pitch (line 103) | public byte pitch() {
method entityData (line 107) | public List<EntityData> entityData() {
method passengers (line 111) | public int[] passengers() {
method setDisplayName (line 115) | public void setDisplayName(Tag displayName) {
method displayName (line 119) | public Tag displayName() {
method setEquipment (line 123) | public void setEquipment(byte slot, Item item) {
method itemMap (line 127) | public Map<Byte, Item> itemMap() {
method headYaw (line 131) | public byte headYaw() {
method setHeadYaw (line 135) | public void setHeadYaw(byte headYaw) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/storage/PlayerRotationStorage.java
class PlayerRotationStorage (line 22) | public final class PlayerRotationStorage implements StorableObject {
method setRotation (line 26) | public void setRotation(final float yaw, final float pitch) {
method yaw (line 31) | public float yaw() {
method pitch (line 35) | public float pitch() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21_9to1_21_7/tracker/EntityTracker1_21_9.java
class EntityTracker1_21_9 (line 32) | public final class EntityTracker1_21_9 extends EntityTrackerBase {
method EntityTracker1_21_9 (line 34) | public EntityTracker1_21_9(final UserConnection connection, @Nullable ...
method removeEntity (line 38) | @Override
method sendRemovePacket (line 44) | public void sendRemovePacket(final int id) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/Protocol1_21To1_20_5.java
class Protocol1_21To1_20_5 (line 61) | public final class Protocol1_21To1_20_5 extends BackwardsProtocol<Client...
method Protocol1_21To1_20_5 (line 72) | public Protocol1_21To1_20_5() {
method registerPackets (line 76) | @Override
method init (line 178) | @Override
method getMappingData (line 186) | @Override
method getEntityRewriter (line 191) | @Override
method getItemRewriter (line 196) | @Override
method getBlockRewriter (line 201) | @Override
method getRegistryDataRewriter (line 206) | @Override
method getParticleRewriter (line 211) | @Override
method getComponentRewriter (line 216) | @Override
method getTagRewriter (line 221) | @Override
method types (line 226) | @Override
method mappedTypes (line 231) | @Override
method createPacketTypesProvider (line 236) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/rewriter/BlockItemPacketRewriter1_21.java
class BlockItemPacketRewriter1_21 (line 65) | public final class BlockItemPacketRewriter1_21 extends BackwardsStructur...
method BlockItemPacketRewriter1_21 (line 69) | public BlockItemPacketRewriter1_21(final Protocol1_21To1_20_5 protocol) {
method registerPackets (line 73) | @Override
method handleItemToClient (line 142) | @Override
method handleItemToServer (line 195) | @Override
method rewriteEnchantmentToServer (line 228) | private void rewriteEnchantmentToServer(final EnchantmentsPaintingsSto...
method backupInconvertibleData (line 258) | private void backupInconvertibleData(final Item item) {
method restoreInconvertibleData (line 297) | private void restoreInconvertibleData(final Item item) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/rewriter/ComponentRewriter1_21.java
class ComponentRewriter1_21 (line 37) | public final class ComponentRewriter1_21 extends JsonNBTComponentRewrite...
method ComponentRewriter1_21 (line 39) | public ComponentRewriter1_21(final Protocol1_21To1_20_5 protocol) {
method convertAttributeModifiersComponent (line 43) | private void convertAttributeModifiersComponent(final CompoundTag tag) {
method handleShowItem (line 68) | @Override
method inputSerializerVersion (line 77) | @Override
method outputSerializerVersion (line 82) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/rewriter/EntityPacketRewriter1_21.java
class EntityPacketRewriter1_21 (line 45) | public final class EntityPacketRewriter1_21 extends EntityRewriter<Clien...
method EntityPacketRewriter1_21 (line 49) | public EntityPacketRewriter1_21(final Protocol1_21To1_20_5 protocol) {
method registerPackets (line 58) | @Override
method storePlayerRotation (line 112) | private void storePlayerRotation(final PacketWrapper wrapper) {
method paintingMappingsForEntries (line 119) | private int[] paintingMappingsForEntries(final RegistryEntry[] entries) {
method registerRewrites (line 146) | @Override
method typeFromId (line 184) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/storage/EnchantmentsPaintingsStorage.java
class EnchantmentsPaintingsStorage (line 25) | public final class EnchantmentsPaintingsStorage implements StorableObject {
method enchantments (line 33) | public KeyMappings enchantments() {
method setEnchantments (line 37) | public void setEnchantments(final KeyMappings enchantment, final Tag[]...
method paintings (line 43) | public KeyMappings paintings() {
method setPaintings (line 47) | public void setPaintings(final KeyMappings paintings, final int[] pain...
method setJubeboxSongsToItems (line 52) | public void setJubeboxSongsToItems(final int[] jubeboxSongsToItems) {
method jubeboxSongToItem (line 56) | public int jubeboxSongToItem(final int id) {
method mappedPainting (line 60) | public int mappedPainting(final int id) {
method enchantmentDescription (line 64) | public @Nullable Tag enchantmentDescription(final int id) {
method enchantmentMaxLevel (line 68) | public int enchantmentMaxLevel(final int id) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/storage/OpenScreenStorage.java
class OpenScreenStorage (line 22) | public final class OpenScreenStorage implements StorableObject {
method menuType (line 26) | public int menuType() {
method setMenuType (line 30) | public void setMenuType(final int menuType) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_21to1_20_5/storage/PlayerRotationStorage.java
class PlayerRotationStorage (line 22) | public final class PlayerRotationStorage implements StorableObject {
method setRotation (line 26) | public void setRotation(final float yaw, final float pitch) {
method yaw (line 31) | public float yaw() {
method pitch (line 35) | public float pitch() {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_1to1_9/Protocol1_9_1To1_9.java
class Protocol1_9_1To1_9 (line 28) | public class Protocol1_9_1To1_9 extends BackwardsProtocol<ClientboundPac...
method Protocol1_9_1To1_9 (line 30) | public Protocol1_9_1To1_9() {
method registerPackets (line 34) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java
class Protocol1_9_3To1_9_1 (line 39) | public class Protocol1_9_3To1_9_1 extends BackwardsProtocol<ClientboundP...
method Protocol1_9_3To1_9_1 (line 41) | public Protocol1_9_3To1_9_1() {
method registerPackets (line 45) | @Override
method init (line 118) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/data/BlockEntity1_9_1.java
class BlockEntity1_9_1 (line 32) | public class BlockEntity1_9_1 {
method handle (line 47) | public static void handle(List<CompoundTag> tags, UserConnection conne...
method updateBlockEntity (line 74) | private static void updateBlockEntity(BlockPosition pos, short id, Com...
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/Protocol26_1To1_21_11.java
class Protocol26_1To1_21_11 (line 69) | public final class Protocol26_1To1_21_11 extends BackwardsProtocol<Clien...
method Protocol26_1To1_21_11 (line 81) | public Protocol26_1To1_21_11() {
method registerPackets (line 85) | @Override
method removeEntityNamePrefix (line 155) | private void removeEntityNamePrefix(final String key, final CompoundTa...
method swapEntityNameAffix (line 161) | private void swapEntityNameAffix(final String key, final CompoundTag t...
method init (line 169) | @Override
method getMappingData (line 177) | @Override
method getEntityRewriter (line 182) | @Override
method getItemRewriter (line 187) | @Override
method getBlockRewriter (line 192) | @Override
method getRegistryDataRewriter (line 197) | @Override
method getRecipeRewriter (line 202) | @Override
method getParticleRewriter (line 207) | @Override
method getComponentRewriter (line 212) | @Override
method getTagRewriter (line 217) | @Override
method types (line 222) | @Override
method mappedTypes (line 227) | @Override
method createPacketTypesProvider (line 232) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/rewriter/BlockItemPacketRewriter26_1.java
class BlockItemPacketRewriter26_1 (line 33) | public final class BlockItemPacketRewriter26_1 extends BackwardsStructur...
method BlockItemPacketRewriter26_1 (line 35) | public BlockItemPacketRewriter26_1(final Protocol26_1To1_21_11 protoco...
method handleItemDataComponentsToClient (line 39) | @Override
method handleItemDataComponentsToServer (line 45) | @Override
method restoreBackupData (line 51) | @Override
method backupInconvertibleData (line 66) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/rewriter/ComponentRewriter26_1.java
class ComponentRewriter26_1 (line 27) | public final class ComponentRewriter26_1 extends NBTComponentRewriter<Cl...
method ComponentRewriter26_1 (line 29) | public ComponentRewriter26_1(final BackwardsProtocol<ClientboundPacket...
method handleShowItem (line 33) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/rewriter/EntityPacketRewriter26_1.java
class EntityPacketRewriter26_1 (line 36) | public final class EntityPacketRewriter26_1 extends EntityRewriter<Clien...
method EntityPacketRewriter26_1 (line 42) | public EntityPacketRewriter26_1(final Protocol26_1To1_21_11 protocol) {
method registerPackets (line 46) | @Override
method registerRewrites (line 80) | @Override
method typeFromId (line 110) | @Override
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/storage/DayTimeStorage.java
class DayTimeStorage (line 22) | public final class DayTimeStorage implements StorableObject {
method gameTime (line 28) | public long gameTime() {
method setGameTime (line 32) | public void setGameTime(final long gameTime) {
method setGameTimeAndUpdateDayTime (line 36) | public long setGameTimeAndUpdateDayTime(final long gameTime) {
method dayTime (line 42) | public long dayTime() {
method setDayTime (line 46) | public void setDayTime(final long dayTime) {
method advanceTime (line 50) | public boolean advanceTime() {
method setAdvanceTime (line 54) | public void setAdvanceTime(final boolean advanceTime) {
FILE: common/src/main/java/com/viaversion/viabackwards/protocol/v26_1to1_21_11/storage/GameModeStorage.java
class GameModeStorage (line 22) | public final class GameModeStorage implements StorableObject {
method gameMode (line 26) | public int gameMode() {
method setGameMode (line 30) | public void setGameMode(final int gameMode) {
FILE: common/src/main/java/com/viaversion/viabackwards/utils/BackwardsProtocolLogger.java
class BackwardsProtocolLogger (line 24) | public final class BackwardsProtocolLogger extends ProtocolLogger {
method BackwardsProtocolLogger (line 26) | public BackwardsProtocolLogger(final Class<? extends Protocol> protoco...
FILE: common/src/main/java/com/viaversion/viabackwards/utils/ChatUtil.java
class ChatUtil (line 38) | public final class ChatUtil {
method translate (line 44) | public static Tag translate(final String key, final Tag... arguments) {
method translate (line 50) | public static Tag translate(final String key, final Object... argument...
method split (line 55) | public static Tag[] split(final Tag tag, final String delimiter) {
method fixStyle (line 60) | public static Tag fixStyle(final Tag tag) {
method translate (line 69) | public static CompoundTag translate(final String key) {
method removeUnusedColor (line 79) | public static String removeUnusedColor(String legacy, char defaultColo...
method legacyToJsonString (line 83) | public static String legacyToJsonString(String legacy, String translat...
method legacyToJsonString (line 90) | public static String legacyToJsonString(String legacy, Consumer<TextCo...
class ChatFormattingState (line 100) | private static class ChatFormattingState {
method ChatFormattingState (line 105) | private ChatFormattingState(char defaultColor) {
method ChatFormattingState (line 109) | public ChatFormattingState(Set<Character> formatting, char defaultCo...
method setColor (line 115) | private void setColor(char newColor) {
method copy (line 120) | public ChatFormattingState copy() {
method appendTo (line 124) | public void appendTo(StringBuilder builder) {
method equals (line 131) | @Override
method hashCode (line 145) | @Override
method processNextControlChar (line 150) | public void processNextControlChar(char controlChar) {
method fromLegacy (line 163) | public static String fromLegacy(String legacy, char defaultColor, int ...
method fromLegacyPrefix (line 167) | public static String fromLegacyPrefix(String legacy, char defaultColor...
method fromLegacy (line 171) | public static String fromLegacy(String legacy, char defaultColor, int ...
method removeUnusedColor (line 178) | public static String removeUnusedColor(String legacy, char defaultColo...
FILE: common/src/main/java/com/viaversion/viabackwards/utils/VelocityUtil.java
class VelocityUtil (line 20) | public class VelocityUtil {
method toLegacyVelocity (line 22) | public static short toLegacyVelocity(double value) {
FILE: fabric/src/main/java/com/viaversion/viabackwards/ViaFabricAddon.java
class ViaFabricAddon (line 29) | public class ViaFabricAddon implements ViaBackwardsPlatform, Runnable {
method run (line 33) | @Override
method disable (line 41) | @Override
method getDataFolder (line 46) | @Override
method getLogger (line 51) | @Override
FILE: fabric/src/main/java/com/viaversion/viabackwards/fabric/util/LoggerWrapper.java
class LoggerWrapper (line 26) | public class LoggerWrapper extends Logger {
method LoggerWrapper (line 29) | public LoggerWrapper(org.apache.logging.log4j.Logger logger) {
method log (line 34) | public void log(LogRecord record) {
method log (line 38) | public void log(Level level, String msg) {
method log (line 53) | public void log(Level level, String msg, Object param1) {
method log (line 68) | public void log(Level level, String msg, Object[] params) {
method log (line 72) | public void log(Level level, String msg, Throwable params) {
FILE: velocity/src/main/java/com/viaversion/viabackwards/VelocityPlugin.java
class VelocityPlugin (line 36) | @Plugin(id = "viabackwards",
method onProxyStart (line 51) | @SuppressWarnings("deprecation")
method disable (line 59) | @Override
method getDataFolder (line 64) | @Override
method getLogger (line 69) | @Override
Condensed preview — 377 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,361K chars).
[
{
"path": ".editorconfig",
"chars": 360,
"preview": "[*]\ncharset = utf-8\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntab_width = 4\n\n[*.java]\nij_java_cla"
},
{
"path": ".github/FUNDING.yml",
"chars": 76,
"preview": "github: kennytv\npatreon: kennytv\ncustom: ['https://florianreuth.de/donate']\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 3365,
"preview": "name: Bug Report\ndescription: Report a bug or console error\nlabels: [unconfirmed]\n\nbody:\n - type: markdown\n attribut"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 354,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Dev builds\n url: https://ci.viaversion.com/\n about: Before re"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 919,
"preview": "name: Feature Request\ndescription: Suggest a feature to be added\nlabels: [Feature Request]\n\nbody:\n - type: textarea\n "
},
{
"path": ".github/dependabot.yml",
"chars": 282,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n cooldown:\n default-days: 7\n directory: \"/\"\n s"
},
{
"path": ".github/workflows/build.yml",
"chars": 945,
"preview": "name: Build\non: [pull_request, push, workflow_dispatch]\npermissions:\n contents: read\n\njobs:\n build:\n # Only run on "
},
{
"path": ".github/workflows/publish.yml",
"chars": 1227,
"preview": "name: Publish to Hangar and Modrinth\non:\n push:\n branches:\n - master\n - dev\n workflow_dispatch:\n\npermissi"
},
{
"path": ".gitignore",
"chars": 229,
"preview": "# Gradle\n\n.gradle/\nbuild/\nout/\nclasses/\n.kotlin/\n\n# Eclipse\n\n*.launch\n\n# Idea\n\n.idea/\n!.idea/copyright/*\n!.idea/scopes/*"
},
{
"path": "LICENSE",
"chars": 35148,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 3676,
"preview": "# ViaBackwards\n\n[](https://github.com/"
},
{
"path": "SECURITY.md",
"chars": 741,
"preview": "# Security Policy\n\n## Reporting a Vulnerability\n\nIf you discover a **security vulnerability**, please **do not** open a "
},
{
"path": "build-logic/build.gradle.kts",
"chars": 316,
"preview": "plugins {\n `kotlin-dsl`\n}\n\nrepositories {\n gradlePluginPortal()\n}\n\ndependencies {\n // version must be manually "
},
{
"path": "build-logic/src/main/kotlin/extensions.kt",
"chars": 2075,
"preview": "import org.gradle.api.Project\nimport org.gradle.api.plugins.JavaPluginExtension\nimport org.gradle.api.provider.ListPrope"
},
{
"path": "build-logic/src/main/kotlin/vb.base-conventions.gradle.kts",
"chars": 772,
"preview": "plugins {\n `java-library`\n}\n\ntasks {\n // Variable replacements\n processResources {\n val ver = project.ve"
},
{
"path": "build-logic/src/main/kotlin/vb.build-logic.gradle.kts",
"chars": 0,
"preview": ""
},
{
"path": "build-logic/src/main/kotlin/vb.shadow-conventions.gradle.kts",
"chars": 1309,
"preview": "import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar\nimport org.gradle.jvm.tasks.Jar\nimport org.gradle.kotl"
},
{
"path": "build.gradle.kts",
"chars": 592,
"preview": "plugins {\n base\n id(\"vb.build-logic\")\n}\n\nallprojects {\n group = \"com.viaversion\"\n version = property(\"projec"
},
{
"path": "bukkit/build.gradle.kts",
"chars": 205,
"preview": "dependencies {\n compileOnlyApi(projects.viabackwardsCommon)\n compileOnly(libs.paper) {\n exclude(\"com.google"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/BukkitPlugin.java",
"chars": 3566,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/DurabilitySync1_11.java",
"chars": 2106,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/FireExtinguish1_16.java",
"chars": 2058,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/ItemDropSync1_17.java",
"chars": 1942,
"preview": "\n/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVers"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/LecternInteract1_14.java",
"chars": 2590,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/PlayerHurtSound1_12.java",
"chars": 2214,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/listener/SpearAttack1_21_11.java",
"chars": 1907,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/java/com/viaversion/viabackwards/provider/BukkitAdvancementCriteriaProvider.java",
"chars": 1493,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "bukkit/src/main/resources/plugin.yml",
"chars": 299,
"preview": "name: ViaBackwards\nversion: ${version}\ndescription: ${description}\nmain: com.viaversion.viabackwards.BukkitPlugin\napi-ve"
},
{
"path": "common/build.gradle.kts",
"chars": 1775,
"preview": "plugins {\n id(\"net.kyori.blossom\")\n id(\"org.jetbrains.gradle.plugin.idea-ext\")\n}\n\nsourceSets {\n main {\n "
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/ViaBackwards.java",
"chars": 1582,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/ViaBackwardsConfig.java",
"chars": 7530,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/ViaBackwardsPlatformImpl.java",
"chars": 1595,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/BackwardsProtocol.java",
"chars": 2871,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/DialogStyleConfig.java",
"chars": 1248,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsConfig.java",
"chars": 4487,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java",
"chars": 13183,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingData.java",
"chars": 8307,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/BackwardsMappingDataLoader.java",
"chars": 3351,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/ItemMappings.java",
"chars": 1422,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/MappedItem.java",
"chars": 1820,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/MappedLegacyBlockItem.java",
"chars": 2612,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/data/TranslatableMappings.java",
"chars": 3090,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityObjectData.java",
"chars": 1380,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionHandler.java",
"chars": 6033,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityPositionStorage.java",
"chars": 1396,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/EntityReplacement.java",
"chars": 3976,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/PlayerPositionStorage.java",
"chars": 1732,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/entities/storage/WrappedEntityData.java",
"chars": 1678,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriter.java",
"chars": 6138,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsItemRewriterBase.java",
"chars": 4423,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsRegistryRewriter.java",
"chars": 3286,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java",
"chars": 16714,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/EnchantmentRewriter.java",
"chars": 6412,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriter.java",
"chars": 6094,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java",
"chars": 12427,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyBlockItemRewriter.java",
"chars": 16609,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEnchantmentRewriter.java",
"chars": 7656,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java",
"chars": 7528,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacySoundRewriter.java",
"chars": 2848,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/MapColorRewriter.java",
"chars": 2899,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/SoundRewriter.java",
"chars": 3395,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java",
"chars": 9770,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/JsonNBTComponentRewriter.java",
"chars": 2812,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/NBTComponentRewriter.java",
"chars": 2742,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/api/rewriters/text/TranslatableRewriter.java",
"chars": 1115,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/item/DataItemWithExtras.java",
"chars": 3507,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/registration/BackwardsRegistrations.java",
"chars": 1545,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/registration/RegistryRegistrations.java",
"chars": 1868,
"preview": "/*\n * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion\n * Copyright (C) 2016-2026 ViaVersion a"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/template/BlockItemPacketRewriter99_1.java",
"chars": 2968,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/template/ComponentRewriter99_1.java",
"chars": 1849,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/template/EntityPacketRewriter99_1.java",
"chars": 3101,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/template/Protocol99_1To98_1.java",
"chars": 7118,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java",
"chars": 5426,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java",
"chars": 3961,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/EntityPacketRewriter1_10.java",
"chars": 7834,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java",
"chars": 2542,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/rewriter/EntityPacketRewriter1_11_1.java",
"chars": 5427,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/rewriter/ItemPacketRewriter1_11_1.java",
"chars": 3312,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java",
"chars": 3801,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/data/SplashPotionMappings1_10.java",
"chars": 1892,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java",
"chars": 15775,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/EntityPacketRewriter1_11.java",
"chars": 17081,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/PlayerPacketRewriter1_11.java",
"chars": 4026,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/storage/ChestedHorseStorage.java",
"chars": 1957,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/storage/WindowTracker.java",
"chars": 1506,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_1to1_12/Protocol1_12_1To1_12.java",
"chars": 1824,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_2to1_12_1/Protocol1_12_2To1_12_1.java",
"chars": 3283,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12_2to1_12_1/storage/KeepAliveTracker.java",
"chars": 1315,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java",
"chars": 4607,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/data/BlockColors1_11_1.java",
"chars": 1579,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/data/MapColorMappings1_11_1.java",
"chars": 5365,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java",
"chars": 12490,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/ComponentRewriter1_12.java",
"chars": 2149,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java",
"chars": 13020,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/SoundPacketRewriter1_12.java",
"chars": 7533,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/storage/ParrotStorage.java",
"chars": 1250,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/storage/ShoulderTracker.java",
"chars": 4120,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java",
"chars": 9309,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/CommandRewriter1_13_1.java",
"chars": 1858,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/EntityPacketRewriter1_13_1.java",
"chars": 7731,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/ItemPacketRewriter1_13_1.java",
"chars": 2604,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java",
"chars": 4068,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/Protocol1_13_2To1_13_1.java",
"chars": 3824,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/EntityPacketRewriter1_13_2.java",
"chars": 4430,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/ItemPacketRewriter1_13_2.java",
"chars": 6624,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_2to1_13_1/rewriter/WorldPacketRewriter1_13_2.java",
"chars": 2215,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java",
"chars": 8523,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/BannerHandler.java",
"chars": 2601,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/BedHandler.java",
"chars": 1327,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/FlowerPotHandler.java",
"chars": 3474,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/PistonHandler.java",
"chars": 4673,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/SkullHandler.java",
"chars": 1639,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/block_entity_handlers/SpawnerHandler.java",
"chars": 1647,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/BackwardsMappingData1_13.java",
"chars": 3276,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/EntityIdMappings1_12_2.java",
"chars": 1531,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/EntityNameMappings1_12_2.java",
"chars": 2054,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/NamedSoundMappings1_12_2.java",
"chars": 1774,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/PaintingNames1_13.java",
"chars": 1994,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/data/ParticleIdMappings1_12_2.java",
"chars": 9300,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/provider/BackwardsBlockEntityProvider.java",
"chars": 4377,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java",
"chars": 39790,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java",
"chars": 17992,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/PlayerPacketRewriter1_13.java",
"chars": 26828,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/SoundPacketRewriter1_13.java",
"chars": 3152,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/BackwardsBlockStorage.java",
"chars": 2898,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/NoteBlockStorage.java",
"chars": 2053,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/PlayerPositionStorage1_13.java",
"chars": 1015,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/storage/TabCompleteStorage.java",
"chars": 1987,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_1to1_14/Protocol1_14_1To1_14.java",
"chars": 2322,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_1to1_14/rewriter/EntityPacketRewriter1_14_1.java",
"chars": 4539,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_2to1_14_1/Protocol1_14_2To1_14_1.java",
"chars": 1433,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_3to1_14_2/Protocol1_14_3To1_14_2.java",
"chars": 3532,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14_4to1_14_3/Protocol1_14_4To1_14_3.java",
"chars": 3240,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java",
"chars": 8926,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/data/BackwardsMappingData1_14.java",
"chars": 1581,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java",
"chars": 23927,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/CommandRewriter1_14.java",
"chars": 2078,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java",
"chars": 25582,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/PlayerPacketRewriter1_14.java",
"chars": 5798,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/SoundPacketRewriter1_14.java",
"chars": 3333,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/ChunkLightStorage.java",
"chars": 3430,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/DifficultyStorage.java",
"chars": 1179,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/storage/EntityPositionStorage1_14.java",
"chars": 1015,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15_1to1_15/Protocol1_15_1To1_15.java",
"chars": 1427,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15_2to1_15_1/Protocol1_15_2To1_15_1.java",
"chars": 1433,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java",
"chars": 6230,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/BlockItemPacketRewriter1_15.java",
"chars": 4887,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java",
"chars": 10393,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/storage/ImmediateRespawnStorage.java",
"chars": 1235,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_1to1_16/Protocol1_16_1To1_16.java",
"chars": 1427,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/Protocol1_16_2To1_16_1.java",
"chars": 7186,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/data/BiomeMappings1_16_1.java",
"chars": 5715,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/BlockItemPacketRewriter1_16_2.java",
"chars": 6637,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/CommandRewriter1_16_2.java",
"chars": 1761,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java",
"chars": 7357,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/storage/BiomeStorage.java",
"chars": 1700,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_3to1_16_2/Protocol1_16_3To1_16_2.java",
"chars": 1457,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_4to1_16_3/Protocol1_16_4To1_16_3.java",
"chars": 2767,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_4to1_16_3/storage/PlayerHandStorage.java",
"chars": 1186,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java",
"chars": 9098,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/data/BackwardsMappingData1_16.java",
"chars": 1955,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/data/MapColorMappings1_15_2.java",
"chars": 2134,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/BlockItemPacketRewriter1_16.java",
"chars": 13666,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/CommandRewriter1_16.java",
"chars": 1587,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java",
"chars": 16917,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/TranslatableRewriter1_16.java",
"chars": 5328,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/PlayerAttributesStorage.java",
"chars": 2950,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/PlayerSneakStorage.java",
"chars": 1174,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/WolfDataMaskStorage.java",
"chars": 1209,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/storage/WorldNameTracker.java",
"chars": 1177,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17_1to1_17/Protocol1_17_1To1_17.java",
"chars": 8019,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17_1to1_17/storage/InventoryStateIds.java",
"chars": 1472,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/Protocol1_17To1_16_4.java",
"chars": 12079,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/data/MapColorMappings1_16_4.java",
"chars": 2043,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/BlockItemPacketRewriter1_17.java",
"chars": 23585,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java",
"chars": 11987,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/storage/PlayerLastCursorItem.java",
"chars": 1646,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18_2to1_18/Protocol1_18_2To1_18.java",
"chars": 4558,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18_2to1_18/rewriter/CommandRewriter1_18_2.java",
"chars": 2116,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/Protocol1_18To1_17_1.java",
"chars": 6222,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/data/BackwardsMappingData1_18.java",
"chars": 2002,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/data/BlockEntityMappings1_17_1.java",
"chars": 1547,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/rewriter/BlockItemPacketRewriter1_18.java",
"chars": 12462,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_18to1_17_1/rewriter/EntityPacketRewriter1_18.java",
"chars": 5772,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/Protocol1_19_1To1_19.java",
"chars": 22434,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/rewriter/EntityPacketRewriter1_19_1.java",
"chars": 2119,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ChatRegistryStorage.java",
"chars": 1754,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ChatRegistryStorage1_19_1.java",
"chars": 939,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/NonceStorage.java",
"chars": 998,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_1to1_19/storage/ReceivedMessagesStorage.java",
"chars": 2031,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/Protocol1_19_3To1_19_1.java",
"chars": 20932,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/rewriter/BlockItemPacketRewriter1_19_3.java",
"chars": 5834,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/rewriter/EntityPacketRewriter1_19_3.java",
"chars": 13288,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/storage/ChatSessionStorage.java",
"chars": 1123,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/storage/ChatTypeStorage1_19_3.java",
"chars": 1025,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_3to1_19_1/storage/NonceStorage.java",
"chars": 1071,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/Protocol1_19_4To1_19_3.java",
"chars": 6648,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/rewriter/BlockItemPacketRewriter1_19_4.java",
"chars": 5045,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/rewriter/EntityPacketRewriter1_19_4.java",
"chars": 16727,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
},
{
"path": "common/src/main/java/com/viaversion/viabackwards/protocol/v1_19_4to1_19_3/storage/EntityTracker1_19_4.java",
"chars": 4290,
"preview": "/*\n * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards\n * Copyright (C) 2016-2026 ViaVersi"
}
]
// ... and 177 more files (download for full content)
About this extraction
This page contains the full source code of the ViaVersion/ViaBackwards GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 377 files (2.1 MB), approximately 587.9k tokens, and a symbol index with 2075 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.