BuiltInBlockModels.java

net.minecraft.client.renderer.block.BuiltInBlockModels

信息

  • 全限定名:net.minecraft.client.renderer.block.BuiltInBlockModels
  • 类型:public class
  • 包:net.minecraft.client.renderer.block
  • 源码路径:src/main/java/net/minecraft/client/renderer/block/BuiltInBlockModels.java
  • 起始行号:L81
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.client.renderer.block.BuiltInBlockModels.Builder

    • 类型: class
    • 修饰符: private static
    • 源码定位: L411
    • 说明:

      TODO

  • net.minecraft.client.renderer.block.BuiltInBlockModels.ModelFactory

    • 类型: interface
    • 修饰符: private
    • 源码定位: L441
    • 说明:

      TODO

  • net.minecraft.client.renderer.block.BuiltInBlockModels.SpecialModelFactory

    • 类型: interface
    • 修饰符: private
    • 源码定位: L447
    • 说明:

      TODO

构造器

方法

下面的方法块按源码顺序生成。

private static void addDefaults(BuiltInBlockModels.Builder builder) @ L82

  • 方法名:addDefaults
  • 源码定位:L82
  • 返回类型:void
  • 修饰符:private static

参数:

  • builder: BuiltInBlockModels.Builder

说明:

TODO

private static void createAir(BuiltInBlockModels.Builder builder, Block block) @ L183

  • 方法名:createAir
  • 源码定位:L183
  • 返回类型:void
  • 修饰符:private static

参数:

  • builder: BuiltInBlockModels.Builder
  • block: Block

说明:

TODO

private static BlockModel.Unbaked special(SpecialModelRenderer.Unbaked<?> model) @ L187

  • 方法名:special
  • 源码定位:L187
  • 返回类型:BlockModel.Unbaked
  • 修饰符:private static

参数:

  • model: SpecialModelRenderer.Unbaked<?>

说明:

TODO

private static BlockModel.Unbaked special(SpecialModelRenderer.Unbaked<?> model, Transformation transformation) @ L191

  • 方法名:special
  • 源码定位:L191
  • 返回类型:BlockModel.Unbaked
  • 修饰符:private static

参数:

  • model: SpecialModelRenderer.Unbaked<?>
  • transformation: Transformation

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createMobHead(SkullBlock.Types type) @ L195

  • 方法名:createMobHead
  • 源码定位:L195
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: SkullBlock.Types

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createMobWallHead(SkullBlock.Types type) @ L201

  • 方法名:createMobWallHead
  • 源码定位:L201
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: SkullBlock.Types

说明:

TODO

private static void createMobHeads(BuiltInBlockModels.Builder builder, SkullBlock.Types type, Block ground, Block wall) @ L207

  • 方法名:createMobHeads
  • 源码定位:L207
  • 返回类型:void
  • 修饰符:private static

参数:

  • builder: BuiltInBlockModels.Builder
  • type: SkullBlock.Types
  • ground: Block
  • wall: Block

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createPlayerHead() @ L212

  • 方法名:createPlayerHead
  • 源码定位:L212
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createPlayerWallHead() @ L219

  • 方法名:createPlayerWallHead
  • 源码定位:L219
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createBanner(DyeColor color) @ L226

  • 方法名:createBanner
  • 源码定位:L226
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • color: DyeColor

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createWallBanner(DyeColor color) @ L235

  • 方法名:createWallBanner
  • 源码定位:L235
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • color: DyeColor

说明:

TODO

private static void createBanners(BuiltInBlockModels.Builder builder, DyeColor dye, Block ground, Block wall) @ L244

  • 方法名:createBanners
  • 源码定位:L244
  • 返回类型:void
  • 修饰符:private static

参数:

  • builder: BuiltInBlockModels.Builder
  • dye: DyeColor
  • ground: Block
  • wall: Block

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createBed(DyeColor color) @ L249

  • 方法名:createBed
  • 源码定位:L249
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • color: DyeColor

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createShulkerBox() @ L255

  • 方法名:createShulkerBox
  • 源码定位:L255
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createDyedShulkerBox(DyeColor color) @ L261

  • 方法名:createDyedShulkerBox
  • 源码定位:L261
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • color: DyeColor

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createStandingSign(WoodType type) @ L267

  • 方法名:createStandingSign
  • 源码定位:L267
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: WoodType

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createWallSign(WoodType type) @ L277

  • 方法名:createWallSign
  • 源码定位:L277
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: WoodType

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createCeilingHangingSign(WoodType type) @ L287

  • 方法名:createCeilingHangingSign
  • 源码定位:L287
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: WoodType

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createWallHangingSign(WoodType type) @ L298

  • 方法名:createWallHangingSign
  • 源码定位:L298
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • type: WoodType

