From 7b42850c7dcbac4b65ae91515a422d65087ee9ff Mon Sep 17 00:00:00 2001 From: Technici4n <13494793+Technici4n@users.noreply.github.com> Date: Thu, 29 Jan 2026 23:17:44 +0100 Subject: [PATCH] WIP NeoForm on CG --- .../neoforged/neoform/MinecraftLibraries.java | 11 + .../neoform/NeoFormProjectPlugin.java | 2 + .../neoform/tasks/CreatePatchWorkspace.java | 123 +- .../neoforged/neoform/tasks/Decompile.java | 67 +- .../neoforged/neoform/tasks/ToolAction.java | 5 +- settings.gradle | 59 +- .../opengl/GlCommandEncoder.java.patch | 1381 +++++++++++++++-- .../blaze3d/opengl/GlProgram.java.patch | 11 - ...sPreferredRegionSelectionScreen.java.patch | 11 - .../net/minecraft/ChatFormatting.java.patch | 20 - .../net/minecraft/TracingExecutor.java.patch | 11 - .../advancements/Advancement.java.patch | 11 + .../criterion/EnterBlockTrigger.java.patch | 15 + .../InventoryChangeTrigger.java.patch | 11 + .../criterion/MinMaxBounds.java.patch | 10 +- .../criterion/PlayerPredicate.java.patch | 16 - .../SlideDownBlockTrigger.java.patch | 15 + .../net/minecraft/client/Minecraft.java.patch | 8 +- .../client/OptionInstance.java.patch | 18 +- .../PeriodicNotificationManager.java.patch | 11 + .../models/model/ModelTemplate.java.patch | 10 + .../client/gui/GuiGraphics.java.patch | 82 +- .../gui/components/ChatComponent.java.patch | 11 - .../components/MultiLineEditBox.java.patch | 18 + .../events/ContainerEventHandler.java.patch | 11 + .../gui/font/PlayerGlyphProvider.java.patch | 11 - .../font/providers/BitmapProvider.java.patch | 11 + .../screens/PresetFlatWorldScreen.java.patch | 11 - .../client/gui/screens/Screen.java.patch | 99 ++ .../inventory/BookViewScreen.java.patch | 190 ++- .../reporting/ChatSelectionScreen.java.patch | 13 - .../AbstractGameRulesScreen.java.patch | 17 + .../WorldCreationUiState.java.patch | 11 - .../ClientCommonPacketListenerImpl.java.patch | 18 - .../renderer/LevelEventHandler.java.patch | 35 - .../client/renderer/PostChain.java.patch | 595 +++++-- .../model/BlockModelDefinition.java.patch | 11 + .../block/model/VariantSelector.java.patch | 11 - .../blockentity/BeaconRenderer.java.patch | 82 +- .../blockentity/BedRenderer.java.patch | 11 + .../blockentity/ChestRenderer.java.patch | 11 + .../entity/EntityRenderDispatcher.java.patch | 18 +- .../item/ConditionalItemModel.java.patch | 11 - .../select/ComponentContents.java.patch | 11 - .../client/resources/WaypointStyle.java.patch | 11 + .../metadata/gui/GuiSpriteScaling.java.patch | 11 + .../resources/model/ModelBakery.java.patch | 11 - .../server/ServerPackManager.java.patch | 11 - .../telemetry/TelemetryEventType.java.patch | 11 + .../ClientWaypointManager.java.patch | 10 + .../minecraft/commands/Commands.java.patch | 11 - .../arguments/ArgumentSignatures.java.patch | 10 +- .../arguments/OperationArgument.java.patch | 11 - .../item/ComponentPredicateParser.java.patch | 20 + .../arguments/item/ItemInput.java.patch | 6 +- .../execution/tasks/BuildContexts.java.patch | 31 +- .../functions/MacroFunction.java.patch | 391 ++++- .../ArgumentTypeInfos.java.patch | 19 - .../SuggestionProviders.java.patch | 11 - .../net/minecraft/core/Direction.java.patch | 233 +++ .../net/minecraft/core/Registry.java.patch | 11 - .../minecraft/core/RegistryAccess.java.patch | 20 + .../core/RegistrySetBuilder.java.patch | 27 - .../DataComponentInitializers.java.patch | 11 - .../component/DataComponentPatch.java.patch | 11 - .../component/DataComponentType.java.patch | 11 - .../component/TypedDataComponent.java.patch | 20 - .../DataComponentPredicate.java.patch | 11 - .../registries/BuiltInRegistries.java.patch | 6 +- .../data/info/RegistryDumpReport.java.patch | 11 - .../data/loot/LootTableProvider.java.patch | 11 - .../data/recipes/RecipeProvider.java.patch | 11 + .../RegistriesDatapackGenerator.java.patch | 11 - .../registries/VanillaRegistries.java.patch | 11 + .../data/tags/TagsProvider.java.patch | 11 - .../net/minecraft/locale/Language.java.patch | 11 - .../net/minecraft/nbt/CompoundTag.java.patch | 11 + .../net/minecraft/nbt/NbtOps.java.patch | 494 ++++++ .../net/minecraft/nbt/SnbtGrammar.java.patch | 25 + .../network/chat/LastSeenMessages.java.patch | 8 +- .../network/codec/StreamCodec.java.patch | 11 - .../network/protocol/BundlerInfo.java.patch | 11 - .../protocol/ProtocolInfoBuilder.java.patch | 11 - .../ClientboundCustomPayloadPacket.java.patch | 11 + .../ServerboundCustomPayloadPacket.java.patch | 11 + .../custom/CustomPacketPayload.java.patch | 11 - ...oundUpdateEnabledFeaturesPacket.java.patch | 8 +- ...ClientboundGameRuleValuesPacket.java.patch | 11 - ...ClientboundLevelChunkPacketData.java.patch | 90 ++ .../syncher/EntityDataSerializer.java.patch | 10 +- .../syncher/EntityDataSerializers.java.patch | 16 +- .../resources/HolderSetCodec.java.patch | 11 - .../resources/RegistryDataLoader.java.patch | 12 +- .../net/minecraft/server/Main.java.patch | 11 + .../bossevents/CustomBossEvents.java.patch | 11 + .../server/commands/ReturnCommand.java.patch | 11 + .../server/dedicated/Settings.java.patch | 11 - .../server/dialog/CommonDialogData.java.patch | 11 + .../dialog/action/StaticAction.java.patch | 11 - .../dialog/input/NumberRangeInput.java.patch | 11 + .../dialog/input/SingleOptionInput.java.patch | 11 + .../server/dialog/input/TextInput.java.patch | 11 + .../jsonrpc/IncomingRpcMethods.java.patch | 11 - .../server/jsonrpc/api/MethodInfo.java.patch | 35 +- .../server/jsonrpc/api/ParamInfo.java.patch | 10 + .../server/jsonrpc/api/ResultInfo.java.patch | 10 + .../server/jsonrpc/api/Schema.java.patch | 28 - .../methods/DiscoveryService.java.patch | 24 +- .../methods/GameRulesService.java.patch | 15 - .../server/level/ChunkMap.java.patch | 11 + .../level/ChunkTaskPriorityQueue.java.patch | 11 - .../server/level/ServerPlayer.java.patch | 11 - .../ServerGamePacketListenerImpl.java.patch | 45 - .../metadata/MetadataSectionType.java.patch | 11 - .../stats/ServerStatsCounter.java.patch | 11 + .../util/AbstractListBuilder.java.patch | 11 - .../net/minecraft/util/CubicSpline.java.patch | 11 + .../minecraft/util/EncoderCache.java.patch | 11 - .../net/minecraft/util/ExtraCodecs.java.patch | 23 +- .../net/minecraft/util/HashOps.java.patch | 11 - .../util/PlaceholderLookupProvider.java.patch | 16 - .../minecraft/util/SortedArraySet.java.patch | 6 +- .../util/StringRepresentable.java.patch | 11 + .../net/minecraft/util/Util.java.patch | 14 +- .../util/datafix/DataFixTypes.java.patch | 11 + .../util/datafix/DataFixers.java.patch | 34 +- .../datafix/fixes/AddNewChoices.java.patch | 11 - ...ySignDoubleSidedEditableTextFix.java.patch | 10 + .../fixes/BlockEntityUUIDFix.java.patch | 11 - .../ChunkBedBlockEntityInjecterFix.java.patch | 13 - .../fixes/ChunkHeightAndBiomeFix.java.patch | 12 - .../fixes/ChunkProtoTickListFix.java.patch | 11 - .../datafix/fixes/ChunkRenamesFix.java.patch | 11 + .../EntityRedundantChanceTagsFix.java.patch | 10 + ...ySpawnerItemVariantComponentFix.java.patch | 28 +- .../fixes/FixProjectileStoredItem.java.patch | 11 - .../fixes/InlineBlockPosFormatFix.java.patch | 11 + .../fixes/ItemShulkerBoxColorFix.java.patch | 11 - .../ItemStackComponentizationFix.java.patch | 11 + .../util/datafix/fixes/LeavesFix.java.patch | 21 +- .../fixes/OptionsKeyLwjgl3Fix.java.patch | 11 - .../fixes/OptionsKeyTranslationFix.java.patch | 11 - .../fixes/WorldGenSettingsFix.java.patch | 20 + .../jfr/parse/JfrStatsResult.java.patch | 11 + .../profiling/jfr/stats/FileIOStat.java.patch | 11 + .../BiasedToBottomInt.java.patch | 11 + .../util/valueproviders/ClampedInt.java.patch | 11 + .../ClampedNormalFloat.java.patch | 11 + .../ClampedNormalInt.java.patch | 11 + .../valueproviders/TrapezoidFloat.java.patch | 11 + .../valueproviders/UniformFloat.java.patch | 11 + .../util/valueproviders/UniformInt.java.patch | 11 + .../EnvironmentAttributeMap.java.patch | 21 +- .../modifier/AttributeModifier.java.patch | 11 - .../modifier/ColorModifier.java.patch | 6 +- .../modifier/FloatModifier.java.patch | 12 +- .../world/entity/AgeableMob.java.patch | 17 - .../minecraft/world/entity/Entity.java.patch | 11 + .../world/entity/EntityReference.java.patch | 20 - .../world/entity/EntityType.java.patch | 167 ++ .../world/entity/Leashable.java.patch | 272 ++++ .../world/entity/SpawnPlacements.java.patch | 11 - .../world/entity/ai/Brain.java.patch | 29 +- .../ai/behavior/AnimalMakeLove.java.patch | 11 + .../ai/behavior/InteractWith.java.patch | 11 - .../ai/behavior/TradeWithVillager.java.patch | 18 + .../ai/behavior/VillagerMakeLove.java.patch | 11 + .../world/entity/ai/goal/TemptGoal.java.patch | 11 + .../entity/animal/allay/AllayAi.java.patch | 35 - .../animal/armadillo/ArmadilloAi.java.patch | 20 - .../animal/axolotl/AxolotlAi.java.patch | 38 - .../entity/animal/camel/CamelAi.java.patch | 20 - .../world/entity/animal/fox/Fox.java.patch | 19 +- .../entity/animal/frog/FrogAi.java.patch | 56 - .../entity/animal/frog/TadpoleAi.java.patch | 20 - .../entity/animal/goat/GoatAi.java.patch | 44 - .../animal/golem/CopperGolemAi.java.patch | 20 - .../animal/happyghast/HappyGhastAi.java.patch | 26 - .../animal/nautilus/NautilusAi.java.patch | 20 - .../nautilus/ZombieNautilusAi.java.patch | 20 - .../animal/sniffer/SnifferAi.java.patch | 20 - .../world/entity/monster/Phantom.java.patch | 11 + .../world/entity/monster/Zoglin.java.patch | 20 - .../entity/monster/breeze/BreezeAi.java.patch | 25 - .../monster/creaking/CreakingAi.java.patch | 30 - .../entity/monster/hoglin/HoglinAi.java.patch | 37 - .../entity/monster/piglin/PiglinAi.java.patch | 92 -- .../monster/piglin/PiglinBruteAi.java.patch | 29 - .../piglin/StartHuntingHoglin.java.patch | 17 - .../monster/warden/AngerManagement.java.patch | 11 + .../entity/monster/warden/Warden.java.patch | 11 - .../entity/monster/warden/WardenAi.java.patch | 47 - .../projectile/arrow/AbstractArrow.java.patch | 66 + .../variant/PriorityProvider.java.patch | 11 - .../AbstractContainerMenu.java.patch | 20 - .../item/AdventureModePredicate.java.patch | 11 - .../minecraft/world/item/DyeColor.java.patch | 291 ++++ .../world/item/HoneycombItem.java.patch | 18 +- .../item/component/KineticWeapon.java.patch | 11 - .../item/component/PiercingWeapon.java.patch | 11 - .../world/item/crafting/Ingredient.java.patch | 11 + .../world/item/crafting/RecipeMap.java.patch | 11 - .../item/crafting/SelectableRecipe.java.patch | 11 + .../enchantment/LevelBasedValue.java.patch | 11 + .../effects/SpawnParticlesEffect.java.patch | 11 + .../item/trading/VillagerTrade.java.patch | 11 + .../world/level/biome/Climate.java.patch | 34 +- .../level/biome/MobSpawnSettings.java.patch | 11 + .../level/block/BaseEntityBlock.java.patch | 10 - .../world/level/block/Block.java.patch | 11 - .../world/level/block/ChestBlock.java.patch | 11 - .../block/ChiseledBookShelfBlock.java.patch | 11 - .../entity/TestInstanceBlockEntity.java.patch | 11 - .../block/entity/vault/VaultConfig.java.patch | 11 + .../level/block/state/StateHolder.java.patch | 11 - .../level/chunk/PalettedContainer.java.patch | 11 + .../level/gamerules/GameRuleMap.java.patch | 10 +- .../level/levelgen/NoiseSettings.java.patch | 11 + .../level/levelgen/RandomState.java.patch | 11 - .../levelgen/blending/BlendingData.java.patch | 11 + .../MultifaceGrowthConfiguration.java.patch | 11 + .../flat/FlatLevelGeneratorPresets.java.patch | 11 + .../FlatLevelGeneratorSettings.java.patch | 11 + .../levelgen/presets/WorldPreset.java.patch | 11 + .../RandomSpreadStructurePlacement.java.patch | 11 + .../structures/JigsawStructure.java.patch | 11 + .../level/pathfinder/PathFinder.java.patch | 11 - .../CopyComponentsFunction.java.patch | 11 + .../SetCustomModelDataFunction.java.patch | 12 +- ...ItemBlockStatePropertyCondition.java.patch | 16 +- .../world/timeline/Timeline.java.patch | 11 + 231 files changed, 5504 insertions(+), 2344 deletions(-) delete mode 100644 src/patches/com/mojang/blaze3d/opengl/GlProgram.java.patch delete mode 100644 src/patches/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java.patch delete mode 100644 src/patches/net/minecraft/ChatFormatting.java.patch delete mode 100644 src/patches/net/minecraft/TracingExecutor.java.patch create mode 100644 src/patches/net/minecraft/advancements/Advancement.java.patch create mode 100644 src/patches/net/minecraft/advancements/criterion/EnterBlockTrigger.java.patch create mode 100644 src/patches/net/minecraft/advancements/criterion/InventoryChangeTrigger.java.patch delete mode 100644 src/patches/net/minecraft/advancements/criterion/PlayerPredicate.java.patch create mode 100644 src/patches/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java.patch create mode 100644 src/patches/net/minecraft/client/PeriodicNotificationManager.java.patch create mode 100644 src/patches/net/minecraft/client/data/models/model/ModelTemplate.java.patch delete mode 100644 src/patches/net/minecraft/client/gui/components/ChatComponent.java.patch create mode 100644 src/patches/net/minecraft/client/gui/components/MultiLineEditBox.java.patch create mode 100644 src/patches/net/minecraft/client/gui/components/events/ContainerEventHandler.java.patch delete mode 100644 src/patches/net/minecraft/client/gui/font/PlayerGlyphProvider.java.patch create mode 100644 src/patches/net/minecraft/client/gui/font/providers/BitmapProvider.java.patch delete mode 100644 src/patches/net/minecraft/client/gui/screens/PresetFlatWorldScreen.java.patch create mode 100644 src/patches/net/minecraft/client/gui/screens/Screen.java.patch delete mode 100644 src/patches/net/minecraft/client/gui/screens/reporting/ChatSelectionScreen.java.patch create mode 100644 src/patches/net/minecraft/client/gui/screens/worldselection/AbstractGameRulesScreen.java.patch delete mode 100644 src/patches/net/minecraft/client/gui/screens/worldselection/WorldCreationUiState.java.patch delete mode 100644 src/patches/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch delete mode 100644 src/patches/net/minecraft/client/renderer/LevelEventHandler.java.patch create mode 100644 src/patches/net/minecraft/client/renderer/block/model/BlockModelDefinition.java.patch delete mode 100644 src/patches/net/minecraft/client/renderer/block/model/VariantSelector.java.patch create mode 100644 src/patches/net/minecraft/client/renderer/blockentity/BedRenderer.java.patch create mode 100644 src/patches/net/minecraft/client/renderer/blockentity/ChestRenderer.java.patch delete mode 100644 src/patches/net/minecraft/client/renderer/item/ConditionalItemModel.java.patch delete mode 100644 src/patches/net/minecraft/client/renderer/item/properties/select/ComponentContents.java.patch create mode 100644 src/patches/net/minecraft/client/resources/WaypointStyle.java.patch create mode 100644 src/patches/net/minecraft/client/resources/metadata/gui/GuiSpriteScaling.java.patch delete mode 100644 src/patches/net/minecraft/client/resources/model/ModelBakery.java.patch delete mode 100644 src/patches/net/minecraft/client/resources/server/ServerPackManager.java.patch create mode 100644 src/patches/net/minecraft/client/telemetry/TelemetryEventType.java.patch create mode 100644 src/patches/net/minecraft/client/waypoints/ClientWaypointManager.java.patch delete mode 100644 src/patches/net/minecraft/commands/Commands.java.patch delete mode 100644 src/patches/net/minecraft/commands/arguments/OperationArgument.java.patch create mode 100644 src/patches/net/minecraft/commands/arguments/item/ComponentPredicateParser.java.patch delete mode 100644 src/patches/net/minecraft/commands/synchronization/ArgumentTypeInfos.java.patch delete mode 100644 src/patches/net/minecraft/commands/synchronization/SuggestionProviders.java.patch create mode 100644 src/patches/net/minecraft/core/Direction.java.patch delete mode 100644 src/patches/net/minecraft/core/Registry.java.patch create mode 100644 src/patches/net/minecraft/core/RegistryAccess.java.patch delete mode 100644 src/patches/net/minecraft/core/RegistrySetBuilder.java.patch delete mode 100644 src/patches/net/minecraft/core/component/DataComponentInitializers.java.patch delete mode 100644 src/patches/net/minecraft/core/component/DataComponentPatch.java.patch delete mode 100644 src/patches/net/minecraft/core/component/DataComponentType.java.patch delete mode 100644 src/patches/net/minecraft/core/component/TypedDataComponent.java.patch delete mode 100644 src/patches/net/minecraft/core/component/predicates/DataComponentPredicate.java.patch delete mode 100644 src/patches/net/minecraft/data/info/RegistryDumpReport.java.patch delete mode 100644 src/patches/net/minecraft/data/loot/LootTableProvider.java.patch create mode 100644 src/patches/net/minecraft/data/recipes/RecipeProvider.java.patch delete mode 100644 src/patches/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch create mode 100644 src/patches/net/minecraft/data/registries/VanillaRegistries.java.patch delete mode 100644 src/patches/net/minecraft/data/tags/TagsProvider.java.patch delete mode 100644 src/patches/net/minecraft/locale/Language.java.patch create mode 100644 src/patches/net/minecraft/nbt/CompoundTag.java.patch create mode 100644 src/patches/net/minecraft/nbt/NbtOps.java.patch create mode 100644 src/patches/net/minecraft/nbt/SnbtGrammar.java.patch delete mode 100644 src/patches/net/minecraft/network/codec/StreamCodec.java.patch delete mode 100644 src/patches/net/minecraft/network/protocol/BundlerInfo.java.patch delete mode 100644 src/patches/net/minecraft/network/protocol/ProtocolInfoBuilder.java.patch create mode 100644 src/patches/net/minecraft/network/protocol/common/ClientboundCustomPayloadPacket.java.patch create mode 100644 src/patches/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java.patch delete mode 100644 src/patches/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch delete mode 100644 src/patches/net/minecraft/network/protocol/game/ClientboundGameRuleValuesPacket.java.patch create mode 100644 src/patches/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java.patch delete mode 100644 src/patches/net/minecraft/resources/HolderSetCodec.java.patch create mode 100644 src/patches/net/minecraft/server/Main.java.patch create mode 100644 src/patches/net/minecraft/server/bossevents/CustomBossEvents.java.patch create mode 100644 src/patches/net/minecraft/server/commands/ReturnCommand.java.patch delete mode 100644 src/patches/net/minecraft/server/dedicated/Settings.java.patch create mode 100644 src/patches/net/minecraft/server/dialog/CommonDialogData.java.patch delete mode 100644 src/patches/net/minecraft/server/dialog/action/StaticAction.java.patch create mode 100644 src/patches/net/minecraft/server/dialog/input/NumberRangeInput.java.patch create mode 100644 src/patches/net/minecraft/server/dialog/input/SingleOptionInput.java.patch create mode 100644 src/patches/net/minecraft/server/dialog/input/TextInput.java.patch delete mode 100644 src/patches/net/minecraft/server/jsonrpc/IncomingRpcMethods.java.patch create mode 100644 src/patches/net/minecraft/server/jsonrpc/api/ParamInfo.java.patch create mode 100644 src/patches/net/minecraft/server/jsonrpc/api/ResultInfo.java.patch delete mode 100644 src/patches/net/minecraft/server/jsonrpc/api/Schema.java.patch delete mode 100644 src/patches/net/minecraft/server/jsonrpc/methods/GameRulesService.java.patch create mode 100644 src/patches/net/minecraft/server/level/ChunkMap.java.patch delete mode 100644 src/patches/net/minecraft/server/level/ChunkTaskPriorityQueue.java.patch delete mode 100644 src/patches/net/minecraft/server/level/ServerPlayer.java.patch delete mode 100644 src/patches/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch delete mode 100644 src/patches/net/minecraft/server/packs/metadata/MetadataSectionType.java.patch create mode 100644 src/patches/net/minecraft/stats/ServerStatsCounter.java.patch delete mode 100644 src/patches/net/minecraft/util/AbstractListBuilder.java.patch create mode 100644 src/patches/net/minecraft/util/CubicSpline.java.patch delete mode 100644 src/patches/net/minecraft/util/EncoderCache.java.patch delete mode 100644 src/patches/net/minecraft/util/HashOps.java.patch delete mode 100644 src/patches/net/minecraft/util/PlaceholderLookupProvider.java.patch create mode 100644 src/patches/net/minecraft/util/StringRepresentable.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/DataFixTypes.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/AddNewChoices.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/BlockEntitySignDoubleSidedEditableTextFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/BlockEntityUUIDFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/ChunkBedBlockEntityInjecterFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/ChunkHeightAndBiomeFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/ChunkProtoTickListFix.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/ChunkRenamesFix.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/EntityRedundantChanceTagsFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/FixProjectileStoredItem.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/InlineBlockPosFormatFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/ItemShulkerBoxColorFix.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/ItemStackComponentizationFix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/OptionsKeyLwjgl3Fix.java.patch delete mode 100644 src/patches/net/minecraft/util/datafix/fixes/OptionsKeyTranslationFix.java.patch create mode 100644 src/patches/net/minecraft/util/datafix/fixes/WorldGenSettingsFix.java.patch create mode 100644 src/patches/net/minecraft/util/profiling/jfr/parse/JfrStatsResult.java.patch create mode 100644 src/patches/net/minecraft/util/profiling/jfr/stats/FileIOStat.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/BiasedToBottomInt.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/ClampedInt.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/ClampedNormalFloat.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/ClampedNormalInt.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/TrapezoidFloat.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/UniformFloat.java.patch create mode 100644 src/patches/net/minecraft/util/valueproviders/UniformInt.java.patch delete mode 100644 src/patches/net/minecraft/world/attribute/modifier/AttributeModifier.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/AgeableMob.java.patch create mode 100644 src/patches/net/minecraft/world/entity/Entity.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/EntityReference.java.patch create mode 100644 src/patches/net/minecraft/world/entity/EntityType.java.patch create mode 100644 src/patches/net/minecraft/world/entity/Leashable.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/SpawnPlacements.java.patch create mode 100644 src/patches/net/minecraft/world/entity/ai/behavior/AnimalMakeLove.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/ai/behavior/InteractWith.java.patch create mode 100644 src/patches/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java.patch create mode 100644 src/patches/net/minecraft/world/entity/ai/behavior/VillagerMakeLove.java.patch create mode 100644 src/patches/net/minecraft/world/entity/ai/goal/TemptGoal.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/allay/AllayAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/armadillo/ArmadilloAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/axolotl/AxolotlAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/camel/CamelAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/frog/FrogAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/frog/TadpoleAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/goat/GoatAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/golem/CopperGolemAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/happyghast/HappyGhastAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/nautilus/NautilusAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/nautilus/ZombieNautilusAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/animal/sniffer/SnifferAi.java.patch create mode 100644 src/patches/net/minecraft/world/entity/monster/Phantom.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/Zoglin.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/breeze/BreezeAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/creaking/CreakingAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/hoglin/HoglinAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/piglin/PiglinBruteAi.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/piglin/StartHuntingHoglin.java.patch create mode 100644 src/patches/net/minecraft/world/entity/monster/warden/AngerManagement.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/warden/Warden.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/monster/warden/WardenAi.java.patch create mode 100644 src/patches/net/minecraft/world/entity/projectile/arrow/AbstractArrow.java.patch delete mode 100644 src/patches/net/minecraft/world/entity/variant/PriorityProvider.java.patch delete mode 100644 src/patches/net/minecraft/world/inventory/AbstractContainerMenu.java.patch delete mode 100644 src/patches/net/minecraft/world/item/AdventureModePredicate.java.patch create mode 100644 src/patches/net/minecraft/world/item/DyeColor.java.patch delete mode 100644 src/patches/net/minecraft/world/item/component/KineticWeapon.java.patch delete mode 100644 src/patches/net/minecraft/world/item/component/PiercingWeapon.java.patch create mode 100644 src/patches/net/minecraft/world/item/crafting/Ingredient.java.patch delete mode 100644 src/patches/net/minecraft/world/item/crafting/RecipeMap.java.patch create mode 100644 src/patches/net/minecraft/world/item/crafting/SelectableRecipe.java.patch create mode 100644 src/patches/net/minecraft/world/item/enchantment/LevelBasedValue.java.patch create mode 100644 src/patches/net/minecraft/world/item/enchantment/effects/SpawnParticlesEffect.java.patch create mode 100644 src/patches/net/minecraft/world/item/trading/VillagerTrade.java.patch create mode 100644 src/patches/net/minecraft/world/level/biome/MobSpawnSettings.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/BaseEntityBlock.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/Block.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/ChestBlock.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/ChiseledBookShelfBlock.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/entity/TestInstanceBlockEntity.java.patch create mode 100644 src/patches/net/minecraft/world/level/block/entity/vault/VaultConfig.java.patch delete mode 100644 src/patches/net/minecraft/world/level/block/state/StateHolder.java.patch create mode 100644 src/patches/net/minecraft/world/level/chunk/PalettedContainer.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/NoiseSettings.java.patch delete mode 100644 src/patches/net/minecraft/world/level/levelgen/RandomState.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/blending/BlendingData.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/feature/configurations/MultifaceGrowthConfiguration.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/flat/FlatLevelGeneratorPresets.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/flat/FlatLevelGeneratorSettings.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/presets/WorldPreset.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/structure/placement/RandomSpreadStructurePlacement.java.patch create mode 100644 src/patches/net/minecraft/world/level/levelgen/structure/structures/JigsawStructure.java.patch delete mode 100644 src/patches/net/minecraft/world/level/pathfinder/PathFinder.java.patch create mode 100644 src/patches/net/minecraft/world/level/storage/loot/functions/CopyComponentsFunction.java.patch create mode 100644 src/patches/net/minecraft/world/timeline/Timeline.java.patch diff --git a/plugin/src/main/java/net/neoforged/neoform/MinecraftLibraries.java b/plugin/src/main/java/net/neoforged/neoform/MinecraftLibraries.java index edee2f86..211da50b 100644 --- a/plugin/src/main/java/net/neoforged/neoform/MinecraftLibraries.java +++ b/plugin/src/main/java/net/neoforged/neoform/MinecraftLibraries.java @@ -34,6 +34,17 @@ public static NamedDomainObjectProvider createConfigura } return result; })); + // TODO: needs spec extension + var extraCompileDependencies = neoForm.getAdditionalCompileDependencies(); + spec.getDependencies().addAllLater(extraCompileDependencies.map(notations -> { + var result = new ArrayList(notations.size()); + for (var notation : notations) { + var dependency = dependencyFactory.create(notation); + dependency.endorseStrictVersions(); + result.add(dependency); + } + return result; + })); }); return configurations.resolvable("minecraftLibrariesClasspath", spec -> spec.extendsFrom(minecraftLibraries.get())); } diff --git a/plugin/src/main/java/net/neoforged/neoform/NeoFormProjectPlugin.java b/plugin/src/main/java/net/neoforged/neoform/NeoFormProjectPlugin.java index 5d40dfd9..aa8b2ff6 100644 --- a/plugin/src/main/java/net/neoforged/neoform/NeoFormProjectPlugin.java +++ b/plugin/src/main/java/net/neoforged/neoform/NeoFormProjectPlugin.java @@ -144,6 +144,7 @@ public void apply(Project project) { task.setDescription("Creates a Gradle subproject under 'workspace' that contains the patched Minecraft sources to work on modifying the patches easily. Run the createPatches task to generate new patches from this workspace."); task.getPatchesDir().set(project.getLayout().getProjectDirectory().dir("src/patches")); task.getSourcesZip().set(decompile.flatMap(Decompile::getOutput)); + task.getResourcesZip().set(prepareJarForDecompiler.flatMap(PrepareJarForDecompiler::getOutput)); task.getWorkspace().set(workspaceDir); }); var createPatchWorkspaceForUpdate = tasks.register("createPatchWorkspaceForUpdate", CreatePatchWorkspace.class, task -> { @@ -151,6 +152,7 @@ public void apply(Project project) { task.setDescription("Same as the createWorkspace task, but patches are applied fuzzily and rejected patches will be stored in the 'rejects' folder."); task.getPatchesDir().set(project.getLayout().getProjectDirectory().dir("src/patches")); task.getSourcesZip().set(decompile.flatMap(Decompile::getOutput)); + task.getResourcesZip().set(prepareJarForDecompiler.flatMap(PrepareJarForDecompiler::getOutput)); task.getWorkspace().set(workspaceDir); task.getUpdateMode().set(true); }); diff --git a/plugin/src/main/java/net/neoforged/neoform/tasks/CreatePatchWorkspace.java b/plugin/src/main/java/net/neoforged/neoform/tasks/CreatePatchWorkspace.java index f60b2cbd..52c7c7f4 100644 --- a/plugin/src/main/java/net/neoforged/neoform/tasks/CreatePatchWorkspace.java +++ b/plugin/src/main/java/net/neoforged/neoform/tasks/CreatePatchWorkspace.java @@ -46,6 +46,10 @@ public abstract class CreatePatchWorkspace extends DefaultTask { @InputFile public abstract RegularFileProperty getSourcesZip(); + // TODO: temporary hack since CG doesn't preserve the resources in the jar... + @InputFile + public abstract RegularFileProperty getResourcesZip(); + @InputDirectory public abstract DirectoryProperty getPatchesDir(); @@ -112,69 +116,78 @@ public void createWorkspace() throws IOException { var failedPatches = new HashSet(); var successfulPatches = 0; var dirsCreated = new HashSet(); - try (var zip = new ZipFile(getSourcesZip().getAsFile().get())) { - var entries = zip.entries(); - while (entries.hasMoreElements()) { - var entry = entries.nextElement(); - if (entry.isDirectory()) { - continue; - } - - Path destination; - if (entry.getName().endsWith(".java")) { - destination = sourcesDir; - } else { - destination = resourcesDir; - } - destination = destination.resolve(entry.getName()); + for (var inzip : List.of(getSourcesZip(), getResourcesZip())) { + try (var zip = new ZipFile(inzip.getAsFile().get())) { + var entries = zip.entries(); + while (entries.hasMoreElements()) { + var entry = entries.nextElement(); + if (entry.isDirectory()) { + continue; + } - if (dirsCreated.add(destination.getParent())) { - Files.createDirectories(destination.getParent()); - } + // TODO: CG should normalize the paths to / when writing the resulting zip entries + var entryName = entry.getName().replace('\\', '/'); - try (var input = zip.getInputStream(entry)) { - var patch = patches.remove(entry.getName()); - if (patch != null) { - var rejectsOutput = new ByteArrayOutputStream(); - var builder = PatchOperation.builder() - .logTo(line -> getLogger().lifecycle("{}", line)) - .baseInput(Input.SingleInput.pipe(input, entry.getName())) - .patchesInput(Input.SingleInput.pipe(new ByteArrayInputStream(patch.content), patch.patchPath.toString())) - .patchedOutput(Output.SingleOutput.path(destination)) - .level(LogLevel.WARN) - .mode(PatchMode.OFFSET); - - if (updateMode) { - builder.mode(PatchMode.OFFSET) - .level(io.codechicken.diffpatch.util.LogLevel.INFO) - .rejectsOutput(Output.SingleOutput.pipe(rejectsOutput)); + Path destination; + if (entry.getName().endsWith(".java")) { + if (inzip == getResourcesZip()) { + // Hackkkk + continue; } + destination = sourcesDir; + } else { + destination = resourcesDir; + } + destination = destination.resolve(entry.getName()); - var result = builder.build().operate(); - - if (result.exit != 0) { - problems.add(reporter.create(PATCH_FAILED, problem -> { - problem - .details("Applying the patch to " + entry.getName() + " failed.") - .fileLocation(patch.patchPath.toAbsolutePath().toString()) - .severity(Severity.ERROR); - })); - getLogger().error("Applying the patch to {}} failed.", entry.getName()); - - if (updateMode && rejectsOutput.size() > 0) { - Path rejectsPath = rejectsDir.resolve(entry.getName() + ".patch"); - if (dirsCreated.add(rejectsPath.getParent())) { - Files.createDirectories(rejectsPath.getParent()); - } - Files.write(rejectsPath, rejectsOutput.toByteArray()); + if (dirsCreated.add(destination.getParent())) { + Files.createDirectories(destination.getParent()); + } + + try (var input = zip.getInputStream(entry)) { + var patch = patches.remove(entryName); + if (patch != null) { + var rejectsOutput = new ByteArrayOutputStream(); + var builder = PatchOperation.builder() + .logTo(line -> getLogger().lifecycle("{}", line)) + .baseInput(Input.SingleInput.pipe(input, entryName)) + .patchesInput(Input.SingleInput.pipe(new ByteArrayInputStream(patch.content), patch.patchPath.toString())) + .patchedOutput(Output.SingleOutput.path(destination)) + .level(LogLevel.WARN) + .mode(PatchMode.OFFSET); + + if (updateMode) { + builder.mode(PatchMode.OFFSET) + .level(io.codechicken.diffpatch.util.LogLevel.INFO) + .rejectsOutput(Output.SingleOutput.pipe(rejectsOutput)); } - failedPatches.add(entry.getName()); + var result = builder.build().operate(); + + if (result.exit != 0) { + problems.add(reporter.create(PATCH_FAILED, problem -> { + problem + .details("Applying the patch to " + entryName + " failed.") + .fileLocation(patch.patchPath.toAbsolutePath().toString()) + .severity(Severity.ERROR); + })); + getLogger().error("Applying the patch to {}} failed.", entryName); + + if (updateMode && rejectsOutput.size() > 0) { + Path rejectsPath = rejectsDir.resolve(entryName + ".patch"); + if (dirsCreated.add(rejectsPath.getParent())) { + Files.createDirectories(rejectsPath.getParent()); + } + Files.write(rejectsPath, rejectsOutput.toByteArray()); + } + + failedPatches.add(entryName); + } else { + successfulPatches++; + } } else { - successfulPatches++; + Files.copy(input, destination, StandardCopyOption.REPLACE_EXISTING); } - } else { - Files.copy(input, destination, StandardCopyOption.REPLACE_EXISTING); } } } diff --git a/plugin/src/main/java/net/neoforged/neoform/tasks/Decompile.java b/plugin/src/main/java/net/neoforged/neoform/tasks/Decompile.java index fea1e162..dd74a707 100644 --- a/plugin/src/main/java/net/neoforged/neoform/tasks/Decompile.java +++ b/plugin/src/main/java/net/neoforged/neoform/tasks/Decompile.java @@ -1,9 +1,11 @@ package net.neoforged.neoform.tasks; +import org.gradle.api.file.ArchiveOperations; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.RegularFileProperty; import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.InputFile; +import org.gradle.api.tasks.Optional; import org.gradle.api.tasks.OutputFile; import org.gradle.api.tasks.TaskAction; @@ -12,8 +14,19 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.Comparator; import java.util.Map; +import java.util.stream.Stream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; public abstract class Decompile extends ToolAction { @InputFile @@ -34,22 +47,62 @@ public Decompile() { }))); } + @Inject + protected abstract ArchiveOperations getArchiveOperations(); + @TaskAction public void execute() throws IOException { var inputJar = getInput().getAsFile().get(); - var outputZip = getOutput().getAsFile().get(); + var outputFolder = getOutput().getAsFile().get().toPath().resolveSibling("temp_output_folder"); + // Code from https://stackoverflow.com/questions/35988192/java-nio-most-concise-recursive-directory-delete + if (Files.exists(outputFolder)) { + try (Stream walk = Files.walk(outputFolder)) { + walk.sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete); + } + } + + // TODO: this implies changes in the produced neoform config + var libraries = new StringBuilder(); - var librariesFile = new File(getTemporaryDir(), "libraries.cfg"); - try (var writer = new BufferedWriter(new FileWriter(librariesFile, StandardCharsets.UTF_8))) { - for (var file : getInputClasspath()) { - writer.append("--add-external=").append(file.getAbsolutePath()).append('\n'); + boolean first = true; + for (var file : getInputClasspath()) { + if (!first) { + libraries.append(File.pathSeparator); } + first = false; + libraries.append(file.getAbsolutePath()); } exec(Map.of( "input", inputJar.getAbsolutePath(), - "inputLibraries", librariesFile.getAbsolutePath(), - "output", outputZip.getAbsolutePath() + "inputLibraries", libraries.toString(), + "output", outputFolder.toAbsolutePath().toString() )); + + + var outputZip = getOutput().getAsFile().get(); + if (outputZip.exists()) { + Files.delete(outputZip.toPath()); + } + pack(outputFolder, outputZip.toPath()); + } + + public static void pack(Path sourceDir, Path zipTarget) throws IOException { + Path p = Files.createFile(zipTarget); + try (ZipOutputStream zs = new ZipOutputStream(Files.newOutputStream(p)); + Stream files = Files.walk(sourceDir)) { + files + .filter(path -> !Files.isDirectory(path)) + .forEach(path -> { + ZipEntry zipEntry = new ZipEntry(sourceDir.relativize(path).toString()); + try { + zs.putNextEntry(zipEntry); + Files.copy(path, zs); + zs.closeEntry(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + }); + } } } diff --git a/plugin/src/main/java/net/neoforged/neoform/tasks/ToolAction.java b/plugin/src/main/java/net/neoforged/neoform/tasks/ToolAction.java index e29c4d8a..39060679 100644 --- a/plugin/src/main/java/net/neoforged/neoform/tasks/ToolAction.java +++ b/plugin/src/main/java/net/neoforged/neoform/tasks/ToolAction.java @@ -154,7 +154,10 @@ public static void configure(Project project, TaskProvider var dependencies = project.getDependencyFactory(); spec.getDependencies().addAllLater(settings.getClasspath().map(i -> i.stream().map(notation -> { var dependency = dependencies.create(notation); - dependency.setTransitive(false); + // TODO: hacky! + if (!taskName.equals("decompile")) { + dependency.setTransitive(false); + } return dependency; }).toList())); }); diff --git a/settings.gradle b/settings.gradle index 3866b86e..3a9ad02e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -28,26 +28,49 @@ neoForm { decompiler { classpath = [ - 'org.vineflower:vineflower:1.11.2', - 'net.neoforged:vineflower-plugins:0.1.5' + // TODO: excessive deps + 'net.javasauce:Decompiler:0.0-SNAPSHOT', +// 'org.vineflower:vineflower:1.11.2', +// 'net.neoforged:vineflower-plugins:0.1.5' + ] + mainClass = 'net.covers1624.coffeegrinder.CoffeeGrinder' + jvmArgs = [ + // TODO: should probably scale with the number of threads... + '-Xmx4g', + // TODO: enabling things triggers more failures +// '-ea', ] - mainClass = 'org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler' - jvmArgs = ['-Xmx4g'] args = [ - '--decompile-inner', - '--remove-bridge', - '--decompile-generics', - '--ascii-strings', - '--remove-synthetic', - '--include-classpath', - '--ignore-invalid-bytecode', - '--bytecode-source-mapping', - '--dump-code-lines', - '--indent-string= ', - '--log-level=WARN', - '-cfg={inputLibraries}', - '{input}', - '{output}' +// '--decompile-inner', +// '--remove-bridge', +// '--decompile-generics', +// '--ascii-strings', +// '--remove-synthetic', +// '--include-classpath', +// '--ignore-invalid-bytecode', +// '--bytecode-source-mapping', +// '--dump-code-lines', +// '--indent-string= ', +// '--log-level=WARN', +// '-cfg={inputLibraries}', + '-l={inputLibraries}', + '-i={input}', + '-o={output}', + '-a={output}-ast', + // Record deconstruction in switch: + '-s=com.mojang.blaze3d.opengl.GlCommandEncoder#trySetup(Lcom/mojang/blaze3d/opengl/GlRenderPass;Ljava/util/Collection;)Z', + '-s=net.minecraft.client.gui.screens.inventory.BookViewScreen#handleClickEvent(Lnet/minecraft/network/chat/ClickEvent;)Z', + '-s=net.minecraft.client.renderer.PostChain#createPass(Lnet/minecraft/client/renderer/texture/TextureManager;Lnet/minecraft/client/renderer/PostChainConfig$Pass;Lnet/minecraft/resources/Identifier;)Lnet/minecraft/client/renderer/PostPass;', + '-s=net.minecraft.commands.functions.MacroFunction#stringify(Lnet/minecraft/nbt/Tag;)Ljava/lang/String;', + '-s=net.minecraft.nbt.NbtOps#convertTo(Lcom/mojang/serialization/DynamicOps;Lnet/minecraft/nbt/Tag;)Ljava/lang/Object;', + // Generic inference problems: + '-s=net.minecraft.core.Direction#()V', + '-s=net.minecraft.network.protocol.game.ClientboundLevelChunkPacketData#(Lnet/minecraft/world/level/chunk/LevelChunk;)V', + '-s=net.minecraft.server.jsonrpc.methods.DiscoveryService$DiscoverComponents#typedSchema()Lcom/mojang/serialization/MapCodec;', + '-s=net.minecraft.world.entity.Leashable#checkElasticInteractions(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/entity/Leashable$LeashData;)Z', + '-s=net.minecraft.world.entity.Leashable#getLeashHolder()Lnet/minecraft/world/entity/Entity;', + '-s=net.minecraft.world.entity.projectile.arrow.AbstractArrow$Pickup#()V', + '-s=net.minecraft.world.item.DyeColor#()V', ] } } diff --git a/src/patches/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch b/src/patches/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch index 372c004c..e2930121 100644 --- a/src/patches/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch +++ b/src/patches/com/mojang/blaze3d/opengl/GlCommandEncoder.java.patch @@ -1,138 +1,1263 @@ --- a/com/mojang/blaze3d/opengl/GlCommandEncoder.java +++ b/com/mojang/blaze3d/opengl/GlCommandEncoder.java -@@ -927,10 +_,10 @@ - Uniform var10 = var10000; - byte var11 = 0; +@@ -639,1097 +_,171 @@ + } + } -- while (true) { -- switch (SwitchBootstraps.typeSwitch<"typeSwitch",Uniform.Ubo,Uniform.Utb,Uniform.Sampler>(var10, var11)) { -- case 0: -- Uniform.Ubo var12 = (Uniform.Ubo)var10; +- /* Method skipped as requested +- private boolean trySetup(final GlRenderPass renderPass, final Collection dynamicUniforms) { +- boolean s_0 = GlRenderPass.VALIDATION; +- if (s_0 == 0) { +- goto L40; +- } +- goto L0_1; +- +- L0_1: +- { +- GlRenderPass s_1 = renderPass; +- GlRenderPipeline s_2 = s_1.pipeline; +- if (s_2 != null) { +- goto L3; +- } +- goto L0_2; +- } +- +- L0_2: +- { +- IllegalStateException s_3 = __newobject IllegalStateException; +- String s_4 = "Can't draw without a render pipeline"; +- s_3.(s_4); +- IllegalStateException s_5 = s_3; +- throw s_5; +- } +- +- L3: +- { +- GlRenderPass s_6 = renderPass; +- GlRenderPipeline s_7 = s_6.pipeline; +- GlProgram s_8 = s_7.program(); +- GlProgram s_9 = GlProgram.INVALID_PROGRAM; +- if (s_8 != s_9) { +- goto L5; +- } +- goto L3_1; +- } +- +- L3_1: +- { +- IllegalStateException s_10 = __newobject IllegalStateException; +- String s_11 = "Pipeline contains invalid shader program"; +- s_10.(s_11); +- IllegalStateException s_12 = s_10; +- throw s_12; +- } +- +- L5: +- { +- GlRenderPass s_13 = renderPass; +- GlRenderPipeline s_14 = s_13.pipeline; +- RenderPipeline s_15 = s_14.info(); +- List s_16 = s_15.getUniforms(); +- Iterator s_17 = s_16.iterator(); +- Iterator var_0 = s_17; +- goto L6; +- } +- +- L6: +- { +- Iterator s_18 = var_0; +- boolean s_19 = s_18.hasNext(); +- if (s_19 == 0) { +- goto L23; +- } +- goto L6_1; +- } +- +- L6_1: +- { +- Iterator s_20 = var_0; +- Object s_21 = s_20.next(); +- RenderPipeline.UniformDescription s_22 = (RenderPipeline.UniformDescription) s_21; +- RenderPipeline.UniformDescription uniform = s_22; +- GlRenderPass s_23 = renderPass; +- HashMap s_24 = s_23.uniforms; +- RenderPipeline.UniformDescription s_25 = uniform; +- String s_26 = s_25.name(); +- Object s_27 = s_24.get(s_26); +- GpuBufferSlice s_28 = (GpuBufferSlice) s_27; +- GpuBufferSlice value = s_28; +- Collection s_29 = dynamicUniforms; +- RenderPipeline.UniformDescription s_30 = uniform; +- String s_31 = s_30.name(); +- boolean s_32 = s_29.contains(s_31); +- if (s_32 == 0) { +- goto L10; +- } +- goto L6_2; +- } +- +- L6_2: +- { +- goto L6; +- } +- +- L10: +- { +- GpuBufferSlice s_33 = value; +- if (s_33 != null) { +- goto L12; +- } +- goto L10_1; +- } +- +- L10_1: +- { +- IllegalStateException s_34 = __newobject IllegalStateException; +- RenderPipeline.UniformDescription s_35 = uniform; +- String s_36 = s_35.name(); +- RenderPipeline.UniformDescription s_37 = uniform; +- UniformType s_38 = s_37.type(); +- String s_39 = String.valueOf(s_38); +- String s_40 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Missing uniform \u0001 (should be \u0001)")(s_36, s_39); +- s_34.(s_40); +- IllegalStateException s_41 = s_34; +- throw s_41; +- } +- +- L12: +- { +- RenderPipeline.UniformDescription s_42 = uniform; +- UniformType s_43 = s_42.type(); +- UniformType s_44 = UniformType.UNIFORM_BUFFER; +- if (s_43 != s_44) { +- goto L17; +- } +- goto L12_1; +- } +- +- L12_1: +- { +- GpuBufferSlice s_45 = value; +- GpuBuffer s_46 = s_45.buffer(); +- boolean s_47 = s_46.isClosed(); +- if (s_47 == 0) { +- goto L15; +- } +- goto L12_2; +- } +- +- L12_2: +- { +- IllegalStateException s_48 = __newobject IllegalStateException; +- RenderPipeline.UniformDescription s_49 = uniform; +- String s_50 = s_49.name(); +- String s_51 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Uniform buffer \u0001 is already closed")(s_50); +- s_48.(s_51); +- IllegalStateException s_52 = s_48; +- throw s_52; +- } +- +- L15: +- { +- GpuBufferSlice s_53 = value; +- GpuBuffer s_54 = s_53.buffer(); +- int s_55 = s_54.usage(); +- int_constant(128) s_56 = 128; +- int s_57 = s_55 & s_56; +- if (s_57 != 0) { +- goto L17; +- } +- goto L15_1; +- } +- +- L15_1: +- { +- IllegalStateException s_58 = __newobject IllegalStateException; +- RenderPipeline.UniformDescription s_59 = uniform; +- String s_60 = s_59.name(); +- String s_61 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Uniform buffer \u0001 must have GpuBuffer.USAGE_UNIFORM")(s_60); +- s_58.(s_61); +- IllegalStateException s_62 = s_58; +- throw s_62; +- } +- +- L17: +- { +- RenderPipeline.UniformDescription s_63 = uniform; +- UniformType s_64 = s_63.type(); +- UniformType s_65 = UniformType.TEXEL_BUFFER; +- if (s_64 != s_65) { +- goto L22; +- } +- goto L17_1; +- } +- +- L17_1: +- { +- GpuBufferSlice s_66 = value; +- long s_67 = s_66.offset(); +- long s_68 = 0L; +- int s_69 = __compare.long(s_67 > s_68); +- if (s_69 != 0) { +- goto L19; +- } +- goto L17_2; +- } +- +- L17_2: +- { +- GpuBufferSlice s_70 = value; +- long s_71 = s_70.length(); +- GpuBufferSlice s_72 = value; +- GpuBuffer s_73 = s_72.buffer(); +- long s_74 = s_73.size(); +- int s_75 = __compare.long(s_71 > s_74); +- if (s_75 == 0) { +- goto L20; +- } +- goto L17_3; +- } +- +- L17_3: +- { +- goto L19; +- } +- +- L19: +- { +- IllegalStateException s_76 = __newobject IllegalStateException; +- String s_77 = "Uniform texel buffers do not support a slice of a buffer, must be entire buffer"; +- s_76.(s_77); +- IllegalStateException s_78 = s_76; +- throw s_78; +- } +- +- L20: +- { +- RenderPipeline.UniformDescription s_79 = uniform; +- TextureFormat s_80 = s_79.textureFormat(); +- if (s_80 != null) { +- goto L22; +- } +- goto L20_1; +- } +- +- L20_1: +- { +- IllegalStateException s_81 = __newobject IllegalStateException; +- RenderPipeline.UniformDescription s_82 = uniform; +- String s_83 = s_82.name(); +- String s_84 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Invalid uniform texel buffer \u0001 (missing a texture format)")(s_83); +- s_81.(s_84); +- IllegalStateException s_85 = s_81; +- throw s_85; +- } +- +- L22: +- { +- goto L6; +- } +- +- L23: +- { +- GlRenderPass s_86 = renderPass; +- GlRenderPipeline s_87 = s_86.pipeline; +- GlProgram s_88 = s_87.program(); +- Map s_89 = s_88.getUniforms(); +- Set s_90 = s_89.entrySet(); +- Iterator s_91 = s_90.iterator(); +- Iterator var_3 = s_91; +- goto L24; +- } +- +- L24: +- { +- Iterator s_92 = var_3; +- boolean s_93 = s_92.hasNext(); +- if (s_93 == 0) { +- goto L38; +- } +- goto L24_1; +- } +- +- L24_1: +- { +- Iterator s_94 = var_3; +- Object s_95 = s_94.next(); +- Map.Entry s_96 = (Map.Entry) s_95; +- Map.Entry entry = s_96; +- Map.Entry s_97 = entry; +- Object s_98 = s_97.getValue(); +- boolean s_99 = s_98 instanceof Uniform.Sampler; +- if (s_99 == 0) { +- goto L37; +- } +- goto L24_2; +- } +- +- L24_2: +- { +- Map.Entry s_100 = entry; +- Object s_101 = s_100.getKey(); +- String s_102 = (String) s_101; +- String name = s_102; +- GlRenderPass s_103 = renderPass; +- HashMap s_104 = s_103.samplers; +- String s_105 = name; +- Object s_106 = s_104.get(s_105); +- GlRenderPass.TextureViewAndSampler s_107 = (GlRenderPass.TextureViewAndSampler) s_106; +- GlRenderPass.TextureViewAndSampler viewAndSampler = s_107; +- GlRenderPass.TextureViewAndSampler s_108 = viewAndSampler; +- if (s_108 != null) { +- goto L30; +- } +- goto L24_3; +- } +- +- L24_3: +- { +- IllegalStateException s_109 = __newobject IllegalStateException; +- String s_110 = name; +- String s_111 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Missing sampler \u0001")(s_110); +- s_109.(s_111); +- IllegalStateException s_112 = s_109; +- throw s_112; +- } +- +- L30: +- { +- GlRenderPass.TextureViewAndSampler s_113 = viewAndSampler; +- GlTextureView s_114 = s_113.view(); +- GlTextureView textureView = s_114; +- GlTextureView s_115 = textureView; +- boolean s_116 = s_115.isClosed(); +- if (s_116 == 0) { +- goto L33; +- } +- goto L30_1; +- } +- +- L30_1: +- { +- IllegalStateException s_117 = __newobject IllegalStateException; +- String s_118 = name; +- GlTextureView s_119 = textureView; +- GlTexture s_120 = s_119.texture(); +- String s_121 = s_120.getLabel(); +- String s_122 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Texture view \u0001 (\u0001) has been closed!")(s_118, s_121); +- s_117.(s_122); +- IllegalStateException s_123 = s_117; +- throw s_123; +- } +- +- L33: +- { +- GlTextureView s_124 = textureView; +- GlTexture s_125 = s_124.texture(); +- int s_126 = s_125.usage(); +- int_constant(4) s_127 = 4; +- int s_128 = s_126 & s_127; +- if (s_128 != 0) { +- goto L35; +- } +- goto L33_1; +- } +- +- L33_1: +- { +- IllegalStateException s_129 = __newobject IllegalStateException; +- String s_130 = name; +- GlTextureView s_131 = textureView; +- GlTexture s_132 = s_131.texture(); +- String s_133 = s_132.getLabel(); +- String s_134 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Texture view \u0001 (\u0001) must have USAGE_TEXTURE_BINDING!")(s_130, s_133); +- s_129.(s_134); +- IllegalStateException s_135 = s_129; +- throw s_135; +- } +- +- L35: +- { +- GlRenderPass.TextureViewAndSampler s_136 = viewAndSampler; +- GlSampler s_137 = s_136.sampler(); +- boolean s_138 = s_137.isClosed(); +- if (s_138 == 0) { +- goto L37; +- } +- goto L35_1; +- } +- +- L35_1: +- { +- IllegalStateException s_139 = __newobject IllegalStateException; +- String s_140 = name; +- GlTextureView s_141 = textureView; +- GlTexture s_142 = s_141.texture(); +- String s_143 = s_142.getLabel(); +- String s_144 = __invokedynamic StringConcatFactory.makeConcatWithConstants("makeConcatWithConstants", "Sampler for \u0001 (\u0001) has been closed!")(s_140, s_143); +- s_139.(s_144); +- IllegalStateException s_145 = s_139; +- throw s_145; +- } +- +- L37: +- { +- goto L24; +- } +- +- L38: +- { +- GlRenderPass s_146 = renderPass; +- GlRenderPipeline s_147 = s_146.pipeline; +- RenderPipeline s_148 = s_147.info(); +- boolean s_149 = s_148.wantsDepthTexture(); +- if (s_149 == 0) { +- goto L42; +- } +- goto L38_1; +- } +- +- L38_1: +- { +- GlRenderPass s_150 = renderPass; +- boolean s_151 = s_150.hasDepthTexture(); +- if (s_151 != 0) { +- goto L42; +- } +- goto L38_2; +- } +- +- L38_2: +- { +- Logger s_152 = LOGGER; +- String s_153 = "Render pipeline {} wants a depth texture but none was provided - this is probably a bug"; +- GlRenderPass s_154 = renderPass; +- GlRenderPipeline s_155 = s_154.pipeline; +- RenderPipeline s_156 = s_155.info(); +- Identifier s_157 = s_156.getLocation(); +- s_152.warn(s_153, s_157); +- goto L42; +- } +- +- L40: +- { +- GlRenderPass s_158 = renderPass; +- GlRenderPipeline s_159 = s_158.pipeline; +- if (s_159 == null) { +- goto L41; +- } +- goto L40_1; +- } +- +- L40_1: +- { +- GlRenderPass s_160 = renderPass; +- GlRenderPipeline s_161 = s_160.pipeline; +- GlProgram s_162 = s_161.program(); +- GlProgram s_163 = GlProgram.INVALID_PROGRAM; +- if (s_162 != s_163) { +- goto L42; +- } +- goto L40_2; +- } +- +- L40_2: +- { +- goto L41; +- } +- +- L41: +- { +- int_constant(0) s_164 = 0; +- return s_164; +- } +- +- L42: +- { +- GlRenderPass s_165 = renderPass; +- GlRenderPipeline s_166 = s_165.pipeline; +- RenderPipeline s_167 = s_166.info(); +- RenderPipeline pipeline = s_167; +- GlRenderPass s_168 = renderPass; +- GlRenderPipeline s_169 = s_168.pipeline; +- GlProgram s_170 = s_169.program(); +- GlProgram glProgram = s_170; +- GlCommandEncoder s_171 = this; +- RenderPipeline s_172 = pipeline; +- s_171.applyPipelineState(s_172); +- GlCommandEncoder s_173 = this; +- GlProgram s_174 = s_173.lastProgram; +- GlProgram s_175 = glProgram; +- if (s_174 == s_175) { +- goto L46; +- } +- goto L42_1; +- } +- +- L42_1: +- { +- int_constant(1) | int_constant(0) s_176 = 1; +- goto L47; +- } +- +- L46: +- { +- s_176 = 0; +- goto L47; +- } +- +- L47: +- { +- boolean differentProgram = s_176; +- boolean s_178 = differentProgram; +- if (s_178 == 0) { +- goto L51; +- } +- goto L47_1; +- } +- +- L47_1: +- { +- GlProgram s_179 = glProgram; +- int s_180 = s_179.getProgramId(); +- GlStateManager._glUseProgram(s_180); +- GlCommandEncoder s_181 = this; +- GlProgram s_182 = glProgram; +- s_181.lastProgram = s_182; +- goto L51; +- } +- +- L51: +- { +- GlProgram s_183 = glProgram; +- Map s_184 = s_183.getUniforms(); +- Set s_185 = s_184.entrySet(); +- Iterator s_186 = s_185.iterator(); +- Iterator var_11 = s_186; +- goto L52; +- } +- +- L52: +- { +- Iterator s_187 = var_11; +- boolean s_188 = s_187.hasNext(); +- if (s_188 == 0) { +- goto L116; +- } +- goto L52_1; +- } +- +- L52_1: +- { +- Iterator s_189 = var_11; +- Object s_190 = s_189.next(); +- Map.Entry s_191 = (Map.Entry) s_190; +- Map.Entry entry$1 = s_191; +- Map.Entry s_192 = entry$1; +- Object s_193 = s_192.getKey(); +- String s_194 = (String) s_193; +- String name$1 = s_194; +- GlRenderPass s_195 = renderPass; +- Set s_196 = s_195.dirtyUniforms; +- String s_197 = name$1; +- boolean s_198 = s_196.contains(s_197); +- boolean isDirty = s_198; +- Map.Entry s_199 = entry$1; +- Object s_200 = s_199.getValue(); +- Uniform s_201 = (Uniform) s_200; +- Object s_202 = Objects.requireNonNull(s_201); +- Uniform var_15 = s_201; +- int_constant(0) s_203 = 0; +- int_constant(0) | int_constant(1) | int_constant(2) | int_constant(3) var_16 = s_203; +- goto L56; +- } +- +- L56: +- { +- Uniform s_204 = var_15; +- int_constant(0) | int_constant(1) | int_constant(2) | int_constant(3) s_205 = var_16; +- int s_206 = __invokedynamic SwitchBootstraps.typeSwitch("typeSwitch", "Lcom/mojang/blaze3d/opengl/Uniform$Ubo;", "Lcom/mojang/blaze3d/opengl/Uniform$Utb;", "Lcom/mojang/blaze3d/opengl/Uniform$Sampler;")(s_204, s_205); +- default: +- goto L57; +- case 0: +- goto L58; +- case 1: +- goto L68; +- case 2: +- goto L90; +- } +- +- L57: +- { +- MatchException s_207 = __newobject MatchException; +- null s_208 = null; +- null s_209 = null; +- s_207.(s_208, s_209); +- MatchException s_210 = s_207; +- throw s_210; +- } +- +- L58: +- { +- Uniform s_211 = var_15; +- Uniform.Ubo s_212 = (Uniform.Ubo) s_211; +- Uniform.Ubo var_17 = s_212; +- Uniform.Ubo s_213 = var_17; +- goto L59; +- } +- +- L59: +- { +- try { +- int s_214 = s_213.blockBinding(); +- goto L60; +- +- L69: +- { +- int s_238 = Uniform.Utb s_237.location(); +- goto L70; +- } +- +- L72: +- { +- int s_243 = Uniform.Utb s_242.samplerIndex(); +- goto L73; +- } +- +- L75: +- { +- TextureFormat s_248 = Uniform.Utb s_247.format(); +- goto L76; +- } +- +- L78: +- { +- int s_251 = Uniform.Utb s_250.texture(); +- goto L79; +- } +- +- L91: +- { +- int s_281 = Uniform.Sampler s_280.location(); +- goto L92; +- } +- +- L94: +- { +- int s_286 = Uniform.Sampler s_285.samplerIndex(); +- goto L95; +- } +- } catch (Throwable e_0) { +- goto L122; +- } +- } +- +- L60: +- { +- int var_18 = int s_214; +- int s_215 = var_18; +- int var_19 = s_215; +- int_constant(1) s_216 = 1; +- if (s_216 == 0) { +- goto L62; +- } +- goto L60_1; +- } +- +- L60_1: +- { +- int s_217 = var_18; +- int blockBinding = s_217; +- goto L63; +- } +- +- L62: +- { +- int_constant(1) s_218 = 1; +- var_16 = s_218; +- goto L56; +- } +- +- L63: +- { +- boolean s_219 = isDirty; +- if (s_219 != 0) { +- goto L65; +- } +- goto L63_1; +- } +- +- L63_1: +- { +- goto L52; +- } +- +- L65: +- { +- GlRenderPass s_220 = renderPass; +- HashMap s_221 = s_220.uniforms; +- String s_222 = name$1; +- Object s_223 = s_221.get(s_222); +- GpuBufferSlice s_224 = (GpuBufferSlice) s_223; +- GpuBufferSlice bufferView = s_224; +- int_constant(35345) s_225 = 35345; +- int s_226 = blockBinding; +- GpuBufferSlice s_227 = bufferView; +- GpuBuffer s_228 = s_227.buffer(); +- GlBuffer s_229 = (GlBuffer) s_228; +- int s_230 = s_229.handle; +- GpuBufferSlice s_231 = bufferView; +- long s_232 = s_231.offset(); +- GpuBufferSlice s_233 = bufferView; +- long s_234 = s_233.length(); +- GL32.glBindBufferRange(s_225, s_226, s_230, s_232, s_234); +- goto L115; +- } +- +- L68: +- { +- Uniform s_235 = var_15; +- Uniform.Utb s_236 = (Uniform.Utb) s_235; +- Uniform.Utb var_23 = s_236; +- Uniform.Utb s_237 = var_23; +- goto L69; +- } +- +- L70: +- { +- int var_24 = int s_238; +- int s_239 = var_24; +- int var_25 = s_239; +- int_constant(1) s_240 = 1; +- if (s_240 == 0) { +- goto L81; +- } +- goto L70_1; +- } +- +- L70_1: +- { +- int s_241 = var_24; +- int location = s_241; +- Uniform.Utb s_242 = var_23; +- goto L72; +- } +- +- L73: +- { +- int var_27 = int s_243; +- int s_244 = var_27; +- int var_28 = s_244; +- int_constant(1) s_245 = 1; +- if (s_245 == 0) { +- goto L81; +- } +- goto L73_1; +- } +- +- L73_1: +- { +- int s_246 = var_27; +- int samplerIndex = s_246; +- Uniform.Utb s_247 = var_23; +- goto L75; +- } +- +- L76: +- { +- TextureFormat var_30 = TextureFormat s_248; +- TextureFormat s_249 = var_30; +- TextureFormat format = s_249; +- Uniform.Utb s_250 = var_23; +- goto L78; +- } +- +- L79: +- { +- int var_32 = int s_251; +- int s_252 = var_32; +- int var_33 = s_252; +- int_constant(1) s_253 = 1; +- if (s_253 == 0) { +- goto L81; +- } +- goto L79_1; +- } +- +- L79_1: +- { +- int s_254 = var_32; +- int texture = s_254; +- goto L82; +- } +- +- L81: +- { +- int_constant(2) s_255 = 2; +- var_16 = s_255; +- goto L56; +- } +- +- L82: +- { +- boolean s_256 = differentProgram; +- if (s_256 != 0) { +- goto L83; +- } +- goto L82_1; +- } +- +- L82_1: +- { +- boolean s_257 = isDirty; +- if (s_257 == 0) { +- goto L84; +- } +- goto L82_2; +- } +- +- L82_2: +- { +- goto L83; +- } +- +- L83: +- { +- int s_258 = location; +- int s_259 = samplerIndex; +- GlStateManager._glUniform1i(s_258, s_259); +- goto L84; +- } +- +- L84: +- { +- int_constant(33984) s_260 = 33984; +- int s_261 = samplerIndex; +- int s_262 = s_260 + s_261; +- GlStateManager._activeTexture(s_262); +- int_constant(35882) s_263 = 35882; +- int s_264 = texture; +- GL11C.glBindTexture(s_263, s_264); +- boolean s_265 = isDirty; +- if (s_265 == 0) { +- goto L115; +- } +- goto L84_1; +- } +- +- L84_1: +- { +- GlRenderPass s_266 = renderPass; +- HashMap s_267 = s_266.uniforms; +- String s_268 = name$1; +- Object s_269 = s_267.get(s_268); +- GpuBufferSlice s_270 = (GpuBufferSlice) s_269; +- GpuBufferSlice bufferView$1 = s_270; +- int_constant(35882) s_271 = 35882; +- TextureFormat s_272 = format; +- int s_273 = GlConst.toGlInternalId(s_272); +- GpuBufferSlice s_274 = bufferView$1; +- GpuBuffer s_275 = s_274.buffer(); +- GlBuffer s_276 = (GlBuffer) s_275; +- int s_277 = s_276.handle; +- GL31.glTexBuffer(s_271, s_273, s_277); +- goto L115; +- } +- +- L90: +- { +- Uniform s_278 = var_15; +- Uniform.Sampler s_279 = (Uniform.Sampler) s_278; +- Uniform.Sampler var_37 = s_279; +- Uniform.Sampler s_280 = var_37; +- goto L91; +- } +- +- L92: +- { +- int var_38 = int s_281; +- int s_282 = var_38; +- int var_39 = s_282; +- int_constant(1) s_283 = 1; +- if (s_283 == 0) { +- goto L97; +- } +- goto L92_1; +- } +- +- L92_1: +- { +- int s_284 = var_38; +- int location$1 = s_284; +- Uniform.Sampler s_285 = var_37; +- goto L94; +- } +- +- L95: +- { +- int var_41 = int s_286; +- int s_287 = var_41; +- int var_42 = s_287; +- int_constant(1) s_288 = 1; +- if (s_288 == 0) { +- goto L97; +- } +- goto L95_1; +- } +- +- L95_1: +- { +- int s_289 = var_41; +- int samplerIndex$1 = s_289; +- goto L98; +- } +- +- L97: +- { +- int_constant(3) s_290 = 3; +- var_16 = s_290; +- goto L56; +- } +- +- L98: +- { +- GlRenderPass s_291 = renderPass; +- HashMap s_292 = s_291.samplers; +- String s_293 = name$1; +- Object s_294 = s_292.get(s_293); +- GlRenderPass.TextureViewAndSampler s_295 = (GlRenderPass.TextureViewAndSampler) s_294; +- GlRenderPass.TextureViewAndSampler viewAndSampler$1 = s_295; +- GlRenderPass.TextureViewAndSampler s_296 = viewAndSampler$1; +- if (s_296 != null) { +- goto L101; +- } +- goto L98_1; +- } +- +- L98_1: +- { +- goto L52; +- } +- +- L101: +- { +- GlRenderPass.TextureViewAndSampler s_297 = viewAndSampler$1; +- GlTextureView s_298 = s_297.view(); +- GlTextureView textureView$1 = s_298; +- boolean s_299 = differentProgram; +- if (s_299 != 0) { +- goto L103; +- } +- goto L101_1; +- } +- +- L101_1: +- { +- boolean s_300 = isDirty; +- if (s_300 == 0) { +- goto L104; +- } +- goto L101_2; +- } +- +- L101_2: +- { +- goto L103; +- } +- +- L103: +- { +- int s_301 = location$1; +- int s_302 = samplerIndex$1; +- GlStateManager._glUniform1i(s_301, s_302); +- goto L104; +- } +- +- L104: +- { +- int_constant(33984) s_303 = 33984; +- int s_304 = samplerIndex$1; +- int s_305 = s_303 + s_304; +- GlStateManager._activeTexture(s_305); +- GlTextureView s_306 = textureView$1; +- GlTexture s_307 = s_306.texture(); +- GlTexture texture$1 = s_307; +- GlTexture s_308 = texture$1; +- int s_309 = s_308.usage(); +- int_constant(16) s_310 = 16; +- int s_311 = s_309 & s_310; +- if (s_311 == 0) { +- goto L109; +- } +- goto L104_1; +- } +- +- L104_1: +- { +- int_constant(34067) s_312 = 34067; +- int target = s_312; +- int_constant(34067) s_313 = 34067; +- GlTexture s_314 = texture$1; +- int s_315 = s_314.id; +- GL11.glBindTexture(s_313, s_315); +- goto L111; +- } +- +- L109: +- { +- int_constant(3553) s_316 = 3553; +- target = s_316; +- GlTexture s_317 = texture$1; +- int s_318 = s_317.id; +- GlStateManager._bindTexture(s_318); +- goto L111; +- } +- +- L111: +- { +- int s_319 = samplerIndex$1; +- GlRenderPass.TextureViewAndSampler s_320 = viewAndSampler$1; +- GlSampler s_321 = s_320.sampler(); +- int s_322 = s_321.getId(); +- GL33C.glBindSampler(s_319, s_322); +- int s_323 = target; +- int_constant(33084) s_324 = 33084; +- GlTextureView s_325 = textureView$1; +- int s_326 = s_325.baseMipLevel(); +- GlStateManager._texParameter(s_323, s_324, s_326); +- int s_327 = target; +- int_constant(33085) s_328 = 33085; +- GlTextureView s_329 = textureView$1; +- int s_330 = s_329.baseMipLevel(); +- GlTextureView s_331 = textureView$1; +- int s_332 = s_331.mipLevels(); +- int s_333 = s_330 + s_332; +- int_constant(1) s_334 = 1; +- int s_335 = s_333 - s_334; +- GlStateManager._texParameter(s_327, s_328, s_335); +- goto L115; +- } +- +- L115: +- { +- goto L52; +- } +- +- L116: +- { +- GlRenderPass s_336 = renderPass; +- Set s_337 = s_336.dirtyUniforms; +- s_337.clear(); +- GlRenderPass s_338 = renderPass; +- boolean s_339 = s_338.isScissorEnabled(); +- if (s_339 == 0) { +- goto L120; +- } +- goto L116_1; +- } +- +- L116_1: +- { ++ private boolean trySetup(final GlRenderPass renderPass, final Collection dynamicUniforms) { ++ // TODO: unfortunately I had to copy/paste this from the VF output ++ if (GlRenderPass.VALIDATION) { ++ if (renderPass.pipeline == null) { ++ throw new IllegalStateException("Can't draw without a render pipeline"); ++ } ++ ++ if (renderPass.pipeline.program() == GlProgram.INVALID_PROGRAM) { ++ throw new IllegalStateException("Pipeline contains invalid shader program"); ++ } ++ ++ for (RenderPipeline.UniformDescription uniform : renderPass.pipeline.info().getUniforms()) { ++ GpuBufferSlice value = renderPass.uniforms.get(uniform.name()); ++ if (!dynamicUniforms.contains(uniform.name())) { ++ if (value == null) { ++ throw new IllegalStateException("Missing uniform " + uniform.name() + " (should be " + uniform.type() + ")"); ++ } ++ ++ if (uniform.type() == UniformType.UNIFORM_BUFFER) { ++ if (value.buffer().isClosed()) { ++ throw new IllegalStateException("Uniform buffer " + uniform.name() + " is already closed"); ++ } ++ ++ if ((value.buffer().usage() & 128) == 0) { ++ throw new IllegalStateException("Uniform buffer " + uniform.name() + " must have GpuBuffer.USAGE_UNIFORM"); ++ } ++ } ++ ++ if (uniform.type() == UniformType.TEXEL_BUFFER) { ++ if (value.offset() != 0L || value.length() != value.buffer().size()) { ++ throw new IllegalStateException("Uniform texel buffers do not support a slice of a buffer, must be entire buffer"); ++ } ++ ++ if (uniform.textureFormat() == null) { ++ throw new IllegalStateException("Invalid uniform texel buffer " + uniform.name() + " (missing a texture format)"); ++ } ++ } ++ } ++ } ++ ++ for (Map.Entry entry : renderPass.pipeline.program().getUniforms().entrySet()) { ++ if (entry.getValue() instanceof Uniform.Sampler) { ++ String name = entry.getKey(); ++ GlRenderPass.TextureViewAndSampler viewAndSampler = renderPass.samplers.get(name); ++ if (viewAndSampler == null) { ++ throw new IllegalStateException("Missing sampler " + name); ++ } ++ ++ GlTextureView textureView = viewAndSampler.view(); ++ if (textureView.isClosed()) { ++ throw new IllegalStateException("Texture view " + name + " (" + textureView.texture().getLabel() + ") has been closed!"); ++ } ++ ++ if ((textureView.texture().usage() & 4) == 0) { ++ throw new IllegalStateException("Texture view " + name + " (" + textureView.texture().getLabel() + ") must have USAGE_TEXTURE_BINDING!"); ++ } ++ ++ if (viewAndSampler.sampler().isClosed()) { ++ throw new IllegalStateException("Sampler for " + name + " (" + textureView.texture().getLabel() + ") has been closed!"); ++ } ++ } ++ } ++ ++ if (renderPass.pipeline.info().wantsDepthTexture() && !renderPass.hasDepthTexture()) { ++ LOGGER.warn("Render pipeline {} wants a depth texture but none was provided - this is probably a bug", renderPass.pipeline.info().getLocation()); ++ } ++ } else if (renderPass.pipeline == null || renderPass.pipeline.program() == GlProgram.INVALID_PROGRAM) { ++ return false; ++ } ++ ++ RenderPipeline pipeline = renderPass.pipeline.info(); ++ GlProgram glProgram = renderPass.pipeline.program(); ++ this.applyPipelineState(pipeline); ++ boolean differentProgram = this.lastProgram != glProgram; ++ if (differentProgram) { ++ GlStateManager._glUseProgram(glProgram.getProgramId()); ++ this.lastProgram = glProgram; ++ } ++ ++ label200: ++ for (Map.Entry entryx : glProgram.getUniforms().entrySet()) { ++ String namex = entryx.getKey(); ++ boolean isDirty = renderPass.dirtyUniforms.contains(namex); ++ Uniform var10000 = entryx.getValue(); ++ Objects.requireNonNull(var10000); ++ Uniform var10 = var10000; ++ byte var11 = 0; ++ + { + switch (var10) { + case Uniform.Ubo var12: + int var63; - Uniform.Ubo var62 = var12; - - try { -@@ -950,86 +_,19 @@ - - var11 = 1; - break; -- case 1: -- Uniform.Utb bufferView = (Uniform.Utb)var10; -- Uniform.Utb var54 = bufferView; -- -- try { -- var55 = var54.location(); -- } catch (Throwable var31) { -- throw new MatchException(var31.toString(), var31); -- } -- -- int var43 = var55; -- if (true) { -- Uniform.Utb var56 = bufferView; -- -- try { -- var57 = var56.samplerIndex(); -- } catch (Throwable var30) { -- throw new MatchException(var30.toString(), var30); -- } -- -- var43 = var57; -- if (true) { -- Uniform.Utb var58 = bufferView; -- -- try { -- var59 = var58.format(); -- } catch (Throwable var29) { -- throw new MatchException(var29.toString(), var29); -- } -- -- TextureFormat var45 = var59; -- Uniform.Utb var60 = bufferView; -- -- try { -- var61 = var60.texture(); -- } catch (Throwable var28) { -- throw new MatchException(var28.toString(), var28); -- } -- -- var43 = var61; -- if (true) { ++ Uniform.Ubo var62 = var12; ++ ++ try { ++ var63 = var62.blockBinding(); ++ } catch (Throwable var32) { ++ throw new MatchException(var32.toString(), var32); ++ } ++ ++ int var41 = var63; ++ if (true) { ++ if (isDirty) { ++ GpuBufferSlice bufferView = renderPass.uniforms.get(namex); ++ GL32.glBindBufferRange(35345, var41, ((GlBuffer)bufferView.buffer()).handle, bufferView.offset(), bufferView.length()); ++ } ++ continue label200; ++ } ++ ++ var11 = 1; ++ break; + case Uniform.Utb(int location, int samplerIdx, TextureFormat var45, int var43): - if (differentProgram || isDirty) { -- GlStateManager._glUniform1i(var43, var43); -+ GlStateManager._glUniform1i(location, samplerIdx); - } - -- GlStateManager._activeTexture(33984 + var43); -+ GlStateManager._activeTexture(33984 + samplerIdx); - GL11C.glBindTexture(35882, var43); - if (isDirty) { - GpuBufferSlice bufferViewx = renderPass.uniforms.get(namex); - GL31.glTexBuffer(35882, GlConst.toGlInternalId(var45), ((GlBuffer)bufferViewx.buffer()).handle); - } - continue label200; -- } -- } -- } -- -- var11 = 2; -- break; -- case 2: -- Uniform.Sampler bufferView = (Uniform.Sampler)var10; -- Uniform.Sampler var50 = bufferView; -- -- try { -- var51 = var50.location(); -- } catch (Throwable var27) { -- throw new MatchException(var27.toString(), var27); -- } -- -- int viewAndSamplerx = var51; -- if (true) { -- Uniform.Sampler var52 = bufferView; -- -- try { -- var53 = var52.samplerIndex(); -- } catch (Throwable var26) { -- throw new MatchException(var26.toString(), var26); -- } -- -- viewAndSamplerx = var53; -- if (true) { ++ if (differentProgram || isDirty) { ++ GlStateManager._glUniform1i(location, samplerIdx); ++ } ++ ++ GlStateManager._activeTexture(33984 + samplerIdx); ++ GL11C.glBindTexture(35882, var43); ++ if (isDirty) { ++ GpuBufferSlice bufferViewx = renderPass.uniforms.get(namex); ++ GL31.glTexBuffer(35882, GlConst.toGlInternalId(var45), ((GlBuffer)bufferViewx.buffer()).handle); ++ } ++ continue label200; + case Uniform.Sampler(int location, int samplerIndex): - GlRenderPass.TextureViewAndSampler viewAndSamplerxx = renderPass.samplers.get(namex); - if (viewAndSamplerxx == null) { - continue label200; -@@ -1037,10 +_,10 @@ - - GlTextureView textureViewx = viewAndSamplerxx.view(); - if (differentProgram || isDirty) { -- GlStateManager._glUniform1i(viewAndSamplerx, viewAndSamplerx); -+ GlStateManager._glUniform1i(location, samplerIndex); - } - -- GlStateManager._activeTexture(33984 + viewAndSamplerx); -+ GlStateManager._activeTexture(33984 + samplerIndex); - GlTexture texture = textureViewx.texture(); - int target; - if ((texture.usage() & 16) != 0) { -@@ -1051,15 +_,10 @@ - GlStateManager._bindTexture(texture.id); - } ++ GlRenderPass.TextureViewAndSampler viewAndSamplerxx = renderPass.samplers.get(namex); ++ if (viewAndSamplerxx == null) { ++ continue label200; ++ } ++ ++ GlTextureView textureViewx = viewAndSamplerxx.view(); ++ if (differentProgram || isDirty) { ++ GlStateManager._glUniform1i(location, samplerIndex); ++ } ++ ++ GlStateManager._activeTexture(33984 + samplerIndex); ++ GlTexture texture = textureViewx.texture(); ++ int target; ++ if ((texture.usage() & 16) != 0) { ++ target = 34067; ++ GL11.glBindTexture(34067, texture.id); ++ } else { ++ target = 3553; ++ GlStateManager._bindTexture(texture.id); ++ } ++ ++ GL33C.glBindSampler(samplerIndex, viewAndSamplerxx.sampler().getId()); ++ GlStateManager._texParameter(target, 33084, textureViewx.baseMipLevel()); ++ GlStateManager._texParameter(target, 33085, textureViewx.baseMipLevel() + textureViewx.mipLevels() - 1); ++ continue label200; ++ default: ++ throw new MatchException(null, null); ++ } ++ } ++ } ++ ++ renderPass.dirtyUniforms.clear(); ++ if (renderPass.isScissorEnabled()) { + GlStateManager._enableScissorTest(); +- GlRenderPass s_340 = renderPass; +- int s_341 = s_340.getScissorX(); +- GlRenderPass s_342 = renderPass; +- int s_343 = s_342.getScissorY(); +- GlRenderPass s_344 = renderPass; +- int s_345 = s_344.getScissorWidth(); +- GlRenderPass s_346 = renderPass; +- int s_347 = s_346.getScissorHeight(); +- GlStateManager._scissorBox(s_341, s_343, s_345, s_347); +- goto L121; +- } +- +- L120: +- { ++ GlStateManager._scissorBox(renderPass.getScissorX(), renderPass.getScissorY(), renderPass.getScissorWidth(), renderPass.getScissorHeight()); ++ } else { + GlStateManager._disableScissorTest(); +- goto L121; +- } +- +- L121: +- { +- int_constant(1) s_348 = 1; +- return s_348; +- } +- +- L122: +- { +- Throwable var_50 = Throwable e_0; +- MatchException s_349 = __newobject MatchException; +- Throwable s_350 = var_50; +- String s_351 = s_350.toString(); +- Throwable s_352 = var_50; +- s_349.(s_351, s_352); +- MatchException s_353 = s_349; +- throw s_353; +- } +- }*/ ++ } ++ ++ return true; ++ } -- GL33C.glBindSampler(viewAndSamplerx, viewAndSamplerxx.sampler().getId()); -+ GL33C.glBindSampler(samplerIndex, viewAndSamplerxx.sampler().getId()); - GlStateManager._texParameter(target, 33084, textureViewx.baseMipLevel()); - GlStateManager._texParameter(target, 33085, textureViewx.baseMipLevel() + textureViewx.mipLevels() - 1); - continue label200; -- } -- } -- -- var11 = 3; -- break; - default: - throw new MatchException(null, null); - } + private void applyPipelineState(final RenderPipeline pipeline) { + if (lastPipeline == pipeline) { diff --git a/src/patches/com/mojang/blaze3d/opengl/GlProgram.java.patch b/src/patches/com/mojang/blaze3d/opengl/GlProgram.java.patch deleted file mode 100644 index ac69488b..00000000 --- a/src/patches/com/mojang/blaze3d/opengl/GlProgram.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/com/mojang/blaze3d/opengl/GlProgram.java -+++ b/com/mojang/blaze3d/opengl/GlProgram.java -@@ -77,7 +_,7 @@ - for (RenderPipeline.UniformDescription uniformDescription : uniforms) { - String uniformName = uniformDescription.name(); - -- Object var10000_1 = switch (uniformDescription.type()) { -+ Object var10000 = switch (uniformDescription.type()) { - case UNIFORM_BUFFER -> { - int index = GL31.glGetUniformBlockIndex(this.programId, uniformName); - if (index == -1) { diff --git a/src/patches/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java.patch b/src/patches/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java.patch deleted file mode 100644 index b1919d30..00000000 --- a/src/patches/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java -+++ b/com/mojang/realmsclient/gui/screens/configuration/RealmsPreferredRegionSelectionScreen.java -@@ -122,7 +_,7 @@ - private final RealmsSettingsTab.RegionSelection regionSelection; - private final Component name; - -- public Entry(@Nullable RegionSelectionPreference preference, RealmsRegion region) { -+ public Entry(RegionSelectionPreference preference, @Nullable RealmsRegion region) { - this(new RealmsSettingsTab.RegionSelection(preference, region)); - } - diff --git a/src/patches/net/minecraft/ChatFormatting.java.patch b/src/patches/net/minecraft/ChatFormatting.java.patch deleted file mode 100644 index 61607f10..00000000 --- a/src/patches/net/minecraft/ChatFormatting.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/ChatFormatting.java -+++ b/net/minecraft/ChatFormatting.java -@@ -57,7 +_,7 @@ - return name.toLowerCase(Locale.ROOT).replaceAll("[^a-z]", ""); - } - -- private ChatFormatting(String name, @Nullable char code, int id, Integer color) { -+ private ChatFormatting(String name, char code, int id, @Nullable Integer color) { - this(name, code, false, id, color); - } - -@@ -65,7 +_,7 @@ - this(name, code, isFormat, -1, null); - } - -- private ChatFormatting(String name, char code, @Nullable boolean isFormat, int id, Integer color) { -+ private ChatFormatting(String name, char code, boolean isFormat, int id, @Nullable Integer color) { - this.name = name; - this.code = code; - this.isFormat = isFormat; diff --git a/src/patches/net/minecraft/TracingExecutor.java.patch b/src/patches/net/minecraft/TracingExecutor.java.patch deleted file mode 100644 index a7288998..00000000 --- a/src/patches/net/minecraft/TracingExecutor.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/TracingExecutor.java -+++ b/net/minecraft/TracingExecutor.java -@@ -21,7 +_,7 @@ - } - }); - } else { -- return (Executor)(TracyClient.isAvailable() ? command -> this.service.execute(() -> { -+ return (Executor)(TracyClient.isAvailable() ? (Executor)command -> this.service.execute(() -> { - try (Zone ignored = TracyClient.beginZone(name, SharedConstants.IS_RUNNING_IN_IDE)) { - command.run(); - } diff --git a/src/patches/net/minecraft/advancements/Advancement.java.patch b/src/patches/net/minecraft/advancements/Advancement.java.patch new file mode 100644 index 00000000..fab55ab0 --- /dev/null +++ b/src/patches/net/minecraft/advancements/Advancement.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/advancements/Advancement.java ++++ b/net/minecraft/advancements/Advancement.java +@@ -28,7 +_,7 @@ + public record Advancement(Optional parent, Optional display, AdvancementRewards rewards, Map> criteria, AdvancementRequirements requirements, boolean sendsTelemetryEvent, Optional name) { + + private static final Codec>> CRITERIA_CODEC = Codec.unboundedMap(Codec.STRING, Criterion.CODEC).validate(criteria -> criteria.isEmpty() ? DataResult.error(() -> "Advancement criteria cannot be empty") : DataResult.success(criteria)); +- public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(Identifier.CODEC.optionalFieldOf("parent").forGetter(Advancement::parent), DisplayInfo.CODEC.optionalFieldOf("display").forGetter(Advancement::display), AdvancementRewards.CODEC.optionalFieldOf("rewards", AdvancementRewards.EMPTY).forGetter(Advancement::rewards), CRITERIA_CODEC.fieldOf("criteria").forGetter(Advancement::criteria), AdvancementRequirements.CODEC.optionalFieldOf("requirements").forGetter(a -> Optional.of(a.requirements())), Codec.BOOL.optionalFieldOf("sends_telemetry_event", Boolean.valueOf(false)).forGetter(Advancement::sendsTelemetryEvent)).apply(i, (parent, display, rewards, criteria, requirementsOpt, sendsTelemetryEvent) -> { ++ public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(Identifier.CODEC.optionalFieldOf("parent").forGetter(Advancement::parent), DisplayInfo.CODEC.optionalFieldOf("display").forGetter(Advancement::display), AdvancementRewards.CODEC.optionalFieldOf("rewards", AdvancementRewards.EMPTY).forGetter(Advancement::rewards), CRITERIA_CODEC.fieldOf("criteria").forGetter(Advancement::criteria), AdvancementRequirements.CODEC.optionalFieldOf("requirements").forGetter(a -> Optional.of(a.requirements())), Codec.BOOL.optionalFieldOf("sends_telemetry_event", Boolean.valueOf(false)).forGetter(Advancement::sendsTelemetryEvent)).apply(i, (parent, display, rewards, criteria, requirementsOpt, sendsTelemetryEvent) -> { + AdvancementRequirements requirements = requirementsOpt.orElseGet(() -> AdvancementRequirements.allOf(criteria.keySet())); + return new Advancement(parent, display, rewards, criteria, requirements, sendsTelemetryEvent.booleanValue()); + })).validate(Advancement::validate); diff --git a/src/patches/net/minecraft/advancements/criterion/EnterBlockTrigger.java.patch b/src/patches/net/minecraft/advancements/criterion/EnterBlockTrigger.java.patch new file mode 100644 index 00000000..58975ea5 --- /dev/null +++ b/src/patches/net/minecraft/advancements/criterion/EnterBlockTrigger.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/advancements/criterion/EnterBlockTrigger.java ++++ b/net/minecraft/advancements/criterion/EnterBlockTrigger.java +@@ -24,10 +_,10 @@ + + public record TriggerInstance(Optional player, Optional> block, Optional state) implements SimpleCriterionTrigger.SimpleInstance { + +- public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BuiltInRegistries.BLOCK.holderByNameCodec().optionalFieldOf("block").forGetter(TriggerInstance::block), StatePropertiesPredicate.CODEC.optionalFieldOf("state").forGetter(TriggerInstance::state)).apply(i, TriggerInstance::new)).validate(TriggerInstance::validate); ++ public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BuiltInRegistries.BLOCK.holderByNameCodec().optionalFieldOf("block").forGetter(TriggerInstance::block), StatePropertiesPredicate.CODEC.optionalFieldOf("state").forGetter(TriggerInstance::state)).apply(i, TriggerInstance::new)).validate(TriggerInstance::validate); + + private static DataResult validate(final TriggerInstance trigger) { +- return trigger.block.flatMap(block -> trigger.state.flatMap(state -> state.checkState(block.value().getStateDefinition())).map(property -> DataResult.error(() -> "Block" + block + " has no property " + property))).orElseGet(() -> DataResult.success(trigger)); ++ return trigger.block.flatMap(block -> trigger.state.flatMap(state -> state.checkState(block.value().getStateDefinition())).map(property -> DataResult.error(() -> "Block" + block + " has no property " + property))).orElseGet(() -> DataResult.success(trigger)); + } + + public static Criterion entersBlock(final Block block) { diff --git a/src/patches/net/minecraft/advancements/criterion/InventoryChangeTrigger.java.patch b/src/patches/net/minecraft/advancements/criterion/InventoryChangeTrigger.java.patch new file mode 100644 index 00000000..b6dd8831 --- /dev/null +++ b/src/patches/net/minecraft/advancements/criterion/InventoryChangeTrigger.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/advancements/criterion/InventoryChangeTrigger.java ++++ b/net/minecraft/advancements/criterion/InventoryChangeTrigger.java +@@ -48,7 +_,7 @@ + public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), Slots.CODEC.optionalFieldOf("slots", Slots.ANY).forGetter(TriggerInstance::slots), ItemPredicate.CODEC.listOf().optionalFieldOf("items", List.of()).forGetter(TriggerInstance::items)).apply(i, TriggerInstance::new)); + + public static Criterion hasItems(final ItemPredicate.Builder... items) { +- return hasItems(Stream.of(items).map(ItemPredicate.Builder::build).toArray(x$0 -> new ItemPredicate[x$0])); ++ return hasItems(Stream.of(items).map(ItemPredicate.Builder::build).toArray(ItemPredicate[]::new)); + } + + public static Criterion hasItems(final ItemPredicate... items) { diff --git a/src/patches/net/minecraft/advancements/criterion/MinMaxBounds.java.patch b/src/patches/net/minecraft/advancements/criterion/MinMaxBounds.java.patch index 3ade7acc..3c0305a7 100644 --- a/src/patches/net/minecraft/advancements/criterion/MinMaxBounds.java.patch +++ b/src/patches/net/minecraft/advancements/criterion/MinMaxBounds.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/advancements/criterion/MinMaxBounds.java +++ b/net/minecraft/advancements/criterion/MinMaxBounds.java -@@ -57,7 +_,7 @@ +@@ -174,7 +_,7 @@ } - public static > MinMaxBounds.Bounds any() { -- return new MinMaxBounds.Bounds<>(Optional.empty(), Optional.empty()); -+ return new MinMaxBounds.Bounds(Optional.empty(), Optional.empty()); + public static > Bounds any() { +- return new Bounds<>(Optional.empty(), Optional.empty()); ++ return new Bounds<>(Optional.empty(), Optional.empty()); } - public static > MinMaxBounds.Bounds exactly(T value) { + public static > Bounds exactly(final T value) { diff --git a/src/patches/net/minecraft/advancements/criterion/PlayerPredicate.java.patch b/src/patches/net/minecraft/advancements/criterion/PlayerPredicate.java.patch deleted file mode 100644 index 5f60a85a..00000000 --- a/src/patches/net/minecraft/advancements/criterion/PlayerPredicate.java.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/net/minecraft/advancements/criterion/PlayerPredicate.java -+++ b/net/minecraft/advancements/criterion/PlayerPredicate.java -@@ -251,11 +_,11 @@ - private static MapCodec> createTypedCodec(StatType type) { - return RecordCodecBuilder.mapCodec( - i -> i.group( -- (App>, Holder>)type.getRegistry() -+ type.getRegistry() - .holderByNameCodec() - .fieldOf("stat") - .forGetter(PlayerPredicate.StatMatcher::value), -- (App>, MinMaxBounds.Ints>)MinMaxBounds.Ints.CODEC -+ MinMaxBounds.Ints.CODEC - .optionalFieldOf("value", MinMaxBounds.Ints.ANY) - .forGetter(PlayerPredicate.StatMatcher::range) - ) diff --git a/src/patches/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java.patch b/src/patches/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java.patch new file mode 100644 index 00000000..8bbd696b --- /dev/null +++ b/src/patches/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java ++++ b/net/minecraft/advancements/criterion/SlideDownBlockTrigger.java +@@ -24,10 +_,10 @@ + + public record TriggerInstance(Optional player, Optional> block, Optional state) implements SimpleCriterionTrigger.SimpleInstance { + +- public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BuiltInRegistries.BLOCK.holderByNameCodec().optionalFieldOf("block").forGetter(TriggerInstance::block), StatePropertiesPredicate.CODEC.optionalFieldOf("state").forGetter(TriggerInstance::state)).apply(i, TriggerInstance::new)).validate(TriggerInstance::validate); ++ public static final Codec CODEC = RecordCodecBuilder.create(i -> i.group(EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(TriggerInstance::player), BuiltInRegistries.BLOCK.holderByNameCodec().optionalFieldOf("block").forGetter(TriggerInstance::block), StatePropertiesPredicate.CODEC.optionalFieldOf("state").forGetter(TriggerInstance::state)).apply(i, TriggerInstance::new)).validate(TriggerInstance::validate); + + private static DataResult validate(final TriggerInstance trigger) { +- return trigger.block.flatMap(block -> trigger.state.flatMap(state -> state.checkState(block.value().getStateDefinition())).map(property -> DataResult.error(() -> "Block" + block + " has no property " + property))).orElseGet(() -> DataResult.success(trigger)); ++ return trigger.block.flatMap(block -> trigger.state.flatMap(state -> state.checkState(block.value().getStateDefinition())).map(property -> DataResult.error(() -> "Block" + block + " has no property " + property))).orElseGet(() -> DataResult.success(trigger)); + } + + public static Criterion slidesDownBlock(final Block block) { diff --git a/src/patches/net/minecraft/client/Minecraft.java.patch b/src/patches/net/minecraft/client/Minecraft.java.patch index d13d43a2..1772c8c7 100644 --- a/src/patches/net/minecraft/client/Minecraft.java.patch +++ b/src/patches/net/minecraft/client/Minecraft.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/Minecraft.java +++ b/net/minecraft/client/Minecraft.java -@@ -2434,7 +_,7 @@ +@@ -2219,7 +_,7 @@ } public CompletableFuture delayTextureReload() { -- return this.>submit(this::reloadResourcePacks).thenCompose(result -> (CompletionStage)result); -+ return this.>submit((Supplier>)this::reloadResourcePacks).thenCompose(result -> (CompletionStage)result); +- return submit(this::reloadResourcePacks).thenCompose(result -> result); ++ return submit((Supplier>) this::reloadResourcePacks).thenCompose(result -> result); } - public void updateReportEnvironment(ReportEnvironment environment) { + public void updateReportEnvironment(final ReportEnvironment environment) { diff --git a/src/patches/net/minecraft/client/OptionInstance.java.patch b/src/patches/net/minecraft/client/OptionInstance.java.patch index a01570b2..b6faa1d9 100644 --- a/src/patches/net/minecraft/client/OptionInstance.java.patch +++ b/src/patches/net/minecraft/client/OptionInstance.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/client/OptionInstance.java +++ b/net/minecraft/client/OptionInstance.java -@@ -229,7 +_,7 @@ - default Function, AbstractWidget> createButton( - OptionInstance.TooltipSupplier tooltip, Options options, int x, int y, int width, Consumer onValueChanged - ) { -- return instance -> CycleButton.builder(instance.toString, instance::get) -+ return instance -> CycleButton.builder(instance.toString, instance::get) - .withValues(this.valueListSupplier()) - .withTooltip(tooltip) - .create(x, y, width, 20, instance.caption, (button, value) -> { +@@ -185,7 +_,7 @@ + } + + default Function, AbstractWidget> createButton(final TooltipSupplier tooltip, final Options options, final int x, final int y, final int width, final Consumer onValueChanged) { +- return instance -> CycleButton.builder(instance.toString, instance::get).withValues(valueListSupplier()).withTooltip(tooltip).create(x, y, width, 20, instance.caption, (button, value) -> { ++ return instance -> CycleButton.builder(instance.toString, (Supplier) instance::get).withValues(valueListSupplier()).withTooltip(tooltip).create(x, y, width, 20, instance.caption, (button, value) -> { + valueSetter().set(instance, value); + options.save(); + onValueChanged.accept(value); diff --git a/src/patches/net/minecraft/client/PeriodicNotificationManager.java.patch b/src/patches/net/minecraft/client/PeriodicNotificationManager.java.patch new file mode 100644 index 00000000..c009550a --- /dev/null +++ b/src/patches/net/minecraft/client/PeriodicNotificationManager.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/client/PeriodicNotificationManager.java ++++ b/net/minecraft/client/PeriodicNotificationManager.java +@@ -32,7 +_,7 @@ + @OnlyIn (Dist.CLIENT) + public class PeriodicNotificationManager extends SimplePreparableReloadListener>> implements AutoCloseable { + +- private static final Codec>> CODEC = Codec.unboundedMap(Codec.STRING, RecordCodecBuilder.create(i -> i.group(Codec.LONG.optionalFieldOf("delay", Long.valueOf(0L)).forGetter(Notification::delay), Codec.LONG.fieldOf("period").forGetter(Notification::period), Codec.STRING.fieldOf("title").forGetter(Notification::title), Codec.STRING.fieldOf("message").forGetter(Notification::message)).apply(i, Notification::new)).listOf()); ++ private static final Codec>> CODEC = Codec.unboundedMap(Codec.STRING, RecordCodecBuilder.create(i -> i.group(Codec.LONG.optionalFieldOf("delay", Long.valueOf(0L)).forGetter(Notification::delay), Codec.LONG.fieldOf("period").forGetter(Notification::period), Codec.STRING.fieldOf("title").forGetter(Notification::title), Codec.STRING.fieldOf("message").forGetter(Notification::message)).apply(i, Notification::new)).listOf()); + private static final Logger LOGGER = LogUtils.getLogger(); + private final Identifier notifications; + private final Object2BooleanFunction selector; diff --git a/src/patches/net/minecraft/client/data/models/model/ModelTemplate.java.patch b/src/patches/net/minecraft/client/data/models/model/ModelTemplate.java.patch new file mode 100644 index 00000000..65745070 --- /dev/null +++ b/src/patches/net/minecraft/client/data/models/model/ModelTemplate.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/client/data/models/model/ModelTemplate.java ++++ b/net/minecraft/client/data/models/model/ModelTemplate.java +@@ -69,6 +_,6 @@ + } + + private Map createMap(final TextureMapping mapping) { +- return Streams.concat(new Stream[] { requiredSlots.stream(), mapping.getForced() }).collect(ImmutableMap.toImmutableMap(Function.identity(), mapping::get)); ++ return Streams.concat(requiredSlots.stream(), mapping.getForced()).collect(ImmutableMap.toImmutableMap(Function.identity(), mapping::get)); + } + } diff --git a/src/patches/net/minecraft/client/gui/GuiGraphics.java.patch b/src/patches/net/minecraft/client/gui/GuiGraphics.java.patch index 05c5ef95..bd703ae8 100644 --- a/src/patches/net/minecraft/client/gui/GuiGraphics.java.patch +++ b/src/patches/net/minecraft/client/gui/GuiGraphics.java.patch @@ -1,11 +1,75 @@ --- a/net/minecraft/client/gui/GuiGraphics.java +++ b/net/minecraft/client/gui/GuiGraphics.java -@@ -1237,7 +_,7 @@ - private final @Nullable Consumer