User Tools

Site Tools


zh_cn:tutorial:custom_model

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
zh_cn:tutorial:custom_model [2021/08/30 09:53] – [更新模型] solidblockzh_cn:tutorial:custom_model [2024/01/02 10:31] (current) – [UnbakedModel方法] solidblock
Line 2: Line 2:
 可以通过方块模型 JSON 文件将模型添加到游戏,但也可以通过 Java 代码来渲染。本教程中,我们将会将一个四面熔炉模型添加到游戏。 可以通过方块模型 JSON 文件将模型添加到游戏,但也可以通过 Java 代码来渲染。本教程中,我们将会将一个四面熔炉模型添加到游戏。
  
-注意模型会在区块被重建时渲染。如果需要更加动态的渲染,可以使用 ''BlockEntityRenderer''[[zh_cn:tutorial:blockentityrenderers|方块实体渲染器]]。+注意模型会在区块被重建时渲染。如果需要更加动态的渲染,可以使用 ''BlockEntityRenderer''[[zh_cn:tutorial:blockentityrenderers|方块实体渲染器]]。
  
 ===== 创建模型 ===== ===== 创建模型 =====
Line 8: Line 8:
  
 <code java> <code java>
 +@Environment(EnvType.CLIENT)
 public class FourSidedFurnaceModel implements UnbakedModel, BakedModel, FabricBakedModel { public class FourSidedFurnaceModel implements UnbakedModel, BakedModel, FabricBakedModel {
 </code> </code>
Line 20: Line 21:
     };     };
     private Sprite[] SPRITES = new Sprite[2];     private Sprite[] SPRITES = new Sprite[2];
 +
 +    // Some constants to avoid magic numbers, these need to match the SPRITE_IDS
 +    private static final int SPRITE_SIDE = 0;
 +    private static final int SPRITE_TOP = 1;
 </code> </code>
  
Line 53: Line 58:
  
         for(Direction direction : Direction.values()) {         for(Direction direction : Direction.values()) {
-            int spriteIdx = direction == Direction.UP || direction == Direction.DOWN ? 0;+            int spriteIdx = direction == Direction.UP || direction == Direction.DOWN ? SPRITE_TOP SPRITE_SIDE;
             // 将新的面(face)添加到mesh             // 将新的面(face)添加到mesh
             emitter.square(direction, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);             emitter.square(direction, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);
Line 73: Line 78:
 注意这里不是所有的方法都会被 Fabric Renderer 使用,所以我们并不关心这个实现。 注意这里不是所有的方法都会被 Fabric Renderer 使用,所以我们并不关心这个实现。
 <code java> <code java>
-@Override+    @Override
     public List<BakedQuad> getQuads(BlockState state, Direction face, Random random) {     public List<BakedQuad> getQuads(BlockState state, Direction face, Random random) {
-        return null; // 不需要,因为我们使用的是FabricBakedModel+        return Collections.emptyList(); // 不需要,因为我们使用的是 FabricBakedModel
     }     }
  
Line 99: Line 104:
  
     @Override     @Override
-    public Sprite getSprite() {+    public Sprite getParticleSprite() {
         return SPRITES[1]; // 方块被破坏时产生的颗粒,使用furnace_top         return SPRITES[1]; // 方块被破坏时产生的颗粒,使用furnace_top
     }     }
Line 141: Line 146:
 我们用 ''tutorial:block/four_sided_furnace'' 这个名称注册模型。 我们用 ''tutorial:block/four_sided_furnace'' 这个名称注册模型。
 <code java> <code java>
 +@Environment(EnvType.CLIENT)
 public class TutorialModelProvider implements ModelResourceProvider { public class TutorialModelProvider implements ModelResourceProvider {
     public static final Identifier FOUR_SIDED_FURNACE_MODEL = new Identifier("tutorial:block/four_sided_furnace");     public static final Identifier FOUR_SIDED_FURNACE_MODEL = new Identifier("tutorial:block/four_sided_furnace");
Line 156: Line 162:
 现在我们要将这个类注册到客户端初始化器(仅适用于客户端的代码的入口点)中。 现在我们要将这个类注册到客户端初始化器(仅适用于客户端的代码的入口点)中。
 <code java> <code java>
 +@Environment(EnvType.CLIENT)
 public class ExampleModClient implements ClientModInitializer { public class ExampleModClient implements ClientModInitializer {
     @Override     @Override
Line 248: Line 255:
 更新我们先前创建的 ''ModelResourceProvider'' 更新我们先前创建的 ''ModelResourceProvider''
 <code java> <code java>
 +@Environment(EnvType.CLIENT)
 public class TutorialModelProvider implements ModelResourceProvider { public class TutorialModelProvider implements ModelResourceProvider {
     public static final FourSidedFurnaceModel FOUR_SIDED_FURNACE_MODEL = new FourSidedFurnaceModel();     public static final FourSidedFurnaceModel FOUR_SIDED_FURNACE_MODEL = new FourSidedFurnaceModel();
zh_cn/tutorial/custom_model.1630317199.txt.gz · Last modified: 2021/08/30 09:53 by solidblock