说明:

TODO

private static void createSigns(BuiltInBlockModels.Builder builder, WoodType woodType, Block standing, Block wall, Block hanging, Block wallHanging) @ L308

  • 方法名:createSigns
  • 源码定位:L308
  • 返回类型:void
  • 修饰符:private static

参数:

  • builder: BuiltInBlockModels.Builder
  • woodType: WoodType
  • standing: Block
  • wall: Block
  • hanging: Block
  • wallHanging: Block

说明:

TODO

private static BlockModel.Unbaked createChest(Identifier texture, ChestType chestType, Direction facing) @ L315

  • 方法名:createChest
  • 源码定位:L315
  • 返回类型:BlockModel.Unbaked
  • 修饰符:private static

参数:

  • texture: Identifier
  • chestType: ChestType
  • facing: Direction

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createSingletonChest(Identifier texture) @ L319

  • 方法名:createSingletonChest
  • 源码定位:L319
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • texture: Identifier

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createChest(MultiblockChestResources<Identifier> textures) @ L323

  • 方法名:createChest
  • 源码定位:L323
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • textures: MultiblockChestResources

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createXmasChest(MultiblockChestResources<Identifier> textures) @ L327

  • 方法名:createXmasChest
  • 源码定位:L327
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • textures: MultiblockChestResources

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createCopperGolem(WeatheringCopper.WeatherState weatherState) @ L340

  • 方法名:createCopperGolem
  • 源码定位:L340
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • weatherState: WeatheringCopper.WeatherState

说明:

TODO

private static BuiltInBlockModels.SpecialModelFactory createDecoratedPot() @ L350

  • 方法名:createDecoratedPot
  • 源码定位:L350
  • 返回类型:BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

说明:

TODO

private static BlockStateModelWrapper.Unbaked createBlockStateModelWrapper(BlockColors blockColors, BlockState blockState) @ L356

  • 方法名:createBlockStateModelWrapper
  • 源码定位:L356
  • 返回类型:BlockStateModelWrapper.Unbaked
  • 修饰符:private static

参数:

  • blockColors: BlockColors
  • blockState: BlockState

说明:

TODO

private static CompositeBlockModel.Unbaked combineSpecialAndBlockModels(BlockModel.Unbaked specialModel, BlockColors blockColors, BlockState blockState) @ L360

  • 方法名:combineSpecialAndBlockModels
  • 源码定位:L360
  • 返回类型:CompositeBlockModel.Unbaked
  • 修饰符:private static

参数:

  • specialModel: BlockModel.Unbaked
  • blockColors: BlockColors
  • blockState: BlockState

说明:

TODO

private static SelectBlockModel.Unbaked createFlowerBedModel(BlockColors blockColors, BlockState blockState) @ L364

  • 方法名:createFlowerBedModel
  • 源码定位:L364
  • 返回类型:SelectBlockModel.Unbaked
  • 修饰符:private static

参数:

  • blockColors: BlockColors
  • blockState: BlockState

说明:

TODO

private static BlockModel.Unbaked createEnchantingTable() @ L378

  • 方法名:createEnchantingTable
  • 源码定位:L378
  • 返回类型:BlockModel.Unbaked
  • 修饰符:private static

参数:

说明:

TODO

private static <P extends Comparable<P>> BuiltInBlockModels.SpecialModelFactory specialModelWithPropertyDispatch(Property<P> property, Function<P,BlockModel.Unbaked> blockModel) @ L385

  • 方法名:specialModelWithPropertyDispatch
  • 源码定位:L385
  • 返回类型:<P extends Comparable

    > BuiltInBlockModels.SpecialModelFactory

  • 修饰符:private static

参数:

  • property: Property

  • blockModel: Function<P,BlockModel.Unbaked>

说明:

TODO

private static <P1 extends Comparable<P1>,P2 extends Comparable<P2>> BuiltInBlockModels.SpecialModelFactory specialModelWithPropertyDispatch(Property<P1> property1, Property<P2> property2, BiFunction<P1,P2,BlockModel.Unbaked> blockModel) @ L394

  • 方法名:specialModelWithPropertyDispatch
  • 源码定位:L394
  • 返回类型:<P1 extends Comparable,P2 extends Comparable> BuiltInBlockModels.SpecialModelFactory
  • 修饰符:private static

参数:

  • property1: Property
  • property2: Property
  • blockModel: BiFunction<P1,P2,BlockModel.Unbaked>

说明:

TODO

public static Map<BlockState,BlockModel.Unbaked> createBlockModels(BlockColors blockColors) @ L404

  • 方法名:createBlockModels
  • 源码定位:L404
  • 返回类型:Map<BlockState,BlockModel.Unbaked>
  • 修饰符:public static

