From 4a2db246e0aa8c4fb99cbae77612de528c19b0c9 Mon Sep 17 00:00:00 2001 From: LexManos Date: Thu, 13 Jun 2024 10:42:32 -0700 Subject: [PATCH] 1.21 Update Co-authored-by: RealMangoRage <64402114+RealMangorage@users.noreply.github.com> Co-authored-by: Daniel Norris Co-authored-by: Ven --- gradle.properties | 6 +- .../blaze3d/pipeline/RenderTarget.java.patch | 6 +- .../mojang/blaze3d/platform/Window.java.patch | 6 +- .../blaze3d/vertex/BufferBuilder.java.patch | 18 -- .../SheetedDecalTextureGenerator.java.patch | 14 +- .../blaze3d/vertex/VertexConsumer.java.patch | 22 +- .../blaze3d/vertex/VertexFormat.java.patch | 34 ++- .../net/minecraft/CrashReport.java.patch | 8 +- .../net/minecraft/SharedConstants.java.patch | 2 +- .../advancements/Advancement.java.patch | 4 +- .../net/minecraft/client/Camera.java.patch | 28 +- .../minecraft/client/DeltaTracker.java.patch | 25 ++ .../client/KeyboardHandler.java.patch | 4 +- .../net/minecraft/client/Minecraft.java.patch | 152 +++------- .../minecraft/client/MouseHandler.java.patch | 14 +- .../net/minecraft/client/Options.java.patch | 16 +- .../net/minecraft/client/gui/Gui.java.patch | 18 +- .../client/gui/GuiGraphics.java.patch | 16 +- .../gui/components/AbstractButton.java.patch | 2 +- .../components/DebugScreenOverlay.java.patch | 4 +- .../client/gui/screens/PauseScreen.java.patch | 2 +- .../client/gui/screens/Screen.java.patch | 10 +- .../client/gui/screens/TitleScreen.java.patch | 20 +- .../controls/KeyBindsScreen.java.patch | 46 ---- .../CreativeModeInventoryScreen.java.patch | 80 +++--- .../inventory/EnchantmentScreen.java.patch | 40 +-- .../HangingSignEditScreen.java.patch | 4 +- .../tooltip/ClientTooltipComponent.java.patch | 6 +- .../controls/KeyBindsList.java.patch | 22 +- .../controls/KeyBindsScreen.java.patch | 45 +++ .../packs/PackSelectionScreen.java.patch | 4 +- .../recipebook/RecipeBookComponent.java.patch | 4 +- .../CreateWorldScreen.java.patch | 6 +- .../WorldSelectionList.java.patch | 6 +- .../net/minecraft/client/main/Main.java.patch | 12 +- .../model/geom/LayerDefinitions.java.patch | 2 +- .../client/model/geom/ModelLayers.java.patch | 10 +- .../ClientCommonPacketListenerImpl.java.patch | 2 +- ...ConfigurationPacketListenerImpl.java.patch | 4 +- ...ientHandshakePacketListenerImpl.java.patch | 10 +- .../ClientPacketListener.java.patch | 24 +- .../MultiPlayerGameMode.java.patch | 60 ++-- .../multiplayer/ServerStatusPinger.java.patch | 2 +- .../multiplayer/SessionSearchTrees.java.patch | 74 +++++ .../multiplayer/TagCollector.java.patch | 11 - .../client/particle/ParticleEngine.java.patch | 38 +-- .../VibrationSignalParticle.java.patch | 2 +- .../client/player/LocalPlayer.java.patch | 20 +- .../client/renderer/EffectInstance.java.patch | 14 +- .../client/renderer/GameRenderer.java.patch | 31 +-- .../renderer/ItemBlockRenderTypes.java.patch | 20 +- .../renderer/ItemInHandRenderer.java.patch | 8 +- .../client/renderer/LevelRenderer.java.patch | 87 ++---- .../client/renderer/PostChain.java.patch | 7 +- .../client/renderer/RenderType.java.patch | 47 ++-- .../renderer/ScreenEffectRenderer.java.patch | 4 +- .../client/renderer/ShaderInstance.java.patch | 21 +- .../client/renderer/Sheets.java.patch | 14 +- .../SpriteCoordinateExpander.java.patch | 36 +-- .../block/BlockRenderDispatcher.java.patch | 26 +- .../block/LiquidBlockRenderer.java.patch | 114 ++++---- .../block/model/BlockElement.java.patch | 50 ---- .../block/model/BlockElementFace.java.patch | 42 +-- .../block/model/BlockModel.java.patch | 24 +- .../block/model/FaceBakery.java.patch | 12 +- .../chunk/RenderChunkRegion.java.patch | 6 +- .../renderer/chunk/SectionCompiler.java.patch | 46 ++++ .../chunk/SectionRenderDispatcher.java.patch | 118 -------- .../renderer/entity/BoatRenderer.java.patch | 4 +- .../entity/EntityRenderDispatcher.java.patch | 10 +- .../renderer/entity/EntityRenderer.java.patch | 8 +- .../entity/FishingHookRenderer.java.patch | 2 +- .../renderer/entity/ItemRenderer.java.patch | 6 +- .../entity/layers/ElytraLayer.java.patch | 2 +- .../layers/HumanoidArmorLayer.java.patch | 43 ++- .../language/LanguageManager.java.patch | 13 +- .../resources/model/ModelBakery.java.patch | 47 ++-- .../resources/model/ModelManager.java.patch | 31 +-- .../client/server/IntegratedServer.java.patch | 4 +- .../minecraft/commands/Commands.java.patch | 10 +- .../selector/EntitySelector.java.patch | 2 +- .../selector/EntitySelectorParser.java.patch | 6 +- .../minecraft/core/MappedRegistry.java.patch | 6 +- .../dispenser/DispenseItemBehavior.java.patch | 18 +- .../registries/BuiltInRegistries.java.patch | 4 +- .../core/registries/Registries.java.patch | 17 ++ .../net/minecraft/data/Main.java.patch | 6 +- .../AdvancementProvider.java.patch | 2 +- .../data/loot/BlockLootSubProvider.java.patch | 4 +- .../loot/EntityLootSubProvider.java.patch | 6 +- .../data/loot/LootTableProvider.java.patch | 6 +- .../data/recipes/RecipeProvider.java.patch | 4 +- .../RegistriesDatapackGenerator.java.patch | 16 +- .../registries/VanillaRegistries.java.patch | 8 +- .../data/tags/BiomeTagsProvider.java.patch | 2 +- .../tags/EnchantmentTagsProvider.java.patch | 15 - .../tags/EntityTypeTagsProvider.java.patch | 2 +- .../data/tags/TagsProvider.java.patch | 20 +- .../minecraft/network/Connection.java.patch | 20 +- .../custom/CustomPacketPayload.java.patch | 19 ++ .../syncher/EntityDataSerializers.java.patch | 2 +- .../resources/RegistryDataLoader.java.patch | 30 +- .../resources/ResourceKey.java.patch | 3 +- .../resources/ResourceLocation.java.patch | 2 +- .../net/minecraft/server/Bootstrap.java.patch | 4 +- .../net/minecraft/server/Eula.java.patch | 2 +- .../server/MinecraftServer.java.patch | 44 +-- .../server/PlayerAdvancements.java.patch | 4 +- .../ServerAdvancementManager.java.patch | 6 +- .../dedicated/DedicatedServer.java.patch | 14 +- .../dedicated/ServerWatchdog.java.patch | 2 +- .../server/level/ChunkHolder.java.patch | 10 - .../server/level/ChunkMap.java.patch | 37 +-- .../server/level/DistanceManager.java.patch | 8 +- .../level/GenerationChunkHolder.java.patch | 12 + .../server/level/ServerChunkCache.java.patch | 12 +- .../server/level/ServerLevel.java.patch | 40 +-- .../server/level/ServerPlayer.java.patch | 127 +++------ .../level/ServerPlayerGameMode.java.patch | 26 +- .../server/level/WorldGenRegion.java.patch | 2 +- .../ServerCommonPacketListenerImpl.java.patch | 4 +- ...ConfigurationPacketListenerImpl.java.patch | 13 +- .../ServerGamePacketListenerImpl.java.patch | 8 +- ...rverHandshakePacketListenerImpl.java.patch | 4 +- .../ServerLoginPacketListenerImpl.java.patch | 6 +- .../ServerStatusPacketListenerImpl.java.patch | 4 +- .../server/players/PlayerList.java.patch | 26 +- .../tags/BannerPatternTags.java.patch | 15 + .../net/minecraft/tags/BiomeTags.java.patch | 15 + .../net/minecraft/tags/BlockTags.java.patch | 8 +- .../minecraft/tags/CatVariantTags.java.patch | 15 + .../minecraft/tags/DamageTypeTags.java.patch | 15 + .../minecraft/tags/EnchantmentTags.java.patch | 15 + .../minecraft/tags/EntityTypeTags.java.patch | 15 + .../FlatLevelGeneratorPresetTags.java.patch | 15 + .../net/minecraft/tags/FluidTags.java.patch | 8 +- .../minecraft/tags/GameEventTags.java.patch | 15 + .../minecraft/tags/InstrumentTags.java.patch | 15 + .../net/minecraft/tags/ItemTags.java.patch | 10 +- .../tags/PaintingVariantTags.java.patch | 15 + .../net/minecraft/tags/PoiTypeTags.java.patch | 15 + .../minecraft/tags/StructureTags.java.patch | 15 + .../net/minecraft/tags/TagBuilder.java.patch | 3 +- .../net/minecraft/tags/TagKey.java.patch | 13 + .../net/minecraft/tags/TagManager.java.patch | 11 - .../minecraft/tags/WorldPresetTags.java.patch | 15 + .../world/effect/MobEffect.java.patch | 13 +- .../minecraft/world/entity/Entity.java.patch | 128 +++------ .../world/entity/EntityType.java.patch | 18 +- .../world/entity/ExperienceOrb.java.patch | 19 +- .../world/entity/LivingEntity.java.patch | 187 ++++++------- .../net/minecraft/world/entity/Mob.java.patch | 28 +- .../world/entity/TamableAnimal.java.patch | 2 +- .../world/entity/animal/Bee.java.patch | 4 +- .../world/entity/animal/Cat.java.patch | 4 +- .../world/entity/animal/Fox.java.patch | 20 -- .../world/entity/animal/Ocelot.java.patch | 2 +- .../world/entity/animal/Parrot.java.patch | 2 +- .../world/entity/animal/Rabbit.java.patch | 2 +- .../world/entity/animal/Sheep.java.patch | 14 +- .../world/entity/animal/Wolf.java.patch | 2 +- .../entity/animal/allay/Allay.java.patch | 2 +- .../entity/animal/frog/Tadpole.java.patch | 4 +- .../animal/horse/AbstractHorse.java.patch | 13 +- .../entity/animal/horse/Llama.java.patch | 2 +- .../entity/boss/EnderDragonPart.java.patch | 2 +- .../boss/enderdragon/EnderDragon.java.patch | 14 +- .../entity/boss/wither/WitherBoss.java.patch | 6 +- .../entity/decoration/ArmorStand.java.patch | 2 +- .../decoration/HangingEntity.java.patch | 18 +- .../entity/item/FallingBlockEntity.java.patch | 6 +- .../world/entity/item/ItemEntity.java.patch | 35 +-- .../monster/AbstractSkeleton.java.patch | 11 +- .../world/entity/monster/EnderMan.java.patch | 16 +- .../entity/monster/Illusioner.java.patch | 9 +- .../world/entity/monster/Pillager.java.patch | 2 +- .../world/entity/monster/Ravager.java.patch | 2 +- .../world/entity/monster/Skeleton.java.patch | 2 +- .../world/entity/monster/Slime.java.patch | 4 +- .../world/entity/monster/Zombie.java.patch | 12 +- .../entity/monster/ZombieVillager.java.patch | 12 +- ...opHoldingItemIfNoLongerAdmiring.java.patch | 8 +- .../entity/npc/AbstractVillager.java.patch | 14 +- .../world/entity/npc/Villager.java.patch | 6 +- .../world/entity/player/Player.java.patch | 180 +++++------- .../projectile/AbstractArrow.java.patch | 14 +- .../AbstractHurtingProjectile.java.patch | 2 +- .../FireworkRocketEntity.java.patch | 14 +- .../entity/projectile/FishingHook.java.patch | 13 +- .../projectile/LargeFireball.java.patch | 2 +- .../entity/projectile/LlamaSpit.java.patch | 2 +- .../entity/projectile/Projectile.java.patch | 2 +- .../projectile/ProjectileUtil.java.patch | 2 +- .../projectile/ShulkerBullet.java.patch | 2 +- .../projectile/SmallFireball.java.patch | 2 +- .../projectile/ThrowableProjectile.java.patch | 12 +- .../projectile/ThrownEnderpearl.java.patch | 63 ++--- .../entity/projectile/WitherSkull.java.patch | 2 +- .../world/entity/raid/Raid.java.patch | 4 +- .../world/entity/vehicle/Boat.java.patch | 20 +- .../world/entity/vehicle/ChestBoat.java.patch | 2 +- .../entity/vehicle/ContainerEntity.java.patch | 2 +- .../world/inventory/ArmorSlot.java.patch | 11 + .../inventory/EnchantmentMenu.java.patch | 16 +- .../world/inventory/GrindstoneMenu.java.patch | 10 +- .../world/inventory/InventoryMenu.java.patch | 11 - .../world/inventory/RecipeBookMenu.java.patch | 2 +- .../world/inventory/ResultSlot.java.patch | 16 +- .../minecraft/world/item/ArrowItem.java.patch | 2 +- .../minecraft/world/item/AxeItem.java.patch | 18 +- .../minecraft/world/item/BowItem.java.patch | 6 +- .../world/item/BucketItem.java.patch | 14 +- .../world/item/CreativeModeTab.java.patch | 99 +++---- .../world/item/CrossbowItem.java.patch | 4 +- .../minecraft/world/item/DyeColor.java.patch | 14 +- .../world/item/FishingRodItem.java.patch | 4 +- .../net/minecraft/world/item/Item.java.patch | 16 +- .../minecraft/world/item/ItemStack.java.patch | 30 +- .../net/minecraft/world/item/Items.java.patch | 4 +- .../item/ProjectileWeaponItem.java.patch | 26 +- .../world/item/RecordItem.java.patch | 53 ---- .../world/item/ShearsItem.java.patch | 5 +- .../world/item/ShieldItem.java.patch | 2 +- .../minecraft/world/item/SwordItem.java.patch | 6 +- .../crafting/BannerDuplicateRecipe.java.patch | 4 +- .../crafting/BookCloningRecipe.java.patch | 4 +- .../world/item/crafting/Recipe.java.patch | 10 +- .../item/crafting/RecipeManager.java.patch | 2 +- .../item/crafting/ShapedRecipe.java.patch | 6 +- .../crafting/ShapedRecipePattern.java.patch | 10 +- .../item/crafting/ShapelessRecipe.java.patch | 36 +-- .../crafting/ShulkerBoxColoring.java.patch | 12 +- .../SmithingTransformRecipe.java.patch | 2 +- .../crafting/SmithingTrimRecipe.java.patch | 2 +- .../item/enchantment/Enchantment.java.patch | 19 -- .../enchantment/EnchantmentHelper.java.patch | 49 +--- .../FrostWalkerEnchantment.java.patch | 14 - .../effects/ReplaceDisk.java.patch | 10 + .../world/level/Explosion.java.patch | 2 +- .../minecraft/world/level/Level.java.patch | 42 +-- .../world/level/block/Block.java.patch | 20 +- .../world/level/block/Blocks.java.patch | 4 +- .../level/block/CampfireBlock.java.patch | 2 +- .../level/block/RedStoneOreBlock.java.patch | 12 +- .../world/level/block/TntBlock.java.patch | 6 +- .../level/block/TrapDoorBlock.java.patch | 2 +- .../AbstractFurnaceBlockEntity.java.patch | 20 +- .../block/entity/BeaconBlockEntity.java.patch | 14 +- .../entity/BrewingStandBlockEntity.java.patch | 4 +- .../block/state/BlockBehaviour.java.patch | 22 +- .../world/level/chunk/ChunkAccess.java.patch | 4 +- .../level/chunk/ChunkGenerator.java.patch | 4 +- .../world/level/chunk/LevelChunk.java.patch | 18 +- .../chunk/status/ChunkStatusTasks.java.patch | 17 ++ .../chunk/storage/ChunkSerializer.java.patch | 8 +- .../chunk/storage/EntityStorage.java.patch | 2 +- .../levelgen/DebugLevelSource.java.patch | 2 +- .../level/levelgen/feature/Feature.java.patch | 2 +- .../structure/StructurePiece.java.patch | 2 +- .../StructureTemplate.java.patch | 2 +- .../level/portal/PortalForcer.java.patch | 11 - .../world/level/portal/PortalShape.java.patch | 2 +- .../level/storage/loot/LootContext.java.patch | 6 +- .../storage/loot/LootDataType.java.patch | 6 +- .../level/storage/loot/LootPool.java.patch | 14 +- .../level/storage/loot/LootTable.java.patch | 6 +- .../EnchantedCountIncreaseFunction.java.patch | 25 ++ .../LootingEnchantFunction.java.patch | 11 - .../LootContextParamSets.java.patch | 4 +- ...anceWithEnchantedBonusCondition.java.patch | 15 + ...andomChanceWithLootingCondition.java.patch | 16 -- .../forge/tags/{blocks => block}/barrels.json | 0 .../{blocks => block}/barrels/wooden.json | 0 .../tags/{blocks => block}/bookshelves.json | 0 .../forge/tags/{blocks => block}/chests.json | 0 .../tags/{blocks => block}/chests/ender.json | 0 .../{blocks => block}/chests/trapped.json | 0 .../tags/{blocks => block}/chests/wooden.json | 0 .../tags/{blocks => block}/cobblestone.json | 0 .../cobblestone/deepslate.json | 0 .../cobblestone/infested.json | 0 .../{blocks => block}/cobblestone/mossy.json | 0 .../{blocks => block}/cobblestone/normal.json | 0 .../tags/{blocks => block}/end_stones.json | 0 .../enderman_place_on_blacklist.json | 0 .../tags/{blocks => block}/fence_gates.json | 0 .../{blocks => block}/fence_gates/wooden.json | 0 .../forge/tags/{blocks => block}/fences.json | 0 .../fences/nether_brick.json | 0 .../tags/{blocks => block}/fences/wooden.json | 0 .../forge/tags/{blocks => block}/glass.json | 0 .../tags/{blocks => block}/glass/black.json | 0 .../tags/{blocks => block}/glass/blue.json | 0 .../tags/{blocks => block}/glass/brown.json | 0 .../{blocks => block}/glass/colorless.json | 0 .../tags/{blocks => block}/glass/cyan.json | 0 .../tags/{blocks => block}/glass/gray.json | 0 .../tags/{blocks => block}/glass/green.json | 0 .../{blocks => block}/glass/light_blue.json | 0 .../{blocks => block}/glass/light_gray.json | 0 .../tags/{blocks => block}/glass/lime.json | 0 .../tags/{blocks => block}/glass/magenta.json | 0 .../tags/{blocks => block}/glass/orange.json | 0 .../tags/{blocks => block}/glass/pink.json | 0 .../tags/{blocks => block}/glass/purple.json | 0 .../tags/{blocks => block}/glass/red.json | 0 .../tags/{blocks => block}/glass/silica.json | 0 .../tags/{blocks => block}/glass/tinted.json | 0 .../tags/{blocks => block}/glass/white.json | 0 .../tags/{blocks => block}/glass/yellow.json | 0 .../tags/{blocks => block}/glass_panes.json | 0 .../{blocks => block}/glass_panes/black.json | 0 .../{blocks => block}/glass_panes/blue.json | 0 .../{blocks => block}/glass_panes/brown.json | 0 .../glass_panes/colorless.json | 0 .../{blocks => block}/glass_panes/cyan.json | 0 .../{blocks => block}/glass_panes/gray.json | 0 .../{blocks => block}/glass_panes/green.json | 0 .../glass_panes/light_blue.json | 0 .../glass_panes/light_gray.json | 0 .../{blocks => block}/glass_panes/lime.json | 0 .../glass_panes/magenta.json | 0 .../{blocks => block}/glass_panes/orange.json | 0 .../{blocks => block}/glass_panes/pink.json | 0 .../{blocks => block}/glass_panes/purple.json | 0 .../{blocks => block}/glass_panes/red.json | 0 .../{blocks => block}/glass_panes/white.json | 0 .../{blocks => block}/glass_panes/yellow.json | 0 .../forge/tags/{blocks => block}/gravel.json | 0 .../tags/{blocks => block}/netherrack.json | 0 .../tags/{blocks => block}/obsidian.json | 0 .../ore_bearing_ground/deepslate.json | 0 .../ore_bearing_ground/netherrack.json | 0 .../ore_bearing_ground/stone.json | 0 .../{blocks => block}/ore_rates/dense.json | 0 .../{blocks => block}/ore_rates/singular.json | 0 .../{blocks => block}/ore_rates/sparse.json | 0 .../forge/tags/{blocks => block}/ores.json | 0 .../tags/{blocks => block}/ores/coal.json | 0 .../tags/{blocks => block}/ores/copper.json | 0 .../tags/{blocks => block}/ores/diamond.json | 0 .../tags/{blocks => block}/ores/emerald.json | 0 .../tags/{blocks => block}/ores/gold.json | 0 .../tags/{blocks => block}/ores/iron.json | 0 .../tags/{blocks => block}/ores/lapis.json | 0 .../ores/netherite_scrap.json | 0 .../tags/{blocks => block}/ores/quartz.json | 0 .../tags/{blocks => block}/ores/redstone.json | 0 .../ores_in_ground/deepslate.json | 0 .../ores_in_ground/netherrack.json | 0 .../ores_in_ground/stone.json | 0 .../forge/tags/{blocks => block}/sand.json | 0 .../{blocks => block}/sand/colorless.json | 0 .../tags/{blocks => block}/sand/red.json | 0 .../tags/{blocks => block}/sandstone.json | 0 .../tags/{blocks => block}/stained_glass.json | 0 .../stained_glass_panes.json | 0 .../forge/tags/{blocks => block}/stone.json | 0 .../{blocks => block}/storage_blocks.json | 0 .../storage_blocks/amethyst.json | 0 .../storage_blocks/coal.json | 0 .../storage_blocks/copper.json | 0 .../storage_blocks/diamond.json | 0 .../storage_blocks/emerald.json | 0 .../storage_blocks/gold.json | 0 .../storage_blocks/iron.json | 0 .../storage_blocks/lapis.json | 0 .../storage_blocks/netherite.json | 0 .../storage_blocks/quartz.json | 0 .../storage_blocks/raw_copper.json | 0 .../storage_blocks/raw_gold.json | 0 .../storage_blocks/raw_iron.json | 0 .../storage_blocks/redstone.json | 0 .../{entity_types => entity_type}/bosses.json | 0 .../forge/tags/{fluids => fluid}/milk.json | 0 .../forge/tags/{items => item}/armors.json | 0 .../tags/{items => item}/armors/boots.json | 0 .../{items => item}/armors/chestplates.json | 0 .../tags/{items => item}/armors/helmets.json | 0 .../tags/{items => item}/armors/leggings.json | 0 .../forge/tags/{items => item}/barrels.json | 0 .../tags/{items => item}/barrels/wooden.json | 0 .../forge/tags/{items => item}/bones.json | 0 .../tags/{items => item}/bookshelves.json | 0 .../forge/tags/{items => item}/chests.json | 0 .../tags/{items => item}/chests/ender.json | 0 .../tags/{items => item}/chests/trapped.json | 0 .../tags/{items => item}/chests/wooden.json | 0 .../tags/{items => item}/cobblestone.json | 0 .../cobblestone/deepslate.json | 0 .../{items => item}/cobblestone/infested.json | 0 .../{items => item}/cobblestone/mossy.json | 0 .../{items => item}/cobblestone/normal.json | 0 .../forge/tags/{items => item}/crops.json | 0 .../tags/{items => item}/crops/beetroot.json | 0 .../tags/{items => item}/crops/carrot.json | 0 .../{items => item}/crops/nether_wart.json | 0 .../tags/{items => item}/crops/potato.json | 0 .../tags/{items => item}/crops/wheat.json | 0 .../forge/tags/{items => item}/dusts.json | 0 .../tags/{items => item}/dusts/glowstone.json | 0 .../{items => item}/dusts/prismarine.json | 0 .../tags/{items => item}/dusts/redstone.json | 0 .../data/forge/tags/{items => item}/dyes.json | 0 .../tags/{items => item}/dyes/black.json | 0 .../forge/tags/{items => item}/dyes/blue.json | 0 .../tags/{items => item}/dyes/brown.json | 0 .../forge/tags/{items => item}/dyes/cyan.json | 0 .../forge/tags/{items => item}/dyes/gray.json | 0 .../tags/{items => item}/dyes/green.json | 0 .../tags/{items => item}/dyes/light_blue.json | 0 .../tags/{items => item}/dyes/light_gray.json | 0 .../forge/tags/{items => item}/dyes/lime.json | 0 .../tags/{items => item}/dyes/magenta.json | 0 .../tags/{items => item}/dyes/orange.json | 0 .../forge/tags/{items => item}/dyes/pink.json | 0 .../tags/{items => item}/dyes/purple.json | 0 .../forge/tags/{items => item}/dyes/red.json | 0 .../tags/{items => item}/dyes/white.json | 0 .../tags/{items => item}/dyes/yellow.json | 0 .../data/forge/tags/{items => item}/eggs.json | 0 .../{items => item}/enchanting_fuels.json | 0 .../tags/{items => item}/end_stones.json | 0 .../tags/{items => item}/ender_pearls.json | 0 .../forge/tags/{items => item}/feathers.json | 0 .../tags/{items => item}/fence_gates.json | 0 .../{items => item}/fence_gates/wooden.json | 0 .../forge/tags/{items => item}/fences.json | 0 .../{items => item}/fences/nether_brick.json | 0 .../tags/{items => item}/fences/wooden.json | 0 .../data/forge/tags/{items => item}/gems.json | 0 .../tags/{items => item}/gems/amethyst.json | 0 .../tags/{items => item}/gems/diamond.json | 0 .../tags/{items => item}/gems/emerald.json | 0 .../tags/{items => item}/gems/lapis.json | 0 .../tags/{items => item}/gems/prismarine.json | 0 .../tags/{items => item}/gems/quartz.json | 0 .../forge/tags/{items => item}/glass.json | 0 .../tags/{items => item}/glass/black.json | 0 .../tags/{items => item}/glass/blue.json | 0 .../tags/{items => item}/glass/brown.json | 0 .../tags/{items => item}/glass/colorless.json | 0 .../tags/{items => item}/glass/cyan.json | 0 .../tags/{items => item}/glass/gray.json | 0 .../tags/{items => item}/glass/green.json | 0 .../{items => item}/glass/light_blue.json | 0 .../{items => item}/glass/light_gray.json | 0 .../tags/{items => item}/glass/lime.json | 0 .../tags/{items => item}/glass/magenta.json | 0 .../tags/{items => item}/glass/orange.json | 0 .../tags/{items => item}/glass/pink.json | 0 .../tags/{items => item}/glass/purple.json | 0 .../forge/tags/{items => item}/glass/red.json | 0 .../tags/{items => item}/glass/silica.json | 0 .../tags/{items => item}/glass/tinted.json | 0 .../tags/{items => item}/glass/white.json | 0 .../tags/{items => item}/glass/yellow.json | 0 .../tags/{items => item}/glass_panes.json | 0 .../{items => item}/glass_panes/black.json | 0 .../{items => item}/glass_panes/blue.json | 0 .../{items => item}/glass_panes/brown.json | 0 .../glass_panes/colorless.json | 0 .../{items => item}/glass_panes/cyan.json | 0 .../{items => item}/glass_panes/gray.json | 0 .../{items => item}/glass_panes/green.json | 0 .../glass_panes/light_blue.json | 0 .../glass_panes/light_gray.json | 0 .../{items => item}/glass_panes/lime.json | 0 .../{items => item}/glass_panes/magenta.json | 0 .../{items => item}/glass_panes/orange.json | 0 .../{items => item}/glass_panes/pink.json | 0 .../{items => item}/glass_panes/purple.json | 0 .../tags/{items => item}/glass_panes/red.json | 0 .../{items => item}/glass_panes/white.json | 0 .../{items => item}/glass_panes/yellow.json | 0 .../forge/tags/{items => item}/gravel.json | 0 .../forge/tags/{items => item}/gunpowder.json | 0 .../forge/tags/{items => item}/heads.json | 0 .../forge/tags/{items => item}/ingots.json | 0 .../tags/{items => item}/ingots/brick.json | 0 .../tags/{items => item}/ingots/copper.json | 0 .../tags/{items => item}/ingots/gold.json | 0 .../tags/{items => item}/ingots/iron.json | 0 .../{items => item}/ingots/nether_brick.json | 0 .../{items => item}/ingots/netherite.json | 0 .../forge/tags/{items => item}/leather.json | 0 .../forge/tags/{items => item}/mushrooms.json | 0 .../tags/{items => item}/nether_stars.json | 0 .../tags/{items => item}/netherrack.json | 0 .../forge/tags/{items => item}/nuggets.json | 0 .../tags/{items => item}/nuggets/gold.json | 0 .../tags/{items => item}/nuggets/iron.json | 0 .../forge/tags/{items => item}/obsidian.json | 0 .../ore_bearing_ground/deepslate.json | 0 .../ore_bearing_ground/netherrack.json | 0 .../ore_bearing_ground/stone.json | 0 .../tags/{items => item}/ore_rates/dense.json | 0 .../{items => item}/ore_rates/singular.json | 0 .../{items => item}/ore_rates/sparse.json | 0 .../data/forge/tags/{items => item}/ores.json | 0 .../forge/tags/{items => item}/ores/coal.json | 0 .../tags/{items => item}/ores/copper.json | 0 .../tags/{items => item}/ores/diamond.json | 0 .../tags/{items => item}/ores/emerald.json | 0 .../forge/tags/{items => item}/ores/gold.json | 0 .../forge/tags/{items => item}/ores/iron.json | 0 .../tags/{items => item}/ores/lapis.json | 0 .../{items => item}/ores/netherite_scrap.json | 0 .../tags/{items => item}/ores/quartz.json | 0 .../tags/{items => item}/ores/redstone.json | 0 .../ores_in_ground/deepslate.json | 0 .../ores_in_ground/netherrack.json | 0 .../{items => item}/ores_in_ground/stone.json | 0 .../tags/{items => item}/raw_materials.json | 0 .../{items => item}/raw_materials/copper.json | 0 .../{items => item}/raw_materials/gold.json | 0 .../{items => item}/raw_materials/iron.json | 0 .../data/forge/tags/{items => item}/rods.json | 0 .../tags/{items => item}/rods/blaze.json | 0 .../tags/{items => item}/rods/wooden.json | 0 .../data/forge/tags/{items => item}/sand.json | 0 .../tags/{items => item}/sand/colorless.json | 0 .../forge/tags/{items => item}/sand/red.json | 0 .../forge/tags/{items => item}/sandstone.json | 0 .../forge/tags/{items => item}/seeds.json | 0 .../tags/{items => item}/seeds/beetroot.json | 0 .../tags/{items => item}/seeds/melon.json | 0 .../tags/{items => item}/seeds/pumpkin.json | 0 .../tags/{items => item}/seeds/wheat.json | 0 .../forge/tags/{items => item}/shears.json | 0 .../tags/{items => item}/slimeballs.json | 0 .../tags/{items => item}/stained_glass.json | 0 .../{items => item}/stained_glass_panes.json | 0 .../forge/tags/{items => item}/stone.json | 0 .../tags/{items => item}/storage_blocks.json | 0 .../storage_blocks/amethyst.json | 0 .../{items => item}/storage_blocks/coal.json | 0 .../storage_blocks/copper.json | 0 .../storage_blocks/diamond.json | 0 .../storage_blocks/emerald.json | 0 .../{items => item}/storage_blocks/gold.json | 0 .../{items => item}/storage_blocks/iron.json | 0 .../{items => item}/storage_blocks/lapis.json | 0 .../storage_blocks/netherite.json | 0 .../storage_blocks/quartz.json | 0 .../storage_blocks/raw_copper.json | 0 .../storage_blocks/raw_gold.json | 0 .../storage_blocks/raw_iron.json | 0 .../storage_blocks/redstone.json | 0 .../forge/tags/{items => item}/string.json | 0 .../forge/tags/{items => item}/tools.json | 0 .../tags/{items => item}/tools/bows.json | 0 .../tags/{items => item}/tools/crossbows.json | 0 .../{items => item}/tools/fishing_rods.json | 0 .../tags/{items => item}/tools/shields.json | 0 .../tags/{items => item}/tools/tridents.json | 0 .../blocks/acacia_leaves.json | 4 +- .../blocks/azalea_leaves.json | 4 +- .../blocks/birch_leaves.json | 4 +- .../blocks/cherry_leaves.json | 4 +- .../blocks/cobweb.json | 2 +- .../blocks/dark_oak_leaves.json | 6 +- .../blocks/dead_bush.json | 0 .../blocks/fern.json | 0 .../blocks/flowering_azalea_leaves.json | 4 +- .../blocks/glow_lichen.json | 0 .../blocks/hanging_roots.json | 0 .../blocks/jungle_leaves.json | 4 +- .../blocks/large_fern.json | 0 .../blocks/mangrove_leaves.json | 2 +- .../blocks/nether_sprouts.json | 0 .../blocks/oak_leaves.json | 6 +- .../blocks/seagrass.json | 0 .../blocks/short_grass.json | 0 .../blocks/small_dripleaf.json | 0 .../blocks/spruce_leaves.json | 4 +- .../blocks/tall_grass.json | 0 .../blocks/tall_seagrass.json | 0 .../blocks/twisting_vines.json | 2 +- .../blocks/vine.json | 0 .../blocks/weeping_vines.json | 2 +- .../acacia_chest_boat.json | 0 .../{recipes => recipe}/acacia_fence.json | 0 .../acacia_fence_gate.json | 0 .../{recipes => recipe}/acacia_sign.json | 0 .../{recipes => recipe}/activator_rail.json | 0 .../{recipes => recipe}/andesite.json | 0 .../minecraft/{recipes => recipe}/anvil.json | 0 .../{recipes => recipe}/armor_stand.json | 0 .../minecraft/{recipes => recipe}/arrow.json | 0 .../bamboo_chest_raft.json | 0 .../{recipes => recipe}/bamboo_fence.json | 0 .../bamboo_fence_gate.json | 0 .../{recipes => recipe}/bamboo_sign.json | 0 .../{recipes => recipe}/birch_chest_boat.json | 0 .../{recipes => recipe}/birch_fence.json | 0 .../{recipes => recipe}/birch_fence_gate.json | 0 .../{recipes => recipe}/birch_sign.json | 0 .../{recipes => recipe}/black_banner.json | 0 .../{recipes => recipe}/blast_furnace.json | 0 .../{recipes => recipe}/blue_banner.json | 0 .../bolt_armor_trim_smithing_template.json | 29 ++ .../minecraft/{recipes => recipe}/bow.json | 0 .../{recipes => recipe}/brown_banner.json | 0 .../minecraft/{recipes => recipe}/brush.json | 0 .../minecraft/{recipes => recipe}/bucket.json | 0 .../calibrated_sculk_sensor.json | 0 .../{recipes => recipe}/campfire.json | 0 .../minecraft/{recipes => recipe}/candle.json | 0 .../{recipes => recipe}/cauldron.json | 0 .../minecraft/{recipes => recipe}/chain.json | 0 .../cherry_chest_boat.json | 0 .../{recipes => recipe}/cherry_fence.json | 0 .../cherry_fence_gate.json | 0 .../{recipes => recipe}/cherry_sign.json | 0 .../{recipes => recipe}/chest_minecart.json | 0 .../minecraft/{recipes => recipe}/clock.json | 0 .../coast_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/compass.json | 0 .../data/minecraft/recipe/copper_door.json | 18 ++ .../minecraft/recipe/copper_trapdoor.json | 17 ++ .../data/minecraft/recipe/crafter.json | 27 ++ .../{recipes => recipe}/crimson_fence.json | 0 .../crimson_fence_gate.json | 0 .../{recipes => recipe}/crimson_sign.json | 0 .../{recipes => recipe}/crossbow.json | 0 .../{recipes => recipe}/cyan_banner.json | 0 .../dark_oak_chest_boat.json | 0 .../{recipes => recipe}/dark_oak_fence.json | 0 .../dark_oak_fence_gate.json | 0 .../{recipes => recipe}/dark_oak_sign.json | 0 .../{recipes => recipe}/detector_rail.json | 0 .../{recipes => recipe}/diamond_axe.json | 0 .../{recipes => recipe}/diamond_boots.json | 0 .../diamond_chestplate.json | 0 .../{recipes => recipe}/diamond_helmet.json | 0 .../{recipes => recipe}/diamond_hoe.json | 0 .../{recipes => recipe}/diamond_leggings.json | 0 .../{recipes => recipe}/diamond_pickaxe.json | 0 .../{recipes => recipe}/diamond_shovel.json | 0 .../{recipes => recipe}/diamond_sword.json | 0 .../{recipes => recipe}/diorite.json | 0 .../{recipes => recipe}/dispenser.json | 0 .../{recipes => recipe}/dropper.json | 0 .../dune_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/enchanting_table.json | 0 .../eye_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/fishing_rod.json | 0 .../{recipes => recipe}/flint_and_steel.json | 0 .../flow_armor_trim_smithing_template.json | 24 ++ .../{recipes => recipe}/golden_apple.json | 0 .../{recipes => recipe}/golden_axe.json | 0 .../{recipes => recipe}/golden_boots.json | 0 .../golden_chestplate.json | 0 .../{recipes => recipe}/golden_helmet.json | 0 .../{recipes => recipe}/golden_hoe.json | 0 .../{recipes => recipe}/golden_leggings.json | 0 .../{recipes => recipe}/golden_pickaxe.json | 0 .../{recipes => recipe}/golden_shovel.json | 0 .../{recipes => recipe}/golden_sword.json | 0 .../{recipes => recipe}/gray_banner.json | 0 .../{recipes => recipe}/green_banner.json | 0 .../{recipes => recipe}/grindstone.json | 0 .../heavy_weighted_pressure_plate.json | 0 .../minecraft/{recipes => recipe}/hopper.json | 0 .../host_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/iron_axe.json | 0 .../{recipes => recipe}/iron_bars.json | 0 .../{recipes => recipe}/iron_boots.json | 0 .../{recipes => recipe}/iron_chestplate.json | 0 .../{recipes => recipe}/iron_door.json | 0 .../{recipes => recipe}/iron_helmet.json | 0 .../{recipes => recipe}/iron_hoe.json | 0 .../{recipes => recipe}/iron_leggings.json | 0 .../{recipes => recipe}/iron_pickaxe.json | 0 .../{recipes => recipe}/iron_shovel.json | 0 .../{recipes => recipe}/iron_sword.json | 0 .../{recipes => recipe}/iron_trapdoor.json | 0 .../{recipes => recipe}/item_frame.json | 0 .../{recipes => recipe}/jukebox.json | 0 .../jungle_chest_boat.json | 0 .../{recipes => recipe}/jungle_fence.json | 0 .../jungle_fence_gate.json | 0 .../{recipes => recipe}/jungle_sign.json | 0 .../minecraft/{recipes => recipe}/ladder.json | 0 .../minecraft/{recipes => recipe}/lead.json | 0 .../minecraft/{recipes => recipe}/lever.json | 0 .../light_blue_banner.json | 0 .../light_gray_banner.json | 0 .../light_weighted_pressure_plate.json | 0 .../{recipes => recipe}/lightning_rod.json | 0 .../{recipes => recipe}/lime_banner.json | 0 .../{recipes => recipe}/lodestone.json | 0 .../minecraft/{recipes => recipe}/loom.json | 0 .../{recipes => recipe}/magenta_banner.json | 0 .../mangrove_chest_boat.json | 0 .../{recipes => recipe}/mangrove_fence.json | 0 .../mangrove_fence_gate.json | 0 .../{recipes => recipe}/mangrove_sign.json | 0 .../{recipes => recipe}/minecart.json | 0 .../mossy_cobblestone_from_moss_block.json | 0 .../mossy_cobblestone_from_vine.json | 0 .../{recipes => recipe}/netherite_ingot.json | 0 .../netherite_upgrade_smithing_template.json | 0 .../{recipes => recipe}/oak_chest_boat.json | 0 .../{recipes => recipe}/oak_fence.json | 0 .../{recipes => recipe}/oak_fence_gate.json | 0 .../{recipes => recipe}/oak_sign.json | 0 .../{recipes => recipe}/observer.json | 0 .../{recipes => recipe}/orange_banner.json | 0 .../{recipes => recipe}/painting.json | 0 .../{recipes => recipe}/pink_banner.json | 0 .../minecraft/{recipes => recipe}/piston.json | 0 .../polished_deepslate.json | 0 .../{recipes => recipe}/powered_rail.json | 0 .../{recipes => recipe}/purple_banner.json | 0 .../minecraft/{recipes => recipe}/rail.json | 0 .../raiser_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/red_banner.json | 0 .../{recipes => recipe}/redstone_torch.json | 0 .../rib_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/scaffolding.json | 0 .../sentry_armor_trim_smithing_template.json | 0 .../shaper_armor_trim_smithing_template.json | 0 .../minecraft/{recipes => recipe}/shears.json | 0 .../minecraft/{recipes => recipe}/shield.json | 0 .../{recipes => recipe}/shulker_box.json | 0 .../silence_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/smithing_table.json | 0 .../snout_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/soul_campfire.json | 0 .../{recipes => recipe}/soul_torch.json | 0 .../spire_armor_trim_smithing_template.json | 0 .../spruce_chest_boat.json | 0 .../{recipes => recipe}/spruce_fence.json | 0 .../spruce_fence_gate.json | 0 .../{recipes => recipe}/spruce_sign.json | 0 .../{recipes => recipe}/spyglass.json | 0 .../{recipes => recipe}/stone_axe.json | 0 .../{recipes => recipe}/stone_hoe.json | 0 .../{recipes => recipe}/stone_pickaxe.json | 0 .../{recipes => recipe}/stone_shovel.json | 0 .../{recipes => recipe}/stone_sword.json | 0 .../{recipes => recipe}/stonecutter.json | 0 .../tide_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/tinted_glass.json | 0 .../minecraft/{recipes => recipe}/torch.json | 0 .../{recipes => recipe}/trapped_chest.json | 0 .../{recipes => recipe}/tripwire_hook.json | 0 .../vex_armor_trim_smithing_template.json | 0 .../ward_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/warped_fence.json | 0 .../warped_fence_gate.json | 0 .../{recipes => recipe}/warped_sign.json | 0 ...ayfinder_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/white_banner.json | 0 .../wild_armor_trim_smithing_template.json | 0 .../{recipes => recipe}/wooden_axe.json | 0 .../{recipes => recipe}/wooden_hoe.json | 0 .../{recipes => recipe}/wooden_pickaxe.json | 0 .../{recipes => recipe}/wooden_shovel.json | 0 .../{recipes => recipe}/wooden_sword.json | 0 .../{recipes => recipe}/yellow_banner.json | 0 src/main/generated/pack.mcmeta | 2 +- .../client/CreativeModeTabSearchRegistry.java | 50 ++-- .../client/ForgeHooksClient.java | 38 +-- .../client/NamedRenderTypeManager.java | 30 +- .../event/CustomizeGuiOverlayEvent.java | 74 ++--- .../client/event/EntityRenderersEvent.java | 20 -- .../client/event/ForgeEventFactoryClient.java | 10 + .../client/event/ModelEvent.java | 61 ++--- .../event/RegisterNamedRenderTypesEvent.java | 2 +- ...egisterTextureAtlasSpriteLoadersEvent.java | 11 +- .../client/event/RenderLevelStageEvent.java | 4 +- .../client/extensions/IForgeVertexFormat.java | 12 +- .../common/IClientBlockExtensions.java | 5 +- .../client/gui/ScreenUtils.java | 259 ------------------ .../gui/TitleScreenModUpdateIndicator.java | 24 +- .../client/gui/widget/ModListWidget.java | 2 +- .../client/gui/widget/ScrollPanel.java | 44 ++- .../client/loading/ForgeLoadingOverlay.java | 32 +-- .../client/model/CompositeModel.java | 4 +- .../model/DynamicFluidContainerModel.java | 16 +- .../client/model/ElementsModel.java | 10 +- .../client/model/EmptyModel.java | 4 +- .../model/ExtendedBlockModelDeserializer.java | 4 +- .../client/model/ForgeFaceData.java | 13 +- .../client/model/ForgeItemModelShaper.java | 2 +- .../client/model/IQuadTransformer.java | 40 ++- .../client/model/ItemLayerModel.java | 21 +- .../client/model/QuadTransformers.java | 2 +- .../client/model/SeparateTransformsModel.java | 6 +- .../client/model/data/ModelDataManager.java | 36 +-- .../model/generators/BlockStateProvider.java | 39 ++- .../model/generators/ItemModelProvider.java | 2 +- .../client/model/generators/ModelBuilder.java | 164 ++++------- .../client/model/generators/ModelFile.java | 2 +- .../model/generators/ModelProvider.java | 16 +- .../loaders/CompositeModelBuilder.java | 4 +- .../DynamicFluidContainerModelBuilder.java | 3 +- .../loaders/ItemLayerModelBuilder.java | 7 +- .../generators/loaders/ObjModelBuilder.java | 3 +- .../SeparateTransformsModelBuilder.java | 4 +- .../geometry/BlockGeometryBakingContext.java | 4 +- .../model/geometry/IUnbakedGeometry.java | 15 +- .../model/geometry/SimpleUnbakedGeometry.java | 6 +- .../StandaloneGeometryBakingContext.java | 2 +- .../model/geometry/UnbakedGeometryHelper.java | 59 ++-- .../client/model/lighting/QuadLighter.java | 17 -- .../client/model/obj/ObjLoader.java | 3 +- .../client/model/obj/ObjModel.java | 23 +- .../pipeline/QuadBakingVertexConsumer.java | 31 +-- .../pipeline/RemappingVertexPipeline.java | 154 ----------- .../pipeline/TransformingVertexPipeline.java | 8 +- .../model/pipeline/VertexConsumerWrapper.java | 42 +-- .../renderable/BakedModelRenderable.java | 31 +-- .../client/settings/KeyModifier.java | 12 - .../client/textures/ForgeTextureMetadata.java | 2 +- .../textures/UnitTextureAtlasSprite.java | 2 +- .../common/CreativeModeTabRegistry.java | 99 +++---- .../net/minecraftforge/common/ForgeHooks.java | 53 +--- .../net/minecraftforge/common/ForgeMod.java | 36 ++- .../java/net/minecraftforge/common/Tags.java | 10 +- .../crafting/ConditionalAdvancement.java | 2 +- .../common/crafting/ConditionalRecipe.java | 9 +- .../common/crafting/IShapedRecipe.java | 4 +- .../crafting/SimpleCraftingContainer.java | 91 +----- .../crafting/conditions/ICondition.java | 2 +- .../conditions/IConditionBuilder.java | 2 +- .../data/DatapackBuiltinEntriesProvider.java | 20 +- .../common/data/ExistingFileHelper.java | 2 +- .../common/data/ForgeBlockTagsProvider.java | 2 +- .../common/data/ForgeItemTagsProvider.java | 2 +- .../common/data/ForgeLootTableProvider.java | 4 +- .../common/data/ForgeRecipeProvider.java | 2 +- .../data/ForgeSpriteSourceProvider.java | 2 +- .../data/GlobalLootModifierProvider.java | 6 +- .../common/data/LanguageProvider.java | 6 +- .../common/data/SoundDefinitionsProvider.java | 6 +- .../common/data/SpriteSourceProvider.java | 20 +- .../common/extensions/IForgeBlock.java | 8 +- .../common/extensions/IForgeBlockState.java | 4 +- .../common/extensions/IForgeEnchantment.java | 45 --- .../extensions/IForgeGameTestHelper.java | 2 +- .../common/extensions/IForgeItem.java | 37 +-- .../common/extensions/IForgeItemStack.java | 24 -- .../extensions/IForgeRawTagBuilder.java | 8 - .../common/loot/IGlobalLootModifier.java | 2 +- .../common/loot/LootModifierManager.java | 4 +- .../common/loot/LootTableIdCondition.java | 2 +- .../common/util/ITeleporter.java | 92 ------- .../net/minecraftforge/entity/PartEntity.java | 3 +- .../event/ForgeEventFactory.java | 17 +- .../net/minecraftforge/event/TickEvent.java | 27 +- .../event/entity/living/LivingDropsEvent.java | 22 +- .../event/level/BlockEvent.java | 8 +- .../fluids/DispenseFluidContainer.java | 10 +- .../net/minecraftforge/fluids/FluidStack.java | 2 +- .../items/wrapper/EntityArmorInvWrapper.java | 10 +- .../wrapper/EntityEquipmentInvWrapper.java | 79 +++--- .../items/wrapper/PlayerArmorInvWrapper.java | 2 +- .../logging/CrashReportExtender.java | 5 +- .../network/ChannelBuilder.java | 2 +- .../network/ChannelListManager.java | 8 +- .../network/ForgePacketHandler.java | 2 +- .../network/NetworkInitialization.java | 4 +- .../network/ServerStatusPing.java | 2 +- .../network/packets/MismatchData.java | 4 +- .../registries/DataPackRegistriesHooks.java | 2 +- .../registries/DataPackRegistryEvent.java | 2 +- .../registries/DeferredRegister.java | 23 +- .../registries/ForgeRegistries.java | 27 +- .../registries/ForgeRegistry.java | 6 +- .../minecraftforge/registries/GameData.java | 9 +- .../registries/IForgeRegistry.java | 2 +- .../registries/ObjectHolderRef.java | 2 +- .../registries/ObjectHolderRegistry.java | 6 +- .../registries/RegisterEvent.java | 2 +- .../registries/RegistryBuilder.java | 4 +- .../minecraftforge/server/LanguageHook.java | 2 +- .../server/command/ChunkGenWorker.java | 2 +- .../server/command/TagsCommand.java | 2 +- .../server/permission/PermissionAPI.java | 2 +- .../handler/DefaultPermissionHandler.java | 2 +- .../resources/META-INF/accesstransformer.cfg | 12 +- .../{structures => structure}/empty3x3x3.nbt | Bin .../blocks/test.json | 0 .../conditional_doesnt_load_empty.json | 0 .../recipes/conditional_recipe_choice.json | 0 .../recipes/cooking_false_conditions.json | 0 .../recipes/cooking_true_conditions.json | 0 .../recipes/shaped_false_conditions.json | 0 .../recipes/shaped_true_conditions.json | 0 .../recipes/shapeless_false_conditions.json | 0 .../recipes/shapeless_true_conditions.json | 0 .../recipes/singe_item_true_conditions.json | 0 .../recipes/single_item_false_conditions.json | 0 .../recipes/test_encode_all_conditions.json | 0 .../conditional_doesnt_load_empty.json | 0 .../conditional_recipe_choice.json | 0 .../cooking_false_conditions.json | 0 .../cooking_true_conditions.json | 0 .../shaped_false_conditions.json | 0 .../shaped_true_conditions.json | 0 .../shapeless_false_conditions.json | 0 .../shapeless_true_conditions.json | 0 .../singe_item_true_conditions.json | 0 .../single_item_false_conditions.json | 0 .../test_encode_all_conditions.json | 0 .../break_glass_with_fish.json | 0 .../tags/{items => item}/fish.json | 0 .../recipes/misc/compound_ingredient.json | 0 .../recipes/misc/difference_ingredient.json | 0 .../recipes/misc/intersection_ingredient.json | 0 .../recipes/misc/partial_nbt_damage_only.json | 0 .../recipes/misc/partial_nbt_name_only.json | 0 .../recipes/misc/strict_nbt_ingredient.json | 0 .../compound_ingredient.json | 0 .../difference_ingredient.json | 0 .../intersection_ingredient.json | 0 .../partial_nbt_damage_only.json | 0 .../partial_nbt_name_only.json | 0 .../strict_nbt_ingredient.json | 0 .../tags/{items => item}/left.json | 0 .../tags/{items => item}/right.json | 0 .../global_loot_test/enchantment/smelt.json | 20 ++ .../loot_modifiers/smelting.json | 2 +- .../blocks/test.json | 0 src/test/generated/mdk_datagen/pack.mcmeta | 2 +- .../generated/test_helper_mod/pack.mcmeta | 2 +- .../creativetabs/CreativeModeTabTest.java | 10 +- .../debug/gameplay/biome/BiomeTestMod.java | 6 +- .../crafting/ConditionalRecipeTest.java | 34 +-- .../crafting/CustomIngredientsTest.java | 20 +- .../gameplay/criterion/CriterionTest.java | 6 +- .../DatapackBuiltinEntriesProviderTest.java | 6 +- .../item/GatherComponentsEventTest.java | 2 + .../gameplay/loot/ConditionalLootPools.java | 4 +- .../loot/GlobalLootModifiersTest.java | 60 ++-- .../net/minecraftforge/test/BaseTestMod.java | 13 +- .../minecraftforge/test/TestHelperMod.java | 2 +- 941 files changed, 3119 insertions(+), 4266 deletions(-) delete mode 100644 patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch create mode 100644 patches/minecraft/net/minecraft/client/DeltaTracker.java.patch delete mode 100644 patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch rename patches/minecraft/net/minecraft/client/gui/screens/{ => options}/controls/KeyBindsList.java.patch (70%) create mode 100644 patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch create mode 100644 patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch delete mode 100644 patches/minecraft/net/minecraft/client/multiplayer/TagCollector.java.patch delete mode 100644 patches/minecraft/net/minecraft/client/renderer/block/model/BlockElement.java.patch create mode 100644 patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch delete mode 100644 patches/minecraft/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java.patch create mode 100644 patches/minecraft/net/minecraft/core/registries/Registries.java.patch delete mode 100644 patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch create mode 100644 patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch delete mode 100644 patches/minecraft/net/minecraft/server/level/ChunkHolder.java.patch create mode 100644 patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/BiomeTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/CatVariantTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/GameEventTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/StructureTags.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/TagKey.java.patch delete mode 100644 patches/minecraft/net/minecraft/tags/TagManager.java.patch create mode 100644 patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch create mode 100644 patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/inventory/InventoryMenu.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/item/RecordItem.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/item/enchantment/Enchantment.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java.patch create mode 100644 patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch create mode 100644 patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/level/portal/PortalForcer.java.patch create mode 100644 patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java.patch create mode 100644 patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch delete mode 100644 patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java.patch rename src/main/generated/data/forge/tags/{blocks => block}/barrels.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/barrels/wooden.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/bookshelves.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/chests.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/chests/ender.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/chests/trapped.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/chests/wooden.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/cobblestone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/cobblestone/deepslate.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/cobblestone/infested.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/cobblestone/mossy.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/cobblestone/normal.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/end_stones.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/enderman_place_on_blacklist.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/fence_gates.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/fence_gates/wooden.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/fences.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/fences/nether_brick.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/fences/wooden.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/black.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/blue.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/brown.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/colorless.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/cyan.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/gray.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/green.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/light_blue.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/light_gray.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/lime.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/magenta.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/orange.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/pink.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/purple.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/red.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/silica.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/tinted.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/white.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass/yellow.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/black.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/blue.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/brown.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/colorless.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/cyan.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/gray.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/green.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/light_blue.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/light_gray.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/lime.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/magenta.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/orange.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/pink.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/purple.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/red.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/white.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/glass_panes/yellow.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/gravel.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/netherrack.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/obsidian.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_bearing_ground/deepslate.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_bearing_ground/netherrack.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_bearing_ground/stone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_rates/dense.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_rates/singular.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ore_rates/sparse.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/coal.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/copper.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/diamond.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/emerald.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/gold.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/iron.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/lapis.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/netherite_scrap.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/quartz.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores/redstone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores_in_ground/deepslate.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores_in_ground/netherrack.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/ores_in_ground/stone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/sand.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/sand/colorless.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/sand/red.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/sandstone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/stained_glass.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/stained_glass_panes.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/stone.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/amethyst.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/coal.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/copper.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/diamond.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/emerald.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/gold.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/iron.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/lapis.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/netherite.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/quartz.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/raw_copper.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/raw_gold.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/raw_iron.json (100%) rename src/main/generated/data/forge/tags/{blocks => block}/storage_blocks/redstone.json (100%) rename src/main/generated/data/forge/tags/{entity_types => entity_type}/bosses.json (100%) rename src/main/generated/data/forge/tags/{fluids => fluid}/milk.json (100%) rename src/main/generated/data/forge/tags/{items => item}/armors.json (100%) rename src/main/generated/data/forge/tags/{items => item}/armors/boots.json (100%) rename src/main/generated/data/forge/tags/{items => item}/armors/chestplates.json (100%) rename src/main/generated/data/forge/tags/{items => item}/armors/helmets.json (100%) rename src/main/generated/data/forge/tags/{items => item}/armors/leggings.json (100%) rename src/main/generated/data/forge/tags/{items => item}/barrels.json (100%) rename src/main/generated/data/forge/tags/{items => item}/barrels/wooden.json (100%) rename src/main/generated/data/forge/tags/{items => item}/bones.json (100%) rename src/main/generated/data/forge/tags/{items => item}/bookshelves.json (100%) rename src/main/generated/data/forge/tags/{items => item}/chests.json (100%) rename src/main/generated/data/forge/tags/{items => item}/chests/ender.json (100%) rename src/main/generated/data/forge/tags/{items => item}/chests/trapped.json (100%) rename src/main/generated/data/forge/tags/{items => item}/chests/wooden.json (100%) rename src/main/generated/data/forge/tags/{items => item}/cobblestone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/cobblestone/deepslate.json (100%) rename src/main/generated/data/forge/tags/{items => item}/cobblestone/infested.json (100%) rename src/main/generated/data/forge/tags/{items => item}/cobblestone/mossy.json (100%) rename src/main/generated/data/forge/tags/{items => item}/cobblestone/normal.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops/beetroot.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops/carrot.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops/nether_wart.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops/potato.json (100%) rename src/main/generated/data/forge/tags/{items => item}/crops/wheat.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dusts.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dusts/glowstone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dusts/prismarine.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dusts/redstone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/black.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/brown.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/cyan.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/green.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/light_blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/light_gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/lime.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/magenta.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/orange.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/pink.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/purple.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/red.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/white.json (100%) rename src/main/generated/data/forge/tags/{items => item}/dyes/yellow.json (100%) rename src/main/generated/data/forge/tags/{items => item}/eggs.json (100%) rename src/main/generated/data/forge/tags/{items => item}/enchanting_fuels.json (100%) rename src/main/generated/data/forge/tags/{items => item}/end_stones.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ender_pearls.json (100%) rename src/main/generated/data/forge/tags/{items => item}/feathers.json (100%) rename src/main/generated/data/forge/tags/{items => item}/fence_gates.json (100%) rename src/main/generated/data/forge/tags/{items => item}/fence_gates/wooden.json (100%) rename src/main/generated/data/forge/tags/{items => item}/fences.json (100%) rename src/main/generated/data/forge/tags/{items => item}/fences/nether_brick.json (100%) rename src/main/generated/data/forge/tags/{items => item}/fences/wooden.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/amethyst.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/diamond.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/emerald.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/lapis.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/prismarine.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gems/quartz.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/black.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/brown.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/colorless.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/cyan.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/green.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/light_blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/light_gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/lime.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/magenta.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/orange.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/pink.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/purple.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/red.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/silica.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/tinted.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/white.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass/yellow.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/black.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/brown.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/colorless.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/cyan.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/green.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/light_blue.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/light_gray.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/lime.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/magenta.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/orange.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/pink.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/purple.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/red.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/white.json (100%) rename src/main/generated/data/forge/tags/{items => item}/glass_panes/yellow.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gravel.json (100%) rename src/main/generated/data/forge/tags/{items => item}/gunpowder.json (100%) rename src/main/generated/data/forge/tags/{items => item}/heads.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/brick.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/copper.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/nether_brick.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ingots/netherite.json (100%) rename src/main/generated/data/forge/tags/{items => item}/leather.json (100%) rename src/main/generated/data/forge/tags/{items => item}/mushrooms.json (100%) rename src/main/generated/data/forge/tags/{items => item}/nether_stars.json (100%) rename src/main/generated/data/forge/tags/{items => item}/netherrack.json (100%) rename src/main/generated/data/forge/tags/{items => item}/nuggets.json (100%) rename src/main/generated/data/forge/tags/{items => item}/nuggets/gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/nuggets/iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/obsidian.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_bearing_ground/deepslate.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_bearing_ground/netherrack.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_bearing_ground/stone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_rates/dense.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_rates/singular.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ore_rates/sparse.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/coal.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/copper.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/diamond.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/emerald.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/lapis.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/netherite_scrap.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/quartz.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores/redstone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores_in_ground/deepslate.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores_in_ground/netherrack.json (100%) rename src/main/generated/data/forge/tags/{items => item}/ores_in_ground/stone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/raw_materials.json (100%) rename src/main/generated/data/forge/tags/{items => item}/raw_materials/copper.json (100%) rename src/main/generated/data/forge/tags/{items => item}/raw_materials/gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/raw_materials/iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/rods.json (100%) rename src/main/generated/data/forge/tags/{items => item}/rods/blaze.json (100%) rename src/main/generated/data/forge/tags/{items => item}/rods/wooden.json (100%) rename src/main/generated/data/forge/tags/{items => item}/sand.json (100%) rename src/main/generated/data/forge/tags/{items => item}/sand/colorless.json (100%) rename src/main/generated/data/forge/tags/{items => item}/sand/red.json (100%) rename src/main/generated/data/forge/tags/{items => item}/sandstone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/seeds.json (100%) rename src/main/generated/data/forge/tags/{items => item}/seeds/beetroot.json (100%) rename src/main/generated/data/forge/tags/{items => item}/seeds/melon.json (100%) rename src/main/generated/data/forge/tags/{items => item}/seeds/pumpkin.json (100%) rename src/main/generated/data/forge/tags/{items => item}/seeds/wheat.json (100%) rename src/main/generated/data/forge/tags/{items => item}/shears.json (100%) rename src/main/generated/data/forge/tags/{items => item}/slimeballs.json (100%) rename src/main/generated/data/forge/tags/{items => item}/stained_glass.json (100%) rename src/main/generated/data/forge/tags/{items => item}/stained_glass_panes.json (100%) rename src/main/generated/data/forge/tags/{items => item}/stone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/amethyst.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/coal.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/copper.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/diamond.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/emerald.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/lapis.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/netherite.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/quartz.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/raw_copper.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/raw_gold.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/raw_iron.json (100%) rename src/main/generated/data/forge/tags/{items => item}/storage_blocks/redstone.json (100%) rename src/main/generated/data/forge/tags/{items => item}/string.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools/bows.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools/crossbows.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools/fishing_rods.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools/shields.json (100%) rename src/main/generated/data/forge/tags/{items => item}/tools/tridents.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/acacia_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/azalea_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/birch_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/cherry_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/cobweb.json (95%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/dark_oak_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/dead_bush.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/fern.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/flowering_azalea_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/glow_lichen.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/hanging_roots.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/jungle_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/large_fern.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/mangrove_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/nether_sprouts.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/oak_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/seagrass.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/short_grass.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/small_dripleaf.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/spruce_leaves.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/tall_grass.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/tall_seagrass.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/twisting_vines.json (96%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/vine.json (100%) rename src/main/generated/data/minecraft/{loot_tables => loot_table}/blocks/weeping_vines.json (96%) rename src/main/generated/data/minecraft/{recipes => recipe}/acacia_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/acacia_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/acacia_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/acacia_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/activator_rail.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/andesite.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/anvil.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/armor_stand.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/arrow.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/bamboo_chest_raft.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/bamboo_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/bamboo_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/bamboo_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/birch_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/birch_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/birch_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/birch_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/black_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/blast_furnace.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/blue_banner.json (100%) create mode 100644 src/main/generated/data/minecraft/recipe/bolt_armor_trim_smithing_template.json rename src/main/generated/data/minecraft/{recipes => recipe}/bow.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/brown_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/brush.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/bucket.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/calibrated_sculk_sensor.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/campfire.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/candle.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cauldron.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/chain.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cherry_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cherry_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cherry_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cherry_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/chest_minecart.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/clock.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/coast_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/compass.json (100%) create mode 100644 src/main/generated/data/minecraft/recipe/copper_door.json create mode 100644 src/main/generated/data/minecraft/recipe/copper_trapdoor.json create mode 100644 src/main/generated/data/minecraft/recipe/crafter.json rename src/main/generated/data/minecraft/{recipes => recipe}/crimson_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/crimson_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/crimson_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/crossbow.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/cyan_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dark_oak_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dark_oak_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dark_oak_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dark_oak_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/detector_rail.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_axe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_boots.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_chestplate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_helmet.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_hoe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_leggings.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_pickaxe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_shovel.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diamond_sword.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/diorite.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dispenser.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dropper.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/dune_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/enchanting_table.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/eye_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/fishing_rod.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/flint_and_steel.json (100%) create mode 100644 src/main/generated/data/minecraft/recipe/flow_armor_trim_smithing_template.json rename src/main/generated/data/minecraft/{recipes => recipe}/golden_apple.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_axe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_boots.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_chestplate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_helmet.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_hoe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_leggings.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_pickaxe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_shovel.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/golden_sword.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/gray_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/green_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/grindstone.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/heavy_weighted_pressure_plate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/hopper.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/host_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_axe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_bars.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_boots.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_chestplate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_door.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_helmet.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_hoe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_leggings.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_pickaxe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_shovel.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_sword.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/iron_trapdoor.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/item_frame.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/jukebox.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/jungle_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/jungle_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/jungle_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/jungle_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/ladder.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/lead.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/lever.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/light_blue_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/light_gray_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/light_weighted_pressure_plate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/lightning_rod.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/lime_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/lodestone.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/loom.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/magenta_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mangrove_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mangrove_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mangrove_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mangrove_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/minecart.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mossy_cobblestone_from_moss_block.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/mossy_cobblestone_from_vine.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/netherite_ingot.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/netherite_upgrade_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/oak_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/oak_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/oak_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/oak_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/observer.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/orange_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/painting.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/pink_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/piston.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/polished_deepslate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/powered_rail.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/purple_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/rail.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/raiser_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/red_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/redstone_torch.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/rib_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/scaffolding.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/sentry_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/shaper_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/shears.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/shield.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/shulker_box.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/silence_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/smithing_table.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/snout_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/soul_campfire.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/soul_torch.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spire_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spruce_chest_boat.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spruce_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spruce_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spruce_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/spyglass.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stone_axe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stone_hoe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stone_pickaxe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stone_shovel.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stone_sword.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/stonecutter.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/tide_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/tinted_glass.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/torch.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/trapped_chest.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/tripwire_hook.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/vex_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/ward_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/warped_fence.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/warped_fence_gate.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/warped_sign.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wayfinder_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/white_banner.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wild_armor_trim_smithing_template.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wooden_axe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wooden_hoe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wooden_pickaxe.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wooden_shovel.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/wooden_sword.json (100%) rename src/main/generated/data/minecraft/{recipes => recipe}/yellow_banner.json (100%) delete mode 100644 src/main/java/net/minecraftforge/client/gui/ScreenUtils.java delete mode 100644 src/main/java/net/minecraftforge/client/model/pipeline/RemappingVertexPipeline.java delete mode 100644 src/main/java/net/minecraftforge/common/extensions/IForgeEnchantment.java delete mode 100644 src/main/java/net/minecraftforge/common/util/ITeleporter.java rename src/main/resources/data/forge/{structures => structure}/empty3x3x3.nbt (100%) rename src/test/generated/conditional_loot_test/data/conditional_loot_test/{loot_tables => loot_table}/blocks/test.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/conditional_doesnt_load_empty.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/conditional_recipe_choice.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/cooking_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/cooking_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/shaped_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/shaped_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/shapeless_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/shapeless_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/singe_item_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/single_item_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{advancements => advancement}/recipes/test_encode_all_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/conditional_doesnt_load_empty.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/conditional_recipe_choice.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/cooking_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/cooking_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/shaped_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/shaped_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/shapeless_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/shapeless_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/singe_item_true_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/single_item_false_conditions.json (100%) rename src/test/generated/conditional_recipe/data/conditional_recipe/{recipes => recipe}/test_encode_all_conditions.json (100%) rename src/test/generated/criterion_test/data/criterion_test/{advancements => advancement}/break_glass_with_fish.json (100%) rename src/test/generated/criterion_test/data/criterion_test/tags/{items => item}/fish.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/compound_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/difference_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/intersection_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/partial_nbt_damage_only.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/partial_nbt_name_only.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{advancements => advancement}/recipes/misc/strict_nbt_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/compound_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/difference_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/intersection_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/partial_nbt_damage_only.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/partial_nbt_name_only.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/{recipes => recipe}/strict_nbt_ingredient.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/tags/{items => item}/left.json (100%) rename src/test/generated/custom_ingredients/data/custom_ingredients/tags/{items => item}/right.json (100%) create mode 100644 src/test/generated/global_loot_test/data/global_loot_test/enchantment/smelt.json rename src/test/generated/global_loot_test/data/global_loot_test/{loot_tables => loot_table}/blocks/test.json (100%) diff --git a/gradle.properties b/gradle.properties index 4909162882..c506e636e2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,11 +5,11 @@ org.gradle.daemon=false org.gradle.parallel=true JAVA_VERSION=21 -MC_VERSION=1.20.6 +MC_VERSION=1.21 MC_NEXT_VERSION=1.21 -MCP_VERSION=20240429.135109 +MCP_VERSION=20240613.102039 MAPPING_CHANNEL=official -MAPPING_VERSION=1.20.6 +MAPPING_VERSION=1.21 // Set to true before the first build of a new MC version, so we don't do compatibility checks CHECK_COMPATIBILITY=false diff --git a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch index 36a8cb19e5..debc4de3a3 100644 --- a/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/pipeline/RenderTarget.java.patch @@ -1,6 +1,6 @@ --- a/com/mojang/blaze3d/pipeline/RenderTarget.java +++ b/com/mojang/blaze3d/pipeline/RenderTarget.java -@@ -106,7 +_,10 @@ +@@ -104,7 +_,10 @@ GlStateManager._texParameter(3553, 34892, 0); GlStateManager._texParameter(3553, 10242, 33071); GlStateManager._texParameter(3553, 10243, 33071); @@ -11,7 +11,7 @@ } this.setFilterMode(9728, true); -@@ -116,8 +_,13 @@ +@@ -114,8 +_,13 @@ GlStateManager._texImage2D(3553, 0, 32856, this.width, this.height, 0, 6408, 5121, null); GlStateManager._glBindFramebuffer(36160, this.frameBufferId); GlStateManager._glFramebufferTexture2D(36160, 36064, 3553, this.colorTextureId, 0); @@ -26,7 +26,7 @@ } this.checkStatus(); -@@ -280,5 +_,26 @@ +@@ -257,5 +_,26 @@ public int getDepthTextureId() { return this.depthBufferId; diff --git a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch index e266b5cbcc..d9d1e8ebfa 100644 --- a/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/platform/Window.java.patch @@ -1,6 +1,6 @@ --- a/com/mojang/blaze3d/platform/Window.java +++ b/com/mojang/blaze3d/platform/Window.java -@@ -82,7 +_,8 @@ +@@ -84,7 +_,8 @@ GLFW.glfwWindowHint(139267, 2); GLFW.glfwWindowHint(139272, 204801); GLFW.glfwWindowHint(139270, 1); @@ -10,7 +10,7 @@ if (monitor != null) { VideoMode videomode = monitor.getPreferredVidMode(this.fullscreen ? this.preferredFullscreenVideoMode : Optional.empty()); this.windowedX = this.x = monitor.getX() + videomode.getWidth() / 2 - this.width / 2; -@@ -94,6 +_,7 @@ +@@ -96,6 +_,7 @@ this.windowedX = this.x = aint1[0]; this.windowedY = this.y = aint[0]; } @@ -18,7 +18,7 @@ GLFW.glfwMakeContextCurrent(this.window); GL.createCapabilities(); -@@ -242,6 +_,9 @@ +@@ -254,6 +_,9 @@ GLFW.glfwGetFramebufferSize(this.window, aint, aint1); this.framebufferWidth = aint[0] > 0 ? aint[0] : 1; this.framebufferHeight = aint1[0] > 0 ? aint1[0] : 1; diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch deleted file mode 100644 index 6fb76b19c2..0000000000 --- a/patches/minecraft/com/mojang/blaze3d/vertex/BufferBuilder.java.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/com/mojang/blaze3d/vertex/BufferBuilder.java -+++ b/com/mojang/blaze3d/vertex/BufferBuilder.java -@@ -389,6 +_,15 @@ - return MemoryUtil.memSlice(this.buffer, p_231170_, p_231171_ - p_231170_); - } - -+ public void putBulkData(ByteBuffer buffer) { -+ ensureCapacity(buffer.limit() + this.format.getVertexSize()); -+ this.buffer.position(this.nextElementByte); -+ this.buffer.put(buffer); -+ this.buffer.position(0); -+ this.vertices += buffer.limit() / this.format.getVertexSize(); -+ this.nextElementByte += buffer.limit(); -+ } -+ - @OnlyIn(Dist.CLIENT) - public static record DrawState( - VertexFormat format, int vertexCount, int indexCount, VertexFormat.Mode mode, VertexFormat.IndexType indexType, boolean indexOnly, boolean sequentialIndex diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java.patch index 556f94340f..bf5aa5876e 100644 --- a/patches/minecraft/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java.patch @@ -1,11 +1,11 @@ --- a/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java +++ b/com/mojang/blaze3d/vertex/SheetedDecalTextureGenerator.java -@@ -47,7 +_,7 @@ - @Override - public void endVertex() { - Vector3f vector3f = this.normalInversePose.transform(new Vector3f(this.nx, this.ny, this.nz)); +@@ -62,7 +_,7 @@ + public VertexConsumer setNormal(float p_344306_, float p_342091_, float p_344579_) { + this.delegate.setNormal(p_344306_, p_342091_, p_344579_); + Vector3f vector3f = this.normalInversePose.transform(p_344306_, p_342091_, p_344579_, this.normal); - Direction direction = Direction.getNearest(vector3f.x(), vector3f.y(), vector3f.z()); + Direction direction = net.minecraftforge.client.ForgeHooksClient.getNearestStable(vector3f.x(), vector3f.y(), vector3f.z()); - Vector4f vector4f = this.cameraInversePose.transform(new Vector4f(this.x, this.y, this.z, 1.0F)); - vector4f.rotateY((float) Math.PI); - vector4f.rotateX((float) (-Math.PI / 2)); + Vector3f vector3f1 = this.cameraInversePose.transformPosition(this.x, this.y, this.z, this.worldPos); + vector3f1.rotateY((float) Math.PI); + vector3f1.rotateX((float) (-Math.PI / 2)); diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch index 1492481869..51ed6b49c0 100644 --- a/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/vertex/VertexConsumer.java.patch @@ -1,24 +1,24 @@ --- a/com/mojang/blaze3d/vertex/VertexConsumer.java +++ b/com/mojang/blaze3d/vertex/VertexConsumer.java -@@ -13,7 +_,7 @@ +@@ -12,7 +_,7 @@ import org.lwjgl.system.MemoryStack; @OnlyIn(Dist.CLIENT) -public interface VertexConsumer { +public interface VertexConsumer extends net.minecraftforge.client.extensions.IForgeVertexConsumer { - VertexConsumer vertex(double p_85945_, double p_85946_, double p_85947_); + VertexConsumer addVertex(float p_344294_, float p_342213_, float p_344859_); - VertexConsumer color(int p_85973_, int p_85974_, int p_85975_, int p_85976_); -@@ -142,10 +_,11 @@ - f5 = afloat[k] * p_85992_; + VertexConsumer setColor(int p_342749_, int p_344324_, int p_343336_, int p_342831_); +@@ -135,10 +_,11 @@ } -- int l = aint[k]; -+ int l = applyBakedLighting(aint[k], bytebuffer); - float f9 = bytebuffer.getFloat(16); - float f10 = bytebuffer.getFloat(20); - Vector4f vector4f = matrix4f.transform(new Vector4f(f, f1, f2, 1.0F)); + int i1 = FastColor.ARGB32.color(k, (int)f3, (int)f4, (int)f5); +- int j1 = p_331444_[l]; ++ int j1 = applyBakedLighting(p_331444_[l], bytebuffer); + float f10 = bytebuffer.getFloat(16); + float f9 = bytebuffer.getFloat(20); + Vector3f vector3f1 = matrix4f.transformPosition(f, f1, f2, new Vector3f()); + applyBakedNormals(vector3f, bytebuffer, p_85988_.normal()); - this.vertex(vector4f.x(), vector4f.y(), vector4f.z(), f3, f4, f5, p_335371_, f9, f10, p_85993_, l, vector3f.x(), vector3f.y(), vector3f.z()); + this.addVertex(vector3f1.x(), vector3f1.y(), vector3f1.z(), i1, f10, f9, p_85993_, j1, vector3f.x(), vector3f.y(), vector3f.z()); } } diff --git a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch index d5dfcc04cb..a4d471cdb2 100644 --- a/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch +++ b/patches/minecraft/com/mojang/blaze3d/vertex/VertexFormat.java.patch @@ -1,21 +1,41 @@ --- a/com/mojang/blaze3d/vertex/VertexFormat.java +++ b/com/mojang/blaze3d/vertex/VertexFormat.java -@@ -12,7 +_,7 @@ +@@ -13,7 +_,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) -public class VertexFormat { +public class VertexFormat implements net.minecraftforge.client.extensions.IForgeVertexFormat { - private final ImmutableList elements; - private final ImmutableMap elementMapping; - private final IntList offsets = new IntArrayList(); -@@ -113,6 +_,9 @@ + public static final int UNKNOWN_ELEMENT = -1; + private final List elements; + private final List names; +@@ -22,6 +_,7 @@ + private final int[] offsetsByElement = new int[32]; + @Nullable + private VertexBuffer immediateDrawVertexBuffer; ++ private final com.google.common.collect.ImmutableMap elementMapping; + + VertexFormat(List p_343616_, List p_345241_, IntList p_345522_, int p_344162_) { + this.elements = p_343616_; +@@ -34,6 +_,11 @@ + int j = vertexformatelement != null ? p_343616_.indexOf(vertexformatelement) : -1; + this.offsetsByElement[i] = j != -1 ? p_345522_.getInt(j) : -1; + } ++ ++ ImmutableMap.Builder elements = ImmutableMap.builder(); ++ for (int i = 0; i < p_343616_.size(); i++) ++ elements.put(p_345241_.get(i), p_343616_.get(i)); ++ this.elementMapping = elements.buildOrThrow(); + } + + public static VertexFormat.Builder builder() { +@@ -158,6 +_,9 @@ return vertexbuffer; } + + public ImmutableMap getElementMapping() { return elementMapping; } -+ public int getOffset(int index) { return offsets.getInt(index); } ++ public int getOffset(int index) { return offsetsByElement[index]; } @OnlyIn(Dist.CLIENT) - public static enum IndexType { + public static class Builder { diff --git a/patches/minecraft/net/minecraft/CrashReport.java.patch b/patches/minecraft/net/minecraft/CrashReport.java.patch index c86740726f..7cc8adff3a 100644 --- a/patches/minecraft/net/minecraft/CrashReport.java.patch +++ b/patches/minecraft/net/minecraft/CrashReport.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/CrashReport.java +++ b/net/minecraft/CrashReport.java -@@ -59,14 +_,9 @@ +@@ -58,14 +_,9 @@ if (this.uncategorizedStackTrace != null && this.uncategorizedStackTrace.length > 0) { p_127520_.append("-- Head --\n"); p_127520_.append("Thread: ").append(Thread.currentThread().getName()).append("\n"); @@ -18,7 +18,7 @@ } for (CrashReportCategory crashreportcategory : this.details) { -@@ -74,6 +_,7 @@ +@@ -73,6 +_,7 @@ p_127520_.append("\n\n"); } @@ -26,7 +26,7 @@ this.systemReport.appendToCrashReportString(p_127520_); } -@@ -93,18 +_,7 @@ +@@ -92,18 +_,7 @@ throwable.setStackTrace(this.exception.getStackTrace()); } @@ -45,4 +45,4 @@ + return net.minecraftforge.logging.CrashReportExtender.generateEnhancedStackTrace(throwable); } - public String getFriendlyReport() { + public String getFriendlyReport(ReportType p_343869_, List p_342487_) { diff --git a/patches/minecraft/net/minecraft/SharedConstants.java.patch b/patches/minecraft/net/minecraft/SharedConstants.java.patch index 578d3eea38..224810a1bc 100644 --- a/patches/minecraft/net/minecraft/SharedConstants.java.patch +++ b/patches/minecraft/net/minecraft/SharedConstants.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/SharedConstants.java +++ b/net/minecraft/SharedConstants.java -@@ -181,6 +_,7 @@ +@@ -171,6 +_,7 @@ } static { diff --git a/patches/minecraft/net/minecraft/advancements/Advancement.java.patch b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch index aade55343d..436c0bbccd 100644 --- a/patches/minecraft/net/minecraft/advancements/Advancement.java.patch +++ b/patches/minecraft/net/minecraft/advancements/Advancement.java.patch @@ -4,8 +4,8 @@ } public AdvancementHolder save(Consumer p_138390_, String p_138391_) { -- AdvancementHolder advancementholder = this.build(new ResourceLocation(p_138391_)); -+ return save(p_138390_, new ResourceLocation(p_138391_)); +- AdvancementHolder advancementholder = this.build(ResourceLocation.parse(p_138391_)); ++ return save(p_138390_, ResourceLocation.parse(p_138391_)); + } + + public AdvancementHolder save(Consumer p_138390_, ResourceLocation id) { diff --git a/patches/minecraft/net/minecraft/client/Camera.java.patch b/patches/minecraft/net/minecraft/client/Camera.java.patch index 6c1ba59508..41fb46d237 100644 --- a/patches/minecraft/net/minecraft/client/Camera.java.patch +++ b/patches/minecraft/net/minecraft/client/Camera.java.patch @@ -1,12 +1,24 @@ --- a/net/minecraft/client/Camera.java +++ b/net/minecraft/client/Camera.java -@@ -227,6 +_,18 @@ - return this.partialTickTime; +@@ -105,9 +_,13 @@ } -+ public void setAnglesInternal(float yaw, float pitch) { -+ this.yRot = yaw; -+ this.xRot = pitch; + protected void setRotation(float p_90573_, float p_90574_) { ++ setRotation(p_90573_, p_90574_, 0.0f); ++ } ++ ++ public void setRotation(float p_90573_, float p_90574_, float z) { + this.xRot = p_90574_; + this.yRot = p_90573_; +- this.rotation.rotationYXZ((float) Math.PI - p_90573_ * (float) (Math.PI / 180.0), -p_90574_ * (float) (Math.PI / 180.0), 0.0F); ++ this.rotation.rotationYXZ((float) Math.PI - p_90573_ * (float) (Math.PI / 180.0), -p_90574_ * (float) (Math.PI / 180.0), z * (float) (Math.PI / 180.0)); + FORWARDS.rotate(this.rotation, this.forwards); + UP.rotate(this.rotation, this.up); + LEFT.rotate(this.rotation, this.left); +@@ -223,6 +_,13 @@ + + public float getPartialTickTime() { + return this.partialTickTime; + } + + public net.minecraft.world.level.block.state.BlockState getBlockAtCamera() { @@ -14,8 +26,6 @@ + return net.minecraft.world.level.block.Blocks.AIR.defaultBlockState(); + else + return this.level.getBlockState(this.blockPosition).getStateAtViewpoint(this.level, this.blockPosition, this.position); -+ } -+ + } + @OnlyIn(Dist.CLIENT) - public static class NearPlane { - final Vec3 forward; diff --git a/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch b/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch new file mode 100644 index 0000000000..28a485d707 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/DeltaTracker.java.patch @@ -0,0 +1,25 @@ +--- a/net/minecraft/client/DeltaTracker.java ++++ b/net/minecraft/client/DeltaTracker.java +@@ -87,18 +_,22 @@ + + private void pause() { + if (!this.paused) { ++ if (net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePre(true)) return; + this.pausedDeltaTickResidual = this.deltaTickResidual; + } + + this.paused = true; ++ net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePost(true); + } + + private void unPause() { + if (this.paused) { ++ if (net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePre(false)) return; + this.deltaTickResidual = this.pausedDeltaTickResidual; + } + + this.paused = false; ++ net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePost(false); + } + + public void updateFrozenState(boolean p_344005_) { diff --git a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch index f7caacad9c..418774aa87 100644 --- a/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch +++ b/patches/minecraft/net/minecraft/client/KeyboardHandler.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/KeyboardHandler.java +++ b/net/minecraft/client/KeyboardHandler.java -@@ -410,9 +_,9 @@ +@@ -405,9 +_,9 @@ Screen.wrapScreenError(() -> { if (p_90897_ == 1 || p_90897_ == 2) { screen.afterKeyboardAction(); @@ -12,7 +12,7 @@ } }, "keyPressed event handler", screen.getClass().getCanonicalName()); if (aboolean[0]) { -@@ -481,20 +_,21 @@ +@@ -476,20 +_,21 @@ } } } diff --git a/patches/minecraft/net/minecraft/client/Minecraft.java.patch b/patches/minecraft/net/minecraft/client/Minecraft.java.patch index b1873252c2..c070876db2 100644 --- a/patches/minecraft/net/minecraft/client/Minecraft.java.patch +++ b/patches/minecraft/net/minecraft/client/Minecraft.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/Minecraft.java +++ b/net/minecraft/client/Minecraft.java -@@ -259,7 +_,7 @@ +@@ -254,7 +_,7 @@ import org.slf4j.Logger; @OnlyIn(Dist.CLIENT) @@ -9,7 +9,7 @@ static Minecraft instance; private static final Logger LOGGER = LogUtils.getLogger(); public static final boolean ON_OSX = Util.getPlatform() == Util.OS.OSX; -@@ -438,7 +_,6 @@ +@@ -431,7 +_,6 @@ } }, Util.nonCriticalIoPool()); LOGGER.info("Setting user: {}", this.user.getName()); @@ -17,7 +17,7 @@ this.demo = p_91084_.game.demo; this.allowsMultiplayer = !p_91084_.game.disableMultiplayer; this.allowsChat = !p_91084_.game.disableChat; -@@ -475,15 +_,15 @@ +@@ -468,15 +_,15 @@ } this.window.setFramerateLimit(this.options.framerateLimit().get()); @@ -34,8 +34,8 @@ + net.minecraftforge.client.loading.ClientModLoader.begin(this, this.resourcePackRepository, this.resourceManager); this.resourcePackRepository.reload(); this.options.loadSelectedResourcePacks(this.resourcePackRepository); - this.languageManager = new LanguageManager(this.options.languageCode); -@@ -542,6 +_,7 @@ + this.languageManager = new LanguageManager(this.options.languageCode, p_340763_ -> { +@@ -540,6 +_,7 @@ this.entityRenderDispatcher = new EntityRenderDispatcher(this, this.textureManager, this.itemRenderer, this.blockRenderer, this.font, this.options, this.entityModels); this.resourceManager.registerReloadListener(this.entityRenderDispatcher); this.particleEngine = new ParticleEngine(this.level, this.textureManager); @@ -43,16 +43,12 @@ this.resourceManager.registerReloadListener(this.particleEngine); this.paintingTextures = new PaintingTextureManager(this.textureManager); this.resourceManager.registerReloadListener(this.paintingTextures); -@@ -554,13 +_,18 @@ +@@ -552,11 +_,15 @@ this.gameRenderer = new GameRenderer(this, this.entityRenderDispatcher.getItemInHandRenderer(), this.resourceManager, this.renderBuffers); this.resourceManager.registerReloadListener(this.gameRenderer.createReloadListener()); this.levelRenderer = new LevelRenderer(this, this.entityRenderDispatcher, this.blockEntityRenderDispatcher, this.renderBuffers); + net.minecraftforge.fml.ModLoader.get().postEvent(new net.minecraftforge.client.event.RenderLevelStageEvent.RegisterStageEvent()); this.resourceManager.registerReloadListener(this.levelRenderer); -- this.createSearchTrees(); -+ // Forge: We delay this to allow registration of modded creative mode tabs -+ //this.createSearchTrees(); - this.resourceManager.registerReloadListener(this.searchRegistry); this.gpuWarnlistManager = new GpuWarnlistManager(); this.resourceManager.registerReloadListener(this.gpuWarnlistManager); this.resourceManager.registerReloadListener(this.regionalCompliancies); @@ -63,7 +59,7 @@ this.debugRenderer = new DebugRenderer(this); RealmsClient realmsclient = RealmsClient.create(this); this.realmsDataFetcher = new RealmsDataFetcher(realmsclient); -@@ -584,6 +_,7 @@ +@@ -580,6 +_,7 @@ this.options.fullscreen().set(this.window.isFullscreen()); } @@ -71,7 +67,7 @@ this.window.updateVsync(this.options.enableVsync().get()); this.window.updateRawMouseInput(this.options.rawMouseInput().get()); this.window.setDefaultErrorCallback(); -@@ -604,16 +_,17 @@ +@@ -600,16 +_,17 @@ GameLoadTimesEvent.INSTANCE.beginStep(TelemetryProperty.LOAD_TIME_LOADING_OVERLAY_MS); Minecraft.GameLoadCookie minecraft$gameloadcookie = new Minecraft.GameLoadCookie(realmsclient, p_91084_.quickPlay); this.setOverlay( @@ -92,7 +88,7 @@ ); this.quickPlayLog = QuickPlayLog.of(p_91084_.quickPlay.path()); } -@@ -702,6 +_,7 @@ +@@ -698,6 +_,7 @@ StringBuilder stringbuilder = new StringBuilder("Minecraft"); if (checkModStatus().shouldReportAsModified()) { stringbuilder.append("*"); @@ -100,7 +96,7 @@ } stringbuilder.append(" "); -@@ -725,6 +_,8 @@ +@@ -721,6 +_,8 @@ } private UserApiService createUserApiService(YggdrasilAuthenticationService p_193586_, GameConfig p_193587_) { @@ -109,7 +105,7 @@ return p_193587_.user.user.getType() != User.Type.MSA ? UserApiService.OFFLINE : p_193586_.createUserApiService(p_193587_.user.user.getAccessToken()); -@@ -735,7 +_,7 @@ +@@ -731,7 +_,7 @@ } private void rollbackResourcePacks(Throwable p_91240_, @Nullable Minecraft.GameLoadCookie p_299515_) { @@ -118,48 +114,7 @@ this.clearResourcePacksOnError(p_91240_, null, p_299515_); } else { Util.throwAsRuntime(p_91240_); -@@ -817,9 +_,12 @@ - } - - public void createSearchTrees() { -+ var nameSearchKeys = net.minecraftforge.client.CreativeModeTabSearchRegistry.getNameSearchKeys(); -+ var tagSearchKeys = net.minecraftforge.client.CreativeModeTabSearchRegistry.getTagSearchKeys(); -+ for (var nameSearchKey : nameSearchKeys.values()) - this.searchRegistry - .register( -- SearchRegistry.CREATIVE_NAMES, -+ nameSearchKey, - p_231451_ -> new FullTextSearchTree<>( - p_325272_ -> p_325272_.getTooltipLines(Item.TooltipContext.EMPTY, null, TooltipFlag.Default.NORMAL.asCreative()) - .stream() -@@ -829,8 +_,9 @@ - p_231451_ - ) - ); -+ for (var tagSearchKey : tagSearchKeys.values()) - this.searchRegistry -- .register(SearchRegistry.CREATIVE_TAGS, p_231430_ -> new IdSearchTree<>(p_231353_ -> p_231353_.getTags().map(TagKey::location), p_231430_)); -+ .register(tagSearchKey, p_231430_ -> new IdSearchTree<>(p_231353_ -> p_231353_.getTags().map(TagKey::location), p_231430_)); - this.searchRegistry - .register( - SearchRegistry.RECIPE_COLLECTIONS, -@@ -854,9 +_,12 @@ - p_301514_ - ) - ); -- CreativeModeTabs.searchTab().setSearchTreeBuilder(p_255439_ -> { -- this.populateSearchTree(SearchRegistry.CREATIVE_NAMES, p_255439_); -- this.populateSearchTree(SearchRegistry.CREATIVE_TAGS, p_255439_); -+ nameSearchKeys.forEach((tab, nameSearchKey) -> { -+ var tagSearchKey = tagSearchKeys.get(tab); -+ tab.setSearchTreeBuilder(contents -> { -+ this.populateSearchTree(nameSearchKey, contents); -+ this.populateSearchTree(tagSearchKey, contents); -+ }); - }); - } - -@@ -1039,12 +_,6 @@ +@@ -991,12 +_,6 @@ LOGGER.error("setScreen called from non-game thread"); } @@ -172,7 +127,7 @@ if (p_91153_ == null && this.clientLevelTeardownInProgress) { throw new IllegalStateException("Trying to return to in-game GUI during disconnection"); } else { -@@ -1058,6 +_,23 @@ +@@ -1010,6 +_,23 @@ } } @@ -196,37 +151,19 @@ this.screen = p_91153_; if (this.screen != null) { this.screen.added(); -@@ -1204,9 +_,12 @@ +@@ -1155,9 +_,11 @@ this.mouseHandler.handleAccumulatedMovement(); this.profiler.pop(); if (!this.noRender) { -+ this.realPartialTick = this.pause ? this.pausePartialTick : this.timer.partialTick; // Cache this since pause is volatile -+ net.minecraftforge.event.ForgeEventFactory.onRenderTickStart(this.realPartialTick); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickStart(this.timer); this.profiler.popPush("gameRenderer"); - this.gameRenderer.render(this.pause ? this.pausePartialTick : this.timer.partialTick, i, p_91384_); + this.gameRenderer.render(this.timer, p_91384_); this.profiler.pop(); -+ net.minecraftforge.event.ForgeEventFactory.onRenderTickEnd(this.realPartialTick); ++ net.minecraftforge.client.event.ForgeEventFactoryClient.onRenderTickEnd(this.timer); } if (this.fpsPieResults != null) { -@@ -1240,7 +_,7 @@ - boolean flag1 = this.hasSingleplayerServer() - && (this.screen != null && this.screen.isPauseScreen() || this.overlay != null && this.overlay.isPauseScreen()) - && !this.singleplayerServer.isPublished(); -- if (this.pause != flag1) { -+ if (this.pause != flag1 && !net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePre(flag1)) { - if (flag1) { - this.pausePartialTick = this.timer.partialTick; - } else { -@@ -1248,6 +_,7 @@ - } - - this.pause = flag1; -+ net.minecraftforge.client.ForgeHooksClient.onClientPauseChangePost(flag1); - } - - long l = Util.getNanos(); -@@ -1340,10 +_,12 @@ +@@ -1283,10 +_,12 @@ this.window.setGuiScale((double)i); if (this.screen != null) { this.screen.resize(this, this.window.getGuiScaledWidth(), this.window.getGuiScaledHeight()); @@ -239,7 +176,7 @@ this.gameRenderer.resize(this.window.getWidth(), this.window.getHeight()); this.mouseHandler.setIgnoreFirstMove(); } -@@ -1619,6 +_,7 @@ +@@ -1554,6 +_,7 @@ } public void stop() { @@ -247,7 +184,7 @@ this.running = false; } -@@ -1647,10 +_,18 @@ +@@ -1582,10 +_,18 @@ if (p_91387_ && this.hitResult != null && this.hitResult.getType() == HitResult.Type.BLOCK) { BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; BlockPos blockpos = blockhitresult.getBlockPos(); @@ -269,7 +206,7 @@ this.player.swing(InteractionHand.MAIN_HAND); } } -@@ -1678,6 +_,8 @@ +@@ -1613,6 +_,8 @@ return false; } else { boolean flag = false; @@ -278,7 +215,7 @@ switch (this.hitResult.getType()) { case ENTITY: this.gameMode.attack(this.player, ((EntityHitResult)this.hitResult).getEntity()); -@@ -1685,7 +_,7 @@ +@@ -1620,7 +_,7 @@ case BLOCK: BlockHitResult blockhitresult = (BlockHitResult)this.hitResult; BlockPos blockpos = blockhitresult.getBlockPos(); @@ -287,7 +224,7 @@ this.gameMode.startDestroyBlock(blockpos, blockhitresult.getDirection()); if (this.level.getBlockState(blockpos).isAir()) { flag = true; -@@ -1698,8 +_,10 @@ +@@ -1633,8 +_,10 @@ } this.player.resetAttackStrengthTicker(); @@ -298,7 +235,7 @@ this.player.swing(InteractionHand.MAIN_HAND); return flag; } -@@ -1715,6 +_,12 @@ +@@ -1650,6 +_,12 @@ } for (InteractionHand interactionhand : InteractionHand.values()) { @@ -311,7 +248,7 @@ ItemStack itemstack = this.player.getItemInHand(interactionhand); if (!itemstack.isItemEnabled(this.level.enabledFeatures())) { return; -@@ -1735,7 +_,7 @@ +@@ -1670,7 +_,7 @@ } if (interactionresult.consumesAction()) { @@ -320,7 +257,7 @@ this.player.swing(interactionhand); } -@@ -1747,7 +_,7 @@ +@@ -1682,7 +_,7 @@ int i = itemstack.getCount(); InteractionResult interactionresult1 = this.gameMode.useItemOn(this.player, interactionhand, blockhitresult); if (interactionresult1.consumesAction()) { @@ -329,7 +266,7 @@ this.player.swing(interactionhand); if (!itemstack.isEmpty() && (itemstack.getCount() != i || this.gameMode.hasInfiniteItems())) { this.gameRenderer.itemInHandRenderer.itemUsed(interactionhand); -@@ -1763,6 +_,9 @@ +@@ -1698,6 +_,9 @@ } } @@ -339,7 +276,7 @@ if (!itemstack.isEmpty()) { InteractionResult interactionresult2 = this.gameMode.useItem(this.player, interactionhand); if (interactionresult2.consumesAction()) { -@@ -1793,6 +_,8 @@ +@@ -1728,6 +_,8 @@ this.rightClickDelay--; } @@ -348,7 +285,7 @@ this.profiler.push("gui"); this.chatListener.tick(); this.gui.tick(this.pause); -@@ -1877,6 +_,7 @@ +@@ -1811,6 +_,7 @@ this.tutorial.tick(); @@ -356,7 +293,7 @@ try { this.level.tick(() -> true); } catch (Throwable throwable) { -@@ -1890,6 +_,7 @@ +@@ -1824,6 +_,7 @@ throw new ReportedException(crashreport); } @@ -364,15 +301,15 @@ } this.profiler.popPush("animateTick"); -@@ -1909,6 +_,7 @@ +@@ -1843,6 +_,7 @@ this.profiler.popPush("keyboard"); this.keyboardHandler.tick(); this.profiler.pop(); + net.minecraftforge.event.ForgeEventFactory.onPostClientTick(); } - private boolean isMultiplayerServer() { -@@ -2105,6 +_,7 @@ + private boolean isLevelRunningNormally() { +@@ -2043,6 +_,7 @@ } public void setLevel(ClientLevel p_91157_, ReceivingLevelScreen.Reason p_335893_) { @@ -380,7 +317,7 @@ this.updateScreenAndTick(new ReceivingLevelScreen(() -> false, p_335893_)); this.level = p_91157_; this.updateLevelInEngines(p_91157_); -@@ -2142,6 +_,7 @@ +@@ -2080,6 +_,7 @@ IntegratedServer integratedserver = this.singleplayerServer; this.singleplayerServer = null; this.gameRenderer.resetData(); @@ -388,7 +325,7 @@ this.gameMode = null; this.narrator.clear(); this.clientLevelTeardownInProgress = true; -@@ -2149,6 +_,7 @@ +@@ -2087,6 +_,7 @@ try { this.updateScreenAndTick(p_335030_); if (this.level != null) { @@ -396,7 +333,7 @@ if (integratedserver != null) { this.profiler.push("waitForServer"); -@@ -2161,6 +_,7 @@ +@@ -2099,6 +_,7 @@ this.gui.onDisconnected(); this.isLocalServer = false; @@ -404,7 +341,7 @@ } this.level = null; -@@ -2307,6 +_,7 @@ +@@ -2245,6 +_,7 @@ private void pickBlock() { if (this.hitResult != null && this.hitResult.getType() != HitResult.Type.MISS) { @@ -412,7 +349,7 @@ boolean flag = this.player.getAbilities().instabuild; BlockEntity blockentity = null; HitResult.Type hitresult$type = this.hitResult.getType(); -@@ -2319,7 +_,7 @@ +@@ -2257,7 +_,7 @@ } Block block = blockstate.getBlock(); @@ -421,7 +358,7 @@ if (itemstack.isEmpty()) { return; } -@@ -2333,7 +_,7 @@ +@@ -2271,7 +_,7 @@ } Entity entity = ((EntityHitResult)this.hitResult).getEntity(); @@ -430,7 +367,7 @@ if (itemstack == null) { return; } -@@ -2931,6 +_,19 @@ +@@ -2855,6 +_,10 @@ @Nullable public static String getLauncherBrand() { return System.getProperty("minecraft.launcher.brand"); @@ -438,15 +375,6 @@ + + public ItemColors getItemColors() { + return this.itemColors; -+ } -+ -+ public SearchRegistry getSearchTreeManager() { -+ return this.searchRegistry; -+ } -+ -+ private float realPartialTick; -+ public float getPartialTick() { -+ return this.realPartialTick; } @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch index 1448135626..e9209f6d48 100644 --- a/patches/minecraft/net/minecraft/client/MouseHandler.java.patch +++ b/patches/minecraft/net/minecraft/client/MouseHandler.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/MouseHandler.java +++ b/net/minecraft/client/MouseHandler.java -@@ -74,6 +_,7 @@ +@@ -79,6 +_,7 @@ this.activeButton = -1; } @@ -8,7 +8,7 @@ boolean[] aboolean = new boolean[]{false}; if (this.minecraft.getOverlay() == null) { if (this.minecraft.screen == null) { -@@ -86,9 +_,9 @@ +@@ -91,9 +_,9 @@ Screen screen = this.minecraft.screen; if (flag) { screen.afterMouseAction(); @@ -20,7 +20,7 @@ } } } -@@ -111,6 +_,7 @@ +@@ -116,6 +_,7 @@ } } } @@ -28,7 +28,7 @@ } } -@@ -124,7 +_,9 @@ +@@ -129,7 +_,9 @@ if (this.minecraft.screen != null) { double d3 = this.xpos * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth(); double d4 = this.ypos * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight(); @@ -39,7 +39,7 @@ this.minecraft.screen.afterMouseAction(); } else if (this.minecraft.player != null) { if (this.accumulatedScrollX != 0.0 && Math.signum(d1) != Math.signum(this.accumulatedScrollX)) { -@@ -146,6 +_,7 @@ +@@ -151,6 +_,7 @@ this.accumulatedScrollX -= (double)j; this.accumulatedScrollY -= (double)i; int k = i == 0 ? -j : i; @@ -47,7 +47,7 @@ if (this.minecraft.player.isSpectator()) { if (this.minecraft.gui.getSpectatorGui().isMenuActive()) { this.minecraft.gui.getSpectatorGui().onMouseScrolled(-k); -@@ -216,7 +_,7 @@ +@@ -236,7 +_,7 @@ if (this.activeButton != -1 && this.mousePressedTime > 0.0) { double d4 = this.accumulatedDX * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth(); double d5 = this.accumulatedDY * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight(); @@ -56,7 +56,7 @@ } screen.afterMouseMove(); -@@ -283,6 +_,14 @@ +@@ -303,6 +_,14 @@ public double ypos() { return this.ypos; diff --git a/patches/minecraft/net/minecraft/client/Options.java.patch b/patches/minecraft/net/minecraft/client/Options.java.patch index d339d6a7b3..03f039ca68 100644 --- a/patches/minecraft/net/minecraft/client/Options.java.patch +++ b/patches/minecraft/net/minecraft/client/Options.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/Options.java +++ b/net/minecraft/client/Options.java -@@ -680,7 +_,8 @@ +@@ -681,7 +_,8 @@ }, new OptionInstance.LazyEnum<>( () -> Stream.concat(Stream.of(""), Minecraft.getInstance().getSoundManager().getAvailableSoundDevices().stream()).toList(), @@ -10,7 +10,7 @@ ? Optional.empty() : Optional.of(p_232011_), Codec.STRING -@@ -1044,6 +_,7 @@ +@@ -1050,6 +_,7 @@ } public Options(Minecraft p_92138_, File p_92139_) { @@ -18,7 +18,7 @@ this.minecraft = p_92138_; this.optionsFile = new File(p_92139_, "options.txt"); boolean flag = Runtime.getRuntime().maxMemory() >= 1000000000L; -@@ -1178,12 +_,22 @@ +@@ -1184,12 +_,22 @@ p_168428_.process("telemetryOptInExtra", this.telemetryOptInExtra); this.onboardAccessibility = p_168428_.process("onboardAccessibility", this.onboardAccessibility); p_168428_.process("menuBackgroundBlurriness", this.menuBackgroundBlurriness); @@ -42,7 +42,7 @@ } } -@@ -1201,6 +_,10 @@ +@@ -1207,6 +_,10 @@ } public void load() { @@ -53,7 +53,7 @@ try { if (!this.optionsFile.exists()) { return; -@@ -1228,7 +_,8 @@ +@@ -1234,7 +_,8 @@ } } @@ -63,7 +63,7 @@ new Options.FieldAccess() { @Nullable private String getValueOrNull(String p_168459_) { -@@ -1422,6 +_,7 @@ +@@ -1428,6 +_,7 @@ } public void broadcastOptions() { @@ -71,7 +71,7 @@ if (this.minecraft.player != null) { this.minecraft.player.connection.send(new ServerboundClientInformationPacket(this.buildPlayerInformation())); } -@@ -1544,6 +_,23 @@ +@@ -1546,6 +_,23 @@ public static Component genericValueLabel(Component p_231901_, int p_231902_) { return genericValueLabel(p_231901_, Component.literal(Integer.toString(p_231902_))); @@ -94,4 +94,4 @@ + keySmoothCamera.setKeyConflictContext(inGame); } - @OnlyIn(Dist.CLIENT) + public static Component genericValueOrOffLabel(Component p_345288_, int p_344826_) { diff --git a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch index 0ce61191c6..86073bf72a 100644 --- a/patches/minecraft/net/minecraft/client/gui/Gui.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/Gui.java.patch @@ -9,7 +9,7 @@ private final SubtitleOverlay subtitleOverlay; private final SpectatorGui spectatorGui; private final PlayerTabOverlay tabList; -@@ -320,7 +_,7 @@ +@@ -318,7 +_,7 @@ Window window = this.minecraft.getWindow(); int i = Mth.floor(this.minecraft.mouseHandler.xpos() * (double)window.getGuiScaledWidth() / (double)window.getScreenWidth()); int j = Mth.floor(this.minecraft.mouseHandler.ypos() * (double)window.getGuiScaledHeight() / (double)window.getScreenHeight()); @@ -18,7 +18,7 @@ } } -@@ -444,6 +_,8 @@ +@@ -434,6 +_,8 @@ for (MobEffectInstance mobeffectinstance : Ordering.natural().reverse().sortedCopy(collection)) { Holder holder = mobeffectinstance.getEffect(); @@ -27,7 +27,7 @@ if (mobeffectinstance.showIcon()) { int i = p_282812_.guiWidth(); int j = 1; -@@ -473,6 +_,7 @@ +@@ -463,6 +_,7 @@ } } @@ -35,7 +35,7 @@ TextureAtlasSprite textureatlassprite = mobeffecttexturemanager.get(holder); int l1 = i; int i1 = j; -@@ -635,6 +_,10 @@ +@@ -625,6 +_,10 @@ } private void renderSelectedItemName(GuiGraphics p_283501_) { @@ -46,7 +46,7 @@ this.minecraft.getProfiler().push("selectedItemName"); if (this.toolHighlightTimer > 0 && !this.lastToolHighlight.isEmpty()) { MutableComponent mutablecomponent = Component.empty().append(this.lastToolHighlight.getHoverName()).withStyle(this.lastToolHighlight.getRarity().color()); -@@ -642,9 +_,10 @@ +@@ -632,9 +_,10 @@ mutablecomponent.withStyle(ChatFormatting.ITALIC); } @@ -59,10 +59,10 @@ if (!this.minecraft.gameMode.canHurtPlayer()) { k += 14; } -@@ -657,6 +_,13 @@ +@@ -646,6 +_,13 @@ + if (l > 0) { - p_283501_.fill(j - 2, k - 2, j + i + 2, k + 9 + 2, this.minecraft.options.getBackgroundColor(0)); - p_283501_.drawString(this.getFont(), mutablecomponent, j, k, 16777215 + (l << 24)); + p_283501_.drawStringWithBackdrop(this.getFont(), mutablecomponent, j, k, i, FastColor.ARGB32.color(l, -1)); + Font font = net.minecraftforge.client.extensions.common.IClientItemExtensions.of(lastToolHighlight).getFont(lastToolHighlight, net.minecraftforge.client.extensions.common.IClientItemExtensions.FontContext.SELECTED_ITEM_NAME); + if (font == null) { + p_283501_.drawString(this.getFont(), highlightTip, j, k, 16777215 + (l << 24)); @@ -73,7 +73,7 @@ } } -@@ -1155,7 +_,7 @@ +@@ -1146,7 +_,7 @@ ItemStack itemstack = this.minecraft.player.getInventory().getSelected(); if (itemstack.isEmpty()) { this.toolHighlightTimer = 0; diff --git a/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch b/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch index 3e74c17961..c533610119 100644 --- a/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/GuiGraphics.java.patch @@ -9,7 +9,7 @@ public static final float MAX_GUI_Z = 10000.0F; public static final float MIN_GUI_Z = -10000.0F; private static final int EXTRA_SPACE_AFTER_FIRST_TOOLTIP_LINE = 2; -@@ -280,6 +_,11 @@ +@@ -268,6 +_,11 @@ } public int drawString(Font p_283343_, @Nullable String p_281896_, int p_283569_, int p_283418_, int p_281560_, boolean p_282130_) { @@ -21,7 +21,7 @@ if (p_281896_ == null) { return 0; } else { -@@ -306,6 +_,11 @@ +@@ -294,6 +_,11 @@ } public int drawString(Font p_282636_, FormattedCharSequence p_281596_, int p_281586_, int p_282816_, int p_281743_, boolean p_282394_) { @@ -33,7 +33,7 @@ int i = p_282636_.drawInBatch( p_281596_, (float)p_281586_, -@@ -872,6 +_,7 @@ +@@ -864,6 +_,7 @@ CrashReport crashreport = CrashReport.forThrowable(throwable, "Rendering item"); CrashReportCategory crashreportcategory = crashreport.addCategory("Item being rendered"); crashreportcategory.setDetail("Item Type", () -> String.valueOf(p_281675_.getItem())); @@ -41,7 +41,7 @@ crashreportcategory.setDetail("Item Components", () -> String.valueOf(p_281675_.getComponents())); crashreportcategory.setDetail("Item Foil", () -> String.valueOf(p_281675_.hasFoil())); throw new ReportedException(crashreport); -@@ -912,16 +_,26 @@ +@@ -904,16 +_,26 @@ } this.pose.popPose(); @@ -70,7 +70,7 @@ this.renderTooltipInternal(p_283128_, list, p_283678_, p_281696_, DefaultTooltipPositioner.INSTANCE); } -@@ -930,7 +_,15 @@ +@@ -922,7 +_,15 @@ } public void renderComponentTooltip(Font p_282739_, List p_281832_, int p_282191_, int p_282446_) { @@ -87,7 +87,7 @@ } public void renderTooltip(Font p_282192_, List p_282297_, int p_281680_, int p_283325_) { -@@ -949,11 +_,13 @@ +@@ -941,11 +_,13 @@ private void renderTooltipInternal(Font p_282675_, List p_282615_, int p_283230_, int p_283417_, ClientTooltipPositioner p_282442_) { if (!p_282615_.isEmpty()) { @@ -102,7 +102,7 @@ if (k > i) { i = k; } -@@ -963,18 +_,21 @@ +@@ -955,18 +_,21 @@ int i2 = i; int j2 = j; @@ -127,7 +127,7 @@ k1 += clienttooltipcomponent1.getHeight() + (l1 == 0 ? 2 : 0); } -@@ -982,7 +_,7 @@ +@@ -974,7 +_,7 @@ for (int k2 = 0; k2 < p_282615_.size(); k2++) { ClientTooltipComponent clienttooltipcomponent2 = p_282615_.get(k2); diff --git a/patches/minecraft/net/minecraft/client/gui/components/AbstractButton.java.patch b/patches/minecraft/net/minecraft/client/gui/components/AbstractButton.java.patch index 67d4556292..5d141a2e4f 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/AbstractButton.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/AbstractButton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/components/AbstractButton.java +++ b/net/minecraft/client/gui/components/AbstractButton.java -@@ -32,7 +_,7 @@ +@@ -34,7 +_,7 @@ RenderSystem.enableDepthTest(); p_281670_.blitSprite(SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight()); p_281670_.setColor(1.0F, 1.0F, 1.0F, 1.0F); diff --git a/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch b/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch index 4787d99763..ae5eb1459d 100644 --- a/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/components/DebugScreenOverlay.java.patch @@ -79,13 +79,13 @@ + protected void drawGameInformation(GuiGraphics p_281525_) { + List list = this.getGameInformation(); + list.addAll(this.getOverlayHelp()); -+ net.minecraftforge.client.ForgeHooksClient.onCustomizeDebugEvent(p_281525_, minecraft.getWindow(), minecraft.getFrameTime(), list, true); ++ net.minecraftforge.client.ForgeHooksClient.onCustomizeDebugEvent(p_281525_, minecraft.getWindow(), minecraft.getTimer().getRealtimeDeltaTicks(), list, true); + this.renderLines(p_281525_, list, true); } protected void drawSystemInformation(GuiGraphics p_281261_) { List list = this.getSystemInformation(); -+ net.minecraftforge.client.ForgeHooksClient.onCustomizeDebugEvent(p_281261_, minecraft.getWindow(), minecraft.getFrameTime(), list, false); ++ net.minecraftforge.client.ForgeHooksClient.onCustomizeDebugEvent(p_281261_, minecraft.getWindow(), minecraft.getTimer().getRealtimeDeltaTicks(), list, false); this.renderLines(p_281261_, list, false); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch index efc44a064e..c6b9e05587 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/PauseScreen.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/PauseScreen.java +++ b/net/minecraft/client/gui/screens/PauseScreen.java -@@ -86,6 +_,7 @@ +@@ -94,6 +_,7 @@ } else { gridlayout$rowhelper.addChild(this.openScreenButton(PLAYER_REPORTING, () -> new SocialInteractionsScreen(this))); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch index b773d28aaf..e64ba39563 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/Screen.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/Screen.java +++ b/net/minecraft/client/gui/screens/Screen.java -@@ -204,7 +_,7 @@ +@@ -201,7 +_,7 @@ } public void onClose() { @@ -9,7 +9,7 @@ } protected T addRenderableWidget(T p_169406_) { -@@ -320,8 +_,10 @@ +@@ -312,8 +_,10 @@ this.width = p_96608_; this.height = p_96609_; if (!this.initialized) { @@ -20,7 +20,7 @@ } else { this.repositionElements(); } -@@ -334,8 +_,10 @@ +@@ -326,8 +_,10 @@ protected void rebuildWidgets() { this.clearWidgets(); this.clearFocus(); @@ -31,7 +31,7 @@ } @Override -@@ -362,6 +_,7 @@ +@@ -354,6 +_,7 @@ this.renderBlurredBackground(p_297268_); this.renderMenuBackground(p_283688_); @@ -39,7 +39,7 @@ } protected void renderBlurredBackground(float p_336041_) { -@@ -492,6 +_,19 @@ +@@ -463,6 +_,19 @@ } public void onFilesDrop(List p_96591_) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch index 15d457639a..1bc4e8ca9d 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/TitleScreen.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/gui/screens/TitleScreen.java +++ b/net/minecraft/client/gui/screens/TitleScreen.java -@@ -61,6 +_,7 @@ - @Nullable - private TitleScreen.WarningLabel warningLabel; +@@ -60,6 +_,7 @@ + private boolean fading; + private long fadeInStart; private final LogoRenderer logoRenderer; + private net.minecraftforge.client.gui.TitleScreenModUpdateIndicator modUpdateNotification; public TitleScreen() { this(false); -@@ -116,11 +_,15 @@ +@@ -115,11 +_,15 @@ int j = this.width - i - 2; int k = 24; int l = this.height / 4 + 48; @@ -24,7 +24,7 @@ SpriteIconButton spriteiconbutton = this.addRenderableWidget( CommonButtons.language( -@@ -171,7 +_,7 @@ +@@ -170,7 +_,7 @@ }).bounds(this.width / 2 - 100, p_96764_ + p_96765_ * 1, 200, 20).tooltip(tooltip).build()).active = flag; this.addRenderableWidget( Button.builder(Component.translatable("menu.online"), p_325369_ -> this.minecraft.setScreen(new RealmsMainScreen(this))) @@ -33,15 +33,15 @@ .tooltip(tooltip) .build() ) -@@ -281,6 +_,7 @@ - this.warningLabel.render(p_282860_, i); - } - +@@ -276,6 +_,7 @@ + if ((i & -67108864) != 0) { + super.render(p_282860_, p_281753_, p_283539_, p_282628_); + this.logoRenderer.renderLogo(p_282860_, this.width, f); + net.minecraftforge.client.ForgeHooksClient.renderMainMenu(this, p_282860_, this.font, this.width, this.height, i); if (this.splash != null && !this.minecraft.options.hideSplashTexts().get()) { this.splash.render(p_282860_, this.width, this.font, i); } -@@ -296,11 +_,19 @@ +@@ -291,11 +_,19 @@ s = s + I18n.get("menu.modded"); } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch deleted file mode 100644 index c6430cdabe..0000000000 --- a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- a/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java -+++ b/net/minecraft/client/gui/screens/controls/KeyBindsScreen.java -@@ -33,7 +_,7 @@ - this.keyBindsList = this.addRenderableWidget(new KeyBindsList(this, this.minecraft)); - this.resetButton = Button.builder(Component.translatable("controls.resetAll"), p_269619_ -> { - for (KeyMapping keymapping : this.options.keyMappings) { -- keymapping.setKey(keymapping.getDefaultKey()); -+ keymapping.setToDefault(); - } - - this.keyBindsList.resetMappingAndUpdateButtons(); -@@ -70,11 +_,14 @@ - public boolean keyPressed(int p_193987_, int p_193988_, int p_193989_) { - if (this.selectedKey != null) { - if (p_193987_ == 256) { -+ this.selectedKey.setKeyModifierAndCode(null, InputConstants.UNKNOWN); - this.options.setKey(this.selectedKey, InputConstants.UNKNOWN); - } else { -+ this.selectedKey.setKeyModifierAndCode(null, InputConstants.getKey(p_193987_, p_193988_)); - this.options.setKey(this.selectedKey, InputConstants.getKey(p_193987_, p_193988_)); - } - -+ if (p_193987_ == 256 || !net.minecraftforge.client.settings.KeyModifier.isKeyCodeModifier(this.selectedKey.getKey())) - this.selectedKey = null; - this.lastKeySelection = Util.getMillis(); - this.keyBindsList.resetMappingAndUpdateButtons(); -@@ -82,6 +_,19 @@ - } else { - return super.keyPressed(p_193987_, p_193988_, p_193989_); - } -+ } -+ -+ @Override -+ public boolean keyReleased(int keyCode, int scanCode, int modifiers) { -+ // Forge: We wait for a second key above if the first press is a modifier -+ // but if they release the modifier then set it explicitly. -+ var key = InputConstants.getKey(keyCode, scanCode); -+ if (this.selectedKey != null && this.selectedKey.getKey() == key) { -+ this.selectedKey = null; -+ this.lastKeySelection = Util.getMillis(); -+ this.keyBindsList.resetMappingAndUpdateButtons(); -+ } -+ return super.keyReleased(keyCode, scanCode, modifiers); - } - - @Override diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch index 2039a3d751..296d1d7be2 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/CreativeModeInventoryScreen.java.patch @@ -7,9 +7,9 @@ + private final List pages = new java.util.ArrayList<>(); + private net.minecraftforge.client.gui.CreativeTabsScreenPage currentPage = new net.minecraftforge.client.gui.CreativeTabsScreenPage(new java.util.ArrayList<>()); - public CreativeModeInventoryScreen(Player p_259788_, FeatureFlagSet p_260074_, boolean p_259569_) { - super(new CreativeModeInventoryScreen.ItemPickerMenu(p_259788_), p_259788_.getInventory(), CommonComponents.EMPTY); -@@ -144,7 +_,7 @@ + public CreativeModeInventoryScreen(LocalPlayer p_344408_, FeatureFlagSet p_260074_, boolean p_259569_) { + super(new CreativeModeInventoryScreen.ItemPickerMenu(p_344408_), p_344408_.getInventory(), CommonComponents.EMPTY); +@@ -159,7 +_,7 @@ private void refreshCurrentTabContents(Collection p_261591_) { int i = this.menu.getRowIndexForScroll(this.scrollOffs); this.menu.items.clear(); @@ -18,7 +18,7 @@ this.refreshSearchResults(); } else { this.menu.items.addAll(p_261591_); -@@ -307,6 +_,35 @@ +@@ -322,6 +_,35 @@ protected void init() { if (this.minecraft.gameMode.hasInfiniteItems()) { super.init(); @@ -54,7 +54,7 @@ this.searchBox = new EditBox(this.font, this.leftPos + 82, this.topPos + 6, 80, 9, Component.translatable("itemGroup.search")); this.searchBox.setMaxLength(50); this.searchBox.setBordered(false); -@@ -353,7 +_,7 @@ +@@ -368,7 +_,7 @@ public boolean charTyped(char p_98521_, int p_98522_) { if (this.ignoreTextInput) { return false; @@ -63,7 +63,7 @@ return false; } else { String s = this.searchBox.getValue(); -@@ -372,7 +_,7 @@ +@@ -387,7 +_,7 @@ @Override public boolean keyPressed(int p_98547_, int p_98548_, int p_98549_) { this.ignoreTextInput = false; @@ -72,7 +72,7 @@ if (this.minecraft.options.keyChat.matches(p_98547_, p_98548_)) { this.ignoreTextInput = true; this.selectTab(CreativeModeTabs.searchTab()); -@@ -408,6 +_,7 @@ +@@ -423,6 +_,7 @@ } private void refreshSearchResults() { @@ -80,20 +80,20 @@ this.menu.items.clear(); this.visibleTags.clear(); String s = this.searchBox.getValue(); -@@ -417,10 +_,10 @@ - SearchTree searchtree; - if (s.startsWith("#")) { - s = s.substring(1); -- searchtree = this.minecraft.getSearchTree(SearchRegistry.CREATIVE_TAGS); -+ searchtree = this.minecraft.getSearchTree(net.minecraftforge.client.CreativeModeTabSearchRegistry.getTagSearchKey(selectedTab)); - this.updateVisibleTags(s); - } else { -- searchtree = this.minecraft.getSearchTree(SearchRegistry.CREATIVE_NAMES); -+ searchtree = this.minecraft.getSearchTree(net.minecraftforge.client.CreativeModeTabSearchRegistry.getNameSearchKey(selectedTab)); - } +@@ -435,10 +_,10 @@ + SearchTree searchtree; + if (s.startsWith("#")) { + s = s.substring(1); +- searchtree = sessionsearchtrees.creativeTagSearch(); ++ searchtree = sessionsearchtrees.getSearchTree(net.minecraftforge.client.CreativeModeTabSearchRegistry.getTagSearchKey(selectedTab)); + this.updateVisibleTags(s); + } else { +- searchtree = sessionsearchtrees.creativeNameSearch(); ++ searchtree = sessionsearchtrees.getSearchTree(net.minecraftforge.client.CreativeModeTabSearchRegistry.getNameSearchKey(selectedTab)); + } - this.menu.items.addAll(searchtree.search(s.toLowerCase(Locale.ROOT))); -@@ -447,7 +_,8 @@ + this.menu.items.addAll(searchtree.search(s.toLowerCase(Locale.ROOT))); +@@ -466,7 +_,8 @@ @Override protected void renderLabels(GuiGraphics p_283168_, int p_281774_, int p_281466_) { if (selectedTab.showTitle()) { @@ -103,7 +103,7 @@ } } -@@ -457,7 +_,7 @@ +@@ -476,7 +_,7 @@ double d0 = p_98531_ - (double)this.leftPos; double d1 = p_98532_ - (double)this.topPos; @@ -112,7 +112,7 @@ if (this.checkTabClicked(creativemodetab, d0, d1)) { return true; } -@@ -479,7 +_,7 @@ +@@ -498,7 +_,7 @@ double d1 = p_98623_ - (double)this.topPos; this.scrolling = false; @@ -121,7 +121,7 @@ if (this.checkTabClicked(creativemodetab, d0, d1)) { this.selectTab(creativemodetab); return true; -@@ -497,6 +_,7 @@ +@@ -516,6 +_,7 @@ private void selectTab(CreativeModeTab p_98561_) { CreativeModeTab creativemodetab = selectedTab; selectedTab = p_98561_; @@ -129,7 +129,7 @@ this.quickCraftSlots.clear(); this.menu.items.clear(); this.clearDraggingState(); -@@ -573,13 +_,15 @@ +@@ -592,13 +_,15 @@ this.originalSlots = null; } @@ -146,7 +146,7 @@ this.refreshSearchResults(); } else { -@@ -642,7 +_,15 @@ +@@ -661,7 +_,15 @@ public void render(GuiGraphics p_283000_, int p_281317_, int p_282770_, float p_281295_) { super.render(p_283000_, p_281317_, p_282770_, p_281295_); @@ -163,7 +163,7 @@ if (this.checkTabHovering(p_283000_, creativemodetab, p_281317_, p_282770_)) { break; } -@@ -654,6 +_,7 @@ +@@ -673,6 +_,7 @@ p_283000_.renderTooltip(this.font, TRASH_SLOT_TOOLTIP, p_281317_, p_282770_); } @@ -171,7 +171,7 @@ this.renderTooltip(p_283000_, p_281317_, p_282770_); } -@@ -661,7 +_,7 @@ +@@ -680,7 +_,7 @@ public List getTooltipFromContainerItem(ItemStack p_281769_) { boolean flag = this.hoveredSlot != null && this.hoveredSlot instanceof CreativeModeInventoryScreen.CustomCreativeSlot; boolean flag1 = selectedTab.getType() == CreativeModeTab.Type.CATEGORY; @@ -180,7 +180,7 @@ TooltipFlag.Default tooltipflag$default = this.minecraft.options.advancedItemTooltips ? TooltipFlag.Default.ADVANCED : TooltipFlag.Default.NORMAL; TooltipFlag tooltipflag = flag ? tooltipflag$default.asCreative() : tooltipflag$default; List list = p_281769_.getTooltipLines(Item.TooltipContext.of(this.minecraft.level), this.minecraft.player, tooltipflag); -@@ -680,7 +_,7 @@ +@@ -699,7 +_,7 @@ int i = 1; for (CreativeModeTab creativemodetab : CreativeModeTabs.tabs()) { @@ -189,7 +189,7 @@ list1.add(i++, creativemodetab.getDisplayName().copy().withStyle(ChatFormatting.BLUE)); } } -@@ -691,14 +_,14 @@ +@@ -710,7 +_,7 @@ @Override protected void renderBg(GuiGraphics p_282663_, float p_282504_, int p_282089_, int p_282249_) { @@ -198,15 +198,7 @@ if (creativemodetab != selectedTab) { this.renderTabButton(p_282663_, creativemodetab); } - } - - p_282663_.blit( -- new ResourceLocation("textures/gui/container/creative_inventory/tab_" + selectedTab.getBackgroundSuffix()), -+ selectedTab.getBackgroundLocation(), - this.leftPos, - this.topPos, - 0, -@@ -715,6 +_,7 @@ +@@ -726,6 +_,7 @@ p_282663_.blitSprite(resourcelocation, j, k + (int)((float)(i - k - 17) * this.scrollOffs), 12, 15); } @@ -214,7 +206,7 @@ this.renderTabButton(p_282663_, selectedTab); if (selectedTab.getType() == CreativeModeTab.Type.INVENTORY) { InventoryScreen.renderEntityInInventoryFollowsMouse( -@@ -733,7 +_,7 @@ +@@ -744,7 +_,7 @@ } private int getTabX(CreativeModeTab p_260136_) { @@ -223,7 +215,7 @@ int j = 27; int k = 27 * i; if (p_260136_.isAlignedRight()) { -@@ -745,7 +_,7 @@ +@@ -756,7 +_,7 @@ private int getTabY(CreativeModeTab p_260181_) { int i = 0; @@ -232,7 +224,7 @@ i -= 32; } else { i += this.imageHeight; -@@ -773,8 +_,8 @@ +@@ -784,8 +_,8 @@ protected void renderTabButton(GuiGraphics p_283590_, CreativeModeTab p_283489_) { boolean flag = p_283489_ == selectedTab; @@ -243,7 +235,7 @@ int j = this.leftPos + this.getTabX(p_283489_); int k = this.topPos - (flag1 ? 28 : -(this.imageHeight - 4)); ResourceLocation[] aresourcelocation; -@@ -784,6 +_,7 @@ +@@ -795,6 +_,7 @@ aresourcelocation = flag ? SELECTED_BOTTOM_TABS : UNSELECTED_BOTTOM_TABS; } @@ -251,7 +243,7 @@ p_283590_.blitSprite(aresourcelocation[Mth.clamp(i, 0, aresourcelocation.length)], j, k, 26, 32); p_283590_.pose().pushPose(); p_283590_.pose().translate(0.0F, 0.0F, 100.0F); -@@ -825,6 +_,14 @@ +@@ -836,6 +_,14 @@ } } @@ -266,7 +258,7 @@ @OnlyIn(Dist.CLIENT) static class CustomCreativeSlot extends Slot { public CustomCreativeSlot(Container p_98633_, int p_98634_, int p_98635_, int p_98636_) { -@@ -1009,6 +_,22 @@ +@@ -1020,6 +_,22 @@ @Override public boolean mayPickup(Player p_98665_) { return this.target.mayPickup(p_98665_); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch index cb6aeac75f..cdbd0e4a75 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java +++ b/net/minecraft/client/gui/screens/inventory/EnchantmentScreen.java -@@ -108,7 +_,7 @@ +@@ -111,7 +_,7 @@ int l1 = 86 - this.font.width(s); FormattedText formattedtext = EnchantmentNames.getInstance().getRandomName(this.font, l1); int i2 = 6839882; @@ -9,20 +9,24 @@ RenderSystem.enableBlend(); p_282430_.blitSprite(ENCHANTMENT_SLOT_DISABLED_SPRITE, i1, j + 14 + 19 * l, 108, 19); p_282430_.blitSprite(DISABLED_LEVEL_SPRITES[l], i1 + 1, j + 15 + 19 * l, 16, 16); -@@ -173,10 +_,13 @@ - Enchantment enchantment = Enchantment.byId(this.menu.enchantClue[j]); - int l = this.menu.levelClue[j]; - int i1 = j + 1; -- if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)p_282491_, (double)p_281953_) && k > 0 && l >= 0 && enchantment != null) { -+ if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)p_282491_, (double)p_281953_) && k > 0) { - List list = Lists.newArrayList(); -- list.add(Component.translatable("container.enchant.clue", enchantment.getFullname(l)).withStyle(ChatFormatting.WHITE)); -- if (!flag) { -+ list.add((Component.translatable("container.enchant.clue", enchantment == null ? "" : enchantment.getFullname(l))).withStyle(ChatFormatting.WHITE)); -+ if (enchantment == null) { -+ list.add(Component.literal("")); -+ list.add(Component.translatable("forge.container.enchant.limitedEnchantability").withStyle(ChatFormatting.RED)); -+ } else if (!flag) { - list.add(CommonComponents.EMPTY); - if (this.minecraft.player.experienceLevel < k) { - list.add(Component.translatable("container.enchant.level.requirement", this.menu.costs[j]).withStyle(ChatFormatting.RED)); +@@ -177,13 +_,16 @@ + .registryAccess() + .registryOrThrow(Registries.ENCHANTMENT) + .getHolder(this.menu.enchantClue[j]); +- if (!optional.isEmpty()) { ++ { + int l = this.menu.levelClue[j]; + int i1 = j + 1; +- if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)p_282491_, (double)p_281953_) && k > 0 && l >= 0 && optional != null) { ++ if (this.isHovering(60, 14 + 19 * j, 108, 17, (double)p_282491_, (double)p_281953_) && k > 0) { + List list = Lists.newArrayList(); +- list.add(Component.translatable("container.enchant.clue", Enchantment.getFullname(optional.get(), l)).withStyle(ChatFormatting.WHITE)); +- if (!flag) { ++ list.add(Component.translatable("container.enchant.clue", optional.isEmpty() ? "" : Enchantment.getFullname(optional.get(), l)).withStyle(ChatFormatting.WHITE)); ++ if (optional.isEmpty()) { ++ list.add(Component.literal("")); ++ list.add(Component.translatable("forge.container.enchant.limitedEnchantability").withStyle(ChatFormatting.RED)); ++ } else if (!flag) { + list.add(CommonComponents.EMPTY); + if (this.minecraft.player.experienceLevel < k) { + list.add(Component.translatable("container.enchant.level.requirement", this.menu.costs[j]).withStyle(ChatFormatting.RED)); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch index 75ccd25a87..74155da1f7 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/HangingSignEditScreen.java.patch @@ -4,8 +4,8 @@ private static final Vector3f TEXT_SCALE = new Vector3f(1.0F, 1.0F, 1.0F); private static final int TEXTURE_WIDTH = 16; private static final int TEXTURE_HEIGHT = 16; -- private final ResourceLocation texture = new ResourceLocation("textures/gui/hanging_signs/" + this.woodType.name() + ".png"); -+ private final ResourceLocation texture = new ResourceLocation(this.woodType.name() + ".png").withPrefix("textures/gui/hanging_signs/"); // possibly unnecessary patch(?) -Paint_Ninja +- private final ResourceLocation texture = ResourceLocation.withDefaultNamespace("textures/gui/hanging_signs/" + this.woodType.name() + ".png"); ++ private final ResourceLocation texture = ResourceLocation.parse(this.woodType.name() + ".png").withPrefix("textures/gui/hanging_signs/"); public HangingSignEditScreen(SignBlockEntity p_278017_, boolean p_277942_, boolean p_277778_) { super(p_278017_, p_277942_, p_277778_, Component.translatable("hanging_sign.edit")); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch index 6df9e74b6c..f168e8b7e1 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java +++ b/net/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipComponent.java -@@ -20,6 +_,8 @@ - if (p_169951_ instanceof BundleTooltip bundletooltip) { - return new ClientBundleTooltip(bundletooltip.contents()); +@@ -22,6 +_,8 @@ + } else if (p_169951_ instanceof ClientActivePlayersTooltip.ActivePlayersTooltip clientactiveplayerstooltip$activeplayerstooltip) { + return new ClientActivePlayersTooltip(clientactiveplayerstooltip$activeplayerstooltip); } else { + ClientTooltipComponent result = net.minecraftforge.client.gui.ClientTooltipComponentManager.createClientTooltipComponent(p_169951_); + if (result != null) return result; diff --git a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch similarity index 70% rename from patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch rename to patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch index d270111787..8248894167 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/controls/KeyBindsList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java.patch @@ -1,5 +1,5 @@ ---- a/net/minecraft/client/gui/screens/controls/KeyBindsList.java -+++ b/net/minecraft/client/gui/screens/controls/KeyBindsList.java +--- a/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java ++++ b/net/minecraft/client/gui/screens/options/controls/KeyBindsList.java @@ -69,6 +_,11 @@ return 340; } @@ -13,25 +13,25 @@ public class CategoryEntry extends KeyBindsList.Entry { final Component name; @@ -153,9 +_,10 @@ - this.name = p_193917_; - this.changeButton = Button.builder(p_193917_, p_269618_ -> { - KeyBindsList.this.keyBindsScreen.selectedKey = p_193916_; -+ p_193916_.setKeyModifierAndCode(null, com.mojang.blaze3d.platform.InputConstants.UNKNOWN); + this.name = p_343976_; + this.changeButton = Button.builder(p_343976_, p_342196_ -> { + KeyBindsList.this.keyBindsScreen.selectedKey = p_343088_; ++ p_343088_.setKeyModifierAndCode(null, com.mojang.blaze3d.platform.InputConstants.UNKNOWN); KeyBindsList.this.resetMappingAndUpdateButtons(); }) - .bounds(0, 0, 75, 20) + .bounds(0, 0, 75 + 20 /* Forge: Add space */, 20) .createNarration( - p_253311_ -> p_193916_.isUnbound() - ? Component.translatable("narrator.controls.unbound", p_193917_) + p_342179_ -> p_343088_.isUnbound() + ? Component.translatable("narrator.controls.unbound", p_343976_) @@ -163,6 +_,7 @@ ) .build(); - this.resetButton = Button.builder(RESET_BUTTON_TITLE, p_325376_ -> { + this.resetButton = Button.builder(RESET_BUTTON_TITLE, p_343650_ -> { + this.key.setToDefault(); - KeyBindsList.this.minecraft.options.setKey(p_193916_, p_193916_.getDefaultKey()); + KeyBindsList.this.minecraft.options.setKey(p_343088_, p_343088_.getDefaultKey()); KeyBindsList.this.resetMappingAndUpdateButtons(); - }).bounds(0, 0, 50, 20).createNarration(p_253313_ -> Component.translatable("narrator.controls.reset", p_193917_)).build(); + }).bounds(0, 0, 50, 20).createNarration(p_344192_ -> Component.translatable("narrator.controls.reset", p_343976_)).build(); @@ -215,7 +_,7 @@ MutableComponent mutablecomponent = Component.empty(); if (!this.key.isUnbound()) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch new file mode 100644 index 0000000000..7d8ceaacab --- /dev/null +++ b/patches/minecraft/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java.patch @@ -0,0 +1,45 @@ +--- a/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java ++++ b/net/minecraft/client/gui/screens/options/controls/KeyBindsScreen.java +@@ -41,7 +_,7 @@ + protected void addFooter() { + this.resetButton = Button.builder(Component.translatable("controls.resetAll"), p_343640_ -> { + for (KeyMapping keymapping : this.options.keyMappings) { +- keymapping.setKey(keymapping.getDefaultKey()); ++ keymapping.setToDefault(); + } + + this.keyBindsList.resetMappingAndUpdateButtons(); +@@ -73,11 +_,14 @@ + public boolean keyPressed(int p_342715_, int p_342862_, int p_345515_) { + if (this.selectedKey != null) { + if (p_342715_ == 256) { ++ this.selectedKey.setKeyModifierAndCode(null, InputConstants.UNKNOWN); + this.options.setKey(this.selectedKey, InputConstants.UNKNOWN); + } else { ++ this.selectedKey.setKeyModifierAndCode(null, InputConstants.getKey(p_342715_, p_342862_)); + this.options.setKey(this.selectedKey, InputConstants.getKey(p_342715_, p_342862_)); + } + ++ if (p_342715_ == 256 || !net.minecraftforge.client.settings.KeyModifier.isKeyCodeModifier(this.selectedKey.getKey())) + this.selectedKey = null; + this.lastKeySelection = Util.getMillis(); + this.keyBindsList.resetMappingAndUpdateButtons(); +@@ -100,5 +_,18 @@ + } + + this.resetButton.active = flag; ++ } ++ ++ @Override ++ public boolean keyReleased(int keyCode, int scanCode, int modifiers) { ++ // Forge: We wait for a second key above if the first press is a modifier ++ // but if they release the modifier then set it explicitly. ++ var key = InputConstants.getKey(keyCode, scanCode); ++ if (this.selectedKey != null && this.selectedKey.getKey() == key) { ++ this.selectedKey = null; ++ this.lastKeySelection = Util.getMillis(); ++ this.keyBindsList.resetMappingAndUpdateButtons(); ++ } ++ return super.keyReleased(keyCode, scanCode, modifiers); + } + } diff --git a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch index 8eb61408a9..57e4502854 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/packs/PackSelectionScreen.java.patch @@ -6,6 +6,6 @@ p_100014_.setSelected(null); - p_100015_.forEach( + p_100015_.filter(PackSelectionModel.Entry::notHidden).forEach( - p_325390_ -> { + p_340813_ -> { TransferableSelectionList.PackEntry transferableselectionlist$packentry1 = new TransferableSelectionList.PackEntry( - this.minecraft, p_100014_, p_325390_ + this.minecraft, p_100014_, p_340813_ diff --git a/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch index 2a0e291b60..8ae3eb448c 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java +++ b/net/minecraft/client/gui/screens/recipebook/RecipeBookComponent.java -@@ -116,7 +_,7 @@ +@@ -115,7 +_,7 @@ this.initFilterButtonTextures(); this.tabButtons.clear(); @@ -9,7 +9,7 @@ this.tabButtons.add(new RecipeBookTabButton(recipebookcategories)); } -@@ -291,7 +_,7 @@ +@@ -293,7 +_,7 @@ } if (itemstack != null && this.minecraft.screen != null) { diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch index da15366dc6..530d7be907 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java +++ b/net/minecraft/client/gui/screens/worldselection/CreateWorldScreen.java -@@ -119,6 +_,7 @@ +@@ -118,6 +_,7 @@ public static void openFresh(Minecraft p_232897_, @Nullable Screen p_232898_) { queueLoadScreen(p_232897_, PREPARING_WORLD_DATA); PackRepository packrepository = new PackRepository(new ServerPacksSource(p_232897_.directoryValidator())); @@ -8,7 +8,7 @@ WorldLoader.InitConfig worldloader$initconfig = createDefaultLoadConfig(packrepository, WorldDataConfiguration.DEFAULT); CompletableFuture completablefuture = WorldLoader.load( worldloader$initconfig, -@@ -419,7 +_,7 @@ +@@ -415,7 +_,7 @@ if (p_269627_) { p_270552_.accept(this.uiState.getSettings().dataConfiguration()); } else { @@ -17,7 +17,7 @@ } }, Component.translatable("dataPack.validation.failed"), -@@ -537,6 +_,7 @@ +@@ -533,6 +_,7 @@ if (path != null) { if (this.tempDataPackRepository == null) { this.tempDataPackRepository = ServerPacksSource.createPackRepository(path, this.packValidator); diff --git a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch index adffba10e2..8f8c4af743 100644 --- a/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch +++ b/patches/minecraft/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java.patch @@ -1,10 +1,10 @@ --- a/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java +++ b/net/minecraft/client/gui/screens/worldselection/WorldSelectionList.java @@ -75,6 +_,7 @@ - static final ResourceLocation JOIN_HIGHLIGHTED_SPRITE = new ResourceLocation("world_list/join_highlighted"); - static final ResourceLocation JOIN_SPRITE = new ResourceLocation("world_list/join"); + static final ResourceLocation JOIN_HIGHLIGHTED_SPRITE = ResourceLocation.withDefaultNamespace("world_list/join_highlighted"); + static final ResourceLocation JOIN_SPRITE = ResourceLocation.withDefaultNamespace("world_list/join"); static final Logger LOGGER = LogUtils.getLogger(); -+ private static final ResourceLocation FORGE_EXPERIMENTAL_WARNING_ICON = new ResourceLocation("forge","textures/gui/experimental_warning.png"); ++ private static final ResourceLocation FORGE_EXPERIMENTAL_WARNING_ICON = ResourceLocation.fromNamespaceAndPath("forge","textures/gui/experimental_warning.png"); static final Component FROM_NEWER_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.fromNewerVersion1").withStyle(ChatFormatting.RED); static final Component FROM_NEWER_TOOLTIP_2 = Component.translatable("selectWorld.tooltip.fromNewerVersion2").withStyle(ChatFormatting.RED); static final Component SNAPSHOT_TOOLTIP_1 = Component.translatable("selectWorld.tooltip.snapshot1").withStyle(ChatFormatting.GOLD); diff --git a/patches/minecraft/net/minecraft/client/main/Main.java.patch b/patches/minecraft/net/minecraft/client/main/Main.java.patch index 9a930dae40..55bf083c85 100644 --- a/patches/minecraft/net/minecraft/client/main/Main.java.patch +++ b/patches/minecraft/net/minecraft/client/main/Main.java.patch @@ -1,12 +1,12 @@ --- a/net/minecraft/client/main/Main.java +++ b/net/minecraft/client/main/Main.java -@@ -154,8 +_,8 @@ - CrashReport.preload(); - - try { +@@ -111,8 +_,8 @@ + CrashReport.preload(); + logger = LogUtils.getLogger(); + s1 = "Bootstrap"; - Bootstrap.bootStrap(); GameLoadTimesEvent.INSTANCE.setBootstrapTime(Bootstrap.bootstrapDuration.get()); + net.minecraftforge.fml.loading.BackgroundWaiter.runAndTick(Bootstrap::bootStrap, net.minecraftforge.fml.loading.FMLLoader.progressWindowTick); Bootstrap.validate(); - } catch (Throwable throwable2) { - CrashReport crashreport = CrashReport.forThrowable(throwable2, "Bootstrap"); + s1 = "Argument parsing"; + List list = optionset.valuesOf(optionspec27); diff --git a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch index aa7a0b8d3d..31b3e59ce8 100644 --- a/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch +++ b/patches/minecraft/net/minecraft/client/model/geom/LayerDefinitions.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/model/geom/LayerDefinitions.java +++ b/net/minecraft/client/model/geom/LayerDefinitions.java -@@ -328,6 +_,7 @@ +@@ -329,6 +_,7 @@ WoodType.values().forEach(p_171114_ -> builder.put(ModelLayers.createSignModelName(p_171114_), layerdefinition23)); LayerDefinition layerdefinition24 = HangingSignRenderer.createHangingSignLayer(); WoodType.values().forEach(p_247864_ -> builder.put(ModelLayers.createHangingSignModelName(p_247864_), layerdefinition24)); diff --git a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch index 6720d1c317..15f7d2b852 100644 --- a/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch +++ b/patches/minecraft/net/minecraft/client/model/geom/ModelLayers.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/client/model/geom/ModelLayers.java +++ b/net/minecraft/client/model/geom/ModelLayers.java -@@ -228,11 +_,13 @@ +@@ -229,11 +_,13 @@ } public static ModelLayerLocation createSignModelName(WoodType p_171292_) { - return createLocation("sign/" + p_171292_.name(), "main"); -+ ResourceLocation location = new ResourceLocation(p_171292_.name()); -+ return new ModelLayerLocation(new ResourceLocation(location.getNamespace(), "sign/" + location.getPath()), "main"); ++ ResourceLocation location = ResourceLocation.parse(p_171292_.name()); ++ return new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(location.getNamespace(), "sign/" + location.getPath()), "main"); } public static ModelLayerLocation createHangingSignModelName(WoodType p_252225_) { - return createLocation("hanging_sign/" + p_252225_.name(), "main"); -+ ResourceLocation location = new ResourceLocation(p_252225_.name()); -+ return new ModelLayerLocation(new ResourceLocation(location.getNamespace(), "hanging_sign/" + location.getPath()), "main"); ++ ResourceLocation location = ResourceLocation.parse(p_252225_.name()); ++ return new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(location.getNamespace(), "hanging_sign/" + location.getPath()), "main"); } public static Stream getKnownLocations() { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch index c28c1f592f..f4972a4a09 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java +++ b/net/minecraft/client/multiplayer/ClientCommonPacketListenerImpl.java -@@ -116,6 +_,7 @@ +@@ -149,6 +_,7 @@ @Override public void handleCustomPayload(ClientboundCustomPayloadPacket p_298103_) { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch index b45a7740da..acd8e424d3 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java +++ b/net/minecraft/client/multiplayer/ClientConfigurationPacketListenerImpl.java -@@ -141,6 +_,7 @@ +@@ -143,6 +_,7 @@ ); this.connection.send(ServerboundFinishConfigurationPacket.INSTANCE); - this.connection.setupOutboundProtocol(GameProtocols.SERVERBOUND.bind(RegistryFriendlyByteBuf.decorator(registryaccess$frozen))); + this.connection.setupOutboundProtocol(GameProtocols.SERVERBOUND_TEMPLATE.bind(RegistryFriendlyByteBuf.decorator(registryaccess$frozen))); + net.minecraftforge.common.ForgeHooks.handleClientConfigurationComplete(this.connection); } diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch index c48ead2ba0..4f1b17242d 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java +++ b/net/minecraft/client/multiplayer/ClientHandshakePacketListenerImpl.java -@@ -205,6 +_,7 @@ +@@ -210,6 +_,7 @@ Component component = this.wasTransferredTo ? CommonComponents.TRANSFER_CONNECT_FAILED : CommonComponents.CONNECT_FAILED; if (this.serverData != null && this.serverData.isRealm()) { - this.minecraft.setScreen(new DisconnectedRealmsScreen(this.parent, component, p_104543_)); -+ } else if (net.minecraftforge.client.ForgeHooksClient.onClientDisconnect(this.connection, this.minecraft, this.parent, p_104543_)) { + this.minecraft.setScreen(new DisconnectedRealmsScreen(this.parent, component, p_342266_.reason())); ++ } else if (net.minecraftforge.client.ForgeHooksClient.onClientDisconnect(this.connection, this.minecraft, this.parent, p_342266_.reason())) { } else { - this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, p_104543_)); + this.minecraft.setScreen(new DisconnectedScreen(this.parent, component, p_342266_)); } -@@ -229,6 +_,7 @@ +@@ -234,6 +_,7 @@ @Override public void handleCustomQuery(ClientboundCustomQueryPacket p_104545_) { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch index 9f75657bfa..a9b4396f11 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ClientPacketListener.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/multiplayer/ClientPacketListener.java +++ b/net/minecraft/client/multiplayer/ClientPacketListener.java -@@ -425,6 +_,7 @@ +@@ -427,6 +_,7 @@ this.minecraft.debugRenderer.clear(); this.minecraft.player.resetPos(); @@ -8,8 +8,8 @@ this.minecraft.player.setId(p_105030_.playerId()); this.level.addEntity(this.minecraft.player); this.minecraft.player.input = new KeyboardInput(this.minecraft.options); -@@ -1159,7 +_,9 @@ - localplayer1.getAttributes().assignValues(localplayer.getAttributes()); +@@ -1164,7 +_,9 @@ + localplayer1.getAttributes().assignBaseValues(localplayer.getAttributes()); } + localplayer1.updateSyncFields(localplayer); // Forge: fix MC-10657 @@ -18,7 +18,7 @@ this.level.addEntity(localplayer1); localplayer1.setYRot(-180.0F); localplayer1.input = new KeyboardInput(this.minecraft.options); -@@ -1294,10 +_,7 @@ +@@ -1300,10 +_,7 @@ PacketUtils.ensureRunningOnSameThread(p_104976_, this, this.minecraft); BlockPos blockpos = p_104976_.getPos(); this.minecraft.level.getBlockEntity(blockpos, p_104976_.getType()).ifPresent(p_325478_ -> { @@ -30,7 +30,7 @@ if (p_325478_ instanceof CommandBlockEntity && this.minecraft.screen instanceof CommandBlockEditScreen) { ((CommandBlockEditScreen)this.minecraft.screen).updateGui(); -@@ -1464,7 +_,9 @@ +@@ -1465,7 +_,9 @@ @Override public void handleCommands(ClientboundCommandsPacket p_104990_) { PacketUtils.ensureRunningOnSameThread(p_104990_, this, this.minecraft); @@ -41,24 +41,24 @@ } @Override -@@ -1486,6 +_,7 @@ +@@ -1487,6 +_,7 @@ ClientRecipeBook clientrecipebook = this.minecraft.player.getRecipeBook(); clientrecipebook.setupCollections(this.recipeManager.getOrderedRecipes(), this.minecraft.level.registryAccess()); - this.minecraft.populateSearchTree(SearchRegistry.RECIPE_COLLECTIONS, clientrecipebook.getCollections()); + this.searchTrees.updateRecipes(clientrecipebook, this.registryAccess); + net.minecraftforge.client.ForgeHooksClient.onRecipesUpdated(this.recipeManager); } @Override -@@ -1582,6 +_,8 @@ - TagCollector tagcollector = new TagCollector(); - p_298004_.getTags().forEach(tagcollector::append); +@@ -1585,6 +_,8 @@ tagcollector.updateTags(this.registryAccess, this.connection.isMemoryConnection()); + List list = List.copyOf(CreativeModeTabs.searchTab().getDisplayItems()); + this.searchTrees.updateCreativeTags(list); + + net.minecraftforge.event.ForgeEventFactory.onTagsUpdated(this.registryAccess, true, this.connection.isMemoryConnection()); } @Override -@@ -2388,6 +_,8 @@ +@@ -2389,6 +_,8 @@ } public void sendChat(String p_249888_) { @@ -67,7 +67,7 @@ Instant instant = Instant.now(); long i = Crypt.SaltSupplier.getLong(); LastSeenMessagesTracker.Update lastseenmessagestracker$update = this.lastSeenMessages.generateAndApplyUpdate(); -@@ -2396,6 +_,7 @@ +@@ -2397,6 +_,7 @@ } public void sendCommand(String p_250092_) { diff --git a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch index 5f0d838be3..25fdd043a6 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/MultiPlayerGameMode.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/multiplayer/MultiPlayerGameMode.java +++ b/net/minecraft/client/multiplayer/MultiPlayerGameMode.java -@@ -106,6 +_,7 @@ +@@ -105,6 +_,7 @@ } public boolean destroyBlock(BlockPos p_105268_) { @@ -8,7 +8,7 @@ if (this.minecraft.player.blockActionRestricted(this.minecraft.level, p_105268_, this.localPlayerMode)) { return false; } else { -@@ -120,9 +_,8 @@ +@@ -119,9 +_,8 @@ } else if (blockstate.isAir()) { return false; } else { @@ -19,7 +19,7 @@ if (flag) { block.destroy(level, p_105268_, blockstate); } -@@ -143,6 +_,7 @@ +@@ -142,6 +_,7 @@ BlockState blockstate = this.minecraft.level.getBlockState(p_105270_); this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, p_105270_, blockstate, 1.0F); this.startPrediction(this.minecraft.level, p_233757_ -> { @@ -27,7 +27,7 @@ this.destroyBlock(p_105270_); return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233757_); }); -@@ -152,15 +_,18 @@ +@@ -151,15 +_,18 @@ this.connection .send(new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, this.destroyBlockPos, p_105271_)); } @@ -46,7 +46,7 @@ if (flag && blockstate1.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), p_105270_) >= 1.0F) { this.destroyBlock(p_105270_); } else { -@@ -171,6 +_,7 @@ +@@ -170,6 +_,7 @@ this.destroyTicks = 0.0F; this.minecraft.level.destroyBlockProgress(this.minecraft.player.getId(), this.destroyBlockPos, this.getDestroyStage()); } @@ -54,7 +54,7 @@ return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105270_, p_105271_, p_233728_); }); -@@ -203,6 +_,7 @@ +@@ -202,6 +_,7 @@ BlockState blockstate1 = this.minecraft.level.getBlockState(p_105284_); this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, p_105284_, blockstate1, 1.0F); this.startPrediction(this.minecraft.level, p_233753_ -> { @@ -62,7 +62,7 @@ this.destroyBlock(p_105284_); return new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, p_105284_, p_105285_, p_233753_); }); -@@ -215,7 +_,7 @@ +@@ -214,7 +_,7 @@ } else { this.destroyProgress = this.destroyProgress + blockstate.getDestroyProgress(this.minecraft.player, this.minecraft.player.level(), p_105284_); if (this.destroyTicks % 4.0F == 0.0F) { @@ -71,7 +71,7 @@ this.minecraft .getSoundManager() .play( -@@ -232,6 +_,7 @@ +@@ -231,6 +_,7 @@ this.destroyTicks++; this.minecraft.getTutorial().onDestroyBlock(this.minecraft.level, p_105284_, blockstate, Mth.clamp(this.destroyProgress, 0.0F, 1.0F)); @@ -79,7 +79,7 @@ if (this.destroyProgress >= 1.0F) { this.isDestroying = false; this.startPrediction(this.minecraft.level, p_233739_ -> { -@@ -270,7 +_,7 @@ +@@ -269,7 +_,7 @@ private boolean sameDestroyTarget(BlockPos p_105282_) { ItemStack itemstack = this.minecraft.player.getMainHandItem(); @@ -88,7 +88,7 @@ } private void ensureHasSentCarriedItem() { -@@ -298,12 +_,23 @@ +@@ -297,12 +_,23 @@ private InteractionResult performUseItemOn(LocalPlayer p_233747_, InteractionHand p_233748_, BlockHitResult p_233749_) { BlockPos blockpos = p_233749_.getBlockPos(); ItemStack itemstack = p_233747_.getItemInHand(p_233748_); @@ -114,7 +114,7 @@ BlockState blockstate = this.minecraft.level.getBlockState(blockpos); if (!this.connection.isFeatureEnabled(blockstate.getBlock().requiredFeatures())) { return InteractionResult.FAIL; -@@ -324,8 +_,10 @@ +@@ -323,8 +_,10 @@ } } @@ -127,26 +127,26 @@ InteractionResult interactionresult1; if (this.localPlayerMode.isCreative()) { int i = itemstack.getCount(); -@@ -361,10 +_,18 @@ - mutableobject.setValue(InteractionResult.PASS); - return serverbounduseitempacket; - } else { -+ var event = net.minecraftforge.event.ForgeEventFactory.onRightClickItem(p_233722_, p_233723_); -+ if (event.isCanceled()) { -+ mutableobject.setValue(event.getCancellationResult()); -+ return serverbounduseitempacket; -+ } - InteractionResultHolder interactionresultholder = itemstack.use(this.minecraft.level, p_233722_, p_233723_); - ItemStack itemstack1 = interactionresultholder.getObject(); - if (itemstack1 != itemstack) { - p_233722_.setItemInHand(p_233723_, itemstack1); -+ if (itemstack1.isEmpty()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_233722_, itemstack, p_233723_); +@@ -358,10 +_,18 @@ + mutableobject.setValue(InteractionResult.PASS); + return serverbounduseitempacket; + } else { ++ var event = net.minecraftforge.event.ForgeEventFactory.onRightClickItem(p_233722_, p_233723_); ++ if (event.isCanceled()) { ++ mutableobject.setValue(event.getCancellationResult()); ++ return serverbounduseitempacket; + } - } + InteractionResultHolder interactionresultholder = itemstack.use(this.minecraft.level, p_233722_, p_233723_); + ItemStack itemstack1 = interactionresultholder.getObject(); + if (itemstack1 != itemstack) { + p_233722_.setItemInHand(p_233723_, itemstack1); ++ if (itemstack1.isEmpty()) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(p_233722_, itemstack, p_233723_); ++ } + } - mutableobject.setValue(interactionresultholder.getResult()); -@@ -395,6 +_,10 @@ + mutableobject.setValue(interactionresultholder.getResult()); +@@ -393,6 +_,10 @@ public InteractionResult interact(Player p_105227_, Entity p_105228_, InteractionHand p_105229_) { this.ensureHasSentCarriedItem(); this.connection.send(ServerboundInteractPacket.createInteractionPacket(p_105228_, p_105227_.isShiftKeyDown(), p_105229_)); @@ -157,7 +157,7 @@ return this.localPlayerMode == GameType.SPECTATOR ? InteractionResult.PASS : p_105227_.interactOn(p_105228_, p_105229_); } -@@ -402,6 +_,10 @@ +@@ -400,6 +_,10 @@ this.ensureHasSentCarriedItem(); Vec3 vec3 = p_105233_.getLocation().subtract(p_105232_.getX(), p_105232_.getY(), p_105232_.getZ()); this.connection.send(ServerboundInteractPacket.createInteractionPacket(p_105232_, p_105231_.isShiftKeyDown(), p_105234_, vec3)); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch index a3fac87d9d..a9f9e6b913 100644 --- a/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch +++ b/patches/minecraft/net/minecraft/client/multiplayer/ServerStatusPinger.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/multiplayer/ServerStatusPinger.java +++ b/net/minecraft/client/multiplayer/ServerStatusPinger.java -@@ -98,6 +_,7 @@ +@@ -99,6 +_,7 @@ p_105461_.run(); } }); diff --git a/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch new file mode 100644 index 0000000000..eafd01c028 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/multiplayer/SessionSearchTrees.java.patch @@ -0,0 +1,74 @@ +--- a/net/minecraft/client/multiplayer/SessionSearchTrees.java ++++ b/net/minecraft/client/multiplayer/SessionSearchTrees.java +@@ -31,8 +_,8 @@ + private static final SessionSearchTrees.Key RECIPE_COLLECTIONS = new SessionSearchTrees.Key(); + public static final SessionSearchTrees.Key CREATIVE_NAMES = new SessionSearchTrees.Key(); + public static final SessionSearchTrees.Key CREATIVE_TAGS = new SessionSearchTrees.Key(); +- private CompletableFuture> creativeByNameSearch = CompletableFuture.completedFuture(SearchTree.empty()); +- private CompletableFuture> creativeByTagSearch = CompletableFuture.completedFuture(SearchTree.empty()); ++ private CompletableFuture> EMPTY = CompletableFuture.completedFuture(SearchTree.empty()); ++ private Map>> creativeSearch = new IdentityHashMap<>(); + private CompletableFuture> recipeSearch = CompletableFuture.completedFuture(SearchTree.empty()); + private final Map reloaders = new IdentityHashMap<>(); + +@@ -82,44 +_,50 @@ + } + + public void updateCreativeTags(List p_344581_) { ++ for (var name : net.minecraftforge.client.CreativeModeTabSearchRegistry.getTagSearchKeys().values()) + this.register( +- CREATIVE_TAGS, ++ name, + () -> { +- CompletableFuture completablefuture = this.creativeByTagSearch; +- this.creativeByTagSearch = CompletableFuture.supplyAsync( ++ CompletableFuture completablefuture = this.creativeSearch.getOrDefault(name, EMPTY); ++ this.creativeSearch.put(name, CompletableFuture.supplyAsync( + () -> new IdSearchTree<>(p_342206_ -> p_342206_.getTags().map(TagKey::location), p_344581_), Util.backgroundExecutor() +- ); ++ )); + completablefuture.cancel(true); + } + ); + } + + public SearchTree creativeTagSearch() { +- return this.creativeByTagSearch.join(); ++ return this.getSearchTree(CREATIVE_TAGS); + } + + public void updateCreativeTooltips(HolderLookup.Provider p_343364_, List p_342500_) { ++ for (var name : net.minecraftforge.client.CreativeModeTabSearchRegistry.getNameSearchKeys().values()) + this.register( +- CREATIVE_NAMES, ++ name, + () -> { + Item.TooltipContext item$tooltipcontext = Item.TooltipContext.of(p_343364_); + TooltipFlag tooltipflag = TooltipFlag.Default.NORMAL.asCreative(); +- CompletableFuture completablefuture = this.creativeByNameSearch; +- this.creativeByNameSearch = CompletableFuture.supplyAsync( ++ CompletableFuture completablefuture = this.creativeSearch.getOrDefault(name, EMPTY); ++ this.creativeSearch.put(name, CompletableFuture.supplyAsync( + () -> new FullTextSearchTree<>( + p_345254_ -> getTooltipLines(Stream.of(p_345254_), item$tooltipcontext, tooltipflag), + p_344415_ -> p_344415_.getItemHolder().unwrapKey().map(ResourceKey::location).stream(), + p_342500_ + ), + Util.backgroundExecutor() +- ); ++ )); + completablefuture.cancel(true); + } + ); + } + + public SearchTree creativeNameSearch() { +- return this.creativeByNameSearch.join(); ++ return this.getSearchTree(CREATIVE_NAMES); ++ } ++ ++ public SearchTree getSearchTree(SessionSearchTrees.Key key) { ++ return this.creativeSearch.getOrDefault(key, EMPTY).join(); + } + + @OnlyIn(Dist.CLIENT) diff --git a/patches/minecraft/net/minecraft/client/multiplayer/TagCollector.java.patch b/patches/minecraft/net/minecraft/client/multiplayer/TagCollector.java.patch deleted file mode 100644 index 7f6bb6942d..0000000000 --- a/patches/minecraft/net/minecraft/client/multiplayer/TagCollector.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/client/multiplayer/TagCollector.java -+++ b/net/minecraft/client/multiplayer/TagCollector.java -@@ -23,7 +_,7 @@ - } - - private static void refreshCommonTagDependentData() { -- CreativeModeTabs.searchTab().rebuildSearchTree(); -+ CreativeModeTabs.allTabs().stream().filter(tab -> tab.hasSearchBar()).forEach(tab -> tab.rebuildSearchTree()); - } - - private static void refreshBuiltInTagDependentData() { diff --git a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch index b8babe3ac5..5a30bfd121 100644 --- a/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/ParticleEngine.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/ParticleEngine.java +++ b/net/minecraft/client/particle/ParticleEngine.java -@@ -75,11 +_,11 @@ +@@ -77,11 +_,11 @@ ParticleRenderType.TERRAIN_SHEET, ParticleRenderType.PARTICLE_SHEET_OPAQUE, ParticleRenderType.PARTICLE_SHEET_LIT, ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT, ParticleRenderType.CUSTOM ); protected ClientLevel level; @@ -14,7 +14,7 @@ private final Queue particlesToAdd = Queues.newArrayDeque(); private final Map spriteSets = Maps.newHashMap(); private final TextureAtlas textureAtlas; -@@ -210,10 +_,14 @@ +@@ -212,10 +_,14 @@ this.register(ParticleTypes.OMINOUS_SPAWNING, FlyStraightTowardsParticle.OminousSpawnProvider::new); } @@ -30,7 +30,7 @@ public void register(ParticleType p_273423_, ParticleProvider.Sprite p_273134_) { this.register( p_273423_, -@@ -230,10 +_,12 @@ +@@ -232,10 +_,12 @@ ); } @@ -44,7 +44,7 @@ } @Override -@@ -359,7 +_,7 @@ +@@ -361,7 +_,7 @@ private Particle makeParticle( T p_107396_, double p_107397_, double p_107398_, double p_107399_, double p_107400_, double p_107401_, double p_107402_ ) { @@ -53,7 +53,7 @@ return particleprovider == null ? null : particleprovider.createParticle(p_107396_, this.level, p_107397_, p_107398_, p_107399_, p_107400_, p_107401_, p_107402_); -@@ -435,11 +_,19 @@ +@@ -437,11 +_,19 @@ } } @@ -71,18 +71,18 @@ - for (ParticleRenderType particlerendertype : RENDER_ORDER) { + for (ParticleRenderType particlerendertype : this.particles.keySet()) { // Forge: allow custom IParticleRenderType's + if (particlerendertype == ParticleRenderType.NO_RENDER) continue; - Iterable iterable = this.particles.get(particlerendertype); - if (iterable != null) { + Queue queue = this.particles.get(particlerendertype); + if (queue != null && !queue.isEmpty()) { RenderSystem.setShader(GameRenderer::getParticleShader); -@@ -448,6 +_,7 @@ - particlerendertype.begin(bufferbuilder, this.textureManager); - - for (Particle particle : iterable) { -+ if (frustum != null && particle.shouldCull() && !frustum.isVisible(particle.getBoundingBox())) continue; - try { - particle.render(bufferbuilder, p_107340_, p_107341_); - } catch (Throwable throwable) { -@@ -475,7 +_,7 @@ +@@ -449,6 +_,7 @@ + BufferBuilder bufferbuilder = particlerendertype.begin(tesselator, this.textureManager); + if (bufferbuilder != null) { + for (Particle particle : queue) { ++ if (frustum != null && particle.shouldCull() && !frustum.isVisible(particle.getBoundingBox())) continue; + try { + particle.render(bufferbuilder, p_107340_, p_107341_); + } catch (Throwable throwable) { +@@ -480,7 +_,7 @@ } public void destroy(BlockPos p_107356_, BlockState p_107357_) { @@ -91,7 +91,7 @@ VoxelShape voxelshape = p_107357_.getShape(this.level, p_107356_); double d0 = 0.25; voxelshape.forAllBoxes( -@@ -508,6 +_,7 @@ +@@ -513,6 +_,7 @@ p_107357_, p_107356_ ) @@ -99,7 +99,7 @@ ); } } -@@ -517,6 +_,13 @@ +@@ -522,6 +_,13 @@ } } @@ -113,7 +113,7 @@ public void crack(BlockPos p_107368_, Direction p_107369_) { BlockState blockstate = this.level.getBlockState(p_107368_); if (blockstate.getRenderShape() != RenderShape.INVISIBLE && blockstate.shouldSpawnTerrainParticles()) { -@@ -552,7 +_,7 @@ +@@ -557,7 +_,7 @@ d0 = (double)i + aabb.maxX + 0.1F; } diff --git a/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch b/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch index 3f197b20ef..05b6502a67 100644 --- a/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch +++ b/patches/minecraft/net/minecraft/client/particle/VibrationSignalParticle.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/particle/VibrationSignalParticle.java +++ b/net/minecraft/client/particle/VibrationSignalParticle.java -@@ -122,6 +_,7 @@ +@@ -76,6 +_,7 @@ this.x = Mth.lerp(d0, this.x, vec3.x()); this.y = Mth.lerp(d0, this.y, vec3.y()); this.z = Mth.lerp(d0, this.z, vec3.z()); diff --git a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch index f1dab83f72..1ef2e6b3ac 100644 --- a/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch +++ b/patches/minecraft/net/minecraft/client/player/LocalPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/player/LocalPlayer.java +++ b/net/minecraft/client/player/LocalPlayer.java -@@ -160,6 +_,7 @@ +@@ -161,6 +_,7 @@ @Override public boolean hurt(DamageSource p_108662_, float p_108663_) { @@ -8,7 +8,7 @@ return false; } -@@ -303,6 +_,7 @@ +@@ -304,6 +_,7 @@ ServerboundPlayerActionPacket.Action serverboundplayeractionpacket$action = p_108701_ ? ServerboundPlayerActionPacket.Action.DROP_ALL_ITEMS : ServerboundPlayerActionPacket.Action.DROP_ITEM; @@ -16,7 +16,7 @@ ItemStack itemstack = this.getInventory().removeFromSelected(p_108701_); this.connection.send(new ServerboundPlayerActionPacket(serverboundplayeractionpacket$action, BlockPos.ZERO, Direction.DOWN)); return !itemstack.isEmpty(); -@@ -505,7 +_,11 @@ +@@ -501,7 +_,11 @@ @Override public void playSound(SoundEvent p_108651_, float p_108652_, float p_108653_) { @@ -29,15 +29,15 @@ } @Override -@@ -697,6 +_,7 @@ +@@ -694,6 +_,7 @@ && (this.isShiftKeyDown() || !this.isSleeping() && !this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.STANDING)); - float f = Mth.clamp(0.3F + EnchantmentHelper.getSneakingSpeedBonus(this), 0.0F, 1.0F); + float f = (float)this.getAttributeValue(Attributes.SNEAKING_SPEED); this.input.tick(this.isMovingSlowly(), f); + net.minecraftforge.client.ForgeHooksClient.onMovementInputUpdate(this, this.input); this.minecraft.getTutorial().onInput(this.input); if (this.isUsingItem() && !this.isPassenger()) { this.input.leftImpulse *= 0.2F; -@@ -725,7 +_,7 @@ +@@ -722,7 +_,7 @@ boolean flag4 = this.canStartSprinting(); boolean flag5 = this.isPassenger() ? this.getVehicle().onGround() : this.onGround(); boolean flag6 = !flag1 && !flag2; @@ -46,7 +46,7 @@ if (this.sprintTriggerTime <= 0 && !this.minecraft.options.keySprint.isDown()) { this.sprintTriggerTime = 7; } else { -@@ -733,15 +_,15 @@ +@@ -730,15 +_,15 @@ } } @@ -65,7 +65,7 @@ this.setSprinting(false); } } else if (flag8) { -@@ -775,14 +_,15 @@ +@@ -772,14 +_,15 @@ if (this.input.jumping && !flag9 && !flag && !abilities.flying && !this.isPassenger() && !this.onClimbable()) { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.CHEST); @@ -84,7 +84,7 @@ } if (this.isEyeInFluid(FluidTags.WATER)) { -@@ -882,6 +_,7 @@ +@@ -885,6 +_,7 @@ @Override public void rideTick() { super.rideTick(); @@ -92,7 +92,7 @@ this.handsBusy = false; if (this.getControlledVehicle() instanceof Boat boat) { boat.setInput(this.input.left, this.input.right, this.input.up, this.input.down); -@@ -1139,5 +_,17 @@ +@@ -1142,5 +_,17 @@ @Override public float getVisualRotationYInDegrees() { return this.getYRot(); diff --git a/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch b/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch index 7b4b496515..aa8d5c50a1 100644 --- a/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/EffectInstance.java.patch @@ -1,22 +1,20 @@ --- a/net/minecraft/client/renderer/EffectInstance.java +++ b/net/minecraft/client/renderer/EffectInstance.java -@@ -58,7 +_,8 @@ +@@ -58,7 +_,7 @@ private final EffectProgram fragmentProgram; public EffectInstance(ResourceProvider p_334130_, String p_108942_) throws IOException { -- ResourceLocation resourcelocation = new ResourceLocation("shaders/program/" + p_108942_ + ".json"); -+ ResourceLocation rl = ResourceLocation.tryParse(p_108942_); -+ ResourceLocation resourcelocation = new ResourceLocation(rl.getNamespace(), "shaders/program/" + rl.getPath() + ".json"); +- ResourceLocation resourcelocation = ResourceLocation.withDefaultNamespace("shaders/program/" + p_108942_ + ".json"); ++ ResourceLocation resourcelocation = ResourceLocation.tryParse(p_108942_).withPath(p -> "shaders/program/" + p + ".json"); this.name = p_108942_; Resource resource = p_334130_.getResourceOrThrow(resourcelocation); -@@ -150,7 +_,8 @@ +@@ -150,7 +_,7 @@ } else { EffectProgram effectprogram; if (program == null) { -- ResourceLocation resourcelocation = new ResourceLocation("shaders/program/" + p_172569_ + p_172568_.getExtension()); -+ ResourceLocation rl = ResourceLocation.tryParse(p_172569_); -+ ResourceLocation resourcelocation = new ResourceLocation(rl.getNamespace(), "shaders/program/" + rl.getPath() + p_172568_.getExtension()); +- ResourceLocation resourcelocation = ResourceLocation.withDefaultNamespace("shaders/program/" + p_172569_ + p_172568_.getExtension()); ++ ResourceLocation resourcelocation = ResourceLocation.tryParse(p_172569_).withPath(p -> "shaders/program/" + p + p_172568_.getExtension()); Resource resource = p_331503_.getResourceOrThrow(resourcelocation); try (InputStream inputstream = resource.open()) { diff --git a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch index e3d5819d44..1c2113c399 100644 --- a/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/GameRenderer.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/client/renderer/GameRenderer.java +++ b/net/minecraft/client/renderer/GameRenderer.java -@@ -310,6 +_,8 @@ - this.loadEffect(new ResourceLocation("shaders/post/spider.json")); +@@ -311,6 +_,8 @@ + this.loadEffect(ResourceLocation.withDefaultNamespace("shaders/post/spider.json")); } else if (p_109107_ instanceof EnderMan) { - this.loadEffect(new ResourceLocation("shaders/post/invert.json")); + this.loadEffect(ResourceLocation.withDefaultNamespace("shaders/post/invert.json")); + } else { + net.minecraftforge.client.ForgeHooksClient.loadEntityShader(p_109107_, this); } } -@@ -532,6 +_,7 @@ +@@ -526,6 +_,7 @@ Pair.of(new ShaderInstance(p_250719_, "rendertype_gui_ghost_recipe_overlay", DefaultVertexFormat.POSITION_COLOR), p_286147_ -> rendertypeGuiGhostRecipeOverlayShader = p_286147_) ); list1.add(Pair.of(new ShaderInstance(p_250719_, "rendertype_breeze_wind", DefaultVertexFormat.NEW_ENTITY), p_308287_ -> rendertypeBreezeWindShader = p_308287_)); @@ -17,7 +17,7 @@ this.loadBlurEffect(p_250719_); } catch (IOException ioexception) { list1.forEach(p_172729_ -> p_172729_.getFirst().close()); -@@ -691,7 +_,7 @@ +@@ -685,7 +_,7 @@ d0 *= Mth.lerp(this.minecraft.options.fovEffectScale().get(), 1.0, 0.85714287F); } @@ -26,7 +26,7 @@ } } -@@ -850,12 +_,12 @@ +@@ -843,12 +_,12 @@ (float)((double)window.getHeight() / window.getGuiScale()), 0.0F, 1000.0F, @@ -41,29 +41,28 @@ RenderSystem.applyModelViewMatrix(); Lighting.setupFor3DItems(); GuiGraphics guigraphics = new GuiGraphics(this.minecraft, this.renderBuffers.bufferSource()); -@@ -889,7 +_,7 @@ +@@ -882,7 +_,7 @@ } } else if (flag && this.minecraft.screen != null) { try { -- this.minecraft.screen.renderWithTooltip(guigraphics, i, j, this.minecraft.getDeltaFrameTime()); -+ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.minecraft.screen, guigraphics, i, j, this.minecraft.getDeltaFrameTime()); +- this.minecraft.screen.renderWithTooltip(guigraphics, i, j, p_343467_.getRealtimeDeltaTicks()); ++ net.minecraftforge.client.ForgeHooksClient.drawScreen(this.minecraft.screen, guigraphics, i, j, p_343467_.getRealtimeDeltaTicks()); } catch (Throwable throwable1) { CrashReport crashreport1 = CrashReport.forThrowable(throwable1, "Rendering screen"); CrashReportCategory crashreportcategory1 = crashreport1.addCategory("Screen render details"); -@@ -1064,12 +_,17 @@ +@@ -1053,12 +_,17 @@ } this.resetProjectionMatrix(matrix4f); + -+ var cameraSetup = net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeCameraAngles(this, camera, p_109090_); -+ camera.setAnglesInternal(cameraSetup.getYaw(), cameraSetup.getPitch()); - Matrix4f matrix4f1 = new Matrix4f() -- .rotationXYZ(camera.getXRot() * (float) (Math.PI / 180.0), camera.getYRot() * (float) (Math.PI / 180.0) + (float) Math.PI, 0.0F); -+ .rotationXYZ(camera.getXRot() * (float) (Math.PI / 180.0), camera.getYRot() * (float) (Math.PI / 180.0) + (float) Math.PI, cameraSetup.getRoll() * (float) (Math.PI / 180.0)); ++ var cameraSetup = net.minecraftforge.client.event.ForgeEventFactoryClient.fireComputeCameraAngles(this, camera, f); ++ camera.setRotation(cameraSetup.getYaw(), cameraSetup.getPitch(), cameraSetup.getRoll()); + Quaternionf quaternionf = camera.rotation().conjugate(new Quaternionf()); + Matrix4f matrix4f1 = new Matrix4f().rotation(quaternionf); this.minecraft .levelRenderer .prepareCullFrustum(camera.getPosition(), matrix4f1, this.getProjectionMatrix(Math.max(d0, (double)this.minecraft.options.fov().get().intValue()))); - this.minecraft.levelRenderer.renderLevel(p_109090_, p_109091_, flag, camera, this, this.lightTexture, matrix4f1, matrix4f); + this.minecraft.levelRenderer.renderLevel(p_342230_, flag, camera, this, this.lightTexture, matrix4f1, matrix4f); + this.minecraft.getProfiler().popPush("forge_render_last"); + net.minecraftforge.client.event.RenderLevelStageEvent.Stage.AFTER_LEVEL.dispatch(this.minecraft.levelRenderer, posestack.last().pose(), matrix4f, this.minecraft.levelRenderer.getTicks(), camera, this.minecraft.levelRenderer.getFrustum()); this.minecraft.getProfiler().popPush("hand"); diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch index 582d9284ca..f81a36e73f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ItemBlockRenderTypes.java.patch @@ -5,18 +5,18 @@ @OnlyIn(Dist.CLIENT) public class ItemBlockRenderTypes { + @Deprecated - private static final Map TYPE_BY_BLOCK = Util.make(Maps.newHashMap(), p_325496_ -> { + private static final Map TYPE_BY_BLOCK = Util.make(Maps.newHashMap(), p_340896_ -> { RenderType rendertype = RenderType.tripwire(); - p_325496_.put(Blocks.TRIPWIRE, rendertype); -@@ -336,6 +_,7 @@ - p_325496_.put(Blocks.BUBBLE_COLUMN, rendertype3); - p_325496_.put(Blocks.TINTED_GLASS, rendertype3); + p_340896_.put(Blocks.TRIPWIRE, rendertype); +@@ -335,6 +_,7 @@ + p_340896_.put(Blocks.BUBBLE_COLUMN, rendertype3); + p_340896_.put(Blocks.TINTED_GLASS, rendertype3); }); + @Deprecated private static final Map TYPE_BY_FLUID = Util.make(Maps.newHashMap(), p_109290_ -> { RenderType rendertype = RenderType.translucent(); p_109290_.put(Fluids.FLOWING_WATER, rendertype); -@@ -343,6 +_,8 @@ +@@ -342,6 +_,8 @@ }); private static boolean renderCutout; @@ -25,7 +25,7 @@ public static RenderType getChunkRenderType(BlockState p_109283_) { Block block = p_109283_.getBlock(); if (block instanceof LeavesBlock) { -@@ -353,6 +_,8 @@ +@@ -352,6 +_,8 @@ } } @@ -34,7 +34,7 @@ public static RenderType getMovingBlockRenderType(BlockState p_109294_) { Block block = p_109294_.getBlock(); if (block instanceof LeavesBlock) { -@@ -367,6 +_,8 @@ +@@ -366,6 +_,8 @@ } } @@ -43,7 +43,7 @@ public static RenderType getRenderType(BlockState p_109285_, boolean p_109286_) { RenderType rendertype = getChunkRenderType(p_109285_); if (rendertype == RenderType.translucent()) { -@@ -380,6 +_,8 @@ +@@ -379,6 +_,8 @@ } } @@ -52,7 +52,7 @@ public static RenderType getRenderType(ItemStack p_109280_, boolean p_109281_) { Item item = p_109280_.getItem(); if (item instanceof BlockItem) { -@@ -391,11 +_,74 @@ +@@ -390,11 +_,74 @@ } public static RenderType getRenderLayer(FluidState p_109288_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch index 13dfa1e8e6..275a7e755f 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ItemInHandRenderer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/ItemInHandRenderer.java +++ b/net/minecraft/client/renderer/ItemInHandRenderer.java -@@ -331,12 +_,14 @@ +@@ -332,12 +_,14 @@ if (iteminhandrenderer$handrenderselection.renderMainHand) { float f4 = interactionhand == InteractionHand.MAIN_HAND ? f : 0.0F; float f5 = 1.0F - Mth.lerp(p_109315_, this.oMainHandHeight, this.mainHandHeight); @@ -15,7 +15,7 @@ this.renderArmWithItem(p_109318_, p_109315_, f1, InteractionHand.OFF_HAND, f6, this.offHandItem, f7, p_109316_, p_109317_, p_109319_); } -@@ -402,7 +_,7 @@ +@@ -403,7 +_,7 @@ } else { this.renderOneHandedMap(p_109379_, p_109380_, p_109381_, p_109378_, humanoidarm, p_109376_, p_109377_); } @@ -24,7 +24,7 @@ boolean flag1 = CrossbowItem.isCharged(p_109377_); boolean flag2 = humanoidarm == HumanoidArm.RIGHT; int i = flag2 ? 1 : -1; -@@ -452,6 +_,7 @@ +@@ -453,6 +_,7 @@ ); } else { boolean flag3 = humanoidarm == HumanoidArm.RIGHT; @@ -32,7 +32,7 @@ if (p_109372_.isUsingItem() && p_109372_.getUseItemRemainingTicks() > 0 && p_109372_.getUsedItemHand() == p_109375_) { int k = flag3 ? 1 : -1; switch (p_109377_.getUseAnimation()) { -@@ -566,8 +_,16 @@ +@@ -567,8 +_,16 @@ this.offHandHeight = Mth.clamp(this.offHandHeight - 0.4F, 0.0F, 1.0F); } else { float f = localplayer.getAttackStrengthScale(1.0F); diff --git a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch index 48e4f61de5..29668772f0 100644 --- a/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/LevelRenderer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/LevelRenderer.java +++ b/net/minecraft/client/renderer/LevelRenderer.java -@@ -251,6 +_,9 @@ +@@ -256,6 +_,9 @@ } private void renderSnowAndRain(LightTexture p_109704_, float p_109705_, double p_109706_, double p_109707_, double p_109708_) { @@ -10,7 +10,7 @@ float f = this.minecraft.level.getRainLevel(p_109705_); if (!(f <= 0.0F)) { p_109704_.turnOnLightLayer(); -@@ -405,6 +_,9 @@ +@@ -418,6 +_,9 @@ } public void tickRain(Camera p_109694_) { @@ -20,11 +20,11 @@ float f = this.minecraft.level.getRainLevel(1.0F) / (Minecraft.useFancyGraphics() ? 1.0F : 2.0F); if (!(f <= 0.0F)) { RandomSource randomsource = RandomSource.create((long)this.ticks * 312987231L); -@@ -956,9 +_,11 @@ +@@ -929,9 +_,11 @@ RenderSystem.clear(16640, Minecraft.ON_OSX); float f1 = p_109605_.getRenderDistance(); boolean flag1 = this.minecraft.level.effects().isFoggyAt(Mth.floor(d0), Mth.floor(d1)) || this.minecraft.gui.getBossOverlay().shouldCreateWorldFog(); -+ FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_SKY, f, flag1, p_109601_); ++ FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_SKY, f1, flag1, f); profilerfiller.popPush("sky"); RenderSystem.setShader(GameRenderer::getPositionShader); this.renderSky(p_254120_, p_330527_, f, p_109604_, flag1, () -> FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_SKY, f1, flag1, f)); @@ -32,7 +32,7 @@ profilerfiller.popPush("fog"); FogRenderer.setupFog(p_109604_, FogRenderer.FogMode.FOG_TERRAIN, Math.max(f1, 32.0F), flag1, f); profilerfiller.popPush("terrain_setup"); -@@ -967,7 +_,9 @@ +@@ -940,7 +_,9 @@ this.compileSections(p_109604_); profilerfiller.popPush("terrain"); this.renderSectionLayer(RenderType.solid(), d0, d1, d2, p_254120_, p_330527_); @@ -42,7 +42,7 @@ this.renderSectionLayer(RenderType.cutout(), d0, d1, d2, p_254120_, p_330527_); if (this.level.effects().constantAmbientLight()) { Lighting.setupNetherLevel(); -@@ -1010,7 +_,7 @@ +@@ -983,7 +_,7 @@ || p_109604_.isDetached() || p_109604_.getEntity() instanceof LivingEntity && ((LivingEntity)p_109604_.getEntity()).isSleeping() ) @@ -51,7 +51,7 @@ this.renderedEntities++; if (entity.tickCount == 0) { entity.xOld = entity.getX(); -@@ -1026,6 +_,9 @@ +@@ -999,6 +_,9 @@ int i = entity.getTeamColor(); outlinebuffersource.setColor(FastColor.ARGB32.red(i), FastColor.ARGB32.green(i), FastColor.ARGB32.blue(i), 255); } else { @@ -61,7 +61,7 @@ multibuffersource = multibuffersource$buffersource; } -@@ -1041,12 +_,14 @@ +@@ -1014,12 +_,14 @@ multibuffersource$buffersource.endBatch(RenderType.entityCutout(TextureAtlas.LOCATION_BLOCKS)); multibuffersource$buffersource.endBatch(RenderType.entityCutoutNoCull(TextureAtlas.LOCATION_BLOCKS)); multibuffersource$buffersource.endBatch(RenderType.entitySmoothCutout(TextureAtlas.LOCATION_BLOCKS)); @@ -76,7 +76,7 @@ BlockPos blockpos4 = blockentity1.getBlockPos(); MultiBufferSource multibuffersource1 = multibuffersource$buffersource; posestack.pushPose(); -@@ -1066,6 +_,10 @@ +@@ -1039,6 +_,10 @@ } } @@ -87,7 +87,7 @@ this.blockEntityRenderDispatcher.render(blockentity1, f, posestack, multibuffersource1); posestack.popPose(); } -@@ -1074,9 +_,13 @@ +@@ -1047,9 +_,13 @@ synchronized (this.globalBlockEntities) { for (BlockEntity blockentity : this.globalBlockEntities) { @@ -101,7 +101,7 @@ this.blockEntityRenderDispatcher.render(blockentity, f, posestack, multibuffersource$buffersource); posestack.popPose(); } -@@ -1099,6 +_,7 @@ +@@ -1072,6 +_,7 @@ this.minecraft.getMainRenderTarget().bindWrite(false); } @@ -109,7 +109,7 @@ profilerfiller.popPush("destroyProgress"); for (Entry> entry : this.destructionProgress.long2ObjectEntrySet()) { -@@ -1116,7 +_,8 @@ +@@ -1089,7 +_,8 @@ VertexConsumer vertexconsumer1 = new SheetedDecalTextureGenerator( this.renderBuffers.crumblingBufferSource().getBuffer(ModelBakery.DESTROY_TYPES.get(k)), posestack$pose1, 1.0F ); @@ -119,21 +119,21 @@ posestack.popPose(); } } -@@ -1128,10 +_,13 @@ +@@ -1101,10 +_,13 @@ profilerfiller.popPush("outline"); BlockPos blockpos1 = ((BlockHitResult)hitresult).getBlockPos(); BlockState blockstate = this.level.getBlockState(blockpos1); -+ if (!net.minecraftforge.client.ForgeHooksClient.onDrawHighlight(this, p_109604_, hitresult, p_109601_, p_254120_, multibuffersource$buffersource)) ++ if (!net.minecraftforge.client.ForgeHooksClient.onDrawHighlight(this, p_109604_, hitresult, f, p_254120_, multibuffersource$buffersource)) if (!blockstate.isAir() && this.level.getWorldBorder().isWithinBounds(blockpos1)) { VertexConsumer vertexconsumer2 = multibuffersource$buffersource.getBuffer(RenderType.lines()); this.renderHitOutline(posestack, vertexconsumer2, p_109604_.getEntity(), d0, d1, d2, blockpos1, blockstate); } + } else if (hitresult != null && hitresult.getType() == HitResult.Type.ENTITY) { -+ net.minecraftforge.client.ForgeHooksClient.onDrawHighlight(this, p_109604_, hitresult, p_109601_, p_254120_, multibuffersource$buffersource); ++ net.minecraftforge.client.ForgeHooksClient.onDrawHighlight(this, p_109604_, hitresult, f, p_254120_, multibuffersource$buffersource); } this.minecraft.debugRenderer.render(posestack, multibuffersource$buffersource, d0, d1, d2); -@@ -1161,7 +_,8 @@ +@@ -1132,7 +_,8 @@ this.particlesTarget.copyDepthFrom(this.minecraft.getMainRenderTarget()); RenderStateShard.PARTICLES_TARGET.setupRenderState(); profilerfiller.popPush("particles"); @@ -143,7 +143,7 @@ RenderStateShard.PARTICLES_TARGET.clearRenderState(); } else { profilerfiller.popPush("translucent"); -@@ -1175,7 +_,8 @@ +@@ -1146,7 +_,8 @@ profilerfiller.popPush("string"); this.renderSectionLayer(RenderType.tripwire(), d0, d1, d2, p_254120_, p_330527_); profilerfiller.popPush("particles"); @@ -153,15 +153,15 @@ } if (this.minecraft.options.getCloudsType() != CloudStatus.OFF) { -@@ -1191,6 +_,7 @@ +@@ -1162,6 +_,7 @@ RenderStateShard.WEATHER_TARGET.setupRenderState(); profilerfiller.popPush("weather"); this.renderSnowAndRain(p_109606_, f, d0, d1, d2); + net.minecraftforge.client.event.RenderLevelStageEvent.Stage.AFTER_WEATHER.dispatch(this, posestack.last().pose(), p_254120_, this.ticks, p_109604_, frustum); this.renderWorldBorder(p_109604_); RenderStateShard.WEATHER_TARGET.clearRenderState(); - this.transparencyChain.process(f); -@@ -1199,6 +_,7 @@ + this.transparencyChain.process(p_342180_.getGameTimeDeltaTicks()); +@@ -1170,6 +_,7 @@ RenderSystem.depthMask(false); profilerfiller.popPush("weather"); this.renderSnowAndRain(p_109606_, f, d0, d1, d2); @@ -169,7 +169,7 @@ this.renderWorldBorder(p_109604_); RenderSystem.depthMask(true); } -@@ -1344,6 +_,7 @@ +@@ -1269,6 +_,7 @@ shaderinstance.clear(); VertexBuffer.unbind(); this.minecraft.getProfiler().pop(); @@ -177,7 +177,7 @@ p_298012_.clearRenderState(); } -@@ -1604,6 +_,9 @@ +@@ -1519,6 +_,9 @@ } public void renderSky(Matrix4f p_254034_, Matrix4f p_333200_, float p_202426_, Camera p_202427_, boolean p_202428_, Runnable p_202429_) { @@ -187,7 +187,7 @@ p_202429_.run(); if (!p_202428_) { FogType fogtype = p_202427_.getFluidInCamera(); -@@ -1728,6 +_,9 @@ +@@ -1642,6 +_,9 @@ } public void renderClouds(PoseStack p_254145_, Matrix4f p_254537_, Matrix4f p_330176_, float p_254364_, double p_253843_, double p_253663_, double p_253795_) { @@ -197,7 +197,7 @@ float f = this.level.effects().getCloudHeight(); if (!Float.isNaN(f)) { float f1 = 12.0F; -@@ -2017,7 +_,7 @@ +@@ -1901,7 +_,7 @@ boolean flag = false; if (this.minecraft.options.prioritizeChunkUpdates().get() == PrioritizeChunkUpdates.NEARBY) { BlockPos blockpos1 = sectionrenderdispatcher$rendersection.getOrigin().offset(8, 8, 8); @@ -206,7 +206,7 @@ } else if (this.minecraft.options.prioritizeChunkUpdates().get() == PrioritizeChunkUpdates.PLAYER_AFFECTED) { flag = sectionrenderdispatcher$rendersection.isDirtyFromPlayer(); } -@@ -2609,7 +_,23 @@ +@@ -2477,6 +_,14 @@ this.viewArea.setDirty(p_109502_, p_109503_, p_109504_, p_109505_); } @@ -218,37 +218,10 @@ + return this.ticks; + } + -+ /** -+ * @deprecated Forge: Use item aware function below -+ */ -+ @Deprecated - public void playStreamingMusic(@Nullable SoundEvent p_109515_, BlockPos p_109516_) { -+ this.playStreamingMusic(p_109515_, p_109516_, p_109515_ == null? null : RecordItem.getBySound(p_109515_)); -+ } -+ -+ public void playStreamingMusic(@Nullable SoundEvent p_109515_, BlockPos p_109516_, @Nullable RecordItem musicDiscItem) { - SoundInstance soundinstance = this.playingRecords.get(p_109516_); - if (soundinstance != null) { - this.minecraft.getSoundManager().stop(soundinstance); -@@ -2617,7 +_,7 @@ - } - - if (p_109515_ != null) { -- RecordItem recorditem = RecordItem.getBySound(p_109515_); -+ RecordItem recorditem = musicDiscItem; - if (recorditem != null) { - this.minecraft.gui.setNowPlaying(recorditem.getDisplayName()); - } -@@ -2809,7 +_,7 @@ - break; - case 1010: - if (Item.byId(p_234307_) instanceof RecordItem recorditem) { -- this.playStreamingMusic(recorditem.getSound(), p_234306_); -+ this.playStreamingMusic(recorditem.getSound(), p_234306_, recorditem); - } - break; - case 1011: -@@ -3011,7 +_,7 @@ + public void playJukeboxSong(Holder p_343944_, BlockPos p_342259_) { + if (this.level != null) { + this.stopJukeboxSong(p_342259_); +@@ -2886,7 +_,7 @@ case 2001: BlockState blockstate1 = Block.stateById(p_234307_); if (!blockstate1.isAir()) { @@ -257,7 +230,7 @@ this.level .playLocalSound( p_234306_, soundtype.getBreakSound(), SoundSource.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F, false -@@ -3466,7 +_,7 @@ +@@ -3338,7 +_,7 @@ } else { int i = p_109538_.getBrightness(LightLayer.SKY, p_109540_); int j = p_109538_.getBrightness(LightLayer.BLOCK, p_109540_); diff --git a/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch b/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch index e4554ba2c4..90b8a36253 100644 --- a/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/PostChain.java.patch @@ -1,12 +1,11 @@ --- a/net/minecraft/client/renderer/PostChain.java +++ b/net/minecraft/client/renderer/PostChain.java -@@ -156,7 +_,8 @@ +@@ -156,7 +_,7 @@ throw new ChainedJsonException("Render target '" + s4 + "' can't be used as depth buffer"); } -- ResourceLocation resourcelocation = new ResourceLocation("textures/effect/" + s4 + ".png"); -+ ResourceLocation rl = ResourceLocation.tryParse(s4); -+ ResourceLocation resourcelocation = new ResourceLocation(rl.getNamespace(), "textures/effect/" + rl.getPath() + ".png"); +- ResourceLocation resourcelocation = ResourceLocation.withDefaultNamespace("textures/effect/" + s4 + ".png"); ++ ResourceLocation resourcelocation = ResourceLocation.tryParse(s4).withPath(p -> "textures/effect/" + p + ".png"); this.resourceProvider .getResource(resourcelocation) .orElseThrow(() -> new ChainedJsonException("Render target or texture '" + s4 + "' does not exist")); diff --git a/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch b/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch index 77392ffaae..c92dea6761 100644 --- a/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/RenderType.java.patch @@ -1,6 +1,29 @@ --- a/net/minecraft/client/renderer/RenderType.java +++ b/net/minecraft/client/renderer/RenderType.java -@@ -907,7 +_,7 @@ +@@ -674,11 +_,22 @@ + RenderType.CompositeState.builder().setShaderState(RENDERTYPE_GUI_GHOST_RECIPE_OVERLAY_SHADER).setTransparencyState(TRANSLUCENT_TRANSPARENCY).setDepthTestState(GREATER_DEPTH_TEST).setWriteMaskState(COLOR_WRITE).createCompositeState(false) + ); + private static final ImmutableList CHUNK_BUFFER_LAYERS = ImmutableList.of(solid(), cutoutMipped(), cutout(), translucent(), tripwire()); ++ static { ++ int i = 0; ++ for (var layer : CHUNK_BUFFER_LAYERS) ++ layer.chunkLayerId = i++; ++ } ++ + private final VertexFormat format; + private final VertexFormat.Mode mode; + private final int bufferSize; + private final boolean affectsCrumbling; + private final boolean sortOnUpload; ++ private int chunkLayerId = -1; ++ /** {@return the unique ID of this {@link RenderType} for chunk rendering purposes, or {@literal -1} if this is not a chunk {@link RenderType}} */ ++ public final int getChunkLayerId() { ++ return chunkLayerId; ++ } + + public static RenderType solid() { + return SOLID; +@@ -899,7 +_,7 @@ } public static RenderType text(ResourceLocation p_110498_) { @@ -9,7 +32,7 @@ } public static RenderType textBackground() { -@@ -915,19 +_,19 @@ +@@ -907,19 +_,19 @@ } public static RenderType textIntensity(ResourceLocation p_173238_) { @@ -33,7 +56,7 @@ } public static RenderType textBackgroundSeeThrough() { -@@ -935,12 +_,25 @@ +@@ -927,7 +_,7 @@ } public static RenderType textIntensitySeeThrough(ResourceLocation p_173241_) { @@ -42,21 +65,3 @@ } public static RenderType lightning() { - return LIGHTNING; - } -+ -+ // Forge start -+ private int chunkLayerId = -1; -+ /** {@return the unique ID of this {@link RenderType} for chunk rendering purposes, or {@literal -1} if this is not a chunk {@link RenderType}} */ -+ public final int getChunkLayerId() { -+ return chunkLayerId; -+ } -+ static { -+ int i = 0; -+ for (var layer : chunkBufferLayers()) -+ layer.chunkLayerId = i++; -+ } -+ // Forge end - - private static RenderType.CompositeState tripwireState() { - return RenderType.CompositeState.builder() diff --git a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch index 806f86e512..298e2f5a17 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ScreenEffectRenderer.java.patch @@ -49,7 +49,7 @@ } } -@@ -89,8 +_,12 @@ +@@ -88,8 +_,12 @@ } private static void renderWater(Minecraft p_110726_, PoseStack p_110727_) { @@ -60,6 +60,6 @@ RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, UNDERWATER_LOCATION); + RenderSystem.setShaderTexture(0, texture); - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); BlockPos blockpos = BlockPos.containing(p_110726_.player.getX(), p_110726_.player.getEyeY(), p_110726_.player.getZ()); float f = LightTexture.getBrightness(p_110726_.player.level().dimensionType(), p_110726_.player.level().getMaxLocalRawBrightness(blockpos)); + RenderSystem.enableBlend(); diff --git a/patches/minecraft/net/minecraft/client/renderer/ShaderInstance.java.patch b/patches/minecraft/net/minecraft/client/renderer/ShaderInstance.java.patch index bf0493bea0..c15c88d66b 100644 --- a/patches/minecraft/net/minecraft/client/renderer/ShaderInstance.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/ShaderInstance.java.patch @@ -7,31 +7,30 @@ + @Deprecated // Forge: Use the ResourceLocation variant below public ShaderInstance(ResourceProvider p_173336_, String p_173337_, VertexFormat p_173338_) throws IOException { - this.name = p_173337_; -+ this(p_173336_, new ResourceLocation(p_173337_), p_173338_); ++ this(p_173336_, ResourceLocation.parse(p_173337_), p_173338_); + } + + public ShaderInstance(ResourceProvider p_173336_, ResourceLocation shaderLocation, VertexFormat p_173338_) throws IOException { + this.name = shaderLocation.getNamespace().equals("minecraft") ? shaderLocation.getPath() : shaderLocation.toString(); this.vertexFormat = p_173338_; -- ResourceLocation resourcelocation = new ResourceLocation("shaders/core/" + p_173337_ + ".json"); -+ ResourceLocation resourcelocation = new ResourceLocation(shaderLocation.getNamespace(), "shaders/core/" + shaderLocation.getPath() + ".json"); +- ResourceLocation resourcelocation = ResourceLocation.withDefaultNamespace("shaders/core/" + p_173337_ + ".json"); ++ ResourceLocation resourcelocation = shaderLocation.withPath(p -> "shaders/core/" + p + ".json"); try (Reader reader = p_173336_.openAsReader(resourcelocation)) { JsonObject jsonobject = GsonHelper.parse(reader); -@@ -178,8 +_,10 @@ +@@ -177,8 +_,9 @@ Program program1 = p_173342_.getPrograms().get(p_173343_); Program program; if (program1 == null) { - String s = "shaders/core/" + p_173343_ + p_173342_.getExtension(); -- Resource resource = p_173341_.getResourceOrThrow(new ResourceLocation(s)); -+ ResourceLocation loc = new ResourceLocation(p_173343_); -+ String s = "shaders/core/" + loc.getPath() + p_173342_.getExtension(); -+ ResourceLocation resourcelocation = new ResourceLocation(loc.getNamespace(), s); +- Resource resource = p_173341_.getResourceOrThrow(ResourceLocation.withDefaultNamespace(s)); ++ ResourceLocation resourcelocation = ResourceLocation.parse(p_173343_).withPath(p -> "shaders/core/" + p + p_173342_.getExtension()); ++ String s = resourcelocation.getPath(); + Resource resource = p_173341_.getResourceOrThrow(resourcelocation); try (InputStream inputstream = resource.open()) { final String s1 = FileUtil.getFullResourcePath(s); -@@ -188,12 +_,11 @@ +@@ -187,12 +_,11 @@ @Override public String applyImport(boolean p_173374_, String p_173375_) { @@ -42,12 +41,12 @@ + if (!this.importedPaths.add(resourcelocation.toString())) { return null; } else { -- ResourceLocation resourcelocation = new ResourceLocation(p_173375_); +- ResourceLocation resourcelocation = ResourceLocation.parse(p_173375_); - try { String s2; try (Reader reader = p_173341_.openAsReader(resourcelocation)) { -@@ -202,7 +_,8 @@ +@@ -201,7 +_,8 @@ return s2; } catch (IOException ioexception) { diff --git a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch index c8635260c6..e767b190f4 100644 --- a/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/Sheets.java.patch @@ -1,22 +1,20 @@ --- a/net/minecraft/client/renderer/Sheets.java +++ b/net/minecraft/client/renderer/Sheets.java -@@ -144,11 +_,13 @@ +@@ -145,11 +_,11 @@ } private static Material createSignMaterial(WoodType p_173386_) { -- return new Material(SIGN_SHEET, new ResourceLocation("entity/signs/" + p_173386_.name())); -+ ResourceLocation location = new ResourceLocation(p_173386_.name()); -+ return new Material(SIGN_SHEET, new ResourceLocation(location.getNamespace(), "entity/signs/" + location.getPath())); +- return new Material(SIGN_SHEET, ResourceLocation.withDefaultNamespace("entity/signs/" + p_173386_.name())); ++ return new Material(SIGN_SHEET, ResourceLocation.parse(p_173386_.name()).withPrefix("entity/signs/")); } private static Material createHangingSignMaterial(WoodType p_251735_) { -- return new Material(SIGN_SHEET, new ResourceLocation("entity/signs/hanging/" + p_251735_.name())); -+ ResourceLocation location = new ResourceLocation(p_251735_.name()); -+ return new Material(SIGN_SHEET, new ResourceLocation(location.getNamespace(), "entity/signs/hanging/" + location.getPath())); +- return new Material(SIGN_SHEET, ResourceLocation.withDefaultNamespace("entity/signs/hanging/" + p_251735_.name())); ++ return new Material(SIGN_SHEET, ResourceLocation.parse(p_251735_.name()).withPrefix("entity/signs/hanging/")); } public static Material getSignMaterial(WoodType p_173382_) { -@@ -207,6 +_,23 @@ +@@ -208,6 +_,23 @@ case SINGLE: default: return p_110773_; diff --git a/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch b/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch index 3ac5210830..5dfcc578fb 100644 --- a/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/SpriteCoordinateExpander.java.patch @@ -3,44 +3,44 @@ @@ -17,32 +_,38 @@ @Override - public VertexConsumer vertex(double p_110801_, double p_110802_, double p_110803_) { -- return this.delegate.vertex(p_110801_, p_110802_, p_110803_); -+ this.delegate.vertex(p_110801_, p_110802_, p_110803_); + public VertexConsumer addVertex(float p_342932_, float p_342886_, float p_342696_) { +- return this.delegate.addVertex(p_342932_, p_342886_, p_342696_); ++ this.delegate.addVertex(p_342932_, p_342886_, p_342696_); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer color(int p_110826_, int p_110827_, int p_110828_, int p_110829_) { -- return this.delegate.color(p_110826_, p_110827_, p_110828_, p_110829_); -+ this.delegate.color(p_110826_, p_110827_, p_110828_, p_110829_); + public VertexConsumer setColor(int p_344589_, int p_342555_, int p_344320_, int p_345258_) { +- return this.delegate.setColor(p_344589_, p_342555_, p_344320_, p_345258_); ++ this.delegate.setColor(p_344589_, p_342555_, p_344320_, p_345258_); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer uv(float p_110805_, float p_110806_) { -- return this.delegate.uv(this.sprite.getU(p_110805_), this.sprite.getV(p_110806_)); -+ this.delegate.uv(this.sprite.getU(p_110805_), this.sprite.getV(p_110806_)); + public VertexConsumer setUv(float p_343856_, float p_344420_) { +- return this.delegate.setUv(this.sprite.getU(p_343856_), this.sprite.getV(p_344420_)); ++ this.delegate.setUv(this.sprite.getU(p_343856_), this.sprite.getV(p_344420_)); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer overlayCoords(int p_110823_, int p_110824_) { -- return this.delegate.overlayCoords(p_110823_, p_110824_); -+ this.delegate.overlayCoords(p_110823_, p_110824_); + public VertexConsumer setUv1(int p_343784_, int p_344827_) { +- return this.delegate.setUv1(p_343784_, p_344827_); ++ this.delegate.setUv1(p_343784_, p_344827_); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer uv2(int p_110835_, int p_110836_) { -- return this.delegate.uv2(p_110835_, p_110836_); -+ this.delegate.uv2(p_110835_, p_110836_); + public VertexConsumer setUv2(int p_345257_, int p_344124_) { +- return this.delegate.setUv2(p_345257_, p_344124_); ++ this.delegate.setUv2(p_345257_, p_344124_); + return this; // Forge: Fix MC-263524 not working with chained methods } @Override - public VertexConsumer normal(float p_110831_, float p_110832_, float p_110833_) { -- return this.delegate.normal(p_110831_, p_110832_, p_110833_); -+ this.delegate.normal(p_110831_, p_110832_, p_110833_); + public VertexConsumer setNormal(float p_342779_, float p_342534_, float p_344783_) { +- return this.delegate.setNormal(p_342779_, p_342534_, p_344783_); ++ this.delegate.setNormal(p_342779_, p_342534_, p_344783_); + return this; // Forge: Fix MC-263524 not working with chained methods } diff --git a/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch index eaedf20bfb..71096356a3 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/BlockRenderDispatcher.java.patch @@ -43,19 +43,19 @@ + net.minecraft.client.renderer.RenderType renderType ) { try { - RenderShape rendershape = p_234356_.getRenderShape(); -@@ -76,7 +_,9 @@ - p_234361_, - p_234362_, - p_234356_.getSeed(p_234357_), -- OverlayTexture.NO_OVERLAY -+ OverlayTexture.NO_OVERLAY, -+ modelData, -+ renderType - ); - } + this.modelRenderer +@@ -74,7 +_,9 @@ + p_234361_, + p_234362_, + p_234356_.getSeed(p_234357_), +- OverlayTexture.NO_OVERLAY ++ OverlayTexture.NO_OVERLAY, ++ modelData, ++ renderType + ); } catch (Throwable throwable) { -@@ -106,7 +_,12 @@ + CrashReport crashreport = CrashReport.forThrowable(throwable, "Tesselating block in world"); +@@ -103,7 +_,12 @@ return this.blockModelShaper.getBlockModel(p_110911_); } @@ -68,7 +68,7 @@ RenderShape rendershape = p_110913_.getRenderShape(); if (rendershape != RenderShape.INVISIBLE) { switch (rendershape) { -@@ -116,21 +_,26 @@ +@@ -113,21 +_,26 @@ float f = (float)(i >> 16 & 0xFF) / 255.0F; float f1 = (float)(i >> 8 & 0xFF) / 255.0F; float f2 = (float)(i & 0xFF) / 255.0F; diff --git a/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch index 51a5b8ce9e..cff9983696 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/LiquidBlockRenderer.java.patch @@ -14,41 +14,41 @@ float f1 = (float)(i >> 8 & 0xFF) / 255.0F; float f2 = (float)(i & 0xFF) / 255.0F; @@ -181,15 +_,15 @@ - float f52 = f4 * f; - float f30 = f4 * f1; - float f31 = f4 * f2; -- this.vertex(p_234372_, d1 + 0.0, d2 + (double)f8, d0 + 0.0, f52, f30, f31, f18, f22, l); -- this.vertex(p_234372_, d1 + 0.0, d2 + (double)f10, d0 + 1.0, f52, f30, f31, f19, f23, l); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f9, d0 + 1.0, f52, f30, f31, f20, f24, l); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f7, d0 + 0.0, f52, f30, f31, f21, f25, l); -+ this.vertex(p_234372_, d1 + 0.0, d2 + (double)f8, d0 + 0.0, f52, f30, f31, f18, f22, l, alpha); -+ this.vertex(p_234372_, d1 + 0.0, d2 + (double)f10, d0 + 1.0, f52, f30, f31, f19, f23, l, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f9, d0 + 1.0, f52, f30, f31, f20, f24, l, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f7, d0 + 0.0, f52, f30, f31, f21, f25, l, alpha); + float f57 = f4 * f; + float f29 = f4 * f1; + float f30 = f4 * f2; +- this.vertex(p_234372_, f36 + 0.0F, f37 + f8, f38 + 0.0F, f57, f29, f30, f17, f21, l); +- this.vertex(p_234372_, f36 + 0.0F, f37 + f10, f38 + 1.0F, f57, f29, f30, f18, f22, l); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f9, f38 + 1.0F, f57, f29, f30, f19, f23, l); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f7, f38 + 0.0F, f57, f29, f30, f20, f24, l); ++ this.vertex(p_234372_, f36 + 0.0F, f37 + f8, f38 + 0.0F, f57, f29, f30, f17, f21, l, alpha); ++ this.vertex(p_234372_, f36 + 0.0F, f37 + f10, f38 + 1.0F, f57, f29, f30, f18, f22, l, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f9, f38 + 1.0F, f57, f29, f30, f19, f23, l, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f7, f38 + 0.0F, f57, f29, f30, f20, f24, l, alpha); if (p_234374_.shouldRenderBackwardUpFace(p_234370_, p_234371_.above())) { -- this.vertex(p_234372_, d1 + 0.0, d2 + (double)f8, d0 + 0.0, f52, f30, f31, f18, f22, l); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f7, d0 + 0.0, f52, f30, f31, f21, f25, l); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f9, d0 + 1.0, f52, f30, f31, f20, f24, l); -- this.vertex(p_234372_, d1 + 0.0, d2 + (double)f10, d0 + 1.0, f52, f30, f31, f19, f23, l); -+ this.vertex(p_234372_, d1 + 0.0, d2 + (double)f8, d0 + 0.0, f52, f30, f31, f18, f22, l, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f7, d0 + 0.0, f52, f30, f31, f21, f25, l, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f9, d0 + 1.0, f52, f30, f31, f20, f24, l, alpha); -+ this.vertex(p_234372_, d1 + 0.0, d2 + (double)f10, d0 + 1.0, f52, f30, f31, f19, f23, l, alpha); +- this.vertex(p_234372_, f36 + 0.0F, f37 + f8, f38 + 0.0F, f57, f29, f30, f17, f21, l); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f7, f38 + 0.0F, f57, f29, f30, f20, f24, l); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f9, f38 + 1.0F, f57, f29, f30, f19, f23, l); +- this.vertex(p_234372_, f36 + 0.0F, f37 + f10, f38 + 1.0F, f57, f29, f30, f18, f22, l); ++ this.vertex(p_234372_, f36 + 0.0F, f37 + f8, f38 + 0.0F, f57, f29, f30, f17, f21, l, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f7, f38 + 0.0F, f57, f29, f30, f20, f24, l, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f9, f38 + 1.0F, f57, f29, f30, f19, f23, l, alpha); ++ this.vertex(p_234372_, f36 + 0.0F, f37 + f10, f38 + 1.0F, f57, f29, f30, f18, f22, l, alpha); } } @@ -202,10 +_,10 @@ float f46 = f3 * f; - float f47 = f3 * f1; - float f48 = f3 * f2; -- this.vertex(p_234372_, d1, d2 + (double)f17, d0 + 1.0, f46, f47, f48, f40, f43, k); -- this.vertex(p_234372_, d1, d2 + (double)f17, d0, f46, f47, f48, f40, f42, k); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f17, d0, f46, f47, f48, f41, f42, k); -- this.vertex(p_234372_, d1 + 1.0, d2 + (double)f17, d0 + 1.0, f46, f47, f48, f41, f43, k); -+ this.vertex(p_234372_, d1, d2 + (double)f17, d0 + 1.0, f46, f47, f48, f40, f43, k, alpha); -+ this.vertex(p_234372_, d1, d2 + (double)f17, d0, f46, f47, f48, f40, f42, k, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f17, d0, f46, f47, f48, f41, f42, k, alpha); -+ this.vertex(p_234372_, d1 + 1.0, d2 + (double)f17, d0 + 1.0, f46, f47, f48, f41, f43, k, alpha); + float f48 = f3 * f1; + float f50 = f3 * f2; +- this.vertex(p_234372_, f36, f37 + f16, f38 + 1.0F, f46, f48, f50, f40, f43, k); +- this.vertex(p_234372_, f36, f37 + f16, f38, f46, f48, f50, f40, f42, k); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f16, f38, f46, f48, f50, f41, f42, k); +- this.vertex(p_234372_, f36 + 1.0F, f37 + f16, f38 + 1.0F, f46, f48, f50, f41, f43, k); ++ this.vertex(p_234372_, f36, f37 + f16, f38 + 1.0F, f46, f48, f50, f40, f43, k, alpha); ++ this.vertex(p_234372_, f36, f37 + f16, f38, f46, f48, f50, f40, f42, k, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f16, f38, f46, f48, f50, f41, f42, k, alpha); ++ this.vertex(p_234372_, f36 + 1.0F, f37 + f16, f38 + 1.0F, f46, f48, f50, f41, f43, k, alpha); } int j = this.getLightColor(p_234370_, p_234371_); @@ -67,40 +67,40 @@ } @@ -275,15 +_,15 @@ - float f37 = f4 * f36 * f; - float f38 = f4 * f36 * f1; - float f39 = f4 * f36 * f2; -- this.vertex(p_234372_, d3, d2 + (double)f44, d4, f37, f38, f39, f53, f33, j); -- this.vertex(p_234372_, d5, d2 + (double)f45, d6, f37, f38, f39, f32, f34, j); -- this.vertex(p_234372_, d5, d2 + (double)f17, d6, f37, f38, f39, f32, f35, j); -- this.vertex(p_234372_, d3, d2 + (double)f17, d4, f37, f38, f39, f53, f35, j); -+ this.vertex(p_234372_, d3, d2 + (double)f44, d4, f37, f38, f39, f53, f33, j, alpha); -+ this.vertex(p_234372_, d5, d2 + (double)f45, d6, f37, f38, f39, f32, f34, j, alpha); -+ this.vertex(p_234372_, d5, d2 + (double)f17, d6, f37, f38, f39, f32, f35, j, alpha); -+ this.vertex(p_234372_, d3, d2 + (double)f17, d4, f37, f38, f39, f53, f35, j, alpha); + float f33 = f4 * f32 * f; + float f34 = f4 * f32 * f1; + float f35 = f4 * f32 * f2; +- this.vertex(p_234372_, f47, f37 + f44, f49, f33, f34, f35, f56, f59, j); +- this.vertex(p_234372_, f51, f37 + f45, f52, f33, f34, f35, f58, f60, j); +- this.vertex(p_234372_, f51, f37 + f16, f52, f33, f34, f35, f58, f31, j); +- this.vertex(p_234372_, f47, f37 + f16, f49, f33, f34, f35, f56, f31, j); ++ this.vertex(p_234372_, f47, f37 + f44, f49, f33, f34, f35, f56, f59, j, alpha); ++ this.vertex(p_234372_, f51, f37 + f45, f52, f33, f34, f35, f58, f60, j, alpha); ++ this.vertex(p_234372_, f51, f37 + f16, f52, f33, f34, f35, f58, f31, j, alpha); ++ this.vertex(p_234372_, f47, f37 + f16, f49, f33, f34, f35, f56, f31, j, alpha); if (textureatlassprite2 != this.waterOverlay) { -- this.vertex(p_234372_, d3, d2 + (double)f17, d4, f37, f38, f39, f53, f35, j); -- this.vertex(p_234372_, d5, d2 + (double)f17, d6, f37, f38, f39, f32, f35, j); -- this.vertex(p_234372_, d5, d2 + (double)f45, d6, f37, f38, f39, f32, f34, j); -- this.vertex(p_234372_, d3, d2 + (double)f44, d4, f37, f38, f39, f53, f33, j); -+ this.vertex(p_234372_, d3, d2 + (double)f17, d4, f37, f38, f39, f53, f35, j, alpha); -+ this.vertex(p_234372_, d5, d2 + (double)f17, d6, f37, f38, f39, f32, f35, j, alpha); -+ this.vertex(p_234372_, d5, d2 + (double)f45, d6, f37, f38, f39, f32, f34, j, alpha); -+ this.vertex(p_234372_, d3, d2 + (double)f44, d4, f37, f38, f39, f53, f33, j, alpha); +- this.vertex(p_234372_, f47, f37 + f16, f49, f33, f34, f35, f56, f31, j); +- this.vertex(p_234372_, f51, f37 + f16, f52, f33, f34, f35, f58, f31, j); +- this.vertex(p_234372_, f51, f37 + f45, f52, f33, f34, f35, f58, f60, j); +- this.vertex(p_234372_, f47, f37 + f44, f49, f33, f34, f35, f56, f59, j); ++ this.vertex(p_234372_, f47, f37 + f16, f49, f33, f34, f35, f56, f31, j, alpha); ++ this.vertex(p_234372_, f51, f37 + f16, f52, f33, f34, f35, f58, f31, j, alpha); ++ this.vertex(p_234372_, f51, f37 + f45, f52, f33, f34, f35, f58, f60, j, alpha); ++ this.vertex(p_234372_, f47, f37 + f44, f49, f33, f34, f35, f56, f59, j, alpha); } } } @@ -345,10 +_,11 @@ - float p_110991_, - float p_110992_, - float p_110993_, + float p_343128_, + float p_344448_, + float p_344284_, - int p_110994_ + int p_110994_, + float alpha ) { - p_110985_.vertex(p_110986_, p_110987_, p_110988_) -- .color(p_110989_, p_110990_, p_110991_, 1.0F) -+ .color(p_110989_, p_110990_, p_110991_, alpha) - .uv(p_110992_, p_110993_) - .uv2(p_110994_) - .normal(0.0F, 1.0F, 0.0F) + p_110985_.addVertex(p_110989_, p_110990_, p_110991_) +- .setColor(p_110992_, p_110993_, p_343128_, 1.0F) ++ .setColor(p_110992_, p_110993_, p_343128_, alpha) + .setUv(p_344448_, p_344284_) + .setLight(p_110994_) + .setNormal(0.0F, 1.0F, 0.0F); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElement.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElement.java.patch deleted file mode 100644 index 07dea24a97..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElement.java.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- a/net/minecraft/client/renderer/block/model/BlockElement.java -+++ b/net/minecraft/client/renderer/block/model/BlockElement.java -@@ -29,16 +_,23 @@ - public final Map faces; - public final BlockElementRotation rotation; - public final boolean shade; -+ private net.minecraftforge.client.model.ForgeFaceData faceData; - - public BlockElement( - Vector3f p_253626_, Vector3f p_254426_, Map p_254454_, @Nullable BlockElementRotation p_254229_, boolean p_253661_ - ) { -+ this(p_253626_, p_254426_, p_254454_, p_254229_, p_253661_, net.minecraftforge.client.model.ForgeFaceData.DEFAULT); -+ } -+ -+ public BlockElement(Vector3f p_253626_, Vector3f p_254426_, Map p_254454_, @Nullable BlockElementRotation p_254229_, boolean p_253661_, net.minecraftforge.client.model.ForgeFaceData faceData) { - this.from = p_253626_; - this.to = p_254426_; - this.faces = p_254454_; - this.rotation = p_254229_; - this.shade = p_253661_; - this.fillUvs(); -+ this.setFaceData(faceData); -+ this.faces.values().forEach(face -> face.parent = this); - } - - private void fillUvs() { -@@ -66,6 +_,14 @@ - } - } - -+ public net.minecraftforge.client.model.ForgeFaceData getFaceData() { -+ return this.faceData; -+ } -+ -+ public void setFaceData(net.minecraftforge.client.model.ForgeFaceData faceData) { -+ this.faceData = java.util.Objects.requireNonNull(faceData); -+ } -+ - @OnlyIn(Dist.CLIENT) - public static class Deserializer implements JsonDeserializer { - private static final boolean DEFAULT_SHADE = true; -@@ -80,7 +_,7 @@ - throw new JsonParseException("Expected shade to be a Boolean"); - } else { - boolean flag = GsonHelper.getAsBoolean(jsonobject, "shade", true); -- return new BlockElement(vector3f, vector3f1, map, blockelementrotation, flag); -+ return new BlockElement(vector3f, vector3f1, map, blockelementrotation, flag, net.minecraftforge.client.model.ForgeFaceData.read(jsonobject.get("forge_data"), net.minecraftforge.client.model.ForgeFaceData.DEFAULT)); - } - } - diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch index c2a12abc4f..1456bbf910 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockElementFace.java.patch @@ -1,38 +1,26 @@ --- a/net/minecraft/client/renderer/block/model/BlockElementFace.java +++ b/net/minecraft/client/renderer/block/model/BlockElementFace.java -@@ -19,13 +_,31 @@ - public final int tintIndex; - public final String texture; - public final BlockFaceUV uv; -+ @Nullable -+ private final net.minecraftforge.client.model.ForgeFaceData faceData; // If null, we defer to the parent BlockElement's ForgeFaceData, which is not nullable. -+ @Nullable -+ BlockElement parent; // Parent canot be set by the constructor due to instantiation ordering. This shouldn't really ever be null, but it could theoretically be. +@@ -13,9 +_,18 @@ + import net.minecraftforge.api.distmarker.OnlyIn; - public BlockElementFace(@Nullable Direction p_111359_, int p_111360_, String p_111361_, BlockFaceUV p_111362_) { -+ this(p_111359_, p_111360_, p_111361_, p_111362_, null); + @OnlyIn(Dist.CLIENT) +-public record BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockFaceUV uv) { ++public record BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockFaceUV uv, @Nullable net.minecraftforge.client.model.ForgeFaceData data) { + public static final int NO_TINT = -1; + ++ public BlockElementFace(@Nullable Direction cullForDirection, int tintIndex, String texture, BlockFaceUV uv) { ++ this(cullForDirection, tintIndex, texture, uv, null); + } + -+ public BlockElementFace(@Nullable Direction p_111359_, int p_111360_, String p_111361_, BlockFaceUV p_111362_, @Nullable net.minecraftforge.client.model.ForgeFaceData faceData) { - this.cullForDirection = p_111359_; - this.tintIndex = p_111360_; - this.texture = p_111361_; - this.uv = p_111362_; -+ this.faceData = faceData; - } ++ @Override ++ public net.minecraftforge.client.model.ForgeFaceData data() { ++ return this.data == null ? net.minecraftforge.client.model.ForgeFaceData.DEFAULT : this.data; ++ } + -+ public net.minecraftforge.client.model.ForgeFaceData getFaceData() { -+ if (this.faceData != null) { -+ return this.faceData; -+ } else if (this.parent != null) { -+ return this.parent.getFaceData(); -+ } -+ return net.minecraftforge.client.model.ForgeFaceData.DEFAULT; -+ } - @OnlyIn(Dist.CLIENT) public static class Deserializer implements JsonDeserializer { -@@ -37,7 +_,7 @@ + private static final int DEFAULT_TINT_INDEX = -1; +@@ -26,7 +_,7 @@ int i = this.getTintIndex(jsonobject); String s = this.getTexture(jsonobject); BlockFaceUV blockfaceuv = p_111367_.deserialize(jsonobject, BlockFaceUV.class); diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch index a4c4d82b78..f44badeac4 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/BlockModel.java.patch @@ -52,7 +52,7 @@ this.overrides.forEach(p_247932_ -> { UnbakedModel unbakedmodel1 = p_249059_.apply(p_247932_.getModel()); if (!Objects.equals(unbakedmodel1, this)) { -@@ -192,18 +_,27 @@ +@@ -192,13 +_,21 @@ }); } @@ -61,27 +61,21 @@ + */ + @Deprecated @Override - public BakedModel bake(ModelBaker p_252120_, Function p_250023_, ModelState p_251130_, ResourceLocation p_252208_) { - return this.bake(p_252120_, this, p_250023_, p_251130_, p_252208_, true); + public BakedModel bake(ModelBaker p_252120_, Function p_250023_, ModelState p_251130_) { + return this.bake(p_252120_, this, p_250023_, p_251130_, true); } -+ public BakedModel bake(ModelBaker p_249720_, BlockModel p_111451_, Function p_111452_, ModelState p_111453_, ResourceLocation p_111454_, boolean p_111455_) { -+ return net.minecraftforge.client.model.geometry.UnbakedGeometryHelper.bake(this, p_249720_, p_111451_, p_111452_, p_111453_, p_111454_, p_111455_); ++ public BakedModel bake(ModelBaker p_249720_, BlockModel p_111451_, Function p_111452_, ModelState p_111453_, boolean p_111455_) { ++ return net.minecraftforge.client.model.geometry.UnbakedGeometryHelper.bake(this, p_249720_, p_111451_, p_111452_, p_111453_, p_111455_); + } + public BakedModel bake( - ModelBaker p_249720_, - BlockModel p_111451_, - Function p_111452_, - ModelState p_111453_, - ResourceLocation p_111454_, -- boolean p_111455_ -+ boolean p_111455_, -+ net.minecraftforge.client.RenderTypeGroup renderTypes +- ModelBaker p_249720_, BlockModel p_111451_, Function p_111452_, ModelState p_111453_, boolean p_111455_ ++ ModelBaker p_249720_, BlockModel p_111451_, Function p_111452_, ModelState p_111453_, boolean p_111455_, net.minecraftforge.client.RenderTypeGroup renderTypes ) { TextureAtlasSprite textureatlassprite = p_111452_.apply(this.getMaterial("particle")); if (this.getRootModel() == ModelBakery.BLOCK_ENTITY_MARKER) { -@@ -295,7 +_,18 @@ +@@ -290,7 +_,18 @@ ItemTransform itemtransform5 = this.getTransform(ItemDisplayContext.GUI); ItemTransform itemtransform6 = this.getTransform(ItemDisplayContext.GROUND); ItemTransform itemtransform7 = this.getTransform(ItemDisplayContext.FIXED); @@ -101,7 +95,7 @@ } private ItemTransform getTransform(ItemDisplayContext p_270662_) { -@@ -413,6 +_,10 @@ +@@ -408,6 +_,10 @@ public boolean lightLikeBlock() { return this == SIDE; diff --git a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch index 8e0301642c..bc4b472a5d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/block/model/FaceBakery.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/client/renderer/block/model/FaceBakery.java +++ b/net/minecraft/client/renderer/block/model/FaceBakery.java -@@ -59,7 +_,14 @@ +@@ -57,7 +_,14 @@ this.recalculateWinding(aint, direction); } -- return new BakedQuad(aint, p_111603_.tintIndex, direction, p_111604_, p_111608_); -+ net.minecraftforge.client.ForgeHooksClient.fillNormal(aint, direction, p_111603_.getFaceData().calculateNormals()); -+ var data = p_111603_.getFaceData(); -+ var quad = new BakedQuad(aint, p_111603_.tintIndex, direction, p_111604_, p_111608_, data.ambientOcclusion()); +- return new BakedQuad(aint, p_111603_.tintIndex(), direction, p_111604_, p_111608_); ++ var data = p_111603_.data(); ++ net.minecraftforge.client.ForgeHooksClient.fillNormal(aint, direction, data.calculateNormals()); ++ var quad = new BakedQuad(aint, p_111603_.tintIndex(), direction, p_111604_, p_111608_, data.ambientOcclusion()); + if (!net.minecraftforge.client.model.ForgeFaceData.DEFAULT.equals(data)) { + net.minecraftforge.client.model.QuadTransformers.applyingLightmap(data.blockLight(), data.skyLight()).processInPlace(quad); + net.minecraftforge.client.model.QuadTransformers.applyingColor(data.color()).processInPlace(quad); @@ -15,4 +15,4 @@ + return quad; } - public static BlockFaceUV recomputeUVs(BlockFaceUV p_111582_, Direction p_111583_, Transformation p_111584_, ResourceLocation p_111585_) { + public static BlockFaceUV recomputeUVs(BlockFaceUV p_111582_, Direction p_111583_, Transformation p_111584_) { diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunkRegion.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunkRegion.java.patch index 90c7bd555e..cd78101c9c 100644 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunkRegion.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/chunk/RenderChunkRegion.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/client/renderer/chunk/RenderChunkRegion.java +++ b/net/minecraft/client/renderer/chunk/RenderChunkRegion.java -@@ -74,4 +_,14 @@ - public int getHeight() { - return this.level.getHeight(); +@@ -78,4 +_,14 @@ + public static int index(int p_345383_, int p_342744_, int p_343921_, int p_343462_) { + return p_343921_ - p_345383_ + (p_343462_ - p_342744_) * 3; } + + @Override diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch new file mode 100644 index 0000000000..8a88dd23de --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/chunk/SectionCompiler.java.patch @@ -0,0 +1,46 @@ +--- a/net/minecraft/client/renderer/chunk/SectionCompiler.java ++++ b/net/minecraft/client/renderer/chunk/SectionCompiler.java +@@ -41,6 +_,7 @@ + } + + public SectionCompiler.Results compile(SectionPos p_344383_, RenderChunkRegion p_342669_, VertexSorting p_342522_, SectionBufferBuilderPack p_343546_) { ++ var modelDataMap = net.minecraft.client.Minecraft.getInstance().level.getModelDataManager().getAt(p_344383_); + SectionCompiler.Results sectioncompiler$results = new SectionCompiler.Results(); + BlockPos blockpos = p_344383_.origin(); + BlockPos blockpos1 = blockpos.offset(15, 15, 15); +@@ -71,7 +_,11 @@ + } + + if (blockstate.getRenderShape() == RenderShape.MODEL) { +- RenderType rendertype2 = ItemBlockRenderTypes.getChunkRenderType(blockstate); ++ var model = this.blockRenderer.getBlockModel(blockstate); ++ var data = modelDataMap.getOrDefault(blockpos2, net.minecraftforge.client.model.data.ModelData.EMPTY); ++ data = model.getModelData(p_342669_, blockpos2, blockstate, data); ++ randomsource.setSeed(blockstate.getSeed(blockpos2)); ++ for (RenderType rendertype2 : model.getRenderTypes(blockstate, randomsource, data)) { + BufferBuilder bufferbuilder1 = this.getOrBeginLayer(map, p_343546_, rendertype2); + posestack.pushPose(); + posestack.translate( +@@ -79,8 +_,9 @@ + (float)SectionPos.sectionRelative(blockpos2.getY()), + (float)SectionPos.sectionRelative(blockpos2.getZ()) + ); +- this.blockRenderer.renderBatched(blockstate, blockpos2, p_342669_, posestack, bufferbuilder1, true, randomsource); ++ this.blockRenderer.renderBatched(blockstate, blockpos2, p_342669_, posestack, bufferbuilder1, true, randomsource, data, rendertype2); + posestack.popPose(); ++ } + } + } + +@@ -115,9 +_,10 @@ + private void handleBlockEntity(SectionCompiler.Results p_343713_, E p_343478_) { + BlockEntityRenderer blockentityrenderer = this.blockEntityRenderer.getRenderer(p_343478_); + if (blockentityrenderer != null) { +- p_343713_.blockEntities.add(p_343478_); + if (blockentityrenderer.shouldRenderOffScreen(p_343478_)) { + p_343713_.globalBlockEntities.add(p_343478_); ++ } else { ++ p_343713_.blockEntities.add(p_343478_); //FORGE: Fix MC-112730 + } + } + } diff --git a/patches/minecraft/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java.patch deleted file mode 100644 index eeab014b87..0000000000 --- a/patches/minecraft/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java.patch +++ /dev/null @@ -1,118 +0,0 @@ ---- a/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java -+++ b/net/minecraft/client/renderer/chunk/SectionRenderDispatcher.java -@@ -402,7 +_,7 @@ - if (!sectionrenderdispatcher$compiledsection.hasBlocks.contains(p_301074_)) { - return false; - } else { -- this.lastResortTransparencyTask = new SectionRenderDispatcher.RenderSection.ResortTransparencyTask(this.getDistToPlayerSqr(), sectionrenderdispatcher$compiledsection); -+ this.lastResortTransparencyTask = new SectionRenderDispatcher.RenderSection.ResortTransparencyTask(new net.minecraft.world.level.ChunkPos(getOrigin()), this.getDistToPlayerSqr(), sectionrenderdispatcher$compiledsection); - p_298196_.schedule(this.lastResortTransparencyTask); - return true; - } -@@ -436,7 +_,7 @@ - this.initialCompilationCancelCount.incrementAndGet(); - } - -- this.lastRebuildTask = new SectionRenderDispatcher.RenderSection.RebuildTask(this.getDistToPlayerSqr(), renderchunkregion, !flag1 || this.initialCompilationCancelCount.get() > 2); -+ this.lastRebuildTask = new SectionRenderDispatcher.RenderSection.RebuildTask(new net.minecraft.world.level.ChunkPos(getOrigin()), this.getDistToPlayerSqr(), renderchunkregion, !flag1 || this.initialCompilationCancelCount.get() > 2); - return this.lastRebuildTask; - } - -@@ -476,10 +_,21 @@ - protected final double distAtCreation; - protected final AtomicBoolean isCancelled = new AtomicBoolean(false); - protected final boolean isHighPriority; -+ protected java.util.Map modelData; - -+ @Deprecated - public CompileTask(final double p_300617_, final boolean p_299251_) { -+ this(null, p_300617_, p_299251_); -+ } -+ -+ public CompileTask(@Nullable net.minecraft.world.level.ChunkPos pos, double p_300617_, boolean p_299251_) { - this.distAtCreation = p_300617_; - this.isHighPriority = p_299251_; -+ if (pos == null) { -+ this.modelData = java.util.Collections.emptyMap(); -+ } else { -+ this.modelData = net.minecraft.client.Minecraft.getInstance().level.getModelDataManager().getAt(pos); -+ } - } - - public abstract CompletableFuture doTask(SectionBufferBuilderPack p_300298_); -@@ -491,6 +_,10 @@ - public int compareTo(SectionRenderDispatcher.RenderSection.CompileTask p_298947_) { - return Doubles.compare(this.distAtCreation, p_298947_.distAtCreation); - } -+ -+ public net.minecraftforge.client.model.data.ModelData getModelData(net.minecraft.core.BlockPos pos) { -+ return modelData.getOrDefault(pos, net.minecraftforge.client.model.data.ModelData.EMPTY); -+ } - } - - @OnlyIn(Dist.CLIENT) -@@ -498,8 +_,13 @@ - @Nullable - protected RenderChunkRegion region; - -+ @Deprecated - public RebuildTask(final double p_301300_, @Nullable final RenderChunkRegion p_300496_, final boolean p_299891_) { -- super(p_301300_, p_299891_); -+ this(null, p_301300_, p_300496_, p_299891_); -+ } -+ -+ public RebuildTask(@Nullable net.minecraft.world.level.ChunkPos pos, double p_301300_, @Nullable RenderChunkRegion p_300496_, boolean p_299891_) { -+ super(pos, p_301300_, p_299891_); - this.region = p_300496_; - } - -@@ -601,7 +_,10 @@ - } - - if (blockstate.getRenderShape() != RenderShape.INVISIBLE) { -- RenderType rendertype2 = ItemBlockRenderTypes.getChunkRenderType(blockstate); -+ var model = blockrenderdispatcher.getBlockModel(blockstate); -+ var modelData = model.getModelData(renderchunkregion, blockpos2, blockstate, getModelData(blockpos2)); -+ randomsource.setSeed(blockstate.getSeed(blockpos2)); -+ for (RenderType rendertype2 : model.getRenderTypes(blockstate, randomsource, modelData)) { - BufferBuilder bufferbuilder2 = p_300020_.builder(rendertype2); - if (set.add(rendertype2)) { - RenderSection.this.beginLayer(bufferbuilder2); -@@ -609,8 +_,9 @@ - - posestack.pushPose(); - posestack.translate((float)(blockpos2.getX() & 15), (float)(blockpos2.getY() & 15), (float)(blockpos2.getZ() & 15)); -- blockrenderdispatcher.renderBatched(blockstate, blockpos2, renderchunkregion, posestack, bufferbuilder2, true, randomsource); -+ blockrenderdispatcher.renderBatched(blockstate, blockpos2, renderchunkregion, posestack, bufferbuilder2, true, randomsource, modelData, rendertype2); - posestack.popPose(); -+ } - } - } - -@@ -643,9 +_,10 @@ - private void handleBlockEntity(SectionRenderDispatcher.RenderSection.RebuildTask.CompileResults p_297364_, E p_299361_) { - BlockEntityRenderer blockentityrenderer = Minecraft.getInstance().getBlockEntityRenderDispatcher().getRenderer(p_299361_); - if (blockentityrenderer != null) { -- p_297364_.blockEntities.add(p_299361_); - if (blockentityrenderer.shouldRenderOffScreen(p_299361_)) { - p_297364_.globalBlockEntities.add(p_299361_); -+ } else { -+ p_297364_.blockEntities.add(p_299361_); //FORGE: Fix MC-112730 - } - } - } -@@ -673,8 +_,13 @@ - class ResortTransparencyTask extends SectionRenderDispatcher.RenderSection.CompileTask { - private final SectionRenderDispatcher.CompiledSection compiledSection; - -+ @Deprecated - public ResortTransparencyTask(final double p_300619_, final SectionRenderDispatcher.CompiledSection p_297742_) { -- super(p_300619_, true); -+ this(null, p_300619_, p_297742_); -+ } -+ -+ public ResortTransparencyTask(@Nullable net.minecraft.world.level.ChunkPos pos, double p_300619_, SectionRenderDispatcher.CompiledSection p_297742_) { -+ super(pos, p_300619_, true); - this.compiledSection = p_297742_; - } - diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/BoatRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/BoatRenderer.java.patch index 92be634708..5e7b9506b6 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/BoatRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/BoatRenderer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/entity/BoatRenderer.java +++ b/net/minecraft/client/renderer/entity/BoatRenderer.java -@@ -75,7 +_,7 @@ +@@ -76,7 +_,7 @@ p_113932_.mulPose(new Quaternionf().setAngleAxis(p_113929_.getBubbleAngle(p_113931_) * (float) (Math.PI / 180.0), 1.0F, 0.0F, 1.0F)); } @@ -9,7 +9,7 @@ ResourceLocation resourcelocation = pair.getFirst(); ListModel listmodel = pair.getSecond(); p_113932_.scale(-1.0F, -1.0F, 1.0F); -@@ -94,7 +_,12 @@ +@@ -95,7 +_,12 @@ super.render(p_113929_, p_113930_, p_113931_, p_113932_, p_113933_, p_113934_); } diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch index 9be449172a..72b29df98d 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java +++ b/net/minecraft/client/renderer/entity/EntityRenderDispatcher.java -@@ -190,12 +_,12 @@ - private static void renderHitbox(PoseStack p_114442_, VertexConsumer p_114443_, Entity p_114444_, float p_114445_) { +@@ -222,12 +_,12 @@ + ) { AABB aabb = p_114444_.getBoundingBox().move(-p_114444_.getX(), -p_114444_.getY(), -p_114444_.getZ()); - LevelRenderer.renderLineBox(p_114442_, p_114443_, aabb, 1.0F, 1.0F, 1.0F, 1.0F); + LevelRenderer.renderLineBox(p_114442_, p_114443_, aabb, p_343193_, p_342304_, p_342638_, 1.0F); - if (p_114444_ instanceof EnderDragon) { + if (p_114444_.isMultipartEntity()) { double d0 = -Mth.lerp((double)p_114445_, p_114444_.xOld, p_114444_.getX()); @@ -15,7 +15,7 @@ p_114442_.pushPose(); double d3 = d0 + Mth.lerp((double)p_114445_, enderdragonpart.xOld, enderdragonpart.getX()); double d4 = d1 + Mth.lerp((double)p_114445_, enderdragonpart.yOld, enderdragonpart.getY()); -@@ -440,6 +_,10 @@ +@@ -467,6 +_,10 @@ return this.itemInHandRenderer; } @@ -26,7 +26,7 @@ @Override public void onResourceManagerReload(ResourceManager p_174004_) { EntityRendererProvider.Context entityrendererprovider$context = new EntityRendererProvider.Context( -@@ -447,5 +_,6 @@ +@@ -474,5 +_,6 @@ ); this.renderers = EntityRenderers.createEntityRenderers(entityrendererprovider$context); this.playerRenderers = EntityRenderers.createPlayerRenderers(entityrendererprovider$context); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch index 625dd62a65..195461f797 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/EntityRenderer.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/client/renderer/entity/EntityRenderer.java +++ b/net/minecraft/client/renderer/entity/EntityRenderer.java -@@ -71,8 +_,9 @@ - } +@@ -94,8 +_,9 @@ + } + } - public void render(T p_114485_, float p_114486_, float p_114487_, PoseStack p_114488_, MultiBufferSource p_114489_, int p_114490_) { - if (this.shouldShowName(p_114485_)) { - this.renderNameTag(p_114485_, p_114485_.getDisplayName(), p_114488_, p_114489_, p_114490_, p_114487_); + var event = net.minecraftforge.client.event.ForgeEventFactoryClient.fireRenderNameTagEvent(p_114485_, p_114485_.getDisplayName(), this, p_114488_, p_114489_, p_114490_, p_114487_); @@ -12,7 +12,7 @@ } } -@@ -88,7 +_,7 @@ +@@ -181,7 +_,7 @@ protected void renderNameTag(T p_114498_, Component p_114499_, PoseStack p_114500_, MultiBufferSource p_114501_, int p_114502_, float p_334448_) { double d0 = this.entityRenderDispatcher.distanceToSqr(p_114498_); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/FishingHookRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/FishingHookRenderer.java.patch index 8649bf4f60..d72638d9e6 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/FishingHookRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/FishingHookRenderer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/entity/FishingHookRenderer.java +++ b/net/minecraft/client/renderer/entity/FishingHookRenderer.java -@@ -66,7 +_,7 @@ +@@ -64,7 +_,7 @@ private Vec3 getPlayerHandPos(Player p_328037_, float p_328369_, float p_332926_) { int i = p_328037_.getMainArm() == HumanoidArm.RIGHT ? 1 : -1; ItemStack itemstack = p_328037_.getMainHandItem(); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/ItemRenderer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/ItemRenderer.java.patch index 72e3353d43..757253a920 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/ItemRenderer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/ItemRenderer.java.patch @@ -28,7 +28,7 @@ VertexConsumer vertexconsumer; if (hasAnimatedTexture(p_115144_) && p_115144_.hasFoil()) { PoseStack.Pose posestack$pose = p_115147_.last().copy(); -@@ -150,9 +_,11 @@ +@@ -146,9 +_,11 @@ vertexconsumer = getFoilBuffer(p_115148_, rendertype, true, p_115144_.hasFoil()); } @@ -42,7 +42,7 @@ } p_115147_.popPose(); -@@ -211,7 +_,7 @@ +@@ -199,7 +_,7 @@ float f1 = (float)FastColor.ARGB32.red(i) / 255.0F; float f2 = (float)FastColor.ARGB32.green(i) / 255.0F; float f3 = (float)FastColor.ARGB32.blue(i) / 255.0F; @@ -51,7 +51,7 @@ } } -@@ -264,5 +_,9 @@ +@@ -252,5 +_,9 @@ @Override public void onResourceManagerReload(ResourceManager p_115105_) { this.itemModelShaper.rebuildCache(); diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/ElytraLayer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/layers/ElytraLayer.java.patch index cb55050567..d83385a390 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/ElytraLayer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/layers/ElytraLayer.java.patch @@ -6,7 +6,7 @@ @OnlyIn(Dist.CLIENT) -public class ElytraLayer> extends RenderLayer { +public class ElytraLayer> extends RenderLayer implements net.minecraftforge.client.extensions.IForgeElytraLayer { - public static final ResourceLocation WINGS_LOCATION = new ResourceLocation("textures/entity/elytra.png"); + public static final ResourceLocation WINGS_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/elytra.png"); private final ElytraModel elytraModel; @@ -45,7 +_,7 @@ diff --git a/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch b/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch index 697450e034..8185980959 100644 --- a/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java.patch @@ -1,21 +1,19 @@ --- a/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java +++ b/net/minecraft/client/renderer/entity/layers/HumanoidArmorLayer.java -@@ -66,6 +_,7 @@ +@@ -66,22 +_,24 @@ if (armoritem.getEquipmentSlot() == p_117122_) { this.getParentModel().copyPropertiesTo(p_117124_); this.setPartVisibility(p_117124_, p_117122_); + net.minecraft.client.model.Model model = getArmorModelHook(p_117121_, itemstack, p_117122_, p_117124_); boolean flag = this.usesInnerModel(p_117122_); ArmorMaterial armormaterial = armoritem.getMaterial().value(); - int i = itemstack.is(ItemTags.DYEABLE) ? DyedItemColor.getOrDefault(itemstack, -6265536) : -1; -@@ -83,17 +_,17 @@ - f1 = 1.0F; - f2 = 1.0F; - } -- -- this.renderModel(p_117119_, p_117120_, p_117123_, p_117124_, f, f1, f2, armormaterial$layer.texture(flag)); + int i = itemstack.is(ItemTags.DYEABLE) ? FastColor.ARGB32.opaque(DyedItemColor.getOrDefault(itemstack, -6265536)) : -1; + + for (ArmorMaterial.Layer armormaterial$layer : armormaterial.layers()) { + int j = armormaterial$layer.dyeable() ? i : -1; +- this.renderModel(p_117119_, p_117120_, p_117123_, p_117124_, j, armormaterial$layer.texture(flag)); + var texture = net.minecraftforge.client.ForgeHooksClient.getArmorTexture(p_117121_, itemstack, p_117122_, armormaterial$layer, flag); -+ this.renderModel(p_117119_, p_117120_, p_117123_, model, f, f1, f2, texture); ++ this.renderModel(p_117119_, p_117120_, p_117123_, model, j, texture); } ArmorTrim armortrim = itemstack.get(DataComponents.TRIM); @@ -30,25 +28,16 @@ } } } -@@ -122,11 +_,15 @@ - } +@@ -111,12 +_,20 @@ } -+ private void renderModel(PoseStack p_289664_, MultiBufferSource p_289689_, int p_289681_, A p_289658_, float p_289678_, float p_289674_, float p_289693_, ResourceLocation p_328978_) { -+ renderModel(p_289664_, p_289689_, p_289681_, (net.minecraft.client.model.Model)p_289658_, p_289678_, p_289674_, p_289693_, p_328978_); + private void renderModel(PoseStack p_289664_, MultiBufferSource p_289689_, int p_289681_, A p_289658_, int p_342257_, ResourceLocation p_328978_) { ++ renderModel(p_289664_, p_289689_, p_289681_, (net.minecraft.client.model.Model)p_289658_, p_342257_, p_328978_); + } + - private void renderModel( - PoseStack p_289664_, - MultiBufferSource p_289689_, - int p_289681_, -- A p_289658_, -+ net.minecraft.client.model.Model p_289658_, - float p_289678_, - float p_289674_, - float p_289693_, -@@ -136,8 +_,12 @@ - p_289658_.renderToBuffer(p_289664_, vertexconsumer, p_289681_, OverlayTexture.NO_OVERLAY, p_289678_, p_289674_, p_289693_, 1.0F); ++ private void renderModel(PoseStack p_289664_, MultiBufferSource p_289689_, int p_289681_, net.minecraft.client.model.Model p_289658_, int p_342257_, ResourceLocation p_328978_) { + VertexConsumer vertexconsumer = p_289689_.getBuffer(RenderType.armorCutoutNoCull(p_328978_)); + p_289658_.renderToBuffer(p_289664_, vertexconsumer, p_289681_, OverlayTexture.NO_OVERLAY, p_342257_); } + private void renderTrim(Holder p_331988_, PoseStack p_289687_, MultiBufferSource p_289643_, int p_289683_, ArmorTrim p_289692_, A p_289663_, boolean p_289651_) { @@ -61,7 +50,7 @@ ) { TextureAtlasSprite textureatlassprite = this.armorTrimAtlas.getSprite(p_289651_ ? p_289692_.innerTexture(p_331988_) : p_289692_.outerTexture(p_331988_)); VertexConsumer vertexconsumer = textureatlassprite.wrap(p_289643_.getBuffer(Sheets.armorTrimsSheet(p_289692_.pattern().value().decal()))); -@@ -145,6 +_,10 @@ +@@ -124,6 +_,10 @@ } private void renderGlint(PoseStack p_289673_, MultiBufferSource p_289654_, int p_289649_, A p_289659_) { @@ -69,10 +58,10 @@ + } + + private void renderGlint(PoseStack p_289673_, MultiBufferSource p_289654_, int p_289649_, net.minecraft.client.model.Model p_289659_) { - p_289659_.renderToBuffer(p_289673_, p_289654_.getBuffer(RenderType.armorEntityGlint()), p_289649_, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + p_289659_.renderToBuffer(p_289673_, p_289654_.getBuffer(RenderType.armorEntityGlint()), p_289649_, OverlayTexture.NO_OVERLAY); } -@@ -154,5 +_,12 @@ +@@ -133,5 +_,12 @@ private boolean usesInnerModel(EquipmentSlot p_117129_) { return p_117129_ == EquipmentSlot.LEGS; diff --git a/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch b/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch index 8f255f3d9d..a9534fcf06 100644 --- a/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/language/LanguageManager.java.patch @@ -1,16 +1,17 @@ --- a/net/minecraft/client/resources/language/LanguageManager.java +++ b/net/minecraft/client/resources/language/LanguageManager.java -@@ -28,7 +_,7 @@ - private String currentCode; +@@ -30,8 +_,8 @@ + private final Consumer reloadCallback; - public LanguageManager(String p_118971_) { + public LanguageManager(String p_118971_, Consumer p_342376_) { - this.currentCode = p_118971_; + this.reloadCallback = p_342376_; + setSelected(p_118971_); } private static Map extractLanguages(Stream p_118982_) { -@@ -65,8 +_,12 @@ - Language.inject(clientlanguage); +@@ -69,8 +_,12 @@ + this.reloadCallback.accept(clientlanguage); } + private java.util.Locale javaLocale; // Forge: add locale information for modders @@ -18,7 +19,7 @@ public void setSelected(String p_265224_) { this.currentCode = p_265224_; + final String[] langSplit = p_265224_.split("_", 2); -+ this.javaLocale = langSplit.length == 1 ? new java.util.Locale(langSplit[0]) : new java.util.Locale(langSplit[0], langSplit[1]); ++ this.javaLocale = langSplit.length == 1 ? java.util.Locale.of(langSplit[0]) : java.util.Locale.of(langSplit[0], langSplit[1]); } public String getSelected() { diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch index 1e84f24f32..c2772890aa 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch @@ -1,20 +1,17 @@ --- a/net/minecraft/client/resources/model/ModelBakery.java +++ b/net/minecraft/client/resources/model/ModelBakery.java -@@ -161,6 +_,13 @@ +@@ -115,6 +_,10 @@ p_252014_.popPush("special"); - this.loadTopLevel(ItemRenderer.TRIDENT_IN_HAND_MODEL); - this.loadTopLevel(ItemRenderer.SPYGLASS_IN_HAND_MODEL); -+ Set additionalModels = Sets.newHashSet(); + this.loadSpecialItemModelAndDependencies(ItemRenderer.TRIDENT_IN_HAND_MODEL); + this.loadSpecialItemModelAndDependencies(ItemRenderer.SPYGLASS_IN_HAND_MODEL); ++ Set additionalModels = new HashSet<>(); + net.minecraftforge.client.ForgeHooksClient.onRegisterAdditionalModels(additionalModels); -+ for (ResourceLocation rl : additionalModels) { -+ UnbakedModel unbakedmodel = this.getModel(rl); // loadTopLevel(...), but w/o ModelResourceLocation limitation -+ this.unbakedCache.put(rl, unbakedmodel); -+ this.topLevelModels.put(rl, unbakedmodel); -+ } ++ for (var rl : additionalModels) ++ this.registerModel(rl, this.getModel(rl.id())); this.topLevelModels.values().forEach(p_247954_ -> p_247954_.resolveParents(this::getModel)); p_252014_.pop(); } -@@ -478,7 +_,17 @@ +@@ -244,14 +_,24 @@ } @Override @@ -32,16 +29,30 @@ ModelBakery.BakedCacheKey modelbakery$bakedcachekey = new ModelBakery.BakedCacheKey(p_252176_, p_249765_.getRotation(), p_249765_.isUvLocked()); BakedModel bakedmodel = ModelBakery.this.bakedCache.get(modelbakery$bakedcachekey); if (bakedmodel != null) { -@@ -486,10 +_,10 @@ + return bakedmodel; } else { UnbakedModel unbakedmodel = this.getModel(p_252176_); - if (unbakedmodel instanceof BlockModel blockmodel && blockmodel.getRootModel() == ModelBakery.GENERATION_MARKER) { -- return ModelBakery.ITEM_MODEL_GENERATOR.generateBlockModel(this.modelTextureGetter, blockmodel).bake(this, blockmodel, this.modelTextureGetter, p_249765_, p_252176_, false); -+ return ModelBakery.ITEM_MODEL_GENERATOR.generateBlockModel(sprites, blockmodel).bake(this, blockmodel, sprites, p_249765_, p_252176_, false); - } - -- BakedModel bakedmodel1 = unbakedmodel.bake(this, this.modelTextureGetter, p_249765_, p_252176_); -+ BakedModel bakedmodel1 = unbakedmodel.bake(this, sprites, p_249765_, p_252176_); +- BakedModel bakedmodel1 = this.bakeUncached(unbakedmodel, p_249765_); ++ BakedModel bakedmodel1 = this.bakeUncached(unbakedmodel, p_249765_, sprites); ModelBakery.this.bakedCache.put(modelbakery$bakedcachekey, bakedmodel1); return bakedmodel1; } +@@ -259,11 +_,16 @@ + + @Nullable + BakedModel bakeUncached(UnbakedModel p_343761_, ModelState p_342939_) { ++ return bakeUncached(p_343761_, p_342939_, this.modelTextureGetter); ++ } ++ ++ @Nullable ++ BakedModel bakeUncached(UnbakedModel p_343761_, ModelState p_342939_, Function sprites) { + if (p_343761_ instanceof BlockModel blockmodel && blockmodel.getRootModel() == ModelBakery.GENERATION_MARKER) { +- return ModelBakery.ITEM_MODEL_GENERATOR.generateBlockModel(this.modelTextureGetter, blockmodel).bake(this, blockmodel, this.modelTextureGetter, p_342939_, false); ++ return ModelBakery.ITEM_MODEL_GENERATOR.generateBlockModel(sprites, blockmodel).bake(this, blockmodel, sprites, p_342939_, false); + } + +- return p_343761_.bake(this, this.modelTextureGetter, p_342939_); ++ return p_343761_.bake(this, sprites, p_342939_); + } + } + diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch index 50d329af99..af3c263673 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelManager.java.patch @@ -2,10 +2,10 @@ +++ b/net/minecraft/client/resources/model/ModelManager.java @@ -63,13 +_,14 @@ TextureAtlas.LOCATION_BLOCKS, - new ResourceLocation("blocks") + ResourceLocation.withDefaultNamespace("blocks") ); -- private Map bakedRegistry; -+ private Map bakedRegistry = new java.util.HashMap<>(); +- private Map bakedRegistry; ++ private Map bakedRegistry = new java.util.HashMap<>(); private final AtlasSet atlases; private final BlockModelShaper blockModelShaper; private final BlockColors blockColors; @@ -16,35 +16,24 @@ public ModelManager(TextureManager p_119406_, BlockColors p_119407_, int p_119408_) { this.blockColors = p_119407_; -@@ -78,6 +_,10 @@ - this.atlases = new AtlasSet(VANILLA_ATLASES, p_119406_); - } - -+ public BakedModel getModel(ResourceLocation modelLocation) { -+ return this.bakedRegistry.getOrDefault(modelLocation, this.missingModel); -+ } -+ - public BakedModel getModel(ModelResourceLocation p_119423_) { - return this.bakedRegistry.getOrDefault(p_119423_, this.missingModel); - } @@ -100,6 +_,7 @@ Executor p_249221_ ) { p_250336_.startTick(); + net.minecraftforge.client.model.geometry.GeometryLoaderManager.init(); CompletableFuture> completablefuture = loadBlockModels(p_251134_, p_250550_); - CompletableFuture>> completablefuture1 = loadBlockStates(p_251134_, p_250550_); + CompletableFuture>> completablefuture1 = loadBlockStates(p_251134_, p_250550_); CompletableFuture completablefuture2 = completablefuture.thenCombineAsync( -@@ -211,6 +_,8 @@ +@@ -214,6 +_,8 @@ .collect(Collectors.joining("\n")) ) ); + p_252136_.popPush("forge_modify_baking_result"); + net.minecraftforge.client.ForgeHooksClient.onModifyBakingResult(p_248945_.getBakedTopLevelModels(), p_248945_); p_252136_.popPush("dispatch"); - Map map = p_248945_.getBakedTopLevelModels(); - BakedModel bakedmodel = map.get(ModelBakery.MISSING_MODEL_LOCATION); -@@ -240,6 +_,8 @@ + Map map = p_248945_.getBakedTopLevelModels(); + BakedModel bakedmodel = map.get(ModelBakery.MISSING_MODEL_VARIANT); +@@ -243,6 +_,8 @@ this.bakedRegistry = modelbakery.getBakedTopLevelModels(); this.modelGroups = modelbakery.getModelGroups(); this.missingModel = p_248996_.missingModel; @@ -53,7 +42,7 @@ p_251960_.popPush("cache"); this.blockModelShaper.replaceCache(p_248996_.modelCache); p_251960_.pop(); -@@ -265,6 +_,7 @@ +@@ -268,6 +_,7 @@ } public TextureAtlas getAtlas(ResourceLocation p_119429_) { @@ -61,7 +50,7 @@ return this.atlases.getAtlas(p_119429_); } -@@ -275,6 +_,10 @@ +@@ -278,6 +_,10 @@ public void updateMaxMipLevel(int p_119411_) { this.maxMipmapLevels = p_119411_; diff --git a/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch b/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch index bee2687ed3..17e10dcb03 100644 --- a/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch +++ b/patches/minecraft/net/minecraft/client/server/IntegratedServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/server/IntegratedServer.java +++ b/net/minecraft/client/server/IntegratedServer.java -@@ -72,11 +_,12 @@ +@@ -73,11 +_,12 @@ this.setPvpAllowed(true); this.setFlightAllowed(true); this.initializeKeyPair(); @@ -14,7 +14,7 @@ } @Override -@@ -224,6 +_,7 @@ +@@ -225,6 +_,7 @@ @Override public void halt(boolean p_120053_) { diff --git a/patches/minecraft/net/minecraft/commands/Commands.java.patch b/patches/minecraft/net/minecraft/commands/Commands.java.patch index 748dc2f837..fc1c3ea1a4 100644 --- a/patches/minecraft/net/minecraft/commands/Commands.java.patch +++ b/patches/minecraft/net/minecraft/commands/Commands.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -215,7 +_,7 @@ +@@ -214,7 +_,7 @@ JfrCommand.register(this.dispatcher); } - if (SharedConstants.IS_RUNNING_IN_IDE) { + if (net.minecraftforge.gametest.ForgeGameTestHooks.isGametestEnabled()) { TestCommand.register(this.dispatcher); - ResetChunksCommand.register(this.dispatcher); RaidCommand.register(this.dispatcher, p_230944_); -@@ -250,6 +_,7 @@ + DebugPathCommand.register(this.dispatcher); +@@ -248,6 +_,7 @@ if (p_230943_.includeIntegrated) { PublishCommand.register(this.dispatcher); } @@ -17,7 +17,7 @@ this.dispatcher.setConsumer(ExecutionCommandSource.resultConsumer()); } -@@ -268,9 +_,18 @@ +@@ -266,9 +_,18 @@ public void performCommand(ParseResults p_242844_, String p_242841_) { CommandSourceStack commandsourcestack = p_242844_.getContext().getSource(); commandsourcestack.getServer().getProfiler().push(() -> "/" + p_242841_); @@ -37,7 +37,7 @@ if (contextchain != null) { executeCommandInContext( commandsourcestack, -@@ -361,7 +_,8 @@ +@@ -359,7 +_,8 @@ Map, CommandNode> map = Maps.newHashMap(); RootCommandNode rootcommandnode = new RootCommandNode<>(); map.put(this.dispatcher.getRoot(), rootcommandnode); diff --git a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch index e0637c19f6..d1ee61dbf9 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelector.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/net/minecraft/commands/arguments/selector/EntitySelector.java -@@ -104,7 +_,7 @@ +@@ -105,7 +_,7 @@ } private void checkPermissions(CommandSourceStack p_121169_) throws CommandSyntaxException { diff --git a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch index bb4713b88d..4f8a9102eb 100644 --- a/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch +++ b/patches/minecraft/net/minecraft/commands/arguments/selector/EntitySelectorParser.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/commands/arguments/selector/EntitySelectorParser.java +++ b/net/minecraft/commands/arguments/selector/EntitySelectorParser.java -@@ -453,6 +_,11 @@ +@@ -472,6 +_,11 @@ } this.reader.skip(); @@ -12,10 +12,10 @@ this.parseSelector(); } else { this.parseNameOrUUID(); -@@ -468,6 +_,7 @@ - p_121248_.suggest("@r", Component.translatable("argument.entity.selector.randomPlayer")); +@@ -488,6 +_,7 @@ p_121248_.suggest("@s", Component.translatable("argument.entity.selector.self")); p_121248_.suggest("@e", Component.translatable("argument.entity.selector.allEntities")); + p_121248_.suggest("@n", Component.translatable("argument.entity.selector.nearestEntity")); + net.minecraftforge.common.command.EntitySelectorManager.fillSelectorSuggestions(p_121248_); } diff --git a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch index 6ce918debd..fb3faec4a1 100644 --- a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch +++ b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch @@ -17,7 +17,7 @@ } this.byKey.put(p_256252_, reference); -@@ -322,7 +_,6 @@ +@@ -327,7 +_,6 @@ return this; } else { this.frozen = true; @@ -25,7 +25,7 @@ List list = this.byKey .entrySet() .stream() -@@ -338,7 +_,8 @@ +@@ -343,7 +_,8 @@ throw new IllegalStateException("Some intrusive holders were not registered: " + this.unregisteredIntrusiveHolders.values()); } @@ -35,7 +35,7 @@ } return this; -@@ -435,5 +_,24 @@ +@@ -440,5 +_,24 @@ @Override public HolderLookup.RegistryLookup asLookup() { return this.lookup; diff --git a/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch b/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch index a8c8c0a3fe..d014643a91 100644 --- a/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch +++ b/patches/minecraft/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch @@ -7,19 +7,19 @@ - if (dispensiblecontaineritem.emptyContents(null, level, blockpos, null)) { + if (dispensiblecontaineritem.emptyContents(null, level, blockpos, null, p_333855_)) { dispensiblecontaineritem.checkExtraContent(null, level, p_333855_, blockpos); - return new ItemStack(Items.BUCKET); + return this.consumeWithRemainder(p_333645_, p_333855_, new ItemStack(Items.BUCKET)); } else { -@@ -294,9 +_,11 @@ +@@ -283,9 +_,11 @@ } else if (CampfireBlock.canLight(blockstate) || CandleBlock.canLight(blockstate) || CandleCakeBlock.canLight(blockstate)) { - level.setBlockAndUpdate(blockpos, blockstate.setValue(BlockStateProperties.LIT, Boolean.valueOf(true))); - level.gameEvent(null, GameEvent.BLOCK_CHANGE, blockpos); + serverlevel.setBlockAndUpdate(blockpos, blockstate.setValue(BlockStateProperties.LIT, Boolean.valueOf(true))); + serverlevel.gameEvent(null, GameEvent.BLOCK_CHANGE, blockpos); - } else if (blockstate.getBlock() instanceof TntBlock) { -- TntBlock.explode(level, blockpos); -- level.removeBlock(blockpos, false); -+ } else if (blockstate.isFlammable(level, blockpos, p_333039_.state().getValue(DispenserBlock.FACING).getOpposite())) { -+ blockstate.onCaughtFire(level, blockpos, p_333039_.state().getValue(DispenserBlock.FACING).getOpposite(), null); +- TntBlock.explode(serverlevel, blockpos); +- serverlevel.removeBlock(blockpos, false); ++ } else if (blockstate.isFlammable(serverlevel, blockpos, p_333039_.state().getValue(DispenserBlock.FACING).getOpposite())) { ++ blockstate.onCaughtFire(serverlevel, blockpos, p_333039_.state().getValue(DispenserBlock.FACING).getOpposite(), null); + if (blockstate.getBlock() instanceof TntBlock) { -+ level.removeBlock(blockpos, false); ++ serverlevel.removeBlock(blockpos, false); + } } else { this.setSuccess(false); diff --git a/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch b/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch index 55d4a8193d..ac84d09b4c 100644 --- a/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch +++ b/patches/minecraft/net/minecraft/core/registries/BuiltInRegistries.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/registries/BuiltInRegistries.java +++ b/net/minecraft/core/registries/BuiltInRegistries.java -@@ -230,7 +_,9 @@ +@@ -240,7 +_,9 @@ ) { Bootstrap.checkBootstrapCalled(() -> "registry " + p_259230_); ResourceLocation resourcelocation = p_259230_.location(); @@ -11,7 +11,7 @@ WRITABLE_REGISTRY.register((ResourceKey)p_259230_, p_260327_, RegistrationInfo.BUILT_IN); return p_260327_; } -@@ -265,7 +_,7 @@ +@@ -275,7 +_,7 @@ if (p_325821_ instanceof DefaultedRegistry) { ResourceLocation resourcelocation = ((DefaultedRegistry)p_325821_).getDefaultKey(); diff --git a/patches/minecraft/net/minecraft/core/registries/Registries.java.patch b/patches/minecraft/net/minecraft/core/registries/Registries.java.patch new file mode 100644 index 0000000000..4637f5075c --- /dev/null +++ b/patches/minecraft/net/minecraft/core/registries/Registries.java.patch @@ -0,0 +1,17 @@ +--- a/net/minecraft/core/registries/Registries.java ++++ b/net/minecraft/core/registries/Registries.java +@@ -237,10 +_,14 @@ + } + + public static String elementsDirPath(ResourceKey> p_343743_) { ++ if (!p_343743_.location().getNamespace().equals("minecraft")) ++ return p_343743_.location().getNamespace() + '/' + p_343743_.location().getPath(); + return p_343743_.location().getPath(); + } + + public static String tagsDirPath(ResourceKey> p_343025_) { ++ if (!p_343025_.location().getNamespace().equals("minecraft")) ++ return "tags/" + p_343025_.location().getNamespace() + '/' + p_343025_.location().getPath(); + return "tags/" + p_343025_.location().getPath(); + } + } diff --git a/patches/minecraft/net/minecraft/data/Main.java.patch b/patches/minecraft/net/minecraft/data/Main.java.patch index 542d84046a..66110d152f 100644 --- a/patches/minecraft/net/minecraft/data/Main.java.patch +++ b/patches/minecraft/net/minecraft/data/Main.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/Main.java +++ b/net/minecraft/data/Main.java -@@ -86,8 +_,15 @@ +@@ -77,8 +_,15 @@ OptionSpec optionspec6 = optionparser.accepts("all", "Include all generators"); OptionSpec optionspec7 = optionparser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated"); OptionSpec optionspec8 = optionparser.accepts("input", "Input folder").withRequiredArg(); @@ -17,7 +17,7 @@ Path path = Paths.get(optionspec7.value(optionset)); boolean flag = optionset.has(optionspec6); boolean flag1 = flag || optionset.has(optionspec2); -@@ -95,6 +_,13 @@ +@@ -86,6 +_,13 @@ boolean flag3 = flag || optionset.has(optionspec3); boolean flag4 = flag || optionset.has(optionspec4); boolean flag5 = flag || optionset.has(optionspec5); @@ -31,7 +31,7 @@ DataGenerator datagenerator = createStandardGenerator( path, optionset.valuesOf(optionspec8).stream().map(p_129659_ -> Paths.get(p_129659_)).collect(Collectors.toList()), -@@ -107,6 +_,7 @@ +@@ -98,6 +_,7 @@ true ); datagenerator.run(); diff --git a/patches/minecraft/net/minecraft/data/advancements/AdvancementProvider.java.patch b/patches/minecraft/net/minecraft/data/advancements/AdvancementProvider.java.patch index 2522c005c9..3c8705107d 100644 --- a/patches/minecraft/net/minecraft/data/advancements/AdvancementProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/advancements/AdvancementProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/advancements/AdvancementProvider.java +++ b/net/minecraft/data/advancements/AdvancementProvider.java -@@ -15,6 +_,11 @@ +@@ -16,6 +_,11 @@ import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; diff --git a/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch index 7805b397d4..4bc864c8e6 100644 --- a/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/BlockLootSubProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/loot/BlockLootSubProvider.java +++ b/net/minecraft/data/loot/BlockLootSubProvider.java -@@ -605,12 +_,16 @@ +@@ -641,12 +_,16 @@ protected abstract void generate(); @@ -9,7 +9,7 @@ + } + @Override - public void generate(HolderLookup.Provider p_331289_, BiConsumer, LootTable.Builder> p_249322_) { + public void generate(BiConsumer, LootTable.Builder> p_249322_) { this.generate(); Set> set = new HashSet<>(); diff --git a/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch index 97b9d62722..4ee7637be6 100644 --- a/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/EntityLootSubProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/loot/EntityLootSubProvider.java +++ b/net/minecraft/data/loot/EntityLootSubProvider.java -@@ -58,12 +_,16 @@ +@@ -96,12 +_,16 @@ public abstract void generate(); @@ -9,7 +9,7 @@ + } + @Override - public void generate(HolderLookup.Provider p_327798_, BiConsumer, LootTable.Builder> p_251751_) { + public void generate(BiConsumer, LootTable.Builder> p_251751_) { this.generate(); Set> set = new HashSet<>(); - BuiltInRegistries.ENTITY_TYPE @@ -19,7 +19,7 @@ .forEach( p_266624_ -> { EntityType entitytype = p_266624_.value(); -@@ -113,7 +_,7 @@ +@@ -151,7 +_,7 @@ } } diff --git a/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch b/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch index 09402363e9..358c799666 100644 --- a/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/loot/LootTableProvider.java.patch @@ -4,8 +4,8 @@ private CompletableFuture run(CachedOutput p_327970_, HolderLookup.Provider p_331092_) { WritableRegistry writableregistry = new MappedRegistry<>(Registries.LOOT_TABLE, Lifecycle.experimental()); Map map = new Object2ObjectOpenHashMap<>(); -- this.subProviders.forEach(p_325858_ -> p_325858_.provider().get().generate(p_331092_, (p_325864_, p_325865_) -> { -+ this.getTables().forEach(p_325858_ -> p_325858_.provider().get().generate(p_331092_, (p_325864_, p_325865_) -> { +- this.subProviders.forEach(p_341016_ -> p_341016_.provider().apply(p_331092_).generate((p_325864_, p_325865_) -> { ++ this.getTables().forEach(p_341016_ -> p_341016_.provider().apply(p_331092_).generate((p_325864_, p_325865_) -> { ResourceLocation resourcelocation = sequenceIdForLootTable(p_325864_); ResourceLocation resourcelocation1 = map.put(RandomSequence.seedForKey(resourcelocation), resourcelocation); if (resourcelocation1 != null) { @@ -50,4 +50,4 @@ + )); } - public static record SubProviderEntry(Supplier provider, LootContextParamSet paramSet) { + public static record SubProviderEntry(Function provider, LootContextParamSet paramSet) { diff --git a/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch b/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch index 1f8a839f71..3569cad450 100644 --- a/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/recipes/RecipeProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/recipes/RecipeProvider.java +++ b/net/minecraft/data/recipes/RecipeProvider.java -@@ -83,21 +_,16 @@ +@@ -84,21 +_,16 @@ this.buildRecipes( new RecipeOutput() { @Override @@ -28,7 +28,7 @@ } } } -@@ -106,9 +_,24 @@ +@@ -107,9 +_,24 @@ public Advancement.Builder advancement() { return Advancement.Builder.recipeAdvancement().parent(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT); } diff --git a/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch b/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch index 334973dcaa..2984723d77 100644 --- a/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch +++ b/patches/minecraft/net/minecraft/data/registries/RegistriesDatapackGenerator.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/data/registries/RegistriesDatapackGenerator.java +++ b/net/minecraft/data/registries/RegistriesDatapackGenerator.java -@@ -22,10 +_,21 @@ - private static final Logger LOGGER = LogUtils.getLogger(); +@@ -20,10 +_,21 @@ + public class RegistriesDatapackGenerator implements DataProvider { private final PackOutput output; private final CompletableFuture registries; + private final java.util.function.Predicate namespacePredicate; @@ -22,7 +22,7 @@ } @Override -@@ -35,8 +_,7 @@ +@@ -33,8 +_,7 @@ p_325918_ -> { DynamicOps dynamicops = p_325918_.createSerializationContext(JsonOps.INSTANCE); return CompletableFuture.allOf( @@ -32,14 +32,10 @@ .flatMap(p_256552_ -> this.dumpRegistryCap(p_255785_, p_325918_, dynamicops, (RegistryDataLoader.RegistryData)p_256552_).stream()) .toArray(CompletableFuture[]::new) ); -@@ -52,9 +_,10 @@ - .map( - p_255847_ -> { - PackOutput.PathProvider packoutput$pathprovider = this.output -- .createPathProvider(PackOutput.Target.DATA_PACK, resourcekey.location().getPath()); -+ .createPathProvider(PackOutput.Target.DATA_PACK, net.minecraftforge.common.ForgeHooks.prefixNamespace(resourcekey.location())); +@@ -52,6 +_,7 @@ + PackOutput.PathProvider packoutput$pathprovider = this.output.createRegistryElementsPathProvider(resourcekey); return CompletableFuture.allOf( - p_255847_.listElements() + p_341079_.listElements() + .filter(holder -> this.namespacePredicate.test(holder.key().location().getNamespace())) .map( p_256105_ -> dumpValue( diff --git a/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch b/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch index 8b05c87b0d..94e1887dfc 100644 --- a/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch +++ b/patches/minecraft/net/minecraft/data/registries/VanillaRegistries.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/data/registries/VanillaRegistries.java +++ b/net/minecraft/data/registries/VanillaRegistries.java -@@ -60,6 +_,7 @@ - .add(Registries.WOLF_VARIANT, WolfVariants::bootstrap) - .add(Registries.DAMAGE_TYPE, DamageTypes::bootstrap) - .add(Registries.BANNER_PATTERN, BannerPatterns::bootstrap); +@@ -68,6 +_,7 @@ + .add(Registries.ENCHANTMENT, Enchantments::bootstrap) + .add(Registries.ENCHANTMENT_PROVIDER, VanillaEnchantmentProviders::bootstrap) + .add(Registries.JUKEBOX_SONG, JukeboxSongs::bootstrap); + public static final List>> DATAPACK_REGISTRY_KEYS = BUILDER.getEntryKeys(); private static void validateThatAllBiomeFeaturesHaveBiomeFilter(HolderLookup.Provider p_256242_) { diff --git a/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch index 4f42d81bad..11eb46c978 100644 --- a/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/BiomeTagsProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/tags/BiomeTagsProvider.java +++ b/net/minecraft/data/tags/BiomeTagsProvider.java -@@ -14,6 +_,10 @@ +@@ -15,6 +_,10 @@ super(p_255800_, Registries.BIOME, p_256205_); } diff --git a/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch deleted file mode 100644 index 3d25ddb397..0000000000 --- a/patches/minecraft/net/minecraft/data/tags/EnchantmentTagsProvider.java.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/net/minecraft/data/tags/EnchantmentTagsProvider.java -+++ b/net/minecraft/data/tags/EnchantmentTagsProvider.java -@@ -16,7 +_,11 @@ - private final FeatureFlagSet enabledFeatures; - - public EnchantmentTagsProvider(PackOutput p_332794_, CompletableFuture p_331070_, FeatureFlagSet p_328046_) { -- super(p_332794_, Registries.ENCHANTMENT, p_331070_, p_328708_ -> p_328708_.builtInRegistryHolder().key()); -+ this(p_332794_, p_331070_, p_328046_, "vanilla", null); -+ } -+ -+ public EnchantmentTagsProvider(PackOutput p_332794_, CompletableFuture p_331070_, FeatureFlagSet p_328046_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) { -+ super(p_332794_, Registries.ENCHANTMENT, p_331070_, p_328708_ -> p_328708_.builtInRegistryHolder().key(), modId, existingFileHelper); - this.enabledFeatures = p_328046_; - } - diff --git a/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch index 19153f4363..e1aa248ee1 100644 --- a/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/EntityTypeTagsProvider.java.patch @@ -10,4 +10,4 @@ + @Override protected void addTags(HolderLookup.Provider p_255894_) { - this.tag(EntityTypeTags.SKELETONS).add(EntityType.SKELETON, EntityType.STRAY, EntityType.WITHER_SKELETON, EntityType.SKELETON_HORSE); + this.tag(EntityTypeTags.SKELETONS) diff --git a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch index f907d8c118..d38da9b74e 100644 --- a/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch +++ b/patches/minecraft/net/minecraft/data/tags/TagsProvider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/data/tags/TagsProvider.java +++ b/net/minecraft/data/tags/TagsProvider.java -@@ -36,26 +_,57 @@ +@@ -32,26 +_,57 @@ private final CompletableFuture> parentProvider; protected final ResourceKey> registryKey; protected final Map builders = Maps.newLinkedHashMap(); @@ -38,14 +38,14 @@ + String modId, + @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper ) { - this.pathProvider = p_275432_.createPathProvider(PackOutput.Target.DATA_PACK, TagManager.getTagDir(p_275476_)); + this.pathProvider = p_275432_.createRegistryTagsPathProvider(p_275476_); this.registryKey = p_275476_; this.parentProvider = p_275565_; this.lookupProvider = p_275222_; + this.modId = modId; + this.existingFileHelper = existingFileHelper; -+ this.resourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", TagManager.getTagDir(p_275476_)); -+ this.elementResourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraftforge.common.ForgeHooks.prefixNamespace(p_275476_.location())); ++ this.resourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.tagsDirPath(p_275476_)); ++ this.elementResourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraft.core.registries.Registries.elementsDirPath(p_275476_)); + } + + // Forge: Allow customizing the path for a given tag or returning null @@ -61,7 +61,7 @@ } protected abstract void addTags(HolderLookup.Provider p_256380_); -@@ -73,7 +_,13 @@ +@@ -69,7 +_,13 @@ .thenCombineAsync(this.parentProvider, (p_274778_, p_274779_) -> new CombinedData<>(p_274778_, (TagsProvider.TagLookup)p_274779_), Util.backgroundExecutor()) .thenCompose( p_325926_ -> { @@ -76,7 +76,7 @@ Predicate predicate = p_255496_ -> registrylookup.get(ResourceKey.create(this.registryKey, p_255496_)).isPresent(); Predicate predicate1 = p_274776_ -> this.builders.containsKey(p_274776_) || p_325926_.parent.contains(TagKey.create(this.registryKey, p_274776_)); -@@ -86,7 +_,7 @@ +@@ -82,7 +_,7 @@ ResourceLocation resourcelocation = p_325931_.getKey(); TagBuilder tagbuilder = p_325931_.getValue(); List list = tagbuilder.build(); @@ -85,7 +85,7 @@ if (!list1.isEmpty()) { throw new IllegalArgumentException( String.format( -@@ -97,8 +_,11 @@ +@@ -93,8 +_,11 @@ ) ); } else { @@ -99,7 +99,7 @@ } } ) -@@ -110,11 +_,16 @@ +@@ -106,11 +_,16 @@ protected TagsProvider.TagAppender tag(TagKey p_206425_) { TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_206425_); @@ -118,7 +118,7 @@ } public CompletableFuture> contentsGetter() { -@@ -129,11 +_,26 @@ +@@ -125,11 +_,26 @@ }); } @@ -146,7 +146,7 @@ } public final TagsProvider.TagAppender add(ResourceKey p_256138_) { -@@ -171,6 +_,19 @@ +@@ -167,6 +_,19 @@ public TagsProvider.TagAppender addOptionalTag(ResourceLocation p_176842_) { this.builder.addOptionalTag(p_176842_); return this; diff --git a/patches/minecraft/net/minecraft/network/Connection.java.patch b/patches/minecraft/net/minecraft/network/Connection.java.patch index f436089a36..97953cba6a 100644 --- a/patches/minecraft/net/minecraft/network/Connection.java.patch +++ b/patches/minecraft/net/minecraft/network/Connection.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java @@ -107,9 +_,17 @@ - private volatile Component delayedDisconnect; + private volatile DisconnectionDetails delayedDisconnect; @Nullable BandwidthDebugMonitor bandwidthDebugMonitor; + private java.util.function.Consumer activationHandler; @@ -26,7 +26,7 @@ if (this.delayedDisconnect != null) { this.disconnect(this.delayedDisconnect); } -@@ -169,6 +_,7 @@ +@@ -177,6 +_,7 @@ } else { if (packetlistener.shouldHandleMessage(p_129488_)) { try { @@ -34,7 +34,7 @@ genericsFtw(p_129488_, packetlistener); } catch (RunningOnDifferentThreadException runningondifferentthreadexception) { } catch (RejectedExecutionException rejectedexecutionexception) { -@@ -218,6 +_,7 @@ +@@ -226,6 +_,7 @@ if (p_333271_.flow() != this.getReceiving()) { throw new IllegalStateException("Invalid inbound protocol: " + p_333271_.id()); } else { @@ -42,7 +42,7 @@ this.packetListener = p_330962_; this.disconnectListener = null; UnconfiguredPipelineHandler.InboundConfigurationTask unconfiguredpipelinehandler$inboundconfigurationtask = UnconfiguredPipelineHandler.setupInboundProtocol( -@@ -241,6 +_,8 @@ +@@ -249,6 +_,8 @@ } else { UnconfiguredPipelineHandler.OutboundConfigurationTask unconfiguredpipelinehandler$outboundconfigurationtask = UnconfiguredPipelineHandler.setupOutboundProtocol( p_329145_ @@ -51,7 +51,7 @@ ); BundlerInfo bundlerinfo = p_329145_.bundlerInfo(); if (bundlerinfo != null) { -@@ -290,7 +_,8 @@ +@@ -298,7 +_,8 @@ this.disconnectListener = p_330656_; this.runOnceConnected(p_326042_ -> { this.setupInboundProtocol(p_329827_, p_330656_); @@ -61,7 +61,7 @@ this.setupOutboundProtocol(p_328134_); }); } -@@ -333,6 +_,7 @@ +@@ -341,6 +_,7 @@ private void doSendPacket(Packet p_243260_, @Nullable PacketSendListener p_243290_, boolean p_299937_) { ChannelFuture channelfuture = p_299937_ ? this.channel.writeAndFlush(p_243260_) : this.channel.write(p_243260_); @@ -69,7 +69,7 @@ if (p_243290_ != null) { channelfuture.addListener(p_243167_ -> { if (p_243167_.isSuccess()) { -@@ -415,7 +_,7 @@ +@@ -423,7 +_,7 @@ if (this.address == null) { return "local"; } else { @@ -78,7 +78,7 @@ } } -@@ -454,6 +_,8 @@ +@@ -466,6 +_,8 @@ } public static ChannelFuture connect(InetSocketAddress p_290034_, boolean p_290035_, final Connection p_290031_) { @@ -87,7 +87,7 @@ Class oclass; EventLoopGroup eventloopgroup; if (Epoll.isAvailable() && p_290035_) { -@@ -525,6 +_,7 @@ +@@ -537,6 +_,7 @@ public static Connection connectToLocalServer(SocketAddress p_129494_) { final Connection connection = new Connection(PacketFlow.CLIENTBOUND); @@ -95,7 +95,7 @@ new Bootstrap().group(LOCAL_WORKER_GROUP.get()).handler(new ChannelInitializer() { @Override protected void initChannel(Channel p_332618_) { -@@ -616,6 +_,22 @@ +@@ -630,6 +_,22 @@ public float getAverageSentPackets() { return this.averageSentPackets; diff --git a/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch b/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch new file mode 100644 index 0000000000..8984f348dd --- /dev/null +++ b/patches/minecraft/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java.patch @@ -0,0 +1,19 @@ +--- a/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java ++++ b/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java +@@ -18,7 +_,15 @@ + } + + static CustomPacketPayload.Type createType(String p_331650_) { +- return new CustomPacketPayload.Type<>(ResourceLocation.withDefaultNamespace(p_331650_)); ++ return new CustomPacketPayload.Type<>(ResourceLocation.parse(p_331650_)); ++ } ++ ++ static CustomPacketPayload.Type createType(String namespace, String path) { ++ return new CustomPacketPayload.Type<>(ResourceLocation.fromNamespaceAndPath(namespace, path)); ++ } ++ ++ static CustomPacketPayload.Type createType(ResourceLocation name) { ++ return new CustomPacketPayload.Type<>(name); + } + + static StreamCodec codec( diff --git a/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch b/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch index 278ca4ad8e..6951635687 100644 --- a/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch +++ b/patches/minecraft/net/minecraft/network/syncher/EntityDataSerializers.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/network/syncher/EntityDataSerializers.java +++ b/net/minecraft/network/syncher/EntityDataSerializers.java -@@ -120,16 +_,18 @@ +@@ -119,16 +_,18 @@ public static final EntityDataSerializer QUATERNION = EntityDataSerializer.forValueType(ByteBufCodecs.QUATERNIONF); public static void registerSerializer(EntityDataSerializer p_135051_) { diff --git a/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch b/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch index 7e208d4438..84c872e294 100644 --- a/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch +++ b/patches/minecraft/net/minecraft/resources/RegistryDataLoader.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/resources/RegistryDataLoader.java +++ b/net/minecraft/resources/RegistryDataLoader.java -@@ -66,7 +_,7 @@ +@@ -70,7 +_,7 @@ Lifecycle lifecycle = p_326161_.map(KnownPack::isVanilla).map(p_326166_ -> Lifecycle.stable()).orElse(Lifecycle.experimental()); return new RegistrationInfo(p_326161_, lifecycle); }); @@ -9,8 +9,8 @@ new RegistryDataLoader.RegistryData<>(Registries.DIMENSION_TYPE, DimensionType.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.BIOME, Biome.DIRECT_CODEC), new RegistryDataLoader.RegistryData<>(Registries.CHAT_TYPE, ChatType.DIRECT_CODEC), -@@ -103,6 +_,10 @@ - new RegistryDataLoader.RegistryData<>(Registries.BANNER_PATTERN, BannerPattern.DIRECT_CODEC) +@@ -114,6 +_,10 @@ + new RegistryDataLoader.RegistryData<>(Registries.JUKEBOX_SONG, JukeboxSong.DIRECT_CODEC) ); + public static java.util.stream.Stream> getWorldGenAndDimensionStream() { @@ -20,7 +20,7 @@ public static RegistryAccess.Frozen load(ResourceManager p_252046_, RegistryAccess p_249916_, List> p_250344_) { return load((p_326156_, p_326157_) -> p_326156_.loadFromResources(p_252046_, p_326157_), p_249916_, p_250344_); } -@@ -136,7 +_,9 @@ +@@ -151,7 +_,9 @@ }); if (!map.isEmpty()) { logErrors(map); @@ -31,13 +31,7 @@ } else { return new RegistryAccess.ImmutableRegistryAccess(list.stream().map(RegistryDataLoader.Loader::registry).toList()).freeze(); } -@@ -184,12 +_,12 @@ - } - - private static String registryDirPath(ResourceLocation p_252033_) { -- return p_252033_.getPath(); -+ return net.minecraftforge.common.ForgeHooks.prefixNamespace(p_252033_); // FORGE: add non-vanilla registry namespace to loader directory, same format as tag directory (see net.minecraft.tags.TagManager#getTagDir(ResourceKey)) - } +@@ -200,7 +_,7 @@ private static void loadElementFromResource( WritableRegistry p_330991_, @@ -46,7 +40,7 @@ RegistryOps p_332135_, ResourceKey p_332850_, Resource p_335244_, -@@ -197,7 +_,14 @@ +@@ -208,7 +_,14 @@ ) throws IOException { try (Reader reader = p_335244_.openAsReader()) { JsonElement jsonelement = JsonParser.parseReader(reader); @@ -62,15 +56,15 @@ E e = dataresult.getOrThrow(); p_330991_.register(p_332850_, e, p_332222_); } -@@ -213,6 +_,7 @@ - String s = registryDirPath(p_331358_.key().location()); +@@ -224,6 +_,7 @@ + String s = Registries.elementsDirPath(p_331358_.key()); FileToIdConverter filetoidconverter = FileToIdConverter.json(s); RegistryOps registryops = RegistryOps.create(JsonOps.INSTANCE, p_333035_); + Decoder> conditional = net.minecraftforge.common.crafting.conditions.ConditionCodec.wrap(p_329404_); for (Entry entry : filetoidconverter.listMatchingResources(p_335634_).entrySet()) { ResourceLocation resourcelocation = entry.getKey(); -@@ -221,7 +_,7 @@ +@@ -232,7 +_,7 @@ RegistrationInfo registrationinfo = REGISTRATION_INFO_CACHE.apply(resource.knownPackInfo()); try { @@ -79,7 +73,7 @@ } catch (Exception exception) { p_335074_.put( resourcekey, -@@ -242,7 +_,9 @@ +@@ -253,7 +_,9 @@ List list = p_331925_.get(p_332518_.key()); if (list != null) { RegistryOps registryops = RegistryOps.create(NbtOps.INSTANCE, p_329253_); @@ -87,10 +81,10 @@ + RegistryOps registryops1 = RegistryOps.create(JsonOps.INSTANCE, p_329253_) + .withContext(net.minecraftforge.common.crafting.conditions.ICondition.IContext.KEY, net.minecraftforge.common.crafting.conditions.ICondition.IContext.TAGS_INVALID); + Decoder> conditional = net.minecraftforge.common.crafting.conditions.ConditionCodec.wrap(p_328898_); - String s = registryDirPath(p_332518_.key().location()); + String s = Registries.elementsDirPath(p_332518_.key()); FileToIdConverter filetoidconverter = FileToIdConverter.json(s); -@@ -265,7 +_,7 @@ +@@ -276,7 +_,7 @@ try { Resource resource = p_332010_.getResourceOrThrow(resourcelocation); diff --git a/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch b/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch index fa40c7ab19..7a62bac753 100644 --- a/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch +++ b/patches/minecraft/net/minecraft/resources/ResourceKey.java.patch @@ -9,13 +9,12 @@ private static final ConcurrentMap> VALUES = new MapMaker().weakValues().makeMap(); private final ResourceLocation registryName; private final ResourceLocation location; -@@ -67,5 +_,19 @@ +@@ -67,5 +_,18 @@ } static record InternKey(ResourceLocation registry, ResourceLocation location) { + } + -+ // Forge start + @Override + public boolean equals(Object obj) { + if (this == obj) return true; diff --git a/patches/minecraft/net/minecraft/resources/ResourceLocation.java.patch b/patches/minecraft/net/minecraft/resources/ResourceLocation.java.patch index b6fffd7478..d79b2f77b9 100644 --- a/patches/minecraft/net/minecraft/resources/ResourceLocation.java.patch +++ b/patches/minecraft/net/minecraft/resources/ResourceLocation.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/resources/ResourceLocation.java +++ b/net/minecraft/resources/ResourceLocation.java -@@ -147,6 +_,12 @@ +@@ -163,6 +_,12 @@ return i; } diff --git a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch index cff7b40ec6..36f0b6660a 100644 --- a/patches/minecraft/net/minecraft/server/Bootstrap.java.patch +++ b/patches/minecraft/net/minecraft/server/Bootstrap.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/Bootstrap.java +++ b/net/minecraft/server/Bootstrap.java -@@ -53,6 +_,8 @@ +@@ -52,6 +_,8 @@ CauldronInteraction.bootStrap(); BuiltInRegistries.bootStrap(); CreativeModeTabs.validate(); @@ -9,7 +9,7 @@ wrapStreams(); bootstrapDuration.set(Duration.between(instant, Instant.now()).toMillis()); } -@@ -119,7 +_,6 @@ +@@ -117,7 +_,6 @@ Commands.validate(); } diff --git a/patches/minecraft/net/minecraft/server/Eula.java.patch b/patches/minecraft/net/minecraft/server/Eula.java.patch index 918dbc7852..4780bcf07f 100644 --- a/patches/minecraft/net/minecraft/server/Eula.java.patch +++ b/patches/minecraft/net/minecraft/server/Eula.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/Eula.java +++ b/net/minecraft/server/Eula.java -@@ -16,7 +_,7 @@ +@@ -17,7 +_,7 @@ public Eula(Path p_135943_) { this.file = p_135943_; diff --git a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch index 54af757425..1d5b2de7db 100644 --- a/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch +++ b/patches/minecraft/net/minecraft/server/MinecraftServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -258,7 +_,7 @@ +@@ -264,7 +_,7 @@ public static S spin(Function p_129873_) { AtomicReference atomicreference = new AtomicReference<>(); @@ -9,7 +9,7 @@ thread.setUncaughtExceptionHandler((p_177909_, p_177910_) -> LOGGER.error("Uncaught exception in server thread", p_177910_)); if (Runtime.getRuntime().availableProcessors() > 4) { thread.setPriority(8); -@@ -361,6 +_,7 @@ +@@ -367,6 +_,7 @@ this.readScoreboard(dimensiondatastorage); this.commandStorage = new CommandStorage(dimensiondatastorage); WorldBorder worldborder = serverlevel.getWorldBorder(); @@ -17,7 +17,7 @@ if (!serverleveldata.isInitialized()) { try { setInitialSpawn(serverlevel, serverleveldata, worldoptions.generateBonusChest(), flag); -@@ -410,6 +_,7 @@ +@@ -416,6 +_,7 @@ ); worldborder.addListener(new BorderChangeListener.DelegateBorderChangeListener(serverlevel1.getWorldBorder())); this.levels.put(resourcekey1, serverlevel1); @@ -25,7 +25,7 @@ } } -@@ -421,6 +_,7 @@ +@@ -427,6 +_,7 @@ p_177898_.setSpawn(BlockPos.ZERO.above(80), 0.0F); } else { ServerChunkCache serverchunkcache = p_177897_.getChunkSource(); @@ -33,7 +33,7 @@ ChunkPos chunkpos = new ChunkPos(serverchunkcache.randomState().sampler().findSpawnPosition()); int i = serverchunkcache.getGenerator().getSpawnHeight(p_177897_); if (i < p_177897_.getMinBuildHeight()) { -@@ -502,6 +_,7 @@ +@@ -508,6 +_,7 @@ ChunkPos chunkpos = new ChunkPos(k); serverlevel1.getChunkSource().updateChunkForced(chunkpos, true); } @@ -41,7 +41,7 @@ } } -@@ -609,6 +_,7 @@ +@@ -615,6 +_,7 @@ for (ServerLevel serverlevel2 : this.getAllLevels()) { if (serverlevel2 != null) { try { @@ -49,7 +49,7 @@ serverlevel2.close(); } catch (IOException ioexception1) { LOGGER.error("Exception closing the level", (Throwable)ioexception1); -@@ -655,9 +_,11 @@ +@@ -661,9 +_,11 @@ throw new IllegalStateException("Failed to initialize server"); } @@ -61,7 +61,7 @@ while (this.running) { long i; -@@ -702,6 +_,8 @@ +@@ -708,6 +_,8 @@ this.isReady = true; JvmProfiler.INSTANCE.onServerTick(this.smoothedTickTimeMillis); } @@ -70,7 +70,7 @@ } catch (Throwable throwable1) { LOGGER.error("Encountered an unexpected exception", throwable1); CrashReport crashreport = constructOrExtractCrashReport(throwable1); -@@ -713,6 +_,7 @@ +@@ -719,6 +_,7 @@ LOGGER.error("We were unable to save this crash report to disk."); } @@ -78,7 +78,7 @@ this.onServerCrash(crashreport); } finally { try { -@@ -725,6 +_,7 @@ +@@ -731,6 +_,7 @@ this.services.profileCache().clearExecutor(); } @@ -86,7 +86,7 @@ this.onServerExit(); } } -@@ -870,12 +_,14 @@ +@@ -894,12 +_,14 @@ public void tickServer(BooleanSupplier p_129871_) { long i = Util.getNanos(); @@ -101,7 +101,7 @@ } this.ticksUntilAutosave--; -@@ -897,6 +_,7 @@ +@@ -921,6 +_,7 @@ this.smoothedTickTimeMillis = this.smoothedTickTimeMillis * 0.8F + (float)j / (float)TimeUtil.NANOSECONDS_PER_MILLISECOND * 0.19999999F; this.logTickMethodTime(i); this.profiler.pop(); @@ -109,7 +109,7 @@ } private void logTickMethodTime(long p_331549_) { -@@ -936,7 +_,8 @@ +@@ -960,7 +_,8 @@ Optional.of(serverstatus$players), Optional.of(ServerStatus.Version.current()), Optional.ofNullable(this.statusIcon), @@ -119,7 +119,7 @@ ); } -@@ -966,7 +_,8 @@ +@@ -990,7 +_,8 @@ this.getFunctions().tick(); this.profiler.popPush("levels"); @@ -129,7 +129,7 @@ this.profiler.push(() -> serverlevel + " " + serverlevel.dimension().location()); if (this.tickCount % 20 == 0) { this.profiler.push("timeSync"); -@@ -975,6 +_,7 @@ +@@ -999,6 +_,7 @@ } this.profiler.push("tick"); @@ -137,7 +137,7 @@ try { serverlevel.tick(p_129954_); -@@ -983,16 +_,18 @@ +@@ -1007,16 +_,18 @@ serverlevel.fillReportDetails(crashreport); throw new ReportedException(crashreport); } @@ -157,7 +157,7 @@ GameTestTicker.SINGLETON.tick(); } -@@ -1088,7 +_,7 @@ +@@ -1112,7 +_,7 @@ @DontObfuscate public String getServerModName() { @@ -166,7 +166,7 @@ } public SystemReport fillSystemReport(SystemReport p_177936_) { -@@ -1443,6 +_,7 @@ +@@ -1467,6 +_,7 @@ this.getPlayerList().reloadResources(); this.functionManager.replaceLibrary(this.resources.managers.getFunctionLibrary()); this.structureTemplateManager.onResourceManagerReload(this.resources.resourceManager); @@ -174,7 +174,7 @@ }, this); if (this.isSameThread()) { this.managedBlock(completablefuture::isDone); -@@ -1452,12 +_,15 @@ +@@ -1476,12 +_,15 @@ } public static WorldDataConfiguration configurePackRepository(PackRepository p_248681_, WorldDataConfiguration p_331931_, boolean p_249869_, boolean p_330480_) { @@ -191,10 +191,10 @@ } else { Set set = Sets.newLinkedHashSet(); -@@ -1921,6 +_,48 @@ +@@ -1982,6 +_,48 @@ - public PotionBrewing potionBrewing() { - return this.potionBrewing; + public ServerLinks serverLinks() { + return ServerLinks.EMPTY; + } + + private static final com.google.gson.Gson GSON = new com.google.gson.Gson(); diff --git a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch index 071d5d56aa..010a3a816e 100644 --- a/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch +++ b/patches/minecraft/net/minecraft/server/PlayerAdvancements.java.patch @@ -7,9 +7,9 @@ + net.minecraftforge.event.ForgeEventFactory.onAdvancementGrant(this.player, p_298135_, advancementprogress, p_135990_); if (!flag1 && advancementprogress.isDone()) { p_298135_.value().rewards().grant(this.player); - p_298135_.value().display().ifPresent(p_326189_ -> { + p_298135_.value().display().ifPresent(p_341116_ -> { @@ -180,6 +_,7 @@ - this.playerList.broadcastSystemMessage(p_326189_.getType().createAnnouncement(p_298135_, this.player), false); + this.playerList.broadcastSystemMessage(p_341116_.getType().createAnnouncement(p_298135_, this.player), false); } }); + net.minecraftforge.event.ForgeEventFactory.onAdvancementEarned(this.player, p_298135_); diff --git a/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch b/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch index 6d013b259d..e70f38f5b7 100644 --- a/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch +++ b/patches/minecraft/net/minecraft/server/ServerAdvancementManager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/ServerAdvancementManager.java +++ b/net/minecraft/server/ServerAdvancementManager.java -@@ -34,10 +_,18 @@ +@@ -32,10 +_,18 @@ private Map advancements = Map.of(); private AdvancementTree tree = new AdvancementTree(); private final HolderLookup.Provider registries; @@ -13,13 +13,13 @@ + } + + public ServerAdvancementManager(HolderLookup.Provider p_336198_, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { - super(GSON, "advancements"); + super(GSON, Registries.elementsDirPath(Registries.ADVANCEMENT)); this.registries = p_336198_; + this.context = context; } protected void apply(Map p_136034_, ResourceManager p_136035_, ProfilerFiller p_136036_) { -@@ -45,7 +_,12 @@ +@@ -43,7 +_,12 @@ Builder builder = ImmutableMap.builder(); p_136034_.forEach((p_326203_, p_326204_) -> { try { diff --git a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch index 7f10326630..1b4d4e76a0 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -77,6 +_,8 @@ - private RemoteSampleLogger tickTimeLogger; +@@ -80,6 +_,8 @@ @Nullable private DebugSampleSubscriptionTracker debugSampleSubscriptionTracker; + private final ServerLinks serverLinks; + @Nullable + private net.minecraft.client.server.LanServerPinger dediLanPinger; public DedicatedServer( Thread p_214789_, -@@ -99,6 +_,7 @@ +@@ -103,6 +_,7 @@ Thread thread = new Thread("Server console handler") { @Override public void run() { @@ -17,7 +17,7 @@ BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); String s1; -@@ -179,11 +_,13 @@ +@@ -183,11 +_,13 @@ long i = Util.getNanos(); SkullBlockEntity.setup(this.services, this); GameProfileCache.setUsesAuthentication(this.usesAuthentication()); @@ -31,7 +31,7 @@ if (dedicatedserverproperties.announcePlayerAchievements != null) { this.getGameRules().getRule(GameRules.RULE_ANNOUNCE_ADVANCEMENTS).set(dedicatedserverproperties.announcePlayerAchievements, this); } -@@ -211,7 +_,12 @@ +@@ -215,7 +_,12 @@ LOGGER.info("JMX monitoring enabled"); } @@ -45,7 +45,7 @@ } } -@@ -289,6 +_,11 @@ +@@ -293,6 +_,11 @@ if (this.queryThreadGs4 != null) { this.queryThreadGs4.stop(); } @@ -57,7 +57,7 @@ } @Override -@@ -542,7 +_,12 @@ +@@ -546,7 +_,12 @@ @Override public void stopServer() { diff --git a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch index f94c512537..f5a7f6692e 100644 --- a/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch +++ b/patches/minecraft/net/minecraft/server/dedicated/ServerWatchdog.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/dedicated/ServerWatchdog.java +++ b/net/minecraft/server/dedicated/ServerWatchdog.java -@@ -48,7 +_,7 @@ +@@ -49,7 +_,7 @@ ThreadMXBean threadmxbean = ManagementFactory.getThreadMXBean(); ThreadInfo[] athreadinfo = threadmxbean.dumpAllThreads(true, true); StringBuilder stringbuilder = new StringBuilder(); diff --git a/patches/minecraft/net/minecraft/server/level/ChunkHolder.java.patch b/patches/minecraft/net/minecraft/server/level/ChunkHolder.java.patch deleted file mode 100644 index 538cfbdde1..0000000000 --- a/patches/minecraft/net/minecraft/server/level/ChunkHolder.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/net/minecraft/server/level/ChunkHolder.java -+++ b/net/minecraft/server/level/ChunkHolder.java -@@ -64,6 +_,7 @@ - private boolean wasAccessibleSinceLastSave; - private CompletableFuture pendingFullStateConfirmation = CompletableFuture.completedFuture(null); - private CompletableFuture sendSync = CompletableFuture.completedFuture(null); -+ LevelChunk currentlyLoading; // Forge: Used to bypass future chain when loading chunks. - - public ChunkHolder( - ChunkPos p_142986_, diff --git a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch index 20a99d89ac..2885a9d41a 100644 --- a/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ChunkMap.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ChunkMap.java +++ b/net/minecraft/server/level/ChunkMap.java -@@ -413,6 +_,7 @@ +@@ -388,6 +_,7 @@ this.modified = true; } @@ -8,38 +8,23 @@ return p_140179_; } } -@@ -521,6 +_,7 @@ - if (this.pendingUnloads.remove(p_140182_, p_140183_) && p_203002_ != null) { - if (p_203002_ instanceof LevelChunk) { - ((LevelChunk)p_203002_).setLoaded(false); -+ net.minecraftforge.event.ForgeEventFactory.onChunkUnload(p_203002_); +@@ -498,6 +_,7 @@ + if (this.pendingUnloads.remove(p_140182_, p_140183_) && chunkaccess != null) { + if (chunkaccess instanceof LevelChunk levelchunk) { + levelchunk.setLoaded(false); ++ net.minecraftforge.event.ForgeEventFactory.onChunkUnload(chunkaccess); } - this.save(p_203002_); -@@ -717,8 +_,14 @@ - levelchunk.runPostLoad(); - if (this.entitiesInLevel.add(chunkpos.toLong())) { - levelchunk.setLoaded(true); -+ try { -+ p_140384_.currentlyLoading = levelchunk; // Forge - bypass the future chain when getChunk is called, this prevents deadlocks. - levelchunk.registerAllBlockEntitiesAfterLevelLoad(); - levelchunk.registerTickContainerInLevel(this.level); -+ net.minecraftforge.event.ForgeEventFactory.onChunkLoad(levelchunk, !(protochunk instanceof ImposterProtoChunk)); -+ } finally { -+ p_140384_.currentlyLoading = null; // Forge - Stop bypassing the future chain. -+ } - } - - return levelchunk; -@@ -818,6 +_,7 @@ + this.save(chunkaccess); +@@ -744,6 +_,7 @@ this.level.getProfiler().incrementCounter("chunkSave"); CompoundTag compoundtag = ChunkSerializer.write(this.level, p_140259_); + net.minecraftforge.event.ForgeEventFactory.onChunkDataSave(p_140259_, p_140259_.getWorldForge() != null ? p_140259_.getWorldForge() : this.level, compoundtag); - this.write(chunkpos, compoundtag).exceptionallyAsync(p_326408_ -> { - this.level.getServer().reportChunkSaveFailure(chunkpos); + this.write(chunkpos, compoundtag).exceptionally(p_341222_ -> { + this.level.getServer().reportChunkSaveFailure(p_341222_, this.storageInfo(), chunkpos); return null; -@@ -1136,7 +_,7 @@ +@@ -1061,7 +_,7 @@ } protected void addEntity(Entity p_140200_) { diff --git a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch index 707f8f8274..3b597e1c22 100644 --- a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch +++ b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch @@ -8,7 +8,7 @@ protected DistanceManager(Executor p_140774_, Executor p_140775_) { ProcessorHandle processorhandle = ProcessorHandle.of("player ticket throttler", p_140775_::execute); -@@ -151,6 +_,11 @@ +@@ -152,6 +_,11 @@ if (p_140786_.getTicketLevel() < i) { this.ticketTracker.update(p_140785_, p_140786_.getTicketLevel(), true); } @@ -20,7 +20,7 @@ } void removeTicket(long p_140819_, Ticket p_140820_) { -@@ -163,6 +_,14 @@ +@@ -164,6 +_,14 @@ } this.ticketTracker.update(p_140819_, getTicketLevelAt(sortedarrayset), false); @@ -35,7 +35,7 @@ } public void addTicket(TicketType p_140793_, ChunkPos p_140794_, int p_140795_, T p_140796_) { -@@ -175,14 +_,22 @@ +@@ -176,14 +_,22 @@ } public void addRegionTicket(TicketType p_140841_, ChunkPos p_140842_, int p_140843_, T p_140844_) { @@ -60,7 +60,7 @@ long i = p_140851_.toLong(); this.removeTicket(i, ticket); this.tickingTicketsTracker.removeTicket(i, ticket); -@@ -266,6 +_,11 @@ +@@ -267,6 +_,11 @@ public String getDebugStatus() { return this.ticketThrottler.getDebugStatus(); diff --git a/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch b/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch new file mode 100644 index 0000000000..69e2783e59 --- /dev/null +++ b/patches/minecraft/net/minecraft/server/level/GenerationChunkHolder.java.patch @@ -0,0 +1,12 @@ +--- a/net/minecraft/server/level/GenerationChunkHolder.java ++++ b/net/minecraft/server/level/GenerationChunkHolder.java +@@ -33,6 +_,9 @@ + private final AtomicReferenceArray>> futures = new AtomicReferenceArray<>(CHUNK_STATUSES.size()); + private final AtomicReference task = new AtomicReference<>(); + private final AtomicInteger generationRefCount = new AtomicInteger(); ++ /** Forge: Used to bypass the future chain when loading chunks, because modders can do weird things that cause deadlocks, modders should never touch this **/ ++ @org.jetbrains.annotations.ApiStatus.Internal ++ public net.minecraft.world.level.chunk.LevelChunk currentlyLoading; + + public GenerationChunkHolder(ChunkPos p_342238_) { + this.pos = p_342238_; diff --git a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch index cdd931ffa7..162572d021 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -171,6 +_,10 @@ +@@ -172,6 +_,10 @@ if (chunkholder == null) { return null; } else { @@ -8,10 +8,10 @@ + if (chunkholder.currentlyLoading != null) { + return chunkholder.currentlyLoading; + } - ChunkResult chunkresult = chunkholder.getFutureIfPresent(ChunkStatus.FULL).getNow(null); - if (chunkresult == null) { - return null; -@@ -363,7 +_,7 @@ + ChunkAccess chunkaccess1 = chunkholder.getChunkIfPresent(ChunkStatus.FULL); + if (chunkaccess1 != null) { + this.storeInCache(i, chunkaccess1, ChunkStatus.FULL); +@@ -342,7 +_,7 @@ for (ServerChunkCache.ChunkAndHolder serverchunkcache$chunkandholder : list) { LevelChunk levelchunk1 = serverchunkcache$chunkandholder.chunk; ChunkPos chunkpos = levelchunk1.getPos(); @@ -20,7 +20,7 @@ levelchunk1.incrementInhabitedTime(j); if (flag1 && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkpos)) { NaturalSpawner.spawnForChunk(this.level, levelchunk1, naturalspawner$spawnstate, this.spawnFriendlies, this.spawnEnemies, flag); -@@ -442,11 +_,19 @@ +@@ -421,11 +_,19 @@ } public void addRegionTicket(TicketType p_8388_, ChunkPos p_8389_, int p_8390_, T p_8391_) { diff --git a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch index df2d2792fd..b0ff12cccb 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerLevel.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -198,11 +_,12 @@ +@@ -199,11 +_,12 @@ private final List customSpawners; @Nullable private EndDragonFight dragonFight; @@ -14,7 +14,7 @@ public ServerLevel( MinecraftServer p_214999_, -@@ -285,6 +_,12 @@ +@@ -286,6 +_,12 @@ this.sleepStatus = new SleepStatus(); this.gameEventDispatcher = new GameEventDispatcher(this); this.randomSequences = Objects.requireNonNullElseGet(p_288977_, () -> this.getDataStorage().computeIfAbsent(RandomSequences.factory(i), "random_sequences")); @@ -27,7 +27,7 @@ } @Deprecated -@@ -325,8 +_,8 @@ +@@ -326,8 +_,8 @@ int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); if (this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { if (this.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { @@ -38,7 +38,7 @@ } this.wakeUpAllPlayers(); -@@ -364,7 +_,8 @@ +@@ -365,7 +_,8 @@ this.handlingTick = false; profilerfiller.pop(); @@ -48,7 +48,7 @@ if (flag1) { this.resetEmptyTime(); } -@@ -395,6 +_,7 @@ +@@ -396,6 +_,7 @@ p_308944_.stopRiding(); } @@ -56,7 +56,7 @@ profilerfiller.push("tick"); this.guardEntityTick(this::tickNonPassenger, p_308944_); profilerfiller.pop(); -@@ -526,6 +_,7 @@ +@@ -527,6 +_,7 @@ BlockPos blockpos = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, p_300602_); BlockPos blockpos1 = blockpos.below(); Biome biome = this.getBiome(blockpos).value(); @@ -64,7 +64,7 @@ if (biome.shouldFreeze(this, blockpos1)) { this.setBlockAndUpdate(blockpos1, Blocks.ICE.defaultBlockState()); } -@@ -701,8 +_,8 @@ +@@ -702,8 +_,8 @@ this.server.getPlayerList().broadcastAll(new ClientboundGameEventPacket(ClientboundGameEventPacket.START_RAINING, 0.0F)); } @@ -75,7 +75,7 @@ } } -@@ -738,6 +_,7 @@ +@@ -739,6 +_,7 @@ p_8648_.tickCount++; this.getProfiler().push(() -> BuiltInRegistries.ENTITY_TYPE.getKey(p_8648_.getType()).toString()); profilerfiller.incrementCounter("tickNonPassenger"); @@ -83,7 +83,7 @@ p_8648_.tick(); this.getProfiler().pop(); -@@ -755,6 +_,7 @@ +@@ -756,6 +_,7 @@ ProfilerFiller profilerfiller = this.getProfiler(); profilerfiller.push(() -> BuiltInRegistries.ENTITY_TYPE.getKey(p_8664_.getType()).toString()); profilerfiller.incrementCounter("tickPassenger"); @@ -91,7 +91,7 @@ p_8664_.rideTick(); profilerfiller.pop(); -@@ -787,6 +_,7 @@ +@@ -788,6 +_,7 @@ } else { this.entityManager.autoSave(); } @@ -99,7 +99,7 @@ } } -@@ -880,6 +_,7 @@ +@@ -877,6 +_,7 @@ } private void addPlayer(ServerPlayer p_8854_) { @@ -107,7 +107,7 @@ Entity entity = this.getEntities().get(p_8854_.getUUID()); if (entity != null) { LOGGER.warn("Force-added player with duplicate UUID {}", p_8854_.getUUID()); -@@ -887,7 +_,8 @@ +@@ -884,7 +_,8 @@ this.removePlayerImmediately((ServerPlayer)entity, Entity.RemovalReason.DISCARDED); } @@ -117,7 +117,7 @@ } private boolean addEntity(Entity p_8873_) { -@@ -895,7 +_,12 @@ +@@ -892,7 +_,12 @@ LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityType.getKey(p_8873_.getType())); return false; } else { @@ -131,7 +131,7 @@ } } -@@ -943,6 +_,12 @@ +@@ -940,6 +_,12 @@ float p_263390_, long p_263403_ ) { @@ -144,7 +144,7 @@ this.server .getPlayerList() .broadcast( -@@ -960,6 +_,12 @@ +@@ -957,6 +_,12 @@ public void playSeededSound( @Nullable Player p_263545_, Entity p_263544_, Holder p_263491_, SoundSource p_263542_, float p_263530_, float p_263520_, long p_263490_ ) { @@ -157,7 +157,7 @@ this.server .getPlayerList() .broadcast( -@@ -1003,6 +_,7 @@ +@@ -1000,6 +_,7 @@ @Override public void gameEvent(Holder p_334475_, Vec3 p_215042_, GameEvent.Context p_215043_) { @@ -165,7 +165,7 @@ this.gameEventDispatcher.post(p_334475_, p_215042_, p_215043_); } -@@ -1041,11 +_,17 @@ +@@ -1038,11 +_,17 @@ @Override public void updateNeighborsAt(BlockPos p_215045_, Block p_215046_) { @@ -183,7 +183,7 @@ this.neighborUpdater.updateNeighborsAtExceptFromFacing(p_215052_, p_215053_, p_215054_); } -@@ -1672,6 +_,11 @@ +@@ -1660,6 +_,11 @@ return crashreportcategory; } @@ -195,7 +195,7 @@ final class EntityCallbacks implements LevelCallback { public void onCreated(Entity p_143355_) { } -@@ -1706,8 +_,8 @@ +@@ -1694,8 +_,8 @@ ServerLevel.this.navigatingMobs.add(mob); } @@ -206,7 +206,7 @@ ServerLevel.this.dragonParts.put(enderdragonpart.getId(), enderdragonpart); } } -@@ -1733,13 +_,16 @@ +@@ -1721,13 +_,16 @@ ServerLevel.this.navigatingMobs.remove(mob); } diff --git a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch index caa1e42ba8..f580d5f603 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -161,7 +_,8 @@ +@@ -162,7 +_,8 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria; import org.slf4j.Logger; @@ -10,7 +10,7 @@ private static final Logger LOGGER = LogUtils.getLogger(); private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_XZ = 32; private static final int NEUTRAL_MOB_DEATH_NOTIFICATION_RADII_Y = 10; -@@ -646,6 +_,7 @@ +@@ -653,6 +_,7 @@ @Override public void die(DamageSource p_9035_) { @@ -18,63 +18,32 @@ this.gameEvent(GameEvent.ENTITY_DIE); boolean flag = this.level().getGameRules().getBoolean(GameRules.RULE_SHOWDEATHMESSAGES); if (flag) { -@@ -788,11 +_,12 @@ - +@@ -849,6 +_,7 @@ @Nullable @Override -- public Entity changeDimension(ServerLevel p_9180_) { -+ public Entity changeDimension(ServerLevel p_9180_, net.minecraftforge.common.util.ITeleporter teleporter) { -+ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, p_9180_.dimension())) return null; - this.isChangingDimension = true; - ServerLevel serverlevel = this.serverLevel(); - ResourceKey resourcekey = serverlevel.dimension(); -- if (resourcekey == Level.END && p_9180_.dimension() == Level.OVERWORLD) { -+ if (resourcekey == Level.END && p_9180_.dimension() == Level.OVERWORLD && teleporter.isVanilla()) { //Forge: Fix non-vanilla teleporters triggering end credits - this.unRide(); - this.serverLevel().removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); - if (!this.wonGame) { -@@ -809,13 +_,14 @@ - PlayerList playerlist = this.server.getPlayerList(); - playerlist.sendPlayerPermissionLevel(this); - serverlevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -- this.unsetRemoved(); -- PortalInfo portalinfo = this.findDimensionEntryPoint(p_9180_); -+ this.revive(); -+ PortalInfo portalinfo = teleporter.getPortalInfo(this, p_9180_, this::findDimensionEntryPoint); - if (portalinfo != null) { -+ Entity e = teleporter.placeEntity(this, serverlevel, p_9180_, this.getYRot(), spawnPortal -> {//Forge: Start vanilla logic - serverlevel.getProfiler().push("moving"); - if (resourcekey == Level.OVERWORLD && p_9180_.dimension() == Level.NETHER) { + public Entity changeDimension(DimensionTransition p_344993_) { ++ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, p_344993_.newLevel().dimension())) return null; + if (this.isRemoved()) { + return null; + } else { +@@ -879,7 +_,7 @@ + PlayerList playerlist = this.server.getPlayerList(); + playerlist.sendPlayerPermissionLevel(this); + serverlevel1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); +- this.unsetRemoved(); ++ this.revive(); + serverlevel1.getProfiler().push("moving"); + if (resourcekey == Level.OVERWORLD && serverlevel.dimension() == Level.NETHER) { this.enteredNetherPosition = this.position(); -- } else if (p_9180_.dimension() == Level.END) { -+ } else if (spawnPortal && p_9180_.dimension() == Level.END) { - this.createEndPlatform(p_9180_, BlockPos.containing(portalinfo.pos)); - } - -@@ -828,6 +_,9 @@ - p_9180_.addDuringPortalTeleport(this); - serverlevel.getProfiler().pop(); - this.triggerDimensionChangeTriggers(serverlevel); -+ return this;//forge: this is part of the ITeleporter patch -+ });//Forge: End vanilla logic -+ if (e != this) throw new java.lang.IllegalArgumentException(String.format(java.util.Locale.ENGLISH, "Teleporter %s returned not the player entity but instead %s, expected PlayerEntity %s", teleporter, e, this)); - this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); - playerlist.sendLevelInfo(this, p_9180_); - playerlist.sendAllPlayerInfo(this); -@@ -836,10 +_,12 @@ - this.connection.send(new ClientboundUpdateMobEffectPacket(this.getId(), mobeffectinstance, false)); - } - -+ if (teleporter.playTeleportSound(this, serverlevel, p_9180_)) - this.connection.send(new ClientboundLevelEventPacket(1032, BlockPos.ZERO, 0, false)); +@@ -908,6 +_,7 @@ this.lastSentExp = -1; this.lastSentHealth = -1.0F; this.lastSentFood = -1; -+ net.minecraftforge.event.ForgeEventFactory.onPlayerChangedDimension(this, resourcekey, p_9180_.dimension()); ++ net.minecraftforge.event.ForgeEventFactory.onPlayerChangedDimension(this, resourcekey, p_344993_.newLevel().dimension()); + return this; } - - return this; -@@ -905,6 +_,9 @@ + } +@@ -943,6 +_,9 @@ @Override public Either startSleepInBed(BlockPos p_9115_) { @@ -84,7 +53,7 @@ Direction direction = this.level().getBlockState(p_9115_).getValue(HorizontalDirectionalBlock.FACING); if (this.isSleeping() || !this.isAlive()) { return Either.left(Player.BedSleepingProblem.OTHER_PROBLEM); -@@ -916,7 +_,7 @@ +@@ -954,7 +_,7 @@ return Either.left(Player.BedSleepingProblem.OBSTRUCTED); } else { this.setRespawnPosition(this.level().dimension(), p_9115_, this.getYRot(), false, true); @@ -93,7 +62,7 @@ return Either.left(Player.BedSleepingProblem.NOT_POSSIBLE_NOW); } else { if (!this.isCreative()) { -@@ -962,6 +_,7 @@ +@@ -1000,6 +_,7 @@ } private boolean bedInRange(BlockPos p_9117_, Direction p_9118_) { @@ -101,7 +70,7 @@ return this.isReachableBedBlock(p_9117_) || this.isReachableBedBlock(p_9117_.relative(p_9118_.getOpposite())); } -@@ -1076,6 +_,7 @@ +@@ -1114,6 +_,7 @@ this.connection.send(new ClientboundOpenScreenPacket(abstractcontainermenu.containerId, abstractcontainermenu.getType(), p_9033_.getDisplayName())); this.initMenu(abstractcontainermenu); this.containerMenu = abstractcontainermenu; @@ -109,7 +78,7 @@ return OptionalInt.of(this.containerCounter); } } -@@ -1124,6 +_,7 @@ +@@ -1163,6 +_,7 @@ public void doCloseContainer() { this.containerMenu.removed(this); this.inventoryMenu.transferState(this.containerMenu); @@ -117,7 +86,7 @@ this.containerMenu = this.inventoryMenu; } -@@ -1349,6 +_,15 @@ +@@ -1395,6 +_,15 @@ this.setShoulderEntityLeft(p_9016_.getShoulderEntityLeft()); this.setShoulderEntityRight(p_9016_.getShoulderEntityRight()); this.setLastDeathLocation(p_9016_.getLastDeathLocation()); @@ -133,15 +102,15 @@ } @Override -@@ -1449,6 +_,7 @@ - } +@@ -1496,6 +_,7 @@ public boolean setGameMode(GameType p_143404_) { + boolean flag = this.isSpectator(); + p_143404_ = net.minecraftforge.common.ForgeHooks.onChangeGameType(this, this.gameMode.getGameModeForPlayer(), p_143404_); if (!this.gameMode.changeGameModeForPlayer(p_143404_)) { return false; } else { -@@ -1591,6 +_,9 @@ +@@ -1642,6 +_,9 @@ public void setCamera(@Nullable Entity p_9214_) { Entity entity = this.getCamera(); this.camera = (Entity)(p_9214_ == null ? this : p_9214_); @@ -151,7 +120,7 @@ if (entity != this.camera) { if (this.camera.level() instanceof ServerLevel serverlevel) { this.teleportTo( -@@ -1629,7 +_,11 @@ +@@ -1680,7 +_,11 @@ @Nullable public Component getTabListDisplayName() { @@ -164,32 +133,7 @@ } @Override -@@ -1656,20 +_,23 @@ - if (p_9000_ == this.level()) { - this.connection.teleport(p_9001_, p_9002_, p_9003_, p_9004_, p_9005_); - } else { -+ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, p_9000_.dimension())) return; - ServerLevel serverlevel = this.serverLevel(); - LevelData leveldata = p_9000_.getLevelData(); - this.connection.send(new ClientboundRespawnPacket(this.createCommonSpawnInfo(p_9000_), (byte)3)); - this.connection.send(new ClientboundChangeDifficultyPacket(leveldata.getDifficulty(), leveldata.isDifficultyLocked())); - this.server.getPlayerList().sendPlayerPermissionLevel(this); - serverlevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); -- this.unsetRemoved(); -+ this.revive(); - this.moveTo(p_9001_, p_9002_, p_9003_, p_9004_, p_9005_); - this.setServerLevel(p_9000_); - p_9000_.addDuringCommandTeleport(this); - this.triggerDimensionChangeTriggers(serverlevel); - this.connection.teleport(p_9001_, p_9002_, p_9003_, p_9004_, p_9005_); -+ this.gameMode.setLevel(p_9000_); - this.server.getPlayerList().sendLevelInfo(this, p_9000_); - this.server.getPlayerList().sendAllPlayerInfo(this); -+ net.minecraftforge.event.ForgeEventFactory.onPlayerChangedDimension(this, serverlevel.dimension(), p_9000_.dimension()); - } - } - -@@ -1691,6 +_,9 @@ +@@ -1733,6 +_,9 @@ } public void setRespawnPosition(ResourceKey p_9159_, @Nullable BlockPos p_9160_, float p_9161_, boolean p_9162_, boolean p_9163_) { @@ -199,7 +143,7 @@ if (p_9160_ != null) { boolean flag = p_9160_.equals(this.respawnPosition) && p_9159_.equals(this.respawnDimension); if (p_9163_ && !flag) { -@@ -1748,6 +_,9 @@ +@@ -1790,6 +_,9 @@ if (itementity == null) { return null; } else { @@ -209,7 +153,7 @@ this.level().addFreshEntity(itementity); ItemStack itemstack = itementity.getItem(); if (p_9087_) { -@@ -1819,9 +_,12 @@ +@@ -1861,9 +_,12 @@ public boolean drop(boolean p_182295_) { Inventory inventory = this.getInventory(); @@ -223,7 +167,7 @@ } public boolean allowsListing() { -@@ -1914,5 +_,74 @@ +@@ -1955,6 +_,75 @@ @Nullable public BlockPos getRaidOmenPosition() { return this.raidOmenPosition; @@ -297,4 +241,5 @@ + this.getServer().getPlayerList().broadcastAll(new net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket(net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this)); + } } - } + + @Override diff --git a/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch b/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch index 4f7ee278e5..18d8e4cf0e 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerPlayerGameMode.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -129,6 +_,10 @@ +@@ -133,6 +_,10 @@ } public void handleBlockBreakAction(BlockPos p_215120_, ServerboundPlayerActionPacket.Action p_215121_, Direction p_215122_, int p_215123_, int p_215124_) { @@ -11,15 +11,23 @@ if (!this.player.canInteractWithBlock(p_215120_, 1.0)) { this.debugLogging(p_215120_, false, p_215124_, "too far"); } else if (p_215120_.getY() >= p_215123_) { -@@ -157,6 +_,7 @@ +@@ -161,6 +_,7 @@ float f = 1.0F; BlockState blockstate = this.level.getBlockState(p_215120_); if (!blockstate.isAir()) { -+ if (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY) ++ if (event.getUseBlock() != net.minecraftforge.eventbus.api.Event.Result.DENY) { + EnchantmentHelper.onHitBlock( + this.level, + this.player.getMainHandItem(), +@@ -172,6 +_,7 @@ + p_343810_ -> this.player.onEquippedItemBroken(p_343810_, EquipmentSlot.MAINHAND) + ); blockstate.attack(this.level, p_215120_, this.player); ++ } f = blockstate.getDestroyProgress(this.player, this.player.level(), p_215120_); } -@@ -224,7 +_,8 @@ + +@@ -238,7 +_,8 @@ public boolean destroyBlock(BlockPos p_9281_) { BlockState blockstate1 = this.level.getBlockState(p_9281_); @@ -29,7 +37,7 @@ return false; } else { BlockEntity blockentity = this.level.getBlockEntity(p_9281_); -@@ -232,30 +_,47 @@ +@@ -246,30 +_,47 @@ if (block instanceof GameMasterBlock && !this.player.canUseGameMasterBlocks()) { this.level.sendBlockUpdated(p_9281_, blockstate1, blockstate1, 3); return false; @@ -84,7 +92,7 @@ } public InteractionResult useItem(ServerPlayer p_9262_, Level p_9263_, ItemStack p_9264_, InteractionHand p_9265_) { -@@ -264,6 +_,8 @@ +@@ -278,6 +_,8 @@ } else if (p_9262_.getCooldowns().isOnCooldown(p_9264_.getItem())) { return InteractionResult.PASS; } else { @@ -93,7 +101,7 @@ int i = p_9264_.getCount(); int j = p_9264_.getDamageValue(); InteractionResultHolder interactionresultholder = p_9264_.use(p_9263_, p_9262_, p_9265_); -@@ -296,6 +_,11 @@ +@@ -310,6 +_,11 @@ if (!blockstate.getBlock().isEnabled(p_9267_.enabledFeatures())) { return InteractionResult.FAIL; } else if (this.gameModeForPlayer == GameType.SPECTATOR) { @@ -105,7 +113,7 @@ MenuProvider menuprovider = blockstate.getMenuProvider(p_9267_, blockpos); if (menuprovider != null) { p_9266_.openMenu(menuprovider); -@@ -304,10 +_,16 @@ +@@ -318,10 +_,16 @@ return InteractionResult.PASS; } } else { @@ -123,7 +131,7 @@ ItemInteractionResult iteminteractionresult = blockstate.useItemOn(p_9266_.getItemInHand(p_9269_), p_9267_, p_9266_, p_9269_, p_9270_); if (iteminteractionresult.consumesAction()) { CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(p_9266_, blockpos, itemstack); -@@ -323,8 +_,8 @@ +@@ -337,8 +_,8 @@ } } diff --git a/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch b/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch index 7088fd0b6b..77dfc22633 100644 --- a/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch +++ b/patches/minecraft/net/minecraft/server/level/WorldGenRegion.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/WorldGenRegion.java +++ b/net/minecraft/server/level/WorldGenRegion.java -@@ -325,6 +_,7 @@ +@@ -317,6 +_,7 @@ @Override public boolean addFreshEntity(Entity p_9580_) { diff --git a/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch index d61dc1d1f9..b574a6b213 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -82,6 +_,7 @@ +@@ -83,6 +_,7 @@ @Override public void handleCustomPayload(ServerboundCustomPayloadPacket p_300164_) { @@ -8,7 +8,7 @@ } @Override -@@ -180,5 +_,9 @@ +@@ -186,5 +_,9 @@ protected CommonListenerCookie createCookie(ClientInformation p_297318_) { return new CommonListenerCookie(this.playerProfile(), this.latency, p_297318_, this.transferred); diff --git a/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch index 17b976ba3d..a917068e1c 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java -@@ -38,6 +_,7 @@ +@@ -41,6 +_,7 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketListenerImpl implements ServerConfigurationPacketListener, TickablePacketListener { private static final Logger LOGGER = LogUtils.getLogger(); private static final Component DISCONNECT_REASON_INVALID_DATA = Component.translatable("multiplayer.disconnect.invalid_player_data"); @@ -8,7 +8,7 @@ private final GameProfile gameProfile; private final Queue configurationTasks = new ConcurrentLinkedQueue<>(); @Nullable -@@ -45,11 +_,13 @@ +@@ -48,11 +_,13 @@ private ClientInformation clientInformation; @Nullable private SynchronizeRegistriesTask synchronizeRegistriesTask; @@ -22,13 +22,18 @@ } @Override -@@ -68,13 +_,18 @@ +@@ -71,18 +_,23 @@ return this.connection.isConnected(); } - public void startConfiguration() { + public void vanillaStart() { this.send(new ClientboundCustomPayloadPacket(new BrandPayload(this.server.getServerModName()))); + ServerLinks serverlinks = this.server.serverLinks(); + if (!serverlinks.isEmpty()) { + this.send(new ClientboundServerLinksPacket(serverlinks.untrust())); + } + + this.send(new ClientboundUpdateEnabledFeaturesPacket(FeatureFlags.REGISTRY.toNames(this.server.getWorldData().enabledFeatures()))); + } + @@ -43,7 +48,7 @@ this.addOptionalTasks(); this.configurationTasks.add(new JoinWorldTask()); this.startNextTask(); -@@ -153,7 +_,7 @@ +@@ -161,7 +_,7 @@ ConfigurationTask configurationtask = this.configurationTasks.poll(); if (configurationtask != null) { this.currentTask = configurationtask; diff --git a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index a8e8d78407..110fdcfeba 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1005,9 +_,10 @@ +@@ -1014,9 +_,10 @@ switch (serverboundplayeractionpacket$action) { case SWAP_ITEM_WITH_OFFHAND: if (!this.player.isSpectator()) { @@ -14,7 +14,7 @@ this.player.stopUsingItem(); } -@@ -1192,8 +_,9 @@ +@@ -1207,8 +_,9 @@ } CompletableFuture completablefuture = this.filterTextPacket(playerchatmessage.signedContent()); @@ -25,7 +25,7 @@ PlayerChatMessage playerchatmessage1 = playerchatmessage.withUnsignedContent(component).filter(p_296589_.mask()); this.broadcastChatMessage(playerchatmessage1); }); -@@ -1516,7 +_,7 @@ +@@ -1531,7 +_,7 @@ @Override public void onInteraction(InteractionHand p_143682_, Vec3 p_143683_) { @@ -34,7 +34,7 @@ } @Override -@@ -1797,6 +_,7 @@ +@@ -1812,6 +_,7 @@ @Override public void handleCustomPayload(ServerboundCustomPayloadPacket p_329963_) { diff --git a/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch index 4612979053..d23abc591e 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java -@@ -23,6 +_,7 @@ +@@ -24,6 +_,7 @@ @Override public void handleIntention(ClientIntentionPacket p_9975_) { @@ -8,7 +8,7 @@ switch (p_9975_.intention()) { case LOGIN: this.beginLogin(p_9975_, false); -@@ -31,7 +_,7 @@ +@@ -32,7 +_,7 @@ ServerStatus serverstatus = this.server.getStatus(); this.connection.setupOutboundProtocol(StatusProtocols.CLIENTBOUND); if (this.server.repliesToStatus() && serverstatus != null) { diff --git a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch index 3e4993cd53..5ee7b87953 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -181,7 +_,7 @@ +@@ -183,7 +_,7 @@ throw new IllegalStateException("Protocol error", cryptexception); } @@ -9,7 +9,7 @@ @Override public void run() { String s1 = Objects.requireNonNull(ServerLoginPacketListenerImpl.this.requestedUsername, "Player name not initialized"); -@@ -224,6 +_,7 @@ +@@ -226,6 +_,7 @@ @Override public void handleCustomQueryPacket(ServerboundCustomQueryAnswerPacket p_297965_) { @@ -17,7 +17,7 @@ this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); } -@@ -248,6 +_,11 @@ +@@ -250,6 +_,11 @@ @Override public void handleCookieResponse(ServerboundCookieResponsePacket p_333672_) { this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); diff --git a/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch b/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch index 6e1c6e9a5e..ae4bd2b0fc 100644 --- a/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch +++ b/patches/minecraft/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerStatusPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerStatusPacketListenerImpl.java -@@ -12,12 +_,18 @@ +@@ -13,12 +_,18 @@ public class ServerStatusPacketListenerImpl implements ServerStatusPacketListener { private static final Component DISCONNECT_REASON = Component.translatable("multiplayer.status.request_handled"); private final ServerStatus status; @@ -19,7 +19,7 @@ } @Override -@@ -35,7 +_,7 @@ +@@ -36,7 +_,7 @@ this.connection.disconnect(DISCONNECT_REASON); } else { this.hasRequestedStatus = true; diff --git a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch index 6b2d6f3142..8b9e02081a 100644 --- a/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch +++ b/patches/minecraft/net/minecraft/server/players/PlayerList.java.patch @@ -8,7 +8,7 @@ public PlayerList(MinecraftServer p_203842_, LayeredRegistryAccess p_251844_, PlayerDataStorage p_203844_, int p_203845_) { this.server = p_203842_; -@@ -267,6 +_,7 @@ +@@ -261,6 +_,7 @@ } p_11263_.initInventoryMenu(); @@ -16,7 +16,7 @@ } protected void updateEntireScoreboard(ServerScoreboard p_11274_, ServerPlayer p_11275_) { -@@ -332,6 +_,7 @@ +@@ -326,6 +_,7 @@ optional = Optional.of(compoundtag); p_11225_.load(compoundtag); LOGGER.debug("loading single player"); @@ -24,7 +24,7 @@ } else { optional = this.playerIo.load(p_11225_); } -@@ -340,6 +_,7 @@ +@@ -334,6 +_,7 @@ } protected void save(ServerPlayer p_11277_) { @@ -32,7 +32,7 @@ this.playerIo.save(p_11277_); ServerStatsCounter serverstatscounter = this.stats.get(p_11277_.getUUID()); if (serverstatscounter != null) { -@@ -353,6 +_,7 @@ +@@ -347,6 +_,7 @@ } public void remove(ServerPlayer p_11287_) { @@ -40,15 +40,15 @@ ServerLevel serverlevel = p_11287_.serverLevel(); p_11287_.awardStat(Stats.LEAVE_GAME); this.save(p_11287_); -@@ -497,6 +_,7 @@ +@@ -467,6 +_,7 @@ this.playersByUUID.put(serverplayer.getUUID(), serverplayer); serverplayer.initInventoryMenu(); serverplayer.setHealth(serverplayer.getHealth()); + net.minecraftforge.event.ForgeEventFactory.firePlayerRespawnEvent(serverplayer, p_11238_); - if (flag2) { - serverplayer.connection - .send( -@@ -588,6 +_,7 @@ + if (!p_11238_) { + BlockPos blockpos = BlockPos.containing(dimensiontransition.pos()); + BlockState blockstate = serverlevel.getBlockState(blockpos); +@@ -572,6 +_,7 @@ } public void op(GameProfile p_11254_) { @@ -56,7 +56,7 @@ this.ops.add(new ServerOpListEntry(p_11254_, this.server.getOperatorUserPermissionLevel(), this.ops.canBypassPlayerLimit(p_11254_))); ServerPlayer serverplayer = this.getPlayer(p_11254_.getId()); if (serverplayer != null) { -@@ -596,6 +_,7 @@ +@@ -580,6 +_,7 @@ } public void deop(GameProfile p_11281_) { @@ -64,7 +64,7 @@ this.ops.remove(p_11281_); ServerPlayer serverplayer = this.getPlayer(p_11281_.getId()); if (serverplayer != null) { -@@ -809,13 +_,6 @@ +@@ -793,13 +_,6 @@ if (serverstatscounter == null) { File file1 = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile(); File file2 = new File(file1, uuid + ".json"); @@ -78,7 +78,7 @@ serverstatscounter = new ServerStatsCounter(this.server, file2); this.stats.put(uuid, serverstatscounter); -@@ -860,7 +_,7 @@ +@@ -844,7 +_,7 @@ } public List getPlayers() { @@ -87,7 +87,7 @@ } @Nullable -@@ -877,6 +_,7 @@ +@@ -861,6 +_,7 @@ playeradvancements.reload(this.server.getAdvancements()); } diff --git a/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch b/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch new file mode 100644 index 0000000000..355a3d43c1 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/BannerPatternTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/BannerPatternTags.java ++++ b/net/minecraft/tags/BannerPatternTags.java +@@ -21,4 +_,12 @@ + private static TagKey create(String p_215798_) { + return TagKey.create(Registries.BANNER_PATTERN, ResourceLocation.withDefaultNamespace(p_215798_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.BANNER_PATTERN, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch b/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch new file mode 100644 index 0000000000..d20a955c26 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/BiomeTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/BiomeTags.java ++++ b/net/minecraft/tags/BiomeTags.java +@@ -82,4 +_,12 @@ + private static TagKey create(String p_207631_) { + return TagKey.create(Registries.BIOME, ResourceLocation.withDefaultNamespace(p_207631_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.BIOME, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/BlockTags.java.patch b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch index 0d9202d3c3..8581cb4546 100644 --- a/patches/minecraft/net/minecraft/tags/BlockTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/BlockTags.java.patch @@ -1,10 +1,14 @@ --- a/net/minecraft/tags/BlockTags.java +++ b/net/minecraft/tags/BlockTags.java -@@ -194,4 +_,8 @@ +@@ -196,4 +_,12 @@ private static TagKey create(String p_203847_) { - return TagKey.create(Registries.BLOCK, new ResourceLocation(p_203847_)); + return TagKey.create(Registries.BLOCK, ResourceLocation.withDefaultNamespace(p_203847_)); } + ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ + public static TagKey create(ResourceLocation name) { + return TagKey.create(Registries.BLOCK, name); + } diff --git a/patches/minecraft/net/minecraft/tags/CatVariantTags.java.patch b/patches/minecraft/net/minecraft/tags/CatVariantTags.java.patch new file mode 100644 index 0000000000..b8c3003c76 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/CatVariantTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/CatVariantTags.java ++++ b/net/minecraft/tags/CatVariantTags.java +@@ -14,4 +_,12 @@ + private static TagKey create(String p_215846_) { + return TagKey.create(Registries.CAT_VARIANT, ResourceLocation.withDefaultNamespace(p_215846_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.CAT_VARIANT, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch new file mode 100644 index 0000000000..6f2cd11ec6 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/DamageTypeTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/DamageTypeTags.java ++++ b/net/minecraft/tags/DamageTypeTags.java +@@ -42,4 +_,12 @@ + private static TagKey create(String p_270635_) { + return TagKey.create(Registries.DAMAGE_TYPE, ResourceLocation.withDefaultNamespace(p_270635_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.DAMAGE_TYPE, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch b/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch new file mode 100644 index 0000000000..6aa037ec76 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/EnchantmentTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/EnchantmentTags.java ++++ b/net/minecraft/tags/EnchantmentTags.java +@@ -45,4 +_,12 @@ + private static TagKey create(String p_334094_) { + return TagKey.create(Registries.ENCHANTMENT, ResourceLocation.withDefaultNamespace(p_334094_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.ENCHANTMENT, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch new file mode 100644 index 0000000000..d0abf71b84 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/EntityTypeTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/EntityTypeTags.java ++++ b/net/minecraft/tags/EntityTypeTags.java +@@ -43,4 +_,12 @@ + private static TagKey> create(String p_203849_) { + return TagKey.create(Registries.ENTITY_TYPE, ResourceLocation.withDefaultNamespace(p_203849_)); + } ++ ++ public static TagKey> create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey> create(ResourceLocation name) { ++ return TagKey.create(Registries.ENTITY_TYPE, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch b/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch new file mode 100644 index 0000000000..aee534f9ac --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/FlatLevelGeneratorPresetTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/FlatLevelGeneratorPresetTags.java ++++ b/net/minecraft/tags/FlatLevelGeneratorPresetTags.java +@@ -13,4 +_,12 @@ + private static TagKey create(String p_215852_) { + return TagKey.create(Registries.FLAT_LEVEL_GENERATOR_PRESET, ResourceLocation.withDefaultNamespace(p_215852_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.FLAT_LEVEL_GENERATOR_PRESET, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch index 7d847752c0..88e866b86c 100644 --- a/patches/minecraft/net/minecraft/tags/FluidTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/FluidTags.java.patch @@ -1,10 +1,14 @@ --- a/net/minecraft/tags/FluidTags.java +++ b/net/minecraft/tags/FluidTags.java -@@ -14,4 +_,8 @@ +@@ -14,4 +_,12 @@ private static TagKey create(String p_203851_) { - return TagKey.create(Registries.FLUID, new ResourceLocation(p_203851_)); + return TagKey.create(Registries.FLUID, ResourceLocation.withDefaultNamespace(p_203851_)); } + ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ + public static TagKey create(ResourceLocation name) { + return TagKey.create(Registries.FLUID, name); + } diff --git a/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch b/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch new file mode 100644 index 0000000000..c7d3a079f5 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/GameEventTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/GameEventTags.java ++++ b/net/minecraft/tags/GameEventTags.java +@@ -14,4 +_,12 @@ + private static TagKey create(String p_203853_) { + return TagKey.create(Registries.GAME_EVENT, ResourceLocation.withDefaultNamespace(p_203853_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.GAME_EVENT, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch b/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch new file mode 100644 index 0000000000..c9c5f4fdda --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/InstrumentTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/InstrumentTags.java ++++ b/net/minecraft/tags/InstrumentTags.java +@@ -12,4 +_,12 @@ + private static TagKey create(String p_215861_) { + return TagKey.create(Registries.INSTRUMENT, ResourceLocation.withDefaultNamespace(p_215861_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.INSTRUMENT, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/ItemTags.java.patch b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch index e9d95e3236..48c69a06a6 100644 --- a/patches/minecraft/net/minecraft/tags/ItemTags.java.patch +++ b/patches/minecraft/net/minecraft/tags/ItemTags.java.patch @@ -1,11 +1,15 @@ --- a/net/minecraft/tags/ItemTags.java +++ b/net/minecraft/tags/ItemTags.java -@@ -160,4 +_,8 @@ +@@ -159,4 +_,12 @@ private static TagKey bind(String p_203855_) { - return TagKey.create(Registries.ITEM, new ResourceLocation(p_203855_)); + return TagKey.create(Registries.ITEM, ResourceLocation.withDefaultNamespace(p_203855_)); } + -+ public static TagKey create(final ResourceLocation name) { ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { + return TagKey.create(Registries.ITEM, name); + } } diff --git a/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch b/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch new file mode 100644 index 0000000000..543f045749 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/PaintingVariantTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/PaintingVariantTags.java ++++ b/net/minecraft/tags/PaintingVariantTags.java +@@ -13,4 +_,12 @@ + private static TagKey create(String p_215874_) { + return TagKey.create(Registries.PAINTING_VARIANT, ResourceLocation.withDefaultNamespace(p_215874_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.PAINTING_VARIANT, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch b/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch new file mode 100644 index 0000000000..f1caf02dde --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/PoiTypeTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/PoiTypeTags.java ++++ b/net/minecraft/tags/PoiTypeTags.java +@@ -15,4 +_,12 @@ + private static TagKey create(String p_215881_) { + return TagKey.create(Registries.POINT_OF_INTEREST_TYPE, ResourceLocation.withDefaultNamespace(p_215881_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.POINT_OF_INTEREST_TYPE, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/StructureTags.java.patch b/patches/minecraft/net/minecraft/tags/StructureTags.java.patch new file mode 100644 index 0000000000..ef3b03dca2 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/StructureTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/StructureTags.java ++++ b/net/minecraft/tags/StructureTags.java +@@ -29,4 +_,12 @@ + private static TagKey create(String p_215896_) { + return TagKey.create(Registries.STRUCTURE, ResourceLocation.withDefaultNamespace(p_215896_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.STRUCTURE, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch b/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch index 93a23dc3fe..bde0e8edaf 100644 --- a/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch +++ b/patches/minecraft/net/minecraft/tags/TagBuilder.java.patch @@ -9,13 +9,12 @@ private final List entries = new ArrayList<>(); public static TagBuilder create() { -@@ -34,5 +_,31 @@ +@@ -34,5 +_,30 @@ public TagBuilder addOptionalTag(ResourceLocation p_215910_) { return this.add(TagEntry.optionalTag(p_215910_)); + } + -+ // Forge start + /** Forge: Used for datagen */ + private final List removeEntries = new ArrayList<>(); + private boolean replace = false; diff --git a/patches/minecraft/net/minecraft/tags/TagKey.java.patch b/patches/minecraft/net/minecraft/tags/TagKey.java.patch new file mode 100644 index 0000000000..f4fbc72a0c --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/TagKey.java.patch @@ -0,0 +1,13 @@ +--- a/net/minecraft/tags/TagKey.java ++++ b/net/minecraft/tags/TagKey.java +@@ -36,6 +_,10 @@ + return (TagKey)VALUES.intern(new TagKey<>(p_203883_, p_203884_)); + } + ++ public static TagKey create(ResourceKey> registry, String namespace, String path) { ++ return create(registry, ResourceLocation.fromNamespaceAndPath(namespace, path)); ++ } ++ + public boolean isFor(ResourceKey> p_207646_) { + return this.registry == p_207646_; + } diff --git a/patches/minecraft/net/minecraft/tags/TagManager.java.patch b/patches/minecraft/net/minecraft/tags/TagManager.java.patch deleted file mode 100644 index 1f1666d0e2..0000000000 --- a/patches/minecraft/net/minecraft/tags/TagManager.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/tags/TagManager.java -+++ b/net/minecraft/tags/TagManager.java -@@ -42,7 +_,7 @@ - - public static String getTagDir(ResourceKey> p_203919_) { - String s = CUSTOM_REGISTRY_DIRECTORIES.get(p_203919_); -- return s != null ? s : "tags/" + p_203919_.location().getPath(); -+ return s != null ? s : "tags/" + net.minecraftforge.common.ForgeHooks.prefixNamespace(p_203919_.location()); - } - - @Override diff --git a/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch b/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch new file mode 100644 index 0000000000..e0242ffec7 --- /dev/null +++ b/patches/minecraft/net/minecraft/tags/WorldPresetTags.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/tags/WorldPresetTags.java ++++ b/net/minecraft/tags/WorldPresetTags.java +@@ -14,4 +_,12 @@ + private static TagKey create(String p_216058_) { + return TagKey.create(Registries.WORLD_PRESET, ResourceLocation.withDefaultNamespace(p_216058_)); + } ++ ++ public static TagKey create(String namepsace, String path) { ++ return create(ResourceLocation.fromNamespaceAndPath(namepsace, path)); ++ } ++ ++ public static TagKey create(ResourceLocation name) { ++ return TagKey.create(Registries.WORLD_PRESET, name); ++ } + } diff --git a/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch b/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch index 6f7437b1f1..93f66196fb 100644 --- a/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch +++ b/patches/minecraft/net/minecraft/world/effect/MobEffect.java.patch @@ -1,15 +1,16 @@ --- a/net/minecraft/world/effect/MobEffect.java +++ b/net/minecraft/world/effect/MobEffect.java -@@ -30,7 +_,7 @@ +@@ -35,7 +_,8 @@ import net.minecraft.world.flag.FeatureFlagSet; import net.minecraft.world.flag.FeatureFlags; -public class MobEffect implements FeatureElement { ++ +public class MobEffect implements FeatureElement, net.minecraftforge.common.extensions.IForgeMobEffect { + public static final Codec> CODEC = BuiltInRegistries.MOB_EFFECT.holderByNameCodec(); + public static final StreamCodec> STREAM_CODEC = ByteBufCodecs.holderRegistry(Registries.MOB_EFFECT); private static final int AMBIENT_ALPHA = Mth.floor(38.25F); - private final Map, MobEffect.AttributeTemplate> attributeModifiers = new Object2ObjectOpenHashMap<>(); - private final MobEffectCategory category; -@@ -49,12 +_,14 @@ +@@ -56,12 +_,14 @@ int i = p_326747_.isAmbient() ? AMBIENT_ALPHA : 255; return ColorParticleOption.create(ParticleTypes.ENTITY_EFFECT, FastColor.ARGB32.color(i, p_19452_)); }; @@ -24,8 +25,8 @@ } public int getBlendDurationTicks() { -@@ -179,4 +_,28 @@ - return new AttributeModifier(this.id, p_331481_ + " " + p_332230_, this.amount * (double)(p_332230_ + 1), this.operation); +@@ -186,4 +_,28 @@ + return new AttributeModifier(this.id, this.amount * (double)(p_332230_ + 1), this.operation); } } + diff --git a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch index 4257ba92d5..13466219da 100644 --- a/patches/minecraft/net/minecraft/world/entity/Entity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Entity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -126,7 +_,7 @@ +@@ -128,7 +_,7 @@ import net.minecraft.world.scores.Team; import org.slf4j.Logger; @@ -9,7 +9,7 @@ private static final Logger LOGGER = LogUtils.getLogger(); public static final String ID_TAG = "id"; public static final String PASSENGERS_TAG = "Passengers"; -@@ -147,6 +_,7 @@ +@@ -149,6 +_,7 @@ private static final double LAVA_SLOW_FLOW_SCALE = 0.0023333333333333335; public static final String UUID_TAG = "UUID"; private static double viewScale = 1.0; @@ -17,7 +17,7 @@ private final EntityType type; private int id = ENTITY_COUNTER.incrementAndGet(); public boolean blocksBuilding; -@@ -192,8 +_,10 @@ +@@ -194,8 +_,10 @@ public int tickCount; private int remainingFireTicks = -this.getFireImmuneTicks(); protected boolean wasTouchingWater; @@ -28,7 +28,7 @@ private final Set> fluidOnEyes = new HashSet<>(); public int invulnerableTime; protected boolean firstTick = true; -@@ -242,6 +_,7 @@ +@@ -243,6 +_,7 @@ private BlockState inBlockState = null; public Entity(EntityType p_19870_, Level p_19871_) { @@ -36,7 +36,7 @@ this.type = p_19870_; this.level = p_19871_; this.dimensions = p_19870_.getDimensions(); -@@ -261,6 +_,8 @@ +@@ -262,6 +_,8 @@ this.entityData = synchedentitydata$builder.build(); this.setPos(0.0, 0.0, 0.0); this.eyeHeight = this.dimensions.eyeHeight(); @@ -45,7 +45,7 @@ } public boolean isColliding(BlockPos p_20040_, BlockState p_20041_) { -@@ -348,6 +_,7 @@ +@@ -349,6 +_,7 @@ public void remove(Entity.RemovalReason p_146834_) { this.setRemoved(p_146834_); @@ -53,7 +53,7 @@ } public void onClientRemoval() { -@@ -464,7 +_,7 @@ +@@ -465,7 +_,7 @@ if (this.isInLava()) { this.lavaHurt(); @@ -62,7 +62,7 @@ } this.checkBelowWorld(); -@@ -672,7 +_,7 @@ +@@ -673,7 +_,7 @@ double d1 = vec3.x; double d2 = vec3.y; double d3 = vec3.z; @@ -71,7 +71,7 @@ BlockPos blockpos1 = this.getOnPos(); BlockState blockstate1 = this.level().getBlockState(blockpos1); boolean flag1 = this.isStateClimbable(blockstate1); -@@ -716,12 +_,12 @@ +@@ -717,12 +_,12 @@ this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -86,7 +86,7 @@ this.setRemainingFireTicks(-this.getFireImmuneTicks()); } -@@ -811,9 +_,7 @@ +@@ -812,9 +_,7 @@ return blockpos; } else { BlockState blockstate = this.level().getBlockState(blockpos); @@ -97,7 +97,7 @@ ? blockpos.atY(Mth.floor(this.position.y - (double)p_216987_)) : blockpos; } -@@ -1041,19 +_,19 @@ +@@ -1078,19 +_,19 @@ return !blockstate.is(BlockTags.INSIDE_STEP_SOUND_BLOCKS) && !blockstate.is(BlockTags.COMBINATION_STEP_SOUND_BLOCKS) ? p_278049_ : blockpos; } @@ -123,7 +123,7 @@ this.playSound(soundtype.getStepSound(), soundtype.getVolume() * 0.15F, soundtype.getPitch()); } -@@ -1204,27 +_,33 @@ +@@ -1241,27 +_,33 @@ public void updateSwimming() { if (this.isSwimming()) { @@ -165,7 +165,7 @@ if (!this.wasTouchingWater && !this.firstTick) { this.doWaterSplashEffect(); } -@@ -1240,6 +_,7 @@ +@@ -1277,6 +_,7 @@ private void updateFluidOnEyes() { this.wasEyeInWater = this.isEyeInFluid(FluidTags.WATER); this.fluidOnEyes.clear(); @@ -173,7 +173,7 @@ double d0 = this.getEyeY(); if (this.getVehicle() instanceof Boat boat && !boat.isUnderWater() && boat.getBoundingBox().maxY >= d0 && boat.getBoundingBox().minY <= d0) { return; -@@ -1249,7 +_,7 @@ +@@ -1286,7 +_,7 @@ FluidState fluidstate = this.level().getFluidState(blockpos); double d1 = (double)((float)blockpos.getY() + fluidstate.getHeight(this.level(), blockpos)); if (d1 > d0) { @@ -182,7 +182,7 @@ } } -@@ -1303,12 +_,13 @@ +@@ -1340,12 +_,13 @@ } public boolean canSpawnSprintParticle() { @@ -197,7 +197,7 @@ if (blockstate.getRenderShape() != RenderShape.INVISIBLE) { Vec3 vec3 = this.getDeltaMovement(); BlockPos blockpos1 = this.blockPosition(); -@@ -1324,7 +_,7 @@ +@@ -1361,7 +_,7 @@ this.level() .addParticle( @@ -206,7 +206,7 @@ d0, this.getY() + 0.1, d1, -@@ -1335,12 +_,15 @@ +@@ -1372,12 +_,15 @@ } } @@ -223,7 +223,7 @@ } public void moveRelative(float p_19921_, Vec3 p_19922_) { -@@ -1662,6 +_,11 @@ +@@ -1711,6 +_,11 @@ p_20241_.putBoolean("HasVisualFire", this.hasVisualFire); } @@ -235,7 +235,7 @@ if (!this.tags.isEmpty()) { ListTag listtag = new ListTag(); -@@ -1752,6 +_,9 @@ +@@ -1801,6 +_,9 @@ this.setGlowingTag(p_20259_.getBoolean("Glowing")); this.setTicksFrozen(p_20259_.getInt("TicksFrozen")); this.hasVisualFire = p_20259_.getBoolean("HasVisualFire"); @@ -245,7 +245,7 @@ if (p_20259_.contains("Tags", 9)) { this.tags.clear(); ListTag listtag3 = p_20259_.getList("Tags", 8); -@@ -1836,6 +_,8 @@ +@@ -1885,6 +_,8 @@ } else { ItemEntity itementity = new ItemEntity(this.level(), this.getX(), this.getY() + (double)p_19986_, this.getZ(), p_19985_); itementity.setDefaultPickUpDelay(); @@ -254,7 +254,7 @@ this.level().addFreshEntity(itementity); return itementity; } -@@ -1882,6 +_,7 @@ +@@ -1952,6 +_,7 @@ public void rideTick() { this.setDeltaMovement(Vec3.ZERO); @@ -262,7 +262,7 @@ this.tick(); if (this.isPassenger()) { this.getVehicle().positionRider(this); -@@ -1940,6 +_,7 @@ +@@ -2010,6 +_,7 @@ } } @@ -270,7 +270,7 @@ if (p_19967_ || this.canRide(p_19966_) && p_19966_.canAddPassenger(this)) { if (this.isPassenger()) { this.stopRiding(); -@@ -1971,6 +_,7 @@ +@@ -2041,6 +_,7 @@ public void removeVehicle() { if (this.vehicle != null) { Entity entity = this.vehicle; @@ -278,7 +278,7 @@ this.vehicle = null; entity.removePassenger(this); } -@@ -2020,6 +_,8 @@ +@@ -2090,6 +_,8 @@ return this.passengers.isEmpty(); } @@ -287,7 +287,7 @@ protected boolean couldAcceptPassenger() { return true; } -@@ -2209,7 +_,7 @@ +@@ -2274,7 +_,7 @@ } public boolean isVisuallyCrawling() { @@ -296,8 +296,8 @@ } public void setSwimming(boolean p_20283_) { -@@ -2318,7 +_,7 @@ - this.igniteForSeconds(8); +@@ -2383,7 +_,7 @@ + this.igniteForSeconds(8.0F); } - this.hurt(this.damageSources().lightningBolt(), 5.0F); @@ -305,7 +305,7 @@ } public void onAboveBubbleCol(boolean p_20313_) { -@@ -2413,7 +_,7 @@ +@@ -2478,7 +_,7 @@ } protected Component getTypeName() { @@ -314,53 +314,7 @@ } public boolean is(Entity p_20356_) { -@@ -2496,14 +_,21 @@ - - @Nullable - public Entity changeDimension(ServerLevel p_20118_) { -- if (this.level() instanceof ServerLevel && !this.isRemoved()) { -+ return this.changeDimension(p_20118_, p_20118_.getPortalForcer()); -+ } -+ -+ @Nullable -+ public Entity changeDimension(ServerLevel p_20118_, net.minecraftforge.common.util.ITeleporter teleporter) { -+ if (net.minecraftforge.event.ForgeEventFactory.onTravelToDimension(this, p_20118_.dimension())) return null; -+ if (this.level() instanceof ServerLevel && !this.isRemoved()) { - this.level().getProfiler().push("changeDimension"); - this.unRide(); - this.level().getProfiler().push("reposition"); -- PortalInfo portalinfo = this.findDimensionEntryPoint(p_20118_); -+ PortalInfo portalinfo = teleporter.getPortalInfo(this, p_20118_, this::findDimensionEntryPoint); - if (portalinfo == null) { - return null; - } else { -+ Entity transportedEntity = teleporter.placeEntity(this, (ServerLevel) this.level, p_20118_, this.yRot, spawnPortal -> { //Forge: Start vanilla logic - this.level().getProfiler().popPush("reloading"); - Entity entity = this.getType().create(p_20118_); - if (entity != null) { -@@ -2513,17 +_,19 @@ - ); - entity.setDeltaMovement(portalinfo.speed); - p_20118_.addDuringTeleport(entity); -- if (p_20118_.dimension() == Level.END) { -+ if (spawnPortal && p_20118_.dimension() == Level.END) { - ServerLevel.makeObsidianPlatform(p_20118_); - } - } -+ return entity; -+ }); //Forge: End vanilla logic - - this.removeAfterChangingDimensions(); - this.level().getProfiler().pop(); - ((ServerLevel)this.level()).resetEmptyTime(); - p_20118_.resetEmptyTime(); - this.level().getProfiler().pop(); -- return entity; -+ return transportedEntity; - } - } else { - return null; -@@ -2653,6 +_,7 @@ +@@ -2685,6 +_,7 @@ return this.stringUUID; } @@ -368,8 +322,8 @@ public boolean isPushedByFluid() { return true; } -@@ -3097,9 +_,17 @@ - this.yRotO = this.getYRot(); +@@ -3127,9 +_,17 @@ + return Mth.lerp(p_344421_, this.yRotO, this.yRot); } + @Deprecated // Forge: Use predicate version instead, only for vanilla Tags @@ -387,7 +341,7 @@ } else { AABB aabb = this.getBoundingBox().deflate(0.001); int i = Mth.floor(aabb.minX); -@@ -3114,25 +_,28 @@ +@@ -3144,25 +_,28 @@ Vec3 vec3 = Vec3.ZERO; int k1 = 0; BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); @@ -423,7 +377,7 @@ } } } -@@ -3140,27 +_,28 @@ +@@ -3170,27 +_,28 @@ } } @@ -442,7 +396,7 @@ } Vec3 vec32 = this.getDeltaMovement(); -- vec3 = vec3.scale(p_204033_ * 1.0); +- vec3 = vec3.scale(p_204033_); + interim.setMiddle(interim.getMiddle().scale(this.getFluidMotionScale(fluidType))); double d2 = 0.003; - if (Math.abs(vec32.x) < 0.003 && Math.abs(vec32.z) < 0.003 && vec3.length() < 0.0045000000000000005) { @@ -462,7 +416,7 @@ } } -@@ -3173,7 +_,10 @@ +@@ -3203,7 +_,10 @@ return !this.level().hasChunksAt(i, k, j, l); } @@ -473,17 +427,17 @@ return this.fluidHeight.getDouble(p_204037_); } -@@ -3189,7 +_,9 @@ +@@ -3219,7 +_,9 @@ return this.dimensions.height(); } + private boolean hasExtraSpawnData = this instanceof net.minecraftforge.entity.IEntityAdditionalSpawnData; - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity p_344981_) { + if (hasExtraSpawnData) return net.minecraftforge.common.ForgeHooks.getEntitySpawnPacket(this); - return new ClientboundAddEntityPacket(this); + return new ClientboundAddEntityPacket(this, p_344981_); } -@@ -3310,6 +_,11 @@ +@@ -3340,6 +_,11 @@ this.levelCallback.onMove(); } @@ -495,7 +449,7 @@ } public void checkDespawn() { -@@ -3463,6 +_,100 @@ +@@ -3493,6 +_,100 @@ float f1 = (float)Mth.lerp(d0, (double)this.getXRot(), p_298926_); this.setPos(d1, d2, d3); this.setRot(f, f1); @@ -595,4 +549,4 @@ + return this.forgeFluidTypeHeight.object2DoubleEntrySet().stream().max(java.util.Comparator.comparingDouble(Object2DoubleMap.Entry::getDoubleValue)).map(Object2DoubleMap.Entry::getKey).orElseGet(net.minecraftforge.common.ForgeMod.EMPTY_TYPE); } - @FunctionalInterface + public RandomSource getRandom() { diff --git a/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch b/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch index f9697dc56d..00811710d4 100644 --- a/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/EntityType.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java -@@ -740,6 +_,11 @@ +@@ -723,6 +_,11 @@ private final float spawnDimensionsScale; private final FeatureFlagSet requiredFeatures; @@ -12,7 +12,7 @@ private static EntityType register(String p_20635_, EntityType.Builder p_20636_) { return Registry.register(BuiltInRegistries.ENTITY_TYPE, p_20635_, p_20636_.build(p_20635_)); } -@@ -752,6 +_,10 @@ +@@ -735,6 +_,10 @@ return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(p_20633_)); } @@ -23,7 +23,7 @@ public EntityType( EntityType.EntityFactory p_273268_, MobCategory p_272918_, -@@ -764,7 +_,8 @@ +@@ -747,7 +_,8 @@ float p_332711_, int p_272895_, int p_273451_, @@ -33,7 +33,7 @@ ) { this.factory = p_273268_; this.category = p_272918_; -@@ -778,6 +_,10 @@ +@@ -761,6 +_,10 @@ this.clientTrackingRange = p_272895_; this.updateInterval = p_273451_; this.requiredFeatures = p_273518_; @@ -44,7 +44,7 @@ } @Nullable -@@ -1054,14 +_,26 @@ +@@ -1037,14 +_,26 @@ } public int clientTrackingRange() { @@ -71,7 +71,7 @@ return this != PLAYER && this != LLAMA_SPIT && this != WITHER -@@ -1097,6 +_,12 @@ +@@ -1080,6 +_,12 @@ return this.builtInRegistryHolder; } @@ -84,7 +84,7 @@ public static class Builder { private final EntityType.EntityFactory factory; private final MobCategory category; -@@ -1111,6 +_,10 @@ +@@ -1094,6 +_,10 @@ private float spawnDimensionsScale = 1.0F; private EntityAttachments.Builder attachments = EntityAttachments.builder(); private FeatureFlagSet requiredFeatures = FeatureFlags.VANILLA_SET; @@ -95,7 +95,7 @@ private Builder(EntityType.EntityFactory p_20696_, MobCategory p_20697_) { this.factory = p_20696_; -@@ -1219,6 +_,30 @@ +@@ -1202,6 +_,30 @@ return this; } @@ -126,7 +126,7 @@ public EntityType build(String p_20713_) { if (this.serialize) { Util.fetchChoiceType(References.ENTITY_TREE, p_20713_); -@@ -1236,7 +_,8 @@ +@@ -1219,7 +_,8 @@ this.spawnDimensionsScale, this.clientTrackingRange, this.updateInterval, diff --git a/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch b/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch index 180bc1b41c..d0985b72f7 100644 --- a/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/ExperienceOrb.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ExperienceOrb.java +++ b/net/minecraft/world/entity/ExperienceOrb.java -@@ -107,7 +_,8 @@ +@@ -110,7 +_,8 @@ this.move(MoverType.SELF, this.getDeltaMovement()); float f = 0.98F; if (this.onGround()) { @@ -10,7 +10,7 @@ } this.setDeltaMovement(this.getDeltaMovement().multiply((double)f, 0.98, (double)f)); -@@ -188,6 +_,7 @@ +@@ -191,6 +_,7 @@ @Override public boolean hurt(DamageSource p_20785_, float p_20786_) { @@ -18,20 +18,11 @@ if (this.isInvulnerableTo(p_20785_)) { return false; } else if (this.level().isClientSide) { -@@ -223,6 +_,7 @@ +@@ -226,6 +_,7 @@ public void playerTouch(Player p_20792_) { - if (!this.level().isClientSide) { + if (p_20792_ instanceof ServerPlayer serverplayer) { if (p_20792_.takeXpDelay == 0) { + if (net.minecraftforge.event.ForgeEventFactory.onPlayerPickupXp(p_20792_, this)) return; p_20792_.takeXpDelay = 2; p_20792_.take(this, 1); - int i = this.repairPlayerItems(p_20792_, this.value); -@@ -242,7 +_,7 @@ - Entry entry = EnchantmentHelper.getRandomItemWith(Enchantments.MENDING, p_147093_, ItemStack::isDamaged); - if (entry != null) { - ItemStack itemstack = entry.getValue(); -- int i = Math.min(this.xpToDurability(p_147094_), itemstack.getDamageValue()); -+ int i = Math.min((int)(p_147094_ * itemstack.getXpRepairRatio()), itemstack.getDamageValue()); - itemstack.setDamageValue(itemstack.getDamageValue() - i); - int j = p_147094_ - this.durabilityToXp(i); - return j > 0 ? this.repairPlayerItems(p_147093_, j) : 0; + int i = this.repairPlayerItems(serverplayer, this.value); diff --git a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch index 66daef82ca..ca2855c602 100644 --- a/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/LivingEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -126,14 +_,16 @@ +@@ -132,7 +_,7 @@ import net.minecraft.world.scores.Scoreboard; import org.slf4j.Logger; @@ -8,17 +8,8 @@ +public abstract class LivingEntity extends Entity implements Attackable, net.minecraftforge.common.extensions.IForgeLivingEntity { private static final Logger LOGGER = LogUtils.getLogger(); private static final String TAG_ACTIVE_EFFECTS = "active_effects"; - private static final UUID SPEED_MODIFIER_SOUL_SPEED_UUID = UUID.fromString("87f46a96-686f-4796-b035-22e16ee9e038"); - private static final UUID SPEED_MODIFIER_POWDER_SNOW_UUID = UUID.fromString("1eaf83ff-7207-4596-b37a-d7a07b3ec4ce"); -+ private static final UUID SLOW_FALLING_ID = UUID.fromString("A5B6CF2A-2F7C-31EF-9022-7C3E7D5E6ABA"); - private static final AttributeModifier SPEED_MODIFIER_SPRINTING = new AttributeModifier( - UUID.fromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D"), "Sprinting speed boost", 0.3F, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL - ); -+ private static final AttributeModifier SLOW_FALLING = new AttributeModifier(SLOW_FALLING_ID, "Slow falling acceleration reduction", -0.07, AttributeModifier.Operation.ADD_VALUE); // Add -0.07 to 0.08 so we get the vanilla default of 0.01 - public static final int HAND_SLOTS = 2; - public static final int ARMOR_SLOTS = 4; - public static final int EQUIPMENT_SLOT_OFFSET = 98; -@@ -250,7 +_,8 @@ + private static final ResourceLocation SPEED_MODIFIER_POWDER_SNOW_ID = ResourceLocation.withDefaultNamespace("powder_snow"); +@@ -260,7 +_,8 @@ this.setYRot((float)(Math.random() * (float) (Math.PI * 2))); this.yHeadRot = this.getYRot(); NbtOps nbtops = NbtOps.INSTANCE; @@ -28,28 +19,29 @@ } public Brain getBrain() { -@@ -298,7 +_,9 @@ - .add(Attributes.GRAVITY) - .add(Attributes.SAFE_FALL_DISTANCE) - .add(Attributes.FALL_DAMAGE_MULTIPLIER) -- .add(Attributes.JUMP_STRENGTH); +@@ -314,7 +_,10 @@ + .add(Attributes.EXPLOSION_KNOCKBACK_RESISTANCE) + .add(Attributes.WATER_MOVEMENT_EFFICIENCY) + .add(Attributes.MOVEMENT_EFFICIENCY) +- .add(Attributes.ATTACK_KNOCKBACK); ++ .add(Attributes.ATTACK_KNOCKBACK) + .add(Attributes.JUMP_STRENGTH) + .add(net.minecraftforge.common.ForgeMod.SWIM_SPEED.getHolder().get()) + .add(net.minecraftforge.common.ForgeMod.NAMETAG_DISTANCE.getHolder().get()); } @Override -@@ -327,7 +_,8 @@ - float f = (float)Mth.ceil((double)this.fallDistance - d0); - double d5 = Math.min((double)(0.2F + f / 15.0F), 2.5); - int i = (int)(150.0 * d5); -- ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_), d1, d2, d3, i, 0.0, 0.0, 0.0, 0.15F); +@@ -342,7 +_,8 @@ + float f = (float)Mth.ceil((double)this.fallDistance - d7); + double d4 = Math.min((double)(0.2F + f / 15.0F), 2.5); + int i = (int)(150.0 * d4); +- ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); + if (!p_20992_.addLandingEffects((ServerLevel) this.level(), p_20993_, p_20992_, this, i)) -+ ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_).setPos(p_20993_), d1, d2, d3, i, 0.0, 0.0, 0.0, 0.15F); ++ ((ServerLevel)this.level()).sendParticles(new BlockParticleOption(ParticleTypes.BLOCK, p_20992_).setPos(p_20993_), d0, d1, d2, i, 0.0, 0.0, 0.0, 0.15F); } } -@@ -337,6 +_,7 @@ +@@ -352,6 +_,7 @@ } } @@ -57,7 +49,7 @@ public final boolean canBreatheUnderwater() { return this.getType().is(EntityTypeTags.CAN_BREATHE_UNDER_WATER); } -@@ -378,6 +_,10 @@ +@@ -397,6 +_,10 @@ } } @@ -68,7 +60,7 @@ if (this.isEyeInFluid(FluidTags.WATER) && !this.level().getBlockState(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())).is(Blocks.BUBBLE_COLUMN)) { boolean flag1 = !this.canBreatheUnderwater() && !MobEffectUtil.hasWaterBreathing(this) && (!flag || !((Player)this).getAbilities().invulnerable); -@@ -423,7 +_,7 @@ +@@ -442,7 +_,7 @@ } } @@ -77,7 +69,7 @@ this.extinguishFire(); } -@@ -808,7 +_,8 @@ +@@ -769,7 +_,8 @@ } if (p_21096_.contains("Brain", 10)) { @@ -87,7 +79,7 @@ } } -@@ -820,7 +_,7 @@ +@@ -781,7 +_,7 @@ Holder holder = iterator.next(); MobEffectInstance mobeffectinstance = this.activeEffects.get(holder); if (!mobeffectinstance.tick(this, () -> this.onEffectUpdated(mobeffectinstance, true, null))) { @@ -96,7 +88,7 @@ iterator.remove(); this.onEffectRemoved(mobeffectinstance); } -@@ -901,6 +_,7 @@ +@@ -862,6 +_,7 @@ } } @@ -104,7 +96,7 @@ return d0; } -@@ -942,7 +_,11 @@ +@@ -903,7 +_,11 @@ boolean flag; for (flag = false; iterator.hasNext(); flag = true) { @@ -117,7 +109,7 @@ iterator.remove(); } -@@ -977,6 +_,7 @@ +@@ -938,6 +_,7 @@ } else { MobEffectInstance mobeffectinstance = this.activeEffects.get(p_147208_.getEffect()); boolean flag = false; @@ -125,7 +117,7 @@ if (mobeffectinstance == null) { this.activeEffects.put(p_147208_.getEffect(), p_147208_); this.onEffectAdded(p_147208_, p_147209_); -@@ -993,6 +_,10 @@ +@@ -954,6 +_,10 @@ } public boolean canBeAffected(MobEffectInstance p_21197_) { @@ -136,7 +128,7 @@ if (this.getType().is(EntityTypeTags.IMMUNE_TO_INFESTED)) { return !p_21197_.is(MobEffects.INFESTED); } else if (this.getType().is(EntityTypeTags.IMMUNE_TO_OOZING)) { -@@ -1026,6 +_,9 @@ +@@ -987,6 +_,9 @@ } public boolean removeEffect(Holder p_335910_) { @@ -146,7 +138,7 @@ MobEffectInstance mobeffectinstance = this.removeEffectNoUpdate(p_335910_); if (mobeffectinstance != null) { this.onEffectRemoved(mobeffectinstance); -@@ -1100,6 +_,10 @@ +@@ -1065,6 +_,10 @@ } public void heal(float p_21116_) { @@ -157,7 +149,7 @@ float f = this.getHealth(); if (f > 0.0F) { this.setHealth(f + p_21116_); -@@ -1120,6 +_,9 @@ +@@ -1085,6 +_,9 @@ @Override public boolean hurt(DamageSource p_21016_, float p_21017_) { @@ -167,7 +159,7 @@ if (this.isInvulnerableTo(p_21016_)) { return false; } else if (this.level().isClientSide) { -@@ -1138,14 +_,18 @@ +@@ -1103,14 +_,18 @@ boolean flag = false; float f1 = 0.0F; if (p_21017_ > 0.0F && this.isDamageSourceBlocked(p_21016_)) { @@ -189,7 +181,7 @@ } if (p_21016_.is(DamageTypeTags.IS_FREEZING) && this.getType().is(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES)) { -@@ -1186,7 +_,7 @@ +@@ -1151,7 +_,7 @@ if (entity instanceof Player player1) { this.lastHurtByPlayerTime = 100; this.lastHurtByPlayer = player1; @@ -198,7 +190,7 @@ this.lastHurtByPlayerTime = 100; if (wolf.getOwner() instanceof Player player) { this.lastHurtByPlayer = player; -@@ -1247,7 +_,7 @@ +@@ -1216,7 +_,7 @@ if (this instanceof ServerPlayer) { CriteriaTriggers.ENTITY_HURT_PLAYER.trigger((ServerPlayer)this, p_21016_, f, p_21017_, flag); if (f1 > 0.0F && f1 < 3.4028235E37F) { @@ -207,7 +199,7 @@ } } -@@ -1275,7 +_,7 @@ +@@ -1244,7 +_,7 @@ for (InteractionHand interactionhand : InteractionHand.values()) { ItemStack itemstack1 = this.getItemInHand(interactionhand); @@ -216,7 +208,7 @@ itemstack = itemstack1.copy(); itemstack1.shrink(1); break; -@@ -1361,6 +_,7 @@ +@@ -1330,6 +_,7 @@ } public void die(DamageSource p_21014_) { @@ -224,7 +216,7 @@ if (!this.isRemoved() && !this.dead) { Entity entity = p_21014_.getEntity(); LivingEntity livingentity = this.getKillCredit(); -@@ -1396,10 +_,10 @@ +@@ -1365,10 +_,10 @@ if (!this.level().isClientSide) { boolean flag = false; if (p_21269_ instanceof WitherBoss) { @@ -237,38 +229,37 @@ this.level().setBlock(blockpos, blockstate, 3); flag = true; } -@@ -1422,6 +_,8 @@ - i = 0; - } +@@ -1383,6 +_,7 @@ + } -+ i = net.minecraftforge.common.ForgeHooks.getLootingLevel(this, entity, p_21192_); + protected void dropAllDeathLoot(ServerLevel p_342160_, DamageSource p_21192_) { + this.captureDrops(new java.util.ArrayList<>()); boolean flag = this.lastHurtByPlayerTime > 0; - if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { + if (this.shouldDropLoot() && p_342160_.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { this.dropFromLootTable(p_21192_, flag); -@@ -1430,6 +_,11 @@ +@@ -1391,6 +_,11 @@ this.dropEquipment(); - this.dropExperience(); + this.dropExperience(p_21192_.getEntity()); + + var drops = captureDrops(null); -+ if (!net.minecraftforge.event.ForgeEventFactory.onLivingDrops(this, p_21192_, drops, i, lastHurtByPlayerTime > 0)) { ++ if (!net.minecraftforge.event.ForgeEventFactory.onLivingDrops(this, p_21192_, drops, lastHurtByPlayerTime > 0)) { + drops.forEach(e -> level().addFreshEntity(e)); + } } protected void dropEquipment() { -@@ -1439,7 +_,8 @@ - if (this.level() instanceof ServerLevel +@@ -1400,7 +_,8 @@ + if (this.level() instanceof ServerLevel serverlevel && !this.wasExperienceConsumed() && (this.isAlwaysExperienceDropper() || this.lastHurtByPlayerTime > 0 && this.shouldDropExperience() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT))) { -- ExperienceOrb.award((ServerLevel)this.level(), this.position(), this.getExperienceReward()); -+ int reward = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.lastHurtByPlayer, this.getExperienceReward()); -+ ExperienceOrb.award((ServerLevel) this.level(), this.position(), reward); +- ExperienceOrb.award(serverlevel, this.position(), this.getExperienceReward(serverlevel, p_342525_)); ++ int reward = net.minecraftforge.event.ForgeEventFactory.getExperienceDrop(this, this.lastHurtByPlayer, this.getExperienceReward(serverlevel, p_342525_)); ++ ExperienceOrb.award(serverlevel, this.position(), reward); } } -@@ -1472,6 +_,11 @@ +@@ -1438,6 +_,11 @@ } public void knockback(double p_147241_, double p_147242_, double p_147243_) { @@ -280,7 +271,7 @@ p_147241_ *= 1.0 - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); if (!(p_147241_ <= 0.0)) { this.hasImpulse = true; -@@ -1547,6 +_,13 @@ +@@ -1523,6 +_,13 @@ } else { BlockPos blockpos = this.blockPosition(); BlockState blockstate = this.getInBlockState(); @@ -294,7 +285,7 @@ if (blockstate.is(BlockTags.CLIMBABLE)) { this.lastClimbablePos = Optional.of(blockpos); return true; -@@ -1586,6 +_,10 @@ +@@ -1560,6 +_,10 @@ @Override public boolean causeFallDamage(float p_147187_, float p_147188_, DamageSource p_147189_) { @@ -305,7 +296,7 @@ boolean flag = super.causeFallDamage(p_147187_, p_147188_, p_147189_); int i = this.calculateFallDamage(p_147187_, p_147188_); if (i > 0) { -@@ -1613,9 +_,10 @@ +@@ -1587,9 +_,10 @@ int i = Mth.floor(this.getX()); int j = Mth.floor(this.getY() - 0.2F); int k = Mth.floor(this.getZ()); @@ -318,7 +309,7 @@ this.playSound(soundtype.getFallSound(), soundtype.getVolume() * 0.5F, soundtype.getPitch() * 0.75F); } } -@@ -1675,9 +_,9 @@ +@@ -1649,9 +_,9 @@ float f2 = f1 - p_21194_; if (f2 > 0.0F && f2 < 3.4028235E37F) { if (this instanceof ServerPlayer) { @@ -330,7 +321,7 @@ } } } -@@ -1699,6 +_,8 @@ +@@ -1679,6 +_,8 @@ protected void actuallyHurt(DamageSource p_21240_, float p_21241_) { if (!this.isInvulnerableTo(p_21240_)) { @@ -339,7 +330,7 @@ p_21241_ = this.getDamageAfterArmorAbsorb(p_21240_, p_21241_); p_21241_ = this.getDamageAfterMagicAbsorb(p_21240_, p_21241_); float f1 = Math.max(p_21241_ - this.getAbsorptionAmount(), 0.0F); -@@ -1708,6 +_,7 @@ +@@ -1688,6 +_,7 @@ serverplayer.awardStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(f * 10.0F)); } @@ -347,7 +338,7 @@ if (f1 != 0.0F) { this.getCombatTracker().recordDamage(p_21240_, f1); this.setHealth(this.getHealth() - f1); -@@ -1767,6 +_,8 @@ +@@ -1747,6 +_,8 @@ } public void swing(InteractionHand p_21012_, boolean p_21013_) { @@ -356,7 +347,7 @@ if (!this.swinging || this.swingTime >= this.getCurrentSwingDuration() / 2 || this.swingTime < 0) { this.swingTime = -1; this.swinging = true; -@@ -1878,9 +_,10 @@ +@@ -1858,9 +_,10 @@ } private void swapHandItems() { @@ -370,7 +361,7 @@ } @Override -@@ -2077,15 +_,18 @@ +@@ -2064,15 +_,18 @@ } this.hasImpulse = true; @@ -391,7 +382,7 @@ } protected float getWaterSlowDown() { -@@ -2110,7 +_,8 @@ +@@ -2097,7 +_,8 @@ } FluidState fluidstate = this.level().getFluidState(this.blockPosition()); @@ -401,7 +392,7 @@ double d9 = this.getY(); float f4 = this.isSprinting() ? 0.9F : this.getWaterSlowDown(); float f5 = 0.02F; -@@ -2132,6 +_,7 @@ +@@ -2115,6 +_,7 @@ f4 = 0.96F; } @@ -409,7 +400,7 @@ this.moveRelative(f5, p_21280_); this.move(MoverType.SELF, this.getDeltaMovement()); Vec3 vec36 = this.getDeltaMovement(); -@@ -2145,6 +_,7 @@ +@@ -2128,6 +_,7 @@ if (this.horizontalCollision && this.isFree(vec32.x, vec32.y + 0.6F - this.getY() + d9, vec32.z)) { this.setDeltaMovement(vec32.x, 0.3F, vec32.z); } @@ -417,7 +408,7 @@ } else if (this.isInLava() && this.isAffectedByFluids() && !this.canStandOnFluid(fluidstate)) { double d8 = this.getY(); this.moveRelative(0.02F, p_21280_); -@@ -2207,7 +_,7 @@ +@@ -2190,7 +_,7 @@ } } else { BlockPos blockpos = this.getBlockPosBelowThatAffectsMyMovement(); @@ -426,7 +417,7 @@ float f3 = this.onGround() ? f2 * 0.91F : 0.91F; Vec3 vec35 = this.handleRelativeFrictionAndCalculateMovement(p_21280_, f2); double d2 = vec35.y; -@@ -2300,7 +_,7 @@ +@@ -2283,7 +_,7 @@ double d0 = Mth.clamp(p_21298_.x, -0.15F, 0.15F); double d1 = Mth.clamp(p_21298_.z, -0.15F, 0.15F); double d2 = Math.max(p_21298_.y, -0.15F); @@ -435,7 +426,7 @@ d2 = 0.0; } -@@ -2333,6 +_,7 @@ +@@ -2316,6 +_,7 @@ @Override public void tick() { @@ -443,7 +434,7 @@ super.tick(); this.updatingUsingItem(); this.updateSwimAmount(); -@@ -2482,6 +_,7 @@ +@@ -2465,6 +_,7 @@ }; ItemStack itemstack1 = this.getItemBySlot(equipmentslot); if (this.equipmentHasChanged(itemstack, itemstack1)) { @@ -451,7 +442,7 @@ if (map == null) { map = Maps.newEnumMap(EquipmentSlot.class); } -@@ -2641,6 +_,10 @@ +@@ -2636,6 +_,10 @@ this.level().getProfiler().push("jump"); if (this.jumping && this.isAffectedByFluids()) { double d3; @@ -462,7 +453,7 @@ if (this.isInLava()) { d3 = this.getFluidHeight(FluidTags.LAVA); } else { -@@ -2651,15 +_,19 @@ +@@ -2646,15 +_,19 @@ double d4 = this.getFluidJumpThreshold(); if (!flag || this.onGround() && !(d3 > d4)) { if (!this.isInLava() || this.onGround() && !(d3 > d4)) { @@ -484,7 +475,7 @@ } } else { this.noJumpDelay = 0; -@@ -2724,6 +_,8 @@ +@@ -2719,6 +_,8 @@ boolean flag = this.getSharedFlag(7); if (flag && !this.onGround() && !this.isPassenger() && !this.hasEffect(MobEffects.LEVITATION)) { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.CHEST); @@ -493,7 +484,7 @@ if (itemstack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(itemstack)) { flag = true; int i = this.fallFlyTicks + 1; -@@ -2982,8 +_,11 @@ +@@ -2979,8 +_,11 @@ private void updatingUsingItem() { if (this.isUsingItem()) { @@ -506,7 +497,7 @@ this.updateUsingItem(this.useItem); } else { this.stopUsingItem(); -@@ -2992,12 +_,16 @@ +@@ -2989,12 +_,16 @@ } protected void updateUsingItem(ItemStack p_147201_) { @@ -524,21 +515,21 @@ this.completeUsingItem(); } } -@@ -3032,8 +_,12 @@ +@@ -3029,8 +_,12 @@ public void startUsingItem(InteractionHand p_21159_) { ItemStack itemstack = this.getItemInHand(p_21159_); if (!itemstack.isEmpty() && !this.isUsingItem()) { -+ int duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, itemstack, itemstack.getUseDuration()); ++ int duration = net.minecraftforge.event.ForgeEventFactory.onItemUseStart(this, itemstack, itemstack.getUseDuration(this)); + if (duration <= 0) { + return; + } this.useItem = itemstack; -- this.useItemRemaining = itemstack.getUseDuration(); +- this.useItemRemaining = itemstack.getUseDuration(this); + this.useItemRemaining = duration; if (!this.level().isClientSide) { this.setLivingEntityFlag(1, true); this.setLivingEntityFlag(2, p_21159_ == InteractionHand.OFF_HAND); -@@ -3097,6 +_,9 @@ +@@ -3099,6 +_,9 @@ vec31 = vec31.xRot(-this.getXRot() * (float) (Math.PI / 180.0)); vec31 = vec31.yRot(-this.getYRot() * (float) (Math.PI / 180.0)); vec31 = vec31.add(this.getX(), this.getEyeY(), this.getZ()); @@ -548,7 +539,7 @@ this.level() .addParticle( new ItemParticleOption(ParticleTypes.ITEM, p_21061_), -@@ -3118,7 +_,9 @@ +@@ -3120,7 +_,9 @@ } else { if (!this.useItem.isEmpty() && this.isUsingItem()) { this.triggerItemUseEffects(this.useItem, 16); @@ -558,7 +549,7 @@ if (itemstack != this.useItem) { this.setItemInHand(interactionhand, itemstack); } -@@ -3143,7 +_,13 @@ +@@ -3145,7 +_,13 @@ public void releaseUsingItem() { if (!this.useItem.isEmpty()) { @@ -572,7 +563,7 @@ if (this.useItem.useOnRelease()) { this.updatingUsingItem(); } -@@ -3153,6 +_,7 @@ +@@ -3155,6 +_,7 @@ } public void stopUsingItem() { @@ -580,17 +571,17 @@ if (!this.level().isClientSide) { boolean flag = this.isUsingItem(); this.setLivingEntityFlag(1, false); -@@ -3168,7 +_,8 @@ +@@ -3170,7 +_,8 @@ public boolean isBlocking() { if (this.isUsingItem() && !this.useItem.isEmpty()) { Item item = this.useItem.getItem(); -- return item.getUseAnimation(this.useItem) != UseAnim.BLOCK ? false : item.getUseDuration(this.useItem) - this.useItemRemaining >= 5; +- return item.getUseAnimation(this.useItem) != UseAnim.BLOCK ? false : item.getUseDuration(this.useItem, this) - this.useItemRemaining >= 5; + boolean canBlock = this.useItem.canPerformAction(net.minecraftforge.common.ToolActions.SHIELD_BLOCK); -+ return !canBlock ? false : item.getUseDuration(this.useItem) - this.useItemRemaining >= 5; ++ return !canBlock ? false : item.getUseDuration(this.useItem, this) - this.useItemRemaining >= 5; } else { return false; } -@@ -3309,8 +_,8 @@ +@@ -3311,8 +_,8 @@ } BlockState blockstate = this.level().getBlockState(p_21141_); @@ -601,12 +592,12 @@ } this.setPose(Pose.SLEEPING); -@@ -3325,15 +_,15 @@ +@@ -3327,15 +_,15 @@ } private boolean checkBedExists() { -- return this.getSleepingPos().map(p_326778_ -> this.level().getBlockState(p_326778_).getBlock() instanceof BedBlock).orElse(false); -+ return this.getSleepingPos().map(p_326778_ -> net.minecraftforge.event.ForgeEventFactory.fireSleepingLocationCheck(this, p_326778_)).orElse(false); +- return this.getSleepingPos().map(p_341272_ -> this.level().getBlockState(p_341272_).getBlock() instanceof BedBlock).orElse(false); ++ return this.getSleepingPos().map(p_341272_ -> net.minecraftforge.event.ForgeEventFactory.fireSleepingLocationCheck(this, p_341272_)).orElse(false); } public void stopSleeping() { @@ -620,7 +611,7 @@ Vec3 vec31 = BedBlock.findStandUpPosition(this.getType(), this.level(), p_261435_, direction, this.getYRot()).orElseGet(() -> { BlockPos blockpos = p_261435_.above(); return new Vec3((double)blockpos.getX() + 0.5, (double)blockpos.getY() + 0.1, (double)blockpos.getZ() + 0.5); -@@ -3354,7 +_,9 @@ +@@ -3356,7 +_,9 @@ @Nullable public Direction getBedOrientation() { BlockPos blockpos = this.getSleepingPos().orElse(null); @@ -631,7 +622,7 @@ } @Override -@@ -3363,7 +_,7 @@ +@@ -3365,7 +_,7 @@ } public ItemStack getProjectile(ItemStack p_21272_) { @@ -639,17 +630,17 @@ + return net.minecraftforge.common.ForgeHooks.getProjectile(this, p_21272_, ItemStack.EMPTY); } - public ItemStack eat(Level p_21067_, ItemStack p_21068_) { -@@ -3428,6 +_,8 @@ + public final ItemStack eat(Level p_21067_, ItemStack p_21068_) { +@@ -3431,6 +_,8 @@ } - public static EquipmentSlot getEquipmentSlotForItem(ItemStack p_147234_) { + public EquipmentSlot getEquipmentSlotForItem(ItemStack p_147234_) { + final EquipmentSlot slot = p_147234_.getEquipmentSlot(); + if (slot != null) return slot; // FORGE: Allow modders to set a non-default equipment slot for a stack; e.g. a non-armor chestplate-slot item Equipable equipable = Equipable.get(p_147234_); - return equipable != null ? equipable.getEquipmentSlot() : EquipmentSlot.MAINHAND; - } -@@ -3534,5 +_,42 @@ + if (equipable != null) { + EquipmentSlot equipmentslot = equipable.getEquipmentSlot(); +@@ -3557,5 +_,42 @@ } public static record Fallsounds(SoundEvent small, SoundEvent big) { diff --git a/patches/minecraft/net/minecraft/world/entity/Mob.java.patch b/patches/minecraft/net/minecraft/world/entity/Mob.java.patch index f542807399..980f543d39 100644 --- a/patches/minecraft/net/minecraft/world/entity/Mob.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/Mob.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -133,6 +_,9 @@ - private Either delayedLeashInfo; +@@ -131,6 +_,9 @@ + private Leashable.LeashData leashData; private BlockPos restrictCenter = BlockPos.ZERO; private float restrictRadius = -1.0F; + @Nullable @@ -10,7 +10,7 @@ protected Mob(EntityType p_21368_, Level p_21369_) { super(p_21368_, p_21369_); -@@ -239,7 +_,10 @@ +@@ -237,7 +_,10 @@ } public void setTarget(@Nullable LivingEntity p_21544_) { @@ -22,7 +22,7 @@ } @Override -@@ -444,6 +_,10 @@ +@@ -425,6 +_,10 @@ if (this.isNoAi()) { p_21484_.putBoolean("NoAI", this.isNoAi()); } @@ -33,7 +33,7 @@ } @Override -@@ -510,6 +_,14 @@ +@@ -484,6 +_,14 @@ } this.setNoAi(p_21450_.getBoolean("NoAI")); @@ -48,7 +48,7 @@ } @Override -@@ -561,7 +_,7 @@ +@@ -535,7 +_,7 @@ public void aiStep() { super.aiStep(); this.level().getProfiler().push("looting"); @@ -57,7 +57,7 @@ Vec3i vec3i = this.getPickupReach(); for (ItemEntity itementity : this.level() -@@ -730,6 +_,14 @@ +@@ -699,6 +_,14 @@ this.discard(); } else if (!this.isPersistenceRequired() && !this.requiresCustomPersistence()) { Entity entity = this.level().getNearestPlayer(this, -1.0); @@ -72,7 +72,7 @@ if (entity != null) { double d0 = entity.distanceToSqr(this); int i = this.getType().getCategory().getDespawnDistance(); -@@ -1127,6 +_,16 @@ +@@ -1121,6 +_,16 @@ } } @@ -89,15 +89,15 @@ @Nullable public SpawnGroupData finalizeSpawn(ServerLevelAccessor p_21434_, DifficultyInstance p_21435_, MobSpawnType p_21436_, @Nullable SpawnGroupData p_21437_) { RandomSource randomsource = p_21434_.getRandom(); -@@ -1135,6 +_,7 @@ - new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0, 0.11485000000000001), AttributeModifier.Operation.ADD_MULTIPLIED_BASE) - ); +@@ -1132,6 +_,7 @@ + } + this.setLeftHanded(randomsource.nextFloat() < 0.05F); + this.spawnType = p_21436_; return p_21437_; } -@@ -1521,15 +_,25 @@ +@@ -1457,15 +_,25 @@ return false; } @@ -123,8 +123,8 @@ + @VisibleForTesting public void removeFreeWill() { - this.removeAllGoals(p_262562_ -> true); -@@ -1556,5 +_,40 @@ + this.removeAllGoals(p_341273_ -> true); +@@ -1491,5 +_,40 @@ public ItemStack getPickResult() { SpawnEggItem spawneggitem = SpawnEggItem.byId(this.getType()); return spawneggitem == null ? null : new ItemStack(spawneggitem); diff --git a/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch b/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch index 3b20f0d7af..63b7f63295 100644 --- a/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/TamableAnimal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/TamableAnimal.java +++ b/net/minecraft/world/entity/TamableAnimal.java -@@ -193,11 +_,14 @@ +@@ -218,11 +_,14 @@ @Override public void die(DamageSource p_21809_) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Bee.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Bee.java.patch index 6956e7ca53..441ff9de5c 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Bee.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Bee.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -486,7 +_,7 @@ +@@ -491,7 +_,7 @@ return false; } else { BlockEntity blockentity = this.level().getBlockEntity(this.hivePos); @@ -9,7 +9,7 @@ } } -@@ -635,13 +_,22 @@ +@@ -640,13 +_,22 @@ } @Override diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Cat.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Cat.java.patch index e0fd36918e..c2c0de3235 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Cat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Cat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -379,9 +_,9 @@ +@@ -368,9 +_,9 @@ } } else if (this.isFood(itemstack) && this.getHealth() < this.getMaxHealth()) { if (!this.level().isClientSide()) { @@ -11,7 +11,7 @@ } return InteractionResult.sidedSuccess(this.level().isClientSide()); -@@ -441,7 +_,7 @@ +@@ -430,7 +_,7 @@ } private void tryToTame(Player p_333297_) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Fox.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Fox.java.patch index 38b54ccdbe..d43d59f0cc 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Fox.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Fox.java.patch @@ -1,25 +1,5 @@ --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -670,13 +_,17 @@ - - @Override - protected void dropAllDeathLoot(DamageSource p_28536_) { -+ super.dropAllDeathLoot(p_28536_); -+ } -+ -+ @Override -+ protected void dropEquipment() { // Forge: move extra drops to dropEquipment to allow them to be captured by LivingDropsEvent -+ super.dropEquipment(); - ItemStack itemstack = this.getItemBySlot(EquipmentSlot.MAINHAND); - if (!itemstack.isEmpty()) { - this.spawnAtLocation(itemstack); - this.setItemSlot(EquipmentSlot.MAINHAND, ItemStack.EMPTY); - } -- -- super.dropAllDeathLoot(p_28536_); - } - - public static boolean isPathClear(Fox p_28472_, LivingEntity p_28473_) { @@ -835,6 +_,16 @@ protected void breed() { ServerLevel serverlevel = (ServerLevel)this.level; diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Ocelot.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Ocelot.java.patch index c40b917f1e..2c47fe2550 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Ocelot.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Ocelot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -170,7 +_,7 @@ +@@ -160,7 +_,7 @@ if ((this.temptGoal == null || this.temptGoal.isRunning()) && !this.isTrusting() && this.isFood(itemstack) && p_29021_.distanceToSqr(this) < 9.0) { this.usePlayerItem(p_29021_, p_29022_, itemstack); if (!this.level().isClientSide) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Parrot.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Parrot.java.patch index 70ffcde076..dbbe84225e 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Parrot.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Parrot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -253,7 +_,7 @@ +@@ -257,7 +_,7 @@ } if (!this.level().isClientSide) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Rabbit.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Rabbit.java.patch index ffb2d48cae..a9ffb636dc 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Rabbit.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Rabbit.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -525,7 +_,7 @@ +@@ -527,7 +_,7 @@ @Override public boolean canUse() { if (this.nextStartTick <= 0) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Sheep.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Sheep.java.patch index 6256c7059d..f73e62be7d 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Sheep.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Sheep.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Sheep.java +++ b/net/minecraft/world/entity/animal/Sheep.java -@@ -62,7 +_,7 @@ +@@ -61,7 +_,7 @@ import net.minecraft.world.level.storage.loot.BuiltInLootTables; import net.minecraft.world.level.storage.loot.LootTable; @@ -9,7 +9,7 @@ private static final int EAT_ANIMATION_TICKS = 40; private static final EntityDataAccessor DATA_WOOL_ID = SynchedEntityData.defineId(Sheep.class, EntityDataSerializers.BYTE); private static final Map ITEM_BY_DYE = Util.make(Maps.newEnumMap(DyeColor.class), p_29841_ -> { -@@ -208,7 +_,7 @@ +@@ -212,7 +_,7 @@ @Override public InteractionResult mobInteract(Player p_29853_, InteractionHand p_29854_) { ItemStack itemstack = p_29853_.getItemInHand(p_29854_); @@ -18,7 +18,7 @@ if (!this.level().isClientSide && this.readyForShearing()) { this.shear(SoundSource.PLAYERS); this.gameEvent(GameEvent.SHEAR, p_29853_); -@@ -224,12 +_,24 @@ +@@ -228,12 +_,24 @@ @Override public void shear(SoundSource p_29819_) { @@ -44,10 +44,10 @@ if (itementity != null) { itementity.setDeltaMovement( itementity.getDeltaMovement() -@@ -375,5 +_,15 @@ - craftingcontainer.setItem(0, new ItemStack(DyeItem.byColor(p_29832_))); - craftingcontainer.setItem(1, new ItemStack(DyeItem.byColor(p_29833_))); - return craftingcontainer; +@@ -366,5 +_,15 @@ + + private static CraftingInput makeCraftInput(DyeColor p_344668_, DyeColor p_344678_) { + return CraftingInput.of(2, 1, List.of(new ItemStack(DyeItem.byColor(p_344668_)), new ItemStack(DyeItem.byColor(p_344678_)))); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/entity/animal/Wolf.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/Wolf.java.patch index 2fb58ca9c3..77f0c2f865 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/Wolf.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/Wolf.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Wolf.java +++ b/net/minecraft/world/entity/animal/Wolf.java -@@ -498,7 +_,7 @@ +@@ -496,7 +_,7 @@ } private void tryToTame(Player p_336244_) { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch index e94f782958..38350686a6 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/allay/Allay.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -363,10 +_,7 @@ +@@ -365,10 +_,7 @@ @Override public boolean wantsToPickUp(ItemStack p_218387_) { ItemStack itemstack = this.getItemInHand(InteractionHand.MAIN_HAND); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/frog/Tadpole.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/frog/Tadpole.java.patch index 65967d8556..a3487d5ac5 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/frog/Tadpole.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/frog/Tadpole.java.patch @@ -8,8 +8,8 @@ Frog frog = EntityType.FROG.create(this.level()); if (frog != null) { frog.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); -@@ -238,6 +_,7 @@ - frog.setPersistenceRequired(); +@@ -239,6 +_,7 @@ + frog.fudgePositionAfterSizeChange(this.getDimensions(this.getPose())); this.playSound(SoundEvents.TADPOLE_GROW_UP, 0.15F, 1.0F); serverlevel.addFreshEntityWithPassengers(frog); + net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, frog); diff --git a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch index 1559c61213..17543f5e41 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/horse/AbstractHorse.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -299,6 +_,11 @@ +@@ -303,6 +_,11 @@ @Override public boolean causeFallDamage(float p_149499_, float p_149500_, DamageSource p_149501_) { @@ -12,7 +12,7 @@ if (p_149499_ > 1.0F) { this.playSound(SoundEvents.HORSE_LAND, 0.4F, 1.0F); } -@@ -340,6 +_,7 @@ +@@ -348,6 +_,7 @@ this.inventory.addListener(this); this.syncSaddleToClients(); @@ -20,7 +20,7 @@ } protected void syncSaddleToClients() { -@@ -385,9 +_,9 @@ +@@ -393,9 +_,9 @@ protected void playStepSound(BlockPos p_30584_, BlockState p_30585_) { if (!p_30585_.liquid()) { BlockState blockstate = this.level().getBlockState(p_30584_.above()); @@ -32,7 +32,7 @@ } if (this.isVehicle() && this.canGallop) { -@@ -810,6 +_,7 @@ +@@ -818,6 +_,7 @@ float f1 = Mth.cos(this.getYRot() * (float) (Math.PI / 180.0)); this.setDeltaMovement(this.getDeltaMovement().add((double)(-0.4F * f * p_248808_), 0.0, (double)(0.4F * f1 * p_248808_))); } @@ -40,7 +40,7 @@ } protected void playJumpSound() { -@@ -1126,5 +_,25 @@ +@@ -1134,6 +_,26 @@ public final Container getBodyArmorAccess() { return this.bodyArmorAccess; @@ -65,4 +65,5 @@ + oldHandler.invalidate(); + } } - } + + public int getInventoryColumns() { diff --git a/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch b/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch index b8158c1355..dff853f622 100644 --- a/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/animal/horse/Llama.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -376,6 +_,10 @@ +@@ -371,6 +_,10 @@ @Override public boolean causeFallDamage(float p_149538_, float p_149539_, DamageSource p_149540_) { diff --git a/patches/minecraft/net/minecraft/world/entity/boss/EnderDragonPart.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/EnderDragonPart.java.patch index 1aa2e0a005..0a49eb7059 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/EnderDragonPart.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/EnderDragonPart.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/EnderDragonPart.java +++ b/net/minecraft/world/entity/boss/EnderDragonPart.java -@@ -12,13 +_,13 @@ +@@ -13,13 +_,13 @@ import net.minecraft.world.entity.boss.enderdragon.EnderDragon; import net.minecraft.world.item.ItemStack; diff --git a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch index 7d7a49ca9a..aaf4ee5a84 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -104,6 +_,15 @@ +@@ -105,6 +_,15 @@ this.noPhysics = true; this.noCulling = true; this.phaseManager = new EnderDragonPhaseManager(this); @@ -16,7 +16,7 @@ } public void setDragonFight(EndDragonFight p_287736_) { -@@ -171,8 +_,19 @@ +@@ -172,8 +_,19 @@ return adouble; } @@ -36,7 +36,7 @@ this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -467,7 +_,7 @@ +@@ -475,7 +_,7 @@ BlockPos blockpos = new BlockPos(k1, l1, i2); BlockState blockstate = this.level().getBlockState(blockpos); if (!blockstate.isAir() && !blockstate.is(BlockTags.DRAGON_TRANSPARENT)) { @@ -45,7 +45,7 @@ flag1 = this.level().removeBlock(blockpos, false) || flag1; } else { flag = true; -@@ -563,7 +_,8 @@ +@@ -571,7 +_,8 @@ if (this.level() instanceof ServerLevel) { if (this.dragonDeathTime > 150 && this.dragonDeathTime % 5 == 0 && flag) { @@ -55,7 +55,7 @@ } if (this.dragonDeathTime == 1 && !this.isSilent()) { -@@ -574,7 +_,8 @@ +@@ -582,7 +_,8 @@ this.move(MoverType.SELF, new Vec3(0.0, 0.1F, 0.0)); if (this.dragonDeathTime == 200 && this.level() instanceof ServerLevel) { if (flag) { @@ -65,7 +65,7 @@ } if (this.dragonFight != null) { -@@ -908,6 +_,7 @@ +@@ -916,6 +_,7 @@ @Override public void recreateFromPacket(ClientboundAddEntityPacket p_218825_) { super.recreateFromPacket(p_218825_); @@ -73,7 +73,7 @@ EnderDragonPart[] aenderdragonpart = this.getSubEntities(); for (int i = 0; i < aenderdragonpart.length; i++) { -@@ -923,5 +_,15 @@ +@@ -931,5 +_,15 @@ @Override protected float sanitizeScale(float p_333905_) { return 1.0F; diff --git a/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch b/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch index e66087cbcb..e04e823263 100644 --- a/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -315,7 +_,7 @@ +@@ -316,7 +_,7 @@ if (this.destroyBlocksTick > 0) { this.destroyBlocksTick--; @@ -9,7 +9,7 @@ boolean flag = false; int l = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); int i1 = Mth.floor(this.getBbHeight()); -@@ -324,7 +_,7 @@ +@@ -325,7 +_,7 @@ this.getBlockX() - l, this.getBlockY(), this.getBlockZ() - l, this.getBlockX() + l, this.getBlockY() + i1, this.getBlockZ() + l )) { BlockState blockstate = this.level().getBlockState(blockpos); @@ -18,7 +18,7 @@ flag = this.level().destroyBlock(blockpos, true, this) || flag; } } -@@ -343,6 +_,10 @@ +@@ -344,6 +_,10 @@ } } diff --git a/patches/minecraft/net/minecraft/world/entity/decoration/ArmorStand.java.patch b/patches/minecraft/net/minecraft/world/entity/decoration/ArmorStand.java.patch index b700757972..2d87f092d4 100644 --- a/patches/minecraft/net/minecraft/world/entity/decoration/ArmorStand.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/decoration/ArmorStand.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -73,8 +_,7 @@ +@@ -72,8 +_,7 @@ public static final EntityDataAccessor DATA_RIGHT_ARM_POSE = SynchedEntityData.defineId(ArmorStand.class, EntityDataSerializers.ROTATIONS); public static final EntityDataAccessor DATA_LEFT_LEG_POSE = SynchedEntityData.defineId(ArmorStand.class, EntityDataSerializers.ROTATIONS); public static final EntityDataAccessor DATA_RIGHT_LEG_POSE = SynchedEntityData.defineId(ArmorStand.class, EntityDataSerializers.ROTATIONS); diff --git a/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch index 76faef3e12..bf591e12c6 100644 --- a/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/decoration/HangingEntity.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -121,6 +_,8 @@ - int j1 = (j - 1) / -2; - blockpos$mutableblockpos.set(blockpos).move(direction, k + i1).move(Direction.UP, l + j1); - BlockState blockstate = this.level().getBlockState(blockpos$mutableblockpos); -+ if (net.minecraft.world.level.block.Block.canSupportCenter(this.level(), blockpos$mutableblockpos, this.direction)) -+ continue; - if (!blockstate.isSolid() && !DiodeBlock.isDiode(blockstate)) { - return false; - } +@@ -59,6 +_,8 @@ + } else { + boolean flag = BlockPos.betweenClosedStream(this.calculateSupportBox()).allMatch(p_341437_ -> { + BlockState blockstate = this.level().getBlockState(p_341437_); ++ if (net.minecraft.world.level.block.Block.canSupportCenter(this.level(), p_341437_, this.direction)) ++ return true; + return blockstate.isSolid() || DiodeBlock.isDiode(blockstate); + }); + return !flag ? false : this.level().getEntities(this, this.getBoundingBox(), HANGING_ENTITY).isEmpty(); diff --git a/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch index 1fb78fd175..a9557c2961 100644 --- a/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/item/FallingBlockEntity.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -133,7 +_,7 @@ - if (!this.level().isClientSide) { +@@ -138,7 +_,7 @@ + if (!this.level().isClientSide && (this.isAlive() || this.forceTickAfterTeleportToDuplicate)) { BlockPos blockpos = this.blockPosition(); boolean flag = this.blockState.getBlock() instanceof ConcretePowderBlock; - boolean flag1 = flag && this.level().getFluidState(blockpos).is(FluidTags.WATER); @@ -9,7 +9,7 @@ double d0 = this.getDeltaMovement().lengthSqr(); if (flag && d0 > 1.0) { BlockHitResult blockhitresult = this.level() -@@ -146,7 +_,7 @@ +@@ -151,7 +_,7 @@ this ) ); diff --git a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch index 6e708120e3..a050c6c622 100644 --- a/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/item/ItemEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java -@@ -48,6 +_,10 @@ +@@ -49,6 +_,10 @@ @Nullable private UUID target; public final float bobOffs; @@ -11,7 +11,7 @@ public ItemEntity(EntityType p_31991_, Level p_31992_) { super(p_31991_, p_31992_); -@@ -66,6 +_,7 @@ +@@ -67,6 +_,7 @@ this.setPos(p_149664_, p_149665_, p_149666_); this.setDeltaMovement(p_149668_, p_149669_, p_149670_); this.setItem(p_149667_); @@ -19,7 +19,7 @@ } private ItemEntity(ItemEntity p_31994_) { -@@ -74,6 +_,7 @@ +@@ -75,6 +_,7 @@ this.copyPosition(p_31994_); this.age = p_31994_.age; this.bobOffs = p_31994_.bobOffs; @@ -27,7 +27,7 @@ } @Override -@@ -119,6 +_,7 @@ +@@ -120,6 +_,7 @@ @Override public void tick() { @@ -35,7 +35,7 @@ if (this.getItem().isEmpty()) { this.discard(); } else { -@@ -131,6 +_,10 @@ +@@ -132,6 +_,10 @@ this.yo = this.getY(); this.zo = this.getZ(); Vec3 vec3 = this.getDeltaMovement(); @@ -46,7 +46,7 @@ if (this.isInWater() && this.getFluidHeight(FluidTags.WATER) > 0.1F) { this.setUnderwaterMovement(); } else if (this.isInLava() && this.getFluidHeight(FluidTags.LAVA) > 0.1F) { -@@ -152,7 +_,8 @@ +@@ -153,7 +_,8 @@ this.move(MoverType.SELF, this.getDeltaMovement()); float f = 0.98F; if (this.onGround()) { @@ -56,7 +56,7 @@ } this.setDeltaMovement(this.getDeltaMovement().multiply((double)f, 0.98, (double)f)); -@@ -184,7 +_,16 @@ +@@ -185,7 +_,16 @@ } } @@ -74,7 +74,7 @@ this.discard(); } } -@@ -281,7 +_,7 @@ +@@ -282,7 +_,7 @@ this.health = (int)((float)this.health - p_32014_); this.gameEvent(GameEvent.ENTITY_DAMAGE, p_32013_.getEntity()); if (this.health <= 0) { @@ -83,7 +83,7 @@ this.discard(); } -@@ -294,6 +_,7 @@ +@@ -295,6 +_,7 @@ p_32050_.putShort("Health", (short)this.health); p_32050_.putShort("Age", (short)this.age); p_32050_.putShort("PickupDelay", (short)this.pickupDelay); @@ -91,7 +91,7 @@ if (this.thrower != null) { p_32050_.putUUID("Thrower", this.thrower); } -@@ -315,6 +_,10 @@ +@@ -316,6 +_,10 @@ this.pickupDelay = p_32034_.getShort("PickupDelay"); } @@ -102,7 +102,7 @@ if (p_32034_.hasUUID("Owner")) { this.target = p_32034_.getUUID("Owner"); } -@@ -339,10 +_,17 @@ +@@ -340,10 +_,17 @@ @Override public void playerTouch(Player p_32040_) { if (!this.level().isClientSide) { @@ -121,18 +121,7 @@ p_32040_.take(this, i); if (itemstack.isEmpty()) { this.discard(); -@@ -368,8 +_,8 @@ - - @Nullable - @Override -- public Entity changeDimension(ServerLevel p_32042_) { -- Entity entity = super.changeDimension(p_32042_); -+ public Entity changeDimension(ServerLevel p_32042_, net.minecraftforge.common.util.ITeleporter teleporter) { -+ Entity entity = super.changeDimension(p_32042_, teleporter); - if (!this.level().isClientSide && entity instanceof ItemEntity) { - ((ItemEntity)entity).mergeWithNeighbours(); - } -@@ -436,7 +_,7 @@ +@@ -437,7 +_,7 @@ public void makeFakeItem() { this.setNeverPickUp(); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch index 408ffe8881..0cd95f1cfc 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -155,7 +_,7 @@ +@@ -157,7 +_,7 @@ if (this.level() != null && !this.level().isClientSide) { this.goalSelector.removeGoal(this.meleeGoal); this.goalSelector.removeGoal(this.bowGoal); @@ -9,13 +9,14 @@ if (itemstack.is(Items.BOW)) { int i = this.getHardAttackInterval(); if (this.level().getDifficulty() != Difficulty.HARD) { -@@ -180,8 +_,11 @@ +@@ -182,9 +_,12 @@ @Override public void performRangedAttack(LivingEntity p_32141_, float p_32142_) { -- ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); -+ ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem))); - AbstractArrow abstractarrow = this.getArrow(itemstack, p_32142_); +- ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW)); ++ ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem)); + ItemStack itemstack1 = this.getProjectile(itemstack); + AbstractArrow abstractarrow = this.getArrow(itemstack1, p_32142_, itemstack); + if (this.getMainHandItem().getItem() instanceof net.minecraft.world.item.BowItem bow) { + abstractarrow = bow.customArrow(abstractarrow); + } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch index 9958f0ce0e..b65b7d9697 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/EnderMan.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -112,7 +_,6 @@ +@@ -114,7 +_,6 @@ @Override public void setTarget(@Nullable LivingEntity p_32537_) { @@ -8,7 +8,7 @@ AttributeInstance attributeinstance = this.getAttribute(Attributes.MOVEMENT_SPEED); if (p_32537_ == null) { this.targetChangeTime = 0; -@@ -126,6 +_,7 @@ +@@ -128,6 +_,7 @@ attributeinstance.addTransientModifier(SPEED_MODIFIER_ATTACKING); } } @@ -16,7 +16,7 @@ } @Override -@@ -208,7 +_,7 @@ +@@ -210,7 +_,7 @@ boolean isLookingAtMe(Player p_32535_) { ItemStack itemstack = p_32535_.getInventory().armor.get(3); @@ -25,7 +25,7 @@ return false; } else { Vec3 vec3 = p_32535_.getViewVector(1.0F).normalize(); -@@ -295,8 +_,10 @@ +@@ -297,8 +_,10 @@ boolean flag = blockstate.blocksMotion(); boolean flag1 = blockstate.getFluidState().is(FluidTags.WATER); if (flag && !flag1) { @@ -37,7 +37,7 @@ if (flag2) { this.level().gameEvent(GameEvent.TELEPORT, vec3, GameEvent.Context.of(this)); if (!this.isSilent()) { -@@ -447,7 +_,7 @@ +@@ -451,7 +_,7 @@ if (this.enderman.getCarriedBlock() == null) { return false; } else { @@ -46,7 +46,7 @@ } } -@@ -465,7 +_,7 @@ +@@ -469,7 +_,7 @@ BlockState blockstate2 = this.enderman.getCarriedBlock(); if (blockstate2 != null) { blockstate2 = Block.updateFromNeighbourShapes(blockstate2, this.enderman.level(), blockpos); @@ -55,7 +55,7 @@ level.setBlock(blockpos, blockstate2, 3); level.gameEvent(GameEvent.BLOCK_PLACE, blockpos, GameEvent.Context.of(this.enderman, blockstate2)); this.enderman.setCarriedBlock(null); -@@ -474,12 +_,7 @@ +@@ -478,12 +_,7 @@ } private boolean canPlaceBlock(Level p_32559_, BlockPos p_32560_, BlockState p_32561_, BlockState p_32562_, BlockState p_32563_, BlockPos p_32564_) { @@ -69,7 +69,7 @@ } } -@@ -585,7 +_,7 @@ +@@ -589,7 +_,7 @@ if (this.enderman.getCarriedBlock() != null) { return false; } else { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Illusioner.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Illusioner.java.patch index 11c89ed042..6cca9fb9ec 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Illusioner.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Illusioner.java.patch @@ -1,12 +1,13 @@ --- a/net/minecraft/world/entity/monster/Illusioner.java +++ b/net/minecraft/world/entity/monster/Illusioner.java -@@ -172,8 +_,11 @@ +@@ -173,9 +_,12 @@ @Override public void performRangedAttack(LivingEntity p_32918_, float p_32919_) { -- ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW))); -+ ItemStack itemstack = this.getProjectile(this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem))); - AbstractArrow abstractarrow = ProjectileUtil.getMobArrow(this, itemstack, p_32919_); +- ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, Items.BOW)); ++ ItemStack itemstack = this.getItemInHand(ProjectileUtil.getWeaponHoldingHand(this, item -> item instanceof net.minecraft.world.item.BowItem)); + ItemStack itemstack1 = this.getProjectile(itemstack); + AbstractArrow abstractarrow = ProjectileUtil.getMobArrow(this, itemstack1, p_32919_, itemstack); + if (this.getMainHandItem().getItem() instanceof net.minecraft.world.item.BowItem bow) { + abstractarrow = bow.customArrow(abstractarrow); + } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Pillager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Pillager.java.patch index 0ecf222c12..f08cd904f2 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Pillager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Pillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Pillager.java +++ b/net/minecraft/world/entity/monster/Pillager.java -@@ -112,7 +_,7 @@ +@@ -116,7 +_,7 @@ public AbstractIllager.IllagerArmPose getArmPose() { if (this.isChargingCrossbow()) { return AbstractIllager.IllagerArmPose.CROSSBOW_CHARGE; diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch index 78d069cb30..5ebbda0380 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Ravager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -133,7 +_,7 @@ +@@ -134,7 +_,7 @@ this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(Mth.lerp(0.1, d1, d0)); } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Skeleton.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Skeleton.java.patch index 599359a84d..8b9a7a9d01 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Skeleton.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Skeleton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -85,10 +_,12 @@ +@@ -86,10 +_,12 @@ } protected void doFreezeConversion() { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch index 9799066a38..119b630625 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Slime.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Slime.java +++ b/net/minecraft/world/entity/monster/Slime.java -@@ -139,13 +_,15 @@ +@@ -141,13 +_,15 @@ float f = this.getDimensions(this.getPose()).width() * 2.0F; float f1 = f / 2.0F; @@ -23,7 +23,7 @@ this.playSound(this.getSquishSound(), this.getSoundVolume(), ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F + 1.0F) / 0.8F); this.targetSquish = -0.5F; -@@ -156,6 +_,12 @@ +@@ -158,6 +_,12 @@ this.wasOnGround = this.onGround(); this.decreaseSquish(); } diff --git a/patches/minecraft/net/minecraft/world/entity/monster/Zombie.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/Zombie.java.patch index f13fb5f27a..5220f7e2da 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/Zombie.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/Zombie.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -249,6 +_,7 @@ +@@ -257,6 +_,7 @@ } protected void doUnderWaterConversion() { @@ -8,7 +8,7 @@ this.convertToZombieType(EntityType.DROWNED); if (!this.isSilent()) { this.level().levelEvent(null, 1040, this.blockPosition(), 0); -@@ -260,6 +_,7 @@ +@@ -268,6 +_,7 @@ if (zombie != null) { zombie.handleAttributes(zombie.level().getCurrentDifficultyAt(zombie.blockPosition()).getSpecialMultiplier()); zombie.setCanBreakDoors(zombie.supportsBreakDoorGoal() && this.canBreakDoors()); @@ -16,7 +16,7 @@ } } -@@ -280,15 +_,25 @@ +@@ -288,15 +_,25 @@ livingentity = (LivingEntity)p_34288_.getEntity(); } @@ -46,7 +46,7 @@ for (int l = 0; l < 50; l++) { int i1 = i + Mth.nextInt(this.random, 7, 40) * Mth.nextInt(this.random, -1, 1); int j1 = j + Mth.nextInt(this.random, 7, 40) * Mth.nextInt(this.random, -1, 1); -@@ -302,6 +_,7 @@ +@@ -310,6 +_,7 @@ && this.level().isUnobstructed(zombie) && this.level().noCollision(zombie) && !this.level().containsAnyLiquid(zombie.getBoundingBox())) { @@ -54,7 +54,7 @@ zombie.setTarget(livingentity); zombie.finalizeSpawn(serverlevel, this.level().getCurrentDifficultyAt(zombie.blockPosition()), MobSpawnType.REINFORCEMENT, null); serverlevel.addFreshEntityWithPassengers(zombie); -@@ -397,6 +_,10 @@ +@@ -407,6 +_,10 @@ return flag; } @@ -65,7 +65,7 @@ ZombieVillager zombievillager = villager.convertTo(EntityType.ZOMBIE_VILLAGER, false); if (zombievillager != null) { zombievillager.finalizeSpawn( -@@ -406,6 +_,7 @@ +@@ -416,6 +_,7 @@ zombievillager.setGossips(villager.getGossips().store(NbtOps.INSTANCE)); zombievillager.setTradeOffers(villager.getOffers().copy()); zombievillager.setVillagerXp(villager.getVillagerXp()); diff --git a/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch index 0c46a00cd5..fa7cbe9171 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -133,7 +_,7 @@ +@@ -135,7 +_,7 @@ if (!this.level().isClientSide && this.isAlive() && this.isConverting()) { int i = this.getConversionProgress(); this.villagerConversionTime -= i; @@ -9,11 +9,11 @@ this.finishConversion((ServerLevel)this.level()); } } -@@ -245,6 +_,7 @@ - if (!this.isSilent()) { - p_34399_.levelEvent(null, 1027, this.blockPosition(), 0); +@@ -238,6 +_,7 @@ + if (!this.isSilent()) { + p_34399_.levelEvent(null, 1027, this.blockPosition(), 0); + } ++ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, villager); } -+ net.minecraftforge.event.ForgeEventFactory.onLivingConvert(this, villager); } - private int getConversionProgress() { diff --git a/patches/minecraft/net/minecraft/world/entity/monster/piglin/StopHoldingItemIfNoLongerAdmiring.java.patch b/patches/minecraft/net/minecraft/world/entity/monster/piglin/StopHoldingItemIfNoLongerAdmiring.java.patch index cc06ca652a..967441fdb6 100644 --- a/patches/minecraft/net/minecraft/world/entity/monster/piglin/StopHoldingItemIfNoLongerAdmiring.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/monster/piglin/StopHoldingItemIfNoLongerAdmiring.java.patch @@ -3,9 +3,9 @@ @@ -11,7 +_,7 @@ public static BehaviorControl create() { return BehaviorBuilder.create( - p_259197_ -> p_259197_.group(p_259197_.absent(MemoryModuleType.ADMIRING_ITEM)).apply(p_259197_, p_259512_ -> (p_327034_, p_327035_, p_327036_) -> { -- if (!p_327035_.getOffhandItem().isEmpty() && !p_327035_.getOffhandItem().is(Items.SHIELD)) { -+ if (!p_327035_.getOffhandItem().isEmpty() && !p_327035_.getOffhandItem().canPerformAction(net.minecraftforge.common.ToolActions.SHIELD_BLOCK)) { - PiglinAi.stopHoldingOffHandItem(p_327035_, true); + p_259197_ -> p_259197_.group(p_259197_.absent(MemoryModuleType.ADMIRING_ITEM)).apply(p_259197_, p_259512_ -> (p_341467_, p_341468_, p_341469_) -> { +- if (!p_341468_.getOffhandItem().isEmpty() && !p_341468_.getOffhandItem().is(Items.SHIELD)) { ++ if (!p_341468_.getOffhandItem().isEmpty() && !p_341468_.getOffhandItem().canPerformAction(net.minecraftforge.common.ToolActions.SHIELD_BLOCK)) { + PiglinAi.stopHoldingOffHandItem(p_341468_, true); return true; } else { diff --git a/patches/minecraft/net/minecraft/world/entity/npc/AbstractVillager.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/AbstractVillager.java.patch index d602396242..0318a221ed 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/AbstractVillager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/AbstractVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/net/minecraft/world/entity/npc/AbstractVillager.java -@@ -123,6 +_,8 @@ +@@ -127,6 +_,8 @@ if (this.tradingPlayer instanceof ServerPlayer) { CriteriaTriggers.TRADE.trigger((ServerPlayer)this.tradingPlayer, this, p_35274_.getResult()); } @@ -9,15 +9,3 @@ } protected abstract void rewardTradeXp(MerchantOffer p_35299_); -@@ -179,9 +_,9 @@ - - @Nullable - @Override -- public Entity changeDimension(ServerLevel p_35295_) { -+ public Entity changeDimension(ServerLevel p_35295_, net.minecraftforge.common.util.ITeleporter teleporter) { - this.stopTrading(); -- return super.changeDimension(p_35295_); -+ return super.changeDimension(p_35295_, teleporter); - } - - protected void stopTrading() { diff --git a/patches/minecraft/net/minecraft/world/entity/npc/Villager.java.patch b/patches/minecraft/net/minecraft/world/entity/npc/Villager.java.patch index 17be53f94f..447f432d52 100644 --- a/patches/minecraft/net/minecraft/world/entity/npc/Villager.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/npc/Villager.java.patch @@ -9,7 +9,7 @@ return super.mobInteract(p_35472_, p_35473_); } else if (this.isBaby()) { this.setUnhappy(); -@@ -725,7 +_,8 @@ +@@ -727,7 +_,8 @@ @Override protected Component getTypeName() { @@ -19,7 +19,7 @@ } @Override -@@ -780,7 +_,7 @@ +@@ -782,7 +_,7 @@ @Override public void thunderHit(ServerLevel p_35409_, LightningBolt p_35410_) { @@ -28,7 +28,7 @@ LOGGER.info("Villager {} was struck by lightning {}.", this, p_35410_); Witch witch = EntityType.WITCH.create(p_35409_); if (witch != null) { -@@ -793,6 +_,7 @@ +@@ -795,6 +_,7 @@ } witch.setPersistenceRequired(); diff --git a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch index b7837446a6..74fd8cd7d9 100644 --- a/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/player/Player.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -114,7 +_,7 @@ +@@ -113,7 +_,7 @@ import net.minecraft.world.scores.Team; import org.slf4j.Logger; @@ -9,27 +9,32 @@ private static final Logger LOGGER = LogUtils.getLogger(); public static final HumanoidArm DEFAULT_MAIN_HAND = HumanoidArm.RIGHT; public static final int DEFAULT_MODEL_CUSTOMIZATION = 0; -@@ -190,6 +_,9 @@ - @Nullable +@@ -191,6 +_,9 @@ public Entity currentExplosionCause; - public boolean ignoreFallDamageFromCurrentImpulse; + private boolean ignoreFallDamageFromCurrentImpulse; + private int currentImpulseContextResetGraceTime; + private final java.util.Collection prefixes = new java.util.LinkedList<>(); + private final java.util.Collection suffixes = new java.util.LinkedList<>(); + @Nullable private Pose forcedPose; public Player(Level p_250508_, BlockPos p_250289_, float p_251702_, GameProfile p_252153_) { super(EntityType.PLAYER, p_250508_); -@@ -222,7 +_,8 @@ +@@ -223,11 +_,12 @@ .add(Attributes.LUCK) .add(Attributes.BLOCK_INTERACTION_RANGE, 4.5) .add(Attributes.ENTITY_INTERACTION_RANGE, 3.0) -- .add(Attributes.BLOCK_BREAK_SPEED); +- .add(Attributes.BLOCK_BREAK_SPEED) + .add(Attributes.SUBMERGED_MINING_SPEED) + .add(Attributes.SNEAKING_SPEED) + .add(Attributes.MINING_EFFICIENCY) +- .add(Attributes.SWEEPING_DAMAGE_RATIO); ++ .add(Attributes.SWEEPING_DAMAGE_RATIO) + .add(Attributes.BLOCK_BREAK_SPEED) + .add(Attributes.ATTACK_KNOCKBACK); } @Override -@@ -238,6 +_,7 @@ +@@ -243,6 +_,7 @@ @Override public void tick() { @@ -37,7 +42,7 @@ this.noPhysics = this.isSpectator(); if (this.isSpectator()) { this.setOnGround(false); -@@ -253,7 +_,7 @@ +@@ -258,7 +_,7 @@ this.sleepCounter = 100; } @@ -46,15 +51,15 @@ this.stopSleepInBed(false, true); } } else if (this.sleepCounter > 0) { -@@ -308,6 +_,7 @@ - this.turtleHelmetTick(); - this.cooldowns.tick(); - this.updatePlayerPose(); +@@ -316,6 +_,7 @@ + if (this.currentImpulseContextResetGraceTime > 0) { + this.currentImpulseContextResetGraceTime--; + } + net.minecraftforge.event.ForgeEventFactory.onPlayerPostTick(this); } @Override -@@ -387,6 +_,10 @@ +@@ -395,6 +_,10 @@ } protected void updatePlayerPose() { @@ -65,15 +70,15 @@ if (this.canPlayerFitWithinBlocksAndEntitiesWhen(Pose.SWIMMING)) { Pose pose; if (this.isFallFlying()) { -@@ -613,6 +_,7 @@ +@@ -628,6 +_,7 @@ @Override public void die(DamageSource p_36152_) { + if (net.minecraftforge.event.ForgeEventFactory.onLivingDeath(this, p_36152_)) return; super.die(p_36152_); this.reapplyPosition(); - if (!this.isSpectator()) { -@@ -667,7 +_,7 @@ + if (!this.isSpectator() && this.level() instanceof ServerLevel serverlevel) { +@@ -682,7 +_,7 @@ @Nullable public ItemEntity drop(ItemStack p_36177_, boolean p_36178_) { @@ -82,7 +87,7 @@ } @Nullable -@@ -709,7 +_,12 @@ +@@ -724,7 +_,12 @@ } } @@ -94,8 +99,8 @@ + public float getDestroySpeed(BlockState p_36282_, @Nullable BlockPos pos) { float f = this.inventory.getDestroySpeed(p_36282_); if (f > 1.0F) { - int i = EnchantmentHelper.getBlockEfficiency(this); -@@ -741,11 +_,14 @@ + f += (float)this.getAttributeValue(Attributes.MINING_EFFICIENCY); +@@ -752,11 +_,14 @@ f /= 5.0F; } @@ -111,7 +116,7 @@ } @Override -@@ -844,6 +_,7 @@ +@@ -857,6 +_,7 @@ @Override public boolean hurt(DamageSource p_36154_, float p_36155_) { @@ -119,7 +124,7 @@ if (this.isInvulnerableTo(p_36154_)) { return false; } else if (this.abilities.invulnerable && !p_36154_.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { -@@ -879,7 +_,7 @@ +@@ -892,7 +_,7 @@ @Override protected void blockUsingShield(LivingEntity p_36295_) { super.blockUsingShield(p_36295_); @@ -128,7 +133,7 @@ this.disableShield(); } } -@@ -911,7 +_,7 @@ +@@ -924,7 +_,7 @@ @Override protected void hurtCurrentlyUsedShield(float p_36383_) { @@ -137,7 +142,7 @@ if (!this.level().isClientSide) { this.awardStat(Stats.ITEM_USED.get(this.useItem.getItem())); } -@@ -937,10 +_,13 @@ +@@ -950,10 +_,13 @@ @Override protected void actuallyHurt(DamageSource p_36312_, float p_36313_) { if (!this.isInvulnerableTo(p_36312_)) { @@ -151,7 +156,7 @@ float f = p_36313_ - f1; if (f > 0.0F && f < 3.4028235E37F) { this.awardStat(Stats.DAMAGE_ABSORBED, Math.round(f * 10.0F)); -@@ -1004,6 +_,10 @@ +@@ -1012,6 +_,10 @@ return InteractionResult.PASS; } else { @@ -162,7 +167,7 @@ ItemStack itemstack = this.getItemInHand(p_36159_); ItemStack itemstack1 = itemstack.copy(); InteractionResult interactionresult = p_36158_.interact(this, p_36159_); -@@ -1012,6 +_,10 @@ +@@ -1020,6 +_,10 @@ itemstack.setCount(itemstack1.getCount()); } @@ -173,7 +178,7 @@ return interactionresult; } else { if (!itemstack.isEmpty() && p_36158_ instanceof LivingEntity) { -@@ -1023,6 +_,7 @@ +@@ -1031,6 +_,7 @@ if (interactionresult1.consumesAction()) { this.level().gameEvent(GameEvent.ENTITY_INTERACT, p_36158_.position(), GameEvent.Context.of(this)); if (itemstack.isEmpty() && !this.abilities.instabuild) { @@ -181,87 +186,53 @@ this.setItemInHand(p_36159_, ItemStack.EMPTY); } -@@ -1122,6 +_,7 @@ +@@ -1130,6 +_,7 @@ } public void attack(Entity p_36347_) { + if (!net.minecraftforge.common.ForgeHooks.onPlayerAttackTarget(this, p_36347_)) return; if (p_36347_.isAttackable()) { if (!p_36347_.skipAttackInteraction(this)) { - float f = (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE); -@@ -1129,14 +_,13 @@ - float f2 = this.getAttackStrengthScale(0.5F); - f *= 0.2F + f2 * f2 * 0.8F; - f1 *= f2; -- this.resetAttackStrengthTicker(); - if (p_36347_.getType().is(EntityTypeTags.REDIRECTABLE_PROJECTILE) && p_36347_ instanceof Projectile projectile) { - projectile.deflect(ProjectileDeflection.AIM_DEFLECT, this, this, true); - } else { - if (f > 0.0F || f1 > 0.0F) { - boolean flag = f2 > 0.9F; - boolean flag1 = false; -- int i = 0; -+ float i = (float)this.getAttributeValue(Attributes.ATTACK_KNOCKBACK); // Forge: Initialize this value to the attack knockback attribute of the player, which is by default 0 - i += EnchantmentHelper.getKnockbackBonus(this); - if (this.isSprinting() && flag) { - this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_KNOCKBACK, this.getSoundSource(), 1.0F, 1.0F); -@@ -1154,8 +_,10 @@ - && !this.isPassenger() - && p_36347_ instanceof LivingEntity - && !this.isSprinting(); -+ var hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(this, p_36347_, flag2, flag2 ? 1.5F : 1.0F); -+ flag2 = hitResult != null; - if (flag2) { -- f *= 1.5F; + float f = this.isAutoSpinAttack() ? this.autoSpinAttackDmg : (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE); +@@ -1167,8 +_,10 @@ + && !this.isPassenger() + && p_36347_ instanceof LivingEntity + && !this.isSprinting(); ++ var hitResult = net.minecraftforge.common.ForgeHooks.getCriticalHit(this, p_36347_, flag1, flag1 ? 1.5F : 1.0F); ++ flag1 = hitResult != null; + if (flag1) { +- f *= 1.5F; + f *= hitResult.getDamageModifier(); - } + } - f += f1; -@@ -1163,7 +_,7 @@ - double d0 = (double)(this.walkDist - this.walkDistO); - if (flag && !flag2 && !flag1 && this.onGround() && d0 < (double)this.getSpeed()) { - ItemStack itemstack = this.getItemInHand(InteractionHand.MAIN_HAND); -- if (itemstack.getItem() instanceof SwordItem) { + float f3 = f + f1; +@@ -1176,7 +_,7 @@ + double d0 = (double)(this.walkDist - this.walkDistO); + if (flag4 && !flag1 && !flag && this.onGround() && d0 < (double)this.getSpeed()) { + ItemStack itemstack1 = this.getItemInHand(InteractionHand.MAIN_HAND); +- if (itemstack1.getItem() instanceof SwordItem) { + if (itemstack.canPerformAction(net.minecraftforge.common.ToolActions.SWORD_SWEEP)) { - flag3 = true; - } + flag2 = true; } -@@ -1205,7 +_,7 @@ - if (flag3) { - float f3 = 1.0F + EnchantmentHelper.getSweepingDamageRatio(this) * f; + } +@@ -1212,7 +_,7 @@ + if (flag2) { + float f7 = 1.0F + (float)this.getAttributeValue(Attributes.SWEEPING_DAMAGE_RATIO) * f; -- for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, p_36347_.getBoundingBox().inflate(1.0, 0.25, 1.0))) { -+ for (LivingEntity livingentity : this.level().getEntitiesOfClass(LivingEntity.class, this.getItemInHand(InteractionHand.MAIN_HAND).getSweepHitBox(this, p_36347_))) { - if (livingentity != this - && livingentity != p_36347_ - && !this.isAlliedTo(livingentity) -@@ -1259,13 +_,15 @@ - EnchantmentHelper.doPostDamageEffects(this, p_36347_); - ItemStack itemstack1 = this.getMainHandItem(); - Entity entity = p_36347_; -- if (p_36347_ instanceof EnderDragonPart) { -- entity = ((EnderDragonPart)p_36347_).parentMob; -+ if (p_36347_ instanceof net.minecraftforge.entity.PartEntity part) { -+ entity = part.getParent(); - } - - if (!this.level().isClientSide && !itemstack1.isEmpty() && entity instanceof LivingEntity) { -+ ItemStack copy = itemstack1.copy(); - itemstack1.hurtEnemy((LivingEntity)entity, this); - if (itemstack1.isEmpty()) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(this, copy, InteractionHand.MAIN_HAND); - this.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); - } - } -@@ -1295,6 +_,7 @@ - } +- for (LivingEntity livingentity2 : this.level().getEntitiesOfClass(LivingEntity.class, p_36347_.getBoundingBox().inflate(1.0, 0.25, 1.0))) { ++ for (LivingEntity livingentity2 : this.level().getEntitiesOfClass(LivingEntity.class, this.getItemInHand(InteractionHand.MAIN_HAND).getSweepHitBox(this, p_36347_))) { + if (livingentity2 != this + && livingentity2 != p_36347_ + && !this.isAlliedTo(livingentity2) +@@ -1304,6 +_,7 @@ + this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_ATTACK_NODAMAGE, this.getSoundSource(), 1.0F, 1.0F); } } + this.resetAttackStrengthTicker(); // FORGE: Moved from beginning of attack() so that getAttackStrengthScale() returns an accurate value during all attack events } } } -@@ -1305,7 +_,7 @@ +@@ -1318,7 +_,7 @@ } public void disableShield() { @@ -270,7 +241,7 @@ this.stopUsingItem(); this.level().broadcastEntityEvent(this, (byte)30); } -@@ -1371,6 +_,7 @@ +@@ -1384,6 +_,7 @@ } public void stopSleepInBed(boolean p_36226_, boolean p_36227_) { @@ -278,16 +249,7 @@ super.stopSleeping(); if (this.level() instanceof ServerLevel && p_36227_) { ((ServerLevel)this.level()).updateSleepingPlayerList(); -@@ -1399,7 +_,7 @@ - } else if (block instanceof BedBlock && BedBlock.canSetSpawn(p_36131_)) { - return BedBlock.findStandUpPosition(EntityType.PLAYER, p_36131_, p_36132_, blockstate.getValue(BedBlock.FACING), p_36133_); - } else if (!p_36134_) { -- return Optional.empty(); -+ return blockstate.getRespawnPosition(EntityType.PLAYER, p_36131_, p_36132_, p_36133_, null); - } else { - boolean flag = block.isPossibleToRespawnInThis(blockstate); - BlockState blockstate1 = p_36131_.getBlockState(p_36132_.above()); -@@ -1510,6 +_,7 @@ +@@ -1497,6 +_,7 @@ @Override public boolean causeFallDamage(float p_150093_, float p_150094_, DamageSource p_150095_) { if (this.abilities.mayfly) { @@ -295,7 +257,7 @@ return false; } else { if (p_150093_ >= 2.0F) { -@@ -1529,7 +_,7 @@ +@@ -1528,7 +_,7 @@ public boolean tryToStartFallFlying() { if (!this.onGround() && !this.isFallFlying() && !this.isInWater() && !this.hasEffect(MobEffects.LEVITATION)) { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.CHEST); @@ -304,7 +266,7 @@ this.startFallFlying(); return true; } -@@ -1558,13 +_,13 @@ +@@ -1557,13 +_,13 @@ protected void playStepSound(BlockPos p_282121_, BlockState p_282194_) { if (this.isInWater()) { this.waterSwimSound(); @@ -320,7 +282,7 @@ } else { super.playStepSound(blockpos, blockstate); } -@@ -1595,6 +_,12 @@ +@@ -1594,6 +_,12 @@ } public void giveExperiencePoints(int p_36291_) { @@ -333,7 +295,7 @@ this.increaseScore(p_36291_); this.experienceProgress = this.experienceProgress + (float)p_36291_ / (float)this.getXpNeededForNextLevel(); this.totalExperience = Mth.clamp(this.totalExperience + p_36291_, 0, Integer.MAX_VALUE); -@@ -1622,7 +_,7 @@ +@@ -1621,7 +_,7 @@ } public void onEnchantmentPerformed(ItemStack p_36172_, int p_36173_) { @@ -342,7 +304,7 @@ if (this.experienceLevel < 0) { this.experienceLevel = 0; this.experienceProgress = 0.0F; -@@ -1633,6 +_,12 @@ +@@ -1632,6 +_,12 @@ } public void giveExperienceLevels(int p_36276_) { @@ -355,7 +317,7 @@ this.experienceLevel += p_36276_; if (this.experienceLevel < 0) { this.experienceLevel = 0; -@@ -1841,7 +_,13 @@ +@@ -1840,7 +_,13 @@ @Override public Component getDisplayName() { @@ -370,7 +332,7 @@ return this.decorateDisplayNameComponent(mutablecomponent); } -@@ -2002,18 +_,19 @@ +@@ -2001,18 +_,19 @@ Predicate predicate = ((ProjectileWeaponItem)p_36349_.getItem()).getSupportedHeldProjectiles(); ItemStack itemstack = ProjectileWeaponItem.getHeldProjectile(this, predicate); if (!itemstack.isEmpty()) { @@ -393,7 +355,7 @@ } } } -@@ -2147,6 +_,65 @@ +@@ -2173,6 +_,65 @@ this.currentImpulseImpactPos = null; this.ignoreFallDamageFromCurrentImpulse = false; } diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/AbstractArrow.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/AbstractArrow.java.patch index 692276c16e..0d19ea642d 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/AbstractArrow.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/AbstractArrow.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -68,6 +_,7 @@ - @Nullable - private List piercedAndKilledEntities; +@@ -71,6 +_,7 @@ private ItemStack pickupItemStack = this.getDefaultPickupItem(); + @Nullable + private ItemStack firedFromWeapon = null; + private final IntOpenHashSet ignoredEntities = new IntOpenHashSet(); protected AbstractArrow(EntityType p_332730_, Level p_335646_) { super(p_332730_, p_335646_); -@@ -167,7 +_,7 @@ +@@ -188,7 +_,7 @@ this.shakeTime--; } @@ -17,7 +17,7 @@ this.clearFire(); } -@@ -203,11 +_,27 @@ +@@ -224,11 +_,27 @@ } } @@ -50,7 +50,7 @@ } } -@@ -218,6 +_,9 @@ +@@ -239,6 +_,9 @@ hitresult = null; } @@ -60,7 +60,7 @@ vec3 = this.getDeltaMovement(); double d5 = vec3.x; double d6 = vec3.y; -@@ -453,7 +_,7 @@ +@@ -504,7 +_,7 @@ @Override protected boolean canHitEntity(Entity p_36743_) { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java.patch index bfae07601a..693f0a5f5d 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java +++ b/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java -@@ -89,7 +_,7 @@ +@@ -78,7 +_,7 @@ } HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity, this.getClipType()); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch index 6063e70081..efe85a5e82 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/FireworkRocketEntity.java.patch @@ -1,14 +1,16 @@ --- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java +++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java -@@ -301,4 +_,11 @@ - private static ItemStack getDefaultItem() { - return new ItemStack(Items.FIREWORK_ROCKET); +@@ -305,6 +_,13 @@ } -+ -+ @Override + + @Override + protected void onHit(HitResult result) { + if (result.getType() == HitResult.Type.MISS || !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, result)) { + super.onHit(result); + } + } - } ++ ++ @Override + public DoubleDoubleImmutablePair calculateHorizontalHurtKnockbackDirection(LivingEntity p_343097_, DamageSource p_343307_) { + double d0 = p_343097_.position().x - this.position().x; + double d1 = p_343097_.position().z - this.position().z; diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch index 56548534a4..7c454ac7d7 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/FishingHook.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/FishingHook.java +++ b/net/minecraft/world/entity/projectile/FishingHook.java -@@ -238,8 +_,8 @@ +@@ -239,8 +_,8 @@ private boolean shouldStopFishing(Player p_37137_) { ItemStack itemstack = p_37137_.getMainHandItem(); ItemStack itemstack1 = p_37137_.getOffhandItem(); @@ -11,7 +11,7 @@ if (!p_37137_.isRemoved() && p_37137_.isAlive() && (flag || flag1) && !(this.distanceToSqr(p_37137_) > 1024.0)) { return false; } else { -@@ -250,6 +_,7 @@ +@@ -251,6 +_,7 @@ private void checkCollision() { HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); @@ -19,7 +19,7 @@ this.hitTargetOrDeflectSelf(hitresult); } -@@ -439,6 +_,7 @@ +@@ -440,6 +_,7 @@ Player player = this.getPlayerOwner(); if (!this.level().isClientSide && player != null && !this.shouldStopFishing(player)) { int i = 0; @@ -27,12 +27,11 @@ if (this.hookedIn != null) { this.pullEntity(this.hookedIn); CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, p_37157_, this, Collections.emptyList()); -@@ -449,10 +_,17 @@ +@@ -450,10 +_,16 @@ .withParameter(LootContextParams.ORIGIN, this.position()) .withParameter(LootContextParams.TOOL, p_37157_) .withParameter(LootContextParams.THIS_ENTITY, this) -+ .withParameter(LootContextParams.KILLER_ENTITY, this.getOwner()) -+ .withParameter(LootContextParams.THIS_ENTITY, this) ++ .withParameter(LootContextParams.ATTACKING_ENTITY, this.getOwner()) .withLuck((float)this.luck + player.getLuck()) .create(LootContextParamSets.FISHING); LootTable loottable = this.level().getServer().reloadableRegistries().getLootTable(BuiltInLootTables.FISHING); @@ -45,7 +44,7 @@ CriteriaTriggers.FISHING_ROD_HOOKED.trigger((ServerPlayer)player, p_37157_, this, list); for (ItemStack itemstack : list) { -@@ -482,7 +_,7 @@ +@@ -483,7 +_,7 @@ } this.discard(); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/LargeFireball.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/LargeFireball.java.patch index fdc0e0cec9..db33f94565 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/LargeFireball.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/LargeFireball.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/net/minecraft/world/entity/projectile/LargeFireball.java -@@ -25,7 +_,8 @@ +@@ -29,7 +_,8 @@ protected void onHit(HitResult p_37218_) { super.onHit(p_37218_); if (!this.level().isClientSide) { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/LlamaSpit.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/LlamaSpit.java.patch index 74a47b9478..da4ffbc292 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/LlamaSpit.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/LlamaSpit.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/LlamaSpit.java +++ b/net/minecraft/world/entity/projectile/LlamaSpit.java -@@ -39,7 +_,8 @@ +@@ -43,7 +_,8 @@ super.tick(); Vec3 vec3 = this.getDeltaMovement(); HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch index eac92992b3..ab6ac32d38 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/Projectile.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -265,7 +_,7 @@ +@@ -278,7 +_,7 @@ @Override public boolean mayInteract(Level p_150167_, BlockPos p_150168_) { Entity entity = this.getOwner(); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch index 12ae3ea748..1c7f9fae0b 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ProjectileUtil.java.patch @@ -22,4 +22,4 @@ + return itemPredicate.test(livingEntity.getMainHandItem().getItem()) ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; } - public static AbstractArrow getMobArrow(LivingEntity p_37301_, ItemStack p_37302_, float p_37303_) { + public static AbstractArrow getMobArrow(LivingEntity p_37301_, ItemStack p_37302_, float p_37303_, @Nullable ItemStack p_342402_) { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch index 3234346084..7b03c487ab 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ShulkerBullet.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/ShulkerBullet.java +++ b/net/minecraft/world/entity/projectile/ShulkerBullet.java -@@ -219,7 +_,7 @@ +@@ -220,7 +_,7 @@ } HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/SmallFireball.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/SmallFireball.java.patch index fbf1188026..05623e54a3 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/SmallFireball.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/SmallFireball.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/SmallFireball.java +++ b/net/minecraft/world/entity/projectile/SmallFireball.java -@@ -47,7 +_,7 @@ +@@ -51,7 +_,7 @@ super.onHitBlock(p_37384_); if (!this.level().isClientSide) { Entity entity = this.getOwner(); diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ThrowableProjectile.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ThrowableProjectile.java.patch index 69cb0bea27..77f5034762 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ThrowableProjectile.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ThrowableProjectile.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/entity/projectile/ThrowableProjectile.java +++ b/net/minecraft/world/entity/projectile/ThrowableProjectile.java -@@ -60,7 +_,7 @@ - } - } - -- if (hitresult.getType() != HitResult.Type.MISS && !flag) { -+ if (hitresult.getType() != HitResult.Type.MISS && !flag && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, hitresult)) { +@@ -42,7 +_,7 @@ + public void tick() { + super.tick(); + HitResult hitresult = ProjectileUtil.getHitResultOnMoveVector(this, this::canHitEntity); +- if (hitresult.getType() != HitResult.Type.MISS) { ++ if (hitresult.getType() != HitResult.Type.MISS && !net.minecraftforge.event.ForgeEventFactory.onProjectileImpact(this, hitresult)) { this.hitTargetOrDeflectSelf(hitresult); } diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch index d343ec0f81..49d20db00d 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch @@ -1,39 +1,30 @@ --- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -58,6 +_,8 @@ - Entity entity = this.getOwner(); - if (entity instanceof ServerPlayer serverplayer) { - if (serverplayer.connection.isAcceptingMessages() && serverplayer.level() == this.level() && !serverplayer.isSleeping()) { -+ var event = net.minecraftforge.event.ForgeEventFactory.onEnderPearlLand(serverplayer, this.getX(), this.getY(), this.getZ(), this, 5.0F, p_37504_); -+ if (!event.isCanceled()) { // Don't indent to lower patch size - if (this.random.nextFloat() < 0.05F && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { - Endermite endermite = EntityType.ENDERMITE.create(this.level()); - if (endermite != null) { -@@ -72,9 +_,11 @@ - entity.teleportTo(this.getX(), this.getY(), this.getZ()); +@@ -66,6 +_,12 @@ + + if (entity instanceof ServerPlayer serverplayer) { + if (serverplayer.connection.isAcceptingMessages()) { ++ var event = net.minecraftforge.event.ForgeEventFactory.onEnderPearlLand(serverplayer, this.getX(), this.getY(), this.getZ(), this, 5.0F, p_37504_); ++ if (event.isCanceled()) { ++ this.discard(); ++ return; ++ } ++ + if (this.random.nextFloat() < 0.05F && serverlevel.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + Endermite endermite = EntityType.ENDERMITE.create(serverlevel); + if (endermite != null) { +@@ -76,12 +_,12 @@ + + entity.changeDimension( + new DimensionTransition( +- serverlevel, this.position(), entity.getDeltaMovement(), entity.getYRot(), entity.getXRot(), DimensionTransition.DO_NOTHING ++ serverlevel, event.getTarget(), entity.getDeltaMovement(), entity.getYRot(), entity.getXRot(), DimensionTransition.DO_NOTHING + ) + ); + entity.resetFallDistance(); + serverplayer.resetCurrentImpulseContext(); +- entity.hurt(this.damageSources().fall(), 5.0F); ++ entity.hurt(this.damageSources().fall(), event.getAttackDamage()); + this.playSound(serverlevel, this.position()); } - -+ entity.teleportTo(event.getTargetX(), event.getTargetY(), event.getTargetZ()); - entity.resetFallDistance(); -- entity.hurt(this.damageSources().fall(), 5.0F); - this.level().playSound(null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_TELEPORT, SoundSource.PLAYERS); -+ entity.hurt(this.damageSources().fall(), event.getAttackDamage()); -+ } //Forge: End - } - } else if (entity != null) { - entity.teleportTo(this.getX(), this.getY(), this.getZ()); -@@ -97,12 +_,12 @@ - - @Nullable - @Override -- public Entity changeDimension(ServerLevel p_37506_) { -+ public Entity changeDimension(ServerLevel p_37506_, net.minecraftforge.common.util.ITeleporter teleporter) { - Entity entity = this.getOwner(); - if (entity != null && entity.level().dimension() != p_37506_.dimension()) { - this.setOwner(null); - } - -- return super.changeDimension(p_37506_); -+ return super.changeDimension(p_37506_, teleporter); - } - } + } else { diff --git a/patches/minecraft/net/minecraft/world/entity/projectile/WitherSkull.java.patch b/patches/minecraft/net/minecraft/world/entity/projectile/WitherSkull.java.patch index 19188424ff..7567adc030 100644 --- a/patches/minecraft/net/minecraft/world/entity/projectile/WitherSkull.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/projectile/WitherSkull.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -44,7 +_,7 @@ +@@ -47,7 +_,7 @@ @Override public float getBlockExplosionResistance(Explosion p_37619_, BlockGetter p_37620_, BlockPos p_37621_, BlockState p_37622_, FluidState p_37623_, float p_37624_) { diff --git a/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch b/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch index 873820d1af..954302545e 100644 --- a/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/raid/Raid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/raid/Raid.java +++ b/net/minecraft/world/entity/raid/Raid.java -@@ -836,7 +_,7 @@ +@@ -833,7 +_,7 @@ } } @@ -9,7 +9,7 @@ VINDICATOR(EntityType.VINDICATOR, new int[]{0, 0, 2, 0, 1, 4, 2, 5}), EVOKER(EntityType.EVOKER, new int[]{0, 0, 0, 0, 0, 1, 1, 2}), PILLAGER(EntityType.PILLAGER, new int[]{0, 4, 3, 3, 4, 4, 4, 2}), -@@ -850,6 +_,20 @@ +@@ -847,6 +_,20 @@ private RaiderType(final EntityType p_37821_, final int[] p_37822_) { this.entityType = p_37821_; this.spawnsPerWaveBeforeBonus = p_37822_; diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/Boat.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/Boat.java.patch index 9eb6d9ba4a..ae7f88ac78 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/Boat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/Boat.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/vehicle/Boat.java +++ b/net/minecraft/world/entity/vehicle/Boat.java -@@ -51,7 +_,7 @@ +@@ -52,7 +_,7 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; --public class Boat extends VehicleEntity implements VariantHolder { -+public class Boat extends VehicleEntity implements VariantHolder, net.minecraftforge.common.extensions.IForgeBoat { +-public class Boat extends VehicleEntity implements Leashable, VariantHolder { ++public class Boat extends VehicleEntity implements Leashable, VariantHolder, net.minecraftforge.common.extensions.IForgeBoat { private static final EntityDataAccessor DATA_ID_TYPE = SynchedEntityData.defineId(Boat.class, EntityDataSerializers.INT); private static final EntityDataAccessor DATA_ID_PADDLE_LEFT = SynchedEntityData.defineId(Boat.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor DATA_ID_PADDLE_RIGHT = SynchedEntityData.defineId(Boat.class, EntityDataSerializers.BOOLEAN); -@@ -471,7 +_,7 @@ +@@ -498,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(l1, k1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); @@ -18,7 +18,7 @@ f = Math.max(f, fluidstate.getHeight(this.level(), blockpos$mutableblockpos)); } -@@ -517,7 +_,7 @@ +@@ -544,7 +_,7 @@ voxelshape, BooleanOp.AND )) { @@ -27,7 +27,7 @@ k1++; } } -@@ -546,7 +_,7 @@ +@@ -573,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(k1, l1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); @@ -36,7 +36,7 @@ float f = (float)l1 + fluidstate.getHeight(this.level(), blockpos$mutableblockpos); this.waterLevel = Math.max((double)f, this.waterLevel); flag |= aabb.minY < (double)f; -@@ -576,7 +_,7 @@ +@@ -603,7 +_,7 @@ for (int i2 = i1; i2 < j1; i2++) { blockpos$mutableblockpos.set(k1, l1, i2); FluidState fluidstate = this.level().getFluidState(blockpos$mutableblockpos); @@ -45,7 +45,7 @@ && d0 < (double)((float)blockpos$mutableblockpos.getY() + fluidstate.getHeight(this.level(), blockpos$mutableblockpos))) { if (!fluidstate.isSource()) { return Boat.Status.UNDER_FLOWING_WATER; -@@ -794,7 +_,7 @@ +@@ -839,7 +_,7 @@ } this.resetFallDistance(); @@ -54,7 +54,7 @@ this.fallDistance -= (float)p_38307_; } } -@@ -826,7 +_,7 @@ +@@ -871,7 +_,7 @@ @Override protected boolean canAddPassenger(Entity p_38390_) { @@ -63,7 +63,7 @@ } protected int getMaxPassengers() { -@@ -859,6 +_,16 @@ +@@ -904,6 +_,16 @@ @Override public ItemStack getPickResult() { return new ItemStack(this.getDropItem()); diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch index 88d426b0f6..5aaa30ee1b 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/ChestBoat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/vehicle/ChestBoat.java +++ b/net/minecraft/world/entity/vehicle/ChestBoat.java -@@ -213,4 +_,26 @@ +@@ -220,4 +_,26 @@ public void stopOpen(Player p_270286_) { this.level().gameEvent(GameEvent.CONTAINER_CLOSE, this.position(), GameEvent.Context.of(p_270286_)); } diff --git a/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch b/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch index d9d498b5e6..3886463573 100644 --- a/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/entity/vehicle/ContainerEntity.java.patch @@ -6,7 +6,7 @@ LootParams.Builder lootparams$builder = new LootParams.Builder((ServerLevel)this.level()).withParameter(LootContextParams.ORIGIN, this.position()); + // Forge: set the chest to killer_entity for loot context. + if (this instanceof AbstractMinecartContainer entityContainer) -+ lootparams$builder.withParameter(LootContextParams.KILLER_ENTITY, entityContainer); ++ lootparams$builder.withParameter(LootContextParams.ATTACKING_ENTITY, entityContainer); if (p_219950_ != null) { lootparams$builder.withLuck(p_219950_.getLuck()).withParameter(LootContextParams.THIS_ENTITY, p_219950_); } diff --git a/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch b/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch new file mode 100644 index 0000000000..6a4255e393 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/inventory/ArmorSlot.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/inventory/ArmorSlot.java ++++ b/net/minecraft/world/inventory/ArmorSlot.java +@@ -39,7 +_,7 @@ + + @Override + public boolean mayPlace(ItemStack p_344267_) { +- return this.slot == this.owner.getEquipmentSlotForItem(p_344267_); ++ return p_344267_.canEquip(slot, owner); + } + + @Override diff --git a/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch index 3f69b46ee9..670ba8cad2 100644 --- a/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/EnchantmentMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/net/minecraft/world/inventory/EnchantmentMenu.java -@@ -57,7 +_,7 @@ +@@ -63,7 +_,7 @@ this.addSlot(new Slot(this.enchantSlots, 1, 35, 47) { @Override public boolean mayPlace(ItemStack p_39517_) { @@ -9,17 +9,17 @@ } @Override -@@ -94,23 +_,25 @@ - ItemStack itemstack = p_39461_.getItem(0); +@@ -101,23 +_,25 @@ if (!itemstack.isEmpty() && itemstack.isEnchantable()) { - this.access.execute((p_327074_, p_327075_) -> { + this.access.execute((p_341515_, p_341516_) -> { + IdMap> idmap = p_341515_.registryAccess().registryOrThrow(Registries.ENCHANTMENT).asHolderIdMap(); - int j = 0; + float j = 0; for (BlockPos blockpos : EnchantingTableBlock.BOOKSHELF_OFFSETS) { - if (EnchantingTableBlock.isValidBookShelf(p_327074_, p_327075_, blockpos)) { + if (EnchantingTableBlock.isValidBookShelf(p_341515_, p_341516_, blockpos)) { j++; -+ j += p_327074_.getBlockState(p_327075_.offset(blockpos)).getEnchantPowerBonus(p_327074_, p_327075_.offset(blockpos)); ++ j += p_341515_.getBlockState(p_341516_.offset(blockpos)).getEnchantPowerBonus(p_341515_, p_341516_.offset(blockpos)); } } @@ -33,11 +33,11 @@ if (this.costs[k] < k + 1) { this.costs[k] = 0; } -+ this.costs[k] = net.minecraftforge.event.ForgeEventFactory.onEnchantmentLevelSet(p_327074_, p_327075_, k, (int)j, itemstack, costs[k]); ++ this.costs[k] = net.minecraftforge.event.ForgeEventFactory.onEnchantmentLevelSet(p_341515_, p_341516_, k, (int)j, itemstack, costs[k]); } for (int l = 0; l < 3; l++) { -@@ -234,7 +_,7 @@ +@@ -244,7 +_,7 @@ if (!this.moveItemStackTo(itemstack1, 2, 38, true)) { return ItemStack.EMPTY; } diff --git a/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch index 0c646da907..af0967f779 100644 --- a/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/GrindstoneMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -37,6 +_,7 @@ +@@ -38,6 +_,7 @@ } }; private final ContainerLevelAccess access; @@ -8,7 +8,7 @@ public GrindstoneMenu(int p_39563_, Inventory p_39564_) { this(p_39563_, p_39564_, ContainerLevelAccess.NULL); -@@ -48,13 +_,13 @@ +@@ -49,13 +_,13 @@ this.addSlot(new Slot(this.repairSlots, 0, 49, 19) { @Override public boolean mayPlace(ItemStack p_39607_) { @@ -24,7 +24,7 @@ } }); this.addSlot(new Slot(this.resultSlots, 2, 129, 34) { -@@ -65,6 +_,7 @@ +@@ -66,6 +_,7 @@ @Override public void onTake(Player p_150574_, ItemStack p_150575_) { @@ -32,7 +32,7 @@ p_39568_.execute((p_39634_, p_39635_) -> { if (p_39634_ instanceof ServerLevel) { ExperienceOrb.award((ServerLevel)p_39634_, Vec3.atCenterOf(p_39635_), this.getExperienceAmount(p_39634_)); -@@ -77,6 +_,7 @@ +@@ -78,6 +_,7 @@ } private int getExperienceAmount(Level p_39632_) { @@ -40,7 +40,7 @@ int l = 0; l += this.getExperienceFromItem(GrindstoneMenu.this.repairSlots.getItem(0)); l += this.getExperienceFromItem(GrindstoneMenu.this.repairSlots.getItem(1)); -@@ -129,6 +_,17 @@ +@@ -130,6 +_,17 @@ } private ItemStack computeResult(ItemStack p_335167_, ItemStack p_329934_) { diff --git a/patches/minecraft/net/minecraft/world/inventory/InventoryMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/InventoryMenu.java.patch deleted file mode 100644 index 810b7719b9..0000000000 --- a/patches/minecraft/net/minecraft/world/inventory/InventoryMenu.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/inventory/InventoryMenu.java -+++ b/net/minecraft/world/inventory/InventoryMenu.java -@@ -68,7 +_,7 @@ - - @Override - public boolean mayPlace(ItemStack p_39746_) { -- return equipmentslot == Mob.getEquipmentSlotForItem(p_39746_); -+ return p_39746_.canEquip(equipmentslot, owner); - } - - @Override diff --git a/patches/minecraft/net/minecraft/world/inventory/RecipeBookMenu.java.patch b/patches/minecraft/net/minecraft/world/inventory/RecipeBookMenu.java.patch index 6b0a1f4b9d..5c8a847c8b 100644 --- a/patches/minecraft/net/minecraft/world/inventory/RecipeBookMenu.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/RecipeBookMenu.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/RecipeBookMenu.java +++ b/net/minecraft/world/inventory/RecipeBookMenu.java -@@ -33,4 +_,8 @@ +@@ -46,4 +_,8 @@ public abstract RecipeBookType getRecipeBookType(); public abstract boolean shouldMoveToInventory(int p_150635_); diff --git a/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch b/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch index e5c07be9d4..daf6e8856b 100644 --- a/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch +++ b/patches/minecraft/net/minecraft/world/inventory/ResultSlot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/ResultSlot.java +++ b/net/minecraft/world/inventory/ResultSlot.java -@@ -46,6 +_,7 @@ +@@ -47,6 +_,7 @@ protected void checkTakeAchievements(ItemStack p_40185_) { if (this.removeCount > 0) { p_40185_.onCraftedBy(this.player.level(), this.player, this.removeCount); @@ -8,13 +8,13 @@ } if (this.container instanceof RecipeCraftingHolder recipecraftingholder) { -@@ -58,7 +_,9 @@ - @Override - public void onTake(Player p_150638_, ItemStack p_150639_) { - this.checkTakeAchievements(p_150639_); +@@ -63,7 +_,9 @@ + CraftingInput craftinginput = craftinginput$positioned.input(); + int i = craftinginput$positioned.left(); + int j = craftinginput$positioned.top(); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(p_150638_); - NonNullList nonnulllist = p_150638_.level().getRecipeManager().getRemainingItemsFor(RecipeType.CRAFTING, this.craftSlots, p_150638_.level()); + NonNullList nonnulllist = p_150638_.level().getRecipeManager().getRemainingItemsFor(RecipeType.CRAFTING, craftinginput, p_150638_.level()); + net.minecraftforge.common.ForgeHooks.setCraftingPlayer(null); - for (int i = 0; i < nonnulllist.size(); i++) { - ItemStack itemstack = this.craftSlots.getItem(i); + for (int k = 0; k < craftinginput.height(); k++) { + for (int l = 0; l < craftinginput.width(); l++) { diff --git a/patches/minecraft/net/minecraft/world/item/ArrowItem.java.patch b/patches/minecraft/net/minecraft/world/item/ArrowItem.java.patch index 849db20831..a03a967505 100644 --- a/patches/minecraft/net/minecraft/world/item/ArrowItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ArrowItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/ArrowItem.java +++ b/net/minecraft/world/item/ArrowItem.java -@@ -23,4 +_,11 @@ +@@ -24,4 +_,11 @@ arrow.pickup = AbstractArrow.Pickup.ALLOWED; return arrow; } diff --git a/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch b/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch index 8ed3f3545e..25673edf13 100644 --- a/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/AxeItem.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/item/AxeItem.java +++ b/net/minecraft/world/item/AxeItem.java -@@ -56,7 +_,8 @@ - Level level = p_40529_.getLevel(); - BlockPos blockpos = p_40529_.getClickedPos(); - Player player = p_40529_.getPlayer(); -- Optional optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); -+ var modded = level.getBlockState(blockpos).getToolModifiedState(p_40529_, net.minecraftforge.common.ToolActions.AXE_STRIP, false); -+ Optional optional = modded != null ? Optional.of(modded) : this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); - if (optional.isEmpty()) { +@@ -60,7 +_,8 @@ + if (playerHasShieldUseIntent(p_40529_)) { return InteractionResult.PASS; } else { -@@ -103,5 +_,16 @@ +- Optional optional = this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); ++ var modded = level.getBlockState(blockpos).getToolModifiedState(p_40529_, net.minecraftforge.common.ToolActions.AXE_STRIP, false); ++ Optional optional = modded != null ? Optional.of(modded) : this.evaluateNewBlockState(level, blockpos, player, level.getBlockState(blockpos)); + if (optional.isEmpty()) { + return InteractionResult.PASS; + } else { +@@ -113,5 +_,16 @@ private Optional getStripped(BlockState p_150691_) { return Optional.ofNullable(STRIPPABLES.get(p_150691_.getBlock())) .map(p_150689_ -> p_150689_.defaultBlockState().setValue(RotatedPillarBlock.AXIS, p_150691_.getValue(RotatedPillarBlock.AXIS))); diff --git a/patches/minecraft/net/minecraft/world/item/BowItem.java.patch b/patches/minecraft/net/minecraft/world/item/BowItem.java.patch index 319f72f5aa..3c40a05974 100644 --- a/patches/minecraft/net/minecraft/world/item/BowItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BowItem.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/item/BowItem.java +++ b/net/minecraft/world/item/BowItem.java -@@ -27,6 +_,9 @@ +@@ -28,6 +_,9 @@ ItemStack itemstack = player.getProjectile(p_40667_); if (!itemstack.isEmpty()) { - int i = this.getUseDuration(p_40667_) - p_40670_; + int i = this.getUseDuration(p_40667_, p_40669_) - p_40670_; + i = net.minecraftforge.event.ForgeEventFactory.onArrowLoose(p_40667_, p_40668_, player, i, true); + if (i < 0) return; + float f = getPowerForTime(i); if (!((double)f < 0.1)) { List list = draw(p_40667_, itemstack, player); -@@ -81,6 +_,8 @@ +@@ -82,6 +_,8 @@ public InteractionResultHolder use(Level p_40672_, Player p_40673_, InteractionHand p_40674_) { ItemStack itemstack = p_40673_.getItemInHand(p_40674_); boolean flag = !p_40673_.getProjectile(itemstack).isEmpty(); diff --git a/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch b/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch index 130936f3be..718371155a 100644 --- a/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/BucketItem.java.patch @@ -31,13 +31,13 @@ return InteractionResultHolder.pass(itemstack); } else if (blockhitresult.getType() != HitResult.Type.BLOCK) { @@ -56,7 +_,7 @@ - ItemStack itemstack2 = bucketpickup.pickupBlock(p_40704_, p_40703_, blockpos, blockstate1); - if (!itemstack2.isEmpty()) { + ItemStack itemstack3 = bucketpickup.pickupBlock(p_40704_, p_40703_, blockpos, blockstate1); + if (!itemstack3.isEmpty()) { p_40704_.awardStat(Stats.ITEM_USED.get(this)); - bucketpickup.getPickupSound().ifPresent(p_150709_ -> p_40704_.playSound(p_150709_, 1.0F, 1.0F)); + bucketpickup.getPickupSound(blockstate1).ifPresent(p_150709_ -> p_40704_.playSound(p_150709_, 1.0F, 1.0F)); p_40703_.gameEvent(p_40704_, GameEvent.FLUID_PICKUP, blockpos); - ItemStack itemstack1 = ItemUtils.createFilledResult(itemstack, p_40704_, itemstack2); + ItemStack itemstack2 = ItemUtils.createFilledResult(itemstack, p_40704_, itemstack3); if (!p_40703_.isClientSide) { @@ -70,8 +_,8 @@ return InteractionResultHolder.fail(itemstack); @@ -50,7 +50,7 @@ this.checkExtraContent(p_40704_, p_40703_, itemstack, blockpos2); if (p_40704_ instanceof ServerPlayer) { CriteriaTriggers.PLACED_BLOCK.trigger((ServerPlayer)p_40704_, blockpos2, itemstack); -@@ -94,8 +_,13 @@ +@@ -95,8 +_,13 @@ public void checkExtraContent(@Nullable Player p_150711_, Level p_150712_, ItemStack p_150713_, BlockPos p_150714_) { } @@ -64,7 +64,7 @@ if (!(this.content instanceof FlowingFluid flowingfluid)) { return false; } else { -@@ -122,8 +_,12 @@ +@@ -123,8 +_,12 @@ } boolean flag1 = flag2; @@ -78,7 +78,7 @@ } else if (p_150717_.dimensionType().ultraWarm() && this.content.is(FluidTags.WATER)) { int l = p_150718_.getX(); int i = p_150718_.getY(); -@@ -143,7 +_,7 @@ +@@ -144,7 +_,7 @@ return true; } else { @@ -87,7 +87,7 @@ liquidblockcontainer1.placeLiquid(p_150717_, p_150718_, blockstate, flowingfluid.getSource(false)); this.playEmptySound(p_150716_, p_150717_, p_150718_); return true; -@@ -165,7 +_,32 @@ +@@ -166,7 +_,32 @@ protected void playEmptySound(@Nullable Player p_40696_, LevelAccessor p_40697_, BlockPos p_40698_) { SoundEvent soundevent = this.content.is(FluidTags.LAVA) ? SoundEvents.BUCKET_EMPTY_LAVA : SoundEvents.BUCKET_EMPTY; diff --git a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch index 26807841ce..faab092bbc 100644 --- a/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CreativeModeTab.java.patch @@ -1,20 +1,19 @@ --- a/net/minecraft/world/item/CreativeModeTab.java +++ b/net/minecraft/world/item/CreativeModeTab.java -@@ -31,6 +_,13 @@ - private Consumer> searchTreeBuilder; +@@ -28,6 +_,12 @@ + private Set displayItemsSearchTab = ItemStackLinkedSet.createTypeAndComponentsSet(); private final Supplier iconGenerator; private final CreativeModeTab.DisplayItemsGenerator displayItemsGenerator; -+ private net.minecraft.resources.ResourceLocation backgroundLocation; + private final boolean hasSearchBar; + private final int searchBarWidth; + private final int labelColor; + private final int slotColor; -+ public final List tabsBefore; -+ public final List tabsAfter; ++ public final java.util.List tabsBefore; ++ public final java.util.List tabsAfter; CreativeModeTab( CreativeModeTab.Row p_260217_, -@@ -38,7 +_,8 @@ +@@ -35,7 +_,8 @@ CreativeModeTab.Type p_260176_, Component p_260100_, Supplier p_259543_, @@ -24,19 +23,16 @@ ) { this.row = p_260217_; this.column = p_259557_; -@@ -46,8 +_,24 @@ +@@ -43,12 +_,27 @@ this.iconGenerator = p_259543_; this.displayItemsGenerator = p_259085_; this.type = p_260176_; -- } -- -+ this.backgroundLocation = builder.backgroundLocation; + this.hasSearchBar = builder.hasSearchBar; + this.searchBarWidth = builder.searchBarWidth; + this.labelColor = builder.labelColor; + this.slotColor = builder.slotColor; -+ this.tabsBefore = List.copyOf(builder.tabsBefore); -+ this.tabsAfter = List.copyOf(builder.tabsAfter); ++ this.tabsBefore = java.util.List.copyOf(builder.tabsBefore); ++ this.tabsAfter = java.util.List.copyOf(builder.tabsAfter); + } + + protected CreativeModeTab(CreativeModeTab.Builder builder) { @@ -45,21 +41,17 @@ + + public static CreativeModeTab.Builder builder() { + return new CreativeModeTab.Builder(Row.TOP, 0); -+ } -+ + } + + public static ResourceLocation createTextureLocation(String p_343491_) { + return ResourceLocation.withDefaultNamespace("textures/gui/container/creative_inventory/tab_" + p_343491_ + ".png"); + } + + /** @deprecated Forge: use {@link #builder()} **/ public static CreativeModeTab.Builder builder(CreativeModeTab.Row p_259342_, int p_260312_) { return new CreativeModeTab.Builder(p_259342_, p_260312_); } -@@ -64,6 +_,7 @@ - return this.iconItemStack; - } - -+ /** @deprecated Forge: Use {@link #getBackgroundLocation()} instead. */ - public String getBackgroundSuffix() { - return this.backgroundSuffix; - } -@@ -105,7 +_,7 @@ +@@ -106,7 +_,7 @@ ResourceKey resourcekey = BuiltInRegistries.CREATIVE_MODE_TAB .getResourceKey(this) .orElseThrow(() -> new IllegalStateException("Unregistered creative tab: " + this)); @@ -67,15 +59,11 @@ + net.minecraftforge.common.ForgeHooks.onCreativeModeTabBuildContents(this, resourcekey, this.displayItemsGenerator, p_270156_, creativemodetab$itemdisplaybuilder); this.displayItems = creativemodetab$itemdisplaybuilder.tabContents; this.displayItemsSearchTab = creativemodetab$itemdisplaybuilder.searchTabContents; - this.rebuildSearchTree(); -@@ -133,6 +_,26 @@ - } + } +@@ -123,6 +_,22 @@ + return this.displayItemsSearchTab.contains(p_259317_); } -+ public net.minecraft.resources.ResourceLocation getBackgroundLocation() { -+ return backgroundLocation; -+ } -+ + public boolean hasSearchBar() { + return this.hasSearchBar; + } @@ -95,24 +83,22 @@ public static class Builder { private static final CreativeModeTab.DisplayItemsGenerator EMPTY_GENERATOR = (p_270422_, p_259433_) -> { }; -@@ -146,6 +_,16 @@ +@@ -136,6 +_,14 @@ private boolean alignedRight = false; private CreativeModeTab.Type type = CreativeModeTab.Type.CATEGORY; - private String backgroundSuffix = "items.png"; -+ @Nullable -+ private net.minecraft.resources.ResourceLocation backgroundLocation; + private ResourceLocation backgroundTexture = CreativeModeTab.DEFAULT_BACKGROUND; + private boolean hasSearchBar = false; + private int searchBarWidth = 89; + private int labelColor = 4210752; + private int slotColor = -2130706433; + private java.util.function.Function tabFactory = + builder -> new CreativeModeTab(builder.row, builder.column, builder.type, builder.displayName, builder.iconGenerator, builder.displayItemsGenerator, builder); -+ private final List tabsBefore = new java.util.ArrayList<>(); -+ private final List tabsAfter = new java.util.ArrayList<>(); ++ private final java.util.List tabsBefore = new java.util.ArrayList<>(); ++ private final java.util.List tabsAfter = new java.util.ArrayList<>(); public Builder(CreativeModeTab.Row p_259171_, int p_259661_) { this.row = p_259171_; -@@ -184,11 +_,89 @@ +@@ -174,6 +_,9 @@ protected CreativeModeTab.Builder type(CreativeModeTab.Type p_259283_) { this.type = p_259283_; @@ -122,28 +108,18 @@ return this; } - public CreativeModeTab.Builder backgroundSuffix(String p_259981_) { -- this.backgroundSuffix = p_259981_; -+ return withBackgroundLocation(new net.minecraft.resources.ResourceLocation("textures/gui/container/creative_inventory/tab_" + p_259981_)); -+ } -+ -+ /** -+ * Sets the location of the tab background. -+ */ -+ public CreativeModeTab.Builder withBackgroundLocation(net.minecraft.resources.ResourceLocation background) { -+ this.backgroundLocation = background; -+ return this; -+ } -+ +@@ -182,13 +_,78 @@ + return this; + } + + /** + * Gives this tab a search bar. + *

Note that, if using a custom {@link #withBackgroundLocation(net.minecraft.resources.ResourceLocation) background image}, you will need to make sure that your image contains the input box and the scroll bar.

+ */ + public CreativeModeTab.Builder withSearchBar() { + this.hasSearchBar = true; -+ if (this.backgroundLocation == null) { -+ return this.backgroundSuffix("item_search.png"); -+ } ++ if (this.backgroundTexture == null) ++ return this.backgroundTexture(createTextureLocation("item_seach")); + return this; + } + @@ -179,13 +155,13 @@ + + /** Define tabs that should come before this tab. This tab will be placed after the {@code tabs}. **/ + public CreativeModeTab.Builder withTabsBefore(net.minecraft.resources.ResourceLocation... tabs) { -+ this.tabsBefore.addAll(List.of(tabs)); ++ this.tabsBefore.addAll(java.util.List.of(tabs)); + return this; + } + + /** Define tabs that should come after this tab. This tab will be placed before the {@code tabs}.**/ + public CreativeModeTab.Builder withTabsAfter(net.minecraft.resources.ResourceLocation... tabs) { -+ this.tabsAfter.addAll(List.of(tabs)); ++ this.tabsAfter.addAll(java.util.List.of(tabs)); + return this; + } + @@ -200,10 +176,10 @@ + @SafeVarargs + public final CreativeModeTab.Builder withTabsAfter(net.minecraft.resources.ResourceKey... tabs) { + java.util.stream.Stream.of(tabs).map(net.minecraft.resources.ResourceKey::location).forEach(this.tabsAfter::add); - return this; - } - -@@ -196,13 +_,12 @@ ++ return this; ++ } ++ + public CreativeModeTab build() { if ((this.type == CreativeModeTab.Type.HOTBAR || this.type == CreativeModeTab.Type.INVENTORY) && this.displayItemsGenerator != EMPTY_GENERATOR) { throw new IllegalStateException("Special tabs can't have display items"); } else { @@ -214,8 +190,3 @@ creativemodetab.alignedRight = this.alignedRight; creativemodetab.showTitle = this.showTitle; creativemodetab.canScroll = this.canScroll; - creativemodetab.backgroundSuffix = this.backgroundSuffix; -+ creativemodetab.backgroundLocation = this.backgroundLocation != null ? this.backgroundLocation : new net.minecraft.resources.ResourceLocation("textures/gui/container/creative_inventory/tab_" + this.backgroundSuffix); - return creativemodetab; - } - } diff --git a/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch b/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch index cd4a9636eb..e2e42d0d9a 100644 --- a/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/CrossbowItem.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java -@@ -169,6 +_,7 @@ +@@ -182,6 +_,7 @@ Level p_40888_, LivingEntity p_40889_, InteractionHand p_40890_, ItemStack p_40891_, float p_40892_, float p_40893_, @Nullable LivingEntity p_329478_ ) { - if (!p_40888_.isClientSide()) { + if (p_40888_ instanceof ServerLevel serverlevel) { + if (p_40889_ instanceof Player player && net.minecraftforge.event.ForgeEventFactory.onArrowLoose(p_40891_, p_40889_.level(), player, 1, true) < 0) return; ChargedProjectiles chargedprojectiles = p_40891_.set(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY); if (chargedprojectiles != null && !chargedprojectiles.isEmpty()) { diff --git a/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch b/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch index 9f292dcd90..99d1a2f6ad 100644 --- a/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch +++ b/patches/minecraft/net/minecraft/world/item/DyeColor.java.patch @@ -1,22 +1,22 @@ --- a/net/minecraft/world/item/DyeColor.java +++ b/net/minecraft/world/item/DyeColor.java -@@ -43,6 +_,7 @@ - private final float[] textureDiffuseColors; +@@ -44,6 +_,7 @@ + private final int textureDiffuseColor; private final int fireworkColor; private final int textColor; + private final net.minecraft.tags.TagKey tag; private DyeColor(final int p_41046_, final String p_41047_, final int p_41048_, final MapColor p_285297_, final int p_41050_, final int p_41051_) { this.id = p_41046_; -@@ -54,6 +_,7 @@ - int k = (p_41048_ & 0xFF) >> 0; - this.textureDiffuseColors = new float[]{(float)i / 255.0F, (float)j / 255.0F, (float)k / 255.0F}; +@@ -52,6 +_,7 @@ + this.textColor = p_41051_; + this.textureDiffuseColor = FastColor.ARGB32.opaque(p_41048_); this.fireworkColor = p_41050_; -+ this.tag = net.minecraft.tags.ItemTags.create(new net.minecraft.resources.ResourceLocation("forge", "dyes/" + p_41047_)); ++ this.tag = net.minecraft.tags.ItemTags.create("forge", "dyes/" + p_41047_); } public int getId() { -@@ -104,5 +_,14 @@ +@@ -102,5 +_,14 @@ @Override public String getSerializedName() { return this.name; diff --git a/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch b/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch index 08ed0c4bd5..6b37f06006 100644 --- a/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/FishingRodItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/FishingRodItem.java +++ b/net/minecraft/world/item/FishingRodItem.java -@@ -23,7 +_,11 @@ +@@ -24,7 +_,11 @@ if (p_41291_.fishing != null) { if (!p_41290_.isClientSide) { int i = p_41291_.fishing.retrieve(itemstack); @@ -12,7 +12,7 @@ } p_41290_.playSound( -@@ -64,5 +_,10 @@ +@@ -65,5 +_,10 @@ @Override public int getEnchantmentValue() { return 1; diff --git a/patches/minecraft/net/minecraft/world/item/Item.java.patch b/patches/minecraft/net/minecraft/world/item/Item.java.patch index 16004b1a8d..ae659c31d6 100644 --- a/patches/minecraft/net/minecraft/world/item/Item.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Item.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/Item.java +++ b/net/minecraft/world/item/Item.java -@@ -54,9 +_,12 @@ +@@ -56,9 +_,12 @@ import net.minecraft.world.phys.Vec3; import org.slf4j.Logger; @@ -12,10 +12,10 @@ + public static final net.minecraft.network.codec.StreamCodec> STREAM_CODEC = + net.minecraft.network.codec.ByteBufCodecs.holderRegistry(net.minecraft.core.registries.Registries.ITEM); + public static final Map BY_BLOCK = net.minecraftforge.registries.GameData.ItemCallbacks.getBlockItemMap(); - public static final UUID BASE_ATTACK_DAMAGE_UUID = UUID.fromString("CB3F55D3-645C-4F38-A497-9C13A33DB5CF"); - public static final UUID BASE_ATTACK_SPEED_UUID = UUID.fromString("FA233E1C-4180-4865-B01B-BCCE9785ACA3"); + public static final ResourceLocation BASE_ATTACK_DAMAGE_ID = ResourceLocation.withDefaultNamespace("base_attack_damage"); + public static final ResourceLocation BASE_ATTACK_SPEED_ID = ResourceLocation.withDefaultNamespace("base_attack_speed"); public static final int DEFAULT_MAX_STACK_SIZE = 64; -@@ -93,6 +_,7 @@ +@@ -95,6 +_,7 @@ LOGGER.error("Item classes should end with Item and {} doesn't.", s); } } @@ -23,7 +23,7 @@ } @Deprecated -@@ -100,17 +_,25 @@ +@@ -102,17 +_,25 @@ return this.builtInRegistryHolder; } @@ -51,7 +51,7 @@ public void onDestroyed(ItemEntity p_150887_) { } -@@ -232,10 +_,12 @@ +@@ -238,10 +_,12 @@ } @Nullable @@ -64,7 +64,7 @@ public boolean hasCraftingRemainingItem() { return this.craftingRemainingItem != null; } -@@ -291,6 +_,7 @@ +@@ -297,6 +_,7 @@ return p_41436_.clip(new ClipContext(vec3, vec31, ClipContext.Block.OUTLINE, p_41438_, p_41437_)); } @@ -72,7 +72,7 @@ public int getEnchantmentValue() { return 0; } -@@ -332,6 +_,30 @@ +@@ -338,6 +_,30 @@ public FeatureFlagSet requiredFeatures() { return this.requiredFeatures; } diff --git a/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch b/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch index 12015bd19e..c698d08e3e 100644 --- a/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ItemStack.java.patch @@ -9,7 +9,7 @@ public static final Codec> ITEM_NON_AIR_CODEC = BuiltInRegistries.ITEM .holderByNameCodec() .validate( -@@ -335,13 +_,22 @@ +@@ -347,13 +_,22 @@ } public InteractionResult useOn(UseOnContext p_41662_) { @@ -33,18 +33,22 @@ if (player != null && interactionresult.indicateItemUse()) { player.awardStat(Stats.ITEM_USED.get(item)); } -@@ -447,6 +_,10 @@ - } - - this.hurtAndBreak(p_41623_, p_41624_.getRandom(), p_41624_ instanceof ServerPlayer serverplayer ? serverplayer : null, () -> { -+ if (p_41624_ instanceof Player player) { -+ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, this, p_335324_); -+ player.stopUsingItem(); // Forge: fix MC-168573 +@@ -453,7 +_,13 @@ + p_41623_, + serverlevel, + p_41624_ instanceof ServerPlayer serverplayer ? serverplayer : null, +- p_341563_ -> p_41624_.onEquippedItemBroken(p_341563_, p_335324_) ++ p_341563_ -> { ++ if (p_41624_ instanceof Player player) { ++ net.minecraftforge.event.ForgeEventFactory.onPlayerDestroyItem(player, this, p_335324_); ++ player.stopUsingItem(); // Forge: fix MC-168573 ++ } ++ p_41624_.onEquippedItemBroken(p_341563_, p_335324_); + } - p_41624_.broadcastBreakEvent(p_335324_); - Item item = this.getItem(); - this.shrink(1); -@@ -757,6 +_,8 @@ + ); + } + } +@@ -780,6 +_,8 @@ list.add(DISABLED_ITEM_TOOLTIP); } @@ -53,7 +57,7 @@ return list; } } -@@ -970,6 +_,7 @@ +@@ -1011,6 +_,7 @@ this.getItem().onUseTick(p_41732_, p_41733_, this, p_41734_); } diff --git a/patches/minecraft/net/minecraft/world/item/Items.java.patch b/patches/minecraft/net/minecraft/world/item/Items.java.patch index 4d0c9719e9..5d75d9610b 100644 --- a/patches/minecraft/net/minecraft/world/item/Items.java.patch +++ b/patches/minecraft/net/minecraft/world/item/Items.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/Items.java +++ b/net/minecraft/world/item/Items.java -@@ -1807,7 +_,23 @@ +@@ -1814,7 +_,23 @@ } public static Item registerBlock(Block p_252092_, Block... p_248886_) { @@ -25,7 +25,7 @@ for (Block block : p_248886_) { Item.BY_BLOCK.put(block, blockitem); -@@ -1833,10 +_,6 @@ +@@ -1840,10 +_,6 @@ } public static Item registerItem(ResourceKey p_281502_, Item p_283159_) { diff --git a/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch b/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch index d0c3278e64..dc120334cf 100644 --- a/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ProjectileWeaponItem.java.patch @@ -1,26 +1,26 @@ --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java -@@ -85,6 +_,7 @@ +@@ -88,6 +_,7 @@ protected Projectile createProjectile(Level p_333069_, LivingEntity p_334736_, ItemStack p_333680_, ItemStack p_329118_, boolean p_336242_) { ArrowItem arrowitem = p_329118_.getItem() instanceof ArrowItem arrowitem1 ? arrowitem1 : (ArrowItem)Items.ARROW; - AbstractArrow abstractarrow = arrowitem.createArrow(p_333069_, p_329118_, p_334736_); + AbstractArrow abstractarrow = arrowitem.createArrow(p_333069_, p_329118_, p_334736_, p_333680_); + abstractarrow = customArrow(abstractarrow); if (p_336242_) { abstractarrow.setCritArrow(true); } -@@ -123,9 +_,10 @@ - int j = i == 0 ? 1 : 3; - List list = new ArrayList<>(j); - ItemStack itemstack = p_328618_.copy(); +@@ -102,9 +_,10 @@ + int i = p_335616_.level() instanceof ServerLevel serverlevel ? EnchantmentHelper.processProjectileCount(serverlevel, p_329054_, p_335616_, 1) : 1; + List list = new ArrayList<>(i); + ItemStack itemstack1 = p_328618_.copy(); + boolean infinite = p_328618_.getItem() instanceof ArrowItem arrow && arrow.isInfinite(p_328618_, p_329054_, p_335616_); - for (int k = 0; k < j; k++) { -- list.add(useAmmo(p_329054_, k == 0 ? p_328618_ : itemstack, p_335616_, k > 0)); -+ list.add(useAmmo(p_329054_, k == 0 ? p_328618_ : itemstack, p_335616_, k > 0 || infinite)); - } - - return list; -@@ -146,5 +_,9 @@ + for (int j = 0; j < i; j++) { +- ItemStack itemstack = useAmmo(p_329054_, j == 0 ? p_328618_ : itemstack1, p_335616_, j > 0); ++ ItemStack itemstack = useAmmo(p_329054_, j == 0 ? p_328618_ : itemstack1, p_335616_, j > 0 || infinite); + if (!itemstack.isEmpty()) { + list.add(itemstack); + } +@@ -132,5 +_,9 @@ return itemstack; } diff --git a/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch b/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch deleted file mode 100644 index a3065efbd0..0000000000 --- a/patches/minecraft/net/minecraft/world/item/RecordItem.java.patch +++ /dev/null @@ -1,53 +0,0 @@ ---- a/net/minecraft/world/item/RecordItem.java -+++ b/net/minecraft/world/item/RecordItem.java -@@ -21,17 +_,41 @@ - import net.minecraft.world.level.gameevent.GameEvent; - - public class RecordItem extends Item { -+ @Deprecated // Forge: refer to WorldRender#playRecord. Modders: there's no need to reflectively modify this map! - private static final Map BY_NAME = Maps.newHashMap(); - private final int analogOutput; -+ @Deprecated // Forge: refer to soundSupplier - private final SoundEvent sound; - private final int lengthInTicks; -+ private final java.util.function.Supplier soundSupplier; - -+ /** @deprecated Forge: Use the constructor that takes a supplier instead */ - public RecordItem(int p_239614_, SoundEvent p_239615_, Item.Properties p_239616_, int p_239617_) { - super(p_239616_); - this.analogOutput = p_239614_; - this.sound = p_239615_; - this.lengthInTicks = p_239617_ * 20; - BY_NAME.put(this.sound, this); -+ this.soundSupplier = net.minecraftforge.registries.ForgeRegistries.SOUND_EVENTS.getDelegateOrThrow(this.sound); -+ } -+ -+ /** -+ * For mod use, allows to create a music disc without having to create a new -+ * SoundEvent before their registry event is fired. -+ * -+ * @param comparatorValue The value this music disc should output on the comparator. Must be between 0 and 15. -+ * @param soundSupplier A supplier that provides the sound that should be played. Use a -+ * {@link net.minecraftforge.registries.RegistryObject} or a -+ * {@link net.minecraft.core.Holder} for this parameter. -+ * @param builder A set of {@link Item.Properties} that describe this item. -+ * @param lengthInTicks The length of the music disc track in ticks. -+ */ -+ public RecordItem(int comparatorValue, java.util.function.Supplier soundSupplier, Item.Properties builder, int lengthInTicks) { -+ super(builder); -+ this.analogOutput = comparatorValue; -+ this.sound = null; -+ this.soundSupplier = soundSupplier; -+ this.lengthInTicks = lengthInTicks; - } - - @Override -@@ -79,7 +_,7 @@ - } - - public SoundEvent getSound() { -- return this.sound; -+ return this.soundSupplier.get(); - } - - public int getLengthInTicks() { diff --git a/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch b/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch index 7c6bee2ef2..390be61a13 100644 --- a/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ShearsItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/ShearsItem.java +++ b/net/minecraft/world/item/ShearsItem.java -@@ -79,4 +_,31 @@ +@@ -79,4 +_,32 @@ return super.useOn(p_186371_); } @@ -14,7 +14,8 @@ + + BlockPos pos = BlockPos.containing(entity.position()); + if (target.isShearable(stack, entity.level(), pos)) { -+ var drops = target.onSheared(playerIn, stack, entity.level(), pos, stack.getEnchantments().getLevel(net.minecraft.world.item.enchantment.Enchantments.FORTUNE)); ++ var key = net.minecraft.world.item.enchantment.Enchantments.FORTUNE; ++ var drops = target.onSheared(playerIn, stack, entity.level(), pos, net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(entity.level().holderLookup(key.registryKey()).getOrThrow(key), stack)); + var rand = new java.util.Random(); + drops.forEach(d -> { + var ent = entity.spawnAtLocation(d, 1.0F); diff --git a/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch b/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch index 6994bf4701..40a73be607 100644 --- a/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/ShieldItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/ShieldItem.java +++ b/net/minecraft/world/item/ShieldItem.java -@@ -57,4 +_,9 @@ +@@ -58,4 +_,9 @@ public EquipmentSlot getEquipmentSlot() { return EquipmentSlot.OFFHAND; } diff --git a/patches/minecraft/net/minecraft/world/item/SwordItem.java.patch b/patches/minecraft/net/minecraft/world/item/SwordItem.java.patch index aa17c66570..f87cf2f733 100644 --- a/patches/minecraft/net/minecraft/world/item/SwordItem.java.patch +++ b/patches/minecraft/net/minecraft/world/item/SwordItem.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/item/SwordItem.java +++ b/net/minecraft/world/item/SwordItem.java -@@ -50,4 +_,9 @@ - p_43278_.hurtAndBreak(1, p_43280_, EquipmentSlot.MAINHAND); - return true; +@@ -52,4 +_,9 @@ + public void postHurtEnemy(ItemStack p_342189_, LivingEntity p_344347_, LivingEntity p_343888_) { + p_342189_.hurtAndBreak(1, p_343888_, EquipmentSlot.MAINHAND); } + + @Override diff --git a/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch index ba676d13ae..c76d059412 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java +++ b/net/minecraft/world/item/crafting/BannerDuplicateRecipe.java -@@ -80,8 +_,8 @@ +@@ -79,8 +_,8 @@ for (int i = 0; i < nonnulllist.size(); i++) { - ItemStack itemstack = p_43791_.getItem(i); + ItemStack itemstack = p_342084_.getItem(i); if (!itemstack.isEmpty()) { - if (itemstack.getItem().hasCraftingRemainingItem()) { - nonnulllist.set(i, new ItemStack(itemstack.getItem().getCraftingRemainingItem())); diff --git a/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch index 8644f5f583..b21d279457 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/BookCloningRecipe.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/item/crafting/BookCloningRecipe.java +++ b/net/minecraft/world/item/crafting/BookCloningRecipe.java -@@ -84,8 +_,8 @@ +@@ -83,8 +_,8 @@ for (int i = 0; i < nonnulllist.size(); i++) { - ItemStack itemstack = p_43820_.getItem(i); + ItemStack itemstack = p_344901_.getItem(i); - if (itemstack.getItem().hasCraftingRemainingItem()) { - nonnulllist.set(i, new ItemStack(itemstack.getItem().getCraftingRemainingItem())); + if (itemstack.hasCraftingRemainingItem()) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/Recipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/Recipe.java.patch index a2c0e1f496..8865bea2c7 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/Recipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/Recipe.java.patch @@ -1,18 +1,18 @@ --- a/net/minecraft/world/item/crafting/Recipe.java +++ b/net/minecraft/world/item/crafting/Recipe.java -@@ -31,9 +_,9 @@ - NonNullList nonnulllist = NonNullList.withSize(p_44004_.getContainerSize(), ItemStack.EMPTY); +@@ -30,9 +_,9 @@ + NonNullList nonnulllist = NonNullList.withSize(p_344178_.size(), ItemStack.EMPTY); for (int i = 0; i < nonnulllist.size(); i++) { -- Item item = p_44004_.getItem(i).getItem(); -+ ItemStack item = p_44004_.getItem(i); +- Item item = p_344178_.getItem(i).getItem(); ++ ItemStack item = p_344178_.getItem(i); if (item.hasCraftingRemainingItem()) { - nonnulllist.set(i, new ItemStack(item.getCraftingRemainingItem())); + nonnulllist.set(i, item.getCraftingRemainingItem()); } } -@@ -66,6 +_,6 @@ +@@ -65,6 +_,6 @@ default boolean isIncomplete() { NonNullList nonnulllist = this.getIngredients(); diff --git a/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch index 054a666e86..6f8152b7aa 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/RecipeManager.java.patch @@ -12,7 +12,7 @@ + } + + public RecipeManager(HolderLookup.Provider p_330459_, net.minecraftforge.common.crafting.conditions.ICondition.IContext context) { - super(GSON, "recipes"); + super(GSON, Registries.elementsDirPath(Registries.RECIPE)); this.registries = p_330459_; + this.context = context; } diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch index 032c041a84..50ef9bc915 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipe.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/crafting/ShapedRecipe.java +++ b/net/minecraft/world/item/crafting/ShapedRecipe.java -@@ -12,7 +_,19 @@ +@@ -11,7 +_,19 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -public class ShapedRecipe implements CraftingRecipe { -+public class ShapedRecipe implements CraftingRecipe, net.minecraftforge.common.crafting.IShapedRecipe { ++public class ShapedRecipe implements CraftingRecipe, net.minecraftforge.common.crafting.IShapedRecipe { + static int MAX_WIDTH = 3; + static int MAX_HEIGHT = 3; + /** @@ -21,7 +21,7 @@ final ShapedRecipePattern pattern; final ItemStack result; final String group; -@@ -83,9 +_,19 @@ +@@ -82,9 +_,19 @@ } @Override diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch index c184711dd9..b894fe7240 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapedRecipePattern.java.patch @@ -1,7 +1,13 @@ --- a/net/minecraft/world/item/crafting/ShapedRecipePattern.java +++ b/net/minecraft/world/item/crafting/ShapedRecipePattern.java -@@ -179,16 +_,16 @@ +@@ -212,18 +_,22 @@ + return this.ingredients; + } ++ public Optional data() { ++ return this.data; ++ } ++ public static record Data(Map key, List pattern) { private static final Codec> PATTERN_CODEC = Codec.STRING.listOf().comapFlatMap(p_311191_ -> { - if (p_311191_.size() > 3) { @@ -11,7 +17,7 @@ } else if (p_311191_.isEmpty()) { return DataResult.error(() -> "Invalid pattern: empty pattern not allowed"); } else { - int i = p_311191_.get(0).length(); + int i = p_311191_.getFirst().length(); for (String s : p_311191_) { - if (s.length() > 3) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch index 59cf3279c2..afe043f6ba 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShapelessRecipe.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/net/minecraft/world/item/crafting/ShapelessRecipe.java -@@ -20,12 +_,14 @@ +@@ -18,12 +_,14 @@ final CraftingBookCategory category; final ItemStack result; final NonNullList ingredients; @@ -15,29 +15,23 @@ } @Override -@@ -55,17 +_,20 @@ - - public boolean matches(CraftingContainer p_44262_, Level p_44263_) { - StackedContents stackedcontents = new StackedContents(); -+ var inputs = new java.util.ArrayList(); - int i = 0; - - for (int j = 0; j < p_44262_.getContainerSize(); j++) { - ItemStack itemstack = p_44262_.getItem(j); - if (!itemstack.isEmpty()) { - i++; -+ if (isSimple) - stackedcontents.accountStack(itemstack, 1); -+ else inputs.add(itemstack); - } +@@ -54,10 +_,12 @@ + public boolean matches(CraftingInput p_345423_, Level p_44263_) { + if (p_345423_.ingredientCount() != this.ingredients.size()) { + return false; ++ } else if (p_345423_.size() == 1 && this.ingredients.size() == 1) { ++ return this.ingredients.getFirst().test(p_345423_.getItem(0)); ++ } else if (!isSimple) { ++ return net.minecraftforge.common.util.RecipeMatcher.findMatches(p_345423_.items(), this.ingredients) != null; + } else { +- return p_345423_.size() == 1 && this.ingredients.size() == 1 +- ? this.ingredients.getFirst().test(p_345423_.getItem(0)) +- : p_345423_.stackedContents().canCraft(this, null); ++ return p_345423_.stackedContents().canCraft(this, null); } - -- return i == this.ingredients.size() && stackedcontents.canCraft(this, null); -+ return i == this.ingredients.size() && (isSimple ? stackedcontents.canCraft(this, null) : net.minecraftforge.common.util.RecipeMatcher.findMatches(inputs, this.ingredients) != null); } - public ItemStack assemble(CraftingContainer p_44260_, HolderLookup.Provider p_334364_) { -@@ -92,7 +_,7 @@ +@@ -85,7 +_,7 @@ if (aingredient.length == 0) { return DataResult.error(() -> "No ingredients for shapeless recipe"); } else { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/ShulkerBoxColoring.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/ShulkerBoxColoring.java.patch index a94126fb54..c7fc575b40 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/ShulkerBoxColoring.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/ShulkerBoxColoring.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/crafting/ShulkerBoxColoring.java +++ b/net/minecraft/world/item/crafting/ShulkerBoxColoring.java -@@ -25,7 +_,7 @@ +@@ -24,7 +_,7 @@ if (Block.byItem(itemstack.getItem()) instanceof ShulkerBoxBlock) { i++; } else { @@ -9,16 +9,16 @@ return false; } -@@ -43,7 +_,7 @@ +@@ -42,7 +_,7 @@ - public ItemStack assemble(CraftingContainer p_44322_, HolderLookup.Provider p_336251_) { + public ItemStack assemble(CraftingInput p_343576_, HolderLookup.Provider p_336251_) { ItemStack itemstack = ItemStack.EMPTY; - DyeItem dyeitem = (DyeItem)Items.WHITE_DYE; + var dyecolor = net.minecraft.world.item.DyeColor.WHITE; - for (int i = 0; i < p_44322_.getContainerSize(); i++) { - ItemStack itemstack1 = p_44322_.getItem(i); -@@ -52,12 +_,15 @@ + for (int i = 0; i < p_343576_.size(); i++) { + ItemStack itemstack1 = p_343576_.getItem(i); +@@ -51,12 +_,15 @@ if (Block.byItem(item) instanceof ShulkerBoxBlock) { itemstack = itemstack1; } else if (item instanceof DyeItem) { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/SmithingTransformRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/SmithingTransformRecipe.java.patch index 686d0f671c..d883180d56 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/SmithingTransformRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/SmithingTransformRecipe.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/crafting/SmithingTransformRecipe.java +++ b/net/minecraft/world/item/crafting/SmithingTransformRecipe.java -@@ -63,7 +_,7 @@ +@@ -60,7 +_,7 @@ @Override public boolean isIncomplete() { diff --git a/patches/minecraft/net/minecraft/world/item/crafting/SmithingTrimRecipe.java.patch b/patches/minecraft/net/minecraft/world/item/crafting/SmithingTrimRecipe.java.patch index 1069cf5ec3..8dff334147 100644 --- a/patches/minecraft/net/minecraft/world/item/crafting/SmithingTrimRecipe.java.patch +++ b/patches/minecraft/net/minecraft/world/item/crafting/SmithingTrimRecipe.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/crafting/SmithingTrimRecipe.java +++ b/net/minecraft/world/item/crafting/SmithingTrimRecipe.java -@@ -92,7 +_,7 @@ +@@ -89,7 +_,7 @@ @Override public boolean isIncomplete() { diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/Enchantment.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/Enchantment.java.patch deleted file mode 100644 index dafbcdc4b5..0000000000 --- a/patches/minecraft/net/minecraft/world/item/enchantment/Enchantment.java.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/net/minecraft/world/item/enchantment/Enchantment.java -+++ b/net/minecraft/world/item/enchantment/Enchantment.java -@@ -23,7 +_,7 @@ - import net.minecraft.world.item.Item; - import net.minecraft.world.item.ItemStack; - --public class Enchantment implements FeatureElement { -+public class Enchantment implements FeatureElement, net.minecraftforge.common.extensions.IForgeEnchantment { - private final Enchantment.EnchantmentDefinition definition; - @Nullable - protected String descriptionId; -@@ -131,6 +_,7 @@ - return 0; - } - -+ @Deprecated // Forge: Use ItemStack aware version in IForgeEnchantment - public float getDamageBonus(int p_44682_, @Nullable EntityType p_331633_) { - return 0.0F; - } diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch index 791ec9c1d7..2d6839caaa 100644 --- a/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch +++ b/patches/minecraft/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch @@ -1,31 +1,6 @@ --- a/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -99,7 +_,7 @@ - - public static float getDamageBonus(ItemStack p_44834_, @Nullable EntityType p_331963_) { - MutableFloat mutablefloat = new MutableFloat(); -- runIterationOnItem((p_327223_, p_327224_) -> mutablefloat.add(p_327223_.getDamageBonus(p_327224_, p_331963_)), p_44834_); -+ runIterationOnItem((p_327223_, p_327224_) -> mutablefloat.add(p_327223_.getDamageBonus(p_327224_, p_331963_, p_44834_)), p_44834_); - return mutablefloat.floatValue(); - } - -@@ -125,6 +_,7 @@ - runIterationOnInventory(enchantmenthelper$enchantmentvisitor, p_44824_.getAllSlots()); - } - -+ if(false) // Forge: Fix MC-248272 - if (p_44825_ instanceof Player) { - runIterationOnItem(enchantmenthelper$enchantmentvisitor, p_44824_.getMainHandItem()); - } -@@ -136,6 +_,7 @@ - runIterationOnInventory(enchantmenthelper$enchantmentvisitor, p_44897_.getAllSlots()); - } - -+ if(false) // Forge: Fix MC-248272 - if (p_44897_ instanceof Player) { - runIterationOnItem(enchantmenthelper$enchantmentvisitor, p_44897_.getMainHandItem()); - } -@@ -263,7 +_,7 @@ +@@ -462,7 +_,7 @@ public static int getEnchantmentCost(RandomSource p_220288_, int p_220289_, int p_220290_, ItemStack p_220291_) { Item item = p_220291_.getItem(); @@ -34,8 +9,8 @@ if (i <= 0) { return 0; } else { -@@ -296,7 +_,7 @@ - public static List selectEnchantment(FeatureFlagSet p_329284_, RandomSource p_220298_, ItemStack p_220299_, int p_220300_, boolean p_220301_) { +@@ -507,7 +_,7 @@ + public static List selectEnchantment(RandomSource p_220298_, ItemStack p_220299_, int p_220300_, Stream> p_342119_) { List list = Lists.newArrayList(); Item item = p_220299_.getItem(); - int i = item.getEnchantmentValue(); @@ -43,12 +18,12 @@ if (i <= 0) { return list; } else { -@@ -353,7 +_,7 @@ - if (enchantment.isEnabled(p_334102_) - && (!enchantment.isTreasureOnly() || p_44820_) - && enchantment.isDiscoverable() -- && (flag || enchantment.canEnchant(p_44819_) && enchantment.isPrimaryItem(p_44819_))) { -+ && ((flag && enchantment.isAllowedOnBooks()) || enchantment.canApplyAtEnchantingTable(p_44819_))) { - for (int i = enchantment.getMaxLevel(); i > enchantment.getMinLevel() - 1; i--) { - if (p_44818_ >= enchantment.getMinCost(i) && p_44818_ <= enchantment.getMaxCost(i)) { - list.add(new EnchantmentInstance(enchantment, i)); +@@ -553,7 +_,7 @@ + public static List getAvailableEnchantmentResults(int p_44818_, ItemStack p_44819_, Stream> p_342857_) { + List list = Lists.newArrayList(); + boolean flag = p_44819_.is(Items.BOOK); +- p_342857_.filter(p_341799_ -> p_341799_.value().isPrimaryItem(p_44819_) || flag).forEach(p_341708_ -> { ++ p_342857_.filter(p_341799_ -> p_44819_.canApplyAtEnchantingTable(p_341799_.value()) || flag).forEach(p_341708_ -> { + Enchantment enchantment = p_341708_.value(); + + for (int i = enchantment.getMaxLevel(); i >= enchantment.getMinLevel(); i--) { diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java.patch deleted file mode 100644 index 624f98fa61..0000000000 --- a/patches/minecraft/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java -+++ b/net/minecraft/world/item/enchantment/FrostWalkerEnchantment.java -@@ -32,8 +_,9 @@ - if (blockstate1.isAir()) { - BlockState blockstate2 = p_45020_.getBlockState(blockpos); - if (blockstate2 == FrostedIceBlock.meltsInto() -- && blockstate.canSurvive(p_45020_, blockpos) -- && p_45020_.isUnobstructed(blockstate, blockpos, CollisionContext.empty())) { -+ && blockstate.canSurvive(p_45020_, blockpos) -+ && p_45020_.isUnobstructed(blockstate, blockpos, CollisionContext.empty()) -+ && !net.minecraftforge.event.ForgeEventFactory.onBlockPlace(p_45019_, net.minecraftforge.common.util.BlockSnapshot.create(p_45020_.dimension(), p_45020_, blockpos), net.minecraft.core.Direction.UP)) { - p_45020_.setBlockAndUpdate(blockpos, blockstate); - p_45020_.scheduleTick(blockpos, Blocks.FROSTED_ICE, Mth.nextInt(p_45019_.getRandom(), 60, 120)); - } diff --git a/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch b/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch new file mode 100644 index 0000000000..6252283e45 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java ++++ b/net/minecraft/world/item/enchantment/effects/ReplaceDisk.java +@@ -48,6 +_,7 @@ + for (BlockPos blockpos1 : BlockPos.betweenClosed(blockpos.offset(-i, 0, -i), blockpos.offset(i, Math.min(j - 1, 0), i))) { + if (blockpos1.distToCenterSqr(p_342913_.x(), (double)blockpos1.getY() + 0.5, p_342913_.z()) < (double)Mth.square(i) + && this.predicate.map(p_343365_ -> p_343365_.test(p_343394_, blockpos1)).orElse(true) ++ && !net.minecraftforge.event.ForgeEventFactory.onBlockPlace(p_343742_, net.minecraftforge.common.util.BlockSnapshot.create(p_343394_.dimension(), p_343394_, blockpos), net.minecraft.core.Direction.UP) + && p_343394_.setBlockAndUpdate(blockpos1, this.blockState.getState(randomsource, blockpos1))) { + this.triggerGameEvent.ifPresent(p_344749_ -> p_343394_.gameEvent(p_343742_, (Holder)p_344749_, blockpos1)); + } diff --git a/patches/minecraft/net/minecraft/world/level/Explosion.java.patch b/patches/minecraft/net/minecraft/world/level/Explosion.java.patch index 60b9c32cbf..13bbb8d724 100644 --- a/patches/minecraft/net/minecraft/world/level/Explosion.java.patch +++ b/patches/minecraft/net/minecraft/world/level/Explosion.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/Explosion.java +++ b/net/minecraft/world/level/Explosion.java -@@ -256,6 +_,7 @@ +@@ -257,6 +_,7 @@ int j2 = Mth.floor(this.z - (double)f2 - 1.0); int j1 = Mth.floor(this.z + (double)f2 + 1.0); List list = this.level.getEntities(this.source, new AABB((double)k1, (double)i2, (double)j2, (double)l1, (double)i1, (double)j1)); diff --git a/patches/minecraft/net/minecraft/world/level/Level.java.patch b/patches/minecraft/net/minecraft/world/level/Level.java.patch index 7cc24ad940..2b94ad2f90 100644 --- a/patches/minecraft/net/minecraft/world/level/Level.java.patch +++ b/patches/minecraft/net/minecraft/world/level/Level.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -75,7 +_,7 @@ +@@ -76,7 +_,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.Scoreboard; -public abstract class Level implements LevelAccessor, AutoCloseable { +public abstract class Level extends net.minecraftforge.common.capabilities.CapabilityProvider implements LevelAccessor, AutoCloseable, net.minecraftforge.common.extensions.IForgeLevel { public static final Codec> RESOURCE_KEY_CODEC = ResourceKey.codec(Registries.DIMENSION); - public static final ResourceKey OVERWORLD = ResourceKey.create(Registries.DIMENSION, new ResourceLocation("overworld")); - public static final ResourceKey NETHER = ResourceKey.create(Registries.DIMENSION, new ResourceLocation("the_nether")); -@@ -113,6 +_,11 @@ + public static final ResourceKey OVERWORLD = ResourceKey.create(Registries.DIMENSION, ResourceLocation.withDefaultNamespace("overworld")); + public static final ResourceKey NETHER = ResourceKey.create(Registries.DIMENSION, ResourceLocation.withDefaultNamespace("the_nether")); +@@ -114,6 +_,11 @@ private final RegistryAccess registryAccess; private final DamageSources damageSources; private long subTickCount; @@ -21,7 +21,7 @@ protected Level( WritableLevelData p_270739_, -@@ -125,6 +_,7 @@ +@@ -126,6 +_,7 @@ long p_270248_, int p_270466_ ) { @@ -29,7 +29,7 @@ this.profiler = p_270692_; this.levelData = p_270739_; this.dimensionTypeRegistration = p_270240_; -@@ -215,11 +_,39 @@ +@@ -216,11 +_,39 @@ } else { LevelChunk levelchunk = this.getChunkAt(p_46605_); Block block = p_46606_.getBlock(); @@ -69,7 +69,7 @@ if (blockstate1 == p_46606_) { if (blockstate != blockstate1) { this.setBlocksDirty(p_46605_, blockstate, blockstate1); -@@ -246,9 +_,8 @@ +@@ -247,9 +_,8 @@ } this.onBlockStateChange(p_46605_, blockstate, blockstate1); @@ -80,7 +80,7 @@ } } } -@@ -300,6 +_,7 @@ +@@ -301,6 +_,7 @@ } public void updateNeighborsAt(BlockPos p_46673_, Block p_46674_) { @@ -88,7 +88,7 @@ } public void updateNeighborsAtExceptFromFacing(BlockPos p_46591_, Block p_46592_, Direction p_46593_) { -@@ -474,10 +_,30 @@ +@@ -488,10 +_,30 @@ (this.tickingBlockEntities ? this.pendingBlockEntityTickers : this.blockEntityTickers).add(p_151526_); } @@ -119,7 +119,7 @@ if (!this.pendingBlockEntityTickers.isEmpty()) { this.blockEntityTickers.addAll(this.pendingBlockEntityTickers); this.pendingBlockEntityTickers.clear(); -@@ -501,12 +_,19 @@ +@@ -515,12 +_,19 @@ public void guardEntityTick(Consumer p_46654_, T p_46655_) { try { @@ -130,7 +130,7 @@ CrashReportCategory crashreportcategory = crashreport.addCategory("Entity being ticked"); p_46655_.fillCrashReportCategory(crashreportcategory); + if (net.minecraftforge.common.ForgeConfig.SERVER.removeErroringEntities.get()) { -+ com.mojang.logging.LogUtils.getLogger().error("{}", crashreport.getFriendlyReport()); ++ com.mojang.logging.LogUtils.getLogger().error("{}", crashreport.getFriendlyReport(net.minecraft.ReportType.CRASH)); + p_46655_.discard(); + } else throw new ReportedException(crashreport); @@ -139,16 +139,16 @@ } } -@@ -655,7 +_,7 @@ +@@ -669,7 +_,7 @@ Explosion.BlockInteraction explosion$blockinteraction = switch (p_310628_) { case NONE -> Explosion.BlockInteraction.KEEP; case BLOCK -> this.getDestroyType(GameRules.RULE_BLOCK_EXPLOSION_DROP_DECAY); - case MOB -> this.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) ? this.getDestroyType(GameRules.RULE_MOB_EXPLOSION_DROP_DECAY) : Explosion.BlockInteraction.KEEP; + case MOB -> net.minecraftforge.event.ForgeEventFactory.getMobGriefingEvent(this, p_312521_) ? this.getDestroyType(GameRules.RULE_MOB_EXPLOSION_DROP_DECAY) : Explosion.BlockInteraction.KEEP; case TNT -> this.getDestroyType(GameRules.RULE_TNT_EXPLOSION_DROP_DECAY); - case BLOW -> Explosion.BlockInteraction.TRIGGER_BLOCK; + case TRIGGER -> Explosion.BlockInteraction.TRIGGER_BLOCK; }; -@@ -674,6 +_,9 @@ +@@ -688,6 +_,9 @@ p_311434_, p_328498_ ); @@ -158,7 +158,7 @@ explosion.explode(); explosion.finalizeExplosion(p_309655_); return explosion; -@@ -708,6 +_,7 @@ +@@ -722,6 +_,7 @@ if (!this.isOutsideBuildHeight(p_46748_)) { this.getChunkAt(p_46748_).removeBlockEntity(p_46748_); } @@ -166,7 +166,7 @@ } public boolean isLoaded(BlockPos p_46750_) { -@@ -784,8 +_,8 @@ +@@ -798,8 +_,8 @@ list.add(p_151522_); } @@ -177,7 +177,7 @@ if (p_151522_ != p_46536_ && p_46538_.test(enderdragonpart)) { list.add(enderdragonpart); } -@@ -818,8 +_,8 @@ +@@ -832,8 +_,8 @@ } } @@ -188,7 +188,7 @@ T t = p_261885_.tryCast(enderdragonpart); if (t != null && p_261688_.test(t)) { p_262071_.add(t); -@@ -958,16 +_,15 @@ +@@ -972,16 +_,15 @@ public abstract Scoreboard getScoreboard(); public void updateNeighbourForOutputSignal(BlockPos p_46718_, Block p_46719_) { @@ -209,7 +209,7 @@ this.neighborChanged(blockstate, blockpos, p_46719_, p_46718_, false); } } -@@ -1078,6 +_,20 @@ +@@ -1092,6 +_,20 @@ } public abstract PotionBrewing potionBrewing(); @@ -228,5 +228,5 @@ + return maxEntityRadius; + } - public static enum ExplosionInteraction { - NONE, + public static enum ExplosionInteraction implements StringRepresentable { + NONE("none"), diff --git a/patches/minecraft/net/minecraft/world/level/block/Block.java.patch b/patches/minecraft/net/minecraft/world/level/block/Block.java.patch index b4a64255cc..f7a0053cdf 100644 --- a/patches/minecraft/net/minecraft/world/level/block/Block.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/Block.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java -@@ -62,11 +_,12 @@ +@@ -61,11 +_,12 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; @@ -15,7 +15,7 @@ private static final LoadingCache SHAPE_FULL_BLOCK_CACHE = CacheBuilder.newBuilder() .maximumSize(512L) .weakKeys() -@@ -191,6 +_,7 @@ +@@ -190,6 +_,7 @@ LOGGER.error("Block classes should end with Block and {} doesn't.", s); } } @@ -23,7 +23,7 @@ } public static boolean isExceptionForConnection(BlockState p_152464_) { -@@ -207,6 +_,8 @@ +@@ -206,6 +_,8 @@ BlockState blockstate = p_152446_.getBlockState(p_152449_); if (p_152445_.skipRendering(blockstate, p_152448_)) { return false; @@ -32,7 +32,7 @@ } else if (blockstate.canOcclude()) { Block.BlockStatePairKey block$blockstatepairkey = new Block.BlockStatePairKey(p_152445_, blockstate, p_152448_); Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap = OCCLUSION_CACHE.get(); -@@ -295,9 +_,13 @@ +@@ -294,9 +_,13 @@ public static void dropResources( BlockState p_49882_, Level p_49883_, BlockPos p_49884_, @Nullable BlockEntity p_49885_, @Nullable Entity p_49886_, ItemStack p_49887_ ) { @@ -47,7 +47,7 @@ } } -@@ -325,7 +_,7 @@ +@@ -324,7 +_,7 @@ } private static void popResource(Level p_152441_, Supplier p_152442_, ItemStack p_152443_) { @@ -56,7 +56,7 @@ ItemEntity itementity = p_152442_.get(); itementity.setDefaultPickUpDelay(); p_152441_.addFreshEntity(itementity); -@@ -333,11 +_,12 @@ +@@ -332,11 +_,12 @@ } public void popExperience(ServerLevel p_49806_, BlockPos p_49807_, int p_49808_) { @@ -70,7 +70,7 @@ public float getExplosionResistance() { return this.explosionResistance; } -@@ -356,7 +_,8 @@ +@@ -355,7 +_,8 @@ public void playerDestroy(Level p_49827_, Player p_49828_, BlockPos p_49829_, BlockState p_49830_, @Nullable BlockEntity p_49831_, ItemStack p_49832_) { p_49828_.awardStat(Stats.BLOCK_MINED.get(this)); p_49828_.causeFoodExhaustion(0.005F); @@ -80,7 +80,7 @@ } public void setPlacedBy(Level p_49847_, BlockPos p_49848_, BlockState p_49849_, @Nullable LivingEntity p_49850_, ItemStack p_49851_) { -@@ -386,6 +_,7 @@ +@@ -385,6 +_,7 @@ p_49822_.setDeltaMovement(p_49822_.getDeltaMovement().multiply(1.0, 0.0, 1.0)); } @@ -88,7 +88,7 @@ public ItemStack getCloneItemStack(LevelReader p_312699_, BlockPos p_49824_, BlockState p_49825_) { return new ItemStack(this); } -@@ -460,7 +_,7 @@ +@@ -459,7 +_,7 @@ this.item = Item.byBlock(this); } @@ -97,7 +97,7 @@ } public boolean hasDynamicShape() { -@@ -528,5 +_,74 @@ +@@ -525,5 +_,74 @@ i = 31 * i + this.second.hashCode(); return 31 * i + this.direction.hashCode(); } diff --git a/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch b/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch index effead84a4..11797869cb 100644 --- a/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/Blocks.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Blocks.java +++ b/net/minecraft/world/level/block/Blocks.java -@@ -791,7 +_,7 @@ +@@ -790,7 +_,7 @@ public static final Block RED_BED = register("red_bed", bed(DyeColor.RED)); public static final Block BLACK_BED = register("black_bed", bed(DyeColor.BLACK)); public static final Block POWERED_RAIL = register( @@ -9,7 +9,7 @@ ); public static final Block DETECTOR_RAIL = register( "detector_rail", new DetectorRailBlock(BlockBehaviour.Properties.of().noCollission().strength(0.7F).sound(SoundType.METAL)) -@@ -7581,16 +_,5 @@ +@@ -7546,16 +_,5 @@ public static void rebuildCache() { Block.BLOCK_STATE_REGISTRY.forEach(BlockBehaviour.BlockStateBase::initCache); diff --git a/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch index 1c3462f9e1..17615ae821 100644 --- a/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/CampfireBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/CampfireBlock.java +++ b/net/minecraft/world/level/block/CampfireBlock.java -@@ -277,7 +_,7 @@ +@@ -275,7 +_,7 @@ return true; } diff --git a/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch index 1dbf1a61d1..014f27c245 100644 --- a/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/RedStoneOreBlock.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/block/RedStoneOreBlock.java +++ b/net/minecraft/world/level/block/RedStoneOreBlock.java -@@ -88,7 +_,7 @@ +@@ -87,7 +_,7 @@ @Override protected void spawnAfterBreak(BlockState p_221907_, ServerLevel p_221908_, BlockPos p_221909_, ItemStack p_221910_, boolean p_221911_) { super.spawnAfterBreak(p_221907_, p_221908_, p_221909_, p_221910_, p_221911_); -- if (p_221911_ && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, p_221910_) == 0) { -+ if (false && p_221911_ && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, p_221910_) == 0) { // Forge: moved to getExpDrop - int i = 1 + p_221908_.random.nextInt(5); - this.popExperience(p_221908_, p_221909_, i); +- if (p_221911_) { ++ if (false && p_221911_) { // Forge: moved to getExpDrop + this.tryDropExperience(p_221908_, p_221909_, p_221910_, UniformInt.of(1, 5)); } -@@ -129,4 +_,10 @@ + } +@@ -127,4 +_,10 @@ protected void createBlockStateDefinition(StateDefinition.Builder p_55484_) { p_55484_.add(LIT); } diff --git a/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch index 1b272f1664..c5d779e5fd 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TntBlock.java.patch @@ -48,8 +48,8 @@ + onCaughtFire(p_331413_, p_329038_, p_333168_, p_330020_.getDirection(), p_335932_); p_329038_.setBlock(p_333168_, Blocks.AIR.defaultBlockState(), 11); Item item = p_329029_.getItem(); - if (!p_335932_.isCreative()) { -@@ -123,7 +_,7 @@ + if (p_329029_.is(Items.FLINT_AND_STEEL)) { +@@ -121,7 +_,7 @@ BlockPos blockpos = p_57431_.getBlockPos(); Entity entity = p_57432_.getOwner(); if (p_57432_.isOnFire() && p_57432_.mayInteract(p_57429_, blockpos)) { @@ -58,7 +58,7 @@ p_57429_.removeBlock(blockpos, false); } } -@@ -137,5 +_,9 @@ +@@ -135,5 +_,9 @@ @Override protected void createBlockStateDefinition(StateDefinition.Builder p_57464_) { p_57464_.add(UNSTABLE); diff --git a/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch b/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch index 20cb8b1065..b5d85d3815 100644 --- a/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/TrapDoorBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/TrapDoorBlock.java +++ b/net/minecraft/world/level/block/TrapDoorBlock.java -@@ -205,4 +_,14 @@ +@@ -202,4 +_,14 @@ protected BlockSetType getType() { return this.type; } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch index 97fe7b17e4..6b13b03785 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch @@ -50,7 +50,7 @@ ContainerHelper.saveAllItems(p_187452_, this.items, p_330192_); CompoundTag compoundtag = new CompoundTag(); this.recipesUsed.forEach((p_187449_, p_187450_) -> compoundtag.putInt(p_187449_.toString(), p_187450_)); -@@ -268,28 +_,30 @@ +@@ -269,28 +_,30 @@ } int i = p_155017_.getMaxStackSize(); @@ -86,7 +86,7 @@ p_155017_.setRecipeUsed(recipeholder); } -@@ -313,9 +_,9 @@ +@@ -314,9 +_,9 @@ } } @@ -94,11 +94,11 @@ + private boolean canBurn(RegistryAccess p_266924_, @Nullable RecipeHolder p_299207_, NonNullList p_155007_, int p_155008_) { if (!p_155007_.get(0).isEmpty() && p_299207_ != null) { - ItemStack itemstack = p_299207_.value().getResultItem(p_266924_); -+ ItemStack itemstack = ((RecipeHolder>)p_299207_).value().assemble(this, p_266924_); ++ ItemStack itemstack = ((RecipeHolder>)p_299207_).value().assemble(new SingleRecipeInput(this.getItem(0)), p_266924_); if (itemstack.isEmpty()) { return false; } else { -@@ -325,9 +_,9 @@ +@@ -326,9 +_,9 @@ } else if (!ItemStack.isSameItemSameComponents(itemstack1, itemstack)) { return false; } else { @@ -110,7 +110,7 @@ } } } else { -@@ -335,15 +_,15 @@ +@@ -336,15 +_,15 @@ } } @@ -119,7 +119,7 @@ if (p_299450_ != null && canBurn(p_266740_, p_299450_, p_267073_, p_267157_)) { ItemStack itemstack = p_267073_.get(0); - ItemStack itemstack1 = p_299450_.value().getResultItem(p_266740_); -+ ItemStack itemstack1 = ((RecipeHolder>)p_299450_).value().assemble(this, p_266740_); ++ ItemStack itemstack1 = ((RecipeHolder>)p_299450_).value().assemble(new SingleRecipeInput(this.getItem(0)), p_266740_); ItemStack itemstack2 = p_267073_.get(2); if (itemstack2.isEmpty()) { p_267073_.set(2, itemstack1.copy()); @@ -129,7 +129,7 @@ } if (itemstack.is(Blocks.WET_SPONGE.asItem()) && !p_267073_.get(1).isEmpty() && p_267073_.get(1).is(Items.BUCKET)) { -@@ -362,7 +_,7 @@ +@@ -363,7 +_,7 @@ return 0; } else { Item item = p_58343_.getItem(); @@ -138,7 +138,7 @@ } } -@@ -371,7 +_,7 @@ +@@ -373,7 +_,7 @@ } public static boolean isFuel(ItemStack p_58400_) { @@ -147,7 +147,7 @@ } @Override -@@ -429,7 +_,7 @@ +@@ -431,7 +_,7 @@ return true; } else { ItemStack itemstack = this.items.get(1); @@ -156,7 +156,7 @@ } } -@@ -492,5 +_,34 @@ +@@ -494,5 +_,34 @@ for (ItemStack itemstack : this.items) { p_58342_.accountStack(itemstack); } diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch index 2183064ba6..30276d9e45 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch @@ -1,13 +1,13 @@ --- a/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -@@ -139,8 +_,8 @@ +@@ -137,8 +_,8 @@ + for (int i1 = 0; i1 < 10 && blockpos.getY() <= l; i1++) { BlockState blockstate = p_155108_.getBlockState(blockpos); - Block block = blockstate.getBlock(); -- if (block instanceof BeaconBeamBlock) { -- float[] afloat = ((BeaconBeamBlock)block).getColor().getTextureDiffuseColors(); -+ float[] afloat = blockstate.getBeaconColorMultiplier(p_155108_, blockpos, p_155109_); -+ if (afloat != null) { +- if (blockstate.getBlock() instanceof BeaconBeamBlock beaconbeamblock) { +- int j1 = beaconbeamblock.getColor().getTextureDiffuseColor(); ++ int j1 = blockstate.getBeaconColorMultiplier(p_155108_, blockpos, p_155109_); ++ if (j1 != -1) { if (p_155111_.checkingBeamSections.size() <= 1) { - beaconblockentity$beaconbeamsection = new BeaconBlockEntity.BeaconBeamSection(afloat); + beaconblockentity$beaconbeamsection = new BeaconBlockEntity.BeaconBeamSection(j1); p_155111_.checkingBeamSections.add(beaconblockentity$beaconbeamsection); diff --git a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch index 74580fcd59..11236bfad0 100644 --- a/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java.patch @@ -22,7 +22,7 @@ } p_155293_.set(3, itemstack); -@@ -207,6 +_,9 @@ +@@ -211,6 +_,9 @@ if (p_59017_ == 3) { PotionBrewing potionbrewing = this.level != null ? this.level.potionBrewing() : PotionBrewing.EMPTY; return potionbrewing.isIngredient(p_59018_); @@ -32,7 +32,7 @@ } else { return p_59017_ == 4 ? p_59018_.is(Items.BLAZE_POWDER) -@@ -242,5 +_,34 @@ +@@ -246,5 +_,34 @@ @Override protected AbstractContainerMenu createMenu(int p_58990_, Inventory p_58991_) { return new BrewingStandMenu(p_58990_, p_58991_, this, this.dataAccess); diff --git a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch index 5042fbc687..d923d21113 100644 --- a/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch +++ b/patches/minecraft/net/minecraft/world/level/block/state/BlockBehaviour.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/net/minecraft/world/level/block/state/BlockBehaviour.java -@@ -97,6 +_,7 @@ +@@ -96,6 +_,7 @@ protected final boolean dynamicShape; protected final FeatureFlagSet requiredFeatures; protected final BlockBehaviour.Properties properties; @@ -8,7 +8,7 @@ @Nullable protected ResourceKey drops; -@@ -112,6 +_,18 @@ +@@ -111,6 +_,18 @@ this.dynamicShape = p_60452_.dynamicShape; this.requiredFeatures = p_60452_.requiredFeatures; this.properties = p_60452_; @@ -27,7 +27,7 @@ } public BlockBehaviour.Properties properties() { -@@ -160,7 +_,7 @@ +@@ -159,7 +_,7 @@ } protected void onRemove(BlockState p_60515_, Level p_60516_, BlockPos p_60517_, BlockState p_60518_, boolean p_60519_) { @@ -36,7 +36,7 @@ p_60516_.removeBlockEntity(p_60517_); } } -@@ -169,7 +_,7 @@ +@@ -168,7 +_,7 @@ if (!p_310712_.isAir() && p_312709_.getBlockInteraction() != Explosion.BlockInteraction.TRIGGER_BLOCK) { Block block = p_310712_.getBlock(); boolean flag = p_312709_.getIndirectSourceEntity() instanceof Player; @@ -45,7 +45,7 @@ BlockEntity blockentity = p_310712_.hasBlockEntity() ? p_311693_.getBlockEntity(p_311490_) : null; LootParams.Builder lootparams$builder = new LootParams.Builder(serverlevel) .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(p_311490_)) -@@ -184,8 +_,7 @@ +@@ -183,8 +_,7 @@ p_310712_.getDrops(lootparams$builder).forEach(p_309419_ -> p_311277_.accept(p_309419_, p_311490_)); } @@ -55,7 +55,7 @@ } } -@@ -336,12 +_,15 @@ +@@ -335,12 +_,15 @@ if (f == -1.0F) { return 0.0F; } else { @@ -73,7 +73,7 @@ } protected void attack(BlockState p_60499_, Level p_60500_, BlockPos p_60501_, Player p_60502_) { -@@ -360,8 +_,7 @@ +@@ -359,8 +_,7 @@ public final ResourceKey getLootTable() { if (this.drops == null) { @@ -83,7 +83,7 @@ } return this.drops; -@@ -378,6 +_,7 @@ +@@ -377,6 +_,7 @@ return this.isRandomlyTicking; } @@ -91,7 +91,7 @@ protected SoundType getSoundType(BlockState p_328629_) { return this.soundType; } -@@ -394,6 +_,10 @@ +@@ -393,6 +_,10 @@ return this.properties.destroyTime; } @@ -140,7 +140,7 @@ return this.pushReaction; } -@@ -959,10 +_,11 @@ +@@ -960,10 +_,11 @@ boolean spawnTerrainParticles = true; NoteBlockInstrument instrument = NoteBlockInstrument.HARP; boolean replaceable; @@ -153,7 +153,7 @@ BlockBehaviour.StatePredicate isRedstoneConductor = (p_284888_, p_284889_, p_284890_) -> p_284888_.isCollisionShapeFullBlock(p_284889_, p_284890_); BlockBehaviour.StatePredicate isSuffocating = (p_284885_, p_284886_, p_284887_) -> p_284885_.blocksMotion() && p_284885_.isCollisionShapeFullBlock(p_284886_, p_284887_); BlockBehaviour.StatePredicate isViewBlocking = this.isSuffocating; -@@ -1102,8 +_,14 @@ +@@ -1104,8 +_,14 @@ return this; } diff --git a/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch index 355e9df401..4d3031882b 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/ChunkAccess.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/net/minecraft/world/level/chunk/ChunkAccess.java -@@ -311,23 +_,28 @@ +@@ -315,23 +_,28 @@ @Override public final void findBlockLightSources(BiConsumer p_285269_) { @@ -33,7 +33,7 @@ } } } -@@ -471,5 +_,10 @@ +@@ -475,5 +_,10 @@ } public static record TicksToSave(SerializableTickContainer blocks, SerializableTickContainer fluids) { diff --git a/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch index 81c159a836..0f3f5d81fb 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/ChunkGenerator.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/ChunkGenerator.java +++ b/net/minecraft/world/level/chunk/ChunkGenerator.java -@@ -81,7 +_,7 @@ +@@ -80,7 +_,7 @@ public abstract class ChunkGenerator { public static final Codec CODEC = BuiltInRegistries.CHUNK_GENERATOR.byNameCodec().dispatchStable(ChunkGenerator::codec, Function.identity()); protected final BiomeSource biomeSource; @@ -9,7 +9,7 @@ private final Function, BiomeGenerationSettings> generationSettingsGetter; public ChunkGenerator(BiomeSource p_256133_) { -@@ -91,9 +_,14 @@ +@@ -90,9 +_,14 @@ public ChunkGenerator(BiomeSource p_255838_, Function, BiomeGenerationSettings> p_256216_) { this.biomeSource = p_255838_; this.generationSettingsGetter = p_256216_; diff --git a/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch index fb809b29c9..bb51622a35 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/LevelChunk.java.patch @@ -65,7 +65,7 @@ } } -@@ -389,9 +_,14 @@ +@@ -406,9 +_,14 @@ public CompoundTag getBlockEntityNbtForSaving(BlockPos p_62932_, HolderLookup.Provider p_329605_) { BlockEntity blockentity = this.getBlockEntity(p_62932_); if (blockentity != null && !blockentity.isRemoved()) { @@ -80,7 +80,7 @@ } else { CompoundTag compoundtag = this.pendingBlockEntities.get(p_62932_); if (compoundtag != null) { -@@ -471,7 +_,7 @@ +@@ -488,7 +_,7 @@ p_187974_.accept((p_327409_, p_327410_, p_327411_) -> { BlockEntity blockentity = this.getBlockEntity(p_327409_, LevelChunk.EntityCreationType.IMMEDIATE); if (blockentity != null && p_327411_ != null && blockentity.getType() == p_327410_) { @@ -89,7 +89,7 @@ } }); } -@@ -579,6 +_,7 @@ +@@ -596,6 +_,7 @@ } public void clearAllBlockEntities() { @@ -97,7 +97,7 @@ this.blockEntities.values().forEach(BlockEntity::setRemoved); this.blockEntities.clear(); this.tickersInLevel.values().forEach(p_187966_ -> p_187966_.rebind(NULL_TICKER)); -@@ -586,6 +_,7 @@ +@@ -603,6 +_,7 @@ } public void registerAllBlockEntitiesAfterLevelLoad() { @@ -105,7 +105,7 @@ this.blockEntities.values().forEach(p_187988_ -> { if (this.level instanceof ServerLevel serverlevel) { this.addGameEventListener(p_187988_, serverlevel); -@@ -637,6 +_,34 @@ +@@ -654,6 +_,34 @@ return new LevelChunk.BoundTickingBlockEntity<>(p_156376_, p_156377_); } @@ -140,7 +140,7 @@ class BoundTickingBlockEntity implements TickingBlockEntity { private final T blockEntity; private final BlockEntityTicker ticker; -@@ -654,6 +_,7 @@ +@@ -671,6 +_,7 @@ if (LevelChunk.this.isTicking(blockpos)) { try { ProfilerFiller profilerfiller = LevelChunk.this.level.getProfiler(); @@ -148,19 +148,19 @@ profilerfiller.push(this::getType); BlockState blockstate = LevelChunk.this.getBlockState(blockpos); if (this.blockEntity.getType().isValid(blockstate)) { -@@ -675,6 +_,11 @@ +@@ -692,6 +_,11 @@ CrashReport crashreport = CrashReport.forThrowable(throwable, "Ticking block entity"); CrashReportCategory crashreportcategory = crashreport.addCategory("Block entity being ticked"); this.blockEntity.fillCrashReportCategory(crashreportcategory); + if (net.minecraftforge.common.ForgeConfig.SERVER.removeErroringBlockEntities.get()) { -+ LOGGER.error("{}", crashreport.getFriendlyReport()); ++ LOGGER.error("{}", crashreport.getFriendlyReport(net.minecraft.ReportType.CRASH)); + blockEntity.setRemoved(); + LevelChunk.this.removeBlockEntity(blockEntity.getBlockPos()); + } else throw new ReportedException(crashreport); } } -@@ -748,5 +_,32 @@ +@@ -765,5 +_,32 @@ public String toString() { return this.ticker + " "; } diff --git a/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch new file mode 100644 index 0000000000..6e828d520f --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java.patch @@ -0,0 +1,17 @@ +--- a/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java ++++ b/net/minecraft/world/level/chunk/status/ChunkStatusTasks.java +@@ -183,8 +_,14 @@ + levelchunk.setFullStatus(generationchunkholder::getFullStatus); + levelchunk.runPostLoad(); + levelchunk.setLoaded(true); ++ try { ++ generationchunkholder.currentlyLoading = levelchunk; // Forge - bypass the future chain when getChunk is called, this prevents deadlocks. + levelchunk.registerAllBlockEntitiesAfterLevelLoad(); + levelchunk.registerTickContainerInLevel(serverlevel); ++ net.minecraftforge.event.ForgeEventFactory.onChunkLoad(levelchunk, !(protochunk instanceof ImposterProtoChunk)); ++ } finally { ++ generationchunkholder.currentlyLoading = null; // Forge - Stop bypassing the future chain. ++ } + return levelchunk; + }, p_341879_ -> p_342042_.mainThreadMailBox().tell(ChunkTaskPriorityQueueSorter.message(p_341879_, chunkpos.toLong(), generationchunkholder::getTicketLevel))); + } diff --git a/patches/minecraft/net/minecraft/world/level/chunk/storage/ChunkSerializer.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/storage/ChunkSerializer.java.patch index 2dd27ed84e..064c722996 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/storage/ChunkSerializer.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/storage/ChunkSerializer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -@@ -182,6 +_,9 @@ +@@ -183,6 +_,9 @@ postLoadChunk(p_188231_, p_188234_), blendingdata ); @@ -10,7 +10,7 @@ } else { ProtoChunkTicks protochunkticks = ProtoChunkTicks.load( p_188234_.getList("block_ticks", 10), p_258992_ -> BuiltInRegistries.BLOCK.getOptional(ResourceLocation.tryParse(p_258992_)), p_188233_ -@@ -240,6 +_,7 @@ +@@ -241,6 +_,7 @@ } if (chunktype == ChunkType.LEVELCHUNK) { @@ -18,7 +18,7 @@ return new ImposterProtoChunk((LevelChunk)chunkaccess, false); } else { ProtoChunk protochunk1 = (ProtoChunk)chunkaccess; -@@ -263,6 +_,7 @@ +@@ -264,6 +_,7 @@ protochunk1.setCarvingMask(generationstep$carving, new CarvingMask(compoundtag4.getLongArray(s1), chunkaccess.getMinBuildHeight())); } @@ -26,7 +26,7 @@ return protochunk1; } } -@@ -372,6 +_,14 @@ +@@ -373,6 +_,14 @@ } compoundtag.put("CarvingMasks", compoundtag4); diff --git a/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch b/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch index ff1bf90d45..7cdba72d58 100644 --- a/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch +++ b/patches/minecraft/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/net/minecraft/world/level/chunk/storage/EntityStorage.java -@@ -88,8 +_,12 @@ +@@ -94,8 +_,12 @@ ListTag listtag = new ListTag(); p_156559_.getEntities().forEach(p_156567_ -> { CompoundTag compoundtag1 = new CompoundTag(); diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch index 2c6fa5ab23..8fe44f5027 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/DebugLevelSource.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/levelgen/DebugLevelSource.java +++ b/net/minecraft/world/level/levelgen/DebugLevelSource.java -@@ -144,4 +_,10 @@ +@@ -141,4 +_,10 @@ public int getSeaLevel() { return 63; } diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch index 383c830f88..28c119d7b0 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/feature/Feature.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/levelgen/feature/Feature.java +++ b/net/minecraft/world/level/levelgen/feature/Feature.java -@@ -186,7 +_,7 @@ +@@ -187,7 +_,7 @@ } protected static boolean isStone(BlockState p_159748_) { diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch index 63803d46c0..1b2ac4b713 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/StructurePiece.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/levelgen/structure/StructurePiece.java +++ b/net/minecraft/world/level/levelgen/structure/StructurePiece.java -@@ -92,6 +_,9 @@ +@@ -91,6 +_,9 @@ } public final CompoundTag createTag(StructurePieceSerializationContext p_192645_) { diff --git a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch index 410ea99842..0c9b6fc158 100644 --- a/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch +++ b/patches/minecraft/net/minecraft/world/level/levelgen/structure/templatesystem/StructureTemplate.java.patch @@ -19,7 +19,7 @@ + for (StructureTemplate.StructureBlockInfo structuretemplate$structureblockinfo : processBlockInfos(p_230329_, p_230330_, p_230331_, p_230332_, list, this)) { BlockPos blockpos = structuretemplate$structureblockinfo.pos; if (boundingbox == null || boundingbox.isInside(blockpos)) { - FluidState fluidstate = p_230332_.shouldKeepLiquids() ? p_230329_.getFluidState(blockpos) : null; + FluidState fluidstate = p_230332_.shouldApplyWaterlogging() ? p_230329_.getFluidState(blockpos) : null; @@ -360,7 +_,7 @@ } diff --git a/patches/minecraft/net/minecraft/world/level/portal/PortalForcer.java.patch b/patches/minecraft/net/minecraft/world/level/portal/PortalForcer.java.patch deleted file mode 100644 index e0f5462f63..0000000000 --- a/patches/minecraft/net/minecraft/world/level/portal/PortalForcer.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/portal/PortalForcer.java -+++ b/net/minecraft/world/level/portal/PortalForcer.java -@@ -20,7 +_,7 @@ - import net.minecraft.world.level.border.WorldBorder; - import net.minecraft.world.level.levelgen.Heightmap; - --public class PortalForcer { -+public class PortalForcer implements net.minecraftforge.common.util.ITeleporter { - public static final int TICKET_RADIUS = 3; - private static final int SEARCH_RADIUS = 128; - private static final int CREATE_RADIUS = 16; diff --git a/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch b/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch index c75bd15130..56874b681d 100644 --- a/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch +++ b/patches/minecraft/net/minecraft/world/level/portal/PortalShape.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/portal/PortalShape.java +++ b/net/minecraft/world/level/portal/PortalShape.java -@@ -28,7 +_,7 @@ +@@ -27,7 +_,7 @@ public static final int MAX_WIDTH = 21; private static final int MIN_HEIGHT = 3; public static final int MAX_HEIGHT = 21; diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch index 603f251011..771bcdb712 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootContext.java.patch @@ -23,7 +23,7 @@ } + public int getLootingModifier() { -+ return net.minecraftforge.common.ForgeHooks.getLootingLevel(getParamOrNull(LootContextParams.THIS_ENTITY), getParamOrNull(LootContextParams.KILLER_ENTITY), getParamOrNull(LootContextParams.DAMAGE_SOURCE)); ++ return net.minecraftforge.common.ForgeHooks.getLootingLevel(getParamOrNull(LootContextParams.THIS_ENTITY), getParamOrNull(LootContextParams.ATTACKING_ENTITY), getParamOrNull(LootContextParams.DAMAGE_SOURCE)); + } + + public void setQueriedLootTableId(ResourceLocation queriedLootTableId) { @@ -53,7 +53,7 @@ public LootContext.Builder withOptionalRandomSeed(long p_78966_) { if (p_78966_ != 0L) { this.random = RandomSource.create(p_78966_); -@@ -104,6 +_,11 @@ +@@ -109,6 +_,11 @@ return this; } @@ -65,7 +65,7 @@ public ServerLevel getLevel() { return this.params.getLevel(); } -@@ -112,7 +_,7 @@ +@@ -117,7 +_,7 @@ ServerLevel serverlevel = this.getLevel(); MinecraftServer minecraftserver = serverlevel.getServer(); RandomSource randomsource = Optional.ofNullable(this.random).or(() -> p_299315_.map(serverlevel::getRandomSequence)).orElseGet(serverlevel::getRandom); diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootDataType.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootDataType.java.patch index 9dcca2f45b..f05fe3928f 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootDataType.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootDataType.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/level/storage/loot/LootDataType.java +++ b/net/minecraft/world/level/storage/loot/LootDataType.java -@@ -34,7 +_,12 @@ - public Optional deserialize(ResourceLocation p_279253_, DynamicOps p_335939_, V p_327740_) { +@@ -30,7 +_,12 @@ DataResult dataresult = this.codec.parse(p_335939_, p_327740_); - dataresult.error().ifPresent(p_327555_ -> LOGGER.error("Couldn't parse element {}:{} - {}", this.directory, p_279253_, p_327555_.message())); + dataresult.error() + .ifPresent(p_341974_ -> LOGGER.error("Couldn't parse element {}/{} - {}", this.registryKey.location(), p_279253_, p_341974_.message())); - return dataresult.result(); + var ret = dataresult.result(); + if (ret.orElse(null) instanceof LootTable table) { diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch index 4acba9b052..9d2d4c47d2 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootPool.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/level/storage/loot/LootPool.java +++ b/net/minecraft/world/level/storage/loot/LootPool.java -@@ -34,10 +_,13 @@ - LootItemConditions.DIRECT_CODEC.listOf().optionalFieldOf("conditions", List.of()).forGetter(p_297008_ -> p_297008_.conditions), +@@ -33,10 +_,13 @@ + LootItemCondition.DIRECT_CODEC.listOf().optionalFieldOf("conditions", List.of()).forGetter(p_297008_ -> p_297008_.conditions), LootItemFunctions.ROOT_CODEC.listOf().optionalFieldOf("functions", List.of()).forGetter(p_297009_ -> p_297009_.functions), NumberProviders.CODEC.fieldOf("rolls").forGetter(p_297004_ -> p_297004_.rolls), - NumberProviders.CODEC.fieldOf("bonus_rolls").orElse(ConstantValue.exactly(0.0F)).forGetter(p_297006_ -> p_297006_.bonusRolls) @@ -9,13 +9,13 @@ + Codec.STRING.optionalFieldOf("name").forGetter(p -> p.name.filter(n -> !n.startsWith("custom#"))), + net.minecraftforge.common.crafting.conditions.ICondition.OPTIONAL_FEILD_CODEC.forGetter(p -> p.forge_condition) ) - .apply(p_327556_, LootPool::new) + .apply(p_341975_, LootPool::new) ); + public static final Codec CONDITIONAL_CODEC = net.minecraftforge.common.crafting.conditions.ConditionCodec.checkingDecode(CODEC, () -> lootPool().build()); private final List entries; private final List conditions; private final Predicate compositeCondition; -@@ -45,13 +_,21 @@ +@@ -44,13 +_,21 @@ private final BiFunction compositeFunction; private NumberProvider rolls; private NumberProvider bonusRolls; @@ -38,7 +38,7 @@ ) { this.entries = p_298341_; this.conditions = p_297697_; -@@ -60,6 +_,8 @@ +@@ -59,6 +_,8 @@ this.compositeFunction = LootItemFunctions.compose(p_299722_); this.rolls = p_165131_; this.bonusRolls = p_165132_; @@ -47,7 +47,7 @@ } private void addRandomItem(Consumer p_79059_, LootContext p_79060_) { -@@ -127,12 +_,35 @@ +@@ -126,12 +_,35 @@ return new LootPool.Builder(); } @@ -83,7 +83,7 @@ public LootPool.Builder setRolls(NumberProvider p_165134_) { this.rolls = p_165134_; -@@ -163,8 +_,18 @@ +@@ -162,8 +_,18 @@ return this; } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch index 846db054ce..c54ed1b4d2 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/LootTable.java.patch @@ -49,8 +49,8 @@ + this.getRandomItems(p_79149_).forEach(p_79150_); } - public ObjectArrayList getRandomItems(LootParams p_287574_, long p_287773_) { -@@ -117,7 +_,8 @@ + public ObjectArrayList getRandomItems(LootParams p_345012_, RandomSource p_344559_) { +@@ -121,7 +_,8 @@ private ObjectArrayList getRandomItems(LootContext p_230923_) { ObjectArrayList objectarraylist = new ObjectArrayList<>(); @@ -60,7 +60,7 @@ return objectarraylist; } -@@ -206,6 +_,54 @@ +@@ -210,6 +_,54 @@ public static LootTable.Builder lootTable() { return new LootTable.Builder(); diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch new file mode 100644 index 0000000000..a20ae20c84 --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch @@ -0,0 +1,25 @@ +--- a/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java ++++ b/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java +@@ -65,8 +_,12 @@ + @Override + public ItemStack run(ItemStack p_344964_, LootContext p_345394_) { + Entity entity = p_345394_.getParamOrNull(LootContextParams.ATTACKING_ENTITY); +- if (entity instanceof LivingEntity livingentity) { +- int i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); ++ int i = 0; ++ if (this.enchantment.is(Enchantments.LOOTING)) ++ i = p_345394_.getLootingModifier(); ++ else if (entity instanceof LivingEntity livingentity) ++ i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); ++ + if (i == 0) { + return p_344964_; + } +@@ -76,7 +_,6 @@ + if (this.hasLimit()) { + p_344964_.limitSize(this.limit); + } +- } + + return p_344964_; + } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java.patch deleted file mode 100644 index cec0dbaea0..0000000000 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java -+++ b/net/minecraft/world/level/storage/loot/functions/LootingEnchantFunction.java -@@ -58,7 +_,7 @@ - public ItemStack run(ItemStack p_80789_, LootContext p_80790_) { - Entity entity = p_80790_.getParamOrNull(LootContextParams.KILLER_ENTITY); - if (entity instanceof LivingEntity) { -- int i = EnchantmentHelper.getMobLooting((LivingEntity)entity); -+ int i = p_80790_.getLootingModifier(); - if (i == 0) { - return p_80789_; - } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch index d9cb0f4865..00cef0bd8a 100644 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/parameters/LootContextParamSets.java.patch @@ -5,7 +5,7 @@ }); public static final LootContextParamSet CHEST = register( - "chest", p_327636_ -> p_327636_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY) -+ "chest", p_327636_ -> p_327636_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.KILLER_ENTITY) //Forge: Chest Minecarts can have killers. ++ "chest", p_327636_ -> p_327636_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY) //Forge: Chest Minecarts can have killers. ); public static final LootContextParamSet COMMAND = register( "command", p_327634_ -> p_327634_.required(LootContextParams.ORIGIN).optional(LootContextParams.THIS_ENTITY) @@ -14,7 +14,7 @@ ); public static final LootContextParamSet FISHING = register( - "fishing", p_81446_ -> p_81446_.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY) -+ "fishing", p_81446_ -> p_81446_.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.KILLER_ENTITY).optional(LootContextParams.THIS_ENTITY) //Forge: Allow fisher, and bobber ++ "fishing", p_81446_ -> p_81446_.required(LootContextParams.ORIGIN).required(LootContextParams.TOOL).optional(LootContextParams.THIS_ENTITY).optional(LootContextParams.ATTACKING_ENTITY).optional(LootContextParams.THIS_ENTITY) //Forge: Allow fisher, and bobber ); public static final LootContextParamSet ENTITY = register( "entity", diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch new file mode 100644 index 0000000000..492bc9706d --- /dev/null +++ b/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java.patch @@ -0,0 +1,15 @@ +--- a/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java ++++ b/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithEnchantedBonusCondition.java +@@ -42,7 +_,11 @@ + + public boolean test(LootContext p_343845_) { + Entity entity = p_343845_.getParamOrNull(LootContextParams.ATTACKING_ENTITY); +- int i = entity instanceof LivingEntity livingentity ? EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity) : 0; ++ int i = 0; ++ if (this.enchantment.is(Enchantments.LOOTING)) ++ i = p_343845_.getLootingModifier(); ++ else if (entity instanceof LivingEntity livingentity) ++ i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingentity); + float f = i > 0 ? this.enchantedChance.calculate(i) : this.unenchantedChance; + return p_343845_.getRandom().nextFloat() < f; + } diff --git a/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java.patch b/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java.patch deleted file mode 100644 index 08fd78e1e7..0000000000 --- a/patches/minecraft/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java -+++ b/net/minecraft/world/level/storage/loot/predicates/LootItemRandomChanceWithLootingCondition.java -@@ -33,12 +_,7 @@ - } - - public boolean test(LootContext p_81967_) { -- Entity entity = p_81967_.getParamOrNull(LootContextParams.KILLER_ENTITY); -- int i = 0; -- if (entity instanceof LivingEntity) { -- i = EnchantmentHelper.getMobLooting((LivingEntity)entity); -- } -- -+ int i = p_81967_.getLootingModifier(); - return p_81967_.getRandom().nextFloat() < this.percent + (float)i * this.lootingMultiplier; - } - diff --git a/src/main/generated/data/forge/tags/blocks/barrels.json b/src/main/generated/data/forge/tags/block/barrels.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/barrels.json rename to src/main/generated/data/forge/tags/block/barrels.json diff --git a/src/main/generated/data/forge/tags/blocks/barrels/wooden.json b/src/main/generated/data/forge/tags/block/barrels/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/barrels/wooden.json rename to src/main/generated/data/forge/tags/block/barrels/wooden.json diff --git a/src/main/generated/data/forge/tags/blocks/bookshelves.json b/src/main/generated/data/forge/tags/block/bookshelves.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/bookshelves.json rename to src/main/generated/data/forge/tags/block/bookshelves.json diff --git a/src/main/generated/data/forge/tags/blocks/chests.json b/src/main/generated/data/forge/tags/block/chests.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/chests.json rename to src/main/generated/data/forge/tags/block/chests.json diff --git a/src/main/generated/data/forge/tags/blocks/chests/ender.json b/src/main/generated/data/forge/tags/block/chests/ender.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/chests/ender.json rename to src/main/generated/data/forge/tags/block/chests/ender.json diff --git a/src/main/generated/data/forge/tags/blocks/chests/trapped.json b/src/main/generated/data/forge/tags/block/chests/trapped.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/chests/trapped.json rename to src/main/generated/data/forge/tags/block/chests/trapped.json diff --git a/src/main/generated/data/forge/tags/blocks/chests/wooden.json b/src/main/generated/data/forge/tags/block/chests/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/chests/wooden.json rename to src/main/generated/data/forge/tags/block/chests/wooden.json diff --git a/src/main/generated/data/forge/tags/blocks/cobblestone.json b/src/main/generated/data/forge/tags/block/cobblestone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/cobblestone.json rename to src/main/generated/data/forge/tags/block/cobblestone.json diff --git a/src/main/generated/data/forge/tags/blocks/cobblestone/deepslate.json b/src/main/generated/data/forge/tags/block/cobblestone/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/cobblestone/deepslate.json rename to src/main/generated/data/forge/tags/block/cobblestone/deepslate.json diff --git a/src/main/generated/data/forge/tags/blocks/cobblestone/infested.json b/src/main/generated/data/forge/tags/block/cobblestone/infested.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/cobblestone/infested.json rename to src/main/generated/data/forge/tags/block/cobblestone/infested.json diff --git a/src/main/generated/data/forge/tags/blocks/cobblestone/mossy.json b/src/main/generated/data/forge/tags/block/cobblestone/mossy.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/cobblestone/mossy.json rename to src/main/generated/data/forge/tags/block/cobblestone/mossy.json diff --git a/src/main/generated/data/forge/tags/blocks/cobblestone/normal.json b/src/main/generated/data/forge/tags/block/cobblestone/normal.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/cobblestone/normal.json rename to src/main/generated/data/forge/tags/block/cobblestone/normal.json diff --git a/src/main/generated/data/forge/tags/blocks/end_stones.json b/src/main/generated/data/forge/tags/block/end_stones.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/end_stones.json rename to src/main/generated/data/forge/tags/block/end_stones.json diff --git a/src/main/generated/data/forge/tags/blocks/enderman_place_on_blacklist.json b/src/main/generated/data/forge/tags/block/enderman_place_on_blacklist.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/enderman_place_on_blacklist.json rename to src/main/generated/data/forge/tags/block/enderman_place_on_blacklist.json diff --git a/src/main/generated/data/forge/tags/blocks/fence_gates.json b/src/main/generated/data/forge/tags/block/fence_gates.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/fence_gates.json rename to src/main/generated/data/forge/tags/block/fence_gates.json diff --git a/src/main/generated/data/forge/tags/blocks/fence_gates/wooden.json b/src/main/generated/data/forge/tags/block/fence_gates/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/fence_gates/wooden.json rename to src/main/generated/data/forge/tags/block/fence_gates/wooden.json diff --git a/src/main/generated/data/forge/tags/blocks/fences.json b/src/main/generated/data/forge/tags/block/fences.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/fences.json rename to src/main/generated/data/forge/tags/block/fences.json diff --git a/src/main/generated/data/forge/tags/blocks/fences/nether_brick.json b/src/main/generated/data/forge/tags/block/fences/nether_brick.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/fences/nether_brick.json rename to src/main/generated/data/forge/tags/block/fences/nether_brick.json diff --git a/src/main/generated/data/forge/tags/blocks/fences/wooden.json b/src/main/generated/data/forge/tags/block/fences/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/fences/wooden.json rename to src/main/generated/data/forge/tags/block/fences/wooden.json diff --git a/src/main/generated/data/forge/tags/blocks/glass.json b/src/main/generated/data/forge/tags/block/glass.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass.json rename to src/main/generated/data/forge/tags/block/glass.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/black.json b/src/main/generated/data/forge/tags/block/glass/black.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/black.json rename to src/main/generated/data/forge/tags/block/glass/black.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/blue.json b/src/main/generated/data/forge/tags/block/glass/blue.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/blue.json rename to src/main/generated/data/forge/tags/block/glass/blue.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/brown.json b/src/main/generated/data/forge/tags/block/glass/brown.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/brown.json rename to src/main/generated/data/forge/tags/block/glass/brown.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/colorless.json b/src/main/generated/data/forge/tags/block/glass/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/colorless.json rename to src/main/generated/data/forge/tags/block/glass/colorless.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/cyan.json b/src/main/generated/data/forge/tags/block/glass/cyan.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/cyan.json rename to src/main/generated/data/forge/tags/block/glass/cyan.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/gray.json b/src/main/generated/data/forge/tags/block/glass/gray.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/gray.json rename to src/main/generated/data/forge/tags/block/glass/gray.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/green.json b/src/main/generated/data/forge/tags/block/glass/green.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/green.json rename to src/main/generated/data/forge/tags/block/glass/green.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/light_blue.json b/src/main/generated/data/forge/tags/block/glass/light_blue.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/light_blue.json rename to src/main/generated/data/forge/tags/block/glass/light_blue.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/light_gray.json b/src/main/generated/data/forge/tags/block/glass/light_gray.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/light_gray.json rename to src/main/generated/data/forge/tags/block/glass/light_gray.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/lime.json b/src/main/generated/data/forge/tags/block/glass/lime.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/lime.json rename to src/main/generated/data/forge/tags/block/glass/lime.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/magenta.json b/src/main/generated/data/forge/tags/block/glass/magenta.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/magenta.json rename to src/main/generated/data/forge/tags/block/glass/magenta.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/orange.json b/src/main/generated/data/forge/tags/block/glass/orange.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/orange.json rename to src/main/generated/data/forge/tags/block/glass/orange.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/pink.json b/src/main/generated/data/forge/tags/block/glass/pink.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/pink.json rename to src/main/generated/data/forge/tags/block/glass/pink.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/purple.json b/src/main/generated/data/forge/tags/block/glass/purple.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/purple.json rename to src/main/generated/data/forge/tags/block/glass/purple.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/red.json b/src/main/generated/data/forge/tags/block/glass/red.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/red.json rename to src/main/generated/data/forge/tags/block/glass/red.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/silica.json b/src/main/generated/data/forge/tags/block/glass/silica.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/silica.json rename to src/main/generated/data/forge/tags/block/glass/silica.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/tinted.json b/src/main/generated/data/forge/tags/block/glass/tinted.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/tinted.json rename to src/main/generated/data/forge/tags/block/glass/tinted.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/white.json b/src/main/generated/data/forge/tags/block/glass/white.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/white.json rename to src/main/generated/data/forge/tags/block/glass/white.json diff --git a/src/main/generated/data/forge/tags/blocks/glass/yellow.json b/src/main/generated/data/forge/tags/block/glass/yellow.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass/yellow.json rename to src/main/generated/data/forge/tags/block/glass/yellow.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes.json b/src/main/generated/data/forge/tags/block/glass_panes.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes.json rename to src/main/generated/data/forge/tags/block/glass_panes.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/black.json b/src/main/generated/data/forge/tags/block/glass_panes/black.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/black.json rename to src/main/generated/data/forge/tags/block/glass_panes/black.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/blue.json b/src/main/generated/data/forge/tags/block/glass_panes/blue.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/blue.json rename to src/main/generated/data/forge/tags/block/glass_panes/blue.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/brown.json b/src/main/generated/data/forge/tags/block/glass_panes/brown.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/brown.json rename to src/main/generated/data/forge/tags/block/glass_panes/brown.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/colorless.json b/src/main/generated/data/forge/tags/block/glass_panes/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/colorless.json rename to src/main/generated/data/forge/tags/block/glass_panes/colorless.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/cyan.json b/src/main/generated/data/forge/tags/block/glass_panes/cyan.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/cyan.json rename to src/main/generated/data/forge/tags/block/glass_panes/cyan.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/gray.json b/src/main/generated/data/forge/tags/block/glass_panes/gray.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/gray.json rename to src/main/generated/data/forge/tags/block/glass_panes/gray.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/green.json b/src/main/generated/data/forge/tags/block/glass_panes/green.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/green.json rename to src/main/generated/data/forge/tags/block/glass_panes/green.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/light_blue.json b/src/main/generated/data/forge/tags/block/glass_panes/light_blue.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/light_blue.json rename to src/main/generated/data/forge/tags/block/glass_panes/light_blue.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/light_gray.json b/src/main/generated/data/forge/tags/block/glass_panes/light_gray.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/light_gray.json rename to src/main/generated/data/forge/tags/block/glass_panes/light_gray.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/lime.json b/src/main/generated/data/forge/tags/block/glass_panes/lime.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/lime.json rename to src/main/generated/data/forge/tags/block/glass_panes/lime.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/magenta.json b/src/main/generated/data/forge/tags/block/glass_panes/magenta.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/magenta.json rename to src/main/generated/data/forge/tags/block/glass_panes/magenta.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/orange.json b/src/main/generated/data/forge/tags/block/glass_panes/orange.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/orange.json rename to src/main/generated/data/forge/tags/block/glass_panes/orange.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/pink.json b/src/main/generated/data/forge/tags/block/glass_panes/pink.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/pink.json rename to src/main/generated/data/forge/tags/block/glass_panes/pink.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/purple.json b/src/main/generated/data/forge/tags/block/glass_panes/purple.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/purple.json rename to src/main/generated/data/forge/tags/block/glass_panes/purple.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/red.json b/src/main/generated/data/forge/tags/block/glass_panes/red.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/red.json rename to src/main/generated/data/forge/tags/block/glass_panes/red.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/white.json b/src/main/generated/data/forge/tags/block/glass_panes/white.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/white.json rename to src/main/generated/data/forge/tags/block/glass_panes/white.json diff --git a/src/main/generated/data/forge/tags/blocks/glass_panes/yellow.json b/src/main/generated/data/forge/tags/block/glass_panes/yellow.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/glass_panes/yellow.json rename to src/main/generated/data/forge/tags/block/glass_panes/yellow.json diff --git a/src/main/generated/data/forge/tags/blocks/gravel.json b/src/main/generated/data/forge/tags/block/gravel.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/gravel.json rename to src/main/generated/data/forge/tags/block/gravel.json diff --git a/src/main/generated/data/forge/tags/blocks/netherrack.json b/src/main/generated/data/forge/tags/block/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/netherrack.json rename to src/main/generated/data/forge/tags/block/netherrack.json diff --git a/src/main/generated/data/forge/tags/blocks/obsidian.json b/src/main/generated/data/forge/tags/block/obsidian.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/obsidian.json rename to src/main/generated/data/forge/tags/block/obsidian.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_bearing_ground/deepslate.json b/src/main/generated/data/forge/tags/block/ore_bearing_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_bearing_ground/deepslate.json rename to src/main/generated/data/forge/tags/block/ore_bearing_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_bearing_ground/netherrack.json b/src/main/generated/data/forge/tags/block/ore_bearing_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_bearing_ground/netherrack.json rename to src/main/generated/data/forge/tags/block/ore_bearing_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_bearing_ground/stone.json b/src/main/generated/data/forge/tags/block/ore_bearing_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_bearing_ground/stone.json rename to src/main/generated/data/forge/tags/block/ore_bearing_ground/stone.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_rates/dense.json b/src/main/generated/data/forge/tags/block/ore_rates/dense.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_rates/dense.json rename to src/main/generated/data/forge/tags/block/ore_rates/dense.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_rates/singular.json b/src/main/generated/data/forge/tags/block/ore_rates/singular.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_rates/singular.json rename to src/main/generated/data/forge/tags/block/ore_rates/singular.json diff --git a/src/main/generated/data/forge/tags/blocks/ore_rates/sparse.json b/src/main/generated/data/forge/tags/block/ore_rates/sparse.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ore_rates/sparse.json rename to src/main/generated/data/forge/tags/block/ore_rates/sparse.json diff --git a/src/main/generated/data/forge/tags/blocks/ores.json b/src/main/generated/data/forge/tags/block/ores.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores.json rename to src/main/generated/data/forge/tags/block/ores.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/coal.json b/src/main/generated/data/forge/tags/block/ores/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/coal.json rename to src/main/generated/data/forge/tags/block/ores/coal.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/copper.json b/src/main/generated/data/forge/tags/block/ores/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/copper.json rename to src/main/generated/data/forge/tags/block/ores/copper.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/diamond.json b/src/main/generated/data/forge/tags/block/ores/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/diamond.json rename to src/main/generated/data/forge/tags/block/ores/diamond.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/emerald.json b/src/main/generated/data/forge/tags/block/ores/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/emerald.json rename to src/main/generated/data/forge/tags/block/ores/emerald.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/gold.json b/src/main/generated/data/forge/tags/block/ores/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/gold.json rename to src/main/generated/data/forge/tags/block/ores/gold.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/iron.json b/src/main/generated/data/forge/tags/block/ores/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/iron.json rename to src/main/generated/data/forge/tags/block/ores/iron.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/lapis.json b/src/main/generated/data/forge/tags/block/ores/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/lapis.json rename to src/main/generated/data/forge/tags/block/ores/lapis.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/netherite_scrap.json b/src/main/generated/data/forge/tags/block/ores/netherite_scrap.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/netherite_scrap.json rename to src/main/generated/data/forge/tags/block/ores/netherite_scrap.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/quartz.json b/src/main/generated/data/forge/tags/block/ores/quartz.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/quartz.json rename to src/main/generated/data/forge/tags/block/ores/quartz.json diff --git a/src/main/generated/data/forge/tags/blocks/ores/redstone.json b/src/main/generated/data/forge/tags/block/ores/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores/redstone.json rename to src/main/generated/data/forge/tags/block/ores/redstone.json diff --git a/src/main/generated/data/forge/tags/blocks/ores_in_ground/deepslate.json b/src/main/generated/data/forge/tags/block/ores_in_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores_in_ground/deepslate.json rename to src/main/generated/data/forge/tags/block/ores_in_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/blocks/ores_in_ground/netherrack.json b/src/main/generated/data/forge/tags/block/ores_in_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores_in_ground/netherrack.json rename to src/main/generated/data/forge/tags/block/ores_in_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/blocks/ores_in_ground/stone.json b/src/main/generated/data/forge/tags/block/ores_in_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/ores_in_ground/stone.json rename to src/main/generated/data/forge/tags/block/ores_in_ground/stone.json diff --git a/src/main/generated/data/forge/tags/blocks/sand.json b/src/main/generated/data/forge/tags/block/sand.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/sand.json rename to src/main/generated/data/forge/tags/block/sand.json diff --git a/src/main/generated/data/forge/tags/blocks/sand/colorless.json b/src/main/generated/data/forge/tags/block/sand/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/sand/colorless.json rename to src/main/generated/data/forge/tags/block/sand/colorless.json diff --git a/src/main/generated/data/forge/tags/blocks/sand/red.json b/src/main/generated/data/forge/tags/block/sand/red.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/sand/red.json rename to src/main/generated/data/forge/tags/block/sand/red.json diff --git a/src/main/generated/data/forge/tags/blocks/sandstone.json b/src/main/generated/data/forge/tags/block/sandstone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/sandstone.json rename to src/main/generated/data/forge/tags/block/sandstone.json diff --git a/src/main/generated/data/forge/tags/blocks/stained_glass.json b/src/main/generated/data/forge/tags/block/stained_glass.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/stained_glass.json rename to src/main/generated/data/forge/tags/block/stained_glass.json diff --git a/src/main/generated/data/forge/tags/blocks/stained_glass_panes.json b/src/main/generated/data/forge/tags/block/stained_glass_panes.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/stained_glass_panes.json rename to src/main/generated/data/forge/tags/block/stained_glass_panes.json diff --git a/src/main/generated/data/forge/tags/blocks/stone.json b/src/main/generated/data/forge/tags/block/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/stone.json rename to src/main/generated/data/forge/tags/block/stone.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks.json b/src/main/generated/data/forge/tags/block/storage_blocks.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks.json rename to src/main/generated/data/forge/tags/block/storage_blocks.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/amethyst.json b/src/main/generated/data/forge/tags/block/storage_blocks/amethyst.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/amethyst.json rename to src/main/generated/data/forge/tags/block/storage_blocks/amethyst.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/coal.json b/src/main/generated/data/forge/tags/block/storage_blocks/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/coal.json rename to src/main/generated/data/forge/tags/block/storage_blocks/coal.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/copper.json b/src/main/generated/data/forge/tags/block/storage_blocks/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/copper.json rename to src/main/generated/data/forge/tags/block/storage_blocks/copper.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/diamond.json b/src/main/generated/data/forge/tags/block/storage_blocks/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/diamond.json rename to src/main/generated/data/forge/tags/block/storage_blocks/diamond.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/emerald.json b/src/main/generated/data/forge/tags/block/storage_blocks/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/emerald.json rename to src/main/generated/data/forge/tags/block/storage_blocks/emerald.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/gold.json b/src/main/generated/data/forge/tags/block/storage_blocks/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/gold.json rename to src/main/generated/data/forge/tags/block/storage_blocks/gold.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/iron.json b/src/main/generated/data/forge/tags/block/storage_blocks/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/iron.json rename to src/main/generated/data/forge/tags/block/storage_blocks/iron.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/lapis.json b/src/main/generated/data/forge/tags/block/storage_blocks/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/lapis.json rename to src/main/generated/data/forge/tags/block/storage_blocks/lapis.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/netherite.json b/src/main/generated/data/forge/tags/block/storage_blocks/netherite.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/netherite.json rename to src/main/generated/data/forge/tags/block/storage_blocks/netherite.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/quartz.json b/src/main/generated/data/forge/tags/block/storage_blocks/quartz.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/quartz.json rename to src/main/generated/data/forge/tags/block/storage_blocks/quartz.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_copper.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_copper.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/raw_copper.json rename to src/main/generated/data/forge/tags/block/storage_blocks/raw_copper.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_gold.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_gold.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/raw_gold.json rename to src/main/generated/data/forge/tags/block/storage_blocks/raw_gold.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/raw_iron.json b/src/main/generated/data/forge/tags/block/storage_blocks/raw_iron.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/raw_iron.json rename to src/main/generated/data/forge/tags/block/storage_blocks/raw_iron.json diff --git a/src/main/generated/data/forge/tags/blocks/storage_blocks/redstone.json b/src/main/generated/data/forge/tags/block/storage_blocks/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/blocks/storage_blocks/redstone.json rename to src/main/generated/data/forge/tags/block/storage_blocks/redstone.json diff --git a/src/main/generated/data/forge/tags/entity_types/bosses.json b/src/main/generated/data/forge/tags/entity_type/bosses.json similarity index 100% rename from src/main/generated/data/forge/tags/entity_types/bosses.json rename to src/main/generated/data/forge/tags/entity_type/bosses.json diff --git a/src/main/generated/data/forge/tags/fluids/milk.json b/src/main/generated/data/forge/tags/fluid/milk.json similarity index 100% rename from src/main/generated/data/forge/tags/fluids/milk.json rename to src/main/generated/data/forge/tags/fluid/milk.json diff --git a/src/main/generated/data/forge/tags/items/armors.json b/src/main/generated/data/forge/tags/item/armors.json similarity index 100% rename from src/main/generated/data/forge/tags/items/armors.json rename to src/main/generated/data/forge/tags/item/armors.json diff --git a/src/main/generated/data/forge/tags/items/armors/boots.json b/src/main/generated/data/forge/tags/item/armors/boots.json similarity index 100% rename from src/main/generated/data/forge/tags/items/armors/boots.json rename to src/main/generated/data/forge/tags/item/armors/boots.json diff --git a/src/main/generated/data/forge/tags/items/armors/chestplates.json b/src/main/generated/data/forge/tags/item/armors/chestplates.json similarity index 100% rename from src/main/generated/data/forge/tags/items/armors/chestplates.json rename to src/main/generated/data/forge/tags/item/armors/chestplates.json diff --git a/src/main/generated/data/forge/tags/items/armors/helmets.json b/src/main/generated/data/forge/tags/item/armors/helmets.json similarity index 100% rename from src/main/generated/data/forge/tags/items/armors/helmets.json rename to src/main/generated/data/forge/tags/item/armors/helmets.json diff --git a/src/main/generated/data/forge/tags/items/armors/leggings.json b/src/main/generated/data/forge/tags/item/armors/leggings.json similarity index 100% rename from src/main/generated/data/forge/tags/items/armors/leggings.json rename to src/main/generated/data/forge/tags/item/armors/leggings.json diff --git a/src/main/generated/data/forge/tags/items/barrels.json b/src/main/generated/data/forge/tags/item/barrels.json similarity index 100% rename from src/main/generated/data/forge/tags/items/barrels.json rename to src/main/generated/data/forge/tags/item/barrels.json diff --git a/src/main/generated/data/forge/tags/items/barrels/wooden.json b/src/main/generated/data/forge/tags/item/barrels/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/items/barrels/wooden.json rename to src/main/generated/data/forge/tags/item/barrels/wooden.json diff --git a/src/main/generated/data/forge/tags/items/bones.json b/src/main/generated/data/forge/tags/item/bones.json similarity index 100% rename from src/main/generated/data/forge/tags/items/bones.json rename to src/main/generated/data/forge/tags/item/bones.json diff --git a/src/main/generated/data/forge/tags/items/bookshelves.json b/src/main/generated/data/forge/tags/item/bookshelves.json similarity index 100% rename from src/main/generated/data/forge/tags/items/bookshelves.json rename to src/main/generated/data/forge/tags/item/bookshelves.json diff --git a/src/main/generated/data/forge/tags/items/chests.json b/src/main/generated/data/forge/tags/item/chests.json similarity index 100% rename from src/main/generated/data/forge/tags/items/chests.json rename to src/main/generated/data/forge/tags/item/chests.json diff --git a/src/main/generated/data/forge/tags/items/chests/ender.json b/src/main/generated/data/forge/tags/item/chests/ender.json similarity index 100% rename from src/main/generated/data/forge/tags/items/chests/ender.json rename to src/main/generated/data/forge/tags/item/chests/ender.json diff --git a/src/main/generated/data/forge/tags/items/chests/trapped.json b/src/main/generated/data/forge/tags/item/chests/trapped.json similarity index 100% rename from src/main/generated/data/forge/tags/items/chests/trapped.json rename to src/main/generated/data/forge/tags/item/chests/trapped.json diff --git a/src/main/generated/data/forge/tags/items/chests/wooden.json b/src/main/generated/data/forge/tags/item/chests/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/items/chests/wooden.json rename to src/main/generated/data/forge/tags/item/chests/wooden.json diff --git a/src/main/generated/data/forge/tags/items/cobblestone.json b/src/main/generated/data/forge/tags/item/cobblestone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/cobblestone.json rename to src/main/generated/data/forge/tags/item/cobblestone.json diff --git a/src/main/generated/data/forge/tags/items/cobblestone/deepslate.json b/src/main/generated/data/forge/tags/item/cobblestone/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/items/cobblestone/deepslate.json rename to src/main/generated/data/forge/tags/item/cobblestone/deepslate.json diff --git a/src/main/generated/data/forge/tags/items/cobblestone/infested.json b/src/main/generated/data/forge/tags/item/cobblestone/infested.json similarity index 100% rename from src/main/generated/data/forge/tags/items/cobblestone/infested.json rename to src/main/generated/data/forge/tags/item/cobblestone/infested.json diff --git a/src/main/generated/data/forge/tags/items/cobblestone/mossy.json b/src/main/generated/data/forge/tags/item/cobblestone/mossy.json similarity index 100% rename from src/main/generated/data/forge/tags/items/cobblestone/mossy.json rename to src/main/generated/data/forge/tags/item/cobblestone/mossy.json diff --git a/src/main/generated/data/forge/tags/items/cobblestone/normal.json b/src/main/generated/data/forge/tags/item/cobblestone/normal.json similarity index 100% rename from src/main/generated/data/forge/tags/items/cobblestone/normal.json rename to src/main/generated/data/forge/tags/item/cobblestone/normal.json diff --git a/src/main/generated/data/forge/tags/items/crops.json b/src/main/generated/data/forge/tags/item/crops.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops.json rename to src/main/generated/data/forge/tags/item/crops.json diff --git a/src/main/generated/data/forge/tags/items/crops/beetroot.json b/src/main/generated/data/forge/tags/item/crops/beetroot.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops/beetroot.json rename to src/main/generated/data/forge/tags/item/crops/beetroot.json diff --git a/src/main/generated/data/forge/tags/items/crops/carrot.json b/src/main/generated/data/forge/tags/item/crops/carrot.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops/carrot.json rename to src/main/generated/data/forge/tags/item/crops/carrot.json diff --git a/src/main/generated/data/forge/tags/items/crops/nether_wart.json b/src/main/generated/data/forge/tags/item/crops/nether_wart.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops/nether_wart.json rename to src/main/generated/data/forge/tags/item/crops/nether_wart.json diff --git a/src/main/generated/data/forge/tags/items/crops/potato.json b/src/main/generated/data/forge/tags/item/crops/potato.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops/potato.json rename to src/main/generated/data/forge/tags/item/crops/potato.json diff --git a/src/main/generated/data/forge/tags/items/crops/wheat.json b/src/main/generated/data/forge/tags/item/crops/wheat.json similarity index 100% rename from src/main/generated/data/forge/tags/items/crops/wheat.json rename to src/main/generated/data/forge/tags/item/crops/wheat.json diff --git a/src/main/generated/data/forge/tags/items/dusts.json b/src/main/generated/data/forge/tags/item/dusts.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dusts.json rename to src/main/generated/data/forge/tags/item/dusts.json diff --git a/src/main/generated/data/forge/tags/items/dusts/glowstone.json b/src/main/generated/data/forge/tags/item/dusts/glowstone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dusts/glowstone.json rename to src/main/generated/data/forge/tags/item/dusts/glowstone.json diff --git a/src/main/generated/data/forge/tags/items/dusts/prismarine.json b/src/main/generated/data/forge/tags/item/dusts/prismarine.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dusts/prismarine.json rename to src/main/generated/data/forge/tags/item/dusts/prismarine.json diff --git a/src/main/generated/data/forge/tags/items/dusts/redstone.json b/src/main/generated/data/forge/tags/item/dusts/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dusts/redstone.json rename to src/main/generated/data/forge/tags/item/dusts/redstone.json diff --git a/src/main/generated/data/forge/tags/items/dyes.json b/src/main/generated/data/forge/tags/item/dyes.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes.json rename to src/main/generated/data/forge/tags/item/dyes.json diff --git a/src/main/generated/data/forge/tags/items/dyes/black.json b/src/main/generated/data/forge/tags/item/dyes/black.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/black.json rename to src/main/generated/data/forge/tags/item/dyes/black.json diff --git a/src/main/generated/data/forge/tags/items/dyes/blue.json b/src/main/generated/data/forge/tags/item/dyes/blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/blue.json rename to src/main/generated/data/forge/tags/item/dyes/blue.json diff --git a/src/main/generated/data/forge/tags/items/dyes/brown.json b/src/main/generated/data/forge/tags/item/dyes/brown.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/brown.json rename to src/main/generated/data/forge/tags/item/dyes/brown.json diff --git a/src/main/generated/data/forge/tags/items/dyes/cyan.json b/src/main/generated/data/forge/tags/item/dyes/cyan.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/cyan.json rename to src/main/generated/data/forge/tags/item/dyes/cyan.json diff --git a/src/main/generated/data/forge/tags/items/dyes/gray.json b/src/main/generated/data/forge/tags/item/dyes/gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/gray.json rename to src/main/generated/data/forge/tags/item/dyes/gray.json diff --git a/src/main/generated/data/forge/tags/items/dyes/green.json b/src/main/generated/data/forge/tags/item/dyes/green.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/green.json rename to src/main/generated/data/forge/tags/item/dyes/green.json diff --git a/src/main/generated/data/forge/tags/items/dyes/light_blue.json b/src/main/generated/data/forge/tags/item/dyes/light_blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/light_blue.json rename to src/main/generated/data/forge/tags/item/dyes/light_blue.json diff --git a/src/main/generated/data/forge/tags/items/dyes/light_gray.json b/src/main/generated/data/forge/tags/item/dyes/light_gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/light_gray.json rename to src/main/generated/data/forge/tags/item/dyes/light_gray.json diff --git a/src/main/generated/data/forge/tags/items/dyes/lime.json b/src/main/generated/data/forge/tags/item/dyes/lime.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/lime.json rename to src/main/generated/data/forge/tags/item/dyes/lime.json diff --git a/src/main/generated/data/forge/tags/items/dyes/magenta.json b/src/main/generated/data/forge/tags/item/dyes/magenta.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/magenta.json rename to src/main/generated/data/forge/tags/item/dyes/magenta.json diff --git a/src/main/generated/data/forge/tags/items/dyes/orange.json b/src/main/generated/data/forge/tags/item/dyes/orange.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/orange.json rename to src/main/generated/data/forge/tags/item/dyes/orange.json diff --git a/src/main/generated/data/forge/tags/items/dyes/pink.json b/src/main/generated/data/forge/tags/item/dyes/pink.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/pink.json rename to src/main/generated/data/forge/tags/item/dyes/pink.json diff --git a/src/main/generated/data/forge/tags/items/dyes/purple.json b/src/main/generated/data/forge/tags/item/dyes/purple.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/purple.json rename to src/main/generated/data/forge/tags/item/dyes/purple.json diff --git a/src/main/generated/data/forge/tags/items/dyes/red.json b/src/main/generated/data/forge/tags/item/dyes/red.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/red.json rename to src/main/generated/data/forge/tags/item/dyes/red.json diff --git a/src/main/generated/data/forge/tags/items/dyes/white.json b/src/main/generated/data/forge/tags/item/dyes/white.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/white.json rename to src/main/generated/data/forge/tags/item/dyes/white.json diff --git a/src/main/generated/data/forge/tags/items/dyes/yellow.json b/src/main/generated/data/forge/tags/item/dyes/yellow.json similarity index 100% rename from src/main/generated/data/forge/tags/items/dyes/yellow.json rename to src/main/generated/data/forge/tags/item/dyes/yellow.json diff --git a/src/main/generated/data/forge/tags/items/eggs.json b/src/main/generated/data/forge/tags/item/eggs.json similarity index 100% rename from src/main/generated/data/forge/tags/items/eggs.json rename to src/main/generated/data/forge/tags/item/eggs.json diff --git a/src/main/generated/data/forge/tags/items/enchanting_fuels.json b/src/main/generated/data/forge/tags/item/enchanting_fuels.json similarity index 100% rename from src/main/generated/data/forge/tags/items/enchanting_fuels.json rename to src/main/generated/data/forge/tags/item/enchanting_fuels.json diff --git a/src/main/generated/data/forge/tags/items/end_stones.json b/src/main/generated/data/forge/tags/item/end_stones.json similarity index 100% rename from src/main/generated/data/forge/tags/items/end_stones.json rename to src/main/generated/data/forge/tags/item/end_stones.json diff --git a/src/main/generated/data/forge/tags/items/ender_pearls.json b/src/main/generated/data/forge/tags/item/ender_pearls.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ender_pearls.json rename to src/main/generated/data/forge/tags/item/ender_pearls.json diff --git a/src/main/generated/data/forge/tags/items/feathers.json b/src/main/generated/data/forge/tags/item/feathers.json similarity index 100% rename from src/main/generated/data/forge/tags/items/feathers.json rename to src/main/generated/data/forge/tags/item/feathers.json diff --git a/src/main/generated/data/forge/tags/items/fence_gates.json b/src/main/generated/data/forge/tags/item/fence_gates.json similarity index 100% rename from src/main/generated/data/forge/tags/items/fence_gates.json rename to src/main/generated/data/forge/tags/item/fence_gates.json diff --git a/src/main/generated/data/forge/tags/items/fence_gates/wooden.json b/src/main/generated/data/forge/tags/item/fence_gates/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/items/fence_gates/wooden.json rename to src/main/generated/data/forge/tags/item/fence_gates/wooden.json diff --git a/src/main/generated/data/forge/tags/items/fences.json b/src/main/generated/data/forge/tags/item/fences.json similarity index 100% rename from src/main/generated/data/forge/tags/items/fences.json rename to src/main/generated/data/forge/tags/item/fences.json diff --git a/src/main/generated/data/forge/tags/items/fences/nether_brick.json b/src/main/generated/data/forge/tags/item/fences/nether_brick.json similarity index 100% rename from src/main/generated/data/forge/tags/items/fences/nether_brick.json rename to src/main/generated/data/forge/tags/item/fences/nether_brick.json diff --git a/src/main/generated/data/forge/tags/items/fences/wooden.json b/src/main/generated/data/forge/tags/item/fences/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/items/fences/wooden.json rename to src/main/generated/data/forge/tags/item/fences/wooden.json diff --git a/src/main/generated/data/forge/tags/items/gems.json b/src/main/generated/data/forge/tags/item/gems.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems.json rename to src/main/generated/data/forge/tags/item/gems.json diff --git a/src/main/generated/data/forge/tags/items/gems/amethyst.json b/src/main/generated/data/forge/tags/item/gems/amethyst.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/amethyst.json rename to src/main/generated/data/forge/tags/item/gems/amethyst.json diff --git a/src/main/generated/data/forge/tags/items/gems/diamond.json b/src/main/generated/data/forge/tags/item/gems/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/diamond.json rename to src/main/generated/data/forge/tags/item/gems/diamond.json diff --git a/src/main/generated/data/forge/tags/items/gems/emerald.json b/src/main/generated/data/forge/tags/item/gems/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/emerald.json rename to src/main/generated/data/forge/tags/item/gems/emerald.json diff --git a/src/main/generated/data/forge/tags/items/gems/lapis.json b/src/main/generated/data/forge/tags/item/gems/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/lapis.json rename to src/main/generated/data/forge/tags/item/gems/lapis.json diff --git a/src/main/generated/data/forge/tags/items/gems/prismarine.json b/src/main/generated/data/forge/tags/item/gems/prismarine.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/prismarine.json rename to src/main/generated/data/forge/tags/item/gems/prismarine.json diff --git a/src/main/generated/data/forge/tags/items/gems/quartz.json b/src/main/generated/data/forge/tags/item/gems/quartz.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gems/quartz.json rename to src/main/generated/data/forge/tags/item/gems/quartz.json diff --git a/src/main/generated/data/forge/tags/items/glass.json b/src/main/generated/data/forge/tags/item/glass.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass.json rename to src/main/generated/data/forge/tags/item/glass.json diff --git a/src/main/generated/data/forge/tags/items/glass/black.json b/src/main/generated/data/forge/tags/item/glass/black.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/black.json rename to src/main/generated/data/forge/tags/item/glass/black.json diff --git a/src/main/generated/data/forge/tags/items/glass/blue.json b/src/main/generated/data/forge/tags/item/glass/blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/blue.json rename to src/main/generated/data/forge/tags/item/glass/blue.json diff --git a/src/main/generated/data/forge/tags/items/glass/brown.json b/src/main/generated/data/forge/tags/item/glass/brown.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/brown.json rename to src/main/generated/data/forge/tags/item/glass/brown.json diff --git a/src/main/generated/data/forge/tags/items/glass/colorless.json b/src/main/generated/data/forge/tags/item/glass/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/colorless.json rename to src/main/generated/data/forge/tags/item/glass/colorless.json diff --git a/src/main/generated/data/forge/tags/items/glass/cyan.json b/src/main/generated/data/forge/tags/item/glass/cyan.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/cyan.json rename to src/main/generated/data/forge/tags/item/glass/cyan.json diff --git a/src/main/generated/data/forge/tags/items/glass/gray.json b/src/main/generated/data/forge/tags/item/glass/gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/gray.json rename to src/main/generated/data/forge/tags/item/glass/gray.json diff --git a/src/main/generated/data/forge/tags/items/glass/green.json b/src/main/generated/data/forge/tags/item/glass/green.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/green.json rename to src/main/generated/data/forge/tags/item/glass/green.json diff --git a/src/main/generated/data/forge/tags/items/glass/light_blue.json b/src/main/generated/data/forge/tags/item/glass/light_blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/light_blue.json rename to src/main/generated/data/forge/tags/item/glass/light_blue.json diff --git a/src/main/generated/data/forge/tags/items/glass/light_gray.json b/src/main/generated/data/forge/tags/item/glass/light_gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/light_gray.json rename to src/main/generated/data/forge/tags/item/glass/light_gray.json diff --git a/src/main/generated/data/forge/tags/items/glass/lime.json b/src/main/generated/data/forge/tags/item/glass/lime.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/lime.json rename to src/main/generated/data/forge/tags/item/glass/lime.json diff --git a/src/main/generated/data/forge/tags/items/glass/magenta.json b/src/main/generated/data/forge/tags/item/glass/magenta.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/magenta.json rename to src/main/generated/data/forge/tags/item/glass/magenta.json diff --git a/src/main/generated/data/forge/tags/items/glass/orange.json b/src/main/generated/data/forge/tags/item/glass/orange.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/orange.json rename to src/main/generated/data/forge/tags/item/glass/orange.json diff --git a/src/main/generated/data/forge/tags/items/glass/pink.json b/src/main/generated/data/forge/tags/item/glass/pink.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/pink.json rename to src/main/generated/data/forge/tags/item/glass/pink.json diff --git a/src/main/generated/data/forge/tags/items/glass/purple.json b/src/main/generated/data/forge/tags/item/glass/purple.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/purple.json rename to src/main/generated/data/forge/tags/item/glass/purple.json diff --git a/src/main/generated/data/forge/tags/items/glass/red.json b/src/main/generated/data/forge/tags/item/glass/red.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/red.json rename to src/main/generated/data/forge/tags/item/glass/red.json diff --git a/src/main/generated/data/forge/tags/items/glass/silica.json b/src/main/generated/data/forge/tags/item/glass/silica.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/silica.json rename to src/main/generated/data/forge/tags/item/glass/silica.json diff --git a/src/main/generated/data/forge/tags/items/glass/tinted.json b/src/main/generated/data/forge/tags/item/glass/tinted.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/tinted.json rename to src/main/generated/data/forge/tags/item/glass/tinted.json diff --git a/src/main/generated/data/forge/tags/items/glass/white.json b/src/main/generated/data/forge/tags/item/glass/white.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/white.json rename to src/main/generated/data/forge/tags/item/glass/white.json diff --git a/src/main/generated/data/forge/tags/items/glass/yellow.json b/src/main/generated/data/forge/tags/item/glass/yellow.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass/yellow.json rename to src/main/generated/data/forge/tags/item/glass/yellow.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes.json b/src/main/generated/data/forge/tags/item/glass_panes.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes.json rename to src/main/generated/data/forge/tags/item/glass_panes.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/black.json b/src/main/generated/data/forge/tags/item/glass_panes/black.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/black.json rename to src/main/generated/data/forge/tags/item/glass_panes/black.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/blue.json b/src/main/generated/data/forge/tags/item/glass_panes/blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/blue.json rename to src/main/generated/data/forge/tags/item/glass_panes/blue.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/brown.json b/src/main/generated/data/forge/tags/item/glass_panes/brown.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/brown.json rename to src/main/generated/data/forge/tags/item/glass_panes/brown.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/colorless.json b/src/main/generated/data/forge/tags/item/glass_panes/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/colorless.json rename to src/main/generated/data/forge/tags/item/glass_panes/colorless.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/cyan.json b/src/main/generated/data/forge/tags/item/glass_panes/cyan.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/cyan.json rename to src/main/generated/data/forge/tags/item/glass_panes/cyan.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/gray.json b/src/main/generated/data/forge/tags/item/glass_panes/gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/gray.json rename to src/main/generated/data/forge/tags/item/glass_panes/gray.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/green.json b/src/main/generated/data/forge/tags/item/glass_panes/green.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/green.json rename to src/main/generated/data/forge/tags/item/glass_panes/green.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/light_blue.json b/src/main/generated/data/forge/tags/item/glass_panes/light_blue.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/light_blue.json rename to src/main/generated/data/forge/tags/item/glass_panes/light_blue.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/light_gray.json b/src/main/generated/data/forge/tags/item/glass_panes/light_gray.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/light_gray.json rename to src/main/generated/data/forge/tags/item/glass_panes/light_gray.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/lime.json b/src/main/generated/data/forge/tags/item/glass_panes/lime.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/lime.json rename to src/main/generated/data/forge/tags/item/glass_panes/lime.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/magenta.json b/src/main/generated/data/forge/tags/item/glass_panes/magenta.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/magenta.json rename to src/main/generated/data/forge/tags/item/glass_panes/magenta.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/orange.json b/src/main/generated/data/forge/tags/item/glass_panes/orange.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/orange.json rename to src/main/generated/data/forge/tags/item/glass_panes/orange.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/pink.json b/src/main/generated/data/forge/tags/item/glass_panes/pink.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/pink.json rename to src/main/generated/data/forge/tags/item/glass_panes/pink.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/purple.json b/src/main/generated/data/forge/tags/item/glass_panes/purple.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/purple.json rename to src/main/generated/data/forge/tags/item/glass_panes/purple.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/red.json b/src/main/generated/data/forge/tags/item/glass_panes/red.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/red.json rename to src/main/generated/data/forge/tags/item/glass_panes/red.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/white.json b/src/main/generated/data/forge/tags/item/glass_panes/white.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/white.json rename to src/main/generated/data/forge/tags/item/glass_panes/white.json diff --git a/src/main/generated/data/forge/tags/items/glass_panes/yellow.json b/src/main/generated/data/forge/tags/item/glass_panes/yellow.json similarity index 100% rename from src/main/generated/data/forge/tags/items/glass_panes/yellow.json rename to src/main/generated/data/forge/tags/item/glass_panes/yellow.json diff --git a/src/main/generated/data/forge/tags/items/gravel.json b/src/main/generated/data/forge/tags/item/gravel.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gravel.json rename to src/main/generated/data/forge/tags/item/gravel.json diff --git a/src/main/generated/data/forge/tags/items/gunpowder.json b/src/main/generated/data/forge/tags/item/gunpowder.json similarity index 100% rename from src/main/generated/data/forge/tags/items/gunpowder.json rename to src/main/generated/data/forge/tags/item/gunpowder.json diff --git a/src/main/generated/data/forge/tags/items/heads.json b/src/main/generated/data/forge/tags/item/heads.json similarity index 100% rename from src/main/generated/data/forge/tags/items/heads.json rename to src/main/generated/data/forge/tags/item/heads.json diff --git a/src/main/generated/data/forge/tags/items/ingots.json b/src/main/generated/data/forge/tags/item/ingots.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots.json rename to src/main/generated/data/forge/tags/item/ingots.json diff --git a/src/main/generated/data/forge/tags/items/ingots/brick.json b/src/main/generated/data/forge/tags/item/ingots/brick.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/brick.json rename to src/main/generated/data/forge/tags/item/ingots/brick.json diff --git a/src/main/generated/data/forge/tags/items/ingots/copper.json b/src/main/generated/data/forge/tags/item/ingots/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/copper.json rename to src/main/generated/data/forge/tags/item/ingots/copper.json diff --git a/src/main/generated/data/forge/tags/items/ingots/gold.json b/src/main/generated/data/forge/tags/item/ingots/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/gold.json rename to src/main/generated/data/forge/tags/item/ingots/gold.json diff --git a/src/main/generated/data/forge/tags/items/ingots/iron.json b/src/main/generated/data/forge/tags/item/ingots/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/iron.json rename to src/main/generated/data/forge/tags/item/ingots/iron.json diff --git a/src/main/generated/data/forge/tags/items/ingots/nether_brick.json b/src/main/generated/data/forge/tags/item/ingots/nether_brick.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/nether_brick.json rename to src/main/generated/data/forge/tags/item/ingots/nether_brick.json diff --git a/src/main/generated/data/forge/tags/items/ingots/netherite.json b/src/main/generated/data/forge/tags/item/ingots/netherite.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ingots/netherite.json rename to src/main/generated/data/forge/tags/item/ingots/netherite.json diff --git a/src/main/generated/data/forge/tags/items/leather.json b/src/main/generated/data/forge/tags/item/leather.json similarity index 100% rename from src/main/generated/data/forge/tags/items/leather.json rename to src/main/generated/data/forge/tags/item/leather.json diff --git a/src/main/generated/data/forge/tags/items/mushrooms.json b/src/main/generated/data/forge/tags/item/mushrooms.json similarity index 100% rename from src/main/generated/data/forge/tags/items/mushrooms.json rename to src/main/generated/data/forge/tags/item/mushrooms.json diff --git a/src/main/generated/data/forge/tags/items/nether_stars.json b/src/main/generated/data/forge/tags/item/nether_stars.json similarity index 100% rename from src/main/generated/data/forge/tags/items/nether_stars.json rename to src/main/generated/data/forge/tags/item/nether_stars.json diff --git a/src/main/generated/data/forge/tags/items/netherrack.json b/src/main/generated/data/forge/tags/item/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/items/netherrack.json rename to src/main/generated/data/forge/tags/item/netherrack.json diff --git a/src/main/generated/data/forge/tags/items/nuggets.json b/src/main/generated/data/forge/tags/item/nuggets.json similarity index 100% rename from src/main/generated/data/forge/tags/items/nuggets.json rename to src/main/generated/data/forge/tags/item/nuggets.json diff --git a/src/main/generated/data/forge/tags/items/nuggets/gold.json b/src/main/generated/data/forge/tags/item/nuggets/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/nuggets/gold.json rename to src/main/generated/data/forge/tags/item/nuggets/gold.json diff --git a/src/main/generated/data/forge/tags/items/nuggets/iron.json b/src/main/generated/data/forge/tags/item/nuggets/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/nuggets/iron.json rename to src/main/generated/data/forge/tags/item/nuggets/iron.json diff --git a/src/main/generated/data/forge/tags/items/obsidian.json b/src/main/generated/data/forge/tags/item/obsidian.json similarity index 100% rename from src/main/generated/data/forge/tags/items/obsidian.json rename to src/main/generated/data/forge/tags/item/obsidian.json diff --git a/src/main/generated/data/forge/tags/items/ore_bearing_ground/deepslate.json b/src/main/generated/data/forge/tags/item/ore_bearing_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_bearing_ground/deepslate.json rename to src/main/generated/data/forge/tags/item/ore_bearing_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/items/ore_bearing_ground/netherrack.json b/src/main/generated/data/forge/tags/item/ore_bearing_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_bearing_ground/netherrack.json rename to src/main/generated/data/forge/tags/item/ore_bearing_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/items/ore_bearing_ground/stone.json b/src/main/generated/data/forge/tags/item/ore_bearing_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_bearing_ground/stone.json rename to src/main/generated/data/forge/tags/item/ore_bearing_ground/stone.json diff --git a/src/main/generated/data/forge/tags/items/ore_rates/dense.json b/src/main/generated/data/forge/tags/item/ore_rates/dense.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_rates/dense.json rename to src/main/generated/data/forge/tags/item/ore_rates/dense.json diff --git a/src/main/generated/data/forge/tags/items/ore_rates/singular.json b/src/main/generated/data/forge/tags/item/ore_rates/singular.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_rates/singular.json rename to src/main/generated/data/forge/tags/item/ore_rates/singular.json diff --git a/src/main/generated/data/forge/tags/items/ore_rates/sparse.json b/src/main/generated/data/forge/tags/item/ore_rates/sparse.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ore_rates/sparse.json rename to src/main/generated/data/forge/tags/item/ore_rates/sparse.json diff --git a/src/main/generated/data/forge/tags/items/ores.json b/src/main/generated/data/forge/tags/item/ores.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores.json rename to src/main/generated/data/forge/tags/item/ores.json diff --git a/src/main/generated/data/forge/tags/items/ores/coal.json b/src/main/generated/data/forge/tags/item/ores/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/coal.json rename to src/main/generated/data/forge/tags/item/ores/coal.json diff --git a/src/main/generated/data/forge/tags/items/ores/copper.json b/src/main/generated/data/forge/tags/item/ores/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/copper.json rename to src/main/generated/data/forge/tags/item/ores/copper.json diff --git a/src/main/generated/data/forge/tags/items/ores/diamond.json b/src/main/generated/data/forge/tags/item/ores/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/diamond.json rename to src/main/generated/data/forge/tags/item/ores/diamond.json diff --git a/src/main/generated/data/forge/tags/items/ores/emerald.json b/src/main/generated/data/forge/tags/item/ores/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/emerald.json rename to src/main/generated/data/forge/tags/item/ores/emerald.json diff --git a/src/main/generated/data/forge/tags/items/ores/gold.json b/src/main/generated/data/forge/tags/item/ores/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/gold.json rename to src/main/generated/data/forge/tags/item/ores/gold.json diff --git a/src/main/generated/data/forge/tags/items/ores/iron.json b/src/main/generated/data/forge/tags/item/ores/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/iron.json rename to src/main/generated/data/forge/tags/item/ores/iron.json diff --git a/src/main/generated/data/forge/tags/items/ores/lapis.json b/src/main/generated/data/forge/tags/item/ores/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/lapis.json rename to src/main/generated/data/forge/tags/item/ores/lapis.json diff --git a/src/main/generated/data/forge/tags/items/ores/netherite_scrap.json b/src/main/generated/data/forge/tags/item/ores/netherite_scrap.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/netherite_scrap.json rename to src/main/generated/data/forge/tags/item/ores/netherite_scrap.json diff --git a/src/main/generated/data/forge/tags/items/ores/quartz.json b/src/main/generated/data/forge/tags/item/ores/quartz.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/quartz.json rename to src/main/generated/data/forge/tags/item/ores/quartz.json diff --git a/src/main/generated/data/forge/tags/items/ores/redstone.json b/src/main/generated/data/forge/tags/item/ores/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores/redstone.json rename to src/main/generated/data/forge/tags/item/ores/redstone.json diff --git a/src/main/generated/data/forge/tags/items/ores_in_ground/deepslate.json b/src/main/generated/data/forge/tags/item/ores_in_ground/deepslate.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores_in_ground/deepslate.json rename to src/main/generated/data/forge/tags/item/ores_in_ground/deepslate.json diff --git a/src/main/generated/data/forge/tags/items/ores_in_ground/netherrack.json b/src/main/generated/data/forge/tags/item/ores_in_ground/netherrack.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores_in_ground/netherrack.json rename to src/main/generated/data/forge/tags/item/ores_in_ground/netherrack.json diff --git a/src/main/generated/data/forge/tags/items/ores_in_ground/stone.json b/src/main/generated/data/forge/tags/item/ores_in_ground/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/ores_in_ground/stone.json rename to src/main/generated/data/forge/tags/item/ores_in_ground/stone.json diff --git a/src/main/generated/data/forge/tags/items/raw_materials.json b/src/main/generated/data/forge/tags/item/raw_materials.json similarity index 100% rename from src/main/generated/data/forge/tags/items/raw_materials.json rename to src/main/generated/data/forge/tags/item/raw_materials.json diff --git a/src/main/generated/data/forge/tags/items/raw_materials/copper.json b/src/main/generated/data/forge/tags/item/raw_materials/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/items/raw_materials/copper.json rename to src/main/generated/data/forge/tags/item/raw_materials/copper.json diff --git a/src/main/generated/data/forge/tags/items/raw_materials/gold.json b/src/main/generated/data/forge/tags/item/raw_materials/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/raw_materials/gold.json rename to src/main/generated/data/forge/tags/item/raw_materials/gold.json diff --git a/src/main/generated/data/forge/tags/items/raw_materials/iron.json b/src/main/generated/data/forge/tags/item/raw_materials/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/raw_materials/iron.json rename to src/main/generated/data/forge/tags/item/raw_materials/iron.json diff --git a/src/main/generated/data/forge/tags/items/rods.json b/src/main/generated/data/forge/tags/item/rods.json similarity index 100% rename from src/main/generated/data/forge/tags/items/rods.json rename to src/main/generated/data/forge/tags/item/rods.json diff --git a/src/main/generated/data/forge/tags/items/rods/blaze.json b/src/main/generated/data/forge/tags/item/rods/blaze.json similarity index 100% rename from src/main/generated/data/forge/tags/items/rods/blaze.json rename to src/main/generated/data/forge/tags/item/rods/blaze.json diff --git a/src/main/generated/data/forge/tags/items/rods/wooden.json b/src/main/generated/data/forge/tags/item/rods/wooden.json similarity index 100% rename from src/main/generated/data/forge/tags/items/rods/wooden.json rename to src/main/generated/data/forge/tags/item/rods/wooden.json diff --git a/src/main/generated/data/forge/tags/items/sand.json b/src/main/generated/data/forge/tags/item/sand.json similarity index 100% rename from src/main/generated/data/forge/tags/items/sand.json rename to src/main/generated/data/forge/tags/item/sand.json diff --git a/src/main/generated/data/forge/tags/items/sand/colorless.json b/src/main/generated/data/forge/tags/item/sand/colorless.json similarity index 100% rename from src/main/generated/data/forge/tags/items/sand/colorless.json rename to src/main/generated/data/forge/tags/item/sand/colorless.json diff --git a/src/main/generated/data/forge/tags/items/sand/red.json b/src/main/generated/data/forge/tags/item/sand/red.json similarity index 100% rename from src/main/generated/data/forge/tags/items/sand/red.json rename to src/main/generated/data/forge/tags/item/sand/red.json diff --git a/src/main/generated/data/forge/tags/items/sandstone.json b/src/main/generated/data/forge/tags/item/sandstone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/sandstone.json rename to src/main/generated/data/forge/tags/item/sandstone.json diff --git a/src/main/generated/data/forge/tags/items/seeds.json b/src/main/generated/data/forge/tags/item/seeds.json similarity index 100% rename from src/main/generated/data/forge/tags/items/seeds.json rename to src/main/generated/data/forge/tags/item/seeds.json diff --git a/src/main/generated/data/forge/tags/items/seeds/beetroot.json b/src/main/generated/data/forge/tags/item/seeds/beetroot.json similarity index 100% rename from src/main/generated/data/forge/tags/items/seeds/beetroot.json rename to src/main/generated/data/forge/tags/item/seeds/beetroot.json diff --git a/src/main/generated/data/forge/tags/items/seeds/melon.json b/src/main/generated/data/forge/tags/item/seeds/melon.json similarity index 100% rename from src/main/generated/data/forge/tags/items/seeds/melon.json rename to src/main/generated/data/forge/tags/item/seeds/melon.json diff --git a/src/main/generated/data/forge/tags/items/seeds/pumpkin.json b/src/main/generated/data/forge/tags/item/seeds/pumpkin.json similarity index 100% rename from src/main/generated/data/forge/tags/items/seeds/pumpkin.json rename to src/main/generated/data/forge/tags/item/seeds/pumpkin.json diff --git a/src/main/generated/data/forge/tags/items/seeds/wheat.json b/src/main/generated/data/forge/tags/item/seeds/wheat.json similarity index 100% rename from src/main/generated/data/forge/tags/items/seeds/wheat.json rename to src/main/generated/data/forge/tags/item/seeds/wheat.json diff --git a/src/main/generated/data/forge/tags/items/shears.json b/src/main/generated/data/forge/tags/item/shears.json similarity index 100% rename from src/main/generated/data/forge/tags/items/shears.json rename to src/main/generated/data/forge/tags/item/shears.json diff --git a/src/main/generated/data/forge/tags/items/slimeballs.json b/src/main/generated/data/forge/tags/item/slimeballs.json similarity index 100% rename from src/main/generated/data/forge/tags/items/slimeballs.json rename to src/main/generated/data/forge/tags/item/slimeballs.json diff --git a/src/main/generated/data/forge/tags/items/stained_glass.json b/src/main/generated/data/forge/tags/item/stained_glass.json similarity index 100% rename from src/main/generated/data/forge/tags/items/stained_glass.json rename to src/main/generated/data/forge/tags/item/stained_glass.json diff --git a/src/main/generated/data/forge/tags/items/stained_glass_panes.json b/src/main/generated/data/forge/tags/item/stained_glass_panes.json similarity index 100% rename from src/main/generated/data/forge/tags/items/stained_glass_panes.json rename to src/main/generated/data/forge/tags/item/stained_glass_panes.json diff --git a/src/main/generated/data/forge/tags/items/stone.json b/src/main/generated/data/forge/tags/item/stone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/stone.json rename to src/main/generated/data/forge/tags/item/stone.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks.json b/src/main/generated/data/forge/tags/item/storage_blocks.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks.json rename to src/main/generated/data/forge/tags/item/storage_blocks.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/amethyst.json b/src/main/generated/data/forge/tags/item/storage_blocks/amethyst.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/amethyst.json rename to src/main/generated/data/forge/tags/item/storage_blocks/amethyst.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/coal.json b/src/main/generated/data/forge/tags/item/storage_blocks/coal.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/coal.json rename to src/main/generated/data/forge/tags/item/storage_blocks/coal.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/copper.json b/src/main/generated/data/forge/tags/item/storage_blocks/copper.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/copper.json rename to src/main/generated/data/forge/tags/item/storage_blocks/copper.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/diamond.json b/src/main/generated/data/forge/tags/item/storage_blocks/diamond.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/diamond.json rename to src/main/generated/data/forge/tags/item/storage_blocks/diamond.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/emerald.json b/src/main/generated/data/forge/tags/item/storage_blocks/emerald.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/emerald.json rename to src/main/generated/data/forge/tags/item/storage_blocks/emerald.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/gold.json b/src/main/generated/data/forge/tags/item/storage_blocks/gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/gold.json rename to src/main/generated/data/forge/tags/item/storage_blocks/gold.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/iron.json b/src/main/generated/data/forge/tags/item/storage_blocks/iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/iron.json rename to src/main/generated/data/forge/tags/item/storage_blocks/iron.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/lapis.json b/src/main/generated/data/forge/tags/item/storage_blocks/lapis.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/lapis.json rename to src/main/generated/data/forge/tags/item/storage_blocks/lapis.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/netherite.json b/src/main/generated/data/forge/tags/item/storage_blocks/netherite.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/netherite.json rename to src/main/generated/data/forge/tags/item/storage_blocks/netherite.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/quartz.json b/src/main/generated/data/forge/tags/item/storage_blocks/quartz.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/quartz.json rename to src/main/generated/data/forge/tags/item/storage_blocks/quartz.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/raw_copper.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_copper.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/raw_copper.json rename to src/main/generated/data/forge/tags/item/storage_blocks/raw_copper.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/raw_gold.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_gold.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/raw_gold.json rename to src/main/generated/data/forge/tags/item/storage_blocks/raw_gold.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/raw_iron.json b/src/main/generated/data/forge/tags/item/storage_blocks/raw_iron.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/raw_iron.json rename to src/main/generated/data/forge/tags/item/storage_blocks/raw_iron.json diff --git a/src/main/generated/data/forge/tags/items/storage_blocks/redstone.json b/src/main/generated/data/forge/tags/item/storage_blocks/redstone.json similarity index 100% rename from src/main/generated/data/forge/tags/items/storage_blocks/redstone.json rename to src/main/generated/data/forge/tags/item/storage_blocks/redstone.json diff --git a/src/main/generated/data/forge/tags/items/string.json b/src/main/generated/data/forge/tags/item/string.json similarity index 100% rename from src/main/generated/data/forge/tags/items/string.json rename to src/main/generated/data/forge/tags/item/string.json diff --git a/src/main/generated/data/forge/tags/items/tools.json b/src/main/generated/data/forge/tags/item/tools.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools.json rename to src/main/generated/data/forge/tags/item/tools.json diff --git a/src/main/generated/data/forge/tags/items/tools/bows.json b/src/main/generated/data/forge/tags/item/tools/bows.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools/bows.json rename to src/main/generated/data/forge/tags/item/tools/bows.json diff --git a/src/main/generated/data/forge/tags/items/tools/crossbows.json b/src/main/generated/data/forge/tags/item/tools/crossbows.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools/crossbows.json rename to src/main/generated/data/forge/tags/item/tools/crossbows.json diff --git a/src/main/generated/data/forge/tags/items/tools/fishing_rods.json b/src/main/generated/data/forge/tags/item/tools/fishing_rods.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools/fishing_rods.json rename to src/main/generated/data/forge/tags/item/tools/fishing_rods.json diff --git a/src/main/generated/data/forge/tags/items/tools/shields.json b/src/main/generated/data/forge/tags/item/tools/shields.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools/shields.json rename to src/main/generated/data/forge/tags/item/tools/shields.json diff --git a/src/main/generated/data/forge/tags/items/tools/tridents.json b/src/main/generated/data/forge/tags/item/tools/tridents.json similarity index 100% rename from src/main/generated/data/forge/tags/items/tools/tridents.json rename to src/main/generated/data/forge/tags/item/tools/tridents.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/acacia_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/acacia_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/acacia_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/acacia_leaves.json index aa80edcbe6..6b168e6299 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/acacia_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/acacia_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/azalea_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/azalea_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/azalea_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/azalea_leaves.json index 8218442c07..728ca83253 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/azalea_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/azalea_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/birch_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/birch_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/birch_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/birch_leaves.json index f8a9030f70..bc635e84ac 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/birch_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/birch_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/cherry_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/cherry_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/cherry_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/cherry_leaves.json index c0b754e62a..c5ffbbd7b3 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/cherry_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/cherry_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/cobweb.json b/src/main/generated/data/minecraft/loot_table/blocks/cobweb.json similarity index 95% rename from src/main/generated/data/minecraft/loot_tables/blocks/cobweb.json rename to src/main/generated/data/minecraft/loot_table/blocks/cobweb.json index daaa6c9d6d..0fc81358f5 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/cobweb.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/cobweb.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/dark_oak_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/dark_oak_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/dark_oak_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/dark_oak_leaves.json index fd33f9d5a9..c866e9aa27 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/dark_oak_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/dark_oak_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -145,7 +145,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/dead_bush.json b/src/main/generated/data/minecraft/loot_table/blocks/dead_bush.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/dead_bush.json rename to src/main/generated/data/minecraft/loot_table/blocks/dead_bush.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/fern.json b/src/main/generated/data/minecraft/loot_table/blocks/fern.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/fern.json rename to src/main/generated/data/minecraft/loot_table/blocks/fern.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/flowering_azalea_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/flowering_azalea_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/flowering_azalea_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/flowering_azalea_leaves.json index 4f13172715..db47a087d9 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/flowering_azalea_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/flowering_azalea_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/glow_lichen.json b/src/main/generated/data/minecraft/loot_table/blocks/glow_lichen.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/glow_lichen.json rename to src/main/generated/data/minecraft/loot_table/blocks/glow_lichen.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/hanging_roots.json b/src/main/generated/data/minecraft/loot_table/blocks/hanging_roots.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/hanging_roots.json rename to src/main/generated/data/minecraft/loot_table/blocks/hanging_roots.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/jungle_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/jungle_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/jungle_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/jungle_leaves.json index e8ca655b01..d56cdc0697 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/jungle_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/jungle_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -80,7 +80,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/large_fern.json b/src/main/generated/data/minecraft/loot_table/blocks/large_fern.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/large_fern.json rename to src/main/generated/data/minecraft/loot_table/blocks/large_fern.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/mangrove_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/mangrove_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/mangrove_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/mangrove_leaves.json index 0e11a3e235..4601627c2a 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/mangrove_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/mangrove_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/nether_sprouts.json b/src/main/generated/data/minecraft/loot_table/blocks/nether_sprouts.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/nether_sprouts.json rename to src/main/generated/data/minecraft/loot_table/blocks/nether_sprouts.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/oak_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/oak_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/oak_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/oak_leaves.json index 08e95aa5db..59c4a3c458 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/oak_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/oak_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -145,7 +145,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/seagrass.json b/src/main/generated/data/minecraft/loot_table/blocks/seagrass.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/seagrass.json rename to src/main/generated/data/minecraft/loot_table/blocks/seagrass.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/short_grass.json b/src/main/generated/data/minecraft/loot_table/blocks/short_grass.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/short_grass.json rename to src/main/generated/data/minecraft/loot_table/blocks/short_grass.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/small_dripleaf.json b/src/main/generated/data/minecraft/loot_table/blocks/small_dripleaf.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/small_dripleaf.json rename to src/main/generated/data/minecraft/loot_table/blocks/small_dripleaf.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/spruce_leaves.json b/src/main/generated/data/minecraft/loot_table/blocks/spruce_leaves.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/spruce_leaves.json rename to src/main/generated/data/minecraft/loot_table/blocks/spruce_leaves.json index cc8beff636..70115ff27f 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/spruce_leaves.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/spruce_leaves.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } @@ -79,7 +79,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/tall_grass.json b/src/main/generated/data/minecraft/loot_table/blocks/tall_grass.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/tall_grass.json rename to src/main/generated/data/minecraft/loot_table/blocks/tall_grass.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/tall_seagrass.json b/src/main/generated/data/minecraft/loot_table/blocks/tall_seagrass.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/tall_seagrass.json rename to src/main/generated/data/minecraft/loot_table/blocks/tall_seagrass.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/twisting_vines.json b/src/main/generated/data/minecraft/loot_table/blocks/twisting_vines.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/twisting_vines.json rename to src/main/generated/data/minecraft/loot_table/blocks/twisting_vines.json index cec38305ba..add7780f43 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/twisting_vines.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/twisting_vines.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/vine.json b/src/main/generated/data/minecraft/loot_table/blocks/vine.json similarity index 100% rename from src/main/generated/data/minecraft/loot_tables/blocks/vine.json rename to src/main/generated/data/minecraft/loot_table/blocks/vine.json diff --git a/src/main/generated/data/minecraft/loot_tables/blocks/weeping_vines.json b/src/main/generated/data/minecraft/loot_table/blocks/weeping_vines.json similarity index 96% rename from src/main/generated/data/minecraft/loot_tables/blocks/weeping_vines.json rename to src/main/generated/data/minecraft/loot_table/blocks/weeping_vines.json index f3ed202e5e..d782c26b41 100644 --- a/src/main/generated/data/minecraft/loot_tables/blocks/weeping_vines.json +++ b/src/main/generated/data/minecraft/loot_table/blocks/weeping_vines.json @@ -23,7 +23,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "minecraft:silk_touch", + "enchantments": "minecraft:silk_touch", "levels": { "min": 1 } diff --git a/src/main/generated/data/minecraft/recipes/acacia_chest_boat.json b/src/main/generated/data/minecraft/recipe/acacia_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/acacia_chest_boat.json rename to src/main/generated/data/minecraft/recipe/acacia_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/acacia_fence.json b/src/main/generated/data/minecraft/recipe/acacia_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/acacia_fence.json rename to src/main/generated/data/minecraft/recipe/acacia_fence.json diff --git a/src/main/generated/data/minecraft/recipes/acacia_fence_gate.json b/src/main/generated/data/minecraft/recipe/acacia_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/acacia_fence_gate.json rename to src/main/generated/data/minecraft/recipe/acacia_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/acacia_sign.json b/src/main/generated/data/minecraft/recipe/acacia_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/acacia_sign.json rename to src/main/generated/data/minecraft/recipe/acacia_sign.json diff --git a/src/main/generated/data/minecraft/recipes/activator_rail.json b/src/main/generated/data/minecraft/recipe/activator_rail.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/activator_rail.json rename to src/main/generated/data/minecraft/recipe/activator_rail.json diff --git a/src/main/generated/data/minecraft/recipes/andesite.json b/src/main/generated/data/minecraft/recipe/andesite.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/andesite.json rename to src/main/generated/data/minecraft/recipe/andesite.json diff --git a/src/main/generated/data/minecraft/recipes/anvil.json b/src/main/generated/data/minecraft/recipe/anvil.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/anvil.json rename to src/main/generated/data/minecraft/recipe/anvil.json diff --git a/src/main/generated/data/minecraft/recipes/armor_stand.json b/src/main/generated/data/minecraft/recipe/armor_stand.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/armor_stand.json rename to src/main/generated/data/minecraft/recipe/armor_stand.json diff --git a/src/main/generated/data/minecraft/recipes/arrow.json b/src/main/generated/data/minecraft/recipe/arrow.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/arrow.json rename to src/main/generated/data/minecraft/recipe/arrow.json diff --git a/src/main/generated/data/minecraft/recipes/bamboo_chest_raft.json b/src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bamboo_chest_raft.json rename to src/main/generated/data/minecraft/recipe/bamboo_chest_raft.json diff --git a/src/main/generated/data/minecraft/recipes/bamboo_fence.json b/src/main/generated/data/minecraft/recipe/bamboo_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bamboo_fence.json rename to src/main/generated/data/minecraft/recipe/bamboo_fence.json diff --git a/src/main/generated/data/minecraft/recipes/bamboo_fence_gate.json b/src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bamboo_fence_gate.json rename to src/main/generated/data/minecraft/recipe/bamboo_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/bamboo_sign.json b/src/main/generated/data/minecraft/recipe/bamboo_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bamboo_sign.json rename to src/main/generated/data/minecraft/recipe/bamboo_sign.json diff --git a/src/main/generated/data/minecraft/recipes/birch_chest_boat.json b/src/main/generated/data/minecraft/recipe/birch_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/birch_chest_boat.json rename to src/main/generated/data/minecraft/recipe/birch_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/birch_fence.json b/src/main/generated/data/minecraft/recipe/birch_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/birch_fence.json rename to src/main/generated/data/minecraft/recipe/birch_fence.json diff --git a/src/main/generated/data/minecraft/recipes/birch_fence_gate.json b/src/main/generated/data/minecraft/recipe/birch_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/birch_fence_gate.json rename to src/main/generated/data/minecraft/recipe/birch_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/birch_sign.json b/src/main/generated/data/minecraft/recipe/birch_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/birch_sign.json rename to src/main/generated/data/minecraft/recipe/birch_sign.json diff --git a/src/main/generated/data/minecraft/recipes/black_banner.json b/src/main/generated/data/minecraft/recipe/black_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/black_banner.json rename to src/main/generated/data/minecraft/recipe/black_banner.json diff --git a/src/main/generated/data/minecraft/recipes/blast_furnace.json b/src/main/generated/data/minecraft/recipe/blast_furnace.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/blast_furnace.json rename to src/main/generated/data/minecraft/recipe/blast_furnace.json diff --git a/src/main/generated/data/minecraft/recipes/blue_banner.json b/src/main/generated/data/minecraft/recipe/blue_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/blue_banner.json rename to src/main/generated/data/minecraft/recipe/blue_banner.json diff --git a/src/main/generated/data/minecraft/recipe/bolt_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/bolt_armor_trim_smithing_template.json new file mode 100644 index 0000000000..04da927228 --- /dev/null +++ b/src/main/generated/data/minecraft/recipe/bolt_armor_trim_smithing_template.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "tag": "forge:gems/diamond" + }, + "C": [ + { + "item": "minecraft:copper_block" + }, + { + "item": "minecraft:waxed_copper_block" + } + ], + "S": { + "item": "minecraft:bolt_armor_trim_smithing_template" + } + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "result": { + "count": 2, + "id": "minecraft:bolt_armor_trim_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipes/bow.json b/src/main/generated/data/minecraft/recipe/bow.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bow.json rename to src/main/generated/data/minecraft/recipe/bow.json diff --git a/src/main/generated/data/minecraft/recipes/brown_banner.json b/src/main/generated/data/minecraft/recipe/brown_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/brown_banner.json rename to src/main/generated/data/minecraft/recipe/brown_banner.json diff --git a/src/main/generated/data/minecraft/recipes/brush.json b/src/main/generated/data/minecraft/recipe/brush.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/brush.json rename to src/main/generated/data/minecraft/recipe/brush.json diff --git a/src/main/generated/data/minecraft/recipes/bucket.json b/src/main/generated/data/minecraft/recipe/bucket.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/bucket.json rename to src/main/generated/data/minecraft/recipe/bucket.json diff --git a/src/main/generated/data/minecraft/recipes/calibrated_sculk_sensor.json b/src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/calibrated_sculk_sensor.json rename to src/main/generated/data/minecraft/recipe/calibrated_sculk_sensor.json diff --git a/src/main/generated/data/minecraft/recipes/campfire.json b/src/main/generated/data/minecraft/recipe/campfire.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/campfire.json rename to src/main/generated/data/minecraft/recipe/campfire.json diff --git a/src/main/generated/data/minecraft/recipes/candle.json b/src/main/generated/data/minecraft/recipe/candle.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/candle.json rename to src/main/generated/data/minecraft/recipe/candle.json diff --git a/src/main/generated/data/minecraft/recipes/cauldron.json b/src/main/generated/data/minecraft/recipe/cauldron.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cauldron.json rename to src/main/generated/data/minecraft/recipe/cauldron.json diff --git a/src/main/generated/data/minecraft/recipes/chain.json b/src/main/generated/data/minecraft/recipe/chain.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/chain.json rename to src/main/generated/data/minecraft/recipe/chain.json diff --git a/src/main/generated/data/minecraft/recipes/cherry_chest_boat.json b/src/main/generated/data/minecraft/recipe/cherry_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cherry_chest_boat.json rename to src/main/generated/data/minecraft/recipe/cherry_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/cherry_fence.json b/src/main/generated/data/minecraft/recipe/cherry_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cherry_fence.json rename to src/main/generated/data/minecraft/recipe/cherry_fence.json diff --git a/src/main/generated/data/minecraft/recipes/cherry_fence_gate.json b/src/main/generated/data/minecraft/recipe/cherry_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cherry_fence_gate.json rename to src/main/generated/data/minecraft/recipe/cherry_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/cherry_sign.json b/src/main/generated/data/minecraft/recipe/cherry_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cherry_sign.json rename to src/main/generated/data/minecraft/recipe/cherry_sign.json diff --git a/src/main/generated/data/minecraft/recipes/chest_minecart.json b/src/main/generated/data/minecraft/recipe/chest_minecart.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/chest_minecart.json rename to src/main/generated/data/minecraft/recipe/chest_minecart.json diff --git a/src/main/generated/data/minecraft/recipes/clock.json b/src/main/generated/data/minecraft/recipe/clock.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/clock.json rename to src/main/generated/data/minecraft/recipe/clock.json diff --git a/src/main/generated/data/minecraft/recipes/coast_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/coast_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/coast_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/compass.json b/src/main/generated/data/minecraft/recipe/compass.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/compass.json rename to src/main/generated/data/minecraft/recipe/compass.json diff --git a/src/main/generated/data/minecraft/recipe/copper_door.json b/src/main/generated/data/minecraft/recipe/copper_door.json new file mode 100644 index 0000000000..ec766c5ea8 --- /dev/null +++ b/src/main/generated/data/minecraft/recipe/copper_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "##", + "##", + "##" + ], + "result": { + "count": 3, + "id": "minecraft:copper_door" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/copper_trapdoor.json b/src/main/generated/data/minecraft/recipe/copper_trapdoor.json new file mode 100644 index 0000000000..86fb486e31 --- /dev/null +++ b/src/main/generated/data/minecraft/recipe/copper_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "tag": "forge:ingots/copper" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 2, + "id": "minecraft:copper_trapdoor" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipe/crafter.json b/src/main/generated/data/minecraft/recipe/crafter.json new file mode 100644 index 0000000000..314d971c70 --- /dev/null +++ b/src/main/generated/data/minecraft/recipe/crafter.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "tag": "forge:ingots/iron" + }, + "C": { + "item": "minecraft:crafting_table" + }, + "D": { + "item": "minecraft:dropper" + }, + "R": { + "item": "minecraft:redstone" + } + }, + "pattern": [ + "###", + "#C#", + "RDR" + ], + "result": { + "count": 1, + "id": "minecraft:crafter" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipes/crimson_fence.json b/src/main/generated/data/minecraft/recipe/crimson_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/crimson_fence.json rename to src/main/generated/data/minecraft/recipe/crimson_fence.json diff --git a/src/main/generated/data/minecraft/recipes/crimson_fence_gate.json b/src/main/generated/data/minecraft/recipe/crimson_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/crimson_fence_gate.json rename to src/main/generated/data/minecraft/recipe/crimson_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/crimson_sign.json b/src/main/generated/data/minecraft/recipe/crimson_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/crimson_sign.json rename to src/main/generated/data/minecraft/recipe/crimson_sign.json diff --git a/src/main/generated/data/minecraft/recipes/crossbow.json b/src/main/generated/data/minecraft/recipe/crossbow.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/crossbow.json rename to src/main/generated/data/minecraft/recipe/crossbow.json diff --git a/src/main/generated/data/minecraft/recipes/cyan_banner.json b/src/main/generated/data/minecraft/recipe/cyan_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/cyan_banner.json rename to src/main/generated/data/minecraft/recipe/cyan_banner.json diff --git a/src/main/generated/data/minecraft/recipes/dark_oak_chest_boat.json b/src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dark_oak_chest_boat.json rename to src/main/generated/data/minecraft/recipe/dark_oak_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/dark_oak_fence.json b/src/main/generated/data/minecraft/recipe/dark_oak_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dark_oak_fence.json rename to src/main/generated/data/minecraft/recipe/dark_oak_fence.json diff --git a/src/main/generated/data/minecraft/recipes/dark_oak_fence_gate.json b/src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dark_oak_fence_gate.json rename to src/main/generated/data/minecraft/recipe/dark_oak_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/dark_oak_sign.json b/src/main/generated/data/minecraft/recipe/dark_oak_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dark_oak_sign.json rename to src/main/generated/data/minecraft/recipe/dark_oak_sign.json diff --git a/src/main/generated/data/minecraft/recipes/detector_rail.json b/src/main/generated/data/minecraft/recipe/detector_rail.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/detector_rail.json rename to src/main/generated/data/minecraft/recipe/detector_rail.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_axe.json b/src/main/generated/data/minecraft/recipe/diamond_axe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_axe.json rename to src/main/generated/data/minecraft/recipe/diamond_axe.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_boots.json b/src/main/generated/data/minecraft/recipe/diamond_boots.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_boots.json rename to src/main/generated/data/minecraft/recipe/diamond_boots.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_chestplate.json b/src/main/generated/data/minecraft/recipe/diamond_chestplate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_chestplate.json rename to src/main/generated/data/minecraft/recipe/diamond_chestplate.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_helmet.json b/src/main/generated/data/minecraft/recipe/diamond_helmet.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_helmet.json rename to src/main/generated/data/minecraft/recipe/diamond_helmet.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_hoe.json b/src/main/generated/data/minecraft/recipe/diamond_hoe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_hoe.json rename to src/main/generated/data/minecraft/recipe/diamond_hoe.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_leggings.json b/src/main/generated/data/minecraft/recipe/diamond_leggings.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_leggings.json rename to src/main/generated/data/minecraft/recipe/diamond_leggings.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_pickaxe.json b/src/main/generated/data/minecraft/recipe/diamond_pickaxe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_pickaxe.json rename to src/main/generated/data/minecraft/recipe/diamond_pickaxe.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_shovel.json b/src/main/generated/data/minecraft/recipe/diamond_shovel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_shovel.json rename to src/main/generated/data/minecraft/recipe/diamond_shovel.json diff --git a/src/main/generated/data/minecraft/recipes/diamond_sword.json b/src/main/generated/data/minecraft/recipe/diamond_sword.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diamond_sword.json rename to src/main/generated/data/minecraft/recipe/diamond_sword.json diff --git a/src/main/generated/data/minecraft/recipes/diorite.json b/src/main/generated/data/minecraft/recipe/diorite.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/diorite.json rename to src/main/generated/data/minecraft/recipe/diorite.json diff --git a/src/main/generated/data/minecraft/recipes/dispenser.json b/src/main/generated/data/minecraft/recipe/dispenser.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dispenser.json rename to src/main/generated/data/minecraft/recipe/dispenser.json diff --git a/src/main/generated/data/minecraft/recipes/dropper.json b/src/main/generated/data/minecraft/recipe/dropper.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dropper.json rename to src/main/generated/data/minecraft/recipe/dropper.json diff --git a/src/main/generated/data/minecraft/recipes/dune_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/dune_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/dune_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/dune_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/enchanting_table.json b/src/main/generated/data/minecraft/recipe/enchanting_table.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/enchanting_table.json rename to src/main/generated/data/minecraft/recipe/enchanting_table.json diff --git a/src/main/generated/data/minecraft/recipes/eye_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/eye_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/eye_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/eye_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/fishing_rod.json b/src/main/generated/data/minecraft/recipe/fishing_rod.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/fishing_rod.json rename to src/main/generated/data/minecraft/recipe/fishing_rod.json diff --git a/src/main/generated/data/minecraft/recipes/flint_and_steel.json b/src/main/generated/data/minecraft/recipe/flint_and_steel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/flint_and_steel.json rename to src/main/generated/data/minecraft/recipe/flint_and_steel.json diff --git a/src/main/generated/data/minecraft/recipe/flow_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/flow_armor_trim_smithing_template.json new file mode 100644 index 0000000000..aa1889a873 --- /dev/null +++ b/src/main/generated/data/minecraft/recipe/flow_armor_trim_smithing_template.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "#": { + "tag": "forge:gems/diamond" + }, + "C": { + "item": "minecraft:breeze_rod" + }, + "S": { + "item": "minecraft:flow_armor_trim_smithing_template" + } + }, + "pattern": [ + "#S#", + "#C#", + "###" + ], + "result": { + "count": 2, + "id": "minecraft:flow_armor_trim_smithing_template" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/recipes/golden_apple.json b/src/main/generated/data/minecraft/recipe/golden_apple.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_apple.json rename to src/main/generated/data/minecraft/recipe/golden_apple.json diff --git a/src/main/generated/data/minecraft/recipes/golden_axe.json b/src/main/generated/data/minecraft/recipe/golden_axe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_axe.json rename to src/main/generated/data/minecraft/recipe/golden_axe.json diff --git a/src/main/generated/data/minecraft/recipes/golden_boots.json b/src/main/generated/data/minecraft/recipe/golden_boots.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_boots.json rename to src/main/generated/data/minecraft/recipe/golden_boots.json diff --git a/src/main/generated/data/minecraft/recipes/golden_chestplate.json b/src/main/generated/data/minecraft/recipe/golden_chestplate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_chestplate.json rename to src/main/generated/data/minecraft/recipe/golden_chestplate.json diff --git a/src/main/generated/data/minecraft/recipes/golden_helmet.json b/src/main/generated/data/minecraft/recipe/golden_helmet.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_helmet.json rename to src/main/generated/data/minecraft/recipe/golden_helmet.json diff --git a/src/main/generated/data/minecraft/recipes/golden_hoe.json b/src/main/generated/data/minecraft/recipe/golden_hoe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_hoe.json rename to src/main/generated/data/minecraft/recipe/golden_hoe.json diff --git a/src/main/generated/data/minecraft/recipes/golden_leggings.json b/src/main/generated/data/minecraft/recipe/golden_leggings.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_leggings.json rename to src/main/generated/data/minecraft/recipe/golden_leggings.json diff --git a/src/main/generated/data/minecraft/recipes/golden_pickaxe.json b/src/main/generated/data/minecraft/recipe/golden_pickaxe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_pickaxe.json rename to src/main/generated/data/minecraft/recipe/golden_pickaxe.json diff --git a/src/main/generated/data/minecraft/recipes/golden_shovel.json b/src/main/generated/data/minecraft/recipe/golden_shovel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_shovel.json rename to src/main/generated/data/minecraft/recipe/golden_shovel.json diff --git a/src/main/generated/data/minecraft/recipes/golden_sword.json b/src/main/generated/data/minecraft/recipe/golden_sword.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/golden_sword.json rename to src/main/generated/data/minecraft/recipe/golden_sword.json diff --git a/src/main/generated/data/minecraft/recipes/gray_banner.json b/src/main/generated/data/minecraft/recipe/gray_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/gray_banner.json rename to src/main/generated/data/minecraft/recipe/gray_banner.json diff --git a/src/main/generated/data/minecraft/recipes/green_banner.json b/src/main/generated/data/minecraft/recipe/green_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/green_banner.json rename to src/main/generated/data/minecraft/recipe/green_banner.json diff --git a/src/main/generated/data/minecraft/recipes/grindstone.json b/src/main/generated/data/minecraft/recipe/grindstone.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/grindstone.json rename to src/main/generated/data/minecraft/recipe/grindstone.json diff --git a/src/main/generated/data/minecraft/recipes/heavy_weighted_pressure_plate.json b/src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/heavy_weighted_pressure_plate.json rename to src/main/generated/data/minecraft/recipe/heavy_weighted_pressure_plate.json diff --git a/src/main/generated/data/minecraft/recipes/hopper.json b/src/main/generated/data/minecraft/recipe/hopper.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/hopper.json rename to src/main/generated/data/minecraft/recipe/hopper.json diff --git a/src/main/generated/data/minecraft/recipes/host_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/host_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/host_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/host_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/iron_axe.json b/src/main/generated/data/minecraft/recipe/iron_axe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_axe.json rename to src/main/generated/data/minecraft/recipe/iron_axe.json diff --git a/src/main/generated/data/minecraft/recipes/iron_bars.json b/src/main/generated/data/minecraft/recipe/iron_bars.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_bars.json rename to src/main/generated/data/minecraft/recipe/iron_bars.json diff --git a/src/main/generated/data/minecraft/recipes/iron_boots.json b/src/main/generated/data/minecraft/recipe/iron_boots.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_boots.json rename to src/main/generated/data/minecraft/recipe/iron_boots.json diff --git a/src/main/generated/data/minecraft/recipes/iron_chestplate.json b/src/main/generated/data/minecraft/recipe/iron_chestplate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_chestplate.json rename to src/main/generated/data/minecraft/recipe/iron_chestplate.json diff --git a/src/main/generated/data/minecraft/recipes/iron_door.json b/src/main/generated/data/minecraft/recipe/iron_door.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_door.json rename to src/main/generated/data/minecraft/recipe/iron_door.json diff --git a/src/main/generated/data/minecraft/recipes/iron_helmet.json b/src/main/generated/data/minecraft/recipe/iron_helmet.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_helmet.json rename to src/main/generated/data/minecraft/recipe/iron_helmet.json diff --git a/src/main/generated/data/minecraft/recipes/iron_hoe.json b/src/main/generated/data/minecraft/recipe/iron_hoe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_hoe.json rename to src/main/generated/data/minecraft/recipe/iron_hoe.json diff --git a/src/main/generated/data/minecraft/recipes/iron_leggings.json b/src/main/generated/data/minecraft/recipe/iron_leggings.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_leggings.json rename to src/main/generated/data/minecraft/recipe/iron_leggings.json diff --git a/src/main/generated/data/minecraft/recipes/iron_pickaxe.json b/src/main/generated/data/minecraft/recipe/iron_pickaxe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_pickaxe.json rename to src/main/generated/data/minecraft/recipe/iron_pickaxe.json diff --git a/src/main/generated/data/minecraft/recipes/iron_shovel.json b/src/main/generated/data/minecraft/recipe/iron_shovel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_shovel.json rename to src/main/generated/data/minecraft/recipe/iron_shovel.json diff --git a/src/main/generated/data/minecraft/recipes/iron_sword.json b/src/main/generated/data/minecraft/recipe/iron_sword.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_sword.json rename to src/main/generated/data/minecraft/recipe/iron_sword.json diff --git a/src/main/generated/data/minecraft/recipes/iron_trapdoor.json b/src/main/generated/data/minecraft/recipe/iron_trapdoor.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/iron_trapdoor.json rename to src/main/generated/data/minecraft/recipe/iron_trapdoor.json diff --git a/src/main/generated/data/minecraft/recipes/item_frame.json b/src/main/generated/data/minecraft/recipe/item_frame.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/item_frame.json rename to src/main/generated/data/minecraft/recipe/item_frame.json diff --git a/src/main/generated/data/minecraft/recipes/jukebox.json b/src/main/generated/data/minecraft/recipe/jukebox.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/jukebox.json rename to src/main/generated/data/minecraft/recipe/jukebox.json diff --git a/src/main/generated/data/minecraft/recipes/jungle_chest_boat.json b/src/main/generated/data/minecraft/recipe/jungle_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/jungle_chest_boat.json rename to src/main/generated/data/minecraft/recipe/jungle_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/jungle_fence.json b/src/main/generated/data/minecraft/recipe/jungle_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/jungle_fence.json rename to src/main/generated/data/minecraft/recipe/jungle_fence.json diff --git a/src/main/generated/data/minecraft/recipes/jungle_fence_gate.json b/src/main/generated/data/minecraft/recipe/jungle_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/jungle_fence_gate.json rename to src/main/generated/data/minecraft/recipe/jungle_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/jungle_sign.json b/src/main/generated/data/minecraft/recipe/jungle_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/jungle_sign.json rename to src/main/generated/data/minecraft/recipe/jungle_sign.json diff --git a/src/main/generated/data/minecraft/recipes/ladder.json b/src/main/generated/data/minecraft/recipe/ladder.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/ladder.json rename to src/main/generated/data/minecraft/recipe/ladder.json diff --git a/src/main/generated/data/minecraft/recipes/lead.json b/src/main/generated/data/minecraft/recipe/lead.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/lead.json rename to src/main/generated/data/minecraft/recipe/lead.json diff --git a/src/main/generated/data/minecraft/recipes/lever.json b/src/main/generated/data/minecraft/recipe/lever.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/lever.json rename to src/main/generated/data/minecraft/recipe/lever.json diff --git a/src/main/generated/data/minecraft/recipes/light_blue_banner.json b/src/main/generated/data/minecraft/recipe/light_blue_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/light_blue_banner.json rename to src/main/generated/data/minecraft/recipe/light_blue_banner.json diff --git a/src/main/generated/data/minecraft/recipes/light_gray_banner.json b/src/main/generated/data/minecraft/recipe/light_gray_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/light_gray_banner.json rename to src/main/generated/data/minecraft/recipe/light_gray_banner.json diff --git a/src/main/generated/data/minecraft/recipes/light_weighted_pressure_plate.json b/src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/light_weighted_pressure_plate.json rename to src/main/generated/data/minecraft/recipe/light_weighted_pressure_plate.json diff --git a/src/main/generated/data/minecraft/recipes/lightning_rod.json b/src/main/generated/data/minecraft/recipe/lightning_rod.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/lightning_rod.json rename to src/main/generated/data/minecraft/recipe/lightning_rod.json diff --git a/src/main/generated/data/minecraft/recipes/lime_banner.json b/src/main/generated/data/minecraft/recipe/lime_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/lime_banner.json rename to src/main/generated/data/minecraft/recipe/lime_banner.json diff --git a/src/main/generated/data/minecraft/recipes/lodestone.json b/src/main/generated/data/minecraft/recipe/lodestone.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/lodestone.json rename to src/main/generated/data/minecraft/recipe/lodestone.json diff --git a/src/main/generated/data/minecraft/recipes/loom.json b/src/main/generated/data/minecraft/recipe/loom.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/loom.json rename to src/main/generated/data/minecraft/recipe/loom.json diff --git a/src/main/generated/data/minecraft/recipes/magenta_banner.json b/src/main/generated/data/minecraft/recipe/magenta_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/magenta_banner.json rename to src/main/generated/data/minecraft/recipe/magenta_banner.json diff --git a/src/main/generated/data/minecraft/recipes/mangrove_chest_boat.json b/src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mangrove_chest_boat.json rename to src/main/generated/data/minecraft/recipe/mangrove_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/mangrove_fence.json b/src/main/generated/data/minecraft/recipe/mangrove_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mangrove_fence.json rename to src/main/generated/data/minecraft/recipe/mangrove_fence.json diff --git a/src/main/generated/data/minecraft/recipes/mangrove_fence_gate.json b/src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mangrove_fence_gate.json rename to src/main/generated/data/minecraft/recipe/mangrove_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/mangrove_sign.json b/src/main/generated/data/minecraft/recipe/mangrove_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mangrove_sign.json rename to src/main/generated/data/minecraft/recipe/mangrove_sign.json diff --git a/src/main/generated/data/minecraft/recipes/minecart.json b/src/main/generated/data/minecraft/recipe/minecart.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/minecart.json rename to src/main/generated/data/minecraft/recipe/minecart.json diff --git a/src/main/generated/data/minecraft/recipes/mossy_cobblestone_from_moss_block.json b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mossy_cobblestone_from_moss_block.json rename to src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_moss_block.json diff --git a/src/main/generated/data/minecraft/recipes/mossy_cobblestone_from_vine.json b/src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/mossy_cobblestone_from_vine.json rename to src/main/generated/data/minecraft/recipe/mossy_cobblestone_from_vine.json diff --git a/src/main/generated/data/minecraft/recipes/netherite_ingot.json b/src/main/generated/data/minecraft/recipe/netherite_ingot.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/netherite_ingot.json rename to src/main/generated/data/minecraft/recipe/netherite_ingot.json diff --git a/src/main/generated/data/minecraft/recipes/netherite_upgrade_smithing_template.json b/src/main/generated/data/minecraft/recipe/netherite_upgrade_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/netherite_upgrade_smithing_template.json rename to src/main/generated/data/minecraft/recipe/netherite_upgrade_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/oak_chest_boat.json b/src/main/generated/data/minecraft/recipe/oak_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/oak_chest_boat.json rename to src/main/generated/data/minecraft/recipe/oak_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/oak_fence.json b/src/main/generated/data/minecraft/recipe/oak_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/oak_fence.json rename to src/main/generated/data/minecraft/recipe/oak_fence.json diff --git a/src/main/generated/data/minecraft/recipes/oak_fence_gate.json b/src/main/generated/data/minecraft/recipe/oak_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/oak_fence_gate.json rename to src/main/generated/data/minecraft/recipe/oak_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/oak_sign.json b/src/main/generated/data/minecraft/recipe/oak_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/oak_sign.json rename to src/main/generated/data/minecraft/recipe/oak_sign.json diff --git a/src/main/generated/data/minecraft/recipes/observer.json b/src/main/generated/data/minecraft/recipe/observer.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/observer.json rename to src/main/generated/data/minecraft/recipe/observer.json diff --git a/src/main/generated/data/minecraft/recipes/orange_banner.json b/src/main/generated/data/minecraft/recipe/orange_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/orange_banner.json rename to src/main/generated/data/minecraft/recipe/orange_banner.json diff --git a/src/main/generated/data/minecraft/recipes/painting.json b/src/main/generated/data/minecraft/recipe/painting.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/painting.json rename to src/main/generated/data/minecraft/recipe/painting.json diff --git a/src/main/generated/data/minecraft/recipes/pink_banner.json b/src/main/generated/data/minecraft/recipe/pink_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/pink_banner.json rename to src/main/generated/data/minecraft/recipe/pink_banner.json diff --git a/src/main/generated/data/minecraft/recipes/piston.json b/src/main/generated/data/minecraft/recipe/piston.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/piston.json rename to src/main/generated/data/minecraft/recipe/piston.json diff --git a/src/main/generated/data/minecraft/recipes/polished_deepslate.json b/src/main/generated/data/minecraft/recipe/polished_deepslate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/polished_deepslate.json rename to src/main/generated/data/minecraft/recipe/polished_deepslate.json diff --git a/src/main/generated/data/minecraft/recipes/powered_rail.json b/src/main/generated/data/minecraft/recipe/powered_rail.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/powered_rail.json rename to src/main/generated/data/minecraft/recipe/powered_rail.json diff --git a/src/main/generated/data/minecraft/recipes/purple_banner.json b/src/main/generated/data/minecraft/recipe/purple_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/purple_banner.json rename to src/main/generated/data/minecraft/recipe/purple_banner.json diff --git a/src/main/generated/data/minecraft/recipes/rail.json b/src/main/generated/data/minecraft/recipe/rail.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/rail.json rename to src/main/generated/data/minecraft/recipe/rail.json diff --git a/src/main/generated/data/minecraft/recipes/raiser_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/raiser_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/raiser_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/raiser_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/red_banner.json b/src/main/generated/data/minecraft/recipe/red_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/red_banner.json rename to src/main/generated/data/minecraft/recipe/red_banner.json diff --git a/src/main/generated/data/minecraft/recipes/redstone_torch.json b/src/main/generated/data/minecraft/recipe/redstone_torch.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/redstone_torch.json rename to src/main/generated/data/minecraft/recipe/redstone_torch.json diff --git a/src/main/generated/data/minecraft/recipes/rib_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/rib_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/rib_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/rib_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/scaffolding.json b/src/main/generated/data/minecraft/recipe/scaffolding.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/scaffolding.json rename to src/main/generated/data/minecraft/recipe/scaffolding.json diff --git a/src/main/generated/data/minecraft/recipes/sentry_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/sentry_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/sentry_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/shaper_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/shaper_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/shaper_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/shaper_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/shears.json b/src/main/generated/data/minecraft/recipe/shears.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/shears.json rename to src/main/generated/data/minecraft/recipe/shears.json diff --git a/src/main/generated/data/minecraft/recipes/shield.json b/src/main/generated/data/minecraft/recipe/shield.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/shield.json rename to src/main/generated/data/minecraft/recipe/shield.json diff --git a/src/main/generated/data/minecraft/recipes/shulker_box.json b/src/main/generated/data/minecraft/recipe/shulker_box.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/shulker_box.json rename to src/main/generated/data/minecraft/recipe/shulker_box.json diff --git a/src/main/generated/data/minecraft/recipes/silence_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/silence_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/silence_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/smithing_table.json b/src/main/generated/data/minecraft/recipe/smithing_table.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/smithing_table.json rename to src/main/generated/data/minecraft/recipe/smithing_table.json diff --git a/src/main/generated/data/minecraft/recipes/snout_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/snout_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/snout_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/snout_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/soul_campfire.json b/src/main/generated/data/minecraft/recipe/soul_campfire.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/soul_campfire.json rename to src/main/generated/data/minecraft/recipe/soul_campfire.json diff --git a/src/main/generated/data/minecraft/recipes/soul_torch.json b/src/main/generated/data/minecraft/recipe/soul_torch.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/soul_torch.json rename to src/main/generated/data/minecraft/recipe/soul_torch.json diff --git a/src/main/generated/data/minecraft/recipes/spire_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/spire_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spire_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/spire_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/spruce_chest_boat.json b/src/main/generated/data/minecraft/recipe/spruce_chest_boat.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spruce_chest_boat.json rename to src/main/generated/data/minecraft/recipe/spruce_chest_boat.json diff --git a/src/main/generated/data/minecraft/recipes/spruce_fence.json b/src/main/generated/data/minecraft/recipe/spruce_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spruce_fence.json rename to src/main/generated/data/minecraft/recipe/spruce_fence.json diff --git a/src/main/generated/data/minecraft/recipes/spruce_fence_gate.json b/src/main/generated/data/minecraft/recipe/spruce_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spruce_fence_gate.json rename to src/main/generated/data/minecraft/recipe/spruce_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/spruce_sign.json b/src/main/generated/data/minecraft/recipe/spruce_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spruce_sign.json rename to src/main/generated/data/minecraft/recipe/spruce_sign.json diff --git a/src/main/generated/data/minecraft/recipes/spyglass.json b/src/main/generated/data/minecraft/recipe/spyglass.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/spyglass.json rename to src/main/generated/data/minecraft/recipe/spyglass.json diff --git a/src/main/generated/data/minecraft/recipes/stone_axe.json b/src/main/generated/data/minecraft/recipe/stone_axe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stone_axe.json rename to src/main/generated/data/minecraft/recipe/stone_axe.json diff --git a/src/main/generated/data/minecraft/recipes/stone_hoe.json b/src/main/generated/data/minecraft/recipe/stone_hoe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stone_hoe.json rename to src/main/generated/data/minecraft/recipe/stone_hoe.json diff --git a/src/main/generated/data/minecraft/recipes/stone_pickaxe.json b/src/main/generated/data/minecraft/recipe/stone_pickaxe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stone_pickaxe.json rename to src/main/generated/data/minecraft/recipe/stone_pickaxe.json diff --git a/src/main/generated/data/minecraft/recipes/stone_shovel.json b/src/main/generated/data/minecraft/recipe/stone_shovel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stone_shovel.json rename to src/main/generated/data/minecraft/recipe/stone_shovel.json diff --git a/src/main/generated/data/minecraft/recipes/stone_sword.json b/src/main/generated/data/minecraft/recipe/stone_sword.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stone_sword.json rename to src/main/generated/data/minecraft/recipe/stone_sword.json diff --git a/src/main/generated/data/minecraft/recipes/stonecutter.json b/src/main/generated/data/minecraft/recipe/stonecutter.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/stonecutter.json rename to src/main/generated/data/minecraft/recipe/stonecutter.json diff --git a/src/main/generated/data/minecraft/recipes/tide_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/tide_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/tide_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/tide_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/tinted_glass.json b/src/main/generated/data/minecraft/recipe/tinted_glass.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/tinted_glass.json rename to src/main/generated/data/minecraft/recipe/tinted_glass.json diff --git a/src/main/generated/data/minecraft/recipes/torch.json b/src/main/generated/data/minecraft/recipe/torch.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/torch.json rename to src/main/generated/data/minecraft/recipe/torch.json diff --git a/src/main/generated/data/minecraft/recipes/trapped_chest.json b/src/main/generated/data/minecraft/recipe/trapped_chest.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/trapped_chest.json rename to src/main/generated/data/minecraft/recipe/trapped_chest.json diff --git a/src/main/generated/data/minecraft/recipes/tripwire_hook.json b/src/main/generated/data/minecraft/recipe/tripwire_hook.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/tripwire_hook.json rename to src/main/generated/data/minecraft/recipe/tripwire_hook.json diff --git a/src/main/generated/data/minecraft/recipes/vex_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/vex_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/vex_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/ward_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/ward_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/ward_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/warped_fence.json b/src/main/generated/data/minecraft/recipe/warped_fence.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/warped_fence.json rename to src/main/generated/data/minecraft/recipe/warped_fence.json diff --git a/src/main/generated/data/minecraft/recipes/warped_fence_gate.json b/src/main/generated/data/minecraft/recipe/warped_fence_gate.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/warped_fence_gate.json rename to src/main/generated/data/minecraft/recipe/warped_fence_gate.json diff --git a/src/main/generated/data/minecraft/recipes/warped_sign.json b/src/main/generated/data/minecraft/recipe/warped_sign.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/warped_sign.json rename to src/main/generated/data/minecraft/recipe/warped_sign.json diff --git a/src/main/generated/data/minecraft/recipes/wayfinder_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/wayfinder_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wayfinder_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/wayfinder_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/white_banner.json b/src/main/generated/data/minecraft/recipe/white_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/white_banner.json rename to src/main/generated/data/minecraft/recipe/white_banner.json diff --git a/src/main/generated/data/minecraft/recipes/wild_armor_trim_smithing_template.json b/src/main/generated/data/minecraft/recipe/wild_armor_trim_smithing_template.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wild_armor_trim_smithing_template.json rename to src/main/generated/data/minecraft/recipe/wild_armor_trim_smithing_template.json diff --git a/src/main/generated/data/minecraft/recipes/wooden_axe.json b/src/main/generated/data/minecraft/recipe/wooden_axe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wooden_axe.json rename to src/main/generated/data/minecraft/recipe/wooden_axe.json diff --git a/src/main/generated/data/minecraft/recipes/wooden_hoe.json b/src/main/generated/data/minecraft/recipe/wooden_hoe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wooden_hoe.json rename to src/main/generated/data/minecraft/recipe/wooden_hoe.json diff --git a/src/main/generated/data/minecraft/recipes/wooden_pickaxe.json b/src/main/generated/data/minecraft/recipe/wooden_pickaxe.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wooden_pickaxe.json rename to src/main/generated/data/minecraft/recipe/wooden_pickaxe.json diff --git a/src/main/generated/data/minecraft/recipes/wooden_shovel.json b/src/main/generated/data/minecraft/recipe/wooden_shovel.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wooden_shovel.json rename to src/main/generated/data/minecraft/recipe/wooden_shovel.json diff --git a/src/main/generated/data/minecraft/recipes/wooden_sword.json b/src/main/generated/data/minecraft/recipe/wooden_sword.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/wooden_sword.json rename to src/main/generated/data/minecraft/recipe/wooden_sword.json diff --git a/src/main/generated/data/minecraft/recipes/yellow_banner.json b/src/main/generated/data/minecraft/recipe/yellow_banner.json similarity index 100% rename from src/main/generated/data/minecraft/recipes/yellow_banner.json rename to src/main/generated/data/minecraft/recipe/yellow_banner.json diff --git a/src/main/generated/pack.mcmeta b/src/main/generated/pack.mcmeta index 09ae8ae4c3..c6656d82e3 100644 --- a/src/main/generated/pack.mcmeta +++ b/src/main/generated/pack.mcmeta @@ -3,6 +3,6 @@ "description": { "translate": "pack.forge.description" }, - "pack_format": 32 + "pack_format": 34 } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/client/CreativeModeTabSearchRegistry.java b/src/main/java/net/minecraftforge/client/CreativeModeTabSearchRegistry.java index d64fe7d831..e244336b89 100644 --- a/src/main/java/net/minecraftforge/client/CreativeModeTabSearchRegistry.java +++ b/src/main/java/net/minecraftforge/client/CreativeModeTabSearchRegistry.java @@ -7,28 +7,23 @@ package net.minecraftforge.client; import java.util.IdentityHashMap; import java.util.Map; -import net.minecraft.client.Minecraft; -import net.minecraft.client.searchtree.SearchRegistry; +import net.minecraft.client.multiplayer.SessionSearchTrees; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.CreativeModeTabRegistry; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -public class CreativeModeTabSearchRegistry -{ - private static final Map> NAME_SEARCH_KEYS = new IdentityHashMap<>(); - private static final Map> TAG_SEARCH_KEYS = new IdentityHashMap<>(); +public class CreativeModeTabSearchRegistry { + private static final Map NAME_SEARCH_KEYS = new IdentityHashMap<>(); + private static final Map TAG_SEARCH_KEYS = new IdentityHashMap<>(); - public static Map> getNameSearchKeys() { - Map> nameSearchKeys = new IdentityHashMap<>(); + public static Map getNameSearchKeys() { + Map nameSearchKeys = new IdentityHashMap<>(); nameSearchKeys.put(CreativeModeTabs.searchTab(), getNameSearchKey(CreativeModeTabs.searchTab())); - for (CreativeModeTab tab : CreativeModeTabRegistry.getSortedCreativeModeTabs()) - { - SearchRegistry.Key nameSearchKey = getNameSearchKey(tab); + for (var tab : CreativeModeTabRegistry.getSortedCreativeModeTabs()) { + var nameSearchKey = getNameSearchKey(tab); if (nameSearchKey != null) nameSearchKeys.put(tab, nameSearchKey); } @@ -36,14 +31,13 @@ public class CreativeModeTabSearchRegistry return nameSearchKeys; } - public static Map> getTagSearchKeys() { - Map> tagSearchKeys = new IdentityHashMap<>(); + public static Map getTagSearchKeys() { + Map tagSearchKeys = new IdentityHashMap<>(); tagSearchKeys.put(CreativeModeTabs.searchTab(), getTagSearchKey(CreativeModeTabs.searchTab())); - for (CreativeModeTab tab : CreativeModeTabRegistry.getSortedCreativeModeTabs()) - { - SearchRegistry.Key tagSearchKey = getTagSearchKey(tab); + for (var tab : CreativeModeTabRegistry.getSortedCreativeModeTabs()) { + var tagSearchKey = getTagSearchKey(tab); if (tagSearchKey != null) tagSearchKeys.put(tab, tagSearchKey); } @@ -52,32 +46,24 @@ public class CreativeModeTabSearchRegistry } @Nullable - public static SearchRegistry.Key getNameSearchKey(CreativeModeTab tab) - { + public static SessionSearchTrees.Key getNameSearchKey(CreativeModeTab tab) { if (tab == CreativeModeTabs.searchTab()) - return SearchRegistry.CREATIVE_NAMES; + return SessionSearchTrees.CREATIVE_NAMES; if (!tab.hasSearchBar()) return null; - return NAME_SEARCH_KEYS.computeIfAbsent(tab, k -> new SearchRegistry.Key<>()); + return NAME_SEARCH_KEYS.computeIfAbsent(tab, k -> new SessionSearchTrees.Key()); } @Nullable - public static SearchRegistry.Key getTagSearchKey(CreativeModeTab tab) - { + public static SessionSearchTrees.Key getTagSearchKey(CreativeModeTab tab) { if (tab == CreativeModeTabs.searchTab()) - return SearchRegistry.CREATIVE_TAGS; + return SessionSearchTrees.CREATIVE_TAGS; if (!tab.hasSearchBar()) return null; - return TAG_SEARCH_KEYS.computeIfAbsent(tab, k -> new SearchRegistry.Key<>()); - } - - // We do it this way to prevent unwanted classloading - @ApiStatus.Internal - public static void createSearchTrees() { - Minecraft.getInstance().createSearchTrees(); + return TAG_SEARCH_KEYS.computeIfAbsent(tab, k -> new SessionSearchTrees.Key()); } } diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 4457740a86..dc9428be38 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -14,14 +14,12 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator; -import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.datafixers.util.Either; import com.mojang.math.Constants; import net.minecraft.ChatFormatting; import net.minecraft.FileUtil; import net.minecraft.client.Camera; -import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraft.client.Options; import net.minecraft.client.color.block.BlockColors; @@ -42,21 +40,17 @@ import net.minecraft.client.model.Model; import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.multiplayer.MultiPlayerGameMode; import net.minecraft.client.multiplayer.PlayerInfo; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.client.particle.ParticleRenderType; -import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.player.Input; -import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.FogRenderer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.ShaderInstance; -import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.renderer.culling.Frustum; import net.minecraft.client.renderer.texture.SpriteContents; @@ -68,21 +62,19 @@ import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.Material; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.sounds.SoundInstance; import net.minecraft.client.sounds.SoundEngine; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.locale.Language; import net.minecraft.network.Connection; import net.minecraft.network.chat.ChatType; -import net.minecraft.network.chat.ChatTypeDecoration; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.PlayerChatMessage; -import net.minecraft.network.chat.Style; import net.minecraft.network.protocol.status.ServerStatus; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ReloadableResourceManager; @@ -94,18 +86,14 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.ArmorMaterial; -import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.GameType; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; @@ -118,7 +106,6 @@ import net.minecraftforge.client.event.ClientChatEvent; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.client.event.ClientPauseChangeEvent; import net.minecraftforge.client.event.ClientPlayerChangeGameTypeEvent; -import net.minecraftforge.client.event.ClientPlayerNetworkEvent; import net.minecraftforge.client.event.ComputeFovModifierEvent; import net.minecraftforge.client.event.CustomizeGuiOverlayEvent; import net.minecraftforge.client.event.EntityRenderersEvent; @@ -132,14 +119,12 @@ import net.minecraftforge.client.event.RegisterColorHandlersEvent; import net.minecraftforge.client.event.RegisterKeyMappingsEvent; import net.minecraftforge.client.event.RegisterParticleProvidersEvent; import net.minecraftforge.client.event.RegisterShadersEvent; -import net.minecraftforge.client.event.RenderArmEvent; import net.minecraftforge.client.event.RenderBlockScreenEffectEvent; import net.minecraftforge.client.event.RenderHandEvent; import net.minecraftforge.client.event.RenderHighlightEvent; import net.minecraftforge.client.event.RenderLevelStageEvent; import net.minecraftforge.client.event.RenderTooltipEvent; import net.minecraftforge.client.event.ScreenEvent; -import net.minecraftforge.client.event.ScreenshotEvent; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.client.event.ToastAddEvent; import net.minecraftforge.client.event.ViewportEvent; @@ -180,7 +165,6 @@ import org.jetbrains.annotations.Nullable; import org.joml.Matrix4f; import org.joml.Vector3f; -import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -424,11 +408,11 @@ public class ForgeHooksClient { } } - public static void onModifyBakingResult(Map models, ModelBakery modelBakery) { + public static void onModifyBakingResult(Map models, ModelBakery modelBakery) { ModLoader.get().postEvent(new ModelEvent.ModifyBakingResult(models, modelBakery)); } - public static void onModelBake(ModelManager modelManager, Map models, ModelBakery modelBakery) { + public static void onModelBake(ModelManager modelManager, Map models, ModelBakery modelBakery) { ModLoader.get().postEvent(new ModelEvent.BakingCompleted(modelManager, Collections.unmodifiableMap(models), modelBakery)); } @@ -526,8 +510,8 @@ public class ForgeHooksClient { } public static CustomizeGuiOverlayEvent.BossEventProgress onCustomizeBossEventProgress(GuiGraphics guiGraphics, Window window, LerpingBossEvent bossInfo, int x, int y, int increment) { - CustomizeGuiOverlayEvent.BossEventProgress evt = new CustomizeGuiOverlayEvent.BossEventProgress(window, guiGraphics, - Minecraft.getInstance().getPartialTick(), bossInfo, x, y, increment); + var evt = new CustomizeGuiOverlayEvent.BossEventProgress(window, guiGraphics, + Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false), bossInfo, x, y, increment); MinecraftForge.EVENT_BUS.post(evt); return evt; } @@ -535,7 +519,7 @@ public class ForgeHooksClient { public static void onCustomizeChatEvent(GuiGraphics guiGraphics, ChatComponent chat, Window window, int mouseX, int mouseY, int tickCount) { var minecraft = Minecraft.getInstance(); minecraft.getProfiler().push("chat"); - CustomizeGuiOverlayEvent.Chat evt = new CustomizeGuiOverlayEvent.Chat(window, guiGraphics, minecraft.getFrameTime(), 0, chat.getHeight() - 40); + var evt = new CustomizeGuiOverlayEvent.Chat(window, guiGraphics, minecraft.getTimer().getRealtimeDeltaTicks(), 0, chat.getHeight() - 40); MinecraftForge.EVENT_BUS.post(evt); guiGraphics.pose().pushPose(); // We give the absolute Y position of the chat component in the event and account for the chat component's own offsetting here. @@ -686,7 +670,7 @@ public class ForgeHooksClient { }, () -> target.forgeData = new ExtendedServerListData("VANILLA", NetworkRegistry.canConnectToVanillaServer(),0, null)); } - private static final ResourceLocation ICON_SHEET = new ResourceLocation(ForgeVersion.MOD_ID, "textures/gui/icons.png"); + private static final ResourceLocation ICON_SHEET = ResourceLocation.fromNamespaceAndPath(ForgeVersion.MOD_ID, "textures/gui/icons.png"); public static void drawForgePingInfo(JoinMultiplayerScreen gui, ServerData target, GuiGraphics guiGraphics, int x, int y, int width, int relativeMouseX, int relativeMouseY) { int idx; String tooltip; @@ -752,7 +736,7 @@ public class ForgeHooksClient { ModLoader.get().postEvent(new RegisterKeyMappingsEvent(options)); } - public static void onRegisterAdditionalModels(Set additionalModels) { + public static void onRegisterAdditionalModels(Set additionalModels) { ModLoader.get().postEvent(new ModelEvent.RegisterAdditional(additionalModels)); } @@ -804,7 +788,7 @@ public class ForgeHooksClient { @SubscribeEvent public static void registerShaders(RegisterShadersEvent event) throws IOException { - event.registerShader(new ShaderInstance(event.getResourceProvider(), new ResourceLocation("forge","rendertype_entity_unlit_translucent"), DefaultVertexFormat.NEW_ENTITY), (p_172645_) -> { + event.registerShader(new ShaderInstance(event.getResourceProvider(), ResourceLocation.fromNamespaceAndPath("forge", "rendertype_entity_unlit_translucent"), DefaultVertexFormat.NEW_ENTITY), (p_172645_) -> { rendertypeEntityTranslucentUnlitShader = p_172645_; }); } @@ -955,10 +939,10 @@ public class ForgeHooksClient { } public static ResourceLocation getShaderImportLocation(String basePath, boolean isRelative, String importPath) { - final var loc = new ResourceLocation(importPath); + final var loc = ResourceLocation.parse(importPath); final var normalised = FileUtil.normalizeResourcePath( (isRelative ? basePath : "shaders/include/") + loc.getPath()); - return new ResourceLocation(loc.getNamespace(), normalised); + return loc.withPath(normalised); } /** diff --git a/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java b/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java index 0ee3b835af..d67ccbc7e7 100644 --- a/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java +++ b/src/main/java/net/minecraftforge/client/NamedRenderTypeManager.java @@ -20,21 +20,18 @@ import java.util.Map; *

* Provides a lookup. */ -public final class NamedRenderTypeManager -{ +public final class NamedRenderTypeManager { private static ImmutableMap RENDER_TYPES; /** * Finds the {@link RenderTypeGroup} for a given name, or the {@link RenderTypeGroup#EMPTY empty group} if not found. */ - public static RenderTypeGroup get(ResourceLocation name) - { + public static RenderTypeGroup get(ResourceLocation name) { return RENDER_TYPES.getOrDefault(name, RenderTypeGroup.EMPTY); } @ApiStatus.Internal - public static void init() - { + public static void init() { var renderTypes = new HashMap(); preRegisterVanillaRenderTypes(renderTypes); var event = new RegisterNamedRenderTypesEvent(renderTypes); @@ -45,18 +42,19 @@ public final class NamedRenderTypeManager /** * Pre-registers vanilla render types. */ - private static void preRegisterVanillaRenderTypes(Map blockRenderTypes) - { - blockRenderTypes.put(new ResourceLocation("solid"), new RenderTypeGroup(RenderType.solid(), ForgeRenderTypes.ITEM_LAYERED_SOLID.get())); - blockRenderTypes.put(new ResourceLocation("cutout"), new RenderTypeGroup(RenderType.cutout(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT.get())); + private static void preRegisterVanillaRenderTypes(Map blockRenderTypes) { + blockRenderTypes.put(rl("solid"), new RenderTypeGroup(RenderType.solid(), ForgeRenderTypes.ITEM_LAYERED_SOLID.get())); + blockRenderTypes.put(rl("cutout"), new RenderTypeGroup(RenderType.cutout(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT.get())); // Generally entity/item rendering shouldn't use mipmaps, so cutout_mipped has them off by default. To enforce them, use cutout_mipped_all. - blockRenderTypes.put(new ResourceLocation("cutout_mipped"), new RenderTypeGroup(RenderType.cutoutMipped(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT.get())); - blockRenderTypes.put(new ResourceLocation("cutout_mipped_all"), new RenderTypeGroup(RenderType.cutoutMipped(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT_MIPPED.get())); - blockRenderTypes.put(new ResourceLocation("translucent"), new RenderTypeGroup(RenderType.translucent(), ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); - blockRenderTypes.put(new ResourceLocation("tripwire"), new RenderTypeGroup(RenderType.tripwire(), ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); + blockRenderTypes.put(rl("cutout_mipped"), new RenderTypeGroup(RenderType.cutoutMipped(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT.get())); + blockRenderTypes.put(rl("cutout_mipped_all"), new RenderTypeGroup(RenderType.cutoutMipped(), ForgeRenderTypes.ITEM_LAYERED_CUTOUT_MIPPED.get())); + blockRenderTypes.put(rl("translucent"), new RenderTypeGroup(RenderType.translucent(), ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); + blockRenderTypes.put(rl("tripwire"), new RenderTypeGroup(RenderType.tripwire(), ForgeRenderTypes.ITEM_LAYERED_TRANSLUCENT.get())); } - private NamedRenderTypeManager() - { + private static ResourceLocation rl(String paht) { + return ResourceLocation.withDefaultNamespace(paht); } + + private NamedRenderTypeManager() { } } diff --git a/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java b/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java index 5e8e501618..7a89d8033d 100644 --- a/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java +++ b/src/main/java/net/minecraftforge/client/event/CustomizeGuiOverlayEvent.java @@ -14,7 +14,6 @@ import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.fml.LogicalSide; import org.jetbrains.annotations.ApiStatus; -import java.util.ArrayList; import java.util.List; /** @@ -24,32 +23,27 @@ import java.util.List; * @see DebugText * @see Chat */ -public abstract class CustomizeGuiOverlayEvent extends Event -{ +public abstract class CustomizeGuiOverlayEvent extends Event { private final Window window; private final GuiGraphics guiGraphics; private final float partialTick; @ApiStatus.Internal - protected CustomizeGuiOverlayEvent(Window window, GuiGraphics guiGraphics, float partialTick) - { + protected CustomizeGuiOverlayEvent(Window window, GuiGraphics guiGraphics, float partialTick) { this.window = window; this.guiGraphics = guiGraphics; this.partialTick = partialTick; } - public Window getWindow() - { + public Window getWindow() { return window; } - public GuiGraphics getGuiGraphics() - { + public GuiGraphics getGuiGraphics() { return guiGraphics; } - public float getPartialTick() - { + public float getPartialTick() { return partialTick; } @@ -63,16 +57,14 @@ public abstract class CustomizeGuiOverlayEvent extends Event * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ @Cancelable - public static class BossEventProgress extends CustomizeGuiOverlayEvent - { + public static class BossEventProgress extends CustomizeGuiOverlayEvent { private final LerpingBossEvent bossEvent; private final int x; private final int y; private int increment; @ApiStatus.Internal - public BossEventProgress(Window window, GuiGraphics guiGraphics, float partialTick, LerpingBossEvent bossEvent, int x, int y, int increment) - { + public BossEventProgress(Window window, GuiGraphics guiGraphics, float partialTick, LerpingBossEvent bossEvent, int x, int y, int increment) { super(window, guiGraphics, partialTick); this.bossEvent = bossEvent; this.x = x; @@ -83,32 +75,28 @@ public abstract class CustomizeGuiOverlayEvent extends Event /** * @return the boss health bar currently being rendered */ - public LerpingBossEvent getBossEvent() - { + public LerpingBossEvent getBossEvent() { return bossEvent; } /** * {@return the X position of the boss health bar} */ - public int getX() - { + public int getX() { return x; } /** * {@return the Y position of the boss health bar} */ - public int getY() - { + public int getY() { return y; } /** * {@return the Y position increment before rendering the next boss health bar} */ - public int getIncrement() - { + public int getIncrement() { return increment; } @@ -117,8 +105,7 @@ public abstract class CustomizeGuiOverlayEvent extends Event * * @param increment the new Y position increment */ - public void setIncrement(int increment) - { + public void setIncrement(int increment) { this.increment = increment; } } @@ -132,15 +119,13 @@ public abstract class CustomizeGuiOverlayEvent extends Event *

This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class DebugText extends CustomizeGuiOverlayEvent - { + public static class DebugText extends CustomizeGuiOverlayEvent { private final List text; private final Side side; @ApiStatus.Internal - public DebugText(Window window, GuiGraphics guiGraphics, float partialTick, List text, Side side) - { + public DebugText(Window window, GuiGraphics guiGraphics, float partialTick, List text, Side side) { super(window, guiGraphics, partialTick); this.text = text; this.side = side; @@ -149,21 +134,10 @@ public abstract class CustomizeGuiOverlayEvent extends Event /** * @return the modifiable list of text to render on the side */ - public List getText() - { + public List getText() { return this.text; } - @Deprecated(forRemoval = true, since = "1.20.6") - public List getLeft() { - return Side.Left.equals(this.side) ? this.text : new ArrayList<>(); - } - - @Deprecated(forRemoval = true, since = "1.20.6") - public List getRight() { - return Side.Right.equals(this.side) ? this.text : new ArrayList<>(); - } - /** * @return the side of the text getting rendered. */ @@ -185,14 +159,12 @@ public abstract class CustomizeGuiOverlayEvent extends Event *

This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class Chat extends CustomizeGuiOverlayEvent - { + public static class Chat extends CustomizeGuiOverlayEvent { private int posX; private int posY; @ApiStatus.Internal - public Chat(Window window, GuiGraphics guiGraphics, float partialTick, int posX, int posY) - { + public Chat(Window window, GuiGraphics guiGraphics, float partialTick, int posX, int posY) { super(window, guiGraphics, partialTick); this.setPosX(posX); this.setPosY(posY); @@ -201,8 +173,7 @@ public abstract class CustomizeGuiOverlayEvent extends Event /** * @return the X position of the chat messages overlay */ - public int getPosX() - { + public int getPosX() { return posX; } @@ -211,16 +182,14 @@ public abstract class CustomizeGuiOverlayEvent extends Event * * @param posX the new X position */ - public void setPosX(int posX) - { + public void setPosX(int posX) { this.posX = posX; } /** * @return the Y position of the chat messages overlay */ - public int getPosY() - { + public int getPosY() { return posY; } @@ -229,8 +198,7 @@ public abstract class CustomizeGuiOverlayEvent extends Event * * @param posY the new y position */ - public void setPosY(int posY) - { + public void setPosY(int posY) { this.posY = posY; } } diff --git a/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java b/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java index dc51c1c420..3bf0989043 100644 --- a/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/EntityRenderersEvent.java @@ -164,16 +164,6 @@ public abstract class EntityRenderersEvent extends Event implements IModBusEvent return (R)skinMap.get(skinName); } - /** - * @deprecated Use getEntitySkin, return type down graded to EntityRenderer instead of LivingEntityRenderer - */ - @Nullable - @SuppressWarnings("unchecked") - @Deprecated(forRemoval = true, since = "1.20.2") - public >> R getSkin(PlayerSkin.Model skinName) { - return (R)skinMap.get(skinName); - } - /** * Returns an entity renderer for the given entity type. * @@ -188,16 +178,6 @@ public abstract class EntityRenderersEvent extends Event implements IModBusEvent return (R)renderers.get(entityType); } - /** - * @deprecated Use getEntityRenderer, return type down graded to EntityRenderer instead of LivingEntityRenderer - */ - @Nullable - @SuppressWarnings("unchecked") - @Deprecated(forRemoval = true, since = "1.20.2") - public >> R getRenderer(EntityType entityType) { - return (R) renderers.get(entityType); - } - /** * {@return the set of entity models} */ diff --git a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java index 0782fce6f1..6974bf1286 100644 --- a/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java +++ b/src/main/java/net/minecraftforge/client/event/ForgeEventFactoryClient.java @@ -11,6 +11,7 @@ import java.util.Map; import java.util.function.Consumer; import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.Cancelable; import net.minecraftforge.fml.ModLoader; import net.minecraftforge.fml.event.IModBusEvent; @@ -23,6 +24,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.datafixers.util.Pair; import net.minecraft.client.Camera; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.KeyMapping; import net.minecraft.client.MouseHandler; import net.minecraft.client.gui.GuiGraphics; @@ -254,4 +256,12 @@ public final class ForgeEventFactoryClient { public static void onRenderScreenBackground(Screen screen, GuiGraphics guiGraphics) { fire(new ScreenEvent.BackgroundRendered(screen, guiGraphics)); } + + public static void onRenderTickStart(DeltaTracker timer) { + post(new TickEvent.RenderTickEvent.Start(timer)); + } + + public static void onRenderTickEnd(DeltaTracker timer) { + post(new TickEvent.RenderTickEvent.End(timer)); + } } diff --git a/src/main/java/net/minecraftforge/client/event/ModelEvent.java b/src/main/java/net/minecraftforge/client/event/ModelEvent.java index dfe59b9fe7..507f3040a1 100644 --- a/src/main/java/net/minecraftforge/client/event/ModelEvent.java +++ b/src/main/java/net/minecraftforge/client/event/ModelEvent.java @@ -9,6 +9,7 @@ import com.google.common.base.Preconditions; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.client.model.geometry.IGeometryLoader; import net.minecraftforge.eventbus.api.Cancelable; @@ -25,12 +26,9 @@ import java.util.Set; /** * Houses events related to models. */ -public abstract class ModelEvent extends Event -{ +public abstract class ModelEvent extends Event { @ApiStatus.Internal - protected ModelEvent() - { - } + protected ModelEvent() { } /** * Fired while the {@link ModelManager} is reloading models, after the model registry is set up, but before it's @@ -48,14 +46,12 @@ public abstract class ModelEvent extends Event *

This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class ModifyBakingResult extends ModelEvent implements IModBusEvent - { - private final Map models; + public static class ModifyBakingResult extends ModelEvent implements IModBusEvent { + private final Map models; private final ModelBakery modelBakery; @ApiStatus.Internal - public ModifyBakingResult(Map models, ModelBakery modelBakery) - { + public ModifyBakingResult(Map models, ModelBakery modelBakery) { this.models = models; this.modelBakery = modelBakery; } @@ -63,16 +59,14 @@ public abstract class ModelEvent extends Event /** * @return the modifiable registry map of models and their model names */ - public Map getModels() - { + public Map getModels() { return models; } /** * @return the model loader */ - public ModelBakery getModelBakery() - { + public ModelBakery getModelBakery() { return modelBakery; } } @@ -88,15 +82,13 @@ public abstract class ModelEvent extends Event *

This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class BakingCompleted extends ModelEvent implements IModBusEvent - { + public static class BakingCompleted extends ModelEvent implements IModBusEvent { private final ModelManager modelManager; - private final Map models; + private final Map models; private final ModelBakery modelBakery; @ApiStatus.Internal - public BakingCompleted(ModelManager modelManager, Map models, ModelBakery modelBakery) - { + public BakingCompleted(ModelManager modelManager, Map models, ModelBakery modelBakery) { this.modelManager = modelManager; this.models = models; this.modelBakery = modelBakery; @@ -105,24 +97,21 @@ public abstract class ModelEvent extends Event /** * @return the model manager */ - public ModelManager getModelManager() - { + public ModelManager getModelManager() { return modelManager; } /** * @return an unmodifiable view of the registry map of models and their model names */ - public Map getModels() - { + public Map getModels() { return models; } /** * @return the model loader */ - public ModelBakery getModelBakery() - { + public ModelBakery getModelBakery() { return modelBakery; } } @@ -136,21 +125,18 @@ public abstract class ModelEvent extends Event *

This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class RegisterAdditional extends ModelEvent implements IModBusEvent - { - private final Set models; + public static class RegisterAdditional extends ModelEvent implements IModBusEvent { + private final Set models; @ApiStatus.Internal - public RegisterAdditional(Set models) - { + public RegisterAdditional(Set models) { this.models = models; } /** * Registers a model to be loaded, along with its dependencies. */ - public void register(ResourceLocation model) - { + public void register(ModelResourceLocation model) { models.add(model); } } @@ -163,22 +149,19 @@ public abstract class ModelEvent extends Event *

This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ - public static class RegisterGeometryLoaders extends ModelEvent implements IModBusEvent - { + public static class RegisterGeometryLoaders extends ModelEvent implements IModBusEvent { private final Map> loaders; @ApiStatus.Internal - public RegisterGeometryLoaders(Map> loaders) - { + public RegisterGeometryLoaders(Map> loaders) { this.loaders = loaders; } /** * Registers a new geometry loader. */ - public void register(String name, IGeometryLoader loader) - { - var key = new ResourceLocation(ModLoadingContext.get().getActiveNamespace(), name); + public void register(String name, IGeometryLoader loader) { + var key = ResourceLocation.fromNamespaceAndPath(ModLoadingContext.get().getActiveNamespace(), name); Preconditions.checkArgument(!loaders.containsKey(key), "Geometry loader already registered: " + key); loaders.put(key, loader); } diff --git a/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java index 145eb44dd5..14b362002c 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterNamedRenderTypesEvent.java @@ -61,7 +61,7 @@ public class RegisterNamedRenderTypesEvent extends Event implements IModBusEvent */ public void register(String name, RenderType blockRenderType, RenderType entityRenderType, RenderType fabulousEntityRenderType) { - var key = new ResourceLocation(ModLoadingContext.get().getActiveNamespace(), name); + var key = ResourceLocation.fromNamespaceAndPath(ModLoadingContext.get().getActiveNamespace(), name); Preconditions.checkArgument(!renderTypes.containsKey(key), "Render type already registered: " + key); Preconditions.checkArgument(blockRenderType.format() == DefaultVertexFormat.BLOCK, "The block render type must use the BLOCK vertex format."); Preconditions.checkArgument(blockRenderType.getChunkLayerId() >= 0, "Only chunk render types can be used for block rendering. Query RenderType#chunkBufferLayers() for a list."); diff --git a/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java b/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java index 8014c512a8..2dd38c81fe 100644 --- a/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RegisterTextureAtlasSpriteLoadersEvent.java @@ -26,22 +26,19 @@ import java.util.Map; *

This event is fired on the {@linkplain FMLJavaModLoadingContext#getModEventBus() mod-specific event bus}, * only on the {@linkplain LogicalSide#CLIENT logical client}.

*/ -public class RegisterTextureAtlasSpriteLoadersEvent extends Event implements IModBusEvent -{ +public class RegisterTextureAtlasSpriteLoadersEvent extends Event implements IModBusEvent { private final Map loaders; @ApiStatus.Internal - public RegisterTextureAtlasSpriteLoadersEvent(Map loaders) - { + public RegisterTextureAtlasSpriteLoadersEvent(Map loaders) { this.loaders = loaders; } /** * Registers a custom {@link ITextureAtlasSpriteLoader sprite loader}. */ - public void register(String name, ITextureAtlasSpriteLoader loader) - { - var key = new ResourceLocation(ModLoadingContext.get().getActiveNamespace(), name); + public void register(String name, ITextureAtlasSpriteLoader loader) { + var key = ResourceLocation.fromNamespaceAndPath(ModLoadingContext.get().getActiveNamespace(), name); Preconditions.checkArgument(!loaders.containsKey(key), "Sprite loader already registered: " + key); loaders.put(key, loader); } diff --git a/src/main/java/net/minecraftforge/client/event/RenderLevelStageEvent.java b/src/main/java/net/minecraftforge/client/event/RenderLevelStageEvent.java index e96b307043..2f0ed51b8f 100644 --- a/src/main/java/net/minecraftforge/client/event/RenderLevelStageEvent.java +++ b/src/main/java/net/minecraftforge/client/event/RenderLevelStageEvent.java @@ -217,7 +217,7 @@ public class RenderLevelStageEvent extends Event { } private static Stage register(String name, @Nullable RenderType renderType) throws IllegalArgumentException { - return register(new ResourceLocation(name), renderType); + return register(ResourceLocation.parse(name), renderType); } @Override @@ -239,7 +239,7 @@ public class RenderLevelStageEvent extends Event { var mc = Minecraft.getInstance(); var profiler = mc.getProfiler(); profiler.push(this.toString()); - MinecraftForge.EVENT_BUS.post(new RenderLevelStageEvent(this, levelRenderer, poseStack, projectionMatrix, renderTick, mc.getPartialTick(), camera, frustum)); + MinecraftForge.EVENT_BUS.post(new RenderLevelStageEvent(this, levelRenderer, poseStack, projectionMatrix, renderTick, mc.getTimer().getRealtimeDeltaTicks(), camera, frustum)); profiler.pop(); } } diff --git a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java b/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java index f6bcb5cbb1..97608ed330 100644 --- a/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java +++ b/src/main/java/net/minecraftforge/client/extensions/IForgeVertexFormat.java @@ -9,27 +9,29 @@ import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.blaze3d.vertex.VertexFormatElement; +import java.util.List; + /** * Extension interface for {@link VertexFormat}. */ public interface IForgeVertexFormat { - ImmutableList getElements(); + List getElements(); default boolean hasPosition() { - return getElements().stream().anyMatch(e -> e.getUsage() == VertexFormatElement.Usage.POSITION); + return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.POSITION); } default boolean hasNormal() { - return getElements().stream().anyMatch(e -> e.getUsage() == VertexFormatElement.Usage.NORMAL); + return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.NORMAL); } default boolean hasColor() { - return getElements().stream().anyMatch(e -> e.getUsage() == VertexFormatElement.Usage.COLOR); + return getElements().stream().anyMatch(e -> e.usage() == VertexFormatElement.Usage.COLOR); } default boolean hasUV(int which) { for (var e : getElements()) { - if (e.getUsage() == VertexFormatElement.Usage.UV && e.getIndex() == which) { + if (e.usage() == VertexFormatElement.Usage.UV && e.index() == which) { return true; } } diff --git a/src/main/java/net/minecraftforge/client/extensions/common/IClientBlockExtensions.java b/src/main/java/net/minecraftforge/client/extensions/common/IClientBlockExtensions.java index bf7b8eaafe..32b626b1db 100644 --- a/src/main/java/net/minecraftforge/client/extensions/common/IClientBlockExtensions.java +++ b/src/main/java/net/minecraftforge/client/extensions/common/IClientBlockExtensions.java @@ -8,11 +8,13 @@ package net.minecraftforge.client.extensions.common; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.ParticleEngine; import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; import net.minecraft.tags.FluidTags; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.Block; @@ -91,7 +93,8 @@ public interface IClientBlockExtensions { float f12 = 0.0F; if (entity instanceof LivingEntity ent) { - f12 = (float) EnchantmentHelper.getRespiration(ent) * 0.2F; + var lookup = level.registryAccess().lookup(Registries.ENCHANTMENT).get(); + f12 = (float) EnchantmentHelper.getEnchantmentLevel(lookup.getOrThrow(Enchantments.RESPIRATION), ent) * 0.2F; if (ent.hasEffect(MobEffects.WATER_BREATHING)) { f12 = f12 * 0.3F + 0.6F; diff --git a/src/main/java/net/minecraftforge/client/gui/ScreenUtils.java b/src/main/java/net/minecraftforge/client/gui/ScreenUtils.java deleted file mode 100644 index 85c8e395cc..0000000000 --- a/src/main/java/net/minecraftforge/client/gui/ScreenUtils.java +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.gui; - -import com.mojang.blaze3d.vertex.VertexFormat; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.renderer.GameRenderer; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import net.minecraft.resources.ResourceLocation; - -import com.mojang.blaze3d.systems.RenderSystem; -import org.joml.Matrix4f; - -/** - * This class provides several methods and constants used by the Config GUI classes. - * - * @author bspkrs - * @deprecated Use extension methods in {@link net.minecraftforge.client.extensions.IForgeGuiGraphics} instead - */ -@Deprecated(forRemoval = true) -public class ScreenUtils -{ - public static final int DEFAULT_BACKGROUND_COLOR = 0xF0100010; - public static final int DEFAULT_BORDER_COLOR_START = 0x505000FF; - public static final int DEFAULT_BORDER_COLOR_END = (DEFAULT_BORDER_COLOR_START & 0xFEFEFE) >> 1 | DEFAULT_BORDER_COLOR_START & 0xFF000000; - public static final String UNDO_CHAR = "\u21B6"; - public static final String RESET_CHAR = "\u2604"; - public static final String VALID = "\u2714"; - public static final String INVALID = "\u2715"; - - public static int[] TEXT_COLOR_CODES = new int[] { 0, 170, 43520, 43690, 11141120, 11141290, 16755200, 11184810, 5592405, 5592575, 5635925, 5636095, 16733525, 16733695, 16777045, 16777215, - 0, 42, 10752, 10794, 2752512, 2752554, 2763264, 2763306, 1381653, 1381695, 1392405, 1392447, 4134165, 4134207, 4144917, 4144959 }; - - public static int getColorFromFormattingCharacter(char c, boolean isLighter) - { - return TEXT_COLOR_CODES[isLighter ? "0123456789abcdef".indexOf(c) : "0123456789abcdef".indexOf(c) + 16]; - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. It is assumed that the desired texture ResourceLocation object has been bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param guiGraphics the gui graphics - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param borderSize the size of the box's borders - * @param zLevel the zLevel to draw at - */ - public static void blitWithBorder(GuiGraphics guiGraphics, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int borderSize, float zLevel) - { - blitWithBorder(guiGraphics, x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. The provided ResourceLocation object will be bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param guiGraphics the gui graphics - * @param res the ResourceLocation object that contains the desired image - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param borderSize the size of the box's borders - * @param zLevel the zLevel to draw at - */ - public static void blitWithBorder(GuiGraphics guiGraphics, ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int borderSize, float zLevel) - { - blitWithBorder(guiGraphics, res, x, y, u, v, width, height, textureWidth, textureHeight, borderSize, borderSize, borderSize, borderSize, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. The provided ResourceLocation object will be bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param guiGraphics the gui graphics - * @param res the ResourceLocation object that contains the desired image - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param topBorder the size of the box's top border - * @param bottomBorder the size of the box's bottom border - * @param leftBorder the size of the box's left border - * @param rightBorder the size of the box's right border - * @param zLevel the zLevel to draw at - */ - public static void blitWithBorder(GuiGraphics guiGraphics, ResourceLocation res, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) - { - RenderSystem.setShader(GameRenderer::getPositionTexShader); - RenderSystem.setShaderTexture(0, res); - blitWithBorder(guiGraphics, x, y, u, v, width, height, textureWidth, textureHeight, topBorder, bottomBorder, leftBorder, rightBorder, zLevel); - } - - /** - * Draws a textured box of any size (smallest size is borderSize * 2 square) based on a fixed size textured box with continuous borders - * and filler. It is assumed that the desired texture ResourceLocation object has been bound using - * Minecraft.getMinecraft().getTextureManager().bindTexture(resourceLocation). - * - * @param guiGraphics the gui graphics - * @param x x axis offset - * @param y y axis offset - * @param u bound resource location image x offset - * @param v bound resource location image y offset - * @param width the desired box width - * @param height the desired box height - * @param textureWidth the width of the box texture in the resource location image - * @param textureHeight the height of the box texture in the resource location image - * @param topBorder the size of the box's top border - * @param bottomBorder the size of the box's bottom border - * @param leftBorder the size of the box's left border - * @param rightBorder the size of the box's right border - * @param zLevel the zLevel to draw at - */ - public static void blitWithBorder(GuiGraphics guiGraphics, int x, int y, int u, int v, int width, int height, int textureWidth, int textureHeight, - int topBorder, int bottomBorder, int leftBorder, int rightBorder, float zLevel) - { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - - int fillerWidth = textureWidth - leftBorder - rightBorder; - int fillerHeight = textureHeight - topBorder - bottomBorder; - int canvasWidth = width - leftBorder - rightBorder; - int canvasHeight = height - topBorder - bottomBorder; - int xPasses = canvasWidth / fillerWidth; - int remainderWidth = canvasWidth % fillerWidth; - int yPasses = canvasHeight / fillerHeight; - int remainderHeight = canvasHeight % fillerHeight; - - // Draw Border - // Top Left - drawTexturedModalRect(guiGraphics, x, y, u, v, leftBorder, topBorder, zLevel); - // Top Right - drawTexturedModalRect(guiGraphics, x + leftBorder + canvasWidth, y, u + leftBorder + fillerWidth, v, rightBorder, topBorder, zLevel); - // Bottom Left - drawTexturedModalRect(guiGraphics, x, y + topBorder + canvasHeight, u, v + topBorder + fillerHeight, leftBorder, bottomBorder, zLevel); - // Bottom Right - drawTexturedModalRect(guiGraphics, x + leftBorder + canvasWidth, y + topBorder + canvasHeight, u + leftBorder + fillerWidth, v + topBorder + fillerHeight, rightBorder, bottomBorder, zLevel); - - for (int i = 0; i < xPasses + (remainderWidth > 0 ? 1 : 0); i++) - { - // Top Border - drawTexturedModalRect(guiGraphics, x + leftBorder + (i * fillerWidth), y, u + leftBorder, v, (i == xPasses ? remainderWidth : fillerWidth), topBorder, zLevel); - // Bottom Border - drawTexturedModalRect(guiGraphics, x + leftBorder + (i * fillerWidth), y + topBorder + canvasHeight, u + leftBorder, v + topBorder + fillerHeight, (i == xPasses ? remainderWidth : fillerWidth), bottomBorder, zLevel); - - // Throw in some filler for good measure - for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) - drawTexturedModalRect(guiGraphics, x + leftBorder + (i * fillerWidth), y + topBorder + (j * fillerHeight), u + leftBorder, v + topBorder, (i == xPasses ? remainderWidth : fillerWidth), (j == yPasses ? remainderHeight : fillerHeight), zLevel); - } - - // Side Borders - for (int j = 0; j < yPasses + (remainderHeight > 0 ? 1 : 0); j++) - { - // Left Border - drawTexturedModalRect(guiGraphics, x, y + topBorder + (j * fillerHeight), u, v + topBorder, leftBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); - // Right Border - drawTexturedModalRect(guiGraphics, x + leftBorder + canvasWidth, y + topBorder + (j * fillerHeight), u + leftBorder + fillerWidth, v + topBorder, rightBorder, (j == yPasses ? remainderHeight : fillerHeight), zLevel); - } - } - - /** - * @deprecated Use {@link GuiGraphics#blit(ResourceLocation, int, int, int, int, int, int)} instead - */ - @Deprecated(forRemoval = true) - public static void drawTexturedModalRect(GuiGraphics guiGraphics, int x, int y, int u, int v, int width, int height, float zLevel) - { - final float uScale = 1f / 0x100; - final float vScale = 1f / 0x100; - - Tesselator tessellator = Tesselator.getInstance(); - BufferBuilder wr = tessellator.getBuilder(); - wr.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - Matrix4f matrix = guiGraphics.pose().last().pose(); - wr.vertex(matrix, x , y + height, zLevel).uv( u * uScale, ((v + height) * vScale)).endVertex(); - wr.vertex(matrix, x + width, y + height, zLevel).uv((u + width) * uScale, ((v + height) * vScale)).endVertex(); - wr.vertex(matrix, x + width, y , zLevel).uv((u + width) * uScale, ( v * vScale)).endVertex(); - wr.vertex(matrix, x , y , zLevel).uv( u * uScale, ( v * vScale)).endVertex(); - tessellator.end(); - } - - /** - * @deprecated Use {@link GuiGraphics#fillGradient(int, int, int, int, int, int, int)} instead - */ - @Deprecated(forRemoval = true) - public static void drawGradientRect(Matrix4f mat, int zLevel, int left, int top, int right, int bottom, int startColor, int endColor) - { - float startAlpha = (float)(startColor >> 24 & 255) / 255.0F; - float startRed = (float)(startColor >> 16 & 255) / 255.0F; - float startGreen = (float)(startColor >> 8 & 255) / 255.0F; - float startBlue = (float)(startColor & 255) / 255.0F; - float endAlpha = (float)(endColor >> 24 & 255) / 255.0F; - float endRed = (float)(endColor >> 16 & 255) / 255.0F; - float endGreen = (float)(endColor >> 8 & 255) / 255.0F; - float endBlue = (float)(endColor & 255) / 255.0F; - - RenderSystem.enableDepthTest(); - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.setShader(GameRenderer::getPositionColorShader); - - Tesselator tessellator = Tesselator.getInstance(); - BufferBuilder buffer = tessellator.getBuilder(); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - buffer.vertex(mat, right, top, zLevel).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - buffer.vertex(mat, left, top, zLevel).color(startRed, startGreen, startBlue, startAlpha).endVertex(); - buffer.vertex(mat, left, bottom, zLevel).color( endRed, endGreen, endBlue, endAlpha).endVertex(); - buffer.vertex(mat, right, bottom, zLevel).color( endRed, endGreen, endBlue, endAlpha).endVertex(); - tessellator.end(); - - RenderSystem.disableBlend(); - } - - public static void blitInscribed(GuiGraphics guiGraphics, ResourceLocation texture, int x, int y, int boundsWidth, int boundsHeight, int rectWidth, int rectHeight) - { - blitInscribed(guiGraphics, texture, x, y, boundsWidth, boundsHeight, rectWidth, rectHeight, true, true); - } - - public static void blitInscribed(GuiGraphics guiGraphics, ResourceLocation texture, int x, int y, int boundsWidth, int boundsHeight, int rectWidth, int rectHeight, boolean centerX, boolean centerY) - { - if (rectWidth * boundsHeight > rectHeight * boundsWidth) { - int h = boundsHeight; - boundsHeight = (int) (boundsWidth * ((double) rectHeight / rectWidth)); - if (centerY) y += (h - boundsHeight) / 2; - } else { - int w = boundsWidth; - boundsWidth = (int) (boundsHeight * ((double) rectWidth / rectHeight)); - if (centerX) x += (w - boundsWidth) / 2; - } - - guiGraphics.blit(texture, x, y, boundsWidth, boundsHeight, 0.0f,0.0f, rectWidth, rectHeight, rectWidth, rectHeight); - } -} diff --git a/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java b/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java index 34bddc9e5f..a2d8771dc5 100644 --- a/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java +++ b/src/main/java/net/minecraftforge/client/gui/TitleScreenModUpdateIndicator.java @@ -19,41 +19,32 @@ import net.minecraftforge.client.loading.ClientModLoader; import net.minecraftforge.api.distmarker.Dist; @OnlyIn(Dist.CLIENT) -public class TitleScreenModUpdateIndicator extends Screen -{ +public class TitleScreenModUpdateIndicator extends Screen { - private static final ResourceLocation VERSION_CHECK_ICONS = new ResourceLocation(ForgeVersion.MOD_ID, "textures/gui/version_check_icons.png"); + private static final ResourceLocation VERSION_CHECK_ICONS = ResourceLocation.fromNamespaceAndPath(ForgeVersion.MOD_ID, "textures/gui/version_check_icons.png"); private final Button modButton; private VersionChecker.Status showNotification = null; private boolean hasCheckedForUpdates = false; - public TitleScreenModUpdateIndicator(Button modButton) - { + public TitleScreenModUpdateIndicator(Button modButton) { super(Component.translatable("forge.menu.updatescreen.title")); this.modButton = modButton; } @Override - public void init() - { - if (!hasCheckedForUpdates) - { + public void init() { + if (!hasCheckedForUpdates) { if (modButton != null) - { showNotification = ClientModLoader.checkForUpdates(); - } hasCheckedForUpdates = true; } } @Override - public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) - { + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { if (showNotification == null || !showNotification.shouldDraw() || !FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.VERSION_CHECK)) - { return; - } int x = modButton.getX(); int y = modButton.getY(); @@ -63,8 +54,7 @@ public class TitleScreenModUpdateIndicator extends Screen guiGraphics.blit(VERSION_CHECK_ICONS, x + w - (h / 2 + 4), y + (h / 2 - 4), showNotification.getSheetOffset() * 8, (showNotification.isAnimated() && ((System.currentTimeMillis() / 800 & 1) == 1)) ? 8 : 0, 8, 8, 64, 16); } - public static TitleScreenModUpdateIndicator init(TitleScreen guiMainMenu, Button modButton) - { + public static TitleScreenModUpdateIndicator init(TitleScreen guiMainMenu, Button modButton) { TitleScreenModUpdateIndicator titleScreenModUpdateIndicator = new TitleScreenModUpdateIndicator(modButton); //titleScreenModUpdateIndicator.resize(guiMainMenu.getMinecraft(), guiMainMenu.width, guiMainMenu.height); titleScreenModUpdateIndicator.init(); diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java b/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java index 91af619af3..f1afc60255 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ModListWidget.java @@ -23,7 +23,7 @@ import com.mojang.blaze3d.systems.RenderSystem; public class ModListWidget extends ObjectSelectionList { private static String stripControlCodes(String value) { return net.minecraft.util.StringUtil.stripColor(value); } - private static final ResourceLocation VERSION_CHECK_ICONS = new ResourceLocation(ForgeVersion.MOD_ID, "textures/gui/version_check_icons.png"); + private static final ResourceLocation VERSION_CHECK_ICONS = ResourceLocation.fromNamespaceAndPath(ForgeVersion.MOD_ID, "textures/gui/version_check_icons.png"); private final int listWidth; private final ModListScreen parent; diff --git a/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java b/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java index 7ce820a792..3a230e1f19 100644 --- a/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java +++ b/src/main/java/net/minecraftforge/client/gui/widget/ScrollPanel.java @@ -6,10 +6,7 @@ package net.minecraftforge.client.gui.widget; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.*; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Renderable; @@ -151,7 +148,7 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen * Draws the background of the scroll panel. This runs AFTER Scissors are enabled. */ protected void drawBackground(GuiGraphics guiGraphics, Tesselator tess, float partialTick) { - BufferBuilder worldr = tess.getBuilder(); +// BufferBuilder worldr = tess.getBuilder(); if (this.client.level != null) { this.drawGradientRect(guiGraphics, this.left, this.top, this.right, this.bottom, bgColorFrom, bgColorTo); @@ -268,7 +265,6 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen @Override public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { Tesselator tess = Tesselator.getInstance(); - BufferBuilder worldr = tess.getBuilder(); double scale = client.getWindow().getGuiScale(); RenderSystem.enableScissor((int)(left * scale), (int)(client.getWindow().getHeight() - (bottom * scale)), @@ -295,36 +291,36 @@ public abstract class ScrollPanel extends AbstractContainerEventHandler implemen int barBgBlue = this.barBgColor & 0xff; RenderSystem.setShader(GameRenderer::getPositionColorShader); - worldr.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - worldr.vertex(barLeft, this.bottom, 0.0D).color(barBgRed, barBgGreen, barBgBlue, barBgAlpha).endVertex(); - worldr.vertex(barLeft + barWidth, this.bottom, 0.0D).color(barBgRed, barBgGreen, barBgBlue, barBgAlpha).endVertex(); - worldr.vertex(barLeft + barWidth, this.top, 0.0D).color(barBgRed, barBgGreen, barBgBlue, barBgAlpha).endVertex(); - worldr.vertex(barLeft, this.top, 0.0D).color(barBgRed, barBgGreen, barBgBlue, barBgAlpha).endVertex(); - tess.end(); + BufferBuilder worldr = tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + worldr.addVertex(barLeft, this.bottom, 0.0F).setColor(barBgRed, barBgGreen, barBgBlue, barBgAlpha); + worldr.addVertex(barLeft + barWidth, this.bottom, 0.0F).setColor(barBgRed, barBgGreen, barBgBlue, barBgAlpha); + worldr.addVertex(barLeft + barWidth, this.top, 0.0F).setColor(barBgRed, barBgGreen, barBgBlue, barBgAlpha); + worldr.addVertex(barLeft, this.top, 0.0F).setColor(barBgRed, barBgGreen, barBgBlue, barBgAlpha); + BufferUploader.drawWithShader(worldr.buildOrThrow()); int barAlpha = this.barColor >> 24 & 0xff; int barRed = this.barColor >> 16 & 0xff; int barGreen = this.barColor >> 8 & 0xff; int barBlue = this.barColor & 0xff; - worldr.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - worldr.vertex(barLeft, barTop + barHeight, 0.0D).color(barRed, barGreen, barBlue, barAlpha).endVertex(); - worldr.vertex(barLeft + barWidth, barTop + barHeight, 0.0D).color(barRed, barGreen, barBlue, barAlpha).endVertex(); - worldr.vertex(barLeft + barWidth, barTop, 0.0D).color(barRed, barGreen, barBlue, barAlpha).endVertex(); - worldr.vertex(barLeft, barTop, 0.0D).color(barRed, barGreen, barBlue, barAlpha).endVertex(); - tess.end(); + worldr = tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + worldr.addVertex(barLeft, barTop + barHeight, 0.0F).setColor(barRed, barGreen, barBlue, barAlpha); + worldr.addVertex(barLeft + barWidth, barTop + barHeight, 0.0F).setColor(barRed, barGreen, barBlue, barAlpha); + worldr.addVertex(barLeft + barWidth, barTop, 0.0F).setColor(barRed, barGreen, barBlue, barAlpha); + worldr.addVertex(barLeft, barTop, 0.0F).setColor(barRed, barGreen, barBlue, barAlpha); + BufferUploader.drawWithShader(worldr.buildOrThrow()); int barBorderAlpha = this.barBorderColor >> 24 & 0xff; int barBorderRed = this.barBorderColor >> 16 & 0xff; int barBorderGreen = this.barBorderColor >> 8 & 0xff; int barBorderBlue = this.barBorderColor & 0xff; - worldr.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); - worldr.vertex(barLeft, barTop + barHeight - 1, 0.0D).color(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha).endVertex(); - worldr.vertex(barLeft + barWidth - 1, barTop + barHeight - 1, 0.0D).color(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha).endVertex(); - worldr.vertex(barLeft + barWidth - 1, barTop, 0.0D).color(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha).endVertex(); - worldr.vertex(barLeft, barTop, 0.0D).color(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha).endVertex(); - tess.end(); + worldr = tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + worldr.addVertex(barLeft, barTop + barHeight - 1, 0.0F).setColor(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha); + worldr.addVertex(barLeft + barWidth - 1, barTop + barHeight - 1, 0.0F).setColor(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha); + worldr.addVertex(barLeft + barWidth - 1, barTop, 0.0F).setColor(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha); + worldr.addVertex(barLeft, barTop, 0.0F).setColor(barBorderRed, barBorderGreen, barBorderBlue, barBorderAlpha); + BufferUploader.drawWithShader(worldr.buildOrThrow()); } RenderSystem.disableBlend(); diff --git a/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java b/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java index cac0704515..a943a5777a 100644 --- a/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java +++ b/src/main/java/net/minecraftforge/client/loading/ForgeLoadingOverlay.java @@ -10,7 +10,6 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferUploader; -import com.mojang.blaze3d.vertex.BufferVertexConsumer; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -44,6 +43,7 @@ import java.util.function.Supplier; * It is somewhat a copy of the superclass render method. */ public class ForgeLoadingOverlay extends LoadingOverlay { + private static final ResourceLocation MOJANG_STUDIOS_LOGO_LOCATION = ResourceLocation.withDefaultNamespace("textures/gui/title/mojangstudios.png"); private final Minecraft minecraft; private final ReloadInstance reload; private final Consumer> onFinish; @@ -57,7 +57,7 @@ public class ForgeLoadingOverlay extends LoadingOverlay { this.reload = reloader; this.onFinish = errorConsumer; this.displayWindow = displayWindow; - displayWindow.addMojangTexture(mc.getTextureManager().getTexture(new ResourceLocation("textures/gui/title/mojangstudios.png")).getId()); + displayWindow.addMojangTexture(mc.getTextureManager().getTexture(MOJANG_STUDIOS_LOGO_LOCATION).getId()); this.progress = StartupMessageManager.prependProgressBar("Minecraft Progress", 100); } @@ -99,13 +99,13 @@ public class ForgeLoadingOverlay extends LoadingOverlay { var wbottom = Mth.clamp(fbHeight * 0.5f + scale * theight, 0, fbHeight); GlStateManager.glActiveTexture(GlConst.GL_TEXTURE0); RenderSystem.disableCull(); - BufferBuilder bufferbuilder = Tesselator.getInstance().getBuilder(); + BufferBuilder bufferbuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, fade); RenderSystem.getModelViewMatrix().identity(); RenderSystem.setProjectionMatrix(new Matrix4f().setOrtho(0.0F, fbWidth, 0.0F, fbHeight, 0.1f, -0.1f), VertexSorting.ORTHOGRAPHIC_Z); RenderSystem.setShader(GameRenderer::getPositionColorShader); // This is fill in around the edges - it's empty solid colour - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + // top box from hpos addQuad(bufferbuilder, 0, fbWidth, wtop, fbHeight, colour, fade); // bottom box to hpos @@ -114,21 +114,21 @@ public class ForgeLoadingOverlay extends LoadingOverlay { addQuad(bufferbuilder, 0, wleft, wtop, wbottom, colour, fade); // right box from wpos addQuad(bufferbuilder, wright, fbWidth, wtop, wbottom, colour, fade); - BufferUploader.drawWithShader(bufferbuilder.end()); + BufferUploader.drawWithShader(bufferbuilder.buildOrThrow()); // This is the actual screen data from the loading screen RenderSystem.enableBlend(); RenderSystem.blendFunc(GlConst.GL_SRC_ALPHA, GlConst.GL_ONE_MINUS_SRC_ALPHA); RenderSystem.setShader(GameRenderer::getPositionTexColorShader); RenderSystem.setShaderTexture(0, displayWindow.getFramebufferTextureId()); - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); - bufferbuilder.vertex(wleft, wbottom, 0f).uv(0, 0).color(1f, 1f, 1f, fade).endVertex(); - bufferbuilder.vertex(wright, wbottom, 0f).uv(1, 0).color(1f, 1f, 1f, fade).endVertex(); - bufferbuilder.vertex(wright, wtop, 0f).uv(1, 1).color(1f, 1f, 1f, fade).endVertex(); - bufferbuilder.vertex(wleft, wtop, 0f).uv(0, 1).color(1f, 1f, 1f, fade).endVertex(); + bufferbuilder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR); + bufferbuilder.addVertex(wleft, wbottom, 0f).setUv(0, 0).setColor(1f, 1f, 1f, fade); + bufferbuilder.addVertex(wright, wbottom, 0f).setUv(1, 0).setColor(1f, 1f, 1f, fade); + bufferbuilder.addVertex(wright, wtop, 0f).setUv(1, 1).setColor(1f, 1f, 1f, fade); + bufferbuilder.addVertex(wleft, wtop, 0f).setUv(0, 1).setColor(1f, 1f, 1f, fade); GL30C.glTexParameterIi(GlConst.GL_TEXTURE_2D, GlConst.GL_TEXTURE_MIN_FILTER, GlConst.GL_NEAREST); GL30C.glTexParameterIi(GlConst.GL_TEXTURE_2D, GlConst.GL_TEXTURE_MAG_FILTER, GlConst.GL_NEAREST); - BufferUploader.drawWithShader(bufferbuilder.end()); + BufferUploader.drawWithShader(bufferbuilder.buildOrThrow()); RenderSystem.defaultBlendFunc(); RenderSystem.disableBlend(); RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1f); @@ -154,10 +154,10 @@ public class ForgeLoadingOverlay extends LoadingOverlay { } } - private static void addQuad(BufferVertexConsumer bufferbuilder, float x0, float x1, float y0, float y1, ColourScheme.Colour colour, float fade) { - bufferbuilder.vertex(x0, y0, 0f).color(colour.redf(), colour.greenf(), colour.bluef(), fade).endVertex(); - bufferbuilder.vertex(x0, y1, 0f).color(colour.redf(), colour.greenf(), colour.bluef(), fade).endVertex(); - bufferbuilder.vertex(x1, y1, 0f).color(colour.redf(), colour.greenf(), colour.bluef(), fade).endVertex(); - bufferbuilder.vertex(x1, y0, 0f).color(colour.redf(), colour.greenf(), colour.bluef(), fade).endVertex(); + private static void addQuad(BufferBuilder bufferbuilder, float x0, float x1, float y0, float y1, ColourScheme.Colour colour, float fade) { + bufferbuilder.addVertex(x0, y0, 0f).setColor(colour.redf(), colour.greenf(), colour.bluef(), fade); + bufferbuilder.addVertex(x0, y1, 0f).setColor(colour.redf(), colour.greenf(), colour.bluef(), fade); + bufferbuilder.addVertex(x1, y1, 0f).setColor(colour.redf(), colour.greenf(), colour.bluef(), fade); + bufferbuilder.addVertex(x1, y0, 0f).setColor(colour.redf(), colour.greenf(), colour.bluef(), fade); } } diff --git a/src/main/java/net/minecraftforge/client/model/CompositeModel.java b/src/main/java/net/minecraftforge/client/model/CompositeModel.java index baefc99f11..043e5d91c2 100644 --- a/src/main/java/net/minecraftforge/client/model/CompositeModel.java +++ b/src/main/java/net/minecraftforge/client/model/CompositeModel.java @@ -68,7 +68,7 @@ public class CompositeModel implements IUnbakedGeometry } @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { Material particleLocation = context.getMaterial("particle"); TextureAtlasSprite particle = spriteGetter.apply(particleLocation); @@ -84,7 +84,7 @@ public class CompositeModel implements IUnbakedGeometry if (!context.isComponentVisible(name, true)) continue; var model = entry.getValue(); - bakedPartsBuilder.put(name, model.bake(baker, model, spriteGetter, modelState, modelLocation, true)); + bakedPartsBuilder.put(name, model.bake(baker, model, spriteGetter, modelState, true)); } var bakedParts = bakedPartsBuilder.build(); diff --git a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java index 0078602d67..36cffc1e74 100644 --- a/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java +++ b/src/main/java/net/minecraftforge/client/model/DynamicFluidContainerModel.java @@ -44,6 +44,8 @@ import org.joml.Vector3f; import java.util.Map; import java.util.function.Function; +import static net.minecraftforge.client.model.geometry.StandaloneGeometryBakingContext.LOCATION; + /** * A dynamic fluid container model, capable of re-texturing itself at runtime to match the contained fluid. *

@@ -88,7 +90,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { Material particleLocation = context.hasMaterial("particle") ? context.getMaterial("particle") : null; Material baseLocation = context.hasMaterial("base") ? context.getMaterial("base") : null; @@ -114,7 +116,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry baseSprite, modelState, modelLocation); + var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> baseSprite, modelState); modelBuilder.addQuads(normalRenderTypes, quads); } @@ -135,7 +137,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry fluidSprite, transformedState, modelLocation); // Bake with fluid texture + var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> fluidSprite, transformedState); // Bake with fluid texture var emissive = applyFluidLuminosity && fluid.getFluidType().getLightLevel() > 0; var renderTypes = getLayerRenderTypes(emissive); @@ -153,7 +155,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry sprite, transformedState, modelLocation); // Bake with selected texture + var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> sprite, transformedState); // Bake with selected texture modelBuilder.addQuads(normalRenderTypes, quads); } } @@ -177,7 +179,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry } @Override - protected void addQuads(IGeometryBakingContext context, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelState, ResourceLocation modelLocation) + protected void addQuads(IGeometryBakingContext context, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelState) { // If there is a root transform, undo the ModelState transform, apply it, then re-apply the ModelState transform. // This is necessary because of things like UV locking, which should only respond to the ModelState, and as such @@ -54,14 +54,14 @@ public class ElementsModel extends SimpleUnbakedGeometry for (Direction direction : element.faces.keySet()) { var face = element.faces.get(direction); - var sprite = spriteGetter.apply(context.getMaterial(face.texture)); - var quad = BlockModel.bakeFace(element, face, sprite, direction, modelState, modelLocation); + var sprite = spriteGetter.apply(context.getMaterial(face.texture())); + var quad = BlockModel.bakeFace(element, face, sprite, direction, modelState); postTransform.processInPlace(quad); - if (face.cullForDirection == null) + if (face.cullForDirection() == null) modelBuilder.addUnculledFace(quad); else - modelBuilder.addCulledFace(modelState.getRotation().rotateTransform(face.cullForDirection), quad); + modelBuilder.addCulledFace(modelState.getRotation().rotateTransform(face.cullForDirection()), quad); } } } diff --git a/src/main/java/net/minecraftforge/client/model/EmptyModel.java b/src/main/java/net/minecraftforge/client/model/EmptyModel.java index cf87096f3a..100cc97232 100644 --- a/src/main/java/net/minecraftforge/client/model/EmptyModel.java +++ b/src/main/java/net/minecraftforge/client/model/EmptyModel.java @@ -46,13 +46,13 @@ public class EmptyModel extends SimpleUnbakedGeometry } @Override - protected void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform, ResourceLocation modelLocation) + protected void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform) { // NO-OP } @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { return BAKED; } diff --git a/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java b/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java index 6b93e67e33..59999748d9 100644 --- a/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java +++ b/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java @@ -70,7 +70,7 @@ public class ExtendedBlockModelDeserializer extends BlockModel.Deserializer if (jsonobject.has("render_type")) { var renderTypeHintName = GsonHelper.getAsString(jsonobject, "render_type"); - model.customData.setRenderTypeHint(new ResourceLocation(renderTypeHintName)); + model.customData.setRenderTypeHint(ResourceLocation.parse(renderTypeHintName)); } if (jsonobject.has("visibility")) @@ -91,7 +91,7 @@ public class ExtendedBlockModelDeserializer extends BlockModel.Deserializer if (!object.has("loader")) return null; - var name = new ResourceLocation(GsonHelper.getAsString(object, "loader")); + var name = ResourceLocation.parse(GsonHelper.getAsString(object, "loader")); var loader = GeometryLoaderManager.get(name); if (loader == null) throw new JsonParseException(String.format(Locale.ENGLISH, "Model loader '%s' not found. Registered loaders: %s", name, GeometryLoaderManager.getLoaderList())); diff --git a/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java b/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java index d46cd11b2b..b0b41f2489 100644 --- a/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java +++ b/src/main/java/net/minecraftforge/client/model/ForgeFaceData.java @@ -30,10 +30,8 @@ import net.minecraft.util.ExtraCodecs; * @param ambientOcclusion If this face has AO * @param calculateNormals If we should manually calculate the normals for this block or inherit facing normals like vanilla */ -public record ForgeFaceData(int color, int blockLight, int skyLight, boolean ambientOcclusion, boolean calculateNormals) -{ - public ForgeFaceData(int color, int blockLight, int skyLight, boolean ambientOcclusion) - { +public record ForgeFaceData(int color, int blockLight, int skyLight, boolean ambientOcclusion, boolean calculateNormals) { + public ForgeFaceData(int color, int blockLight, int skyLight, boolean ambientOcclusion) { this(color, blockLight, skyLight, ambientOcclusion, false); } @@ -59,12 +57,9 @@ public record ForgeFaceData(int color, int blockLight, int skyLight, boolean amb * @throws JsonParseException */ @Nullable - public static ForgeFaceData read(@Nullable JsonElement obj, @Nullable ForgeFaceData fallback) throws JsonParseException - { - if(obj == null) - { + public static ForgeFaceData read(@Nullable JsonElement obj, @Nullable ForgeFaceData fallback) throws JsonParseException { + if (obj == null) return fallback; - } return CODEC.parse(JsonOps.INSTANCE, obj).getOrThrow(JsonParseException::new); } } \ No newline at end of file diff --git a/src/main/java/net/minecraftforge/client/model/ForgeItemModelShaper.java b/src/main/java/net/minecraftforge/client/model/ForgeItemModelShaper.java index 760d3f76a8..374070a028 100644 --- a/src/main/java/net/minecraftforge/client/model/ForgeItemModelShaper.java +++ b/src/main/java/net/minecraftforge/client/model/ForgeItemModelShaper.java @@ -54,6 +54,6 @@ public class ForgeItemModelShaper extends ItemModelShaper { public ModelResourceLocation getLocation(@NotNull ItemStack stack) { ModelResourceLocation location = locations.get(ForgeRegistries.ITEMS.getDelegateOrThrow(stack.getItem())); - return location == null ? ModelBakery.MISSING_MODEL_LOCATION : location; + return location == null ? ModelBakery.MISSING_MODEL_VARIANT : location; } } diff --git a/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java b/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java index f82cf0aac3..52d6cdeb9c 100644 --- a/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java +++ b/src/main/java/net/minecraftforge/client/model/IQuadTransformer.java @@ -7,7 +7,6 @@ package net.minecraftforge.client.model; import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexFormatElement; -import com.mojang.math.Transformation; import net.minecraft.client.renderer.block.model.BakedQuad; import java.util.Arrays; @@ -18,54 +17,47 @@ import java.util.List; * * @see QuadTransformers */ -public interface IQuadTransformer -{ - int STRIDE = DefaultVertexFormat.BLOCK.getIntegerSize(); - int POSITION = findOffset(DefaultVertexFormat.ELEMENT_POSITION); - int COLOR = findOffset(DefaultVertexFormat.ELEMENT_COLOR); - int UV0 = findOffset(DefaultVertexFormat.ELEMENT_UV0); - int UV1 = findOffset(DefaultVertexFormat.ELEMENT_UV1); - int UV2 = findOffset(DefaultVertexFormat.ELEMENT_UV2); - int NORMAL = findOffset(DefaultVertexFormat.ELEMENT_NORMAL); +public interface IQuadTransformer { + int STRIDE = DefaultVertexFormat.BLOCK.getVertexSize() / 4; + int POSITION = findOffset(VertexFormatElement.POSITION); + int COLOR = findOffset(VertexFormatElement.COLOR); + int UV0 = findOffset(VertexFormatElement.UV0); + int UV1 = findOffset(VertexFormatElement.UV1); + int UV2 = findOffset(VertexFormatElement.UV2); + int NORMAL = findOffset(VertexFormatElement.NORMAL); void processInPlace(BakedQuad quad); - default void processInPlace(List quads) - { + default void processInPlace(List quads) { for (BakedQuad quad : quads) processInPlace(quad); } - default BakedQuad process(BakedQuad quad) - { + default BakedQuad process(BakedQuad quad) { var copy = copy(quad); processInPlace(copy); return copy; } - default List process(List inputs) - { + default List process(List inputs) { return inputs.stream().map(IQuadTransformer::copy).peek(this::processInPlace).toList(); } - default IQuadTransformer andThen(IQuadTransformer other) - { + default IQuadTransformer andThen(IQuadTransformer other) { return quad -> { processInPlace(quad); other.processInPlace(quad); }; } - private static BakedQuad copy(BakedQuad quad) - { + private static BakedQuad copy(BakedQuad quad) { var vertices = quad.getVertices(); return new BakedQuad(Arrays.copyOf(vertices, vertices.length), quad.getTintIndex(), quad.getDirection(), quad.getSprite(), quad.isShade(), quad.hasAmbientOcclusion()); } - private static int findOffset(VertexFormatElement element) - { + private static int findOffset(VertexFormatElement element) { // Divide by 4 because we want the int offset - var index = DefaultVertexFormat.BLOCK.getElements().indexOf(element); - return index < 0 ? -1 : DefaultVertexFormat.BLOCK.getOffset(index) / 4; + var index = DefaultVertexFormat.BLOCK.getOffset(element); + return index < 0 ? -1 : index / 4; } } diff --git a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java index e6ed69b566..a80cd90ce4 100644 --- a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java @@ -10,7 +10,6 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; -import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.minecraft.client.renderer.RenderType; @@ -43,18 +42,16 @@ public class ItemLayerModel implements IUnbakedGeometry { @Nullable private ImmutableList textures; - private final Int2ObjectMap layerData; private final Int2ObjectMap renderTypeNames; - private ItemLayerModel(@Nullable ImmutableList textures, Int2ObjectMap layerData, Int2ObjectMap renderTypeNames) + private ItemLayerModel(@Nullable ImmutableList textures, Int2ObjectMap renderTypeNames) { this.textures = textures; - this.layerData = layerData; this.renderTypeNames = renderTypeNames; } @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { if (textures == null) { @@ -78,8 +75,8 @@ public class ItemLayerModel implements IUnbakedGeometry for (int i = 0; i < textures.size(); i++) { TextureAtlasSprite sprite = spriteGetter.apply(textures.get(i)); - var unbaked = UnbakedGeometryHelper.createUnbakedItemElements(i, sprite.contents(), this.layerData.get(i)); - var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> sprite, modelState, modelLocation); + var unbaked = UnbakedGeometryHelper.createUnbakedItemElements(i, sprite.contents()); + var quads = UnbakedGeometryHelper.bakeElements(unbaked, $ -> sprite, modelState); var renderTypeName = renderTypeNames.get(i); var renderTypes = renderTypeName != null ? context.getRenderType(renderTypeName) : null; builder.addQuads(renderTypes != null ? renderTypes : normalRenderTypes, quads); @@ -101,20 +98,14 @@ public class ItemLayerModel implements IUnbakedGeometry var renderTypes = jsonObject.getAsJsonObject("render_types"); for (Map.Entry entry : renderTypes.entrySet()) { - var renderType = new ResourceLocation(entry.getKey()); + var renderType = ResourceLocation.parse(entry.getKey()); for (var layer : entry.getValue().getAsJsonArray()) if (renderTypeNames.put(layer.getAsInt(), renderType) != null) throw new JsonParseException("Registered duplicate render type for layer " + layer); } } - var emissiveLayers = new Int2ObjectArrayMap(); - if(jsonObject.has("forge_data")) - { - JsonObject forgeData = jsonObject.get("forge_data").getAsJsonObject(); - readLayerData(forgeData, "layers", renderTypeNames, emissiveLayers, false); - } - return new ItemLayerModel(null, emissiveLayers, renderTypeNames); + return new ItemLayerModel(null, renderTypeNames); } protected void readLayerData(JsonObject jsonObject, String name, Int2ObjectOpenHashMap renderTypeNames, Int2ObjectMap layerData, boolean logWarning) diff --git a/src/main/java/net/minecraftforge/client/model/QuadTransformers.java b/src/main/java/net/minecraftforge/client/model/QuadTransformers.java index a51ae3ffaf..2541e5f1b4 100644 --- a/src/main/java/net/minecraftforge/client/model/QuadTransformers.java +++ b/src/main/java/net/minecraftforge/client/model/QuadTransformers.java @@ -160,7 +160,7 @@ public final class QuadTransformers { /** * Converts an ARGB color to an ABGR color, as the commonly used color format is not the format colors end up packed into. * This function doubles as its own inverse. - * @param color ARGB color + * @param argb ARGB color * @return ABGR color */ public static int toABGR(int argb) diff --git a/src/main/java/net/minecraftforge/client/model/SeparateTransformsModel.java b/src/main/java/net/minecraftforge/client/model/SeparateTransformsModel.java index 28993a67d4..0dfc229514 100644 --- a/src/main/java/net/minecraftforge/client/model/SeparateTransformsModel.java +++ b/src/main/java/net/minecraftforge/client/model/SeparateTransformsModel.java @@ -54,14 +54,14 @@ public class SeparateTransformsModel implements IUnbakedGeometry spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { return new Baked( context.useAmbientOcclusion(), context.isGui3d(), context.useBlockLight(), spriteGetter.apply(context.getMaterial("particle")), overrides, - baseModel.bake(baker, baseModel, spriteGetter, modelState, modelLocation, context.useBlockLight()), + baseModel.bake(baker, baseModel, spriteGetter, modelState, context.useBlockLight()), ImmutableMap.copyOf(Maps.transformValues(perspectives, value -> { - return value.bake(baker, value, spriteGetter, modelState, modelLocation, context.useBlockLight()); + return value.bake(baker, value, spriteGetter, modelState, context.useBlockLight(), context.getRenderType(context.getRenderTypeHint())); })) ); } diff --git a/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java b/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java index 6fe56c29f1..3a54973d94 100644 --- a/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java +++ b/src/main/java/net/minecraftforge/client/model/data/ModelDataManager.java @@ -7,6 +7,7 @@ package net.minecraftforge.client.model.data; import com.google.common.base.Preconditions; import net.minecraft.core.BlockPos; +import net.minecraft.core.SectionPos; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; @@ -32,61 +33,52 @@ import java.util.concurrent.ConcurrentHashMap; */ @ApiStatus.Internal @EventBusSubscriber(modid = "forge", bus = Bus.FORGE, value = Dist.CLIENT) -public class ModelDataManager -{ +public class ModelDataManager { private final Level level; private final Map> needModelDataRefresh = new ConcurrentHashMap<>(); private final Map> modelDataCache = new ConcurrentHashMap<>(); - public ModelDataManager(Level level) - { + public ModelDataManager(Level level) { this.level = level; } - public void requestRefresh(@NotNull BlockEntity blockEntity) - { + public void requestRefresh(@NotNull BlockEntity blockEntity) { Preconditions.checkNotNull(blockEntity, "Block entity must not be null"); needModelDataRefresh.computeIfAbsent(new ChunkPos(blockEntity.getBlockPos()), $ -> Collections.synchronizedSet(new HashSet<>())) .add(blockEntity.getBlockPos()); } - private void refreshAt(ChunkPos chunk) - { + private void refreshAt(ChunkPos chunk) { Set needUpdate = needModelDataRefresh.remove(chunk); - if (needUpdate != null) - { + if (needUpdate != null) { Map data = modelDataCache.computeIfAbsent(chunk, $ -> new ConcurrentHashMap<>()); - for (BlockPos pos : needUpdate) - { + for (BlockPos pos : needUpdate) { BlockEntity toUpdate = level.getBlockEntity(pos); if (toUpdate != null && !toUpdate.isRemoved()) - { data.put(pos, toUpdate.getModelData()); - } else - { data.remove(pos); - } } } } - public @Nullable ModelData getAt(BlockPos pos) - { + public @Nullable ModelData getAt(BlockPos pos) { return getAt(new ChunkPos(pos)).get(pos); } - public Map getAt(ChunkPos pos) - { + public Map getAt(SectionPos pos) { + return getAt(pos.chunk()); + } + + public Map getAt(ChunkPos pos) { Preconditions.checkArgument(level.isClientSide, "Cannot request model data for server level"); refreshAt(pos); return modelDataCache.getOrDefault(pos, Collections.emptyMap()); } @SubscribeEvent - public static void onChunkUnload(ChunkEvent.Unload event) - { + public static void onChunkUnload(ChunkEvent.Unload event) { var level = event.getChunk().getWorldForge(); if (level == null) return; diff --git a/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java b/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java index 09e74f931e..e3e7d64fde 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java +++ b/src/main/java/net/minecraftforge/client/model/generators/BlockStateProvider.java @@ -143,11 +143,11 @@ public abstract class BlockStateProvider implements DataProvider { } public ResourceLocation modLoc(String name) { - return new ResourceLocation(modid, name); + return ResourceLocation.fromNamespaceAndPath(modid, name); } public ResourceLocation mcLoc(String name) { - return new ResourceLocation(name); + return ResourceLocation.parse(name); } private ResourceLocation key(Block block) { @@ -159,12 +159,11 @@ public abstract class BlockStateProvider implements DataProvider { } public ResourceLocation blockTexture(Block block) { - ResourceLocation name = key(block); - return new ResourceLocation(name.getNamespace(), ModelProvider.BLOCK_FOLDER + "/" + name.getPath()); + return key(block).withPath(p -> ModelProvider.BLOCK_FOLDER + '/' + p); } private ResourceLocation extend(ResourceLocation rl, String suffix) { - return new ResourceLocation(rl.getNamespace(), rl.getPath() + suffix); + return rl.withSuffix(suffix); } public ModelFile cubeAll(Block block) { @@ -627,31 +626,31 @@ public abstract class BlockStateProvider implements DataProvider { } public static final ImmutableMap> WALL_PROPS = ImmutableMap.>builder() - .put(Direction.EAST, BlockStateProperties.EAST_WALL) - .put(Direction.NORTH, BlockStateProperties.NORTH_WALL) - .put(Direction.SOUTH, BlockStateProperties.SOUTH_WALL) - .put(Direction.WEST, BlockStateProperties.WEST_WALL) - .build(); + .put(Direction.EAST, BlockStateProperties.EAST_WALL) + .put(Direction.NORTH, BlockStateProperties.NORTH_WALL) + .put(Direction.SOUTH, BlockStateProperties.SOUTH_WALL) + .put(Direction.WEST, BlockStateProperties.WEST_WALL) + .build(); public void wallBlock(WallBlock block, ModelFile post, ModelFile side, ModelFile sideTall) { MultiPartBlockStateBuilder builder = getMultipartBuilder(block) .part().modelFile(post).addModel() .condition(WallBlock.UP, true).end(); WALL_PROPS.entrySet().stream() - .filter(e -> e.getKey().getAxis().isHorizontal()) - .forEach(e -> { - wallSidePart(builder, side, e, WallSide.LOW); - wallSidePart(builder, sideTall, e, WallSide.TALL); - }); + .filter(e -> e.getKey().getAxis().isHorizontal()) + .forEach(e -> { + wallSidePart(builder, side, e, WallSide.LOW); + wallSidePart(builder, sideTall, e, WallSide.TALL); + }); } private void wallSidePart(MultiPartBlockStateBuilder builder, ModelFile model, Map.Entry> entry, WallSide height) { builder.part() - .modelFile(model) - .rotationY((((int) entry.getKey().toYRot()) + 180) % 360) - .uvLock(true) - .addModel() - .condition(entry.getValue(), height); + .modelFile(model) + .rotationY((((int) entry.getKey().toYRot()) + 180) % 360) + .uvLock(true) + .addModel() + .condition(entry.getValue(), height); } public void paneBlock(IronBarsBlock block, ResourceLocation pane, ResourceLocation edge) { diff --git a/src/main/java/net/minecraftforge/client/model/generators/ItemModelProvider.java b/src/main/java/net/minecraftforge/client/model/generators/ItemModelProvider.java index 6f5e9d45f1..cc8e0c21ca 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/ItemModelProvider.java +++ b/src/main/java/net/minecraftforge/client/model/generators/ItemModelProvider.java @@ -33,7 +33,7 @@ public abstract class ItemModelProvider extends ModelProvider { return getBuilder(item.toString()) .parent(new ModelFile.UncheckedModelFile("item/generated")) - .texture("layer0", new ResourceLocation(item.getNamespace(), "item/" + item.getPath())); + .texture("layer0", item.withPrefix("item/")); } @NotNull diff --git a/src/main/java/net/minecraftforge/client/model/generators/ModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/ModelBuilder.java index e159e4501d..21751a5e27 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/ModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/ModelBuilder.java @@ -119,9 +119,9 @@ public class ModelBuilder> extends ModelFile { } else { ResourceLocation asLoc; if (texture.contains(":")) { - asLoc = new ResourceLocation(texture); + asLoc = ResourceLocation.parse(texture); } else { - asLoc = new ResourceLocation(getLocation().getNamespace(), texture); + asLoc = ResourceLocation.fromNamespaceAndPath(getLocation().getNamespace(), texture); } return texture(key, asLoc); } @@ -158,7 +158,7 @@ public class ModelBuilder> extends ModelFile { */ public T renderType(String renderType) { Preconditions.checkNotNull(renderType, "Render type must not be null"); - return renderType(new ResourceLocation(renderType)); + return renderType(ResourceLocation.parse(renderType)); } /** @@ -317,27 +317,21 @@ public class ModelBuilder> extends ModelFile { if (face == null) continue; JsonObject faceObj = new JsonObject(); - faceObj.addProperty("texture", serializeLocOrKey(face.texture)); - if (!Arrays.equals(face.uv.uvs, part.uvsByFace(dir))) { - faceObj.add("uv", new Gson().toJsonTree(face.uv.uvs)); - } - if (face.cullForDirection != null) { - faceObj.addProperty("cullface", face.cullForDirection.getSerializedName()); - } - if (face.uv.rotation != 0) { - faceObj.addProperty("rotation", face.uv.rotation); - } - if (face.tintIndex != -1) { - faceObj.addProperty("tintindex", face.tintIndex); - } - if (!face.getFaceData().equals(ForgeFaceData.DEFAULT)) { - faceObj.add("forge_data", ForgeFaceData.CODEC.encodeStart(JsonOps.INSTANCE, face.getFaceData()).result().get()); - } + faceObj.addProperty("texture", serializeLocOrKey(face.texture())); + if (!Arrays.equals(face.uv().uvs, part.uvsByFace(dir))) + faceObj.add("uv", new Gson().toJsonTree(face.uv().uvs)); + if (face.cullForDirection() != null) + faceObj.addProperty("cullface", face.cullForDirection().getSerializedName()); + if (face.uv().rotation != 0) + faceObj.addProperty("rotation", face.uv().rotation); + if (face.tintIndex() != -1) + faceObj.addProperty("tintindex", face.tintIndex()); + if (face.data() != null && !ForgeFaceData.DEFAULT.equals(face.data())) + faceObj.add("forge_data", ForgeFaceData.CODEC.encodeStart(JsonOps.INSTANCE, face.data()).result().get()); faces.add(dir.getSerializedName(), faceObj); } - if (!part.faces.isEmpty()) { + if (!part.faces.isEmpty()) partObj.add("faces", faces); - } elements.add(partObj); }); root.add("elements", elements); @@ -360,7 +354,7 @@ public class ModelBuilder> extends ModelFile { if (tex.charAt(0) == '#') { return tex; } - return new ResourceLocation(tex).toString(); + return ResourceLocation.parse(tex).toString(); } private JsonArray serializeVector3f(Vector3f vec) { @@ -385,10 +379,7 @@ public class ModelBuilder> extends ModelFile { private final Map faces = new LinkedHashMap<>(); private RotationBuilder rotation; private boolean shade = true; - private int color = 0xFFFFFFFF; - private int blockLight = 0, skyLight = 0; - private boolean hasAmbientOcclusion = true; - private boolean calculateNormals = false; + private ForgeFaceData data = ForgeFaceData.DEFAULT; private void validateCoordinate(float coord, char name) { Preconditions.checkArgument(!(coord < -16.0F) && !(coord > 32.0F), "Position " + name + " out of range, must be within [-16, 32]. Found: %d", coord); @@ -530,9 +521,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public ElementBuilder emissivity(int blockLight, int skyLight) { - this.blockLight = blockLight; - this.skyLight = skyLight; - return this; + return data(new ForgeFaceData(this.data.color(), blockLight, skyLight, this.data.ambientOcclusion(), this.data.calculateNormals())); } /** @@ -542,8 +531,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public ElementBuilder color(int color) { - this.color = color; - return this; + return data(new ForgeFaceData(color, this.data.blockLight(), this.data.skyLight(), this.data.ambientOcclusion(), this.data.calculateNormals())); } /** @@ -553,8 +541,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public ElementBuilder ao(boolean ao) { - this.hasAmbientOcclusion = ao; - return this; + return data(new ForgeFaceData(this.data.color(), this.data.blockLight(), this.data.skyLight(), ao, this.data.calculateNormals())); } /** @@ -564,7 +551,11 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public ElementBuilder calculateNormals(boolean calc) { - this.calculateNormals = calc; + return data(new ForgeFaceData(this.data.color(), this.data.blockLight(), this.data.skyLight(), this.data.ambientOcclusion(), calc)); + } + + public ElementBuilder data(ForgeFaceData data) { + this.data = data; return this; } @@ -575,22 +566,18 @@ public class ModelBuilder> extends ModelFile { BlockElement build() { Map faces = this.faces.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().build(), (k1, k2) -> { throw new IllegalArgumentException(); }, LinkedHashMap::new)); - return new BlockElement(from, to, faces, rotation == null ? null : rotation.build(), shade, new ForgeFaceData(this.color, this.blockLight, this.skyLight, this.hasAmbientOcclusion, this.calculateNormals)); + return new BlockElement(from, to, faces, rotation == null ? null : rotation.build(), shade); } public T end() { return self(); } public class FaceBuilder { - private Direction cullface; private int tintindex = -1; private String texture = MissingTextureAtlasSprite.getLocation().toString(); private float[] uvs; private FaceRotation rotation = FaceRotation.ZERO; - private int color = 0xFFFFFFFF; - private int blockLight = 0, skyLight = 0; - private boolean hasAmbientOcclusion = true; - private boolean calculateNormals = false; + private ForgeFaceData data = ElementBuilder.this.data; FaceBuilder(Direction dir) { // param unused for functional match @@ -646,9 +633,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public FaceBuilder emissivity(int blockLight, int skyLight) { - this.blockLight = blockLight; - this.skyLight = skyLight; - return this; + return data(new ForgeFaceData(this.data.color(), blockLight, skyLight, this.data.ambientOcclusion(), this.data.calculateNormals())); } /** @@ -658,8 +643,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public FaceBuilder color(int color) { - this.color = color; - return this; + return data(new ForgeFaceData(color, this.data.blockLight(), this.data.skyLight(), this.data.ambientOcclusion(), this.data.calculateNormals())); } /** @@ -669,8 +653,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public FaceBuilder ao(boolean ao) { - this.hasAmbientOcclusion = ao; - return this; + return data(new ForgeFaceData(this.data.color(), this.data.blockLight(), this.data.skyLight(), ao, this.data.calculateNormals())); } /** @@ -680,15 +663,18 @@ public class ModelBuilder> extends ModelFile { * @return this builder */ public FaceBuilder calculateNormals(boolean calc) { - this.calculateNormals = calc; + return data(new ForgeFaceData(this.data.color(), this.data.blockLight(), this.data.skyLight(), this.data.ambientOcclusion(), calc)); + } + + public FaceBuilder data(ForgeFaceData data) { + this.data = data; return this; } BlockElementFace build() { - if (this.texture == null) { + if (this.texture == null) throw new IllegalStateException("A model face must have a texture"); - } - return new BlockElementFace(cullface, tintindex, texture, new BlockFaceUV(uvs, rotation.rotation), new ForgeFaceData(this.color, this.blockLight, this.skyLight, this.hasAmbientOcclusion, this.calculateNormals)); + return new BlockElementFace(cullface, tintindex, texture, new BlockFaceUV(uvs, rotation.rotation), this.data); } public ElementBuilder end() { return ElementBuilder.this; } @@ -826,8 +812,7 @@ public class ModelBuilder> extends ModelFile { } } - public class RootTransformsBuilder - { + public class RootTransformsBuilder { private static final Vector3f ONE = new Vector3f(1, 1, 1); private Vector3f translation = new Vector3f(); @@ -838,9 +823,7 @@ public class ModelBuilder> extends ModelFile { private @Nullable TransformationHelper.TransformOrigin origin; private @Nullable Vector3f originVec; - RootTransformsBuilder() - { - } + RootTransformsBuilder() { } /** * Sets the translation of the root transform. @@ -849,8 +832,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code translation} is {@code null} */ - public RootTransformsBuilder translation(Vector3f translation) - { + public RootTransformsBuilder translation(Vector3f translation) { this.translation = Preconditions.checkNotNull(translation, "Translation must not be null"); return this; } @@ -863,8 +845,7 @@ public class ModelBuilder> extends ModelFile { * @param z z translation * @return this builder */ - public RootTransformsBuilder translation(float x, float y, float z) - { + public RootTransformsBuilder translation(float x, float y, float z) { return translation(new Vector3f(x, y, z)); } @@ -875,8 +856,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code rotation} is {@code null} */ - public RootTransformsBuilder rotation(Quaternionf rotation) - { + public RootTransformsBuilder rotation(Quaternionf rotation) { this.leftRotation = Preconditions.checkNotNull(rotation, "Rotation must not be null"); return this; } @@ -890,8 +870,7 @@ public class ModelBuilder> extends ModelFile { * @param isDegrees whether the rotation is in degrees or radians * @return this builder */ - public RootTransformsBuilder rotation(float x, float y, float z, boolean isDegrees) - { + public RootTransformsBuilder rotation(float x, float y, float z, boolean isDegrees) { return rotation(TransformationHelper.quatFromXYZ(x, y, z, isDegrees)); } @@ -902,8 +881,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code leftRotation} is {@code null} */ - public RootTransformsBuilder leftRotation(Quaternionf leftRotation) - { + public RootTransformsBuilder leftRotation(Quaternionf leftRotation) { return rotation(leftRotation); } @@ -916,8 +894,7 @@ public class ModelBuilder> extends ModelFile { * @param isDegrees whether the rotation is in degrees or radians * @return this builder */ - public RootTransformsBuilder leftRotation(float x, float y, float z, boolean isDegrees) - { + public RootTransformsBuilder leftRotation(float x, float y, float z, boolean isDegrees) { return leftRotation(TransformationHelper.quatFromXYZ(x, y, z, isDegrees)); } @@ -928,8 +905,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code rightRotation} is {@code null} */ - public RootTransformsBuilder rightRotation(Quaternionf rightRotation) - { + public RootTransformsBuilder rightRotation(Quaternionf rightRotation) { this.rightRotation = Preconditions.checkNotNull(rightRotation, "Rotation must not be null"); return this; } @@ -943,8 +919,7 @@ public class ModelBuilder> extends ModelFile { * @param isDegrees whether the rotation is in degrees or radians * @return this builder */ - public RootTransformsBuilder rightRotation(float x, float y, float z, boolean isDegrees) - { + public RootTransformsBuilder rightRotation(float x, float y, float z, boolean isDegrees) { return rightRotation(TransformationHelper.quatFromXYZ(x, y, z, isDegrees)); } @@ -955,8 +930,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code rightRotation} is {@code null} */ - public RootTransformsBuilder postRotation(Quaternionf postRotation) - { + public RootTransformsBuilder postRotation(Quaternionf postRotation) { return rightRotation(postRotation); } @@ -969,8 +943,7 @@ public class ModelBuilder> extends ModelFile { * @param isDegrees whether the rotation is in degrees or radians * @return this builder */ - public RootTransformsBuilder postRotation(float x, float y, float z, boolean isDegrees) - { + public RootTransformsBuilder postRotation(float x, float y, float z, boolean isDegrees) { return postRotation(TransformationHelper.quatFromXYZ(x, y, z, isDegrees)); } @@ -980,8 +953,7 @@ public class ModelBuilder> extends ModelFile { * @param scale the scale * @return this builder */ - public RootTransformsBuilder scale(float scale) - { + public RootTransformsBuilder scale(float scale) { return scale(new Vector3f(scale, scale, scale)); } @@ -993,8 +965,7 @@ public class ModelBuilder> extends ModelFile { * @param zScale z scale * @return this builder */ - public RootTransformsBuilder scale(float xScale, float yScale, float zScale) - { + public RootTransformsBuilder scale(float xScale, float yScale, float zScale) { return scale(new Vector3f(xScale, yScale, zScale)); } @@ -1005,8 +976,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code scale} is {@code null} */ - public RootTransformsBuilder scale(Vector3f scale) - { + public RootTransformsBuilder scale(Vector3f scale) { this.scale = Preconditions.checkNotNull(scale, "Scale must not be null"); return this; } @@ -1018,8 +988,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code transformation} is {@code null} */ - public RootTransformsBuilder transform(Transformation transformation) - { + public RootTransformsBuilder transform(Transformation transformation) { Preconditions.checkNotNull(transformation, "Transformation must not be null"); this.translation = transformation.getTranslation(); this.leftRotation = transformation.getLeftRotation(); @@ -1035,8 +1004,7 @@ public class ModelBuilder> extends ModelFile { * @return this builder * @throws NullPointerException if {@code origin} is {@code null} */ - public RootTransformsBuilder origin(Vector3f origin) - { + public RootTransformsBuilder origin(Vector3f origin) { this.originVec = Preconditions.checkNotNull(origin, "Origin must not be null"); this.origin = null; return this; @@ -1050,8 +1018,7 @@ public class ModelBuilder> extends ModelFile { * @throws NullPointerException if {@code origin} is {@code null} * @throws IllegalArgumentException if {@code origin} is not {@code center}, {@code corner} or {@code opposing-corner} */ - public RootTransformsBuilder origin(TransformationHelper.TransformOrigin origin) - { + public RootTransformsBuilder origin(TransformationHelper.TransformOrigin origin) { this.origin = Preconditions.checkNotNull(origin, "Origin must not be null"); this.originVec = null; return this; @@ -1061,8 +1028,7 @@ public class ModelBuilder> extends ModelFile { * Finish configuring the parent builder * @return the parent block model builder */ - public ModelBuilder end() - { + public ModelBuilder end() { return ModelBuilder.this; } @@ -1071,39 +1037,26 @@ public class ModelBuilder> extends ModelFile { JsonObject transform = new JsonObject(); if (!translation.equals(0, 0, 0)) - { transform.add("translation", writeVec3(translation)); - } if (!scale.equals(ONE)) - { transform.add("scale", writeVec3(scale)); - } if (!leftRotation.equals(0, 0, 0, 1)) - { transform.add("rotation", writeQuaternion(leftRotation)); - } if (!rightRotation.equals(0, 0, 0, 1)) - { transform.add("post_rotation", writeQuaternion(rightRotation)); - } if (origin != null) - { transform.addProperty("origin", origin.getSerializedName()); - } else if (originVec != null && !originVec.equals(0, 0, 0)) - { transform.add("origin", writeVec3(originVec)); - } return transform; } - private static JsonArray writeVec3(Vector3f vector) - { + private static JsonArray writeVec3(Vector3f vector) { JsonArray array = new JsonArray(); array.add(vector.x()); array.add(vector.y()); @@ -1111,8 +1064,7 @@ public class ModelBuilder> extends ModelFile { return array; } - private static JsonArray writeQuaternion(Quaternionf quaternion) - { + private static JsonArray writeQuaternion(Quaternionf quaternion) { JsonArray array = new JsonArray(); array.add(quaternion.x()); array.add(quaternion.y()); diff --git a/src/main/java/net/minecraftforge/client/model/generators/ModelFile.java b/src/main/java/net/minecraftforge/client/model/generators/ModelFile.java index 3c5032121b..470c45aaae 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/ModelFile.java +++ b/src/main/java/net/minecraftforge/client/model/generators/ModelFile.java @@ -40,7 +40,7 @@ public abstract class ModelFile { public static class UncheckedModelFile extends ModelFile { public UncheckedModelFile(String location) { - this(new ResourceLocation(location)); + this(ResourceLocation.parse(location)); } public UncheckedModelFile(ResourceLocation location) { super(location); diff --git a/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java b/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java index 40ec6a8111..41e7053463 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java +++ b/src/main/java/net/minecraftforge/client/model/generators/ModelProvider.java @@ -6,8 +6,6 @@ package net.minecraftforge.client.model.generators; import com.google.common.base.Preconditions; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; @@ -32,7 +30,6 @@ public abstract class ModelProvider> implements DataPr protected static final ResourceType MODEL = new ResourceType(PackType.CLIENT_RESOURCES, ".json", "models"); protected static final ResourceType MODEL_WITH_EXTENSION = new ResourceType(PackType.CLIENT_RESOURCES, "", "models"); - private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); protected final PackOutput output; protected final String modid; protected final String folder; @@ -63,7 +60,7 @@ public abstract class ModelProvider> implements DataPr public T getBuilder(String path) { Preconditions.checkNotNull(path, "Path must not be null"); - ResourceLocation outputLoc = extendWithFolder(path.contains(":") ? new ResourceLocation(path) : new ResourceLocation(modid, path)); + ResourceLocation outputLoc = extendWithFolder(path.contains(":") ? ResourceLocation.parse(path) : ResourceLocation.fromNamespaceAndPath(modid, path)); this.existingFileHelper.trackGenerated(outputLoc, MODEL); return generatedModels.computeIfAbsent(outputLoc, factory); } @@ -72,15 +69,15 @@ public abstract class ModelProvider> implements DataPr if (rl.getPath().contains("/")) { return rl; } - return new ResourceLocation(rl.getNamespace(), folder + "/" + rl.getPath()); + return rl.withPrefix(folder + '/'); } public ResourceLocation modLoc(String name) { - return new ResourceLocation(modid, name); + return ResourceLocation.fromNamespaceAndPath(modid, name); } public ResourceLocation mcLoc(String name) { - return new ResourceLocation(name); + return ResourceLocation.parse(name); } public T withExistingParent(String name, String parent) { @@ -375,9 +372,8 @@ public abstract class ModelProvider> implements DataPr /** * {@return a model builder that's not directly saved to disk. Meant for use in custom model loaders.} */ - public T nested() - { - return factory.apply(new ResourceLocation("dummy:dummy")); + public T nested() { + return factory.apply(ResourceLocation.fromNamespaceAndPath("dummy", "dummy")); } public ModelFile.ExistingModelFile getExistingFile(ResourceLocation path) { diff --git a/src/main/java/net/minecraftforge/client/model/generators/loaders/CompositeModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/loaders/CompositeModelBuilder.java index f5e20e6c3c..37bd40d4dc 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/loaders/CompositeModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/loaders/CompositeModelBuilder.java @@ -17,6 +17,8 @@ import java.util.*; public class CompositeModelBuilder> extends CustomLoaderBuilder { + private static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "composite"); + public static > CompositeModelBuilder begin(T parent, ExistingFileHelper existingFileHelper) { return new CompositeModelBuilder<>(parent, existingFileHelper); @@ -27,7 +29,7 @@ public class CompositeModelBuilder> extends CustomLoad protected CompositeModelBuilder(T parent, ExistingFileHelper existingFileHelper) { - super(new ResourceLocation("forge:composite"), parent, existingFileHelper); + super(NAME, parent, existingFileHelper); } public CompositeModelBuilder child(String name, T modelBuilder) diff --git a/src/main/java/net/minecraftforge/client/model/generators/loaders/DynamicFluidContainerModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/loaders/DynamicFluidContainerModelBuilder.java index c6ac6e565c..a9d094712e 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/loaders/DynamicFluidContainerModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/loaders/DynamicFluidContainerModelBuilder.java @@ -16,6 +16,7 @@ import net.minecraftforge.registries.ForgeRegistries; public class DynamicFluidContainerModelBuilder> extends CustomLoaderBuilder { + private static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "fluid_container"); public static > DynamicFluidContainerModelBuilder begin(T parent, ExistingFileHelper existingFileHelper) { return new DynamicFluidContainerModelBuilder<>(parent, existingFileHelper); @@ -29,7 +30,7 @@ public class DynamicFluidContainerModelBuilder> extend protected DynamicFluidContainerModelBuilder(T parent, ExistingFileHelper existingFileHelper) { - super(new ResourceLocation("forge:fluid_container"), parent, existingFileHelper); + super(NAME, parent, existingFileHelper); } public DynamicFluidContainerModelBuilder fluid(Fluid fluid) diff --git a/src/main/java/net/minecraftforge/client/model/generators/loaders/ItemLayerModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/loaders/ItemLayerModelBuilder.java index cd4edc7f57..12aedcfb37 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/loaders/ItemLayerModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/loaders/ItemLayerModelBuilder.java @@ -26,6 +26,7 @@ import net.minecraftforge.common.data.ExistingFileHelper; public class ItemLayerModelBuilder> extends CustomLoaderBuilder { + private static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "item_layers"); public static > ItemLayerModelBuilder begin(T parent, ExistingFileHelper existingFileHelper) { return new ItemLayerModelBuilder<>(parent, existingFileHelper); @@ -37,7 +38,7 @@ public class ItemLayerModelBuilder> extends CustomLoad protected ItemLayerModelBuilder(T parent, ExistingFileHelper existingFileHelper) { - super(new ResourceLocation("forge:item_layers"), parent, existingFileHelper); + super(NAME, parent, existingFileHelper); } /** @@ -109,9 +110,9 @@ public class ItemLayerModelBuilder> extends CustomLoad Preconditions.checkNotNull(renderType, "Render type must not be null"); ResourceLocation asLoc; if (renderType.contains(":")) - asLoc = new ResourceLocation(renderType); + asLoc = ResourceLocation.parse(renderType); else - asLoc = new ResourceLocation(parent.getLocation().getNamespace(), renderType); + asLoc = parent.getLocation().withPath(renderType); return renderType(asLoc, layers); } diff --git a/src/main/java/net/minecraftforge/client/model/generators/loaders/ObjModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/loaders/ObjModelBuilder.java index 43cfc30050..310790413f 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/loaders/ObjModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/loaders/ObjModelBuilder.java @@ -15,6 +15,7 @@ import net.minecraftforge.common.data.ExistingFileHelper; public class ObjModelBuilder> extends CustomLoaderBuilder { + private static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "obj"); public static > ObjModelBuilder begin(T parent, ExistingFileHelper existingFileHelper) { return new ObjModelBuilder<>(parent, existingFileHelper); @@ -29,7 +30,7 @@ public class ObjModelBuilder> extends CustomLoaderBuil protected ObjModelBuilder(T parent, ExistingFileHelper existingFileHelper) { - super(new ResourceLocation("forge:obj"), parent, existingFileHelper); + super(NAME, parent, existingFileHelper); } public ObjModelBuilder modelLocation(ResourceLocation modelLocation) diff --git a/src/main/java/net/minecraftforge/client/model/generators/loaders/SeparateTransformsModelBuilder.java b/src/main/java/net/minecraftforge/client/model/generators/loaders/SeparateTransformsModelBuilder.java index 228e60f3ea..6e81b71123 100644 --- a/src/main/java/net/minecraftforge/client/model/generators/loaders/SeparateTransformsModelBuilder.java +++ b/src/main/java/net/minecraftforge/client/model/generators/loaders/SeparateTransformsModelBuilder.java @@ -19,6 +19,8 @@ import java.util.Map; public class SeparateTransformsModelBuilder> extends CustomLoaderBuilder { + private static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "separate_transforms"); + public static > SeparateTransformsModelBuilder begin(T parent, ExistingFileHelper existingFileHelper) { return new SeparateTransformsModelBuilder<>(parent, existingFileHelper); @@ -29,7 +31,7 @@ public class SeparateTransformsModelBuilder> extends C protected SeparateTransformsModelBuilder(T parent, ExistingFileHelper existingFileHelper) { - super(new ResourceLocation("forge:separate_transforms"), parent, existingFileHelper); + super(NAME, parent, existingFileHelper); } public SeparateTransformsModelBuilder base(T modelBuilder) diff --git a/src/main/java/net/minecraftforge/client/model/geometry/BlockGeometryBakingContext.java b/src/main/java/net/minecraftforge/client/model/geometry/BlockGeometryBakingContext.java index d84cf804a9..99b560c085 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/BlockGeometryBakingContext.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/BlockGeometryBakingContext.java @@ -156,12 +156,12 @@ public class BlockGeometryBakingContext implements IGeometryBakingContext this.gui3d = other.gui3d; } - public BakedModel bake(ModelBaker baker, Function bakedTextureGetter, ModelState modelTransform, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(ModelBaker baker, Function bakedTextureGetter, ModelState modelTransform, ItemOverrides overrides) { IUnbakedGeometry geometry = getCustomGeometry(); if (geometry == null) throw new IllegalStateException("Can not use custom baking without custom geometry"); - return geometry.bake(this, baker, bakedTextureGetter, modelTransform, overrides, modelLocation); + return geometry.bake(this, baker, bakedTextureGetter, modelTransform, overrides); } public static class VisibilityData diff --git a/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java b/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java index a9b8073dfe..a489638be5 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/IUnbakedGeometry.java @@ -26,25 +26,20 @@ import net.minecraft.resources.ResourceLocation; * @see IGeometryLoader * @see IGeometryBakingContext */ -public interface IUnbakedGeometry> -{ - BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation); +public interface IUnbakedGeometry> { + BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides); /** * Resolve parents of nested {@link BlockModel}s which are later used in - * {@link IUnbakedGeometry#bake(IGeometryBakingContext, ModelBaker, Function, ModelState, ItemOverrides, ResourceLocation)} + * {@link IUnbakedGeometry#bake(IGeometryBakingContext, ModelBaker, Function, ModelState, ItemOverrides)} * via {@link BlockModel#resolveParents(Function)} */ - default void resolveParents(Function modelGetter, IGeometryBakingContext context) - { - - } + default void resolveParents(Function modelGetter, IGeometryBakingContext context) { } /** * {@return a set of all the components whose visibility may be configured via {@link IGeometryBakingContext}} */ - default Set getConfigurableComponentNames() - { + default Set getConfigurableComponentNames() { return Set.of(); } } diff --git a/src/main/java/net/minecraftforge/client/model/geometry/SimpleUnbakedGeometry.java b/src/main/java/net/minecraftforge/client/model/geometry/SimpleUnbakedGeometry.java index d178b9813f..cf79fb240d 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/SimpleUnbakedGeometry.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/SimpleUnbakedGeometry.java @@ -24,7 +24,7 @@ import net.minecraftforge.client.model.IModelBuilder; public abstract class SimpleUnbakedGeometry> implements IUnbakedGeometry { @Override - public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides, ResourceLocation modelLocation) + public BakedModel bake(IGeometryBakingContext context, ModelBaker baker, Function spriteGetter, ModelState modelState, ItemOverrides overrides) { TextureAtlasSprite particle = spriteGetter.apply(context.getMaterial("particle")); @@ -33,10 +33,10 @@ public abstract class SimpleUnbakedGeometry> IModelBuilder builder = IModelBuilder.of(context.useAmbientOcclusion(), context.useBlockLight(), context.isGui3d(), context.getTransforms(), overrides, particle, renderTypes); - addQuads(context, builder, baker, spriteGetter, modelState, modelLocation); + addQuads(context, builder, baker, spriteGetter, modelState); return builder.build(); } - protected abstract void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform, ResourceLocation modelLocation); + protected abstract void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform); } diff --git a/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java b/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java index e4c7f62d8c..208caae29f 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/StandaloneGeometryBakingContext.java @@ -25,7 +25,7 @@ import java.util.function.Predicate; */ public class StandaloneGeometryBakingContext implements IGeometryBakingContext { - public static final ResourceLocation LOCATION = new ResourceLocation("forge", "standalone"); + public static final ResourceLocation LOCATION = ResourceLocation.fromNamespaceAndPath("forge", "standalone"); public static final StandaloneGeometryBakingContext INSTANCE = create(LOCATION); diff --git a/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java b/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java index 521a238b7d..ff30cf6649 100644 --- a/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java +++ b/src/main/java/net/minecraftforge/client/model/geometry/UnbakedGeometryHelper.java @@ -91,22 +91,22 @@ public class UnbakedGeometryHelper tex = namespace != null ? namespace + ":" + path : path; } - return new Material(TextureAtlas.LOCATION_BLOCKS, new ResourceLocation(tex)); + return new Material(TextureAtlas.LOCATION_BLOCKS, ResourceLocation.parse(tex)); } /** * Helper for baking {@link BlockModel} instances. Handles baking custom geometries and deferring item model baking. */ @ApiStatus.Internal - public static BakedModel bake(BlockModel blockModel, ModelBaker modelBaker, BlockModel owner, Function spriteGetter, ModelState modelState, ResourceLocation modelLocation, boolean guiLight3d) + public static BakedModel bake(BlockModel blockModel, ModelBaker modelBaker, BlockModel owner, Function spriteGetter, ModelState modelState, boolean guiLight3d) { IUnbakedGeometry customModel = blockModel.customData.getCustomGeometry(); if (customModel != null) - return customModel.bake(blockModel.customData, modelBaker, spriteGetter, modelState, blockModel.getOverrides(modelBaker, owner, spriteGetter), modelLocation); + return customModel.bake(blockModel.customData, modelBaker, spriteGetter, modelState, blockModel.getOverrides(modelBaker, owner, spriteGetter)); // Handle vanilla item models here, since vanilla has a shortcut for them if (blockModel.getRootModel() == ModelBakery.GENERATION_MARKER) - return ITEM_MODEL_GENERATOR.generateBlockModel(spriteGetter, blockModel).bake(modelBaker, blockModel, spriteGetter, modelState, modelLocation, guiLight3d); + return ITEM_MODEL_GENERATOR.generateBlockModel(spriteGetter, blockModel).bake(modelBaker, blockModel, spriteGetter, modelState, guiLight3d); if (blockModel.getRootModel() == ModelBakery.BLOCK_ENTITY_MARKER) { @@ -115,15 +115,7 @@ public class UnbakedGeometryHelper } var elementsModel = new ElementsModel(blockModel.getElements()); - return elementsModel.bake(blockModel.customData, modelBaker, spriteGetter, modelState, blockModel.getOverrides(modelBaker, owner, spriteGetter), modelLocation); - } - - /** - * @see #createUnbakedItemElements(int, SpriteContents, ForgeFaceData) - */ - public static List createUnbakedItemElements(int layerIndex, SpriteContents spriteContents) - { - return createUnbakedItemElements(layerIndex, spriteContents, null); + return elementsModel.bake(blockModel.customData, modelBaker, spriteGetter, modelState, blockModel.getOverrides(modelBaker, owner, spriteGetter)); } /** @@ -132,22 +124,9 @@ public class UnbakedGeometryHelper *

* The {@link Direction#NORTH} and {@link Direction#SOUTH} faces take up the whole surface. */ - public static List createUnbakedItemElements(int layerIndex, SpriteContents spriteContents, @Nullable ForgeFaceData faceData) + public static List createUnbakedItemElements(int layerIndex, SpriteContents spriteContents) { - var elements = ITEM_MODEL_GENERATOR.processFrames(layerIndex, "layer" + layerIndex, spriteContents); - if(faceData != null) - { - elements.forEach(element -> element.setFaceData(faceData)); - } - return elements; - } - - /** - * @see #createUnbakedItemMaskElements(int, SpriteContents, ForgeFaceData) - */ - public static List createUnbakedItemMaskElements(int layerIndex, SpriteContents spriteContents) - { - return createUnbakedItemMaskElements(layerIndex, spriteContents, null); + return ITEM_MODEL_GENERATOR.processFrames(layerIndex, "layer" + layerIndex, spriteContents); } /** @@ -156,9 +135,9 @@ public class UnbakedGeometryHelper *

* The {@link Direction#NORTH} and {@link Direction#SOUTH} faces take up only the pixels the texture uses. */ - public static List createUnbakedItemMaskElements(int layerIndex, SpriteContents spriteContents, @Nullable ForgeFaceData faceData) + public static List createUnbakedItemMaskElements(int layerIndex, SpriteContents spriteContents) { - var elements = createUnbakedItemElements(layerIndex, spriteContents, faceData); + var elements = createUnbakedItemElements(layerIndex, spriteContents); elements.remove(0); // Remove north and south faces int width = spriteContents.width(), height = spriteContents.height(); @@ -224,17 +203,17 @@ public class UnbakedGeometryHelper /** * Bakes a list of {@linkplain BlockElement block elements} and feeds the baked quads to a {@linkplain IModelBuilder model builder}. */ - public static void bakeElements(IModelBuilder builder, List elements, Function spriteGetter, ModelState modelState, ResourceLocation modelLocation) + public static void bakeElements(IModelBuilder builder, List elements, Function spriteGetter, ModelState modelState) { for (BlockElement element : elements) { element.faces.forEach((side, face) -> { - var sprite = spriteGetter.apply(new Material(TextureAtlas.LOCATION_BLOCKS, new ResourceLocation(face.texture))); - var quad = bakeElementFace(element, face, sprite, side, modelState, modelLocation); - if (face.cullForDirection == null) + var sprite = spriteGetter.apply(new Material(TextureAtlas.LOCATION_BLOCKS, ResourceLocation.parse(face.texture()))); + var quad = bakeElementFace(element, face, sprite, side, modelState); + if (face.cullForDirection() == null) builder.addUnculledFace(quad); else - builder.addCulledFace(Direction.rotate(modelState.getRotation().getMatrix(), face.cullForDirection), quad); + builder.addCulledFace(Direction.rotate(modelState.getRotation().getMatrix(), face.cullForDirection()), quad); }); } } @@ -242,21 +221,21 @@ public class UnbakedGeometryHelper /** * Bakes a list of {@linkplain BlockElement block elements} and returns the list of baked quads. */ - public static List bakeElements(List elements, Function spriteGetter, ModelState modelState, ResourceLocation modelLocation) + public static List bakeElements(List elements, Function spriteGetter, ModelState modelState) { if (elements.isEmpty()) return List.of(); var list = new ArrayList(); - bakeElements(IModelBuilder.collecting(list), elements, spriteGetter, modelState, modelLocation); + bakeElements(IModelBuilder.collecting(list), elements, spriteGetter, modelState); return list; } /** * Turns a single {@link BlockElementFace} into a {@link BakedQuad}. */ - public static BakedQuad bakeElementFace(BlockElement element, BlockElementFace face, TextureAtlasSprite sprite, Direction direction, ModelState state, ResourceLocation modelLocation) + public static BakedQuad bakeElementFace(BlockElement element, BlockElementFace face, TextureAtlasSprite sprite, Direction direction, ModelState state) { - return FACE_BAKERY.bakeQuad(element.from, element.to, face, sprite, direction, state, element.rotation, element.shade, modelLocation); + return FACE_BAKERY.bakeQuad(element.from, element.to, face, sprite, direction, state, element.rotation, element.shade); } /** @@ -286,4 +265,4 @@ public class UnbakedGeometryHelper rootTransform = rootTransform.applyOrigin(new Vector3f(-.5F, -.5F, -.5F)); return new SimpleModelState(modelState.getRotation().compose(rootTransform), modelState.isUvLocked()); } -} \ No newline at end of file +} diff --git a/src/main/java/net/minecraftforge/client/model/lighting/QuadLighter.java b/src/main/java/net/minecraftforge/client/model/lighting/QuadLighter.java index bca9f81bdf..4bc200be75 100644 --- a/src/main/java/net/minecraftforge/client/model/lighting/QuadLighter.java +++ b/src/main/java/net/minecraftforge/client/model/lighting/QuadLighter.java @@ -152,21 +152,4 @@ public abstract class QuadLighter float yFactor = constantAmbientLight ? 0.9F : ((3.0F + normalY) / 4.0F); return Math.min(normalX * normalX * 0.6F + normalY * normalY * yFactor + normalZ * normalZ * 0.8F, 1.0F); } - - /** - * Note: This method is subtly different than {@link net.minecraft.client.renderer.LevelRenderer#getLightColor(BlockAndTintGetter, BlockState, BlockPos)} - * as it only uses the state for querying if the state has emissive rendering but instead looks up the state at the given position for checking the - * light emission. - */ - @Deprecated(since = "1.20.1") - protected static int getLightColor(BlockAndTintGetter level, BlockPos pos, BlockState state) - { - if (state.emissiveRendering(level, pos)) - { - return LightTexture.FULL_BRIGHT; - } - int skyLight = level.getBrightness(LightLayer.SKY, pos); - int blockLight = Math.max(level.getBrightness(LightLayer.BLOCK, pos), level.getBlockState(pos).getLightEmission(level, pos)); - return skyLight << 20 | blockLight << 4; - } } diff --git a/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java b/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java index d4d7f34761..67e1eef1ab 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java +++ b/src/main/java/net/minecraftforge/client/model/obj/ObjLoader.java @@ -5,7 +5,6 @@ package net.minecraftforge.client.model.obj; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; @@ -58,7 +57,7 @@ public class ObjLoader implements IGeometryLoader, ResourceManagerRelo boolean emissiveAmbient = GsonHelper.getAsBoolean(jsonObject, "emissive_ambient", true); String mtlOverride = GsonHelper.getAsString(jsonObject, "mtl_override", null); - return loadModel(new ObjModel.ModelSettings(new ResourceLocation(modelLocation), automaticCulling, shadeQuads, flipV, emissiveAmbient, mtlOverride)); + return loadModel(new ObjModel.ModelSettings(ResourceLocation.parse(modelLocation), automaticCulling, shadeQuads, flipV, emissiveAmbient, mtlOverride)); } public ObjModel loadModel(ObjModel.ModelSettings settings) diff --git a/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java b/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java index 71a4fb0c67..5901efb8ad 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java +++ b/src/main/java/net/minecraftforge/client/model/obj/ObjModel.java @@ -119,9 +119,9 @@ public class ObjModel extends SimpleUnbakedGeometry { String lib = materialLibraryOverrideLocation; if (lib.contains(":")) - mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(new ResourceLocation(lib)); + mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(ResourceLocation.parse(lib)); else - mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(new ResourceLocation(modelDomain, modelPath + lib)); + mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(ResourceLocation.fromNamespaceAndPath(modelDomain, modelPath + lib)); } String[] line; @@ -136,9 +136,9 @@ public class ObjModel extends SimpleUnbakedGeometry String lib = line[1]; if (lib.contains(":")) - mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(new ResourceLocation(lib)); + mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(ResourceLocation.parse(lib)); else - mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(new ResourceLocation(modelDomain, modelPath + lib)); + mtllib = ObjLoader.INSTANCE.loadMaterialLibrary(ResourceLocation.fromNamespaceAndPath(modelDomain, modelPath + lib)); break; } @@ -334,7 +334,7 @@ public class ObjModel extends SimpleUnbakedGeometry } @Override - protected void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform, ResourceLocation modelLocation) + protected void addQuads(IGeometryBakingContext owner, IModelBuilder modelBuilder, ModelBaker baker, Function spriteGetter, ModelState modelTransform) { parts.values().stream().filter(part -> owner.isComponentVisible(part.name(), true)) .forEach(part -> part.addQuads(owner, modelBuilder, baker, spriteGetter, modelTransform, modelLocation)); @@ -421,19 +421,18 @@ public class ObjModel extends SimpleUnbakedGeometry color.y() * colorTint.y(), color.z() * colorTint.z(), color.w() * colorTint.w()); - quadBaker.vertex(position.x(), position.y(), position.z()); - quadBaker.color(tintedColor.x(), tintedColor.y(), tintedColor.z(), tintedColor.w()); - quadBaker.uv( + quadBaker.addVertex(position.x(), position.y(), position.z()); + quadBaker.setColor(tintedColor.x(), tintedColor.y(), tintedColor.z(), tintedColor.w()); + quadBaker.setUv( texture.getU(texCoord.x), texture.getV((flipV ? 1 - texCoord.y : texCoord.y)) ); - quadBaker.uv2(uv2); - quadBaker.normal(normal.x(), normal.y(), normal.z()); + quadBaker.setUv2(uv2 & 0xFFFF, uv2 >> 16 & 0xFFFF); + quadBaker.setNormal(normal.x(), normal.y(), normal.z()); if (i == 0) { quadBaker.setDirection(Direction.getNearest(normal.x(), normal.y(), normal.z())); } - quadBaker.endVertex(); pos[i] = position; norm[i] = normal; } @@ -656,7 +655,7 @@ public class ObjModel extends SimpleUnbakedGeometry } ResourceLocation textureLocation = UnbakedGeometryHelper.resolveDirtyMaterial(mat.diffuseColorMap, configuration).texture(); - ResourceLocation texturePath = new ResourceLocation(textureLocation.getNamespace(), "textures/" + textureLocation.getPath() + ".png"); + ResourceLocation texturePath = textureLocation.withPath(p -> "textures/" + p + ".png"); builder.addMesh(texturePath, quads); } diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/QuadBakingVertexConsumer.java b/src/main/java/net/minecraftforge/client/model/pipeline/QuadBakingVertexConsumer.java index ffdd28c47e..94bfaa7efc 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/QuadBakingVertexConsumer.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/QuadBakingVertexConsumer.java @@ -52,8 +52,10 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer vertex(double x, double y, double z) + public VertexConsumer addVertex(float x, float y, float z) { + endVertex(); + int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.POSITION; quadData[offset] = Float.floatToRawIntBits((float) x); quadData[offset + 1] = Float.floatToRawIntBits((float) y); @@ -62,7 +64,7 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer normal(float x, float y, float z) + public VertexConsumer setNormal(float x, float y, float z) { int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.NORMAL; quadData[offset] = ((int) (x * 127.0f) & 0xFF) | @@ -72,7 +74,7 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer color(int r, int g, int b, int a) + public VertexConsumer setColor(int r, int g, int b, int a) { int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.COLOR; quadData[offset] = ((a & 0xFF) << 24) | @@ -83,7 +85,7 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer uv(float u, float v) + public VertexConsumer setUv(float u, float v) { int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.UV0; quadData[offset] = Float.floatToRawIntBits(u); @@ -92,7 +94,7 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer overlayCoords(int u, int v) + public VertexConsumer setUv1(int u, int v) { if (IQuadTransformer.UV1 >= 0) // Vanilla doesn't support this, but it may be added by a 3rd party { @@ -103,7 +105,7 @@ public class QuadBakingVertexConsumer implements VertexConsumer } @Override - public VertexConsumer uv2(int u, int v) + public VertexConsumer setUv2(int u, int v) { int offset = vertexIndex * IQuadTransformer.STRIDE + IQuadTransformer.UV2; quadData[offset] = (u & 0xFFFF) | ((v & 0xFFFF) << 16); @@ -122,27 +124,18 @@ public class QuadBakingVertexConsumer implements VertexConsumer return this; } - @Override - public void endVertex() + private void endVertex() { - if (++vertexIndex != 4) + if (vertexIndex != 4) { + ++vertexIndex; return; + } // We have a full quad, pass it to the consumer and reset quadConsumer.accept(new BakedQuad(quadData, tintIndex, direction, sprite, shade, hasAmbientOcclusion)); vertexIndex = 0; quadData = new int[QUAD_DATA_SIZE]; } - @Override - public void defaultColor(int r, int g, int b, int a) - { - } - - @Override - public void unsetDefaultColor() - { - } - public void setTintIndex(int tintIndex) { this.tintIndex = tintIndex; diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/RemappingVertexPipeline.java b/src/main/java/net/minecraftforge/client/model/pipeline/RemappingVertexPipeline.java deleted file mode 100644 index f9ec60aa88..0000000000 --- a/src/main/java/net/minecraftforge/client/model/pipeline/RemappingVertexPipeline.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.client.model.pipeline; - -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexFormatElement; -import net.minecraft.client.renderer.texture.OverlayTexture; -import org.joml.Vector3d; -import org.joml.Vector3f; - -import java.util.Arrays; -import java.util.IdentityHashMap; -import java.util.Map; -import java.util.Set; - -/** - * Vertex pipeline element that remaps incoming data to another format. - */ -public class RemappingVertexPipeline implements VertexConsumer -{ - private static final Set KNOWN_ELEMENTS = Set.of(DefaultVertexFormat.ELEMENT_POSITION, - DefaultVertexFormat.ELEMENT_COLOR, DefaultVertexFormat.ELEMENT_UV, DefaultVertexFormat.ELEMENT_UV1, - DefaultVertexFormat.ELEMENT_UV2, DefaultVertexFormat.ELEMENT_NORMAL, DefaultVertexFormat.ELEMENT_PADDING); - private static final int[] EMPTY_INT_ARRAY = new int[0]; - - private final VertexConsumer parent; - private final VertexFormat targetFormat; - - private final Vector3d position = new Vector3d(); - private final Vector3f normal = new Vector3f(); - private final int[] color = new int[] { 255, 255, 255, 255 }; - private final float[] uv0 = new float[] { 0, 0 }; - private final int[] uv1 = new int[] { OverlayTexture.NO_WHITE_U, OverlayTexture.WHITE_OVERLAY_V }; - private final int[] uv2 = new int[] { 0, 0 }; - - private final Map miscElementIds; - private final int[][] misc; - - public RemappingVertexPipeline(VertexConsumer parent, VertexFormat targetFormat) - { - this.parent = parent; - this.targetFormat = targetFormat; - - this.miscElementIds = new IdentityHashMap<>(); - int i = 0; - for (var element : targetFormat.getElements()) - if (element.getUsage() != VertexFormatElement.Usage.PADDING && !KNOWN_ELEMENTS.contains(element)) - this.miscElementIds.put(element, i++); - this.misc = new int[i][]; - Arrays.fill(this.misc, EMPTY_INT_ARRAY); - } - - @Override - public VertexConsumer vertex(double x, double y, double z) - { - position.set(x, y, z); - return this; - } - - @Override - public VertexConsumer normal(float x, float y, float z) - { - normal.set(x, y, z); - return this; - } - - @Override - public VertexConsumer color(int r, int g, int b, int a) - { - color[0] = r; - color[1] = g; - color[2] = b; - color[3] = a; - return this; - } - - @Override - public VertexConsumer uv(float u, float v) - { - uv0[0] = u; - uv0[1] = v; - return this; - } - - @Override - public VertexConsumer overlayCoords(int u, int v) - { - uv1[0] = u; - uv1[1] = v; - return this; - } - - @Override - public VertexConsumer uv2(int u, int v) - { - uv2[0] = u; - uv2[1] = v; - return this; - } - - @Override - public VertexConsumer misc(VertexFormatElement element, int... values) - { - Integer id = miscElementIds.get(element); - if (id != null) - misc[id] = Arrays.copyOf(values, values.length); - return this; - } - - @Override - public void endVertex() - { - for (var element : targetFormat.getElements()) - { - // Ignore padding - if (element.getUsage() == VertexFormatElement.Usage.PADDING) - continue; - - // Try to match and output any of the supported elements, and if that fails, treat as misc - if (element.equals(DefaultVertexFormat.ELEMENT_POSITION)) - parent.vertex(position.x, position.y, position.z); - else if (element.equals(DefaultVertexFormat.ELEMENT_NORMAL)) - parent.normal(normal.x(), normal.y(), normal.z()); - else if (element.equals(DefaultVertexFormat.ELEMENT_COLOR)) - parent.color(color[0], color[1], color[2], color[3]); - else if (element.equals(DefaultVertexFormat.ELEMENT_UV0)) - parent.uv(uv0[0], uv0[1]); - else if (element.equals(DefaultVertexFormat.ELEMENT_UV1)) - parent.overlayCoords(uv1[0], uv1[1]); - else if (element.equals(DefaultVertexFormat.ELEMENT_UV2)) - parent.uv2(uv2[0], uv2[1]); - else - parent.misc(element, misc[miscElementIds.get(element)]); - } - parent.endVertex(); - } - - @Override - public void defaultColor(int r, int g, int b, int a) - { - parent.defaultColor(r, g, b, a); - } - - @Override - public void unsetDefaultColor() - { - parent.unsetDefaultColor(); - } -} diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/TransformingVertexPipeline.java b/src/main/java/net/minecraftforge/client/model/pipeline/TransformingVertexPipeline.java index d1029c8707..ac12f4a906 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/TransformingVertexPipeline.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/TransformingVertexPipeline.java @@ -24,21 +24,21 @@ public class TransformingVertexPipeline extends VertexConsumerWrapper } @Override - public VertexConsumer vertex(double x, double y, double z) + public VertexConsumer addVertex(float x, float y, float z) { var vec = new Vector4f((float) x, (float) y, (float) z, 1); transformation.transformPosition(vec); vec.div(vec.w); - return super.vertex(vec.x(), vec.y(), vec.z()); + return super.addVertex(vec.x(), vec.y(), vec.z()); } @Override - public VertexConsumer normal(float x, float y, float z) + public VertexConsumer setNormal(float x, float y, float z) { var vec = new Vector3f(x, y, z); transformation.transformNormal(vec); vec.normalize(); - return super.normal(vec.x(), vec.y(), vec.z()); + return super.setNormal(vec.x(), vec.y(), vec.z()); } } diff --git a/src/main/java/net/minecraftforge/client/model/pipeline/VertexConsumerWrapper.java b/src/main/java/net/minecraftforge/client/model/pipeline/VertexConsumerWrapper.java index 10f3d63607..0f3ac2d2f8 100644 --- a/src/main/java/net/minecraftforge/client/model/pipeline/VertexConsumerWrapper.java +++ b/src/main/java/net/minecraftforge/client/model/pipeline/VertexConsumerWrapper.java @@ -23,44 +23,44 @@ public abstract class VertexConsumerWrapper implements VertexConsumer } @Override - public VertexConsumer vertex(double x, double y, double z) + public VertexConsumer addVertex(float x, float y, float z) { - parent.vertex(x, y, z); + parent.addVertex(x, y, z); return this; } @Override - public VertexConsumer color(int r, int g, int b, int a) + public VertexConsumer setColor(int r, int g, int b, int a) { - parent.color(r, g, b, a); + parent.setColor(r, g, b, a); return this; } @Override - public VertexConsumer uv(float u, float v) + public VertexConsumer setUv(float u, float v) { - parent.uv(u, v); + parent.setUv(u, v); return this; } @Override - public VertexConsumer overlayCoords(int u, int v) + public VertexConsumer setUv1(int u, int v) { - parent.overlayCoords(u, v); + parent.setUv1(u, v); return this; } @Override - public VertexConsumer uv2(int u, int v) + public VertexConsumer setUv2(int u, int v) { - parent.uv2(u, v); + parent.setUv2(u, v); return this; } @Override - public VertexConsumer normal(float x, float y, float z) + public VertexConsumer setNormal(float x, float y, float z) { - parent.normal(x, y, z); + parent.setNormal(x, y, z); return this; } @@ -70,22 +70,4 @@ public abstract class VertexConsumerWrapper implements VertexConsumer parent.misc(element, values); return this; } - - @Override - public void endVertex() - { - parent.endVertex(); - } - - @Override - public void defaultColor(int r, int g, int b, int a) - { - parent.defaultColor(r, g, b, a); - } - - @Override - public void unsetDefaultColor() - { - parent.unsetDefaultColor(); - } } diff --git a/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java b/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java index a6622f9e4a..db87e4b73b 100644 --- a/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java +++ b/src/main/java/net/minecraftforge/client/model/renderable/BakedModelRenderable.java @@ -10,6 +10,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.BakedQuad; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; @@ -30,42 +31,36 @@ import java.util.Arrays; * * @see Context */ -public class BakedModelRenderable implements IRenderable -{ +public class BakedModelRenderable implements IRenderable { /** * Constructs a {@link BakedModelRenderable} from the given model location. * The model is expected to have been baked ahead of time. * * @see net.minecraftforge.client.event.ModelEvent.RegisterAdditional */ - public static BakedModelRenderable of(ResourceLocation model) - { + public static BakedModelRenderable of(ModelResourceLocation model) { return of(Minecraft.getInstance().getModelManager().getModel(model)); } /** * Constructs a {@link BakedModelRenderable} from the given baked model. */ - public static BakedModelRenderable of(BakedModel model) - { + public static BakedModelRenderable of(BakedModel model) { return new BakedModelRenderable(model); } private final BakedModel model; - private BakedModelRenderable(BakedModel model) - { + private BakedModelRenderable(BakedModel model) { this.model = model; } @Override - public void render(PoseStack poseStack, MultiBufferSource bufferSource, ITextureRenderTypeLookup textureRenderTypeLookup, int lightmap, int overlay, float partialTick, Context context) - { + public void render(PoseStack poseStack, MultiBufferSource bufferSource, ITextureRenderTypeLookup textureRenderTypeLookup, int lightmap, int overlay, float partialTick, Context context) { var buffer = bufferSource.getBuffer(textureRenderTypeLookup.get(InventoryMenu.BLOCK_ATLAS)); var tint = context.tint(); var randomSource = context.randomSource(); - for (Direction direction : context.faces()) - { + for (var direction : context.faces()) { randomSource.setSeed(context.seed()); // Given the lack of context, the requested render type has to be null to ensure the model renders all of its geometry for (BakedQuad quad : model.getQuads(context.state(), direction, randomSource, context.data(), null)) @@ -73,24 +68,20 @@ public class BakedModelRenderable implements IRenderable withContext(ModelData modelData) - { + public IRenderable withContext(ModelData modelData) { return withContext(new Context(modelData)); } - public IRenderable withModelDataContext() - { + public IRenderable withModelDataContext() { return (poseStack, bufferSource, textureRenderTypeLookup, lightmap, overlay, partialTick, context) -> render(poseStack, bufferSource, textureRenderTypeLookup, lightmap, overlay, partialTick, new Context(context)); } - public record Context(@Nullable BlockState state, Direction[] faces, RandomSource randomSource, long seed, ModelData data, Vector4f tint) - { + public record Context(@Nullable BlockState state, Direction[] faces, RandomSource randomSource, long seed, ModelData data, Vector4f tint) { private static final Direction[] ALL_FACES_AND_NULL = Arrays.copyOf(Direction.values(), Direction.values().length + 1); private static final Vector4f WHITE = new Vector4f(1, 1, 1, 1); - public Context(ModelData data) - { + public Context(ModelData data) { this(null, ALL_FACES_AND_NULL, RandomSource.create(), 42, data, WHITE); } } diff --git a/src/main/java/net/minecraftforge/client/settings/KeyModifier.java b/src/main/java/net/minecraftforge/client/settings/KeyModifier.java index 1f53f65ff3..577d672d75 100644 --- a/src/main/java/net/minecraftforge/client/settings/KeyModifier.java +++ b/src/main/java/net/minecraftforge/client/settings/KeyModifier.java @@ -93,18 +93,6 @@ public enum KeyModifier { } }; - @Deprecated(forRemoval = true, since = "1.20.2") - public static final KeyModifier[] MODIFIER_VALUES = {SHIFT, CONTROL, ALT}; - - @Deprecated(forRemoval = true, since = "1.20.2") - public static KeyModifier getActiveModifier() { - for (var keyModifier : VALUES) { - if (keyModifier.isActive(null)) - return keyModifier; - } - return NONE; - } - private static final KeyModifier[] VALUES = {SHIFT, CONTROL, ALT}; private static final List VALUES_LIST = List.of(SHIFT, CONTROL, ALT); private static final List ALL = List.of(SHIFT, CONTROL, ALT, NONE); diff --git a/src/main/java/net/minecraftforge/client/textures/ForgeTextureMetadata.java b/src/main/java/net/minecraftforge/client/textures/ForgeTextureMetadata.java index 93a05a5062..a983f3b94a 100644 --- a/src/main/java/net/minecraftforge/client/textures/ForgeTextureMetadata.java +++ b/src/main/java/net/minecraftforge/client/textures/ForgeTextureMetadata.java @@ -66,7 +66,7 @@ public final class ForgeTextureMetadata ITextureAtlasSpriteLoader loader; if (json.has("loader")) { - ResourceLocation loaderName = new ResourceLocation(GsonHelper.getAsString(json, "loader")); + ResourceLocation loaderName = ResourceLocation.parse(GsonHelper.getAsString(json, "loader")); loader = TextureAtlasSpriteLoaderManager.get(loaderName); if (loader == null) { diff --git a/src/main/java/net/minecraftforge/client/textures/UnitTextureAtlasSprite.java b/src/main/java/net/minecraftforge/client/textures/UnitTextureAtlasSprite.java index 2a3f4ffa09..9585c51714 100644 --- a/src/main/java/net/minecraftforge/client/textures/UnitTextureAtlasSprite.java +++ b/src/main/java/net/minecraftforge/client/textures/UnitTextureAtlasSprite.java @@ -18,7 +18,7 @@ import net.minecraft.server.packs.resources.ResourceMetadata; * Useful for baking quads that won't be used with an atlas. */ public class UnitTextureAtlasSprite extends TextureAtlasSprite { - public static final ResourceLocation LOCATION = new ResourceLocation("forge", "unit"); + public static final ResourceLocation LOCATION = ResourceLocation.fromNamespaceAndPath("forge", "unit"); public static final UnitTextureAtlasSprite INSTANCE = new UnitTextureAtlasSprite(); private UnitTextureAtlasSprite() { diff --git a/src/main/java/net/minecraftforge/common/CreativeModeTabRegistry.java b/src/main/java/net/minecraftforge/common/CreativeModeTabRegistry.java index b08b72f38d..4b97a9a474 100644 --- a/src/main/java/net/minecraftforge/common/CreativeModeTabRegistry.java +++ b/src/main/java/net/minecraftforge/common/CreativeModeTabRegistry.java @@ -18,6 +18,7 @@ import com.google.gson.JsonObject; import com.mojang.logging.LogUtils; import it.unimi.dsi.fastutil.booleans.BooleanConsumer; import java.util.Comparator; + import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; @@ -30,10 +31,6 @@ import net.minecraft.util.GsonHelper; import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.CreativeModeTabSearchRegistry; -import net.minecraftforge.fml.loading.FMLEnvironment; -import net.minecraftforge.fml.loading.FMLLoader; import net.minecraftforge.fml.loading.toposort.TopologicalSort; import net.minecraftforge.server.ServerLifecycleHooks; import org.jetbrains.annotations.ApiStatus; @@ -50,10 +47,9 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; -public final class CreativeModeTabRegistry -{ +public final class CreativeModeTabRegistry { private static final Logger LOGGER = LogUtils.getLogger(); - private static final ResourceLocation CREATIVE_MODE_TAB_ORDERING_JSON = new ResourceLocation("forge", "creative_mode_tab_ordering.json"); + private static final ResourceLocation CREATIVE_MODE_TAB_ORDERING_JSON = ResourceLocation.fromNamespaceAndPath("forge", "creative_mode_tab_ordering.json"); private static final List SORTED_TABS = new ArrayList<>(); private static final List SORTED_TABS_VIEW = Collections.unmodifiableList(SORTED_TABS); private static final List DEFAULT_TABS = new ArrayList<>(); @@ -61,8 +57,7 @@ public final class CreativeModeTabRegistry /** * {@return an unmodifiable view of the sorted list of creative mode tabs in ascending order} */ - public static List getSortedCreativeModeTabs() - { + public static List getSortedCreativeModeTabs() { return SORTED_TABS_VIEW; } @@ -76,8 +71,7 @@ public final class CreativeModeTabRegistry * @param name the name to look up */ @Nullable - public static CreativeModeTab getTab(ResourceLocation name) - { + public static CreativeModeTab getTab(ResourceLocation name) { return BuiltInRegistries.CREATIVE_MODE_TAB.get(name); } @@ -87,50 +81,39 @@ public final class CreativeModeTabRegistry * @param tab the tab to look up */ @Nullable - public static ResourceLocation getName(CreativeModeTab tab) - { + public static ResourceLocation getName(CreativeModeTab tab) { return BuiltInRegistries.CREATIVE_MODE_TAB.getKey(tab); } private static final Multimap edges = HashMultimap.create(); - static PreparableReloadListener getReloadListener() - { - return new SimplePreparableReloadListener() - { + static PreparableReloadListener getReloadListener() { + return new SimplePreparableReloadListener() { final Gson gson = new GsonBuilder().create(); @NotNull @Override - protected JsonObject prepare(@NotNull ResourceManager resourceManager, ProfilerFiller profiler) - { + protected JsonObject prepare(@NotNull ResourceManager resourceManager, ProfilerFiller profiler) { Optional res = resourceManager.getResource(CREATIVE_MODE_TAB_ORDERING_JSON); if (res.isEmpty()) return new JsonObject(); - try (Reader reader = res.get().openAsReader()) - { + try (Reader reader = res.get().openAsReader()) { return this.gson.fromJson(reader, JsonObject.class); - } - catch (IOException e) - { + } catch (IOException e) { LOGGER.error("Could not read CreativeModeTab sorting file " + CREATIVE_MODE_TAB_ORDERING_JSON, e); return new JsonObject(); } } @Override - protected void apply(@NotNull JsonObject data, @NotNull ResourceManager resourceManager, ProfilerFiller p) - { - try - { - if (data.size() > 0) - { + protected void apply(@NotNull JsonObject data, @NotNull ResourceManager resourceManager, ProfilerFiller p) { + try { + if (data.size() > 0) { JsonArray order = GsonHelper.getAsJsonArray(data, "order"); List customOrder = new ArrayList<>(); - for (JsonElement entry : order) - { - ResourceLocation id = new ResourceLocation(entry.getAsString()); + for (JsonElement entry : order) { + ResourceLocation id = ResourceLocation.parse(entry.getAsString()); CreativeModeTab CreativeModeTab = getTab(id); if (CreativeModeTab == null) throw new IllegalStateException("CreativeModeTab not found with name " + id); @@ -145,9 +128,7 @@ public final class CreativeModeTabRegistry setCreativeModeTabOrder(customOrder); return; } - } - catch (Exception e) - { + } catch (Exception e) { LOGGER.error("Error parsing CreativeModeTab sorting file " + CREATIVE_MODE_TAB_ORDERING_JSON, e); } @@ -156,23 +137,21 @@ public final class CreativeModeTabRegistry }; } - @SuppressWarnings("UnstableApiUsage") - private static void recalculateItemCreativeModeTabs() - { + private static void recalculateItemCreativeModeTabs() { final MutableGraph graph = GraphBuilder.directed().nodeOrder(ElementOrder.insertion()).build(); - for (CreativeModeTab tab : BuiltInRegistries.CREATIVE_MODE_TAB) - { + for (CreativeModeTab tab : BuiltInRegistries.CREATIVE_MODE_TAB) { if (!DEFAULT_TABS.contains(tab)) graph.addNode(tab); } - edges.forEach((key, value) -> - { + + edges.forEach((key, value) -> { final CreativeModeTab keyC = getTab(key); final CreativeModeTab valueC = getTab(value); if (keyC != null && valueC != null) graph.putEdge(keyC, valueC); }); + //Note: We can ignore the null warning as we validate getting tabs by key before adding to the graph // so the graph should only contain tabs that we know have names in the registry List tierList = TopologicalSort.topologicalSort(graph, Comparator.comparing(tab -> getName(tab))); @@ -180,17 +159,14 @@ public final class CreativeModeTabRegistry setCreativeModeTabOrder(tierList); } - private static void setCreativeModeTabOrder(List tierList) - { - runInServerThreadIfPossible(hasServer -> - { + private static void setCreativeModeTabOrder(List tierList) { + runInServerThreadIfPossible(hasServer -> { SORTED_TABS.clear(); SORTED_TABS.addAll(tierList); }); } - private static void runInServerThreadIfPossible(BooleanConsumer runnable) - { + private static void runInServerThreadIfPossible(BooleanConsumer runnable) { MinecraftServer server = ServerLifecycleHooks.getCurrentServer(); if (server != null) server.execute(() -> runnable.accept(true)); @@ -199,8 +175,7 @@ public final class CreativeModeTabRegistry } @ApiStatus.Internal - public static void sortTabs() - { + public static void sortTabs() { edges.clear(); DEFAULT_TABS.add(BuiltInRegistries.CREATIVE_MODE_TAB.get(CreativeModeTabs.HOTBAR)); @@ -212,16 +187,14 @@ public final class CreativeModeTabRegistry BuiltInRegistries.CREATIVE_MODE_TAB.holders().filter(c -> !DEFAULT_TABS.contains(c.get())).forEach(indexed::add); int vanillaTabs = 10; - for (int i = 0; i < vanillaTabs; i++) // Vanilla ordering - { + for (int i = 0; i < vanillaTabs; i++) { // Vanilla ordering final Holder value = indexed.get(i); final CreativeModeTab tab = value.get(); final ResourceLocation name = value.unwrapKey().orElseThrow().location(); if (!tab.tabsBefore.isEmpty() || !tab.tabsAfter.isEmpty()) addTabOrder(tab, name); - else - { + else { // If there is no order specified ensure vanilla ordering by specifying the previous and next indexed tab as edges if (i != 0) edges.put(indexed.get(i - 1).unwrapKey().orElseThrow().location(), name); @@ -231,8 +204,7 @@ public final class CreativeModeTabRegistry } ResourceLocation lastVanilla = indexed.get(vanillaTabs - 1).unwrapKey().orElseThrow().location(); - for (int i = vanillaTabs; i < indexed.size(); i++) - { + for (int i = vanillaTabs; i < indexed.size(); i++) { final Holder value = indexed.get(i); final CreativeModeTab tab = value.get(); final ResourceLocation name = value.unwrapKey().orElseThrow().location(); @@ -244,22 +216,15 @@ public final class CreativeModeTabRegistry } recalculateItemCreativeModeTabs(); - - if (FMLEnvironment.dist == Dist.CLIENT && !FMLLoader.getLaunchHandler().isData()) - CreativeModeTabSearchRegistry.createSearchTrees(); } - private static void addTabOrder(CreativeModeTab tab, ResourceLocation name) - { - for (final ResourceLocation after : tab.tabsAfter) - { + private static void addTabOrder(CreativeModeTab tab, ResourceLocation name) { + for (var after : tab.tabsAfter) { edges.put(name, after); } - for (final ResourceLocation before : tab.tabsBefore) - { + for (var before : tab.tabsBefore) { edges.put(before, name); } } - } diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 3af1cb8af7..3643226f45 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -9,7 +9,6 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -52,6 +51,7 @@ import net.minecraft.core.NonNullList; import net.minecraft.core.component.DataComponentMap; import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.core.registries.Registries; import net.minecraft.network.Connection; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -131,7 +131,6 @@ import net.minecraftforge.entity.IEntityAdditionalSpawnData; import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.GatherComponentsEvent; import net.minecraftforge.event.GrindstoneEvent; import net.minecraftforge.event.ModMismatchEvent; import net.minecraftforge.event.ServerChatEvent; @@ -143,16 +142,12 @@ import net.minecraftforge.event.entity.living.EnderManAngerEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.living.LivingBreatheEvent; import net.minecraftforge.event.entity.living.LivingDamageEvent; -import net.minecraftforge.event.entity.living.LivingDeathEvent; -import net.minecraftforge.event.entity.living.LivingDropsEvent; import net.minecraftforge.event.entity.living.LivingDrownEvent; import net.minecraftforge.event.entity.living.LivingEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingTickEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.event.entity.living.LivingMakeBrainEvent; import net.minecraftforge.event.entity.living.LivingUseTotemEvent; -import net.minecraftforge.event.entity.living.LootingLevelEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.CriticalHitEvent; import net.minecraftforge.event.entity.player.PlayerEvent; @@ -172,7 +167,6 @@ import net.minecraftforge.network.ForgePayload; import net.minecraftforge.network.NetworkContext; import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkInitialization; -import net.minecraftforge.network.NetworkProtocol; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.packets.SpawnEntity; import net.minecraftforge.resource.ResourcePackLoader; @@ -265,16 +259,12 @@ public final class ForgeHooks { public static int getLootingLevel(Entity target, @Nullable Entity killer, @Nullable DamageSource cause) { int looting = 0; if (killer instanceof LivingEntity living) - looting = EnchantmentHelper.getMobLooting(living); - if (target instanceof LivingEntity living) - looting = getLootingLevel(living, cause, looting); - return looting; - } + looting = EnchantmentHelper.getEnchantmentLevel(living.level().holderLookup(Registries.ENCHANTMENT).getOrThrow(Enchantments.LOOTING), living); - public static int getLootingLevel(LivingEntity target, @Nullable DamageSource cause, int level) { - LootingLevelEvent event = new LootingLevelEvent(target, cause, level); - MinecraftForge.EVENT_BUS.post(event); - return event.getLootingLevel(); + if (target instanceof LivingEntity living) + looting = ForgeEventFactory.fireLootingLevel(living, cause, looting).getLootingLevel(); + + return looting; } public static double getEntityVisibilityMultiplier(LivingEntity entity, Entity lookingEntity, double originalMultiplier){ @@ -406,8 +396,9 @@ public final class ForgeHooks { } public static void dropXpForBlock(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack) { - int fortuneLevel = stack.getEnchantmentLevel(Enchantments.FORTUNE); - int silkTouchLevel = stack.getEnchantmentLevel(Enchantments.SILK_TOUCH); + var lookup = level.holderLookup(Registries.ENCHANTMENT); + int fortuneLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.FORTUNE), stack); + int silkTouchLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.SILK_TOUCH), stack); int exp = state.getExpDrop(level, level.random, pos, fortuneLevel, silkTouchLevel); if (exp > 0) state.getBlock().popExperience(level, pos, exp); @@ -948,7 +939,7 @@ public final class ForgeHooks { Map snapshot = new HashMap<>(); CompoundTag regs = tag.getCompound("Registries"); for (String key : regs.getAllKeys()) - snapshot.put(new ResourceLocation(key), ForgeRegistry.Snapshot.read(regs.getCompound(key))); + snapshot.put(ResourceLocation.parse(key), ForgeRegistry.Snapshot.read(regs.getCompound(key))); failedElements = GameData.injectSnapshot(snapshot, true, true); } @@ -1013,30 +1004,6 @@ public final class ForgeHooks { return biomeLocation != null && !biomeLocation.getNamespace().equals(ResourceLocation.DEFAULT_NAMESPACE); } - /** - *

- * This method is used to prefix the path, where elements of the associated registry are stored, with their namespace, if it is not minecraft - *

- *

- * This rules conflicts with equal paths out. If for example the mod {@code fancy_cheese} adds a registry named {@code cheeses}, - * but the mod {@code awesome_cheese} also adds a registry called {@code cheeses}, - * they are going to have the same path {@code cheeses}, just with different namespaces. - * If {@code additional_cheese} wants to add additional cheese to {@code awesome_cheese}, but not {@code fancy_cheese}, - * it can not differentiate both. Both paths will look like {@code data/additional_cheese/cheeses}. - *

- *

- * The fix, which is applied here prefixes the path of the registry with the namespace, - * so {@code fancy_cheese}'s registry stores its elements in {@code data//fancy_cheese/cheeses} - * and {@code awesome_cheese}'s registry stores its elements in {@code data/namespace/awesome_cheese/cheeses} - *

- * - * @param registryKey key of the registry - * @return path of the registry key. Prefixed with the namespace if it is not "minecraft" - */ - public static String prefixNamespace(ResourceLocation registryKey) { - return registryKey.getNamespace().equals("minecraft") ? registryKey.getPath() : registryKey.getNamespace() + "/" + registryKey.getPath(); - } - public static boolean canUseEntitySelectors(SharedSuggestionProvider provider) { if (provider.hasPermission(Commands.LEVEL_GAMEMASTERS)) return true; diff --git a/src/main/java/net/minecraftforge/common/ForgeMod.java b/src/main/java/net/minecraftforge/common/ForgeMod.java index 82f84dc159..419e6abdca 100644 --- a/src/main/java/net/minecraftforge/common/ForgeMod.java +++ b/src/main/java/net/minecraftforge/common/ForgeMod.java @@ -17,10 +17,7 @@ import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.data.PackOutput; import net.minecraft.data.metadata.PackMetadataGenerator; -import net.minecraft.network.chat.ChatType; -import net.minecraft.network.chat.ChatTypeDecoration; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.metadata.pack.PackMetadataSection; import net.minecraft.sounds.SoundEvents; @@ -116,7 +113,6 @@ import net.minecraftforge.fml.common.Mod; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import org.jetbrains.annotations.Nullable; @@ -233,10 +229,10 @@ public class ForgeMod { @Override public void initializeClient(Consumer consumer) { consumer.accept(new IClientFluidTypeExtensions() { - private static final ResourceLocation UNDERWATER_LOCATION = new ResourceLocation("textures/misc/underwater.png"), - WATER_STILL = new ResourceLocation("block/water_still"), - WATER_FLOW = new ResourceLocation("block/water_flow"), - WATER_OVERLAY = new ResourceLocation("block/water_overlay"); + private static final ResourceLocation UNDERWATER_LOCATION = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png"); + private static final ResourceLocation WATER_STILL = ResourceLocation.withDefaultNamespace("block/water_still"); + private static final ResourceLocation WATER_FLOW = ResourceLocation.withDefaultNamespace("block/water_flow"); + private static final ResourceLocation WATER_OVERLAY = ResourceLocation.withDefaultNamespace("block/water_overlay"); @Override public ResourceLocation getStillTexture() { @@ -300,8 +296,8 @@ public class ForgeMod { @Override public void initializeClient(Consumer consumer) { consumer.accept(new IClientFluidTypeExtensions() { - private static final ResourceLocation LAVA_STILL = new ResourceLocation("block/lava_still"), - LAVA_FLOW = new ResourceLocation("block/lava_flow"); + private static final ResourceLocation LAVA_STILL = ResourceLocation.withDefaultNamespace("block/lava_still"); + private static final ResourceLocation LAVA_FLOW = ResourceLocation.withDefaultNamespace("block/lava_flow"); @Override public ResourceLocation getStillTexture() { @@ -350,11 +346,11 @@ public class ForgeMod { private static boolean enableMilkFluid = false; - public static final RegistryObject BUCKET_EMPTY_MILK = RegistryObject.create(new ResourceLocation("item.bucket.empty_milk"), ForgeRegistries.SOUND_EVENTS); - public static final RegistryObject BUCKET_FILL_MILK = RegistryObject.create(new ResourceLocation("item.bucket.fill_milk"), ForgeRegistries.SOUND_EVENTS); - public static final RegistryObject MILK_TYPE = RegistryObject.createOptional(new ResourceLocation("milk"), ForgeRegistries.Keys.FLUID_TYPES.location(), "minecraft"); - public static final RegistryObject MILK = RegistryObject.create(new ResourceLocation("milk"), ForgeRegistries.FLUIDS); - public static final RegistryObject FLOWING_MILK = RegistryObject.create(new ResourceLocation("flowing_milk"), ForgeRegistries.FLUIDS); + public static final RegistryObject BUCKET_EMPTY_MILK = RegistryObject.create(ResourceLocation.withDefaultNamespace("item.bucket.empty_milk"), ForgeRegistries.SOUND_EVENTS); + public static final RegistryObject BUCKET_FILL_MILK = RegistryObject.create(ResourceLocation.withDefaultNamespace("item.bucket.fill_milk"), ForgeRegistries.SOUND_EVENTS); + public static final RegistryObject MILK_TYPE = RegistryObject.createOptional(ResourceLocation.withDefaultNamespace("milk"), ForgeRegistries.Keys.FLUID_TYPES.location(), "minecraft"); + public static final RegistryObject MILK = RegistryObject.create(ResourceLocation.withDefaultNamespace("milk"), ForgeRegistries.FLUIDS); + public static final RegistryObject FLOWING_MILK = RegistryObject.create(ResourceLocation.withDefaultNamespace("flowing_milk"), ForgeRegistries.FLUIDS); /* private static final ChatTypeDecoration SYSTEM_CHAT_TYPE_DECORATION = new ChatTypeDecoration("forge.chatType.system", List.of(ChatTypeDecoration.Parameter.CONTENT), Style.EMPTY); @@ -425,8 +421,8 @@ public class ForgeMod { ForgeRegistries.ITEMS.tags().addOptionalTagDefaults(Tags.Items.ENCHANTING_FUELS, Set.of(ForgeRegistries.ITEMS.getDelegateOrThrow(Items.LAPIS_LAZULI))); // TODO: Remove when addAlias becomes proper API, as this should be done in the DR's above. - addAlias(ForgeRegistries.ATTRIBUTES, new ResourceLocation("forge", "reach_distance"), new ResourceLocation("forge", "block_reach")); - addAlias(ForgeRegistries.ATTRIBUTES, new ResourceLocation("forge", "attack_range"), new ResourceLocation("forge", "entity_reach")); + addAlias(ForgeRegistries.ATTRIBUTES, ResourceLocation.fromNamespaceAndPath("forge", "reach_distance"), ResourceLocation.fromNamespaceAndPath("forge", "block_reach")); + addAlias(ForgeRegistries.ATTRIBUTES, ResourceLocation.fromNamespaceAndPath("forge", "attack_range"), ResourceLocation.fromNamespaceAndPath("forge", "entity_reach")); } public void preInit(FMLCommonSetupEvent evt) { @@ -493,8 +489,8 @@ public class ForgeMod { @Override public void initializeClient(Consumer consumer) { consumer.accept(new IClientFluidTypeExtensions() { - private static final ResourceLocation MILK_STILL = new ResourceLocation("forge", "block/milk_still"); - private static final ResourceLocation MILK_FLOW = new ResourceLocation("forge", "block/milk_flowing"); + private static final ResourceLocation MILK_STILL = ResourceLocation.fromNamespaceAndPath("forge", "block/milk_still"); + private static final ResourceLocation MILK_FLOW = ResourceLocation.fromNamespaceAndPath("forge", "block/milk_flowing"); @Override public ResourceLocation getStillTexture() { @@ -528,7 +524,7 @@ public class ForgeMod { Arrays.stream(ItemDisplayContext.values()) .filter(Predicate.not(ItemDisplayContext::isModded)) - .forEach(ctx -> forgeRegistry.register(ctx.getId(), new ResourceLocation("minecraft", ctx.getSerializedName()), ctx)); + .forEach(ctx -> forgeRegistry.register(ctx.getId(), ResourceLocation.fromNamespaceAndPath("minecraft", ctx.getSerializedName()), ctx)); } } diff --git a/src/main/java/net/minecraftforge/common/Tags.java b/src/main/java/net/minecraftforge/common/Tags.java index aedba1f96d..725960ce2b 100644 --- a/src/main/java/net/minecraftforge/common/Tags.java +++ b/src/main/java/net/minecraftforge/common/Tags.java @@ -177,7 +177,7 @@ public class Tags private static TagKey tag(String name) { - return BlockTags.create(new ResourceLocation("forge", name)); + return BlockTags.create(ResourceLocation.fromNamespaceAndPath("forge", name)); } } @@ -189,7 +189,7 @@ public class Tags private static TagKey> tag(String name) { - return TagKey.create(Registries.ENTITY_TYPE, new ResourceLocation("forge", name)); + return TagKey.create(Registries.ENTITY_TYPE, ResourceLocation.fromNamespaceAndPath("forge", name)); } } @@ -484,7 +484,7 @@ public class Tags private static TagKey tag(String name) { - return ItemTags.create(new ResourceLocation("forge", name)); + return ItemTags.create(ResourceLocation.fromNamespaceAndPath("forge", name)); } } @@ -503,7 +503,7 @@ public class Tags private static TagKey tag(String name) { - return FluidTags.create(new ResourceLocation("forge", name)); + return FluidTags.create(ResourceLocation.fromNamespaceAndPath("forge", name)); } } @@ -567,7 +567,7 @@ public class Tags private static TagKey tag(String name) { - return TagKey.create(Registries.BIOME, new ResourceLocation("forge", name)); + return TagKey.create(Registries.BIOME, ResourceLocation.fromNamespaceAndPath("forge", name)); } } } diff --git a/src/main/java/net/minecraftforge/common/crafting/ConditionalAdvancement.java b/src/main/java/net/minecraftforge/common/crafting/ConditionalAdvancement.java index bca5e39395..7e4adfae93 100644 --- a/src/main/java/net/minecraftforge/common/crafting/ConditionalAdvancement.java +++ b/src/main/java/net/minecraftforge/common/crafting/ConditionalAdvancement.java @@ -37,7 +37,7 @@ public class ConditionalAdvancement { } public static class Builder { - private static final ResourceLocation DOESNT_MATTER = new ResourceLocation("doesnt", "matter"); + private static final ResourceLocation DOESNT_MATTER = ResourceLocation.fromNamespaceAndPath("doesnt", "matter"); private List advancements = new ArrayList<>(); private ICondition condition; diff --git a/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java b/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java index 726fd01ac9..ab183aa777 100644 --- a/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java +++ b/src/main/java/net/minecraftforge/common/crafting/ConditionalRecipe.java @@ -31,6 +31,7 @@ import net.minecraft.data.recipes.RecipeBuilder; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; @@ -134,7 +135,7 @@ public class ConditionalRecipe { } public void save(RecipeOutput out, String namespace, String path) { - save(out, new ResourceLocation(namespace, path)); + save(out, ResourceLocation.fromNamespaceAndPath(namespace, path)); } public void save(RecipeOutput out, ResourceLocation id) { @@ -168,9 +169,9 @@ public class ConditionalRecipe { private record InnerRecipe(ICondition condition, Recipe recipe) {} private record InnerAdvancement(ICondition condition, AdvancementHolder advancement, JsonObject json) {} - private static class Wrapper implements Recipe { - @Override public boolean matches(Container inv, Level level) { return false; } - @Override public ItemStack assemble(Container inv, HolderLookup.Provider reg) { return null; } + private static class Wrapper implements Recipe { + @Override public boolean matches(CraftingInput inv, Level level) { return false; } + @Override public ItemStack assemble(CraftingInput inv, HolderLookup.Provider reg) { return null; } @Override public boolean canCraftInDimensions(int width, int height) { return false; } @Override public ItemStack getResultItem(HolderLookup.Provider reg) { return null; } @Override public RecipeSerializer getSerializer() { return ConditionalRecipe.SERIALZIER; } diff --git a/src/main/java/net/minecraftforge/common/crafting/IShapedRecipe.java b/src/main/java/net/minecraftforge/common/crafting/IShapedRecipe.java index 9eace6a3d2..bae78150f7 100644 --- a/src/main/java/net/minecraftforge/common/crafting/IShapedRecipe.java +++ b/src/main/java/net/minecraftforge/common/crafting/IShapedRecipe.java @@ -5,15 +5,15 @@ package net.minecraftforge.common.crafting; -import net.minecraft.world.Container; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; /** * Used to mark a recipe that shape matters so that the recipe * book and auto crafting picks the correct shape. * Note: These methods can't be named 'getHeight' or 'getWidth' due to obfusication issues. */ -public interface IShapedRecipe extends Recipe { +public interface IShapedRecipe extends Recipe { int getRecipeWidth(); int getRecipeHeight(); } diff --git a/src/main/java/net/minecraftforge/common/crafting/SimpleCraftingContainer.java b/src/main/java/net/minecraftforge/common/crafting/SimpleCraftingContainer.java index caebe2025f..0d69aa0c28 100644 --- a/src/main/java/net/minecraftforge/common/crafting/SimpleCraftingContainer.java +++ b/src/main/java/net/minecraftforge/common/crafting/SimpleCraftingContainer.java @@ -11,98 +11,15 @@ import it.unimi.dsi.fastutil.chars.Char2ObjectMap; import it.unimi.dsi.fastutil.chars.Char2ObjectOpenHashMap; import it.unimi.dsi.fastutil.chars.CharArraySet; import net.minecraft.core.NonNullList; -import net.minecraft.world.ContainerHelper; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.entity.player.StackedContents; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.level.ItemLike; -public class SimpleCraftingContainer implements CraftingContainer { - private final int width; - private final int height; - private final NonNullList items; - +public class SimpleCraftingContainer { public static Builder builder() { return new Builder(); } - public SimpleCraftingContainer(int width, int height) { - this(width, height, NonNullList.withSize(width * height, ItemStack.EMPTY)); - } - - public SimpleCraftingContainer(int width, int height, NonNullList items) { - this.width = width; - this.height = height; - this.items = items; - if (items.size() != (width * height)) - throw new IllegalArgumentException("Invalid item list, must be same size inventory width * height, received " + items.size() + " expected " + (width * height)); - } - - @Override - public int getContainerSize() { - return this.items.size(); - } - - @Override - public boolean isEmpty() { - return this.items.stream().noneMatch(p -> !p.isEmpty()); - } - - @Override - public ItemStack getItem(int slot) { - return slot >= this.items.size() ? ItemStack.EMPTY : this.items.get(slot); - } - - @Override - public ItemStack removeItem(int slot, int count) { - return ContainerHelper.removeItem(this.items, slot, count); - } - - @Override - public ItemStack removeItemNoUpdate(int slot) { - return ContainerHelper.takeItem(this.items, slot); - } - - @Override - public void setItem(int slot, ItemStack stack) { - this.items.set(slot, stack); - } - - @Override - public void setChanged() { - } - - @Override - public boolean stillValid(Player player) { - return true; - } - - @Override - public void clearContent() { - this.items.clear(); - } - - @Override - public void fillStackedContents(StackedContents stacked) { - this.items.forEach(stacked::accountSimpleStack); - } - - @Override - public int getWidth() { - return width; - } - - @Override - public int getHeight() { - return height; - } - - @Override - public List getItems() { - return List.copyOf(this.items); - } - public static class Builder { private final List rows = new ArrayList<>(); private final Char2ObjectMap keys = new Char2ObjectOpenHashMap<>(); @@ -135,7 +52,7 @@ public class SimpleCraftingContainer implements CraftingContainer { return this; } - public SimpleCraftingContainer build() { + public CraftingInput build() { var unseen = new CharArraySet(this.keys.keySet()); unseen.remove(' '); @@ -160,7 +77,7 @@ public class SimpleCraftingContainer implements CraftingContainer { if (!unseen.isEmpty()) throw new IllegalStateException("Invalid builder, missing usage of defined keys: " + unseen); - return new SimpleCraftingContainer(width, height, items); + return CraftingInput.of(width, height, items); } } } diff --git a/src/main/java/net/minecraftforge/common/crafting/conditions/ICondition.java b/src/main/java/net/minecraftforge/common/crafting/conditions/ICondition.java index 43154be66b..85b42351b3 100644 --- a/src/main/java/net/minecraftforge/common/crafting/conditions/ICondition.java +++ b/src/main/java/net/minecraftforge/common/crafting/conditions/ICondition.java @@ -38,7 +38,7 @@ public interface ICondition { interface IContext { /* Key used to attach this context option to a DynamicOps instance */ @ApiStatus.Internal - public static ResourceLocation KEY = new ResourceLocation("forge", "condition_context"); + public static ResourceLocation KEY = ResourceLocation.fromNamespaceAndPath("forge", "condition_context"); IContext EMPTY = new IContext() { @Override diff --git a/src/main/java/net/minecraftforge/common/crafting/conditions/IConditionBuilder.java b/src/main/java/net/minecraftforge/common/crafting/conditions/IConditionBuilder.java index 5080c8a25c..680701bd02 100644 --- a/src/main/java/net/minecraftforge/common/crafting/conditions/IConditionBuilder.java +++ b/src/main/java/net/minecraftforge/common/crafting/conditions/IConditionBuilder.java @@ -33,7 +33,7 @@ public interface IConditionBuilder { } default ICondition itemExists(String namespace, String path) { - return new ItemExistsCondition(new ResourceLocation(namespace, path)); + return new ItemExistsCondition(ResourceLocation.fromNamespaceAndPath(namespace, path)); } default ICondition modLoaded(String modid) { diff --git a/src/main/java/net/minecraftforge/common/data/DatapackBuiltinEntriesProvider.java b/src/main/java/net/minecraftforge/common/data/DatapackBuiltinEntriesProvider.java index 2ce00ddf42..b79243cc9e 100644 --- a/src/main/java/net/minecraftforge/common/data/DatapackBuiltinEntriesProvider.java +++ b/src/main/java/net/minecraftforge/common/data/DatapackBuiltinEntriesProvider.java @@ -6,18 +6,10 @@ package net.minecraftforge.common.data; import net.minecraft.core.*; -import net.minecraft.core.registries.Registries; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.data.registries.RegistriesDatapackGenerator; import net.minecraft.data.registries.RegistryPatchGenerator; -import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.TagsProvider; -import net.minecraft.data.worldgen.features.OreFeatures; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import org.jetbrains.annotations.Nullable; - import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -26,8 +18,7 @@ import java.util.concurrent.CompletableFuture; * referencing existing dynamic registry objects within another dynamic registry * object. */ -public class DatapackBuiltinEntriesProvider extends RegistriesDatapackGenerator -{ +public class DatapackBuiltinEntriesProvider extends RegistriesDatapackGenerator { private final CompletableFuture fullRegistries; @@ -39,8 +30,7 @@ public class DatapackBuiltinEntriesProvider extends RegistriesDatapackGenerator * @param registries a future of patched registries * @param modIds a set of mod ids to generate the dynamic registry objects of */ - public DatapackBuiltinEntriesProvider(PackOutput output, CompletableFuture registries, Set modIds) - { + public DatapackBuiltinEntriesProvider(PackOutput output, CompletableFuture registries, Set modIds) { super(output, registries.thenApply(RegistrySetBuilder.PatchedRegistries::patches), modIds); this.fullRegistries = registries.thenApply(RegistrySetBuilder.PatchedRegistries::full); } @@ -55,8 +45,7 @@ public class DatapackBuiltinEntriesProvider extends RegistriesDatapackGenerator * @param registryBuilder a builder containing the dynamic registry objects added by this provider * @param modIds a set of mod ids to generate the dynamic registry objects of */ - public DatapackBuiltinEntriesProvider(PackOutput output, CompletableFuture registries, RegistrySetBuilder registryBuilder, Set modIds) - { + public DatapackBuiltinEntriesProvider(PackOutput output, CompletableFuture registries, RegistrySetBuilder registryBuilder, Set modIds) { this(output, RegistryPatchGenerator.createLookup(registries, registryBuilder), modIds); } @@ -69,8 +58,7 @@ public class DatapackBuiltinEntriesProvider extends RegistriesDatapackGenerator * An example use case is the {@link TagsProvider}. * @return the future of the full registry lookup */ - public CompletableFuture getFullRegistries() - { + public CompletableFuture getFullRegistries() { return this.fullRegistries; } } diff --git a/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java b/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java index da5520f26c..bce68f8a9d 100644 --- a/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java +++ b/src/main/java/net/minecraftforge/common/data/ExistingFileHelper.java @@ -150,7 +150,7 @@ public class ExistingFileHelper { } private ResourceLocation getLocation(ResourceLocation base, String suffix, String prefix) { - return new ResourceLocation(base.getNamespace(), prefix + "/" + base.getPath() + suffix); + return base.withPath(p -> prefix + '/' + p + suffix); } /** diff --git a/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java index 6ce75c6a8d..7956d9e983 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeBlockTagsProvider.java @@ -112,7 +112,7 @@ public final class ForgeBlockTagsProvider extends BlockTagsProvider String prefix = group.location().getPath().toUpperCase(Locale.ENGLISH) + '_'; for (DyeColor color : DyeColor.values()) { - ResourceLocation key = new ResourceLocation("minecraft", pattern.replace("{color}", color.getName())); + ResourceLocation key = ResourceLocation.fromNamespaceAndPath("minecraft", pattern.replace("{color}", color.getName())); TagKey tag = getForgeTag(prefix + color.getName()); Block block = ForgeRegistries.BLOCKS.getValue(key); if (block == null || block == Blocks.AIR) diff --git a/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java index 728df58d67..8c4a1a3d1e 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeItemTagsProvider.java @@ -175,7 +175,7 @@ public final class ForgeItemTagsProvider extends ItemTagsProvider String prefix = group.location().getPath().toUpperCase(Locale.ENGLISH) + '_'; for (DyeColor color : DyeColor.values()) { - ResourceLocation key = new ResourceLocation("minecraft", pattern.replace("{color}", color.getName())); + ResourceLocation key = ResourceLocation.fromNamespaceAndPath("minecraft", pattern.replace("{color}", color.getName())); TagKey tag = getForgeItemTag(prefix + color.getName()); Item item = ForgeRegistries.ITEMS.getValue(key); if (item == null || item == Items.AIR) diff --git a/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java index 2e4e3f14ce..8b0189c691 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeLootTableProvider.java @@ -62,12 +62,12 @@ public final class ForgeLootTableProvider extends LootTableProvider { public List getTables() { return super.getTables().stream().map(entry -> { // Provides new sub provider with filtering only changed loot tables and replacing condition item to condition tag - return new LootTableProvider.SubProviderEntry(() -> replaceAndFilterChangesOnly(entry.provider().get()), entry.paramSet()); + return new LootTableProvider.SubProviderEntry(provider -> replaceAndFilterChangesOnly(entry.provider().apply(provider)), entry.paramSet()); }).collect(Collectors.toList()); } private LootTableSubProvider replaceAndFilterChangesOnly(LootTableSubProvider subProvider) { - return (provider, newConsumer) -> subProvider.generate(provider, (resourceLocation, builder) -> { + return (newConsumer) -> subProvider.generate((resourceLocation, builder) -> { if (findAndReplaceInLootTableBuilder(builder, Items.SHEARS, ToolActions.SHEARS_DIG)) { newConsumer.accept(resourceLocation, builder); } diff --git a/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java index e18a377508..eba98712bb 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeRecipeProvider.java @@ -55,7 +55,7 @@ public final class ForgeRecipeProvider extends VanillaRecipeProvider { } private void exclude(String name) { - excludes.add(new ResourceLocation(name)); + excludes.add(ResourceLocation.parse(name)); } private void replace(ItemLike item, TagKey tag) { diff --git a/src/main/java/net/minecraftforge/common/data/ForgeSpriteSourceProvider.java b/src/main/java/net/minecraftforge/common/data/ForgeSpriteSourceProvider.java index dba1b29516..192c7c4345 100644 --- a/src/main/java/net/minecraftforge/common/data/ForgeSpriteSourceProvider.java +++ b/src/main/java/net/minecraftforge/common/data/ForgeSpriteSourceProvider.java @@ -21,6 +21,6 @@ public class ForgeSpriteSourceProvider extends SpriteSourceProvider @Override protected void addSources() { - atlas(SpriteSourceProvider.BLOCKS_ATLAS).addSource(new SingleFile(new ResourceLocation("forge:white"), Optional.empty())); + atlas(SpriteSourceProvider.BLOCKS_ATLAS).addSource(new SingleFile(ResourceLocation.parse("forge:white"), Optional.empty())); } } diff --git a/src/main/java/net/minecraftforge/common/data/GlobalLootModifierProvider.java b/src/main/java/net/minecraftforge/common/data/GlobalLootModifierProvider.java index effa85d476..1c58697efb 100644 --- a/src/main/java/net/minecraftforge/common/data/GlobalLootModifierProvider.java +++ b/src/main/java/net/minecraftforge/common/data/GlobalLootModifierProvider.java @@ -56,7 +56,7 @@ public abstract class GlobalLootModifierProvider implements DataProvider { /** * Call {@link #add} here, which will pass in the necessary information to write the jsons. */ - protected abstract void start(); + protected abstract void start(HolderLookup.Provider registries); @Override public CompletableFuture run(CachedOutput cache) { @@ -64,7 +64,7 @@ public abstract class GlobalLootModifierProvider implements DataProvider { } private CompletableFuture run(CachedOutput cache, HolderLookup.Provider registries) { - start(); + start(registries); Path forgePath = this.output.getOutputFolder(PackOutput.Target.DATA_PACK).resolve("forge/loot_modifiers/global_loot_modifiers.json"); Path modifierFolderPath = this.output.getOutputFolder(PackOutput.Target.DATA_PACK).resolve(this.modid).resolve("loot_modifiers"); @@ -78,7 +78,7 @@ public abstract class GlobalLootModifierProvider implements DataProvider { toSerialize.forEach(LamdbaExceptionUtils.rethrowBiConsumer((name, instance) -> { var json = codec.encodeStart(ops, instance).getOrThrow(); - entries.add(new ResourceLocation(modid, name)); + entries.add(ResourceLocation.fromNamespaceAndPath(modid, name)); Path modifierPath = modifierFolderPath.resolve(name + ".json"); futuresBuilder.add(DataProvider.saveStable(cache, json, modifierPath)); })); diff --git a/src/main/java/net/minecraftforge/common/data/LanguageProvider.java b/src/main/java/net/minecraftforge/common/data/LanguageProvider.java index 652d3a0836..11708a2891 100644 --- a/src/main/java/net/minecraftforge/common/data/LanguageProvider.java +++ b/src/main/java/net/minecraftforge/common/data/LanguageProvider.java @@ -14,6 +14,7 @@ import java.util.function.Supplier; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; +import net.minecraft.network.chat.contents.TranslatableContents; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; @@ -87,7 +88,10 @@ public abstract class LanguageProvider implements DataProvider { } public void add(Enchantment key, String name) { - add(key.getDescriptionId(), name); + if (!(key.description().getContents() instanceof TranslatableContents description)) + throw new IllegalArgumentException("Enchantment " + key + " does not have a translatable name"); + + add(description.getKey(), name); } /* diff --git a/src/main/java/net/minecraftforge/common/data/SoundDefinitionsProvider.java b/src/main/java/net/minecraftforge/common/data/SoundDefinitionsProvider.java index 39386e5f07..77ec3fe606 100644 --- a/src/main/java/net/minecraftforge/common/data/SoundDefinitionsProvider.java +++ b/src/main/java/net/minecraftforge/common/data/SoundDefinitionsProvider.java @@ -114,7 +114,7 @@ public abstract class SoundDefinitionsProvider implements DataProvider */ protected static SoundDefinition.Sound sound(final String name, final SoundDefinition.SoundType type) { - return sound(new ResourceLocation(name), type); + return sound(ResourceLocation.parse(name), type); } /** @@ -125,7 +125,7 @@ public abstract class SoundDefinitionsProvider implements DataProvider */ protected static SoundDefinition.Sound sound(final String name) { - return sound(new ResourceLocation(name)); + return sound(ResourceLocation.parse(name)); } // Addition methods @@ -186,7 +186,7 @@ public abstract class SoundDefinitionsProvider implements DataProvider */ protected void add(final String soundEvent, final SoundDefinition definition) { - this.add(new ResourceLocation(soundEvent), definition); + this.add(ResourceLocation.parse(soundEvent), definition); } private void addSounds(final String soundEvent, final SoundDefinition definition) diff --git a/src/main/java/net/minecraftforge/common/data/SpriteSourceProvider.java b/src/main/java/net/minecraftforge/common/data/SpriteSourceProvider.java index 22ee9ffe76..52c654fffd 100644 --- a/src/main/java/net/minecraftforge/common/data/SpriteSourceProvider.java +++ b/src/main/java/net/minecraftforge/common/data/SpriteSourceProvider.java @@ -27,16 +27,16 @@ import java.util.function.BiConsumer; */ public abstract class SpriteSourceProvider extends JsonCodecProvider> { - protected static final ResourceLocation BLOCKS_ATLAS = new ResourceLocation("blocks"); - protected static final ResourceLocation BANNER_PATTERNS_ATLAS = new ResourceLocation("banner_patterns"); - protected static final ResourceLocation BEDS_ATLAS = new ResourceLocation("beds"); - protected static final ResourceLocation CHESTS_ATLAS = new ResourceLocation("chests"); - protected static final ResourceLocation SHIELD_PATTERNS_ATLAS = new ResourceLocation("shield_patterns"); - protected static final ResourceLocation SHULKER_BOXES_ATLAS = new ResourceLocation("shulker_boxes"); - protected static final ResourceLocation SIGNS_ATLAS = new ResourceLocation("signs"); - protected static final ResourceLocation MOB_EFFECTS_ATLAS = new ResourceLocation("mob_effects"); - protected static final ResourceLocation PAINTINGS_ATLAS = new ResourceLocation("paintings"); - protected static final ResourceLocation PARTICLES_ATLAS = new ResourceLocation("particles"); + protected static final ResourceLocation BLOCKS_ATLAS = ResourceLocation.withDefaultNamespace("blocks"); + protected static final ResourceLocation BANNER_PATTERNS_ATLAS = ResourceLocation.withDefaultNamespace("banner_patterns"); + protected static final ResourceLocation BEDS_ATLAS = ResourceLocation.withDefaultNamespace("beds"); + protected static final ResourceLocation CHESTS_ATLAS = ResourceLocation.withDefaultNamespace("chests"); + protected static final ResourceLocation SHIELD_PATTERNS_ATLAS = ResourceLocation.withDefaultNamespace("shield_patterns"); + protected static final ResourceLocation SHULKER_BOXES_ATLAS = ResourceLocation.withDefaultNamespace("shulker_boxes"); + protected static final ResourceLocation SIGNS_ATLAS = ResourceLocation.withDefaultNamespace("signs"); + protected static final ResourceLocation MOB_EFFECTS_ATLAS = ResourceLocation.withDefaultNamespace("mob_effects"); + protected static final ResourceLocation PAINTINGS_ATLAS = ResourceLocation.withDefaultNamespace("paintings"); + protected static final ResourceLocation PARTICLES_ATLAS = ResourceLocation.withDefaultNamespace("particles"); private final Map atlases = new HashMap<>(); diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java b/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java index ab2fbc0801..3bf557a7ac 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeBlock.java @@ -476,13 +476,13 @@ public interface IForgeBlock { * @param level The level * @param pos The position of this state * @param beaconPos The position of the beacon - * @return A float RGB [0.0, 1.0] array to be averaged with a beacon's existing beam color, or null to do nothing to the beam + * @return A ARGB32 color to merge info the beacon's existing beam color, or -1 to do nothing to the beam */ @Nullable - default float[] getBeaconColorMultiplier(BlockState state, LevelReader level, BlockPos pos, BlockPos beaconPos) { + default int getBeaconColorMultiplier(BlockState state, LevelReader level, BlockPos pos, BlockPos beaconPos) { if (self() instanceof BeaconBeamBlock beam) - return beam.getColor().getTextureDiffuseColors(); - return null; + return beam.getColor().getTextureDiffuseColor(); + return -1; } /** diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java b/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java index f5315e8e70..f968f9a5cb 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeBlockState.java @@ -397,10 +397,10 @@ public interface IForgeBlockState { * @param level The level * @param pos The position of this state * @param beacon The position of the beacon - * @return A float RGB [0.0, 1.0] array to be averaged with a beacon's existing beam color, or null to do nothing to the beam + * @return A ARGB32 color to merge info the beacon's existing beam color, or -1 to do nothing to the beam */ @Nullable - default float[] getBeaconColorMultiplier(LevelReader level, BlockPos pos, BlockPos beacon) { + default int getBeaconColorMultiplier(LevelReader level, BlockPos pos, BlockPos beacon) { return self().getBlock().getBeaconColorMultiplier(self(), level, pos, beacon); } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeEnchantment.java b/src/main/java/net/minecraftforge/common/extensions/IForgeEnchantment.java deleted file mode 100644 index 0995282b4e..0000000000 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeEnchantment.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.extensions; - -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.enchantment.Enchantment; -import javax.annotation.Nullable; - -public interface IForgeEnchantment { - private Enchantment self() { - return (Enchantment)this; - } - - /** - * ItemStack aware version of {@link Enchantment#getDamageBonus(int, MobType)} - * @param level the level of the enchantment - * @param mobType the mob type being attacked - * @param enchantedItem the item used for the attack - * @return the damage bonus - */ - @SuppressWarnings("deprecation") - default float getDamageBonus(int level, @Nullable EntityType mobType, ItemStack enchantedItem) { - return self().getDamageBonus(level, mobType); - } - - /** - * Is this enchantment allowed to be enchanted on books via Enchantment Table - * @return false to disable the vanilla feature - */ - default boolean isAllowedOnBooks() { - return true; - } - - /** - * This applies specifically to applying at the enchanting table. The other method {@link #canEnchant(ItemStack)} - * applies for all possible enchantments. - */ - default boolean canApplyAtEnchantingTable(ItemStack stack) { - return stack.canApplyAtEnchantingTable(self()); - } -} diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeGameTestHelper.java b/src/main/java/net/minecraftforge/common/extensions/IForgeGameTestHelper.java index 4220b7a956..07b7620a91 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeGameTestHelper.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeGameTestHelper.java @@ -54,7 +54,7 @@ public interface IForgeGameTestHelper { var server = level.getServer(); var listener = new ServerGamePacketListenerImpl(server, connection, player, cookie); - var info = GameProtocols.SERVERBOUND.bind(RegistryFriendlyByteBuf.decorator(server.registryAccess())); + var info = GameProtocols.SERVERBOUND_TEMPLATE.bind(RegistryFriendlyByteBuf.decorator(server.registryAccess())); connection.setupInboundProtocol(info, listener); return player; } diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java index 30de58cd20..c6dbcb8095 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItem.java @@ -27,6 +27,7 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.InteractionResult; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; @@ -106,14 +107,6 @@ public interface IForgeItem { return stack.getItem() instanceof ArmorItem && ((ArmorItem) stack.getItem()).getMaterial() == ArmorMaterials.GOLD; } - /** - * Determines the amount of durability the mending enchantment - * will repair, on average, per point of experience. - */ - default float getXpRepairRatio(ItemStack stack) { - return 2f; - } - /** * Called before a block is broken. Return true to prevent default block * harvesting. @@ -255,12 +248,6 @@ public interface IForgeItem { return false; } - /** - * Called to tick armor in the armor slot. Override to do something - */ - @Deprecated(forRemoval = true, since = "1.20.1") // Use onInventoryTick - default void onArmorTick(ItemStack stack, Level level, Player player){ } - /** * Called to tick this items in a players inventory, the indexes are the global slot index. */ @@ -272,8 +259,6 @@ public interface IForgeItem { vanillaIndex -= inv.items.size(); if (vanillaIndex >= inv.armor.size()) vanillaIndex -= inv.armor.size(); - else - onArmorTick(stack, level, player); } stack.inventoryTick(level, player, vanillaIndex, selectedIndex == vanillaIndex); } @@ -288,7 +273,9 @@ public interface IForgeItem { * @return True if the given ItemStack can be inserted in the slot */ default boolean canEquip(ItemStack stack, EquipmentSlot armorType, Entity entity) { - return Mob.getEquipmentSlotForItem(stack) == armorType; + if (entity instanceof LivingEntity living) + return living.getEquipmentSlotForItem(stack) == armorType; + return false; } /** @@ -382,21 +369,7 @@ public interface IForgeItem { * @return true if the enchantment can be applied to this item */ default boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { - return self().builtInRegistryHolder().is(enchantment.getSupportedItems()) && enchantment.isPrimaryItem(stack); - } - - /** - * Gets the level of the enchantment currently present on the stack. By default, returns the enchantment level present in NBT. - * Most enchantment implementations rely upon this method. - * For consistency, results of this method should be the same as getting the enchantment from {@link #getAllEnchantments(ItemStack)} - * - * @param stack the item stack being checked - * @param enchantment the enchantment being checked for - * @return Level of the enchantment, or 0 if not present - * @see #getAllEnchantments(ItemStack) - */ - default int getEnchantmentLevel(ItemStack stack, Enchantment enchantment) { - return EnchantmentHelper.getEnchantmentsForCrafting(stack).getLevel(enchantment); + return enchantment.isPrimaryItem(stack); } /** diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java index da973f3542..beb5cea397 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeItemStack.java @@ -137,22 +137,6 @@ public interface IForgeItemStack { return self().getItem().canApplyAtEnchantingTable(self(), enchantment); } - /** - * Gets the level of the enchantment currently present on the stack. By default, returns the enchantment level present in NBT. - * - * Equivalent to calling {@link net.minecraft.world.item.enchantment.EnchantmentHelper#getItemEnchantmentLevel(Enchantment, ItemStack)} - * Use in place of {@link net.minecraft.world.item.enchantment.EnchantmentHelper#getTagEnchantmentLevel(Enchantment, ItemStack)} for checking presence of an enchantment in logic implementing the enchantment behavior. - * Use {@link net.minecraft.world.item.enchantment.EnchantmentHelper#getTagEnchantmentLevel(Enchantment, ItemStack)} instead when modifying an item's enchantments. - * - * @param enchantment the enchantment being checked for - * @return Level of the enchantment, or 0 if not present - * @see #getAllEnchantments() - * @see net.minecraft.world.item.enchantment.EnchantmentHelper#getTagEnchantmentLevel(Enchantment, ItemStack) - */ - default int getEnchantmentLevel(Enchantment enchantment) { - return self().getItem().getEnchantmentLevel(self(), enchantment); - } - /** * ItemStack sensitive version of {@link Item#getEnchantmentValue()}. * @@ -231,14 +215,6 @@ public interface IForgeItemStack { return self().getItem().onEntityItemUpdate(self(), entity); } - /** - * Determines the amount of durability the mending enchantment - * will repair, on average, per point of experience. - */ - default float getXpRepairRatio() { - return self().getItem().getXpRepairRatio(self()); - } - /** * Called to tick this items in a players inventory, the indexes are the global slot index. */ diff --git a/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java b/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java index fd90f979dd..7217831371 100644 --- a/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java +++ b/src/main/java/net/minecraftforge/common/extensions/IForgeRawTagBuilder.java @@ -5,8 +5,6 @@ package net.minecraftforge.common.extensions; -import com.google.gson.JsonObject; - import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagBuilder; import net.minecraft.tags.TagEntry; @@ -16,12 +14,6 @@ public interface IForgeRawTagBuilder { return (TagBuilder) this; } - /** - * @deprecated Never used, tags use a Codec now, so remove this later. - */ - @Deprecated(forRemoval = true, since = "1.20.1") - default void serializeTagAdditions(final JsonObject tagJson) {} - /** * Adds a tag entry to the remove list. * @param tagEntry The tag entry to add to the remove list diff --git a/src/main/java/net/minecraftforge/common/loot/IGlobalLootModifier.java b/src/main/java/net/minecraftforge/common/loot/IGlobalLootModifier.java index 2358ad66cf..3f55f63f94 100644 --- a/src/main/java/net/minecraftforge/common/loot/IGlobalLootModifier.java +++ b/src/main/java/net/minecraftforge/common/loot/IGlobalLootModifier.java @@ -31,7 +31,7 @@ import java.util.function.Function; public interface IGlobalLootModifier { Codec DIRECT_CODEC = Codec.lazyInitialized(() -> ForgeRegistries.GLOBAL_LOOT_MODIFIER_SERIALIZERS.get().getCodec().dispatch(IGlobalLootModifier::codec, Function.identity())); - Codec LOOT_CONDITIONS_CODEC = LootItemConditions.DIRECT_CODEC.listOf().xmap(list -> list.toArray(LootItemCondition[]::new), List::of); + Codec LOOT_CONDITIONS_CODEC = LootItemCondition.DIRECT_CODEC.listOf().xmap(list -> list.toArray(LootItemCondition[]::new), List::of); @SuppressWarnings("unchecked") static JsonElement getJson(Dynamic dynamic) { diff --git a/src/main/java/net/minecraftforge/common/loot/LootModifierManager.java b/src/main/java/net/minecraftforge/common/loot/LootModifierManager.java index edef6697e1..30cb3f9ed9 100644 --- a/src/main/java/net/minecraftforge/common/loot/LootModifierManager.java +++ b/src/main/java/net/minecraftforge/common/loot/LootModifierManager.java @@ -38,7 +38,7 @@ public class LootModifierManager extends SimpleJsonResourceReloadListener { @Override protected Map prepare(ResourceManager resources, ProfilerFiller profilerFiller) { - var path = new ResourceLocation("forge", FOLDER + "/global_loot_modifiers.json"); + var path = ResourceLocation.fromNamespaceAndPath("forge", FOLDER + "/global_loot_modifiers.json"); List toLoad = new ArrayList<>(); //read in all data files from forge:loot_modifiers/global_loot_modifiers in order to do layering @@ -50,7 +50,7 @@ public class LootModifierManager extends SimpleJsonResourceReloadListener { toLoad.clear(); for(var entry : GsonHelper.getAsJsonArray(json, "entries")) { - ResourceLocation loc = new ResourceLocation(entry.getAsString()); + ResourceLocation loc = ResourceLocation.parse(entry.getAsString()); toLoad.remove(loc); //remove and re-add if needed, to update the ordering. toLoad.add(loc); } diff --git a/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java b/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java index 18713299ad..1f761948bd 100644 --- a/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java +++ b/src/main/java/net/minecraftforge/common/loot/LootTableIdCondition.java @@ -21,7 +21,7 @@ public record LootTableIdCondition(ResourceLocation id) implements LootItemCondi // TODO Forge Registry at some point? public static final LootItemConditionType TYPE = new LootItemConditionType(CODEC); - public static final ResourceLocation UNKNOWN_LOOT_TABLE = new ResourceLocation("forge", "unknown_loot_table"); + public static final ResourceLocation UNKNOWN_LOOT_TABLE = ResourceLocation.fromNamespaceAndPath("forge", "unknown_loot_table"); @Override public LootItemConditionType getType() { diff --git a/src/main/java/net/minecraftforge/common/util/ITeleporter.java b/src/main/java/net/minecraftforge/common/util/ITeleporter.java deleted file mode 100644 index 5e89612bd5..0000000000 --- a/src/main/java/net/minecraftforge/common/util/ITeleporter.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.minecraftforge.common.util; - -import java.util.function.Function; - -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.portal.PortalInfo; -import net.minecraft.world.entity.Entity; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.phys.Vec3; -import net.minecraft.world.level.portal.PortalForcer; -import net.minecraft.server.level.ServerLevel; -import org.jetbrains.annotations.Nullable; - -/** - * Interface for handling the placement of entities during dimension change. - *

- * An implementation of this interface can be used to place the entity - * in a safe location, or generate a return portal, for instance. - *

- * See the {@link PortalForcer} class, which has - * been patched to implement this interface, for a vanilla example. - */ -public interface ITeleporter -{ - /** - * Called to handle placing the entity in the new world. - *

- * The initial position of the entity will be its - * position in the origin world, multiplied horizontally - * by the computed cross-dimensional movement factor. - *

- * Note that the supplied entity has not yet been spawned - * in the destination world at the time. - * - * @param entity the entity to be placed - * @param currentWorld the entity's origin - * @param destWorld the entity's destination - * @param yaw the suggested yaw value to apply - * @param repositionEntity a function to reposition the entity, which returns the new entity in the new dimension. This is the vanilla implementation of the dimension travel logic. If the supplied boolean is true, it is attempted to spawn a new portal. - * - * @return the entity in the new World. Vanilla creates for most {@link Entity}s a new instance and copy the data. But you are not allowed to create a new instance for {@link Player}s! Move the player and update its state, see {@link ServerPlayer#changeDimension(ServerLevel, ITeleporter)} - */ - default Entity placeEntity(Entity entity, ServerLevel currentWorld, ServerLevel destWorld, float yaw, Function repositionEntity) - { - return repositionEntity.apply(true); - } - - /** - * Gets the PortalInfo. defaultPortalInfo references the - * vanilla code and should not be used for your purposes. - * Override this method to handle your own logic. - *

- * Return {@code null} to prevent teleporting. - * - * @param entity The entity teleporting before the teleport - * @param destWorld The world the entity is teleporting to - * @param defaultPortalInfo A reference to the vanilla method for getting portal info. You should implement your own logic instead of using this - * - * @return The location, rotation, and motion of the entity in the destWorld after the teleport - */ - @Nullable - default PortalInfo getPortalInfo(Entity entity, ServerLevel destWorld, Function defaultPortalInfo) - { - return this.isVanilla() ? defaultPortalInfo.apply(destWorld) : new PortalInfo(entity.position(), Vec3.ZERO, entity.getYRot(), entity.getXRot()); - } - - /** - * Is this teleporter the vanilla instance. - */ - default boolean isVanilla() - { - return this.getClass() == PortalForcer.class; - } - - /** - * Called when vanilla wants to play the portal sound after teleporting. Return true to play the vanilla sound. - * @param player the player - * @param sourceWorld the source world - * @param destWorld the target world - * @return true to play the vanilla sound - */ - default boolean playTeleportSound(ServerPlayer player, ServerLevel sourceWorld, ServerLevel destWorld) - { - return true; - } - -} diff --git a/src/main/java/net/minecraftforge/entity/PartEntity.java b/src/main/java/net/minecraftforge/entity/PartEntity.java index 05a2d1a6db..9d94c3d831 100644 --- a/src/main/java/net/minecraftforge/entity/PartEntity.java +++ b/src/main/java/net/minecraftforge/entity/PartEntity.java @@ -6,6 +6,7 @@ package net.minecraftforge.entity; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerEntity; import net.minecraft.world.entity.Entity; import net.minecraft.network.protocol.Packet; @@ -22,7 +23,7 @@ public abstract class PartEntity extends Entity { } @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity p_344981_) { throw new UnsupportedOperationException(); } } diff --git a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java index c019382a1b..20847ef5ff 100644 --- a/src/main/java/net/minecraftforge/event/ForgeEventFactory.java +++ b/src/main/java/net/minecraftforge/event/ForgeEventFactory.java @@ -158,6 +158,7 @@ import net.minecraftforge.event.entity.living.LivingHealEvent; import net.minecraftforge.event.entity.living.LivingKnockBackEvent; import net.minecraftforge.event.entity.living.LivingPackSizeEvent; import net.minecraftforge.event.entity.living.LivingSwapItemsEvent; +import net.minecraftforge.event.entity.living.LootingLevelEvent; import net.minecraftforge.event.entity.living.MobEffectEvent; import net.minecraftforge.event.entity.living.MobSpawnEvent; import net.minecraftforge.event.entity.living.MobSpawnEvent.AllowDespawn; @@ -798,14 +799,6 @@ public final class ForgeEventFactory { post(new PlayerEvent.ItemSmeltedEvent(player, smelted)); } - public static void onRenderTickStart(float timer) { - post(new TickEvent.RenderTickEvent(TickEvent.Phase.START, timer)); - } - - public static void onRenderTickEnd(float timer) { - post(new TickEvent.RenderTickEvent(TickEvent.Phase.END, timer)); - } - public static void onPlayerPreTick(Player player) { post(new TickEvent.PlayerTickEvent(TickEvent.Phase.START, player)); } @@ -954,8 +947,8 @@ public final class ForgeEventFactory { return post(new LivingDeathEvent(entity, src)); } - public static boolean onLivingDrops(LivingEntity entity, DamageSource source, Collection drops, int lootingLevel, boolean recentlyHit) { - return post(new LivingDropsEvent(entity, source, drops, lootingLevel, recentlyHit)); + public static boolean onLivingDrops(LivingEntity entity, DamageSource source, Collection drops, boolean recentlyHit) { + return post(new LivingDropsEvent(entity, source, drops, recentlyHit)); } public static void onLeftClickEmpty(Player player) { @@ -1094,4 +1087,8 @@ public final class ForgeEventFactory { public static GatherComponentsEvent.Item gatherItemComponentsEvent(Item item, DataComponentMap dataComponents) { return fire(new GatherComponentsEvent.Item(item, dataComponents)); } + + public static LootingLevelEvent fireLootingLevel(LivingEntity target, @Nullable DamageSource cause, int level) { + return fire(new LootingLevelEvent(target, cause, level)); + } } diff --git a/src/main/java/net/minecraftforge/event/TickEvent.java b/src/main/java/net/minecraftforge/event/TickEvent.java index 927ae23253..c179bc5c1f 100644 --- a/src/main/java/net/minecraftforge/event/TickEvent.java +++ b/src/main/java/net/minecraftforge/event/TickEvent.java @@ -6,6 +6,7 @@ package net.minecraftforge.event; import net.minecraft.world.entity.player.Player; +import net.minecraft.client.DeltaTracker; import net.minecraft.server.MinecraftServer; import java.util.function.BooleanSupplier; @@ -54,7 +55,7 @@ public class TickEvent extends Event { return this.haveTime.getAsBoolean(); } - + /** * {@return the server instance} */ @@ -105,11 +106,27 @@ public class TickEvent extends Event } public static class RenderTickEvent extends TickEvent { - public final float renderTickTime; - public RenderTickEvent(Phase phase, float renderTickTime) - { + private final DeltaTracker timer; + + private RenderTickEvent(Phase phase, DeltaTracker timer) { super(Type.RENDER, LogicalSide.CLIENT, phase); - this.renderTickTime = renderTickTime; + this.timer = timer; + } + + public DeltaTracker getTimer() { + return this.timer; + } + + public static class Start extends RenderTickEvent { + public Start(DeltaTracker timer) { + super(Phase.START, timer); + } + } + + public static class End extends RenderTickEvent { + public End(DeltaTracker timer) { + super(Phase.END, timer); + } } } } diff --git a/src/main/java/net/minecraftforge/event/entity/living/LivingDropsEvent.java b/src/main/java/net/minecraftforge/event/entity/living/LivingDropsEvent.java index f49e76a8da..4f96f9a8c4 100644 --- a/src/main/java/net/minecraftforge/event/entity/living/LivingDropsEvent.java +++ b/src/main/java/net/minecraftforge/event/entity/living/LivingDropsEvent.java @@ -34,39 +34,27 @@ import net.minecraftforge.eventbus.api.Cancelable; * This event is fired on the {@link MinecraftForge#EVENT_BUS}. **/ @net.minecraftforge.eventbus.api.Cancelable -public class LivingDropsEvent extends LivingEvent -{ +public class LivingDropsEvent extends LivingEvent { private final DamageSource source; private final Collection drops; - private final int lootingLevel; private final boolean recentlyHit; - public LivingDropsEvent(LivingEntity entity, DamageSource source, Collection drops, int lootingLevel, boolean recentlyHit) - { + public LivingDropsEvent(LivingEntity entity, DamageSource source, Collection drops, boolean recentlyHit) { super(entity); this.source = source; this.drops = drops; - this.lootingLevel = lootingLevel; this.recentlyHit = recentlyHit; } - public DamageSource getSource() - { + public DamageSource getSource() { return source; } - public Collection getDrops() - { + public Collection getDrops() { return drops; } - public int getLootingLevel() - { - return lootingLevel; - } - - public boolean isRecentlyHit() - { + public boolean isRecentlyHit() { return recentlyHit; } } diff --git a/src/main/java/net/minecraftforge/event/level/BlockEvent.java b/src/main/java/net/minecraftforge/event/level/BlockEvent.java index 49ec66325e..074a763e50 100644 --- a/src/main/java/net/minecraftforge/event/level/BlockEvent.java +++ b/src/main/java/net/minecraftforge/event/level/BlockEvent.java @@ -8,7 +8,9 @@ package net.minecraftforge.event.level; import java.util.EnumSet; import java.util.List; +import net.minecraft.core.registries.Registries; import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.portal.PortalShape; import net.minecraft.world.level.block.state.BlockState; @@ -73,8 +75,10 @@ public class BlockEvent extends Event { if (state == null || !ForgeHooks.isCorrectToolForDrops(state, player)) { // Handle empty block or player unable to break block scenario this.exp = 0; } else { - int fortuneLevel = player.getMainHandItem().getEnchantmentLevel(Enchantments.FORTUNE); - int silkTouchLevel = player.getMainHandItem().getEnchantmentLevel(Enchantments.SILK_TOUCH); + var lookup = level.registryAccess().lookup(Registries.ENCHANTMENT).get(); + + int fortuneLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.FORTUNE), player.getMainHandItem()); + int silkTouchLevel = EnchantmentHelper.getItemEnchantmentLevel(lookup.getOrThrow(Enchantments.SILK_TOUCH), player.getMainHandItem()); this.exp = state.getExpDrop(level, level.random, pos, fortuneLevel, silkTouchLevel); } } diff --git a/src/main/java/net/minecraftforge/fluids/DispenseFluidContainer.java b/src/main/java/net/minecraftforge/fluids/DispenseFluidContainer.java index 7710db9490..071068ad1b 100644 --- a/src/main/java/net/minecraftforge/fluids/DispenseFluidContainer.java +++ b/src/main/java/net/minecraftforge/fluids/DispenseFluidContainer.java @@ -58,7 +58,10 @@ public class DispenseFluidContainer extends DefaultDispenseItemBehavior { if (stack.getCount() == 1) return resultStack; - else if (((DispenserBlockEntity)source.blockEntity()).addItem(resultStack) < 0) + + source.blockEntity().insertItem(resultStack); + + if (!resultStack.isEmpty()) this.dispenseBehavior.dispense(source, resultStack); ItemStack stackCopy = stack.copy(); @@ -87,8 +90,11 @@ public class DispenseFluidContainer extends DefaultDispenseItemBehavior { if (drainedStack.getCount() == 1) return drainedStack; - else if (!drainedStack.isEmpty() && ((DispenserBlockEntity)source.blockEntity()).addItem(drainedStack) < 0) + + if (!drainedStack.isEmpty()) { + source.blockEntity().insertItem(drainedStack); this.dispenseBehavior.dispense(source, drainedStack); + } ItemStack stackCopy = drainedStack.copy(); stackCopy.shrink(1); diff --git a/src/main/java/net/minecraftforge/fluids/FluidStack.java b/src/main/java/net/minecraftforge/fluids/FluidStack.java index f609fb9ddb..73e6c1d003 100644 --- a/src/main/java/net/minecraftforge/fluids/FluidStack.java +++ b/src/main/java/net/minecraftforge/fluids/FluidStack.java @@ -104,7 +104,7 @@ public class FluidStack return EMPTY; } - ResourceLocation fluidName = new ResourceLocation(nbt.getString("FluidName")); + ResourceLocation fluidName = ResourceLocation.parse(nbt.getString("FluidName")); Fluid fluid = ForgeRegistries.FLUIDS.getValue(fluidName); if (fluid == null) { diff --git a/src/main/java/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.java b/src/main/java/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.java index 07e4803541..a41451ad1a 100644 --- a/src/main/java/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.java +++ b/src/main/java/net/minecraftforge/items/wrapper/EntityArmorInvWrapper.java @@ -14,10 +14,10 @@ import net.minecraftforge.items.IItemHandler; * Exposes the armor inventory of an {@link LivingEntity} as an {@link IItemHandler} using {@link LivingEntity#getItemBySlot(EquipmentSlot)} and * {@link LivingEntity#setItemSlot(EquipmentSlot, ItemStack)}. */ -public class EntityArmorInvWrapper extends EntityEquipmentInvWrapper -{ - public EntityArmorInvWrapper(final LivingEntity entity) - { - super(entity, EquipmentSlot.Type.ARMOR); +public class EntityArmorInvWrapper extends EntityEquipmentInvWrapper { + public EntityArmorInvWrapper(final LivingEntity entity) { + // some entities may not support setting values in this slot, but we never cared about that before so don't care now. + // Modders should implement their own inventory wrappers. + super(entity, EquipmentSlot.Type.HUMANOID_ARMOR, EquipmentSlot.Type.ANIMAL_ARMOR); } } diff --git a/src/main/java/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.java b/src/main/java/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.java index c35f07ab65..5a03cc3491 100644 --- a/src/main/java/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.java +++ b/src/main/java/net/minecraftforge/items/wrapper/EntityEquipmentInvWrapper.java @@ -21,8 +21,7 @@ import java.util.List; * Exposes the armor or hands inventory of an {@link LivingEntity} as an {@link IItemHandler} using {@link LivingEntity#getItemBySlot(EquipmentSlot)} and * {@link LivingEntity#setItemSlot(EquipmentSlot, ItemStack)}. */ -public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiable -{ +public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiable { /** * The entity. */ @@ -37,17 +36,25 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl * @param entity The entity. * @param slotType The slot type to expose. */ - public EntityEquipmentInvWrapper(final LivingEntity entity, final EquipmentSlot.Type slotType) - { + public EntityEquipmentInvWrapper(final LivingEntity entity, final EquipmentSlot.Type mainType) { + this(entity, mainType, (EquipmentSlot.Type[])null); + } + + public EntityEquipmentInvWrapper(final LivingEntity entity, final EquipmentSlot.Type mainType, final EquipmentSlot.Type... types) { this.entity = entity; - final List slots = new ArrayList(); + var slots = new ArrayList(); - for (final EquipmentSlot slot : EquipmentSlot.values()) - { - if (slot.getType() == slotType) - { + for (var slot : EquipmentSlot.values()) { + if (slot.getType() == mainType) slots.add(slot); + else if (types != null && types.length > 0) { + for (var type : types) { + if (slot.getType() == type) { + slots.add(slot); + break; + } + } } } @@ -55,22 +62,19 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl } @Override - public int getSlots() - { + public int getSlots() { return slots.size(); } @NotNull @Override - public ItemStack getStackInSlot(final int slot) - { + public ItemStack getStackInSlot(final int slot) { return entity.getItemBySlot(validateSlotIndex(slot)); } @NotNull @Override - public ItemStack insertItem(final int slot, @NotNull final ItemStack stack, final boolean simulate) - { + public ItemStack insertItem(final int slot, @NotNull final ItemStack stack, final boolean simulate) { if (stack.isEmpty()) return ItemStack.EMPTY; @@ -80,8 +84,7 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl int limit = getStackLimit(slot, stack); - if (!existing.isEmpty()) - { + if (!existing.isEmpty()) { if (!ItemHandlerHelper.canItemStacksStack(stack, existing)) return stack; @@ -93,16 +96,11 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl boolean reachedLimit = stack.getCount() > limit; - if (!simulate) - { + if (!simulate) { if (existing.isEmpty()) - { entity.setItemSlot(equipmentSlot, reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, limit) : stack); - } else - { existing.grow(reachedLimit ? limit : stack.getCount()); - } } return reachedLimit ? ItemHandlerHelper.copyStackWithSize(stack, stack.getCount() - limit) : ItemStack.EMPTY; @@ -110,8 +108,7 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl @NotNull @Override - public ItemStack extractItem(final int slot, final int amount, final boolean simulate) - { + public ItemStack extractItem(final int slot, final int amount, final boolean simulate) { if (amount == 0) return ItemStack.EMPTY; @@ -124,41 +121,31 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl final int toExtract = Math.min(amount, existing.getMaxStackSize()); - if (existing.getCount() <= toExtract) - { + if (existing.getCount() <= toExtract) { if (!simulate) - { entity.setItemSlot(equipmentSlot, ItemStack.EMPTY); - } return existing; - } - else - { + } else { if (!simulate) - { entity.setItemSlot(equipmentSlot, ItemHandlerHelper.copyStackWithSize(existing, existing.getCount() - toExtract)); - } return ItemHandlerHelper.copyStackWithSize(existing, toExtract); } } @Override - public int getSlotLimit(final int slot) - { + public int getSlotLimit(final int slot) { final EquipmentSlot equipmentSlot = validateSlotIndex(slot); - return equipmentSlot.getType() == EquipmentSlot.Type.ARMOR ? 1 : 64; + return (equipmentSlot.getType() == EquipmentSlot.Type.HUMANOID_ARMOR || equipmentSlot.getType() == EquipmentSlot.Type.ANIMAL_ARMOR) ? 1 : 64; } - protected int getStackLimit(final int slot, @NotNull final ItemStack stack) - { + protected int getStackLimit(final int slot, @NotNull final ItemStack stack) { return Math.min(getSlotLimit(slot), stack.getMaxStackSize()); } @Override - public void setStackInSlot(final int slot, @NotNull final ItemStack stack) - { + public void setStackInSlot(final int slot, @NotNull final ItemStack stack) { final EquipmentSlot equipmentSlot = validateSlotIndex(slot); if (ItemStack.matches(entity.getItemBySlot(equipmentSlot), stack)) return; @@ -166,23 +153,21 @@ public abstract class EntityEquipmentInvWrapper implements IItemHandlerModifiabl } @Override - public boolean isItemValid(int slot, @NotNull ItemStack stack) - { + public boolean isItemValid(int slot, @NotNull ItemStack stack) { return true; } - protected EquipmentSlot validateSlotIndex(final int slot) - { + protected EquipmentSlot validateSlotIndex(final int slot) { if (slot < 0 || slot >= slots.size()) throw new IllegalArgumentException("Slot " + slot + " not in valid range - [0," + slots.size() + ")"); return slots.get(slot); } - public static LazyOptional[] create(LivingEntity entity) - { + public static LazyOptional[] create(LivingEntity entity) { @SuppressWarnings("unchecked") LazyOptional[] ret = new LazyOptional[3]; + ret[0] = LazyOptional.of(() -> new EntityHandsInvWrapper(entity)); ret[1] = LazyOptional.of(() -> new EntityArmorInvWrapper(entity)); ret[2] = LazyOptional.of(() -> new CombinedInvWrapper(ret[0].orElse(null), ret[1].orElse(null))); diff --git a/src/main/java/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.java b/src/main/java/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.java index b90e2e7b0c..43ad2bc577 100644 --- a/src/main/java/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.java +++ b/src/main/java/net/minecraftforge/items/wrapper/PlayerArmorInvWrapper.java @@ -27,7 +27,7 @@ public class PlayerArmorInvWrapper extends RangedWrapper EquipmentSlot equ = null; for (EquipmentSlot s : EquipmentSlot.values()) { - if (s.getType() == EquipmentSlot.Type.ARMOR && s.getIndex() == slot) + if (s.getType() == EquipmentSlot.Type.HUMANOID_ARMOR && s.getIndex() == slot) { equ = s; break; diff --git a/src/main/java/net/minecraftforge/logging/CrashReportExtender.java b/src/main/java/net/minecraftforge/logging/CrashReportExtender.java index 49fe34e64b..e35ede8f40 100644 --- a/src/main/java/net/minecraftforge/logging/CrashReportExtender.java +++ b/src/main/java/net/minecraftforge/logging/CrashReportExtender.java @@ -8,6 +8,7 @@ package net.minecraftforge.logging; import cpw.mods.modlauncher.log.TransformingThrowablePatternConverter; import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; +import net.minecraft.ReportType; import net.minecraft.SystemReport; import net.minecraftforge.fml.CrashReportCallables; import net.minecraftforge.fml.ISystemReportExtender; @@ -65,12 +66,12 @@ public class CrashReportExtender { }); final File file1 = new File(topLevelDir, "crash-reports"); final File file2 = new File(file1, "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-fml.txt"); - if (crashReport.saveToFile(file2)) { + if (crashReport.saveToFile(file2.toPath(), ReportType.CRASH)) { logger.fatal("Crash report saved to {}", file2); } else { logger.fatal("Failed to save crash report"); } - System.out.print(crashReport.getFriendlyReport()); + System.out.print(crashReport.getFriendlyReport(ReportType.CRASH)); return file2; } } diff --git a/src/main/java/net/minecraftforge/network/ChannelBuilder.java b/src/main/java/net/minecraftforge/network/ChannelBuilder.java index c729c9f1a6..bc06773bf6 100644 --- a/src/main/java/net/minecraftforge/network/ChannelBuilder.java +++ b/src/main/java/net/minecraftforge/network/ChannelBuilder.java @@ -36,7 +36,7 @@ public class ChannelBuilder { * @param channelName The name of the channel */ public static ChannelBuilder named(String channelName) { - return named(new ResourceLocation(channelName)); + return named(ResourceLocation.parse(channelName)); } /** diff --git a/src/main/java/net/minecraftforge/network/ChannelListManager.java b/src/main/java/net/minecraftforge/network/ChannelListManager.java index 7b2fe2f1bd..f014cd33c7 100644 --- a/src/main/java/net/minecraftforge/network/ChannelListManager.java +++ b/src/main/java/net/minecraftforge/network/ChannelListManager.java @@ -31,7 +31,7 @@ import java.util.List; public class ChannelListManager { private static final Logger LOGGER = LogUtils.getLogger(); - public static final ResourceLocation NAME = new ResourceLocation("forge", "channel_registration"); + public static final ResourceLocation NAME = ResourceLocation.fromNamespaceAndPath("forge", "channel_registration"); static final Channel CHANNEL = ChannelBuilder .named(NAME) @@ -44,7 +44,7 @@ public class ChannelListManager { .build(); private record Register(List channels) implements CustomPacketPayload { - private static Type TYPE = CustomPacketPayload.createType("minecraft:register"); + private static Type TYPE = CustomPacketPayload.createType("register"); private static StreamCodec CODEC = StreamCodec.of( (buf, v) -> encode(buf, v.channels), buf -> new Register(decode(buf)) @@ -57,7 +57,7 @@ public class ChannelListManager { } private record Unregister(List channels) implements CustomPacketPayload { - private static Type TYPE = CustomPacketPayload.createType("minecraft:unregister"); + private static Type TYPE = CustomPacketPayload.createType("unregister"); private static StreamCodec CODEC = StreamCodec.of( (buf, v) -> encode(buf, v.channels), buf -> new Unregister(decode(buf)) @@ -153,7 +153,7 @@ public class ChannelListManager { continue; try { - changed.add(new ResourceLocation(channel)); + changed.add(ResourceLocation.parse(channel)); } catch (ResourceLocationException ex) { // Vanilla packet deserializers now force this to be a resource location, so we should never get this, but just in case. LOGGER.warn("Invalid channel name received: {}. Ignoring", channel); diff --git a/src/main/java/net/minecraftforge/network/ForgePacketHandler.java b/src/main/java/net/minecraftforge/network/ForgePacketHandler.java index 3cc624ec75..126acdd1ae 100644 --- a/src/main/java/net/minecraftforge/network/ForgePacketHandler.java +++ b/src/main/java/net/minecraftforge/network/ForgePacketHandler.java @@ -215,7 +215,7 @@ public class ForgePacketHandler { var mismatched = new HashMap(); var missing = new HashSet(); for (var id : missingMods) { - var key = new ResourceLocation(id, ""); + var key = ResourceLocation.fromNamespaceAndPath(id, ""); var container = ModList.get().getModContainerById(id).orElse(null); if (container != null) mismatched.put(key, new NetworkMismatchData.Version(container.getModInfo().getVersion().toString(), "")); diff --git a/src/main/java/net/minecraftforge/network/NetworkInitialization.java b/src/main/java/net/minecraftforge/network/NetworkInitialization.java index 8ba729ff17..244c71b31a 100644 --- a/src/main/java/net/minecraftforge/network/NetworkInitialization.java +++ b/src/main/java/net/minecraftforge/network/NetworkInitialization.java @@ -21,8 +21,8 @@ import java.util.function.BiConsumer; public final class NetworkInitialization { private static final Logger LOGGER = LogManager.getLogger(); private static final Marker MARKER = MarkerManager.getMarker("FORGE_NETWORK"); - public static final ResourceLocation LOGIN_NAME = new ResourceLocation("forge", "login"); - private static final ResourceLocation HANDSHAKE_NAME = new ResourceLocation("forge", "handshake"); + public static final ResourceLocation LOGIN_NAME = ResourceLocation.fromNamespaceAndPath("forge", "login"); + private static final ResourceLocation HANDSHAKE_NAME = ResourceLocation.fromNamespaceAndPath("forge", "handshake"); //private static final ResourceLocation PLAY_NAME = new ResourceLocation("forge", "network"); public static final AttributeKey CONTEXT = AttributeKey.newInstance(HANDSHAKE_NAME.toString()); diff --git a/src/main/java/net/minecraftforge/network/ServerStatusPing.java b/src/main/java/net/minecraftforge/network/ServerStatusPing.java index d462904318..36f246b6fd 100644 --- a/src/main/java/net/minecraftforge/network/ServerStatusPing.java +++ b/src/main/java/net/minecraftforge/network/ServerStatusPing.java @@ -227,7 +227,7 @@ public record ServerStatusPing( var channelName = buf.readUtf(); var channelVersion = buf.readVarInt(); var requiredOnClient = buf.readBoolean(); - final ResourceLocation id = new ResourceLocation(modId, channelName); + final ResourceLocation id = ResourceLocation.fromNamespaceAndPath(modId, channelName); channels.put(id, new ChannelData(id, channelVersion, requiredOnClient)); } diff --git a/src/main/java/net/minecraftforge/network/packets/MismatchData.java b/src/main/java/net/minecraftforge/network/packets/MismatchData.java index effb96366c..22812fef0d 100644 --- a/src/main/java/net/minecraftforge/network/packets/MismatchData.java +++ b/src/main/java/net/minecraftforge/network/packets/MismatchData.java @@ -32,14 +32,14 @@ public record MismatchData( public static MismatchData decode(FriendlyByteBuf buf) { var mismatched = buf.readMap( - i -> new ResourceLocation(i.readUtf(MAX_LENGTH)), + i -> ResourceLocation.parse(i.readUtf(MAX_LENGTH)), i -> new Version( i.readUtf(MAX_LENGTH), i.readUtf(MAX_LENGTH) ) ); var missing = buf.readCollection(HashSet::new, - i -> new ResourceLocation(i.readUtf(MAX_LENGTH)) + i -> ResourceLocation.parse(i.readUtf(MAX_LENGTH)) ); return new MismatchData(mismatched, missing); } diff --git a/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java b/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java index ce68c36b75..c87f28427a 100644 --- a/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java +++ b/src/main/java/net/minecraftforge/registries/DataPackRegistriesHooks.java @@ -40,7 +40,7 @@ public final class DataPackRegistriesHooks { WORLDGEN_REGISTRIES.add(loaderData); if (data.networkCodec() != null) { SYNCED_CUSTOM_REGISTRIES.add(loaderData.key()); - NETWORKABLE_REGISTRIES.put(loaderData.key(), new RegistryDataLoader.RegistryData<>(loaderData.key(), data.networkCodec())); + NETWORKABLE_REGISTRIES.put(loaderData.key(), new RegistryDataLoader.RegistryData<>(loaderData.key(), data.networkCodec(), false)); } } diff --git a/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java b/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java index 912c0a062f..1b94d251bb 100644 --- a/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java +++ b/src/main/java/net/minecraftforge/registries/DataPackRegistryEvent.java @@ -78,7 +78,7 @@ public class DataPackRegistryEvent extends Event implements IModBusEvent */ public void dataPackRegistry(ResourceKey> registryKey, Codec codec, @Nullable Codec networkCodec) { - this.registryDataList.add(new DataPackRegistryData<>(new RegistryDataLoader.RegistryData<>(registryKey, codec), networkCodec)); + this.registryDataList.add(new DataPackRegistryData<>(new RegistryDataLoader.RegistryData<>(registryKey, codec, false), networkCodec)); } void process() diff --git a/src/main/java/net/minecraftforge/registries/DeferredRegister.java b/src/main/java/net/minecraftforge/registries/DeferredRegister.java index cc5bb1ac40..dcb6b1ab9a 100644 --- a/src/main/java/net/minecraftforge/registries/DeferredRegister.java +++ b/src/main/java/net/minecraftforge/registries/DeferredRegister.java @@ -74,7 +74,7 @@ public class DeferredRegister { * @see #create(ResourceKey, String) * @see #create(ResourceLocation, String) */ - public static DeferredRegister create(@Deprecated(forRemoval = true/* change to RegistryHolder */, since = "1.20.2") Supplier> reg, String modid) { + public static DeferredRegister create(RegistryHolder reg, String modid) { if (reg instanceof RegistryHolder holder) return create(holder.registryKey, modid); throw new IllegalArgumentException("Registry argument was not made by DefferredRegister.makeRegistry. Use another create method. This method will be changed to use the hard type in1 1.20.3, but I don't wanna break everything in 1.20.2 so we have this error"); @@ -184,7 +184,7 @@ public class DeferredRegister { Objects.requireNonNull(name); Objects.requireNonNull(sup); - final ResourceLocation key = new ResourceLocation(modid, name); + var key = ResourceLocation.fromNamespaceAndPath(modid, name); RegistryObject ret; if (this.registryKey != null) { @@ -210,7 +210,7 @@ public class DeferredRegister { * @return A supplier of the {@link IForgeRegistry} created by the builder. * Will always return null until after the {@link NewRegistryEvent} event fires. */ - public Supplier> makeRegistry(final Supplier> sup) { + public RegistryHolder makeRegistry(final Supplier> sup) { return makeRegistry(this.registryKey.location(), sup); } @@ -226,7 +226,7 @@ public class DeferredRegister { @NotNull public TagKey createTagKey(@NotNull String path) { Objects.requireNonNull(path); - return createTagKey(new ResourceLocation(this.modid, path)); + return createTagKey(ResourceLocation.fromNamespaceAndPath(this.modid, path)); } /** @@ -261,7 +261,7 @@ public class DeferredRegister { @NotNull public TagKey createOptionalTagKey(@NotNull String path, @NotNull Set> defaults) { Objects.requireNonNull(path); - return createOptionalTagKey(new ResourceLocation(this.modid, path), defaults); + return createOptionalTagKey(ResourceLocation.fromNamespaceAndPath(this.modid, path), defaults); } /** @@ -335,7 +335,7 @@ public class DeferredRegister { return Objects.requireNonNull(this.registryKey).location(); } - private Supplier> makeRegistry(final ResourceLocation registryName, final Supplier> sup) { + private RegistryHolder makeRegistry(final ResourceLocation registryName, final Supplier> sup) { if (registryName == null) throw new IllegalStateException("Cannot create a registry without specifying a registry name"); if (RegistryManager.ACTIVE.getRegistry(registryName) != null || this.registryFactory != null) @@ -376,12 +376,7 @@ public class DeferredRegister { } } - /* - * Make this public API and make `makeRegistry` return this. Thus allowing us to make a new create method that takes this in for a simpler API - * for custom Forge registries. But it requires breaking the core api of makeRegistry and the fields we store forge's custom registries in. - */ - @Deprecated(forRemoval = true, since = "1.20.2") - private static class RegistryHolder implements Supplier> { + public static final class RegistryHolder implements Supplier> { private final ResourceKey> registryKey; private IForgeRegistry registry = null; @@ -389,6 +384,10 @@ public class DeferredRegister { this.registryKey = registryKey; } + public ResourceKey> getKey() { + return this.registryKey; + } + @Override public IForgeRegistry get() { // Keep looking up the registry until it's not null diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java index 11f34cb571..4f0c9f2636 100644 --- a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java +++ b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java @@ -5,7 +5,6 @@ package net.minecraftforge.registries; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import net.minecraft.commands.synchronization.ArgumentTypeInfo; @@ -14,7 +13,6 @@ import net.minecraft.world.entity.decoration.PaintingVariant; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.block.Block; -import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.memory.MemoryModuleType; @@ -50,6 +48,7 @@ import net.minecraftforge.common.crafting.ingredients.IIngredientSerializer; import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.common.world.BiomeModifier; import net.minecraftforge.fluids.FluidType; +import net.minecraftforge.registries.DeferredRegister.RegistryHolder; import net.minecraftforge.registries.holdersets.HolderSetType; import java.util.ArrayList; @@ -68,7 +67,7 @@ public class ForgeRegistries { return RegistryManager.ACTIVE.getRegistry(key); } static final List> registries = new ArrayList<>(); - private static final Supplier> registry(ResourceKey> key, Supplier> factory) { + private static final RegistryHolder registry(ResourceKey> key, Supplier> factory) { var dr = DeferredRegister.create(key, key.location().getNamespace()); registries.add(dr); return dr.makeRegistry(factory); @@ -81,7 +80,6 @@ public class ForgeRegistries { public static final IForgeRegistry MOB_EFFECTS = active(Keys.MOB_EFFECTS); public static final IForgeRegistry SOUND_EVENTS = active(Keys.SOUND_EVENTS); public static final IForgeRegistry POTIONS = active(Keys.POTIONS); - public static final IForgeRegistry ENCHANTMENTS = active(Keys.ENCHANTMENTS); public static final IForgeRegistry> ENTITY_TYPES = active(Keys.ENTITY_TYPES); public static final IForgeRegistry> BLOCK_ENTITY_TYPES = active(Keys.BLOCK_ENTITY_TYPES); public static final IForgeRegistry> PARTICLE_TYPES = active(Keys.PARTICLE_TYPES); @@ -113,15 +111,15 @@ public class ForgeRegistries { public static final IForgeRegistry BIOMES = active(Keys.BIOMES); // Custom forge registries - public static final Supplier>> ENTITY_DATA_SERIALIZERS = registry(Keys.ENTITY_DATA_SERIALIZERS, GameData::getDataSerializersRegistryBuilder); - public static final Supplier>> GLOBAL_LOOT_MODIFIER_SERIALIZERS = registry(Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, GameData::getGLMSerializersRegistryBuilder); - public static final Supplier>> BIOME_MODIFIER_SERIALIZERS = registry(Keys.BIOME_MODIFIER_SERIALIZERS, GameData::makeUnsavedAndUnsynced); - public static final Supplier>> STRUCTURE_MODIFIER_SERIALIZERS = registry(Keys.STRUCTURE_MODIFIER_SERIALIZERS, GameData::makeUnsavedAndUnsynced); - public static final Supplier> FLUID_TYPES = registry(Keys.FLUID_TYPES, GameData::getFluidTypeRegistryBuilder); - public static final Supplier> HOLDER_SET_TYPES = registry(Keys.HOLDER_SET_TYPES, GameData::makeUnsavedAndUnsynced); - public static final Supplier> DISPLAY_CONTEXTS = registry(Keys.DISPLAY_CONTEXTS, GameData::getItemDisplayContextRegistryBuilder); - public static final Supplier>> CONDITION_SERIALIZERS = registry(Keys.CONDITION_SERIALIZERS, GameData::makeUnsavedAndUnsynced); - public static final Supplier>> INGREDIENT_SERIALIZERS = registry(Keys.INGREDIENT_SERIALIZERS, GameData::makeUnsavedAndUnsynced); + public static final RegistryHolder> ENTITY_DATA_SERIALIZERS = registry(Keys.ENTITY_DATA_SERIALIZERS, GameData::getDataSerializersRegistryBuilder); + public static final RegistryHolder> GLOBAL_LOOT_MODIFIER_SERIALIZERS = registry(Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, GameData::getGLMSerializersRegistryBuilder); + public static final RegistryHolder> BIOME_MODIFIER_SERIALIZERS = registry(Keys.BIOME_MODIFIER_SERIALIZERS, GameData::makeUnsavedAndUnsynced); + public static final RegistryHolder> STRUCTURE_MODIFIER_SERIALIZERS = registry(Keys.STRUCTURE_MODIFIER_SERIALIZERS, GameData::makeUnsavedAndUnsynced); + public static final RegistryHolder FLUID_TYPES = registry(Keys.FLUID_TYPES, GameData::getFluidTypeRegistryBuilder); + public static final RegistryHolder HOLDER_SET_TYPES = registry(Keys.HOLDER_SET_TYPES, GameData::makeUnsavedAndUnsynced); + public static final RegistryHolder DISPLAY_CONTEXTS = registry(Keys.DISPLAY_CONTEXTS, GameData::getItemDisplayContextRegistryBuilder); + public static final RegistryHolder> CONDITION_SERIALIZERS = registry(Keys.CONDITION_SERIALIZERS, GameData::makeUnsavedAndUnsynced); + public static final RegistryHolder> INGREDIENT_SERIALIZERS = registry(Keys.INGREDIENT_SERIALIZERS, GameData::makeUnsavedAndUnsynced); public static final class Keys { //Vanilla @@ -134,7 +132,6 @@ public class ForgeRegistries { public static final ResourceKey>> STAT_TYPES = key("stat_type"); public static final ResourceKey>> COMMAND_ARGUMENT_TYPES = key("command_argument_type"); public static final ResourceKey> SOUND_EVENTS = key("sound_event"); - public static final ResourceKey> ENCHANTMENTS = key("enchantment"); public static final ResourceKey>> ENTITY_TYPES = key("entity_type"); public static final ResourceKey> PAINTING_VARIANTS = key("painting_variant"); public static final ResourceKey>> PARTICLE_TYPES = key("particle_type"); @@ -174,7 +171,7 @@ public class ForgeRegistries { public static final ResourceKey> STRUCTURE_MODIFIERS = key("forge:structure_modifier"); private static ResourceKey> key(String name) { - return ResourceKey.createRegistryKey(new ResourceLocation(name)); + return ResourceKey.createRegistryKey(ResourceLocation.parse(name)); } private static void init() {} diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistry.java b/src/main/java/net/minecraftforge/registries/ForgeRegistry.java index 5e66110f39..8357de27f7 100644 --- a/src/main/java/net/minecraftforge/registries/ForgeRegistry.java +++ b/src/main/java/net/minecraftforge/registries/ForgeRegistry.java @@ -893,19 +893,19 @@ public class ForgeRegistry implements IForgeRegistryInternal, IForgeRegist ListTag list = nbt.getList("ids", 10); list.forEach(e -> { CompoundTag comp = (CompoundTag)e; - ret.ids.put(new ResourceLocation(comp.getString("K")), comp.getInt("V")); + ret.ids.put(ResourceLocation.parse(comp.getString("K")), comp.getInt("V")); }); list = nbt.getList("aliases", 10); list.forEach(e -> { CompoundTag comp = (CompoundTag)e; - ret.aliases.put(new ResourceLocation(comp.getString("K")), new ResourceLocation(comp.getString("V"))); + ret.aliases.put(ResourceLocation.parse(comp.getString("K")), ResourceLocation.parse(comp.getString("V"))); }); list = nbt.getList("overrides", 10); list.forEach(e -> { CompoundTag comp = (CompoundTag)e; - ret.overrides.put(new ResourceLocation(comp.getString("K")), comp.getString("V")); + ret.overrides.put(ResourceLocation.parse(comp.getString("K")), comp.getString("V")); }); int[] blocked = nbt.getIntArray("blocked"); diff --git a/src/main/java/net/minecraftforge/registries/GameData.java b/src/main/java/net/minecraftforge/registries/GameData.java index 66f730c0f1..ba412ae443 100644 --- a/src/main/java/net/minecraftforge/registries/GameData.java +++ b/src/main/java/net/minecraftforge/registries/GameData.java @@ -44,7 +44,6 @@ import net.minecraft.world.entity.ai.village.poi.PoiType; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; -import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -114,7 +113,6 @@ public class GameData { makeRegistry(Keys.MOB_EFFECTS).create(); makeRegistry(Keys.SOUND_EVENTS).create(); makeRegistry(Keys.POTIONS).create(); - makeRegistry(Keys.ENCHANTMENTS).legacyName("enchantments").intrusiveHolderCallback(Enchantment::builtInRegistryHolder).create(); makeRegistry(Keys.ENTITY_TYPES, "pig").legacyName("entities").intrusiveHolderCallback(EntityType::builtInRegistryHolder).create(); makeRegistry(Keys.BLOCK_ENTITY_TYPES).disableSaving().legacyName("blockentities").intrusiveHolderCallback(BlockEntityType::builtInRegistryHolder).create(); makeRegistry(Keys.PARTICLE_TYPES).disableSaving().create(); @@ -165,7 +163,7 @@ public class GameData { static RegistryBuilder getItemDisplayContextRegistryBuilder() { return new RegistryBuilder() .setMaxID(128 * 2) /* 0 -> 127 gets positive ID, 128 -> 256 gets negative ID */.disableOverrides().disableSaving() - .setDefaultKey(new ResourceLocation("minecraft:none")) + .setDefaultKey(ResourceLocation.withDefaultNamespace("none")) .onAdd(ItemDisplayContext.ADD_CALLBACK); } @@ -178,7 +176,7 @@ public class GameData { } private static RegistryBuilder makeRegistry(ResourceKey> key, String _default) { - return new RegistryBuilder().setName(key.location()).setMaxID(MAX_VARINT).hasWrapper().setDefaultKey(new ResourceLocation(_default)); + return new RegistryBuilder().setName(key.location()).setMaxID(MAX_VARINT).hasWrapper().setDefaultKey(ResourceLocation.parse(_default)); } @SuppressWarnings("unchecked") @@ -432,7 +430,6 @@ public class GameData { @Override public void onCreate(IForgeRegistryInternal owner, RegistryManager stage) { var idMap = new ClearableObjectIntIdentityMap() { - @SuppressWarnings("deprecation") @Override public int getId(BlockState key) { return this.tToId.containsKey(key) ? this.tToId.getInt(key) : -1; @@ -775,6 +772,6 @@ public class GameData { LogManager.getLogger().debug("Mod `{}` attempting to register `{}` to the namespace `{}`. This could be intended, but likely means an EventBusSubscriber without a modid.", prefix, name, oldPrefix); prefix = oldPrefix; } - return new ResourceLocation(prefix, name); + return ResourceLocation.fromNamespaceAndPath(prefix, name); } } diff --git a/src/main/java/net/minecraftforge/registries/IForgeRegistry.java b/src/main/java/net/minecraftforge/registries/IForgeRegistry.java index d5dd275cf7..3e823f9773 100644 --- a/src/main/java/net/minecraftforge/registries/IForgeRegistry.java +++ b/src/main/java/net/minecraftforge/registries/IForgeRegistry.java @@ -142,7 +142,7 @@ public interface IForgeRegistry extends Iterable { public record SlaveKey(ResourceLocation name) { public static SlaveKey create(String name) { - return create(new ResourceLocation(name)); + return create(ResourceLocation.parse(name)); } public static SlaveKey create(ResourceLocation name) { diff --git a/src/main/java/net/minecraftforge/registries/ObjectHolderRef.java b/src/main/java/net/minecraftforge/registries/ObjectHolderRef.java index 605bebe95c..929610e9a6 100644 --- a/src/main/java/net/minecraftforge/registries/ObjectHolderRef.java +++ b/src/main/java/net/minecraftforge/registries/ObjectHolderRef.java @@ -54,7 +54,7 @@ class ObjectHolderRef implements Consumer> { try { - injectedObjectName = new ResourceLocation(injectedObject); + injectedObjectName = ResourceLocation.parse(injectedObject); } catch (ResourceLocationException e) { diff --git a/src/main/java/net/minecraftforge/registries/ObjectHolderRegistry.java b/src/main/java/net/minecraftforge/registries/ObjectHolderRegistry.java index 166dc04e30..4cd7dca3d9 100644 --- a/src/main/java/net/minecraftforge/registries/ObjectHolderRegistry.java +++ b/src/main/java/net/minecraftforge/registries/ObjectHolderRegistry.java @@ -148,7 +148,7 @@ public class ObjectHolderRegistry } if (isClass) { - scanClassForFields(classModIds, type, new ResourceLocation(registryName), registryClass, value, clazz, extractFromValue); + scanClassForFields(classModIds, type, ResourceLocation.parse(registryName), registryClass, value, clazz, extractFromValue); } else { @@ -165,7 +165,7 @@ public class ObjectHolderRegistry try { Field f = clazz.getDeclaredField(annotationTarget); - ObjectHolderRef ref = ObjectHolderRef.create(new ResourceLocation(registryName), f, value, extractFromValue); + ObjectHolderRef ref = ObjectHolderRef.create(ResourceLocation.parse(registryName), f, value, extractFromValue); if (ref != null) addHandler(ref); } @@ -196,7 +196,7 @@ public class ObjectHolderRegistry Type targetClass, Object declaration) { if (registryName != null) - return new ResourceLocation(registryName); + return ResourceLocation.parse(registryName); if (classRegistryNames.containsKey(targetClass)) return classRegistryNames.get(targetClass); diff --git a/src/main/java/net/minecraftforge/registries/RegisterEvent.java b/src/main/java/net/minecraftforge/registries/RegisterEvent.java index 332aed7eef..120f26a648 100644 --- a/src/main/java/net/minecraftforge/registries/RegisterEvent.java +++ b/src/main/java/net/minecraftforge/registries/RegisterEvent.java @@ -125,7 +125,7 @@ public class RegisterEvent extends Event implements IModBusEvent */ default void register(String name, T value) { - register(new ResourceLocation(ModLoadingContext.get().getActiveNamespace(), name), value); + register(ResourceLocation.fromNamespaceAndPath(ModLoadingContext.get().getActiveNamespace(), name), value); } /** diff --git a/src/main/java/net/minecraftforge/registries/RegistryBuilder.java b/src/main/java/net/minecraftforge/registries/RegistryBuilder.java index 1c8290bd1e..5e4374389c 100644 --- a/src/main/java/net/minecraftforge/registries/RegistryBuilder.java +++ b/src/main/java/net/minecraftforge/registries/RegistryBuilder.java @@ -26,7 +26,7 @@ public class RegistryBuilder { } public static RegistryBuilder of(String name) { - return of(new ResourceLocation(name)); + return of(ResourceLocation.parse(name)); } public static RegistryBuilder of(ResourceLocation name) { @@ -174,7 +174,7 @@ public class RegistryBuilder { } public RegistryBuilder legacyName(String name) { - return legacyName(new ResourceLocation(name)); + return legacyName(ResourceLocation.parse(name)); } public RegistryBuilder legacyName(ResourceLocation name) { diff --git a/src/main/java/net/minecraftforge/server/LanguageHook.java b/src/main/java/net/minecraftforge/server/LanguageHook.java index b7aa3e5867..ea638a3815 100644 --- a/src/main/java/net/minecraftforge/server/LanguageHook.java +++ b/src/main/java/net/minecraftforge/server/LanguageHook.java @@ -74,7 +74,7 @@ public class LanguageHook ResourceManager resourceManager = server.getServerResources().resourceManager(); resourceManager.getNamespaces().forEach(namespace -> { try { - ResourceLocation langResource = new ResourceLocation(namespace, langFile); + ResourceLocation langResource = ResourceLocation.fromNamespaceAndPath(namespace, langFile); loadLocaleData(resourceManager.getResourceStack(langResource)); } catch (Exception exception) { LOGGER.warn("Skipped language file: {}:{}", namespace, langFile, exception); diff --git a/src/main/java/net/minecraftforge/server/command/ChunkGenWorker.java b/src/main/java/net/minecraftforge/server/command/ChunkGenWorker.java index 778c7c8d74..9a5c41bfd7 100644 --- a/src/main/java/net/minecraftforge/server/command/ChunkGenWorker.java +++ b/src/main/java/net/minecraftforge/server/command/ChunkGenWorker.java @@ -117,7 +117,7 @@ public class ChunkGenWorker implements IWorker if (!dim.hasChunk(x, z)) { //Chunk is unloaded ChunkAccess chunk = dim.getChunk(x, z, ChunkStatus.EMPTY, true); - if (!chunk.getStatus().isOrAfter(ChunkStatus.FULL)) { + if (!chunk.getPersistedStatus().isOrAfter(ChunkStatus.FULL)) { chunk = dim.getChunk(x, z, ChunkStatus.FULL); genned++; //There isn't a way to check if the chunk is actually created just if it was loaded } diff --git a/src/main/java/net/minecraftforge/server/command/TagsCommand.java b/src/main/java/net/minecraftforge/server/command/TagsCommand.java index f565459874..ea25042664 100644 --- a/src/main/java/net/minecraftforge/server/command/TagsCommand.java +++ b/src/main/java/net/minecraftforge/server/command/TagsCommand.java @@ -59,7 +59,7 @@ class TagsCommand { private static final long PAGE_SIZE = 8; private static final ResourceKey>> ROOT_REGISTRY_KEY = - ResourceKey.createRegistryKey(new ResourceLocation("root")); + ResourceKey.createRegistryKey(ResourceLocation.parse("root")); private static final DynamicCommandExceptionType UNKNOWN_REGISTRY = new DynamicCommandExceptionType(key -> Component.translatable("commands.forge.tags.error.unknown_registry", key)); diff --git a/src/main/java/net/minecraftforge/server/permission/PermissionAPI.java b/src/main/java/net/minecraftforge/server/permission/PermissionAPI.java index 047715ab16..cda1b44b27 100644 --- a/src/main/java/net/minecraftforge/server/permission/PermissionAPI.java +++ b/src/main/java/net/minecraftforge/server/permission/PermissionAPI.java @@ -110,7 +110,7 @@ public final class PermissionAPI try { - ResourceLocation selectedPermissionHandler = new ResourceLocation(ForgeConfig.SERVER.permissionHandler.get()); + ResourceLocation selectedPermissionHandler = ResourceLocation.parse(ForgeConfig.SERVER.permissionHandler.get()); if (!availableHandlers.containsKey(selectedPermissionHandler)) { LOGGER.error("Unable to find configured permission handler {}, will use {}", selectedPermissionHandler, DefaultPermissionHandler.IDENTIFIER); diff --git a/src/main/java/net/minecraftforge/server/permission/handler/DefaultPermissionHandler.java b/src/main/java/net/minecraftforge/server/permission/handler/DefaultPermissionHandler.java index 05519f3eb5..a7bd6cf9fd 100644 --- a/src/main/java/net/minecraftforge/server/permission/handler/DefaultPermissionHandler.java +++ b/src/main/java/net/minecraftforge/server/permission/handler/DefaultPermissionHandler.java @@ -14,7 +14,7 @@ import java.util.*; public final class DefaultPermissionHandler implements IPermissionHandler { - public static final ResourceLocation IDENTIFIER = new ResourceLocation("forge", "default_handler");; + public static final ResourceLocation IDENTIFIER = ResourceLocation.fromNamespaceAndPath("forge", "default_handler");; private final Set> registeredNodes = new HashSet<>(); private Set> immutableRegisteredNodes = Collections.unmodifiableSet(this.registeredNodes); diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index c126bccbcb..1b31ddd1ab 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -1,7 +1,6 @@ public net.minecraft.advancements.CriteriaTriggers m_10595_(Ljava/lang/String;Lnet/minecraft/advancements/CriterionTrigger;)Lnet/minecraft/advancements/CriterionTrigger; # register default net.minecraft.client.KeyMapping f_90817_ # isDown public net.minecraft.client.Minecraft f_90987_ # textureManager -public net.minecraft.client.Minecraft m_91271_()V # createSearchTrees public-f net.minecraft.client.Options f_92059_ # keyMappings public net.minecraft.client.Options$FieldAccess protected net.minecraft.client.gui.components.AbstractButton f_290895_ # SPRITES @@ -17,6 +16,10 @@ public net.minecraft.client.gui.screens.Screen f_169369_ # renderables public net.minecraft.client.model.geom.LayerDefinitions f_171106_ # OUTER_ARMOR_DEFORMATION public net.minecraft.client.model.geom.LayerDefinitions f_171107_ # INNER_ARMOR_DEFORMATION public net.minecraft.client.multiplayer.ClientPacketListener f_104899_ # commands +public net.minecraft.client.multiplayer.SessionSearchTrees f_336706_ # CREATIVE_TAGS +public net.minecraft.client.multiplayer.SessionSearchTrees f_337599_ # CREATIVE_NAMES +public net.minecraft.client.multiplayer.SessionSearchTrees$Key +public net.minecraft.client.multiplayer.SessionSearchTrees$Key ()V public net.minecraft.client.particle.ParticleEngine m_107378_(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleEngine$SpriteParticleRegistration;)V # register public net.minecraft.client.particle.ParticleEngine m_107381_(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleProvider;)V # register public net.minecraft.client.particle.ParticleEngine m_272137_(Lnet/minecraft/core/particles/ParticleType;Lnet/minecraft/client/particle/ParticleProvider$Sprite;)V # register @@ -54,7 +57,7 @@ public net.minecraft.client.renderer.block.model.BlockFaceUV$Deserializer public net.minecraft.client.renderer.block.model.BlockModel f_111417_ # textureMap public net.minecraft.client.renderer.block.model.BlockModel f_111418_ # parent public net.minecraft.client.renderer.block.model.BlockModel f_111424_ # hasAmbientOcclusion -public net.minecraft.client.renderer.block.model.BlockModel m_111437_(Lnet/minecraft/client/renderer/block/model/BlockElement;Lnet/minecraft/client/renderer/block/model/BlockElementFace;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/core/Direction;Lnet/minecraft/client/resources/model/ModelState;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/block/model/BakedQuad; # bakeFace +public net.minecraft.client.renderer.block.model.BlockModel m_111437_(Lnet/minecraft/client/renderer/block/model/BlockElement;Lnet/minecraft/client/renderer/block/model/BlockElementFace;Lnet/minecraft/client/renderer/texture/TextureAtlasSprite;Lnet/minecraft/core/Direction;Lnet/minecraft/client/resources/model/ModelState;)Lnet/minecraft/client/renderer/block/model/BakedQuad; # bakeFace public net.minecraft.client.renderer.block.model.ItemModelGenerator m_111638_(ILjava/lang/String;Lnet/minecraft/client/renderer/texture/SpriteContents;)Ljava/util/List; # processFrames public net.minecraft.client.renderer.block.model.ItemOverride$Deserializer public net.minecraft.client.renderer.block.model.ItemOverride$Deserializer ()V # constructor @@ -76,6 +79,7 @@ public net.minecraft.client.renderer.entity.EntityRenderers m_174036_(Lnet/minec public net.minecraft.client.renderer.entity.ItemRenderer m_115162_(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Ljava/util/List;Lnet/minecraft/world/item/ItemStack;II)V # renderQuadList public net.minecraft.client.renderer.entity.ItemRenderer m_115189_(Lnet/minecraft/client/resources/model/BakedModel;Lnet/minecraft/world/item/ItemStack;IILcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;)V # renderModelLists public net.minecraft.client.renderer.entity.LivingEntityRenderer m_115326_(Lnet/minecraft/client/renderer/entity/layers/RenderLayer;)Z # addLayer +public net.minecraft.client.renderer.entity.layers.ElytraLayer f_116934_ # WINGS_LOCATION public net.minecraft.client.renderer.texture.SpriteContents f_243731_ # byMipLevel default net.minecraft.client.renderer.texture.SpriteContents f_244575_ # animatedTexture default net.minecraft.client.renderer.texture.SpriteContents m_245088_()I # getFrameCount @@ -205,7 +209,6 @@ public net.minecraft.world.item.CreativeModeTabs f_257028_ # REDSTONE_BLOCKS public net.minecraft.world.item.CreativeModeTabs f_257039_ # INVENTORY #group public net.minecraft.world.item.Item public net.minecraft.world.item.DiggerItem (Lnet/minecraft/world/item/Tier;Lnet/minecraft/tags/TagKey;Lnet/minecraft/world/item/Item$Properties;)V # constructor -public net.minecraft.world.item.RecordItem (ILnet/minecraft/sounds/SoundEvent;Lnet/minecraft/world/item/Item$Properties;I)V # constructor #endgroup private-f net.minecraft.world.item.ItemDisplayContext f_268735_ # id public net.minecraft.world.item.ItemStackLinkedSet f_260558_ # TYPE_AND_TAG @@ -358,7 +361,7 @@ public net.minecraft.world.level.block.entity.HopperBlockEntity m_59395_(I)V # s public net.minecraft.world.level.block.entity.HopperBlockEntity m_59409_()Z # isOnCustomCooldown public net.minecraft.world.level.block.state.properties.BlockSetType m_272115_(Lnet/minecraft/world/level/block/state/properties/BlockSetType;)Lnet/minecraft/world/level/block/state/properties/BlockSetType; # register public net.minecraft.world.level.block.state.properties.WoodType m_61844_(Lnet/minecraft/world/level/block/state/properties/WoodType;)Lnet/minecraft/world/level/block/state/properties/WoodType; # register -public net.minecraft.world.level.chunk.status.ChunkStatus (Lnet/minecraft/world/level/chunk/status/ChunkStatus;IZLjava/util/EnumSet;Lnet/minecraft/world/level/chunk/status/ChunkType;Lnet/minecraft/world/level/chunk/status/ChunkStatus$GenerationTask;Lnet/minecraft/world/level/chunk/status/ChunkStatus$LoadingTask;)V # constructor +public net.minecraft.world.level.chunk.status.ChunkStatus (Lnet/minecraft/world/level/chunk/status/ChunkStatus;Ljava/util/EnumSet;Lnet/minecraft/world/level/chunk/status/ChunkType;)V # constructor protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157994_ # barrierNoise protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157996_ # lavaNoise protected net.minecraft.world.level.levelgen.Aquifer$NoiseBasedAquifer f_157998_ # aquiferCache @@ -400,4 +403,3 @@ protected net.minecraft.world.level.portal.PortalForcer f_77648_ # level public net.minecraft.world.level.storage.LevelResource (Ljava/lang/String;)V # constructor private-f net.minecraft.world.level.storage.loot.LootPool f_79028_ # rolls private-f net.minecraft.world.level.storage.loot.LootPool f_79029_ # bonusRolls -public net.minecraft.client.renderer.entity.layers.ElytraLayer f_116934_ # WINGS_LOCATION diff --git a/src/main/resources/data/forge/structures/empty3x3x3.nbt b/src/main/resources/data/forge/structure/empty3x3x3.nbt similarity index 100% rename from src/main/resources/data/forge/structures/empty3x3x3.nbt rename to src/main/resources/data/forge/structure/empty3x3x3.nbt diff --git a/src/test/generated/conditional_loot_test/data/conditional_loot_test/loot_tables/blocks/test.json b/src/test/generated/conditional_loot_test/data/conditional_loot_test/loot_table/blocks/test.json similarity index 100% rename from src/test/generated/conditional_loot_test/data/conditional_loot_test/loot_tables/blocks/test.json rename to src/test/generated/conditional_loot_test/data/conditional_loot_test/loot_table/blocks/test.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/conditional_doesnt_load_empty.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/conditional_doesnt_load_empty.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/conditional_doesnt_load_empty.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/conditional_doesnt_load_empty.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/conditional_recipe_choice.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/conditional_recipe_choice.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/conditional_recipe_choice.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/conditional_recipe_choice.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/cooking_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/cooking_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/cooking_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/cooking_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/cooking_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/cooking_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/cooking_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/cooking_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shaped_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shaped_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shaped_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shaped_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shaped_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shaped_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shaped_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shaped_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shapeless_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shapeless_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shapeless_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shapeless_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shapeless_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shapeless_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/shapeless_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/shapeless_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/singe_item_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/singe_item_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/singe_item_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/singe_item_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/single_item_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/single_item_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/single_item_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/single_item_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/test_encode_all_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/test_encode_all_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/advancements/recipes/test_encode_all_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/advancement/recipes/test_encode_all_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/conditional_doesnt_load_empty.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/conditional_doesnt_load_empty.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/conditional_doesnt_load_empty.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/conditional_doesnt_load_empty.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/conditional_recipe_choice.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/conditional_recipe_choice.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/conditional_recipe_choice.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/conditional_recipe_choice.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/cooking_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/cooking_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/cooking_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/cooking_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/cooking_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shaped_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shaped_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shaped_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shaped_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shaped_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shaped_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shaped_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shaped_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shapeless_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shapeless_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shapeless_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/shapeless_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/shapeless_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/singe_item_true_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/singe_item_true_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/singe_item_true_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/single_item_false_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/single_item_false_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/single_item_false_conditions.json diff --git a/src/test/generated/conditional_recipe/data/conditional_recipe/recipes/test_encode_all_conditions.json b/src/test/generated/conditional_recipe/data/conditional_recipe/recipe/test_encode_all_conditions.json similarity index 100% rename from src/test/generated/conditional_recipe/data/conditional_recipe/recipes/test_encode_all_conditions.json rename to src/test/generated/conditional_recipe/data/conditional_recipe/recipe/test_encode_all_conditions.json diff --git a/src/test/generated/criterion_test/data/criterion_test/advancements/break_glass_with_fish.json b/src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json similarity index 100% rename from src/test/generated/criterion_test/data/criterion_test/advancements/break_glass_with_fish.json rename to src/test/generated/criterion_test/data/criterion_test/advancement/break_glass_with_fish.json diff --git a/src/test/generated/criterion_test/data/criterion_test/tags/items/fish.json b/src/test/generated/criterion_test/data/criterion_test/tags/item/fish.json similarity index 100% rename from src/test/generated/criterion_test/data/criterion_test/tags/items/fish.json rename to src/test/generated/criterion_test/data/criterion_test/tags/item/fish.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/compound_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/compound_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/compound_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/compound_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/difference_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/difference_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/difference_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/difference_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/intersection_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/intersection_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/intersection_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/intersection_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/partial_nbt_damage_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/partial_nbt_damage_only.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/partial_nbt_damage_only.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/partial_nbt_damage_only.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/partial_nbt_name_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/partial_nbt_name_only.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/partial_nbt_name_only.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/partial_nbt_name_only.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/strict_nbt_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/strict_nbt_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/advancements/recipes/misc/strict_nbt_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/advancement/recipes/misc/strict_nbt_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/compound_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/compound_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/compound_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/difference_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/difference_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/difference_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/intersection_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/intersection_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/intersection_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/partial_nbt_damage_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/partial_nbt_damage_only.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_damage_only.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/partial_nbt_name_only.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/partial_nbt_name_only.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/partial_nbt_name_only.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/recipes/strict_nbt_ingredient.json b/src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/recipes/strict_nbt_ingredient.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/recipe/strict_nbt_ingredient.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/tags/items/left.json b/src/test/generated/custom_ingredients/data/custom_ingredients/tags/item/left.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/tags/items/left.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/tags/item/left.json diff --git a/src/test/generated/custom_ingredients/data/custom_ingredients/tags/items/right.json b/src/test/generated/custom_ingredients/data/custom_ingredients/tags/item/right.json similarity index 100% rename from src/test/generated/custom_ingredients/data/custom_ingredients/tags/items/right.json rename to src/test/generated/custom_ingredients/data/custom_ingredients/tags/item/right.json diff --git a/src/test/generated/global_loot_test/data/global_loot_test/enchantment/smelt.json b/src/test/generated/global_loot_test/data/global_loot_test/enchantment/smelt.json new file mode 100644 index 0000000000..fe7ab6c49f --- /dev/null +++ b/src/test/generated/global_loot_test/data/global_loot_test/enchantment/smelt.json @@ -0,0 +1,20 @@ +{ + "anvil_cost": 5, + "description": { + "translate": "enchantment.global_loot_test.smelt" + }, + "max_cost": { + "base": 15, + "per_level_above_first": 0 + }, + "max_level": 1, + "min_cost": { + "base": 15, + "per_level_above_first": 0 + }, + "slots": [ + "mainhand" + ], + "supported_items": "#minecraft:enchantable/mining_loot", + "weight": 1 +} \ No newline at end of file diff --git a/src/test/generated/global_loot_test/data/global_loot_test/loot_modifiers/smelting.json b/src/test/generated/global_loot_test/data/global_loot_test/loot_modifiers/smelting.json index 2a9b58fa01..be432ec44f 100644 --- a/src/test/generated/global_loot_test/data/global_loot_test/loot_modifiers/smelting.json +++ b/src/test/generated/global_loot_test/data/global_loot_test/loot_modifiers/smelting.json @@ -7,7 +7,7 @@ "predicates": { "minecraft:enchantments": [ { - "enchantment": "global_loot_test:smelt", + "enchantments": "global_loot_test:smelt", "levels": { "min": 1 } diff --git a/src/test/generated/global_loot_test/data/global_loot_test/loot_tables/blocks/test.json b/src/test/generated/global_loot_test/data/global_loot_test/loot_table/blocks/test.json similarity index 100% rename from src/test/generated/global_loot_test/data/global_loot_test/loot_tables/blocks/test.json rename to src/test/generated/global_loot_test/data/global_loot_test/loot_table/blocks/test.json diff --git a/src/test/generated/mdk_datagen/pack.mcmeta b/src/test/generated/mdk_datagen/pack.mcmeta index 0b98554228..6061a13ab0 100644 --- a/src/test/generated/mdk_datagen/pack.mcmeta +++ b/src/test/generated/mdk_datagen/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "${mod_id} resources", - "pack_format": 32 + "pack_format": 34 } } \ No newline at end of file diff --git a/src/test/generated/test_helper_mod/pack.mcmeta b/src/test/generated/test_helper_mod/pack.mcmeta index a0d2e1c873..6239a42009 100644 --- a/src/test/generated/test_helper_mod/pack.mcmeta +++ b/src/test/generated/test_helper_mod/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "Forge tests resource pack", - "pack_format": 32 + "pack_format": 34 } } \ No newline at end of file diff --git a/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java b/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java index 2033c0b745..03d313fe78 100644 --- a/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java +++ b/src/test/java/net/minecraftforge/debug/creativetabs/CreativeModeTabTest.java @@ -30,8 +30,8 @@ public class CreativeModeTabTest { public static final String MOD_ID = "creative_mode_tab_test"; private static final boolean ENABLED = true; - private static final ResourceKey LOGS = ResourceKey.create(Registries.CREATIVE_MODE_TAB, new ResourceLocation(MOD_ID, "logs")); - private static final ResourceKey STONE = ResourceKey.create(Registries.CREATIVE_MODE_TAB, new ResourceLocation(MOD_ID, "stone")); + private static final ResourceKey LOGS = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "logs")); + private static final ResourceKey STONE = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "stone")); public CreativeModeTabTest() { if (!ENABLED) @@ -70,7 +70,7 @@ public class CreativeModeTabTest { .withTabsAfter(CreativeModeTabs.BUILDING_BLOCKS) .build()); - helper.register(new ResourceLocation(MOD_ID, "colors"), CreativeModeTab.builder().title(Component.literal("Colors")) + helper.register(ResourceLocation.fromNamespaceAndPath(MOD_ID, "colors"), CreativeModeTab.builder().title(Component.literal("Colors")) .displayItems((params, output) -> { for (DyeColor color : DyeColor.values()) output.accept(DyeItem.byColor(color)); @@ -83,7 +83,7 @@ public class CreativeModeTabTest { List blocks = List.of(Blocks.GRANITE, Blocks.DIORITE, Blocks.ANDESITE, Blocks.COBBLESTONE); for (int i = 0; i < blocks.size(); i++) { Block block = blocks.get(i); - helper.register(new ResourceLocation(MOD_ID, "dummy" + i), CreativeModeTab.builder() + helper.register(ResourceLocation.fromNamespaceAndPath(MOD_ID, "dummy" + i), CreativeModeTab.builder() .title(Component.literal("Dummy " + i)) .icon(() -> new ItemStack(block)) .displayItems((params, output) -> output.accept(block)) @@ -92,7 +92,7 @@ public class CreativeModeTabTest { } //final ResourceLocation custom_tabs_image = new ResourceLocation(MOD_ID, "textures/gui/container/creative_inventory/custom_tabs.png"); - helper.register(new ResourceLocation(MOD_ID, "with_tabs_image"), CreativeModeTab.builder() + helper.register(ResourceLocation.fromNamespaceAndPath(MOD_ID, "with_tabs_image"), CreativeModeTab.builder() .title(Component.translatable("itemGroup.with_tabs_image")) .icon(() -> new ItemStack(Blocks.BRICKS)) .displayItems((params, output) -> output.accept(Blocks.BRICKS)) diff --git a/src/test/java/net/minecraftforge/debug/gameplay/biome/BiomeTestMod.java b/src/test/java/net/minecraftforge/debug/gameplay/biome/BiomeTestMod.java index 6da5f57402..ff401cc07d 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/biome/BiomeTestMod.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/biome/BiomeTestMod.java @@ -35,9 +35,9 @@ import java.util.concurrent.CompletableFuture; public class BiomeTestMod extends BaseTestMod { public static final String MOD_ID = "biome_test_mod"; - private static final ResourceKey OVERWORLD_NETHERITE_BLOCK_ORE_PLACED_KEY = ResourceKey.create(Registries.PLACED_FEATURE, new ResourceLocation(BiomeTestMod.MOD_ID, "overworld_netherite_block_ore_placed")); - private static final ResourceKey ADD_OVERWORLD_NETHERITE_BLOCK_ORE = ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, new ResourceLocation(BiomeTestMod.MOD_ID, "add_overworld_netherite_block_ore")); - private static final ResourceKey> OVERWORLD_NETHERITE_BLOCK_ORE = ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(BiomeTestMod.MOD_ID, "overworld_netherite_block_ore")); + private static final ResourceKey OVERWORLD_NETHERITE_BLOCK_ORE_PLACED_KEY = ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(BiomeTestMod.MOD_ID, "overworld_netherite_block_ore_placed")); + private static final ResourceKey ADD_OVERWORLD_NETHERITE_BLOCK_ORE = ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(BiomeTestMod.MOD_ID, "add_overworld_netherite_block_ore")); + private static final ResourceKey> OVERWORLD_NETHERITE_BLOCK_ORE = ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(BiomeTestMod.MOD_ID, "overworld_netherite_block_ore")); public BiomeTestMod() { var modBus = FMLJavaModLoadingContext.get().getModEventBus(); diff --git a/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java b/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java index e9d3f59194..695b11fc8f 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/crafting/ConditionalRecipeTest.java @@ -20,10 +20,12 @@ import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; -import net.minecraft.world.Container; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SingleRecipeInput; import net.minecraft.world.level.block.Blocks; import net.minecraftforge.common.crafting.ConditionalRecipe; import net.minecraftforge.common.crafting.SimpleCraftingContainer; @@ -46,16 +48,16 @@ public class ConditionalRecipeTest extends BaseTestMod { } private static ResourceLocation rl(String path) { - return new ResourceLocation(MODID, path); + return ResourceLocation.fromNamespaceAndPath(MODID, path); } - private static > void assertFalse(GameTestHelper helper, RecipeType type, C container) { + private static > void assertFalse(GameTestHelper helper, RecipeType type, C container) { var recipe = helper.getLevel().getRecipeManager().getRecipeFor(type, container, helper.getLevel()); helper.assertTrue(recipe.isEmpty(), () -> "Found crafting recipe when unexpected: " + recipe.get().id()); helper.succeed(); } - private static > void assertTrue(GameTestHelper helper, RecipeType type, C container) { + private static > void assertTrue(GameTestHelper helper, RecipeType type, C container) { var recipe = helper.getLevel().getRecipeManager().getRecipeFor(type, container, helper.getLevel()); helper.assertTrue(recipe.isPresent(), "Did not find crafting recipe when expected!"); helper.assertTrue(recipe.get().id().getNamespace().equals(MODID), "It wasn't our recipe: " + recipe.get().id()); @@ -108,38 +110,22 @@ public class ConditionalRecipeTest extends BaseTestMod { @GameTest(template = "forge:empty3x3x3") public static void cooking_false_conditions(GameTestHelper helper) { - assertFalse(helper, RecipeType.SMELTING, SimpleCraftingContainer.builder() - .pattern("X") - .define('X', Blocks.DIRT) - .build() - ); + assertFalse(helper, RecipeType.SMELTING, new SingleRecipeInput(new ItemStack(Blocks.DIRT))); } @GameTest(template = "forge:empty3x3x3") public static void cooking_true_conditions(GameTestHelper helper) { - assertTrue(helper, RecipeType.SMELTING, SimpleCraftingContainer.builder() - .pattern("X") - .define('X', Blocks.BEE_NEST) - .build() - ); + assertTrue(helper, RecipeType.SMELTING, new SingleRecipeInput(new ItemStack(Blocks.BEE_NEST))); } @GameTest(template = "forge:empty3x3x3") public static void single_item_false_conditions(GameTestHelper helper) { - assertFalse(helper, RecipeType.STONECUTTING, SimpleCraftingContainer.builder() - .pattern("X") - .define('X', Blocks.DIRT) - .build() - ); + assertFalse(helper, RecipeType.STONECUTTING, new SingleRecipeInput(new ItemStack(Blocks.DIRT))); } @GameTest(template = "forge:empty3x3x3") public static void single_item_true_conditions(GameTestHelper helper) { - assertTrue(helper, RecipeType.STONECUTTING, SimpleCraftingContainer.builder() - .pattern("X") - .define('X', Blocks.REDSTONE_ORE) - .build() - ); + assertTrue(helper, RecipeType.STONECUTTING, new SingleRecipeInput(new ItemStack(Blocks.REDSTONE_ORE))); } @GameTest(template = "forge:empty3x3x3") diff --git a/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java b/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java index ef5a749cbd..17c61ca904 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/crafting/CustomIngredientsTest.java @@ -24,13 +24,13 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; -import net.minecraft.world.Container; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.component.CustomData; +import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.crafting.SimpleCraftingContainer; @@ -70,20 +70,20 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { } private static ResourceLocation rl(String path) { - return new ResourceLocation(MODID, path); + return ResourceLocation.fromNamespaceAndPath(MODID, path); } private static TagKey tag(String name) { return ItemTags.create(rl(name)); } - private static > void assertRecipeMiss(GameTestHelper helper, RecipeType type, C container) { + private static > void assertRecipeMiss(GameTestHelper helper, RecipeType type, C container) { var recipe = helper.getLevel().getRecipeManager().getRecipeFor(type, container, helper.getLevel()); helper.assertTrue(recipe.isEmpty(), () -> "Found crafting recipe when unexpected: " + recipe.get().id()); helper.succeed(); } - private static > void assertRecipeMatch(GameTestHelper helper, RecipeType type, C container, String name) { + private static > void assertRecipeMatch(GameTestHelper helper, RecipeType type, C container, String name) { var recipe = helper.getLevel().getRecipeManager().getRecipeFor(type, container, helper.getLevel()); helper.assertTrue(recipe.isPresent(), "Did not find crafting recipe when expected!"); helper.assertTrue(recipe.get().id().getNamespace().equals(MODID), "It wasn't our recipe: " + recipe.get().id()); @@ -133,7 +133,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { var iron_tag = tagged(Items.IRON_PICKAXE, both); var diamond = stack(Items.DIAMOND_PICKAXE); var diamond_tag = tagged(Items.DIAMOND_PICKAXE, both); - Function container = (stack) -> + Function container = (stack) -> SimpleCraftingContainer.builder() .pattern("XXX") .pattern("XXX") @@ -167,7 +167,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { @GameTest(template = "forge:empty3x3x3") public static void compound(GameTestHelper helper) { - Function container = (stack) -> + Function container = (stack) -> SimpleCraftingContainer.builder() .pattern("XXX") .pattern(" X ") @@ -183,7 +183,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { @GameTest(template = "forge:empty3x3x3") public static void strict(GameTestHelper helper) { - Function container = (stack) -> + Function container = (stack) -> SimpleCraftingContainer.builder() .pattern("XXX") .define('X', stack) @@ -196,7 +196,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { @GameTest(template = "forge:empty3x3x3") public static void intersection(GameTestHelper helper) { - Function container = (stack) -> + Function container = (stack) -> SimpleCraftingContainer.builder() .pattern("XXX") .pattern("XXX") @@ -212,7 +212,7 @@ public class CustomIngredientsTest extends BaseTestMod implements INBTBuilder { @GameTest(template = "forge:empty3x3x3") public static void difference(GameTestHelper helper) { - Function container = (stack) -> + Function container = (stack) -> SimpleCraftingContainer.builder() .pattern(" X ") .pattern("XXX") diff --git a/src/test/java/net/minecraftforge/debug/gameplay/criterion/CriterionTest.java b/src/test/java/net/minecraftforge/debug/gameplay/criterion/CriterionTest.java index 7f90a9a0d4..0f1e6802a7 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/criterion/CriterionTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/criterion/CriterionTest.java @@ -53,7 +53,7 @@ public final class CriterionTest extends BaseTestMod { private static final DeferredRegister> TRIGGERS = DeferredRegister.create(BuiltInRegistries.TRIGGER_TYPES.key(), MOD_ID); public static final RegistryObject CRITERION = TRIGGERS.register("criterion", BreakWithItemCriterion::new); public static final String TEST_CRITERION_ID = "break_glass_with_fish"; - public static final ResourceLocation TEST_ADVANCEMENT_ID = new ResourceLocation(MOD_ID, TEST_CRITERION_ID); + public static final ResourceLocation TEST_ADVANCEMENT_ID = ResourceLocation.fromNamespaceAndPath(MOD_ID, TEST_CRITERION_ID); public CriterionTest() { MinecraftForge.EVENT_BUS.addListener(this::onBlockBreak); @@ -107,7 +107,7 @@ public final class CriterionTest extends BaseTestMod { @SubscribeEvent public void onGatherData(GatherDataEvent event) { - var tag = TagKey.create(Registries.ITEM, new ResourceLocation(MOD_ID, "fish")); + var tag = TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(MOD_ID, "fish")); event.getGenerator().addProvider(true, new TagsProvider(event.getGenerator().getPackOutput(), Registries.ITEM, event.getLookupProvider(), MOD_ID, event.getExistingFileHelper()) { @Override @@ -123,7 +123,7 @@ public final class CriterionTest extends BaseTestMod { } }); - var STORY_ROOT = new AdvancementHolder(new ResourceLocation("minecraft", "story/root"), null); + var STORY_ROOT = new AdvancementHolder(ResourceLocation.fromNamespaceAndPath("minecraft", "story/root"), null); event.getGenerator().addProvider(true, new ForgeAdvancementProvider( diff --git a/src/test/java/net/minecraftforge/debug/gameplay/data/DatapackBuiltinEntriesProviderTest.java b/src/test/java/net/minecraftforge/debug/gameplay/data/DatapackBuiltinEntriesProviderTest.java index 374bbcae96..17390cb638 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/data/DatapackBuiltinEntriesProviderTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/data/DatapackBuiltinEntriesProviderTest.java @@ -38,10 +38,10 @@ public class DatapackBuiltinEntriesProviderTest extends BaseTestMod { public static final String MOD_ID = "datapack_builtin_entries_provider_test"; // Vanilla registry entries - public static final ResourceKey> MOSSY_STONE_FEATURE = ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(MOD_ID, "mossy_stone")); - public static final ResourceKey MOSSY_STONE_PLACEMENT = ResourceKey.create(Registries.PLACED_FEATURE, new ResourceLocation(MOD_ID, "mossy_stone")); + public static final ResourceKey> MOSSY_STONE_FEATURE = ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(MOD_ID, "mossy_stone")); + public static final ResourceKey MOSSY_STONE_PLACEMENT = ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(MOD_ID, "mossy_stone")); // Forge registry entries - public static final ResourceKey MOSSY_STONE_MODIFIER = ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, new ResourceLocation(MOD_ID, "mossy_stone_modifier")); + public static final ResourceKey MOSSY_STONE_MODIFIER = ResourceKey.create(ForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(MOD_ID, "mossy_stone_modifier")); // The ore targets public static final Supplier> MOSSY_STONE_TARGETS = () -> { return List.of( diff --git a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java index aaf3d99eea..da9102eff8 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/item/GatherComponentsEventTest.java @@ -13,6 +13,7 @@ import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.test.BaseTestMod; import java.util.List; +import java.util.Optional; @GameTestHolder("forge." + GatherComponentsEventTest.MOD_ID) @Mod(GatherComponentsEventTest.MOD_ID) @@ -31,6 +32,7 @@ public class GatherComponentsEventTest extends BaseTestMod { 7, true, 3, + Optional.empty(), List.of() )); } diff --git a/src/test/java/net/minecraftforge/debug/gameplay/loot/ConditionalLootPools.java b/src/test/java/net/minecraftforge/debug/gameplay/loot/ConditionalLootPools.java index 7c2feb8b07..5e6c4d81cf 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/loot/ConditionalLootPools.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/loot/ConditionalLootPools.java @@ -71,8 +71,8 @@ public class ConditionalLootPools extends BaseTestMod { } private static class BlockLoot extends BlockLootSubProvider implements IConditionBuilder { - public BlockLoot() { - super(Set.of(), FeatureFlags.REGISTRY.allFlags()); + public BlockLoot(HolderLookup.Provider lookup) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), lookup); } @Override diff --git a/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java b/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java index 4ebceeb348..5c4d5b8f0c 100644 --- a/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java +++ b/src/test/java/net/minecraftforge/debug/gameplay/loot/GlobalLootModifiersTest.java @@ -17,7 +17,9 @@ import net.minecraft.advancements.critereon.ItemSubPredicates; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.Registries; import net.minecraft.util.ExtraCodecs; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -25,21 +27,25 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.data.PackOutput; import net.minecraft.data.loot.BlockLootSubProvider; import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.data.registries.RegistryPatchGenerator; import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; import net.minecraft.world.flag.FeatureFlags; -import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SingleRecipeInput; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; @@ -48,6 +54,7 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePrope import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.MatchTool; import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; import net.minecraftforge.common.data.GlobalLootModifierProvider; import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.common.loot.LootModifier; @@ -82,8 +89,16 @@ public class GlobalLootModifiersTest extends BaseTestMod { GLM.register("silk_touch_bamboo", SilkTouchTestModifier.CODEC); } - private static final DeferredRegister ENCHANTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, MODID); - private static final RegistryObject SMELT = ENCHANTS.register("smelt", () -> new Enchantment(Enchantment.definition(ItemTags.MINING_LOOT_ENCHANTABLE, 1, 1, Enchantment.constantCost(15), Enchantment.constantCost(15), 5, EquipmentSlot.MAINHAND))); + private static final ResourceKey SMELT = ResourceKey.create(Registries.ENCHANTMENT, ResourceLocation.fromNamespaceAndPath(MODID, "smelt")); + private static final Supplier ENCHANTMENTS = () -> new RegistrySetBuilder() + .add(Registries.ENCHANTMENT, ctx -> { + ctx.register(SMELT, Enchantment.enchantment( + Enchantment.definition( + ctx.lookup(Registries.ITEM).getOrThrow(ItemTags.MINING_LOOT_ENCHANTABLE), 1, 1, + Enchantment.constantCost(15), Enchantment.constantCost(15), 5, EquipmentSlotGroup.MAINHAND + ) + ).build(SMELT.location())); + }); private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID); private static final RegistryObject TEST_BLOCK = BLOCKS.register("test", () -> new Block(BlockBehaviour.Properties.of())); @@ -91,21 +106,26 @@ public class GlobalLootModifiersTest extends BaseTestMod { private static final RegistryObject TEST_ITEM = ITEMS.register("test", () -> new BlockItem(TEST_BLOCK.get(), new Item.Properties())); public GlobalLootModifiersTest() { - testItem(() -> getTestItem()); + testItem(lookup -> getTestItem(lookup.lookup(Registries.ENCHANTMENT).get())); } - private static ItemStack getTestItem() { + private static ItemStack getTestItem(HolderLookup lookup) { var smelt = new ItemStack(Items.IRON_AXE); var enchants = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(smelt)); - enchants.set(SMELT.get(), 1); + enchants.set(lookup.getOrThrow(SMELT), 1); smelt.set(DataComponents.ENCHANTMENTS, enchants.toImmutable()); return smelt; } @SubscribeEvent public void runData(GatherDataEvent event) { - event.getGenerator().addProvider(event.includeServer(), new DataProvider(event.getGenerator().getPackOutput(), MODID, event.getLookupProvider())); - event.getGenerator().addProvider(event.includeServer(), new LootProvider(event.getGenerator().getPackOutput(), event.getLookupProvider())); + var out = event.getGenerator().getPackOutput(); + var lookup = event.getLookupProvider(); + var patched = RegistryPatchGenerator.createLookup(lookup, ENCHANTMENTS.get()) + .thenApply(RegistrySetBuilder.PatchedRegistries::patches); + event.getGenerator().addProvider(event.includeServer(), new DatapackBuiltinEntriesProvider(out, lookup, ENCHANTMENTS.get(), Set.of(MODID))); + event.getGenerator().addProvider(event.includeServer(), new ModifierProvider(out, MODID, patched)); + event.getGenerator().addProvider(event.includeServer(), new LootProvider(out, lookup)); } @GameTest(template = "forge:empty3x3x3") @@ -113,7 +133,7 @@ public class GlobalLootModifiersTest extends BaseTestMod { var center = new BlockPos(1, 1, 1); helper.setBlock(center, Blocks.OAK_LOG); - var smelt = getTestItem(); + var smelt = getTestItem(helper.getLevel().holderLookup(Registries.ENCHANTMENT)); var player = helper.makeMockServerPlayer(); player.setItemSlot(EquipmentSlot.MAINHAND, smelt); @@ -142,13 +162,15 @@ public class GlobalLootModifiersTest extends BaseTestMod { helper.succeed(); } - private static class DataProvider extends GlobalLootModifierProvider { - public DataProvider(PackOutput output, String modid, CompletableFuture registries) { + private static class ModifierProvider extends GlobalLootModifierProvider { + public ModifierProvider(PackOutput output, String modid, CompletableFuture registries) { super(output, modid, registries); } @Override - protected void start() { + protected void start(HolderLookup.Provider registries) { + var smelt = registries.lookupOrThrow(Registries.ENCHANTMENT).getOrThrow(SMELT); + add("smelting", new SmeltingEnchantmentModifier( new LootItemCondition[]{ MatchTool.toolMatches( @@ -156,7 +178,7 @@ public class GlobalLootModifiersTest extends BaseTestMod { .withSubPredicate( ItemSubPredicates.ENCHANTMENTS, ItemEnchantmentsPredicate.enchantments(List.of( - new EnchantmentPredicate(SMELT.getHolder(), MinMaxBounds.Ints.atLeast(1)) + new EnchantmentPredicate(smelt, MinMaxBounds.Ints.atLeast(1)) )) ) ).build() @@ -194,8 +216,8 @@ public class GlobalLootModifiersTest extends BaseTestMod { } private static class BlockLoot extends BlockLootSubProvider implements IConditionBuilder { - public BlockLoot() { - super(Set.of(), FeatureFlags.REGISTRY.allFlags()); + public BlockLoot(HolderLookup.Provider lookup) { + super(Set.of(), FeatureFlags.REGISTRY.allFlags(), lookup); } @Override @@ -237,7 +259,7 @@ public class GlobalLootModifiersTest extends BaseTestMod { var mgr = context.getLevel().getRecipeManager(); var reg = context.getLevel().registryAccess(); return mgr - .getRecipeFor(RecipeType.SMELTING, new SimpleContainer(stack), context.getLevel()) + .getRecipeFor(RecipeType.SMELTING, new SingleRecipeInput(stack), context.getLevel()) .map(holder -> holder.value()) .map(recipe -> recipe.getResultItem(reg)) .filter(itemStack -> !itemStack.isEmpty()) @@ -272,9 +294,11 @@ public class GlobalLootModifiersTest extends BaseTestMod { public ObjectArrayList doApply(ObjectArrayList generatedLoot, LootContext context) { var ctxTool = context.getParamOrNull(LootContextParams.TOOL); //return early if silk-touch is already applied (otherwise we'll get stuck in an infinite loop). - if (ctxTool == null || ctxTool.isEmpty() || ctxTool.getEnchantmentLevel(Enchantments.SILK_TOUCH) > 0) return generatedLoot; + var silk = context.getLevel().holderLookup(Registries.ENCHANTMENT).getOrThrow(Enchantments.SILK_TOUCH); + var silkLevel = EnchantmentHelper.getItemEnchantmentLevel(silk, ctxTool); + if (ctxTool == null || ctxTool.isEmpty() || silkLevel > 0) return generatedLoot; var fakeTool = ctxTool.copy(); - fakeTool.enchant(Enchantments.SILK_TOUCH, 1); + fakeTool.enchant(silk, 1); var params = new LootParams.Builder(context.getLevel()) .withParameter(LootContextParams.TOOL, fakeTool) .create(LootContextParamSets.EMPTY); diff --git a/src/test/java/net/minecraftforge/test/BaseTestMod.java b/src/test/java/net/minecraftforge/test/BaseTestMod.java index 610c503e7c..7d97d6b7be 100644 --- a/src/test/java/net/minecraftforge/test/BaseTestMod.java +++ b/src/test/java/net/minecraftforge/test/BaseTestMod.java @@ -9,9 +9,9 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; -import java.util.function.Supplier; - +import java.util.function.Function; import net.minecraft.world.item.ItemStack; +import net.minecraft.core.HolderLookup; import net.minecraft.world.item.CreativeModeTab.TabVisibility; import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -19,7 +19,7 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; public abstract class BaseTestMod { - private List> testItems = new ArrayList<>(); + private List> testItems = new ArrayList<>(); protected BaseTestMod() { // TODO: Some form of enable flag? @@ -41,18 +41,17 @@ public abstract class BaseTestMod { } } - protected Supplier testItem(Supplier supplier) { + protected void testItem(Function supplier) { this.testItems.add(supplier); - return supplier; } - @SubscribeEvent protected void onCreativeModeTabBuildContents(BuildCreativeModeTabContentsEvent event) { var entries = event.getEntries(); + var lookup = event.getParameters().holders(); if (event.getTabKey() == TestHelperMod.TAB) { for (var s : testItems) - entries.put(s.get(), TabVisibility.PARENT_AND_SEARCH_TABS); + entries.put(s.apply(lookup), TabVisibility.PARENT_AND_SEARCH_TABS); } } diff --git a/src/test/java/net/minecraftforge/test/TestHelperMod.java b/src/test/java/net/minecraftforge/test/TestHelperMod.java index 183b33122e..c47deb28e2 100644 --- a/src/test/java/net/minecraftforge/test/TestHelperMod.java +++ b/src/test/java/net/minecraftforge/test/TestHelperMod.java @@ -27,7 +27,7 @@ import net.minecraftforge.registries.RegisterEvent; @Mod(TestHelperMod.MOD_ID) public class TestHelperMod extends BaseTestMod { public static final String MOD_ID = "test_helper_mod"; - public static final ResourceKey TAB = ResourceKey.create(Registries.CREATIVE_MODE_TAB, new ResourceLocation(MOD_ID, "test_items")); + public static final ResourceKey TAB = ResourceKey.create(Registries.CREATIVE_MODE_TAB, ResourceLocation.fromNamespaceAndPath(MOD_ID, "test_items")); @SubscribeEvent public void onRegister(RegisterEvent event) {