trurwsuieghfdskg

This commit is contained in:
2025-06-08 00:02:04 +09:00
commit 56c8ad5bc2
14172 changed files with 1139672 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
package net.minecraft.data;
import com.google.common.collect.Maps;
import java.util.Map;
import java.util.stream.Stream;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
public class BlockFamilies {
private static final Map<Block, BlockFamily> MAP = Maps.newHashMap();
private static final String RECIPE_GROUP_PREFIX_WOODEN = "wooden";
private static final String RECIPE_UNLOCKED_BY_HAS_PLANKS = "has_planks";
public static final BlockFamily ACACIA_PLANKS = familyBuilder(Blocks.ACACIA_PLANKS).button(Blocks.ACACIA_BUTTON).fence(Blocks.ACACIA_FENCE).fenceGate(Blocks.ACACIA_FENCE_GATE).pressurePlate(Blocks.ACACIA_PRESSURE_PLATE).sign(Blocks.ACACIA_SIGN, Blocks.ACACIA_WALL_SIGN).slab(Blocks.ACACIA_SLAB).stairs(Blocks.ACACIA_STAIRS).door(Blocks.ACACIA_DOOR).trapdoor(Blocks.ACACIA_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily CHERRY_PLANKS = familyBuilder(Blocks.CHERRY_PLANKS).button(Blocks.CHERRY_BUTTON).fence(Blocks.CHERRY_FENCE).fenceGate(Blocks.CHERRY_FENCE_GATE).pressurePlate(Blocks.CHERRY_PRESSURE_PLATE).sign(Blocks.CHERRY_SIGN, Blocks.CHERRY_WALL_SIGN).slab(Blocks.CHERRY_SLAB).stairs(Blocks.CHERRY_STAIRS).door(Blocks.CHERRY_DOOR).trapdoor(Blocks.CHERRY_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily BIRCH_PLANKS = familyBuilder(Blocks.BIRCH_PLANKS).button(Blocks.BIRCH_BUTTON).fence(Blocks.BIRCH_FENCE).fenceGate(Blocks.BIRCH_FENCE_GATE).pressurePlate(Blocks.BIRCH_PRESSURE_PLATE).sign(Blocks.BIRCH_SIGN, Blocks.BIRCH_WALL_SIGN).slab(Blocks.BIRCH_SLAB).stairs(Blocks.BIRCH_STAIRS).door(Blocks.BIRCH_DOOR).trapdoor(Blocks.BIRCH_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily CRIMSON_PLANKS = familyBuilder(Blocks.CRIMSON_PLANKS).button(Blocks.CRIMSON_BUTTON).fence(Blocks.CRIMSON_FENCE).fenceGate(Blocks.CRIMSON_FENCE_GATE).pressurePlate(Blocks.CRIMSON_PRESSURE_PLATE).sign(Blocks.CRIMSON_SIGN, Blocks.CRIMSON_WALL_SIGN).slab(Blocks.CRIMSON_SLAB).stairs(Blocks.CRIMSON_STAIRS).door(Blocks.CRIMSON_DOOR).trapdoor(Blocks.CRIMSON_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily JUNGLE_PLANKS = familyBuilder(Blocks.JUNGLE_PLANKS).button(Blocks.JUNGLE_BUTTON).fence(Blocks.JUNGLE_FENCE).fenceGate(Blocks.JUNGLE_FENCE_GATE).pressurePlate(Blocks.JUNGLE_PRESSURE_PLATE).sign(Blocks.JUNGLE_SIGN, Blocks.JUNGLE_WALL_SIGN).slab(Blocks.JUNGLE_SLAB).stairs(Blocks.JUNGLE_STAIRS).door(Blocks.JUNGLE_DOOR).trapdoor(Blocks.JUNGLE_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily OAK_PLANKS = familyBuilder(Blocks.OAK_PLANKS).button(Blocks.OAK_BUTTON).fence(Blocks.OAK_FENCE).fenceGate(Blocks.OAK_FENCE_GATE).pressurePlate(Blocks.OAK_PRESSURE_PLATE).sign(Blocks.OAK_SIGN, Blocks.OAK_WALL_SIGN).slab(Blocks.OAK_SLAB).stairs(Blocks.OAK_STAIRS).door(Blocks.OAK_DOOR).trapdoor(Blocks.OAK_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily DARK_OAK_PLANKS = familyBuilder(Blocks.DARK_OAK_PLANKS).button(Blocks.DARK_OAK_BUTTON).fence(Blocks.DARK_OAK_FENCE).fenceGate(Blocks.DARK_OAK_FENCE_GATE).pressurePlate(Blocks.DARK_OAK_PRESSURE_PLATE).sign(Blocks.DARK_OAK_SIGN, Blocks.DARK_OAK_WALL_SIGN).slab(Blocks.DARK_OAK_SLAB).stairs(Blocks.DARK_OAK_STAIRS).door(Blocks.DARK_OAK_DOOR).trapdoor(Blocks.DARK_OAK_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily SPRUCE_PLANKS = familyBuilder(Blocks.SPRUCE_PLANKS).button(Blocks.SPRUCE_BUTTON).fence(Blocks.SPRUCE_FENCE).fenceGate(Blocks.SPRUCE_FENCE_GATE).pressurePlate(Blocks.SPRUCE_PRESSURE_PLATE).sign(Blocks.SPRUCE_SIGN, Blocks.SPRUCE_WALL_SIGN).slab(Blocks.SPRUCE_SLAB).stairs(Blocks.SPRUCE_STAIRS).door(Blocks.SPRUCE_DOOR).trapdoor(Blocks.SPRUCE_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily WARPED_PLANKS = familyBuilder(Blocks.WARPED_PLANKS).button(Blocks.WARPED_BUTTON).fence(Blocks.WARPED_FENCE).fenceGate(Blocks.WARPED_FENCE_GATE).pressurePlate(Blocks.WARPED_PRESSURE_PLATE).sign(Blocks.WARPED_SIGN, Blocks.WARPED_WALL_SIGN).slab(Blocks.WARPED_SLAB).stairs(Blocks.WARPED_STAIRS).door(Blocks.WARPED_DOOR).trapdoor(Blocks.WARPED_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily MANGROVE_PLANKS = familyBuilder(Blocks.MANGROVE_PLANKS).button(Blocks.MANGROVE_BUTTON).slab(Blocks.MANGROVE_SLAB).stairs(Blocks.MANGROVE_STAIRS).fence(Blocks.MANGROVE_FENCE).fenceGate(Blocks.MANGROVE_FENCE_GATE).pressurePlate(Blocks.MANGROVE_PRESSURE_PLATE).sign(Blocks.MANGROVE_SIGN, Blocks.MANGROVE_WALL_SIGN).door(Blocks.MANGROVE_DOOR).trapdoor(Blocks.MANGROVE_TRAPDOOR).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily BAMBOO_PLANKS = familyBuilder(Blocks.BAMBOO_PLANKS).button(Blocks.BAMBOO_BUTTON).slab(Blocks.BAMBOO_SLAB).stairs(Blocks.BAMBOO_STAIRS).customFence(Blocks.BAMBOO_FENCE).customFenceGate(Blocks.BAMBOO_FENCE_GATE).pressurePlate(Blocks.BAMBOO_PRESSURE_PLATE).sign(Blocks.BAMBOO_SIGN, Blocks.BAMBOO_WALL_SIGN).door(Blocks.BAMBOO_DOOR).trapdoor(Blocks.BAMBOO_TRAPDOOR).mosaic(Blocks.BAMBOO_MOSAIC).recipeGroupPrefix("wooden").recipeUnlockedBy("has_planks").getFamily();
public static final BlockFamily BAMBOO_MOSAIC = familyBuilder(Blocks.BAMBOO_MOSAIC).slab(Blocks.BAMBOO_MOSAIC_SLAB).stairs(Blocks.BAMBOO_MOSAIC_STAIRS).getFamily();
public static final BlockFamily MUD_BRICKS = familyBuilder(Blocks.MUD_BRICKS).wall(Blocks.MUD_BRICK_WALL).stairs(Blocks.MUD_BRICK_STAIRS).slab(Blocks.MUD_BRICK_SLAB).getFamily();
public static final BlockFamily ANDESITE = familyBuilder(Blocks.ANDESITE).wall(Blocks.ANDESITE_WALL).stairs(Blocks.ANDESITE_STAIRS).slab(Blocks.ANDESITE_SLAB).polished(Blocks.POLISHED_ANDESITE).getFamily();
public static final BlockFamily POLISHED_ANDESITE = familyBuilder(Blocks.POLISHED_ANDESITE).stairs(Blocks.POLISHED_ANDESITE_STAIRS).slab(Blocks.POLISHED_ANDESITE_SLAB).getFamily();
public static final BlockFamily BLACKSTONE = familyBuilder(Blocks.BLACKSTONE).wall(Blocks.BLACKSTONE_WALL).stairs(Blocks.BLACKSTONE_STAIRS).slab(Blocks.BLACKSTONE_SLAB).polished(Blocks.POLISHED_BLACKSTONE).getFamily();
public static final BlockFamily POLISHED_BLACKSTONE = familyBuilder(Blocks.POLISHED_BLACKSTONE).wall(Blocks.POLISHED_BLACKSTONE_WALL).pressurePlate(Blocks.POLISHED_BLACKSTONE_PRESSURE_PLATE).button(Blocks.POLISHED_BLACKSTONE_BUTTON).stairs(Blocks.POLISHED_BLACKSTONE_STAIRS).slab(Blocks.POLISHED_BLACKSTONE_SLAB).polished(Blocks.POLISHED_BLACKSTONE_BRICKS).chiseled(Blocks.CHISELED_POLISHED_BLACKSTONE).getFamily();
public static final BlockFamily POLISHED_BLACKSTONE_BRICKS = familyBuilder(Blocks.POLISHED_BLACKSTONE_BRICKS).wall(Blocks.POLISHED_BLACKSTONE_BRICK_WALL).stairs(Blocks.POLISHED_BLACKSTONE_BRICK_STAIRS).slab(Blocks.POLISHED_BLACKSTONE_BRICK_SLAB).cracked(Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS).getFamily();
public static final BlockFamily BRICKS = familyBuilder(Blocks.BRICKS).wall(Blocks.BRICK_WALL).stairs(Blocks.BRICK_STAIRS).slab(Blocks.BRICK_SLAB).getFamily();
public static final BlockFamily END_STONE_BRICKS = familyBuilder(Blocks.END_STONE_BRICKS).wall(Blocks.END_STONE_BRICK_WALL).stairs(Blocks.END_STONE_BRICK_STAIRS).slab(Blocks.END_STONE_BRICK_SLAB).getFamily();
public static final BlockFamily MOSSY_STONE_BRICKS = familyBuilder(Blocks.MOSSY_STONE_BRICKS).wall(Blocks.MOSSY_STONE_BRICK_WALL).stairs(Blocks.MOSSY_STONE_BRICK_STAIRS).slab(Blocks.MOSSY_STONE_BRICK_SLAB).getFamily();
public static final BlockFamily COPPER_BLOCK = familyBuilder(Blocks.COPPER_BLOCK).cut(Blocks.CUT_COPPER).dontGenerateModel().getFamily();
public static final BlockFamily CUT_COPPER = familyBuilder(Blocks.CUT_COPPER).slab(Blocks.CUT_COPPER_SLAB).stairs(Blocks.CUT_COPPER_STAIRS).dontGenerateModel().getFamily();
public static final BlockFamily WAXED_COPPER_BLOCK = familyBuilder(Blocks.WAXED_COPPER_BLOCK).cut(Blocks.WAXED_CUT_COPPER).recipeGroupPrefix("waxed_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily WAXED_CUT_COPPER = familyBuilder(Blocks.WAXED_CUT_COPPER).slab(Blocks.WAXED_CUT_COPPER_SLAB).stairs(Blocks.WAXED_CUT_COPPER_STAIRS).recipeGroupPrefix("waxed_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily EXPOSED_COPPER = familyBuilder(Blocks.EXPOSED_COPPER).cut(Blocks.EXPOSED_CUT_COPPER).dontGenerateModel().getFamily();
public static final BlockFamily EXPOSED_CUT_COPPER = familyBuilder(Blocks.EXPOSED_CUT_COPPER).slab(Blocks.EXPOSED_CUT_COPPER_SLAB).stairs(Blocks.EXPOSED_CUT_COPPER_STAIRS).dontGenerateModel().getFamily();
public static final BlockFamily WAXED_EXPOSED_COPPER = familyBuilder(Blocks.WAXED_EXPOSED_COPPER).cut(Blocks.WAXED_EXPOSED_CUT_COPPER).recipeGroupPrefix("waxed_exposed_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily WAXED_EXPOSED_CUT_COPPER = familyBuilder(Blocks.WAXED_EXPOSED_CUT_COPPER).slab(Blocks.WAXED_EXPOSED_CUT_COPPER_SLAB).stairs(Blocks.WAXED_EXPOSED_CUT_COPPER_STAIRS).recipeGroupPrefix("waxed_exposed_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily WEATHERED_COPPER = familyBuilder(Blocks.WEATHERED_COPPER).cut(Blocks.WEATHERED_CUT_COPPER).dontGenerateModel().getFamily();
public static final BlockFamily WEATHERED_CUT_COPPER = familyBuilder(Blocks.WEATHERED_CUT_COPPER).slab(Blocks.WEATHERED_CUT_COPPER_SLAB).stairs(Blocks.WEATHERED_CUT_COPPER_STAIRS).dontGenerateModel().getFamily();
public static final BlockFamily WAXED_WEATHERED_COPPER = familyBuilder(Blocks.WAXED_WEATHERED_COPPER).cut(Blocks.WAXED_WEATHERED_CUT_COPPER).recipeGroupPrefix("waxed_weathered_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily WAXED_WEATHERED_CUT_COPPER = familyBuilder(Blocks.WAXED_WEATHERED_CUT_COPPER).slab(Blocks.WAXED_WEATHERED_CUT_COPPER_SLAB).stairs(Blocks.WAXED_WEATHERED_CUT_COPPER_STAIRS).recipeGroupPrefix("waxed_weathered_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily OXIDIZED_COPPER = familyBuilder(Blocks.OXIDIZED_COPPER).cut(Blocks.OXIDIZED_CUT_COPPER).dontGenerateModel().getFamily();
public static final BlockFamily OXIDIZED_CUT_COPPER = familyBuilder(Blocks.OXIDIZED_CUT_COPPER).slab(Blocks.OXIDIZED_CUT_COPPER_SLAB).stairs(Blocks.OXIDIZED_CUT_COPPER_STAIRS).dontGenerateModel().getFamily();
public static final BlockFamily WAXED_OXIDIZED_COPPER = familyBuilder(Blocks.WAXED_OXIDIZED_COPPER).cut(Blocks.WAXED_OXIDIZED_CUT_COPPER).recipeGroupPrefix("waxed_oxidized_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily WAXED_OXIDIZED_CUT_COPPER = familyBuilder(Blocks.WAXED_OXIDIZED_CUT_COPPER).slab(Blocks.WAXED_OXIDIZED_CUT_COPPER_SLAB).stairs(Blocks.WAXED_OXIDIZED_CUT_COPPER_STAIRS).recipeGroupPrefix("waxed_oxidized_cut_copper").dontGenerateModel().getFamily();
public static final BlockFamily COBBLESTONE = familyBuilder(Blocks.COBBLESTONE).wall(Blocks.COBBLESTONE_WALL).stairs(Blocks.COBBLESTONE_STAIRS).slab(Blocks.COBBLESTONE_SLAB).getFamily();
public static final BlockFamily MOSSY_COBBLESTONE = familyBuilder(Blocks.MOSSY_COBBLESTONE).wall(Blocks.MOSSY_COBBLESTONE_WALL).stairs(Blocks.MOSSY_COBBLESTONE_STAIRS).slab(Blocks.MOSSY_COBBLESTONE_SLAB).getFamily();
public static final BlockFamily DIORITE = familyBuilder(Blocks.DIORITE).wall(Blocks.DIORITE_WALL).stairs(Blocks.DIORITE_STAIRS).slab(Blocks.DIORITE_SLAB).polished(Blocks.POLISHED_DIORITE).getFamily();
public static final BlockFamily POLISHED_DIORITE = familyBuilder(Blocks.POLISHED_DIORITE).stairs(Blocks.POLISHED_DIORITE_STAIRS).slab(Blocks.POLISHED_DIORITE_SLAB).getFamily();
public static final BlockFamily GRANITE = familyBuilder(Blocks.GRANITE).wall(Blocks.GRANITE_WALL).stairs(Blocks.GRANITE_STAIRS).slab(Blocks.GRANITE_SLAB).polished(Blocks.POLISHED_GRANITE).getFamily();
public static final BlockFamily POLISHED_GRANITE = familyBuilder(Blocks.POLISHED_GRANITE).stairs(Blocks.POLISHED_GRANITE_STAIRS).slab(Blocks.POLISHED_GRANITE_SLAB).getFamily();
public static final BlockFamily NETHER_BRICKS = familyBuilder(Blocks.NETHER_BRICKS).fence(Blocks.NETHER_BRICK_FENCE).wall(Blocks.NETHER_BRICK_WALL).stairs(Blocks.NETHER_BRICK_STAIRS).slab(Blocks.NETHER_BRICK_SLAB).chiseled(Blocks.CHISELED_NETHER_BRICKS).cracked(Blocks.CRACKED_NETHER_BRICKS).getFamily();
public static final BlockFamily RED_NETHER_BRICKS = familyBuilder(Blocks.RED_NETHER_BRICKS).slab(Blocks.RED_NETHER_BRICK_SLAB).stairs(Blocks.RED_NETHER_BRICK_STAIRS).wall(Blocks.RED_NETHER_BRICK_WALL).getFamily();
public static final BlockFamily PRISMARINE = familyBuilder(Blocks.PRISMARINE).wall(Blocks.PRISMARINE_WALL).stairs(Blocks.PRISMARINE_STAIRS).slab(Blocks.PRISMARINE_SLAB).getFamily();
public static final BlockFamily PURPUR = familyBuilder(Blocks.PURPUR_BLOCK).stairs(Blocks.PURPUR_STAIRS).slab(Blocks.PURPUR_SLAB).dontGenerateRecipe().getFamily();
public static final BlockFamily PRISMARINE_BRICKS = familyBuilder(Blocks.PRISMARINE_BRICKS).stairs(Blocks.PRISMARINE_BRICK_STAIRS).slab(Blocks.PRISMARINE_BRICK_SLAB).getFamily();
public static final BlockFamily DARK_PRISMARINE = familyBuilder(Blocks.DARK_PRISMARINE).stairs(Blocks.DARK_PRISMARINE_STAIRS).slab(Blocks.DARK_PRISMARINE_SLAB).getFamily();
public static final BlockFamily QUARTZ = familyBuilder(Blocks.QUARTZ_BLOCK).stairs(Blocks.QUARTZ_STAIRS).slab(Blocks.QUARTZ_SLAB).chiseled(Blocks.CHISELED_QUARTZ_BLOCK).dontGenerateRecipe().getFamily();
public static final BlockFamily SMOOTH_QUARTZ = familyBuilder(Blocks.SMOOTH_QUARTZ).stairs(Blocks.SMOOTH_QUARTZ_STAIRS).slab(Blocks.SMOOTH_QUARTZ_SLAB).getFamily();
public static final BlockFamily SANDSTONE = familyBuilder(Blocks.SANDSTONE).wall(Blocks.SANDSTONE_WALL).stairs(Blocks.SANDSTONE_STAIRS).slab(Blocks.SANDSTONE_SLAB).chiseled(Blocks.CHISELED_SANDSTONE).cut(Blocks.CUT_SANDSTONE).dontGenerateRecipe().getFamily();
public static final BlockFamily CUT_SANDSTONE = familyBuilder(Blocks.CUT_SANDSTONE).slab(Blocks.CUT_SANDSTONE_SLAB).getFamily();
public static final BlockFamily SMOOTH_SANDSTONE = familyBuilder(Blocks.SMOOTH_SANDSTONE).slab(Blocks.SMOOTH_SANDSTONE_SLAB).stairs(Blocks.SMOOTH_SANDSTONE_STAIRS).getFamily();
public static final BlockFamily RED_SANDSTONE = familyBuilder(Blocks.RED_SANDSTONE).wall(Blocks.RED_SANDSTONE_WALL).stairs(Blocks.RED_SANDSTONE_STAIRS).slab(Blocks.RED_SANDSTONE_SLAB).chiseled(Blocks.CHISELED_RED_SANDSTONE).cut(Blocks.CUT_RED_SANDSTONE).dontGenerateRecipe().getFamily();
public static final BlockFamily CUT_RED_SANDSTONE = familyBuilder(Blocks.CUT_RED_SANDSTONE).slab(Blocks.CUT_RED_SANDSTONE_SLAB).getFamily();
public static final BlockFamily SMOOTH_RED_SANDSTONE = familyBuilder(Blocks.SMOOTH_RED_SANDSTONE).slab(Blocks.SMOOTH_RED_SANDSTONE_SLAB).stairs(Blocks.SMOOTH_RED_SANDSTONE_STAIRS).getFamily();
public static final BlockFamily STONE = familyBuilder(Blocks.STONE).slab(Blocks.STONE_SLAB).pressurePlate(Blocks.STONE_PRESSURE_PLATE).button(Blocks.STONE_BUTTON).stairs(Blocks.STONE_STAIRS).getFamily();
public static final BlockFamily STONE_BRICK = familyBuilder(Blocks.STONE_BRICKS).wall(Blocks.STONE_BRICK_WALL).stairs(Blocks.STONE_BRICK_STAIRS).slab(Blocks.STONE_BRICK_SLAB).chiseled(Blocks.CHISELED_STONE_BRICKS).cracked(Blocks.CRACKED_STONE_BRICKS).dontGenerateRecipe().getFamily();
public static final BlockFamily DEEPSLATE = familyBuilder(Blocks.DEEPSLATE).getFamily();
public static final BlockFamily COBBLED_DEEPSLATE = familyBuilder(Blocks.COBBLED_DEEPSLATE).slab(Blocks.COBBLED_DEEPSLATE_SLAB).stairs(Blocks.COBBLED_DEEPSLATE_STAIRS).wall(Blocks.COBBLED_DEEPSLATE_WALL).chiseled(Blocks.CHISELED_DEEPSLATE).polished(Blocks.POLISHED_DEEPSLATE).getFamily();
public static final BlockFamily POLISHED_DEEPSLATE = familyBuilder(Blocks.POLISHED_DEEPSLATE).slab(Blocks.POLISHED_DEEPSLATE_SLAB).stairs(Blocks.POLISHED_DEEPSLATE_STAIRS).wall(Blocks.POLISHED_DEEPSLATE_WALL).getFamily();
public static final BlockFamily DEEPSLATE_BRICKS = familyBuilder(Blocks.DEEPSLATE_BRICKS).slab(Blocks.DEEPSLATE_BRICK_SLAB).stairs(Blocks.DEEPSLATE_BRICK_STAIRS).wall(Blocks.DEEPSLATE_BRICK_WALL).cracked(Blocks.CRACKED_DEEPSLATE_BRICKS).getFamily();
public static final BlockFamily DEEPSLATE_TILES = familyBuilder(Blocks.DEEPSLATE_TILES).slab(Blocks.DEEPSLATE_TILE_SLAB).stairs(Blocks.DEEPSLATE_TILE_STAIRS).wall(Blocks.DEEPSLATE_TILE_WALL).cracked(Blocks.CRACKED_DEEPSLATE_TILES).getFamily();
private static BlockFamily.Builder familyBuilder(Block p_175936_) {
BlockFamily.Builder blockfamily$builder = new BlockFamily.Builder(p_175936_);
BlockFamily blockfamily = MAP.put(p_175936_, blockfamily$builder.getFamily());
if (blockfamily != null) {
throw new IllegalStateException("Duplicate family definition for " + BuiltInRegistries.BLOCK.getKey(p_175936_));
} else {
return blockfamily$builder;
}
}
public static Stream<BlockFamily> getAllFamilies() {
return MAP.values().stream();
}
}

View File

@@ -0,0 +1,209 @@
package net.minecraft.data;
import com.google.common.collect.Maps;
import java.util.Map;
import java.util.Optional;
import javax.annotation.Nullable;
import net.minecraft.Util;
import net.minecraft.world.flag.FeatureFlag;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.level.block.Block;
public class BlockFamily {
private final Block baseBlock;
final Map<BlockFamily.Variant, Block> variants = Maps.newHashMap();
FeatureFlagSet requiredFeatures = FeatureFlags.VANILLA_SET;
boolean generateModel = true;
boolean generateRecipe = true;
@Nullable
String recipeGroupPrefix;
@Nullable
String recipeUnlockedBy;
BlockFamily(Block p_175950_) {
this.baseBlock = p_175950_;
}
public Block getBaseBlock() {
return this.baseBlock;
}
public Map<BlockFamily.Variant, Block> getVariants() {
return this.variants;
}
public Block get(BlockFamily.Variant p_175953_) {
return this.variants.get(p_175953_);
}
public boolean shouldGenerateModel() {
return this.generateModel;
}
public boolean shouldGenerateRecipe(FeatureFlagSet p_250218_) {
return this.generateRecipe && this.requiredFeatures.isSubsetOf(p_250218_);
}
public Optional<String> getRecipeGroupPrefix() {
return Util.isBlank(this.recipeGroupPrefix) ? Optional.empty() : Optional.of(this.recipeGroupPrefix);
}
public Optional<String> getRecipeUnlockedBy() {
return Util.isBlank(this.recipeUnlockedBy) ? Optional.empty() : Optional.of(this.recipeUnlockedBy);
}
public static class Builder {
private final BlockFamily family;
public Builder(Block p_175961_) {
this.family = new BlockFamily(p_175961_);
}
public BlockFamily getFamily() {
return this.family;
}
public BlockFamily.Builder button(Block p_175964_) {
this.family.variants.put(BlockFamily.Variant.BUTTON, p_175964_);
return this;
}
public BlockFamily.Builder chiseled(Block p_175972_) {
this.family.variants.put(BlockFamily.Variant.CHISELED, p_175972_);
return this;
}
public BlockFamily.Builder mosaic(Block p_251947_) {
this.family.variants.put(BlockFamily.Variant.MOSAIC, p_251947_);
return this;
}
public BlockFamily.Builder cracked(Block p_175977_) {
this.family.variants.put(BlockFamily.Variant.CRACKED, p_175977_);
return this;
}
public BlockFamily.Builder cut(Block p_175979_) {
this.family.variants.put(BlockFamily.Variant.CUT, p_175979_);
return this;
}
public BlockFamily.Builder door(Block p_175981_) {
this.family.variants.put(BlockFamily.Variant.DOOR, p_175981_);
return this;
}
public BlockFamily.Builder customFence(Block p_248790_) {
this.family.variants.put(BlockFamily.Variant.CUSTOM_FENCE, p_248790_);
return this;
}
public BlockFamily.Builder fence(Block p_175983_) {
this.family.variants.put(BlockFamily.Variant.FENCE, p_175983_);
return this;
}
public BlockFamily.Builder customFenceGate(Block p_251301_) {
this.family.variants.put(BlockFamily.Variant.CUSTOM_FENCE_GATE, p_251301_);
return this;
}
public BlockFamily.Builder fenceGate(Block p_175985_) {
this.family.variants.put(BlockFamily.Variant.FENCE_GATE, p_175985_);
return this;
}
public BlockFamily.Builder sign(Block p_175966_, Block p_175967_) {
this.family.variants.put(BlockFamily.Variant.SIGN, p_175966_);
this.family.variants.put(BlockFamily.Variant.WALL_SIGN, p_175967_);
return this;
}
public BlockFamily.Builder slab(Block p_175987_) {
this.family.variants.put(BlockFamily.Variant.SLAB, p_175987_);
return this;
}
public BlockFamily.Builder stairs(Block p_175989_) {
this.family.variants.put(BlockFamily.Variant.STAIRS, p_175989_);
return this;
}
public BlockFamily.Builder pressurePlate(Block p_175991_) {
this.family.variants.put(BlockFamily.Variant.PRESSURE_PLATE, p_175991_);
return this;
}
public BlockFamily.Builder polished(Block p_175993_) {
this.family.variants.put(BlockFamily.Variant.POLISHED, p_175993_);
return this;
}
public BlockFamily.Builder trapdoor(Block p_175995_) {
this.family.variants.put(BlockFamily.Variant.TRAPDOOR, p_175995_);
return this;
}
public BlockFamily.Builder wall(Block p_175997_) {
this.family.variants.put(BlockFamily.Variant.WALL, p_175997_);
return this;
}
public BlockFamily.Builder dontGenerateModel() {
this.family.generateModel = false;
return this;
}
public BlockFamily.Builder dontGenerateRecipe() {
this.family.generateRecipe = false;
return this;
}
public BlockFamily.Builder featureLockedBehind(FeatureFlag... p_250956_) {
this.family.requiredFeatures = FeatureFlags.REGISTRY.subset(p_250956_);
return this;
}
public BlockFamily.Builder recipeGroupPrefix(String p_175969_) {
this.family.recipeGroupPrefix = p_175969_;
return this;
}
public BlockFamily.Builder recipeUnlockedBy(String p_175974_) {
this.family.recipeUnlockedBy = p_175974_;
return this;
}
}
public static enum Variant {
BUTTON("button"),
CHISELED("chiseled"),
CRACKED("cracked"),
CUT("cut"),
DOOR("door"),
CUSTOM_FENCE("custom_fence"),
FENCE("fence"),
CUSTOM_FENCE_GATE("custom_fence_gate"),
FENCE_GATE("fence_gate"),
MOSAIC("mosaic"),
SIGN("sign"),
SLAB("slab"),
STAIRS("stairs"),
PRESSURE_PLATE("pressure_plate"),
POLISHED("polished"),
TRAPDOOR("trapdoor"),
WALL("wall"),
WALL_SIGN("wall_sign");
private final String name;
private Variant(String p_176019_) {
this.name = p_176019_;
}
public String getName() {
return this.name;
}
}
}

View File

@@ -0,0 +1,15 @@
package net.minecraft.data;
import com.google.common.hash.HashCode;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public interface CachedOutput {
CachedOutput NO_CACHE = (p_236019_, p_236020_, p_236021_) -> {
Files.createDirectories(p_236019_.getParent());
Files.write(p_236019_, p_236020_);
};
void writeIfNeeded(Path p_236022_, byte[] p_236023_, HashCode p_236024_) throws IOException;
}

View File

@@ -0,0 +1,120 @@
package net.minecraft.data;
import com.google.common.base.Stopwatch;
import com.mojang.logging.LogUtils;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import net.minecraft.WorldVersion;
import net.minecraft.server.Bootstrap;
import org.slf4j.Logger;
public class DataGenerator {
private static final Logger LOGGER = LogUtils.getLogger();
private final Path rootOutputFolder;
private final PackOutput vanillaPackOutput;
final Set<String> allProviderIds = new HashSet<>();
final Map<String, DataProvider> providersToRun = new LinkedHashMap<>();
private final WorldVersion version;
private final boolean alwaysGenerate;
private final Map<String, DataProvider> providersView = java.util.Collections.unmodifiableMap(this.providersToRun);
public DataGenerator(Path p_251724_, WorldVersion p_250554_, boolean p_251323_) {
this.rootOutputFolder = p_251724_;
this.vanillaPackOutput = new PackOutput(this.rootOutputFolder);
this.version = p_250554_;
this.alwaysGenerate = p_251323_;
}
public void run() throws IOException {
HashCache hashcache = new HashCache(this.rootOutputFolder, this.allProviderIds, this.version);
Stopwatch stopwatch = Stopwatch.createStarted();
Stopwatch stopwatch1 = Stopwatch.createUnstarted();
this.providersToRun.forEach((p_254418_, p_253750_) -> {
if (!this.alwaysGenerate && !hashcache.shouldRunInThisVersion(p_254418_)) {
LOGGER.debug("Generator {} already run for version {}", p_254418_, this.version.getName());
} else {
LOGGER.info("Starting provider: {}", (Object)p_254418_);
net.minecraftforge.fml.StartupMessageManager.addModMessage("Generating: " + p_254418_);
stopwatch1.start();
hashcache.applyUpdate(hashcache.generateUpdate(p_254418_, p_253750_::run).join());
stopwatch1.stop();
LOGGER.info("{} finished after {} ms", p_254418_, stopwatch1.elapsed(TimeUnit.MILLISECONDS));
stopwatch1.reset();
}
});
LOGGER.info("All providers took: {} ms", (long)stopwatch.elapsed(TimeUnit.MILLISECONDS));
hashcache.purgeStaleAndWrite();
}
public DataGenerator.PackGenerator getVanillaPack(boolean p_254422_) {
return new DataGenerator.PackGenerator(p_254422_, "vanilla", this.vanillaPackOutput);
}
public DataGenerator.PackGenerator getBuiltinDatapack(boolean p_253826_, String p_254134_) {
Path path = this.vanillaPackOutput.getOutputFolder(PackOutput.Target.DATA_PACK).resolve("minecraft").resolve("datapacks").resolve(p_254134_);
return new DataGenerator.PackGenerator(p_253826_, p_254134_, new PackOutput(path));
}
public Map<String, DataProvider> getProvidersView() {
return this.providersView;
}
public PackOutput getPackOutput() {
return this.vanillaPackOutput;
}
public PackOutput getPackOutput(String path) {
return new PackOutput(rootOutputFolder.resolve(path));
}
public <T extends DataProvider> T addProvider(boolean run, DataProvider.Factory<T> factory) {
return addProvider(run, factory.create(this.vanillaPackOutput));
}
public <T extends DataProvider> T addProvider(boolean run, T provider) {
String id = provider.getName();
if (!DataGenerator.this.allProviderIds.add(id))
throw new IllegalStateException("Duplicate provider: " + id);
if (run)
DataGenerator.this.providersToRun.put(id, provider);
return provider;
}
static {
Bootstrap.bootStrap();
}
public class PackGenerator {
private final boolean toRun;
private final String providerPrefix;
private final PackOutput output;
PackGenerator(boolean p_253884_, String p_254544_, PackOutput p_254363_) {
this.toRun = p_253884_;
this.providerPrefix = p_254544_;
this.output = p_254363_;
}
public <T extends DataProvider> T addProvider(DataProvider.Factory<T> p_254382_) {
T t = p_254382_.create(this.output);
String s = this.providerPrefix + "/" + t.getName();
if (!DataGenerator.this.allProviderIds.add(s)) {
throw new IllegalStateException("Duplicate provider: " + s);
} else {
if (this.toRun) {
DataGenerator.this.providersToRun.put(s, t);
}
return t;
}
}
}
}

View File

@@ -0,0 +1,60 @@
package net.minecraft.data;
import com.google.common.hash.Hashing;
import com.google.common.hash.HashingOutputStream;
import com.google.gson.JsonElement;
import com.google.gson.stream.JsonWriter;
import com.mojang.logging.LogUtils;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.concurrent.CompletableFuture;
import java.util.function.ToIntFunction;
import net.minecraft.Util;
import net.minecraft.util.GsonHelper;
import org.slf4j.Logger;
public interface DataProvider {
ToIntFunction<String> FIXED_ORDER_FIELDS = Util.make(new Object2IntOpenHashMap<>(), (p_236070_) -> {
p_236070_.put("type", 0);
p_236070_.put("parent", 1);
p_236070_.defaultReturnValue(2);
});
Comparator<String> KEY_COMPARATOR = Comparator.comparingInt(FIXED_ORDER_FIELDS).thenComparing((p_236077_) -> {
return p_236077_;
});
Logger LOGGER = LogUtils.getLogger();
CompletableFuture<?> run(CachedOutput p_236071_);
String getName();
static CompletableFuture<?> saveStable(CachedOutput p_253653_, JsonElement p_254542_, Path p_254467_) {
return CompletableFuture.runAsync(() -> {
try {
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
HashingOutputStream hashingoutputstream = new HashingOutputStream(Hashing.sha1(), bytearrayoutputstream);
try (JsonWriter jsonwriter = new JsonWriter(new OutputStreamWriter(hashingoutputstream, StandardCharsets.UTF_8))) {
jsonwriter.setSerializeNulls(false);
jsonwriter.setIndent(" ");
GsonHelper.writeValue(jsonwriter, p_254542_, KEY_COMPARATOR);
}
p_253653_.writeIfNeeded(p_254467_, bytearrayoutputstream.toByteArray(), hashingoutputstream.hash());
} catch (IOException ioexception) {
LOGGER.error("Failed to save file to {}", p_254467_, ioexception);
}
}, Util.backgroundExecutor());
}
@FunctionalInterface
public interface Factory<T extends DataProvider> {
T create(PackOutput p_253851_);
}
}

View File

@@ -0,0 +1,250 @@
package net.minecraft.data;
import com.google.common.collect.ImmutableMap;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
import com.mojang.logging.LogUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.WorldVersion;
import org.apache.commons.lang3.mutable.MutableInt;
import org.slf4j.Logger;
public class HashCache {
static final Logger LOGGER = LogUtils.getLogger();
private static final String HEADER_MARKER = "// ";
private final Path rootDir;
private final Path cacheDir;
private final String versionId;
private final Map<String, HashCache.ProviderCache> caches;
private final Map<String, HashCache.ProviderCache> originalCaches;
private final Set<String> cachesToWrite = new HashSet<>();
private final Set<Path> cachePaths = new HashSet<>();
private final int initialCount;
private int writes;
private Path getProviderCachePath(String p_254395_) {
return this.cacheDir.resolve(Hashing.sha1().hashString(p_254395_, StandardCharsets.UTF_8).toString());
}
public HashCache(Path p_236087_, Collection<String> p_253748_, WorldVersion p_236089_) throws IOException {
this.versionId = p_236089_.getName();
this.rootDir = p_236087_;
this.cacheDir = p_236087_.resolve(".cache");
Files.createDirectories(this.cacheDir);
Map<String, HashCache.ProviderCache> map = new HashMap<>();
int i = 0;
for(String s : p_253748_) {
Path path = this.getProviderCachePath(s);
this.cachePaths.add(path);
HashCache.ProviderCache hashcache$providercache = readCache(p_236087_, path);
map.put(s, hashcache$providercache);
i += hashcache$providercache.count();
}
this.caches = map;
this.originalCaches = Map.copyOf(this.caches);
this.initialCount = i;
}
private static HashCache.ProviderCache readCache(Path p_236093_, Path p_236094_) {
if (Files.isReadable(p_236094_)) {
try {
return HashCache.ProviderCache.load(p_236093_, p_236094_);
} catch (Exception exception) {
LOGGER.warn("Failed to parse cache {}, discarding", p_236094_, exception);
}
}
return new HashCache.ProviderCache("unknown", ImmutableMap.of());
}
public boolean shouldRunInThisVersion(String p_254319_) {
HashCache.ProviderCache hashcache$providercache = this.caches.get(p_254319_);
return hashcache$providercache == null || !hashcache$providercache.version.equals(this.versionId);
}
public CompletableFuture<HashCache.UpdateResult> generateUpdate(String p_253944_, HashCache.UpdateFunction p_254321_) {
HashCache.ProviderCache hashcache$providercache = this.caches.get(p_253944_);
if (hashcache$providercache == null) {
throw new IllegalStateException("Provider not registered: " + p_253944_);
} else {
HashCache.CacheUpdater hashcache$cacheupdater = new HashCache.CacheUpdater(p_253944_, this.versionId, hashcache$providercache);
return p_254321_.update(hashcache$cacheupdater).thenApply((p_253376_) -> {
return hashcache$cacheupdater.close();
});
}
}
public void applyUpdate(HashCache.UpdateResult p_253725_) {
this.caches.put(p_253725_.providerId(), p_253725_.cache());
this.cachesToWrite.add(p_253725_.providerId());
this.writes += p_253725_.writes();
}
public void purgeStaleAndWrite() throws IOException {
Set<Path> set = new HashSet<>();
this.caches.forEach((p_253378_, p_253379_) -> {
if (this.cachesToWrite.contains(p_253378_)) {
Path path = this.getProviderCachePath(p_253378_);
// Forge: Only rewrite the cache file if it changed or is missing
if (!p_253379_.equals(this.originalCaches.get(p_253378_)) || !Files.exists(path))
p_253379_.save(this.rootDir, path, DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(LocalDateTime.now()) + "\t" + p_253378_);
}
set.addAll(p_253379_.data().keySet());
});
set.add(this.rootDir.resolve("version.json"));
MutableInt mutableint = new MutableInt();
MutableInt mutableint1 = new MutableInt();
try (Stream<Path> stream = Files.walk(this.rootDir)) {
stream.forEach((p_236106_) -> {
if (!Files.isDirectory(p_236106_)) {
if (!this.cachePaths.contains(p_236106_)) {
mutableint.increment();
if (!set.contains(p_236106_)) {
try {
Files.delete(p_236106_);
} catch (IOException ioexception) {
LOGGER.warn("Failed to delete file {}", p_236106_, ioexception);
}
mutableint1.increment();
}
}
}
});
}
LOGGER.info("Caching: total files: {}, old count: {}, new count: {}, removed stale: {}, written: {}", mutableint, this.initialCount, set.size(), mutableint1, this.writes);
}
class CacheUpdater implements CachedOutput {
private final String provider;
private final HashCache.ProviderCache oldCache;
private final HashCache.ProviderCacheBuilder newCache;
private final AtomicInteger writes = new AtomicInteger();
private volatile boolean closed;
CacheUpdater(String p_253971_, String p_254002_, HashCache.ProviderCache p_254244_) {
this.provider = p_253971_;
this.oldCache = p_254244_;
this.newCache = new HashCache.ProviderCacheBuilder(p_254002_);
}
private boolean shouldWrite(Path p_236120_, HashCode p_236121_) {
return !Objects.equals(this.oldCache.get(p_236120_), p_236121_) || !Files.exists(p_236120_);
}
public void writeIfNeeded(Path p_236123_, byte[] p_236124_, HashCode p_236125_) throws IOException {
if (this.closed) {
throw new IllegalStateException("Cannot write to cache as it has already been closed");
} else {
if (this.shouldWrite(p_236123_, p_236125_)) {
this.writes.incrementAndGet();
Files.createDirectories(p_236123_.getParent());
Files.write(p_236123_, p_236124_);
}
this.newCache.put(p_236123_, p_236125_);
}
}
public HashCache.UpdateResult close() {
this.closed = true;
return new HashCache.UpdateResult(this.provider, this.newCache.build(), this.writes.get());
}
}
static record ProviderCache(String version, ImmutableMap<Path, HashCode> data) {
@Nullable
public HashCode get(Path p_236135_) {
return this.data.get(p_236135_);
}
public int count() {
return this.data.size();
}
public static HashCache.ProviderCache load(Path p_236140_, Path p_236141_) throws IOException {
try (BufferedReader bufferedreader = Files.newBufferedReader(p_236141_, StandardCharsets.UTF_8)) {
String s = bufferedreader.readLine();
if (!s.startsWith("// ")) {
throw new IllegalStateException("Missing cache file header");
} else {
String[] astring = s.substring("// ".length()).split("\t", 2);
String s1 = astring[0];
ImmutableMap.Builder<Path, HashCode> builder = ImmutableMap.builder();
bufferedreader.lines().forEach((p_253382_) -> {
int i = p_253382_.indexOf(32);
builder.put(p_236140_.resolve(p_253382_.substring(i + 1)), HashCode.fromString(p_253382_.substring(0, i)));
});
return new HashCache.ProviderCache(s1, builder.build());
}
}
}
public void save(Path p_236143_, Path p_236144_, String p_236145_) {
try (BufferedWriter bufferedwriter = Files.newBufferedWriter(p_236144_, StandardCharsets.UTF_8)) {
bufferedwriter.write("// ");
bufferedwriter.write(this.version);
bufferedwriter.write(9);
bufferedwriter.write(p_236145_);
bufferedwriter.newLine();
// Forge: Standardize order of entries
for(Map.Entry<Path, HashCode> entry : this.data.entrySet().stream().sorted(Map.Entry.comparingByKey()).toList()) {
bufferedwriter.write(entry.getValue().toString());
bufferedwriter.write(32);
bufferedwriter.write(p_236143_.relativize(entry.getKey()).toString().replace("\\", "/")); // Forge: Standardize file paths.
bufferedwriter.newLine();
}
} catch (IOException ioexception) {
HashCache.LOGGER.warn("Unable write cachefile {}: {}", p_236144_, ioexception);
}
}
}
static record ProviderCacheBuilder(String version, ConcurrentMap<Path, HashCode> data) {
ProviderCacheBuilder(String p_254186_) {
this(p_254186_, new ConcurrentHashMap<>());
}
public void put(Path p_254121_, HashCode p_254288_) {
this.data.put(p_254121_, p_254288_);
}
public HashCache.ProviderCache build() {
return new HashCache.ProviderCache(this.version, ImmutableMap.copyOf(this.data));
}
}
@FunctionalInterface
public interface UpdateFunction {
CompletableFuture<?> update(CachedOutput p_253936_);
}
public static record UpdateResult(String providerId, HashCache.ProviderCache cache, int writes) {
}
}

View File

@@ -0,0 +1,151 @@
package net.minecraft.data;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import net.minecraft.SharedConstants;
import net.minecraft.Util;
import net.minecraft.WorldVersion;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.advancements.packs.VanillaAdvancementProvider;
import net.minecraft.data.info.BiomeParametersDumpReport;
import net.minecraft.data.info.BlockListReport;
import net.minecraft.data.info.CommandsReport;
import net.minecraft.data.info.RegistryDumpReport;
import net.minecraft.data.loot.packs.VanillaLootTableProvider;
import net.minecraft.data.metadata.PackMetadataGenerator;
import net.minecraft.data.models.ModelProvider;
import net.minecraft.data.recipes.packs.BundleRecipeProvider;
import net.minecraft.data.recipes.packs.VanillaRecipeProvider;
import net.minecraft.data.registries.RegistriesDatapackGenerator;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.data.structures.NbtToSnbt;
import net.minecraft.data.structures.SnbtToNbt;
import net.minecraft.data.structures.StructureUpdater;
import net.minecraft.data.tags.BannerPatternTagsProvider;
import net.minecraft.data.tags.BiomeTagsProvider;
import net.minecraft.data.tags.CatVariantTagsProvider;
import net.minecraft.data.tags.DamageTypeTagsProvider;
import net.minecraft.data.tags.EntityTypeTagsProvider;
import net.minecraft.data.tags.FlatLevelGeneratorPresetTagsProvider;
import net.minecraft.data.tags.FluidTagsProvider;
import net.minecraft.data.tags.GameEventTagsProvider;
import net.minecraft.data.tags.InstrumentTagsProvider;
import net.minecraft.data.tags.PaintingVariantTagsProvider;
import net.minecraft.data.tags.PoiTypeTagsProvider;
import net.minecraft.data.tags.StructureTagsProvider;
import net.minecraft.data.tags.TagsProvider;
import net.minecraft.data.tags.VanillaBlockTagsProvider;
import net.minecraft.data.tags.VanillaItemTagsProvider;
import net.minecraft.data.tags.WorldPresetTagsProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.obfuscate.DontObfuscate;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
public class Main {
@DontObfuscate
public static void main(String[] p_129669_) throws IOException {
SharedConstants.tryDetectVersion();
OptionParser optionparser = new OptionParser();
OptionSpec<Void> optionspec = optionparser.accepts("help", "Show the help menu").forHelp();
OptionSpec<Void> optionspec1 = optionparser.accepts("server", "Include server generators");
OptionSpec<Void> optionspec2 = optionparser.accepts("client", "Include client generators");
OptionSpec<Void> optionspec3 = optionparser.accepts("dev", "Include development tools");
OptionSpec<Void> optionspec4 = optionparser.accepts("reports", "Include data reports");
OptionSpec<Void> optionspec5 = optionparser.accepts("validate", "Validate inputs");
OptionSpec<Void> optionspec6 = optionparser.accepts("all", "Include all generators");
OptionSpec<String> optionspec7 = optionparser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated");
OptionSpec<String> optionspec8 = optionparser.accepts("input", "Input folder").withRequiredArg();
OptionSpec<String> existing = optionparser.accepts("existing", "Existing resource packs that generated resources can reference").withRequiredArg();
OptionSpec<String> existingMod = optionparser.accepts("existing-mod", "Existing mods that generated resources can reference the resource packs of").withRequiredArg();
OptionSpec<java.io.File> gameDir = optionparser.accepts("gameDir").withRequiredArg().ofType(java.io.File.class).defaultsTo(new java.io.File(".")).required(); //Need by modlauncher, so lets just eat it
OptionSpec<String> mod = optionparser.accepts("mod", "A modid to dump").withRequiredArg().withValuesSeparatedBy(",");
OptionSpec<Void> flat = optionparser.accepts("flat", "Do not append modid prefix to output directory when generating for multiple mods");
OptionSpec<String> assetIndex = optionparser.accepts("assetIndex").withRequiredArg();
OptionSpec<java.io.File> assetsDir = optionparser.accepts("assetsDir").withRequiredArg().ofType(java.io.File.class);
OptionSet optionset = optionparser.parse(p_129669_);
if (!optionset.has(optionspec) && optionset.hasOptions() && !(optionset.specs().size() == 1 && optionset.has(gameDir))) {
Path path = Paths.get(optionspec7.value(optionset));
boolean flag = optionset.has(optionspec6);
boolean flag1 = flag || optionset.has(optionspec2);
boolean flag2 = flag || optionset.has(optionspec1);
boolean flag3 = flag || optionset.has(optionspec3);
boolean flag4 = flag || optionset.has(optionspec4);
boolean flag5 = flag || optionset.has(optionspec5);
Collection<Path> inputs = optionset.valuesOf(optionspec8).stream().map(Paths::get).collect(Collectors.toList());
Collection<Path> existingPacks = optionset.valuesOf(existing).stream().map(Paths::get).collect(Collectors.toList());
java.util.Set<String> existingMods = new java.util.HashSet<>(optionset.valuesOf(existingMod));
java.util.Set<String> mods = new java.util.HashSet<>(optionset.valuesOf(mod));
boolean isFlat = mods.isEmpty() || optionset.has(flat);
net.minecraftforge.data.loading.DatagenModLoader.begin(mods, path, inputs, existingPacks, existingMods, flag2, flag1, flag3, flag4, flag5, isFlat, optionset.valueOf(assetIndex), optionset.valueOf(assetsDir));
if (mods.contains("minecraft") || mods.isEmpty())
createStandardGenerator(isFlat ? path : path.resolve("minecraft"), inputs, flag1, flag2, flag3, flag4, flag5, SharedConstants.getCurrentVersion(), true).run();
} else {
optionparser.printHelpOn(System.out);
}
}
private static <T extends DataProvider> DataProvider.Factory<T> bindRegistries(BiFunction<PackOutput, CompletableFuture<HolderLookup.Provider>, T> p_256618_, CompletableFuture<HolderLookup.Provider> p_256515_) {
return (p_255476_) -> {
return p_256618_.apply(p_255476_, p_256515_);
};
}
public static DataGenerator createStandardGenerator(Path p_236680_, Collection<Path> p_236681_, boolean p_236682_, boolean p_236683_, boolean p_236684_, boolean p_236685_, boolean p_236686_, WorldVersion p_236687_, boolean p_236688_) {
DataGenerator datagenerator = new DataGenerator(p_236680_, p_236687_, p_236688_);
DataGenerator.PackGenerator datagenerator$packgenerator = datagenerator.getVanillaPack(p_236682_ || p_236683_);
datagenerator$packgenerator.addProvider((p_253388_) -> {
return (new SnbtToNbt(p_253388_, p_236681_)).addFilter(new StructureUpdater());
});
CompletableFuture<HolderLookup.Provider> completablefuture = CompletableFuture.supplyAsync(VanillaRegistries::createLookup, Util.backgroundExecutor());
DataGenerator.PackGenerator datagenerator$packgenerator1 = datagenerator.getVanillaPack(p_236682_);
datagenerator$packgenerator1.addProvider(ModelProvider::new);
DataGenerator.PackGenerator datagenerator$packgenerator2 = datagenerator.getVanillaPack(p_236683_);
datagenerator$packgenerator2.addProvider(bindRegistries(RegistriesDatapackGenerator::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(VanillaAdvancementProvider::create, completablefuture));
datagenerator$packgenerator2.addProvider(VanillaLootTableProvider::create);
datagenerator$packgenerator2.addProvider(VanillaRecipeProvider::new);
TagsProvider<Block> tagsprovider1 = datagenerator$packgenerator2.addProvider(bindRegistries(VanillaBlockTagsProvider::new, completablefuture));
TagsProvider<Item> tagsprovider = datagenerator$packgenerator2.addProvider((p_274753_) -> {
return new VanillaItemTagsProvider(p_274753_, completablefuture, tagsprovider1.contentsGetter());
});
datagenerator$packgenerator2.addProvider(bindRegistries(BannerPatternTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(BiomeTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(CatVariantTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(DamageTypeTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(EntityTypeTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(FlatLevelGeneratorPresetTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(FluidTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(GameEventTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(InstrumentTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(PaintingVariantTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(PoiTypeTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(StructureTagsProvider::new, completablefuture));
datagenerator$packgenerator2.addProvider(bindRegistries(WorldPresetTagsProvider::new, completablefuture));
datagenerator$packgenerator2 = datagenerator.getVanillaPack(p_236684_);
datagenerator$packgenerator2.addProvider((p_253386_) -> {
return new NbtToSnbt(p_253386_, p_236681_);
});
datagenerator$packgenerator2 = datagenerator.getVanillaPack(p_236685_);
datagenerator$packgenerator2.addProvider(bindRegistries(BiomeParametersDumpReport::new, completablefuture));
datagenerator$packgenerator2.addProvider(BlockListReport::new);
datagenerator$packgenerator2.addProvider(bindRegistries(CommandsReport::new, completablefuture));
datagenerator$packgenerator2.addProvider(RegistryDumpReport::new);
datagenerator$packgenerator2 = datagenerator.getBuiltinDatapack(p_236683_, "bundle");
datagenerator$packgenerator2.addProvider(BundleRecipeProvider::new);
datagenerator$packgenerator2.addProvider((p_253392_) -> {
return PackMetadataGenerator.forFeaturePack(p_253392_, Component.translatable("dataPack.bundle.description"), FeatureFlagSet.of(FeatureFlags.BUNDLE));
});
return datagenerator;
}
}

View File

@@ -0,0 +1,54 @@
package net.minecraft.data;
import java.nio.file.Path;
import net.minecraft.resources.ResourceLocation;
public class PackOutput {
private final Path outputFolder;
public PackOutput(Path p_252039_) {
this.outputFolder = p_252039_;
}
public Path getOutputFolder() {
return this.outputFolder;
}
public Path getOutputFolder(PackOutput.Target p_251669_) {
return this.getOutputFolder().resolve(p_251669_.directory);
}
public PackOutput.PathProvider createPathProvider(PackOutput.Target p_249479_, String p_251050_) {
return new PackOutput.PathProvider(this, p_249479_, p_251050_);
}
public static class PathProvider {
private final Path root;
private final String kind;
PathProvider(PackOutput p_249025_, PackOutput.Target p_251200_, String p_251982_) {
this.root = p_249025_.getOutputFolder(p_251200_);
this.kind = p_251982_;
}
public Path file(ResourceLocation p_250940_, String p_251208_) {
return this.root.resolve(p_250940_.getNamespace()).resolve(this.kind).resolve(p_250940_.getPath() + "." + p_251208_);
}
public Path json(ResourceLocation p_251634_) {
return this.root.resolve(p_251634_.getNamespace()).resolve(this.kind).resolve(p_251634_.getPath() + ".json");
}
}
public static enum Target {
DATA_PACK("data"),
RESOURCE_PACK("assets"),
REPORTS("reports");
final String directory;
private Target(String p_251326_) {
this.directory = p_251326_;
}
}
}

View File

@@ -0,0 +1,59 @@
package net.minecraft.data.advancements;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import net.minecraft.advancements.Advancement;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
/**
* @deprecated Forge: Use {@link net.minecraftforge.common.data.ForgeAdvancementProvider} instead,
* provides ease of access for the {@link net.minecraftforge.common.data.ExistingFileHelper} in the generator
*/
@Deprecated
public class AdvancementProvider implements DataProvider {
private final PackOutput.PathProvider pathProvider;
private final List<AdvancementSubProvider> subProviders;
private final CompletableFuture<HolderLookup.Provider> registries;
public AdvancementProvider(PackOutput p_256529_, CompletableFuture<HolderLookup.Provider> p_255722_, List<AdvancementSubProvider> p_255883_) {
this.pathProvider = p_256529_.createPathProvider(PackOutput.Target.DATA_PACK, "advancements");
this.subProviders = p_255883_;
this.registries = p_255722_;
}
public CompletableFuture<?> run(CachedOutput p_254268_) {
return this.registries.thenCompose((p_255484_) -> {
Set<ResourceLocation> set = new HashSet<>();
List<CompletableFuture<?>> list = new ArrayList<>();
Consumer<Advancement> consumer = (p_253397_) -> {
if (!set.add(p_253397_.getId())) {
throw new IllegalStateException("Duplicate advancement " + p_253397_.getId());
} else {
Path path = this.pathProvider.json(p_253397_.getId());
list.add(DataProvider.saveStable(p_254268_, p_253397_.deconstruct().serializeToJson(), path));
}
};
for(AdvancementSubProvider advancementsubprovider : this.subProviders) {
advancementsubprovider.generate(p_255484_, consumer);
}
return CompletableFuture.allOf(list.toArray((p_253393_) -> {
return new CompletableFuture[p_253393_];
}));
});
}
public final String getName() {
return "Advancements";
}
}

View File

@@ -0,0 +1,14 @@
package net.minecraft.data.advancements;
import java.util.function.Consumer;
import net.minecraft.advancements.Advancement;
import net.minecraft.core.HolderLookup;
import net.minecraft.resources.ResourceLocation;
public interface AdvancementSubProvider {
static Advancement createPlaceholder(String p_267076_) {
return Advancement.Builder.advancement().build(new ResourceLocation(p_267076_));
}
void generate(HolderLookup.Provider p_255901_, Consumer<Advancement> p_250888_);
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.advancements;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,13 @@
package net.minecraft.data.advancements.packs;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.advancements.AdvancementProvider;
public class VanillaAdvancementProvider {
public static AdvancementProvider create(PackOutput p_255890_, CompletableFuture<HolderLookup.Provider> p_255777_) {
return new AdvancementProvider(p_255890_, p_255777_, List.of(new VanillaTheEndAdvancements(), new VanillaHusbandryAdvancements(), new VanillaAdventureAdvancements(), new VanillaNetherAdvancements(), new VanillaStoryAdvancements()));
}
}

View File

@@ -0,0 +1,205 @@
package net.minecraft.data.advancements.packs;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Stream;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.FrameType;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.BlockPredicate;
import net.minecraft.advancements.critereon.ChanneledLightningTrigger;
import net.minecraft.advancements.critereon.DamagePredicate;
import net.minecraft.advancements.critereon.DamageSourcePredicate;
import net.minecraft.advancements.critereon.DistancePredicate;
import net.minecraft.advancements.critereon.DistanceTrigger;
import net.minecraft.advancements.critereon.EntityEquipmentPredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger;
import net.minecraft.advancements.critereon.KilledByCrossbowTrigger;
import net.minecraft.advancements.critereon.KilledTrigger;
import net.minecraft.advancements.critereon.LighthingBoltPredicate;
import net.minecraft.advancements.critereon.LightningStrikeTrigger;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.LootTableTrigger;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.PlayerHurtEntityTrigger;
import net.minecraft.advancements.critereon.PlayerPredicate;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.advancements.critereon.RecipeCraftedTrigger;
import net.minecraft.advancements.critereon.ShotCrossbowTrigger;
import net.minecraft.advancements.critereon.SlideDownBlockTrigger;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.advancements.critereon.SummonedEntityTrigger;
import net.minecraft.advancements.critereon.TagPredicate;
import net.minecraft.advancements.critereon.TargetBlockTrigger;
import net.minecraft.advancements.critereon.TradeTrigger;
import net.minecraft.advancements.critereon.UsedTotemTrigger;
import net.minecraft.advancements.critereon.UsingItemTrigger;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.data.recipes.packs.VanillaRecipeProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.tags.EntityTypeTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.raid.Raid;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.DecoratedPotRecipe;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.ComparatorBlock;
import net.minecraft.world.level.block.entity.DecoratedPotBlockEntity;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.predicates.AllOfCondition;
import net.minecraft.world.level.storage.loot.predicates.AnyOfCondition;
import net.minecraft.world.level.storage.loot.predicates.LocationCheck;
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
public class VanillaAdventureAdvancements implements AdvancementSubProvider {
private static final int DISTANCE_FROM_BOTTOM_TO_TOP = 384;
private static final int Y_COORDINATE_AT_TOP = 320;
private static final int Y_COORDINATE_AT_BOTTOM = -64;
private static final int BEDROCK_THICKNESS = 5;
private static final EntityType<?>[] MOBS_TO_KILL = new EntityType[]{EntityType.BLAZE, EntityType.CAVE_SPIDER, EntityType.CREEPER, EntityType.DROWNED, EntityType.ELDER_GUARDIAN, EntityType.ENDER_DRAGON, EntityType.ENDERMAN, EntityType.ENDERMITE, EntityType.EVOKER, EntityType.GHAST, EntityType.GUARDIAN, EntityType.HOGLIN, EntityType.HUSK, EntityType.MAGMA_CUBE, EntityType.PHANTOM, EntityType.PIGLIN, EntityType.PIGLIN_BRUTE, EntityType.PILLAGER, EntityType.RAVAGER, EntityType.SHULKER, EntityType.SILVERFISH, EntityType.SKELETON, EntityType.SLIME, EntityType.SPIDER, EntityType.STRAY, EntityType.VEX, EntityType.VINDICATOR, EntityType.WITCH, EntityType.WITHER_SKELETON, EntityType.WITHER, EntityType.ZOGLIN, EntityType.ZOMBIE_VILLAGER, EntityType.ZOMBIE, EntityType.ZOMBIFIED_PIGLIN};
private static LightningStrikeTrigger.TriggerInstance fireCountAndBystander(MinMaxBounds.Ints p_252298_, EntityPredicate p_251894_) {
return LightningStrikeTrigger.TriggerInstance.lighthingStrike(EntityPredicate.Builder.entity().distance(DistancePredicate.absolute(MinMaxBounds.Doubles.atMost(30.0D))).subPredicate(LighthingBoltPredicate.blockSetOnFire(p_252298_)).build(), p_251894_);
}
private static UsingItemTrigger.TriggerInstance lookAtThroughItem(EntityType<?> p_249703_, Item p_250746_) {
return UsingItemTrigger.TriggerInstance.lookingAt(EntityPredicate.Builder.entity().subPredicate(PlayerPredicate.Builder.player().setLookingAt(EntityPredicate.Builder.entity().of(p_249703_).build()).build()), ItemPredicate.Builder.item().of(p_250746_));
}
public void generate(HolderLookup.Provider p_255887_, Consumer<Advancement> p_256428_) {
Advancement advancement = Advancement.Builder.advancement().display(Items.MAP, Component.translatable("advancements.adventure.root.title"), Component.translatable("advancements.adventure.root.description"), new ResourceLocation("textures/gui/advancements/backgrounds/adventure.png"), FrameType.TASK, false, false, false).requirements(RequirementsStrategy.OR).addCriterion("killed_something", KilledTrigger.TriggerInstance.playerKilledEntity()).addCriterion("killed_by_something", KilledTrigger.TriggerInstance.entityKilledPlayer()).save(p_256428_, "adventure/root");
Advancement advancement1 = Advancement.Builder.advancement().parent(advancement).display(Blocks.RED_BED, Component.translatable("advancements.adventure.sleep_in_bed.title"), Component.translatable("advancements.adventure.sleep_in_bed.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("slept_in_bed", PlayerTrigger.TriggerInstance.sleptInBed()).save(p_256428_, "adventure/sleep_in_bed");
createAdventuringTime(p_256428_, advancement1, MultiNoiseBiomeSourceParameterList.Preset.OVERWORLD);
Advancement advancement2 = Advancement.Builder.advancement().parent(advancement).display(Items.EMERALD, Component.translatable("advancements.adventure.trade.title"), Component.translatable("advancements.adventure.trade.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("traded", TradeTrigger.TriggerInstance.tradedWithVillager()).save(p_256428_, "adventure/trade");
Advancement.Builder.advancement().parent(advancement2).display(Items.EMERALD, Component.translatable("advancements.adventure.trade_at_world_height.title"), Component.translatable("advancements.adventure.trade_at_world_height.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("trade_at_world_height", TradeTrigger.TriggerInstance.tradedWithVillager(EntityPredicate.Builder.entity().located(LocationPredicate.atYLocation(MinMaxBounds.Doubles.atLeast(319.0D))))).save(p_256428_, "adventure/trade_at_world_height");
Advancement advancement3 = addMobsToKill(Advancement.Builder.advancement()).parent(advancement).display(Items.IRON_SWORD, Component.translatable("advancements.adventure.kill_a_mob.title"), Component.translatable("advancements.adventure.kill_a_mob.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).save(p_256428_, "adventure/kill_a_mob");
addMobsToKill(Advancement.Builder.advancement()).parent(advancement3).display(Items.DIAMOND_SWORD, Component.translatable("advancements.adventure.kill_all_mobs.title"), Component.translatable("advancements.adventure.kill_all_mobs.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).save(p_256428_, "adventure/kill_all_mobs");
Advancement advancement4 = Advancement.Builder.advancement().parent(advancement3).display(Items.BOW, Component.translatable("advancements.adventure.shoot_arrow.title"), Component.translatable("advancements.adventure.shoot_arrow.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("shot_arrow", PlayerHurtEntityTrigger.TriggerInstance.playerHurtEntity(DamagePredicate.Builder.damageInstance().type(DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE)).direct(EntityPredicate.Builder.entity().of(EntityTypeTags.ARROWS))))).save(p_256428_, "adventure/shoot_arrow");
Advancement advancement5 = Advancement.Builder.advancement().parent(advancement3).display(Items.TRIDENT, Component.translatable("advancements.adventure.throw_trident.title"), Component.translatable("advancements.adventure.throw_trident.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("shot_trident", PlayerHurtEntityTrigger.TriggerInstance.playerHurtEntity(DamagePredicate.Builder.damageInstance().type(DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE)).direct(EntityPredicate.Builder.entity().of(EntityType.TRIDENT))))).save(p_256428_, "adventure/throw_trident");
Advancement.Builder.advancement().parent(advancement5).display(Items.TRIDENT, Component.translatable("advancements.adventure.very_very_frightening.title"), Component.translatable("advancements.adventure.very_very_frightening.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("struck_villager", ChanneledLightningTrigger.TriggerInstance.channeledLightning(EntityPredicate.Builder.entity().of(EntityType.VILLAGER).build())).save(p_256428_, "adventure/very_very_frightening");
Advancement.Builder.advancement().parent(advancement2).display(Blocks.CARVED_PUMPKIN, Component.translatable("advancements.adventure.summon_iron_golem.title"), Component.translatable("advancements.adventure.summon_iron_golem.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("summoned_golem", SummonedEntityTrigger.TriggerInstance.summonedEntity(EntityPredicate.Builder.entity().of(EntityType.IRON_GOLEM))).save(p_256428_, "adventure/summon_iron_golem");
Advancement.Builder.advancement().parent(advancement4).display(Items.ARROW, Component.translatable("advancements.adventure.sniper_duel.title"), Component.translatable("advancements.adventure.sniper_duel.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(50)).addCriterion("killed_skeleton", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(EntityType.SKELETON).distance(DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(50.0D))), DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE)))).save(p_256428_, "adventure/sniper_duel");
Advancement.Builder.advancement().parent(advancement3).display(Items.TOTEM_OF_UNDYING, Component.translatable("advancements.adventure.totem_of_undying.title"), Component.translatable("advancements.adventure.totem_of_undying.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("used_totem", UsedTotemTrigger.TriggerInstance.usedTotem(Items.TOTEM_OF_UNDYING)).save(p_256428_, "adventure/totem_of_undying");
Advancement advancement6 = Advancement.Builder.advancement().parent(advancement).display(Items.CROSSBOW, Component.translatable("advancements.adventure.ol_betsy.title"), Component.translatable("advancements.adventure.ol_betsy.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("shot_crossbow", ShotCrossbowTrigger.TriggerInstance.shotCrossbow(Items.CROSSBOW)).save(p_256428_, "adventure/ol_betsy");
Advancement.Builder.advancement().parent(advancement6).display(Items.CROSSBOW, Component.translatable("advancements.adventure.whos_the_pillager_now.title"), Component.translatable("advancements.adventure.whos_the_pillager_now.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("kill_pillager", KilledByCrossbowTrigger.TriggerInstance.crossbowKilled(EntityPredicate.Builder.entity().of(EntityType.PILLAGER))).save(p_256428_, "adventure/whos_the_pillager_now");
Advancement.Builder.advancement().parent(advancement6).display(Items.CROSSBOW, Component.translatable("advancements.adventure.two_birds_one_arrow.title"), Component.translatable("advancements.adventure.two_birds_one_arrow.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(65)).addCriterion("two_birds", KilledByCrossbowTrigger.TriggerInstance.crossbowKilled(EntityPredicate.Builder.entity().of(EntityType.PHANTOM), EntityPredicate.Builder.entity().of(EntityType.PHANTOM))).save(p_256428_, "adventure/two_birds_one_arrow");
Advancement.Builder.advancement().parent(advancement6).display(Items.CROSSBOW, Component.translatable("advancements.adventure.arbalistic.title"), Component.translatable("advancements.adventure.arbalistic.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, true).rewards(AdvancementRewards.Builder.experience(85)).addCriterion("arbalistic", KilledByCrossbowTrigger.TriggerInstance.crossbowKilled(MinMaxBounds.Ints.exactly(5))).save(p_256428_, "adventure/arbalistic");
Advancement advancement7 = Advancement.Builder.advancement().parent(advancement).display(Raid.getLeaderBannerInstance(), Component.translatable("advancements.adventure.voluntary_exile.title"), Component.translatable("advancements.adventure.voluntary_exile.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).addCriterion("voluntary_exile", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(EntityTypeTags.RAIDERS).equipment(EntityEquipmentPredicate.CAPTAIN))).save(p_256428_, "adventure/voluntary_exile");
Advancement.Builder.advancement().parent(advancement7).display(Raid.getLeaderBannerInstance(), Component.translatable("advancements.adventure.hero_of_the_village.title"), Component.translatable("advancements.adventure.hero_of_the_village.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, true).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("hero_of_the_village", PlayerTrigger.TriggerInstance.raidWon()).save(p_256428_, "adventure/hero_of_the_village");
Advancement.Builder.advancement().parent(advancement).display(Blocks.HONEY_BLOCK.asItem(), Component.translatable("advancements.adventure.honey_block_slide.title"), Component.translatable("advancements.adventure.honey_block_slide.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("honey_block_slide", SlideDownBlockTrigger.TriggerInstance.slidesDownBlock(Blocks.HONEY_BLOCK)).save(p_256428_, "adventure/honey_block_slide");
Advancement.Builder.advancement().parent(advancement4).display(Blocks.TARGET.asItem(), Component.translatable("advancements.adventure.bullseye.title"), Component.translatable("advancements.adventure.bullseye.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(50)).addCriterion("bullseye", TargetBlockTrigger.TriggerInstance.targetHit(MinMaxBounds.Ints.exactly(15), EntityPredicate.wrap(EntityPredicate.Builder.entity().distance(DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(30.0D))).build()))).save(p_256428_, "adventure/bullseye");
Advancement.Builder.advancement().parent(advancement1).display(Items.LEATHER_BOOTS, Component.translatable("advancements.adventure.walk_on_powder_snow_with_leather_boots.title"), Component.translatable("advancements.adventure.walk_on_powder_snow_with_leather_boots.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("walk_on_powder_snow_with_leather_boots", PlayerTrigger.TriggerInstance.walkOnBlockWithEquipment(Blocks.POWDER_SNOW, Items.LEATHER_BOOTS)).save(p_256428_, "adventure/walk_on_powder_snow_with_leather_boots");
Advancement.Builder.advancement().parent(advancement).display(Items.LIGHTNING_ROD, Component.translatable("advancements.adventure.lightning_rod_with_villager_no_fire.title"), Component.translatable("advancements.adventure.lightning_rod_with_villager_no_fire.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("lightning_rod_with_villager_no_fire", fireCountAndBystander(MinMaxBounds.Ints.exactly(0), EntityPredicate.Builder.entity().of(EntityType.VILLAGER).build())).save(p_256428_, "adventure/lightning_rod_with_villager_no_fire");
Advancement advancement8 = Advancement.Builder.advancement().parent(advancement).display(Items.SPYGLASS, Component.translatable("advancements.adventure.spyglass_at_parrot.title"), Component.translatable("advancements.adventure.spyglass_at_parrot.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("spyglass_at_parrot", lookAtThroughItem(EntityType.PARROT, Items.SPYGLASS)).save(p_256428_, "adventure/spyglass_at_parrot");
Advancement advancement9 = Advancement.Builder.advancement().parent(advancement8).display(Items.SPYGLASS, Component.translatable("advancements.adventure.spyglass_at_ghast.title"), Component.translatable("advancements.adventure.spyglass_at_ghast.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("spyglass_at_ghast", lookAtThroughItem(EntityType.GHAST, Items.SPYGLASS)).save(p_256428_, "adventure/spyglass_at_ghast");
Advancement.Builder.advancement().parent(advancement1).display(Items.JUKEBOX, Component.translatable("advancements.adventure.play_jukebox_in_meadows.title"), Component.translatable("advancements.adventure.play_jukebox_in_meadows.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("play_jukebox_in_meadows", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBiome(Biomes.MEADOW).setBlock(BlockPredicate.Builder.block().of(Blocks.JUKEBOX).build()), ItemPredicate.Builder.item().of(ItemTags.MUSIC_DISCS))).save(p_256428_, "adventure/play_jukebox_in_meadows");
Advancement.Builder.advancement().parent(advancement9).display(Items.SPYGLASS, Component.translatable("advancements.adventure.spyglass_at_dragon.title"), Component.translatable("advancements.adventure.spyglass_at_dragon.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("spyglass_at_dragon", lookAtThroughItem(EntityType.ENDER_DRAGON, Items.SPYGLASS)).save(p_256428_, "adventure/spyglass_at_dragon");
Advancement.Builder.advancement().parent(advancement).display(Items.WATER_BUCKET, Component.translatable("advancements.adventure.fall_from_world_height.title"), Component.translatable("advancements.adventure.fall_from_world_height.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("fall_from_world_height", DistanceTrigger.TriggerInstance.fallFromHeight(EntityPredicate.Builder.entity().located(LocationPredicate.atYLocation(MinMaxBounds.Doubles.atMost(-59.0D))), DistancePredicate.vertical(MinMaxBounds.Doubles.atLeast(379.0D)), LocationPredicate.atYLocation(MinMaxBounds.Doubles.atLeast(319.0D)))).save(p_256428_, "adventure/fall_from_world_height");
Advancement.Builder.advancement().parent(advancement3).display(Blocks.SCULK_CATALYST, Component.translatable("advancements.adventure.kill_mob_near_sculk_catalyst.title"), Component.translatable("advancements.adventure.kill_mob_near_sculk_catalyst.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).addCriterion("kill_mob_near_sculk_catalyst", KilledTrigger.TriggerInstance.playerKilledEntityNearSculkCatalyst()).save(p_256428_, "adventure/kill_mob_near_sculk_catalyst");
Advancement.Builder.advancement().parent(advancement).display(Blocks.SCULK_SENSOR, Component.translatable("advancements.adventure.avoid_vibration.title"), Component.translatable("advancements.adventure.avoid_vibration.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("avoid_vibration", PlayerTrigger.TriggerInstance.avoidVibration()).save(p_256428_, "adventure/avoid_vibration");
Advancement advancement10 = respectingTheRemnantsCriterions(Advancement.Builder.advancement()).parent(advancement).display(Items.BRUSH, Component.translatable("advancements.adventure.salvage_sherd.title"), Component.translatable("advancements.adventure.salvage_sherd.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_256428_, "adventure/salvage_sherd");
Advancement.Builder.advancement().parent(advancement10).display(DecoratedPotRecipe.createDecoratedPotItem(new DecoratedPotBlockEntity.Decorations(Items.BRICK, Items.HEART_POTTERY_SHERD, Items.BRICK, Items.EXPLORER_POTTERY_SHERD)), Component.translatable("advancements.adventure.craft_decorated_pot_using_only_sherds.title"), Component.translatable("advancements.adventure.craft_decorated_pot_using_only_sherds.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("pot_crafted_using_only_sherds", RecipeCraftedTrigger.TriggerInstance.craftedItem(new ResourceLocation("minecraft:decorated_pot"), List.of(ItemPredicate.Builder.item().of(ItemTags.DECORATED_POT_SHERDS).build(), ItemPredicate.Builder.item().of(ItemTags.DECORATED_POT_SHERDS).build(), ItemPredicate.Builder.item().of(ItemTags.DECORATED_POT_SHERDS).build(), ItemPredicate.Builder.item().of(ItemTags.DECORATED_POT_SHERDS).build()))).save(p_256428_, "adventure/craft_decorated_pot_using_only_sherds");
Advancement advancement11 = craftingANewLook(Advancement.Builder.advancement()).parent(advancement).display(new ItemStack(Items.DUNE_ARMOR_TRIM_SMITHING_TEMPLATE), Component.translatable("advancements.adventure.trim_with_any_armor_pattern.title"), Component.translatable("advancements.adventure.trim_with_any_armor_pattern.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_256428_, "adventure/trim_with_any_armor_pattern");
smithingWithStyle(Advancement.Builder.advancement()).parent(advancement11).display(new ItemStack(Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE), Component.translatable("advancements.adventure.trim_with_all_exclusive_armor_patterns.title"), Component.translatable("advancements.adventure.trim_with_all_exclusive_armor_patterns.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).save(p_256428_, "adventure/trim_with_all_exclusive_armor_patterns");
Advancement.Builder.advancement().parent(advancement).display(Items.CHISELED_BOOKSHELF, Component.translatable("advancements.adventure.read_power_from_chiseled_bookshelf.title"), Component.translatable("advancements.adventure.read_power_from_chiseled_bookshelf.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("chiseled_bookshelf", placedBlockReadByComparator(Blocks.CHISELED_BOOKSHELF)).addCriterion("comparator", placedComparatorReadingBlock(Blocks.CHISELED_BOOKSHELF)).save(p_256428_, "adventure/read_power_of_chiseled_bookshelf");
}
private static CriterionTriggerInstance placedBlockReadByComparator(Block p_286401_) {
LootItemCondition.Builder[] alootitemcondition$builder = ComparatorBlock.FACING.getPossibleValues().stream().map((p_286187_) -> {
StatePropertiesPredicate statepropertiespredicate = StatePropertiesPredicate.Builder.properties().hasProperty(ComparatorBlock.FACING, p_286187_).build();
BlockPredicate blockpredicate = BlockPredicate.Builder.block().of(Blocks.COMPARATOR).setProperties(statepropertiespredicate).build();
return LocationCheck.checkLocation(LocationPredicate.Builder.location().setBlock(blockpredicate), new BlockPos(p_286187_.getOpposite().getNormal()));
}).toArray((p_286188_) -> {
return new LootItemCondition.Builder[p_286188_];
});
return ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_286401_), AnyOfCondition.anyOf(alootitemcondition$builder));
}
private static CriterionTriggerInstance placedComparatorReadingBlock(Block p_286250_) {
LootItemCondition.Builder[] alootitemcondition$builder = ComparatorBlock.FACING.getPossibleValues().stream().map((p_286190_) -> {
StatePropertiesPredicate.Builder statepropertiespredicate$builder = StatePropertiesPredicate.Builder.properties().hasProperty(ComparatorBlock.FACING, p_286190_);
LootItemBlockStatePropertyCondition.Builder lootitemblockstatepropertycondition$builder = (new LootItemBlockStatePropertyCondition.Builder(Blocks.COMPARATOR)).setProperties(statepropertiespredicate$builder);
LootItemCondition.Builder lootitemcondition$builder = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(p_286250_).build()), new BlockPos(p_286190_.getNormal()));
return AllOfCondition.allOf(lootitemblockstatepropertycondition$builder, lootitemcondition$builder);
}).toArray((p_286191_) -> {
return new LootItemCondition.Builder[p_286191_];
});
return ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(AnyOfCondition.anyOf(alootitemcondition$builder));
}
private static Advancement.Builder smithingWithStyle(Advancement.Builder p_285368_) {
p_285368_.requirements(RequirementsStrategy.AND);
Map<Item, ResourceLocation> map = VanillaRecipeProvider.smithingTrims();
Stream.of(Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE, Items.RIB_ARMOR_TRIM_SMITHING_TEMPLATE, Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.VEX_ARMOR_TRIM_SMITHING_TEMPLATE, Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE).forEach((p_284946_) -> {
ResourceLocation resourcelocation = map.get(p_284946_);
p_285368_.addCriterion("armor_trimmed_" + resourcelocation, RecipeCraftedTrigger.TriggerInstance.craftedItem(resourcelocation));
});
return p_285368_;
}
private static Advancement.Builder craftingANewLook(Advancement.Builder p_285062_) {
p_285062_.requirements(RequirementsStrategy.OR);
for(ResourceLocation resourcelocation : VanillaRecipeProvider.smithingTrims().values()) {
p_285062_.addCriterion("armor_trimmed_" + resourcelocation, RecipeCraftedTrigger.TriggerInstance.craftedItem(resourcelocation));
}
return p_285062_;
}
private static Advancement.Builder respectingTheRemnantsCriterions(Advancement.Builder p_285170_) {
p_285170_.addCriterion("desert_pyramid", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.DESERT_PYRAMID_ARCHAEOLOGY));
p_285170_.addCriterion("desert_well", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.DESERT_WELL_ARCHAEOLOGY));
p_285170_.addCriterion("ocean_ruin_cold", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY));
p_285170_.addCriterion("ocean_ruin_warm", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.OCEAN_RUIN_WARM_ARCHAEOLOGY));
p_285170_.addCriterion("trail_ruins_rare", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_RARE));
p_285170_.addCriterion("trail_ruins_common", LootTableTrigger.TriggerInstance.lootTableUsed(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON));
String[] astring = p_285170_.getCriteria().keySet().toArray((p_285038_) -> {
return new String[p_285038_];
});
String s = "has_sherd";
p_285170_.addCriterion("has_sherd", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(ItemTags.DECORATED_POT_SHERDS).build()));
p_285170_.requirements(new String[][]{astring, {"has_sherd"}});
return p_285170_;
}
protected static void createAdventuringTime(Consumer<Advancement> p_275645_, Advancement p_275219_, MultiNoiseBiomeSourceParameterList.Preset p_275211_) {
addBiomes(Advancement.Builder.advancement(), p_275211_.usedBiomes().toList()).parent(p_275219_).display(Items.DIAMOND_BOOTS, Component.translatable("advancements.adventure.adventuring_time.title"), Component.translatable("advancements.adventure.adventuring_time.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(500)).save(p_275645_, "adventure/adventuring_time");
}
private static Advancement.Builder addMobsToKill(Advancement.Builder p_248814_) {
for(EntityType<?> entitytype : MOBS_TO_KILL) {
p_248814_.addCriterion(BuiltInRegistries.ENTITY_TYPE.getKey(entitytype).toString(), KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(entitytype)));
}
return p_248814_;
}
protected static Advancement.Builder addBiomes(Advancement.Builder p_249250_, List<ResourceKey<Biome>> p_251338_) {
for(ResourceKey<Biome> resourcekey : p_251338_) {
p_249250_.addCriterion(resourcekey.location().toString(), PlayerTrigger.TriggerInstance.located(LocationPredicate.inBiome(resourcekey)));
}
return p_249250_;
}
}

View File

@@ -0,0 +1,136 @@
package net.minecraft.data.advancements.packs;
import java.util.Comparator;
import java.util.List;
import java.util.Map.Entry;
import java.util.function.Consumer;
import java.util.stream.Stream;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.FrameType;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.BeeNestDestroyedTrigger;
import net.minecraft.advancements.critereon.BlockPredicate;
import net.minecraft.advancements.critereon.BredAnimalsTrigger;
import net.minecraft.advancements.critereon.ConsumeItemTrigger;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.EffectsChangedTrigger;
import net.minecraft.advancements.critereon.EnchantmentPredicate;
import net.minecraft.advancements.critereon.EntityFlagsPredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.EntitySubPredicate;
import net.minecraft.advancements.critereon.FilledBucketTrigger;
import net.minecraft.advancements.critereon.FishingRodHookedTrigger;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.PickedUpItemTrigger;
import net.minecraft.advancements.critereon.PlayerInteractTrigger;
import net.minecraft.advancements.critereon.StartRidingTrigger;
import net.minecraft.advancements.critereon.TameAnimalTrigger;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.HoneycombItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.block.Blocks;
public class VanillaHusbandryAdvancements implements AdvancementSubProvider {
public static final List<EntityType<?>> BREEDABLE_ANIMALS = List.of(EntityType.HORSE, EntityType.DONKEY, EntityType.MULE, EntityType.SHEEP, EntityType.COW, EntityType.MOOSHROOM, EntityType.PIG, EntityType.CHICKEN, EntityType.WOLF, EntityType.OCELOT, EntityType.RABBIT, EntityType.LLAMA, EntityType.CAT, EntityType.PANDA, EntityType.FOX, EntityType.BEE, EntityType.HOGLIN, EntityType.STRIDER, EntityType.GOAT, EntityType.AXOLOTL, EntityType.CAMEL);
public static final List<EntityType<?>> INDIRECTLY_BREEDABLE_ANIMALS = List.of(EntityType.TURTLE, EntityType.FROG, EntityType.SNIFFER);
private static final Item[] FISH = new Item[]{Items.COD, Items.TROPICAL_FISH, Items.PUFFERFISH, Items.SALMON};
private static final Item[] FISH_BUCKETS = new Item[]{Items.COD_BUCKET, Items.TROPICAL_FISH_BUCKET, Items.PUFFERFISH_BUCKET, Items.SALMON_BUCKET};
private static final Item[] EDIBLE_ITEMS = new Item[]{Items.APPLE, Items.MUSHROOM_STEW, Items.BREAD, Items.PORKCHOP, Items.COOKED_PORKCHOP, Items.GOLDEN_APPLE, Items.ENCHANTED_GOLDEN_APPLE, Items.COD, Items.SALMON, Items.TROPICAL_FISH, Items.PUFFERFISH, Items.COOKED_COD, Items.COOKED_SALMON, Items.COOKIE, Items.MELON_SLICE, Items.BEEF, Items.COOKED_BEEF, Items.CHICKEN, Items.COOKED_CHICKEN, Items.ROTTEN_FLESH, Items.SPIDER_EYE, Items.CARROT, Items.POTATO, Items.BAKED_POTATO, Items.POISONOUS_POTATO, Items.GOLDEN_CARROT, Items.PUMPKIN_PIE, Items.RABBIT, Items.COOKED_RABBIT, Items.RABBIT_STEW, Items.MUTTON, Items.COOKED_MUTTON, Items.CHORUS_FRUIT, Items.BEETROOT, Items.BEETROOT_SOUP, Items.DRIED_KELP, Items.SUSPICIOUS_STEW, Items.SWEET_BERRIES, Items.HONEY_BOTTLE, Items.GLOW_BERRIES};
private static final Item[] WAX_SCRAPING_TOOLS = new Item[]{Items.WOODEN_AXE, Items.GOLDEN_AXE, Items.STONE_AXE, Items.IRON_AXE, Items.DIAMOND_AXE, Items.NETHERITE_AXE};
public void generate(HolderLookup.Provider p_255680_, Consumer<Advancement> p_251389_) {
Advancement advancement = Advancement.Builder.advancement().display(Blocks.HAY_BLOCK, Component.translatable("advancements.husbandry.root.title"), Component.translatable("advancements.husbandry.root.description"), new ResourceLocation("textures/gui/advancements/backgrounds/husbandry.png"), FrameType.TASK, false, false, false).addCriterion("consumed_item", ConsumeItemTrigger.TriggerInstance.usedItem()).save(p_251389_, "husbandry/root");
Advancement advancement1 = Advancement.Builder.advancement().parent(advancement).display(Items.WHEAT, Component.translatable("advancements.husbandry.plant_seed.title"), Component.translatable("advancements.husbandry.plant_seed.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("wheat", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.WHEAT)).addCriterion("pumpkin_stem", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PUMPKIN_STEM)).addCriterion("melon_stem", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.MELON_STEM)).addCriterion("beetroots", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.BEETROOTS)).addCriterion("nether_wart", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.NETHER_WART)).addCriterion("torchflower", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.TORCHFLOWER_CROP)).addCriterion("pitcher_pod", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PITCHER_CROP)).save(p_251389_, "husbandry/plant_seed");
Advancement advancement2 = Advancement.Builder.advancement().parent(advancement).display(Items.WHEAT, Component.translatable("advancements.husbandry.breed_an_animal.title"), Component.translatable("advancements.husbandry.breed_an_animal.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("bred", BredAnimalsTrigger.TriggerInstance.bredAnimals()).save(p_251389_, "husbandry/breed_an_animal");
createBreedAllAnimalsAdvancement(advancement2, p_251389_, BREEDABLE_ANIMALS.stream(), INDIRECTLY_BREEDABLE_ANIMALS.stream());
addFood(Advancement.Builder.advancement()).parent(advancement1).display(Items.APPLE, Component.translatable("advancements.husbandry.balanced_diet.title"), Component.translatable("advancements.husbandry.balanced_diet.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).save(p_251389_, "husbandry/balanced_diet");
Advancement.Builder.advancement().parent(advancement1).display(Items.NETHERITE_HOE, Component.translatable("advancements.husbandry.netherite_hoe.title"), Component.translatable("advancements.husbandry.netherite_hoe.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("netherite_hoe", InventoryChangeTrigger.TriggerInstance.hasItems(Items.NETHERITE_HOE)).save(p_251389_, "husbandry/obtain_netherite_hoe");
Advancement advancement3 = Advancement.Builder.advancement().parent(advancement).display(Items.LEAD, Component.translatable("advancements.husbandry.tame_an_animal.title"), Component.translatable("advancements.husbandry.tame_an_animal.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("tamed_animal", TameAnimalTrigger.TriggerInstance.tamedAnimal()).save(p_251389_, "husbandry/tame_an_animal");
Advancement advancement4 = addFish(Advancement.Builder.advancement()).parent(advancement).requirements(RequirementsStrategy.OR).display(Items.FISHING_ROD, Component.translatable("advancements.husbandry.fishy_business.title"), Component.translatable("advancements.husbandry.fishy_business.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/fishy_business");
Advancement advancement5 = addFishBuckets(Advancement.Builder.advancement()).parent(advancement4).requirements(RequirementsStrategy.OR).display(Items.PUFFERFISH_BUCKET, Component.translatable("advancements.husbandry.tactical_fishing.title"), Component.translatable("advancements.husbandry.tactical_fishing.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/tactical_fishing");
Advancement advancement6 = Advancement.Builder.advancement().parent(advancement5).requirements(RequirementsStrategy.OR).addCriterion(BuiltInRegistries.ITEM.getKey(Items.AXOLOTL_BUCKET).getPath(), FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(Items.AXOLOTL_BUCKET).build())).display(Items.AXOLOTL_BUCKET, Component.translatable("advancements.husbandry.axolotl_in_a_bucket.title"), Component.translatable("advancements.husbandry.axolotl_in_a_bucket.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/axolotl_in_a_bucket");
Advancement.Builder.advancement().parent(advancement6).addCriterion("kill_axolotl_target", EffectsChangedTrigger.TriggerInstance.gotEffectsFrom(EntityPredicate.Builder.entity().of(EntityType.AXOLOTL).build())).display(Items.TROPICAL_FISH_BUCKET, Component.translatable("advancements.husbandry.kill_axolotl_target.title"), Component.translatable("advancements.husbandry.kill_axolotl_target.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/kill_axolotl_target");
addCatVariants(Advancement.Builder.advancement()).parent(advancement3).display(Items.COD, Component.translatable("advancements.husbandry.complete_catalogue.title"), Component.translatable("advancements.husbandry.complete_catalogue.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(50)).save(p_251389_, "husbandry/complete_catalogue");
Advancement advancement7 = Advancement.Builder.advancement().parent(advancement).addCriterion("safely_harvest_honey", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(BlockTags.BEEHIVES).build()).setSmokey(true), ItemPredicate.Builder.item().of(Items.GLASS_BOTTLE))).display(Items.HONEY_BOTTLE, Component.translatable("advancements.husbandry.safely_harvest_honey.title"), Component.translatable("advancements.husbandry.safely_harvest_honey.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/safely_harvest_honey");
Advancement advancement8 = Advancement.Builder.advancement().parent(advancement7).display(Items.HONEYCOMB, Component.translatable("advancements.husbandry.wax_on.title"), Component.translatable("advancements.husbandry.wax_on.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("wax_on", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(HoneycombItem.WAXABLES.get().keySet()).build()), ItemPredicate.Builder.item().of(Items.HONEYCOMB))).save(p_251389_, "husbandry/wax_on");
Advancement.Builder.advancement().parent(advancement8).display(Items.STONE_AXE, Component.translatable("advancements.husbandry.wax_off.title"), Component.translatable("advancements.husbandry.wax_off.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("wax_off", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(HoneycombItem.WAX_OFF_BY_BLOCK.get().keySet()).build()), ItemPredicate.Builder.item().of(WAX_SCRAPING_TOOLS))).save(p_251389_, "husbandry/wax_off");
Advancement advancement9 = Advancement.Builder.advancement().parent(advancement).addCriterion(BuiltInRegistries.ITEM.getKey(Items.TADPOLE_BUCKET).getPath(), FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(Items.TADPOLE_BUCKET).build())).display(Items.TADPOLE_BUCKET, Component.translatable("advancements.husbandry.tadpole_in_a_bucket.title"), Component.translatable("advancements.husbandry.tadpole_in_a_bucket.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/tadpole_in_a_bucket");
Advancement advancement10 = addLeashedFrogVariants(Advancement.Builder.advancement()).parent(advancement9).display(Items.LEAD, Component.translatable("advancements.husbandry.leash_all_frog_variants.title"), Component.translatable("advancements.husbandry.leash_all_frog_variants.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/leash_all_frog_variants");
Advancement.Builder.advancement().parent(advancement10).display(Items.VERDANT_FROGLIGHT, Component.translatable("advancements.husbandry.froglights.title"), Component.translatable("advancements.husbandry.froglights.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).addCriterion("froglights", InventoryChangeTrigger.TriggerInstance.hasItems(Items.OCHRE_FROGLIGHT, Items.PEARLESCENT_FROGLIGHT, Items.VERDANT_FROGLIGHT)).save(p_251389_, "husbandry/froglights");
Advancement.Builder.advancement().parent(advancement).addCriterion("silk_touch_nest", BeeNestDestroyedTrigger.TriggerInstance.destroyedBeeNest(Blocks.BEE_NEST, ItemPredicate.Builder.item().hasEnchantment(new EnchantmentPredicate(Enchantments.SILK_TOUCH, MinMaxBounds.Ints.atLeast(1))), MinMaxBounds.Ints.exactly(3))).display(Blocks.BEE_NEST, Component.translatable("advancements.husbandry.silk_touch_nest.title"), Component.translatable("advancements.husbandry.silk_touch_nest.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).save(p_251389_, "husbandry/silk_touch_nest");
Advancement.Builder.advancement().parent(advancement).display(Items.OAK_BOAT, Component.translatable("advancements.husbandry.ride_a_boat_with_a_goat.title"), Component.translatable("advancements.husbandry.ride_a_boat_with_a_goat.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("ride_a_boat_with_a_goat", StartRidingTrigger.TriggerInstance.playerStartsRiding(EntityPredicate.Builder.entity().vehicle(EntityPredicate.Builder.entity().of(EntityType.BOAT).passenger(EntityPredicate.Builder.entity().of(EntityType.GOAT).build()).build()))).save(p_251389_, "husbandry/ride_a_boat_with_a_goat");
Advancement.Builder.advancement().parent(advancement).display(Items.GLOW_INK_SAC, Component.translatable("advancements.husbandry.make_a_sign_glow.title"), Component.translatable("advancements.husbandry.make_a_sign_glow.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("make_a_sign_glow", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(BlockTags.ALL_SIGNS).build()), ItemPredicate.Builder.item().of(Items.GLOW_INK_SAC))).save(p_251389_, "husbandry/make_a_sign_glow");
Advancement advancement11 = Advancement.Builder.advancement().parent(advancement).display(Items.COOKIE, Component.translatable("advancements.husbandry.allay_deliver_item_to_player.title"), Component.translatable("advancements.husbandry.allay_deliver_item_to_player.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).addCriterion("allay_deliver_item_to_player", PickedUpItemTrigger.TriggerInstance.thrownItemPickedUpByPlayer(ContextAwarePredicate.ANY, ItemPredicate.ANY, EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.ALLAY).build()))).save(p_251389_, "husbandry/allay_deliver_item_to_player");
Advancement.Builder.advancement().parent(advancement11).display(Items.NOTE_BLOCK, Component.translatable("advancements.husbandry.allay_deliver_cake_to_note_block.title"), Component.translatable("advancements.husbandry.allay_deliver_cake_to_note_block.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).addCriterion("allay_deliver_cake_to_note_block", ItemUsedOnLocationTrigger.TriggerInstance.allayDropItemOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(Blocks.NOTE_BLOCK).build()), ItemPredicate.Builder.item().of(Items.CAKE))).save(p_251389_, "husbandry/allay_deliver_cake_to_note_block");
Advancement advancement12 = Advancement.Builder.advancement().parent(advancement).display(Items.SNIFFER_EGG, Component.translatable("advancements.husbandry.obtain_sniffer_egg.title"), Component.translatable("advancements.husbandry.obtain_sniffer_egg.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).addCriterion("obtain_sniffer_egg", InventoryChangeTrigger.TriggerInstance.hasItems(Items.SNIFFER_EGG)).save(p_251389_, "husbandry/obtain_sniffer_egg");
Advancement advancement13 = Advancement.Builder.advancement().parent(advancement12).display(Items.TORCHFLOWER_SEEDS, Component.translatable("advancements.husbandry.feed_snifflet.title"), Component.translatable("advancements.husbandry.feed_snifflet.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).addCriterion("feed_snifflet", PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(ItemPredicate.Builder.item().of(ItemTags.SNIFFER_FOOD), EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.SNIFFER).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(true).build()).build()))).save(p_251389_, "husbandry/feed_snifflet");
Advancement.Builder.advancement().parent(advancement13).display(Items.PITCHER_POD, Component.translatable("advancements.husbandry.plant_any_sniffer_seed.title"), Component.translatable("advancements.husbandry.plant_any_sniffer_seed.description"), (ResourceLocation)null, FrameType.TASK, true, true, true).requirements(RequirementsStrategy.OR).addCriterion("torchflower", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.TORCHFLOWER_CROP)).addCriterion("pitcher_pod", ItemUsedOnLocationTrigger.TriggerInstance.placedBlock(Blocks.PITCHER_CROP)).save(p_251389_, "husbandry/plant_any_sniffer_seed");
}
public static Advancement createBreedAllAnimalsAdvancement(Advancement p_267284_, Consumer<Advancement> p_266923_, Stream<EntityType<?>> p_266961_, Stream<EntityType<?>> p_266751_) {
return addBreedable(Advancement.Builder.advancement(), p_266961_, p_266751_).parent(p_267284_).display(Items.GOLDEN_CARROT, Component.translatable("advancements.husbandry.breed_all_animals.title"), Component.translatable("advancements.husbandry.breed_all_animals.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).save(p_266923_, "husbandry/bred_all_animals");
}
private static Advancement.Builder addLeashedFrogVariants(Advancement.Builder p_249739_) {
BuiltInRegistries.FROG_VARIANT.holders().forEach((p_286193_) -> {
p_249739_.addCriterion(p_286193_.key().location().toString(), PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(ItemPredicate.Builder.item().of(Items.LEAD), EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.FROG).subPredicate(EntitySubPredicate.variant(p_286193_.value())).build())));
});
return p_249739_;
}
private static Advancement.Builder addFood(Advancement.Builder p_248532_) {
for(Item item : EDIBLE_ITEMS) {
p_248532_.addCriterion(BuiltInRegistries.ITEM.getKey(item).getPath(), ConsumeItemTrigger.TriggerInstance.usedItem(item));
}
return p_248532_;
}
private static Advancement.Builder addBreedable(Advancement.Builder p_266978_, Stream<EntityType<?>> p_267147_, Stream<EntityType<?>> p_267091_) {
p_267147_.forEach((p_266621_) -> {
p_266978_.addCriterion(EntityType.getKey(p_266621_).toString(), BredAnimalsTrigger.TriggerInstance.bredAnimals(EntityPredicate.Builder.entity().of(p_266621_)));
});
p_267091_.forEach((p_266619_) -> {
p_266978_.addCriterion(EntityType.getKey(p_266619_).toString(), BredAnimalsTrigger.TriggerInstance.bredAnimals(EntityPredicate.Builder.entity().of(p_266619_).build(), EntityPredicate.Builder.entity().of(p_266619_).build(), EntityPredicate.ANY));
});
return p_266978_;
}
private static Advancement.Builder addFishBuckets(Advancement.Builder p_249285_) {
for(Item item : FISH_BUCKETS) {
p_249285_.addCriterion(BuiltInRegistries.ITEM.getKey(item).getPath(), FilledBucketTrigger.TriggerInstance.filledBucket(ItemPredicate.Builder.item().of(item).build()));
}
return p_249285_;
}
private static Advancement.Builder addFish(Advancement.Builder p_248725_) {
for(Item item : FISH) {
p_248725_.addCriterion(BuiltInRegistries.ITEM.getKey(item).getPath(), FishingRodHookedTrigger.TriggerInstance.fishedItem(ItemPredicate.ANY, EntityPredicate.ANY, ItemPredicate.Builder.item().of(item).build()));
}
return p_248725_;
}
private static Advancement.Builder addCatVariants(Advancement.Builder p_249232_) {
BuiltInRegistries.CAT_VARIANT.entrySet().stream().sorted(Entry.comparingByKey(Comparator.comparing(ResourceKey::location))).forEach((p_249721_) -> {
p_249232_.addCriterion(p_249721_.getKey().location().toString(), TameAnimalTrigger.TriggerInstance.tamedAnimal(EntityPredicate.Builder.entity().subPredicate(EntitySubPredicate.variant(p_249721_.getValue())).build()));
});
return p_249232_;
}
}

View File

@@ -0,0 +1,82 @@
package net.minecraft.data.advancements.packs;
import java.util.function.Consumer;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.FrameType;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.BlockPredicate;
import net.minecraft.advancements.critereon.BrewedPotionTrigger;
import net.minecraft.advancements.critereon.ChangeDimensionTrigger;
import net.minecraft.advancements.critereon.ConstructBeaconTrigger;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.DamageSourcePredicate;
import net.minecraft.advancements.critereon.DistancePredicate;
import net.minecraft.advancements.critereon.DistanceTrigger;
import net.minecraft.advancements.critereon.EffectsChangedTrigger;
import net.minecraft.advancements.critereon.EntityEquipmentPredicate;
import net.minecraft.advancements.critereon.EntityFlagsPredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemDurabilityTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.ItemUsedOnLocationTrigger;
import net.minecraft.advancements.critereon.KilledTrigger;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.LootTableTrigger;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.MobEffectsPredicate;
import net.minecraft.advancements.critereon.PickedUpItemTrigger;
import net.minecraft.advancements.critereon.PlayerInteractTrigger;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.advancements.critereon.SummonedEntityTrigger;
import net.minecraft.advancements.critereon.TagPredicate;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.monster.piglin.PiglinAi;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.RespawnAnchorBlock;
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition;
public class VanillaNetherAdvancements implements AdvancementSubProvider {
private static final ContextAwarePredicate DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE = ContextAwarePredicate.create(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().head(ItemPredicate.Builder.item().of(Items.GOLDEN_HELMET).build()).build())).invert().build(), LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().chest(ItemPredicate.Builder.item().of(Items.GOLDEN_CHESTPLATE).build()).build())).invert().build(), LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().legs(ItemPredicate.Builder.item().of(Items.GOLDEN_LEGGINGS).build()).build())).invert().build(), LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().equipment(EntityEquipmentPredicate.Builder.equipment().feet(ItemPredicate.Builder.item().of(Items.GOLDEN_BOOTS).build()).build())).invert().build());
public void generate(HolderLookup.Provider p_256338_, Consumer<Advancement> p_249760_) {
Advancement advancement = Advancement.Builder.advancement().display(Blocks.RED_NETHER_BRICKS, Component.translatable("advancements.nether.root.title"), Component.translatable("advancements.nether.root.description"), new ResourceLocation("textures/gui/advancements/backgrounds/nether.png"), FrameType.TASK, false, false, false).addCriterion("entered_nether", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(Level.NETHER)).save(p_249760_, "nether/root");
Advancement advancement1 = Advancement.Builder.advancement().parent(advancement).display(Items.FIRE_CHARGE, Component.translatable("advancements.nether.return_to_sender.title"), Component.translatable("advancements.nether.return_to_sender.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(50)).addCriterion("killed_ghast", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(EntityType.GHAST), DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE)).direct(EntityPredicate.Builder.entity().of(EntityType.FIREBALL)))).save(p_249760_, "nether/return_to_sender");
Advancement advancement2 = Advancement.Builder.advancement().parent(advancement).display(Blocks.NETHER_BRICKS, Component.translatable("advancements.nether.find_fortress.title"), Component.translatable("advancements.nether.find_fortress.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("fortress", PlayerTrigger.TriggerInstance.located(LocationPredicate.inStructure(BuiltinStructures.FORTRESS))).save(p_249760_, "nether/find_fortress");
Advancement.Builder.advancement().parent(advancement).display(Items.MAP, Component.translatable("advancements.nether.fast_travel.title"), Component.translatable("advancements.nether.fast_travel.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("travelled", DistanceTrigger.TriggerInstance.travelledThroughNether(DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(7000.0D)))).save(p_249760_, "nether/fast_travel");
Advancement.Builder.advancement().parent(advancement1).display(Items.GHAST_TEAR, Component.translatable("advancements.nether.uneasy_alliance.title"), Component.translatable("advancements.nether.uneasy_alliance.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("killed_ghast", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(EntityType.GHAST).located(LocationPredicate.inDimension(Level.OVERWORLD)))).save(p_249760_, "nether/uneasy_alliance");
Advancement advancement3 = Advancement.Builder.advancement().parent(advancement2).display(Blocks.WITHER_SKELETON_SKULL, Component.translatable("advancements.nether.get_wither_skull.title"), Component.translatable("advancements.nether.get_wither_skull.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("wither_skull", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.WITHER_SKELETON_SKULL)).save(p_249760_, "nether/get_wither_skull");
Advancement advancement4 = Advancement.Builder.advancement().parent(advancement3).display(Items.NETHER_STAR, Component.translatable("advancements.nether.summon_wither.title"), Component.translatable("advancements.nether.summon_wither.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("summoned", SummonedEntityTrigger.TriggerInstance.summonedEntity(EntityPredicate.Builder.entity().of(EntityType.WITHER))).save(p_249760_, "nether/summon_wither");
Advancement advancement5 = Advancement.Builder.advancement().parent(advancement2).display(Items.BLAZE_ROD, Component.translatable("advancements.nether.obtain_blaze_rod.title"), Component.translatable("advancements.nether.obtain_blaze_rod.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("blaze_rod", InventoryChangeTrigger.TriggerInstance.hasItems(Items.BLAZE_ROD)).save(p_249760_, "nether/obtain_blaze_rod");
Advancement advancement6 = Advancement.Builder.advancement().parent(advancement4).display(Blocks.BEACON, Component.translatable("advancements.nether.create_beacon.title"), Component.translatable("advancements.nether.create_beacon.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("beacon", ConstructBeaconTrigger.TriggerInstance.constructedBeacon(MinMaxBounds.Ints.atLeast(1))).save(p_249760_, "nether/create_beacon");
Advancement.Builder.advancement().parent(advancement6).display(Blocks.BEACON, Component.translatable("advancements.nether.create_full_beacon.title"), Component.translatable("advancements.nether.create_full_beacon.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("beacon", ConstructBeaconTrigger.TriggerInstance.constructedBeacon(MinMaxBounds.Ints.exactly(4))).save(p_249760_, "nether/create_full_beacon");
Advancement advancement7 = Advancement.Builder.advancement().parent(advancement5).display(Items.POTION, Component.translatable("advancements.nether.brew_potion.title"), Component.translatable("advancements.nether.brew_potion.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("potion", BrewedPotionTrigger.TriggerInstance.brewedPotion()).save(p_249760_, "nether/brew_potion");
Advancement advancement8 = Advancement.Builder.advancement().parent(advancement7).display(Items.MILK_BUCKET, Component.translatable("advancements.nether.all_potions.title"), Component.translatable("advancements.nether.all_potions.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("all_effects", EffectsChangedTrigger.TriggerInstance.hasEffects(MobEffectsPredicate.effects().and(MobEffects.MOVEMENT_SPEED).and(MobEffects.MOVEMENT_SLOWDOWN).and(MobEffects.DAMAGE_BOOST).and(MobEffects.JUMP).and(MobEffects.REGENERATION).and(MobEffects.FIRE_RESISTANCE).and(MobEffects.WATER_BREATHING).and(MobEffects.INVISIBILITY).and(MobEffects.NIGHT_VISION).and(MobEffects.WEAKNESS).and(MobEffects.POISON).and(MobEffects.SLOW_FALLING).and(MobEffects.DAMAGE_RESISTANCE))).save(p_249760_, "nether/all_potions");
Advancement.Builder.advancement().parent(advancement8).display(Items.BUCKET, Component.translatable("advancements.nether.all_effects.title"), Component.translatable("advancements.nether.all_effects.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, true).rewards(AdvancementRewards.Builder.experience(1000)).addCriterion("all_effects", EffectsChangedTrigger.TriggerInstance.hasEffects(MobEffectsPredicate.effects().and(MobEffects.MOVEMENT_SPEED).and(MobEffects.MOVEMENT_SLOWDOWN).and(MobEffects.DAMAGE_BOOST).and(MobEffects.JUMP).and(MobEffects.REGENERATION).and(MobEffects.FIRE_RESISTANCE).and(MobEffects.WATER_BREATHING).and(MobEffects.INVISIBILITY).and(MobEffects.NIGHT_VISION).and(MobEffects.WEAKNESS).and(MobEffects.POISON).and(MobEffects.WITHER).and(MobEffects.DIG_SPEED).and(MobEffects.DIG_SLOWDOWN).and(MobEffects.LEVITATION).and(MobEffects.GLOWING).and(MobEffects.ABSORPTION).and(MobEffects.HUNGER).and(MobEffects.CONFUSION).and(MobEffects.DAMAGE_RESISTANCE).and(MobEffects.SLOW_FALLING).and(MobEffects.CONDUIT_POWER).and(MobEffects.DOLPHINS_GRACE).and(MobEffects.BLINDNESS).and(MobEffects.BAD_OMEN).and(MobEffects.HERO_OF_THE_VILLAGE).and(MobEffects.DARKNESS))).save(p_249760_, "nether/all_effects");
Advancement advancement9 = Advancement.Builder.advancement().parent(advancement).display(Items.ANCIENT_DEBRIS, Component.translatable("advancements.nether.obtain_ancient_debris.title"), Component.translatable("advancements.nether.obtain_ancient_debris.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("ancient_debris", InventoryChangeTrigger.TriggerInstance.hasItems(Items.ANCIENT_DEBRIS)).save(p_249760_, "nether/obtain_ancient_debris");
Advancement.Builder.advancement().parent(advancement9).display(Items.NETHERITE_CHESTPLATE, Component.translatable("advancements.nether.netherite_armor.title"), Component.translatable("advancements.nether.netherite_armor.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(100)).addCriterion("netherite_armor", InventoryChangeTrigger.TriggerInstance.hasItems(Items.NETHERITE_HELMET, Items.NETHERITE_CHESTPLATE, Items.NETHERITE_LEGGINGS, Items.NETHERITE_BOOTS)).save(p_249760_, "nether/netherite_armor");
Advancement.Builder.advancement().parent(advancement9).display(Items.LODESTONE, Component.translatable("advancements.nether.use_lodestone.title"), Component.translatable("advancements.nether.use_lodestone.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("use_lodestone", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(Blocks.LODESTONE).build()), ItemPredicate.Builder.item().of(Items.COMPASS))).save(p_249760_, "nether/use_lodestone");
Advancement advancement10 = Advancement.Builder.advancement().parent(advancement).display(Items.CRYING_OBSIDIAN, Component.translatable("advancements.nether.obtain_crying_obsidian.title"), Component.translatable("advancements.nether.obtain_crying_obsidian.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("crying_obsidian", InventoryChangeTrigger.TriggerInstance.hasItems(Items.CRYING_OBSIDIAN)).save(p_249760_, "nether/obtain_crying_obsidian");
Advancement.Builder.advancement().parent(advancement10).display(Items.RESPAWN_ANCHOR, Component.translatable("advancements.nether.charge_respawn_anchor.title"), Component.translatable("advancements.nether.charge_respawn_anchor.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("charge_respawn_anchor", ItemUsedOnLocationTrigger.TriggerInstance.itemUsedOnBlock(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(Blocks.RESPAWN_ANCHOR).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(RespawnAnchorBlock.CHARGE, 4).build()).build()), ItemPredicate.Builder.item().of(Blocks.GLOWSTONE))).save(p_249760_, "nether/charge_respawn_anchor");
Advancement advancement11 = Advancement.Builder.advancement().parent(advancement).display(Items.WARPED_FUNGUS_ON_A_STICK, Component.translatable("advancements.nether.ride_strider.title"), Component.translatable("advancements.nether.ride_strider.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("used_warped_fungus_on_a_stick", ItemDurabilityTrigger.TriggerInstance.changedDurability(EntityPredicate.wrap(EntityPredicate.Builder.entity().vehicle(EntityPredicate.Builder.entity().of(EntityType.STRIDER).build()).build()), ItemPredicate.Builder.item().of(Items.WARPED_FUNGUS_ON_A_STICK).build(), MinMaxBounds.Ints.ANY)).save(p_249760_, "nether/ride_strider");
Advancement.Builder.advancement().parent(advancement11).display(Items.WARPED_FUNGUS_ON_A_STICK, Component.translatable("advancements.nether.ride_strider_in_overworld_lava.title"), Component.translatable("advancements.nether.ride_strider_in_overworld_lava.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("ride_entity_distance", DistanceTrigger.TriggerInstance.rideEntityInLava(EntityPredicate.Builder.entity().located(LocationPredicate.inDimension(Level.OVERWORLD)).vehicle(EntityPredicate.Builder.entity().of(EntityType.STRIDER).build()), DistancePredicate.horizontal(MinMaxBounds.Doubles.atLeast(50.0D)))).save(p_249760_, "nether/ride_strider_in_overworld_lava");
VanillaAdventureAdvancements.addBiomes(Advancement.Builder.advancement(), MultiNoiseBiomeSourceParameterList.Preset.NETHER.usedBiomes().toList()).parent(advancement11).display(Items.NETHERITE_BOOTS, Component.translatable("advancements.nether.explore_nether.title"), Component.translatable("advancements.nether.explore_nether.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(500)).save(p_249760_, "nether/explore_nether");
Advancement advancement12 = Advancement.Builder.advancement().parent(advancement).display(Items.POLISHED_BLACKSTONE_BRICKS, Component.translatable("advancements.nether.find_bastion.title"), Component.translatable("advancements.nether.find_bastion.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("bastion", PlayerTrigger.TriggerInstance.located(LocationPredicate.inStructure(BuiltinStructures.BASTION_REMNANT))).save(p_249760_, "nether/find_bastion");
Advancement.Builder.advancement().parent(advancement12).display(Blocks.CHEST, Component.translatable("advancements.nether.loot_bastion.title"), Component.translatable("advancements.nether.loot_bastion.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("loot_bastion_other", LootTableTrigger.TriggerInstance.lootTableUsed(new ResourceLocation("minecraft:chests/bastion_other"))).addCriterion("loot_bastion_treasure", LootTableTrigger.TriggerInstance.lootTableUsed(new ResourceLocation("minecraft:chests/bastion_treasure"))).addCriterion("loot_bastion_hoglin_stable", LootTableTrigger.TriggerInstance.lootTableUsed(new ResourceLocation("minecraft:chests/bastion_hoglin_stable"))).addCriterion("loot_bastion_bridge", LootTableTrigger.TriggerInstance.lootTableUsed(new ResourceLocation("minecraft:chests/bastion_bridge"))).save(p_249760_, "nether/loot_bastion");
Advancement.Builder.advancement().parent(advancement).requirements(RequirementsStrategy.OR).display(Items.GOLD_INGOT, Component.translatable("advancements.nether.distract_piglin.title"), Component.translatable("advancements.nether.distract_piglin.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("distract_piglin", PickedUpItemTrigger.TriggerInstance.thrownItemPickedUpByEntity(DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE, ItemPredicate.Builder.item().of(ItemTags.PIGLIN_LOVED).build(), EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.PIGLIN).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(false).build()).build()))).addCriterion("distract_piglin_directly", PlayerInteractTrigger.TriggerInstance.itemUsedOnEntity(DISTRACT_PIGLIN_PLAYER_ARMOR_PREDICATE, ItemPredicate.Builder.item().of(PiglinAi.BARTERING_ITEM), EntityPredicate.wrap(EntityPredicate.Builder.entity().of(EntityType.PIGLIN).flags(EntityFlagsPredicate.Builder.flags().setIsBaby(false).build()).build()))).save(p_249760_, "nether/distract_piglin");
}
}

View File

@@ -0,0 +1,48 @@
package net.minecraft.data.advancements.packs;
import java.util.function.Consumer;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.FrameType;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.ChangeDimensionTrigger;
import net.minecraft.advancements.critereon.CuredZombieVillagerTrigger;
import net.minecraft.advancements.critereon.DamagePredicate;
import net.minecraft.advancements.critereon.DamageSourcePredicate;
import net.minecraft.advancements.critereon.EnchantedItemTrigger;
import net.minecraft.advancements.critereon.EntityHurtPlayerTrigger;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.advancements.critereon.TagPredicate;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
public class VanillaStoryAdvancements implements AdvancementSubProvider {
public void generate(HolderLookup.Provider p_256574_, Consumer<Advancement> p_248554_) {
Advancement advancement = Advancement.Builder.advancement().display(Blocks.GRASS_BLOCK, Component.translatable("advancements.story.root.title"), Component.translatable("advancements.story.root.description"), new ResourceLocation("textures/gui/advancements/backgrounds/stone.png"), FrameType.TASK, false, false, false).addCriterion("crafting_table", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.CRAFTING_TABLE)).save(p_248554_, "story/root");
Advancement advancement1 = Advancement.Builder.advancement().parent(advancement).display(Items.WOODEN_PICKAXE, Component.translatable("advancements.story.mine_stone.title"), Component.translatable("advancements.story.mine_stone.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("get_stone", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(ItemTags.STONE_TOOL_MATERIALS).build())).save(p_248554_, "story/mine_stone");
Advancement advancement2 = Advancement.Builder.advancement().parent(advancement1).display(Items.STONE_PICKAXE, Component.translatable("advancements.story.upgrade_tools.title"), Component.translatable("advancements.story.upgrade_tools.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("stone_pickaxe", InventoryChangeTrigger.TriggerInstance.hasItems(Items.STONE_PICKAXE)).save(p_248554_, "story/upgrade_tools");
Advancement advancement3 = Advancement.Builder.advancement().parent(advancement2).display(Items.IRON_INGOT, Component.translatable("advancements.story.smelt_iron.title"), Component.translatable("advancements.story.smelt_iron.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("iron", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_INGOT)).save(p_248554_, "story/smelt_iron");
Advancement advancement4 = Advancement.Builder.advancement().parent(advancement3).display(Items.IRON_PICKAXE, Component.translatable("advancements.story.iron_tools.title"), Component.translatable("advancements.story.iron_tools.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("iron_pickaxe", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_PICKAXE)).save(p_248554_, "story/iron_tools");
Advancement advancement5 = Advancement.Builder.advancement().parent(advancement4).display(Items.DIAMOND, Component.translatable("advancements.story.mine_diamond.title"), Component.translatable("advancements.story.mine_diamond.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("diamond", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND)).save(p_248554_, "story/mine_diamond");
Advancement advancement6 = Advancement.Builder.advancement().parent(advancement3).display(Items.LAVA_BUCKET, Component.translatable("advancements.story.lava_bucket.title"), Component.translatable("advancements.story.lava_bucket.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("lava_bucket", InventoryChangeTrigger.TriggerInstance.hasItems(Items.LAVA_BUCKET)).save(p_248554_, "story/lava_bucket");
Advancement advancement7 = Advancement.Builder.advancement().parent(advancement3).display(Items.IRON_CHESTPLATE, Component.translatable("advancements.story.obtain_armor.title"), Component.translatable("advancements.story.obtain_armor.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("iron_helmet", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_HELMET)).addCriterion("iron_chestplate", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_CHESTPLATE)).addCriterion("iron_leggings", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_LEGGINGS)).addCriterion("iron_boots", InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_BOOTS)).save(p_248554_, "story/obtain_armor");
Advancement.Builder.advancement().parent(advancement5).display(Items.ENCHANTED_BOOK, Component.translatable("advancements.story.enchant_item.title"), Component.translatable("advancements.story.enchant_item.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("enchanted_item", EnchantedItemTrigger.TriggerInstance.enchantedItem()).save(p_248554_, "story/enchant_item");
Advancement advancement8 = Advancement.Builder.advancement().parent(advancement6).display(Blocks.OBSIDIAN, Component.translatable("advancements.story.form_obsidian.title"), Component.translatable("advancements.story.form_obsidian.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("obsidian", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.OBSIDIAN)).save(p_248554_, "story/form_obsidian");
Advancement.Builder.advancement().parent(advancement7).display(Items.SHIELD, Component.translatable("advancements.story.deflect_arrow.title"), Component.translatable("advancements.story.deflect_arrow.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("deflected_projectile", EntityHurtPlayerTrigger.TriggerInstance.entityHurtPlayer(DamagePredicate.Builder.damageInstance().type(DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_PROJECTILE))).blocked(true))).save(p_248554_, "story/deflect_arrow");
Advancement.Builder.advancement().parent(advancement5).display(Items.DIAMOND_CHESTPLATE, Component.translatable("advancements.story.shiny_gear.title"), Component.translatable("advancements.story.shiny_gear.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).requirements(RequirementsStrategy.OR).addCriterion("diamond_helmet", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND_HELMET)).addCriterion("diamond_chestplate", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND_CHESTPLATE)).addCriterion("diamond_leggings", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND_LEGGINGS)).addCriterion("diamond_boots", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DIAMOND_BOOTS)).save(p_248554_, "story/shiny_gear");
Advancement advancement9 = Advancement.Builder.advancement().parent(advancement8).display(Items.FLINT_AND_STEEL, Component.translatable("advancements.story.enter_the_nether.title"), Component.translatable("advancements.story.enter_the_nether.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("entered_nether", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(Level.NETHER)).save(p_248554_, "story/enter_the_nether");
Advancement.Builder.advancement().parent(advancement9).display(Items.GOLDEN_APPLE, Component.translatable("advancements.story.cure_zombie_villager.title"), Component.translatable("advancements.story.cure_zombie_villager.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("cured_zombie", CuredZombieVillagerTrigger.TriggerInstance.curedZombieVillager()).save(p_248554_, "story/cure_zombie_villager");
Advancement advancement10 = Advancement.Builder.advancement().parent(advancement9).display(Items.ENDER_EYE, Component.translatable("advancements.story.follow_ender_eye.title"), Component.translatable("advancements.story.follow_ender_eye.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("in_stronghold", PlayerTrigger.TriggerInstance.located(LocationPredicate.inStructure(BuiltinStructures.STRONGHOLD))).save(p_248554_, "story/follow_ender_eye");
Advancement.Builder.advancement().parent(advancement10).display(Blocks.END_STONE, Component.translatable("advancements.story.enter_the_end.title"), Component.translatable("advancements.story.enter_the_end.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("entered_end", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(Level.END)).save(p_248554_, "story/enter_the_end");
}
}

View File

@@ -0,0 +1,40 @@
package net.minecraft.data.advancements.packs;
import java.util.function.Consumer;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.FrameType;
import net.minecraft.advancements.critereon.ChangeDimensionTrigger;
import net.minecraft.advancements.critereon.DistancePredicate;
import net.minecraft.advancements.critereon.EnterBlockTrigger;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.KilledTrigger;
import net.minecraft.advancements.critereon.LevitationTrigger;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.advancements.critereon.SummonedEntityTrigger;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.advancements.AdvancementSubProvider;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
public class VanillaTheEndAdvancements implements AdvancementSubProvider {
public void generate(HolderLookup.Provider p_256214_, Consumer<Advancement> p_250851_) {
Advancement advancement = Advancement.Builder.advancement().display(Blocks.END_STONE, Component.translatable("advancements.end.root.title"), Component.translatable("advancements.end.root.description"), new ResourceLocation("textures/gui/advancements/backgrounds/end.png"), FrameType.TASK, false, false, false).addCriterion("entered_end", ChangeDimensionTrigger.TriggerInstance.changedDimensionTo(Level.END)).save(p_250851_, "end/root");
Advancement advancement1 = Advancement.Builder.advancement().parent(advancement).display(Blocks.DRAGON_HEAD, Component.translatable("advancements.end.kill_dragon.title"), Component.translatable("advancements.end.kill_dragon.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("killed_dragon", KilledTrigger.TriggerInstance.playerKilledEntity(EntityPredicate.Builder.entity().of(EntityType.ENDER_DRAGON))).save(p_250851_, "end/kill_dragon");
Advancement advancement2 = Advancement.Builder.advancement().parent(advancement1).display(Items.ENDER_PEARL, Component.translatable("advancements.end.enter_end_gateway.title"), Component.translatable("advancements.end.enter_end_gateway.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("entered_end_gateway", EnterBlockTrigger.TriggerInstance.entersBlock(Blocks.END_GATEWAY)).save(p_250851_, "end/enter_end_gateway");
Advancement.Builder.advancement().parent(advancement1).display(Items.END_CRYSTAL, Component.translatable("advancements.end.respawn_dragon.title"), Component.translatable("advancements.end.respawn_dragon.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("summoned_dragon", SummonedEntityTrigger.TriggerInstance.summonedEntity(EntityPredicate.Builder.entity().of(EntityType.ENDER_DRAGON))).save(p_250851_, "end/respawn_dragon");
Advancement advancement3 = Advancement.Builder.advancement().parent(advancement2).display(Blocks.PURPUR_BLOCK, Component.translatable("advancements.end.find_end_city.title"), Component.translatable("advancements.end.find_end_city.description"), (ResourceLocation)null, FrameType.TASK, true, true, false).addCriterion("in_city", PlayerTrigger.TriggerInstance.located(LocationPredicate.inStructure(BuiltinStructures.END_CITY))).save(p_250851_, "end/find_end_city");
Advancement.Builder.advancement().parent(advancement1).display(Items.DRAGON_BREATH, Component.translatable("advancements.end.dragon_breath.title"), Component.translatable("advancements.end.dragon_breath.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("dragon_breath", InventoryChangeTrigger.TriggerInstance.hasItems(Items.DRAGON_BREATH)).save(p_250851_, "end/dragon_breath");
Advancement.Builder.advancement().parent(advancement3).display(Items.SHULKER_SHELL, Component.translatable("advancements.end.levitate.title"), Component.translatable("advancements.end.levitate.description"), (ResourceLocation)null, FrameType.CHALLENGE, true, true, false).rewards(AdvancementRewards.Builder.experience(50)).addCriterion("levitated", LevitationTrigger.TriggerInstance.levitated(DistancePredicate.vertical(MinMaxBounds.Doubles.atLeast(50.0D)))).save(p_250851_, "end/levitate");
Advancement.Builder.advancement().parent(advancement3).display(Items.ELYTRA, Component.translatable("advancements.end.elytra.title"), Component.translatable("advancements.end.elytra.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("elytra", InventoryChangeTrigger.TriggerInstance.hasItems(Items.ELYTRA)).save(p_250851_, "end/elytra");
Advancement.Builder.advancement().parent(advancement1).display(Blocks.DRAGON_EGG, Component.translatable("advancements.end.dragon_egg.title"), Component.translatable("advancements.end.dragon_egg.description"), (ResourceLocation)null, FrameType.GOAL, true, true, false).addCriterion("dragon_egg", InventoryChangeTrigger.TriggerInstance.hasItems(Blocks.DRAGON_EGG)).save(p_250851_, "end/dragon_egg");
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.advancements.packs;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,67 @@
package net.minecraft.data.info;
import com.google.gson.JsonElement;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Codec;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.Encoder;
import com.mojang.serialization.JsonOps;
import com.mojang.serialization.MapCodec;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Climate;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
import org.slf4j.Logger;
public class BiomeParametersDumpReport implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final Path topPath;
private final CompletableFuture<HolderLookup.Provider> registries;
private static final MapCodec<ResourceKey<Biome>> ENTRY_CODEC = ResourceKey.codec(Registries.BIOME).fieldOf("biome");
private static final Codec<Climate.ParameterList<ResourceKey<Biome>>> CODEC = Climate.ParameterList.codec(ENTRY_CODEC).fieldOf("biomes").codec();
public BiomeParametersDumpReport(PackOutput p_256322_, CompletableFuture<HolderLookup.Provider> p_256222_) {
this.topPath = p_256322_.getOutputFolder(PackOutput.Target.REPORTS).resolve("biome_parameters");
this.registries = p_256222_;
}
public CompletableFuture<?> run(CachedOutput p_254091_) {
return this.registries.thenCompose((p_274755_) -> {
DynamicOps<JsonElement> dynamicops = RegistryOps.create(JsonOps.INSTANCE, p_274755_);
List<CompletableFuture<?>> list = new ArrayList<>();
MultiNoiseBiomeSourceParameterList.knownPresets().forEach((p_274759_, p_274760_) -> {
list.add(dumpValue(this.createPath(p_274759_.id()), p_254091_, dynamicops, CODEC, p_274760_));
});
return CompletableFuture.allOf(list.toArray((p_253398_) -> {
return new CompletableFuture[p_253398_];
}));
});
}
private static <E> CompletableFuture<?> dumpValue(Path p_254407_, CachedOutput p_254093_, DynamicOps<JsonElement> p_253788_, Encoder<E> p_254276_, E p_254073_) {
Optional<JsonElement> optional = p_254276_.encodeStart(p_253788_, p_254073_).resultOrPartial((p_236195_) -> {
LOGGER.error("Couldn't serialize element {}: {}", p_254407_, p_236195_);
});
return optional.isPresent() ? DataProvider.saveStable(p_254093_, optional.get(), p_254407_) : CompletableFuture.completedFuture((Object)null);
}
private Path createPath(ResourceLocation p_236179_) {
return this.topPath.resolve(p_236179_.getNamespace()).resolve(p_236179_.getPath() + ".json");
}
public final String getName() {
return "Biome Parameters";
}
}

View File

@@ -0,0 +1,81 @@
package net.minecraft.data.info;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.nio.file.Path;
import java.util.concurrent.CompletableFuture;
import net.minecraft.Util;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.Property;
public class BlockListReport implements DataProvider {
private final PackOutput output;
public BlockListReport(PackOutput p_251533_) {
this.output = p_251533_;
}
public CompletableFuture<?> run(CachedOutput p_236197_) {
JsonObject jsonobject = new JsonObject();
for(Block block : BuiltInRegistries.BLOCK) {
ResourceLocation resourcelocation = BuiltInRegistries.BLOCK.getKey(block);
JsonObject jsonobject1 = new JsonObject();
StateDefinition<Block, BlockState> statedefinition = block.getStateDefinition();
if (!statedefinition.getProperties().isEmpty()) {
JsonObject jsonobject2 = new JsonObject();
for(Property<?> property : statedefinition.getProperties()) {
JsonArray jsonarray = new JsonArray();
for(Comparable<?> comparable : property.getPossibleValues()) {
jsonarray.add(Util.getPropertyName(property, comparable));
}
jsonobject2.add(property.getName(), jsonarray);
}
jsonobject1.add("properties", jsonobject2);
}
JsonArray jsonarray1 = new JsonArray();
for(BlockState blockstate : statedefinition.getPossibleStates()) {
JsonObject jsonobject3 = new JsonObject();
JsonObject jsonobject4 = new JsonObject();
for(Property<?> property1 : statedefinition.getProperties()) {
jsonobject4.addProperty(property1.getName(), Util.getPropertyName(property1, blockstate.getValue(property1)));
}
if (jsonobject4.size() > 0) {
jsonobject3.add("properties", jsonobject4);
}
jsonobject3.addProperty("id", Block.getId(blockstate));
if (blockstate == block.defaultBlockState()) {
jsonobject3.addProperty("default", true);
}
jsonarray1.add(jsonobject3);
}
jsonobject1.add("states", jsonarray1);
jsonobject.add(resourcelocation.toString(), jsonobject1);
}
Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("blocks.json");
return DataProvider.saveStable(p_236197_, jsonobject, path);
}
public final String getName() {
return "Block List";
}
}

View File

@@ -0,0 +1,34 @@
package net.minecraft.data.info;
import com.mojang.brigadier.CommandDispatcher;
import java.nio.file.Path;
import java.util.concurrent.CompletableFuture;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.synchronization.ArgumentUtils;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
public class CommandsReport implements DataProvider {
private final PackOutput output;
private final CompletableFuture<HolderLookup.Provider> registries;
public CommandsReport(PackOutput p_256167_, CompletableFuture<HolderLookup.Provider> p_256506_) {
this.output = p_256167_;
this.registries = p_256506_;
}
public CompletableFuture<?> run(CachedOutput p_253721_) {
Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("commands.json");
return this.registries.thenCompose((p_256367_) -> {
CommandDispatcher<CommandSourceStack> commanddispatcher = (new Commands(Commands.CommandSelection.ALL, Commands.createValidationContext(p_256367_))).getDispatcher();
return DataProvider.saveStable(p_253721_, ArgumentUtils.serializeNodeToJson(commanddispatcher, commanddispatcher.getRoot()), path);
});
}
public final String getName() {
return "Command Syntax";
}
}

View File

@@ -0,0 +1,55 @@
package net.minecraft.data.info;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.nio.file.Path;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.DefaultedRegistry;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
public class RegistryDumpReport implements DataProvider {
private final PackOutput output;
public RegistryDumpReport(PackOutput p_249862_) {
this.output = p_249862_;
}
public CompletableFuture<?> run(CachedOutput p_253743_) {
JsonObject jsonobject = new JsonObject();
BuiltInRegistries.REGISTRY.holders().forEach((p_211088_) -> {
jsonobject.add(p_211088_.key().location().toString(), dumpRegistry(p_211088_.value()));
});
Path path = this.output.getOutputFolder(PackOutput.Target.REPORTS).resolve("registries.json");
return DataProvider.saveStable(p_253743_, jsonobject, path);
}
private static <T> JsonElement dumpRegistry(Registry<T> p_124059_) {
JsonObject jsonobject = new JsonObject();
if (p_124059_ instanceof DefaultedRegistry) {
ResourceLocation resourcelocation = ((DefaultedRegistry)p_124059_).getDefaultKey();
jsonobject.addProperty("default", resourcelocation.toString());
}
int i = ((Registry)BuiltInRegistries.REGISTRY).getId(p_124059_);
jsonobject.addProperty("protocol_id", i);
JsonObject jsonobject1 = new JsonObject();
p_124059_.holders().forEach((p_211092_) -> {
T t = p_211092_.value();
int j = p_124059_.getId(t);
JsonObject jsonobject2 = new JsonObject();
jsonobject2.addProperty("protocol_id", j);
jsonobject1.add(p_211092_.key().location().toString(), jsonobject2);
});
jsonobject.add("entries", jsonobject1);
return jsonobject;
}
public final String getName() {
return "Registry Dump";
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.info;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,334 @@
package net.minecraft.data.loot;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.stream.IntStream;
import net.minecraft.advancements.critereon.BlockPredicate;
import net.minecraft.advancements.critereon.EnchantmentPredicate;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.StringRepresentable;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.BeehiveBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.CandleBlock;
import net.minecraft.world.level.block.CaveVines;
import net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.DoublePlantBlock;
import net.minecraft.world.level.block.FlowerPotBlock;
import net.minecraft.world.level.block.MultifaceBlock;
import net.minecraft.world.level.block.PinkPetalsBlock;
import net.minecraft.world.level.block.ShulkerBoxBlock;
import net.minecraft.world.level.block.SlabBlock;
import net.minecraft.world.level.block.StemBlock;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.level.block.state.properties.SlabType;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.IntRange;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.DynamicLoot;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.entries.LootPoolEntryContainer;
import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount;
import net.minecraft.world.level.storage.loot.functions.ApplyExplosionDecay;
import net.minecraft.world.level.storage.loot.functions.CopyBlockState;
import net.minecraft.world.level.storage.loot.functions.CopyNameFunction;
import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction;
import net.minecraft.world.level.storage.loot.functions.FunctionUserBuilder;
import net.minecraft.world.level.storage.loot.functions.LimitCount;
import net.minecraft.world.level.storage.loot.functions.SetContainerContents;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.predicates.BonusLevelTableCondition;
import net.minecraft.world.level.storage.loot.predicates.ConditionUserBuilder;
import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition;
import net.minecraft.world.level.storage.loot.predicates.LocationCheck;
import net.minecraft.world.level.storage.loot.predicates.LootItemBlockStatePropertyCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition;
import net.minecraft.world.level.storage.loot.predicates.MatchTool;
import net.minecraft.world.level.storage.loot.providers.nbt.ContextNbtProvider;
import net.minecraft.world.level.storage.loot.providers.number.BinomialDistributionGenerator;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.NumberProvider;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public abstract class BlockLootSubProvider implements LootTableSubProvider {
protected static final LootItemCondition.Builder HAS_SILK_TOUCH = MatchTool.toolMatches(ItemPredicate.Builder.item().hasEnchantment(new EnchantmentPredicate(Enchantments.SILK_TOUCH, MinMaxBounds.Ints.atLeast(1))));
protected static final LootItemCondition.Builder HAS_NO_SILK_TOUCH = HAS_SILK_TOUCH.invert();
protected static final LootItemCondition.Builder HAS_SHEARS = MatchTool.toolMatches(ItemPredicate.Builder.item().of(Items.SHEARS));
private static final LootItemCondition.Builder HAS_SHEARS_OR_SILK_TOUCH = HAS_SHEARS.or(HAS_SILK_TOUCH);
private static final LootItemCondition.Builder HAS_NO_SHEARS_OR_SILK_TOUCH = HAS_SHEARS_OR_SILK_TOUCH.invert();
protected final Set<Item> explosionResistant;
protected final FeatureFlagSet enabledFeatures;
protected final Map<ResourceLocation, LootTable.Builder> map;
protected static final float[] NORMAL_LEAVES_SAPLING_CHANCES = new float[]{0.05F, 0.0625F, 0.083333336F, 0.1F};
private static final float[] NORMAL_LEAVES_STICK_CHANCES = new float[]{0.02F, 0.022222223F, 0.025F, 0.033333335F, 0.1F};
protected BlockLootSubProvider(Set<Item> p_249153_, FeatureFlagSet p_251215_) {
this(p_249153_, p_251215_, new HashMap<>());
}
protected BlockLootSubProvider(Set<Item> p_281507_, FeatureFlagSet p_283552_, Map<ResourceLocation, LootTable.Builder> p_282212_) {
this.explosionResistant = p_281507_;
this.enabledFeatures = p_283552_;
this.map = p_282212_;
}
protected <T extends FunctionUserBuilder<T>> T applyExplosionDecay(ItemLike p_248695_, FunctionUserBuilder<T> p_248548_) {
return (T)(!this.explosionResistant.contains(p_248695_.asItem()) ? p_248548_.apply(ApplyExplosionDecay.explosionDecay()) : p_248548_.unwrap());
}
protected <T extends ConditionUserBuilder<T>> T applyExplosionCondition(ItemLike p_249717_, ConditionUserBuilder<T> p_248851_) {
return (T)(!this.explosionResistant.contains(p_249717_.asItem()) ? p_248851_.when(ExplosionCondition.survivesExplosion()) : p_248851_.unwrap());
}
public LootTable.Builder createSingleItemTable(ItemLike p_251912_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(p_251912_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_251912_))));
}
protected static LootTable.Builder createSelfDropDispatchTable(Block p_252253_, LootItemCondition.Builder p_248764_, LootPoolEntryContainer.Builder<?> p_249146_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_252253_).when(p_248764_).otherwise(p_249146_)));
}
protected static LootTable.Builder createSilkTouchDispatchTable(Block p_250203_, LootPoolEntryContainer.Builder<?> p_252089_) {
return createSelfDropDispatchTable(p_250203_, HAS_SILK_TOUCH, p_252089_);
}
protected static LootTable.Builder createShearsDispatchTable(Block p_252195_, LootPoolEntryContainer.Builder<?> p_250102_) {
return createSelfDropDispatchTable(p_252195_, HAS_SHEARS, p_250102_);
}
protected static LootTable.Builder createSilkTouchOrShearsDispatchTable(Block p_250539_, LootPoolEntryContainer.Builder<?> p_251459_) {
return createSelfDropDispatchTable(p_250539_, HAS_SHEARS_OR_SILK_TOUCH, p_251459_);
}
protected LootTable.Builder createSingleItemTableWithSilkTouch(Block p_249305_, ItemLike p_251905_) {
return createSilkTouchDispatchTable(p_249305_, this.applyExplosionCondition(p_249305_, LootItem.lootTableItem(p_251905_)));
}
protected LootTable.Builder createSingleItemTable(ItemLike p_251584_, NumberProvider p_249865_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(this.applyExplosionDecay(p_251584_, LootItem.lootTableItem(p_251584_).apply(SetItemCountFunction.setCount(p_249865_)))));
}
protected LootTable.Builder createSingleItemTableWithSilkTouch(Block p_251449_, ItemLike p_248558_, NumberProvider p_250047_) {
return createSilkTouchDispatchTable(p_251449_, this.applyExplosionDecay(p_251449_, LootItem.lootTableItem(p_248558_).apply(SetItemCountFunction.setCount(p_250047_))));
}
protected static LootTable.Builder createSilkTouchOnlyTable(ItemLike p_252216_) {
return LootTable.lootTable().withPool(LootPool.lootPool().when(HAS_SILK_TOUCH).setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_252216_)));
}
protected LootTable.Builder createPotFlowerItemTable(ItemLike p_249395_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(Blocks.FLOWER_POT, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.FLOWER_POT)))).withPool(this.applyExplosionCondition(p_249395_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_249395_))));
}
protected LootTable.Builder createSlabItemTable(Block p_251313_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(this.applyExplosionDecay(p_251313_, LootItem.lootTableItem(p_251313_).apply(SetItemCountFunction.setCount(ConstantValue.exactly(2.0F)).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_251313_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(SlabBlock.TYPE, SlabType.DOUBLE)))))));
}
protected <T extends Comparable<T> & StringRepresentable> LootTable.Builder createSinglePropConditionTable(Block p_252154_, Property<T> p_250272_, T p_250292_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(p_252154_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_252154_).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_252154_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(p_250272_, p_250292_))))));
}
protected LootTable.Builder createNameableBlockEntityTable(Block p_252291_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(p_252291_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_252291_).apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)))));
}
protected LootTable.Builder createShulkerBoxDrop(Block p_252164_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(p_252164_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_252164_).apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)).apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY).copy("Lock", "BlockEntityTag.Lock").copy("LootTable", "BlockEntityTag.LootTable").copy("LootTableSeed", "BlockEntityTag.LootTableSeed")).apply(SetContainerContents.setContents(BlockEntityType.SHULKER_BOX).withEntry(DynamicLoot.dynamicEntry(ShulkerBoxBlock.CONTENTS))))));
}
protected LootTable.Builder createCopperOreDrops(Block p_251306_) {
return createSilkTouchDispatchTable(p_251306_, this.applyExplosionDecay(p_251306_, LootItem.lootTableItem(Items.RAW_COPPER).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 5.0F))).apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE))));
}
protected LootTable.Builder createLapisOreDrops(Block p_251511_) {
return createSilkTouchDispatchTable(p_251511_, this.applyExplosionDecay(p_251511_, LootItem.lootTableItem(Items.LAPIS_LAZULI).apply(SetItemCountFunction.setCount(UniformGenerator.between(4.0F, 9.0F))).apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE))));
}
protected LootTable.Builder createRedstoneOreDrops(Block p_251906_) {
return createSilkTouchDispatchTable(p_251906_, this.applyExplosionDecay(p_251906_, LootItem.lootTableItem(Items.REDSTONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(4.0F, 5.0F))).apply(ApplyBonusCount.addUniformBonusCount(Enchantments.BLOCK_FORTUNE))));
}
protected LootTable.Builder createBannerDrop(Block p_249810_) {
return LootTable.lootTable().withPool(this.applyExplosionCondition(p_249810_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_249810_).apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)).apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY).copy("Patterns", "BlockEntityTag.Patterns")))));
}
protected static LootTable.Builder createBeeNestDrop(Block p_250988_) {
return LootTable.lootTable().withPool(LootPool.lootPool().when(HAS_SILK_TOUCH).setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_250988_).apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY).copy("Bees", "BlockEntityTag.Bees")).apply(CopyBlockState.copyState(p_250988_).copy(BeehiveBlock.HONEY_LEVEL))));
}
protected static LootTable.Builder createBeeHiveDrop(Block p_248770_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_248770_).when(HAS_SILK_TOUCH).apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY).copy("Bees", "BlockEntityTag.Bees")).apply(CopyBlockState.copyState(p_248770_).copy(BeehiveBlock.HONEY_LEVEL)).otherwise(LootItem.lootTableItem(p_248770_))));
}
protected static LootTable.Builder createCaveVinesDrop(Block p_251070_) {
return LootTable.lootTable().withPool(LootPool.lootPool().add(LootItem.lootTableItem(Items.GLOW_BERRIES)).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_251070_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CaveVines.BERRIES, true))));
}
protected LootTable.Builder createOreDrop(Block p_250450_, Item p_249745_) {
return createSilkTouchDispatchTable(p_250450_, this.applyExplosionDecay(p_250450_, LootItem.lootTableItem(p_249745_).apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE))));
}
protected LootTable.Builder createMushroomBlockDrop(Block p_249959_, ItemLike p_249315_) {
return createSilkTouchDispatchTable(p_249959_, this.applyExplosionDecay(p_249959_, LootItem.lootTableItem(p_249315_).apply(SetItemCountFunction.setCount(UniformGenerator.between(-6.0F, 2.0F))).apply(LimitCount.limitCount(IntRange.lowerBound(0)))));
}
protected LootTable.Builder createGrassDrops(Block p_252139_) {
return createShearsDispatchTable(p_252139_, this.applyExplosionDecay(p_252139_, LootItem.lootTableItem(Items.WHEAT_SEEDS).when(LootItemRandomChanceCondition.randomChance(0.125F)).apply(ApplyBonusCount.addUniformBonusCount(Enchantments.BLOCK_FORTUNE, 2))));
}
public LootTable.Builder createStemDrops(Block p_250957_, Item p_249098_) {
return LootTable.lootTable().withPool(this.applyExplosionDecay(p_250957_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_249098_).apply(StemBlock.AGE.getPossibleValues(), (p_249795_) -> {
return SetItemCountFunction.setCount(BinomialDistributionGenerator.binomial(3, (float)(p_249795_ + 1) / 15.0F)).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_250957_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(StemBlock.AGE, p_249795_)));
}))));
}
public LootTable.Builder createAttachedStemDrops(Block p_249778_, Item p_250678_) {
return LootTable.lootTable().withPool(this.applyExplosionDecay(p_249778_, LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_250678_).apply(SetItemCountFunction.setCount(BinomialDistributionGenerator.binomial(3, 0.53333336F))))));
}
protected static LootTable.Builder createShearsOnlyDrop(ItemLike p_250684_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).when(HAS_SHEARS).add(LootItem.lootTableItem(p_250684_)));
}
protected LootTable.Builder createMultifaceBlockDrops(Block p_249088_, LootItemCondition.Builder p_251535_) {
return LootTable.lootTable().withPool(LootPool.lootPool().add(this.applyExplosionDecay(p_249088_, LootItem.lootTableItem(p_249088_).when(p_251535_).apply(Direction.values(), (p_251536_) -> {
return SetItemCountFunction.setCount(ConstantValue.exactly(1.0F), true).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_249088_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(MultifaceBlock.getFaceProperty(p_251536_), true)));
}).apply(SetItemCountFunction.setCount(ConstantValue.exactly(-1.0F), true)))));
}
protected LootTable.Builder createLeavesDrops(Block p_250088_, Block p_250731_, float... p_248949_) {
return createSilkTouchOrShearsDispatchTable(p_250088_, this.applyExplosionCondition(p_250088_, LootItem.lootTableItem(p_250731_)).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, p_248949_))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).when(HAS_NO_SHEARS_OR_SILK_TOUCH).add(this.applyExplosionDecay(p_250088_, LootItem.lootTableItem(Items.STICK).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, NORMAL_LEAVES_STICK_CHANCES))));
}
protected LootTable.Builder createOakLeavesDrops(Block p_249535_, Block p_251505_, float... p_250753_) {
return this.createLeavesDrops(p_249535_, p_251505_, p_250753_).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).when(HAS_NO_SHEARS_OR_SILK_TOUCH).add(this.applyExplosionCondition(p_249535_, LootItem.lootTableItem(Items.APPLE)).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.005F, 0.0055555557F, 0.00625F, 0.008333334F, 0.025F))));
}
protected LootTable.Builder createMangroveLeavesDrops(Block p_251103_) {
return createSilkTouchOrShearsDispatchTable(p_251103_, this.applyExplosionDecay(Blocks.MANGROVE_LEAVES, LootItem.lootTableItem(Items.STICK).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F)))).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, NORMAL_LEAVES_STICK_CHANCES)));
}
protected LootTable.Builder createCropDrops(Block p_249457_, Item p_248599_, Item p_251915_, LootItemCondition.Builder p_252202_) {
return this.applyExplosionDecay(p_249457_, LootTable.lootTable().withPool(LootPool.lootPool().add(LootItem.lootTableItem(p_248599_).when(p_252202_).otherwise(LootItem.lootTableItem(p_251915_)))).withPool(LootPool.lootPool().when(p_252202_).add(LootItem.lootTableItem(p_251915_).apply(ApplyBonusCount.addBonusBinomialDistributionCount(Enchantments.BLOCK_FORTUNE, 0.5714286F, 3)))));
}
protected static LootTable.Builder createDoublePlantShearsDrop(Block p_248678_) {
return LootTable.lootTable().withPool(LootPool.lootPool().when(HAS_SHEARS).add(LootItem.lootTableItem(p_248678_).apply(SetItemCountFunction.setCount(ConstantValue.exactly(2.0F)))));
}
protected LootTable.Builder createDoublePlantWithSeedDrops(Block p_248590_, Block p_248735_) {
LootPoolEntryContainer.Builder<?> builder = LootItem.lootTableItem(p_248735_).apply(SetItemCountFunction.setCount(ConstantValue.exactly(2.0F))).when(HAS_SHEARS).otherwise(this.applyExplosionCondition(p_248590_, LootItem.lootTableItem(Items.WHEAT_SEEDS)).when(LootItemRandomChanceCondition.randomChance(0.125F)));
return LootTable.lootTable().withPool(LootPool.lootPool().add(builder).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_248590_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(DoublePlantBlock.HALF, DoubleBlockHalf.LOWER))).when(LocationCheck.checkLocation(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(p_248590_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(DoublePlantBlock.HALF, DoubleBlockHalf.UPPER).build()).build()), new BlockPos(0, 1, 0)))).withPool(LootPool.lootPool().add(builder).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_248590_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(DoublePlantBlock.HALF, DoubleBlockHalf.UPPER))).when(LocationCheck.checkLocation(LocationPredicate.Builder.location().setBlock(BlockPredicate.Builder.block().of(p_248590_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(DoublePlantBlock.HALF, DoubleBlockHalf.LOWER).build()).build()), new BlockPos(0, -1, 0))));
}
protected LootTable.Builder createCandleDrops(Block p_250896_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(this.applyExplosionDecay(p_250896_, LootItem.lootTableItem(p_250896_).apply(List.of(2, 3, 4), (p_249985_) -> {
return SetItemCountFunction.setCount(ConstantValue.exactly((float)p_249985_.intValue())).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_250896_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(CandleBlock.CANDLES, p_249985_)));
}))));
}
protected LootTable.Builder createPetalsDrops(Block p_273240_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(this.applyExplosionDecay(p_273240_, LootItem.lootTableItem(p_273240_).apply(IntStream.rangeClosed(1, 4).boxed().toList(), (p_272348_) -> {
return SetItemCountFunction.setCount(ConstantValue.exactly((float)p_272348_.intValue())).when(LootItemBlockStatePropertyCondition.hasBlockStateProperties(p_273240_).setProperties(StatePropertiesPredicate.Builder.properties().hasProperty(PinkPetalsBlock.AMOUNT, p_272348_)));
}))));
}
protected static LootTable.Builder createCandleCakeDrops(Block p_250280_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_250280_)));
}
public static LootTable.Builder noDrop() {
return LootTable.lootTable();
}
protected abstract void generate();
protected Iterable<Block> getKnownBlocks() {
return BuiltInRegistries.BLOCK;
}
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_249322_) {
this.generate();
Set<ResourceLocation> set = new HashSet<>();
for(Block block : getKnownBlocks()) {
if (block.isEnabled(this.enabledFeatures)) {
ResourceLocation resourcelocation = block.getLootTable();
if (resourcelocation != BuiltInLootTables.EMPTY && set.add(resourcelocation)) {
LootTable.Builder loottable$builder = this.map.remove(resourcelocation);
if (loottable$builder == null) {
throw new IllegalStateException(String.format(Locale.ROOT, "Missing loottable '%s' for '%s'", resourcelocation, BuiltInRegistries.BLOCK.getKey(block)));
}
p_249322_.accept(resourcelocation, loottable$builder);
}
}
}
if (!this.map.isEmpty()) {
throw new IllegalStateException("Created block loot tables for non-blocks: " + this.map.keySet());
}
}
protected void addNetherVinesDropTable(Block p_252269_, Block p_250696_) {
LootTable.Builder loottable$builder = createSilkTouchOrShearsDispatchTable(p_252269_, LootItem.lootTableItem(p_252269_).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.33F, 0.55F, 0.77F, 1.0F)));
this.add(p_252269_, loottable$builder);
this.add(p_250696_, loottable$builder);
}
protected LootTable.Builder createDoorTable(Block p_252166_) {
return this.createSinglePropConditionTable(p_252166_, DoorBlock.HALF, DoubleBlockHalf.LOWER);
}
protected void dropPottedContents(Block p_251064_) {
this.add(p_251064_, (p_250193_) -> {
return this.createPotFlowerItemTable(((FlowerPotBlock)p_250193_).getContent());
});
}
protected void otherWhenSilkTouch(Block p_249932_, Block p_252053_) {
this.add(p_249932_, createSilkTouchOnlyTable(p_252053_));
}
protected void dropOther(Block p_248885_, ItemLike p_251883_) {
this.add(p_248885_, this.createSingleItemTable(p_251883_));
}
protected void dropWhenSilkTouch(Block p_250855_) {
this.otherWhenSilkTouch(p_250855_, p_250855_);
}
protected void dropSelf(Block p_249181_) {
this.dropOther(p_249181_, p_249181_);
}
protected void add(Block p_251966_, Function<Block, LootTable.Builder> p_251699_) {
this.add(p_251966_, p_251699_.apply(p_251966_));
}
protected void add(Block p_250610_, LootTable.Builder p_249817_) {
this.map.put(p_250610_.getLootTable(), p_249817_);
}
}

View File

@@ -0,0 +1,115 @@
package net.minecraft.data.loot;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import net.minecraft.advancements.critereon.DamageSourcePredicate;
import net.minecraft.advancements.critereon.EntityFlagsPredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.EntitySubPredicate;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.animal.FrogVariant;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.entries.LootTableReference;
import net.minecraft.world.level.storage.loot.predicates.DamageSourceCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
public abstract class EntityLootSubProvider implements LootTableSubProvider {
protected static final EntityPredicate.Builder ENTITY_ON_FIRE = EntityPredicate.Builder.entity().flags(EntityFlagsPredicate.Builder.flags().setOnFire(true).build());
private static final Set<EntityType<?>> SPECIAL_LOOT_TABLE_TYPES = ImmutableSet.of(EntityType.PLAYER, EntityType.ARMOR_STAND, EntityType.IRON_GOLEM, EntityType.SNOW_GOLEM, EntityType.VILLAGER);
private final FeatureFlagSet allowed;
private final FeatureFlagSet required;
private final Map<EntityType<?>, Map<ResourceLocation, LootTable.Builder>> map = Maps.newHashMap();
protected EntityLootSubProvider(FeatureFlagSet p_251971_) {
this(p_251971_, p_251971_);
}
protected EntityLootSubProvider(FeatureFlagSet p_266989_, FeatureFlagSet p_267138_) {
this.allowed = p_266989_;
this.required = p_267138_;
}
protected static LootTable.Builder createSheepTable(ItemLike p_249422_) {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(p_249422_))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootTableReference.lootTableReference(EntityType.SHEEP.getDefaultLootTable())));
}
public abstract void generate();
protected java.util.stream.Stream<EntityType<?>> getKnownEntityTypes() {
return BuiltInRegistries.ENTITY_TYPE.stream();
}
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_251751_) {
this.generate();
Set<ResourceLocation> set = Sets.newHashSet();
this.getKnownEntityTypes().map(EntityType::builtInRegistryHolder).forEach((p_249003_) -> {
EntityType<?> entitytype = p_249003_.value();
if (entitytype.isEnabled(this.allowed)) {
if (canHaveLootTable(entitytype)) {
Map<ResourceLocation, LootTable.Builder> map = this.map.remove(entitytype);
ResourceLocation resourcelocation = entitytype.getDefaultLootTable();
if (!resourcelocation.equals(BuiltInLootTables.EMPTY) && entitytype.isEnabled(this.required) && (map == null || !map.containsKey(resourcelocation))) {
throw new IllegalStateException(String.format(Locale.ROOT, "Missing loottable '%s' for '%s'", resourcelocation, p_249003_.key().location()));
}
if (map != null) {
map.forEach((p_250376_, p_250972_) -> {
if (!set.add(p_250376_)) {
throw new IllegalStateException(String.format(Locale.ROOT, "Duplicate loottable '%s' for '%s'", p_250376_, p_249003_.key().location()));
} else {
p_251751_.accept(p_250376_, p_250972_);
}
});
}
} else {
Map<ResourceLocation, LootTable.Builder> map1 = this.map.remove(entitytype);
if (map1 != null) {
throw new IllegalStateException(String.format(Locale.ROOT, "Weird loottables '%s' for '%s', not a LivingEntity so should not have loot", map1.keySet().stream().map(ResourceLocation::toString).collect(Collectors.joining(",")), p_249003_.key().location()));
}
}
}
});
if (!this.map.isEmpty()) {
throw new IllegalStateException("Created loot tables for entities not supported by datapack: " + this.map.keySet());
}
}
protected boolean canHaveLootTable(EntityType<?> p_249029_) {
return SPECIAL_LOOT_TABLE_TYPES.contains(p_249029_) || p_249029_.getCategory() != MobCategory.MISC;
}
protected LootItemCondition.Builder killedByFrog() {
return DamageSourceCondition.hasDamageSource(DamageSourcePredicate.Builder.damageType().source(EntityPredicate.Builder.entity().of(EntityType.FROG)));
}
protected LootItemCondition.Builder killedByFrogVariant(FrogVariant p_249403_) {
return DamageSourceCondition.hasDamageSource(DamageSourcePredicate.Builder.damageType().source(EntityPredicate.Builder.entity().of(EntityType.FROG).subPredicate(EntitySubPredicate.variant(p_249403_))));
}
protected void add(EntityType<?> p_248740_, LootTable.Builder p_249440_) {
this.add(p_248740_, p_248740_.getDefaultLootTable(), p_249440_);
}
protected void add(EntityType<?> p_252130_, ResourceLocation p_251706_, LootTable.Builder p_249357_) {
this.map.computeIfAbsent(p_252130_, (p_251466_) -> {
return new HashMap();
}).put(p_251706_, p_249357_);
}
}

View File

@@ -0,0 +1,106 @@
package net.minecraft.data.loot;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.mojang.logging.LogUtils;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
import javax.annotation.Nullable;
import net.minecraft.Util;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.RandomSequence;
import net.minecraft.world.level.levelgen.RandomSupport;
import net.minecraft.world.level.storage.loot.LootDataId;
import net.minecraft.world.level.storage.loot.LootDataResolver;
import net.minecraft.world.level.storage.loot.LootDataType;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.ValidationContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import org.slf4j.Logger;
public class LootTableProvider implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final PackOutput.PathProvider pathProvider;
private final Set<ResourceLocation> requiredTables;
private final List<LootTableProvider.SubProviderEntry> subProviders;
public LootTableProvider(PackOutput p_254123_, Set<ResourceLocation> p_254481_, List<LootTableProvider.SubProviderEntry> p_253798_) {
this.pathProvider = p_254123_.createPathProvider(PackOutput.Target.DATA_PACK, "loot_tables");
this.subProviders = p_253798_;
this.requiredTables = p_254481_;
}
public CompletableFuture<?> run(CachedOutput p_254060_) {
final Map<ResourceLocation, LootTable> map = Maps.newHashMap();
Map<RandomSupport.Seed128bit, ResourceLocation> map1 = new Object2ObjectOpenHashMap<>();
this.getTables().forEach((p_288263_) -> {
p_288263_.provider().get().generate((p_288259_, p_288260_) -> {
ResourceLocation resourcelocation1 = map1.put(RandomSequence.seedForKey(p_288259_), p_288259_);
if (resourcelocation1 != null) {
Util.logAndPauseIfInIde("Loot table random sequence seed collision on " + resourcelocation1 + " and " + p_288259_);
}
p_288260_.setRandomSequence(p_288259_);
if (map.put(p_288259_, p_288260_.setParamSet(p_288263_.paramSet).build()) != null) {
throw new IllegalStateException("Duplicate loot table " + p_288259_);
}
});
});
ValidationContext validationcontext = new ValidationContext(LootContextParamSets.ALL_PARAMS, new LootDataResolver() {
@Nullable
public <T> T getElement(LootDataId<T> p_279283_) {
return (T)(p_279283_.type() == LootDataType.TABLE ? map.get(p_279283_.location()) : null);
}
});
validate(map, validationcontext);
Multimap<String, String> multimap = validationcontext.getProblems();
if (!multimap.isEmpty()) {
multimap.forEach((p_124446_, p_124447_) -> {
LOGGER.warn("Found validation problem in {}: {}", p_124446_, p_124447_);
});
throw new IllegalStateException("Failed to validate loot tables, see logs");
} else {
return CompletableFuture.allOf(map.entrySet().stream().map((p_278900_) -> {
ResourceLocation resourcelocation1 = p_278900_.getKey();
LootTable loottable = p_278900_.getValue();
Path path = this.pathProvider.json(resourcelocation1);
return DataProvider.saveStable(p_254060_, LootDataType.TABLE.parser().toJsonTree(loottable), path);
}).toArray((p_253403_) -> {
return new CompletableFuture[p_253403_];
}));
}
}
public List<LootTableProvider.SubProviderEntry> getTables() {
return this.subProviders;
}
protected void validate(Map<ResourceLocation, LootTable> map, ValidationContext validationcontext) {
for(ResourceLocation resourcelocation : Sets.difference(this.requiredTables, map.keySet())) {
validationcontext.reportProblem("Missing built-in table: " + resourcelocation);
}
map.forEach((p_278897_, p_278898_) -> {
p_278898_.validate(validationcontext.setParams(p_278898_.getParamSet()).enterElement("{" + p_278897_ + "}", new LootDataId<>(LootDataType.TABLE, p_278897_)));
});
}
public final String getName() {
return "Loot Tables";
}
public static record SubProviderEntry(Supplier<LootTableSubProvider> provider, LootContextParamSet paramSet) {
}
}

View File

@@ -0,0 +1,10 @@
package net.minecraft.data.loot;
import java.util.function.BiConsumer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.storage.loot.LootTable;
@FunctionalInterface
public interface LootTableSubProvider {
void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_249643_);
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.loot;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,25 @@
package net.minecraft.data.loot.packs;
import java.util.function.BiConsumer;
import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.functions.SetStewEffectFunction;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public class VanillaArchaeologyLoot implements LootTableSubProvider {
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_278066_) {
p_278066_.accept(BuiltInLootTables.DESERT_WELL_ARCHAEOLOGY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ARMS_UP_POTTERY_SHERD).setWeight(2)).add(LootItem.lootTableItem(Items.BREWER_POTTERY_SHERD).setWeight(2)).add(LootItem.lootTableItem(Items.BRICK)).add(LootItem.lootTableItem(Items.EMERALD)).add(LootItem.lootTableItem(Items.STICK)).add(LootItem.lootTableItem(Items.SUSPICIOUS_STEW).apply(SetStewEffectFunction.stewEffect().withEffect(MobEffects.NIGHT_VISION, UniformGenerator.between(7.0F, 10.0F)).withEffect(MobEffects.JUMP, UniformGenerator.between(7.0F, 10.0F)).withEffect(MobEffects.WEAKNESS, UniformGenerator.between(6.0F, 8.0F)).withEffect(MobEffects.BLINDNESS, UniformGenerator.between(5.0F, 7.0F)).withEffect(MobEffects.POISON, UniformGenerator.between(10.0F, 20.0F)).withEffect(MobEffects.SATURATION, UniformGenerator.between(7.0F, 10.0F))))));
p_278066_.accept(BuiltInLootTables.DESERT_PYRAMID_ARCHAEOLOGY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ARCHER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.MINER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.PRIZE_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.SKULL_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.DIAMOND)).add(LootItem.lootTableItem(Items.TNT)).add(LootItem.lootTableItem(Items.GUNPOWDER)).add(LootItem.lootTableItem(Items.EMERALD))));
p_278066_.accept(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.EMERALD).setWeight(2)).add(LootItem.lootTableItem(Items.WHEAT).setWeight(2)).add(LootItem.lootTableItem(Items.WOODEN_HOE).setWeight(2)).add(LootItem.lootTableItem(Items.CLAY).setWeight(2)).add(LootItem.lootTableItem(Items.BRICK).setWeight(2)).add(LootItem.lootTableItem(Items.YELLOW_DYE).setWeight(2)).add(LootItem.lootTableItem(Items.BLUE_DYE).setWeight(2)).add(LootItem.lootTableItem(Items.LIGHT_BLUE_DYE).setWeight(2)).add(LootItem.lootTableItem(Items.WHITE_DYE).setWeight(2)).add(LootItem.lootTableItem(Items.ORANGE_DYE).setWeight(2)).add(LootItem.lootTableItem(Items.RED_CANDLE).setWeight(2)).add(LootItem.lootTableItem(Items.GREEN_CANDLE).setWeight(2)).add(LootItem.lootTableItem(Items.PURPLE_CANDLE).setWeight(2)).add(LootItem.lootTableItem(Items.BROWN_CANDLE).setWeight(2)).add(LootItem.lootTableItem(Items.MAGENTA_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.PINK_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.BLUE_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.LIGHT_BLUE_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.RED_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.YELLOW_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.PURPLE_STAINED_GLASS_PANE)).add(LootItem.lootTableItem(Items.SPRUCE_HANGING_SIGN)).add(LootItem.lootTableItem(Items.OAK_HANGING_SIGN)).add(LootItem.lootTableItem(Items.GOLD_NUGGET)).add(LootItem.lootTableItem(Items.COAL)).add(LootItem.lootTableItem(Items.WHEAT_SEEDS)).add(LootItem.lootTableItem(Items.BEETROOT_SEEDS)).add(LootItem.lootTableItem(Items.DEAD_BUSH)).add(LootItem.lootTableItem(Items.FLOWER_POT)).add(LootItem.lootTableItem(Items.STRING)).add(LootItem.lootTableItem(Items.LEAD))));
p_278066_.accept(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_RARE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BURN_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.DANGER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.FRIEND_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.HEART_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.HEARTBREAK_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.HOWL_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.SHEAF_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE)).add(LootItem.lootTableItem(Items.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE)).add(LootItem.lootTableItem(Items.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE)).add(LootItem.lootTableItem(Items.HOST_ARMOR_TRIM_SMITHING_TEMPLATE)).add(LootItem.lootTableItem(Items.MUSIC_DISC_RELIC))));
p_278066_.accept(BuiltInLootTables.OCEAN_RUIN_WARM_ARCHAEOLOGY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ANGLER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.SHELTER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.SNORT_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.SNIFFER_EGG)).add(LootItem.lootTableItem(Items.IRON_AXE)).add(LootItem.lootTableItem(Items.EMERALD).setWeight(2)).add(LootItem.lootTableItem(Items.WHEAT).setWeight(2)).add(LootItem.lootTableItem(Items.WOODEN_HOE).setWeight(2)).add(LootItem.lootTableItem(Items.COAL).setWeight(2)).add(LootItem.lootTableItem(Items.GOLD_NUGGET).setWeight(2))));
p_278066_.accept(BuiltInLootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BLADE_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.EXPLORER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.MOURNER_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.PLENTY_POTTERY_SHERD)).add(LootItem.lootTableItem(Items.IRON_AXE)).add(LootItem.lootTableItem(Items.EMERALD).setWeight(2)).add(LootItem.lootTableItem(Items.WHEAT).setWeight(2)).add(LootItem.lootTableItem(Items.WOODEN_HOE).setWeight(2)).add(LootItem.lootTableItem(Items.COAL).setWeight(2)).add(LootItem.lootTableItem(Items.GOLD_NUGGET).setWeight(2))));
}
}

View File

@@ -0,0 +1,146 @@
package net.minecraft.data.loot.packs;
import net.minecraft.advancements.critereon.DamageSourcePredicate;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.SlimePredicate;
import net.minecraft.advancements.critereon.TagPredicate;
import net.minecraft.data.loot.EntityLootSubProvider;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.tags.EntityTypeTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.animal.FrogVariant;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.EmptyLootItem;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.entries.LootTableReference;
import net.minecraft.world.level.storage.loot.entries.TagEntry;
import net.minecraft.world.level.storage.loot.functions.LootingEnchantFunction;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.functions.SetPotionFunction;
import net.minecraft.world.level.storage.loot.functions.SmeltItemFunction;
import net.minecraft.world.level.storage.loot.predicates.DamageSourceCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemKilledByPlayerCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceWithLootingCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public class VanillaEntityLoot extends EntityLootSubProvider {
public VanillaEntityLoot() {
super(FeatureFlags.REGISTRY.allFlags());
}
public void generate() {
this.add(EntityType.ALLAY, LootTable.lootTable());
this.add(EntityType.ARMOR_STAND, LootTable.lootTable());
this.add(EntityType.AXOLOTL, LootTable.lootTable());
this.add(EntityType.BAT, LootTable.lootTable());
this.add(EntityType.BEE, LootTable.lootTable());
this.add(EntityType.BLAZE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BLAZE_ROD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.CAT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STRING).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))))));
this.add(EntityType.CAMEL, LootTable.lootTable());
this.add(EntityType.CAVE_SPIDER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STRING).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SPIDER_EYE).apply(SetItemCountFunction.setCount(UniformGenerator.between(-1.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.CHICKEN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.FEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.CHICKEN).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.COD, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE_MEAL)).when(LootItemRandomChanceCondition.randomChance(0.05F))));
this.add(EntityType.COW, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BEEF).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.CREEPER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GUNPOWDER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().add(TagEntry.expandTag(ItemTags.CREEPER_DROP_MUSIC_DISCS)).when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.KILLER, EntityPredicate.Builder.entity().of(EntityTypeTags.SKELETONS)))));
this.add(EntityType.DOLPHIN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))))));
this.add(EntityType.DONKEY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.DROWNED, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COPPER_INGOT)).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.11F, 0.02F))));
this.add(EntityType.ELDER_GUARDIAN, elderGuardianLootTable());
this.add(EntityType.ENDER_DRAGON, LootTable.lootTable());
this.add(EntityType.ENDERMAN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ENDER_PEARL).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.ENDERMITE, LootTable.lootTable());
this.add(EntityType.EVOKER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.TOTEM_OF_UNDYING))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.EMERALD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.FOX, LootTable.lootTable());
this.add(EntityType.FROG, LootTable.lootTable());
this.add(EntityType.GHAST, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GHAST_TEAR).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GUNPOWDER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.GIANT, LootTable.lootTable());
this.add(EntityType.GLOW_SQUID, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GLOW_INK_SAC).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.GOAT, LootTable.lootTable());
this.add(EntityType.GUARDIAN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PRISMARINE_SHARD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD).setWeight(2).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).add(LootItem.lootTableItem(Items.PRISMARINE_CRYSTALS).setWeight(2).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(EmptyLootItem.emptyItem())).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootTableReference.lootTableReference(BuiltInLootTables.FISHING_FISH).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
this.add(EntityType.HORSE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.HUSK, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.IRON_INGOT)).add(LootItem.lootTableItem(Items.CARROT)).add(LootItem.lootTableItem(Items.POTATO).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
this.add(EntityType.RAVAGER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SADDLE).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))))));
this.add(EntityType.ILLUSIONER, LootTable.lootTable());
this.add(EntityType.IRON_GOLEM, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.POPPY).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.IRON_INGOT).apply(SetItemCountFunction.setCount(UniformGenerator.between(3.0F, 5.0F))))));
this.add(EntityType.LLAMA, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.MAGMA_CUBE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.MAGMA_CREAM).apply(SetItemCountFunction.setCount(UniformGenerator.between(-2.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))).when(this.killedByFrog().invert()).when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().subPredicate(SlimePredicate.sized(MinMaxBounds.Ints.atLeast(2)))))).add(LootItem.lootTableItem(Items.PEARLESCENT_FROGLIGHT).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))).when(this.killedByFrogVariant(FrogVariant.WARM))).add(LootItem.lootTableItem(Items.VERDANT_FROGLIGHT).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))).when(this.killedByFrogVariant(FrogVariant.COLD))).add(LootItem.lootTableItem(Items.OCHRE_FROGLIGHT).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))).when(this.killedByFrogVariant(FrogVariant.TEMPERATE)))));
this.add(EntityType.MULE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.MOOSHROOM, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BEEF).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.OCELOT, LootTable.lootTable());
this.add(EntityType.PANDA, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.BAMBOO).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))))));
this.add(EntityType.PARROT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.FEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.PHANTOM, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PHANTOM_MEMBRANE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.PIG, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PORKCHOP).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.PILLAGER, LootTable.lootTable());
this.add(EntityType.PLAYER, LootTable.lootTable());
this.add(EntityType.POLAR_BEAR, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).setWeight(3).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.SALMON).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.PUFFERFISH, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PUFFERFISH).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE_MEAL)).when(LootItemRandomChanceCondition.randomChance(0.05F))));
this.add(EntityType.RABBIT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.RABBIT_HIDE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.RABBIT).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.RABBIT_FOOT)).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.1F, 0.03F))));
this.add(EntityType.SALMON, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SALMON).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE_MEAL)).when(LootItemRandomChanceCondition.randomChance(0.05F))));
this.add(EntityType.SHEEP, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.MUTTON).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 2.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_BLACK, createSheepTable(Blocks.BLACK_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_BLUE, createSheepTable(Blocks.BLUE_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_BROWN, createSheepTable(Blocks.BROWN_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_CYAN, createSheepTable(Blocks.CYAN_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_GRAY, createSheepTable(Blocks.GRAY_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_GREEN, createSheepTable(Blocks.GREEN_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_LIGHT_BLUE, createSheepTable(Blocks.LIGHT_BLUE_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_LIGHT_GRAY, createSheepTable(Blocks.LIGHT_GRAY_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_LIME, createSheepTable(Blocks.LIME_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_MAGENTA, createSheepTable(Blocks.MAGENTA_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_ORANGE, createSheepTable(Blocks.ORANGE_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_PINK, createSheepTable(Blocks.PINK_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_PURPLE, createSheepTable(Blocks.PURPLE_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_RED, createSheepTable(Blocks.RED_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_WHITE, createSheepTable(Blocks.WHITE_WOOL));
this.add(EntityType.SHEEP, BuiltInLootTables.SHEEP_YELLOW, createSheepTable(Blocks.YELLOW_WOOL));
this.add(EntityType.SHULKER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SHULKER_SHELL)).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.5F, 0.0625F))));
this.add(EntityType.SILVERFISH, LootTable.lootTable());
this.add(EntityType.SKELETON, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.SKELETON_HORSE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.SLIME, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SLIME_BALL).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))).when(this.killedByFrog().invert())).add(LootItem.lootTableItem(Items.SLIME_BALL).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))).when(this.killedByFrog())).when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().subPredicate(SlimePredicate.sized(MinMaxBounds.Ints.exactly(1)))))));
this.add(EntityType.SNIFFER, LootTable.lootTable());
this.add(EntityType.SNOW_GOLEM, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SNOWBALL).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 15.0F))))));
this.add(EntityType.SPIDER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STRING).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SPIDER_EYE).apply(SetItemCountFunction.setCount(UniformGenerator.between(-1.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.SQUID, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.INK_SAC).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.STRAY, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)).setLimit(1)).apply(SetPotionFunction.setPotion(Potions.SLOWNESS))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.STRIDER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STRING).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 5.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.TADPOLE, LootTable.lootTable());
this.add(EntityType.TRADER_LLAMA, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.TROPICAL_FISH, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.TROPICAL_FISH).apply(SetItemCountFunction.setCount(ConstantValue.exactly(1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE_MEAL)).when(LootItemRandomChanceCondition.randomChance(0.05F))));
this.add(EntityType.TURTLE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.SEAGRASS).setWeight(3).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BOWL)).when(DamageSourceCondition.hasDamageSource(DamageSourcePredicate.Builder.damageType().tag(TagPredicate.is(DamageTypeTags.IS_LIGHTNING))))));
this.add(EntityType.VEX, LootTable.lootTable());
this.add(EntityType.VILLAGER, LootTable.lootTable());
this.add(EntityType.WARDEN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.SCULK_CATALYST))));
this.add(EntityType.WANDERING_TRADER, LootTable.lootTable());
this.add(EntityType.VINDICATOR, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.EMERALD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).when(LootItemKilledByPlayerCondition.killedByPlayer())));
this.add(EntityType.WITCH, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(UniformGenerator.between(1.0F, 3.0F)).add(LootItem.lootTableItem(Items.GLOWSTONE_DUST).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.SUGAR).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.REDSTONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.SPIDER_EYE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.GLASS_BOTTLE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.GUNPOWDER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(LootItem.lootTableItem(Items.STICK).setWeight(2).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.WITHER, LootTable.lootTable());
this.add(EntityType.WITHER_SKELETON, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COAL).apply(SetItemCountFunction.setCount(UniformGenerator.between(-1.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BONE).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.WITHER_SKELETON_SKULL)).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
this.add(EntityType.WOLF, LootTable.lootTable());
this.add(EntityType.ZOGLIN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.ZOMBIE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.IRON_INGOT)).add(LootItem.lootTableItem(Items.CARROT)).add(LootItem.lootTableItem(Items.POTATO).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
this.add(EntityType.ZOMBIE_HORSE, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.ZOMBIFIED_PIGLIN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GOLD_NUGGET).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.GOLD_INGOT)).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
this.add(EntityType.HOGLIN, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PORKCHOP).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))));
this.add(EntityType.PIGLIN, LootTable.lootTable());
this.add(EntityType.PIGLIN_BRUTE, LootTable.lootTable());
this.add(EntityType.ZOMBIE_VILLAGER, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.IRON_INGOT)).add(LootItem.lootTableItem(Items.CARROT)).add(LootItem.lootTableItem(Items.POTATO).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))));
}
public static LootTable.Builder elderGuardianLootTable() {
return LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.PRISMARINE_SHARD).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 2.0F))).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD).setWeight(3).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F))).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).add(LootItem.lootTableItem(Items.PRISMARINE_CRYSTALS).setWeight(2).apply(LootingEnchantFunction.lootingMultiplier(UniformGenerator.between(0.0F, 1.0F)))).add(EmptyLootItem.emptyItem())).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Blocks.WET_SPONGE)).when(LootItemKilledByPlayerCondition.killedByPlayer())).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootTableReference.lootTableReference(BuiltInLootTables.FISHING_FISH).apply(SmeltItemFunction.smelted().when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, ENTITY_ON_FIRE)))).when(LootItemKilledByPlayerCondition.killedByPlayer()).when(LootItemRandomChanceWithLootingCondition.randomChanceAndLootingBoost(0.025F, 0.01F))).withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(EmptyLootItem.emptyItem().setWeight(4)).add(LootItem.lootTableItem(Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE).setWeight(1)));
}
}

View File

@@ -0,0 +1,44 @@
package net.minecraft.data.loot.packs;
import java.util.function.BiConsumer;
import net.minecraft.advancements.critereon.EntityPredicate;
import net.minecraft.advancements.critereon.FishingHookPredicate;
import net.minecraft.advancements.critereon.LocationPredicate;
import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.entries.LootTableReference;
import net.minecraft.world.level.storage.loot.functions.EnchantWithLevelsFunction;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.functions.SetItemDamageFunction;
import net.minecraft.world.level.storage.loot.functions.SetPotionFunction;
import net.minecraft.world.level.storage.loot.predicates.LocationCheck;
import net.minecraft.world.level.storage.loot.predicates.LootItemCondition;
import net.minecraft.world.level.storage.loot.predicates.LootItemEntityPropertyCondition;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public class VanillaFishingLoot implements LootTableSubProvider {
public static final LootItemCondition.Builder IN_JUNGLE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(Biomes.JUNGLE));
public static final LootItemCondition.Builder IN_SPARSE_JUNGLE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(Biomes.SPARSE_JUNGLE));
public static final LootItemCondition.Builder IN_BAMBOO_JUNGLE = LocationCheck.checkLocation(LocationPredicate.Builder.location().setBiome(Biomes.BAMBOO_JUNGLE));
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_249559_) {
p_249559_.accept(BuiltInLootTables.FISHING, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootTableReference.lootTableReference(BuiltInLootTables.FISHING_JUNK).setWeight(10).setQuality(-2)).add(LootTableReference.lootTableReference(BuiltInLootTables.FISHING_TREASURE).setWeight(5).setQuality(2).when(LootItemEntityPropertyCondition.hasProperties(LootContext.EntityTarget.THIS, EntityPredicate.Builder.entity().subPredicate(FishingHookPredicate.inOpenWater(true))))).add(LootTableReference.lootTableReference(BuiltInLootTables.FISHING_FISH).setWeight(85).setQuality(-1))));
p_249559_.accept(BuiltInLootTables.FISHING_FISH, fishingFishLootTable());
p_249559_.accept(BuiltInLootTables.FISHING_JUNK, LootTable.lootTable().withPool(LootPool.lootPool().add(LootItem.lootTableItem(Blocks.LILY_PAD).setWeight(17)).add(LootItem.lootTableItem(Items.LEATHER_BOOTS).setWeight(10).apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.9F)))).add(LootItem.lootTableItem(Items.LEATHER).setWeight(10)).add(LootItem.lootTableItem(Items.BONE).setWeight(10)).add(LootItem.lootTableItem(Items.POTION).setWeight(10).apply(SetPotionFunction.setPotion(Potions.WATER))).add(LootItem.lootTableItem(Items.STRING).setWeight(5)).add(LootItem.lootTableItem(Items.FISHING_ROD).setWeight(2).apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.9F)))).add(LootItem.lootTableItem(Items.BOWL).setWeight(10)).add(LootItem.lootTableItem(Items.STICK).setWeight(5)).add(LootItem.lootTableItem(Items.INK_SAC).setWeight(1).apply(SetItemCountFunction.setCount(ConstantValue.exactly(10.0F)))).add(LootItem.lootTableItem(Blocks.TRIPWIRE_HOOK).setWeight(10)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).setWeight(10)).add(LootItem.lootTableItem(Blocks.BAMBOO).when(IN_JUNGLE.or(IN_SPARSE_JUNGLE).or(IN_BAMBOO_JUNGLE)).setWeight(10))));
p_249559_.accept(BuiltInLootTables.FISHING_TREASURE, LootTable.lootTable().withPool(LootPool.lootPool().add(LootItem.lootTableItem(Items.NAME_TAG)).add(LootItem.lootTableItem(Items.SADDLE)).add(LootItem.lootTableItem(Items.BOW).apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.25F))).apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)).allowTreasure())).add(LootItem.lootTableItem(Items.FISHING_ROD).apply(SetItemDamageFunction.setDamage(UniformGenerator.between(0.0F, 0.25F))).apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)).allowTreasure())).add(LootItem.lootTableItem(Items.BOOK).apply(EnchantWithLevelsFunction.enchantWithLevels(ConstantValue.exactly(30.0F)).allowTreasure())).add(LootItem.lootTableItem(Items.NAUTILUS_SHELL))));
}
public static LootTable.Builder fishingFishLootTable() {
return LootTable.lootTable().withPool(LootPool.lootPool().add(LootItem.lootTableItem(Items.COD).setWeight(60)).add(LootItem.lootTableItem(Items.SALMON).setWeight(25)).add(LootItem.lootTableItem(Items.TROPICAL_FISH).setWeight(2)).add(LootItem.lootTableItem(Items.PUFFERFISH).setWeight(13)));
}
}

View File

@@ -0,0 +1,35 @@
package net.minecraft.data.loot.packs;
import java.util.function.BiConsumer;
import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.functions.SetPotionFunction;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public class VanillaGiftLoot implements LootTableSubProvider {
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_250831_) {
p_250831_.accept(BuiltInLootTables.CAT_MORNING_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.RABBIT_HIDE).setWeight(10)).add(LootItem.lootTableItem(Items.RABBIT_FOOT).setWeight(10)).add(LootItem.lootTableItem(Items.CHICKEN).setWeight(10)).add(LootItem.lootTableItem(Items.FEATHER).setWeight(10)).add(LootItem.lootTableItem(Items.ROTTEN_FLESH).setWeight(10)).add(LootItem.lootTableItem(Items.STRING).setWeight(10)).add(LootItem.lootTableItem(Items.PHANTOM_MEMBRANE).setWeight(2))));
p_250831_.accept(BuiltInLootTables.ARMORER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.CHAINMAIL_HELMET)).add(LootItem.lootTableItem(Items.CHAINMAIL_CHESTPLATE)).add(LootItem.lootTableItem(Items.CHAINMAIL_LEGGINGS)).add(LootItem.lootTableItem(Items.CHAINMAIL_BOOTS))));
p_250831_.accept(BuiltInLootTables.BUTCHER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COOKED_RABBIT)).add(LootItem.lootTableItem(Items.COOKED_CHICKEN)).add(LootItem.lootTableItem(Items.COOKED_PORKCHOP)).add(LootItem.lootTableItem(Items.COOKED_BEEF)).add(LootItem.lootTableItem(Items.COOKED_MUTTON))));
p_250831_.accept(BuiltInLootTables.CARTOGRAPHER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.MAP)).add(LootItem.lootTableItem(Items.PAPER))));
p_250831_.accept(BuiltInLootTables.CLERIC_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.REDSTONE)).add(LootItem.lootTableItem(Items.LAPIS_LAZULI))));
p_250831_.accept(BuiltInLootTables.FARMER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BREAD)).add(LootItem.lootTableItem(Items.PUMPKIN_PIE)).add(LootItem.lootTableItem(Items.COOKIE))));
p_250831_.accept(BuiltInLootTables.FISHERMAN_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.COD)).add(LootItem.lootTableItem(Items.SALMON))));
p_250831_.accept(BuiltInLootTables.FLETCHER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.ARROW).setWeight(26)).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.SWIFTNESS))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.SLOWNESS))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.STRENGTH))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.HEALING))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.HARMING))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.LEAPING))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.REGENERATION))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.FIRE_RESISTANCE))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.WATER_BREATHING))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.INVISIBILITY))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.NIGHT_VISION))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.WEAKNESS))).add(LootItem.lootTableItem(Items.TIPPED_ARROW).apply(SetItemCountFunction.setCount(UniformGenerator.between(0.0F, 1.0F))).apply(SetPotionFunction.setPotion(Potions.POISON)))));
p_250831_.accept(BuiltInLootTables.LEATHERWORKER_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.LEATHER))));
p_250831_.accept(BuiltInLootTables.LIBRARIAN_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BOOK))));
p_250831_.accept(BuiltInLootTables.MASON_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.CLAY))));
p_250831_.accept(BuiltInLootTables.SHEPHERD_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.WHITE_WOOL)).add(LootItem.lootTableItem(Items.ORANGE_WOOL)).add(LootItem.lootTableItem(Items.MAGENTA_WOOL)).add(LootItem.lootTableItem(Items.LIGHT_BLUE_WOOL)).add(LootItem.lootTableItem(Items.YELLOW_WOOL)).add(LootItem.lootTableItem(Items.LIME_WOOL)).add(LootItem.lootTableItem(Items.PINK_WOOL)).add(LootItem.lootTableItem(Items.GRAY_WOOL)).add(LootItem.lootTableItem(Items.LIGHT_GRAY_WOOL)).add(LootItem.lootTableItem(Items.CYAN_WOOL)).add(LootItem.lootTableItem(Items.PURPLE_WOOL)).add(LootItem.lootTableItem(Items.BLUE_WOOL)).add(LootItem.lootTableItem(Items.BROWN_WOOL)).add(LootItem.lootTableItem(Items.GREEN_WOOL)).add(LootItem.lootTableItem(Items.RED_WOOL)).add(LootItem.lootTableItem(Items.BLACK_WOOL))));
p_250831_.accept(BuiltInLootTables.TOOLSMITH_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STONE_PICKAXE)).add(LootItem.lootTableItem(Items.STONE_AXE)).add(LootItem.lootTableItem(Items.STONE_HOE)).add(LootItem.lootTableItem(Items.STONE_SHOVEL))));
p_250831_.accept(BuiltInLootTables.WEAPONSMITH_GIFT, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.STONE_AXE)).add(LootItem.lootTableItem(Items.GOLDEN_AXE)).add(LootItem.lootTableItem(Items.IRON_AXE))));
p_250831_.accept(BuiltInLootTables.SNIFFER_DIGGING, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.TORCHFLOWER_SEEDS)).add(LootItem.lootTableItem(Items.PITCHER_POD))));
}
}

View File

@@ -0,0 +1,13 @@
package net.minecraft.data.loot.packs;
import java.util.List;
import net.minecraft.data.PackOutput;
import net.minecraft.data.loot.LootTableProvider;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
public class VanillaLootTableProvider {
public static LootTableProvider create(PackOutput p_250807_) {
return new LootTableProvider(p_250807_, BuiltInLootTables.all(), List.of(new LootTableProvider.SubProviderEntry(VanillaFishingLoot::new, LootContextParamSets.FISHING), new LootTableProvider.SubProviderEntry(VanillaChestLoot::new, LootContextParamSets.CHEST), new LootTableProvider.SubProviderEntry(VanillaEntityLoot::new, LootContextParamSets.ENTITY), new LootTableProvider.SubProviderEntry(VanillaBlockLoot::new, LootContextParamSets.BLOCK), new LootTableProvider.SubProviderEntry(VanillaPiglinBarterLoot::new, LootContextParamSets.PIGLIN_BARTER), new LootTableProvider.SubProviderEntry(VanillaGiftLoot::new, LootContextParamSets.GIFT), new LootTableProvider.SubProviderEntry(VanillaArchaeologyLoot::new, LootContextParamSets.ARCHAEOLOGY)));
}
}

View File

@@ -0,0 +1,23 @@
package net.minecraft.data.loot.packs;
import java.util.function.BiConsumer;
import net.minecraft.data.loot.LootTableSubProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.storage.loot.BuiltInLootTables;
import net.minecraft.world.level.storage.loot.LootPool;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.entries.LootItem;
import net.minecraft.world.level.storage.loot.functions.EnchantRandomlyFunction;
import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction;
import net.minecraft.world.level.storage.loot.functions.SetPotionFunction;
import net.minecraft.world.level.storage.loot.providers.number.ConstantValue;
import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator;
public class VanillaPiglinBarterLoot implements LootTableSubProvider {
public void generate(BiConsumer<ResourceLocation, LootTable.Builder> p_250176_) {
p_250176_.accept(BuiltInLootTables.PIGLIN_BARTERING, LootTable.lootTable().withPool(LootPool.lootPool().setRolls(ConstantValue.exactly(1.0F)).add(LootItem.lootTableItem(Items.BOOK).setWeight(5).apply((new EnchantRandomlyFunction.Builder()).withEnchantment(Enchantments.SOUL_SPEED))).add(LootItem.lootTableItem(Items.IRON_BOOTS).setWeight(8).apply((new EnchantRandomlyFunction.Builder()).withEnchantment(Enchantments.SOUL_SPEED))).add(LootItem.lootTableItem(Items.POTION).setWeight(8).apply(SetPotionFunction.setPotion(Potions.FIRE_RESISTANCE))).add(LootItem.lootTableItem(Items.SPLASH_POTION).setWeight(8).apply(SetPotionFunction.setPotion(Potions.FIRE_RESISTANCE))).add(LootItem.lootTableItem(Items.POTION).setWeight(10).apply(SetPotionFunction.setPotion(Potions.WATER))).add(LootItem.lootTableItem(Items.IRON_NUGGET).setWeight(10).apply(SetItemCountFunction.setCount(UniformGenerator.between(10.0F, 36.0F)))).add(LootItem.lootTableItem(Items.ENDER_PEARL).setWeight(10).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))).add(LootItem.lootTableItem(Items.STRING).setWeight(20).apply(SetItemCountFunction.setCount(UniformGenerator.between(3.0F, 9.0F)))).add(LootItem.lootTableItem(Items.QUARTZ).setWeight(20).apply(SetItemCountFunction.setCount(UniformGenerator.between(5.0F, 12.0F)))).add(LootItem.lootTableItem(Items.OBSIDIAN).setWeight(40)).add(LootItem.lootTableItem(Items.CRYING_OBSIDIAN).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0F, 3.0F)))).add(LootItem.lootTableItem(Items.FIRE_CHARGE).setWeight(40)).add(LootItem.lootTableItem(Items.LEATHER).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 4.0F)))).add(LootItem.lootTableItem(Items.SOUL_SAND).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 8.0F)))).add(LootItem.lootTableItem(Items.NETHER_BRICK).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(2.0F, 8.0F)))).add(LootItem.lootTableItem(Items.SPECTRAL_ARROW).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(6.0F, 12.0F)))).add(LootItem.lootTableItem(Items.GRAVEL).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(8.0F, 16.0F)))).add(LootItem.lootTableItem(Items.BLACKSTONE).setWeight(40).apply(SetItemCountFunction.setCount(UniformGenerator.between(8.0F, 16.0F))))));
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.loot.packs;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,54 @@
package net.minecraft.data.metadata;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
import net.minecraft.DetectedVersion;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.network.chat.Component;
import net.minecraft.server.packs.FeatureFlagsMetadataSection;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.metadata.MetadataSectionType;
import net.minecraft.server.packs.metadata.pack.PackMetadataSection;
import net.minecraft.world.flag.FeatureFlagSet;
public class PackMetadataGenerator implements DataProvider {
private final PackOutput output;
private final Map<String, Supplier<JsonElement>> elements = new HashMap<>();
public PackMetadataGenerator(PackOutput p_254070_) {
this.output = p_254070_;
}
public <T> PackMetadataGenerator add(MetadataSectionType<T> p_252067_, T p_249511_) {
this.elements.put(p_252067_.getMetadataSectionName(), () -> {
return p_252067_.toJson(p_249511_);
});
return this;
}
public CompletableFuture<?> run(CachedOutput p_254137_) {
JsonObject jsonobject = new JsonObject();
this.elements.forEach((p_249290_, p_251317_) -> {
jsonobject.add(p_249290_, p_251317_.get());
});
return DataProvider.saveStable(p_254137_, jsonobject, this.output.getOutputFolder().resolve("pack.mcmeta"));
}
public final String getName() {
return "Pack Metadata";
}
public static PackMetadataGenerator forFeaturePack(PackOutput p_256281_, Component p_255661_) {
return (new PackMetadataGenerator(p_256281_)).add(PackMetadataSection.TYPE, new PackMetadataSection(p_255661_, DetectedVersion.BUILT_IN.getPackVersion(PackType.SERVER_DATA)));
}
public static PackMetadataGenerator forFeaturePack(PackOutput p_253903_, Component p_254497_, FeatureFlagSet p_253848_) {
return forFeaturePack(p_253903_, p_254497_).add(FeatureFlagsMetadataSection.TYPE, new FeatureFlagsMetadataSection(p_253848_));
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.metadata;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,402 @@
package net.minecraft.data.models;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.models.model.ModelLocationUtils;
import net.minecraft.data.models.model.ModelTemplate;
import net.minecraft.data.models.model.ModelTemplates;
import net.minecraft.data.models.model.TextureMapping;
import net.minecraft.data.models.model.TextureSlot;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.ArmorMaterials;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
public class ItemModelGenerators {
public static final ResourceLocation TRIM_TYPE_PREDICATE_ID = new ResourceLocation("trim_type");
private static final List<ItemModelGenerators.TrimModelData> GENERATED_TRIM_MODELS = List.of(new ItemModelGenerators.TrimModelData("quartz", 0.1F, Map.of()), new ItemModelGenerators.TrimModelData("iron", 0.2F, Map.of(ArmorMaterials.IRON, "iron_darker")), new ItemModelGenerators.TrimModelData("netherite", 0.3F, Map.of(ArmorMaterials.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(ArmorMaterials.GOLD, "gold_darker")), new ItemModelGenerators.TrimModelData("emerald", 0.7F, Map.of()), new ItemModelGenerators.TrimModelData("diamond", 0.8F, Map.of(ArmorMaterials.DIAMOND, "diamond_darker")), new ItemModelGenerators.TrimModelData("lapis", 0.9F, Map.of()), new ItemModelGenerators.TrimModelData("amethyst", 1.0F, Map.of()));
private final BiConsumer<ResourceLocation, Supplier<JsonElement>> output;
public ItemModelGenerators(BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125082_) {
this.output = p_125082_;
}
private void generateFlatItem(Item p_125089_, ModelTemplate p_125090_) {
p_125090_.create(ModelLocationUtils.getModelLocation(p_125089_), TextureMapping.layer0(p_125089_), this.output);
}
private void generateFlatItem(Item p_125092_, String p_125093_, ModelTemplate p_125094_) {
p_125094_.create(ModelLocationUtils.getModelLocation(p_125092_, p_125093_), TextureMapping.layer0(TextureMapping.getItemTexture(p_125092_, p_125093_)), this.output);
}
private void generateFlatItem(Item p_125085_, Item p_125086_, ModelTemplate p_125087_) {
p_125087_.create(ModelLocationUtils.getModelLocation(p_125085_), TextureMapping.layer0(p_125086_), this.output);
}
private void generateCompassItem(Item p_236322_) {
for(int i = 0; i < 32; ++i) {
if (i != 16) {
this.generateFlatItem(p_236322_, String.format(Locale.ROOT, "_%02d", i), ModelTemplates.FLAT_ITEM);
}
}
}
private void generateClockItem(Item p_236324_) {
for(int i = 1; i < 64; ++i) {
this.generateFlatItem(p_236324_, String.format(Locale.ROOT, "_%02d", i), ModelTemplates.FLAT_ITEM);
}
}
private void generateLayeredItem(ResourceLocation p_267272_, ResourceLocation p_266738_, ResourceLocation p_267328_) {
ModelTemplates.TWO_LAYERED_ITEM.create(p_267272_, TextureMapping.layered(p_266738_, p_267328_), this.output);
}
private void generateLayeredItem(ResourceLocation p_268353_, ResourceLocation p_268162_, ResourceLocation p_268173_, ResourceLocation p_268312_) {
ModelTemplates.THREE_LAYERED_ITEM.create(p_268353_, TextureMapping.layered(p_268162_, p_268173_, p_268312_), this.output);
}
private ResourceLocation getItemModelForTrimMaterial(ResourceLocation p_266817_, String p_267030_) {
return p_266817_.withSuffix("_" + p_267030_ + "_trim");
}
private JsonObject generateBaseArmorTrimTemplate(ResourceLocation p_266939_, Map<TextureSlot, ResourceLocation> p_267324_, ArmorMaterial p_267970_) {
JsonObject jsonobject = ModelTemplates.TWO_LAYERED_ITEM.createBaseTemplate(p_266939_, p_267324_);
JsonArray jsonarray = new JsonArray();
for(ItemModelGenerators.TrimModelData itemmodelgenerators$trimmodeldata : GENERATED_TRIM_MODELS) {
JsonObject jsonobject1 = new JsonObject();
JsonObject jsonobject2 = new JsonObject();
jsonobject2.addProperty(TRIM_TYPE_PREDICATE_ID.getPath(), itemmodelgenerators$trimmodeldata.itemModelIndex());
jsonobject1.add("predicate", jsonobject2);
jsonobject1.addProperty("model", this.getItemModelForTrimMaterial(p_266939_, itemmodelgenerators$trimmodeldata.name(p_267970_)).toString());
jsonarray.add(jsonobject1);
}
jsonobject.add("overrides", jsonarray);
return jsonobject;
}
private void generateArmorTrims(ArmorItem p_267151_) {
ResourceLocation resourcelocation = ModelLocationUtils.getModelLocation(p_267151_);
ResourceLocation resourcelocation1 = TextureMapping.getItemTexture(p_267151_);
ResourceLocation resourcelocation2 = TextureMapping.getItemTexture(p_267151_, "_overlay");
if (p_267151_.getMaterial() == ArmorMaterials.LEATHER) {
ModelTemplates.TWO_LAYERED_ITEM.create(resourcelocation, TextureMapping.layered(resourcelocation1, resourcelocation2), this.output, (p_267902_, p_267903_) -> {
return this.generateBaseArmorTrimTemplate(p_267902_, p_267903_, p_267151_.getMaterial());
});
} else {
ModelTemplates.FLAT_ITEM.create(resourcelocation, TextureMapping.layer0(resourcelocation1), this.output, (p_267905_, p_267906_) -> {
return this.generateBaseArmorTrimTemplate(p_267905_, p_267906_, p_267151_.getMaterial());
});
}
for(ItemModelGenerators.TrimModelData itemmodelgenerators$trimmodeldata : GENERATED_TRIM_MODELS) {
String s = itemmodelgenerators$trimmodeldata.name(p_267151_.getMaterial());
ResourceLocation resourcelocation3 = this.getItemModelForTrimMaterial(resourcelocation, s);
String s1 = p_267151_.getType().getName() + "_trim_" + s;
ResourceLocation resourcelocation4 = (new ResourceLocation(s1)).withPrefix("trims/items/");
if (p_267151_.getMaterial() == ArmorMaterials.LEATHER) {
this.generateLayeredItem(resourcelocation3, resourcelocation1, resourcelocation2, resourcelocation4);
} else {
this.generateLayeredItem(resourcelocation3, resourcelocation1, resourcelocation4);
}
}
}
public void run() {
this.generateFlatItem(Items.ACACIA_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CHERRY_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ACACIA_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CHERRY_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.AMETHYST_SHARD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.APPLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ARMOR_STAND, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ARROW, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BAKED_POTATO, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BAMBOO, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.BEEF, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BEETROOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BEETROOT_SOUP, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BIRCH_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BIRCH_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BLACK_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BLAZE_POWDER, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BLAZE_ROD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.BLUE_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BONE_MEAL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BOOK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BOWL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BREAD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BRICK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BROWN_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CARROT_ON_A_STICK, ModelTemplates.FLAT_HANDHELD_ROD_ITEM);
this.generateFlatItem(Items.WARPED_FUNGUS_ON_A_STICK, ModelTemplates.FLAT_HANDHELD_ROD_ITEM);
this.generateFlatItem(Items.CHARCOAL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CHEST_MINECART, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CHICKEN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CHORUS_FRUIT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CLAY_BALL, ModelTemplates.FLAT_ITEM);
this.generateClockItem(Items.CLOCK);
this.generateFlatItem(Items.COAL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COD_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COMMAND_BLOCK_MINECART, ModelTemplates.FLAT_ITEM);
this.generateCompassItem(Items.COMPASS);
this.generateCompassItem(Items.RECOVERY_COMPASS);
this.generateFlatItem(Items.COOKED_BEEF, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_CHICKEN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_COD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_MUTTON, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_PORKCHOP, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_RABBIT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKED_SALMON, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COOKIE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RAW_COPPER, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COPPER_INGOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CREEPER_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.CYAN_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DARK_OAK_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DARK_OAK_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DIAMOND, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DIAMOND_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.DIAMOND_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.DIAMOND_HORSE_ARMOR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DIAMOND_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.DIAMOND_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.DIAMOND_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.DRAGON_BREATH, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DRIED_KELP, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.EGG, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.EMERALD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ENCHANTED_BOOK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ENDER_EYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ENDER_PEARL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.END_CRYSTAL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.EXPERIENCE_BOTTLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FERMENTED_SPIDER_EYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FIREWORK_ROCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FIRE_CHARGE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FLINT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FLINT_AND_STEEL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FLOWER_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FURNACE_MINECART, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GHAST_TEAR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLASS_BOTTLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLISTERING_MELON_SLICE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLOBE_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLOW_BERRIES, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLOWSTONE_DUST, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLOW_INK_SAC, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GLOW_ITEM_FRAME, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RAW_GOLD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GOLDEN_APPLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GOLDEN_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.GOLDEN_CARROT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GOLDEN_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.GOLDEN_HORSE_ARMOR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GOLDEN_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.GOLDEN_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.GOLDEN_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.GOLD_INGOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GOLD_NUGGET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GRAY_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GREEN_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.GUNPOWDER, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HEART_OF_THE_SEA, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HONEYCOMB, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HONEY_BOTTLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HOPPER_MINECART, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.INK_SAC, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RAW_IRON, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.IRON_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.IRON_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.IRON_HORSE_ARMOR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.IRON_INGOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.IRON_NUGGET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.IRON_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.IRON_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.IRON_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.ITEM_FRAME, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.JUNGLE_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.JUNGLE_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.KNOWLEDGE_BOOK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LAPIS_LAZULI, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LAVA_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LEATHER, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LEATHER_HORSE_ARMOR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LIGHT_BLUE_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LIGHT_GRAY_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.LIME_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MAGENTA_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MAGMA_CREAM, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MANGROVE_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MANGROVE_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BAMBOO_RAFT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BAMBOO_CHEST_RAFT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MAP, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MELON_SLICE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MILK_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MINECART, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MOJANG_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MUSHROOM_STEW, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DISC_FRAGMENT_5, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MUSIC_DISC_11, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_13, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_BLOCKS, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_CAT, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_CHIRP, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_FAR, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_MALL, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_MELLOHI, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_PIGSTEP, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_STAL, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_STRAD, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_WAIT, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_WARD, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_OTHERSIDE, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_RELIC, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUSIC_DISC_5, ModelTemplates.MUSIC_DISC);
this.generateFlatItem(Items.MUTTON, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.NAME_TAG, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.NAUTILUS_SHELL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.NETHERITE_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.NETHERITE_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.NETHERITE_INGOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.NETHERITE_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.NETHERITE_SCRAP, ModelTemplates.FLAT_ITEM);
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.NETHER_STAR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.OAK_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.OAK_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ORANGE_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PAINTING, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PAPER, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PHANTOM_MEMBRANE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PIGLIN_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PINK_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.POISONOUS_POTATO, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.POPPED_CHORUS_FRUIT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PORKCHOP, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.POWDER_SNOW_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PRISMARINE_CRYSTALS, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PRISMARINE_SHARD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PUFFERFISH, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PUFFERFISH_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PUMPKIN_PIE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PURPLE_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.QUARTZ, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RABBIT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RABBIT_FOOT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RABBIT_HIDE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RABBIT_STEW, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RED_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ROTTEN_FLESH, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SADDLE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SALMON, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SALMON_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SCUTE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SHEARS, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SHULKER_SHELL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SKULL_BANNER_PATTERN, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SLIME_BALL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SNOWBALL, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ECHO_SHARD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPECTRAL_ARROW, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPIDER_EYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPRUCE_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPRUCE_CHEST_BOAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPYGLASS, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.STICK, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.STONE_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.STONE_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.STONE_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.STONE_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.STONE_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.SUGAR, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SUSPICIOUS_STEW, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TNT_MINECART, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TOTEM_OF_UNDYING, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TRIDENT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TROPICAL_FISH, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TROPICAL_FISH_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.AXOLOTL_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TADPOLE_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WATER_BUCKET, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WHEAT, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WHITE_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WOODEN_AXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.WOODEN_HOE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.WOODEN_PICKAXE, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.WOODEN_SHOVEL, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.WOODEN_SWORD, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.WRITABLE_BOOK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WRITTEN_BOOK, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.YELLOW_DYE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DUNE_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.COAST_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WILD_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.EYE_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.VEX_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RIB_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HOST_ARMOR_TRIM_SMITHING_TEMPLATE, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DEBUG_STICK, Items.STICK, ModelTemplates.FLAT_HANDHELD_ITEM);
this.generateFlatItem(Items.ENCHANTED_GOLDEN_APPLE, Items.GOLDEN_APPLE, ModelTemplates.FLAT_ITEM);
for(Item item : BuiltInRegistries.ITEM) {
if (item instanceof ArmorItem armoritem) {
this.generateArmorTrims(armoritem);
}
}
this.generateFlatItem(Items.ANGLER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ARCHER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.ARMS_UP_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BLADE_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BREWER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.BURN_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.DANGER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.EXPLORER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.FRIEND_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HEART_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HEARTBREAK_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.HOWL_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MINER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.MOURNER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PLENTY_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.PRIZE_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SHEAF_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SHELTER_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SKULL_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
this.generateFlatItem(Items.SNORT_POTTERY_SHERD, ModelTemplates.FLAT_ITEM);
}
static record TrimModelData(String name, float itemModelIndex, Map<ArmorMaterial, String> overrideArmorMaterials) {
public String name(ArmorMaterial p_268105_) {
return this.overrideArmorMaterials.getOrDefault(p_268105_, this.name);
}
}
}

View File

@@ -0,0 +1,94 @@
package net.minecraft.data.models;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.JsonElement;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.data.models.blockstates.BlockStateGenerator;
import net.minecraft.data.models.model.DelegatedModel;
import net.minecraft.data.models.model.ModelLocationUtils;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
public class ModelProvider implements DataProvider {
private final PackOutput.PathProvider blockStatePathProvider;
private final PackOutput.PathProvider modelPathProvider;
public ModelProvider(PackOutput p_252226_) {
this.blockStatePathProvider = p_252226_.createPathProvider(PackOutput.Target.RESOURCE_PACK, "blockstates");
this.modelPathProvider = p_252226_.createPathProvider(PackOutput.Target.RESOURCE_PACK, "models");
}
public CompletableFuture<?> run(CachedOutput p_253790_) {
Map<Block, BlockStateGenerator> map = Maps.newHashMap();
Consumer<BlockStateGenerator> consumer = (p_125120_) -> {
Block block = p_125120_.getBlock();
BlockStateGenerator blockstategenerator = map.put(block, p_125120_);
if (blockstategenerator != null) {
throw new IllegalStateException("Duplicate blockstate definition for " + block);
}
};
Map<ResourceLocation, Supplier<JsonElement>> map1 = Maps.newHashMap();
Set<Item> set = Sets.newHashSet();
BiConsumer<ResourceLocation, Supplier<JsonElement>> biconsumer = (p_125123_, p_125124_) -> {
Supplier<JsonElement> supplier = map1.put(p_125123_, p_125124_);
if (supplier != null) {
throw new IllegalStateException("Duplicate model definition for " + p_125123_);
}
};
Consumer<Item> consumer1 = set::add;
(new BlockModelGenerators(consumer, biconsumer, consumer1)).run();
(new ItemModelGenerators(biconsumer)).run();
List<Block> list = BuiltInRegistries.BLOCK.stream().filter((p_125117_) -> {
return !map.containsKey(p_125117_);
}).toList();
if (!list.isEmpty()) {
throw new IllegalStateException("Missing blockstate definitions for: " + list);
} else {
BuiltInRegistries.BLOCK.forEach((p_125128_) -> {
Item item = Item.BY_BLOCK.get(p_125128_);
if (item != null) {
if (set.contains(item)) {
return;
}
ResourceLocation resourcelocation = ModelLocationUtils.getModelLocation(item);
if (!map1.containsKey(resourcelocation)) {
map1.put(resourcelocation, new DelegatedModel(ModelLocationUtils.getModelLocation(p_125128_)));
}
}
});
return CompletableFuture.allOf(this.saveCollection(p_253790_, map, (p_248016_) -> {
return this.blockStatePathProvider.json(p_248016_.builtInRegistryHolder().key().location());
}), this.saveCollection(p_253790_, map1, this.modelPathProvider::json));
}
}
private <T> CompletableFuture<?> saveCollection(CachedOutput p_254549_, Map<T, ? extends Supplier<JsonElement>> p_253779_, Function<T, Path> p_254013_) {
return CompletableFuture.allOf(p_253779_.entrySet().stream().map((p_253408_) -> {
Path path = p_254013_.apply(p_253408_.getKey());
JsonElement jsonelement = p_253408_.getValue().get();
return DataProvider.saveStable(p_254549_, jsonelement, path);
}).toArray((p_253409_) -> {
return new CompletableFuture[p_253409_];
}));
}
public final String getName() {
return "Model Definitions";
}
}

View File

@@ -0,0 +1,9 @@
package net.minecraft.data.models.blockstates;
import com.google.gson.JsonElement;
import java.util.function.Supplier;
import net.minecraft.world.level.block.Block;
public interface BlockStateGenerator extends Supplier<JsonElement> {
Block getBlock();
}

View File

@@ -0,0 +1,123 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.Maps;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.Property;
public interface Condition extends Supplier<JsonElement> {
void validate(StateDefinition<?, ?> p_125136_);
static Condition.TerminalCondition condition() {
return new Condition.TerminalCondition();
}
static Condition and(Condition... p_176294_) {
return new Condition.CompositeCondition(Condition.Operation.AND, Arrays.asList(p_176294_));
}
static Condition or(Condition... p_125138_) {
return new Condition.CompositeCondition(Condition.Operation.OR, Arrays.asList(p_125138_));
}
public static class CompositeCondition implements Condition {
private final Condition.Operation operation;
private final List<Condition> subconditions;
CompositeCondition(Condition.Operation p_125142_, List<Condition> p_125143_) {
this.operation = p_125142_;
this.subconditions = p_125143_;
}
public void validate(StateDefinition<?, ?> p_125149_) {
this.subconditions.forEach((p_125152_) -> {
p_125152_.validate(p_125149_);
});
}
public JsonElement get() {
JsonArray jsonarray = new JsonArray();
this.subconditions.stream().map(Supplier::get).forEach(jsonarray::add);
JsonObject jsonobject = new JsonObject();
jsonobject.add(this.operation.id, jsonarray);
return jsonobject;
}
}
public static enum Operation {
AND("AND"),
OR("OR");
final String id;
private Operation(String p_125163_) {
this.id = p_125163_;
}
}
public static class TerminalCondition implements Condition {
private final Map<Property<?>, String> terms = Maps.newHashMap();
private static <T extends Comparable<T>> String joinValues(Property<T> p_125187_, Stream<T> p_125188_) {
return p_125188_.map(p_125187_::getName).collect(Collectors.joining("|"));
}
private static <T extends Comparable<T>> String getTerm(Property<T> p_125195_, T p_125196_, T[] p_125197_) {
return joinValues(p_125195_, Stream.concat(Stream.of(p_125196_), Stream.of(p_125197_)));
}
private <T extends Comparable<T>> void putValue(Property<T> p_125184_, String p_125185_) {
String s = this.terms.put(p_125184_, p_125185_);
if (s != null) {
throw new IllegalStateException("Tried to replace " + p_125184_ + " value from " + s + " to " + p_125185_);
}
}
public final <T extends Comparable<T>> Condition.TerminalCondition term(Property<T> p_125177_, T p_125178_) {
this.putValue(p_125177_, p_125177_.getName(p_125178_));
return this;
}
@SafeVarargs
public final <T extends Comparable<T>> Condition.TerminalCondition term(Property<T> p_125180_, T p_125181_, T... p_125182_) {
this.putValue(p_125180_, getTerm(p_125180_, p_125181_, p_125182_));
return this;
}
public final <T extends Comparable<T>> Condition.TerminalCondition negatedTerm(Property<T> p_176297_, T p_176298_) {
this.putValue(p_176297_, "!" + p_176297_.getName(p_176298_));
return this;
}
@SafeVarargs
public final <T extends Comparable<T>> Condition.TerminalCondition negatedTerm(Property<T> p_176300_, T p_176301_, T... p_176302_) {
this.putValue(p_176300_, "!" + getTerm(p_176300_, p_176301_, p_176302_));
return this;
}
public JsonElement get() {
JsonObject jsonobject = new JsonObject();
this.terms.forEach((p_125191_, p_125192_) -> {
jsonobject.addProperty(p_125191_.getName(), p_125192_);
});
return jsonobject;
}
public void validate(StateDefinition<?, ?> p_125172_) {
List<Property<?>> list = this.terms.keySet().stream().filter((p_125175_) -> {
return p_125172_.getProperty(p_125175_.getName()) != p_125175_;
}).collect(Collectors.toList());
if (!list.isEmpty()) {
throw new IllegalStateException("Properties " + list + " are missing from " + p_125172_);
}
}
}
}

View File

@@ -0,0 +1,101 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.function.Supplier;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
public class MultiPartGenerator implements BlockStateGenerator {
private final Block block;
private final List<MultiPartGenerator.Entry> parts = Lists.newArrayList();
private MultiPartGenerator(Block p_125202_) {
this.block = p_125202_;
}
public Block getBlock() {
return this.block;
}
public static MultiPartGenerator multiPart(Block p_125205_) {
return new MultiPartGenerator(p_125205_);
}
public MultiPartGenerator with(List<Variant> p_125221_) {
this.parts.add(new MultiPartGenerator.Entry(p_125221_));
return this;
}
public MultiPartGenerator with(Variant p_125219_) {
return this.with(ImmutableList.of(p_125219_));
}
public MultiPartGenerator with(Condition p_125213_, List<Variant> p_125214_) {
this.parts.add(new MultiPartGenerator.ConditionalEntry(p_125213_, p_125214_));
return this;
}
public MultiPartGenerator with(Condition p_125216_, Variant... p_125217_) {
return this.with(p_125216_, ImmutableList.copyOf(p_125217_));
}
public MultiPartGenerator with(Condition p_125210_, Variant p_125211_) {
return this.with(p_125210_, ImmutableList.of(p_125211_));
}
public JsonElement get() {
StateDefinition<Block, BlockState> statedefinition = this.block.getStateDefinition();
this.parts.forEach((p_125208_) -> {
p_125208_.validate(statedefinition);
});
JsonArray jsonarray = new JsonArray();
this.parts.stream().map(MultiPartGenerator.Entry::get).forEach(jsonarray::add);
JsonObject jsonobject = new JsonObject();
jsonobject.add("multipart", jsonarray);
return jsonobject;
}
static class ConditionalEntry extends MultiPartGenerator.Entry {
private final Condition condition;
ConditionalEntry(Condition p_125226_, List<Variant> p_125227_) {
super(p_125227_);
this.condition = p_125226_;
}
public void validate(StateDefinition<?, ?> p_125233_) {
this.condition.validate(p_125233_);
}
public void decorate(JsonObject p_125235_) {
p_125235_.add("when", this.condition.get());
}
}
static class Entry implements Supplier<JsonElement> {
private final List<Variant> variants;
Entry(List<Variant> p_125238_) {
this.variants = p_125238_;
}
public void validate(StateDefinition<?, ?> p_125243_) {
}
public void decorate(JsonObject p_125244_) {
}
public JsonElement get() {
JsonObject jsonobject = new JsonObject();
this.decorate(jsonobject);
jsonobject.add("apply", Variant.convertList(this.variants));
return jsonobject;
}
}
}

View File

@@ -0,0 +1,91 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.mojang.datafixers.util.Pair;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Stream;
import net.minecraft.Util;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.Property;
public class MultiVariantGenerator implements BlockStateGenerator {
private final Block block;
private final List<Variant> baseVariants;
private final Set<Property<?>> seenProperties = Sets.newHashSet();
private final List<PropertyDispatch> declaredPropertySets = Lists.newArrayList();
private MultiVariantGenerator(Block p_125251_, List<Variant> p_125252_) {
this.block = p_125251_;
this.baseVariants = p_125252_;
}
public MultiVariantGenerator with(PropertyDispatch p_125272_) {
p_125272_.getDefinedProperties().forEach((p_125263_) -> {
if (this.block.getStateDefinition().getProperty(p_125263_.getName()) != p_125263_) {
throw new IllegalStateException("Property " + p_125263_ + " is not defined for block " + this.block);
} else if (!this.seenProperties.add(p_125263_)) {
throw new IllegalStateException("Values of property " + p_125263_ + " already defined for block " + this.block);
}
});
this.declaredPropertySets.add(p_125272_);
return this;
}
public JsonElement get() {
Stream<Pair<Selector, List<Variant>>> stream = Stream.of(Pair.of(Selector.empty(), this.baseVariants));
for(PropertyDispatch propertydispatch : this.declaredPropertySets) {
Map<Selector, List<Variant>> map = propertydispatch.getEntries();
stream = stream.flatMap((p_125289_) -> {
return map.entrySet().stream().map((p_176309_) -> {
Selector selector = ((Selector)p_125289_.getFirst()).extend(p_176309_.getKey());
List<Variant> list = mergeVariants((List)p_125289_.getSecond(), p_176309_.getValue());
return Pair.of(selector, list);
});
});
}
Map<String, JsonElement> map1 = new TreeMap<>();
stream.forEach((p_125285_) -> {
map1.put(p_125285_.getFirst().getKey(), Variant.convertList(p_125285_.getSecond()));
});
JsonObject jsonobject = new JsonObject();
jsonobject.add("variants", Util.make(new JsonObject(), (p_125282_) -> {
map1.forEach(p_125282_::add);
}));
return jsonobject;
}
private static List<Variant> mergeVariants(List<Variant> p_125278_, List<Variant> p_125279_) {
ImmutableList.Builder<Variant> builder = ImmutableList.builder();
p_125278_.forEach((p_125276_) -> {
p_125279_.forEach((p_176306_) -> {
builder.add(Variant.merge(p_125276_, p_176306_));
});
});
return builder.build();
}
public Block getBlock() {
return this.block;
}
public static MultiVariantGenerator multiVariant(Block p_125255_) {
return new MultiVariantGenerator(p_125255_, ImmutableList.of(Variant.variant()));
}
public static MultiVariantGenerator multiVariant(Block p_125257_, Variant p_125258_) {
return new MultiVariantGenerator(p_125257_, ImmutableList.of(p_125258_));
}
public static MultiVariantGenerator multiVariant(Block p_125260_, Variant... p_125261_) {
return new MultiVariantGenerator(p_125260_, ImmutableList.copyOf(p_125261_));
}
}

View File

@@ -0,0 +1,324 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.world.level.block.state.properties.Property;
public abstract class PropertyDispatch {
private final Map<Selector, List<Variant>> values = Maps.newHashMap();
protected void putValue(Selector p_125320_, List<Variant> p_125321_) {
List<Variant> list = this.values.put(p_125320_, p_125321_);
if (list != null) {
throw new IllegalStateException("Value " + p_125320_ + " is already defined");
}
}
Map<Selector, List<Variant>> getEntries() {
this.verifyComplete();
return ImmutableMap.copyOf(this.values);
}
private void verifyComplete() {
List<Property<?>> list = this.getDefinedProperties();
Stream<Selector> stream = Stream.of(Selector.empty());
for(Property<?> property : list) {
stream = stream.flatMap((p_125316_) -> {
return property.getAllValues().map(p_125316_::extend);
});
}
List<Selector> list1 = stream.filter((p_125318_) -> {
return !this.values.containsKey(p_125318_);
}).collect(Collectors.toList());
if (!list1.isEmpty()) {
throw new IllegalStateException("Missing definition for properties: " + list1);
}
}
abstract List<Property<?>> getDefinedProperties();
public static <T1 extends Comparable<T1>> PropertyDispatch.C1<T1> property(Property<T1> p_125295_) {
return new PropertyDispatch.C1<>(p_125295_);
}
public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>> PropertyDispatch.C2<T1, T2> properties(Property<T1> p_125297_, Property<T2> p_125298_) {
return new PropertyDispatch.C2<>(p_125297_, p_125298_);
}
public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> PropertyDispatch.C3<T1, T2, T3> properties(Property<T1> p_125300_, Property<T2> p_125301_, Property<T3> p_125302_) {
return new PropertyDispatch.C3<>(p_125300_, p_125301_, p_125302_);
}
public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>> PropertyDispatch.C4<T1, T2, T3, T4> properties(Property<T1> p_125304_, Property<T2> p_125305_, Property<T3> p_125306_, Property<T4> p_125307_) {
return new PropertyDispatch.C4<>(p_125304_, p_125305_, p_125306_, p_125307_);
}
public static <T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>> PropertyDispatch.C5<T1, T2, T3, T4, T5> properties(Property<T1> p_125309_, Property<T2> p_125310_, Property<T3> p_125311_, Property<T4> p_125312_, Property<T5> p_125313_) {
return new PropertyDispatch.C5<>(p_125309_, p_125310_, p_125311_, p_125312_, p_125313_);
}
public static class C1<T1 extends Comparable<T1>> extends PropertyDispatch {
private final Property<T1> property1;
C1(Property<T1> p_125325_) {
this.property1 = p_125325_;
}
public List<Property<?>> getDefinedProperties() {
return ImmutableList.of(this.property1);
}
public PropertyDispatch.C1<T1> select(T1 p_125333_, List<Variant> p_125334_) {
Selector selector = Selector.of(this.property1.value(p_125333_));
this.putValue(selector, p_125334_);
return this;
}
public PropertyDispatch.C1<T1> select(T1 p_125330_, Variant p_125331_) {
return this.select(p_125330_, Collections.singletonList(p_125331_));
}
public PropertyDispatch generate(Function<T1, Variant> p_125336_) {
this.property1.getPossibleValues().forEach((p_125340_) -> {
this.select(p_125340_, p_125336_.apply(p_125340_));
});
return this;
}
public PropertyDispatch generateList(Function<T1, List<Variant>> p_176314_) {
this.property1.getPossibleValues().forEach((p_176312_) -> {
this.select(p_176312_, p_176314_.apply(p_176312_));
});
return this;
}
}
public static class C2<T1 extends Comparable<T1>, T2 extends Comparable<T2>> extends PropertyDispatch {
private final Property<T1> property1;
private final Property<T2> property2;
C2(Property<T1> p_125344_, Property<T2> p_125345_) {
this.property1 = p_125344_;
this.property2 = p_125345_;
}
public List<Property<?>> getDefinedProperties() {
return ImmutableList.of(this.property1, this.property2);
}
public PropertyDispatch.C2<T1, T2> select(T1 p_125355_, T2 p_125356_, List<Variant> p_125357_) {
Selector selector = Selector.of(this.property1.value(p_125355_), this.property2.value(p_125356_));
this.putValue(selector, p_125357_);
return this;
}
public PropertyDispatch.C2<T1, T2> select(T1 p_125351_, T2 p_125352_, Variant p_125353_) {
return this.select(p_125351_, p_125352_, Collections.singletonList(p_125353_));
}
public PropertyDispatch generate(BiFunction<T1, T2, Variant> p_125363_) {
this.property1.getPossibleValues().forEach((p_125376_) -> {
this.property2.getPossibleValues().forEach((p_176322_) -> {
this.select((T1)p_125376_, p_176322_, p_125363_.apply((T1)p_125376_, p_176322_));
});
});
return this;
}
public PropertyDispatch generateList(BiFunction<T1, T2, List<Variant>> p_125373_) {
this.property1.getPossibleValues().forEach((p_125366_) -> {
this.property2.getPossibleValues().forEach((p_176318_) -> {
this.select((T1)p_125366_, p_176318_, p_125373_.apply((T1)p_125366_, p_176318_));
});
});
return this;
}
}
public static class C3<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>> extends PropertyDispatch {
private final Property<T1> property1;
private final Property<T2> property2;
private final Property<T3> property3;
C3(Property<T1> p_125381_, Property<T2> p_125382_, Property<T3> p_125383_) {
this.property1 = p_125381_;
this.property2 = p_125382_;
this.property3 = p_125383_;
}
public List<Property<?>> getDefinedProperties() {
return ImmutableList.of(this.property1, this.property2, this.property3);
}
public PropertyDispatch.C3<T1, T2, T3> select(T1 p_125397_, T2 p_125398_, T3 p_125399_, List<Variant> p_125400_) {
Selector selector = Selector.of(this.property1.value(p_125397_), this.property2.value(p_125398_), this.property3.value(p_125399_));
this.putValue(selector, p_125400_);
return this;
}
public PropertyDispatch.C3<T1, T2, T3> select(T1 p_125392_, T2 p_125393_, T3 p_125394_, Variant p_125395_) {
return this.select(p_125392_, p_125393_, p_125394_, Collections.singletonList(p_125395_));
}
public PropertyDispatch generate(PropertyDispatch.TriFunction<T1, T2, T3, Variant> p_125390_) {
this.property1.getPossibleValues().forEach((p_125404_) -> {
this.property2.getPossibleValues().forEach((p_176343_) -> {
this.property3.getPossibleValues().forEach((p_176339_) -> {
this.select((T1)p_125404_, (T2)p_176343_, p_176339_, p_125390_.apply((T1)p_125404_, (T2)p_176343_, p_176339_));
});
});
});
return this;
}
public PropertyDispatch generateList(PropertyDispatch.TriFunction<T1, T2, T3, List<Variant>> p_176345_) {
this.property1.getPossibleValues().forEach((p_176334_) -> {
this.property2.getPossibleValues().forEach((p_176331_) -> {
this.property3.getPossibleValues().forEach((p_176327_) -> {
this.select((T1)p_176334_, (T2)p_176331_, p_176327_, p_176345_.apply((T1)p_176334_, (T2)p_176331_, p_176327_));
});
});
});
return this;
}
}
public static class C4<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>> extends PropertyDispatch {
private final Property<T1> property1;
private final Property<T2> property2;
private final Property<T3> property3;
private final Property<T4> property4;
C4(Property<T1> p_125419_, Property<T2> p_125420_, Property<T3> p_125421_, Property<T4> p_125422_) {
this.property1 = p_125419_;
this.property2 = p_125420_;
this.property3 = p_125421_;
this.property4 = p_125422_;
}
public List<Property<?>> getDefinedProperties() {
return ImmutableList.of(this.property1, this.property2, this.property3, this.property4);
}
public PropertyDispatch.C4<T1, T2, T3, T4> select(T1 p_125436_, T2 p_125437_, T3 p_125438_, T4 p_125439_, List<Variant> p_125440_) {
Selector selector = Selector.of(this.property1.value(p_125436_), this.property2.value(p_125437_), this.property3.value(p_125438_), this.property4.value(p_125439_));
this.putValue(selector, p_125440_);
return this;
}
public PropertyDispatch.C4<T1, T2, T3, T4> select(T1 p_125430_, T2 p_125431_, T3 p_125432_, T4 p_125433_, Variant p_125434_) {
return this.select(p_125430_, p_125431_, p_125432_, p_125433_, Collections.singletonList(p_125434_));
}
public PropertyDispatch generate(PropertyDispatch.QuadFunction<T1, T2, T3, T4, Variant> p_176362_) {
this.property1.getPossibleValues().forEach((p_176385_) -> {
this.property2.getPossibleValues().forEach((p_176380_) -> {
this.property3.getPossibleValues().forEach((p_176376_) -> {
this.property4.getPossibleValues().forEach((p_176371_) -> {
this.select((T1)p_176385_, (T2)p_176380_, (T3)p_176376_, p_176371_, p_176362_.apply((T1)p_176385_, (T2)p_176380_, (T3)p_176376_, p_176371_));
});
});
});
});
return this;
}
public PropertyDispatch generateList(PropertyDispatch.QuadFunction<T1, T2, T3, T4, List<Variant>> p_176382_) {
this.property1.getPossibleValues().forEach((p_176365_) -> {
this.property2.getPossibleValues().forEach((p_176360_) -> {
this.property3.getPossibleValues().forEach((p_176356_) -> {
this.property4.getPossibleValues().forEach((p_176351_) -> {
this.select((T1)p_176365_, (T2)p_176360_, (T3)p_176356_, p_176351_, p_176382_.apply((T1)p_176365_, (T2)p_176360_, (T3)p_176356_, p_176351_));
});
});
});
});
return this;
}
}
public static class C5<T1 extends Comparable<T1>, T2 extends Comparable<T2>, T3 extends Comparable<T3>, T4 extends Comparable<T4>, T5 extends Comparable<T5>> extends PropertyDispatch {
private final Property<T1> property1;
private final Property<T2> property2;
private final Property<T3> property3;
private final Property<T4> property4;
private final Property<T5> property5;
C5(Property<T1> p_125448_, Property<T2> p_125449_, Property<T3> p_125450_, Property<T4> p_125451_, Property<T5> p_125452_) {
this.property1 = p_125448_;
this.property2 = p_125449_;
this.property3 = p_125450_;
this.property4 = p_125451_;
this.property5 = p_125452_;
}
public List<Property<?>> getDefinedProperties() {
return ImmutableList.of(this.property1, this.property2, this.property3, this.property4, this.property5);
}
public PropertyDispatch.C5<T1, T2, T3, T4, T5> select(T1 p_125468_, T2 p_125469_, T3 p_125470_, T4 p_125471_, T5 p_125472_, List<Variant> p_125473_) {
Selector selector = Selector.of(this.property1.value(p_125468_), this.property2.value(p_125469_), this.property3.value(p_125470_), this.property4.value(p_125471_), this.property5.value(p_125472_));
this.putValue(selector, p_125473_);
return this;
}
public PropertyDispatch.C5<T1, T2, T3, T4, T5> select(T1 p_125461_, T2 p_125462_, T3 p_125463_, T4 p_125464_, T5 p_125465_, Variant p_125466_) {
return this.select(p_125461_, p_125462_, p_125463_, p_125464_, p_125465_, Collections.singletonList(p_125466_));
}
public PropertyDispatch generate(PropertyDispatch.PentaFunction<T1, T2, T3, T4, T5, Variant> p_176409_) {
this.property1.getPossibleValues().forEach((p_176439_) -> {
this.property2.getPossibleValues().forEach((p_176434_) -> {
this.property3.getPossibleValues().forEach((p_176430_) -> {
this.property4.getPossibleValues().forEach((p_176425_) -> {
this.property5.getPossibleValues().forEach((p_176419_) -> {
this.select((T1)p_176439_, (T2)p_176434_, (T3)p_176430_, (T4)p_176425_, p_176419_, p_176409_.apply((T1)p_176439_, (T2)p_176434_, (T3)p_176430_, (T4)p_176425_, p_176419_));
});
});
});
});
});
return this;
}
public PropertyDispatch generateList(PropertyDispatch.PentaFunction<T1, T2, T3, T4, T5, List<Variant>> p_176436_) {
this.property1.getPossibleValues().forEach((p_176412_) -> {
this.property2.getPossibleValues().forEach((p_176407_) -> {
this.property3.getPossibleValues().forEach((p_176403_) -> {
this.property4.getPossibleValues().forEach((p_176398_) -> {
this.property5.getPossibleValues().forEach((p_176392_) -> {
this.select((T1)p_176412_, (T2)p_176407_, (T3)p_176403_, (T4)p_176398_, p_176392_, p_176436_.apply((T1)p_176412_, (T2)p_176407_, (T3)p_176403_, (T4)p_176398_, p_176392_));
});
});
});
});
});
return this;
}
}
@FunctionalInterface
public interface PentaFunction<P1, P2, P3, P4, P5, R> {
R apply(P1 p_176441_, P2 p_176442_, P3 p_176443_, P4 p_176444_, P5 p_176445_);
}
@FunctionalInterface
public interface QuadFunction<P1, P2, P3, P4, R> {
R apply(P1 p_176447_, P2 p_176448_, P3 p_176449_, P4 p_176450_);
}
@FunctionalInterface
public interface TriFunction<P1, P2, P3, R> {
R apply(P1 p_125476_, P2 p_125477_, P3 p_125478_);
}
}

View File

@@ -0,0 +1,51 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.ImmutableList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import net.minecraft.world.level.block.state.properties.Property;
public final class Selector {
private static final Selector EMPTY = new Selector(ImmutableList.of());
private static final Comparator<Property.Value<?>> COMPARE_BY_NAME = Comparator.comparing((p_125494_) -> {
return p_125494_.property().getName();
});
private final List<Property.Value<?>> values;
public Selector extend(Property.Value<?> p_125487_) {
return new Selector(ImmutableList.<Property.Value<?>>builder().addAll(this.values).add(p_125487_).build());
}
public Selector extend(Selector p_125489_) {
return new Selector(ImmutableList.<Property.Value<?>>builder().addAll(this.values).addAll(p_125489_.values).build());
}
private Selector(List<Property.Value<?>> p_125484_) {
this.values = p_125484_;
}
public static Selector empty() {
return EMPTY;
}
public static Selector of(Property.Value<?>... p_125491_) {
return new Selector(ImmutableList.copyOf(p_125491_));
}
public boolean equals(Object p_125496_) {
return this == p_125496_ || p_125496_ instanceof Selector && this.values.equals(((Selector)p_125496_).values);
}
public int hashCode() {
return this.values.hashCode();
}
public String getKey() {
return this.values.stream().sorted(COMPARE_BY_NAME).map(Property.Value::toString).collect(Collectors.joining(","));
}
public String toString() {
return this.getKey();
}
}

View File

@@ -0,0 +1,53 @@
package net.minecraft.data.models.blockstates;
import com.google.common.collect.Maps;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
public class Variant implements Supplier<JsonElement> {
private final Map<VariantProperty<?>, VariantProperty<?>.Value> values = Maps.newLinkedHashMap();
public <T> Variant with(VariantProperty<T> p_125512_, T p_125513_) {
VariantProperty<?>.Value variantproperty = this.values.put(p_125512_, p_125512_.withValue(p_125513_));
if (variantproperty != null) {
throw new IllegalStateException("Replacing value of " + variantproperty + " with " + p_125513_);
} else {
return this;
}
}
public static Variant variant() {
return new Variant();
}
public static Variant merge(Variant p_125509_, Variant p_125510_) {
Variant variant = new Variant();
variant.values.putAll(p_125509_.values);
variant.values.putAll(p_125510_.values);
return variant;
}
public JsonElement get() {
JsonObject jsonobject = new JsonObject();
this.values.values().forEach((p_125507_) -> {
p_125507_.addToVariant(jsonobject);
});
return jsonobject;
}
public static JsonElement convertList(List<Variant> p_125515_) {
if (p_125515_.size() == 1) {
return p_125515_.get(0).get();
} else {
JsonArray jsonarray = new JsonArray();
p_125515_.forEach((p_125504_) -> {
jsonarray.add(p_125504_.get());
});
return jsonarray;
}
}
}

View File

@@ -0,0 +1,31 @@
package net.minecraft.data.models.blockstates;
import com.google.gson.JsonPrimitive;
import net.minecraft.resources.ResourceLocation;
public class VariantProperties {
public static final VariantProperty<VariantProperties.Rotation> X_ROT = new VariantProperty<>("x", (p_125529_) -> {
return new JsonPrimitive(p_125529_.value);
});
public static final VariantProperty<VariantProperties.Rotation> Y_ROT = new VariantProperty<>("y", (p_125525_) -> {
return new JsonPrimitive(p_125525_.value);
});
public static final VariantProperty<ResourceLocation> MODEL = new VariantProperty<>("model", (p_125527_) -> {
return new JsonPrimitive(p_125527_.toString());
});
public static final VariantProperty<Boolean> UV_LOCK = new VariantProperty<>("uvlock", JsonPrimitive::new);
public static final VariantProperty<Integer> WEIGHT = new VariantProperty<>("weight", JsonPrimitive::new);
public static enum Rotation {
R0(0),
R90(90),
R180(180),
R270(270);
final int value;
private Rotation(int p_125540_) {
this.value = p_125540_;
}
}
}

View File

@@ -0,0 +1,43 @@
package net.minecraft.data.models.blockstates;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.function.Function;
public class VariantProperty<T> {
final String key;
final Function<T, JsonElement> serializer;
public VariantProperty(String p_125549_, Function<T, JsonElement> p_125550_) {
this.key = p_125549_;
this.serializer = p_125550_;
}
public VariantProperty<T>.Value withValue(T p_125554_) {
return new VariantProperty.Value(p_125554_);
}
public String toString() {
return this.key;
}
public class Value {
private final T value;
public Value(T p_125562_) {
this.value = p_125562_;
}
public VariantProperty<T> getKey() {
return VariantProperty.this;
}
public void addToVariant(JsonObject p_125564_) {
p_125564_.add(VariantProperty.this.key, VariantProperty.this.serializer.apply(this.value));
}
public String toString() {
return VariantProperty.this.key + "=" + this.value;
}
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.models.blockstates;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,20 @@
package net.minecraft.data.models.model;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.function.Supplier;
import net.minecraft.resources.ResourceLocation;
public class DelegatedModel implements Supplier<JsonElement> {
private final ResourceLocation parent;
public DelegatedModel(ResourceLocation p_125568_) {
this.parent = p_125568_;
}
public JsonElement get() {
JsonObject jsonobject = new JsonObject();
jsonobject.addProperty("parent", this.parent.toString());
return jsonobject;
}
}

View File

@@ -0,0 +1,42 @@
package net.minecraft.data.models.model;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
public class ModelLocationUtils {
/** @deprecated */
@Deprecated
public static ResourceLocation decorateBlockModelLocation(String p_125582_) {
return new ResourceLocation("minecraft", "block/" + p_125582_);
}
public static ResourceLocation decorateItemModelLocation(String p_125584_) {
return new ResourceLocation("minecraft", "item/" + p_125584_);
}
public static ResourceLocation getModelLocation(Block p_125579_, String p_125580_) {
ResourceLocation resourcelocation = BuiltInRegistries.BLOCK.getKey(p_125579_);
return resourcelocation.withPath((p_251253_) -> {
return "block/" + p_251253_ + p_125580_;
});
}
public static ResourceLocation getModelLocation(Block p_125577_) {
ResourceLocation resourcelocation = BuiltInRegistries.BLOCK.getKey(p_125577_);
return resourcelocation.withPrefix("block/");
}
public static ResourceLocation getModelLocation(Item p_125572_) {
ResourceLocation resourcelocation = BuiltInRegistries.ITEM.getKey(p_125572_);
return resourcelocation.withPrefix("item/");
}
public static ResourceLocation getModelLocation(Item p_125574_, String p_125575_) {
ResourceLocation resourcelocation = BuiltInRegistries.ITEM.getKey(p_125574_);
return resourcelocation.withPath((p_251542_) -> {
return "item/" + p_251542_ + p_125575_;
});
}
}

View File

@@ -0,0 +1,75 @@
package net.minecraft.data.models.model;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Supplier;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
public class ModelTemplate {
private final Optional<ResourceLocation> model;
private final Set<TextureSlot> requiredSlots;
private final Optional<String> suffix;
public ModelTemplate(Optional<ResourceLocation> p_125589_, Optional<String> p_125590_, TextureSlot... p_125591_) {
this.model = p_125589_;
this.suffix = p_125590_;
this.requiredSlots = ImmutableSet.copyOf(p_125591_);
}
public ResourceLocation create(Block p_125593_, TextureMapping p_125594_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125595_) {
return this.create(ModelLocationUtils.getModelLocation(p_125593_, this.suffix.orElse("")), p_125594_, p_125595_);
}
public ResourceLocation createWithSuffix(Block p_125597_, String p_125598_, TextureMapping p_125599_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125600_) {
return this.create(ModelLocationUtils.getModelLocation(p_125597_, p_125598_ + (String)this.suffix.orElse("")), p_125599_, p_125600_);
}
public ResourceLocation createWithOverride(Block p_125617_, String p_125618_, TextureMapping p_125619_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125620_) {
return this.create(ModelLocationUtils.getModelLocation(p_125617_, p_125618_), p_125619_, p_125620_);
}
public ResourceLocation create(ResourceLocation p_125613_, TextureMapping p_125614_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125615_) {
return this.create(p_125613_, p_125614_, p_125615_, this::createBaseTemplate);
}
public ResourceLocation create(ResourceLocation p_266990_, TextureMapping p_267329_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_266768_, ModelTemplate.JsonFactory p_266906_) {
Map<TextureSlot, ResourceLocation> map = this.createMap(p_267329_);
p_266768_.accept(p_266990_, () -> {
return p_266906_.create(p_266990_, map);
});
return p_266990_;
}
public JsonObject createBaseTemplate(ResourceLocation p_266830_, Map<TextureSlot, ResourceLocation> p_266912_) {
JsonObject jsonobject = new JsonObject();
this.model.ifPresent((p_176461_) -> {
jsonobject.addProperty("parent", p_176461_.toString());
});
if (!p_266912_.isEmpty()) {
JsonObject jsonobject1 = new JsonObject();
p_266912_.forEach((p_176457_, p_176458_) -> {
jsonobject1.addProperty(p_176457_.getId(), p_176458_.toString());
});
jsonobject.add("textures", jsonobject1);
}
return jsonobject;
}
private Map<TextureSlot, ResourceLocation> createMap(TextureMapping p_125609_) {
return Streams.concat(this.requiredSlots.stream(), p_125609_.getForced()).collect(ImmutableMap.toImmutableMap(Function.identity(), p_125609_::get));
}
public interface JsonFactory {
JsonObject create(ResourceLocation p_266987_, Map<TextureSlot, ResourceLocation> p_266933_);
}
}

View File

@@ -0,0 +1,169 @@
package net.minecraft.data.models.model;
import java.util.Optional;
import java.util.stream.IntStream;
import net.minecraft.resources.ResourceLocation;
public class ModelTemplates {
public static final ModelTemplate CUBE = create("cube", TextureSlot.PARTICLE, TextureSlot.NORTH, TextureSlot.SOUTH, TextureSlot.EAST, TextureSlot.WEST, TextureSlot.UP, TextureSlot.DOWN);
public static final ModelTemplate CUBE_DIRECTIONAL = create("cube_directional", TextureSlot.PARTICLE, TextureSlot.NORTH, TextureSlot.SOUTH, TextureSlot.EAST, TextureSlot.WEST, TextureSlot.UP, TextureSlot.DOWN);
public static final ModelTemplate CUBE_ALL = create("cube_all", TextureSlot.ALL);
public static final ModelTemplate CUBE_MIRRORED_ALL = create("cube_mirrored_all", "_mirrored", TextureSlot.ALL);
public static final ModelTemplate CUBE_NORTH_WEST_MIRRORED_ALL = create("cube_north_west_mirrored_all", "_north_west_mirrored", TextureSlot.ALL);
public static final ModelTemplate CUBE_COLUMN_UV_LOCKED_X = create("cube_column_uv_locked_x", "_x", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_COLUMN_UV_LOCKED_Y = create("cube_column_uv_locked_y", "_y", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_COLUMN_UV_LOCKED_Z = create("cube_column_uv_locked_z", "_z", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_COLUMN = create("cube_column", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_COLUMN_HORIZONTAL = create("cube_column_horizontal", "_horizontal", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_COLUMN_MIRRORED = create("cube_column_mirrored", "_mirrored", TextureSlot.END, TextureSlot.SIDE);
public static final ModelTemplate CUBE_TOP = create("cube_top", TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate CUBE_BOTTOM_TOP = create("cube_bottom_top", TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE);
public static final ModelTemplate CUBE_ORIENTABLE = create("orientable", TextureSlot.TOP, TextureSlot.FRONT, TextureSlot.SIDE);
public static final ModelTemplate CUBE_ORIENTABLE_TOP_BOTTOM = create("orientable_with_bottom", TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE, TextureSlot.FRONT);
public static final ModelTemplate CUBE_ORIENTABLE_VERTICAL = create("orientable_vertical", "_vertical", TextureSlot.FRONT, TextureSlot.SIDE);
public static final ModelTemplate BUTTON = create("button", TextureSlot.TEXTURE);
public static final ModelTemplate BUTTON_PRESSED = create("button_pressed", "_pressed", TextureSlot.TEXTURE);
public static final ModelTemplate BUTTON_INVENTORY = create("button_inventory", "_inventory", TextureSlot.TEXTURE);
public static final ModelTemplate DOOR_BOTTOM_LEFT = create("door_bottom_left", "_bottom_left", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_BOTTOM_LEFT_OPEN = create("door_bottom_left_open", "_bottom_left_open", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_BOTTOM_RIGHT = create("door_bottom_right", "_bottom_right", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_BOTTOM_RIGHT_OPEN = create("door_bottom_right_open", "_bottom_right_open", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_TOP_LEFT = create("door_top_left", "_top_left", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_TOP_LEFT_OPEN = create("door_top_left_open", "_top_left_open", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_TOP_RIGHT = create("door_top_right", "_top_right", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate DOOR_TOP_RIGHT_OPEN = create("door_top_right_open", "_top_right_open", TextureSlot.TOP, TextureSlot.BOTTOM);
public static final ModelTemplate CUSTOM_FENCE_POST = create("custom_fence_post", "_post", TextureSlot.TEXTURE, TextureSlot.PARTICLE);
public static final ModelTemplate CUSTOM_FENCE_SIDE_NORTH = create("custom_fence_side_north", "_side_north", TextureSlot.TEXTURE);
public static final ModelTemplate CUSTOM_FENCE_SIDE_EAST = create("custom_fence_side_east", "_side_east", TextureSlot.TEXTURE);
public static final ModelTemplate CUSTOM_FENCE_SIDE_SOUTH = create("custom_fence_side_south", "_side_south", TextureSlot.TEXTURE);
public static final ModelTemplate CUSTOM_FENCE_SIDE_WEST = create("custom_fence_side_west", "_side_west", TextureSlot.TEXTURE);
public static final ModelTemplate CUSTOM_FENCE_INVENTORY = create("custom_fence_inventory", "_inventory", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_POST = create("fence_post", "_post", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_SIDE = create("fence_side", "_side", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_INVENTORY = create("fence_inventory", "_inventory", TextureSlot.TEXTURE);
public static final ModelTemplate WALL_POST = create("template_wall_post", "_post", TextureSlot.WALL);
public static final ModelTemplate WALL_LOW_SIDE = create("template_wall_side", "_side", TextureSlot.WALL);
public static final ModelTemplate WALL_TALL_SIDE = create("template_wall_side_tall", "_side_tall", TextureSlot.WALL);
public static final ModelTemplate WALL_INVENTORY = create("wall_inventory", "_inventory", TextureSlot.WALL);
public static final ModelTemplate CUSTOM_FENCE_GATE_CLOSED = create("template_custom_fence_gate", TextureSlot.TEXTURE, TextureSlot.PARTICLE);
public static final ModelTemplate CUSTOM_FENCE_GATE_OPEN = create("template_custom_fence_gate_open", "_open", TextureSlot.TEXTURE, TextureSlot.PARTICLE);
public static final ModelTemplate CUSTOM_FENCE_GATE_WALL_CLOSED = create("template_custom_fence_gate_wall", "_wall", TextureSlot.TEXTURE, TextureSlot.PARTICLE);
public static final ModelTemplate CUSTOM_FENCE_GATE_WALL_OPEN = create("template_custom_fence_gate_wall_open", "_wall_open", TextureSlot.TEXTURE, TextureSlot.PARTICLE);
public static final ModelTemplate FENCE_GATE_CLOSED = create("template_fence_gate", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_GATE_OPEN = create("template_fence_gate_open", "_open", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_GATE_WALL_CLOSED = create("template_fence_gate_wall", "_wall", TextureSlot.TEXTURE);
public static final ModelTemplate FENCE_GATE_WALL_OPEN = create("template_fence_gate_wall_open", "_wall_open", TextureSlot.TEXTURE);
public static final ModelTemplate PRESSURE_PLATE_UP = create("pressure_plate_up", TextureSlot.TEXTURE);
public static final ModelTemplate PRESSURE_PLATE_DOWN = create("pressure_plate_down", "_down", TextureSlot.TEXTURE);
public static final ModelTemplate PARTICLE_ONLY = create(TextureSlot.PARTICLE);
public static final ModelTemplate SLAB_BOTTOM = create("slab", TextureSlot.BOTTOM, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate SLAB_TOP = create("slab_top", "_top", TextureSlot.BOTTOM, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate LEAVES = create("leaves", TextureSlot.ALL);
public static final ModelTemplate STAIRS_STRAIGHT = create("stairs", TextureSlot.BOTTOM, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate STAIRS_INNER = create("inner_stairs", "_inner", TextureSlot.BOTTOM, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate STAIRS_OUTER = create("outer_stairs", "_outer", TextureSlot.BOTTOM, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate TRAPDOOR_TOP = create("template_trapdoor_top", "_top", TextureSlot.TEXTURE);
public static final ModelTemplate TRAPDOOR_BOTTOM = create("template_trapdoor_bottom", "_bottom", TextureSlot.TEXTURE);
public static final ModelTemplate TRAPDOOR_OPEN = create("template_trapdoor_open", "_open", TextureSlot.TEXTURE);
public static final ModelTemplate ORIENTABLE_TRAPDOOR_TOP = create("template_orientable_trapdoor_top", "_top", TextureSlot.TEXTURE);
public static final ModelTemplate ORIENTABLE_TRAPDOOR_BOTTOM = create("template_orientable_trapdoor_bottom", "_bottom", TextureSlot.TEXTURE);
public static final ModelTemplate ORIENTABLE_TRAPDOOR_OPEN = create("template_orientable_trapdoor_open", "_open", TextureSlot.TEXTURE);
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 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 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);
public static final ModelTemplate RAIL_RAISED_SW = create("template_rail_raised_sw", "_raised_sw", TextureSlot.RAIL);
public static final ModelTemplate CARPET = create("carpet", TextureSlot.WOOL);
public static final ModelTemplate FLOWERBED_1 = create("flowerbed_1", "_1", TextureSlot.FLOWERBED, TextureSlot.STEM);
public static final ModelTemplate FLOWERBED_2 = create("flowerbed_2", "_2", TextureSlot.FLOWERBED, TextureSlot.STEM);
public static final ModelTemplate FLOWERBED_3 = create("flowerbed_3", "_3", TextureSlot.FLOWERBED, TextureSlot.STEM);
public static final ModelTemplate FLOWERBED_4 = create("flowerbed_4", "_4", TextureSlot.FLOWERBED, TextureSlot.STEM);
public static final ModelTemplate CORAL_FAN = create("coral_fan", TextureSlot.FAN);
public static final ModelTemplate CORAL_WALL_FAN = create("coral_wall_fan", TextureSlot.FAN);
public static final ModelTemplate GLAZED_TERRACOTTA = create("template_glazed_terracotta", TextureSlot.PATTERN);
public static final ModelTemplate CHORUS_FLOWER = create("template_chorus_flower", TextureSlot.TEXTURE);
public static final ModelTemplate DAYLIGHT_DETECTOR = create("template_daylight_detector", TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate STAINED_GLASS_PANE_NOSIDE = create("template_glass_pane_noside", "_noside", TextureSlot.PANE);
public static final ModelTemplate STAINED_GLASS_PANE_NOSIDE_ALT = create("template_glass_pane_noside_alt", "_noside_alt", TextureSlot.PANE);
public static final ModelTemplate STAINED_GLASS_PANE_POST = create("template_glass_pane_post", "_post", TextureSlot.PANE, TextureSlot.EDGE);
public static final ModelTemplate STAINED_GLASS_PANE_SIDE = create("template_glass_pane_side", "_side", TextureSlot.PANE, TextureSlot.EDGE);
public static final ModelTemplate STAINED_GLASS_PANE_SIDE_ALT = create("template_glass_pane_side_alt", "_side_alt", TextureSlot.PANE, TextureSlot.EDGE);
public static final ModelTemplate COMMAND_BLOCK = create("template_command_block", TextureSlot.FRONT, TextureSlot.BACK, TextureSlot.SIDE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_TOP_LEFT = create("template_chiseled_bookshelf_slot_top_left", "_slot_top_left", TextureSlot.TEXTURE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_TOP_MID = create("template_chiseled_bookshelf_slot_top_mid", "_slot_top_mid", TextureSlot.TEXTURE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_TOP_RIGHT = create("template_chiseled_bookshelf_slot_top_right", "_slot_top_right", TextureSlot.TEXTURE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_BOTTOM_LEFT = create("template_chiseled_bookshelf_slot_bottom_left", "_slot_bottom_left", TextureSlot.TEXTURE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_BOTTOM_MID = create("template_chiseled_bookshelf_slot_bottom_mid", "_slot_bottom_mid", TextureSlot.TEXTURE);
public static final ModelTemplate CHISELED_BOOKSHELF_SLOT_BOTTOM_RIGHT = create("template_chiseled_bookshelf_slot_bottom_right", "_slot_bottom_right", TextureSlot.TEXTURE);
public static final ModelTemplate ANVIL = create("template_anvil", TextureSlot.TOP);
public static final ModelTemplate[] STEMS = IntStream.range(0, 8).mapToObj((p_125729_) -> {
return create("stem_growth" + p_125729_, "_stage" + p_125729_, TextureSlot.STEM);
}).toArray((p_125718_) -> {
return new ModelTemplate[p_125718_];
});
public static final ModelTemplate ATTACHED_STEM = create("stem_fruit", TextureSlot.STEM, TextureSlot.UPPER_STEM);
public static final ModelTemplate CROP = create("crop", TextureSlot.CROP);
public static final ModelTemplate FARMLAND = create("template_farmland", TextureSlot.DIRT, TextureSlot.TOP);
public static final ModelTemplate FIRE_FLOOR = create("template_fire_floor", TextureSlot.FIRE);
public static final ModelTemplate FIRE_SIDE = create("template_fire_side", TextureSlot.FIRE);
public static final ModelTemplate FIRE_SIDE_ALT = create("template_fire_side_alt", TextureSlot.FIRE);
public static final ModelTemplate FIRE_UP = create("template_fire_up", TextureSlot.FIRE);
public static final ModelTemplate FIRE_UP_ALT = create("template_fire_up_alt", TextureSlot.FIRE);
public static final ModelTemplate CAMPFIRE = create("template_campfire", TextureSlot.FIRE, TextureSlot.LIT_LOG);
public static final ModelTemplate LANTERN = create("template_lantern", TextureSlot.LANTERN);
public static final ModelTemplate HANGING_LANTERN = create("template_hanging_lantern", "_hanging", TextureSlot.LANTERN);
public static final ModelTemplate TORCH = create("template_torch", TextureSlot.TORCH);
public static final ModelTemplate WALL_TORCH = create("template_torch_wall", TextureSlot.TORCH);
public static final ModelTemplate PISTON = create("template_piston", TextureSlot.PLATFORM, TextureSlot.BOTTOM, TextureSlot.SIDE);
public static final ModelTemplate PISTON_HEAD = create("template_piston_head", TextureSlot.PLATFORM, TextureSlot.SIDE, TextureSlot.UNSTICKY);
public static final ModelTemplate PISTON_HEAD_SHORT = create("template_piston_head_short", TextureSlot.PLATFORM, TextureSlot.SIDE, TextureSlot.UNSTICKY);
public static final ModelTemplate SEAGRASS = create("template_seagrass", TextureSlot.TEXTURE);
public static final ModelTemplate TURTLE_EGG = create("template_turtle_egg", TextureSlot.ALL);
public static final ModelTemplate TWO_TURTLE_EGGS = create("template_two_turtle_eggs", TextureSlot.ALL);
public static final ModelTemplate THREE_TURTLE_EGGS = create("template_three_turtle_eggs", TextureSlot.ALL);
public static final ModelTemplate FOUR_TURTLE_EGGS = create("template_four_turtle_eggs", TextureSlot.ALL);
public static final ModelTemplate SINGLE_FACE = create("template_single_face", TextureSlot.TEXTURE);
public static final ModelTemplate CAULDRON_LEVEL1 = create("template_cauldron_level1", TextureSlot.CONTENT, TextureSlot.INSIDE, TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE);
public static final ModelTemplate CAULDRON_LEVEL2 = create("template_cauldron_level2", TextureSlot.CONTENT, TextureSlot.INSIDE, TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE);
public static final ModelTemplate CAULDRON_FULL = create("template_cauldron_full", TextureSlot.CONTENT, TextureSlot.INSIDE, TextureSlot.PARTICLE, TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.SIDE);
public static final ModelTemplate AZALEA = create("template_azalea", TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate POTTED_AZALEA = create("template_potted_azalea_bush", TextureSlot.PLANT, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate POTTED_FLOWERING_AZALEA = create("template_potted_azalea_bush", TextureSlot.PLANT, TextureSlot.TOP, TextureSlot.SIDE);
public static final ModelTemplate SNIFFER_EGG = create("sniffer_egg", TextureSlot.TOP, TextureSlot.BOTTOM, TextureSlot.NORTH, TextureSlot.SOUTH, TextureSlot.EAST, TextureSlot.WEST);
public static final ModelTemplate FLAT_ITEM = createItem("generated", TextureSlot.LAYER0);
public static final ModelTemplate MUSIC_DISC = createItem("template_music_disc", TextureSlot.LAYER0);
public static final ModelTemplate FLAT_HANDHELD_ITEM = createItem("handheld", TextureSlot.LAYER0);
public static final ModelTemplate FLAT_HANDHELD_ROD_ITEM = createItem("handheld_rod", TextureSlot.LAYER0);
public static final ModelTemplate TWO_LAYERED_ITEM = createItem("generated", TextureSlot.LAYER0, TextureSlot.LAYER1);
public static final ModelTemplate THREE_LAYERED_ITEM = createItem("generated", TextureSlot.LAYER0, TextureSlot.LAYER1, TextureSlot.LAYER2);
public static final ModelTemplate SHULKER_BOX_INVENTORY = createItem("template_shulker_box", TextureSlot.PARTICLE);
public static final ModelTemplate BED_INVENTORY = createItem("template_bed", TextureSlot.PARTICLE);
public static final ModelTemplate BANNER_INVENTORY = createItem("template_banner");
public static final ModelTemplate SKULL_INVENTORY = createItem("template_skull");
public static final ModelTemplate CANDLE = create("template_candle", TextureSlot.ALL, TextureSlot.PARTICLE);
public static final ModelTemplate TWO_CANDLES = create("template_two_candles", TextureSlot.ALL, TextureSlot.PARTICLE);
public static final ModelTemplate THREE_CANDLES = create("template_three_candles", TextureSlot.ALL, TextureSlot.PARTICLE);
public static final ModelTemplate FOUR_CANDLES = create("template_four_candles", TextureSlot.ALL, TextureSlot.PARTICLE);
public static final ModelTemplate CANDLE_CAKE = create("template_cake_with_candle", TextureSlot.CANDLE, TextureSlot.BOTTOM, TextureSlot.SIDE, TextureSlot.TOP, TextureSlot.PARTICLE);
public static final ModelTemplate SCULK_SHRIEKER = create("template_sculk_shrieker", TextureSlot.BOTTOM, TextureSlot.SIDE, TextureSlot.TOP, TextureSlot.PARTICLE, TextureSlot.INNER_TOP);
private static ModelTemplate create(TextureSlot... p_125727_) {
return new ModelTemplate(Optional.empty(), Optional.empty(), p_125727_);
}
private static ModelTemplate create(String p_125724_, TextureSlot... p_125725_) {
return new ModelTemplate(Optional.of(new ResourceLocation("minecraft", "block/" + p_125724_)), Optional.empty(), p_125725_);
}
private static ModelTemplate createItem(String p_125731_, TextureSlot... p_125732_) {
return new ModelTemplate(Optional.of(new ResourceLocation("minecraft", "item/" + p_125731_)), Optional.empty(), p_125732_);
}
private static ModelTemplate create(String p_125720_, String p_125721_, TextureSlot... p_125722_) {
return new ModelTemplate(Optional.of(new ResourceLocation("minecraft", "block/" + p_125720_)), Optional.of(p_125721_), p_125722_);
}
}

View File

@@ -0,0 +1,319 @@
package net.minecraft.data.models.model;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
public class TextureMapping {
private final Map<TextureSlot, ResourceLocation> slots = Maps.newHashMap();
private final Set<TextureSlot> forcedSlots = Sets.newHashSet();
public TextureMapping put(TextureSlot p_125759_, ResourceLocation p_125760_) {
this.slots.put(p_125759_, p_125760_);
return this;
}
public TextureMapping putForced(TextureSlot p_176481_, ResourceLocation p_176482_) {
this.slots.put(p_176481_, p_176482_);
this.forcedSlots.add(p_176481_);
return this;
}
public Stream<TextureSlot> getForced() {
return this.forcedSlots.stream();
}
public TextureMapping copySlot(TextureSlot p_176478_, TextureSlot p_176479_) {
this.slots.put(p_176479_, this.slots.get(p_176478_));
return this;
}
public TextureMapping copyForced(TextureSlot p_125774_, TextureSlot p_125775_) {
this.slots.put(p_125775_, this.slots.get(p_125774_));
this.forcedSlots.add(p_125775_);
return this;
}
public ResourceLocation get(TextureSlot p_125757_) {
for(TextureSlot textureslot = p_125757_; textureslot != null; textureslot = textureslot.getParent()) {
ResourceLocation resourcelocation = this.slots.get(textureslot);
if (resourcelocation != null) {
return resourcelocation;
}
}
throw new IllegalStateException("Can't find texture for slot " + p_125757_);
}
public TextureMapping copyAndUpdate(TextureSlot p_125786_, ResourceLocation p_125787_) {
TextureMapping texturemapping = new TextureMapping();
texturemapping.slots.putAll(this.slots);
texturemapping.forcedSlots.addAll(this.forcedSlots);
texturemapping.put(p_125786_, p_125787_);
return texturemapping;
}
public static TextureMapping cube(Block p_125749_) {
ResourceLocation resourcelocation = getBlockTexture(p_125749_);
return cube(resourcelocation);
}
public static TextureMapping defaultTexture(Block p_125769_) {
ResourceLocation resourcelocation = getBlockTexture(p_125769_);
return defaultTexture(resourcelocation);
}
public static TextureMapping defaultTexture(ResourceLocation p_125762_) {
return (new TextureMapping()).put(TextureSlot.TEXTURE, p_125762_);
}
public static TextureMapping cube(ResourceLocation p_125777_) {
return (new TextureMapping()).put(TextureSlot.ALL, p_125777_);
}
public static TextureMapping cross(Block p_125781_) {
return singleSlot(TextureSlot.CROSS, getBlockTexture(p_125781_));
}
public static TextureMapping cross(ResourceLocation p_125789_) {
return singleSlot(TextureSlot.CROSS, p_125789_);
}
public static TextureMapping plant(Block p_125791_) {
return singleSlot(TextureSlot.PLANT, getBlockTexture(p_125791_));
}
public static TextureMapping plant(ResourceLocation p_125799_) {
return singleSlot(TextureSlot.PLANT, p_125799_);
}
public static TextureMapping rail(Block p_125801_) {
return singleSlot(TextureSlot.RAIL, getBlockTexture(p_125801_));
}
public static TextureMapping rail(ResourceLocation p_125803_) {
return singleSlot(TextureSlot.RAIL, p_125803_);
}
public static TextureMapping wool(Block p_125805_) {
return singleSlot(TextureSlot.WOOL, getBlockTexture(p_125805_));
}
public static TextureMapping flowerbed(Block p_272596_) {
return (new TextureMapping()).put(TextureSlot.FLOWERBED, getBlockTexture(p_272596_)).put(TextureSlot.STEM, getBlockTexture(p_272596_, "_stem"));
}
public static TextureMapping wool(ResourceLocation p_176487_) {
return singleSlot(TextureSlot.WOOL, p_176487_);
}
public static TextureMapping stem(Block p_125807_) {
return singleSlot(TextureSlot.STEM, getBlockTexture(p_125807_));
}
public static TextureMapping attachedStem(Block p_125751_, Block p_125752_) {
return (new TextureMapping()).put(TextureSlot.STEM, getBlockTexture(p_125751_)).put(TextureSlot.UPPER_STEM, getBlockTexture(p_125752_));
}
public static TextureMapping pattern(Block p_125811_) {
return singleSlot(TextureSlot.PATTERN, getBlockTexture(p_125811_));
}
public static TextureMapping fan(Block p_125815_) {
return singleSlot(TextureSlot.FAN, getBlockTexture(p_125815_));
}
public static TextureMapping crop(ResourceLocation p_125809_) {
return singleSlot(TextureSlot.CROP, p_125809_);
}
public static TextureMapping pane(Block p_125771_, Block p_125772_) {
return (new TextureMapping()).put(TextureSlot.PANE, getBlockTexture(p_125771_)).put(TextureSlot.EDGE, getBlockTexture(p_125772_, "_top"));
}
public static TextureMapping singleSlot(TextureSlot p_125796_, ResourceLocation p_125797_) {
return (new TextureMapping()).put(p_125796_, p_125797_);
}
public static TextureMapping column(Block p_125819_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125819_, "_side")).put(TextureSlot.END, getBlockTexture(p_125819_, "_top"));
}
public static TextureMapping cubeTop(Block p_125823_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125823_, "_side")).put(TextureSlot.TOP, getBlockTexture(p_125823_, "_top"));
}
public static TextureMapping pottedAzalea(Block p_278329_) {
return (new TextureMapping()).put(TextureSlot.PLANT, getBlockTexture(p_278329_, "_plant")).put(TextureSlot.SIDE, getBlockTexture(p_278329_, "_side")).put(TextureSlot.TOP, getBlockTexture(p_278329_, "_top"));
}
public static TextureMapping logColumn(Block p_125825_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125825_)).put(TextureSlot.END, getBlockTexture(p_125825_, "_top")).put(TextureSlot.PARTICLE, getBlockTexture(p_125825_));
}
public static TextureMapping column(ResourceLocation p_125764_, ResourceLocation p_125765_) {
return (new TextureMapping()).put(TextureSlot.SIDE, p_125764_).put(TextureSlot.END, p_125765_);
}
public static TextureMapping fence(Block p_250135_) {
return (new TextureMapping()).put(TextureSlot.TEXTURE, getBlockTexture(p_250135_)).put(TextureSlot.SIDE, getBlockTexture(p_250135_, "_side")).put(TextureSlot.TOP, getBlockTexture(p_250135_, "_top"));
}
public static TextureMapping customParticle(Block p_250579_) {
return (new TextureMapping()).put(TextureSlot.TEXTURE, getBlockTexture(p_250579_)).put(TextureSlot.PARTICLE, getBlockTexture(p_250579_, "_particle"));
}
public static TextureMapping cubeBottomTop(Block p_125827_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125827_, "_side")).put(TextureSlot.TOP, getBlockTexture(p_125827_, "_top")).put(TextureSlot.BOTTOM, getBlockTexture(p_125827_, "_bottom"));
}
public static TextureMapping cubeBottomTopWithWall(Block p_125829_) {
ResourceLocation resourcelocation = getBlockTexture(p_125829_);
return (new TextureMapping()).put(TextureSlot.WALL, resourcelocation).put(TextureSlot.SIDE, resourcelocation).put(TextureSlot.TOP, getBlockTexture(p_125829_, "_top")).put(TextureSlot.BOTTOM, getBlockTexture(p_125829_, "_bottom"));
}
public static TextureMapping columnWithWall(Block p_125831_) {
ResourceLocation resourcelocation = getBlockTexture(p_125831_);
return (new TextureMapping()).put(TextureSlot.TEXTURE, resourcelocation).put(TextureSlot.WALL, resourcelocation).put(TextureSlot.SIDE, resourcelocation).put(TextureSlot.END, getBlockTexture(p_125831_, "_top"));
}
public static TextureMapping door(ResourceLocation p_176484_, ResourceLocation p_176485_) {
return (new TextureMapping()).put(TextureSlot.TOP, p_176484_).put(TextureSlot.BOTTOM, p_176485_);
}
public static TextureMapping door(Block p_125833_) {
return (new TextureMapping()).put(TextureSlot.TOP, getBlockTexture(p_125833_, "_top")).put(TextureSlot.BOTTOM, getBlockTexture(p_125833_, "_bottom"));
}
public static TextureMapping particle(Block p_125835_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(p_125835_));
}
public static TextureMapping particle(ResourceLocation p_125813_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, p_125813_);
}
public static TextureMapping fire0(Block p_125837_) {
return (new TextureMapping()).put(TextureSlot.FIRE, getBlockTexture(p_125837_, "_0"));
}
public static TextureMapping fire1(Block p_125839_) {
return (new TextureMapping()).put(TextureSlot.FIRE, getBlockTexture(p_125839_, "_1"));
}
public static TextureMapping lantern(Block p_125841_) {
return (new TextureMapping()).put(TextureSlot.LANTERN, getBlockTexture(p_125841_));
}
public static TextureMapping torch(Block p_125843_) {
return (new TextureMapping()).put(TextureSlot.TORCH, getBlockTexture(p_125843_));
}
public static TextureMapping torch(ResourceLocation p_125817_) {
return (new TextureMapping()).put(TextureSlot.TORCH, p_125817_);
}
public static TextureMapping particleFromItem(Item p_125744_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getItemTexture(p_125744_));
}
public static TextureMapping commandBlock(Block p_125845_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125845_, "_side")).put(TextureSlot.FRONT, getBlockTexture(p_125845_, "_front")).put(TextureSlot.BACK, getBlockTexture(p_125845_, "_back"));
}
public static TextureMapping orientableCube(Block p_125847_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125847_, "_side")).put(TextureSlot.FRONT, getBlockTexture(p_125847_, "_front")).put(TextureSlot.TOP, getBlockTexture(p_125847_, "_top")).put(TextureSlot.BOTTOM, getBlockTexture(p_125847_, "_bottom"));
}
public static TextureMapping orientableCubeOnlyTop(Block p_125849_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125849_, "_side")).put(TextureSlot.FRONT, getBlockTexture(p_125849_, "_front")).put(TextureSlot.TOP, getBlockTexture(p_125849_, "_top"));
}
public static TextureMapping orientableCubeSameEnds(Block p_125851_) {
return (new TextureMapping()).put(TextureSlot.SIDE, getBlockTexture(p_125851_, "_side")).put(TextureSlot.FRONT, getBlockTexture(p_125851_, "_front")).put(TextureSlot.END, getBlockTexture(p_125851_, "_end"));
}
public static TextureMapping top(Block p_125853_) {
return (new TextureMapping()).put(TextureSlot.TOP, getBlockTexture(p_125853_, "_top"));
}
public static TextureMapping craftingTable(Block p_125783_, Block p_125784_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(p_125783_, "_front")).put(TextureSlot.DOWN, getBlockTexture(p_125784_)).put(TextureSlot.UP, getBlockTexture(p_125783_, "_top")).put(TextureSlot.NORTH, getBlockTexture(p_125783_, "_front")).put(TextureSlot.EAST, getBlockTexture(p_125783_, "_side")).put(TextureSlot.SOUTH, getBlockTexture(p_125783_, "_side")).put(TextureSlot.WEST, getBlockTexture(p_125783_, "_front"));
}
public static TextureMapping fletchingTable(Block p_125793_, Block p_125794_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(p_125793_, "_front")).put(TextureSlot.DOWN, getBlockTexture(p_125794_)).put(TextureSlot.UP, getBlockTexture(p_125793_, "_top")).put(TextureSlot.NORTH, getBlockTexture(p_125793_, "_front")).put(TextureSlot.SOUTH, getBlockTexture(p_125793_, "_front")).put(TextureSlot.EAST, getBlockTexture(p_125793_, "_side")).put(TextureSlot.WEST, getBlockTexture(p_125793_, "_side"));
}
public static TextureMapping snifferEgg(String p_278314_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_north")).put(TextureSlot.BOTTOM, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_bottom")).put(TextureSlot.TOP, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_top")).put(TextureSlot.NORTH, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_north")).put(TextureSlot.SOUTH, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_south")).put(TextureSlot.EAST, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_east")).put(TextureSlot.WEST, getBlockTexture(Blocks.SNIFFER_EGG, p_278314_ + "_west"));
}
public static TextureMapping campfire(Block p_125737_) {
return (new TextureMapping()).put(TextureSlot.LIT_LOG, getBlockTexture(p_125737_, "_log_lit")).put(TextureSlot.FIRE, getBlockTexture(p_125737_, "_fire"));
}
public static TextureMapping candleCake(Block p_181477_, boolean p_181478_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(Blocks.CAKE, "_side")).put(TextureSlot.BOTTOM, getBlockTexture(Blocks.CAKE, "_bottom")).put(TextureSlot.TOP, getBlockTexture(Blocks.CAKE, "_top")).put(TextureSlot.SIDE, getBlockTexture(Blocks.CAKE, "_side")).put(TextureSlot.CANDLE, getBlockTexture(p_181477_, p_181478_ ? "_lit" : ""));
}
public static TextureMapping cauldron(ResourceLocation p_176489_) {
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(Blocks.CAULDRON, "_side")).put(TextureSlot.SIDE, getBlockTexture(Blocks.CAULDRON, "_side")).put(TextureSlot.TOP, getBlockTexture(Blocks.CAULDRON, "_top")).put(TextureSlot.BOTTOM, getBlockTexture(Blocks.CAULDRON, "_bottom")).put(TextureSlot.INSIDE, getBlockTexture(Blocks.CAULDRON, "_inner")).put(TextureSlot.CONTENT, p_176489_);
}
public static TextureMapping sculkShrieker(boolean p_236351_) {
String s = p_236351_ ? "_can_summon" : "";
return (new TextureMapping()).put(TextureSlot.PARTICLE, getBlockTexture(Blocks.SCULK_SHRIEKER, "_bottom")).put(TextureSlot.SIDE, getBlockTexture(Blocks.SCULK_SHRIEKER, "_side")).put(TextureSlot.TOP, getBlockTexture(Blocks.SCULK_SHRIEKER, "_top")).put(TextureSlot.INNER_TOP, getBlockTexture(Blocks.SCULK_SHRIEKER, s + "_inner_top")).put(TextureSlot.BOTTOM, getBlockTexture(Blocks.SCULK_SHRIEKER, "_bottom"));
}
public static TextureMapping layer0(Item p_125767_) {
return (new TextureMapping()).put(TextureSlot.LAYER0, getItemTexture(p_125767_));
}
public static TextureMapping layer0(Block p_125739_) {
return (new TextureMapping()).put(TextureSlot.LAYER0, getBlockTexture(p_125739_));
}
public static TextureMapping layer0(ResourceLocation p_125821_) {
return (new TextureMapping()).put(TextureSlot.LAYER0, p_125821_);
}
public static TextureMapping layered(ResourceLocation p_267142_, ResourceLocation p_266884_) {
return (new TextureMapping()).put(TextureSlot.LAYER0, p_267142_).put(TextureSlot.LAYER1, p_266884_);
}
public static TextureMapping layered(ResourceLocation p_268096_, ResourceLocation p_268084_, ResourceLocation p_268063_) {
return (new TextureMapping()).put(TextureSlot.LAYER0, p_268096_).put(TextureSlot.LAYER1, p_268084_).put(TextureSlot.LAYER2, p_268063_);
}
public static ResourceLocation getBlockTexture(Block p_125741_) {
ResourceLocation resourcelocation = BuiltInRegistries.BLOCK.getKey(p_125741_);
return resourcelocation.withPrefix("block/");
}
public static ResourceLocation getBlockTexture(Block p_125754_, String p_125755_) {
ResourceLocation resourcelocation = BuiltInRegistries.BLOCK.getKey(p_125754_);
return resourcelocation.withPath((p_248521_) -> {
return "block/" + p_248521_ + p_125755_;
});
}
public static ResourceLocation getItemTexture(Item p_125779_) {
ResourceLocation resourcelocation = BuiltInRegistries.ITEM.getKey(p_125779_);
return resourcelocation.withPrefix("item/");
}
public static ResourceLocation getItemTexture(Item p_125746_, String p_125747_) {
ResourceLocation resourcelocation = BuiltInRegistries.ITEM.getKey(p_125746_);
return resourcelocation.withPath((p_252192_) -> {
return "item/" + p_252192_ + p_125747_;
});
}
}

View File

@@ -0,0 +1,77 @@
package net.minecraft.data.models.model;
import javax.annotation.Nullable;
public final class TextureSlot {
public static final TextureSlot ALL = create("all");
public static final TextureSlot TEXTURE = create("texture", ALL);
public static final TextureSlot PARTICLE = create("particle", TEXTURE);
public static final TextureSlot END = create("end", ALL);
public static final TextureSlot BOTTOM = create("bottom", END);
public static final TextureSlot TOP = create("top", END);
public static final TextureSlot FRONT = create("front", ALL);
public static final TextureSlot BACK = create("back", ALL);
public static final TextureSlot SIDE = create("side", ALL);
public static final TextureSlot NORTH = create("north", SIDE);
public static final TextureSlot SOUTH = create("south", SIDE);
public static final TextureSlot EAST = create("east", SIDE);
public static final TextureSlot WEST = create("west", SIDE);
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 PLANT = create("plant");
public static final TextureSlot WALL = create("wall", ALL);
public static final TextureSlot RAIL = create("rail");
public static final TextureSlot WOOL = create("wool");
public static final TextureSlot PATTERN = create("pattern");
public static final TextureSlot PANE = create("pane");
public static final TextureSlot EDGE = create("edge");
public static final TextureSlot FAN = create("fan");
public static final TextureSlot STEM = create("stem");
public static final TextureSlot UPPER_STEM = create("upperstem");
public static final TextureSlot CROP = create("crop");
public static final TextureSlot DIRT = create("dirt");
public static final TextureSlot FIRE = create("fire");
public static final TextureSlot LANTERN = create("lantern");
public static final TextureSlot PLATFORM = create("platform");
public static final TextureSlot UNSTICKY = create("unsticky");
public static final TextureSlot TORCH = create("torch");
public static final TextureSlot LAYER0 = create("layer0");
public static final TextureSlot LAYER1 = create("layer1");
public static final TextureSlot LAYER2 = create("layer2");
public static final TextureSlot LIT_LOG = create("lit_log");
public static final TextureSlot CANDLE = create("candle");
public static final TextureSlot INSIDE = create("inside");
public static final TextureSlot CONTENT = create("content");
public static final TextureSlot INNER_TOP = create("inner_top");
public static final TextureSlot FLOWERBED = create("flowerbed");
private final String id;
@Nullable
private final TextureSlot parent;
private static TextureSlot create(String p_125899_) {
return new TextureSlot(p_125899_, (TextureSlot)null);
}
private static TextureSlot create(String p_125901_, TextureSlot p_125902_) {
return new TextureSlot(p_125901_, p_125902_);
}
private TextureSlot(String p_125895_, @Nullable TextureSlot p_125896_) {
this.id = p_125895_;
this.parent = p_125896_;
}
public String getId() {
return this.id;
}
@Nullable
public TextureSlot getParent() {
return this.parent;
}
public String toString() {
return "#" + this.id;
}
}

View File

@@ -0,0 +1,94 @@
package net.minecraft.data.models.model;
import com.google.gson.JsonElement;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
public class TexturedModel {
public static final TexturedModel.Provider CUBE = createDefault(TextureMapping::cube, ModelTemplates.CUBE_ALL);
public static final TexturedModel.Provider CUBE_MIRRORED = createDefault(TextureMapping::cube, ModelTemplates.CUBE_MIRRORED_ALL);
public static final TexturedModel.Provider COLUMN = createDefault(TextureMapping::column, ModelTemplates.CUBE_COLUMN);
public static final TexturedModel.Provider COLUMN_HORIZONTAL = createDefault(TextureMapping::column, ModelTemplates.CUBE_COLUMN_HORIZONTAL);
public static final TexturedModel.Provider CUBE_TOP_BOTTOM = createDefault(TextureMapping::cubeBottomTop, ModelTemplates.CUBE_BOTTOM_TOP);
public static final TexturedModel.Provider CUBE_TOP = createDefault(TextureMapping::cubeTop, ModelTemplates.CUBE_TOP);
public static final TexturedModel.Provider ORIENTABLE_ONLY_TOP = createDefault(TextureMapping::orientableCubeOnlyTop, ModelTemplates.CUBE_ORIENTABLE);
public static final TexturedModel.Provider ORIENTABLE = createDefault(TextureMapping::orientableCube, ModelTemplates.CUBE_ORIENTABLE_TOP_BOTTOM);
public static final TexturedModel.Provider CARPET = createDefault(TextureMapping::wool, ModelTemplates.CARPET);
public static final TexturedModel.Provider FLOWERBED_1 = createDefault(TextureMapping::flowerbed, ModelTemplates.FLOWERBED_1);
public static final TexturedModel.Provider FLOWERBED_2 = createDefault(TextureMapping::flowerbed, ModelTemplates.FLOWERBED_2);
public static final TexturedModel.Provider FLOWERBED_3 = createDefault(TextureMapping::flowerbed, ModelTemplates.FLOWERBED_3);
public static final TexturedModel.Provider FLOWERBED_4 = createDefault(TextureMapping::flowerbed, ModelTemplates.FLOWERBED_4);
public static final TexturedModel.Provider GLAZED_TERRACOTTA = createDefault(TextureMapping::pattern, ModelTemplates.GLAZED_TERRACOTTA);
public static final TexturedModel.Provider CORAL_FAN = createDefault(TextureMapping::fan, ModelTemplates.CORAL_FAN);
public static final TexturedModel.Provider PARTICLE_ONLY = createDefault(TextureMapping::particle, ModelTemplates.PARTICLE_ONLY);
public static final TexturedModel.Provider ANVIL = createDefault(TextureMapping::top, ModelTemplates.ANVIL);
public static final TexturedModel.Provider LEAVES = createDefault(TextureMapping::cube, ModelTemplates.LEAVES);
public static final TexturedModel.Provider LANTERN = createDefault(TextureMapping::lantern, ModelTemplates.LANTERN);
public static final TexturedModel.Provider HANGING_LANTERN = createDefault(TextureMapping::lantern, ModelTemplates.HANGING_LANTERN);
public static final TexturedModel.Provider SEAGRASS = createDefault(TextureMapping::defaultTexture, ModelTemplates.SEAGRASS);
public static final TexturedModel.Provider COLUMN_ALT = createDefault(TextureMapping::logColumn, ModelTemplates.CUBE_COLUMN);
public static final TexturedModel.Provider COLUMN_HORIZONTAL_ALT = createDefault(TextureMapping::logColumn, ModelTemplates.CUBE_COLUMN_HORIZONTAL);
public static final TexturedModel.Provider TOP_BOTTOM_WITH_WALL = createDefault(TextureMapping::cubeBottomTopWithWall, ModelTemplates.CUBE_BOTTOM_TOP);
public static final TexturedModel.Provider COLUMN_WITH_WALL = createDefault(TextureMapping::columnWithWall, ModelTemplates.CUBE_COLUMN);
private final TextureMapping mapping;
private final ModelTemplate template;
private TexturedModel(TextureMapping p_125930_, ModelTemplate p_125931_) {
this.mapping = p_125930_;
this.template = p_125931_;
}
public ModelTemplate getTemplate() {
return this.template;
}
public TextureMapping getMapping() {
return this.mapping;
}
public TexturedModel updateTextures(Consumer<TextureMapping> p_125941_) {
p_125941_.accept(this.mapping);
return this;
}
public ResourceLocation create(Block p_125938_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125939_) {
return this.template.create(p_125938_, this.mapping, p_125939_);
}
public ResourceLocation createWithSuffix(Block p_125934_, String p_125935_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125936_) {
return this.template.createWithSuffix(p_125934_, p_125935_, this.mapping, p_125936_);
}
private static TexturedModel.Provider createDefault(Function<Block, TextureMapping> p_125943_, ModelTemplate p_125944_) {
return (p_125948_) -> {
return new TexturedModel(p_125943_.apply(p_125948_), p_125944_);
};
}
public static TexturedModel createAllSame(ResourceLocation p_125950_) {
return new TexturedModel(TextureMapping.cube(p_125950_), ModelTemplates.CUBE_ALL);
}
@FunctionalInterface
public interface Provider {
TexturedModel get(Block p_125965_);
default ResourceLocation create(Block p_125957_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125958_) {
return this.get(p_125957_).create(p_125957_, p_125958_);
}
default ResourceLocation createWithSuffix(Block p_125953_, String p_125954_, BiConsumer<ResourceLocation, Supplier<JsonElement>> p_125955_) {
return this.get(p_125953_).createWithSuffix(p_125953_, p_125954_, p_125955_);
}
default TexturedModel.Provider updateTexture(Consumer<TextureMapping> p_125960_) {
return (p_125963_) -> {
return this.get(p_125963_).updateTextures(p_125960_);
};
}
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.models.model;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.models;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,38 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import net.minecraft.world.item.crafting.CraftingBookCategory;
public abstract class CraftingRecipeBuilder {
protected static CraftingBookCategory determineBookCategory(RecipeCategory p_250736_) {
CraftingBookCategory craftingbookcategory;
switch (p_250736_) {
case BUILDING_BLOCKS:
craftingbookcategory = CraftingBookCategory.BUILDING;
break;
case TOOLS:
case COMBAT:
craftingbookcategory = CraftingBookCategory.EQUIPMENT;
break;
case REDSTONE:
craftingbookcategory = CraftingBookCategory.REDSTONE;
break;
default:
craftingbookcategory = CraftingBookCategory.MISC;
}
return craftingbookcategory;
}
protected abstract static class CraftingResult implements FinishedRecipe {
private final CraftingBookCategory category;
protected CraftingResult(CraftingBookCategory p_250313_) {
this.category = p_250313_;
}
public void serializeRecipeData(JsonObject p_250456_) {
p_250456_.addProperty("category", this.category.getSerializedName());
}
}
}

View File

@@ -0,0 +1,28 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import javax.annotation.Nullable;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipeSerializer;
public interface FinishedRecipe {
void serializeRecipeData(JsonObject p_125967_);
default JsonObject serializeRecipe() {
JsonObject jsonobject = new JsonObject();
jsonobject.addProperty("type", BuiltInRegistries.RECIPE_SERIALIZER.getKey(this.getType()).toString());
this.serializeRecipeData(jsonobject);
return jsonobject;
}
ResourceLocation getId();
RecipeSerializer<?> getType();
@Nullable
JsonObject serializeAdvancement();
@Nullable
ResourceLocation getAdvancementId();
}

View File

@@ -0,0 +1,39 @@
package net.minecraft.data.recipes;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.ItemLike;
public interface RecipeBuilder {
ResourceLocation ROOT_RECIPE_ADVANCEMENT = new ResourceLocation("recipes/root");
RecipeBuilder unlockedBy(String p_176496_, CriterionTriggerInstance p_176497_);
RecipeBuilder group(@Nullable String p_176495_);
Item getResult();
void save(Consumer<FinishedRecipe> p_176503_, ResourceLocation p_176504_);
default void save(Consumer<FinishedRecipe> p_176499_) {
this.save(p_176499_, getDefaultRecipeId(this.getResult()));
}
default void save(Consumer<FinishedRecipe> p_176501_, String p_176502_) {
ResourceLocation resourcelocation = getDefaultRecipeId(this.getResult());
ResourceLocation resourcelocation1 = new ResourceLocation(p_176502_);
if (resourcelocation1.equals(resourcelocation)) {
throw new IllegalStateException("Recipe " + p_176502_ + " should remove its 'save' argument as it is equal to default one");
} else {
this.save(p_176501_, resourcelocation1);
}
}
static ResourceLocation getDefaultRecipeId(ItemLike p_176494_) {
return BuiltInRegistries.ITEM.getKey(p_176494_.asItem());
}
}

View File

@@ -0,0 +1,23 @@
package net.minecraft.data.recipes;
public enum RecipeCategory {
BUILDING_BLOCKS("building_blocks"),
DECORATIONS("decorations"),
REDSTONE("redstone"),
TRANSPORTATION("transportation"),
TOOLS("tools"),
COMBAT("combat"),
FOOD("food"),
BREWING("brewing"),
MISC("misc");
private final String recipeFolderName;
private RecipeCategory(String p_251010_) {
this.recipeFolderName = p_251010_;
}
public String getFolderName() {
return this.recipeFolderName;
}
}

View File

@@ -0,0 +1,464 @@
package net.minecraft.data.recipes;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.gson.JsonObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.EnterBlockTrigger;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.StatePropertiesPredicate;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.BlockFamilies;
import net.minecraft.data.BlockFamily;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.item.HoneycombItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
public abstract class RecipeProvider implements DataProvider {
protected final PackOutput.PathProvider recipePathProvider;
protected final PackOutput.PathProvider advancementPathProvider;
private static final Map<BlockFamily.Variant, BiFunction<ItemLike, ItemLike, RecipeBuilder>> SHAPE_BUILDERS = ImmutableMap.<BlockFamily.Variant, BiFunction<ItemLike, ItemLike, RecipeBuilder>>builder().put(BlockFamily.Variant.BUTTON, (p_176733_, p_176734_) -> {
return buttonBuilder(p_176733_, Ingredient.of(p_176734_));
}).put(BlockFamily.Variant.CHISELED, (p_248037_, p_248038_) -> {
return chiseledBuilder(RecipeCategory.BUILDING_BLOCKS, p_248037_, Ingredient.of(p_248038_));
}).put(BlockFamily.Variant.CUT, (p_248026_, p_248027_) -> {
return cutBuilder(RecipeCategory.BUILDING_BLOCKS, p_248026_, Ingredient.of(p_248027_));
}).put(BlockFamily.Variant.DOOR, (p_176714_, p_176715_) -> {
return doorBuilder(p_176714_, Ingredient.of(p_176715_));
}).put(BlockFamily.Variant.CUSTOM_FENCE, (p_176708_, p_176709_) -> {
return fenceBuilder(p_176708_, Ingredient.of(p_176709_));
}).put(BlockFamily.Variant.FENCE, (p_248031_, p_248032_) -> {
return fenceBuilder(p_248031_, Ingredient.of(p_248032_));
}).put(BlockFamily.Variant.CUSTOM_FENCE_GATE, (p_176698_, p_176699_) -> {
return fenceGateBuilder(p_176698_, Ingredient.of(p_176699_));
}).put(BlockFamily.Variant.FENCE_GATE, (p_248035_, p_248036_) -> {
return fenceGateBuilder(p_248035_, Ingredient.of(p_248036_));
}).put(BlockFamily.Variant.SIGN, (p_176688_, p_176689_) -> {
return signBuilder(p_176688_, Ingredient.of(p_176689_));
}).put(BlockFamily.Variant.SLAB, (p_248017_, p_248018_) -> {
return slabBuilder(RecipeCategory.BUILDING_BLOCKS, p_248017_, Ingredient.of(p_248018_));
}).put(BlockFamily.Variant.STAIRS, (p_176674_, p_176675_) -> {
return stairBuilder(p_176674_, Ingredient.of(p_176675_));
}).put(BlockFamily.Variant.PRESSURE_PLATE, (p_248039_, p_248040_) -> {
return pressurePlateBuilder(RecipeCategory.REDSTONE, p_248039_, Ingredient.of(p_248040_));
}).put(BlockFamily.Variant.POLISHED, (p_248019_, p_248020_) -> {
return polishedBuilder(RecipeCategory.BUILDING_BLOCKS, p_248019_, Ingredient.of(p_248020_));
}).put(BlockFamily.Variant.TRAPDOOR, (p_176638_, p_176639_) -> {
return trapdoorBuilder(p_176638_, Ingredient.of(p_176639_));
}).put(BlockFamily.Variant.WALL, (p_248024_, p_248025_) -> {
return wallBuilder(RecipeCategory.DECORATIONS, p_248024_, Ingredient.of(p_248025_));
}).build();
public RecipeProvider(PackOutput p_248933_) {
this.recipePathProvider = p_248933_.createPathProvider(PackOutput.Target.DATA_PACK, "recipes");
this.advancementPathProvider = p_248933_.createPathProvider(PackOutput.Target.DATA_PACK, "advancements");
}
public CompletableFuture<?> run(CachedOutput p_254020_) {
Set<ResourceLocation> set = Sets.newHashSet();
List<CompletableFuture<?>> list = new ArrayList<>();
this.buildRecipes((p_253413_) -> {
if (!set.add(p_253413_.getId())) {
throw new IllegalStateException("Duplicate recipe " + p_253413_.getId());
} else {
list.add(DataProvider.saveStable(p_254020_, p_253413_.serializeRecipe(), this.recipePathProvider.json(p_253413_.getId())));
JsonObject jsonobject = p_253413_.serializeAdvancement();
if (jsonobject != null) {
var saveAdvancementFuture = saveAdvancement(p_254020_, p_253413_, jsonobject);
if (saveAdvancementFuture != null)
list.add(saveAdvancementFuture);
}
}
});
return CompletableFuture.allOf(list.toArray((p_253414_) -> {
return new CompletableFuture[p_253414_];
}));
}
/**
* Called every time a recipe is saved to also save the advancement JSON if it exists.
*
* @return A completable future that saves the advancement to disk, or null to cancel saving the advancement.
*/
@org.jetbrains.annotations.Nullable
protected CompletableFuture<?> saveAdvancement(CachedOutput output, FinishedRecipe finishedRecipe, JsonObject advancementJson) {
return DataProvider.saveStable(output, advancementJson, this.advancementPathProvider.json(finishedRecipe.getAdvancementId()));
}
protected CompletableFuture<?> buildAdvancement(CachedOutput p_253674_, ResourceLocation p_254102_, Advancement.Builder p_253712_) {
return DataProvider.saveStable(p_253674_, p_253712_.serializeToJson(), this.advancementPathProvider.json(p_254102_));
}
protected abstract void buildRecipes(Consumer<FinishedRecipe> p_251297_);
protected void generateForEnabledBlockFamilies(Consumer<FinishedRecipe> p_249188_, FeatureFlagSet p_251836_) {
BlockFamilies.getAllFamilies().filter((p_248034_) -> {
return p_248034_.shouldGenerateRecipe(p_251836_);
}).forEach((p_176624_) -> {
generateRecipes(p_249188_, p_176624_);
});
}
protected static void oneToOneConversionRecipe(Consumer<FinishedRecipe> p_176552_, ItemLike p_176553_, ItemLike p_176554_, @Nullable String p_176555_) {
oneToOneConversionRecipe(p_176552_, p_176553_, p_176554_, p_176555_, 1);
}
protected static void oneToOneConversionRecipe(Consumer<FinishedRecipe> p_176557_, ItemLike p_176558_, ItemLike p_176559_, @Nullable String p_176560_, int p_176561_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, p_176558_, p_176561_).requires(p_176559_).group(p_176560_).unlockedBy(getHasName(p_176559_), has(p_176559_)).save(p_176557_, getConversionRecipeName(p_176558_, p_176559_));
}
protected static void oreSmelting(Consumer<FinishedRecipe> p_250654_, List<ItemLike> p_250172_, RecipeCategory p_250588_, ItemLike p_251868_, float p_250789_, int p_252144_, String p_251687_) {
oreCooking(p_250654_, RecipeSerializer.SMELTING_RECIPE, p_250172_, p_250588_, p_251868_, p_250789_, p_252144_, p_251687_, "_from_smelting");
}
protected static void oreBlasting(Consumer<FinishedRecipe> p_248775_, List<ItemLike> p_251504_, RecipeCategory p_248846_, ItemLike p_249735_, float p_248783_, int p_250303_, String p_251984_) {
oreCooking(p_248775_, RecipeSerializer.BLASTING_RECIPE, p_251504_, p_248846_, p_249735_, p_248783_, p_250303_, p_251984_, "_from_blasting");
}
protected static void oreCooking(Consumer<FinishedRecipe> p_250791_, RecipeSerializer<? extends AbstractCookingRecipe> p_251817_, List<ItemLike> p_249619_, RecipeCategory p_251154_, ItemLike p_250066_, float p_251871_, int p_251316_, String p_251450_, String p_249236_) {
for(ItemLike itemlike : p_249619_) {
SimpleCookingRecipeBuilder.generic(Ingredient.of(itemlike), p_251154_, p_250066_, p_251871_, p_251316_, p_251817_).group(p_251450_).unlockedBy(getHasName(itemlike), has(itemlike)).save(p_250791_, getItemName(p_250066_) + p_249236_ + "_" + getItemName(itemlike));
}
}
protected static void netheriteSmithing(Consumer<FinishedRecipe> p_251614_, Item p_250046_, RecipeCategory p_248986_, Item p_250389_) {
SmithingTransformRecipeBuilder.smithing(Ingredient.of(Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE), Ingredient.of(p_250046_), Ingredient.of(Items.NETHERITE_INGOT), p_248986_, p_250389_).unlocks("has_netherite_ingot", has(Items.NETHERITE_INGOT)).save(p_251614_, getItemName(p_250389_) + "_smithing");
}
protected static void trimSmithing(Consumer<FinishedRecipe> p_285086_, Item p_285461_, ResourceLocation p_285044_) {
SmithingTrimRecipeBuilder.smithingTrim(Ingredient.of(p_285461_), Ingredient.of(ItemTags.TRIMMABLE_ARMOR), Ingredient.of(ItemTags.TRIM_MATERIALS), RecipeCategory.MISC).unlocks("has_smithing_trim_template", has(p_285461_)).save(p_285086_, p_285044_);
}
protected static void twoByTwoPacker(Consumer<FinishedRecipe> p_248860_, RecipeCategory p_250881_, ItemLike p_252184_, ItemLike p_249710_) {
ShapedRecipeBuilder.shaped(p_250881_, p_252184_, 1).define('#', p_249710_).pattern("##").pattern("##").unlockedBy(getHasName(p_249710_), has(p_249710_)).save(p_248860_);
}
protected static void threeByThreePacker(Consumer<FinishedRecipe> p_259036_, RecipeCategory p_259247_, ItemLike p_259376_, ItemLike p_259717_, String p_260308_) {
ShapelessRecipeBuilder.shapeless(p_259247_, p_259376_).requires(p_259717_, 9).unlockedBy(p_260308_, has(p_259717_)).save(p_259036_);
}
protected static void threeByThreePacker(Consumer<FinishedRecipe> p_260012_, RecipeCategory p_259186_, ItemLike p_259360_, ItemLike p_259263_) {
threeByThreePacker(p_260012_, p_259186_, p_259360_, p_259263_, getHasName(p_259263_));
}
protected static void planksFromLog(Consumer<FinishedRecipe> p_259712_, ItemLike p_259052_, TagKey<Item> p_259045_, int p_259471_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, p_259052_, p_259471_).requires(p_259045_).group("planks").unlockedBy("has_log", has(p_259045_)).save(p_259712_);
}
protected static void planksFromLogs(Consumer<FinishedRecipe> p_259910_, ItemLike p_259193_, TagKey<Item> p_259818_, int p_259807_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, p_259193_, p_259807_).requires(p_259818_).group("planks").unlockedBy("has_logs", has(p_259818_)).save(p_259910_);
}
protected static void woodFromLogs(Consumer<FinishedRecipe> p_126003_, ItemLike p_126004_, ItemLike p_126005_) {
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, p_126004_, 3).define('#', p_126005_).pattern("##").pattern("##").group("bark").unlockedBy("has_log", has(p_126005_)).save(p_126003_);
}
protected static void woodenBoat(Consumer<FinishedRecipe> p_126022_, ItemLike p_126023_, ItemLike p_126024_) {
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, p_126023_).define('#', p_126024_).pattern("# #").pattern("###").group("boat").unlockedBy("in_water", insideOf(Blocks.WATER)).save(p_126022_);
}
protected static void chestBoat(Consumer<FinishedRecipe> p_236372_, ItemLike p_236373_, ItemLike p_236374_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, p_236373_).requires(Blocks.CHEST).requires(p_236374_).group("chest_boat").unlockedBy("has_boat", has(ItemTags.BOATS)).save(p_236372_);
}
protected static RecipeBuilder buttonBuilder(ItemLike p_176659_, Ingredient p_176660_) {
return ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, p_176659_).requires(p_176660_);
}
protected static RecipeBuilder doorBuilder(ItemLike p_176671_, Ingredient p_176672_) {
return ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, p_176671_, 3).define('#', p_176672_).pattern("##").pattern("##").pattern("##");
}
protected static RecipeBuilder fenceBuilder(ItemLike p_176679_, Ingredient p_176680_) {
int i = p_176679_ == Blocks.NETHER_BRICK_FENCE ? 6 : 3;
Item item = p_176679_ == Blocks.NETHER_BRICK_FENCE ? Items.NETHER_BRICK : Items.STICK;
return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_176679_, i).define('W', p_176680_).define('#', item).pattern("W#W").pattern("W#W");
}
protected static RecipeBuilder fenceGateBuilder(ItemLike p_176685_, Ingredient p_176686_) {
return ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, p_176685_).define('#', Items.STICK).define('W', p_176686_).pattern("#W#").pattern("#W#");
}
protected static void pressurePlate(Consumer<FinishedRecipe> p_176691_, ItemLike p_176692_, ItemLike p_176693_) {
pressurePlateBuilder(RecipeCategory.REDSTONE, p_176692_, Ingredient.of(p_176693_)).unlockedBy(getHasName(p_176693_), has(p_176693_)).save(p_176691_);
}
protected static RecipeBuilder pressurePlateBuilder(RecipeCategory p_251447_, ItemLike p_251989_, Ingredient p_249211_) {
return ShapedRecipeBuilder.shaped(p_251447_, p_251989_).define('#', p_249211_).pattern("##");
}
protected static void slab(Consumer<FinishedRecipe> p_248880_, RecipeCategory p_251848_, ItemLike p_249368_, ItemLike p_252133_) {
slabBuilder(p_251848_, p_249368_, Ingredient.of(p_252133_)).unlockedBy(getHasName(p_252133_), has(p_252133_)).save(p_248880_);
}
protected static RecipeBuilder slabBuilder(RecipeCategory p_251707_, ItemLike p_251284_, Ingredient p_248824_) {
return ShapedRecipeBuilder.shaped(p_251707_, p_251284_, 6).define('#', p_248824_).pattern("###");
}
protected static RecipeBuilder stairBuilder(ItemLike p_176711_, Ingredient p_176712_) {
return ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, p_176711_, 4).define('#', p_176712_).pattern("# ").pattern("## ").pattern("###");
}
protected static RecipeBuilder trapdoorBuilder(ItemLike p_176721_, Ingredient p_176722_) {
return ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, p_176721_, 2).define('#', p_176722_).pattern("###").pattern("###");
}
protected static RecipeBuilder signBuilder(ItemLike p_176727_, Ingredient p_176728_) {
return ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_176727_, 3).group("sign").define('#', p_176728_).define('X', Items.STICK).pattern("###").pattern("###").pattern(" X ");
}
protected static void hangingSign(Consumer<FinishedRecipe> p_250663_, ItemLike p_252355_, ItemLike p_250437_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_252355_, 6).group("hanging_sign").define('#', p_250437_).define('X', Items.CHAIN).pattern("X X").pattern("###").pattern("###").unlockedBy("has_stripped_logs", has(p_250437_)).save(p_250663_);
}
protected static void colorBlockWithDye(Consumer<FinishedRecipe> p_289666_, List<Item> p_289675_, List<Item> p_289672_, String p_289641_) {
for(int i = 0; i < p_289675_.size(); ++i) {
Item item = p_289675_.get(i);
Item item1 = p_289672_.get(i);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, item1).requires(item).requires(Ingredient.of(p_289672_.stream().filter((p_288265_) -> {
return !p_288265_.equals(item1);
}).map(ItemStack::new))).group(p_289641_).unlockedBy("has_needed_dye", has(item)).save(p_289666_, "dye_" + getItemName(item1));
}
}
protected static void carpet(Consumer<FinishedRecipe> p_176717_, ItemLike p_176718_, ItemLike p_176719_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_176718_, 3).define('#', p_176719_).pattern("##").group("carpet").unlockedBy(getHasName(p_176719_), has(p_176719_)).save(p_176717_);
}
protected static void bedFromPlanksAndWool(Consumer<FinishedRecipe> p_126074_, ItemLike p_126075_, ItemLike p_126076_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_126075_).define('#', p_126076_).define('X', ItemTags.PLANKS).pattern("###").pattern("XXX").group("bed").unlockedBy(getHasName(p_126076_), has(p_126076_)).save(p_126074_);
}
protected static void banner(Consumer<FinishedRecipe> p_126082_, ItemLike p_126083_, ItemLike p_126084_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_126083_).define('#', p_126084_).define('|', Items.STICK).pattern("###").pattern("###").pattern(" | ").group("banner").unlockedBy(getHasName(p_126084_), has(p_126084_)).save(p_126082_);
}
protected static void stainedGlassFromGlassAndDye(Consumer<FinishedRecipe> p_126086_, ItemLike p_126087_, ItemLike p_126088_) {
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, p_126087_, 8).define('#', Blocks.GLASS).define('X', p_126088_).pattern("###").pattern("#X#").pattern("###").group("stained_glass").unlockedBy("has_glass", has(Blocks.GLASS)).save(p_126086_);
}
protected static void stainedGlassPaneFromStainedGlass(Consumer<FinishedRecipe> p_126090_, ItemLike p_126091_, ItemLike p_126092_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_126091_, 16).define('#', p_126092_).pattern("###").pattern("###").group("stained_glass_pane").unlockedBy("has_glass", has(p_126092_)).save(p_126090_);
}
protected static void stainedGlassPaneFromGlassPaneAndDye(Consumer<FinishedRecipe> p_126094_, ItemLike p_126095_, ItemLike p_126096_) {
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, p_126095_, 8).define('#', Blocks.GLASS_PANE).define('$', p_126096_).pattern("###").pattern("#$#").pattern("###").group("stained_glass_pane").unlockedBy("has_glass_pane", has(Blocks.GLASS_PANE)).unlockedBy(getHasName(p_126096_), has(p_126096_)).save(p_126094_, getConversionRecipeName(p_126095_, Blocks.GLASS_PANE));
}
protected static void coloredTerracottaFromTerracottaAndDye(Consumer<FinishedRecipe> p_126098_, ItemLike p_126099_, ItemLike p_126100_) {
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, p_126099_, 8).define('#', Blocks.TERRACOTTA).define('X', p_126100_).pattern("###").pattern("#X#").pattern("###").group("stained_terracotta").unlockedBy("has_terracotta", has(Blocks.TERRACOTTA)).save(p_126098_);
}
protected static void concretePowder(Consumer<FinishedRecipe> p_126102_, ItemLike p_126103_, ItemLike p_126104_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, p_126103_, 8).requires(p_126104_).requires(Blocks.SAND, 4).requires(Blocks.GRAVEL, 4).group("concrete_powder").unlockedBy("has_sand", has(Blocks.SAND)).unlockedBy("has_gravel", has(Blocks.GRAVEL)).save(p_126102_);
}
protected static void candle(Consumer<FinishedRecipe> p_176543_, ItemLike p_176544_, ItemLike p_176545_) {
ShapelessRecipeBuilder.shapeless(RecipeCategory.DECORATIONS, p_176544_).requires(Blocks.CANDLE).requires(p_176545_).group("dyed_candle").unlockedBy(getHasName(p_176545_), has(p_176545_)).save(p_176543_);
}
protected static void wall(Consumer<FinishedRecipe> p_251034_, RecipeCategory p_251148_, ItemLike p_250499_, ItemLike p_249970_) {
wallBuilder(p_251148_, p_250499_, Ingredient.of(p_249970_)).unlockedBy(getHasName(p_249970_), has(p_249970_)).save(p_251034_);
}
protected static RecipeBuilder wallBuilder(RecipeCategory p_249083_, ItemLike p_250754_, Ingredient p_250311_) {
return ShapedRecipeBuilder.shaped(p_249083_, p_250754_, 6).define('#', p_250311_).pattern("###").pattern("###");
}
protected static void polished(Consumer<FinishedRecipe> p_251348_, RecipeCategory p_248719_, ItemLike p_250032_, ItemLike p_250021_) {
polishedBuilder(p_248719_, p_250032_, Ingredient.of(p_250021_)).unlockedBy(getHasName(p_250021_), has(p_250021_)).save(p_251348_);
}
protected static RecipeBuilder polishedBuilder(RecipeCategory p_249131_, ItemLike p_251242_, Ingredient p_251412_) {
return ShapedRecipeBuilder.shaped(p_249131_, p_251242_, 4).define('S', p_251412_).pattern("SS").pattern("SS");
}
protected static void cut(Consumer<FinishedRecipe> p_248712_, RecipeCategory p_252306_, ItemLike p_249686_, ItemLike p_251100_) {
cutBuilder(p_252306_, p_249686_, Ingredient.of(p_251100_)).unlockedBy(getHasName(p_251100_), has(p_251100_)).save(p_248712_);
}
protected static ShapedRecipeBuilder cutBuilder(RecipeCategory p_250895_, ItemLike p_251147_, Ingredient p_251563_) {
return ShapedRecipeBuilder.shaped(p_250895_, p_251147_, 4).define('#', p_251563_).pattern("##").pattern("##");
}
protected static void chiseled(Consumer<FinishedRecipe> p_250120_, RecipeCategory p_251604_, ItemLike p_251049_, ItemLike p_252267_) {
chiseledBuilder(p_251604_, p_251049_, Ingredient.of(p_252267_)).unlockedBy(getHasName(p_252267_), has(p_252267_)).save(p_250120_);
}
protected static void mosaicBuilder(Consumer<FinishedRecipe> p_249200_, RecipeCategory p_248788_, ItemLike p_251925_, ItemLike p_252242_) {
ShapedRecipeBuilder.shaped(p_248788_, p_251925_).define('#', p_252242_).pattern("#").pattern("#").unlockedBy(getHasName(p_252242_), has(p_252242_)).save(p_249200_);
}
protected static ShapedRecipeBuilder chiseledBuilder(RecipeCategory p_251755_, ItemLike p_249782_, Ingredient p_250087_) {
return ShapedRecipeBuilder.shaped(p_251755_, p_249782_).define('#', p_250087_).pattern("#").pattern("#");
}
protected static void stonecutterResultFromBase(Consumer<FinishedRecipe> p_251589_, RecipeCategory p_248911_, ItemLike p_251265_, ItemLike p_250033_) {
stonecutterResultFromBase(p_251589_, p_248911_, p_251265_, p_250033_, 1);
}
protected static void stonecutterResultFromBase(Consumer<FinishedRecipe> p_249145_, RecipeCategory p_250609_, ItemLike p_251254_, ItemLike p_249666_, int p_251462_) {
SingleItemRecipeBuilder.stonecutting(Ingredient.of(p_249666_), p_250609_, p_251254_, p_251462_).unlockedBy(getHasName(p_249666_), has(p_249666_)).save(p_249145_, getConversionRecipeName(p_251254_, p_249666_) + "_stonecutting");
}
protected static void smeltingResultFromBase(Consumer<FinishedRecipe> p_176740_, ItemLike p_176741_, ItemLike p_176742_) {
SimpleCookingRecipeBuilder.smelting(Ingredient.of(p_176742_), RecipeCategory.BUILDING_BLOCKS, p_176741_, 0.1F, 200).unlockedBy(getHasName(p_176742_), has(p_176742_)).save(p_176740_);
}
protected static void nineBlockStorageRecipes(Consumer<FinishedRecipe> p_249580_, RecipeCategory p_251203_, ItemLike p_251689_, RecipeCategory p_251376_, ItemLike p_248771_) {
nineBlockStorageRecipes(p_249580_, p_251203_, p_251689_, p_251376_, p_248771_, getSimpleRecipeName(p_248771_), (String)null, getSimpleRecipeName(p_251689_), (String)null);
}
protected static void nineBlockStorageRecipesWithCustomPacking(Consumer<FinishedRecipe> p_250488_, RecipeCategory p_250885_, ItemLike p_251651_, RecipeCategory p_250874_, ItemLike p_248576_, String p_250171_, String p_249386_) {
nineBlockStorageRecipes(p_250488_, p_250885_, p_251651_, p_250874_, p_248576_, p_250171_, p_249386_, getSimpleRecipeName(p_251651_), (String)null);
}
protected static void nineBlockStorageRecipesRecipesWithCustomUnpacking(Consumer<FinishedRecipe> p_250320_, RecipeCategory p_248979_, ItemLike p_249101_, RecipeCategory p_252036_, ItemLike p_250886_, String p_248768_, String p_250847_) {
nineBlockStorageRecipes(p_250320_, p_248979_, p_249101_, p_252036_, p_250886_, getSimpleRecipeName(p_250886_), (String)null, p_248768_, p_250847_);
}
protected static void nineBlockStorageRecipes(Consumer<FinishedRecipe> p_250423_, RecipeCategory p_250083_, ItemLike p_250042_, RecipeCategory p_248977_, ItemLike p_251911_, String p_250475_, @Nullable String p_248641_, String p_252237_, @Nullable String p_250414_) {
ShapelessRecipeBuilder.shapeless(p_250083_, p_250042_, 9).requires(p_251911_).group(p_250414_).unlockedBy(getHasName(p_251911_), has(p_251911_)).save(p_250423_, new ResourceLocation(p_252237_));
ShapedRecipeBuilder.shaped(p_248977_, p_251911_).define('#', p_250042_).pattern("###").pattern("###").pattern("###").group(p_248641_).unlockedBy(getHasName(p_250042_), has(p_250042_)).save(p_250423_, new ResourceLocation(p_250475_));
}
protected static void copySmithingTemplate(Consumer<FinishedRecipe> p_267061_, ItemLike p_266974_, TagKey<Item> p_267283_) {
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, p_266974_, 2).define('#', Items.DIAMOND).define('C', p_267283_).define('S', p_266974_).pattern("#S#").pattern("#C#").pattern("###").unlockedBy(getHasName(p_266974_), has(p_266974_)).save(p_267061_);
}
protected static void copySmithingTemplate(Consumer<FinishedRecipe> p_266734_, ItemLike p_267133_, ItemLike p_267023_) {
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, p_267133_, 2).define('#', Items.DIAMOND).define('C', p_267023_).define('S', p_267133_).pattern("#S#").pattern("#C#").pattern("###").unlockedBy(getHasName(p_267133_), has(p_267133_)).save(p_266734_);
}
protected static void cookRecipes(Consumer<FinishedRecipe> p_126007_, String p_126008_, RecipeSerializer<? extends AbstractCookingRecipe> p_250529_, int p_126010_) {
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.BEEF, Items.COOKED_BEEF, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.CHICKEN, Items.COOKED_CHICKEN, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.COD, Items.COOKED_COD, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.KELP, Items.DRIED_KELP, 0.1F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.SALMON, Items.COOKED_SALMON, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.MUTTON, Items.COOKED_MUTTON, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.PORKCHOP, Items.COOKED_PORKCHOP, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.POTATO, Items.BAKED_POTATO, 0.35F);
simpleCookingRecipe(p_126007_, p_126008_, p_250529_, p_126010_, Items.RABBIT, Items.COOKED_RABBIT, 0.35F);
}
protected static void simpleCookingRecipe(Consumer<FinishedRecipe> p_249398_, String p_249709_, RecipeSerializer<? extends AbstractCookingRecipe> p_251876_, int p_249258_, ItemLike p_250669_, ItemLike p_250224_, float p_252138_) {
SimpleCookingRecipeBuilder.generic(Ingredient.of(p_250669_), RecipeCategory.FOOD, p_250224_, p_252138_, p_249258_, p_251876_).unlockedBy(getHasName(p_250669_), has(p_250669_)).save(p_249398_, getItemName(p_250224_) + "_from_" + p_249709_);
}
protected static void waxRecipes(Consumer<FinishedRecipe> p_176611_) {
HoneycombItem.WAXABLES.get().forEach((p_248022_, p_248023_) -> {
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, p_248023_).requires(p_248022_).requires(Items.HONEYCOMB).group(getItemName(p_248023_)).unlockedBy(getHasName(p_248022_), has(p_248022_)).save(p_176611_, getConversionRecipeName(p_248023_, Items.HONEYCOMB));
});
}
protected static void generateRecipes(Consumer<FinishedRecipe> p_176581_, BlockFamily p_176582_) {
p_176582_.getVariants().forEach((p_176529_, p_176530_) -> {
BiFunction<ItemLike, ItemLike, RecipeBuilder> bifunction = SHAPE_BUILDERS.get(p_176529_);
ItemLike itemlike = getBaseBlock(p_176582_, p_176529_);
if (bifunction != null) {
RecipeBuilder recipebuilder = bifunction.apply(p_176530_, itemlike);
p_176582_.getRecipeGroupPrefix().ifPresent((p_176601_) -> {
recipebuilder.group(p_176601_ + (p_176529_ == BlockFamily.Variant.CUT ? "" : "_" + p_176529_.getName()));
});
recipebuilder.unlockedBy(p_176582_.getRecipeUnlockedBy().orElseGet(() -> {
return getHasName(itemlike);
}), has(itemlike));
recipebuilder.save(p_176581_);
}
if (p_176529_ == BlockFamily.Variant.CRACKED) {
smeltingResultFromBase(p_176581_, p_176530_, itemlike);
}
});
}
protected static Block getBaseBlock(BlockFamily p_176524_, BlockFamily.Variant p_176525_) {
if (p_176525_ == BlockFamily.Variant.CHISELED) {
if (!p_176524_.getVariants().containsKey(BlockFamily.Variant.SLAB)) {
throw new IllegalStateException("Slab is not defined for the family.");
} else {
return p_176524_.get(BlockFamily.Variant.SLAB);
}
} else {
return p_176524_.getBaseBlock();
}
}
protected static EnterBlockTrigger.TriggerInstance insideOf(Block p_125980_) {
return new EnterBlockTrigger.TriggerInstance(ContextAwarePredicate.ANY, p_125980_, StatePropertiesPredicate.ANY);
}
protected static InventoryChangeTrigger.TriggerInstance has(MinMaxBounds.Ints p_176521_, ItemLike p_176522_) {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_176522_).withCount(p_176521_).build());
}
protected static InventoryChangeTrigger.TriggerInstance has(ItemLike p_125978_) {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_125978_).build());
}
protected static InventoryChangeTrigger.TriggerInstance has(TagKey<Item> p_206407_) {
return inventoryTrigger(ItemPredicate.Builder.item().of(p_206407_).build());
}
protected static InventoryChangeTrigger.TriggerInstance inventoryTrigger(ItemPredicate... p_126012_) {
return new InventoryChangeTrigger.TriggerInstance(ContextAwarePredicate.ANY, MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, p_126012_);
}
protected static String getHasName(ItemLike p_176603_) {
return "has_" + getItemName(p_176603_);
}
protected static String getItemName(ItemLike p_176633_) {
return BuiltInRegistries.ITEM.getKey(p_176633_.asItem()).getPath();
}
protected static String getSimpleRecipeName(ItemLike p_176645_) {
return getItemName(p_176645_);
}
protected static String getConversionRecipeName(ItemLike p_176518_, ItemLike p_176519_) {
return getItemName(p_176518_) + "_from_" + getItemName(p_176519_);
}
protected static String getSmeltingRecipeName(ItemLike p_176657_) {
return getItemName(p_176657_) + "_from_smelting";
}
protected static String getBlastingRecipeName(ItemLike p_176669_) {
return getItemName(p_176669_) + "_from_blasting";
}
public final String getName() {
return "Recipes";
}
}

View File

@@ -0,0 +1,205 @@
package net.minecraft.data.recipes;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
public class ShapedRecipeBuilder extends CraftingRecipeBuilder implements RecipeBuilder {
private final RecipeCategory category;
private final Item result;
private final int count;
private final List<String> rows = Lists.newArrayList();
private final Map<Character, Ingredient> key = Maps.newLinkedHashMap();
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
@Nullable
private String group;
private boolean showNotification = true;
public ShapedRecipeBuilder(RecipeCategory p_249996_, ItemLike p_251475_, int p_248948_) {
this.category = p_249996_;
this.result = p_251475_.asItem();
this.count = p_248948_;
}
public static ShapedRecipeBuilder shaped(RecipeCategory p_250853_, ItemLike p_249747_) {
return shaped(p_250853_, p_249747_, 1);
}
public static ShapedRecipeBuilder shaped(RecipeCategory p_251325_, ItemLike p_250636_, int p_249081_) {
return new ShapedRecipeBuilder(p_251325_, p_250636_, p_249081_);
}
public ShapedRecipeBuilder define(Character p_206417_, TagKey<Item> p_206418_) {
return this.define(p_206417_, Ingredient.of(p_206418_));
}
public ShapedRecipeBuilder define(Character p_126128_, ItemLike p_126129_) {
return this.define(p_126128_, Ingredient.of(p_126129_));
}
public ShapedRecipeBuilder define(Character p_126125_, Ingredient p_126126_) {
if (this.key.containsKey(p_126125_)) {
throw new IllegalArgumentException("Symbol '" + p_126125_ + "' is already defined!");
} else if (p_126125_ == ' ') {
throw new IllegalArgumentException("Symbol ' ' (whitespace) is reserved and cannot be defined");
} else {
this.key.put(p_126125_, p_126126_);
return this;
}
}
public ShapedRecipeBuilder pattern(String p_126131_) {
if (!this.rows.isEmpty() && p_126131_.length() != this.rows.get(0).length()) {
throw new IllegalArgumentException("Pattern must be the same width on every line!");
} else {
this.rows.add(p_126131_);
return this;
}
}
public ShapedRecipeBuilder unlockedBy(String p_126133_, CriterionTriggerInstance p_126134_) {
this.advancement.addCriterion(p_126133_, p_126134_);
return this;
}
public ShapedRecipeBuilder group(@Nullable String p_126146_) {
this.group = p_126146_;
return this;
}
public ShapedRecipeBuilder showNotification(boolean p_273326_) {
this.showNotification = p_273326_;
return this;
}
public Item getResult() {
return this.result;
}
public void save(Consumer<FinishedRecipe> p_126141_, ResourceLocation p_126142_) {
this.ensureValid(p_126142_);
this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_126142_)).rewards(AdvancementRewards.Builder.recipe(p_126142_)).requirements(RequirementsStrategy.OR);
p_126141_.accept(new ShapedRecipeBuilder.Result(p_126142_, this.result, this.count, this.group == null ? "" : this.group, determineBookCategory(this.category), this.rows, this.key, this.advancement, p_126142_.withPrefix("recipes/" + this.category.getFolderName() + "/"), this.showNotification));
}
private void ensureValid(ResourceLocation p_126144_) {
if (this.rows.isEmpty()) {
throw new IllegalStateException("No pattern is defined for shaped recipe " + p_126144_ + "!");
} else {
Set<Character> set = Sets.newHashSet(this.key.keySet());
set.remove(' ');
for(String s : this.rows) {
for(int i = 0; i < s.length(); ++i) {
char c0 = s.charAt(i);
if (!this.key.containsKey(c0) && c0 != ' ') {
throw new IllegalStateException("Pattern in recipe " + p_126144_ + " uses undefined symbol '" + c0 + "'");
}
set.remove(c0);
}
}
if (!set.isEmpty()) {
throw new IllegalStateException("Ingredients are defined but not used in pattern for recipe " + p_126144_);
} else if (this.rows.size() == 1 && this.rows.get(0).length() == 1) {
throw new IllegalStateException("Shaped recipe " + p_126144_ + " only takes in a single item - should it be a shapeless recipe instead?");
} else if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_126144_);
}
}
}
public static class Result extends CraftingRecipeBuilder.CraftingResult {
private final ResourceLocation id;
private final Item result;
private final int count;
private final String group;
private final List<String> pattern;
private final Map<Character, Ingredient> key;
private final Advancement.Builder advancement;
private final ResourceLocation advancementId;
private final boolean showNotification;
public Result(ResourceLocation p_273548_, Item p_273530_, int p_272738_, String p_273549_, CraftingBookCategory p_273500_, List<String> p_273744_, Map<Character, Ingredient> p_272991_, Advancement.Builder p_273260_, ResourceLocation p_273106_, boolean p_272862_) {
super(p_273500_);
this.id = p_273548_;
this.result = p_273530_;
this.count = p_272738_;
this.group = p_273549_;
this.pattern = p_273744_;
this.key = p_272991_;
this.advancement = p_273260_;
this.advancementId = p_273106_;
this.showNotification = p_272862_;
}
public void serializeRecipeData(JsonObject p_126167_) {
super.serializeRecipeData(p_126167_);
if (!this.group.isEmpty()) {
p_126167_.addProperty("group", this.group);
}
JsonArray jsonarray = new JsonArray();
for(String s : this.pattern) {
jsonarray.add(s);
}
p_126167_.add("pattern", jsonarray);
JsonObject jsonobject = new JsonObject();
for(Map.Entry<Character, Ingredient> entry : this.key.entrySet()) {
jsonobject.add(String.valueOf(entry.getKey()), entry.getValue().toJson());
}
p_126167_.add("key", jsonobject);
JsonObject jsonobject1 = new JsonObject();
jsonobject1.addProperty("item", BuiltInRegistries.ITEM.getKey(this.result).toString());
if (this.count > 1) {
jsonobject1.addProperty("count", this.count);
}
p_126167_.add("result", jsonobject1);
p_126167_.addProperty("show_notification", this.showNotification);
}
public RecipeSerializer<?> getType() {
return RecipeSerializer.SHAPED_RECIPE;
}
public ResourceLocation getId() {
return this.id;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,160 @@
package net.minecraft.data.recipes;
import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.List;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
public class ShapelessRecipeBuilder extends CraftingRecipeBuilder implements RecipeBuilder {
private final RecipeCategory category;
private final Item result;
private final int count;
private final List<Ingredient> ingredients = Lists.newArrayList();
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
@Nullable
private String group;
public ShapelessRecipeBuilder(RecipeCategory p_250837_, ItemLike p_251897_, int p_252227_) {
this.category = p_250837_;
this.result = p_251897_.asItem();
this.count = p_252227_;
}
public static ShapelessRecipeBuilder shapeless(RecipeCategory p_250714_, ItemLike p_249659_) {
return new ShapelessRecipeBuilder(p_250714_, p_249659_, 1);
}
public static ShapelessRecipeBuilder shapeless(RecipeCategory p_252339_, ItemLike p_250836_, int p_249928_) {
return new ShapelessRecipeBuilder(p_252339_, p_250836_, p_249928_);
}
public ShapelessRecipeBuilder requires(TagKey<Item> p_206420_) {
return this.requires(Ingredient.of(p_206420_));
}
public ShapelessRecipeBuilder requires(ItemLike p_126210_) {
return this.requires(p_126210_, 1);
}
public ShapelessRecipeBuilder requires(ItemLike p_126212_, int p_126213_) {
for(int i = 0; i < p_126213_; ++i) {
this.requires(Ingredient.of(p_126212_));
}
return this;
}
public ShapelessRecipeBuilder requires(Ingredient p_126185_) {
return this.requires(p_126185_, 1);
}
public ShapelessRecipeBuilder requires(Ingredient p_126187_, int p_126188_) {
for(int i = 0; i < p_126188_; ++i) {
this.ingredients.add(p_126187_);
}
return this;
}
public ShapelessRecipeBuilder unlockedBy(String p_126197_, CriterionTriggerInstance p_126198_) {
this.advancement.addCriterion(p_126197_, p_126198_);
return this;
}
public ShapelessRecipeBuilder group(@Nullable String p_126195_) {
this.group = p_126195_;
return this;
}
public Item getResult() {
return this.result;
}
public void save(Consumer<FinishedRecipe> p_126205_, ResourceLocation p_126206_) {
this.ensureValid(p_126206_);
this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_126206_)).rewards(AdvancementRewards.Builder.recipe(p_126206_)).requirements(RequirementsStrategy.OR);
p_126205_.accept(new ShapelessRecipeBuilder.Result(p_126206_, this.result, this.count, this.group == null ? "" : this.group, determineBookCategory(this.category), this.ingredients, this.advancement, p_126206_.withPrefix("recipes/" + this.category.getFolderName() + "/")));
}
private void ensureValid(ResourceLocation p_126208_) {
if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_126208_);
}
}
public static class Result extends CraftingRecipeBuilder.CraftingResult {
private final ResourceLocation id;
private final Item result;
private final int count;
private final String group;
private final List<Ingredient> ingredients;
private final Advancement.Builder advancement;
private final ResourceLocation advancementId;
public Result(ResourceLocation p_249007_, Item p_248667_, int p_249014_, String p_248592_, CraftingBookCategory p_249485_, List<Ingredient> p_252312_, Advancement.Builder p_249909_, ResourceLocation p_249109_) {
super(p_249485_);
this.id = p_249007_;
this.result = p_248667_;
this.count = p_249014_;
this.group = p_248592_;
this.ingredients = p_252312_;
this.advancement = p_249909_;
this.advancementId = p_249109_;
}
public void serializeRecipeData(JsonObject p_126230_) {
super.serializeRecipeData(p_126230_);
if (!this.group.isEmpty()) {
p_126230_.addProperty("group", this.group);
}
JsonArray jsonarray = new JsonArray();
for(Ingredient ingredient : this.ingredients) {
jsonarray.add(ingredient.toJson());
}
p_126230_.add("ingredients", jsonarray);
JsonObject jsonobject = new JsonObject();
jsonobject.addProperty("item", BuiltInRegistries.ITEM.getKey(this.result).toString());
if (this.count > 1) {
jsonobject.addProperty("count", this.count);
}
p_126230_.add("result", jsonobject);
}
public RecipeSerializer<?> getType() {
return RecipeSerializer.SHAPELESS_RECIPE;
}
public ResourceLocation getId() {
return this.id;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,168 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.AbstractCookingRecipe;
import net.minecraft.world.item.crafting.CookingBookCategory;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
public class SimpleCookingRecipeBuilder implements RecipeBuilder {
private final RecipeCategory category;
private final CookingBookCategory bookCategory;
private final Item result;
private final Ingredient ingredient;
private final float experience;
private final int cookingTime;
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
@Nullable
private String group;
private final RecipeSerializer<? extends AbstractCookingRecipe> serializer;
private SimpleCookingRecipeBuilder(RecipeCategory p_251345_, CookingBookCategory p_251607_, ItemLike p_252112_, Ingredient p_250362_, float p_251204_, int p_250189_, RecipeSerializer<? extends AbstractCookingRecipe> p_249915_) {
this.category = p_251345_;
this.bookCategory = p_251607_;
this.result = p_252112_.asItem();
this.ingredient = p_250362_;
this.experience = p_251204_;
this.cookingTime = p_250189_;
this.serializer = p_249915_;
}
public static SimpleCookingRecipeBuilder generic(Ingredient p_250999_, RecipeCategory p_248815_, ItemLike p_249766_, float p_251320_, int p_248693_, RecipeSerializer<? extends AbstractCookingRecipe> p_250921_) {
return new SimpleCookingRecipeBuilder(p_248815_, determineRecipeCategory(p_250921_, p_249766_), p_249766_, p_250999_, p_251320_, p_248693_, p_250921_);
}
public static SimpleCookingRecipeBuilder campfireCooking(Ingredient p_249393_, RecipeCategory p_249372_, ItemLike p_251516_, float p_252321_, int p_251916_) {
return new SimpleCookingRecipeBuilder(p_249372_, CookingBookCategory.FOOD, p_251516_, p_249393_, p_252321_, p_251916_, RecipeSerializer.CAMPFIRE_COOKING_RECIPE);
}
public static SimpleCookingRecipeBuilder blasting(Ingredient p_252115_, RecipeCategory p_249421_, ItemLike p_251247_, float p_250383_, int p_250476_) {
return new SimpleCookingRecipeBuilder(p_249421_, determineBlastingRecipeCategory(p_251247_), p_251247_, p_252115_, p_250383_, p_250476_, RecipeSerializer.BLASTING_RECIPE);
}
public static SimpleCookingRecipeBuilder smelting(Ingredient p_249223_, RecipeCategory p_251240_, ItemLike p_249551_, float p_249452_, int p_250496_) {
return new SimpleCookingRecipeBuilder(p_251240_, determineSmeltingRecipeCategory(p_249551_), p_249551_, p_249223_, p_249452_, p_250496_, RecipeSerializer.SMELTING_RECIPE);
}
public static SimpleCookingRecipeBuilder smoking(Ingredient p_248930_, RecipeCategory p_250319_, ItemLike p_250377_, float p_252329_, int p_250482_) {
return new SimpleCookingRecipeBuilder(p_250319_, CookingBookCategory.FOOD, p_250377_, p_248930_, p_252329_, p_250482_, RecipeSerializer.SMOKING_RECIPE);
}
public SimpleCookingRecipeBuilder unlockedBy(String p_126255_, CriterionTriggerInstance p_126256_) {
this.advancement.addCriterion(p_126255_, p_126256_);
return this;
}
public SimpleCookingRecipeBuilder group(@Nullable String p_176795_) {
this.group = p_176795_;
return this;
}
public Item getResult() {
return this.result;
}
public void save(Consumer<FinishedRecipe> p_126263_, ResourceLocation p_126264_) {
this.ensureValid(p_126264_);
this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_126264_)).rewards(AdvancementRewards.Builder.recipe(p_126264_)).requirements(RequirementsStrategy.OR);
p_126263_.accept(new SimpleCookingRecipeBuilder.Result(p_126264_, this.group == null ? "" : this.group, this.bookCategory, this.ingredient, this.result, this.experience, this.cookingTime, this.advancement, p_126264_.withPrefix("recipes/" + this.category.getFolderName() + "/"), this.serializer));
}
private static CookingBookCategory determineSmeltingRecipeCategory(ItemLike p_251938_) {
if (p_251938_.asItem().isEdible()) {
return CookingBookCategory.FOOD;
} else {
return p_251938_.asItem() instanceof BlockItem ? CookingBookCategory.BLOCKS : CookingBookCategory.MISC;
}
}
private static CookingBookCategory determineBlastingRecipeCategory(ItemLike p_249047_) {
return p_249047_.asItem() instanceof BlockItem ? CookingBookCategory.BLOCKS : CookingBookCategory.MISC;
}
private static CookingBookCategory determineRecipeCategory(RecipeSerializer<? extends AbstractCookingRecipe> p_251261_, ItemLike p_249582_) {
if (p_251261_ == RecipeSerializer.SMELTING_RECIPE) {
return determineSmeltingRecipeCategory(p_249582_);
} else if (p_251261_ == RecipeSerializer.BLASTING_RECIPE) {
return determineBlastingRecipeCategory(p_249582_);
} else if (p_251261_ != RecipeSerializer.SMOKING_RECIPE && p_251261_ != RecipeSerializer.CAMPFIRE_COOKING_RECIPE) {
throw new IllegalStateException("Unknown cooking recipe type");
} else {
return CookingBookCategory.FOOD;
}
}
private void ensureValid(ResourceLocation p_126266_) {
if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_126266_);
}
}
static class Result implements FinishedRecipe {
private final ResourceLocation id;
private final String group;
private final CookingBookCategory category;
private final Ingredient ingredient;
private final Item result;
private final float experience;
private final int cookingTime;
private final Advancement.Builder advancement;
private final ResourceLocation advancementId;
private final RecipeSerializer<? extends AbstractCookingRecipe> serializer;
public Result(ResourceLocation p_252275_, String p_248665_, CookingBookCategory p_251944_, Ingredient p_249473_, Item p_252028_, float p_249206_, int p_251002_, Advancement.Builder p_249151_, ResourceLocation p_252090_, RecipeSerializer<? extends AbstractCookingRecipe> p_249537_) {
this.id = p_252275_;
this.group = p_248665_;
this.category = p_251944_;
this.ingredient = p_249473_;
this.result = p_252028_;
this.experience = p_249206_;
this.cookingTime = p_251002_;
this.advancement = p_249151_;
this.advancementId = p_252090_;
this.serializer = p_249537_;
}
public void serializeRecipeData(JsonObject p_126297_) {
if (!this.group.isEmpty()) {
p_126297_.addProperty("group", this.group);
}
p_126297_.addProperty("category", this.category.getSerializedName());
p_126297_.add("ingredient", this.ingredient.toJson());
p_126297_.addProperty("result", BuiltInRegistries.ITEM.getKey(this.result).toString());
p_126297_.addProperty("experience", this.experience);
p_126297_.addProperty("cookingtime", this.cookingTime);
}
public RecipeSerializer<?> getType() {
return this.serializer;
}
public ResourceLocation getId() {
return this.id;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,119 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
public class SingleItemRecipeBuilder implements RecipeBuilder {
private final RecipeCategory category;
private final Item result;
private final Ingredient ingredient;
private final int count;
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
@Nullable
private String group;
private final RecipeSerializer<?> type;
public SingleItemRecipeBuilder(RecipeCategory p_251425_, RecipeSerializer<?> p_249762_, Ingredient p_251221_, ItemLike p_251302_, int p_250964_) {
this.category = p_251425_;
this.type = p_249762_;
this.result = p_251302_.asItem();
this.ingredient = p_251221_;
this.count = p_250964_;
}
public static SingleItemRecipeBuilder stonecutting(Ingredient p_248596_, RecipeCategory p_250503_, ItemLike p_250269_) {
return new SingleItemRecipeBuilder(p_250503_, RecipeSerializer.STONECUTTER, p_248596_, p_250269_, 1);
}
public static SingleItemRecipeBuilder stonecutting(Ingredient p_251375_, RecipeCategory p_248984_, ItemLike p_250105_, int p_249506_) {
return new SingleItemRecipeBuilder(p_248984_, RecipeSerializer.STONECUTTER, p_251375_, p_250105_, p_249506_);
}
public SingleItemRecipeBuilder unlockedBy(String p_176810_, CriterionTriggerInstance p_176811_) {
this.advancement.addCriterion(p_176810_, p_176811_);
return this;
}
public SingleItemRecipeBuilder group(@Nullable String p_176808_) {
this.group = p_176808_;
return this;
}
public Item getResult() {
return this.result;
}
public void save(Consumer<FinishedRecipe> p_126327_, ResourceLocation p_126328_) {
this.ensureValid(p_126328_);
this.advancement.parent(ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_126328_)).rewards(AdvancementRewards.Builder.recipe(p_126328_)).requirements(RequirementsStrategy.OR);
p_126327_.accept(new SingleItemRecipeBuilder.Result(p_126328_, this.type, this.group == null ? "" : this.group, this.ingredient, this.result, this.count, this.advancement, p_126328_.withPrefix("recipes/" + this.category.getFolderName() + "/")));
}
private void ensureValid(ResourceLocation p_126330_) {
if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_126330_);
}
}
public static class Result implements FinishedRecipe {
private final ResourceLocation id;
private final String group;
private final Ingredient ingredient;
private final Item result;
private final int count;
private final Advancement.Builder advancement;
private final ResourceLocation advancementId;
private final RecipeSerializer<?> type;
public Result(ResourceLocation p_126340_, RecipeSerializer<?> p_126341_, String p_126342_, Ingredient p_126343_, Item p_126344_, int p_126345_, Advancement.Builder p_126346_, ResourceLocation p_126347_) {
this.id = p_126340_;
this.type = p_126341_;
this.group = p_126342_;
this.ingredient = p_126343_;
this.result = p_126344_;
this.count = p_126345_;
this.advancement = p_126346_;
this.advancementId = p_126347_;
}
public void serializeRecipeData(JsonObject p_126349_) {
if (!this.group.isEmpty()) {
p_126349_.addProperty("group", this.group);
}
p_126349_.add("ingredient", this.ingredient.toJson());
p_126349_.addProperty("result", BuiltInRegistries.ITEM.getKey(this.result).toString());
p_126349_.addProperty("count", this.count);
}
public ResourceLocation getId() {
return this.id;
}
public RecipeSerializer<?> getType() {
return this.type;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,88 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
public class SmithingTransformRecipeBuilder {
private final Ingredient template;
private final Ingredient base;
private final Ingredient addition;
private final RecipeCategory category;
private final Item result;
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
private final RecipeSerializer<?> type;
public SmithingTransformRecipeBuilder(RecipeSerializer<?> p_266683_, Ingredient p_266973_, Ingredient p_267047_, Ingredient p_267009_, RecipeCategory p_266694_, Item p_267183_) {
this.category = p_266694_;
this.type = p_266683_;
this.template = p_266973_;
this.base = p_267047_;
this.addition = p_267009_;
this.result = p_267183_;
}
public static SmithingTransformRecipeBuilder smithing(Ingredient p_267071_, Ingredient p_266959_, Ingredient p_266803_, RecipeCategory p_266757_, Item p_267256_) {
return new SmithingTransformRecipeBuilder(RecipeSerializer.SMITHING_TRANSFORM, p_267071_, p_266959_, p_266803_, p_266757_, p_267256_);
}
public SmithingTransformRecipeBuilder unlocks(String p_266919_, CriterionTriggerInstance p_267277_) {
this.advancement.addCriterion(p_266919_, p_267277_);
return this;
}
public void save(Consumer<FinishedRecipe> p_267068_, String p_267035_) {
this.save(p_267068_, new ResourceLocation(p_267035_));
}
public void save(Consumer<FinishedRecipe> p_267089_, ResourceLocation p_267287_) {
this.ensureValid(p_267287_);
this.advancement.parent(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_267287_)).rewards(AdvancementRewards.Builder.recipe(p_267287_)).requirements(RequirementsStrategy.OR);
p_267089_.accept(new SmithingTransformRecipeBuilder.Result(p_267287_, this.type, this.template, this.base, this.addition, this.result, this.advancement, p_267287_.withPrefix("recipes/" + this.category.getFolderName() + "/")));
}
private void ensureValid(ResourceLocation p_267259_) {
if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_267259_);
}
}
public static record Result(ResourceLocation id, RecipeSerializer<?> type, Ingredient template, Ingredient base, Ingredient addition, Item result, Advancement.Builder advancement, ResourceLocation advancementId) implements FinishedRecipe {
public void serializeRecipeData(JsonObject p_266713_) {
p_266713_.add("template", this.template.toJson());
p_266713_.add("base", this.base.toJson());
p_266713_.add("addition", this.addition.toJson());
JsonObject jsonobject = new JsonObject();
jsonobject.addProperty("item", BuiltInRegistries.ITEM.getKey(this.result).toString());
p_266713_.add("result", jsonobject);
}
public ResourceLocation getId() {
return this.id;
}
public RecipeSerializer<?> getType() {
return this.type;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,77 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementRewards;
import net.minecraft.advancements.CriterionTriggerInstance;
import net.minecraft.advancements.RequirementsStrategy;
import net.minecraft.advancements.critereon.RecipeUnlockedTrigger;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
public class SmithingTrimRecipeBuilder {
private final RecipeCategory category;
private final Ingredient template;
private final Ingredient base;
private final Ingredient addition;
private final Advancement.Builder advancement = Advancement.Builder.recipeAdvancement();
private final RecipeSerializer<?> type;
public SmithingTrimRecipeBuilder(RecipeSerializer<?> p_267085_, RecipeCategory p_267007_, Ingredient p_266712_, Ingredient p_267018_, Ingredient p_267264_) {
this.category = p_267007_;
this.type = p_267085_;
this.template = p_266712_;
this.base = p_267018_;
this.addition = p_267264_;
}
public static SmithingTrimRecipeBuilder smithingTrim(Ingredient p_266812_, Ingredient p_266843_, Ingredient p_267309_, RecipeCategory p_267269_) {
return new SmithingTrimRecipeBuilder(RecipeSerializer.SMITHING_TRIM, p_267269_, p_266812_, p_266843_, p_267309_);
}
public SmithingTrimRecipeBuilder unlocks(String p_266882_, CriterionTriggerInstance p_267233_) {
this.advancement.addCriterion(p_266882_, p_267233_);
return this;
}
public void save(Consumer<FinishedRecipe> p_267231_, ResourceLocation p_266718_) {
this.ensureValid(p_266718_);
this.advancement.parent(RecipeBuilder.ROOT_RECIPE_ADVANCEMENT).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(p_266718_)).rewards(AdvancementRewards.Builder.recipe(p_266718_)).requirements(RequirementsStrategy.OR);
p_267231_.accept(new SmithingTrimRecipeBuilder.Result(p_266718_, this.type, this.template, this.base, this.addition, this.advancement, p_266718_.withPrefix("recipes/" + this.category.getFolderName() + "/")));
}
private void ensureValid(ResourceLocation p_267040_) {
if (this.advancement.getCriteria().isEmpty()) {
throw new IllegalStateException("No way of obtaining recipe " + p_267040_);
}
}
public static record Result(ResourceLocation id, RecipeSerializer<?> type, Ingredient template, Ingredient base, Ingredient addition, Advancement.Builder advancement, ResourceLocation advancementId) implements FinishedRecipe {
public void serializeRecipeData(JsonObject p_267008_) {
p_267008_.add("template", this.template.toJson());
p_267008_.add("base", this.base.toJson());
p_267008_.add("addition", this.addition.toJson());
}
public ResourceLocation getId() {
return this.id;
}
public RecipeSerializer<?> getType() {
return this.type;
}
@Nullable
public JsonObject serializeAdvancement() {
return this.advancement.serializeToJson();
}
@Nullable
public ResourceLocation getAdvancementId() {
return this.advancementId;
}
}
}

View File

@@ -0,0 +1,42 @@
package net.minecraft.data.recipes;
import com.google.gson.JsonObject;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.CraftingBookCategory;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
public class SpecialRecipeBuilder extends CraftingRecipeBuilder {
final RecipeSerializer<?> serializer;
public SpecialRecipeBuilder(RecipeSerializer<?> p_250173_) {
this.serializer = p_250173_;
}
public static SpecialRecipeBuilder special(RecipeSerializer<? extends CraftingRecipe> p_249458_) {
return new SpecialRecipeBuilder(p_249458_);
}
public void save(Consumer<FinishedRecipe> p_126360_, final String p_126361_) {
p_126360_.accept(new CraftingRecipeBuilder.CraftingResult(CraftingBookCategory.MISC) {
public RecipeSerializer<?> getType() {
return SpecialRecipeBuilder.this.serializer;
}
public ResourceLocation getId() {
return new ResourceLocation(p_126361_);
}
@Nullable
public JsonObject serializeAdvancement() {
return null;
}
public ResourceLocation getAdvancementId() {
return new ResourceLocation("");
}
});
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.recipes;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,19 @@
package net.minecraft.data.recipes.packs;
import java.util.function.Consumer;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.world.item.Items;
public class BundleRecipeProvider extends RecipeProvider {
public BundleRecipeProvider(PackOutput p_248813_) {
super(p_248813_);
}
protected void buildRecipes(Consumer<FinishedRecipe> p_250665_) {
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.BUNDLE).define('#', Items.RABBIT_HIDE).define('-', Items.STRING).pattern("-#-").pattern("# #").pattern("###").unlockedBy("has_string", has(Items.STRING)).save(p_250665_);
}
}

View File

@@ -0,0 +1,895 @@
package net.minecraft.data.recipes.packs;
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.critereon.ContextAwarePredicate;
import net.minecraft.advancements.critereon.ImpossibleTrigger;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.advancements.critereon.PlayerTrigger;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeBuilder;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.data.recipes.ShapelessRecipeBuilder;
import net.minecraft.data.recipes.SimpleCookingRecipeBuilder;
import net.minecraft.data.recipes.SingleItemRecipeBuilder;
import net.minecraft.data.recipes.SpecialRecipeBuilder;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Blocks;
public class VanillaRecipeProvider extends RecipeProvider {
public static final ImmutableList<ItemLike> COAL_SMELTABLES = ImmutableList.of(Items.COAL_ORE, Items.DEEPSLATE_COAL_ORE);
public static final ImmutableList<ItemLike> IRON_SMELTABLES = ImmutableList.of(Items.IRON_ORE, Items.DEEPSLATE_IRON_ORE, Items.RAW_IRON);
public static final ImmutableList<ItemLike> COPPER_SMELTABLES = ImmutableList.of(Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER);
public static final ImmutableList<ItemLike> GOLD_SMELTABLES = ImmutableList.of(Items.GOLD_ORE, Items.DEEPSLATE_GOLD_ORE, Items.NETHER_GOLD_ORE, Items.RAW_GOLD);
public static final ImmutableList<ItemLike> DIAMOND_SMELTABLES = ImmutableList.of(Items.DIAMOND_ORE, Items.DEEPSLATE_DIAMOND_ORE);
public static final ImmutableList<ItemLike> LAPIS_SMELTABLES = ImmutableList.of(Items.LAPIS_ORE, Items.DEEPSLATE_LAPIS_ORE);
public static final ImmutableList<ItemLike> REDSTONE_SMELTABLES = ImmutableList.of(Items.REDSTONE_ORE, Items.DEEPSLATE_REDSTONE_ORE);
public static final ImmutableList<ItemLike> EMERALD_SMELTABLES = ImmutableList.of(Items.EMERALD_ORE, Items.DEEPSLATE_EMERALD_ORE);
public VanillaRecipeProvider(PackOutput p_250820_) {
super(p_250820_);
}
public CompletableFuture<?> run(CachedOutput p_254376_) {
return CompletableFuture.allOf(super.run(p_254376_), this.buildAdvancement(p_254376_, RecipeBuilder.ROOT_RECIPE_ADVANCEMENT, Advancement.Builder.recipeAdvancement().addCriterion("impossible", new ImpossibleTrigger.TriggerInstance())));
}
protected void buildRecipes(Consumer<FinishedRecipe> p_250804_) {
generateForEnabledBlockFamilies(p_250804_, FeatureFlagSet.of(FeatureFlags.VANILLA));
planksFromLog(p_250804_, Blocks.ACACIA_PLANKS, ItemTags.ACACIA_LOGS, 4);
planksFromLogs(p_250804_, Blocks.BIRCH_PLANKS, ItemTags.BIRCH_LOGS, 4);
planksFromLogs(p_250804_, Blocks.CRIMSON_PLANKS, ItemTags.CRIMSON_STEMS, 4);
planksFromLog(p_250804_, Blocks.DARK_OAK_PLANKS, ItemTags.DARK_OAK_LOGS, 4);
planksFromLogs(p_250804_, Blocks.JUNGLE_PLANKS, ItemTags.JUNGLE_LOGS, 4);
planksFromLogs(p_250804_, Blocks.OAK_PLANKS, ItemTags.OAK_LOGS, 4);
planksFromLogs(p_250804_, Blocks.SPRUCE_PLANKS, ItemTags.SPRUCE_LOGS, 4);
planksFromLogs(p_250804_, Blocks.WARPED_PLANKS, ItemTags.WARPED_STEMS, 4);
planksFromLogs(p_250804_, Blocks.MANGROVE_PLANKS, ItemTags.MANGROVE_LOGS, 4);
woodFromLogs(p_250804_, Blocks.ACACIA_WOOD, Blocks.ACACIA_LOG);
woodFromLogs(p_250804_, Blocks.BIRCH_WOOD, Blocks.BIRCH_LOG);
woodFromLogs(p_250804_, Blocks.DARK_OAK_WOOD, Blocks.DARK_OAK_LOG);
woodFromLogs(p_250804_, Blocks.JUNGLE_WOOD, Blocks.JUNGLE_LOG);
woodFromLogs(p_250804_, Blocks.OAK_WOOD, Blocks.OAK_LOG);
woodFromLogs(p_250804_, Blocks.SPRUCE_WOOD, Blocks.SPRUCE_LOG);
woodFromLogs(p_250804_, Blocks.CRIMSON_HYPHAE, Blocks.CRIMSON_STEM);
woodFromLogs(p_250804_, Blocks.WARPED_HYPHAE, Blocks.WARPED_STEM);
woodFromLogs(p_250804_, Blocks.MANGROVE_WOOD, Blocks.MANGROVE_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_ACACIA_WOOD, Blocks.STRIPPED_ACACIA_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_BIRCH_WOOD, Blocks.STRIPPED_BIRCH_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_DARK_OAK_WOOD, Blocks.STRIPPED_DARK_OAK_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_JUNGLE_WOOD, Blocks.STRIPPED_JUNGLE_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_OAK_WOOD, Blocks.STRIPPED_OAK_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_SPRUCE_WOOD, Blocks.STRIPPED_SPRUCE_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_CRIMSON_HYPHAE, Blocks.STRIPPED_CRIMSON_STEM);
woodFromLogs(p_250804_, Blocks.STRIPPED_WARPED_HYPHAE, Blocks.STRIPPED_WARPED_STEM);
woodFromLogs(p_250804_, Blocks.STRIPPED_MANGROVE_WOOD, Blocks.STRIPPED_MANGROVE_LOG);
woodenBoat(p_250804_, Items.ACACIA_BOAT, Blocks.ACACIA_PLANKS);
woodenBoat(p_250804_, Items.BIRCH_BOAT, Blocks.BIRCH_PLANKS);
woodenBoat(p_250804_, Items.DARK_OAK_BOAT, Blocks.DARK_OAK_PLANKS);
woodenBoat(p_250804_, Items.JUNGLE_BOAT, Blocks.JUNGLE_PLANKS);
woodenBoat(p_250804_, Items.OAK_BOAT, Blocks.OAK_PLANKS);
woodenBoat(p_250804_, Items.SPRUCE_BOAT, Blocks.SPRUCE_PLANKS);
woodenBoat(p_250804_, Items.MANGROVE_BOAT, Blocks.MANGROVE_PLANKS);
List<Item> list = List.of(Items.BLACK_DYE, Items.BLUE_DYE, Items.BROWN_DYE, Items.CYAN_DYE, Items.GRAY_DYE, Items.GREEN_DYE, Items.LIGHT_BLUE_DYE, Items.LIGHT_GRAY_DYE, Items.LIME_DYE, Items.MAGENTA_DYE, Items.ORANGE_DYE, Items.PINK_DYE, Items.PURPLE_DYE, Items.RED_DYE, Items.YELLOW_DYE, Items.WHITE_DYE);
List<Item> list1 = List.of(Items.BLACK_WOOL, Items.BLUE_WOOL, Items.BROWN_WOOL, Items.CYAN_WOOL, Items.GRAY_WOOL, Items.GREEN_WOOL, Items.LIGHT_BLUE_WOOL, Items.LIGHT_GRAY_WOOL, Items.LIME_WOOL, Items.MAGENTA_WOOL, Items.ORANGE_WOOL, Items.PINK_WOOL, Items.PURPLE_WOOL, Items.RED_WOOL, Items.YELLOW_WOOL, Items.WHITE_WOOL);
List<Item> list2 = List.of(Items.BLACK_BED, Items.BLUE_BED, Items.BROWN_BED, Items.CYAN_BED, Items.GRAY_BED, Items.GREEN_BED, Items.LIGHT_BLUE_BED, Items.LIGHT_GRAY_BED, Items.LIME_BED, Items.MAGENTA_BED, Items.ORANGE_BED, Items.PINK_BED, Items.PURPLE_BED, Items.RED_BED, Items.YELLOW_BED, Items.WHITE_BED);
List<Item> list3 = List.of(Items.BLACK_CARPET, Items.BLUE_CARPET, Items.BROWN_CARPET, Items.CYAN_CARPET, Items.GRAY_CARPET, Items.GREEN_CARPET, Items.LIGHT_BLUE_CARPET, Items.LIGHT_GRAY_CARPET, Items.LIME_CARPET, Items.MAGENTA_CARPET, Items.ORANGE_CARPET, Items.PINK_CARPET, Items.PURPLE_CARPET, Items.RED_CARPET, Items.YELLOW_CARPET, Items.WHITE_CARPET);
colorBlockWithDye(p_250804_, list, list1, "wool");
colorBlockWithDye(p_250804_, list, list2, "bed");
colorBlockWithDye(p_250804_, list, list3, "carpet");
carpet(p_250804_, Blocks.BLACK_CARPET, Blocks.BLACK_WOOL);
bedFromPlanksAndWool(p_250804_, Items.BLACK_BED, Blocks.BLACK_WOOL);
banner(p_250804_, Items.BLACK_BANNER, Blocks.BLACK_WOOL);
carpet(p_250804_, Blocks.BLUE_CARPET, Blocks.BLUE_WOOL);
bedFromPlanksAndWool(p_250804_, Items.BLUE_BED, Blocks.BLUE_WOOL);
banner(p_250804_, Items.BLUE_BANNER, Blocks.BLUE_WOOL);
carpet(p_250804_, Blocks.BROWN_CARPET, Blocks.BROWN_WOOL);
bedFromPlanksAndWool(p_250804_, Items.BROWN_BED, Blocks.BROWN_WOOL);
banner(p_250804_, Items.BROWN_BANNER, Blocks.BROWN_WOOL);
carpet(p_250804_, Blocks.CYAN_CARPET, Blocks.CYAN_WOOL);
bedFromPlanksAndWool(p_250804_, Items.CYAN_BED, Blocks.CYAN_WOOL);
banner(p_250804_, Items.CYAN_BANNER, Blocks.CYAN_WOOL);
carpet(p_250804_, Blocks.GRAY_CARPET, Blocks.GRAY_WOOL);
bedFromPlanksAndWool(p_250804_, Items.GRAY_BED, Blocks.GRAY_WOOL);
banner(p_250804_, Items.GRAY_BANNER, Blocks.GRAY_WOOL);
carpet(p_250804_, Blocks.GREEN_CARPET, Blocks.GREEN_WOOL);
bedFromPlanksAndWool(p_250804_, Items.GREEN_BED, Blocks.GREEN_WOOL);
banner(p_250804_, Items.GREEN_BANNER, Blocks.GREEN_WOOL);
carpet(p_250804_, Blocks.LIGHT_BLUE_CARPET, Blocks.LIGHT_BLUE_WOOL);
bedFromPlanksAndWool(p_250804_, Items.LIGHT_BLUE_BED, Blocks.LIGHT_BLUE_WOOL);
banner(p_250804_, Items.LIGHT_BLUE_BANNER, Blocks.LIGHT_BLUE_WOOL);
carpet(p_250804_, Blocks.LIGHT_GRAY_CARPET, Blocks.LIGHT_GRAY_WOOL);
bedFromPlanksAndWool(p_250804_, Items.LIGHT_GRAY_BED, Blocks.LIGHT_GRAY_WOOL);
banner(p_250804_, Items.LIGHT_GRAY_BANNER, Blocks.LIGHT_GRAY_WOOL);
carpet(p_250804_, Blocks.LIME_CARPET, Blocks.LIME_WOOL);
bedFromPlanksAndWool(p_250804_, Items.LIME_BED, Blocks.LIME_WOOL);
banner(p_250804_, Items.LIME_BANNER, Blocks.LIME_WOOL);
carpet(p_250804_, Blocks.MAGENTA_CARPET, Blocks.MAGENTA_WOOL);
bedFromPlanksAndWool(p_250804_, Items.MAGENTA_BED, Blocks.MAGENTA_WOOL);
banner(p_250804_, Items.MAGENTA_BANNER, Blocks.MAGENTA_WOOL);
carpet(p_250804_, Blocks.ORANGE_CARPET, Blocks.ORANGE_WOOL);
bedFromPlanksAndWool(p_250804_, Items.ORANGE_BED, Blocks.ORANGE_WOOL);
banner(p_250804_, Items.ORANGE_BANNER, Blocks.ORANGE_WOOL);
carpet(p_250804_, Blocks.PINK_CARPET, Blocks.PINK_WOOL);
bedFromPlanksAndWool(p_250804_, Items.PINK_BED, Blocks.PINK_WOOL);
banner(p_250804_, Items.PINK_BANNER, Blocks.PINK_WOOL);
carpet(p_250804_, Blocks.PURPLE_CARPET, Blocks.PURPLE_WOOL);
bedFromPlanksAndWool(p_250804_, Items.PURPLE_BED, Blocks.PURPLE_WOOL);
banner(p_250804_, Items.PURPLE_BANNER, Blocks.PURPLE_WOOL);
carpet(p_250804_, Blocks.RED_CARPET, Blocks.RED_WOOL);
bedFromPlanksAndWool(p_250804_, Items.RED_BED, Blocks.RED_WOOL);
banner(p_250804_, Items.RED_BANNER, Blocks.RED_WOOL);
carpet(p_250804_, Blocks.WHITE_CARPET, Blocks.WHITE_WOOL);
bedFromPlanksAndWool(p_250804_, Items.WHITE_BED, Blocks.WHITE_WOOL);
banner(p_250804_, Items.WHITE_BANNER, Blocks.WHITE_WOOL);
carpet(p_250804_, Blocks.YELLOW_CARPET, Blocks.YELLOW_WOOL);
bedFromPlanksAndWool(p_250804_, Items.YELLOW_BED, Blocks.YELLOW_WOOL);
banner(p_250804_, Items.YELLOW_BANNER, Blocks.YELLOW_WOOL);
carpet(p_250804_, Blocks.MOSS_CARPET, Blocks.MOSS_BLOCK);
stainedGlassFromGlassAndDye(p_250804_, Blocks.BLACK_STAINED_GLASS, Items.BLACK_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.BLACK_STAINED_GLASS_PANE, Blocks.BLACK_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.BLACK_STAINED_GLASS_PANE, Items.BLACK_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.BLUE_STAINED_GLASS, Items.BLUE_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.BLUE_STAINED_GLASS_PANE, Blocks.BLUE_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.BLUE_STAINED_GLASS_PANE, Items.BLUE_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.BROWN_STAINED_GLASS, Items.BROWN_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.BROWN_STAINED_GLASS_PANE, Blocks.BROWN_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.BROWN_STAINED_GLASS_PANE, Items.BROWN_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.CYAN_STAINED_GLASS, Items.CYAN_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.CYAN_STAINED_GLASS_PANE, Blocks.CYAN_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.CYAN_STAINED_GLASS_PANE, Items.CYAN_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.GRAY_STAINED_GLASS, Items.GRAY_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.GRAY_STAINED_GLASS_PANE, Blocks.GRAY_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.GRAY_STAINED_GLASS_PANE, Items.GRAY_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.GREEN_STAINED_GLASS, Items.GREEN_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.GREEN_STAINED_GLASS_PANE, Blocks.GREEN_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.GREEN_STAINED_GLASS_PANE, Items.GREEN_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.LIGHT_BLUE_STAINED_GLASS, Items.LIGHT_BLUE_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.LIGHT_BLUE_STAINED_GLASS_PANE, Blocks.LIGHT_BLUE_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.LIGHT_BLUE_STAINED_GLASS_PANE, Items.LIGHT_BLUE_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.LIGHT_GRAY_STAINED_GLASS, Items.LIGHT_GRAY_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.LIGHT_GRAY_STAINED_GLASS_PANE, Blocks.LIGHT_GRAY_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.LIGHT_GRAY_STAINED_GLASS_PANE, Items.LIGHT_GRAY_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.LIME_STAINED_GLASS, Items.LIME_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.LIME_STAINED_GLASS_PANE, Blocks.LIME_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.LIME_STAINED_GLASS_PANE, Items.LIME_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.MAGENTA_STAINED_GLASS, Items.MAGENTA_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.MAGENTA_STAINED_GLASS_PANE, Blocks.MAGENTA_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.MAGENTA_STAINED_GLASS_PANE, Items.MAGENTA_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.ORANGE_STAINED_GLASS, Items.ORANGE_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.ORANGE_STAINED_GLASS_PANE, Blocks.ORANGE_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.ORANGE_STAINED_GLASS_PANE, Items.ORANGE_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.PINK_STAINED_GLASS, Items.PINK_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.PINK_STAINED_GLASS_PANE, Blocks.PINK_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.PINK_STAINED_GLASS_PANE, Items.PINK_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.PURPLE_STAINED_GLASS, Items.PURPLE_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.PURPLE_STAINED_GLASS_PANE, Blocks.PURPLE_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.PURPLE_STAINED_GLASS_PANE, Items.PURPLE_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.RED_STAINED_GLASS, Items.RED_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.RED_STAINED_GLASS_PANE, Blocks.RED_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.RED_STAINED_GLASS_PANE, Items.RED_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.WHITE_STAINED_GLASS, Items.WHITE_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.WHITE_STAINED_GLASS_PANE, Blocks.WHITE_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.WHITE_STAINED_GLASS_PANE, Items.WHITE_DYE);
stainedGlassFromGlassAndDye(p_250804_, Blocks.YELLOW_STAINED_GLASS, Items.YELLOW_DYE);
stainedGlassPaneFromStainedGlass(p_250804_, Blocks.YELLOW_STAINED_GLASS_PANE, Blocks.YELLOW_STAINED_GLASS);
stainedGlassPaneFromGlassPaneAndDye(p_250804_, Blocks.YELLOW_STAINED_GLASS_PANE, Items.YELLOW_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.BLACK_TERRACOTTA, Items.BLACK_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.BLUE_TERRACOTTA, Items.BLUE_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.BROWN_TERRACOTTA, Items.BROWN_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.CYAN_TERRACOTTA, Items.CYAN_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.GRAY_TERRACOTTA, Items.GRAY_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.GREEN_TERRACOTTA, Items.GREEN_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.LIGHT_BLUE_TERRACOTTA, Items.LIGHT_BLUE_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.LIGHT_GRAY_TERRACOTTA, Items.LIGHT_GRAY_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.LIME_TERRACOTTA, Items.LIME_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.MAGENTA_TERRACOTTA, Items.MAGENTA_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.ORANGE_TERRACOTTA, Items.ORANGE_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.PINK_TERRACOTTA, Items.PINK_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.PURPLE_TERRACOTTA, Items.PURPLE_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.RED_TERRACOTTA, Items.RED_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.WHITE_TERRACOTTA, Items.WHITE_DYE);
coloredTerracottaFromTerracottaAndDye(p_250804_, Blocks.YELLOW_TERRACOTTA, Items.YELLOW_DYE);
concretePowder(p_250804_, Blocks.BLACK_CONCRETE_POWDER, Items.BLACK_DYE);
concretePowder(p_250804_, Blocks.BLUE_CONCRETE_POWDER, Items.BLUE_DYE);
concretePowder(p_250804_, Blocks.BROWN_CONCRETE_POWDER, Items.BROWN_DYE);
concretePowder(p_250804_, Blocks.CYAN_CONCRETE_POWDER, Items.CYAN_DYE);
concretePowder(p_250804_, Blocks.GRAY_CONCRETE_POWDER, Items.GRAY_DYE);
concretePowder(p_250804_, Blocks.GREEN_CONCRETE_POWDER, Items.GREEN_DYE);
concretePowder(p_250804_, Blocks.LIGHT_BLUE_CONCRETE_POWDER, Items.LIGHT_BLUE_DYE);
concretePowder(p_250804_, Blocks.LIGHT_GRAY_CONCRETE_POWDER, Items.LIGHT_GRAY_DYE);
concretePowder(p_250804_, Blocks.LIME_CONCRETE_POWDER, Items.LIME_DYE);
concretePowder(p_250804_, Blocks.MAGENTA_CONCRETE_POWDER, Items.MAGENTA_DYE);
concretePowder(p_250804_, Blocks.ORANGE_CONCRETE_POWDER, Items.ORANGE_DYE);
concretePowder(p_250804_, Blocks.PINK_CONCRETE_POWDER, Items.PINK_DYE);
concretePowder(p_250804_, Blocks.PURPLE_CONCRETE_POWDER, Items.PURPLE_DYE);
concretePowder(p_250804_, Blocks.RED_CONCRETE_POWDER, Items.RED_DYE);
concretePowder(p_250804_, Blocks.WHITE_CONCRETE_POWDER, Items.WHITE_DYE);
concretePowder(p_250804_, Blocks.YELLOW_CONCRETE_POWDER, Items.YELLOW_DYE);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.CANDLE).define('S', Items.STRING).define('H', Items.HONEYCOMB).pattern("S").pattern("H").unlockedBy("has_string", has(Items.STRING)).unlockedBy("has_honeycomb", has(Items.HONEYCOMB)).save(p_250804_);
candle(p_250804_, Blocks.BLACK_CANDLE, Items.BLACK_DYE);
candle(p_250804_, Blocks.BLUE_CANDLE, Items.BLUE_DYE);
candle(p_250804_, Blocks.BROWN_CANDLE, Items.BROWN_DYE);
candle(p_250804_, Blocks.CYAN_CANDLE, Items.CYAN_DYE);
candle(p_250804_, Blocks.GRAY_CANDLE, Items.GRAY_DYE);
candle(p_250804_, Blocks.GREEN_CANDLE, Items.GREEN_DYE);
candle(p_250804_, Blocks.LIGHT_BLUE_CANDLE, Items.LIGHT_BLUE_DYE);
candle(p_250804_, Blocks.LIGHT_GRAY_CANDLE, Items.LIGHT_GRAY_DYE);
candle(p_250804_, Blocks.LIME_CANDLE, Items.LIME_DYE);
candle(p_250804_, Blocks.MAGENTA_CANDLE, Items.MAGENTA_DYE);
candle(p_250804_, Blocks.ORANGE_CANDLE, Items.ORANGE_DYE);
candle(p_250804_, Blocks.PINK_CANDLE, Items.PINK_DYE);
candle(p_250804_, Blocks.PURPLE_CANDLE, Items.PURPLE_DYE);
candle(p_250804_, Blocks.RED_CANDLE, Items.RED_DYE);
candle(p_250804_, Blocks.WHITE_CANDLE, Items.WHITE_DYE);
candle(p_250804_, Blocks.YELLOW_CANDLE, Items.YELLOW_DYE);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.PACKED_MUD, 1).requires(Blocks.MUD).requires(Items.WHEAT).unlockedBy("has_mud", has(Blocks.MUD)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.MUD_BRICKS, 4).define('#', Blocks.PACKED_MUD).pattern("##").pattern("##").unlockedBy("has_packed_mud", has(Blocks.PACKED_MUD)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.MUDDY_MANGROVE_ROOTS, 1).requires(Blocks.MUD).requires(Items.MANGROVE_ROOTS).unlockedBy("has_mangrove_roots", has(Blocks.MANGROVE_ROOTS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Blocks.ACTIVATOR_RAIL, 6).define('#', Blocks.REDSTONE_TORCH).define('S', Items.STICK).define('X', Items.IRON_INGOT).pattern("XSX").pattern("X#X").pattern("XSX").unlockedBy("has_rail", has(Blocks.RAIL)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.ANDESITE, 2).requires(Blocks.DIORITE).requires(Blocks.COBBLESTONE).unlockedBy("has_stone", has(Blocks.DIORITE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.ANVIL).define('I', Blocks.IRON_BLOCK).define('i', Items.IRON_INGOT).pattern("III").pattern(" i ").pattern("iii").unlockedBy("has_iron_block", has(Blocks.IRON_BLOCK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.ARMOR_STAND).define('/', Items.STICK).define('_', Blocks.SMOOTH_STONE_SLAB).pattern("///").pattern(" / ").pattern("/_/").unlockedBy("has_stone_slab", has(Blocks.SMOOTH_STONE_SLAB)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.ARROW, 4).define('#', Items.STICK).define('X', Items.FLINT).define('Y', Items.FEATHER).pattern("X").pattern("#").pattern("Y").unlockedBy("has_feather", has(Items.FEATHER)).unlockedBy("has_flint", has(Items.FLINT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.BARREL, 1).define('P', ItemTags.PLANKS).define('S', ItemTags.WOODEN_SLABS).pattern("PSP").pattern("P P").pattern("PSP").unlockedBy("has_planks", has(ItemTags.PLANKS)).unlockedBy("has_wood_slab", has(ItemTags.WOODEN_SLABS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Blocks.BEACON).define('S', Items.NETHER_STAR).define('G', Blocks.GLASS).define('O', Blocks.OBSIDIAN).pattern("GGG").pattern("GSG").pattern("OOO").unlockedBy("has_nether_star", has(Items.NETHER_STAR)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.BEEHIVE).define('P', ItemTags.PLANKS).define('H', Items.HONEYCOMB).pattern("PPP").pattern("HHH").pattern("PPP").unlockedBy("has_honeycomb", has(Items.HONEYCOMB)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.BEETROOT_SOUP).requires(Items.BOWL).requires(Items.BEETROOT, 6).unlockedBy("has_beetroot", has(Items.BEETROOT)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.BLACK_DYE).requires(Items.INK_SAC).group("black_dye").unlockedBy("has_ink_sac", has(Items.INK_SAC)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.BLACK_DYE, Blocks.WITHER_ROSE, "black_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.BREWING, Items.BLAZE_POWDER, 2).requires(Items.BLAZE_ROD).unlockedBy("has_blaze_rod", has(Items.BLAZE_ROD)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.BLUE_DYE).requires(Items.LAPIS_LAZULI).group("blue_dye").unlockedBy("has_lapis_lazuli", has(Items.LAPIS_LAZULI)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.BLUE_DYE, Blocks.CORNFLOWER, "blue_dye");
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BLUE_ICE, Blocks.PACKED_ICE);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.BONE_MEAL, 3).requires(Items.BONE).group("bonemeal").unlockedBy("has_bone", has(Items.BONE)).save(p_250804_);
nineBlockStorageRecipesRecipesWithCustomUnpacking(p_250804_, RecipeCategory.MISC, Items.BONE_MEAL, RecipeCategory.BUILDING_BLOCKS, Items.BONE_BLOCK, "bone_meal_from_bone_block", "bonemeal");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.BOOK).requires(Items.PAPER, 3).requires(Items.LEATHER).unlockedBy("has_paper", has(Items.PAPER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.BOOKSHELF).define('#', ItemTags.PLANKS).define('X', Items.BOOK).pattern("###").pattern("XXX").pattern("###").unlockedBy("has_book", has(Items.BOOK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.BOW).define('#', Items.STICK).define('X', Items.STRING).pattern(" #X").pattern("# X").pattern(" #X").unlockedBy("has_string", has(Items.STRING)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.BOWL, 4).define('#', ItemTags.PLANKS).pattern("# #").pattern(" # ").unlockedBy("has_brown_mushroom", has(Blocks.BROWN_MUSHROOM)).unlockedBy("has_red_mushroom", has(Blocks.RED_MUSHROOM)).unlockedBy("has_mushroom_stew", has(Items.MUSHROOM_STEW)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.FOOD, Items.BREAD).define('#', Items.WHEAT).pattern("###").unlockedBy("has_wheat", has(Items.WHEAT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BREWING, Blocks.BREWING_STAND).define('B', Items.BLAZE_ROD).define('#', ItemTags.STONE_CRAFTING_MATERIALS).pattern(" B ").pattern("###").unlockedBy("has_blaze_rod", has(Items.BLAZE_ROD)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.BRICKS).define('#', Items.BRICK).pattern("##").pattern("##").unlockedBy("has_brick", has(Items.BRICK)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.BROWN_DYE).requires(Items.COCOA_BEANS).group("brown_dye").unlockedBy("has_cocoa_beans", has(Items.COCOA_BEANS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.BUCKET).define('#', Items.IRON_INGOT).pattern("# #").pattern(" # ").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.FOOD, Blocks.CAKE).define('A', Items.MILK_BUCKET).define('B', Items.SUGAR).define('C', Items.WHEAT).define('E', Items.EGG).pattern("AAA").pattern("BEB").pattern("CCC").unlockedBy("has_egg", has(Items.EGG)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CAMPFIRE).define('L', ItemTags.LOGS).define('S', Items.STICK).define('C', ItemTags.COALS).pattern(" S ").pattern("SCS").pattern("LLL").unlockedBy("has_stick", has(Items.STICK)).unlockedBy("has_coal", has(ItemTags.COALS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Items.CARROT_ON_A_STICK).define('#', Items.FISHING_ROD).define('X', Items.CARROT).pattern("# ").pattern(" X").unlockedBy("has_carrot", has(Items.CARROT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Items.WARPED_FUNGUS_ON_A_STICK).define('#', Items.FISHING_ROD).define('X', Items.WARPED_FUNGUS).pattern("# ").pattern(" X").unlockedBy("has_warped_fungus", has(Items.WARPED_FUNGUS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BREWING, Blocks.CAULDRON).define('#', Items.IRON_INGOT).pattern("# #").pattern("# #").pattern("###").unlockedBy("has_water_bucket", has(Items.WATER_BUCKET)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.COMPOSTER).define('#', ItemTags.WOODEN_SLABS).pattern("# #").pattern("# #").pattern("###").unlockedBy("has_wood_slab", has(ItemTags.WOODEN_SLABS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CHEST).define('#', ItemTags.PLANKS).pattern("###").pattern("# #").pattern("###").unlockedBy("has_lots_of_items", new InventoryChangeTrigger.TriggerInstance(ContextAwarePredicate.ANY, MinMaxBounds.Ints.atLeast(10), MinMaxBounds.Ints.ANY, MinMaxBounds.Ints.ANY, new ItemPredicate[0])).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, Items.CHEST_MINECART).requires(Blocks.CHEST).requires(Items.MINECART).unlockedBy("has_minecart", has(Items.MINECART)).save(p_250804_);
chestBoat(p_250804_, Items.ACACIA_CHEST_BOAT, Items.ACACIA_BOAT);
chestBoat(p_250804_, Items.BIRCH_CHEST_BOAT, Items.BIRCH_BOAT);
chestBoat(p_250804_, Items.DARK_OAK_CHEST_BOAT, Items.DARK_OAK_BOAT);
chestBoat(p_250804_, Items.JUNGLE_CHEST_BOAT, Items.JUNGLE_BOAT);
chestBoat(p_250804_, Items.OAK_CHEST_BOAT, Items.OAK_BOAT);
chestBoat(p_250804_, Items.SPRUCE_CHEST_BOAT, Items.SPRUCE_BOAT);
chestBoat(p_250804_, Items.MANGROVE_CHEST_BOAT, Items.MANGROVE_BOAT);
chiseledBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_QUARTZ_BLOCK, Ingredient.of(Blocks.QUARTZ_SLAB)).unlockedBy("has_chiseled_quartz_block", has(Blocks.CHISELED_QUARTZ_BLOCK)).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).unlockedBy("has_quartz_pillar", has(Blocks.QUARTZ_PILLAR)).save(p_250804_);
chiseledBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_STONE_BRICKS, Ingredient.of(Blocks.STONE_BRICK_SLAB)).unlockedBy("has_tag", has(ItemTags.STONE_BRICKS)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CLAY, Items.CLAY_BALL);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.CLOCK).define('#', Items.GOLD_INGOT).define('X', Items.REDSTONE).pattern(" # ").pattern("#X#").pattern(" # ").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.COAL, RecipeCategory.BUILDING_BLOCKS, Items.COAL_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.COARSE_DIRT, 4).define('D', Blocks.DIRT).define('G', Blocks.GRAVEL).pattern("DG").pattern("GD").unlockedBy("has_gravel", has(Blocks.GRAVEL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.COMPARATOR).define('#', Blocks.REDSTONE_TORCH).define('X', Items.QUARTZ).define('I', Blocks.STONE).pattern(" # ").pattern("#X#").pattern("III").unlockedBy("has_quartz", has(Items.QUARTZ)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.COMPASS).define('#', Items.IRON_INGOT).define('X', Items.REDSTONE).pattern(" # ").pattern("#X#").pattern(" # ").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.FOOD, Items.COOKIE, 8).define('#', Items.WHEAT).define('X', Items.COCOA_BEANS).pattern("#X#").unlockedBy("has_cocoa", has(Items.COCOA_BEANS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CRAFTING_TABLE).define('#', ItemTags.PLANKS).pattern("##").pattern("##").unlockedBy("unlock_right_away", PlayerTrigger.TriggerInstance.tick()).showNotification(false).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.CROSSBOW).define('~', Items.STRING).define('#', Items.STICK).define('&', Items.IRON_INGOT).define('$', Blocks.TRIPWIRE_HOOK).pattern("#&#").pattern("~$~").pattern(" # ").unlockedBy("has_string", has(Items.STRING)).unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).unlockedBy("has_tripwire_hook", has(Blocks.TRIPWIRE_HOOK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.LOOM).define('#', ItemTags.PLANKS).define('@', Items.STRING).pattern("@@").pattern("##").unlockedBy("has_string", has(Items.STRING)).save(p_250804_);
chiseledBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_RED_SANDSTONE, Ingredient.of(Blocks.RED_SANDSTONE_SLAB)).unlockedBy("has_red_sandstone", has(Blocks.RED_SANDSTONE)).unlockedBy("has_chiseled_red_sandstone", has(Blocks.CHISELED_RED_SANDSTONE)).unlockedBy("has_cut_red_sandstone", has(Blocks.CUT_RED_SANDSTONE)).save(p_250804_);
chiseled(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_SANDSTONE, Blocks.SANDSTONE_SLAB);
nineBlockStorageRecipesRecipesWithCustomUnpacking(p_250804_, RecipeCategory.MISC, Items.COPPER_INGOT, RecipeCategory.BUILDING_BLOCKS, Items.COPPER_BLOCK, getSimpleRecipeName(Items.COPPER_INGOT), getItemName(Items.COPPER_INGOT));
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.COPPER_INGOT, 9).requires(Blocks.WAXED_COPPER_BLOCK).group(getItemName(Items.COPPER_INGOT)).unlockedBy(getHasName(Blocks.WAXED_COPPER_BLOCK), has(Blocks.WAXED_COPPER_BLOCK)).save(p_250804_, getConversionRecipeName(Items.COPPER_INGOT, Blocks.WAXED_COPPER_BLOCK));
waxRecipes(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.CYAN_DYE, 2).requires(Items.BLUE_DYE).requires(Items.GREEN_DYE).group("cyan_dye").unlockedBy("has_green_dye", has(Items.GREEN_DYE)).unlockedBy("has_blue_dye", has(Items.BLUE_DYE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.DARK_PRISMARINE).define('S', Items.PRISMARINE_SHARD).define('I', Items.BLACK_DYE).pattern("SSS").pattern("SIS").pattern("SSS").unlockedBy("has_prismarine_shard", has(Items.PRISMARINE_SHARD)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.DAYLIGHT_DETECTOR).define('Q', Items.QUARTZ).define('G', Blocks.GLASS).define('W', Ingredient.of(ItemTags.WOODEN_SLABS)).pattern("GGG").pattern("QQQ").pattern("WWW").unlockedBy("has_quartz", has(Items.QUARTZ)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICKS, 4).define('S', Blocks.POLISHED_DEEPSLATE).pattern("SS").pattern("SS").unlockedBy("has_polished_deepslate", has(Blocks.POLISHED_DEEPSLATE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILES, 4).define('S', Blocks.DEEPSLATE_BRICKS).pattern("SS").pattern("SS").unlockedBy("has_deepslate_bricks", has(Blocks.DEEPSLATE_BRICKS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Blocks.DETECTOR_RAIL, 6).define('R', Items.REDSTONE).define('#', Blocks.STONE_PRESSURE_PLATE).define('X', Items.IRON_INGOT).pattern("X X").pattern("X#X").pattern("XRX").unlockedBy("has_rail", has(Blocks.RAIL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.DIAMOND_AXE).define('#', Items.STICK).define('X', Items.DIAMOND).pattern("XX").pattern("X#").pattern(" #").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.DIAMOND, RecipeCategory.BUILDING_BLOCKS, Items.DIAMOND_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.DIAMOND_BOOTS).define('X', Items.DIAMOND).pattern("X X").pattern("X X").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.DIAMOND_CHESTPLATE).define('X', Items.DIAMOND).pattern("X X").pattern("XXX").pattern("XXX").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.DIAMOND_HELMET).define('X', Items.DIAMOND).pattern("XXX").pattern("X X").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.DIAMOND_HOE).define('#', Items.STICK).define('X', Items.DIAMOND).pattern("XX").pattern(" #").pattern(" #").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.DIAMOND_LEGGINGS).define('X', Items.DIAMOND).pattern("XXX").pattern("X X").pattern("X X").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.DIAMOND_PICKAXE).define('#', Items.STICK).define('X', Items.DIAMOND).pattern("XXX").pattern(" # ").pattern(" # ").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.DIAMOND_SHOVEL).define('#', Items.STICK).define('X', Items.DIAMOND).pattern("X").pattern("#").pattern("#").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.DIAMOND_SWORD).define('#', Items.STICK).define('X', Items.DIAMOND).pattern("X").pattern("X").pattern("#").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.DIORITE, 2).define('Q', Items.QUARTZ).define('C', Blocks.COBBLESTONE).pattern("CQ").pattern("QC").unlockedBy("has_quartz", has(Items.QUARTZ)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.DISPENSER).define('R', Items.REDSTONE).define('#', Blocks.COBBLESTONE).define('X', Items.BOW).pattern("###").pattern("#X#").pattern("#R#").unlockedBy("has_bow", has(Items.BOW)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DRIPSTONE_BLOCK, Items.POINTED_DRIPSTONE);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.DROPPER).define('R', Items.REDSTONE).define('#', Blocks.COBBLESTONE).pattern("###").pattern("# #").pattern("#R#").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.EMERALD, RecipeCategory.BUILDING_BLOCKS, Items.EMERALD_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.ENCHANTING_TABLE).define('B', Items.BOOK).define('#', Blocks.OBSIDIAN).define('D', Items.DIAMOND).pattern(" B ").pattern("D#D").pattern("###").unlockedBy("has_obsidian", has(Blocks.OBSIDIAN)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.ENDER_CHEST).define('#', Blocks.OBSIDIAN).define('E', Items.ENDER_EYE).pattern("###").pattern("#E#").pattern("###").unlockedBy("has_ender_eye", has(Items.ENDER_EYE)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.ENDER_EYE).requires(Items.ENDER_PEARL).requires(Items.BLAZE_POWDER).unlockedBy("has_blaze_powder", has(Items.BLAZE_POWDER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICKS, 4).define('#', Blocks.END_STONE).pattern("##").pattern("##").unlockedBy("has_end_stone", has(Blocks.END_STONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.END_CRYSTAL).define('T', Items.GHAST_TEAR).define('E', Items.ENDER_EYE).define('G', Blocks.GLASS).pattern("GGG").pattern("GEG").pattern("GTG").unlockedBy("has_ender_eye", has(Items.ENDER_EYE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.END_ROD, 4).define('#', Items.POPPED_CHORUS_FRUIT).define('/', Items.BLAZE_ROD).pattern("/").pattern("#").unlockedBy("has_chorus_fruit_popped", has(Items.POPPED_CHORUS_FRUIT)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BREWING, Items.FERMENTED_SPIDER_EYE).requires(Items.SPIDER_EYE).requires(Blocks.BROWN_MUSHROOM).requires(Items.SUGAR).unlockedBy("has_spider_eye", has(Items.SPIDER_EYE)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.FIRE_CHARGE, 3).requires(Items.GUNPOWDER).requires(Items.BLAZE_POWDER).requires(Ingredient.of(Items.COAL, Items.CHARCOAL)).unlockedBy("has_blaze_powder", has(Items.BLAZE_POWDER)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.FIREWORK_ROCKET, 3).requires(Items.GUNPOWDER).requires(Items.PAPER).unlockedBy("has_gunpowder", has(Items.GUNPOWDER)).save(p_250804_, "firework_rocket_simple");
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.FISHING_ROD).define('#', Items.STICK).define('X', Items.STRING).pattern(" #").pattern(" #X").pattern("# X").unlockedBy("has_string", has(Items.STRING)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.TOOLS, Items.FLINT_AND_STEEL).requires(Items.IRON_INGOT).requires(Items.FLINT).unlockedBy("has_flint", has(Items.FLINT)).unlockedBy("has_obsidian", has(Blocks.OBSIDIAN)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.FLOWER_POT).define('#', Items.BRICK).pattern("# #").pattern(" # ").unlockedBy("has_brick", has(Items.BRICK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.FURNACE).define('#', ItemTags.STONE_CRAFTING_MATERIALS).pattern("###").pattern("# #").pattern("###").unlockedBy("has_cobblestone", has(ItemTags.STONE_CRAFTING_MATERIALS)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, Items.FURNACE_MINECART).requires(Blocks.FURNACE).requires(Items.MINECART).unlockedBy("has_minecart", has(Items.MINECART)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BREWING, Items.GLASS_BOTTLE, 3).define('#', Blocks.GLASS).pattern("# #").pattern(" # ").unlockedBy("has_glass", has(Blocks.GLASS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.GLASS_PANE, 16).define('#', Blocks.GLASS).pattern("###").pattern("###").unlockedBy("has_glass", has(Blocks.GLASS)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.GLOWSTONE, Items.GLOWSTONE_DUST);
ShapelessRecipeBuilder.shapeless(RecipeCategory.DECORATIONS, Items.GLOW_ITEM_FRAME).requires(Items.ITEM_FRAME).requires(Items.GLOW_INK_SAC).unlockedBy("has_item_frame", has(Items.ITEM_FRAME)).unlockedBy("has_glow_ink_sac", has(Items.GLOW_INK_SAC)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.FOOD, Items.GOLDEN_APPLE).define('#', Items.GOLD_INGOT).define('X', Items.APPLE).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.GOLDEN_AXE).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("XX").pattern("X#").pattern(" #").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.GOLDEN_BOOTS).define('X', Items.GOLD_INGOT).pattern("X X").pattern("X X").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BREWING, Items.GOLDEN_CARROT).define('#', Items.GOLD_NUGGET).define('X', Items.CARROT).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_gold_nugget", has(Items.GOLD_NUGGET)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.GOLDEN_CHESTPLATE).define('X', Items.GOLD_INGOT).pattern("X X").pattern("XXX").pattern("XXX").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.GOLDEN_HELMET).define('X', Items.GOLD_INGOT).pattern("XXX").pattern("X X").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.GOLDEN_HOE).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("XX").pattern(" #").pattern(" #").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.GOLDEN_LEGGINGS).define('X', Items.GOLD_INGOT).pattern("XXX").pattern("X X").pattern("X X").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.GOLDEN_PICKAXE).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("XXX").pattern(" # ").pattern(" # ").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Blocks.POWERED_RAIL, 6).define('R', Items.REDSTONE).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("X X").pattern("X#X").pattern("XRX").unlockedBy("has_rail", has(Blocks.RAIL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.GOLDEN_SHOVEL).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("X").pattern("#").pattern("#").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.GOLDEN_SWORD).define('#', Items.STICK).define('X', Items.GOLD_INGOT).pattern("X").pattern("X").pattern("#").unlockedBy("has_gold_ingot", has(Items.GOLD_INGOT)).save(p_250804_);
nineBlockStorageRecipesRecipesWithCustomUnpacking(p_250804_, RecipeCategory.MISC, Items.GOLD_INGOT, RecipeCategory.BUILDING_BLOCKS, Items.GOLD_BLOCK, "gold_ingot_from_gold_block", "gold_ingot");
nineBlockStorageRecipesWithCustomPacking(p_250804_, RecipeCategory.MISC, Items.GOLD_NUGGET, RecipeCategory.MISC, Items.GOLD_INGOT, "gold_ingot_from_nuggets", "gold_ingot");
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.GRANITE).requires(Blocks.DIORITE).requires(Items.QUARTZ).unlockedBy("has_quartz", has(Items.QUARTZ)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.GRAY_DYE, 2).requires(Items.BLACK_DYE).requires(Items.WHITE_DYE).unlockedBy("has_white_dye", has(Items.WHITE_DYE)).unlockedBy("has_black_dye", has(Items.BLACK_DYE)).save(p_250804_);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.HAY_BLOCK, Items.WHEAT);
pressurePlate(p_250804_, Blocks.HEAVY_WEIGHTED_PRESSURE_PLATE, Items.IRON_INGOT);
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.HONEY_BOTTLE, 4).requires(Items.HONEY_BLOCK).requires(Items.GLASS_BOTTLE, 4).unlockedBy("has_honey_block", has(Blocks.HONEY_BLOCK)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.REDSTONE, Blocks.HONEY_BLOCK, Items.HONEY_BOTTLE);
twoByTwoPacker(p_250804_, RecipeCategory.DECORATIONS, Blocks.HONEYCOMB_BLOCK, Items.HONEYCOMB);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.HOPPER).define('C', Blocks.CHEST).define('I', Items.IRON_INGOT).pattern("I I").pattern("ICI").pattern(" I ").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, Items.HOPPER_MINECART).requires(Blocks.HOPPER).requires(Items.MINECART).unlockedBy("has_minecart", has(Items.MINECART)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.IRON_AXE).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("XX").pattern("X#").pattern(" #").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.IRON_BARS, 16).define('#', Items.IRON_INGOT).pattern("###").pattern("###").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.IRON_BOOTS).define('X', Items.IRON_INGOT).pattern("X X").pattern("X X").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.IRON_CHESTPLATE).define('X', Items.IRON_INGOT).pattern("X X").pattern("XXX").pattern("XXX").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
doorBuilder(Blocks.IRON_DOOR, Ingredient.of(Items.IRON_INGOT)).unlockedBy(getHasName(Items.IRON_INGOT), has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.IRON_HELMET).define('X', Items.IRON_INGOT).pattern("XXX").pattern("X X").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.IRON_HOE).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("XX").pattern(" #").pattern(" #").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
nineBlockStorageRecipesRecipesWithCustomUnpacking(p_250804_, RecipeCategory.MISC, Items.IRON_INGOT, RecipeCategory.BUILDING_BLOCKS, Items.IRON_BLOCK, "iron_ingot_from_iron_block", "iron_ingot");
nineBlockStorageRecipesWithCustomPacking(p_250804_, RecipeCategory.MISC, Items.IRON_NUGGET, RecipeCategory.MISC, Items.IRON_INGOT, "iron_ingot_from_nuggets", "iron_ingot");
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.IRON_LEGGINGS).define('X', Items.IRON_INGOT).pattern("XXX").pattern("X X").pattern("X X").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.IRON_PICKAXE).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("XXX").pattern(" # ").pattern(" # ").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.IRON_SHOVEL).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("X").pattern("#").pattern("#").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.IRON_SWORD).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("X").pattern("X").pattern("#").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.REDSTONE, Blocks.IRON_TRAPDOOR, Items.IRON_INGOT);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.ITEM_FRAME).define('#', Items.STICK).define('X', Items.LEATHER).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.JUKEBOX).define('#', ItemTags.PLANKS).define('X', Items.DIAMOND).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_diamond", has(Items.DIAMOND)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.LADDER, 3).define('#', Items.STICK).pattern("# #").pattern("###").pattern("# #").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.LAPIS_LAZULI, RecipeCategory.BUILDING_BLOCKS, Items.LAPIS_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.LEAD, 2).define('~', Items.STRING).define('O', Items.SLIME_BALL).pattern("~~ ").pattern("~O ").pattern(" ~").unlockedBy("has_slime_ball", has(Items.SLIME_BALL)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.MISC, Items.LEATHER, Items.RABBIT_HIDE);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.LEATHER_BOOTS).define('X', Items.LEATHER).pattern("X X").pattern("X X").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.LEATHER_CHESTPLATE).define('X', Items.LEATHER).pattern("X X").pattern("XXX").pattern("XXX").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.LEATHER_HELMET).define('X', Items.LEATHER).pattern("XXX").pattern("X X").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.LEATHER_LEGGINGS).define('X', Items.LEATHER).pattern("XXX").pattern("X X").pattern("X X").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.LEATHER_HORSE_ARMOR).define('X', Items.LEATHER).pattern("X X").pattern("XXX").pattern("X X").unlockedBy("has_leather", has(Items.LEATHER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.LECTERN).define('S', ItemTags.WOODEN_SLABS).define('B', Blocks.BOOKSHELF).pattern("SSS").pattern(" B ").pattern(" S ").unlockedBy("has_book", has(Items.BOOK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.LEVER).define('#', Blocks.COBBLESTONE).define('X', Items.STICK).pattern("X").pattern("#").unlockedBy("has_cobblestone", has(Blocks.COBBLESTONE)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.LIGHT_BLUE_DYE, Blocks.BLUE_ORCHID, "light_blue_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.LIGHT_BLUE_DYE, 2).requires(Items.BLUE_DYE).requires(Items.WHITE_DYE).group("light_blue_dye").unlockedBy("has_blue_dye", has(Items.BLUE_DYE)).unlockedBy("has_white_dye", has(Items.WHITE_DYE)).save(p_250804_, "light_blue_dye_from_blue_white_dye");
oneToOneConversionRecipe(p_250804_, Items.LIGHT_GRAY_DYE, Blocks.AZURE_BLUET, "light_gray_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.LIGHT_GRAY_DYE, 2).requires(Items.GRAY_DYE).requires(Items.WHITE_DYE).group("light_gray_dye").unlockedBy("has_gray_dye", has(Items.GRAY_DYE)).unlockedBy("has_white_dye", has(Items.WHITE_DYE)).save(p_250804_, "light_gray_dye_from_gray_white_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.LIGHT_GRAY_DYE, 3).requires(Items.BLACK_DYE).requires(Items.WHITE_DYE, 2).group("light_gray_dye").unlockedBy("has_white_dye", has(Items.WHITE_DYE)).unlockedBy("has_black_dye", has(Items.BLACK_DYE)).save(p_250804_, "light_gray_dye_from_black_white_dye");
oneToOneConversionRecipe(p_250804_, Items.LIGHT_GRAY_DYE, Blocks.OXEYE_DAISY, "light_gray_dye");
oneToOneConversionRecipe(p_250804_, Items.LIGHT_GRAY_DYE, Blocks.WHITE_TULIP, "light_gray_dye");
pressurePlate(p_250804_, Blocks.LIGHT_WEIGHTED_PRESSURE_PLATE, Items.GOLD_INGOT);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.LIGHTNING_ROD).define('#', Items.COPPER_INGOT).pattern("#").pattern("#").pattern("#").unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.LIME_DYE, 2).requires(Items.GREEN_DYE).requires(Items.WHITE_DYE).unlockedBy("has_green_dye", has(Items.GREEN_DYE)).unlockedBy("has_white_dye", has(Items.WHITE_DYE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.JACK_O_LANTERN).define('A', Blocks.CARVED_PUMPKIN).define('B', Blocks.TORCH).pattern("A").pattern("B").unlockedBy("has_carved_pumpkin", has(Blocks.CARVED_PUMPKIN)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.MAGENTA_DYE, Blocks.ALLIUM, "magenta_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.MAGENTA_DYE, 4).requires(Items.BLUE_DYE).requires(Items.RED_DYE, 2).requires(Items.WHITE_DYE).group("magenta_dye").unlockedBy("has_blue_dye", has(Items.BLUE_DYE)).unlockedBy("has_rose_red", has(Items.RED_DYE)).unlockedBy("has_white_dye", has(Items.WHITE_DYE)).save(p_250804_, "magenta_dye_from_blue_red_white_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.MAGENTA_DYE, 3).requires(Items.BLUE_DYE).requires(Items.RED_DYE).requires(Items.PINK_DYE).group("magenta_dye").unlockedBy("has_pink_dye", has(Items.PINK_DYE)).unlockedBy("has_blue_dye", has(Items.BLUE_DYE)).unlockedBy("has_red_dye", has(Items.RED_DYE)).save(p_250804_, "magenta_dye_from_blue_red_pink");
oneToOneConversionRecipe(p_250804_, Items.MAGENTA_DYE, Blocks.LILAC, "magenta_dye", 2);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.MAGENTA_DYE, 2).requires(Items.PURPLE_DYE).requires(Items.PINK_DYE).group("magenta_dye").unlockedBy("has_pink_dye", has(Items.PINK_DYE)).unlockedBy("has_purple_dye", has(Items.PURPLE_DYE)).save(p_250804_, "magenta_dye_from_purple_and_pink");
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MAGMA_BLOCK, Items.MAGMA_CREAM);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BREWING, Items.MAGMA_CREAM).requires(Items.BLAZE_POWDER).requires(Items.SLIME_BALL).unlockedBy("has_blaze_powder", has(Items.BLAZE_POWDER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.MAP).define('#', Items.PAPER).define('X', Items.COMPASS).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_compass", has(Items.COMPASS)).save(p_250804_);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MELON, Items.MELON_SLICE, "has_melon");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.MELON_SEEDS).requires(Items.MELON_SLICE).unlockedBy("has_melon", has(Items.MELON_SLICE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Items.MINECART).define('#', Items.IRON_INGOT).pattern("# #").pattern("###").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_COBBLESTONE).requires(Blocks.COBBLESTONE).requires(Blocks.VINE).group("mossy_cobblestone").unlockedBy("has_vine", has(Blocks.VINE)).save(p_250804_, getConversionRecipeName(Blocks.MOSSY_COBBLESTONE, Blocks.VINE));
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_STONE_BRICKS).requires(Blocks.STONE_BRICKS).requires(Blocks.VINE).group("mossy_stone_bricks").unlockedBy("has_vine", has(Blocks.VINE)).save(p_250804_, getConversionRecipeName(Blocks.MOSSY_STONE_BRICKS, Blocks.VINE));
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_COBBLESTONE).requires(Blocks.COBBLESTONE).requires(Blocks.MOSS_BLOCK).group("mossy_cobblestone").unlockedBy("has_moss_block", has(Blocks.MOSS_BLOCK)).save(p_250804_, getConversionRecipeName(Blocks.MOSSY_COBBLESTONE, Blocks.MOSS_BLOCK));
ShapelessRecipeBuilder.shapeless(RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_STONE_BRICKS).requires(Blocks.STONE_BRICKS).requires(Blocks.MOSS_BLOCK).group("mossy_stone_bricks").unlockedBy("has_moss_block", has(Blocks.MOSS_BLOCK)).save(p_250804_, getConversionRecipeName(Blocks.MOSSY_STONE_BRICKS, Blocks.MOSS_BLOCK));
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.MUSHROOM_STEW).requires(Blocks.BROWN_MUSHROOM).requires(Blocks.RED_MUSHROOM).requires(Items.BOWL).unlockedBy("has_mushroom_stew", has(Items.MUSHROOM_STEW)).unlockedBy("has_bowl", has(Items.BOWL)).unlockedBy("has_brown_mushroom", has(Blocks.BROWN_MUSHROOM)).unlockedBy("has_red_mushroom", has(Blocks.RED_MUSHROOM)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_BRICKS, Items.NETHER_BRICK);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_WART_BLOCK, Items.NETHER_WART);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.NOTE_BLOCK).define('#', ItemTags.PLANKS).define('X', Items.REDSTONE).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.OBSERVER).define('Q', Items.QUARTZ).define('R', Items.REDSTONE).define('#', Blocks.COBBLESTONE).pattern("###").pattern("RRQ").pattern("###").unlockedBy("has_quartz", has(Items.QUARTZ)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.ORANGE_DYE, Blocks.ORANGE_TULIP, "orange_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.ORANGE_DYE, 2).requires(Items.RED_DYE).requires(Items.YELLOW_DYE).group("orange_dye").unlockedBy("has_red_dye", has(Items.RED_DYE)).unlockedBy("has_yellow_dye", has(Items.YELLOW_DYE)).save(p_250804_, "orange_dye_from_red_yellow");
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.PAINTING).define('#', Items.STICK).define('X', Ingredient.of(ItemTags.WOOL)).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_wool", has(ItemTags.WOOL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.PAPER, 3).define('#', Blocks.SUGAR_CANE).pattern("###").unlockedBy("has_reeds", has(Blocks.SUGAR_CANE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_PILLAR, 2).define('#', Blocks.QUARTZ_BLOCK).pattern("#").pattern("#").unlockedBy("has_chiseled_quartz_block", has(Blocks.CHISELED_QUARTZ_BLOCK)).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).unlockedBy("has_quartz_pillar", has(Blocks.QUARTZ_PILLAR)).save(p_250804_);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PACKED_ICE, Blocks.ICE);
oneToOneConversionRecipe(p_250804_, Items.PINK_DYE, Blocks.PEONY, "pink_dye", 2);
oneToOneConversionRecipe(p_250804_, Items.PINK_DYE, Blocks.PINK_TULIP, "pink_dye");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.PINK_DYE, 2).requires(Items.RED_DYE).requires(Items.WHITE_DYE).group("pink_dye").unlockedBy("has_white_dye", has(Items.WHITE_DYE)).unlockedBy("has_red_dye", has(Items.RED_DYE)).save(p_250804_, "pink_dye_from_red_white_dye");
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.PISTON).define('R', Items.REDSTONE).define('#', Blocks.COBBLESTONE).define('T', ItemTags.PLANKS).define('X', Items.IRON_INGOT).pattern("TTT").pattern("#X#").pattern("#R#").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
polished(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BASALT, Blocks.BASALT);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE, Items.PRISMARINE_SHARD);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE_BRICKS, Items.PRISMARINE_SHARD);
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.PUMPKIN_PIE).requires(Blocks.PUMPKIN).requires(Items.SUGAR).requires(Items.EGG).unlockedBy("has_carved_pumpkin", has(Blocks.CARVED_PUMPKIN)).unlockedBy("has_pumpkin", has(Blocks.PUMPKIN)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.PUMPKIN_SEEDS, 4).requires(Blocks.PUMPKIN).unlockedBy("has_pumpkin", has(Blocks.PUMPKIN)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.PURPLE_DYE, 2).requires(Items.BLUE_DYE).requires(Items.RED_DYE).unlockedBy("has_blue_dye", has(Items.BLUE_DYE)).unlockedBy("has_red_dye", has(Items.RED_DYE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SHULKER_BOX).define('#', Blocks.CHEST).define('-', Items.SHULKER_SHELL).pattern("-").pattern("#").pattern("-").unlockedBy("has_shulker_shell", has(Items.SHULKER_SHELL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_BLOCK, 4).define('F', Items.POPPED_CHORUS_FRUIT).pattern("FF").pattern("FF").unlockedBy("has_chorus_fruit_popped", has(Items.POPPED_CHORUS_FRUIT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_PILLAR).define('#', Blocks.PURPUR_SLAB).pattern("#").pattern("#").unlockedBy("has_purpur_block", has(Blocks.PURPUR_BLOCK)).save(p_250804_);
slabBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_SLAB, Ingredient.of(Blocks.PURPUR_BLOCK, Blocks.PURPUR_PILLAR)).unlockedBy("has_purpur_block", has(Blocks.PURPUR_BLOCK)).save(p_250804_);
stairBuilder(Blocks.PURPUR_STAIRS, Ingredient.of(Blocks.PURPUR_BLOCK, Blocks.PURPUR_PILLAR)).unlockedBy("has_purpur_block", has(Blocks.PURPUR_BLOCK)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_BLOCK, Items.QUARTZ);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_BRICKS, 4).define('#', Blocks.QUARTZ_BLOCK).pattern("##").pattern("##").unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).save(p_250804_);
slabBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_SLAB, Ingredient.of(Blocks.CHISELED_QUARTZ_BLOCK, Blocks.QUARTZ_BLOCK, Blocks.QUARTZ_PILLAR)).unlockedBy("has_chiseled_quartz_block", has(Blocks.CHISELED_QUARTZ_BLOCK)).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).unlockedBy("has_quartz_pillar", has(Blocks.QUARTZ_PILLAR)).save(p_250804_);
stairBuilder(Blocks.QUARTZ_STAIRS, Ingredient.of(Blocks.CHISELED_QUARTZ_BLOCK, Blocks.QUARTZ_BLOCK, Blocks.QUARTZ_PILLAR)).unlockedBy("has_chiseled_quartz_block", has(Blocks.CHISELED_QUARTZ_BLOCK)).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).unlockedBy("has_quartz_pillar", has(Blocks.QUARTZ_PILLAR)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.RABBIT_STEW).requires(Items.BAKED_POTATO).requires(Items.COOKED_RABBIT).requires(Items.BOWL).requires(Items.CARROT).requires(Blocks.BROWN_MUSHROOM).group("rabbit_stew").unlockedBy("has_cooked_rabbit", has(Items.COOKED_RABBIT)).save(p_250804_, getConversionRecipeName(Items.RABBIT_STEW, Items.BROWN_MUSHROOM));
ShapelessRecipeBuilder.shapeless(RecipeCategory.FOOD, Items.RABBIT_STEW).requires(Items.BAKED_POTATO).requires(Items.COOKED_RABBIT).requires(Items.BOWL).requires(Items.CARROT).requires(Blocks.RED_MUSHROOM).group("rabbit_stew").unlockedBy("has_cooked_rabbit", has(Items.COOKED_RABBIT)).save(p_250804_, getConversionRecipeName(Items.RABBIT_STEW, Items.RED_MUSHROOM));
ShapedRecipeBuilder.shaped(RecipeCategory.TRANSPORTATION, Blocks.RAIL, 16).define('#', Items.STICK).define('X', Items.IRON_INGOT).pattern("X X").pattern("X#X").pattern("X X").unlockedBy("has_minecart", has(Items.MINECART)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.REDSTONE, Items.REDSTONE, RecipeCategory.REDSTONE, Items.REDSTONE_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.REDSTONE_LAMP).define('R', Items.REDSTONE).define('G', Blocks.GLOWSTONE).pattern(" R ").pattern("RGR").pattern(" R ").unlockedBy("has_glowstone", has(Blocks.GLOWSTONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.REDSTONE_TORCH).define('#', Items.STICK).define('X', Items.REDSTONE).pattern("X").pattern("#").unlockedBy("has_redstone", has(Items.REDSTONE)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.RED_DYE, Items.BEETROOT, "red_dye");
oneToOneConversionRecipe(p_250804_, Items.RED_DYE, Blocks.POPPY, "red_dye");
oneToOneConversionRecipe(p_250804_, Items.RED_DYE, Blocks.ROSE_BUSH, "red_dye", 2);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.RED_DYE).requires(Blocks.RED_TULIP).group("red_dye").unlockedBy("has_red_flower", has(Blocks.RED_TULIP)).save(p_250804_, "red_dye_from_tulip");
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.RED_NETHER_BRICKS).define('W', Items.NETHER_WART).define('N', Items.NETHER_BRICK).pattern("NW").pattern("WN").unlockedBy("has_nether_wart", has(Items.NETHER_WART)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.RED_SANDSTONE).define('#', Blocks.RED_SAND).pattern("##").pattern("##").unlockedBy("has_sand", has(Blocks.RED_SAND)).save(p_250804_);
slabBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.RED_SANDSTONE_SLAB, Ingredient.of(Blocks.RED_SANDSTONE, Blocks.CHISELED_RED_SANDSTONE)).unlockedBy("has_red_sandstone", has(Blocks.RED_SANDSTONE)).unlockedBy("has_chiseled_red_sandstone", has(Blocks.CHISELED_RED_SANDSTONE)).save(p_250804_);
stairBuilder(Blocks.RED_SANDSTONE_STAIRS, Ingredient.of(Blocks.RED_SANDSTONE, Blocks.CHISELED_RED_SANDSTONE, Blocks.CUT_RED_SANDSTONE)).unlockedBy("has_red_sandstone", has(Blocks.RED_SANDSTONE)).unlockedBy("has_chiseled_red_sandstone", has(Blocks.CHISELED_RED_SANDSTONE)).unlockedBy("has_cut_red_sandstone", has(Blocks.CUT_RED_SANDSTONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.REPEATER).define('#', Blocks.REDSTONE_TORCH).define('X', Items.REDSTONE).define('I', Blocks.STONE).pattern("#X#").pattern("III").unlockedBy("has_redstone_torch", has(Blocks.REDSTONE_TORCH)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SANDSTONE, Blocks.SAND);
slabBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.SANDSTONE_SLAB, Ingredient.of(Blocks.SANDSTONE, Blocks.CHISELED_SANDSTONE)).unlockedBy("has_sandstone", has(Blocks.SANDSTONE)).unlockedBy("has_chiseled_sandstone", has(Blocks.CHISELED_SANDSTONE)).save(p_250804_);
stairBuilder(Blocks.SANDSTONE_STAIRS, Ingredient.of(Blocks.SANDSTONE, Blocks.CHISELED_SANDSTONE, Blocks.CUT_SANDSTONE)).unlockedBy("has_sandstone", has(Blocks.SANDSTONE)).unlockedBy("has_chiseled_sandstone", has(Blocks.CHISELED_SANDSTONE)).unlockedBy("has_cut_sandstone", has(Blocks.CUT_SANDSTONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.SEA_LANTERN).define('S', Items.PRISMARINE_SHARD).define('C', Items.PRISMARINE_CRYSTALS).pattern("SCS").pattern("CCC").pattern("SCS").unlockedBy("has_prismarine_crystals", has(Items.PRISMARINE_CRYSTALS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.SHEARS).define('#', Items.IRON_INGOT).pattern(" #").pattern("# ").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.SHIELD).define('W', ItemTags.PLANKS).define('o', Items.IRON_INGOT).pattern("WoW").pattern("WWW").pattern(" W ").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.SLIME_BALL, RecipeCategory.REDSTONE, Items.SLIME_BLOCK);
cut(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_RED_SANDSTONE, Blocks.RED_SANDSTONE);
cut(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_SANDSTONE, Blocks.SANDSTONE);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SNOW_BLOCK, Items.SNOWBALL);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SNOW, 6).define('#', Blocks.SNOW_BLOCK).pattern("###").unlockedBy("has_snowball", has(Items.SNOWBALL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SOUL_CAMPFIRE).define('L', ItemTags.LOGS).define('S', Items.STICK).define('#', ItemTags.SOUL_FIRE_BASE_BLOCKS).pattern(" S ").pattern("S#S").pattern("LLL").unlockedBy("has_soul_sand", has(ItemTags.SOUL_FIRE_BASE_BLOCKS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BREWING, Items.GLISTERING_MELON_SLICE).define('#', Items.GOLD_NUGGET).define('X', Items.MELON_SLICE).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_melon", has(Items.MELON_SLICE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.SPECTRAL_ARROW, 2).define('#', Items.GLOWSTONE_DUST).define('X', Items.ARROW).pattern(" # ").pattern("#X#").pattern(" # ").unlockedBy("has_glowstone_dust", has(Items.GLOWSTONE_DUST)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.SPYGLASS).define('#', Items.AMETHYST_SHARD).define('X', Items.COPPER_INGOT).pattern(" # ").pattern(" X ").pattern(" X ").unlockedBy("has_amethyst_shard", has(Items.AMETHYST_SHARD)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.STICK, 4).define('#', ItemTags.PLANKS).pattern("#").pattern("#").group("sticks").unlockedBy("has_planks", has(ItemTags.PLANKS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Items.STICK, 1).define('#', Blocks.BAMBOO).pattern("#").pattern("#").group("sticks").unlockedBy("has_bamboo", has(Blocks.BAMBOO)).save(p_250804_, "stick_from_bamboo_item");
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.STICKY_PISTON).define('P', Blocks.PISTON).define('S', Items.SLIME_BALL).pattern("S").pattern("P").unlockedBy("has_slime_ball", has(Items.SLIME_BALL)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICKS, 4).define('#', Blocks.STONE).pattern("##").pattern("##").unlockedBy("has_stone", has(Blocks.STONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.STONE_AXE).define('#', Items.STICK).define('X', ItemTags.STONE_TOOL_MATERIALS).pattern("XX").pattern("X#").pattern(" #").unlockedBy("has_cobblestone", has(ItemTags.STONE_TOOL_MATERIALS)).save(p_250804_);
slabBuilder(RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICK_SLAB, Ingredient.of(Blocks.STONE_BRICKS)).unlockedBy("has_stone_bricks", has(ItemTags.STONE_BRICKS)).save(p_250804_);
stairBuilder(Blocks.STONE_BRICK_STAIRS, Ingredient.of(Blocks.STONE_BRICKS)).unlockedBy("has_stone_bricks", has(ItemTags.STONE_BRICKS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.STONE_HOE).define('#', Items.STICK).define('X', ItemTags.STONE_TOOL_MATERIALS).pattern("XX").pattern(" #").pattern(" #").unlockedBy("has_cobblestone", has(ItemTags.STONE_TOOL_MATERIALS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.STONE_PICKAXE).define('#', Items.STICK).define('X', ItemTags.STONE_TOOL_MATERIALS).pattern("XXX").pattern(" # ").pattern(" # ").unlockedBy("has_cobblestone", has(ItemTags.STONE_TOOL_MATERIALS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.STONE_SHOVEL).define('#', Items.STICK).define('X', ItemTags.STONE_TOOL_MATERIALS).pattern("X").pattern("#").pattern("#").unlockedBy("has_cobblestone", has(ItemTags.STONE_TOOL_MATERIALS)).save(p_250804_);
slab(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_STONE_SLAB, Blocks.SMOOTH_STONE);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.STONE_SWORD).define('#', Items.STICK).define('X', ItemTags.STONE_TOOL_MATERIALS).pattern("X").pattern("X").pattern("#").unlockedBy("has_cobblestone", has(ItemTags.STONE_TOOL_MATERIALS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.WHITE_WOOL).define('#', Items.STRING).pattern("##").pattern("##").unlockedBy("has_string", has(Items.STRING)).save(p_250804_, getConversionRecipeName(Blocks.WHITE_WOOL, Items.STRING));
oneToOneConversionRecipe(p_250804_, Items.SUGAR, Blocks.SUGAR_CANE, "sugar");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.SUGAR, 3).requires(Items.HONEY_BOTTLE).group("sugar").unlockedBy("has_honey_bottle", has(Items.HONEY_BOTTLE)).save(p_250804_, getConversionRecipeName(Items.SUGAR, Items.HONEY_BOTTLE));
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.TARGET).define('H', Items.HAY_BLOCK).define('R', Items.REDSTONE).pattern(" R ").pattern("RHR").pattern(" R ").unlockedBy("has_redstone", has(Items.REDSTONE)).unlockedBy("has_hay_block", has(Blocks.HAY_BLOCK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.TNT).define('#', Ingredient.of(Blocks.SAND, Blocks.RED_SAND)).define('X', Items.GUNPOWDER).pattern("X#X").pattern("#X#").pattern("X#X").unlockedBy("has_gunpowder", has(Items.GUNPOWDER)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.TRANSPORTATION, Items.TNT_MINECART).requires(Blocks.TNT).requires(Items.MINECART).unlockedBy("has_minecart", has(Items.MINECART)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.TORCH, 4).define('#', Items.STICK).define('X', Ingredient.of(Items.COAL, Items.CHARCOAL)).pattern("X").pattern("#").unlockedBy("has_stone_pickaxe", has(Items.STONE_PICKAXE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SOUL_TORCH, 4).define('X', Ingredient.of(Items.COAL, Items.CHARCOAL)).define('#', Items.STICK).define('S', ItemTags.SOUL_FIRE_BASE_BLOCKS).pattern("X").pattern("#").pattern("S").unlockedBy("has_soul_sand", has(ItemTags.SOUL_FIRE_BASE_BLOCKS)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.LANTERN).define('#', Items.TORCH).define('X', Items.IRON_NUGGET).pattern("XXX").pattern("X#X").pattern("XXX").unlockedBy("has_iron_nugget", has(Items.IRON_NUGGET)).unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SOUL_LANTERN).define('#', Items.SOUL_TORCH).define('X', Items.IRON_NUGGET).pattern("XXX").pattern("X#X").pattern("XXX").unlockedBy("has_soul_torch", has(Items.SOUL_TORCH)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.REDSTONE, Blocks.TRAPPED_CHEST).requires(Blocks.CHEST).requires(Blocks.TRIPWIRE_HOOK).unlockedBy("has_tripwire_hook", has(Blocks.TRIPWIRE_HOOK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Blocks.TRIPWIRE_HOOK, 2).define('#', ItemTags.PLANKS).define('S', Items.STICK).define('I', Items.IRON_INGOT).pattern("I").pattern("S").pattern("#").unlockedBy("has_string", has(Items.STRING)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.TURTLE_HELMET).define('X', Items.SCUTE).pattern("XXX").pattern("X X").unlockedBy("has_scute", has(Items.SCUTE)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.WHEAT, 9).requires(Blocks.HAY_BLOCK).unlockedBy("has_hay_block", has(Blocks.HAY_BLOCK)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.WHITE_DYE).requires(Items.BONE_MEAL).group("white_dye").unlockedBy("has_bone_meal", has(Items.BONE_MEAL)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.WHITE_DYE, Blocks.LILY_OF_THE_VALLEY, "white_dye");
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.WOODEN_AXE).define('#', Items.STICK).define('X', ItemTags.PLANKS).pattern("XX").pattern("X#").pattern(" #").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.WOODEN_HOE).define('#', Items.STICK).define('X', ItemTags.PLANKS).pattern("XX").pattern(" #").pattern(" #").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.WOODEN_PICKAXE).define('#', Items.STICK).define('X', ItemTags.PLANKS).pattern("XXX").pattern(" # ").pattern(" # ").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.WOODEN_SHOVEL).define('#', Items.STICK).define('X', ItemTags.PLANKS).pattern("X").pattern("#").pattern("#").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, Items.WOODEN_SWORD).define('#', Items.STICK).define('X', ItemTags.PLANKS).pattern("X").pattern("X").pattern("#").unlockedBy("has_stick", has(Items.STICK)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.WRITABLE_BOOK).requires(Items.BOOK).requires(Items.INK_SAC).requires(Items.FEATHER).unlockedBy("has_book", has(Items.BOOK)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.YELLOW_DYE, Blocks.DANDELION, "yellow_dye");
oneToOneConversionRecipe(p_250804_, Items.YELLOW_DYE, Blocks.SUNFLOWER, "yellow_dye", 2);
nineBlockStorageRecipes(p_250804_, RecipeCategory.FOOD, Items.DRIED_KELP, RecipeCategory.BUILDING_BLOCKS, Items.DRIED_KELP_BLOCK);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, Blocks.CONDUIT).define('#', Items.NAUTILUS_SHELL).define('X', Items.HEART_OF_THE_SEA).pattern("###").pattern("#X#").pattern("###").unlockedBy("has_nautilus_core", has(Items.HEART_OF_THE_SEA)).unlockedBy("has_nautilus_shell", has(Items.NAUTILUS_SHELL)).save(p_250804_);
wall(p_250804_, RecipeCategory.DECORATIONS, Blocks.RED_SANDSTONE_WALL, Blocks.RED_SANDSTONE);
wall(p_250804_, RecipeCategory.DECORATIONS, Blocks.STONE_BRICK_WALL, Blocks.STONE_BRICKS);
wall(p_250804_, RecipeCategory.DECORATIONS, Blocks.SANDSTONE_WALL, Blocks.SANDSTONE);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.CREEPER_BANNER_PATTERN).requires(Items.PAPER).requires(Items.CREEPER_HEAD).unlockedBy("has_creeper_head", has(Items.CREEPER_HEAD)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.SKULL_BANNER_PATTERN).requires(Items.PAPER).requires(Items.WITHER_SKELETON_SKULL).unlockedBy("has_wither_skeleton_skull", has(Items.WITHER_SKELETON_SKULL)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.FLOWER_BANNER_PATTERN).requires(Items.PAPER).requires(Blocks.OXEYE_DAISY).unlockedBy("has_oxeye_daisy", has(Blocks.OXEYE_DAISY)).save(p_250804_);
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.MOJANG_BANNER_PATTERN).requires(Items.PAPER).requires(Items.ENCHANTED_GOLDEN_APPLE).unlockedBy("has_enchanted_golden_apple", has(Items.ENCHANTED_GOLDEN_APPLE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SCAFFOLDING, 6).define('~', Items.STRING).define('I', Blocks.BAMBOO).pattern("I~I").pattern("I I").pattern("I I").unlockedBy("has_bamboo", has(Blocks.BAMBOO)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.GRINDSTONE).define('I', Items.STICK).define('-', Blocks.STONE_SLAB).define('#', ItemTags.PLANKS).pattern("I-I").pattern("# #").unlockedBy("has_stone_slab", has(Blocks.STONE_SLAB)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.BLAST_FURNACE).define('#', Blocks.SMOOTH_STONE).define('X', Blocks.FURNACE).define('I', Items.IRON_INGOT).pattern("III").pattern("IXI").pattern("###").unlockedBy("has_smooth_stone", has(Blocks.SMOOTH_STONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SMOKER).define('#', ItemTags.LOGS).define('X', Blocks.FURNACE).pattern(" # ").pattern("#X#").pattern(" # ").unlockedBy("has_furnace", has(Blocks.FURNACE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CARTOGRAPHY_TABLE).define('#', ItemTags.PLANKS).define('@', Items.PAPER).pattern("@@").pattern("##").pattern("##").unlockedBy("has_paper", has(Items.PAPER)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.SMITHING_TABLE).define('#', ItemTags.PLANKS).define('@', Items.IRON_INGOT).pattern("@@").pattern("##").pattern("##").unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.FLETCHING_TABLE).define('#', ItemTags.PLANKS).define('@', Items.FLINT).pattern("@@").pattern("##").pattern("##").unlockedBy("has_flint", has(Items.FLINT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.STONECUTTER).define('I', Items.IRON_INGOT).define('#', Blocks.STONE).pattern(" I ").pattern("###").unlockedBy("has_stone", has(Blocks.STONE)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.LODESTONE).define('S', Items.CHISELED_STONE_BRICKS).define('#', Items.NETHERITE_INGOT).pattern("SSS").pattern("S#S").pattern("SSS").unlockedBy("has_netherite_ingot", has(Items.NETHERITE_INGOT)).save(p_250804_);
nineBlockStorageRecipesRecipesWithCustomUnpacking(p_250804_, RecipeCategory.MISC, Items.NETHERITE_INGOT, RecipeCategory.BUILDING_BLOCKS, Items.NETHERITE_BLOCK, "netherite_ingot_from_netherite_block", "netherite_ingot");
ShapelessRecipeBuilder.shapeless(RecipeCategory.MISC, Items.NETHERITE_INGOT).requires(Items.NETHERITE_SCRAP, 4).requires(Items.GOLD_INGOT, 4).group("netherite_ingot").unlockedBy("has_netherite_scrap", has(Items.NETHERITE_SCRAP)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.RESPAWN_ANCHOR).define('O', Blocks.CRYING_OBSIDIAN).define('G', Blocks.GLOWSTONE).pattern("OOO").pattern("GGG").pattern("OOO").unlockedBy("has_obsidian", has(Blocks.CRYING_OBSIDIAN)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Blocks.CHAIN).define('I', Items.IRON_INGOT).define('N', Items.IRON_NUGGET).pattern("N").pattern("I").pattern("N").unlockedBy("has_iron_nugget", has(Items.IRON_NUGGET)).unlockedBy("has_iron_ingot", has(Items.IRON_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.TINTED_GLASS, 2).define('G', Blocks.GLASS).define('S', Items.AMETHYST_SHARD).pattern(" S ").pattern("SGS").pattern(" S ").unlockedBy("has_amethyst_shard", has(Items.AMETHYST_SHARD)).save(p_250804_);
twoByTwoPacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.AMETHYST_BLOCK, Items.AMETHYST_SHARD);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.RECOVERY_COMPASS).define('C', Items.COMPASS).define('S', Items.ECHO_SHARD).pattern("SSS").pattern("SCS").pattern("SSS").unlockedBy("has_echo_shard", has(Items.ECHO_SHARD)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, Items.CALIBRATED_SCULK_SENSOR).define('#', Items.AMETHYST_SHARD).define('X', Items.SCULK_SENSOR).pattern(" # ").pattern("#X#").unlockedBy("has_amethyst_shard", has(Items.AMETHYST_SHARD)).save(p_250804_);
threeByThreePacker(p_250804_, RecipeCategory.MISC, Items.MUSIC_DISC_5, Items.DISC_FRAGMENT_5);
SpecialRecipeBuilder.special(RecipeSerializer.ARMOR_DYE).save(p_250804_, "armor_dye");
SpecialRecipeBuilder.special(RecipeSerializer.BANNER_DUPLICATE).save(p_250804_, "banner_duplicate");
SpecialRecipeBuilder.special(RecipeSerializer.BOOK_CLONING).save(p_250804_, "book_cloning");
SpecialRecipeBuilder.special(RecipeSerializer.FIREWORK_ROCKET).save(p_250804_, "firework_rocket");
SpecialRecipeBuilder.special(RecipeSerializer.FIREWORK_STAR).save(p_250804_, "firework_star");
SpecialRecipeBuilder.special(RecipeSerializer.FIREWORK_STAR_FADE).save(p_250804_, "firework_star_fade");
SpecialRecipeBuilder.special(RecipeSerializer.MAP_CLONING).save(p_250804_, "map_cloning");
SpecialRecipeBuilder.special(RecipeSerializer.MAP_EXTENDING).save(p_250804_, "map_extending");
SpecialRecipeBuilder.special(RecipeSerializer.REPAIR_ITEM).save(p_250804_, "repair_item");
SpecialRecipeBuilder.special(RecipeSerializer.SHIELD_DECORATION).save(p_250804_, "shield_decoration");
SpecialRecipeBuilder.special(RecipeSerializer.SHULKER_BOX_COLORING).save(p_250804_, "shulker_box_coloring");
SpecialRecipeBuilder.special(RecipeSerializer.TIPPED_ARROW).save(p_250804_, "tipped_arrow");
SpecialRecipeBuilder.special(RecipeSerializer.SUSPICIOUS_STEW).save(p_250804_, "suspicious_stew");
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.POTATO), RecipeCategory.FOOD, Items.BAKED_POTATO, 0.35F, 200).unlockedBy("has_potato", has(Items.POTATO)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.CLAY_BALL), RecipeCategory.MISC, Items.BRICK, 0.3F, 200).unlockedBy("has_clay_ball", has(Items.CLAY_BALL)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(ItemTags.LOGS_THAT_BURN), RecipeCategory.MISC, Items.CHARCOAL, 0.15F, 200).unlockedBy("has_log", has(ItemTags.LOGS_THAT_BURN)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.CHORUS_FRUIT), RecipeCategory.MISC, Items.POPPED_CHORUS_FRUIT, 0.1F, 200).unlockedBy("has_chorus_fruit", has(Items.CHORUS_FRUIT)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.BEEF), RecipeCategory.FOOD, Items.COOKED_BEEF, 0.35F, 200).unlockedBy("has_beef", has(Items.BEEF)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.CHICKEN), RecipeCategory.FOOD, Items.COOKED_CHICKEN, 0.35F, 200).unlockedBy("has_chicken", has(Items.CHICKEN)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.COD), RecipeCategory.FOOD, Items.COOKED_COD, 0.35F, 200).unlockedBy("has_cod", has(Items.COD)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.KELP), RecipeCategory.FOOD, Items.DRIED_KELP, 0.1F, 200).unlockedBy("has_kelp", has(Blocks.KELP)).save(p_250804_, getSmeltingRecipeName(Items.DRIED_KELP));
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.SALMON), RecipeCategory.FOOD, Items.COOKED_SALMON, 0.35F, 200).unlockedBy("has_salmon", has(Items.SALMON)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.MUTTON), RecipeCategory.FOOD, Items.COOKED_MUTTON, 0.35F, 200).unlockedBy("has_mutton", has(Items.MUTTON)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.PORKCHOP), RecipeCategory.FOOD, Items.COOKED_PORKCHOP, 0.35F, 200).unlockedBy("has_porkchop", has(Items.PORKCHOP)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.RABBIT), RecipeCategory.FOOD, Items.COOKED_RABBIT, 0.35F, 200).unlockedBy("has_rabbit", has(Items.RABBIT)).save(p_250804_);
oreSmelting(p_250804_, COAL_SMELTABLES, RecipeCategory.MISC, Items.COAL, 0.1F, 200, "coal");
oreSmelting(p_250804_, IRON_SMELTABLES, RecipeCategory.MISC, Items.IRON_INGOT, 0.7F, 200, "iron_ingot");
oreSmelting(p_250804_, COPPER_SMELTABLES, RecipeCategory.MISC, Items.COPPER_INGOT, 0.7F, 200, "copper_ingot");
oreSmelting(p_250804_, GOLD_SMELTABLES, RecipeCategory.MISC, Items.GOLD_INGOT, 1.0F, 200, "gold_ingot");
oreSmelting(p_250804_, DIAMOND_SMELTABLES, RecipeCategory.MISC, Items.DIAMOND, 1.0F, 200, "diamond");
oreSmelting(p_250804_, LAPIS_SMELTABLES, RecipeCategory.MISC, Items.LAPIS_LAZULI, 0.2F, 200, "lapis_lazuli");
oreSmelting(p_250804_, REDSTONE_SMELTABLES, RecipeCategory.REDSTONE, Items.REDSTONE, 0.7F, 200, "redstone");
oreSmelting(p_250804_, EMERALD_SMELTABLES, RecipeCategory.MISC, Items.EMERALD, 1.0F, 200, "emerald");
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.RAW_IRON, RecipeCategory.BUILDING_BLOCKS, Items.RAW_IRON_BLOCK);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.RAW_COPPER, RecipeCategory.BUILDING_BLOCKS, Items.RAW_COPPER_BLOCK);
nineBlockStorageRecipes(p_250804_, RecipeCategory.MISC, Items.RAW_GOLD, RecipeCategory.BUILDING_BLOCKS, Items.RAW_GOLD_BLOCK);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(ItemTags.SMELTS_TO_GLASS), RecipeCategory.BUILDING_BLOCKS, Blocks.GLASS.asItem(), 0.1F, 200).unlockedBy("has_smelts_to_glass", has(ItemTags.SMELTS_TO_GLASS)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.SEA_PICKLE), RecipeCategory.MISC, Items.LIME_DYE, 0.1F, 200).unlockedBy("has_sea_pickle", has(Blocks.SEA_PICKLE)).save(p_250804_, getSmeltingRecipeName(Items.LIME_DYE));
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.CACTUS.asItem()), RecipeCategory.MISC, Items.GREEN_DYE, 1.0F, 200).unlockedBy("has_cactus", has(Blocks.CACTUS)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.GOLDEN_PICKAXE, Items.GOLDEN_SHOVEL, Items.GOLDEN_AXE, Items.GOLDEN_HOE, Items.GOLDEN_SWORD, Items.GOLDEN_HELMET, Items.GOLDEN_CHESTPLATE, Items.GOLDEN_LEGGINGS, Items.GOLDEN_BOOTS, Items.GOLDEN_HORSE_ARMOR), RecipeCategory.MISC, Items.GOLD_NUGGET, 0.1F, 200).unlockedBy("has_golden_pickaxe", has(Items.GOLDEN_PICKAXE)).unlockedBy("has_golden_shovel", has(Items.GOLDEN_SHOVEL)).unlockedBy("has_golden_axe", has(Items.GOLDEN_AXE)).unlockedBy("has_golden_hoe", has(Items.GOLDEN_HOE)).unlockedBy("has_golden_sword", has(Items.GOLDEN_SWORD)).unlockedBy("has_golden_helmet", has(Items.GOLDEN_HELMET)).unlockedBy("has_golden_chestplate", has(Items.GOLDEN_CHESTPLATE)).unlockedBy("has_golden_leggings", has(Items.GOLDEN_LEGGINGS)).unlockedBy("has_golden_boots", has(Items.GOLDEN_BOOTS)).unlockedBy("has_golden_horse_armor", has(Items.GOLDEN_HORSE_ARMOR)).save(p_250804_, getSmeltingRecipeName(Items.GOLD_NUGGET));
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Items.IRON_PICKAXE, Items.IRON_SHOVEL, Items.IRON_AXE, Items.IRON_HOE, Items.IRON_SWORD, Items.IRON_HELMET, Items.IRON_CHESTPLATE, Items.IRON_LEGGINGS, Items.IRON_BOOTS, Items.IRON_HORSE_ARMOR, Items.CHAINMAIL_HELMET, Items.CHAINMAIL_CHESTPLATE, Items.CHAINMAIL_LEGGINGS, Items.CHAINMAIL_BOOTS), RecipeCategory.MISC, Items.IRON_NUGGET, 0.1F, 200).unlockedBy("has_iron_pickaxe", has(Items.IRON_PICKAXE)).unlockedBy("has_iron_shovel", has(Items.IRON_SHOVEL)).unlockedBy("has_iron_axe", has(Items.IRON_AXE)).unlockedBy("has_iron_hoe", has(Items.IRON_HOE)).unlockedBy("has_iron_sword", has(Items.IRON_SWORD)).unlockedBy("has_iron_helmet", has(Items.IRON_HELMET)).unlockedBy("has_iron_chestplate", has(Items.IRON_CHESTPLATE)).unlockedBy("has_iron_leggings", has(Items.IRON_LEGGINGS)).unlockedBy("has_iron_boots", has(Items.IRON_BOOTS)).unlockedBy("has_iron_horse_armor", has(Items.IRON_HORSE_ARMOR)).unlockedBy("has_chainmail_helmet", has(Items.CHAINMAIL_HELMET)).unlockedBy("has_chainmail_chestplate", has(Items.CHAINMAIL_CHESTPLATE)).unlockedBy("has_chainmail_leggings", has(Items.CHAINMAIL_LEGGINGS)).unlockedBy("has_chainmail_boots", has(Items.CHAINMAIL_BOOTS)).save(p_250804_, getSmeltingRecipeName(Items.IRON_NUGGET));
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.CLAY), RecipeCategory.BUILDING_BLOCKS, Blocks.TERRACOTTA.asItem(), 0.35F, 200).unlockedBy("has_clay_block", has(Blocks.CLAY)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.NETHERRACK), RecipeCategory.MISC, Items.NETHER_BRICK, 0.1F, 200).unlockedBy("has_netherrack", has(Blocks.NETHERRACK)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.NETHER_QUARTZ_ORE), RecipeCategory.MISC, Items.QUARTZ, 0.2F, 200).unlockedBy("has_nether_quartz_ore", has(Blocks.NETHER_QUARTZ_ORE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.WET_SPONGE), RecipeCategory.BUILDING_BLOCKS, Blocks.SPONGE.asItem(), 0.15F, 200).unlockedBy("has_wet_sponge", has(Blocks.WET_SPONGE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.COBBLESTONE), RecipeCategory.BUILDING_BLOCKS, Blocks.STONE.asItem(), 0.1F, 200).unlockedBy("has_cobblestone", has(Blocks.COBBLESTONE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.STONE), RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_STONE.asItem(), 0.1F, 200).unlockedBy("has_stone", has(Blocks.STONE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.SANDSTONE), RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_SANDSTONE.asItem(), 0.1F, 200).unlockedBy("has_sandstone", has(Blocks.SANDSTONE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.RED_SANDSTONE), RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_RED_SANDSTONE.asItem(), 0.1F, 200).unlockedBy("has_red_sandstone", has(Blocks.RED_SANDSTONE)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.QUARTZ_BLOCK), RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_QUARTZ.asItem(), 0.1F, 200).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.STONE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.CRACKED_STONE_BRICKS.asItem(), 0.1F, 200).unlockedBy("has_stone_bricks", has(Blocks.STONE_BRICKS)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BLACK_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.BLACK_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_black_terracotta", has(Blocks.BLACK_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BLUE_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.BLUE_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_blue_terracotta", has(Blocks.BLUE_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BROWN_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.BROWN_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_brown_terracotta", has(Blocks.BROWN_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.CYAN_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.CYAN_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_cyan_terracotta", has(Blocks.CYAN_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.GRAY_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.GRAY_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_gray_terracotta", has(Blocks.GRAY_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.GREEN_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.GREEN_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_green_terracotta", has(Blocks.GREEN_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.LIGHT_BLUE_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.LIGHT_BLUE_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_light_blue_terracotta", has(Blocks.LIGHT_BLUE_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.LIGHT_GRAY_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.LIGHT_GRAY_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_light_gray_terracotta", has(Blocks.LIGHT_GRAY_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.LIME_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.LIME_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_lime_terracotta", has(Blocks.LIME_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.MAGENTA_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.MAGENTA_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_magenta_terracotta", has(Blocks.MAGENTA_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.ORANGE_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.ORANGE_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_orange_terracotta", has(Blocks.ORANGE_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.PINK_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.PINK_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_pink_terracotta", has(Blocks.PINK_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.PURPLE_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.PURPLE_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_purple_terracotta", has(Blocks.PURPLE_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.RED_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.RED_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_red_terracotta", has(Blocks.RED_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.WHITE_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.WHITE_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_white_terracotta", has(Blocks.WHITE_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.YELLOW_TERRACOTTA), RecipeCategory.DECORATIONS, Blocks.YELLOW_GLAZED_TERRACOTTA.asItem(), 0.1F, 200).unlockedBy("has_yellow_terracotta", has(Blocks.YELLOW_TERRACOTTA)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.ANCIENT_DEBRIS), RecipeCategory.MISC, Items.NETHERITE_SCRAP, 2.0F, 200).unlockedBy("has_ancient_debris", has(Blocks.ANCIENT_DEBRIS)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.BASALT), RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_BASALT, 0.1F, 200).unlockedBy("has_basalt", has(Blocks.BASALT)).save(p_250804_);
SimpleCookingRecipeBuilder.smelting(Ingredient.of(Blocks.COBBLED_DEEPSLATE), RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE, 0.1F, 200).unlockedBy("has_cobbled_deepslate", has(Blocks.COBBLED_DEEPSLATE)).save(p_250804_);
oreBlasting(p_250804_, COAL_SMELTABLES, RecipeCategory.MISC, Items.COAL, 0.1F, 100, "coal");
oreBlasting(p_250804_, IRON_SMELTABLES, RecipeCategory.MISC, Items.IRON_INGOT, 0.7F, 100, "iron_ingot");
oreBlasting(p_250804_, COPPER_SMELTABLES, RecipeCategory.MISC, Items.COPPER_INGOT, 0.7F, 100, "copper_ingot");
oreBlasting(p_250804_, GOLD_SMELTABLES, RecipeCategory.MISC, Items.GOLD_INGOT, 1.0F, 100, "gold_ingot");
oreBlasting(p_250804_, DIAMOND_SMELTABLES, RecipeCategory.MISC, Items.DIAMOND, 1.0F, 100, "diamond");
oreBlasting(p_250804_, LAPIS_SMELTABLES, RecipeCategory.MISC, Items.LAPIS_LAZULI, 0.2F, 100, "lapis_lazuli");
oreBlasting(p_250804_, REDSTONE_SMELTABLES, RecipeCategory.REDSTONE, Items.REDSTONE, 0.7F, 100, "redstone");
oreBlasting(p_250804_, EMERALD_SMELTABLES, RecipeCategory.MISC, Items.EMERALD, 1.0F, 100, "emerald");
SimpleCookingRecipeBuilder.blasting(Ingredient.of(Blocks.NETHER_QUARTZ_ORE), RecipeCategory.MISC, Items.QUARTZ, 0.2F, 100).unlockedBy("has_nether_quartz_ore", has(Blocks.NETHER_QUARTZ_ORE)).save(p_250804_, getBlastingRecipeName(Items.QUARTZ));
SimpleCookingRecipeBuilder.blasting(Ingredient.of(Items.GOLDEN_PICKAXE, Items.GOLDEN_SHOVEL, Items.GOLDEN_AXE, Items.GOLDEN_HOE, Items.GOLDEN_SWORD, Items.GOLDEN_HELMET, Items.GOLDEN_CHESTPLATE, Items.GOLDEN_LEGGINGS, Items.GOLDEN_BOOTS, Items.GOLDEN_HORSE_ARMOR), RecipeCategory.MISC, Items.GOLD_NUGGET, 0.1F, 100).unlockedBy("has_golden_pickaxe", has(Items.GOLDEN_PICKAXE)).unlockedBy("has_golden_shovel", has(Items.GOLDEN_SHOVEL)).unlockedBy("has_golden_axe", has(Items.GOLDEN_AXE)).unlockedBy("has_golden_hoe", has(Items.GOLDEN_HOE)).unlockedBy("has_golden_sword", has(Items.GOLDEN_SWORD)).unlockedBy("has_golden_helmet", has(Items.GOLDEN_HELMET)).unlockedBy("has_golden_chestplate", has(Items.GOLDEN_CHESTPLATE)).unlockedBy("has_golden_leggings", has(Items.GOLDEN_LEGGINGS)).unlockedBy("has_golden_boots", has(Items.GOLDEN_BOOTS)).unlockedBy("has_golden_horse_armor", has(Items.GOLDEN_HORSE_ARMOR)).save(p_250804_, getBlastingRecipeName(Items.GOLD_NUGGET));
SimpleCookingRecipeBuilder.blasting(Ingredient.of(Items.IRON_PICKAXE, Items.IRON_SHOVEL, Items.IRON_AXE, Items.IRON_HOE, Items.IRON_SWORD, Items.IRON_HELMET, Items.IRON_CHESTPLATE, Items.IRON_LEGGINGS, Items.IRON_BOOTS, Items.IRON_HORSE_ARMOR, Items.CHAINMAIL_HELMET, Items.CHAINMAIL_CHESTPLATE, Items.CHAINMAIL_LEGGINGS, Items.CHAINMAIL_BOOTS), RecipeCategory.MISC, Items.IRON_NUGGET, 0.1F, 100).unlockedBy("has_iron_pickaxe", has(Items.IRON_PICKAXE)).unlockedBy("has_iron_shovel", has(Items.IRON_SHOVEL)).unlockedBy("has_iron_axe", has(Items.IRON_AXE)).unlockedBy("has_iron_hoe", has(Items.IRON_HOE)).unlockedBy("has_iron_sword", has(Items.IRON_SWORD)).unlockedBy("has_iron_helmet", has(Items.IRON_HELMET)).unlockedBy("has_iron_chestplate", has(Items.IRON_CHESTPLATE)).unlockedBy("has_iron_leggings", has(Items.IRON_LEGGINGS)).unlockedBy("has_iron_boots", has(Items.IRON_BOOTS)).unlockedBy("has_iron_horse_armor", has(Items.IRON_HORSE_ARMOR)).unlockedBy("has_chainmail_helmet", has(Items.CHAINMAIL_HELMET)).unlockedBy("has_chainmail_chestplate", has(Items.CHAINMAIL_CHESTPLATE)).unlockedBy("has_chainmail_leggings", has(Items.CHAINMAIL_LEGGINGS)).unlockedBy("has_chainmail_boots", has(Items.CHAINMAIL_BOOTS)).save(p_250804_, getBlastingRecipeName(Items.IRON_NUGGET));
SimpleCookingRecipeBuilder.blasting(Ingredient.of(Blocks.ANCIENT_DEBRIS), RecipeCategory.MISC, Items.NETHERITE_SCRAP, 2.0F, 100).unlockedBy("has_ancient_debris", has(Blocks.ANCIENT_DEBRIS)).save(p_250804_, getBlastingRecipeName(Items.NETHERITE_SCRAP));
cookRecipes(p_250804_, "smoking", RecipeSerializer.SMOKING_RECIPE, 100);
cookRecipes(p_250804_, "campfire_cooking", RecipeSerializer.CAMPFIRE_COOKING_RECIPE, 600);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_SLAB, Blocks.STONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_STAIRS, Blocks.STONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICKS, Blocks.STONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICK_SLAB, Blocks.STONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICK_STAIRS, Blocks.STONE);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.STONE), RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_STONE_BRICKS).unlockedBy("has_stone", has(Blocks.STONE)).save(p_250804_, "chiseled_stone_bricks_stone_from_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.STONE), RecipeCategory.DECORATIONS, Blocks.STONE_BRICK_WALL).unlockedBy("has_stone", has(Blocks.STONE)).save(p_250804_, "stone_brick_walls_from_stone_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_SANDSTONE, Blocks.SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SANDSTONE_SLAB, Blocks.SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_SANDSTONE_SLAB, Blocks.SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_SANDSTONE_SLAB, Blocks.CUT_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SANDSTONE_STAIRS, Blocks.SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.SANDSTONE_WALL, Blocks.SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_SANDSTONE, Blocks.SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_RED_SANDSTONE, Blocks.RED_SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.RED_SANDSTONE_SLAB, Blocks.RED_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_RED_SANDSTONE_SLAB, Blocks.RED_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_RED_SANDSTONE_SLAB, Blocks.CUT_RED_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.RED_SANDSTONE_STAIRS, Blocks.RED_SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.RED_SANDSTONE_WALL, Blocks.RED_SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_RED_SANDSTONE, Blocks.RED_SANDSTONE);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.QUARTZ_BLOCK), RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_SLAB, 2).unlockedBy("has_quartz_block", has(Blocks.QUARTZ_BLOCK)).save(p_250804_, "quartz_slab_from_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_STAIRS, Blocks.QUARTZ_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_PILLAR, Blocks.QUARTZ_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_QUARTZ_BLOCK, Blocks.QUARTZ_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.QUARTZ_BRICKS, Blocks.QUARTZ_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.COBBLESTONE_STAIRS, Blocks.COBBLESTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.COBBLESTONE_SLAB, Blocks.COBBLESTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.COBBLESTONE_WALL, Blocks.COBBLESTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICK_SLAB, Blocks.STONE_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.STONE_BRICK_STAIRS, Blocks.STONE_BRICKS);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.STONE_BRICKS), RecipeCategory.DECORATIONS, Blocks.STONE_BRICK_WALL).unlockedBy("has_stone_bricks", has(Blocks.STONE_BRICKS)).save(p_250804_, "stone_brick_wall_from_stone_bricks_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_STONE_BRICKS, Blocks.STONE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BRICK_SLAB, Blocks.BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BRICK_STAIRS, Blocks.BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.BRICK_WALL, Blocks.BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MUD_BRICK_SLAB, Blocks.MUD_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MUD_BRICK_STAIRS, Blocks.MUD_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.MUD_BRICK_WALL, Blocks.MUD_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_BRICK_SLAB, Blocks.NETHER_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.NETHER_BRICK_STAIRS, Blocks.NETHER_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.NETHER_BRICK_WALL, Blocks.NETHER_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_NETHER_BRICKS, Blocks.NETHER_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.RED_NETHER_BRICK_SLAB, Blocks.RED_NETHER_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.RED_NETHER_BRICK_STAIRS, Blocks.RED_NETHER_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.RED_NETHER_BRICK_WALL, Blocks.RED_NETHER_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_SLAB, Blocks.PURPUR_BLOCK, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_STAIRS, Blocks.PURPUR_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PURPUR_PILLAR, Blocks.PURPUR_BLOCK);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE_SLAB, Blocks.PRISMARINE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE_STAIRS, Blocks.PRISMARINE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.PRISMARINE_WALL, Blocks.PRISMARINE);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.PRISMARINE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE_BRICK_SLAB, 2).unlockedBy("has_prismarine_brick", has(Blocks.PRISMARINE_BRICKS)).save(p_250804_, "prismarine_brick_slab_from_prismarine_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.PRISMARINE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.PRISMARINE_BRICK_STAIRS).unlockedBy("has_prismarine_brick", has(Blocks.PRISMARINE_BRICKS)).save(p_250804_, "prismarine_brick_stairs_from_prismarine_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DARK_PRISMARINE_SLAB, Blocks.DARK_PRISMARINE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DARK_PRISMARINE_STAIRS, Blocks.DARK_PRISMARINE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.ANDESITE_SLAB, Blocks.ANDESITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.ANDESITE_STAIRS, Blocks.ANDESITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.ANDESITE_WALL, Blocks.ANDESITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_ANDESITE, Blocks.ANDESITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_ANDESITE_SLAB, Blocks.ANDESITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_ANDESITE_STAIRS, Blocks.ANDESITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_ANDESITE_SLAB, Blocks.POLISHED_ANDESITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_ANDESITE_STAIRS, Blocks.POLISHED_ANDESITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BASALT, Blocks.BASALT);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.GRANITE_SLAB, Blocks.GRANITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.GRANITE_STAIRS, Blocks.GRANITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.GRANITE_WALL, Blocks.GRANITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_GRANITE, Blocks.GRANITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_GRANITE_SLAB, Blocks.GRANITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_GRANITE_STAIRS, Blocks.GRANITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_GRANITE_SLAB, Blocks.POLISHED_GRANITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_GRANITE_STAIRS, Blocks.POLISHED_GRANITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DIORITE_SLAB, Blocks.DIORITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DIORITE_STAIRS, Blocks.DIORITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DIORITE_WALL, Blocks.DIORITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DIORITE, Blocks.DIORITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DIORITE_SLAB, Blocks.DIORITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DIORITE_STAIRS, Blocks.DIORITE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DIORITE_SLAB, Blocks.POLISHED_DIORITE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DIORITE_STAIRS, Blocks.POLISHED_DIORITE);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.MOSSY_STONE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_STONE_BRICK_SLAB, 2).unlockedBy("has_mossy_stone_bricks", has(Blocks.MOSSY_STONE_BRICKS)).save(p_250804_, "mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.MOSSY_STONE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_STONE_BRICK_STAIRS).unlockedBy("has_mossy_stone_bricks", has(Blocks.MOSSY_STONE_BRICKS)).save(p_250804_, "mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.MOSSY_STONE_BRICKS), RecipeCategory.DECORATIONS, Blocks.MOSSY_STONE_BRICK_WALL).unlockedBy("has_mossy_stone_bricks", has(Blocks.MOSSY_STONE_BRICKS)).save(p_250804_, "mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_COBBLESTONE_SLAB, Blocks.MOSSY_COBBLESTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.MOSSY_COBBLESTONE_STAIRS, Blocks.MOSSY_COBBLESTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.MOSSY_COBBLESTONE_WALL, Blocks.MOSSY_COBBLESTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_SANDSTONE_SLAB, Blocks.SMOOTH_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_SANDSTONE_STAIRS, Blocks.SMOOTH_SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_RED_SANDSTONE_SLAB, Blocks.SMOOTH_RED_SANDSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_RED_SANDSTONE_STAIRS, Blocks.SMOOTH_RED_SANDSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_QUARTZ_SLAB, Blocks.SMOOTH_QUARTZ, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_QUARTZ_STAIRS, Blocks.SMOOTH_QUARTZ);
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.END_STONE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICK_SLAB, 2).unlockedBy("has_end_stone_brick", has(Blocks.END_STONE_BRICKS)).save(p_250804_, "end_stone_brick_slab_from_end_stone_brick_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.END_STONE_BRICKS), RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICK_STAIRS).unlockedBy("has_end_stone_brick", has(Blocks.END_STONE_BRICKS)).save(p_250804_, "end_stone_brick_stairs_from_end_stone_brick_stonecutting");
SingleItemRecipeBuilder.stonecutting(Ingredient.of(Blocks.END_STONE_BRICKS), RecipeCategory.DECORATIONS, Blocks.END_STONE_BRICK_WALL).unlockedBy("has_end_stone_brick", has(Blocks.END_STONE_BRICKS)).save(p_250804_, "end_stone_brick_wall_from_end_stone_brick_stonecutting");
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICKS, Blocks.END_STONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICK_SLAB, Blocks.END_STONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.END_STONE_BRICK_STAIRS, Blocks.END_STONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.END_STONE_BRICK_WALL, Blocks.END_STONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.SMOOTH_STONE_SLAB, Blocks.SMOOTH_STONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BLACKSTONE_SLAB, Blocks.BLACKSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BLACKSTONE_STAIRS, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.BLACKSTONE_WALL, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_BLACKSTONE_WALL, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_SLAB, Blocks.BLACKSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_STAIRS, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_POLISHED_BLACKSTONE, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICKS, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_SLAB, Blocks.BLACKSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_STAIRS, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_BLACKSTONE_BRICK_WALL, Blocks.BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_SLAB, Blocks.POLISHED_BLACKSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_STAIRS, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICKS, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_BLACKSTONE_WALL, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_SLAB, Blocks.POLISHED_BLACKSTONE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_STAIRS, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_BLACKSTONE_BRICK_WALL, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_POLISHED_BLACKSTONE, Blocks.POLISHED_BLACKSTONE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_SLAB, Blocks.POLISHED_BLACKSTONE_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_BLACKSTONE_BRICK_STAIRS, Blocks.POLISHED_BLACKSTONE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_BLACKSTONE_BRICK_WALL, Blocks.POLISHED_BLACKSTONE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_COPPER_SLAB, Blocks.CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_COPPER_STAIRS, Blocks.CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.EXPOSED_CUT_COPPER_SLAB, Blocks.EXPOSED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.EXPOSED_CUT_COPPER_STAIRS, Blocks.EXPOSED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WEATHERED_CUT_COPPER_SLAB, Blocks.WEATHERED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WEATHERED_CUT_COPPER_STAIRS, Blocks.WEATHERED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.OXIDIZED_CUT_COPPER_SLAB, Blocks.OXIDIZED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.OXIDIZED_CUT_COPPER_STAIRS, Blocks.OXIDIZED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_CUT_COPPER_SLAB, Blocks.WAXED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_CUT_COPPER_STAIRS, Blocks.WAXED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_EXPOSED_CUT_COPPER_SLAB, Blocks.WAXED_EXPOSED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_EXPOSED_CUT_COPPER_STAIRS, Blocks.WAXED_EXPOSED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_WEATHERED_CUT_COPPER_SLAB, Blocks.WAXED_WEATHERED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_WEATHERED_CUT_COPPER_STAIRS, Blocks.WAXED_WEATHERED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_OXIDIZED_CUT_COPPER_SLAB, Blocks.WAXED_OXIDIZED_CUT_COPPER, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_OXIDIZED_CUT_COPPER_STAIRS, Blocks.WAXED_OXIDIZED_CUT_COPPER);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_COPPER, Blocks.COPPER_BLOCK, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_COPPER_STAIRS, Blocks.COPPER_BLOCK, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CUT_COPPER_SLAB, Blocks.COPPER_BLOCK, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.EXPOSED_CUT_COPPER, Blocks.EXPOSED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.EXPOSED_CUT_COPPER_STAIRS, Blocks.EXPOSED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.EXPOSED_CUT_COPPER_SLAB, Blocks.EXPOSED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WEATHERED_CUT_COPPER, Blocks.WEATHERED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WEATHERED_CUT_COPPER_STAIRS, Blocks.WEATHERED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WEATHERED_CUT_COPPER_SLAB, Blocks.WEATHERED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.OXIDIZED_CUT_COPPER, Blocks.OXIDIZED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.OXIDIZED_CUT_COPPER_STAIRS, Blocks.OXIDIZED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.OXIDIZED_CUT_COPPER_SLAB, Blocks.OXIDIZED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_CUT_COPPER, Blocks.WAXED_COPPER_BLOCK, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_CUT_COPPER_STAIRS, Blocks.WAXED_COPPER_BLOCK, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_CUT_COPPER_SLAB, Blocks.WAXED_COPPER_BLOCK, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_EXPOSED_CUT_COPPER, Blocks.WAXED_EXPOSED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_EXPOSED_CUT_COPPER_STAIRS, Blocks.WAXED_EXPOSED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_EXPOSED_CUT_COPPER_SLAB, Blocks.WAXED_EXPOSED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_WEATHERED_CUT_COPPER, Blocks.WAXED_WEATHERED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_WEATHERED_CUT_COPPER_STAIRS, Blocks.WAXED_WEATHERED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_WEATHERED_CUT_COPPER_SLAB, Blocks.WAXED_WEATHERED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_OXIDIZED_CUT_COPPER, Blocks.WAXED_OXIDIZED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_OXIDIZED_CUT_COPPER_STAIRS, Blocks.WAXED_OXIDIZED_COPPER, 4);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.WAXED_OXIDIZED_CUT_COPPER_SLAB, Blocks.WAXED_OXIDIZED_COPPER, 8);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.COBBLED_DEEPSLATE_SLAB, Blocks.COBBLED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.COBBLED_DEEPSLATE_STAIRS, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.COBBLED_DEEPSLATE_WALL, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_DEEPSLATE, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DEEPSLATE, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DEEPSLATE_SLAB, Blocks.COBBLED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DEEPSLATE_STAIRS, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_DEEPSLATE_WALL, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICKS, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_SLAB, Blocks.COBBLED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_STAIRS, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_BRICK_WALL, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILES, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_SLAB, Blocks.COBBLED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_STAIRS, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_TILE_WALL, Blocks.COBBLED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DEEPSLATE_SLAB, Blocks.POLISHED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.POLISHED_DEEPSLATE_STAIRS, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.POLISHED_DEEPSLATE_WALL, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICKS, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_SLAB, Blocks.POLISHED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_STAIRS, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_BRICK_WALL, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILES, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_SLAB, Blocks.POLISHED_DEEPSLATE, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_STAIRS, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_TILE_WALL, Blocks.POLISHED_DEEPSLATE);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_SLAB, Blocks.DEEPSLATE_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_BRICK_STAIRS, Blocks.DEEPSLATE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_BRICK_WALL, Blocks.DEEPSLATE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILES, Blocks.DEEPSLATE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_SLAB, Blocks.DEEPSLATE_BRICKS, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_STAIRS, Blocks.DEEPSLATE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_TILE_WALL, Blocks.DEEPSLATE_BRICKS);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_SLAB, Blocks.DEEPSLATE_TILES, 2);
stonecutterResultFromBase(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.DEEPSLATE_TILE_STAIRS, Blocks.DEEPSLATE_TILES);
stonecutterResultFromBase(p_250804_, RecipeCategory.DECORATIONS, Blocks.DEEPSLATE_TILE_WALL, Blocks.DEEPSLATE_TILES);
smithingTrims().forEach((p_285340_, p_285087_) -> {
trimSmithing(p_250804_, p_285340_, p_285087_);
});
netheriteSmithing(p_250804_, Items.DIAMOND_CHESTPLATE, RecipeCategory.COMBAT, Items.NETHERITE_CHESTPLATE);
netheriteSmithing(p_250804_, Items.DIAMOND_LEGGINGS, RecipeCategory.COMBAT, Items.NETHERITE_LEGGINGS);
netheriteSmithing(p_250804_, Items.DIAMOND_HELMET, RecipeCategory.COMBAT, Items.NETHERITE_HELMET);
netheriteSmithing(p_250804_, Items.DIAMOND_BOOTS, RecipeCategory.COMBAT, Items.NETHERITE_BOOTS);
netheriteSmithing(p_250804_, Items.DIAMOND_SWORD, RecipeCategory.COMBAT, Items.NETHERITE_SWORD);
netheriteSmithing(p_250804_, Items.DIAMOND_AXE, RecipeCategory.TOOLS, Items.NETHERITE_AXE);
netheriteSmithing(p_250804_, Items.DIAMOND_PICKAXE, RecipeCategory.TOOLS, Items.NETHERITE_PICKAXE);
netheriteSmithing(p_250804_, Items.DIAMOND_HOE, RecipeCategory.TOOLS, Items.NETHERITE_HOE);
netheriteSmithing(p_250804_, Items.DIAMOND_SHOVEL, RecipeCategory.TOOLS, Items.NETHERITE_SHOVEL);
copySmithingTemplate(p_250804_, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, Items.NETHERRACK);
copySmithingTemplate(p_250804_, Items.SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COBBLESTONE);
copySmithingTemplate(p_250804_, Items.DUNE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SANDSTONE);
copySmithingTemplate(p_250804_, Items.COAST_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COBBLESTONE);
copySmithingTemplate(p_250804_, Items.WILD_ARMOR_TRIM_SMITHING_TEMPLATE, Items.MOSSY_COBBLESTONE);
copySmithingTemplate(p_250804_, Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COBBLED_DEEPSLATE);
copySmithingTemplate(p_250804_, Items.EYE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.END_STONE);
copySmithingTemplate(p_250804_, Items.VEX_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COBBLESTONE);
copySmithingTemplate(p_250804_, Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.PRISMARINE);
copySmithingTemplate(p_250804_, Items.SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE, Items.BLACKSTONE);
copySmithingTemplate(p_250804_, Items.RIB_ARMOR_TRIM_SMITHING_TEMPLATE, Items.NETHERRACK);
copySmithingTemplate(p_250804_, Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.PURPUR_BLOCK);
copySmithingTemplate(p_250804_, Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COBBLED_DEEPSLATE);
copySmithingTemplate(p_250804_, Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.TERRACOTTA);
copySmithingTemplate(p_250804_, Items.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.TERRACOTTA);
copySmithingTemplate(p_250804_, Items.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.TERRACOTTA);
copySmithingTemplate(p_250804_, Items.HOST_ARMOR_TRIM_SMITHING_TEMPLATE, Items.TERRACOTTA);
threeByThreePacker(p_250804_, RecipeCategory.BUILDING_BLOCKS, Blocks.BAMBOO_BLOCK, Items.BAMBOO);
planksFromLogs(p_250804_, Blocks.BAMBOO_PLANKS, ItemTags.BAMBOO_BLOCKS, 2);
mosaicBuilder(p_250804_, RecipeCategory.DECORATIONS, Blocks.BAMBOO_MOSAIC, Blocks.BAMBOO_SLAB);
woodenBoat(p_250804_, Items.BAMBOO_RAFT, Blocks.BAMBOO_PLANKS);
chestBoat(p_250804_, Items.BAMBOO_CHEST_RAFT, Items.BAMBOO_RAFT);
hangingSign(p_250804_, Items.OAK_HANGING_SIGN, Blocks.STRIPPED_OAK_LOG);
hangingSign(p_250804_, Items.SPRUCE_HANGING_SIGN, Blocks.STRIPPED_SPRUCE_LOG);
hangingSign(p_250804_, Items.BIRCH_HANGING_SIGN, Blocks.STRIPPED_BIRCH_LOG);
hangingSign(p_250804_, Items.JUNGLE_HANGING_SIGN, Blocks.STRIPPED_JUNGLE_LOG);
hangingSign(p_250804_, Items.ACACIA_HANGING_SIGN, Blocks.STRIPPED_ACACIA_LOG);
hangingSign(p_250804_, Items.CHERRY_HANGING_SIGN, Blocks.STRIPPED_CHERRY_LOG);
hangingSign(p_250804_, Items.DARK_OAK_HANGING_SIGN, Blocks.STRIPPED_DARK_OAK_LOG);
hangingSign(p_250804_, Items.MANGROVE_HANGING_SIGN, Blocks.STRIPPED_MANGROVE_LOG);
hangingSign(p_250804_, Items.BAMBOO_HANGING_SIGN, Items.STRIPPED_BAMBOO_BLOCK);
hangingSign(p_250804_, Items.CRIMSON_HANGING_SIGN, Blocks.STRIPPED_CRIMSON_STEM);
hangingSign(p_250804_, Items.WARPED_HANGING_SIGN, Blocks.STRIPPED_WARPED_STEM);
ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, Blocks.CHISELED_BOOKSHELF).define('#', ItemTags.PLANKS).define('X', ItemTags.WOODEN_SLABS).pattern("###").pattern("XXX").pattern("###").unlockedBy("has_book", has(Items.BOOK)).save(p_250804_);
oneToOneConversionRecipe(p_250804_, Items.ORANGE_DYE, Blocks.TORCHFLOWER, "orange_dye");
oneToOneConversionRecipe(p_250804_, Items.CYAN_DYE, Blocks.PITCHER_PLANT, "cyan_dye", 2);
planksFromLog(p_250804_, Blocks.CHERRY_PLANKS, ItemTags.CHERRY_LOGS, 4);
woodFromLogs(p_250804_, Blocks.CHERRY_WOOD, Blocks.CHERRY_LOG);
woodFromLogs(p_250804_, Blocks.STRIPPED_CHERRY_WOOD, Blocks.STRIPPED_CHERRY_LOG);
woodenBoat(p_250804_, Items.CHERRY_BOAT, Blocks.CHERRY_PLANKS);
chestBoat(p_250804_, Items.CHERRY_CHEST_BOAT, Items.CHERRY_BOAT);
oneToOneConversionRecipe(p_250804_, Items.PINK_DYE, Items.PINK_PETALS, "pink_dye", 1);
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, Items.BRUSH).define('X', Items.FEATHER).define('#', Items.COPPER_INGOT).define('I', Items.STICK).pattern("X").pattern("#").pattern("I").unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)).save(p_250804_);
ShapedRecipeBuilder.shaped(RecipeCategory.DECORATIONS, Items.DECORATED_POT).define('#', Items.BRICK).pattern(" # ").pattern("# #").pattern(" # ").unlockedBy("has_brick", has(ItemTags.DECORATED_POT_INGREDIENTS)).save(p_250804_, "decorated_pot_simple");
SpecialRecipeBuilder.special(RecipeSerializer.DECORATED_POT_RECIPE).save(p_250804_, "decorated_pot");
}
public static Map<Item, ResourceLocation> smithingTrims() {
return Stream.of(Items.TIDE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE, Items.COAST_ARMOR_TRIM_SMITHING_TEMPLATE, Items.VEX_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.WARD_ARMOR_TRIM_SMITHING_TEMPLATE, Items.EYE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.DUNE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.WILD_ARMOR_TRIM_SMITHING_TEMPLATE, Items.RIB_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE, Items.WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, Items.RAISER_ARMOR_TRIM_SMITHING_TEMPLATE, Items.HOST_ARMOR_TRIM_SMITHING_TEMPLATE).collect(Collectors.toMap(Function.identity(), (p_285117_) -> {
return new ResourceLocation(getItemName(p_285117_) + "_smithing_trim");
}));
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.recipes.packs;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,80 @@
package net.minecraft.data.registries;
import com.google.gson.JsonElement;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.DynamicOps;
import com.mojang.serialization.Encoder;
import com.mojang.serialization.JsonOps;
import java.nio.file.Path;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.RegistryDataLoader;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import org.slf4j.Logger;
/**
* @deprecated Forge: Use {@link net.minecraftforge.common.data.DatapackBuiltinEntriesProvider} instead
*/
@Deprecated
public class RegistriesDatapackGenerator implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final PackOutput output;
private final CompletableFuture<HolderLookup.Provider> registries;
private final java.util.function.Predicate<String> namespacePredicate;
@Deprecated
public RegistriesDatapackGenerator(PackOutput p_256643_, CompletableFuture<HolderLookup.Provider> p_255780_) {
this(p_256643_, p_255780_, null);
}
public RegistriesDatapackGenerator(PackOutput p_256643_, CompletableFuture<HolderLookup.Provider> p_255780_, @org.jetbrains.annotations.Nullable java.util.Set<String> modIds) {
this.namespacePredicate = modIds == null ? namespace -> true : modIds::contains;
this.registries = p_255780_;
this.output = p_256643_;
}
/** Forge: Call this to get the registry holder lookup provider that includes elements added via {@link net.minecraftforge.common.data.DatapackBuiltinEntriesProvider} */
public CompletableFuture<HolderLookup.Provider> getRegistryProvider() {
return registries;
}
public CompletableFuture<?> run(CachedOutput p_255785_) {
return this.registries.thenCompose((p_256533_) -> {
DynamicOps<JsonElement> dynamicops = RegistryOps.create(JsonOps.INSTANCE, p_256533_);
return CompletableFuture.allOf(net.minecraftforge.registries.DataPackRegistriesHooks.getDataPackRegistriesWithDimensions().flatMap((p_256552_) -> {
return this.dumpRegistryCap(p_255785_, p_256533_, dynamicops, p_256552_).stream();
}).toArray((p_255809_) -> {
return new CompletableFuture[p_255809_];
}));
});
}
private <T> Optional<CompletableFuture<?>> dumpRegistryCap(CachedOutput p_256502_, HolderLookup.Provider p_256492_, DynamicOps<JsonElement> p_256000_, RegistryDataLoader.RegistryData<T> p_256449_) {
ResourceKey<? extends Registry<T>> resourcekey = p_256449_.key();
return p_256492_.lookup(resourcekey).map((p_255847_) -> {
PackOutput.PathProvider packoutput$pathprovider = this.output.createPathProvider(PackOutput.Target.DATA_PACK, net.minecraftforge.common.ForgeHooks.prefixNamespace(resourcekey.location()));
return CompletableFuture.allOf(p_255847_.listElements().filter(holder -> this.namespacePredicate.test(holder.key().location().getNamespace())).map((p_256105_) -> {
return dumpValue(packoutput$pathprovider.json(p_256105_.key().location()), p_256502_, p_256000_, p_256449_.elementCodec(), p_256105_.value());
}).toArray((p_256279_) -> {
return new CompletableFuture[p_256279_];
}));
});
}
private static <E> CompletableFuture<?> dumpValue(Path p_255678_, CachedOutput p_256438_, DynamicOps<JsonElement> p_256127_, Encoder<E> p_255938_, E p_256590_) {
Optional<JsonElement> optional = p_255938_.encodeStart(p_256127_, p_256590_).resultOrPartial((p_255999_) -> {
LOGGER.error("Couldn't serialize element {}: {}", p_255678_, p_255999_);
});
return optional.isPresent() ? DataProvider.saveStable(p_256438_, optional.get(), p_255678_) : CompletableFuture.completedFuture((Object)null);
}
public String getName() {
return "Registries";
}
}

View File

@@ -0,0 +1,76 @@
package net.minecraft.data.registries;
import java.util.List;
import net.minecraft.Util;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.HolderSet;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.Carvers;
import net.minecraft.data.worldgen.DimensionTypes;
import net.minecraft.data.worldgen.NoiseData;
import net.minecraft.data.worldgen.Pools;
import net.minecraft.data.worldgen.ProcessorLists;
import net.minecraft.data.worldgen.StructureSets;
import net.minecraft.data.worldgen.Structures;
import net.minecraft.data.worldgen.biome.BiomeData;
import net.minecraft.data.worldgen.features.FeatureUtils;
import net.minecraft.data.worldgen.placement.PlacementUtils;
import net.minecraft.network.chat.ChatType;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.item.armortrim.TrimMaterials;
import net.minecraft.world.item.armortrim.TrimPatterns;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterLists;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.NoiseRouterData;
import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorPresets;
import net.minecraft.world.level.levelgen.placement.BiomeFilter;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.presets.WorldPresets;
public class VanillaRegistries {
private static final RegistrySetBuilder BUILDER = (new RegistrySetBuilder()).add(Registries.DIMENSION_TYPE, DimensionTypes::bootstrap).add(Registries.CONFIGURED_CARVER, (RegistrySetBuilder.RegistryBootstrap)Carvers::bootstrap).add(Registries.CONFIGURED_FEATURE, (RegistrySetBuilder.RegistryBootstrap)FeatureUtils::bootstrap).add(Registries.PLACED_FEATURE, PlacementUtils::bootstrap).add(Registries.STRUCTURE, Structures::bootstrap).add(Registries.STRUCTURE_SET, StructureSets::bootstrap).add(Registries.PROCESSOR_LIST, ProcessorLists::bootstrap).add(Registries.TEMPLATE_POOL, Pools::bootstrap).add(Registries.BIOME, BiomeData::bootstrap).add(Registries.MULTI_NOISE_BIOME_SOURCE_PARAMETER_LIST, MultiNoiseBiomeSourceParameterLists::bootstrap).add(Registries.NOISE, NoiseData::bootstrap).add(Registries.DENSITY_FUNCTION, NoiseRouterData::bootstrap).add(Registries.NOISE_SETTINGS, NoiseGeneratorSettings::bootstrap).add(Registries.WORLD_PRESET, WorldPresets::bootstrap).add(Registries.FLAT_LEVEL_GENERATOR_PRESET, FlatLevelGeneratorPresets::bootstrap).add(Registries.CHAT_TYPE, ChatType::bootstrap).add(Registries.TRIM_PATTERN, TrimPatterns::bootstrap).add(Registries.TRIM_MATERIAL, TrimMaterials::bootstrap).add(Registries.DAMAGE_TYPE, DamageTypes::bootstrap);
public static final List<? extends net.minecraft.resources.ResourceKey<? extends net.minecraft.core.Registry<?>>> DATAPACK_REGISTRY_KEYS = BUILDER.getEntryKeys();
private static void validateThatAllBiomeFeaturesHaveBiomeFilter(HolderLookup.Provider p_256242_) {
validateThatAllBiomeFeaturesHaveBiomeFilter(p_256242_.lookupOrThrow(Registries.PLACED_FEATURE), p_256242_.lookupOrThrow(Registries.BIOME));
}
public static void validateThatAllBiomeFeaturesHaveBiomeFilter(HolderGetter<PlacedFeature> p_272963_, HolderLookup<Biome> p_273693_) {
p_273693_.listElements().forEach((p_256326_) -> {
ResourceLocation resourcelocation = p_256326_.key().location();
List<HolderSet<PlacedFeature>> list = p_256326_.value().getGenerationSettings().features();
list.stream().flatMap(HolderSet::stream).forEach((p_256657_) -> {
p_256657_.unwrap().ifLeft((p_256188_) -> {
Holder.Reference<PlacedFeature> reference = p_272963_.getOrThrow(p_256188_);
if (!validatePlacedFeature(reference.value())) {
Util.logAndPauseIfInIde("Placed feature " + p_256188_.location() + " in biome " + resourcelocation + " is missing BiomeFilter.biome()");
}
}).ifRight((p_256575_) -> {
if (!validatePlacedFeature(p_256575_)) {
Util.logAndPauseIfInIde("Placed inline feature in biome " + p_256326_ + " is missing BiomeFilter.biome()");
}
});
});
});
}
private static boolean validatePlacedFeature(PlacedFeature p_255656_) {
return p_255656_.placement().contains(BiomeFilter.biome());
}
public static HolderLookup.Provider createLookup() {
RegistryAccess.Frozen registryaccess$frozen = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY);
HolderLookup.Provider holderlookup$provider = BUILDER.build(registryaccess$frozen);
validateThatAllBiomeFeaturesHaveBiomeFilter(holderlookup$provider);
return holderlookup$provider;
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.registries;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,95 @@
package net.minecraft.data.structures;
import com.google.common.hash.Hashing;
import com.google.common.hash.HashingOutputStream;
import com.mojang.logging.LogUtils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.Util;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.NbtUtils;
import org.slf4j.Logger;
public class NbtToSnbt implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
private final Iterable<Path> inputFolders;
private final PackOutput output;
public NbtToSnbt(PackOutput p_250442_, Collection<Path> p_249158_) {
this.inputFolders = p_249158_;
this.output = p_250442_;
}
public CompletableFuture<?> run(CachedOutput p_254274_) {
Path path = this.output.getOutputFolder();
List<CompletableFuture<?>> list = new ArrayList<>();
for(Path path1 : this.inputFolders) {
list.add(CompletableFuture.supplyAsync(() -> {
try (Stream<Path> stream = Files.walk(path1)) {
return CompletableFuture.allOf(stream.filter((p_126430_) -> {
return p_126430_.toString().endsWith(".nbt");
}).map((p_253418_) -> {
return CompletableFuture.runAsync(() -> {
convertStructure(p_254274_, p_253418_, getName(path1, p_253418_), path);
}, Util.ioPool());
}).toArray((p_253419_) -> {
return new CompletableFuture[p_253419_];
}));
} catch (IOException ioexception) {
LOGGER.error("Failed to read structure input directory", (Throwable)ioexception);
return CompletableFuture.completedFuture((Void)null);
}
}, Util.backgroundExecutor()).thenCompose((p_253420_) -> {
return p_253420_;
}));
}
return CompletableFuture.allOf(list.toArray((p_253421_) -> {
return new CompletableFuture[p_253421_];
}));
}
public final String getName() {
return "NBT -> SNBT";
}
private static String getName(Path p_126436_, Path p_126437_) {
String s = p_126436_.relativize(p_126437_).toString().replaceAll("\\\\", "/");
return s.substring(0, s.length() - ".nbt".length());
}
@Nullable
public static Path convertStructure(CachedOutput p_236382_, Path p_236383_, String p_236384_, Path p_236385_) {
try (InputStream inputstream = Files.newInputStream(p_236383_)) {
Path path = p_236385_.resolve(p_236384_ + ".snbt");
writeSnbt(p_236382_, path, NbtUtils.structureToSnbt(NbtIo.readCompressed(inputstream)));
LOGGER.info("Converted {} from NBT to SNBT", (Object)p_236384_);
return path;
} catch (IOException ioexception) {
LOGGER.error("Couldn't convert {} from NBT to SNBT at {}", p_236384_, p_236383_, ioexception);
return null;
}
}
public static void writeSnbt(CachedOutput p_236378_, Path p_236379_, String p_236380_) throws IOException {
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
HashingOutputStream hashingoutputstream = new HashingOutputStream(Hashing.sha1(), bytearrayoutputstream);
hashingoutputstream.write(p_236380_.getBytes(StandardCharsets.UTF_8));
hashingoutputstream.write(10);
p_236378_.writeIfNeeded(p_236379_, bytearrayoutputstream.toByteArray(), hashingoutputstream.hash());
}
}

View File

@@ -0,0 +1,149 @@
package net.minecraft.data.structures;
import com.google.common.collect.Lists;
import com.google.common.hash.HashCode;
import com.google.common.hash.Hashing;
import com.google.common.hash.HashingOutputStream;
import com.mojang.logging.LogUtils;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Stream;
import javax.annotation.Nullable;
import net.minecraft.Util;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.NbtUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
public class SnbtToNbt implements DataProvider {
@Nullable
private static final Path DUMP_SNBT_TO = null;
private static final Logger LOGGER = LogUtils.getLogger();
private final PackOutput output;
private final Iterable<Path> inputFolders;
private final List<SnbtToNbt.Filter> filters = Lists.newArrayList();
public SnbtToNbt(PackOutput p_249104_, Iterable<Path> p_249523_) {
this.output = p_249104_;
this.inputFolders = p_249523_;
}
public SnbtToNbt addFilter(SnbtToNbt.Filter p_126476_) {
this.filters.add(p_126476_);
return this;
}
private CompoundTag applyFilters(String p_126461_, CompoundTag p_126462_) {
CompoundTag compoundtag = p_126462_;
for(SnbtToNbt.Filter snbttonbt$filter : this.filters) {
compoundtag = snbttonbt$filter.apply(p_126461_, compoundtag);
}
return compoundtag;
}
public CompletableFuture<?> run(CachedOutput p_254336_) {
Path path = this.output.getOutputFolder();
List<CompletableFuture<?>> list = Lists.newArrayList();
for(Path path1 : this.inputFolders) {
list.add(CompletableFuture.supplyAsync(() -> {
try (Stream<Path> stream = Files.walk(path1)) {
return CompletableFuture.allOf(stream.filter((p_126464_) -> {
return p_126464_.toString().endsWith(".snbt");
}).map((p_253432_) -> {
return CompletableFuture.runAsync(() -> {
SnbtToNbt.TaskResult snbttonbt$taskresult = this.readStructure(p_253432_, this.getName(path1, p_253432_));
this.storeStructureIfChanged(p_254336_, snbttonbt$taskresult, path);
}, Util.backgroundExecutor());
}).toArray((p_253433_) -> {
return new CompletableFuture[p_253433_];
}));
} catch (Exception exception) {
throw new RuntimeException("Failed to read structure input directory, aborting", exception);
}
}, Util.backgroundExecutor()).thenCompose((p_253441_) -> {
return p_253441_;
}));
}
return Util.sequenceFailFast(list);
}
public final String getName() {
return "SNBT -> NBT";
}
private String getName(Path p_126469_, Path p_126470_) {
String s = p_126469_.relativize(p_126470_).toString().replaceAll("\\\\", "/");
return s.substring(0, s.length() - ".snbt".length());
}
private SnbtToNbt.TaskResult readStructure(Path p_126466_, String p_126467_) {
try (BufferedReader bufferedreader = Files.newBufferedReader(p_126466_)) {
String s = IOUtils.toString((Reader)bufferedreader);
CompoundTag compoundtag = this.applyFilters(p_126467_, NbtUtils.snbtToStructure(s));
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
HashingOutputStream hashingoutputstream = new HashingOutputStream(Hashing.sha1(), bytearrayoutputstream);
NbtIo.writeCompressed(compoundtag, hashingoutputstream);
byte[] abyte = bytearrayoutputstream.toByteArray();
HashCode hashcode = hashingoutputstream.hash();
String s1;
if (DUMP_SNBT_TO != null) {
s1 = NbtUtils.structureToSnbt(compoundtag);
} else {
s1 = null;
}
return new SnbtToNbt.TaskResult(p_126467_, abyte, s1, hashcode);
} catch (Throwable throwable) {
throw new SnbtToNbt.StructureConversionException(p_126466_, throwable);
}
}
private void storeStructureIfChanged(CachedOutput p_236394_, SnbtToNbt.TaskResult p_236395_, Path p_236396_) {
if (p_236395_.snbtPayload != null) {
Path path = DUMP_SNBT_TO.resolve(p_236395_.name + ".snbt");
try {
NbtToSnbt.writeSnbt(CachedOutput.NO_CACHE, path, p_236395_.snbtPayload);
} catch (IOException ioexception1) {
LOGGER.error("Couldn't write structure SNBT {} at {}", p_236395_.name, path, ioexception1);
}
}
Path path1 = p_236396_.resolve(p_236395_.name + ".nbt");
try {
p_236394_.writeIfNeeded(path1, p_236395_.payload, p_236395_.hash);
} catch (IOException ioexception) {
LOGGER.error("Couldn't write structure {} at {}", p_236395_.name, path1, ioexception);
}
}
@FunctionalInterface
public interface Filter {
CompoundTag apply(String p_126480_, CompoundTag p_126481_);
}
static class StructureConversionException extends RuntimeException {
public StructureConversionException(Path p_176820_, Throwable p_176821_) {
super(p_176820_.toAbsolutePath().toString(), p_176821_);
}
}
static record TaskResult(String name, byte[] payload, @Nullable String snbtPayload, HashCode hash) {
}
}

View File

@@ -0,0 +1,31 @@
package net.minecraft.data.structures;
import com.mojang.logging.LogUtils;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.util.datafix.DataFixers;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import org.slf4j.Logger;
public class StructureUpdater implements SnbtToNbt.Filter {
private static final Logger LOGGER = LogUtils.getLogger();
public CompoundTag apply(String p_126503_, CompoundTag p_126504_) {
return p_126503_.startsWith("data/minecraft/structures/") ? update(p_126503_, p_126504_) : p_126504_;
}
public static CompoundTag update(String p_176823_, CompoundTag p_176824_) {
StructureTemplate structuretemplate = new StructureTemplate();
int i = NbtUtils.getDataVersion(p_176824_, 500);
int j = 3437;
if (i < 3437) {
LOGGER.warn("SNBT Too old, do not forget to update: {} < {}: {}", i, 3437, p_176823_);
}
CompoundTag compoundtag = DataFixTypes.STRUCTURE.updateToCurrentVersion(DataFixers.getDataFixer(), p_176824_, i);
structuretemplate.load(BuiltInRegistries.BLOCK.asLookup(), compoundtag);
return structuretemplate.save(new CompoundTag());
}
}

View File

@@ -0,0 +1,8 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
@FieldsAreNonnullByDefault
package net.minecraft.data.structures;
import javax.annotation.ParametersAreNonnullByDefault;
import net.minecraft.FieldsAreNonnullByDefault;
import net.minecraft.MethodsReturnNonnullByDefault;

View File

@@ -0,0 +1,30 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.BannerPatternTags;
import net.minecraft.world.level.block.entity.BannerPattern;
import net.minecraft.world.level.block.entity.BannerPatterns;
public class BannerPatternTagsProvider extends TagsProvider<BannerPattern> {
/** @deprecated Forge: Use the {@linkplain #BannerPatternTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public BannerPatternTagsProvider(PackOutput p_256451_, CompletableFuture<HolderLookup.Provider> p_256420_) {
super(p_256451_, Registries.BANNER_PATTERN, p_256420_);
}
public BannerPatternTagsProvider(PackOutput p_256451_, CompletableFuture<HolderLookup.Provider> p_256420_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256451_, Registries.BANNER_PATTERN, p_256420_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_255819_) {
this.tag(BannerPatternTags.NO_ITEM_REQUIRED).add(BannerPatterns.SQUARE_BOTTOM_LEFT, BannerPatterns.SQUARE_BOTTOM_RIGHT, BannerPatterns.SQUARE_TOP_LEFT, BannerPatterns.SQUARE_TOP_RIGHT, BannerPatterns.STRIPE_BOTTOM, BannerPatterns.STRIPE_TOP, BannerPatterns.STRIPE_LEFT, BannerPatterns.STRIPE_RIGHT, BannerPatterns.STRIPE_CENTER, BannerPatterns.STRIPE_MIDDLE, BannerPatterns.STRIPE_DOWNRIGHT, BannerPatterns.STRIPE_DOWNLEFT, BannerPatterns.STRIPE_SMALL, BannerPatterns.CROSS, BannerPatterns.STRAIGHT_CROSS, BannerPatterns.TRIANGLE_BOTTOM, BannerPatterns.TRIANGLE_TOP, BannerPatterns.TRIANGLES_BOTTOM, BannerPatterns.TRIANGLES_TOP, BannerPatterns.DIAGONAL_LEFT, BannerPatterns.DIAGONAL_RIGHT, BannerPatterns.DIAGONAL_LEFT_MIRROR, BannerPatterns.DIAGONAL_RIGHT_MIRROR, BannerPatterns.CIRCLE_MIDDLE, BannerPatterns.RHOMBUS_MIDDLE, BannerPatterns.HALF_VERTICAL, BannerPatterns.HALF_HORIZONTAL, BannerPatterns.HALF_VERTICAL_MIRROR, BannerPatterns.HALF_HORIZONTAL_MIRROR, BannerPatterns.BORDER, BannerPatterns.CURLY_BORDER, BannerPatterns.GRADIENT, BannerPatterns.GRADIENT_UP, BannerPatterns.BRICKS);
this.tag(BannerPatternTags.PATTERN_ITEM_FLOWER).add(BannerPatterns.FLOWER);
this.tag(BannerPatternTags.PATTERN_ITEM_CREEPER).add(BannerPatterns.CREEPER);
this.tag(BannerPatternTags.PATTERN_ITEM_SKULL).add(BannerPatterns.SKULL);
this.tag(BannerPatternTags.PATTERN_ITEM_MOJANG).add(BannerPatterns.MOJANG);
this.tag(BannerPatternTags.PATTERN_ITEM_GLOBE).add(BannerPatterns.GLOBE);
this.tag(BannerPatternTags.PATTERN_ITEM_PIGLIN).add(BannerPatterns.PIGLIN);
}
}

View File

@@ -0,0 +1,95 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.BiomeTags;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.MultiNoiseBiomeSourceParameterList;
public class BiomeTagsProvider extends TagsProvider<Biome> {
/** @deprecated Forge: Use the {@linkplain #BiomeTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public BiomeTagsProvider(PackOutput p_255800_, CompletableFuture<HolderLookup.Provider> p_256205_) {
super(p_255800_, Registries.BIOME, p_256205_);
}
public BiomeTagsProvider(PackOutput p_255800_, CompletableFuture<HolderLookup.Provider> p_256205_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_255800_, Registries.BIOME, p_256205_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256485_) {
this.tag(BiomeTags.IS_DEEP_OCEAN).add(Biomes.DEEP_FROZEN_OCEAN).add(Biomes.DEEP_COLD_OCEAN).add(Biomes.DEEP_OCEAN).add(Biomes.DEEP_LUKEWARM_OCEAN);
this.tag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_DEEP_OCEAN).add(Biomes.FROZEN_OCEAN).add(Biomes.OCEAN).add(Biomes.COLD_OCEAN).add(Biomes.LUKEWARM_OCEAN).add(Biomes.WARM_OCEAN);
this.tag(BiomeTags.IS_BEACH).add(Biomes.BEACH).add(Biomes.SNOWY_BEACH);
this.tag(BiomeTags.IS_RIVER).add(Biomes.RIVER).add(Biomes.FROZEN_RIVER);
this.tag(BiomeTags.IS_MOUNTAIN).add(Biomes.MEADOW).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.STONY_PEAKS).add(Biomes.SNOWY_SLOPES).add(Biomes.CHERRY_GROVE);
this.tag(BiomeTags.IS_BADLANDS).add(Biomes.BADLANDS).add(Biomes.ERODED_BADLANDS).add(Biomes.WOODED_BADLANDS);
this.tag(BiomeTags.IS_HILL).add(Biomes.WINDSWEPT_HILLS).add(Biomes.WINDSWEPT_FOREST).add(Biomes.WINDSWEPT_GRAVELLY_HILLS);
this.tag(BiomeTags.IS_TAIGA).add(Biomes.TAIGA).add(Biomes.SNOWY_TAIGA).add(Biomes.OLD_GROWTH_PINE_TAIGA).add(Biomes.OLD_GROWTH_SPRUCE_TAIGA);
this.tag(BiomeTags.IS_JUNGLE).add(Biomes.BAMBOO_JUNGLE).add(Biomes.JUNGLE).add(Biomes.SPARSE_JUNGLE);
this.tag(BiomeTags.IS_FOREST).add(Biomes.FOREST).add(Biomes.FLOWER_FOREST).add(Biomes.BIRCH_FOREST).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.DARK_FOREST).add(Biomes.GROVE);
this.tag(BiomeTags.IS_SAVANNA).add(Biomes.SAVANNA).add(Biomes.SAVANNA_PLATEAU).add(Biomes.WINDSWEPT_SAVANNA);
TagsProvider.TagAppender<Biome> tagappender = this.tag(BiomeTags.IS_NETHER);
MultiNoiseBiomeSourceParameterList.Preset.NETHER.usedBiomes().forEach(tagappender::add);
TagsProvider.TagAppender<Biome> tagappender1 = this.tag(BiomeTags.IS_OVERWORLD);
MultiNoiseBiomeSourceParameterList.Preset.OVERWORLD.usedBiomes().forEach(tagappender1::add);
this.tag(BiomeTags.IS_END).add(Biomes.THE_END).add(Biomes.END_HIGHLANDS).add(Biomes.END_MIDLANDS).add(Biomes.SMALL_END_ISLANDS).add(Biomes.END_BARRENS);
this.tag(BiomeTags.HAS_BURIED_TREASURE).addTag(BiomeTags.IS_BEACH);
this.tag(BiomeTags.HAS_DESERT_PYRAMID).add(Biomes.DESERT);
this.tag(BiomeTags.HAS_IGLOO).add(Biomes.SNOWY_TAIGA).add(Biomes.SNOWY_PLAINS).add(Biomes.SNOWY_SLOPES);
this.tag(BiomeTags.HAS_JUNGLE_TEMPLE).add(Biomes.BAMBOO_JUNGLE).add(Biomes.JUNGLE);
this.tag(BiomeTags.HAS_MINESHAFT).addTag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_RIVER).addTag(BiomeTags.IS_BEACH).addTag(BiomeTags.IS_MOUNTAIN).addTag(BiomeTags.IS_HILL).addTag(BiomeTags.IS_TAIGA).addTag(BiomeTags.IS_JUNGLE).addTag(BiomeTags.IS_FOREST).add(Biomes.STONY_SHORE).add(Biomes.MUSHROOM_FIELDS).add(Biomes.ICE_SPIKES).add(Biomes.WINDSWEPT_SAVANNA).add(Biomes.DESERT).add(Biomes.SAVANNA).add(Biomes.SNOWY_PLAINS).add(Biomes.PLAINS).add(Biomes.SUNFLOWER_PLAINS).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP).add(Biomes.SAVANNA_PLATEAU).add(Biomes.DRIPSTONE_CAVES).add(Biomes.LUSH_CAVES);
this.tag(BiomeTags.HAS_MINESHAFT_MESA).addTag(BiomeTags.IS_BADLANDS);
this.tag(BiomeTags.MINESHAFT_BLOCKING).add(Biomes.DEEP_DARK);
this.tag(BiomeTags.HAS_OCEAN_MONUMENT).addTag(BiomeTags.IS_DEEP_OCEAN);
this.tag(BiomeTags.REQUIRED_OCEAN_MONUMENT_SURROUNDING).addTag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_RIVER);
this.tag(BiomeTags.HAS_OCEAN_RUIN_COLD).add(Biomes.FROZEN_OCEAN).add(Biomes.COLD_OCEAN).add(Biomes.OCEAN).add(Biomes.DEEP_FROZEN_OCEAN).add(Biomes.DEEP_COLD_OCEAN).add(Biomes.DEEP_OCEAN);
this.tag(BiomeTags.HAS_OCEAN_RUIN_WARM).add(Biomes.LUKEWARM_OCEAN).add(Biomes.WARM_OCEAN).add(Biomes.DEEP_LUKEWARM_OCEAN);
this.tag(BiomeTags.HAS_PILLAGER_OUTPOST).add(Biomes.DESERT).add(Biomes.PLAINS).add(Biomes.SAVANNA).add(Biomes.SNOWY_PLAINS).add(Biomes.TAIGA).addTag(BiomeTags.IS_MOUNTAIN).add(Biomes.GROVE);
this.tag(BiomeTags.HAS_RUINED_PORTAL_DESERT).add(Biomes.DESERT);
this.tag(BiomeTags.HAS_RUINED_PORTAL_JUNGLE).addTag(BiomeTags.IS_JUNGLE);
this.tag(BiomeTags.HAS_RUINED_PORTAL_OCEAN).addTag(BiomeTags.IS_OCEAN);
this.tag(BiomeTags.HAS_RUINED_PORTAL_SWAMP).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP);
this.tag(BiomeTags.HAS_RUINED_PORTAL_MOUNTAIN).addTag(BiomeTags.IS_BADLANDS).addTag(BiomeTags.IS_HILL).add(Biomes.SAVANNA_PLATEAU).add(Biomes.WINDSWEPT_SAVANNA).add(Biomes.STONY_SHORE).addTag(BiomeTags.IS_MOUNTAIN);
this.tag(BiomeTags.HAS_RUINED_PORTAL_STANDARD).addTag(BiomeTags.IS_BEACH).addTag(BiomeTags.IS_RIVER).addTag(BiomeTags.IS_TAIGA).addTag(BiomeTags.IS_FOREST).add(Biomes.MUSHROOM_FIELDS).add(Biomes.ICE_SPIKES).add(Biomes.DRIPSTONE_CAVES).add(Biomes.LUSH_CAVES).add(Biomes.SAVANNA).add(Biomes.SNOWY_PLAINS).add(Biomes.PLAINS).add(Biomes.SUNFLOWER_PLAINS);
this.tag(BiomeTags.HAS_SHIPWRECK_BEACHED).addTag(BiomeTags.IS_BEACH);
this.tag(BiomeTags.HAS_SHIPWRECK).addTag(BiomeTags.IS_OCEAN);
this.tag(BiomeTags.HAS_SWAMP_HUT).add(Biomes.SWAMP);
this.tag(BiomeTags.HAS_VILLAGE_DESERT).add(Biomes.DESERT);
this.tag(BiomeTags.HAS_VILLAGE_PLAINS).add(Biomes.PLAINS).add(Biomes.MEADOW);
this.tag(BiomeTags.HAS_VILLAGE_SAVANNA).add(Biomes.SAVANNA);
this.tag(BiomeTags.HAS_VILLAGE_SNOWY).add(Biomes.SNOWY_PLAINS);
this.tag(BiomeTags.HAS_VILLAGE_TAIGA).add(Biomes.TAIGA);
this.tag(BiomeTags.HAS_TRAIL_RUINS).add(Biomes.TAIGA).add(Biomes.SNOWY_TAIGA).add(Biomes.OLD_GROWTH_PINE_TAIGA).add(Biomes.OLD_GROWTH_SPRUCE_TAIGA).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.JUNGLE);
this.tag(BiomeTags.HAS_WOODLAND_MANSION).add(Biomes.DARK_FOREST);
this.tag(BiomeTags.STRONGHOLD_BIASED_TO).add(Biomes.PLAINS).add(Biomes.SUNFLOWER_PLAINS).add(Biomes.SNOWY_PLAINS).add(Biomes.ICE_SPIKES).add(Biomes.DESERT).add(Biomes.FOREST).add(Biomes.FLOWER_FOREST).add(Biomes.BIRCH_FOREST).add(Biomes.DARK_FOREST).add(Biomes.OLD_GROWTH_BIRCH_FOREST).add(Biomes.OLD_GROWTH_PINE_TAIGA).add(Biomes.OLD_GROWTH_SPRUCE_TAIGA).add(Biomes.TAIGA).add(Biomes.SNOWY_TAIGA).add(Biomes.SAVANNA).add(Biomes.SAVANNA_PLATEAU).add(Biomes.WINDSWEPT_HILLS).add(Biomes.WINDSWEPT_GRAVELLY_HILLS).add(Biomes.WINDSWEPT_FOREST).add(Biomes.WINDSWEPT_SAVANNA).add(Biomes.JUNGLE).add(Biomes.SPARSE_JUNGLE).add(Biomes.BAMBOO_JUNGLE).add(Biomes.BADLANDS).add(Biomes.ERODED_BADLANDS).add(Biomes.WOODED_BADLANDS).add(Biomes.MEADOW).add(Biomes.GROVE).add(Biomes.SNOWY_SLOPES).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.STONY_PEAKS).add(Biomes.MUSHROOM_FIELDS).add(Biomes.DRIPSTONE_CAVES).add(Biomes.LUSH_CAVES);
this.tag(BiomeTags.HAS_STRONGHOLD).addTag(BiomeTags.IS_OVERWORLD);
this.tag(BiomeTags.HAS_NETHER_FORTRESS).addTag(BiomeTags.IS_NETHER);
this.tag(BiomeTags.HAS_NETHER_FOSSIL).add(Biomes.SOUL_SAND_VALLEY);
this.tag(BiomeTags.HAS_BASTION_REMNANT).add(Biomes.CRIMSON_FOREST).add(Biomes.NETHER_WASTES).add(Biomes.SOUL_SAND_VALLEY).add(Biomes.WARPED_FOREST);
this.tag(BiomeTags.HAS_ANCIENT_CITY).add(Biomes.DEEP_DARK);
this.tag(BiomeTags.HAS_RUINED_PORTAL_NETHER).addTag(BiomeTags.IS_NETHER);
this.tag(BiomeTags.HAS_END_CITY).add(Biomes.END_HIGHLANDS).add(Biomes.END_MIDLANDS);
this.tag(BiomeTags.PRODUCES_CORALS_FROM_BONEMEAL).add(Biomes.WARM_OCEAN);
this.tag(BiomeTags.PLAYS_UNDERWATER_MUSIC).addTag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_RIVER);
this.tag(BiomeTags.HAS_CLOSER_WATER_FOG).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP);
this.tag(BiomeTags.WATER_ON_MAP_OUTLINES).addTag(BiomeTags.IS_OCEAN).addTag(BiomeTags.IS_RIVER).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP);
this.tag(BiomeTags.WITHOUT_ZOMBIE_SIEGES).add(Biomes.MUSHROOM_FIELDS);
this.tag(BiomeTags.WITHOUT_PATROL_SPAWNS).add(Biomes.MUSHROOM_FIELDS);
this.tag(BiomeTags.WITHOUT_WANDERING_TRADER_SPAWNS).add(Biomes.THE_VOID);
this.tag(BiomeTags.SPAWNS_COLD_VARIANT_FROGS).add(Biomes.SNOWY_PLAINS).add(Biomes.ICE_SPIKES).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.SNOWY_SLOPES).add(Biomes.FROZEN_OCEAN).add(Biomes.DEEP_FROZEN_OCEAN).add(Biomes.GROVE).add(Biomes.DEEP_DARK).add(Biomes.FROZEN_RIVER).add(Biomes.SNOWY_TAIGA).add(Biomes.SNOWY_BEACH).addTag(BiomeTags.IS_END);
this.tag(BiomeTags.SPAWNS_WARM_VARIANT_FROGS).add(Biomes.DESERT).add(Biomes.WARM_OCEAN).addTag(BiomeTags.IS_JUNGLE).addTag(BiomeTags.IS_SAVANNA).addTag(BiomeTags.IS_NETHER).addTag(BiomeTags.IS_BADLANDS).add(Biomes.MANGROVE_SWAMP);
this.tag(BiomeTags.SPAWNS_GOLD_RABBITS).add(Biomes.DESERT);
this.tag(BiomeTags.SPAWNS_WHITE_RABBITS).add(Biomes.SNOWY_PLAINS).add(Biomes.ICE_SPIKES).add(Biomes.FROZEN_OCEAN).add(Biomes.SNOWY_TAIGA).add(Biomes.FROZEN_RIVER).add(Biomes.SNOWY_BEACH).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.SNOWY_SLOPES).add(Biomes.GROVE);
this.tag(BiomeTags.REDUCED_WATER_AMBIENT_SPAWNS).addTag(BiomeTags.IS_RIVER);
this.tag(BiomeTags.ALLOWS_TROPICAL_FISH_SPAWNS_AT_ANY_HEIGHT).add(Biomes.LUSH_CAVES);
this.tag(BiomeTags.POLAR_BEARS_SPAWN_ON_ALTERNATE_BLOCKS).add(Biomes.FROZEN_OCEAN).add(Biomes.DEEP_FROZEN_OCEAN);
this.tag(BiomeTags.MORE_FREQUENT_DROWNED_SPAWNS).addTag(BiomeTags.IS_RIVER);
this.tag(BiomeTags.ALLOWS_SURFACE_SLIME_SPAWNS).add(Biomes.SWAMP).add(Biomes.MANGROVE_SWAMP);
this.tag(BiomeTags.SPAWNS_SNOW_FOXES).add(Biomes.SNOWY_PLAINS).add(Biomes.ICE_SPIKES).add(Biomes.FROZEN_OCEAN).add(Biomes.SNOWY_TAIGA).add(Biomes.FROZEN_RIVER).add(Biomes.SNOWY_BEACH).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.SNOWY_SLOPES).add(Biomes.GROVE);
this.tag(BiomeTags.INCREASED_FIRE_BURNOUT).add(Biomes.BAMBOO_JUNGLE).add(Biomes.MUSHROOM_FIELDS).add(Biomes.MANGROVE_SWAMP).add(Biomes.SNOWY_SLOPES).add(Biomes.FROZEN_PEAKS).add(Biomes.JAGGED_PEAKS).add(Biomes.SWAMP).add(Biomes.JUNGLE);
this.tag(BiomeTags.SNOW_GOLEM_MELTS).add(Biomes.BADLANDS).add(Biomes.BASALT_DELTAS).add(Biomes.CRIMSON_FOREST).add(Biomes.DESERT).add(Biomes.ERODED_BADLANDS).add(Biomes.NETHER_WASTES).add(Biomes.SAVANNA).add(Biomes.SAVANNA_PLATEAU).add(Biomes.SOUL_SAND_VALLEY).add(Biomes.WARPED_FOREST).add(Biomes.WINDSWEPT_SAVANNA).add(Biomes.WOODED_BADLANDS);
}
}

View File

@@ -0,0 +1,24 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.CatVariantTags;
import net.minecraft.world.entity.animal.CatVariant;
public class CatVariantTagsProvider extends TagsProvider<CatVariant> {
/** @deprecated Forge: Use the {@linkplain #CatVariantTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public CatVariantTagsProvider(PackOutput p_256547_, CompletableFuture<HolderLookup.Provider> p_256090_) {
super(p_256547_, Registries.CAT_VARIANT, p_256090_);
}
public CatVariantTagsProvider(PackOutput p_256547_, CompletableFuture<HolderLookup.Provider> p_256090_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256547_, Registries.CAT_VARIANT, p_256090_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256078_) {
this.tag(CatVariantTags.DEFAULT_SPAWNS).add(CatVariant.TABBY, CatVariant.BLACK, CatVariant.RED, CatVariant.SIAMESE, CatVariant.BRITISH_SHORTHAIR, CatVariant.CALICO, CatVariant.PERSIAN, CatVariant.RAGDOLL, CatVariant.WHITE, CatVariant.JELLIE);
this.tag(CatVariantTags.FULL_MOON_SPAWNS).addTag(CatVariantTags.DEFAULT_SPAWNS).add(CatVariant.ALL_BLACK);
}
}

View File

@@ -0,0 +1,47 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.DamageTypeTags;
import net.minecraft.world.damagesource.DamageType;
import net.minecraft.world.damagesource.DamageTypes;
public class DamageTypeTagsProvider extends TagsProvider<DamageType> {
/** @deprecated Forge: Use the {@linkplain #DamageTypeTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public DamageTypeTagsProvider(PackOutput p_270719_, CompletableFuture<HolderLookup.Provider> p_270256_) {
super(p_270719_, Registries.DAMAGE_TYPE, p_270256_);
}
public DamageTypeTagsProvider(PackOutput p_270719_, CompletableFuture<HolderLookup.Provider> p_270256_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_270719_, Registries.DAMAGE_TYPE, p_270256_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_270108_) {
this.tag(DamageTypeTags.DAMAGES_HELMET).add(DamageTypes.FALLING_ANVIL, DamageTypes.FALLING_BLOCK, DamageTypes.FALLING_STALACTITE);
this.tag(DamageTypeTags.BYPASSES_ARMOR).add(DamageTypes.ON_FIRE, DamageTypes.IN_WALL, DamageTypes.CRAMMING, DamageTypes.DROWN, DamageTypes.FLY_INTO_WALL, DamageTypes.GENERIC, DamageTypes.WITHER, DamageTypes.DRAGON_BREATH, DamageTypes.STARVE, DamageTypes.FALL, DamageTypes.FREEZE, DamageTypes.STALAGMITE, DamageTypes.MAGIC, DamageTypes.INDIRECT_MAGIC, DamageTypes.FELL_OUT_OF_WORLD, DamageTypes.GENERIC_KILL, DamageTypes.SONIC_BOOM, DamageTypes.OUTSIDE_BORDER);
this.tag(DamageTypeTags.BYPASSES_SHIELD).addTag(DamageTypeTags.BYPASSES_ARMOR).add(DamageTypes.FALLING_ANVIL, DamageTypes.FALLING_STALACTITE);
this.tag(DamageTypeTags.BYPASSES_INVULNERABILITY).add(DamageTypes.FELL_OUT_OF_WORLD, DamageTypes.GENERIC_KILL);
this.tag(DamageTypeTags.BYPASSES_EFFECTS).add(DamageTypes.STARVE);
this.tag(DamageTypeTags.BYPASSES_RESISTANCE).add(DamageTypes.FELL_OUT_OF_WORLD, DamageTypes.GENERIC_KILL);
this.tag(DamageTypeTags.BYPASSES_ENCHANTMENTS).add(DamageTypes.SONIC_BOOM);
this.tag(DamageTypeTags.IS_FIRE).add(DamageTypes.IN_FIRE, DamageTypes.ON_FIRE, DamageTypes.LAVA, DamageTypes.HOT_FLOOR, DamageTypes.UNATTRIBUTED_FIREBALL, DamageTypes.FIREBALL);
this.tag(DamageTypeTags.IS_PROJECTILE).add(DamageTypes.ARROW, DamageTypes.TRIDENT, DamageTypes.MOB_PROJECTILE, DamageTypes.UNATTRIBUTED_FIREBALL, DamageTypes.FIREBALL, DamageTypes.WITHER_SKULL, DamageTypes.THROWN);
this.tag(DamageTypeTags.WITCH_RESISTANT_TO).add(DamageTypes.MAGIC, DamageTypes.INDIRECT_MAGIC, DamageTypes.SONIC_BOOM, DamageTypes.THORNS);
this.tag(DamageTypeTags.IS_EXPLOSION).add(DamageTypes.FIREWORKS, DamageTypes.EXPLOSION, DamageTypes.PLAYER_EXPLOSION, DamageTypes.BAD_RESPAWN_POINT);
this.tag(DamageTypeTags.IS_FALL).add(DamageTypes.FALL, DamageTypes.STALAGMITE);
this.tag(DamageTypeTags.IS_DROWNING).add(DamageTypes.DROWN);
this.tag(DamageTypeTags.IS_FREEZING).add(DamageTypes.FREEZE);
this.tag(DamageTypeTags.IS_LIGHTNING).add(DamageTypes.LIGHTNING_BOLT);
this.tag(DamageTypeTags.NO_ANGER).add(DamageTypes.MOB_ATTACK_NO_AGGRO);
this.tag(DamageTypeTags.NO_IMPACT).add(DamageTypes.DROWN);
this.tag(DamageTypeTags.ALWAYS_MOST_SIGNIFICANT_FALL).add(DamageTypes.FELL_OUT_OF_WORLD);
this.tag(DamageTypeTags.WITHER_IMMUNE_TO).add(DamageTypes.DROWN);
this.tag(DamageTypeTags.IGNITES_ARMOR_STANDS).add(DamageTypes.IN_FIRE);
this.tag(DamageTypeTags.BURNS_ARMOR_STANDS).add(DamageTypes.ON_FIRE);
this.tag(DamageTypeTags.AVOIDS_GUARDIAN_THORNS).add(DamageTypes.MAGIC, DamageTypes.THORNS).addTag(DamageTypeTags.IS_EXPLOSION);
this.tag(DamageTypeTags.ALWAYS_TRIGGERS_SILVERFISH).add(DamageTypes.MAGIC);
this.tag(DamageTypeTags.ALWAYS_HURTS_ENDER_DRAGONS).addTag(DamageTypeTags.IS_EXPLOSION);
}
}

View File

@@ -0,0 +1,37 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.EntityTypeTags;
import net.minecraft.world.entity.EntityType;
public class EntityTypeTagsProvider extends IntrinsicHolderTagsProvider<EntityType<?>> {
/** @deprecated Forge: Use the {@linkplain #EntityTypeTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public EntityTypeTagsProvider(PackOutput p_256095_, CompletableFuture<HolderLookup.Provider> p_256572_) {
this(p_256095_, p_256572_, "vanilla", null);
}
public EntityTypeTagsProvider(PackOutput p_256095_, CompletableFuture<HolderLookup.Provider> p_256572_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256095_, Registries.ENTITY_TYPE, p_256572_, (p_256665_) -> {
return p_256665_.builtInRegistryHolder().key();
}, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_255894_) {
this.tag(EntityTypeTags.SKELETONS).add(EntityType.SKELETON, EntityType.STRAY, EntityType.WITHER_SKELETON);
this.tag(EntityTypeTags.RAIDERS).add(EntityType.EVOKER, EntityType.PILLAGER, EntityType.RAVAGER, EntityType.VINDICATOR, EntityType.ILLUSIONER, EntityType.WITCH);
this.tag(EntityTypeTags.BEEHIVE_INHABITORS).add(EntityType.BEE);
this.tag(EntityTypeTags.ARROWS).add(EntityType.ARROW, EntityType.SPECTRAL_ARROW);
this.tag(EntityTypeTags.IMPACT_PROJECTILES).addTag(EntityTypeTags.ARROWS).add(EntityType.SNOWBALL, EntityType.FIREBALL, EntityType.SMALL_FIREBALL, EntityType.EGG, EntityType.TRIDENT, EntityType.DRAGON_FIREBALL, EntityType.WITHER_SKULL);
this.tag(EntityTypeTags.POWDER_SNOW_WALKABLE_MOBS).add(EntityType.RABBIT, EntityType.ENDERMITE, EntityType.SILVERFISH, EntityType.FOX);
this.tag(EntityTypeTags.AXOLOTL_HUNT_TARGETS).add(EntityType.TROPICAL_FISH, EntityType.PUFFERFISH, EntityType.SALMON, EntityType.COD, EntityType.SQUID, EntityType.GLOW_SQUID, EntityType.TADPOLE);
this.tag(EntityTypeTags.AXOLOTL_ALWAYS_HOSTILES).add(EntityType.DROWNED, EntityType.GUARDIAN, EntityType.ELDER_GUARDIAN);
this.tag(EntityTypeTags.FREEZE_IMMUNE_ENTITY_TYPES).add(EntityType.STRAY, EntityType.POLAR_BEAR, EntityType.SNOW_GOLEM, EntityType.WITHER);
this.tag(EntityTypeTags.FREEZE_HURTS_EXTRA_TYPES).add(EntityType.STRIDER, EntityType.BLAZE, EntityType.MAGMA_CUBE);
this.tag(EntityTypeTags.FROG_FOOD).add(EntityType.SLIME, EntityType.MAGMA_CUBE);
this.tag(EntityTypeTags.FALL_DAMAGE_IMMUNE).add(EntityType.IRON_GOLEM, EntityType.SNOW_GOLEM, EntityType.SHULKER, EntityType.ALLAY, EntityType.BAT, EntityType.BEE, EntityType.BLAZE, EntityType.CAT, EntityType.CHICKEN, EntityType.GHAST, EntityType.PHANTOM, EntityType.MAGMA_CUBE, EntityType.OCELOT, EntityType.PARROT, EntityType.WITHER);
this.tag(EntityTypeTags.DISMOUNTS_UNDERWATER).add(EntityType.CAMEL, EntityType.CHICKEN, EntityType.DONKEY, EntityType.HORSE, EntityType.LLAMA, EntityType.MULE, EntityType.PIG, EntityType.RAVAGER, EntityType.SPIDER, EntityType.STRIDER, EntityType.TRADER_LLAMA, EntityType.ZOMBIE_HORSE);
}
}

View File

@@ -0,0 +1,24 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.FlatLevelGeneratorPresetTags;
import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorPreset;
import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorPresets;
public class FlatLevelGeneratorPresetTagsProvider extends TagsProvider<FlatLevelGeneratorPreset> {
/** @deprecated Forge: Use the {@linkplain #FlatLevelGeneratorPresetTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public FlatLevelGeneratorPresetTagsProvider(PackOutput p_256604_, CompletableFuture<HolderLookup.Provider> p_255962_) {
super(p_256604_, Registries.FLAT_LEVEL_GENERATOR_PRESET, p_255962_);
}
public FlatLevelGeneratorPresetTagsProvider(PackOutput p_256604_, CompletableFuture<HolderLookup.Provider> p_255962_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256604_, Registries.FLAT_LEVEL_GENERATOR_PRESET, p_255962_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_255741_) {
this.tag(FlatLevelGeneratorPresetTags.VISIBLE).add(FlatLevelGeneratorPresets.CLASSIC_FLAT).add(FlatLevelGeneratorPresets.TUNNELERS_DREAM).add(FlatLevelGeneratorPresets.WATER_WORLD).add(FlatLevelGeneratorPresets.OVERWORLD).add(FlatLevelGeneratorPresets.SNOWY_KINGDOM).add(FlatLevelGeneratorPresets.BOTTOMLESS_PIT).add(FlatLevelGeneratorPresets.DESERT).add(FlatLevelGeneratorPresets.REDSTONE_READY).add(FlatLevelGeneratorPresets.THE_VOID);
}
}

View File

@@ -0,0 +1,27 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.FluidTags;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.Fluids;
public class FluidTagsProvider extends IntrinsicHolderTagsProvider<Fluid> {
/** @deprecated Forge: Use the {@linkplain #FluidTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public FluidTagsProvider(PackOutput p_255941_, CompletableFuture<HolderLookup.Provider> p_256600_) {
this(p_255941_, p_256600_, "vanilla", null);
}
public FluidTagsProvider(PackOutput p_255941_, CompletableFuture<HolderLookup.Provider> p_256600_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_255941_, Registries.FLUID, p_256600_, (p_256474_) -> {
return p_256474_.builtInRegistryHolder().key();
}, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256366_) {
this.tag(FluidTags.WATER).add(Fluids.WATER, Fluids.FLOWING_WATER);
this.tag(FluidTags.LAVA).add(Fluids.LAVA, Fluids.FLOWING_LAVA);
}
}

View File

@@ -0,0 +1,34 @@
package net.minecraft.data.tags;
import com.google.common.annotations.VisibleForTesting;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.GameEventTags;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.level.gameevent.vibrations.VibrationSystem;
public class GameEventTagsProvider extends IntrinsicHolderTagsProvider<GameEvent> {
@VisibleForTesting
static final GameEvent[] VIBRATIONS_EXCEPT_FLAP = new GameEvent[]{GameEvent.BLOCK_ATTACH, GameEvent.BLOCK_CHANGE, GameEvent.BLOCK_CLOSE, GameEvent.BLOCK_DESTROY, GameEvent.BLOCK_DETACH, GameEvent.BLOCK_OPEN, GameEvent.BLOCK_PLACE, GameEvent.BLOCK_ACTIVATE, GameEvent.BLOCK_DEACTIVATE, GameEvent.CONTAINER_CLOSE, GameEvent.CONTAINER_OPEN, GameEvent.DRINK, GameEvent.EAT, GameEvent.ELYTRA_GLIDE, GameEvent.ENTITY_DAMAGE, GameEvent.ENTITY_DIE, GameEvent.ENTITY_DISMOUNT, GameEvent.ENTITY_INTERACT, GameEvent.ENTITY_MOUNT, GameEvent.ENTITY_PLACE, GameEvent.ENTITY_ROAR, GameEvent.ENTITY_SHAKE, GameEvent.EQUIP, GameEvent.EXPLODE, GameEvent.FLUID_PICKUP, GameEvent.FLUID_PLACE, GameEvent.HIT_GROUND, GameEvent.INSTRUMENT_PLAY, GameEvent.ITEM_INTERACT_FINISH, GameEvent.LIGHTNING_STRIKE, GameEvent.NOTE_BLOCK_PLAY, GameEvent.PRIME_FUSE, GameEvent.PROJECTILE_LAND, GameEvent.PROJECTILE_SHOOT, GameEvent.SHEAR, GameEvent.SPLASH, GameEvent.STEP, GameEvent.SWIM, GameEvent.TELEPORT};
/** @deprecated Forge: Use the {@linkplain #GameEventTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public GameEventTagsProvider(PackOutput p_256060_, CompletableFuture<HolderLookup.Provider> p_255621_) {
this(p_256060_, p_255621_, "vanilla", null);
}
public GameEventTagsProvider(PackOutput p_256060_, CompletableFuture<HolderLookup.Provider> p_255621_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256060_, Registries.GAME_EVENT, p_255621_, (p_256368_) -> {
return p_256368_.builtInRegistryHolder().key();
}, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_255981_) {
this.tag(GameEventTags.VIBRATIONS).add(VIBRATIONS_EXCEPT_FLAP).add(VibrationSystem.RESONANCE_EVENTS).add(GameEvent.FLAP);
this.tag(GameEventTags.SHRIEKER_CAN_LISTEN).add(GameEvent.SCULK_SENSOR_TENDRILS_CLICKING);
this.tag(GameEventTags.WARDEN_CAN_LISTEN).add(VIBRATIONS_EXCEPT_FLAP).add(VibrationSystem.RESONANCE_EVENTS).add(GameEvent.SHRIEK).addTag(GameEventTags.SHRIEKER_CAN_LISTEN);
this.tag(GameEventTags.IGNORE_VIBRATIONS_SNEAKING).add(GameEvent.HIT_GROUND, GameEvent.PROJECTILE_SHOOT, GameEvent.STEP, GameEvent.SWIM, GameEvent.ITEM_INTERACT_START, GameEvent.ITEM_INTERACT_FINISH);
this.tag(GameEventTags.ALLAY_CAN_LISTEN).add(GameEvent.NOTE_BLOCK_PLAY);
}
}

View File

@@ -0,0 +1,26 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.InstrumentTags;
import net.minecraft.world.item.Instrument;
import net.minecraft.world.item.Instruments;
public class InstrumentTagsProvider extends TagsProvider<Instrument> {
/** @deprecated Forge: Use the {@linkplain #InstrumentTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public InstrumentTagsProvider(PackOutput p_256418_, CompletableFuture<HolderLookup.Provider> p_256038_) {
super(p_256418_, Registries.INSTRUMENT, p_256038_);
}
public InstrumentTagsProvider(PackOutput p_256418_, CompletableFuture<HolderLookup.Provider> p_256038_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256418_, Registries.INSTRUMENT, p_256038_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256291_) {
this.tag(InstrumentTags.REGULAR_GOAT_HORNS).add(Instruments.PONDER_GOAT_HORN).add(Instruments.SING_GOAT_HORN).add(Instruments.SEEK_GOAT_HORN).add(Instruments.FEEL_GOAT_HORN);
this.tag(InstrumentTags.SCREAMING_GOAT_HORNS).add(Instruments.ADMIRE_GOAT_HORN).add(Instruments.CALL_GOAT_HORN).add(Instruments.YEARN_GOAT_HORN).add(Instruments.DREAM_GOAT_HORN);
this.tag(InstrumentTags.GOAT_HORNS).addTag(InstrumentTags.REGULAR_GOAT_HORNS).addTag(InstrumentTags.SCREAMING_GOAT_HORNS);
}
}

View File

@@ -0,0 +1,74 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Stream;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceKey;
import net.minecraft.tags.TagBuilder;
import net.minecraft.tags.TagKey;
public abstract class IntrinsicHolderTagsProvider<T> extends TagsProvider<T> {
private final Function<T, ResourceKey<T>> keyExtractor;
/**
* @deprecated Forge: Use the {@linkplain #IntrinsicHolderTagsProvider(PackOutput, ResourceKey, CompletableFuture, Function, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
@Deprecated
public IntrinsicHolderTagsProvider(PackOutput p_256164_, ResourceKey<? extends Registry<T>> p_256155_, CompletableFuture<HolderLookup.Provider> p_256488_, Function<T, ResourceKey<T>> p_256168_) {
this(p_256164_, p_256155_, p_256488_, p_256168_, "vanilla", null);
}
public IntrinsicHolderTagsProvider(PackOutput p_256164_, ResourceKey<? extends Registry<T>> p_256155_, CompletableFuture<HolderLookup.Provider> p_256488_, Function<T, ResourceKey<T>> p_256168_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256164_, p_256155_, p_256488_, modId, existingFileHelper);
this.keyExtractor = p_256168_;
}
/**
* @deprecated Forge: Use the {@linkplain #IntrinsicHolderTagsProvider(PackOutput, ResourceKey, CompletableFuture, CompletableFuture, Function, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
@Deprecated
public IntrinsicHolderTagsProvider(PackOutput p_275304_, ResourceKey<? extends Registry<T>> p_275709_, CompletableFuture<HolderLookup.Provider> p_275227_, CompletableFuture<TagsProvider.TagLookup<T>> p_275311_, Function<T, ResourceKey<T>> p_275566_) {
this(p_275304_, p_275709_, p_275227_, p_275311_, p_275566_, "vanilla", null);
}
public IntrinsicHolderTagsProvider(PackOutput p_275304_, ResourceKey<? extends Registry<T>> p_275709_, CompletableFuture<HolderLookup.Provider> p_275227_, CompletableFuture<TagsProvider.TagLookup<T>> p_275311_, Function<T, ResourceKey<T>> p_275566_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_275304_, p_275709_, p_275227_, p_275311_, modId, existingFileHelper);
this.keyExtractor = p_275566_;
}
protected IntrinsicHolderTagsProvider.IntrinsicTagAppender<T> tag(TagKey<T> p_255730_) {
TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_255730_);
return new IntrinsicHolderTagsProvider.IntrinsicTagAppender<>(tagbuilder, this.keyExtractor, this.modId);
}
public static class IntrinsicTagAppender<T> extends TagsProvider.TagAppender<T> implements net.minecraftforge.common.extensions.IForgeIntrinsicHolderTagAppender<T> {
private final Function<T, ResourceKey<T>> keyExtractor;
IntrinsicTagAppender(TagBuilder p_256108_, Function<T, ResourceKey<T>> p_256433_, String modId) {
super(p_256108_, modId);
this.keyExtractor = p_256433_;
}
public IntrinsicHolderTagsProvider.IntrinsicTagAppender<T> addTag(TagKey<T> p_256311_) {
super.addTag(p_256311_);
return this;
}
public final IntrinsicHolderTagsProvider.IntrinsicTagAppender<T> add(T p_256557_) {
this.add(this.keyExtractor.apply(p_256557_));
return this;
}
@SafeVarargs
public final IntrinsicHolderTagsProvider.IntrinsicTagAppender<T> add(T... p_255868_) {
Stream.<T>of(p_255868_).map(this.keyExtractor).forEach(this::add);
return this;
}
@Override
public final ResourceKey<T> getKey(T value) {
return this.keyExtractor.apply(value);
}
}
}

View File

@@ -0,0 +1,63 @@
package net.minecraft.data.tags;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.TagBuilder;
import net.minecraft.tags.TagKey;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
public abstract class ItemTagsProvider extends IntrinsicHolderTagsProvider<Item> {
private final CompletableFuture<TagsProvider.TagLookup<Block>> blockTags;
private final Map<TagKey<Block>, TagKey<Item>> tagsToCopy = new HashMap<>();
/**
* @deprecated Forge: Use the {@linkplain #ItemTagsProvider(PackOutput, CompletableFuture, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
@Deprecated
public ItemTagsProvider(PackOutput p_275343_, CompletableFuture<HolderLookup.Provider> p_275729_, CompletableFuture<TagsProvider.TagLookup<Block>> p_275322_) {
this(p_275343_, p_275729_, p_275322_, "vanilla", null);
}
public ItemTagsProvider(PackOutput p_275343_, CompletableFuture<HolderLookup.Provider> p_275729_, CompletableFuture<TagsProvider.TagLookup<Block>> p_275322_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_275343_, Registries.ITEM, p_275729_, (p_255790_) -> {
return p_255790_.builtInRegistryHolder().key();
}, modId, existingFileHelper);
this.blockTags = p_275322_;
}
/**
* @deprecated Forge: Use the {@linkplain #ItemTagsProvider(PackOutput, CompletableFuture, CompletableFuture, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
@Deprecated
public ItemTagsProvider(PackOutput p_275204_, CompletableFuture<HolderLookup.Provider> p_275194_, CompletableFuture<TagsProvider.TagLookup<Item>> p_275207_, CompletableFuture<TagsProvider.TagLookup<Block>> p_275634_) {
this(p_275204_, p_275194_, p_275207_, p_275634_, "vanilla", null);
}
public ItemTagsProvider(PackOutput p_275204_, CompletableFuture<HolderLookup.Provider> p_275194_, CompletableFuture<TagsProvider.TagLookup<Item>> p_275207_, CompletableFuture<TagsProvider.TagLookup<Block>> p_275634_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_275204_, Registries.ITEM, p_275194_, p_275207_, (p_274765_) -> {
return p_274765_.builtInRegistryHolder().key();
});
this.blockTags = p_275634_;
}
protected void copy(TagKey<Block> p_206422_, TagKey<Item> p_206423_) {
this.tagsToCopy.put(p_206422_, p_206423_);
}
protected CompletableFuture<HolderLookup.Provider> createContentsProvider() {
return super.createContentsProvider().thenCombineAsync(this.blockTags, (p_274766_, p_274767_) -> {
this.tagsToCopy.forEach((p_274763_, p_274764_) -> {
TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_274764_);
Optional<TagBuilder> optional = p_274767_.apply(p_274763_);
optional.orElseThrow(() -> {
return new IllegalStateException("Missing block tag " + p_274764_.location());
}).build().forEach(tagbuilder::add);
});
return p_274766_;
});
}
}

View File

@@ -0,0 +1,24 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.PaintingVariantTags;
import net.minecraft.world.entity.decoration.PaintingVariant;
import net.minecraft.world.entity.decoration.PaintingVariants;
public class PaintingVariantTagsProvider extends TagsProvider<PaintingVariant> {
/** @deprecated Forge: Use the {@linkplain #PaintingVariantTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public PaintingVariantTagsProvider(PackOutput p_255750_, CompletableFuture<HolderLookup.Provider> p_256184_) {
super(p_255750_, Registries.PAINTING_VARIANT, p_256184_);
}
public PaintingVariantTagsProvider(PackOutput p_255750_, CompletableFuture<HolderLookup.Provider> p_256184_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_255750_, Registries.PAINTING_VARIANT, p_256184_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256017_) {
this.tag(PaintingVariantTags.PLACEABLE).add(PaintingVariants.KEBAB, PaintingVariants.AZTEC, PaintingVariants.ALBAN, PaintingVariants.AZTEC2, PaintingVariants.BOMB, PaintingVariants.PLANT, PaintingVariants.WASTELAND, PaintingVariants.POOL, PaintingVariants.COURBET, PaintingVariants.SEA, PaintingVariants.SUNSET, PaintingVariants.CREEBET, PaintingVariants.WANDERER, PaintingVariants.GRAHAM, PaintingVariants.MATCH, PaintingVariants.BUST, PaintingVariants.STAGE, PaintingVariants.VOID, PaintingVariants.SKULL_AND_ROSES, PaintingVariants.WITHER, PaintingVariants.FIGHTERS, PaintingVariants.POINTER, PaintingVariants.PIGSCENE, PaintingVariants.BURNING_SKULL, PaintingVariants.SKELETON, PaintingVariants.DONKEY_KONG);
}
}

View File

@@ -0,0 +1,26 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.PoiTypeTags;
import net.minecraft.world.entity.ai.village.poi.PoiType;
import net.minecraft.world.entity.ai.village.poi.PoiTypes;
public class PoiTypeTagsProvider extends TagsProvider<PoiType> {
/** @deprecated Forge: Use the {@linkplain #PoiTypeTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public PoiTypeTagsProvider(PackOutput p_256012_, CompletableFuture<HolderLookup.Provider> p_256617_) {
super(p_256012_, Registries.POINT_OF_INTEREST_TYPE, p_256617_);
}
public PoiTypeTagsProvider(PackOutput p_256012_, CompletableFuture<HolderLookup.Provider> p_256617_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256012_, Registries.POINT_OF_INTEREST_TYPE, p_256617_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256206_) {
this.tag(PoiTypeTags.ACQUIRABLE_JOB_SITE).add(PoiTypes.ARMORER, PoiTypes.BUTCHER, PoiTypes.CARTOGRAPHER, PoiTypes.CLERIC, PoiTypes.FARMER, PoiTypes.FISHERMAN, PoiTypes.FLETCHER, PoiTypes.LEATHERWORKER, PoiTypes.LIBRARIAN, PoiTypes.MASON, PoiTypes.SHEPHERD, PoiTypes.TOOLSMITH, PoiTypes.WEAPONSMITH);
this.tag(PoiTypeTags.VILLAGE).addTag(PoiTypeTags.ACQUIRABLE_JOB_SITE).add(PoiTypes.HOME, PoiTypes.MEETING);
this.tag(PoiTypeTags.BEE_HOME).add(PoiTypes.BEEHIVE, PoiTypes.BEE_NEST);
}
}

View File

@@ -0,0 +1,35 @@
package net.minecraft.data.tags;
import java.util.concurrent.CompletableFuture;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.minecraft.tags.StructureTags;
import net.minecraft.world.level.levelgen.structure.BuiltinStructures;
import net.minecraft.world.level.levelgen.structure.Structure;
public class StructureTagsProvider extends TagsProvider<Structure> {
/** @deprecated Forge: Use the {@linkplain #StructureTagsProvider(PackOutput, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant} */
@Deprecated
public StructureTagsProvider(PackOutput p_256522_, CompletableFuture<HolderLookup.Provider> p_256661_) {
super(p_256522_, Registries.STRUCTURE, p_256661_);
}
public StructureTagsProvider(PackOutput p_256522_, CompletableFuture<HolderLookup.Provider> p_256661_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
super(p_256522_, Registries.STRUCTURE, p_256661_, modId, existingFileHelper);
}
protected void addTags(HolderLookup.Provider p_256087_) {
this.tag(StructureTags.VILLAGE).add(BuiltinStructures.VILLAGE_PLAINS).add(BuiltinStructures.VILLAGE_DESERT).add(BuiltinStructures.VILLAGE_SAVANNA).add(BuiltinStructures.VILLAGE_SNOWY).add(BuiltinStructures.VILLAGE_TAIGA);
this.tag(StructureTags.MINESHAFT).add(BuiltinStructures.MINESHAFT).add(BuiltinStructures.MINESHAFT_MESA);
this.tag(StructureTags.OCEAN_RUIN).add(BuiltinStructures.OCEAN_RUIN_COLD).add(BuiltinStructures.OCEAN_RUIN_WARM);
this.tag(StructureTags.SHIPWRECK).add(BuiltinStructures.SHIPWRECK).add(BuiltinStructures.SHIPWRECK_BEACHED);
this.tag(StructureTags.RUINED_PORTAL).add(BuiltinStructures.RUINED_PORTAL_DESERT).add(BuiltinStructures.RUINED_PORTAL_JUNGLE).add(BuiltinStructures.RUINED_PORTAL_MOUNTAIN).add(BuiltinStructures.RUINED_PORTAL_NETHER).add(BuiltinStructures.RUINED_PORTAL_OCEAN).add(BuiltinStructures.RUINED_PORTAL_STANDARD).add(BuiltinStructures.RUINED_PORTAL_SWAMP);
this.tag(StructureTags.CATS_SPAWN_IN).add(BuiltinStructures.SWAMP_HUT);
this.tag(StructureTags.CATS_SPAWN_AS_BLACK).add(BuiltinStructures.SWAMP_HUT);
this.tag(StructureTags.EYE_OF_ENDER_LOCATED).add(BuiltinStructures.STRONGHOLD);
this.tag(StructureTags.DOLPHIN_LOCATED).addTag(StructureTags.OCEAN_RUIN).addTag(StructureTags.SHIPWRECK);
this.tag(StructureTags.ON_WOODLAND_EXPLORER_MAPS).add(BuiltinStructures.WOODLAND_MANSION);
this.tag(StructureTags.ON_OCEAN_EXPLORER_MAPS).add(BuiltinStructures.OCEAN_MONUMENT);
this.tag(StructureTags.ON_TREASURE_MAPS).add(BuiltinStructures.BURIED_TREASURE);
}
}

View File

@@ -0,0 +1,233 @@
package net.minecraft.data.tags;
import com.google.common.collect.Maps;
import com.google.gson.JsonElement;
import com.mojang.logging.LogUtils;
import com.mojang.serialization.JsonOps;
import java.nio.file.Path;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Registry;
import net.minecraft.data.CachedOutput;
import net.minecraft.data.DataProvider;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagBuilder;
import net.minecraft.tags.TagEntry;
import net.minecraft.tags.TagFile;
import net.minecraft.tags.TagKey;
import net.minecraft.tags.TagManager;
import org.slf4j.Logger;
public abstract class TagsProvider<T> implements DataProvider {
private static final Logger LOGGER = LogUtils.getLogger();
protected final PackOutput.PathProvider pathProvider;
private final CompletableFuture<HolderLookup.Provider> lookupProvider;
private final CompletableFuture<Void> contentsDone = new CompletableFuture<>();
private final CompletableFuture<TagsProvider.TagLookup<T>> parentProvider;
protected final ResourceKey<? extends Registry<T>> registryKey;
protected final Map<ResourceLocation, TagBuilder> builders = Maps.newLinkedHashMap();
protected final String modId;
@org.jetbrains.annotations.Nullable
protected final net.minecraftforge.common.data.ExistingFileHelper existingFileHelper;
private final net.minecraftforge.common.data.ExistingFileHelper.IResourceType resourceType;
private final net.minecraftforge.common.data.ExistingFileHelper.IResourceType elementResourceType; // FORGE: Resource type for validating required references to datapack registry elements.
/**
* @deprecated Forge: Use the {@linkplain #TagsProvider(PackOutput, ResourceKey, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
protected TagsProvider(PackOutput p_256596_, ResourceKey<? extends Registry<T>> p_255886_, CompletableFuture<HolderLookup.Provider> p_256513_) {
this(p_256596_, p_255886_, p_256513_, "vanilla", null);
}
protected TagsProvider(PackOutput p_256596_, ResourceKey<? extends Registry<T>> p_255886_, CompletableFuture<HolderLookup.Provider> p_256513_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
this(p_256596_, p_255886_, p_256513_, CompletableFuture.completedFuture(TagsProvider.TagLookup.empty()), modId, existingFileHelper);
}
/**
* @deprecated Forge: Use the {@linkplain #TagsProvider(PackOutput, ResourceKey, CompletableFuture, CompletableFuture, String, net.minecraftforge.common.data.ExistingFileHelper) mod id variant}
*/
@Deprecated
protected TagsProvider(PackOutput p_275432_, ResourceKey<? extends Registry<T>> p_275476_, CompletableFuture<HolderLookup.Provider> p_275222_, CompletableFuture<TagsProvider.TagLookup<T>> p_275565_) {
this(p_275432_, p_275476_, p_275222_, p_275565_, "vanilla", null);
}
protected TagsProvider(PackOutput p_275432_, ResourceKey<? extends Registry<T>> p_275476_, CompletableFuture<HolderLookup.Provider> p_275222_, CompletableFuture<TagsProvider.TagLookup<T>> p_275565_, String modId, @org.jetbrains.annotations.Nullable net.minecraftforge.common.data.ExistingFileHelper existingFileHelper) {
this.pathProvider = p_275432_.createPathProvider(PackOutput.Target.DATA_PACK, TagManager.getTagDir(p_275476_));
this.registryKey = p_275476_;
this.parentProvider = p_275565_;
this.lookupProvider = p_275222_;
this.modId = modId;
this.existingFileHelper = existingFileHelper;
this.resourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", TagManager.getTagDir(p_275476_));
this.elementResourceType = new net.minecraftforge.common.data.ExistingFileHelper.ResourceType(net.minecraft.server.packs.PackType.SERVER_DATA, ".json", net.minecraftforge.common.ForgeHooks.prefixNamespace(p_275476_.location()));
}
// Forge: Allow customizing the path for a given tag or returning null
@org.jetbrains.annotations.Nullable
protected Path getPath(ResourceLocation id) {
return this.pathProvider.json(id);
}
public String getName() {
return "Tags for " + this.registryKey.location() + " mod id " + this.modId;
}
protected abstract void addTags(HolderLookup.Provider p_256380_);
public CompletableFuture<?> run(CachedOutput p_253684_) {
record CombinedData<T>(HolderLookup.Provider contents, TagsProvider.TagLookup<T> parent) {
}
return this.createContentsProvider().thenApply((p_275895_) -> {
this.contentsDone.complete((Void)null);
return p_275895_;
}).thenCombineAsync(this.parentProvider, (p_274778_, p_274779_) -> {
return new CombinedData<>(p_274778_, p_274779_);
}).thenCompose((p_274774_) -> {
HolderLookup.RegistryLookup<T> registrylookup = p_274774_.contents.lookup(this.registryKey).orElseThrow(() -> {
// FORGE: Throw a more descriptive error message if this is a Forge registry without tags enabled
if (net.minecraftforge.registries.RegistryManager.ACTIVE.getRegistry(this.registryKey) != null) {
return new IllegalStateException("Forge registry " + this.registryKey.location() + " does not have support for tags");
}
return new IllegalStateException("Registry " + this.registryKey.location() + " not found");
});
Predicate<ResourceLocation> predicate = (p_255496_) -> {
return registrylookup.get(ResourceKey.create(this.registryKey, p_255496_)).isPresent();
};
Predicate<ResourceLocation> predicate1 = (p_274776_) -> {
return this.builders.containsKey(p_274776_) || p_274774_.parent.contains(TagKey.create(this.registryKey, p_274776_));
};
return CompletableFuture.allOf(this.builders.entrySet().stream().map((p_255499_) -> {
ResourceLocation resourcelocation = p_255499_.getKey();
TagBuilder tagbuilder = p_255499_.getValue();
List<TagEntry> list = tagbuilder.build();
List<TagEntry> list1 = java.util.stream.Stream.concat(list.stream(), tagbuilder.getRemoveEntries()).filter((p_274771_) -> {
return !p_274771_.verifyIfPresent(predicate, predicate1);
}).filter(this::missing).toList(); // Forge: Add validation via existing resources
if (!list1.isEmpty()) {
throw new IllegalArgumentException(String.format(Locale.ROOT, "Couldn't define tag %s as it is missing following references: %s", resourcelocation, list1.stream().map(Objects::toString).collect(Collectors.joining(","))));
} else {
var removed = tagbuilder.getRemoveEntries().toList();
JsonElement jsonelement = TagFile.CODEC.encodeStart(JsonOps.INSTANCE, new TagFile(list, tagbuilder.isReplace(), removed)).getOrThrow(false, LOGGER::error);
Path path = this.getPath(resourcelocation);
if (path == null) return CompletableFuture.completedFuture(null); // Forge: Allow running this data provider without writing it. Recipe provider needs valid tags.
return DataProvider.saveStable(p_253684_, jsonelement, path);
}
}).toArray((p_253442_) -> {
return new CompletableFuture[p_253442_];
}));
});
}
private boolean missing(TagEntry reference) {
// Optional tags should not be validated
if (reference.isRequired()) {
return existingFileHelper == null || !existingFileHelper.exists(reference.getId(), reference.isTag() ? resourceType : elementResourceType);
}
return false;
}
protected TagsProvider.TagAppender<T> tag(TagKey<T> p_206425_) {
TagBuilder tagbuilder = this.getOrCreateRawBuilder(p_206425_);
return new TagsProvider.TagAppender<>(tagbuilder, modId);
}
protected TagBuilder getOrCreateRawBuilder(TagKey<T> p_236452_) {
return this.builders.computeIfAbsent(p_236452_.location(), (p_236442_) -> {
if (existingFileHelper != null) {
existingFileHelper.trackGenerated(p_236442_, resourceType);
}
return TagBuilder.create();
});
}
public CompletableFuture<TagsProvider.TagLookup<T>> contentsGetter() {
return this.contentsDone.thenApply((p_276016_) -> {
return (p_274772_) -> {
return Optional.ofNullable(this.builders.get(p_274772_.location()));
};
});
}
protected CompletableFuture<HolderLookup.Provider> createContentsProvider() {
return this.lookupProvider.thenApply((p_274768_) -> {
this.builders.clear();
this.addTags(p_274768_);
return p_274768_;
});
}
public static class TagAppender<T> implements net.minecraftforge.common.extensions.IForgeTagAppender<T> {
private final TagBuilder builder;
private final String modId;
protected TagAppender(TagBuilder p_236454_, String modId) {
this.builder = p_236454_;
this.modId = modId;
}
public final TagsProvider.TagAppender<T> add(ResourceKey<T> p_256138_) {
this.builder.addElement(p_256138_.location());
return this;
}
@SafeVarargs
public final TagsProvider.TagAppender<T> add(ResourceKey<T>... p_211102_) {
for(ResourceKey<T> resourcekey : p_211102_) {
this.builder.addElement(resourcekey.location());
}
return this;
}
public TagsProvider.TagAppender<T> addOptional(ResourceLocation p_176840_) {
this.builder.addOptionalElement(p_176840_);
return this;
}
public TagsProvider.TagAppender<T> addTag(TagKey<T> p_206429_) {
this.builder.addTag(p_206429_.location());
return this;
}
public TagsProvider.TagAppender<T> addOptionalTag(ResourceLocation p_176842_) {
this.builder.addOptionalTag(p_176842_);
return this;
}
public TagsProvider.TagAppender<T> add(TagEntry tag) {
builder.add(tag);
return this;
}
public TagBuilder getInternalBuilder() {
return builder;
}
public String getModID() {
return modId;
}
}
@FunctionalInterface
public interface TagLookup<T> extends Function<TagKey<T>, Optional<TagBuilder>> {
static <T> TagsProvider.TagLookup<T> empty() {
return (p_275247_) -> {
return Optional.empty();
};
}
default boolean contains(TagKey<T> p_275413_) {
return this.apply(p_275413_).isPresent();
}
}
}

Some files were not shown because too many files have changed in this diff Show More