diff --git a/patches/24w44a.patch b/patches/24w44a.patch new file mode 100644 index 0000000..2a1ef72 --- /dev/null +++ b/patches/24w44a.patch @@ -0,0 +1,9358 @@ +From 38f6f7ba6f5ae757dc5d244be96dcec56fe5fe19 Mon Sep 17 00:00:00 2001 +From: AlphaKR93 +Date: Thu, 31 Oct 2024 12:58:52 +0900 +Subject: [PATCH] 24w44a + +--- + com/mojang/math/MatrixUtil.java | 4 + + net/minecraft/DetectedVersion.java | 10 +- + net/minecraft/SharedConstants.java | 20 +- + .../commands/arguments/blocks/BlockInput.java | 17 ++ + net/minecraft/core/BlockPos.java | 38 ++- + .../core/particles/ParticleTypes.java | 5 +- + .../core/particles/TrailParticleOption.java | 34 +++ + net/minecraft/data/BlockFamilies.java | 6 + + net/minecraft/data/Main.java | 31 -- + .../packs/VanillaAdventureAdvancements.java | 1 + + .../data/loot/BlockLootSubProvider.java | 24 ++ + .../data/loot/packs/VanillaBlockLoot.java | 121 ++++---- + .../data/loot/packs/VanillaChestLoot.java | 2 + + .../data/models/BlockModelGenerators.java | 274 ++++++++++-------- + .../data/models/ItemModelGenerators.java | 22 +- + .../data/models/model/ModelTemplates.java | 2 + + .../data/models/model/TextureMapping.java | 8 + + .../data/models/model/TextureSlot.java | 1 + + .../recipes/packs/VanillaRecipeProvider.java | 26 ++ + .../data/structures/StructureUpdater.java | 6 +- + .../data/tags/BiomeTagsProvider.java | 2 + + .../data/tags/EntityTypeTagsProvider.java | 1 + + .../data/tags/VanillaBlockTagsProvider.java | 57 +++- + .../data/tags/VanillaItemTagsProvider.java | 6 +- + .../data/worldgen/biome/BiomeData.java | 1 + + .../data/worldgen/biome/OverworldBiomes.java | 10 +- + .../data/worldgen/features/CaveFeatures.java | 10 +- + .../data/worldgen/features/TreeFeatures.java | 15 + + .../worldgen/features/VegetationFeatures.java | 41 ++- + .../worldgen/placement/PlacementUtils.java | 1 + + .../placement/VegetationPlacements.java | 133 +++++---- + net/minecraft/network/chat/Style.java | 145 ++++++--- + .../game/ClientGamePacketListener.java | 2 +- + .../game/ClientboundLevelParticlesPacket.java | 30 +- + .../ClientboundPlayerInfoUpdatePacket.java | 10 +- + .../game/ClientboundSetHeldSlotPacket.java | 26 +- + .../protocol/game/GamePacketTypes.java | 3 +- + .../network/protocol/game/GameProtocols.java | 3 +- + .../game/ServerGamePacketListener.java | 4 +- + .../ServerboundPickItemFromBlockPacket.java | 28 ++ + .../ServerboundPickItemFromEntityPacket.java | 27 ++ + net/minecraft/server/MinecraftServer.java | 2 +- + .../server/commands/AttributeCommand.java | 73 ++++- + .../server/commands/ParticleCommand.java | 2 +- + .../server/commands/PlaceCommand.java | 2 + + .../commands/SpawnArmorTrimsCommand.java | 3 +- + .../server/commands/TimeCommand.java | 2 + + net/minecraft/server/level/ChunkMap.java | 5 +- + .../server/level/ChunkTrackingView.java | 13 +- + .../server/level/DistanceManager.java | 2 +- + net/minecraft/server/level/ServerEntity.java | 3 +- + net/minecraft/server/level/ServerLevel.java | 61 ++-- + net/minecraft/server/level/ServerPlayer.java | 4 +- + net/minecraft/server/level/TicketType.java | 1 - + .../network/ServerGamePacketListenerImpl.java | 89 ++++-- + net/minecraft/sounds/SoundEvents.java | 16 + + net/minecraft/util/ARGB.java | 18 +- + net/minecraft/util/SpawnUtil.java | 10 +- + net/minecraft/util/datafix/DataFixers.java | 8 +- + .../datafix/fixes/EntityFieldsRenameFix.java | 30 ++ + .../util/profiling/jfr/JfrProfiler.java | 23 +- + .../util/profiling/jfr/JvmProfiler.java | 12 +- + .../jfr/callback/ProfiledDuration.java | 2 +- + .../jfr/event/StructureGenerationEvent.java | 56 ++++ + .../profiling/jfr/parse/JfrStatsParser.java | 8 +- + .../profiling/jfr/parse/JfrStatsResult.java | 4 +- + .../serialize/JfrResultJsonSerializer.java | 42 +++ + .../profiling/jfr/stats/StructureGenStat.java | 17 ++ + .../util/thread/BlockableEventLoop.java | 10 +- + .../world/effect/PoisonMobEffect.java | 4 +- + .../world/effect/WitherMobEffect.java | 4 +- + .../world/entity/AreaEffectCloud.java | 13 +- + net/minecraft/world/entity/Entity.java | 5 +- + net/minecraft/world/entity/EntityType.java | 11 +- + net/minecraft/world/entity/LivingEntity.java | 41 +-- + .../entity/ai/attributes/AttributeMap.java | 13 + + net/minecraft/world/entity/animal/Bee.java | 22 ++ + net/minecraft/world/entity/animal/Salmon.java | 32 +- + .../entity/boss/enderdragon/EnderDragon.java | 2 +- + .../world/entity/item/PrimedTnt.java | 2 +- + .../world/entity/monster/EnderMan.java | 3 +- + .../world/entity/monster/Evoker.java | 2 +- + .../world/entity/monster/Ravager.java | 3 - + .../entity/monster/creaking/Creaking.java | 82 ++++-- + .../entity/monster/creaking/CreakingAi.java | 2 +- + .../monster/creaking/CreakingTransient.java | 136 +++++++-- + .../world/entity/npc/AbstractVillager.java | 5 + + .../world/entity/npc/ClientSideMerchant.java | 5 + + net/minecraft/world/entity/npc/Villager.java | 3 +- + .../world/entity/npc/VillagerTrades.java | 14 +- + .../world/entity/player/Inventory.java | 25 +- + net/minecraft/world/entity/player/Player.java | 7 +- + .../entity/projectile/AbstractArrow.java | 33 ++- + .../projectile/AbstractHurtingProjectile.java | 31 -- + .../world/entity/projectile/Projectile.java | 15 +- + .../entity/projectile/ThrownTrident.java | 1 + + .../world/entity/vehicle/MinecartTNT.java | 26 +- + net/minecraft/world/flag/FeatureFlags.java | 2 - + net/minecraft/world/inventory/ArmorSlot.java | 6 +- + .../world/inventory/BrewingStandMenu.java | 13 + + .../world/inventory/EnchantmentMenu.java | 7 +- + .../world/inventory/HorseInventoryMenu.java | 13 +- + .../world/inventory/InventoryMenu.java | 16 +- + .../world/inventory/MerchantMenu.java | 2 +- + net/minecraft/world/inventory/Slot.java | 3 +- + net/minecraft/world/item/BlockItem.java | 46 ++- + .../world/item/CreativeModeTabs.java | 10 + + net/minecraft/world/item/EggItem.java | 4 +- + net/minecraft/world/item/EnderpearlItem.java | 4 +- + net/minecraft/world/item/Item.java | 54 +++- + net/minecraft/world/item/ItemStack.java | 8 +- + net/minecraft/world/item/Items.java | 22 +- + net/minecraft/world/item/MapItem.java | 2 +- + .../world/item/SmithingTemplateItem.java | 32 +- + net/minecraft/world/item/SnowballItem.java | 4 +- + .../world/item/ThrowablePotionItem.java | 4 +- + net/minecraft/world/item/TridentItem.java | 2 +- + net/minecraft/world/item/WindChargeItem.java | 4 +- + .../world/item/component/CustomData.java | 8 + + .../world/item/enchantment/Enchantments.java | 2 +- + .../item/equipment/trim/TrimMaterials.java | 22 +- + .../world/item/trading/Merchant.java | 2 + + .../world/item/trading/MerchantOffers.java | 7 +- + net/minecraft/world/level/Level.java | 21 +- + .../world/level/ServerExplosion.java | 6 +- + net/minecraft/world/level/biome/Biome.java | 7 +- + .../level/biome/BiomeSpecialEffects.java | 86 ++++-- + net/minecraft/world/level/biome/Biomes.java | 1 + + .../MultiNoiseBiomeSourceParameterList.java | 16 +- + .../MultiNoiseBiomeSourceParameterLists.java | 7 - + .../level/biome/OverworldBiomeBuilder.java | 28 +- + .../level/block/AbstractBannerBlock.java | 2 +- + .../world/level/block/AttachedStemBlock.java | 2 +- + .../world/level/block/BambooSaplingBlock.java | 2 +- + .../level/block/BigDripleafStemBlock.java | 2 +- + net/minecraft/world/level/block/Block.java | 4 - + .../world/level/block/BlockTypes.java | 4 +- + net/minecraft/world/level/block/Blocks.java | 183 ++++++------ + .../world/level/block/CandleCakeBlock.java | 2 +- + .../world/level/block/CaveVinesBlock.java | 2 +- + .../level/block/CaveVinesPlantBlock.java | 2 +- + .../world/level/block/ComposterBlock.java | 2 + + .../world/level/block/CreakingHeartBlock.java | 73 +++-- + .../world/level/block/CropBlock.java | 2 +- + .../world/level/block/DecoratedPotBlock.java | 6 +- + .../world/level/block/EndGatewayBlock.java | 2 +- + .../world/level/block/EndPortalBlock.java | 2 +- + .../world/level/block/EyeblossomBlock.java | 155 ++++++++++ + .../world/level/block/FireBlock.java | 8 +- + .../world/level/block/FlowerBlock.java | 7 + + .../world/level/block/FlowerPotBlock.java | 33 ++- + .../world/level/block/FrostedIceBlock.java | 2 +- + .../world/level/block/GlowLichenBlock.java | 2 +- + .../level/block/GrowingPlantBodyBlock.java | 2 +- + .../world/level/block/HangingMossBlock.java | 3 +- + .../world/level/block/LightBlock.java | 2 +- + .../world/level/block/MossyCarpetBlock.java | 11 +- + .../world/level/block/MultifaceBlock.java | 22 +- + .../block/MultifaceSpreadeableBlock.java | 15 + + .../world/level/block/NetherPortalBlock.java | 2 +- + .../world/level/block/NetherWartBlock.java | 2 +- + .../level/block/ParticleLeavesBlock.java | 50 ++++ + .../world/level/block/SculkBehaviour.java | 2 +- + .../world/level/block/SculkVeinBlock.java | 5 +- + .../world/level/block/ShulkerBoxBlock.java | 2 +- + .../world/level/block/SnowyDirtBlock.java | 2 +- + .../world/level/block/SoundType.java | 12 + + .../world/level/block/SpongeBlock.java | 28 +- + .../level/block/SpreadingSnowyDirtBlock.java | 2 +- + .../world/level/block/StemBlock.java | 2 +- + .../level/block/SweetBerryBushBlock.java | 2 +- + .../world/level/block/TallSeagrassBlock.java | 2 +- + .../world/level/block/WitherRoseBlock.java | 7 +- + .../world/level/block/entity/BlockEntity.java | 4 - + .../level/block/entity/BlockEntityType.java | 5 + + .../block/entity/CommandBlockEntity.java | 5 - + .../entity/CreakingHeartBlockEntity.java | 97 +++++-- + .../block/entity/LecternBlockEntity.java | 5 - + .../entity/SculkShriekerBlockEntity.java | 4 +- + .../level/block/entity/SignBlockEntity.java | 5 - + .../block/entity/SpawnerBlockEntity.java | 5 - + .../block/entity/TrialSpawnerBlockEntity.java | 5 - + .../world/level/block/grower/TreeGrower.java | 2 +- + .../level/block/piston/MovingPistonBlock.java | 2 +- + .../level/block/piston/PistonHeadBlock.java | 2 +- + .../level/block/state/BlockBehaviour.java | 8 + + .../properties/BlockStateProperties.java | 16 +- + .../world/level/chunk/ChunkGenerator.java | 70 +++-- + .../level/chunk/status/ChunkStatusTasks.java | 3 +- + .../world/level/chunk/status/ChunkStep.java | 2 +- + .../level/chunk/storage/SectionStorage.java | 10 +- + .../levelgen/feature/SimpleBlockFeature.java | 4 + + .../MultifaceGrowthConfiguration.java | 44 ++- + .../SimpleBlockConfiguration.java | 13 +- + .../CreakingHeartDecorator.java | 5 +- + .../treedecorators/PaleMossDecorator.java | 10 +- + .../trunkplacers/DarkOakTrunkPlacer.java | 2 +- + .../level/levelgen/structure/Structure.java | 27 +- + .../structure/pools/JigsawPlacement.java | 104 ++++--- + 199 files changed, 2634 insertions(+), 1237 deletions(-) + create mode 100644 net/minecraft/core/particles/TrailParticleOption.java + create mode 100644 net/minecraft/network/protocol/game/ServerboundPickItemFromBlockPacket.java + create mode 100644 net/minecraft/network/protocol/game/ServerboundPickItemFromEntityPacket.java + create mode 100644 net/minecraft/util/datafix/fixes/EntityFieldsRenameFix.java + create mode 100644 net/minecraft/util/profiling/jfr/event/StructureGenerationEvent.java + create mode 100644 net/minecraft/util/profiling/jfr/stats/StructureGenStat.java + create mode 100644 net/minecraft/world/level/block/EyeblossomBlock.java + create mode 100644 net/minecraft/world/level/block/MultifaceSpreadeableBlock.java + create mode 100644 net/minecraft/world/level/block/ParticleLeavesBlock.java + +diff --git a/com/mojang/math/MatrixUtil.java b/com/mojang/math/MatrixUtil.java +index 3e83410..5b86d30 100644 +--- a/com/mojang/math/MatrixUtil.java ++++ b/com/mojang/math/MatrixUtil.java +@@ -147,6 +147,10 @@ public class MatrixUtil { + return Triple.of(quaternionf1, vector3f, quaternionf.conjugate()); + } + ++ public static boolean isIdentity(Matrix4f matrix4f) { ++ return (matrix4f.properties() & 4) != 0; ++ } ++ + public static boolean isPureTranslation(Matrix4f matrix) { + return (matrix.properties() & 8) != 0; + } +diff --git a/net/minecraft/DetectedVersion.java b/net/minecraft/DetectedVersion.java +index b84ebcf..511891d 100644 +--- a/net/minecraft/DetectedVersion.java ++++ b/net/minecraft/DetectedVersion.java +@@ -28,12 +28,12 @@ public class DetectedVersion implements WorldVersion { + + private DetectedVersion() { + this.id = UUID.randomUUID().toString().replaceAll("-", ""); +- this.name = "1.21.3"; +- this.stable = true; +- this.worldVersion = new DataVersion(4082, "main"); ++ this.name = "24w44a"; ++ this.stable = false; ++ this.worldVersion = new DataVersion(4174, "main"); + this.protocolVersion = SharedConstants.getProtocolVersion(); +- this.resourcePackVersion = 42; +- this.dataPackVersion = 57; ++ this.resourcePackVersion = 43; ++ this.dataPackVersion = 58; + this.buildTime = new Date(); + } + +diff --git a/net/minecraft/SharedConstants.java b/net/minecraft/SharedConstants.java +index 2bc0a7f..f14c89e 100644 +--- a/net/minecraft/SharedConstants.java ++++ b/net/minecraft/SharedConstants.java +@@ -10,24 +10,24 @@ import net.minecraft.world.level.ChunkPos; + + public class SharedConstants { + @Deprecated +- public static final boolean SNAPSHOT = false; ++ public static final boolean SNAPSHOT = true; + @Deprecated +- public static final int WORLD_VERSION = 4082; ++ public static final int WORLD_VERSION = 4174; + @Deprecated + public static final String SERIES = "main"; + @Deprecated +- public static final String VERSION_STRING = "1.21.3"; ++ public static final String VERSION_STRING = "24w44a"; + @Deprecated +- public static final int RELEASE_NETWORK_PROTOCOL_VERSION = 768; ++ public static final int RELEASE_NETWORK_PROTOCOL_VERSION = 769; + @Deprecated +- public static final int SNAPSHOT_NETWORK_PROTOCOL_VERSION = 219; +- public static final int SNBT_NAG_VERSION = 4053; ++ public static final int SNAPSHOT_NETWORK_PROTOCOL_VERSION = 220; ++ public static final int SNBT_NAG_VERSION = 4173; + private static final int SNAPSHOT_PROTOCOL_BIT = 30; +- public static final boolean CRASH_EAGERLY = false; ++ public static final boolean CRASH_EAGERLY = true; + @Deprecated +- public static final int RESOURCE_PACK_FORMAT = 42; ++ public static final int RESOURCE_PACK_FORMAT = 43; + @Deprecated +- public static final int DATA_PACK_FORMAT = 57; ++ public static final int DATA_PACK_FORMAT = 58; + @Deprecated + public static final int LANGUAGE_FORMAT = 1; + public static final int REPORT_FORMAT_VERSION = 1; +@@ -160,7 +160,7 @@ public class SharedConstants { + } + + public static int getProtocolVersion() { +- return 768; ++ return 1073742044; + } + + public static boolean debugVoidTerrain(ChunkPos chunkPos) { +diff --git a/net/minecraft/commands/arguments/blocks/BlockInput.java b/net/minecraft/commands/arguments/blocks/BlockInput.java +index 7a25156..931cb17 100644 +--- a/net/minecraft/commands/arguments/blocks/BlockInput.java ++++ b/net/minecraft/commands/arguments/blocks/BlockInput.java +@@ -64,6 +64,7 @@ public class BlockInput implements Predicate { + blockState = this.state; + } + ++ blockState = this.overwriteWithDefinedProperties(blockState); + if (!level.setBlock(pos, blockState, flags)) { + return false; + } else { +@@ -77,4 +78,20 @@ public class BlockInput implements Predicate { + return true; + } + } ++ ++ private BlockState overwriteWithDefinedProperties(BlockState blockState) { ++ if (blockState == this.state) { ++ return blockState; ++ } else { ++ for (Property property : this.properties) { ++ blockState = copyProperty(blockState, this.state, property); ++ } ++ ++ return blockState; ++ } ++ } ++ ++ private static > BlockState copyProperty(BlockState blockState, BlockState blockState1, Property property) { ++ return blockState.setValue(property, blockState1.getValue(property)); ++ } + } +diff --git a/net/minecraft/core/BlockPos.java b/net/minecraft/core/BlockPos.java +index f29f686..cc8dd03 100644 +--- a/net/minecraft/core/BlockPos.java ++++ b/net/minecraft/core/BlockPos.java +@@ -11,6 +11,7 @@ import java.util.Optional; + import java.util.Queue; + import java.util.function.BiConsumer; + import java.util.function.Consumer; ++import java.util.function.Function; + import java.util.function.Predicate; + import java.util.stream.IntStream; + import java.util.stream.Stream; +@@ -496,30 +497,37 @@ public class BlockPos extends Vec3i { + } + + public static int breadthFirstTraversal( +- BlockPos startPos, int depth, int visitLimit, BiConsumer> action, Predicate predicate ++ BlockPos blockPos, int i, int i1, BiConsumer> biConsumer, Function function + ) { + Queue> queue = new ArrayDeque<>(); + LongSet set = new LongOpenHashSet(); +- queue.add(Pair.of(startPos, 0)); +- int i = 0; ++ queue.add(Pair.of(blockPos, 0)); ++ int i2 = 0; + + while (!queue.isEmpty()) { + Pair pair = queue.poll(); +- BlockPos blockPos = pair.getLeft(); ++ BlockPos blockPos1 = pair.getLeft(); + int right = pair.getRight(); +- long packedBlockPos = blockPos.asLong(); +- if (set.add(packedBlockPos) && predicate.test(blockPos)) { +- if (++i >= visitLimit) { +- return i; +- } ++ long packedBlockPos = blockPos1.asLong(); ++ if (set.add(packedBlockPos)) { ++ BlockPos.TraversalNodeStatus traversalNodeStatus = function.apply(blockPos1); ++ if (traversalNodeStatus != BlockPos.TraversalNodeStatus.SKIP) { ++ if (traversalNodeStatus == BlockPos.TraversalNodeStatus.STOP) { ++ break; ++ } ++ ++ if (++i2 >= i1) { ++ return i2; ++ } + +- if (right < depth) { +- action.accept(blockPos, blockPos1 -> queue.add(Pair.of(blockPos1, right + 1))); ++ if (right < i) { ++ biConsumer.accept(blockPos1, blockPos2 -> queue.add(Pair.of(blockPos2, right + 1))); ++ } + } + } + } + +- return i; ++ return i2; + } + + public static class MutableBlockPos extends BlockPos { +@@ -647,4 +655,10 @@ public class BlockPos extends Vec3i { + return new BlockPos(this); + } + } ++ ++ public static enum TraversalNodeStatus { ++ ACCEPT, ++ SKIP, ++ STOP; ++ } + } +diff --git a/net/minecraft/core/particles/ParticleTypes.java b/net/minecraft/core/particles/ParticleTypes.java +index 44f5802..d255e7f 100644 +--- a/net/minecraft/core/particles/ParticleTypes.java ++++ b/net/minecraft/core/particles/ParticleTypes.java +@@ -55,6 +55,7 @@ public class ParticleTypes { + public static final SimpleParticleType FLAME = register("flame", false); + public static final SimpleParticleType INFESTED = register("infested", false); + public static final SimpleParticleType CHERRY_LEAVES = register("cherry_leaves", false); ++ public static final SimpleParticleType PALE_OAK_LEAVES = register("pale_oak_leaves", false); + public static final SimpleParticleType SCULK_SOUL = register("sculk_soul", false); + public static final ParticleType SCULK_CHARGE = register( + "sculk_charge", true, particleType -> SculkChargeParticleOptions.CODEC, particleType -> SculkChargeParticleOptions.STREAM_CODEC +@@ -71,8 +72,8 @@ public class ParticleTypes { + public static final ParticleType VIBRATION = register( + "vibration", true, particleType -> VibrationParticleOption.CODEC, particleType -> VibrationParticleOption.STREAM_CODEC + ); +- public static final ParticleType TRAIL = register( +- "trail", false, particleType -> TargetColorParticleOption.CODEC, particleType -> TargetColorParticleOption.STREAM_CODEC ++ public static final ParticleType TRAIL = register( ++ "trail", false, particleType -> TrailParticleOption.CODEC, particleType -> TrailParticleOption.STREAM_CODEC + ); + public static final SimpleParticleType ITEM_SLIME = register("item_slime", false); + public static final SimpleParticleType ITEM_COBWEB = register("item_cobweb", false); +diff --git a/net/minecraft/core/particles/TrailParticleOption.java b/net/minecraft/core/particles/TrailParticleOption.java +new file mode 100644 +index 0000000..117338b +--- /dev/null ++++ b/net/minecraft/core/particles/TrailParticleOption.java +@@ -0,0 +1,34 @@ ++package net.minecraft.core.particles; ++ ++import com.mojang.serialization.MapCodec; ++import com.mojang.serialization.codecs.RecordCodecBuilder; ++import net.minecraft.network.RegistryFriendlyByteBuf; ++import net.minecraft.network.codec.ByteBufCodecs; ++import net.minecraft.network.codec.StreamCodec; ++import net.minecraft.util.ExtraCodecs; ++import net.minecraft.world.phys.Vec3; ++ ++public record TrailParticleOption(Vec3 target, int color, int duration) implements ParticleOptions { ++ public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( ++ instance -> instance.group( ++ Vec3.CODEC.fieldOf("target").forGetter(TrailParticleOption::target), ++ ExtraCodecs.RGB_COLOR_CODEC.fieldOf("color").forGetter(TrailParticleOption::color), ++ ExtraCodecs.POSITIVE_INT.fieldOf("duration").forGetter(TrailParticleOption::duration) ++ ) ++ .apply(instance, TrailParticleOption::new) ++ ); ++ public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ++ Vec3.STREAM_CODEC, ++ TrailParticleOption::target, ++ ByteBufCodecs.INT, ++ TrailParticleOption::color, ++ ByteBufCodecs.VAR_INT, ++ TrailParticleOption::duration, ++ TrailParticleOption::new ++ ); ++ ++ @Override ++ public ParticleType getType() { ++ return ParticleTypes.TRAIL; ++ } ++} +diff --git a/net/minecraft/data/BlockFamilies.java b/net/minecraft/data/BlockFamilies.java +index 9485ea1..22c5036 100644 +--- a/net/minecraft/data/BlockFamilies.java ++++ b/net/minecraft/data/BlockFamilies.java +@@ -348,6 +348,12 @@ public class BlockFamilies { + .slab(Blocks.TUFF_BRICK_SLAB) + .chiseled(Blocks.CHISELED_TUFF_BRICKS) + .getFamily(); ++ public static final BlockFamily RESIN_BRICKS = familyBuilder(Blocks.RESIN_BRICKS) ++ .wall(Blocks.RESIN_BRICK_WALL) ++ .stairs(Blocks.RESIN_BRICK_STAIRS) ++ .slab(Blocks.RESIN_BRICK_SLAB) ++ .chiseled(Blocks.CHISELED_RESIN_BRICKS) ++ .getFamily(); + public static final BlockFamily NETHER_BRICKS = familyBuilder(Blocks.NETHER_BRICKS) + .fence(Blocks.NETHER_BRICK_FENCE) + .wall(Blocks.NETHER_BRICK_WALL) +diff --git a/net/minecraft/data/Main.java b/net/minecraft/data/Main.java +index 5b054f1..40dc0b2 100644 +--- a/net/minecraft/data/Main.java ++++ b/net/minecraft/data/Main.java +@@ -16,7 +16,6 @@ import net.minecraft.WorldVersion; + import net.minecraft.core.HolderLookup; + import net.minecraft.core.RegistrySetBuilder; + import net.minecraft.data.advancements.packs.VanillaAdvancementProvider; +-import net.minecraft.data.advancements.packs.WinterDropAdvancementProvider; + import net.minecraft.data.info.BiomeParametersDumpReport; + import net.minecraft.data.info.BlockListReport; + import net.minecraft.data.info.CommandsReport; +@@ -26,16 +25,13 @@ import net.minecraft.data.info.PacketReport; + import net.minecraft.data.info.RegistryDumpReport; + import net.minecraft.data.loot.packs.TradeRebalanceLootTableProvider; + import net.minecraft.data.loot.packs.VanillaLootTableProvider; +-import net.minecraft.data.loot.packs.WinterDropLootTableProvider; + import net.minecraft.data.metadata.PackMetadataGenerator; + import net.minecraft.data.models.EquipmentModelProvider; + import net.minecraft.data.models.ModelProvider; + import net.minecraft.data.recipes.packs.VanillaRecipeProvider; +-import net.minecraft.data.recipes.packs.WinterDropRecipeProvider; + import net.minecraft.data.registries.RegistriesDatapackGenerator; + import net.minecraft.data.registries.TradeRebalanceRegistries; + import net.minecraft.data.registries.VanillaRegistries; +-import net.minecraft.data.registries.WinterDropRegistries; + import net.minecraft.data.structures.NbtToSnbt; + import net.minecraft.data.structures.SnbtToNbt; + import net.minecraft.data.structures.StructureUpdater; +@@ -57,10 +53,6 @@ import net.minecraft.data.tags.TradeRebalanceStructureTagsProvider; + import net.minecraft.data.tags.VanillaBlockTagsProvider; + import net.minecraft.data.tags.VanillaEnchantmentTagsProvider; + import net.minecraft.data.tags.VanillaItemTagsProvider; +-import net.minecraft.data.tags.WinterDropBiomeTagsProvider; +-import net.minecraft.data.tags.WinterDropBlockTagsProvider; +-import net.minecraft.data.tags.WinterDropEntityTypeTagsProvider; +-import net.minecraft.data.tags.WinterDropItemTagsProvider; + import net.minecraft.data.tags.WorldPresetTagsProvider; + import net.minecraft.network.chat.Component; + import net.minecraft.obfuscate.DontObfuscate; +@@ -193,29 +185,6 @@ public class Main { + output, Component.translatable("dataPack.minecart_improvements.description"), FeatureFlagSet.of(FeatureFlags.MINECART_IMPROVEMENTS) + ) + ); +- CompletableFuture completableFuture1x = WinterDropRegistries.createLookup(completableFuture); +- completableFuture2 = completableFuture1x.thenApply(RegistrySetBuilder.PatchedRegistries::full); +- builtinDatapack = dataGenerator.getBuiltinDatapack(server, "winter_drop"); +- builtinDatapack.addProvider( +- bindRegistries(RegistriesDatapackGenerator::new, completableFuture1x.thenApply(RegistrySetBuilder.PatchedRegistries::patches)) +- ); +- builtinDatapack.addProvider(bindRegistries(WinterDropRecipeProvider.Runner::new, completableFuture2)); +- CompletableFuture finalCompletableFuture = completableFuture2; +- TagsProvider tagsProvider5 = builtinDatapack.addProvider( +- output -> new WinterDropBlockTagsProvider(output, finalCompletableFuture, tagsProvider.contentsGetter()) +- ); +- builtinDatapack.addProvider( +- output -> new WinterDropItemTagsProvider(output, finalCompletableFuture, tagsProvider1.contentsGetter(), tagsProvider5.contentsGetter()) +- ); +- builtinDatapack.addProvider(output -> new WinterDropBiomeTagsProvider(output, finalCompletableFuture, tagsProvider2.contentsGetter())); +- builtinDatapack.addProvider(bindRegistries(WinterDropLootTableProvider::create, completableFuture2)); +- builtinDatapack.addProvider( +- output -> PackMetadataGenerator.forFeaturePack( +- output, Component.translatable("dataPack.winter_drop.description"), FeatureFlagSet.of(FeatureFlags.WINTER_DROP) +- ) +- ); +- builtinDatapack.addProvider(bindRegistries(WinterDropEntityTypeTagsProvider::new, completableFuture2)); +- builtinDatapack.addProvider(bindRegistries(WinterDropAdvancementProvider::create, completableFuture2)); + return dataGenerator; + } + } +diff --git a/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java b/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java +index f704f4d..a17f13f 100644 +--- a/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java ++++ b/net/minecraft/data/advancements/packs/VanillaAdventureAdvancements.java +@@ -96,6 +96,7 @@ public class VanillaAdventureAdvancements implements AdvancementSubProvider { + EntityType.BOGGED, + EntityType.BREEZE, + EntityType.CAVE_SPIDER, ++ EntityType.CREAKING_TRANSIENT, + EntityType.CREEPER, + EntityType.DROWNED, + EntityType.ELDER_GUARDIAN, +diff --git a/net/minecraft/data/loot/BlockLootSubProvider.java b/net/minecraft/data/loot/BlockLootSubProvider.java +index 4f4cccf..6ed8efa 100644 +--- a/net/minecraft/data/loot/BlockLootSubProvider.java ++++ b/net/minecraft/data/loot/BlockLootSubProvider.java +@@ -478,6 +478,30 @@ public abstract class BlockLootSubProvider implements LootTableSubProvider { + ); + } + ++ protected LootTable.Builder createMultifaceBlockDrops(Block block) { ++ return LootTable.lootTable() ++ .withPool( ++ LootPool.lootPool() ++ .add( ++ (LootPoolEntryContainer.Builder)this.applyExplosionDecay( ++ block, ++ LootItem.lootTableItem(block) ++ .apply( ++ Direction.values(), ++ direction -> SetItemCountFunction.setCount(ConstantValue.exactly(1.0F), true) ++ .when( ++ LootItemBlockStatePropertyCondition.hasBlockStateProperties(block) ++ .setProperties( ++ StatePropertiesPredicate.Builder.properties().hasProperty(MultifaceBlock.getFaceProperty(direction), true) ++ ) ++ ) ++ ) ++ .apply(SetItemCountFunction.setCount(ConstantValue.exactly(-1.0F), true)) ++ ) ++ ) ++ ); ++ } ++ + protected LootTable.Builder createMossyCarpetBlockDrops(Block block) { + return LootTable.lootTable() + .withPool( +diff --git a/net/minecraft/data/loot/packs/VanillaBlockLoot.java b/net/minecraft/data/loot/packs/VanillaBlockLoot.java +index 139cae9..cbc1e8f 100644 +--- a/net/minecraft/data/loot/packs/VanillaBlockLoot.java ++++ b/net/minecraft/data/loot/packs/VanillaBlockLoot.java +@@ -116,7 +116,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_PLANKS); + this.dropSelf(Blocks.ACACIA_PLANKS); + this.dropSelf(Blocks.DARK_OAK_PLANKS); +- this.add(Blocks.PALE_OAK_PLANKS, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_PLANKS); + this.dropSelf(Blocks.MANGROVE_PLANKS); + this.dropSelf(Blocks.CHERRY_PLANKS); + this.dropSelf(Blocks.BAMBOO_PLANKS); +@@ -128,7 +128,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_SAPLING); + this.dropSelf(Blocks.ACACIA_SAPLING); + this.dropSelf(Blocks.DARK_OAK_SAPLING); +- this.add(Blocks.PALE_OAK_SAPLING, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_SAPLING); + this.dropSelf(Blocks.CHERRY_SAPLING); + this.dropSelf(Blocks.SAND); + this.add(Blocks.SUSPICIOUS_SAND, noDrop()); +@@ -140,7 +140,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_LOG); + this.dropSelf(Blocks.ACACIA_LOG); + this.dropSelf(Blocks.DARK_OAK_LOG); +- this.add(Blocks.PALE_OAK_LOG, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_LOG); + this.dropSelf(Blocks.CHERRY_LOG); + this.dropSelf(Blocks.BAMBOO_BLOCK); + this.dropSelf(Blocks.STRIPPED_OAK_LOG); +@@ -149,7 +149,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.STRIPPED_JUNGLE_LOG); + this.dropSelf(Blocks.STRIPPED_ACACIA_LOG); + this.dropSelf(Blocks.STRIPPED_DARK_OAK_LOG); +- this.add(Blocks.STRIPPED_PALE_OAK_LOG, noDrop()); ++ this.dropSelf(Blocks.STRIPPED_PALE_OAK_LOG); + this.dropSelf(Blocks.STRIPPED_MANGROVE_LOG); + this.dropSelf(Blocks.STRIPPED_CHERRY_LOG); + this.dropSelf(Blocks.STRIPPED_BAMBOO_BLOCK); +@@ -161,7 +161,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_WOOD); + this.dropSelf(Blocks.ACACIA_WOOD); + this.dropSelf(Blocks.DARK_OAK_WOOD); +- this.add(Blocks.PALE_OAK_WOOD, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_WOOD); + this.dropSelf(Blocks.MANGROVE_WOOD); + this.dropSelf(Blocks.CHERRY_WOOD); + this.dropSelf(Blocks.STRIPPED_OAK_WOOD); +@@ -170,7 +170,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.STRIPPED_JUNGLE_WOOD); + this.dropSelf(Blocks.STRIPPED_ACACIA_WOOD); + this.dropSelf(Blocks.STRIPPED_DARK_OAK_WOOD); +- this.add(Blocks.STRIPPED_PALE_OAK_WOOD, noDrop()); ++ this.dropSelf(Blocks.STRIPPED_PALE_OAK_WOOD); + this.dropSelf(Blocks.STRIPPED_MANGROVE_WOOD); + this.dropSelf(Blocks.STRIPPED_CHERRY_WOOD); + this.dropSelf(Blocks.STRIPPED_CRIMSON_HYPHAE); +@@ -178,6 +178,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.SPONGE); + this.dropSelf(Blocks.WET_SPONGE); + this.dropSelf(Blocks.LAPIS_BLOCK); ++ this.dropSelf(Blocks.RESIN_BLOCK); + this.dropSelf(Blocks.SANDSTONE); + this.dropSelf(Blocks.CHISELED_SANDSTONE); + this.dropSelf(Blocks.CUT_SANDSTONE); +@@ -203,6 +204,8 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.RED_WOOL); + this.dropSelf(Blocks.BLACK_WOOL); + this.dropSelf(Blocks.DANDELION); ++ this.dropSelf(Blocks.OPEN_EYEBLOSSOM); ++ this.dropSelf(Blocks.CLOSED_EYEBLOSSOM); + this.dropSelf(Blocks.POPPY); + this.dropSelf(Blocks.TORCHFLOWER); + this.dropSelf(Blocks.BLUE_ORCHID); +@@ -238,7 +241,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.ACACIA_SIGN); + this.dropSelf(Blocks.JUNGLE_SIGN); + this.dropSelf(Blocks.DARK_OAK_SIGN); +- this.add(Blocks.PALE_OAK_SIGN, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_SIGN); + this.dropSelf(Blocks.MANGROVE_SIGN); + this.dropSelf(Blocks.CHERRY_SIGN); + this.dropSelf(Blocks.BAMBOO_SIGN); +@@ -249,7 +252,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.CHERRY_HANGING_SIGN); + this.dropSelf(Blocks.JUNGLE_HANGING_SIGN); + this.dropSelf(Blocks.DARK_OAK_HANGING_SIGN); +- this.add(Blocks.PALE_OAK_HANGING_SIGN, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_HANGING_SIGN); + this.dropSelf(Blocks.MANGROVE_HANGING_SIGN); + this.dropSelf(Blocks.CRIMSON_HANGING_SIGN); + this.dropSelf(Blocks.WARPED_HANGING_SIGN); +@@ -265,7 +268,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_PRESSURE_PLATE); + this.dropSelf(Blocks.ACACIA_PRESSURE_PLATE); + this.dropSelf(Blocks.DARK_OAK_PRESSURE_PLATE); +- this.add(Blocks.PALE_OAK_PRESSURE_PLATE, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_PRESSURE_PLATE); + this.dropSelf(Blocks.MANGROVE_PRESSURE_PLATE); + this.dropSelf(Blocks.CHERRY_PRESSURE_PLATE); + this.dropSelf(Blocks.BAMBOO_PRESSURE_PLATE); +@@ -294,7 +297,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_TRAPDOOR); + this.dropSelf(Blocks.ACACIA_TRAPDOOR); + this.dropSelf(Blocks.DARK_OAK_TRAPDOOR); +- this.add(Blocks.PALE_OAK_TRAPDOOR, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_TRAPDOOR); + this.dropSelf(Blocks.MANGROVE_TRAPDOOR); + this.dropSelf(Blocks.CHERRY_TRAPDOOR); + this.dropSelf(Blocks.BAMBOO_TRAPDOOR); +@@ -317,6 +320,11 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.BRICK_STAIRS); + this.dropSelf(Blocks.STONE_BRICK_STAIRS); + this.dropSelf(Blocks.LILY_PAD); ++ this.dropSelf(Blocks.RESIN_BRICKS); ++ this.dropSelf(Blocks.RESIN_BRICK_WALL); ++ this.dropSelf(Blocks.RESIN_BRICK_SLAB); ++ this.dropSelf(Blocks.RESIN_BRICK_STAIRS); ++ this.dropSelf(Blocks.CHISELED_RESIN_BRICKS); + this.dropSelf(Blocks.NETHER_BRICKS); + this.dropSelf(Blocks.NETHER_BRICK_FENCE); + this.dropSelf(Blocks.NETHER_BRICK_STAIRS); +@@ -338,7 +346,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_BUTTON); + this.dropSelf(Blocks.ACACIA_BUTTON); + this.dropSelf(Blocks.DARK_OAK_BUTTON); +- this.add(Blocks.PALE_OAK_BUTTON, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_BUTTON); + this.dropSelf(Blocks.MANGROVE_BUTTON); + this.dropSelf(Blocks.CHERRY_BUTTON); + this.dropSelf(Blocks.BAMBOO_BUTTON); +@@ -379,7 +387,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.BLACK_TERRACOTTA); + this.dropSelf(Blocks.ACACIA_STAIRS); + this.dropSelf(Blocks.DARK_OAK_STAIRS); +- this.add(Blocks.PALE_OAK_STAIRS, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_STAIRS); + this.dropSelf(Blocks.CHERRY_STAIRS); + this.dropSelf(Blocks.SLIME_BLOCK); + this.dropSelf(Blocks.IRON_TRAPDOOR); +@@ -421,14 +429,14 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropSelf(Blocks.JUNGLE_FENCE_GATE); + this.dropSelf(Blocks.ACACIA_FENCE_GATE); + this.dropSelf(Blocks.DARK_OAK_FENCE_GATE); +- this.add(Blocks.PALE_OAK_FENCE_GATE, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_FENCE_GATE); + this.dropSelf(Blocks.CHERRY_FENCE_GATE); + this.dropSelf(Blocks.SPRUCE_FENCE); + this.dropSelf(Blocks.BIRCH_FENCE); + this.dropSelf(Blocks.JUNGLE_FENCE); + this.dropSelf(Blocks.ACACIA_FENCE); + this.dropSelf(Blocks.DARK_OAK_FENCE); +- this.add(Blocks.PALE_OAK_FENCE, noDrop()); ++ this.dropSelf(Blocks.PALE_OAK_FENCE); + this.dropSelf(Blocks.CHERRY_FENCE); + this.dropSelf(Blocks.END_ROD); + this.dropSelf(Blocks.PURPUR_BLOCK); +@@ -625,9 +633,9 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.PINK_PETALS, this.createPetalsDrops(Blocks.PINK_PETALS)); + this.dropSelf(Blocks.BIG_DRIPLEAF); + this.dropSelf(Blocks.MOSS_BLOCK); +- this.add(Blocks.PALE_MOSS_CARPET, noDrop()); +- this.add(Blocks.PALE_HANGING_MOSS, noDrop()); +- this.add(Blocks.PALE_MOSS_BLOCK, noDrop()); ++ this.add(Blocks.PALE_MOSS_CARPET, block -> this.createMossyCarpetBlockDrops(block)); ++ this.add(Blocks.PALE_HANGING_MOSS, itemLike -> this.createShearsOrSilkTouchOnlyDrop(itemLike)); ++ this.dropSelf(Blocks.PALE_MOSS_BLOCK); + this.dropSelf(Blocks.ROOTED_DIRT); + this.dropSelf(Blocks.COBBLED_DEEPSLATE); + this.dropSelf(Blocks.COBBLED_DEEPSLATE_STAIRS); +@@ -702,19 +710,19 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropOther(Blocks.LAVA_CAULDRON, Blocks.CAULDRON); + this.dropOther(Blocks.POWDER_SNOW_CAULDRON, Blocks.CAULDRON); + this.dropOther(Blocks.BIG_DRIPLEAF_STEM, Blocks.BIG_DRIPLEAF); +- this.add(Blocks.STONE, podzol -> this.createSingleItemTableWithSilkTouch(podzol, Blocks.COBBLESTONE)); +- this.add(Blocks.DEEPSLATE, mycelium -> this.createSingleItemTableWithSilkTouch(mycelium, Blocks.COBBLED_DEEPSLATE)); ++ this.add(Blocks.STONE, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.COBBLESTONE)); ++ this.add(Blocks.DEEPSLATE, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.COBBLED_DEEPSLATE)); + this.add(Blocks.GRASS_BLOCK, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.DIRT)); + this.add(Blocks.PODZOL, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.DIRT)); + this.add(Blocks.MYCELIUM, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.DIRT)); +- this.add(Blocks.TUBE_CORAL_BLOCK, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.DEAD_TUBE_CORAL_BLOCK)); +- this.add(Blocks.BRAIN_CORAL_BLOCK, coral -> this.createSingleItemTableWithSilkTouch(coral, Blocks.DEAD_BRAIN_CORAL_BLOCK)); +- this.add(Blocks.BUBBLE_CORAL_BLOCK, nylium -> this.createSingleItemTableWithSilkTouch(nylium, Blocks.DEAD_BUBBLE_CORAL_BLOCK)); +- this.add(Blocks.FIRE_CORAL_BLOCK, nylium -> this.createSingleItemTableWithSilkTouch(nylium, Blocks.DEAD_FIRE_CORAL_BLOCK)); +- this.add(Blocks.HORN_CORAL_BLOCK, bookshelf -> this.createSingleItemTableWithSilkTouch(bookshelf, Blocks.DEAD_HORN_CORAL_BLOCK)); +- this.add(Blocks.CRIMSON_NYLIUM, clay -> this.createSingleItemTableWithSilkTouch(clay, Blocks.NETHERRACK)); +- this.add(Blocks.WARPED_NYLIUM, enderChest -> this.createSingleItemTableWithSilkTouch(enderChest, Blocks.NETHERRACK)); +- this.add(Blocks.BOOKSHELF, snow -> this.createSingleItemTableWithSilkTouch(snow, Items.BOOK, ConstantValue.exactly(3.0F))); ++ this.add(Blocks.TUBE_CORAL_BLOCK, nylium -> this.createSingleItemTableWithSilkTouch(nylium, Blocks.DEAD_TUBE_CORAL_BLOCK)); ++ this.add(Blocks.BRAIN_CORAL_BLOCK, nylium -> this.createSingleItemTableWithSilkTouch(nylium, Blocks.DEAD_BRAIN_CORAL_BLOCK)); ++ this.add(Blocks.BUBBLE_CORAL_BLOCK, bookshelf -> this.createSingleItemTableWithSilkTouch(bookshelf, Blocks.DEAD_BUBBLE_CORAL_BLOCK)); ++ this.add(Blocks.FIRE_CORAL_BLOCK, clay -> this.createSingleItemTableWithSilkTouch(clay, Blocks.DEAD_FIRE_CORAL_BLOCK)); ++ this.add(Blocks.HORN_CORAL_BLOCK, enderChest -> this.createSingleItemTableWithSilkTouch(enderChest, Blocks.DEAD_HORN_CORAL_BLOCK)); ++ this.add(Blocks.CRIMSON_NYLIUM, snow -> this.createSingleItemTableWithSilkTouch(snow, Blocks.NETHERRACK)); ++ this.add(Blocks.WARPED_NYLIUM, block -> this.createSingleItemTableWithSilkTouch(block, Blocks.NETHERRACK)); ++ this.add(Blocks.BOOKSHELF, block -> this.createSingleItemTableWithSilkTouch(block, Items.BOOK, ConstantValue.exactly(3.0F))); + this.add(Blocks.CLAY, block -> this.createSingleItemTableWithSilkTouch(block, Items.CLAY_BALL, ConstantValue.exactly(4.0F))); + this.add(Blocks.ENDER_CHEST, block -> this.createSingleItemTableWithSilkTouch(block, Blocks.OBSIDIAN, ConstantValue.exactly(8.0F))); + this.add(Blocks.SNOW_BLOCK, block -> this.createSingleItemTableWithSilkTouch(block, Items.SNOWBALL, ConstantValue.exactly(4.0F))); +@@ -725,12 +733,14 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropPottedContents(Blocks.POTTED_JUNGLE_SAPLING); + this.dropPottedContents(Blocks.POTTED_ACACIA_SAPLING); + this.dropPottedContents(Blocks.POTTED_DARK_OAK_SAPLING); +- this.add(Blocks.POTTED_PALE_OAK_SAPLING, noDrop()); ++ this.dropPottedContents(Blocks.POTTED_PALE_OAK_SAPLING); + this.dropPottedContents(Blocks.POTTED_MANGROVE_PROPAGULE); + this.dropPottedContents(Blocks.POTTED_CHERRY_SAPLING); + this.dropPottedContents(Blocks.POTTED_FERN); + this.dropPottedContents(Blocks.POTTED_DANDELION); + this.dropPottedContents(Blocks.POTTED_POPPY); ++ this.dropPottedContents(Blocks.POTTED_OPEN_EYEBLOSSOM); ++ this.dropPottedContents(Blocks.POTTED_CLOSED_EYEBLOSSOM); + this.dropPottedContents(Blocks.POTTED_BLUE_ORCHID); + this.dropPottedContents(Blocks.POTTED_ALLIUM); + this.dropPottedContents(Blocks.POTTED_AZURE_BLUET); +@@ -761,7 +771,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.JUNGLE_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.ACACIA_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.DARK_OAK_SLAB, slab -> this.createSlabItemTable(slab)); +- this.add(Blocks.PALE_OAK_SLAB, noDrop()); ++ this.add(Blocks.PALE_OAK_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.MANGROVE_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.CHERRY_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.BAMBOO_SLAB, slab -> this.createSlabItemTable(slab)); +@@ -806,9 +816,9 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.WAXED_OXIDIZED_CUT_COPPER_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.WAXED_WEATHERED_CUT_COPPER_SLAB, slab -> this.createSlabItemTable(slab)); + this.add(Blocks.WAXED_EXPOSED_CUT_COPPER_SLAB, slab -> this.createSlabItemTable(slab)); +- this.add(Blocks.WAXED_CUT_COPPER_SLAB, slab -> this.createSlabItemTable(slab)); +- this.add(Blocks.COBBLED_DEEPSLATE_SLAB, slab -> this.createSlabItemTable(slab)); +- this.add(Blocks.POLISHED_DEEPSLATE_SLAB, slab -> this.createSlabItemTable(slab)); ++ this.add(Blocks.WAXED_CUT_COPPER_SLAB, door -> this.createSlabItemTable(door)); ++ this.add(Blocks.COBBLED_DEEPSLATE_SLAB, door -> this.createSlabItemTable(door)); ++ this.add(Blocks.POLISHED_DEEPSLATE_SLAB, door -> this.createSlabItemTable(door)); + this.add(Blocks.DEEPSLATE_TILE_SLAB, door -> this.createSlabItemTable(door)); + this.add(Blocks.DEEPSLATE_BRICK_SLAB, door -> this.createSlabItemTable(door)); + this.add(Blocks.MUD_BRICK_SLAB, door -> this.createSlabItemTable(door)); +@@ -818,10 +828,10 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.JUNGLE_DOOR, door -> this.createDoorTable(door)); + this.add(Blocks.ACACIA_DOOR, door -> this.createDoorTable(door)); + this.add(Blocks.DARK_OAK_DOOR, door -> this.createDoorTable(door)); +- this.add(Blocks.PALE_OAK_DOOR, noDrop()); +- this.add(Blocks.MANGROVE_DOOR, door -> this.createDoorTable(door)); +- this.add(Blocks.CHERRY_DOOR, door -> this.createDoorTable(door)); +- this.add(Blocks.BAMBOO_DOOR, door -> this.createDoorTable(door)); ++ this.add(Blocks.PALE_OAK_DOOR, block -> this.createDoorTable(block)); ++ this.add(Blocks.MANGROVE_DOOR, block -> this.createDoorTable(block)); ++ this.add(Blocks.CHERRY_DOOR, block -> this.createDoorTable(block)); ++ this.add(Blocks.BAMBOO_DOOR, block -> this.createDoorTable(block)); + this.add(Blocks.WARPED_DOOR, block -> this.createDoorTable(block)); + this.add(Blocks.CRIMSON_DOOR, block -> this.createDoorTable(block)); + this.add(Blocks.IRON_DOOR, block -> this.createDoorTable(block)); +@@ -834,18 +844,18 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.WAXED_WEATHERED_COPPER_DOOR, block -> this.createDoorTable(block)); + this.add(Blocks.WAXED_OXIDIZED_COPPER_DOOR, block -> this.createDoorTable(block)); + this.add(Blocks.BLACK_BED, bed -> this.createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.BLUE_BED, bed -> this.createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.BROWN_BED, bed -> this.createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.CYAN_BED, bed -> this.createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.GRAY_BED, bed -> this.createSinglePropConditionTable(bed, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.GREEN_BED, lilac -> this.createSinglePropConditionTable(lilac, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.LIGHT_BLUE_BED, sunflower -> this.createSinglePropConditionTable(sunflower, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.LIGHT_GRAY_BED, peony -> this.createSinglePropConditionTable(peony, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.LIME_BED, bush -> this.createSinglePropConditionTable(bush, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.MAGENTA_BED, cocoa -> this.createSinglePropConditionTable(cocoa, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.BLUE_BED, lilac -> this.createSinglePropConditionTable(lilac, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.BROWN_BED, sunflower -> this.createSinglePropConditionTable(sunflower, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.CYAN_BED, peony -> this.createSinglePropConditionTable(peony, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.GRAY_BED, bush -> this.createSinglePropConditionTable(bush, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.GREEN_BED, cocoa -> this.createSinglePropConditionTable(cocoa, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.LIGHT_BLUE_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.LIGHT_GRAY_BED, seaPickle -> this.createSinglePropConditionTable(seaPickle, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.LIME_BED, composter -> this.createSinglePropConditionTable(composter, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.MAGENTA_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); + this.add(Blocks.PURPLE_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.ORANGE_BED, seaPickle -> this.createSinglePropConditionTable(seaPickle, BedBlock.PART, BedPart.HEAD)); +- this.add(Blocks.PINK_BED, composter -> this.createSinglePropConditionTable(composter, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.ORANGE_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); ++ this.add(Blocks.PINK_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); + this.add(Blocks.RED_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); + this.add(Blocks.WHITE_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); + this.add(Blocks.YELLOW_BED, block -> this.createSinglePropConditionTable(block, BedBlock.PART, BedPart.HEAD)); +@@ -1030,7 +1040,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.JUNGLE_LEAVES, block -> this.createLeavesDrops(block, Blocks.JUNGLE_SAPLING, JUNGLE_LEAVES_SAPLING_CHANGES)); + this.add(Blocks.ACACIA_LEAVES, block -> this.createLeavesDrops(block, Blocks.ACACIA_SAPLING, NORMAL_LEAVES_SAPLING_CHANCES)); + this.add(Blocks.DARK_OAK_LEAVES, block -> this.createOakLeavesDrops(block, Blocks.DARK_OAK_SAPLING, NORMAL_LEAVES_SAPLING_CHANCES)); +- this.add(Blocks.PALE_OAK_LEAVES, noDrop()); ++ this.add(Blocks.PALE_OAK_LEAVES, block -> this.createLeavesDrops(block, Blocks.PALE_OAK_SAPLING, NORMAL_LEAVES_SAPLING_CHANCES)); + this.add(Blocks.CHERRY_LEAVES, block -> this.createLeavesDrops(block, Blocks.CHERRY_SAPLING, NORMAL_LEAVES_SAPLING_CHANCES)); + this.add(Blocks.AZALEA_LEAVES, block -> this.createLeavesDrops(block, Blocks.AZALEA, NORMAL_LEAVES_SAPLING_CHANCES)); + this.add(Blocks.FLOWERING_AZALEA_LEAVES, block -> this.createLeavesDrops(block, Blocks.FLOWERING_AZALEA, NORMAL_LEAVES_SAPLING_CHANCES)); +@@ -1193,6 +1203,7 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.add(Blocks.SEAGRASS, itemLike -> this.createShearsOnlyDrop(itemLike)); + this.add(Blocks.VINE, itemLike -> this.createShearsOnlyDrop(itemLike)); + this.add(Blocks.GLOW_LICHEN, block -> this.createMultifaceBlockDrops(block, this.hasShears())); ++ this.add(Blocks.RESIN_CLUMP, block -> this.createMultifaceBlockDrops(block)); + this.add(Blocks.HANGING_ROOTS, itemLike -> this.createShearsOnlyDrop(itemLike)); + this.add(Blocks.SMALL_DRIPLEAF, itemLike -> this.createShearsOnlyDrop(itemLike)); + this.add(Blocks.MANGROVE_LEAVES, block -> this.createMangroveLeavesDrops(block)); +@@ -1258,6 +1269,19 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + ) + ) + ); ++ this.add( ++ Blocks.CREAKING_HEART, ++ block -> this.createSilkTouchDispatchTable( ++ block, ++ (LootPoolEntryContainer.Builder)this.applyExplosionDecay( ++ block, ++ LootItem.lootTableItem(Items.RESIN_CLUMP) ++ .apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))) ++ .apply(ApplyBonusCount.addUniformBonusCount(registryLookup.getOrThrow(Enchantments.FORTUNE))) ++ .apply(LimitCount.limitCount(IntRange.upperBound(9))) ++ ) ++ ) ++ ); + this.add( + Blocks.NETHER_WART, + block -> LootTable.lootTable() +@@ -1422,7 +1446,6 @@ public class VanillaBlockLoot extends BlockLootSubProvider { + this.dropWhenSilkTouch(Blocks.PACKED_ICE); + this.dropWhenSilkTouch(Blocks.BLUE_ICE); + this.dropWhenSilkTouch(Blocks.TURTLE_EGG); +- this.add(Blocks.CREAKING_HEART, noDrop()); + this.dropWhenSilkTouch(Blocks.MUSHROOM_STEM); + this.dropWhenSilkTouch(Blocks.DEAD_TUBE_CORAL); + this.dropWhenSilkTouch(Blocks.DEAD_BRAIN_CORAL); +diff --git a/net/minecraft/data/loot/packs/VanillaChestLoot.java b/net/minecraft/data/loot/packs/VanillaChestLoot.java +index fe742ac..180230d 100644 +--- a/net/minecraft/data/loot/packs/VanillaChestLoot.java ++++ b/net/minecraft/data/loot/packs/VanillaChestLoot.java +@@ -1930,6 +1930,8 @@ public record VanillaChestLoot(HolderLookup.Provider registries) implements Loot + .add(LootItem.lootTableItem(Items.MELON_SEEDS).setWeight(10).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))) + .add(LootItem.lootTableItem(Items.PUMPKIN_SEEDS).setWeight(10).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))) + .add(LootItem.lootTableItem(Items.BEETROOT_SEEDS).setWeight(10).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))) ++ .add(LootItem.lootTableItem(Items.RESIN_CLUMP).setWeight(50).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))) ++ .add(LootItem.lootTableItem(Items.RESIN_BRICK).setWeight(50).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))) + ) + .withPool( + LootPool.lootPool() +diff --git a/net/minecraft/data/models/BlockModelGenerators.java b/net/minecraft/data/models/BlockModelGenerators.java +index 4a1d908..73115eb 100644 +--- a/net/minecraft/data/models/BlockModelGenerators.java ++++ b/net/minecraft/data/models/BlockModelGenerators.java +@@ -226,13 +226,23 @@ public class BlockModelGenerators { + ModelTemplates.FLAT_ITEM.create(ModelLocationUtils.getModelLocation(flatItem), TextureMapping.layer0(flatItem), this.modelOutput); + } + +- private void createSimpleFlatItemModel(Block flatBlock) { ++ void createSimpleFlatItemModel(Block flatBlock) { + Item item = flatBlock.asItem(); + if (item != Items.AIR) { + ModelTemplates.FLAT_ITEM.create(ModelLocationUtils.getModelLocation(item), TextureMapping.layer0(flatBlock), this.modelOutput); + } + } + ++ void createTwoLayerFlatItemModel(Block block, String string) { ++ Item item = block.asItem(); ++ ResourceLocation blockTexture = TextureMapping.getBlockTexture(block); ++ ResourceLocation blockTexture1 = TextureMapping.getBlockTexture(block, string); ++ if (item != Items.AIR) { ++ ModelTemplates.TWO_LAYERED_ITEM ++ .create(ModelLocationUtils.getModelLocation(item), TextureMapping.layered(blockTexture, blockTexture1), this.modelOutput); ++ } ++ } ++ + private void createSimpleFlatItemModel(Block flatBlock, String layerZeroTextureSuffix) { + Item item = flatBlock.asItem(); + ModelTemplates.FLAT_ITEM +@@ -1274,62 +1284,34 @@ public class BlockModelGenerators { + .accept( + MultiVariantGenerator.multiVariant(block) + .with( +- PropertyDispatch.properties(BlockStateProperties.AXIS, CreakingHeartBlock.CREAKING) +- .select( +- Direction.Axis.Y, +- CreakingHeartBlock.CreakingHeartState.DISABLED, +- Variant.variant().with(VariantProperties.MODEL, resourceLocation) +- ) ++ PropertyDispatch.properties(BlockStateProperties.AXIS, CreakingHeartBlock.ACTIVE) ++ .select(Direction.Axis.Y, false, Variant.variant().with(VariantProperties.MODEL, resourceLocation)) + .select( + Direction.Axis.Z, +- CreakingHeartBlock.CreakingHeartState.DISABLED, ++ false, + Variant.variant() + .with(VariantProperties.MODEL, resourceLocation1) + .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) + ) + .select( + Direction.Axis.X, +- CreakingHeartBlock.CreakingHeartState.DISABLED, ++ false, + Variant.variant() + .with(VariantProperties.MODEL, resourceLocation1) + .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) + .with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90) + ) +- .select( +- Direction.Axis.Y, +- CreakingHeartBlock.CreakingHeartState.DORMANT, +- Variant.variant().with(VariantProperties.MODEL, resourceLocation2) +- ) +- .select( +- Direction.Axis.Z, +- CreakingHeartBlock.CreakingHeartState.DORMANT, +- Variant.variant() +- .with(VariantProperties.MODEL, resourceLocation3) +- .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) +- ) +- .select( +- Direction.Axis.X, +- CreakingHeartBlock.CreakingHeartState.DORMANT, +- Variant.variant() +- .with(VariantProperties.MODEL, resourceLocation3) +- .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) +- .with(VariantProperties.Y_ROT, VariantProperties.Rotation.R90) +- ) +- .select( +- Direction.Axis.Y, +- CreakingHeartBlock.CreakingHeartState.ACTIVE, +- Variant.variant().with(VariantProperties.MODEL, resourceLocation2) +- ) ++ .select(Direction.Axis.Y, true, Variant.variant().with(VariantProperties.MODEL, resourceLocation2)) + .select( + Direction.Axis.Z, +- CreakingHeartBlock.CreakingHeartState.ACTIVE, ++ true, + Variant.variant() + .with(VariantProperties.MODEL, resourceLocation3) + .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) + ) + .select( + Direction.Axis.X, +- CreakingHeartBlock.CreakingHeartState.ACTIVE, ++ true, + Variant.variant() + .with(VariantProperties.MODEL, resourceLocation3) + .with(VariantProperties.X_ROT, VariantProperties.Rotation.R90) +@@ -1499,46 +1481,46 @@ public class BlockModelGenerators { + this.blockStateOutput.accept(createSimpleBlock(block, ModelLocationUtils.getModelLocation(modelBlock))); + } + +- private void createCrossBlockWithDefaultItem(Block crossBlock, BlockModelGenerators.TintState tintState) { +- this.createSimpleFlatItemModel(crossBlock); +- this.createCrossBlock(crossBlock, tintState); ++ private void createCrossBlockWithDefaultItem(Block block, BlockModelGenerators.PlantType plantType) { ++ plantType.createItemModel(this, block); ++ this.createCrossBlock(block, plantType); + } + +- private void createCrossBlockWithDefaultItem(Block crossBlock, BlockModelGenerators.TintState tintState, TextureMapping textureMapping) { +- this.createSimpleFlatItemModel(crossBlock); +- this.createCrossBlock(crossBlock, tintState, textureMapping); ++ private void createCrossBlockWithDefaultItem(Block block, BlockModelGenerators.PlantType plantType, TextureMapping textureMapping) { ++ this.createSimpleFlatItemModel(block); ++ this.createCrossBlock(block, plantType, textureMapping); + } + +- private void createCrossBlock(Block crossBlock, BlockModelGenerators.TintState tintState) { +- TextureMapping textureMapping = TextureMapping.cross(crossBlock); +- this.createCrossBlock(crossBlock, tintState, textureMapping); ++ private void createCrossBlock(Block block, BlockModelGenerators.PlantType plantType) { ++ TextureMapping textureMapping = plantType.getTextureMapping(block); ++ this.createCrossBlock(block, plantType, textureMapping); + } + +- private void createCrossBlock(Block crossBlock, BlockModelGenerators.TintState tintState, TextureMapping textureMapping) { +- ResourceLocation resourceLocation = tintState.getCross().create(crossBlock, textureMapping, this.modelOutput); +- this.blockStateOutput.accept(createSimpleBlock(crossBlock, resourceLocation)); ++ private void createCrossBlock(Block block, BlockModelGenerators.PlantType plantType, TextureMapping textureMapping) { ++ ResourceLocation resourceLocation = plantType.getCross().create(block, textureMapping, this.modelOutput); ++ this.blockStateOutput.accept(createSimpleBlock(block, resourceLocation)); + } + +- private void createCrossBlock(Block crossBlock, BlockModelGenerators.TintState tintState, Property property, int... propertyValues) { +- if (property.getPossibleValues().size() != propertyValues.length) { ++ private void createCrossBlock(Block block, BlockModelGenerators.PlantType plantType, Property property, int... ints) { ++ if (property.getPossibleValues().size() != ints.length) { + throw new IllegalArgumentException("missing values for property: " + property); + } else { + PropertyDispatch propertyDispatch = PropertyDispatch.property(property).generate(integer -> { +- String string = "_stage" + propertyValues[integer]; +- TextureMapping textureMapping = TextureMapping.cross(TextureMapping.getBlockTexture(crossBlock, string)); +- ResourceLocation resourceLocation = tintState.getCross().createWithSuffix(crossBlock, string, textureMapping, this.modelOutput); ++ String string = "_stage" + ints[integer]; ++ TextureMapping textureMapping = TextureMapping.cross(TextureMapping.getBlockTexture(block, string)); ++ ResourceLocation resourceLocation = plantType.getCross().createWithSuffix(block, string, textureMapping, this.modelOutput); + return Variant.variant().with(VariantProperties.MODEL, resourceLocation); + }); +- this.createSimpleFlatItemModel(crossBlock.asItem()); +- this.blockStateOutput.accept(MultiVariantGenerator.multiVariant(crossBlock).with(propertyDispatch)); ++ this.createSimpleFlatItemModel(block.asItem()); ++ this.blockStateOutput.accept(MultiVariantGenerator.multiVariant(block).with(propertyDispatch)); + } + } + +- private void createPlant(Block plantBlock, Block pottedPlantBlock, BlockModelGenerators.TintState tintState) { +- this.createCrossBlockWithDefaultItem(plantBlock, tintState); +- TextureMapping textureMapping = TextureMapping.plant(plantBlock); +- ResourceLocation resourceLocation = tintState.getCrossPot().create(pottedPlantBlock, textureMapping, this.modelOutput); +- this.blockStateOutput.accept(createSimpleBlock(pottedPlantBlock, resourceLocation)); ++ private void createPlant(Block block, Block block1, BlockModelGenerators.PlantType plantType) { ++ this.createCrossBlockWithDefaultItem(block, plantType); ++ TextureMapping plantTextureMapping = plantType.getPlantTextureMapping(block); ++ ResourceLocation resourceLocation = plantType.getCrossPot().create(block1, plantTextureMapping, this.modelOutput); ++ this.blockStateOutput.accept(createSimpleBlock(block1, resourceLocation)); + } + + private void createCoralFans(Block coralFanBlock, Block coralWallFanBlock) { +@@ -1614,26 +1596,26 @@ public class BlockModelGenerators { + Block coralWallFanBlock, + Block deadCoralWallFanBlock + ) { +- this.createCrossBlockWithDefaultItem(coralBlock, BlockModelGenerators.TintState.NOT_TINTED); +- this.createCrossBlockWithDefaultItem(deadCoralBlock, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createCrossBlockWithDefaultItem(coralBlock, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createCrossBlockWithDefaultItem(deadCoralBlock, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialCube(coralFullBlock); + this.createTrivialCube(deadCoralFullBlock); + this.createCoralFans(coralFanBlock, coralWallFanBlock); + this.createCoralFans(deadCoralFanBlock, deadCoralWallFanBlock); + } + +- private void createDoublePlant(Block doublePlantBlock, BlockModelGenerators.TintState tintState) { +- this.createSimpleFlatItemModel(doublePlantBlock, "_top"); +- ResourceLocation resourceLocation = this.createSuffixedVariant(doublePlantBlock, "_top", tintState.getCross(), TextureMapping::cross); +- ResourceLocation resourceLocation1 = this.createSuffixedVariant(doublePlantBlock, "_bottom", tintState.getCross(), TextureMapping::cross); +- this.createDoubleBlock(doublePlantBlock, resourceLocation, resourceLocation1); ++ private void createDoublePlant(Block block, BlockModelGenerators.PlantType plantType) { ++ this.createSimpleFlatItemModel(block, "_top"); ++ ResourceLocation resourceLocation = this.createSuffixedVariant(block, "_top", plantType.getCross(), TextureMapping::cross); ++ ResourceLocation resourceLocation1 = this.createSuffixedVariant(block, "_bottom", plantType.getCross(), TextureMapping::cross); ++ this.createDoubleBlock(block, resourceLocation, resourceLocation1); + } + + private void createSunflower() { + this.createSimpleFlatItemModel(Blocks.SUNFLOWER, "_front"); + ResourceLocation modelLocation = ModelLocationUtils.getModelLocation(Blocks.SUNFLOWER, "_top"); + ResourceLocation resourceLocation = this.createSuffixedVariant( +- Blocks.SUNFLOWER, "_bottom", BlockModelGenerators.TintState.NOT_TINTED.getCross(), TextureMapping::cross ++ Blocks.SUNFLOWER, "_bottom", BlockModelGenerators.PlantType.NOT_TINTED.getCross(), TextureMapping::cross + ); + this.createDoubleBlock(Blocks.SUNFLOWER, modelLocation, resourceLocation); + } +@@ -4423,12 +4405,21 @@ public class BlockModelGenerators { + + private void createMultiface(Block multifaceBlock) { + this.createSimpleFlatItemModel(multifaceBlock); +- ResourceLocation modelLocation = ModelLocationUtils.getModelLocation(multifaceBlock); +- MultiPartGenerator multiPartGenerator = MultiPartGenerator.multiPart(multifaceBlock); ++ this.createMultifaceBlockStates(multifaceBlock); ++ } ++ ++ private void createMultiface(Block block, Item item) { ++ this.createSimpleFlatItemModel(item); ++ this.createMultifaceBlockStates(block); ++ } ++ ++ private void createMultifaceBlockStates(Block block) { ++ ResourceLocation modelLocation = ModelLocationUtils.getModelLocation(block); ++ MultiPartGenerator multiPartGenerator = MultiPartGenerator.multiPart(block); + Condition.TerminalCondition terminalCondition = Util.make( + Condition.condition(), + terminalCondition1 -> MULTIFACE_GENERATOR.stream().map(Pair::getFirst).map(MultifaceBlock::getFaceProperty).forEach(booleanProperty -> { +- if (multifaceBlock.defaultBlockState().hasProperty(booleanProperty)) { ++ if (block.defaultBlockState().hasProperty(booleanProperty)) { + terminalCondition1.term(booleanProperty, false); + } + }) +@@ -4437,7 +4428,7 @@ public class BlockModelGenerators { + for (Pair> pair : MULTIFACE_GENERATOR) { + BooleanProperty faceProperty = MultifaceBlock.getFaceProperty(pair.getFirst()); + Function function = pair.getSecond(); +- if (multifaceBlock.defaultBlockState().hasProperty(faceProperty)) { ++ if (block.defaultBlockState().hasProperty(faceProperty)) { + multiPartGenerator.with(Condition.condition().term(faceProperty, true), function.apply(modelLocation)); + multiPartGenerator.with(terminalCondition, function.apply(modelLocation)); + } +@@ -4487,7 +4478,7 @@ public class BlockModelGenerators { + _boolean -> { + String string = _boolean ? "_tip" : ""; + TextureMapping textureMapping = TextureMapping.cross(TextureMapping.getBlockTexture(block, string)); +- ResourceLocation resourceLocation = BlockModelGenerators.TintState.NOT_TINTED ++ ResourceLocation resourceLocation = BlockModelGenerators.PlantType.NOT_TINTED + .getCross() + .createWithSuffix(block, string, textureMapping, this.modelOutput); + return Variant.variant().with(VariantProperties.MODEL, resourceLocation); +@@ -4605,9 +4596,9 @@ public class BlockModelGenerators { + .create(ModelLocationUtils.getModelLocation(shulkerBoxBlock.asItem()), TextureMapping.particle(shulkerBoxBlock), this.modelOutput); + } + +- private void createGrowingPlant(Block growingPlantBlock, Block plantBlock, BlockModelGenerators.TintState tintState) { +- this.createCrossBlock(growingPlantBlock, tintState); +- this.createCrossBlock(plantBlock, tintState); ++ private void createGrowingPlant(Block block, Block block1, BlockModelGenerators.PlantType plantType) { ++ this.createCrossBlock(block, plantType); ++ this.createCrossBlock(block1, plantType); + } + + private void createBedItem(Block bedBlock, Block woolBlock) { +@@ -4629,9 +4620,9 @@ public class BlockModelGenerators { + } + + private void createNetherRoots(Block plantBlock, Block pottedPlantBlock) { +- this.createCrossBlockWithDefaultItem(plantBlock, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createCrossBlockWithDefaultItem(plantBlock, BlockModelGenerators.PlantType.NOT_TINTED); + TextureMapping textureMapping = TextureMapping.plant(TextureMapping.getBlockTexture(plantBlock, "_pot")); +- ResourceLocation resourceLocation = BlockModelGenerators.TintState.NOT_TINTED.getCrossPot().create(pottedPlantBlock, textureMapping, this.modelOutput); ++ ResourceLocation resourceLocation = BlockModelGenerators.PlantType.NOT_TINTED.getCrossPot().create(pottedPlantBlock, textureMapping, this.modelOutput); + this.blockStateOutput.accept(createSimpleBlock(pottedPlantBlock, resourceLocation)); + } + +@@ -4830,6 +4821,7 @@ public class BlockModelGenerators { + this.createTrivialCube(Blocks.LAPIS_ORE); + this.createTrivialCube(Blocks.DEEPSLATE_LAPIS_ORE); + this.createTrivialCube(Blocks.LAPIS_BLOCK); ++ this.createTrivialCube(Blocks.RESIN_BLOCK); + this.createTrivialCube(Blocks.NETHER_QUARTZ_ORE); + this.createTrivialCube(Blocks.REDSTONE_ORE); + this.createTrivialCube(Blocks.DEEPSLATE_REDSTONE_ORE); +@@ -4962,6 +4954,7 @@ public class BlockModelGenerators { + this.createMultiface(Blocks.VINE); + this.createMultiface(Blocks.GLOW_LICHEN); + this.createMultiface(Blocks.SCULK_VEIN); ++ this.createMultiface(Blocks.RESIN_CLUMP, Items.RESIN_CLUMP); + this.createMagmaBlock(); + this.createJigsaw(); + this.createSculkSensor(); +@@ -5016,7 +5009,7 @@ public class BlockModelGenerators { + this.createCropBlock(Blocks.NETHER_WART, BlockStateProperties.AGE_3, 0, 1, 1, 2); + this.createCropBlock(Blocks.POTATOES, BlockStateProperties.AGE_7, 0, 0, 1, 1, 2, 2, 2, 3); + this.createCropBlock(Blocks.WHEAT, BlockStateProperties.AGE_7, 0, 1, 2, 3, 4, 5, 6, 7); +- this.createCrossBlock(Blocks.TORCHFLOWER_CROP, BlockModelGenerators.TintState.NOT_TINTED, BlockStateProperties.AGE_1, 0, 1); ++ this.createCrossBlock(Blocks.TORCHFLOWER_CROP, BlockModelGenerators.PlantType.NOT_TINTED, BlockStateProperties.AGE_1, 0, 1); + this.createPitcherCrop(); + this.createPitcherPlant(); + this.blockEntityModels(ModelLocationUtils.decorateBlockModelLocation("decorated_pot"), Blocks.TERRACOTTA).createWithoutBlockItem(Blocks.DECORATED_POT); +@@ -5245,53 +5238,55 @@ public class BlockModelGenerators { + this.createFullAndCarpetBlocks(Blocks.BLACK_WOOL, Blocks.BLACK_CARPET); + this.createTrivialCube(Blocks.MUD); + this.createTrivialCube(Blocks.PACKED_MUD); +- this.createPlant(Blocks.FERN, Blocks.POTTED_FERN, BlockModelGenerators.TintState.TINTED); +- this.createPlant(Blocks.DANDELION, Blocks.POTTED_DANDELION, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.POPPY, Blocks.POTTED_POPPY, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.BLUE_ORCHID, Blocks.POTTED_BLUE_ORCHID, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.ALLIUM, Blocks.POTTED_ALLIUM, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.AZURE_BLUET, Blocks.POTTED_AZURE_BLUET, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.RED_TULIP, Blocks.POTTED_RED_TULIP, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.ORANGE_TULIP, Blocks.POTTED_ORANGE_TULIP, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.WHITE_TULIP, Blocks.POTTED_WHITE_TULIP, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.PINK_TULIP, Blocks.POTTED_PINK_TULIP, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.OXEYE_DAISY, Blocks.POTTED_OXEYE_DAISY, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.CORNFLOWER, Blocks.POTTED_CORNFLOWER, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.LILY_OF_THE_VALLEY, Blocks.POTTED_LILY_OF_THE_VALLEY, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.WITHER_ROSE, Blocks.POTTED_WITHER_ROSE, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.RED_MUSHROOM, Blocks.POTTED_RED_MUSHROOM, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.BROWN_MUSHROOM, Blocks.POTTED_BROWN_MUSHROOM, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.DEAD_BUSH, Blocks.POTTED_DEAD_BUSH, BlockModelGenerators.TintState.NOT_TINTED); +- this.createPlant(Blocks.TORCHFLOWER, Blocks.POTTED_TORCHFLOWER, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.FERN, Blocks.POTTED_FERN, BlockModelGenerators.PlantType.TINTED); ++ this.createPlant(Blocks.DANDELION, Blocks.POTTED_DANDELION, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.POPPY, Blocks.POTTED_POPPY, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.OPEN_EYEBLOSSOM, Blocks.POTTED_OPEN_EYEBLOSSOM, BlockModelGenerators.PlantType.EMISSIVE_NOT_TINTED); ++ this.createPlant(Blocks.CLOSED_EYEBLOSSOM, Blocks.POTTED_CLOSED_EYEBLOSSOM, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.BLUE_ORCHID, Blocks.POTTED_BLUE_ORCHID, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.ALLIUM, Blocks.POTTED_ALLIUM, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.AZURE_BLUET, Blocks.POTTED_AZURE_BLUET, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.RED_TULIP, Blocks.POTTED_RED_TULIP, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.ORANGE_TULIP, Blocks.POTTED_ORANGE_TULIP, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.WHITE_TULIP, Blocks.POTTED_WHITE_TULIP, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.PINK_TULIP, Blocks.POTTED_PINK_TULIP, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.OXEYE_DAISY, Blocks.POTTED_OXEYE_DAISY, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.CORNFLOWER, Blocks.POTTED_CORNFLOWER, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.LILY_OF_THE_VALLEY, Blocks.POTTED_LILY_OF_THE_VALLEY, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.WITHER_ROSE, Blocks.POTTED_WITHER_ROSE, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.RED_MUSHROOM, Blocks.POTTED_RED_MUSHROOM, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.BROWN_MUSHROOM, Blocks.POTTED_BROWN_MUSHROOM, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.DEAD_BUSH, Blocks.POTTED_DEAD_BUSH, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createPlant(Blocks.TORCHFLOWER, Blocks.POTTED_TORCHFLOWER, BlockModelGenerators.PlantType.NOT_TINTED); + this.createPointedDripstone(); + this.createMushroomBlock(Blocks.BROWN_MUSHROOM_BLOCK); + this.createMushroomBlock(Blocks.RED_MUSHROOM_BLOCK); + this.createMushroomBlock(Blocks.MUSHROOM_STEM); +- this.createCrossBlockWithDefaultItem(Blocks.SHORT_GRASS, BlockModelGenerators.TintState.TINTED); +- this.createCrossBlock(Blocks.SUGAR_CANE, BlockModelGenerators.TintState.TINTED); ++ this.createCrossBlockWithDefaultItem(Blocks.SHORT_GRASS, BlockModelGenerators.PlantType.TINTED); ++ this.createCrossBlock(Blocks.SUGAR_CANE, BlockModelGenerators.PlantType.TINTED); + this.createSimpleFlatItemModel(Items.SUGAR_CANE); +- this.createGrowingPlant(Blocks.KELP, Blocks.KELP_PLANT, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createGrowingPlant(Blocks.KELP, Blocks.KELP_PLANT, BlockModelGenerators.PlantType.NOT_TINTED); + this.createSimpleFlatItemModel(Items.KELP); + this.skipAutoItemBlock(Blocks.KELP_PLANT); +- this.createCrossBlock(Blocks.HANGING_ROOTS, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createCrossBlock(Blocks.HANGING_ROOTS, BlockModelGenerators.PlantType.NOT_TINTED); + this.skipAutoItemBlock(Blocks.HANGING_ROOTS); + this.skipAutoItemBlock(Blocks.CAVE_VINES_PLANT); +- this.createGrowingPlant(Blocks.WEEPING_VINES, Blocks.WEEPING_VINES_PLANT, BlockModelGenerators.TintState.NOT_TINTED); +- this.createGrowingPlant(Blocks.TWISTING_VINES, Blocks.TWISTING_VINES_PLANT, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createGrowingPlant(Blocks.WEEPING_VINES, Blocks.WEEPING_VINES_PLANT, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createGrowingPlant(Blocks.TWISTING_VINES, Blocks.TWISTING_VINES_PLANT, BlockModelGenerators.PlantType.NOT_TINTED); + this.createSimpleFlatItemModel(Blocks.WEEPING_VINES, "_plant"); + this.skipAutoItemBlock(Blocks.WEEPING_VINES_PLANT); + this.createSimpleFlatItemModel(Blocks.TWISTING_VINES, "_plant"); + this.skipAutoItemBlock(Blocks.TWISTING_VINES_PLANT); + this.createCrossBlockWithDefaultItem( +- Blocks.BAMBOO_SAPLING, BlockModelGenerators.TintState.TINTED, TextureMapping.cross(TextureMapping.getBlockTexture(Blocks.BAMBOO, "_stage0")) ++ Blocks.BAMBOO_SAPLING, BlockModelGenerators.PlantType.TINTED, TextureMapping.cross(TextureMapping.getBlockTexture(Blocks.BAMBOO, "_stage0")) + ); + this.createBamboo(); +- this.createCrossBlockWithDefaultItem(Blocks.COBWEB, BlockModelGenerators.TintState.NOT_TINTED); +- this.createDoublePlant(Blocks.LILAC, BlockModelGenerators.TintState.NOT_TINTED); +- this.createDoublePlant(Blocks.ROSE_BUSH, BlockModelGenerators.TintState.NOT_TINTED); +- this.createDoublePlant(Blocks.PEONY, BlockModelGenerators.TintState.NOT_TINTED); +- this.createDoublePlant(Blocks.TALL_GRASS, BlockModelGenerators.TintState.TINTED); +- this.createDoublePlant(Blocks.LARGE_FERN, BlockModelGenerators.TintState.TINTED); ++ this.createCrossBlockWithDefaultItem(Blocks.COBWEB, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createDoublePlant(Blocks.LILAC, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createDoublePlant(Blocks.ROSE_BUSH, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createDoublePlant(Blocks.PEONY, BlockModelGenerators.PlantType.NOT_TINTED); ++ this.createDoublePlant(Blocks.TALL_GRASS, BlockModelGenerators.PlantType.TINTED); ++ this.createDoublePlant(Blocks.LARGE_FERN, BlockModelGenerators.PlantType.TINTED); + this.createSunflower(); + this.createTallSeagrass(); + this.createSmallDripleaf(); +@@ -5354,57 +5349,57 @@ public class BlockModelGenerators { + this.woodProvider(Blocks.ACACIA_LOG).logWithHorizontal(Blocks.ACACIA_LOG).wood(Blocks.ACACIA_WOOD); + this.woodProvider(Blocks.STRIPPED_ACACIA_LOG).logWithHorizontal(Blocks.STRIPPED_ACACIA_LOG).wood(Blocks.STRIPPED_ACACIA_WOOD); + this.createHangingSign(Blocks.STRIPPED_ACACIA_LOG, Blocks.ACACIA_HANGING_SIGN, Blocks.ACACIA_WALL_HANGING_SIGN); +- this.createPlant(Blocks.ACACIA_SAPLING, Blocks.POTTED_ACACIA_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.ACACIA_SAPLING, Blocks.POTTED_ACACIA_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.ACACIA_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.CHERRY_LOG).logUVLocked(Blocks.CHERRY_LOG).wood(Blocks.CHERRY_WOOD); + this.woodProvider(Blocks.STRIPPED_CHERRY_LOG).logUVLocked(Blocks.STRIPPED_CHERRY_LOG).wood(Blocks.STRIPPED_CHERRY_WOOD); + this.createHangingSign(Blocks.STRIPPED_CHERRY_LOG, Blocks.CHERRY_HANGING_SIGN, Blocks.CHERRY_WALL_HANGING_SIGN); +- this.createPlant(Blocks.CHERRY_SAPLING, Blocks.POTTED_CHERRY_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.CHERRY_SAPLING, Blocks.POTTED_CHERRY_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.CHERRY_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.BIRCH_LOG).logWithHorizontal(Blocks.BIRCH_LOG).wood(Blocks.BIRCH_WOOD); + this.woodProvider(Blocks.STRIPPED_BIRCH_LOG).logWithHorizontal(Blocks.STRIPPED_BIRCH_LOG).wood(Blocks.STRIPPED_BIRCH_WOOD); + this.createHangingSign(Blocks.STRIPPED_BIRCH_LOG, Blocks.BIRCH_HANGING_SIGN, Blocks.BIRCH_WALL_HANGING_SIGN); +- this.createPlant(Blocks.BIRCH_SAPLING, Blocks.POTTED_BIRCH_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.BIRCH_SAPLING, Blocks.POTTED_BIRCH_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.BIRCH_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.OAK_LOG).logWithHorizontal(Blocks.OAK_LOG).wood(Blocks.OAK_WOOD); + this.woodProvider(Blocks.STRIPPED_OAK_LOG).logWithHorizontal(Blocks.STRIPPED_OAK_LOG).wood(Blocks.STRIPPED_OAK_WOOD); + this.createHangingSign(Blocks.STRIPPED_OAK_LOG, Blocks.OAK_HANGING_SIGN, Blocks.OAK_WALL_HANGING_SIGN); +- this.createPlant(Blocks.OAK_SAPLING, Blocks.POTTED_OAK_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.OAK_SAPLING, Blocks.POTTED_OAK_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.OAK_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.SPRUCE_LOG).logWithHorizontal(Blocks.SPRUCE_LOG).wood(Blocks.SPRUCE_WOOD); + this.woodProvider(Blocks.STRIPPED_SPRUCE_LOG).logWithHorizontal(Blocks.STRIPPED_SPRUCE_LOG).wood(Blocks.STRIPPED_SPRUCE_WOOD); + this.createHangingSign(Blocks.STRIPPED_SPRUCE_LOG, Blocks.SPRUCE_HANGING_SIGN, Blocks.SPRUCE_WALL_HANGING_SIGN); +- this.createPlant(Blocks.SPRUCE_SAPLING, Blocks.POTTED_SPRUCE_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.SPRUCE_SAPLING, Blocks.POTTED_SPRUCE_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.SPRUCE_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.DARK_OAK_LOG).logWithHorizontal(Blocks.DARK_OAK_LOG).wood(Blocks.DARK_OAK_WOOD); + this.woodProvider(Blocks.STRIPPED_DARK_OAK_LOG).logWithHorizontal(Blocks.STRIPPED_DARK_OAK_LOG).wood(Blocks.STRIPPED_DARK_OAK_WOOD); + this.createHangingSign(Blocks.STRIPPED_DARK_OAK_LOG, Blocks.DARK_OAK_HANGING_SIGN, Blocks.DARK_OAK_WALL_HANGING_SIGN); +- this.createPlant(Blocks.DARK_OAK_SAPLING, Blocks.POTTED_DARK_OAK_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.DARK_OAK_SAPLING, Blocks.POTTED_DARK_OAK_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.DARK_OAK_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.PALE_OAK_LOG).logWithHorizontal(Blocks.PALE_OAK_LOG).wood(Blocks.PALE_OAK_WOOD); + this.woodProvider(Blocks.STRIPPED_PALE_OAK_LOG).logWithHorizontal(Blocks.STRIPPED_PALE_OAK_LOG).wood(Blocks.STRIPPED_PALE_OAK_WOOD); + this.createHangingSign(Blocks.STRIPPED_PALE_OAK_LOG, Blocks.PALE_OAK_HANGING_SIGN, Blocks.PALE_OAK_WALL_HANGING_SIGN); +- this.createPlant(Blocks.PALE_OAK_SAPLING, Blocks.POTTED_PALE_OAK_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.PALE_OAK_SAPLING, Blocks.POTTED_PALE_OAK_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.PALE_OAK_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.JUNGLE_LOG).logWithHorizontal(Blocks.JUNGLE_LOG).wood(Blocks.JUNGLE_WOOD); + this.woodProvider(Blocks.STRIPPED_JUNGLE_LOG).logWithHorizontal(Blocks.STRIPPED_JUNGLE_LOG).wood(Blocks.STRIPPED_JUNGLE_WOOD); + this.createHangingSign(Blocks.STRIPPED_JUNGLE_LOG, Blocks.JUNGLE_HANGING_SIGN, Blocks.JUNGLE_WALL_HANGING_SIGN); +- this.createPlant(Blocks.JUNGLE_SAPLING, Blocks.POTTED_JUNGLE_SAPLING, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.JUNGLE_SAPLING, Blocks.POTTED_JUNGLE_SAPLING, BlockModelGenerators.PlantType.NOT_TINTED); + this.createTrivialBlock(Blocks.JUNGLE_LEAVES, TexturedModel.LEAVES); + this.woodProvider(Blocks.CRIMSON_STEM).log(Blocks.CRIMSON_STEM).wood(Blocks.CRIMSON_HYPHAE); + this.woodProvider(Blocks.STRIPPED_CRIMSON_STEM).log(Blocks.STRIPPED_CRIMSON_STEM).wood(Blocks.STRIPPED_CRIMSON_HYPHAE); + this.createHangingSign(Blocks.STRIPPED_CRIMSON_STEM, Blocks.CRIMSON_HANGING_SIGN, Blocks.CRIMSON_WALL_HANGING_SIGN); +- this.createPlant(Blocks.CRIMSON_FUNGUS, Blocks.POTTED_CRIMSON_FUNGUS, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.CRIMSON_FUNGUS, Blocks.POTTED_CRIMSON_FUNGUS, BlockModelGenerators.PlantType.NOT_TINTED); + this.createNetherRoots(Blocks.CRIMSON_ROOTS, Blocks.POTTED_CRIMSON_ROOTS); + this.woodProvider(Blocks.WARPED_STEM).log(Blocks.WARPED_STEM).wood(Blocks.WARPED_HYPHAE); + this.woodProvider(Blocks.STRIPPED_WARPED_STEM).log(Blocks.STRIPPED_WARPED_STEM).wood(Blocks.STRIPPED_WARPED_HYPHAE); + this.createHangingSign(Blocks.STRIPPED_WARPED_STEM, Blocks.WARPED_HANGING_SIGN, Blocks.WARPED_WALL_HANGING_SIGN); +- this.createPlant(Blocks.WARPED_FUNGUS, Blocks.POTTED_WARPED_FUNGUS, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createPlant(Blocks.WARPED_FUNGUS, Blocks.POTTED_WARPED_FUNGUS, BlockModelGenerators.PlantType.NOT_TINTED); + this.createNetherRoots(Blocks.WARPED_ROOTS, Blocks.POTTED_WARPED_ROOTS); + this.woodProvider(Blocks.BAMBOO_BLOCK).logUVLocked(Blocks.BAMBOO_BLOCK); + this.woodProvider(Blocks.STRIPPED_BAMBOO_BLOCK).logUVLocked(Blocks.STRIPPED_BAMBOO_BLOCK); + this.createHangingSign(Blocks.BAMBOO_PLANKS, Blocks.BAMBOO_HANGING_SIGN, Blocks.BAMBOO_WALL_HANGING_SIGN); +- this.createCrossBlock(Blocks.NETHER_SPROUTS, BlockModelGenerators.TintState.NOT_TINTED); ++ this.createCrossBlock(Blocks.NETHER_SPROUTS, BlockModelGenerators.PlantType.NOT_TINTED); + this.createSimpleFlatItemModel(Items.NETHER_SPROUTS); + this.createDoor(Blocks.IRON_DOOR); + this.createTrapdoor(Blocks.IRON_TRAPDOOR); +@@ -5742,16 +5737,43 @@ public class BlockModelGenerators { + record BookSlotModelCacheKey(ModelTemplate template, String modelSuffix) { + } + +- static enum TintState { +- TINTED, +- NOT_TINTED; ++ static enum PlantType { ++ TINTED(ModelTemplates.TINTED_CROSS, ModelTemplates.TINTED_FLOWER_POT_CROSS, false), ++ NOT_TINTED(ModelTemplates.CROSS, ModelTemplates.FLOWER_POT_CROSS, false), ++ EMISSIVE_NOT_TINTED(ModelTemplates.CROSS_EMISSIVE, ModelTemplates.FLOWER_POT_CROSS_EMISSIVE, true); ++ ++ private final ModelTemplate blockTemplate; ++ private final ModelTemplate flowerPotTemplate; ++ private final boolean isEmissive; ++ ++ private PlantType(final ModelTemplate modelTemplate, final ModelTemplate modelTemplate1, final boolean flag) { ++ this.blockTemplate = modelTemplate; ++ this.flowerPotTemplate = modelTemplate1; ++ this.isEmissive = flag; ++ } + + public ModelTemplate getCross() { +- return this == TINTED ? ModelTemplates.TINTED_CROSS : ModelTemplates.CROSS; ++ return this.blockTemplate; + } + + public ModelTemplate getCrossPot() { +- return this == TINTED ? ModelTemplates.TINTED_FLOWER_POT_CROSS : ModelTemplates.FLOWER_POT_CROSS; ++ return this.flowerPotTemplate; ++ } ++ ++ public void createItemModel(BlockModelGenerators blockModelGenerators, Block block) { ++ if (this.isEmissive) { ++ blockModelGenerators.createTwoLayerFlatItemModel(block, "_emissive"); ++ } else { ++ blockModelGenerators.createSimpleFlatItemModel(block); ++ } ++ } ++ ++ public TextureMapping getTextureMapping(Block block) { ++ return this.isEmissive ? TextureMapping.crossEmissive(block) : TextureMapping.cross(block); ++ } ++ ++ public TextureMapping getPlantTextureMapping(Block block) { ++ return this.isEmissive ? TextureMapping.plantEmissive(block) : TextureMapping.plant(block); + } + } + +diff --git a/net/minecraft/data/models/ItemModelGenerators.java b/net/minecraft/data/models/ItemModelGenerators.java +index 0df5e05..954fb11 100644 +--- a/net/minecraft/data/models/ItemModelGenerators.java ++++ b/net/minecraft/data/models/ItemModelGenerators.java +@@ -27,16 +27,17 @@ import net.minecraft.world.item.equipment.Equippable; + public class ItemModelGenerators { + public static final ResourceLocation TRIM_TYPE_PREDICATE_ID = ResourceLocation.withDefaultNamespace("trim_type"); + private static final List GENERATED_TRIM_MODELS = List.of( +- new ItemModelGenerators.TrimModelData("quartz", 0.1F, Map.of()), +- new ItemModelGenerators.TrimModelData("iron", 0.2F, Map.of(EquipmentModels.IRON, "iron_darker")), +- new ItemModelGenerators.TrimModelData("netherite", 0.3F, Map.of(EquipmentModels.NETHERITE, "netherite_darker")), +- new ItemModelGenerators.TrimModelData("redstone", 0.4F, Map.of()), +- new ItemModelGenerators.TrimModelData("copper", 0.5F, Map.of()), +- new ItemModelGenerators.TrimModelData("gold", 0.6F, Map.of(EquipmentModels.GOLD, "gold_darker")), +- new ItemModelGenerators.TrimModelData("emerald", 0.7F, Map.of()), +- new ItemModelGenerators.TrimModelData("diamond", 0.8F, Map.of(EquipmentModels.DIAMOND, "diamond_darker")), +- new ItemModelGenerators.TrimModelData("lapis", 0.9F, Map.of()), +- new ItemModelGenerators.TrimModelData("amethyst", 1.0F, Map.of()) ++ new ItemModelGenerators.TrimModelData("quartz", 0.01F, Map.of()), ++ new ItemModelGenerators.TrimModelData("iron", 0.02F, Map.of(EquipmentModels.IRON, "iron_darker")), ++ new ItemModelGenerators.TrimModelData("netherite", 0.03F, Map.of(EquipmentModels.NETHERITE, "netherite_darker")), ++ new ItemModelGenerators.TrimModelData("redstone", 0.04F, Map.of()), ++ new ItemModelGenerators.TrimModelData("copper", 0.05F, Map.of()), ++ new ItemModelGenerators.TrimModelData("gold", 0.06F, Map.of(EquipmentModels.GOLD, "gold_darker")), ++ new ItemModelGenerators.TrimModelData("emerald", 0.07F, Map.of()), ++ new ItemModelGenerators.TrimModelData("diamond", 0.08F, Map.of(EquipmentModels.DIAMOND, "diamond_darker")), ++ new ItemModelGenerators.TrimModelData("lapis", 0.09F, Map.of()), ++ new ItemModelGenerators.TrimModelData("amethyst", 0.1F, Map.of()), ++ new ItemModelGenerators.TrimModelData("resin", 0.11F, Map.of()) + ); + private final BiConsumer> output; + +@@ -330,6 +331,7 @@ public class ItemModelGenerators { + this.generateFlatItem(Items.NETHERITE_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM); + this.generateFlatItem(Items.NETHERITE_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM); + this.generateFlatItem(Items.NETHER_BRICK, ModelTemplates.FLAT_ITEM); ++ this.generateFlatItem(Items.RESIN_BRICK, ModelTemplates.FLAT_ITEM); + this.generateFlatItem(Items.NETHER_STAR, ModelTemplates.FLAT_ITEM); + this.generateFlatItem(Items.OAK_BOAT, ModelTemplates.FLAT_ITEM); + this.generateFlatItem(Items.OAK_CHEST_BOAT, ModelTemplates.FLAT_ITEM); +diff --git a/net/minecraft/data/models/model/ModelTemplates.java b/net/minecraft/data/models/model/ModelTemplates.java +index a63c7ed..1d6ef81 100644 +--- a/net/minecraft/data/models/model/ModelTemplates.java ++++ b/net/minecraft/data/models/model/ModelTemplates.java +@@ -83,8 +83,10 @@ public class ModelTemplates { + public static final ModelTemplate POINTED_DRIPSTONE = create("pointed_dripstone", TextureSlot.CROSS); + public static final ModelTemplate CROSS = create("cross", TextureSlot.CROSS); + public static final ModelTemplate TINTED_CROSS = create("tinted_cross", TextureSlot.CROSS); ++ public static final ModelTemplate CROSS_EMISSIVE = create("cross_emissive", TextureSlot.CROSS, TextureSlot.CROSS_EMISSIVE); + public static final ModelTemplate FLOWER_POT_CROSS = create("flower_pot_cross", TextureSlot.PLANT); + public static final ModelTemplate TINTED_FLOWER_POT_CROSS = create("tinted_flower_pot_cross", TextureSlot.PLANT); ++ public static final ModelTemplate FLOWER_POT_CROSS_EMISSIVE = create("flower_pot_cross_emissive", TextureSlot.PLANT, TextureSlot.CROSS_EMISSIVE); + public static final ModelTemplate RAIL_FLAT = create("rail_flat", TextureSlot.RAIL); + public static final ModelTemplate RAIL_CURVED = create("rail_curved", "_corner", TextureSlot.RAIL); + public static final ModelTemplate RAIL_RAISED_NE = create("template_rail_raised_ne", "_raised_ne", TextureSlot.RAIL); +diff --git a/net/minecraft/data/models/model/TextureMapping.java b/net/minecraft/data/models/model/TextureMapping.java +index 3efc01a..5451ad1 100644 +--- a/net/minecraft/data/models/model/TextureMapping.java ++++ b/net/minecraft/data/models/model/TextureMapping.java +@@ -86,6 +86,10 @@ public class TextureMapping { + return singleSlot(TextureSlot.SIDE, getBlockTexture(block)); + } + ++ public static TextureMapping crossEmissive(Block block) { ++ return new TextureMapping().put(TextureSlot.CROSS, getBlockTexture(block)).put(TextureSlot.CROSS_EMISSIVE, getBlockTexture(block, "_emissive")); ++ } ++ + public static TextureMapping cross(ResourceLocation crossTextureLocation) { + return singleSlot(TextureSlot.CROSS, crossTextureLocation); + } +@@ -94,6 +98,10 @@ public class TextureMapping { + return singleSlot(TextureSlot.PLANT, getBlockTexture(plantBlock)); + } + ++ public static TextureMapping plantEmissive(Block block) { ++ return new TextureMapping().put(TextureSlot.PLANT, getBlockTexture(block)).put(TextureSlot.CROSS_EMISSIVE, getBlockTexture(block, "_emissive")); ++ } ++ + public static TextureMapping plant(ResourceLocation plantTextureLocation) { + return singleSlot(TextureSlot.PLANT, plantTextureLocation); + } +diff --git a/net/minecraft/data/models/model/TextureSlot.java b/net/minecraft/data/models/model/TextureSlot.java +index c2c48c9..fbbda66 100644 +--- a/net/minecraft/data/models/model/TextureSlot.java ++++ b/net/minecraft/data/models/model/TextureSlot.java +@@ -19,6 +19,7 @@ public final class TextureSlot { + public static final TextureSlot UP = create("up"); + public static final TextureSlot DOWN = create("down"); + public static final TextureSlot CROSS = create("cross"); ++ public static final TextureSlot CROSS_EMISSIVE = create("cross_emissive"); + public static final TextureSlot PLANT = create("plant"); + public static final TextureSlot WALL = create("wall", ALL); + public static final TextureSlot RAIL = create("rail"); +diff --git a/net/minecraft/data/recipes/packs/VanillaRecipeProvider.java b/net/minecraft/data/recipes/packs/VanillaRecipeProvider.java +index 6ae05c6..0386f36 100644 +--- a/net/minecraft/data/recipes/packs/VanillaRecipeProvider.java ++++ b/net/minecraft/data/recipes/packs/VanillaRecipeProvider.java +@@ -76,6 +76,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.planksFromLogs(Blocks.BIRCH_PLANKS, ItemTags.BIRCH_LOGS, 4); + this.planksFromLogs(Blocks.CRIMSON_PLANKS, ItemTags.CRIMSON_STEMS, 4); + this.planksFromLog(Blocks.DARK_OAK_PLANKS, ItemTags.DARK_OAK_LOGS, 4); ++ this.planksFromLog(Blocks.PALE_OAK_PLANKS, ItemTags.PALE_OAK_LOGS, 4); + this.planksFromLogs(Blocks.JUNGLE_PLANKS, ItemTags.JUNGLE_LOGS, 4); + this.planksFromLogs(Blocks.OAK_PLANKS, ItemTags.OAK_LOGS, 4); + this.planksFromLogs(Blocks.SPRUCE_PLANKS, ItemTags.SPRUCE_LOGS, 4); +@@ -84,6 +85,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.woodFromLogs(Blocks.ACACIA_WOOD, Blocks.ACACIA_LOG); + this.woodFromLogs(Blocks.BIRCH_WOOD, Blocks.BIRCH_LOG); + this.woodFromLogs(Blocks.DARK_OAK_WOOD, Blocks.DARK_OAK_LOG); ++ this.woodFromLogs(Blocks.PALE_OAK_WOOD, Blocks.PALE_OAK_LOG); + this.woodFromLogs(Blocks.JUNGLE_WOOD, Blocks.JUNGLE_LOG); + this.woodFromLogs(Blocks.OAK_WOOD, Blocks.OAK_LOG); + this.woodFromLogs(Blocks.SPRUCE_WOOD, Blocks.SPRUCE_LOG); +@@ -93,6 +95,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.woodFromLogs(Blocks.STRIPPED_ACACIA_WOOD, Blocks.STRIPPED_ACACIA_LOG); + this.woodFromLogs(Blocks.STRIPPED_BIRCH_WOOD, Blocks.STRIPPED_BIRCH_LOG); + this.woodFromLogs(Blocks.STRIPPED_DARK_OAK_WOOD, Blocks.STRIPPED_DARK_OAK_LOG); ++ this.woodFromLogs(Blocks.STRIPPED_PALE_OAK_WOOD, Blocks.STRIPPED_PALE_OAK_LOG); + this.woodFromLogs(Blocks.STRIPPED_JUNGLE_WOOD, Blocks.STRIPPED_JUNGLE_LOG); + this.woodFromLogs(Blocks.STRIPPED_OAK_WOOD, Blocks.STRIPPED_OAK_LOG); + this.woodFromLogs(Blocks.STRIPPED_SPRUCE_WOOD, Blocks.STRIPPED_SPRUCE_LOG); +@@ -102,6 +105,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.woodenBoat(Items.ACACIA_BOAT, Blocks.ACACIA_PLANKS); + this.woodenBoat(Items.BIRCH_BOAT, Blocks.BIRCH_PLANKS); + this.woodenBoat(Items.DARK_OAK_BOAT, Blocks.DARK_OAK_PLANKS); ++ this.woodenBoat(Items.PALE_OAK_BOAT, Blocks.PALE_OAK_PLANKS); + this.woodenBoat(Items.JUNGLE_BOAT, Blocks.JUNGLE_PLANKS); + this.woodenBoat(Items.OAK_BOAT, Blocks.OAK_PLANKS); + this.woodenBoat(Items.SPRUCE_BOAT, Blocks.SPRUCE_PLANKS); +@@ -230,6 +234,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.bedFromPlanksAndWool(Items.YELLOW_BED, Blocks.YELLOW_WOOL); + this.banner(Items.YELLOW_BANNER, Blocks.YELLOW_WOOL); + this.carpet(Blocks.MOSS_CARPET, Blocks.MOSS_BLOCK); ++ this.carpet(Blocks.PALE_MOSS_CARPET, Blocks.PALE_MOSS_BLOCK); + this.stainedGlassFromGlassAndDye(Blocks.BLACK_STAINED_GLASS, Items.BLACK_DYE); + this.stainedGlassPaneFromStainedGlass(Blocks.BLACK_STAINED_GLASS_PANE, Blocks.BLACK_STAINED_GLASS); + this.stainedGlassPaneFromGlassPaneAndDye(Blocks.BLACK_STAINED_GLASS_PANE, Items.BLACK_DYE); +@@ -573,6 +578,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.chestBoat(Items.ACACIA_CHEST_BOAT, Items.ACACIA_BOAT); + this.chestBoat(Items.BIRCH_CHEST_BOAT, Items.BIRCH_BOAT); + this.chestBoat(Items.DARK_OAK_CHEST_BOAT, Items.DARK_OAK_BOAT); ++ this.chestBoat(Items.PALE_OAK_CHEST_BOAT, Items.PALE_OAK_BOAT); + this.chestBoat(Items.JUNGLE_CHEST_BOAT, Items.JUNGLE_BOAT); + this.chestBoat(Items.OAK_CHEST_BOAT, Items.OAK_BOAT); + this.chestBoat(Items.SPRUCE_CHEST_BOAT, Items.SPRUCE_BOAT); +@@ -1352,6 +1358,16 @@ public class VanillaRecipeProvider extends RecipeProvider { + } + }); + this.twoByTwoPacker(RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_BRICKS, Items.NETHER_BRICK); ++ this.twoByTwoPacker(RecipeCategory.BUILDING_BLOCKS, Blocks.RESIN_BRICKS, Items.RESIN_BRICK); ++ this.nineBlockStorageRecipes(RecipeCategory.MISC, Items.RESIN_CLUMP, RecipeCategory.BUILDING_BLOCKS, Items.RESIN_BLOCK); ++ this.shaped(RecipeCategory.MISC, Blocks.CREAKING_HEART) ++ .define('R', Items.RESIN_BLOCK) ++ .define('L', Blocks.PALE_OAK_LOG) ++ .pattern(" L ") ++ .pattern(" R ") ++ .pattern(" L ") ++ .unlockedBy("has_resin_block", this.has(Items.RESIN_BLOCK)) ++ .save(this.output); + this.threeByThreePacker(RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_WART_BLOCK, Items.NETHER_WART); + this.shaped(RecipeCategory.REDSTONE, Blocks.NOTE_BLOCK) + .define('#', ItemTags.PLANKS) +@@ -1530,6 +1546,8 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.oneToOneConversionRecipe(Items.RED_DYE, Items.BEETROOT, "red_dye"); + this.oneToOneConversionRecipe(Items.RED_DYE, Blocks.POPPY, "red_dye"); + this.oneToOneConversionRecipe(Items.RED_DYE, Blocks.ROSE_BUSH, "red_dye", 2); ++ this.oneToOneConversionRecipe(Items.ORANGE_DYE, Blocks.OPEN_EYEBLOSSOM, "orange_dye"); ++ this.oneToOneConversionRecipe(Items.GRAY_DYE, Blocks.CLOSED_EYEBLOSSOM, "gray_dye"); + this.shapeless(RecipeCategory.MISC, Items.RED_DYE) + .requires(Blocks.RED_TULIP) + .group("red_dye") +@@ -2175,6 +2193,9 @@ public class VanillaRecipeProvider extends RecipeProvider { + SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.NETHERRACK), RecipeCategory.MISC, Items.NETHER_BRICK, 0.1F, 200) + .unlockedBy("has_netherrack", this.has(Blocks.NETHERRACK)) + .save(this.output); ++ SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.RESIN_CLUMP), RecipeCategory.MISC, Items.RESIN_BRICK, 0.1F, 200) ++ .unlockedBy("has_resin_clump", this.has(Blocks.RESIN_CLUMP)) ++ .save(this.output); + SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.NETHER_QUARTZ_ORE), RecipeCategory.MISC, Items.QUARTZ, 0.2F, 200) + .unlockedBy("has_nether_quartz_ore", this.has(Blocks.NETHER_QUARTZ_ORE)) + .save(this.output); +@@ -2421,6 +2442,10 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_BRICK_STAIRS, Blocks.NETHER_BRICKS); + this.stonecutterResultFromBase(RecipeCategory.DECORATIONS, Blocks.NETHER_BRICK_WALL, Blocks.NETHER_BRICKS); + this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_NETHER_BRICKS, Blocks.NETHER_BRICKS); ++ this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.RESIN_BRICK_SLAB, Blocks.RESIN_BRICKS, 2); ++ this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.RESIN_BRICK_STAIRS, Blocks.RESIN_BRICKS); ++ this.stonecutterResultFromBase(RecipeCategory.DECORATIONS, Blocks.RESIN_BRICK_WALL, Blocks.RESIN_BRICKS); ++ this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_RESIN_BRICKS, Blocks.RESIN_BRICKS); + this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.RED_NETHER_BRICK_SLAB, Blocks.RED_NETHER_BRICKS, 2); + this.stonecutterResultFromBase(RecipeCategory.BUILDING_BLOCKS, Blocks.RED_NETHER_BRICK_STAIRS, Blocks.RED_NETHER_BRICKS); + this.stonecutterResultFromBase(RecipeCategory.DECORATIONS, Blocks.RED_NETHER_BRICK_WALL, Blocks.RED_NETHER_BRICKS); +@@ -2636,6 +2661,7 @@ public class VanillaRecipeProvider extends RecipeProvider { + this.hangingSign(Items.ACACIA_HANGING_SIGN, Blocks.STRIPPED_ACACIA_LOG); + this.hangingSign(Items.CHERRY_HANGING_SIGN, Blocks.STRIPPED_CHERRY_LOG); + this.hangingSign(Items.DARK_OAK_HANGING_SIGN, Blocks.STRIPPED_DARK_OAK_LOG); ++ this.hangingSign(Items.PALE_OAK_HANGING_SIGN, Blocks.STRIPPED_PALE_OAK_LOG); + this.hangingSign(Items.MANGROVE_HANGING_SIGN, Blocks.STRIPPED_MANGROVE_LOG); + this.hangingSign(Items.BAMBOO_HANGING_SIGN, Items.STRIPPED_BAMBOO_BLOCK); + this.hangingSign(Items.CRIMSON_HANGING_SIGN, Blocks.STRIPPED_CRIMSON_STEM); +diff --git a/net/minecraft/data/structures/StructureUpdater.java b/net/minecraft/data/structures/StructureUpdater.java +index 5a2c350..1110ca4 100644 +--- a/net/minecraft/data/structures/StructureUpdater.java ++++ b/net/minecraft/data/structures/StructureUpdater.java +@@ -22,9 +22,9 @@ public class StructureUpdater implements SnbtToNbt.Filter { + public static CompoundTag update(String structureLocationPath, CompoundTag tag) { + StructureTemplate structureTemplate = new StructureTemplate(); + int dataVersion = NbtUtils.getDataVersion(tag, 500); +- int i = 4053; +- if (dataVersion < 4053) { +- LOGGER.warn("SNBT Too old, do not forget to update: {} < {}: {}", dataVersion, 4053, structureLocationPath); ++ int i = 4173; ++ if (dataVersion < 4173) { ++ LOGGER.warn("SNBT Too old, do not forget to update: {} < {}: {}", dataVersion, 4173, structureLocationPath); + } + + CompoundTag compoundTag = DataFixTypes.STRUCTURE.updateToCurrentVersion(DataFixers.getDataFixer(), tag, dataVersion); +diff --git a/net/minecraft/data/tags/BiomeTagsProvider.java b/net/minecraft/data/tags/BiomeTagsProvider.java +index 5eca92f..a6ecfd8 100644 +--- a/net/minecraft/data/tags/BiomeTagsProvider.java ++++ b/net/minecraft/data/tags/BiomeTagsProvider.java +@@ -44,6 +44,7 @@ public class BiomeTagsProvider extends TagsProvider { + .add(Biomes.BIRCH_FOREST) + .add(Biomes.OLD_GROWTH_BIRCH_FOREST) + .add(Biomes.DARK_FOREST) ++ .add(Biomes.PALE_GARDEN) + .add(Biomes.GROVE); + this.tag(BiomeTags.IS_SAVANNA).add(Biomes.SAVANNA).add(Biomes.SAVANNA_PLATEAU).add(Biomes.WINDSWEPT_SAVANNA); + TagsProvider.TagAppender tagAppender = this.tag(BiomeTags.IS_NETHER); +@@ -148,6 +149,7 @@ public class BiomeTagsProvider extends TagsProvider { + .add(Biomes.FLOWER_FOREST) + .add(Biomes.BIRCH_FOREST) + .add(Biomes.DARK_FOREST) ++ .add(Biomes.PALE_GARDEN) + .add(Biomes.OLD_GROWTH_BIRCH_FOREST) + .add(Biomes.OLD_GROWTH_PINE_TAIGA) + .add(Biomes.OLD_GROWTH_SPRUCE_TAIGA) +diff --git a/net/minecraft/data/tags/EntityTypeTagsProvider.java b/net/minecraft/data/tags/EntityTypeTagsProvider.java +index dd8cdc9..38e1d2e 100644 +--- a/net/minecraft/data/tags/EntityTypeTagsProvider.java ++++ b/net/minecraft/data/tags/EntityTypeTagsProvider.java +@@ -170,6 +170,7 @@ public class EntityTypeTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_PLANKS, + Blocks.ACACIA_PLANKS, + Blocks.DARK_OAK_PLANKS, ++ Blocks.PALE_OAK_PLANKS, + Blocks.CRIMSON_PLANKS, + Blocks.WARPED_PLANKS, + Blocks.MANGROVE_PLANKS, +@@ -57,6 +58,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_BUTTON, + Blocks.ACACIA_BUTTON, + Blocks.DARK_OAK_BUTTON, ++ Blocks.PALE_OAK_BUTTON, + Blocks.CRIMSON_BUTTON, + Blocks.WARPED_BUTTON, + Blocks.MANGROVE_BUTTON, +@@ -92,6 +94,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_DOOR, + Blocks.ACACIA_DOOR, + Blocks.DARK_OAK_DOOR, ++ Blocks.PALE_OAK_DOOR, + Blocks.CRIMSON_DOOR, + Blocks.WARPED_DOOR, + Blocks.MANGROVE_DOOR, +@@ -118,6 +121,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_STAIRS, + Blocks.ACACIA_STAIRS, + Blocks.DARK_OAK_STAIRS, ++ Blocks.PALE_OAK_STAIRS, + Blocks.CRIMSON_STAIRS, + Blocks.WARPED_STAIRS, + Blocks.MANGROVE_STAIRS, +@@ -132,6 +136,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_SLAB, + Blocks.ACACIA_SLAB, + Blocks.DARK_OAK_SLAB, ++ Blocks.PALE_OAK_SLAB, + Blocks.CRIMSON_SLAB, + Blocks.WARPED_SLAB, + Blocks.MANGROVE_SLAB, +@@ -143,6 +148,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.OAK_FENCE, + Blocks.ACACIA_FENCE, + Blocks.DARK_OAK_FENCE, ++ Blocks.PALE_OAK_FENCE, + Blocks.SPRUCE_FENCE, + Blocks.BIRCH_FENCE, + Blocks.JUNGLE_FENCE, +@@ -173,6 +179,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_SAPLING, + Blocks.ACACIA_SAPLING, + Blocks.DARK_OAK_SAPLING, ++ Blocks.PALE_OAK_SAPLING, + Blocks.AZALEA, + Blocks.FLOWERING_AZALEA, + Blocks.MANGROVE_PROPAGULE, +@@ -180,6 +187,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + ); + this.tag(BlockTags.BAMBOO_BLOCKS).add(Blocks.BAMBOO_BLOCK, Blocks.STRIPPED_BAMBOO_BLOCK); + this.tag(BlockTags.DARK_OAK_LOGS).add(Blocks.DARK_OAK_LOG, Blocks.DARK_OAK_WOOD, Blocks.STRIPPED_DARK_OAK_LOG, Blocks.STRIPPED_DARK_OAK_WOOD); ++ this.tag(BlockTags.PALE_OAK_LOGS).add(Blocks.PALE_OAK_LOG, Blocks.PALE_OAK_WOOD, Blocks.STRIPPED_PALE_OAK_LOG, Blocks.STRIPPED_PALE_OAK_WOOD); + this.tag(BlockTags.OAK_LOGS).add(Blocks.OAK_LOG, Blocks.OAK_WOOD, Blocks.STRIPPED_OAK_LOG, Blocks.STRIPPED_OAK_WOOD); + this.tag(BlockTags.ACACIA_LOGS).add(Blocks.ACACIA_LOG, Blocks.ACACIA_WOOD, Blocks.STRIPPED_ACACIA_LOG, Blocks.STRIPPED_ACACIA_WOOD); + this.tag(BlockTags.BIRCH_LOGS).add(Blocks.BIRCH_LOG, Blocks.BIRCH_WOOD, Blocks.STRIPPED_BIRCH_LOG, Blocks.STRIPPED_BIRCH_WOOD); +@@ -191,6 +199,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + this.tag(BlockTags.CHERRY_LOGS).add(Blocks.CHERRY_LOG, Blocks.CHERRY_WOOD, Blocks.STRIPPED_CHERRY_LOG, Blocks.STRIPPED_CHERRY_WOOD); + this.tag(BlockTags.LOGS_THAT_BURN) + .addTag(BlockTags.DARK_OAK_LOGS) ++ .addTag(BlockTags.PALE_OAK_LOGS) + .addTag(BlockTags.OAK_LOGS) + .addTag(BlockTags.ACACIA_LOGS) + .addTag(BlockTags.BIRCH_LOGS) +@@ -205,6 +214,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + .add(Blocks.JUNGLE_LOG) + .add(Blocks.SPRUCE_LOG) + .add(Blocks.DARK_OAK_LOG) ++ .add(Blocks.PALE_OAK_LOG) + .add(Blocks.MANGROVE_LOG) + .add(Blocks.CHERRY_LOG); + this.tag(BlockTags.LOGS).addTag(BlockTags.LOGS_THAT_BURN).addTag(BlockTags.CRIMSON_STEMS).addTag(BlockTags.WARPED_STEMS); +@@ -212,6 +222,8 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + this.tag(BlockTags.SMALL_FLOWERS) + .add( + Blocks.DANDELION, ++ Blocks.OPEN_EYEBLOSSOM, ++ Blocks.CLOSED_EYEBLOSSOM, + Blocks.POPPY, + Blocks.BLUE_ORCHID, + Blocks.ALLIUM, +@@ -235,6 +247,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.MYCELIUM, + Blocks.ROOTED_DIRT, + Blocks.MOSS_BLOCK, ++ Blocks.PALE_MOSS_BLOCK, + Blocks.MUD, + Blocks.MUDDY_MANGROVE_ROOTS + ); +@@ -263,6 +276,8 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + this.tag(BlockTags.FLOWER_POTS) + .add( + Blocks.FLOWER_POT, ++ Blocks.POTTED_OPEN_EYEBLOSSOM, ++ Blocks.POTTED_CLOSED_EYEBLOSSOM, + Blocks.POTTED_POPPY, + Blocks.POTTED_BLUE_ORCHID, + Blocks.POTTED_ALLIUM, +@@ -279,6 +294,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.POTTED_JUNGLE_SAPLING, + Blocks.POTTED_ACACIA_SAPLING, + Blocks.POTTED_DARK_OAK_SAPLING, ++ Blocks.POTTED_PALE_OAK_SAPLING, + Blocks.POTTED_RED_MUSHROOM, + Blocks.POTTED_BROWN_MUSHROOM, + Blocks.POTTED_DEAD_BUSH, +@@ -341,6 +357,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_PRESSURE_PLATE, + Blocks.ACACIA_PRESSURE_PLATE, + Blocks.DARK_OAK_PRESSURE_PLATE, ++ Blocks.PALE_OAK_PRESSURE_PLATE, + Blocks.CRIMSON_PRESSURE_PLATE, + Blocks.WARPED_PRESSURE_PLATE, + Blocks.MANGROVE_PRESSURE_PLATE, +@@ -480,7 +497,8 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.MUD_BRICK_WALL, + Blocks.TUFF_WALL, + Blocks.POLISHED_TUFF_WALL, +- Blocks.TUFF_BRICK_WALL ++ Blocks.TUFF_BRICK_WALL, ++ Blocks.RESIN_BRICK_WALL + ); + this.tag(BlockTags.CORAL_PLANTS).add(Blocks.TUBE_CORAL, Blocks.BRAIN_CORAL, Blocks.BUBBLE_CORAL, Blocks.FIRE_CORAL, Blocks.HORN_CORAL); + this.tag(BlockTags.CORALS) +@@ -500,6 +518,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_LEAVES, + Blocks.OAK_LEAVES, + Blocks.SPRUCE_LEAVES, ++ Blocks.PALE_OAK_LEAVES, + Blocks.DARK_OAK_LEAVES, + Blocks.ACACIA_LEAVES, + Blocks.BIRCH_LEAVES, +@@ -534,6 +553,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.ACACIA_TRAPDOOR, + Blocks.BIRCH_TRAPDOOR, + Blocks.DARK_OAK_TRAPDOOR, ++ Blocks.PALE_OAK_TRAPDOOR, + Blocks.JUNGLE_TRAPDOOR, + Blocks.OAK_TRAPDOOR, + Blocks.SPRUCE_TRAPDOOR, +@@ -569,6 +589,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.ACACIA_SIGN, + Blocks.JUNGLE_SIGN, + Blocks.DARK_OAK_SIGN, ++ Blocks.PALE_OAK_SIGN, + Blocks.CRIMSON_SIGN, + Blocks.WARPED_SIGN, + Blocks.MANGROVE_SIGN, +@@ -583,6 +604,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.ACACIA_WALL_SIGN, + Blocks.JUNGLE_WALL_SIGN, + Blocks.DARK_OAK_WALL_SIGN, ++ Blocks.PALE_OAK_WALL_SIGN, + Blocks.CRIMSON_WALL_SIGN, + Blocks.WARPED_WALL_SIGN, + Blocks.MANGROVE_WALL_SIGN, +@@ -599,6 +621,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.CHERRY_HANGING_SIGN, + Blocks.JUNGLE_HANGING_SIGN, + Blocks.DARK_OAK_HANGING_SIGN, ++ Blocks.PALE_OAK_HANGING_SIGN, + Blocks.CRIMSON_HANGING_SIGN, + Blocks.WARPED_HANGING_SIGN, + Blocks.MANGROVE_HANGING_SIGN, +@@ -613,6 +636,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.CHERRY_WALL_HANGING_SIGN, + Blocks.JUNGLE_WALL_HANGING_SIGN, + Blocks.DARK_OAK_WALL_HANGING_SIGN, ++ Blocks.PALE_OAK_WALL_HANGING_SIGN, + Blocks.CRIMSON_WALL_HANGING_SIGN, + Blocks.WARPED_WALL_HANGING_SIGN, + Blocks.MANGROVE_WALL_HANGING_SIGN, +@@ -776,6 +800,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.ACACIA_FENCE_GATE, + Blocks.BIRCH_FENCE_GATE, + Blocks.DARK_OAK_FENCE_GATE, ++ Blocks.PALE_OAK_FENCE_GATE, + Blocks.JUNGLE_FENCE_GATE, + Blocks.OAK_FENCE_GATE, + Blocks.SPRUCE_FENCE_GATE, +@@ -807,6 +832,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + .addTag(BlockTags.TERRACOTTA) + .addTag(BlockTags.IRON_ORES) + .addTag(BlockTags.COPPER_ORES) ++ .addTag(BlockTags.SNOW) + .add( + Blocks.WATER, + Blocks.GRAVEL, +@@ -814,7 +840,6 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.SANDSTONE, + Blocks.RED_SANDSTONE, + Blocks.CALCITE, +- Blocks.SNOW, + Blocks.PACKED_ICE, + Blocks.RAW_IRON_BLOCK, + Blocks.RAW_COPPER_BLOCK +@@ -872,7 +897,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + .add(Blocks.POWDER_SNOW, Blocks.SCULK_VEIN, Blocks.GLOW_LICHEN, Blocks.LILY_PAD, Blocks.SMALL_AMETHYST_BUD, Blocks.PINK_PETALS); + this.tag(BlockTags.COMBINATION_STEP_SOUND_BLOCKS) + .addTag(BlockTags.WOOL_CARPETS) +- .add(Blocks.MOSS_CARPET, Blocks.SNOW, Blocks.NETHER_SPROUTS, Blocks.WARPED_ROOTS, Blocks.CRIMSON_ROOTS); ++ .add(Blocks.MOSS_CARPET, Blocks.PALE_MOSS_CARPET, Blocks.SNOW, Blocks.NETHER_SPROUTS, Blocks.WARPED_ROOTS, Blocks.CRIMSON_ROOTS, Blocks.RESIN_CLUMP); + this.tag(BlockTags.DRIPSTONE_REPLACEABLE).addTag(BlockTags.BASE_STONE_OVERWORLD); + this.tag(BlockTags.CAVE_VINES).add(Blocks.CAVE_VINES_PLANT).add(Blocks.CAVE_VINES); + this.tag(BlockTags.MOSS_REPLACEABLE).addTag(BlockTags.BASE_STONE_OVERWORLD).addTag(BlockTags.CAVE_VINES).addTag(BlockTags.DIRT); +@@ -978,7 +1003,8 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + .addTag(BlockTags.ALL_HANGING_SIGNS) + .add(Blocks.BAMBOO_MOSAIC, Blocks.BAMBOO_MOSAIC_SLAB, Blocks.BAMBOO_MOSAIC_STAIRS) + .addTag(BlockTags.BAMBOO_BLOCKS) +- .add(Blocks.CHISELED_BOOKSHELF); ++ .add(Blocks.CHISELED_BOOKSHELF) ++ .add(Blocks.CREAKING_HEART); + this.tag(BlockTags.MINEABLE_WITH_HOE) + .add( + Blocks.NETHER_WART_BLOCK, +@@ -992,6 +1018,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.JUNGLE_LEAVES, + Blocks.OAK_LEAVES, + Blocks.SPRUCE_LEAVES, ++ Blocks.PALE_OAK_LEAVES, + Blocks.DARK_OAK_LEAVES, + Blocks.ACACIA_LEAVES, + Blocks.BIRCH_LEAVES, +@@ -1002,6 +1029,8 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.CALIBRATED_SCULK_SENSOR, + Blocks.MOSS_BLOCK, + Blocks.MOSS_CARPET, ++ Blocks.PALE_MOSS_BLOCK, ++ Blocks.PALE_MOSS_CARPET, + Blocks.SCULK, + Blocks.SCULK_CATALYST, + Blocks.SCULK_VEIN, +@@ -1028,6 +1057,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.NETHER_GOLD_ORE, + Blocks.LAPIS_ORE, + Blocks.DEEPSLATE_LAPIS_ORE, ++ Blocks.RESIN_BRICKS, + Blocks.LAPIS_BLOCK, + Blocks.DISPENSER, + Blocks.SANDSTONE, +@@ -1396,7 +1426,12 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.WAXED_EXPOSED_COPPER_TRAPDOOR, + Blocks.WAXED_WEATHERED_COPPER_TRAPDOOR, + Blocks.WAXED_OXIDIZED_COPPER_TRAPDOOR, +- Blocks.HEAVY_CORE ++ Blocks.HEAVY_CORE, ++ Blocks.RESIN_BRICKS, ++ Blocks.RESIN_BRICK_SLAB, ++ Blocks.RESIN_BRICK_WALL, ++ Blocks.RESIN_BRICK_STAIRS, ++ Blocks.CHISELED_RESIN_BRICKS + ); + this.tag(BlockTags.MINEABLE_WITH_SHOVEL) + .add( +@@ -1459,7 +1494,6 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.CAVE_VINES, + Blocks.CAVE_VINES_PLANT, + Blocks.SPORE_BLOSSOM, +- Blocks.MOSS_CARPET, + Blocks.PINK_PETALS, + Blocks.BIG_DRIPLEAF, + Blocks.BIG_DRIPLEAF_STEM, +@@ -1572,15 +1606,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.WAXED_COPPER_TRAPDOOR, + Blocks.WAXED_EXPOSED_COPPER_TRAPDOOR, + Blocks.WAXED_WEATHERED_COPPER_TRAPDOOR, +- Blocks.WAXED_OXIDIZED_COPPER_TRAPDOOR, +- Blocks.COPPER_DOOR, +- Blocks.EXPOSED_COPPER_DOOR, +- Blocks.WEATHERED_COPPER_DOOR, +- Blocks.OXIDIZED_COPPER_DOOR, +- Blocks.WAXED_COPPER_DOOR, +- Blocks.WAXED_EXPOSED_COPPER_DOOR, +- Blocks.WAXED_WEATHERED_COPPER_DOOR, +- Blocks.WAXED_OXIDIZED_COPPER_DOOR ++ Blocks.WAXED_OXIDIZED_COPPER_TRAPDOOR + ); + this.tag(BlockTags.INCORRECT_FOR_NETHERITE_TOOL); + this.tag(BlockTags.INCORRECT_FOR_DIAMOND_TOOL); +@@ -1760,6 +1786,7 @@ public class VanillaBlockTagsProvider extends IntrinsicHolderTagsProvider + Blocks.COARSE_DIRT, + Blocks.ROOTED_DIRT, + Blocks.MOSS_BLOCK, ++ Blocks.PALE_MOSS_BLOCK, + Blocks.MUD, + Blocks.MUDDY_MANGROVE_ROOTS + ); +diff --git a/net/minecraft/data/tags/VanillaItemTagsProvider.java b/net/minecraft/data/tags/VanillaItemTagsProvider.java +index 03f2a99..7c7a1b4 100644 +--- a/net/minecraft/data/tags/VanillaItemTagsProvider.java ++++ b/net/minecraft/data/tags/VanillaItemTagsProvider.java +@@ -35,6 +35,7 @@ public class VanillaItemTagsProvider extends ItemTagsProvider { + this.copy(BlockTags.BAMBOO_BLOCKS, ItemTags.BAMBOO_BLOCKS); + this.copy(BlockTags.OAK_LOGS, ItemTags.OAK_LOGS); + this.copy(BlockTags.DARK_OAK_LOGS, ItemTags.DARK_OAK_LOGS); ++ this.copy(BlockTags.PALE_OAK_LOGS, ItemTags.PALE_OAK_LOGS); + this.copy(BlockTags.BIRCH_LOGS, ItemTags.BIRCH_LOGS); + this.copy(BlockTags.ACACIA_LOGS, ItemTags.ACACIA_LOGS); + this.copy(BlockTags.SPRUCE_LOGS, ItemTags.SPRUCE_LOGS); +@@ -103,6 +104,7 @@ public class VanillaItemTagsProvider extends ItemTagsProvider { + Items.JUNGLE_BOAT, + Items.ACACIA_BOAT, + Items.DARK_OAK_BOAT, ++ Items.PALE_OAK_BOAT, + Items.MANGROVE_BOAT, + Items.BAMBOO_RAFT, + Items.CHERRY_BOAT +@@ -136,6 +138,7 @@ public class VanillaItemTagsProvider extends ItemTagsProvider { + Items.JUNGLE_CHEST_BOAT, + Items.ACACIA_CHEST_BOAT, + Items.DARK_OAK_CHEST_BOAT, ++ Items.PALE_OAK_CHEST_BOAT, + Items.MANGROVE_CHEST_BOAT, + Items.BAMBOO_CHEST_RAFT, + Items.CHERRY_CHEST_BOAT +@@ -364,7 +367,8 @@ public class VanillaItemTagsProvider extends ItemTagsProvider { + .add(Items.NETHERITE_INGOT) + .add(Items.REDSTONE) + .add(Items.QUARTZ) +- .add(Items.AMETHYST_SHARD); ++ .add(Items.AMETHYST_SHARD) ++ .add(Items.RESIN_CLUMP); + this.tag(ItemTags.TRIM_TEMPLATES) + .add(Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE) + .add(Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE) +diff --git a/net/minecraft/data/worldgen/biome/BiomeData.java b/net/minecraft/data/worldgen/biome/BiomeData.java +index d088a55..74febb7 100644 +--- a/net/minecraft/data/worldgen/biome/BiomeData.java ++++ b/net/minecraft/data/worldgen/biome/BiomeData.java +@@ -24,6 +24,7 @@ public abstract class BiomeData { + context.register(Biomes.FLOWER_FOREST, OverworldBiomes.forest(holderGetter, holderGetter1, false, false, true)); + context.register(Biomes.BIRCH_FOREST, OverworldBiomes.forest(holderGetter, holderGetter1, true, false, false)); + context.register(Biomes.DARK_FOREST, OverworldBiomes.darkForest(holderGetter, holderGetter1, false)); ++ context.register(Biomes.PALE_GARDEN, OverworldBiomes.darkForest(holderGetter, holderGetter1, true)); + context.register(Biomes.OLD_GROWTH_BIRCH_FOREST, OverworldBiomes.forest(holderGetter, holderGetter1, true, true, false)); + context.register(Biomes.OLD_GROWTH_PINE_TAIGA, OverworldBiomes.oldGrowthTaiga(holderGetter, holderGetter1, false)); + context.register(Biomes.OLD_GROWTH_SPRUCE_TAIGA, OverworldBiomes.oldGrowthTaiga(holderGetter, holderGetter1, true)); +diff --git a/net/minecraft/data/worldgen/biome/OverworldBiomes.java b/net/minecraft/data/worldgen/biome/OverworldBiomes.java +index b5c864b..1ca6e38 100644 +--- a/net/minecraft/data/worldgen/biome/OverworldBiomes.java ++++ b/net/minecraft/data/worldgen/biome/OverworldBiomes.java +@@ -573,12 +573,17 @@ public class OverworldBiomes { + ); + if (!flag) { + BiomeDefaultFeatures.addForestFlowers(builder1); ++ } else { ++ builder1.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, VegetationPlacements.PALE_MOSS_PATCH); ++ builder1.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, VegetationPlacements.PALE_GARDEN_FLOWERS); + } + + BiomeDefaultFeatures.addDefaultOres(builder1); + BiomeDefaultFeatures.addDefaultSoftDisks(builder1); + if (!flag) { + BiomeDefaultFeatures.addDefaultFlowers(builder1); ++ } else { ++ builder1.addFeature(GenerationStep.Decoration.VEGETAL_DECORATION, VegetationPlacements.FLOWER_PALE_GARDEN); + } + + BiomeDefaultFeatures.addForestGrass(builder1); +@@ -587,7 +592,6 @@ public class OverworldBiomes { + } + + BiomeDefaultFeatures.addDefaultExtraVegetation(builder1); +- Music music = Musics.createGameMusic(SoundEvents.MUSIC_BIOME_FOREST); + return new Biome.BiomeBuilder() + .hasPrecipitation(true) + .temperature(0.7F) +@@ -602,7 +606,7 @@ public class OverworldBiomes { + .grassColorOverride(7832178) + .foliageColorOverride(8883574) + .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) +- .backgroundMusic(music) ++ .silenceAllBackgroundMusic() + .build() + : new BiomeSpecialEffects.Builder() + .waterColor(4159204) +@@ -611,7 +615,7 @@ public class OverworldBiomes { + .skyColor(calculateSkyColor(0.7F)) + .grassColorModifier(BiomeSpecialEffects.GrassColorModifier.DARK_FOREST) + .ambientMoodSound(AmbientMoodSettings.LEGACY_CAVE_SETTINGS) +- .backgroundMusic(music) ++ .backgroundMusic(Musics.createGameMusic(SoundEvents.MUSIC_BIOME_FOREST)) + .build() + ) + .mobSpawnSettings(builder.build()) +diff --git a/net/minecraft/data/worldgen/features/CaveFeatures.java b/net/minecraft/data/worldgen/features/CaveFeatures.java +index 454f435..d2a072d 100644 +--- a/net/minecraft/data/worldgen/features/CaveFeatures.java ++++ b/net/minecraft/data/worldgen/features/CaveFeatures.java +@@ -23,7 +23,7 @@ import net.minecraft.world.level.block.Block; + import net.minecraft.world.level.block.Blocks; + import net.minecraft.world.level.block.CaveVines; + import net.minecraft.world.level.block.CaveVinesBlock; +-import net.minecraft.world.level.block.MultifaceBlock; ++import net.minecraft.world.level.block.MultifaceSpreadeableBlock; + import net.minecraft.world.level.block.SmallDripleafBlock; + import net.minecraft.world.level.block.state.BlockState; + import net.minecraft.world.level.block.state.properties.BlockStateProperties; +@@ -210,13 +210,13 @@ public class CaveFeatures { + ) + ); + FeatureUtils.register(context, UNDERWATER_MAGMA, Feature.UNDERWATER_MAGMA, new UnderwaterMagmaConfiguration(5, 1, 0.5F)); +- MultifaceBlock multifaceBlock = (MultifaceBlock)Blocks.GLOW_LICHEN; ++ MultifaceSpreadeableBlock multifaceSpreadeableBlock = (MultifaceSpreadeableBlock)Blocks.GLOW_LICHEN; + FeatureUtils.register( + context, + GLOW_LICHEN, + Feature.MULTIFACE_GROWTH, + new MultifaceGrowthConfiguration( +- multifaceBlock, ++ multifaceSpreadeableBlock, + 20, + false, + true, +@@ -475,13 +475,13 @@ public class CaveFeatures { + ); + FeatureUtils.register(context, SCULK_PATCH_DEEP_DARK, Feature.SCULK_PATCH, new SculkPatchConfiguration(10, 32, 64, 0, 1, ConstantInt.of(0), 0.5F)); + FeatureUtils.register(context, SCULK_PATCH_ANCIENT_CITY, Feature.SCULK_PATCH, new SculkPatchConfiguration(10, 32, 64, 0, 1, UniformInt.of(1, 3), 0.5F)); +- MultifaceBlock multifaceBlock1 = (MultifaceBlock)Blocks.SCULK_VEIN; ++ MultifaceSpreadeableBlock multifaceSpreadeableBlock1 = (MultifaceSpreadeableBlock)Blocks.SCULK_VEIN; + FeatureUtils.register( + context, + SCULK_VEIN, + Feature.MULTIFACE_GROWTH, + new MultifaceGrowthConfiguration( +- multifaceBlock1, ++ multifaceSpreadeableBlock1, + 20, + true, + true, +diff --git a/net/minecraft/data/worldgen/features/TreeFeatures.java b/net/minecraft/data/worldgen/features/TreeFeatures.java +index 7101581..d09ff86 100644 +--- a/net/minecraft/data/worldgen/features/TreeFeatures.java ++++ b/net/minecraft/data/worldgen/features/TreeFeatures.java +@@ -74,6 +74,7 @@ public class TreeFeatures { + public static final ResourceKey> OAK = FeatureUtils.createKey("oak"); + public static final ResourceKey> DARK_OAK = FeatureUtils.createKey("dark_oak"); + public static final ResourceKey> PALE_OAK = FeatureUtils.createKey("pale_oak"); ++ public static final ResourceKey> PALE_OAK_BONEMEAL = FeatureUtils.createKey("pale_oak_bonemeal"); + public static final ResourceKey> PALE_OAK_CREAKING = FeatureUtils.createKey("pale_oak_creaking"); + public static final ResourceKey> BIRCH = FeatureUtils.createKey("birch"); + public static final ResourceKey> ACACIA = FeatureUtils.createKey("acacia"); +@@ -349,6 +350,20 @@ public class TreeFeatures { + .ignoreVines() + .build() + ); ++ FeatureUtils.register( ++ context, ++ PALE_OAK_BONEMEAL, ++ Feature.TREE, ++ new TreeConfiguration.TreeConfigurationBuilder( ++ BlockStateProvider.simple(Blocks.PALE_OAK_LOG), ++ new DarkOakTrunkPlacer(6, 2, 1), ++ BlockStateProvider.simple(Blocks.PALE_OAK_LEAVES), ++ new DarkOakFoliagePlacer(ConstantInt.of(0), ConstantInt.of(0)), ++ new ThreeLayersFeatureSize(1, 1, 0, 1, 2, OptionalInt.empty()) ++ ) ++ .ignoreVines() ++ .build() ++ ); + FeatureUtils.register( + context, + PALE_OAK_CREAKING, +diff --git a/net/minecraft/data/worldgen/features/VegetationFeatures.java b/net/minecraft/data/worldgen/features/VegetationFeatures.java +index de5f151..e4ae6a5 100644 +--- a/net/minecraft/data/worldgen/features/VegetationFeatures.java ++++ b/net/minecraft/data/worldgen/features/VegetationFeatures.java +@@ -70,10 +70,13 @@ public class VegetationFeatures { + public static final ResourceKey> FLOWER_PLAIN = FeatureUtils.createKey("flower_plain"); + public static final ResourceKey> FLOWER_MEADOW = FeatureUtils.createKey("flower_meadow"); + public static final ResourceKey> FLOWER_CHERRY = FeatureUtils.createKey("flower_cherry"); ++ public static final ResourceKey> FLOWER_PALE_GARDEN = FeatureUtils.createKey("flower_pale_garden"); + public static final ResourceKey> FOREST_FLOWERS = FeatureUtils.createKey("forest_flowers"); ++ public static final ResourceKey> PALE_FOREST_FLOWERS = FeatureUtils.createKey("pale_forest_flowers"); + public static final ResourceKey> DARK_FOREST_VEGETATION = FeatureUtils.createKey("dark_forest_vegetation"); + public static final ResourceKey> PALE_GARDEN_VEGETATION = FeatureUtils.createKey("pale_garden_vegetation"); + public static final ResourceKey> PALE_MOSS_VEGETATION = FeatureUtils.createKey("pale_moss_vegetation"); ++ public static final ResourceKey> PALE_MOSS_PATCH = FeatureUtils.createKey("pale_moss_patch"); + public static final ResourceKey> PALE_MOSS_PATCH_BONEMEAL = FeatureUtils.createKey("pale_moss_patch_bonemeal"); + public static final ResourceKey> TREES_FLOWER_FOREST = FeatureUtils.createKey("trees_flower_forest"); + public static final ResourceKey> MEADOW_TREES = FeatureUtils.createKey("meadow_trees"); +@@ -435,6 +438,17 @@ public class VegetationFeatures { + 96, 6, 2, PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(new WeightedStateProvider(builder))) + ) + ); ++ FeatureUtils.register( ++ context, ++ FLOWER_PALE_GARDEN, ++ Feature.FLOWER, ++ new RandomPatchConfiguration( ++ 1, ++ 0, ++ 0, ++ PlacementUtils.onlyWhenEmpty(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.CLOSED_EYEBLOSSOM), true)) ++ ) ++ ); + FeatureUtils.register( + context, + FOREST_FLOWERS, +@@ -462,6 +476,12 @@ public class VegetationFeatures { + ) + ) + ); ++ FeatureUtils.register( ++ context, ++ PALE_FOREST_FLOWERS, ++ Feature.RANDOM_PATCH, ++ FeatureUtils.simplePatchConfiguration(Feature.SIMPLE_BLOCK, new SimpleBlockConfiguration(BlockStateProvider.simple(Blocks.CLOSED_EYEBLOSSOM), true)) ++ ); + FeatureUtils.register( + context, + DARK_FOREST_VEGETATION, +@@ -481,7 +501,7 @@ public class VegetationFeatures { + context, + PALE_GARDEN_VEGETATION, + Feature.RANDOM_SELECTOR, +- new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature(orThrow7, 0.2F), new WeightedPlacedFeature(orThrow6, 0.8F)), orThrow6) ++ new RandomFeatureConfiguration(List.of(new WeightedPlacedFeature(orThrow7, 0.1F), new WeightedPlacedFeature(orThrow6, 0.9F)), orThrow6) + ); + FeatureUtils.register( + context, +@@ -491,11 +511,28 @@ public class VegetationFeatures { + new WeightedStateProvider( + SimpleWeightedRandomList.builder() + .add(Blocks.PALE_MOSS_CARPET.defaultBlockState(), 25) +- .add(Blocks.SHORT_GRASS.defaultBlockState(), 50) ++ .add(Blocks.SHORT_GRASS.defaultBlockState(), 25) + .add(Blocks.TALL_GRASS.defaultBlockState(), 10) + ) + ) + ); ++ FeatureUtils.register( ++ context, ++ PALE_MOSS_PATCH, ++ Feature.VEGETATION_PATCH, ++ new VegetationPatchConfiguration( ++ BlockTags.MOSS_REPLACEABLE, ++ BlockStateProvider.simple(Blocks.PALE_MOSS_BLOCK), ++ PlacementUtils.inlinePlaced(holderGetter.getOrThrow(PALE_MOSS_VEGETATION)), ++ CaveSurface.FLOOR, ++ ConstantInt.of(1), ++ 0.0F, ++ 5, ++ 0.3F, ++ UniformInt.of(2, 4), ++ 0.75F ++ ) ++ ); + FeatureUtils.register( + context, + PALE_MOSS_PATCH_BONEMEAL, +diff --git a/net/minecraft/data/worldgen/placement/PlacementUtils.java b/net/minecraft/data/worldgen/placement/PlacementUtils.java +index 0ba01d9..21fbc10 100644 +--- a/net/minecraft/data/worldgen/placement/PlacementUtils.java ++++ b/net/minecraft/data/worldgen/placement/PlacementUtils.java +@@ -28,6 +28,7 @@ import net.minecraft.world.level.levelgen.placement.PlacementModifier; + + public class PlacementUtils { + public static final PlacementModifier HEIGHTMAP = HeightmapPlacement.onHeightmap(Heightmap.Types.MOTION_BLOCKING); ++ public static final PlacementModifier HEIGHTMAP_NO_LEAVES = HeightmapPlacement.onHeightmap(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES); + public static final PlacementModifier HEIGHTMAP_TOP_SOLID = HeightmapPlacement.onHeightmap(Heightmap.Types.OCEAN_FLOOR_WG); + public static final PlacementModifier HEIGHTMAP_WORLD_SURFACE = HeightmapPlacement.onHeightmap(Heightmap.Types.WORLD_SURFACE_WG); + public static final PlacementModifier HEIGHTMAP_OCEAN_FLOOR = HeightmapPlacement.onHeightmap(Heightmap.Types.OCEAN_FLOOR); +diff --git a/net/minecraft/data/worldgen/placement/VegetationPlacements.java b/net/minecraft/data/worldgen/placement/VegetationPlacements.java +index d91a44d..edf69ba 100644 +--- a/net/minecraft/data/worldgen/placement/VegetationPlacements.java ++++ b/net/minecraft/data/worldgen/placement/VegetationPlacements.java +@@ -80,11 +80,14 @@ public class VegetationPlacements { + public static final ResourceKey FLOWER_PLAINS = PlacementUtils.createKey("flower_plains"); + public static final ResourceKey FLOWER_MEADOW = PlacementUtils.createKey("flower_meadow"); + public static final ResourceKey FLOWER_CHERRY = PlacementUtils.createKey("flower_cherry"); ++ public static final ResourceKey FLOWER_PALE_GARDEN = PlacementUtils.createKey("flower_pale_garden"); + public static final ResourceKey TREES_PLAINS = PlacementUtils.createKey("trees_plains"); + public static final ResourceKey DARK_FOREST_VEGETATION = PlacementUtils.createKey("dark_forest_vegetation"); + public static final ResourceKey PALE_GARDEN_VEGETATION = PlacementUtils.createKey("pale_garden_vegetation"); + public static final ResourceKey FLOWER_FOREST_FLOWERS = PlacementUtils.createKey("flower_forest_flowers"); + public static final ResourceKey FOREST_FLOWERS = PlacementUtils.createKey("forest_flowers"); ++ public static final ResourceKey PALE_GARDEN_FLOWERS = PlacementUtils.createKey("pale_garden_flowers"); ++ public static final ResourceKey PALE_MOSS_PATCH = PlacementUtils.createKey("pale_moss_patch"); + public static final ResourceKey TREES_FLOWER_FOREST = PlacementUtils.createKey("trees_flower_forest"); + public static final ResourceKey TREES_MEADOW = PlacementUtils.createKey("trees_meadow"); + public static final ResourceKey TREES_CHERRY = PlacementUtils.createKey("trees_cherry"); +@@ -176,31 +179,34 @@ public class VegetationPlacements { + Holder> orThrow22 = holderGetter.getOrThrow(VegetationFeatures.FLOWER_PLAIN); + Holder> orThrow23 = holderGetter.getOrThrow(VegetationFeatures.FLOWER_MEADOW); + Holder> orThrow24 = holderGetter.getOrThrow(VegetationFeatures.FLOWER_CHERRY); +- Holder> orThrow25 = holderGetter.getOrThrow(VegetationFeatures.TREES_PLAINS); +- Holder> orThrow26 = holderGetter.getOrThrow(VegetationFeatures.DARK_FOREST_VEGETATION); +- Holder> orThrow27 = holderGetter.getOrThrow(VegetationFeatures.PALE_GARDEN_VEGETATION); +- Holder> orThrow28 = holderGetter.getOrThrow(VegetationFeatures.FOREST_FLOWERS); +- Holder> orThrow29 = holderGetter.getOrThrow(VegetationFeatures.TREES_FLOWER_FOREST); +- Holder> orThrow30 = holderGetter.getOrThrow(VegetationFeatures.MEADOW_TREES); +- Holder> orThrow31 = holderGetter.getOrThrow(VegetationFeatures.TREES_TAIGA); +- Holder> orThrow32 = holderGetter.getOrThrow(VegetationFeatures.TREES_GROVE); +- Holder> orThrow33 = holderGetter.getOrThrow(TreeFeatures.OAK); +- Holder> orThrow34 = holderGetter.getOrThrow(TreeFeatures.SPRUCE); +- Holder> orThrow35 = holderGetter.getOrThrow(TreeFeatures.CHERRY_BEES_005); +- Holder> orThrow36 = holderGetter.getOrThrow(TreeFeatures.SWAMP_OAK); +- Holder> orThrow37 = holderGetter.getOrThrow(VegetationFeatures.TREES_SAVANNA); +- Holder> orThrow38 = holderGetter.getOrThrow(VegetationFeatures.BIRCH_TALL); +- Holder> orThrow39 = holderGetter.getOrThrow(TreeFeatures.BIRCH_BEES_0002); +- Holder> orThrow40 = holderGetter.getOrThrow(VegetationFeatures.TREES_WINDSWEPT_HILLS); +- Holder> orThrow41 = holderGetter.getOrThrow(VegetationFeatures.TREES_WATER); +- Holder> orThrow42 = holderGetter.getOrThrow(VegetationFeatures.TREES_BIRCH_AND_OAK); +- Holder> orThrow43 = holderGetter.getOrThrow(VegetationFeatures.TREES_SPARSE_JUNGLE); +- Holder> orThrow44 = holderGetter.getOrThrow(VegetationFeatures.TREES_OLD_GROWTH_SPRUCE_TAIGA); +- Holder> orThrow45 = holderGetter.getOrThrow(VegetationFeatures.TREES_OLD_GROWTH_PINE_TAIGA); +- Holder> orThrow46 = holderGetter.getOrThrow(VegetationFeatures.TREES_JUNGLE); +- Holder> orThrow47 = holderGetter.getOrThrow(VegetationFeatures.BAMBOO_VEGETATION); +- Holder> orThrow48 = holderGetter.getOrThrow(VegetationFeatures.MUSHROOM_ISLAND_VEGETATION); +- Holder> orThrow49 = holderGetter.getOrThrow(VegetationFeatures.MANGROVE_VEGETATION); ++ Holder> orThrow25 = holderGetter.getOrThrow(VegetationFeatures.FLOWER_PALE_GARDEN); ++ Holder> orThrow26 = holderGetter.getOrThrow(VegetationFeatures.TREES_PLAINS); ++ Holder> orThrow27 = holderGetter.getOrThrow(VegetationFeatures.DARK_FOREST_VEGETATION); ++ Holder> orThrow28 = holderGetter.getOrThrow(VegetationFeatures.PALE_GARDEN_VEGETATION); ++ Holder> orThrow29 = holderGetter.getOrThrow(VegetationFeatures.FOREST_FLOWERS); ++ Holder> orThrow30 = holderGetter.getOrThrow(VegetationFeatures.PALE_FOREST_FLOWERS); ++ Holder> orThrow31 = holderGetter.getOrThrow(VegetationFeatures.PALE_MOSS_PATCH); ++ Holder> orThrow32 = holderGetter.getOrThrow(VegetationFeatures.TREES_FLOWER_FOREST); ++ Holder> orThrow33 = holderGetter.getOrThrow(VegetationFeatures.MEADOW_TREES); ++ Holder> orThrow34 = holderGetter.getOrThrow(VegetationFeatures.TREES_TAIGA); ++ Holder> orThrow35 = holderGetter.getOrThrow(VegetationFeatures.TREES_GROVE); ++ Holder> orThrow36 = holderGetter.getOrThrow(TreeFeatures.OAK); ++ Holder> orThrow37 = holderGetter.getOrThrow(TreeFeatures.SPRUCE); ++ Holder> orThrow38 = holderGetter.getOrThrow(TreeFeatures.CHERRY_BEES_005); ++ Holder> orThrow39 = holderGetter.getOrThrow(TreeFeatures.SWAMP_OAK); ++ Holder> orThrow40 = holderGetter.getOrThrow(VegetationFeatures.TREES_SAVANNA); ++ Holder> orThrow41 = holderGetter.getOrThrow(VegetationFeatures.BIRCH_TALL); ++ Holder> orThrow42 = holderGetter.getOrThrow(TreeFeatures.BIRCH_BEES_0002); ++ Holder> orThrow43 = holderGetter.getOrThrow(VegetationFeatures.TREES_WINDSWEPT_HILLS); ++ Holder> orThrow44 = holderGetter.getOrThrow(VegetationFeatures.TREES_WATER); ++ Holder> orThrow45 = holderGetter.getOrThrow(VegetationFeatures.TREES_BIRCH_AND_OAK); ++ Holder> orThrow46 = holderGetter.getOrThrow(VegetationFeatures.TREES_SPARSE_JUNGLE); ++ Holder> orThrow47 = holderGetter.getOrThrow(VegetationFeatures.TREES_OLD_GROWTH_SPRUCE_TAIGA); ++ Holder> orThrow48 = holderGetter.getOrThrow(VegetationFeatures.TREES_OLD_GROWTH_PINE_TAIGA); ++ Holder> orThrow49 = holderGetter.getOrThrow(VegetationFeatures.TREES_JUNGLE); ++ Holder> orThrow50 = holderGetter.getOrThrow(VegetationFeatures.BAMBOO_VEGETATION); ++ Holder> orThrow51 = holderGetter.getOrThrow(VegetationFeatures.MUSHROOM_ISLAND_VEGETATION); ++ Holder> orThrow52 = holderGetter.getOrThrow(VegetationFeatures.MANGROVE_VEGETATION); + PlacementUtils.register( + context, BAMBOO_LIGHT, orThrow, RarityFilter.onAverageOnceEvery(4), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome() + ); +@@ -402,11 +408,20 @@ public class VegetationPlacements { + BiomeFilter.biome() + ); + PlacementUtils.register(context, FLOWER_MEADOW, orThrow23, InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); ++ PlacementUtils.register( ++ context, ++ FLOWER_PALE_GARDEN, ++ orThrow25, ++ RarityFilter.onAverageOnceEvery(32), ++ InSquarePlacement.spread(), ++ PlacementUtils.HEIGHTMAP, ++ BiomeFilter.biome() ++ ); + PlacementModifier placementModifier = SurfaceWaterDepthFilter.forMaxDepth(0); + PlacementUtils.register( + context, + TREES_PLAINS, +- orThrow25, ++ orThrow26, + PlacementUtils.countExtra(0, 0.05F, 1), + InSquarePlacement.spread(), + placementModifier, +@@ -417,7 +432,7 @@ public class VegetationPlacements { + PlacementUtils.register( + context, + DARK_FOREST_VEGETATION, +- orThrow26, ++ orThrow27, + CountPlacement.of(16), + InSquarePlacement.spread(), + placementModifier, +@@ -427,7 +442,7 @@ public class VegetationPlacements { + PlacementUtils.register( + context, + PALE_GARDEN_VEGETATION, +- orThrow27, ++ orThrow28, + CountPlacement.of(16), + InSquarePlacement.spread(), + placementModifier, +@@ -437,7 +452,7 @@ public class VegetationPlacements { + PlacementUtils.register( + context, + FLOWER_FOREST_FLOWERS, +- orThrow28, ++ orThrow29, + RarityFilter.onAverageOnceEvery(7), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP, +@@ -447,24 +462,36 @@ public class VegetationPlacements { + PlacementUtils.register( + context, + FOREST_FLOWERS, +- orThrow28, ++ orThrow29, + RarityFilter.onAverageOnceEvery(7), + InSquarePlacement.spread(), + PlacementUtils.HEIGHTMAP, + CountPlacement.of(ClampedInt.of(UniformInt.of(-3, 1), 0, 1)), + BiomeFilter.biome() + ); +- PlacementUtils.register(context, TREES_FLOWER_FOREST, orThrow29, treePlacement(PlacementUtils.countExtra(6, 0.1F, 1))); +- PlacementUtils.register(context, TREES_MEADOW, orThrow30, treePlacement(RarityFilter.onAverageOnceEvery(100))); +- PlacementUtils.register(context, TREES_CHERRY, orThrow35, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1), Blocks.CHERRY_SAPLING)); +- PlacementUtils.register(context, TREES_TAIGA, orThrow31, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_GROVE, orThrow32, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_BADLANDS, orThrow33, treePlacement(PlacementUtils.countExtra(5, 0.1F, 1), Blocks.OAK_SAPLING)); +- PlacementUtils.register(context, TREES_SNOWY, orThrow34, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1), Blocks.SPRUCE_SAPLING)); ++ PlacementUtils.register( ++ context, ++ PALE_GARDEN_FLOWERS, ++ orThrow30, ++ RarityFilter.onAverageOnceEvery(8), ++ InSquarePlacement.spread(), ++ PlacementUtils.HEIGHTMAP_NO_LEAVES, ++ BiomeFilter.biome() ++ ); ++ PlacementUtils.register( ++ context, PALE_MOSS_PATCH, orThrow31, CountPlacement.of(1), InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP_NO_LEAVES, BiomeFilter.biome() ++ ); ++ PlacementUtils.register(context, TREES_FLOWER_FOREST, orThrow32, treePlacement(PlacementUtils.countExtra(6, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_MEADOW, orThrow33, treePlacement(RarityFilter.onAverageOnceEvery(100))); ++ PlacementUtils.register(context, TREES_CHERRY, orThrow38, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1), Blocks.CHERRY_SAPLING)); ++ PlacementUtils.register(context, TREES_TAIGA, orThrow34, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_GROVE, orThrow35, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_BADLANDS, orThrow36, treePlacement(PlacementUtils.countExtra(5, 0.1F, 1), Blocks.OAK_SAPLING)); ++ PlacementUtils.register(context, TREES_SNOWY, orThrow37, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1), Blocks.SPRUCE_SAPLING)); + PlacementUtils.register( + context, + TREES_SWAMP, +- orThrow36, ++ orThrow39, + PlacementUtils.countExtra(2, 0.1F, 1), + InSquarePlacement.spread(), + SurfaceWaterDepthFilter.forMaxDepth(2), +@@ -472,24 +499,24 @@ public class VegetationPlacements { + BiomeFilter.biome(), + BlockPredicateFilter.forPredicate(BlockPredicate.wouldSurvive(Blocks.OAK_SAPLING.defaultBlockState(), BlockPos.ZERO)) + ); +- PlacementUtils.register(context, TREES_WINDSWEPT_SAVANNA, orThrow37, treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); +- PlacementUtils.register(context, TREES_SAVANNA, orThrow37, treePlacement(PlacementUtils.countExtra(1, 0.1F, 1))); +- PlacementUtils.register(context, BIRCH_TALL, orThrow38, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_BIRCH, orThrow39, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1), Blocks.BIRCH_SAPLING)); +- PlacementUtils.register(context, TREES_WINDSWEPT_FOREST, orThrow40, treePlacement(PlacementUtils.countExtra(3, 0.1F, 1))); +- PlacementUtils.register(context, TREES_WINDSWEPT_HILLS, orThrow40, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1))); +- PlacementUtils.register(context, TREES_WATER, orThrow41, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1))); +- PlacementUtils.register(context, TREES_BIRCH_AND_OAK, orThrow42, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_SPARSE_JUNGLE, orThrow43, treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); +- PlacementUtils.register(context, TREES_OLD_GROWTH_SPRUCE_TAIGA, orThrow44, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_OLD_GROWTH_PINE_TAIGA, orThrow45, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); +- PlacementUtils.register(context, TREES_JUNGLE, orThrow46, treePlacement(PlacementUtils.countExtra(50, 0.1F, 1))); +- PlacementUtils.register(context, BAMBOO_VEGETATION, orThrow47, treePlacement(PlacementUtils.countExtra(30, 0.1F, 1))); +- PlacementUtils.register(context, MUSHROOM_ISLAND_VEGETATION, orThrow48, InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); ++ PlacementUtils.register(context, TREES_WINDSWEPT_SAVANNA, orThrow40, treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_SAVANNA, orThrow40, treePlacement(PlacementUtils.countExtra(1, 0.1F, 1))); ++ PlacementUtils.register(context, BIRCH_TALL, orThrow41, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_BIRCH, orThrow42, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1), Blocks.BIRCH_SAPLING)); ++ PlacementUtils.register(context, TREES_WINDSWEPT_FOREST, orThrow43, treePlacement(PlacementUtils.countExtra(3, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_WINDSWEPT_HILLS, orThrow43, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_WATER, orThrow44, treePlacement(PlacementUtils.countExtra(0, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_BIRCH_AND_OAK, orThrow45, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_SPARSE_JUNGLE, orThrow46, treePlacement(PlacementUtils.countExtra(2, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_OLD_GROWTH_SPRUCE_TAIGA, orThrow47, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_OLD_GROWTH_PINE_TAIGA, orThrow48, treePlacement(PlacementUtils.countExtra(10, 0.1F, 1))); ++ PlacementUtils.register(context, TREES_JUNGLE, orThrow49, treePlacement(PlacementUtils.countExtra(50, 0.1F, 1))); ++ PlacementUtils.register(context, BAMBOO_VEGETATION, orThrow50, treePlacement(PlacementUtils.countExtra(30, 0.1F, 1))); ++ PlacementUtils.register(context, MUSHROOM_ISLAND_VEGETATION, orThrow51, InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome()); + PlacementUtils.register( + context, + TREES_MANGROVE, +- orThrow49, ++ orThrow52, + CountPlacement.of(25), + InSquarePlacement.spread(), + SurfaceWaterDepthFilter.forMaxDepth(5), +diff --git a/net/minecraft/network/chat/Style.java b/net/minecraft/network/chat/Style.java +index 9fdef05..415884a 100644 +--- a/net/minecraft/network/chat/Style.java ++++ b/net/minecraft/network/chat/Style.java +@@ -11,13 +11,16 @@ import net.minecraft.network.RegistryFriendlyByteBuf; + import net.minecraft.network.codec.ByteBufCodecs; + import net.minecraft.network.codec.StreamCodec; + import net.minecraft.resources.ResourceLocation; ++import net.minecraft.util.ExtraCodecs; + + public class Style { +- public static final Style EMPTY = new Style(null, null, null, null, null, null, null, null, null, null); ++ public static final Style EMPTY = new Style(null, null, null, null, null, null, null, null, null, null, null); + public static final ResourceLocation DEFAULT_FONT = ResourceLocation.withDefaultNamespace("default"); + @Nullable + final TextColor color; + @Nullable ++ final Integer shadowColor; ++ @Nullable + final Boolean bold; + @Nullable + final Boolean italic; +@@ -37,54 +40,58 @@ public class Style { + final ResourceLocation font; + + private static Style create( +- Optional color, +- Optional bold, +- Optional italic, +- Optional underlined, +- Optional strikethrough, +- Optional obfuscated, +- Optional clickEvent, +- Optional hoverEvent, +- Optional insertion, +- Optional font ++ Optional optional, ++ Optional optional1, ++ Optional optional2, ++ Optional optional3, ++ Optional optional4, ++ Optional optional5, ++ Optional optional6, ++ Optional optional7, ++ Optional optional8, ++ Optional optional9, ++ Optional optional10 + ) { + Style style = new Style( +- color.orElse(null), +- bold.orElse(null), +- italic.orElse(null), +- underlined.orElse(null), +- strikethrough.orElse(null), +- obfuscated.orElse(null), +- clickEvent.orElse(null), +- hoverEvent.orElse(null), +- insertion.orElse(null), +- font.orElse(null) ++ optional.orElse(null), ++ optional1.orElse(null), ++ optional2.orElse(null), ++ optional3.orElse(null), ++ optional4.orElse(null), ++ optional5.orElse(null), ++ optional6.orElse(null), ++ optional7.orElse(null), ++ optional8.orElse(null), ++ optional9.orElse(null), ++ optional10.orElse(null) + ); + return style.equals(EMPTY) ? EMPTY : style; + } + + private Style( +- @Nullable TextColor color, +- @Nullable Boolean bold, +- @Nullable Boolean italic, +- @Nullable Boolean underlined, +- @Nullable Boolean strikethrough, +- @Nullable Boolean obfuscated, ++ @Nullable TextColor textColor, ++ @Nullable Integer integer, ++ @Nullable Boolean _boolean, ++ @Nullable Boolean _boolean1, ++ @Nullable Boolean _boolean2, ++ @Nullable Boolean _boolean3, ++ @Nullable Boolean _boolean4, + @Nullable ClickEvent clickEvent, + @Nullable HoverEvent hoverEvent, +- @Nullable String insertion, +- @Nullable ResourceLocation font ++ @Nullable String string, ++ @Nullable ResourceLocation resourceLocation + ) { +- this.color = color; +- this.bold = bold; +- this.italic = italic; +- this.underlined = underlined; +- this.strikethrough = strikethrough; +- this.obfuscated = obfuscated; ++ this.color = textColor; ++ this.shadowColor = integer; ++ this.bold = _boolean; ++ this.italic = _boolean1; ++ this.underlined = _boolean2; ++ this.strikethrough = _boolean3; ++ this.obfuscated = _boolean4; + this.clickEvent = clickEvent; + this.hoverEvent = hoverEvent; +- this.insertion = insertion; +- this.font = font; ++ this.insertion = string; ++ this.font = resourceLocation; + } + + @Nullable +@@ -92,6 +99,11 @@ public class Style { + return this.color; + } + ++ @Nullable ++ public Integer getShadowColor() { ++ return this.shadowColor; ++ } ++ + public boolean isBold() { + return this.bold == Boolean.TRUE; + } +@@ -145,6 +157,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -168,12 +181,33 @@ public class Style { + return this.withColor(TextColor.fromRgb(rgb)); + } + ++ public Style withShadowColor(int i) { ++ return checkEmptyAfterChange( ++ new Style( ++ this.color, ++ i, ++ this.bold, ++ this.italic, ++ this.underlined, ++ this.strikethrough, ++ this.obfuscated, ++ this.clickEvent, ++ this.hoverEvent, ++ this.insertion, ++ this.font ++ ), ++ this.shadowColor, ++ i ++ ); ++ } ++ + public Style withBold(@Nullable Boolean bold) { + return Objects.equals(this.bold, bold) + ? this + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + bold, + this.italic, + this.underlined, +@@ -195,6 +229,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + italic, + this.underlined, +@@ -216,6 +251,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + underlined, +@@ -237,6 +273,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -258,6 +295,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -279,6 +317,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -300,6 +339,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -321,6 +361,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -342,6 +383,7 @@ public class Style { + : checkEmptyAfterChange( + new Style( + this.color, ++ this.shadowColor, + this.bold, + this.italic, + this.underlined, +@@ -386,7 +428,9 @@ public class Style { + textColor = TextColor.fromLegacyFormat(formatting); + } + +- return new Style(textColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font); ++ return new Style( ++ textColor, this.shadowColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font ++ ); + } + + public Style applyLegacyFormat(ChatFormatting formatting) { +@@ -423,7 +467,9 @@ public class Style { + textColor = TextColor.fromLegacyFormat(formatting); + } + +- return new Style(textColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font); ++ return new Style( ++ textColor, this.shadowColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font ++ ); + } + + public Style applyFormats(ChatFormatting... formats) { +@@ -458,7 +504,9 @@ public class Style { + } + } + +- return new Style(textColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font); ++ return new Style( ++ textColor, this.shadowColor, _boolean, _boolean1, _boolean3, _boolean2, _boolean4, this.clickEvent, this.hoverEvent, this.insertion, this.font ++ ); + } + + public Style applyTo(Style style) { +@@ -469,6 +517,7 @@ public class Style { + ? this + : new Style( + this.color != null ? this.color : style.color, ++ this.shadowColor != null ? this.shadowColor : style.shadowColor, + this.bold != null ? this.bold : style.bold, + this.italic != null ? this.italic : style.italic, + this.underlined != null ? this.underlined : style.underlined, +@@ -520,6 +569,7 @@ public class Style { + + Collector collector = new Collector(); + collector.addValueString("color", this.color); ++ collector.addValueString("shadowColor", this.shadowColor); + collector.addFlagString("bold", this.bold); + collector.addFlagString("italic", this.italic); + collector.addFlagString("underlined", this.underlined); +@@ -539,6 +589,7 @@ public class Style { + || other instanceof Style style + && this.bold == style.bold + && Objects.equals(this.getColor(), style.getColor()) ++ && Objects.equals(this.getShadowColor(), style.getShadowColor()) + && this.italic == style.italic + && this.obfuscated == style.obfuscated + && this.strikethrough == style.strikethrough +@@ -552,7 +603,16 @@ public class Style { + @Override + public int hashCode() { + return Objects.hash( +- this.color, this.bold, this.italic, this.underlined, this.strikethrough, this.obfuscated, this.clickEvent, this.hoverEvent, this.insertion ++ this.color, ++ this.shadowColor, ++ this.bold, ++ this.italic, ++ this.underlined, ++ this.strikethrough, ++ this.obfuscated, ++ this.clickEvent, ++ this.hoverEvent, ++ this.insertion + ); + } + +@@ -560,6 +620,7 @@ public class Style { + public static final MapCodec