参数:

  • blockColors: BlockColors

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class BuiltInBlockModels {
    private static void addDefaults(BuiltInBlockModels.Builder builder) {
        createAir(builder, Blocks.AIR);
        createAir(builder, Blocks.CAVE_AIR);
        createAir(builder, Blocks.VOID_AIR);
        createMobHeads(builder, SkullBlock.Types.SKELETON, Blocks.SKELETON_SKULL, Blocks.SKELETON_WALL_SKULL);
        createMobHeads(builder, SkullBlock.Types.ZOMBIE, Blocks.ZOMBIE_HEAD, Blocks.ZOMBIE_WALL_HEAD);
        createMobHeads(builder, SkullBlock.Types.CREEPER, Blocks.CREEPER_HEAD, Blocks.CREEPER_WALL_HEAD);
        createMobHeads(builder, SkullBlock.Types.DRAGON, Blocks.DRAGON_HEAD, Blocks.DRAGON_WALL_HEAD);
        createMobHeads(builder, SkullBlock.Types.PIGLIN, Blocks.PIGLIN_HEAD, Blocks.PIGLIN_WALL_HEAD);
        createMobHeads(builder, SkullBlock.Types.WITHER_SKELETON, Blocks.WITHER_SKELETON_SKULL, Blocks.WITHER_SKELETON_WALL_SKULL);
        builder.put(createPlayerHead(), Blocks.PLAYER_HEAD);
        builder.put(createPlayerWallHead(), Blocks.PLAYER_WALL_HEAD);
        createBanners(builder, DyeColor.WHITE, Blocks.WHITE_BANNER, Blocks.WHITE_WALL_BANNER);
        createBanners(builder, DyeColor.ORANGE, Blocks.ORANGE_BANNER, Blocks.ORANGE_WALL_BANNER);
        createBanners(builder, DyeColor.MAGENTA, Blocks.MAGENTA_BANNER, Blocks.MAGENTA_WALL_BANNER);
        createBanners(builder, DyeColor.LIGHT_BLUE, Blocks.LIGHT_BLUE_BANNER, Blocks.LIGHT_BLUE_WALL_BANNER);
        createBanners(builder, DyeColor.YELLOW, Blocks.YELLOW_BANNER, Blocks.YELLOW_WALL_BANNER);
        createBanners(builder, DyeColor.LIME, Blocks.LIME_BANNER, Blocks.LIME_WALL_BANNER);
        createBanners(builder, DyeColor.PINK, Blocks.PINK_BANNER, Blocks.PINK_WALL_BANNER);
        createBanners(builder, DyeColor.GRAY, Blocks.GRAY_BANNER, Blocks.GRAY_WALL_BANNER);
        createBanners(builder, DyeColor.LIGHT_GRAY, Blocks.LIGHT_GRAY_BANNER, Blocks.LIGHT_GRAY_WALL_BANNER);
        createBanners(builder, DyeColor.CYAN, Blocks.CYAN_BANNER, Blocks.CYAN_WALL_BANNER);
        createBanners(builder, DyeColor.PURPLE, Blocks.PURPLE_BANNER, Blocks.PURPLE_WALL_BANNER);
        createBanners(builder, DyeColor.BLUE, Blocks.BLUE_BANNER, Blocks.BLUE_WALL_BANNER);
        createBanners(builder, DyeColor.BROWN, Blocks.BROWN_BANNER, Blocks.BROWN_WALL_BANNER);
        createBanners(builder, DyeColor.GREEN, Blocks.GREEN_BANNER, Blocks.GREEN_WALL_BANNER);
        createBanners(builder, DyeColor.RED, Blocks.RED_BANNER, Blocks.RED_WALL_BANNER);
        createBanners(builder, DyeColor.BLACK, Blocks.BLACK_BANNER, Blocks.BLACK_WALL_BANNER);
        builder.put(createBed(DyeColor.WHITE), Blocks.WHITE_BED);
        builder.put(createBed(DyeColor.ORANGE), Blocks.ORANGE_BED);
        builder.put(createBed(DyeColor.MAGENTA), Blocks.MAGENTA_BED);
        builder.put(createBed(DyeColor.LIGHT_BLUE), Blocks.LIGHT_BLUE_BED);
        builder.put(createBed(DyeColor.YELLOW), Blocks.YELLOW_BED);
        builder.put(createBed(DyeColor.LIME), Blocks.LIME_BED);
        builder.put(createBed(DyeColor.PINK), Blocks.PINK_BED);
        builder.put(createBed(DyeColor.GRAY), Blocks.GRAY_BED);
        builder.put(createBed(DyeColor.LIGHT_GRAY), Blocks.LIGHT_GRAY_BED);
        builder.put(createBed(DyeColor.CYAN), Blocks.CYAN_BED);
        builder.put(createBed(DyeColor.PURPLE), Blocks.PURPLE_BED);
        builder.put(createBed(DyeColor.BLUE), Blocks.BLUE_BED);
        builder.put(createBed(DyeColor.BROWN), Blocks.BROWN_BED);
        builder.put(createBed(DyeColor.GREEN), Blocks.GREEN_BED);
        builder.put(createBed(DyeColor.RED), Blocks.RED_BED);
        builder.put(createBed(DyeColor.BLACK), Blocks.BLACK_BED);
        builder.put(createShulkerBox(), Blocks.SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.WHITE), Blocks.WHITE_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.ORANGE), Blocks.ORANGE_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.MAGENTA), Blocks.MAGENTA_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.LIGHT_BLUE), Blocks.LIGHT_BLUE_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.YELLOW), Blocks.YELLOW_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.LIME), Blocks.LIME_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.PINK), Blocks.PINK_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.GRAY), Blocks.GRAY_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.LIGHT_GRAY), Blocks.LIGHT_GRAY_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.CYAN), Blocks.CYAN_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.PURPLE), Blocks.PURPLE_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.BLUE), Blocks.BLUE_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.BROWN), Blocks.BROWN_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.GREEN), Blocks.GREEN_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.RED), Blocks.RED_SHULKER_BOX);
        builder.put(createDyedShulkerBox(DyeColor.BLACK), Blocks.BLACK_SHULKER_BOX);
        createSigns(builder, WoodType.OAK, Blocks.OAK_SIGN, Blocks.OAK_WALL_SIGN, Blocks.OAK_HANGING_SIGN, Blocks.OAK_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.SPRUCE, Blocks.SPRUCE_SIGN, Blocks.SPRUCE_WALL_SIGN, Blocks.SPRUCE_HANGING_SIGN, Blocks.SPRUCE_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.BIRCH, Blocks.BIRCH_SIGN, Blocks.BIRCH_WALL_SIGN, Blocks.BIRCH_HANGING_SIGN, Blocks.BIRCH_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.ACACIA, Blocks.ACACIA_SIGN, Blocks.ACACIA_WALL_SIGN, Blocks.ACACIA_HANGING_SIGN, Blocks.ACACIA_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.CHERRY, Blocks.CHERRY_SIGN, Blocks.CHERRY_WALL_SIGN, Blocks.CHERRY_HANGING_SIGN, Blocks.CHERRY_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.JUNGLE, Blocks.JUNGLE_SIGN, Blocks.JUNGLE_WALL_SIGN, Blocks.JUNGLE_HANGING_SIGN, Blocks.JUNGLE_WALL_HANGING_SIGN);
        createSigns(
            builder, WoodType.DARK_OAK, Blocks.DARK_OAK_SIGN, Blocks.DARK_OAK_WALL_SIGN, Blocks.DARK_OAK_HANGING_SIGN, Blocks.DARK_OAK_WALL_HANGING_SIGN
        );
        createSigns(
            builder, WoodType.PALE_OAK, Blocks.PALE_OAK_SIGN, Blocks.PALE_OAK_WALL_SIGN, Blocks.PALE_OAK_HANGING_SIGN, Blocks.PALE_OAK_WALL_HANGING_SIGN
        );
        createSigns(
            builder, WoodType.MANGROVE, Blocks.MANGROVE_SIGN, Blocks.MANGROVE_WALL_SIGN, Blocks.MANGROVE_HANGING_SIGN, Blocks.MANGROVE_WALL_HANGING_SIGN
        );
        createSigns(builder, WoodType.BAMBOO, Blocks.BAMBOO_SIGN, Blocks.BAMBOO_WALL_SIGN, Blocks.BAMBOO_HANGING_SIGN, Blocks.BAMBOO_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.CRIMSON, Blocks.CRIMSON_SIGN, Blocks.CRIMSON_WALL_SIGN, Blocks.CRIMSON_HANGING_SIGN, Blocks.CRIMSON_WALL_HANGING_SIGN);
        createSigns(builder, WoodType.WARPED, Blocks.WARPED_SIGN, Blocks.WARPED_WALL_SIGN, Blocks.WARPED_HANGING_SIGN, Blocks.WARPED_WALL_HANGING_SIGN);
        builder.put(createSingletonChest(ChestSpecialRenderer.ENDER_CHEST), Blocks.ENDER_CHEST);
        builder.put(createXmasChest(ChestSpecialRenderer.REGULAR), Blocks.CHEST);
        builder.put(createXmasChest(ChestSpecialRenderer.TRAPPED), Blocks.TRAPPED_CHEST);
        builder.put(createChest(ChestSpecialRenderer.COPPER_UNAFFECTED), Blocks.COPPER_CHEST, Blocks.WAXED_COPPER_CHEST);
        builder.put(createChest(ChestSpecialRenderer.COPPER_EXPOSED), Blocks.EXPOSED_COPPER_CHEST, Blocks.WAXED_EXPOSED_COPPER_CHEST);
        builder.put(createChest(ChestSpecialRenderer.COPPER_WEATHERED), Blocks.WEATHERED_COPPER_CHEST, Blocks.WAXED_WEATHERED_COPPER_CHEST);
        builder.put(createChest(ChestSpecialRenderer.COPPER_OXIDIZED), Blocks.OXIDIZED_COPPER_CHEST, Blocks.WAXED_OXIDIZED_COPPER_CHEST);
        builder.put(createCopperGolem(WeatheringCopper.WeatherState.UNAFFECTED), Blocks.COPPER_GOLEM_STATUE, Blocks.WAXED_COPPER_GOLEM_STATUE);
        builder.put(createCopperGolem(WeatheringCopper.WeatherState.EXPOSED), Blocks.EXPOSED_COPPER_GOLEM_STATUE, Blocks.WAXED_EXPOSED_COPPER_GOLEM_STATUE);
        builder.put(
            createCopperGolem(WeatheringCopper.WeatherState.WEATHERED), Blocks.WEATHERED_COPPER_GOLEM_STATUE, Blocks.WAXED_WEATHERED_COPPER_GOLEM_STATUE
        );
        builder.put(createCopperGolem(WeatheringCopper.WeatherState.OXIDIZED), Blocks.OXIDIZED_COPPER_GOLEM_STATUE, Blocks.WAXED_OXIDIZED_COPPER_GOLEM_STATUE);
        builder.put(special(new BellSpecialRenderer.Unbaked()), Blocks.BELL);
        builder.put(special(new ConduitSpecialRenderer.Unbaked(), ConduitRenderer.DEFAULT_TRANSFORMATION), Blocks.CONDUIT);
        builder.put(createDecoratedPot(), Blocks.DECORATED_POT);
        builder.put(createEnchantingTable(), Blocks.ENCHANTING_TABLE);
        builder.put(special(new EndCubeSpecialRenderer.Unbaked(EndCubeSpecialRenderer.Type.GATEWAY)), Blocks.END_GATEWAY);
        builder.put(special(new EndCubeSpecialRenderer.Unbaked(EndCubeSpecialRenderer.Type.PORTAL), TheEndPortalRenderer.TRANSFORMATION), Blocks.END_PORTAL);
        builder.put(BuiltInBlockModels::createFlowerBedModel, Blocks.WILDFLOWERS, Blocks.PINK_PETALS);
    }
 
    private static void createAir(BuiltInBlockModels.Builder builder, Block block) {
        builder.put(new EmptyBlockModel.Unbaked(), block);
    }
 
    private static BlockModel.Unbaked special(SpecialModelRenderer.Unbaked<?> model) {
        return new SpecialBlockModelWrapper.Unbaked<>(model, Optional.empty());
    }
 
    private static BlockModel.Unbaked special(SpecialModelRenderer.Unbaked<?> model, Transformation transformation) {
        return new SpecialBlockModelWrapper.Unbaked<>(model, Optional.of(transformation));
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createMobHead(SkullBlock.Types type) {
        return specialModelWithPropertyDispatch(
            SkullBlock.ROTATION, rotation -> special(new SkullSpecialRenderer.Unbaked(type), SkullBlockRenderer.TRANSFORMATIONS.freeTransformations(rotation))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createMobWallHead(SkullBlock.Types type) {
        return specialModelWithPropertyDispatch(
            WallSkullBlock.FACING, facing -> special(new SkullSpecialRenderer.Unbaked(type), SkullBlockRenderer.TRANSFORMATIONS.wallTransformation(facing))
        );
    }
 
    private static void createMobHeads(BuiltInBlockModels.Builder builder, SkullBlock.Types type, Block ground, Block wall) {
        builder.put(createMobHead(type), ground);
        builder.put(createMobWallHead(type), wall);
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createPlayerHead() {
        return specialModelWithPropertyDispatch(
            PlayerHeadBlock.ROTATION,
            rotation -> special(new PlayerHeadSpecialRenderer.Unbaked(), SkullBlockRenderer.TRANSFORMATIONS.freeTransformations(rotation))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createPlayerWallHead() {
        return specialModelWithPropertyDispatch(
            PlayerWallHeadBlock.FACING,
            facing -> special(new PlayerHeadSpecialRenderer.Unbaked(), SkullBlockRenderer.TRANSFORMATIONS.wallTransformation(facing))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createBanner(DyeColor color) {
        return specialModelWithPropertyDispatch(
            BannerBlock.ROTATION,
            rotation -> special(
                new BannerSpecialRenderer.Unbaked(color, BannerBlock.AttachmentType.GROUND), BannerRenderer.TRANSFORMATIONS.freeTransformations(rotation)
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createWallBanner(DyeColor color) {
        return specialModelWithPropertyDispatch(
            WallBannerBlock.FACING,
            facing -> special(
                new BannerSpecialRenderer.Unbaked(color, BannerBlock.AttachmentType.WALL), BannerRenderer.TRANSFORMATIONS.wallTransformation(facing)
            )
        );
    }
 
    private static void createBanners(BuiltInBlockModels.Builder builder, DyeColor dye, Block ground, Block wall) {
        builder.put(createBanner(dye), ground);
        builder.put(createWallBanner(dye), wall);
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createBed(DyeColor color) {
        return specialModelWithPropertyDispatch(
            BedBlock.FACING, BedBlock.PART, (facing, part) -> special(new BedSpecialRenderer.Unbaked(color, part), BedRenderer.modelTransform(facing))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createShulkerBox() {
        return specialModelWithPropertyDispatch(
            ShulkerBoxBlock.FACING, facing -> special(new ShulkerBoxSpecialRenderer.Unbaked(), ShulkerBoxRenderer.modelTransform(facing))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createDyedShulkerBox(DyeColor color) {
        return specialModelWithPropertyDispatch(
            ShulkerBoxBlock.FACING, facing -> special(new ShulkerBoxSpecialRenderer.Unbaked(color), ShulkerBoxRenderer.modelTransform(facing))
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createStandingSign(WoodType type) {
        return specialModelWithPropertyDispatch(
            StandingSignBlock.ROTATION,
            rotation -> special(
                new StandingSignSpecialRenderer.Unbaked(type, PlainSignBlock.Attachment.GROUND),
                StandingSignRenderer.TRANSFORMATIONS.freeTransformations(rotation).body()
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createWallSign(WoodType type) {
        return specialModelWithPropertyDispatch(
            WallSignBlock.FACING,
            facing -> special(
                new StandingSignSpecialRenderer.Unbaked(type, PlainSignBlock.Attachment.WALL),
                StandingSignRenderer.TRANSFORMATIONS.wallTransformation(facing).body()
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createCeilingHangingSign(WoodType type) {
        return specialModelWithPropertyDispatch(
            CeilingHangingSignBlock.ROTATION,
            CeilingHangingSignBlock.ATTACHED,
            (rotation, attached) -> special(
                new HangingSignSpecialRenderer.Unbaked(type, CeilingHangingSignBlock.getAttachmentPoint(attached)),
                HangingSignRenderer.TRANSFORMATIONS.freeTransformations(rotation).body()
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createWallHangingSign(WoodType type) {
        return specialModelWithPropertyDispatch(
            WallHangingSignBlock.FACING,
            facing -> special(
                new HangingSignSpecialRenderer.Unbaked(type, HangingSignBlock.Attachment.WALL),
                HangingSignRenderer.TRANSFORMATIONS.wallTransformation(facing).body()
            )
        );
    }
 
    private static void createSigns(BuiltInBlockModels.Builder builder, WoodType woodType, Block standing, Block wall, Block hanging, Block wallHanging) {
        builder.put(createStandingSign(woodType), standing);
        builder.put(createWallSign(woodType), wall);
        builder.put(createCeilingHangingSign(woodType), hanging);
        builder.put(createWallHangingSign(woodType), wallHanging);
    }
 
    private static BlockModel.Unbaked createChest(Identifier texture, ChestType chestType, Direction facing) {
        return special(new ChestSpecialRenderer.Unbaked(texture, chestType), ChestRenderer.modelTransformation(facing));
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createSingletonChest(Identifier texture) {
        return specialModelWithPropertyDispatch(ChestBlock.FACING, facing -> createChest(texture, ChestType.SINGLE, facing));
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createChest(MultiblockChestResources<Identifier> textures) {
        return specialModelWithPropertyDispatch(ChestBlock.FACING, ChestBlock.TYPE, (facing, type) -> createChest(textures.select(type), type, facing));
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createXmasChest(MultiblockChestResources<Identifier> textures) {
        return specialModelWithPropertyDispatch(
            ChestBlock.FACING,
            ChestBlock.TYPE,
            (facing, type) -> new ConditionalBlockModel.Unbaked(
                Optional.empty(),
                new IsXmas(),
                createChest(ChestSpecialRenderer.CHRISTMAS.select(type), type, facing),
                createChest(textures.select(type), type, facing)
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createCopperGolem(WeatheringCopper.WeatherState weatherState) {
        return specialModelWithPropertyDispatch(
            CopperGolemStatueBlock.FACING,
            CopperGolemStatueBlock.POSE,
            (facing, pose) -> special(
                new CopperGolemStatueSpecialRenderer.Unbaked(weatherState, pose), CopperGolemStatueBlockRenderer.modelTransformation(facing)
            )
        );
    }
 
    private static BuiltInBlockModels.SpecialModelFactory createDecoratedPot() {
        return specialModelWithPropertyDispatch(
            DecoratedPotBlock.HORIZONTAL_FACING, facing -> special(new DecoratedPotSpecialRenderer.Unbaked(), DecoratedPotRenderer.modelTransformation(facing))
        );
    }
 
    private static BlockStateModelWrapper.Unbaked createBlockStateModelWrapper(BlockColors blockColors, BlockState blockState) {
        return new BlockStateModelWrapper.Unbaked(blockState, blockColors.getTintSources(blockState), Optional.empty());
    }
 
    private static CompositeBlockModel.Unbaked combineSpecialAndBlockModels(BlockModel.Unbaked specialModel, BlockColors blockColors, BlockState blockState) {
        return new CompositeBlockModel.Unbaked(createBlockStateModelWrapper(blockColors, blockState), specialModel, Optional.empty());
    }
 
    private static SelectBlockModel.Unbaked createFlowerBedModel(BlockColors blockColors, BlockState blockState) {
        List<BlockTintSource> tintSources = blockColors.getTintSources(blockState);
        Transformation customFlowerTransform = new Transformation(new Vector3f(0.25F, 0.0F, 0.25F), null, null, null);
        BlockStateModelWrapper.Unbaked customTransformModel = new BlockStateModelWrapper.Unbaked(blockState, tintSources, Optional.of(customFlowerTransform));
        BlockStateModelWrapper.Unbaked normalTransformModel = new BlockStateModelWrapper.Unbaked(blockState, tintSources, Optional.empty());
        return new SelectBlockModel.Unbaked(
            Optional.empty(),
            new SelectBlockModel.UnbakedSwitch<>(
                new DisplayContext(), List.of(new SelectBlockModel.SwitchCase<>(List.of(CopperGolemRenderer.BLOCK_DISPLAY_CONTEXT), customTransformModel))
            ),
            Optional.of(normalTransformModel)
        );
    }
 
    private static BlockModel.Unbaked createEnchantingTable() {
        return special(
            new BookSpecialRenderer.Unbaked(0.0F, 0.0F, 0.0F),
            new Transformation(new Vector3f(0.5F, 0.8125F, 0.5F), Axis.ZP.rotationDegrees(180.0F), null, Axis.XP.rotationDegrees(90.0F))
        );
    }
 
    private static <P extends Comparable<P>> BuiltInBlockModels.SpecialModelFactory specialModelWithPropertyDispatch(
        Property<P> property, Function<P, BlockModel.Unbaked> blockModel
    ) {
        return state -> {
            P value = state.getValue(property);
            return blockModel.apply(value);
        };
    }
 
    private static <P1 extends Comparable<P1>, P2 extends Comparable<P2>> BuiltInBlockModels.SpecialModelFactory specialModelWithPropertyDispatch(
        Property<P1> property1, Property<P2> property2, BiFunction<P1, P2, BlockModel.Unbaked> blockModel
    ) {
        return state -> {
            P1 value1 = state.getValue(property1);
            P2 value2 = state.getValue(property2);
            return blockModel.apply(value1, value2);
        };
    }
 
    public static Map<BlockState, BlockModel.Unbaked> createBlockModels(BlockColors blockColors) {
        BuiltInBlockModels.Builder builder = new BuiltInBlockModels.Builder(blockColors);
        addDefaults(builder);
        return builder.build();
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class Builder {
        private final BlockColors blockColors;
        private final Map<BlockState, BlockModel.Unbaked> result = new HashMap<>();
 
        private Builder(BlockColors blockColors) {
            this.blockColors = blockColors;
        }
 
        private void put(BuiltInBlockModels.ModelFactory factory, Block a, Block b) {
            this.put(factory, a);
            this.put(factory, b);
        }
 
        private void put(BlockModel.Unbaked specialModel, Block block) {
            this.put((BuiltInBlockModels.SpecialModelFactory)var1 -> specialModel, block);
        }
 
        private void put(BuiltInBlockModels.ModelFactory factory, Block block) {
            for (BlockState blockState : block.getStateDefinition().getPossibleStates()) {
                this.result.put(blockState, factory.create(this.blockColors, blockState));
            }
        }
 
        public Map<BlockState, BlockModel.Unbaked> build() {
            return Map.copyOf(this.result);
        }
    }
 
    @FunctionalInterface
    @OnlyIn(Dist.CLIENT)
    private interface ModelFactory {
        BlockModel.Unbaked create(BlockColors colors, BlockState state);
    }
 
    @FunctionalInterface
    @OnlyIn(Dist.CLIENT)
    private interface SpecialModelFactory extends BuiltInBlockModels.ModelFactory {
        @Override
        default BlockModel.Unbaked create(BlockColors colors, BlockState state) {
            return BuiltInBlockModels.combineSpecialAndBlockModels(this.createSpecial(state), colors, state);
        }
 
        BlockModel.Unbaked createSpecial(BlockState state);
    }
}

引用的其他类

  • Transformation

    • 引用位置: 参数/构造调用
    • 关联成员: Transformation()
  • BlockColors

    • 引用位置: 参数
  • MultiblockChestResources

    • 引用位置: 参数
  • SelectBlockModel

    • 引用位置: 方法调用/构造调用/返回值
    • 关联成员: SelectBlockModel.Unbaked(), Unbaked()
  • BlockModel

    • 引用位置: 参数/返回值
  • BlockStateModelWrapper

    • 引用位置: 方法调用/构造调用/返回值
    • 关联成员: BlockStateModelWrapper.Unbaked(), Unbaked()
  • CompositeBlockModel

    • 引用位置: 方法调用/构造调用/返回值
    • 关联成员: CompositeBlockModel.Unbaked(), Unbaked()
  • ConditionalBlockModel

    • 引用位置: 方法调用/构造调用
    • 关联成员: ConditionalBlockModel.Unbaked(), Unbaked()
  • EmptyBlockModel

    • 引用位置: 方法调用/构造调用
    • 关联成员: EmptyBlockModel.Unbaked(), Unbaked()
  • IsXmas

    • 引用位置: 构造调用
    • 关联成员: IsXmas()
  • DisplayContext

    • 引用位置: 构造调用
    • 关联成员: DisplayContext()
  • BedRenderer

    • 引用位置: 方法调用
    • 关联成员: BedRenderer.modelTransform()
  • ChestRenderer

    • 引用位置: 方法调用
    • 关联成员: ChestRenderer.modelTransformation()
  • CopperGolemStatueBlockRenderer

    • 引用位置: 方法调用
    • 关联成员: CopperGolemStatueBlockRenderer.modelTransformation()
  • DecoratedPotRenderer

    • 引用位置: 方法调用
    • 关联成员: DecoratedPotRenderer.modelTransformation()
  • ShulkerBoxRenderer

    • 引用位置: 方法调用
    • 关联成员: ShulkerBoxRenderer.modelTransform()
  • BannerSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: BannerSpecialRenderer.Unbaked(), Unbaked()
  • BedSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: BedSpecialRenderer.Unbaked(), Unbaked()
  • BellSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: BellSpecialRenderer.Unbaked(), Unbaked()
  • BookSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: BookSpecialRenderer.Unbaked(), Unbaked()
  • ChestSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: ChestSpecialRenderer.Unbaked(), Unbaked()
  • ConduitSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: ConduitSpecialRenderer.Unbaked(), Unbaked()
  • CopperGolemStatueSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: CopperGolemStatueSpecialRenderer.Unbaked(), Unbaked()
  • DecoratedPotSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: DecoratedPotSpecialRenderer.Unbaked(), Unbaked()
  • EndCubeSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: EndCubeSpecialRenderer.Unbaked(), Unbaked()
  • HangingSignSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: HangingSignSpecialRenderer.Unbaked(), Unbaked()
  • PlayerHeadSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: PlayerHeadSpecialRenderer.Unbaked(), Unbaked()
  • ShulkerBoxSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: ShulkerBoxSpecialRenderer.Unbaked(), Unbaked()
  • SkullSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: SkullSpecialRenderer.Unbaked(), Unbaked()
  • SpecialModelRenderer

    • 引用位置: 参数
  • StandingSignSpecialRenderer

    • 引用位置: 方法调用/构造调用
    • 关联成员: StandingSignSpecialRenderer.Unbaked(), Unbaked()
  • Direction

    • 引用位置: 参数
  • Identifier

    • 引用位置: 参数
  • DyeColor

    • 引用位置: 参数
  • Block

    • 引用位置: 参数
  • CeilingHangingSignBlock

    • 引用位置: 方法调用
    • 关联成员: CeilingHangingSignBlock.getAttachmentPoint()
  • SkullBlock

    • 引用位置: 参数
  • WeatheringCopper

    • 引用位置: 参数
  • BlockState

    • 引用位置: 参数/返回值
  • ChestType

    • 引用位置: 参数
  • Property

    • 引用位置: 参数
  • WoodType

    • 引用位置: 参数