zh_cn:tutorial:structures

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
Next revisionBoth sides next revision
zh_cn:tutorial:structures [2021/07/24 16:22] – 拒绝机翻,从我做起! solidblockzh_cn:tutorial:structures [2021/07/24 16:27] – [创建地物] solidblock
Line 2: Line 2:
 现在,往世界中注册并放置一些结构。 现在,往世界中注册并放置一些结构。
  
-入药查看原版结构的实例,可以从简单的''IglooFeature''和'IglooGenerator''开始。然而,制作新结构的上升的标准是使用拼图结构,这样更易于使用并可以让你少打一些代码。[[zh_cn:tutorial:jigsaw|这里有关于拼图结构和制作方法的教程。]]+入药查看原版结构的实例,可以从简单的''IglooFeature''''IglooGenerator''开始。然而,制作新结构的上升的标准是使用拼图结构,这样更易于使用并可以让你少打一些代码。[[zh_cn:tutorial:jigsaw|这里有关于拼图结构和制作方法的教程。]]
  
 对于大多数基本的结构,你需要地物(feature)和生成器(generator)。地物处理注册结构并在生成世界时加载的过程。生成器处理方块的放置,或者在结构文件中加载(如果选择这样做)。 对于大多数基本的结构,你需要地物(feature)和生成器(generator)。地物处理注册结构并在生成世界时加载的过程。生成器处理方块的放置,或者在结构文件中加载(如果选择这样做)。
Line 8: Line 8:
 注意本教程依赖标记为实验性的[[https://github.com/FabricMC/fabric/pull/1097|Fabric API中的生物群系修改API]]。如果API不起作用,考虑使用[[?rev=1599808070|mixin版本]]。 注意本教程依赖标记为实验性的[[https://github.com/FabricMC/fabric/pull/1097|Fabric API中的生物群系修改API]]。如果API不起作用,考虑使用[[?rev=1599808070|mixin版本]]。
  
-==== 创建特征 ====+===== 创建地物 ====
 +要创建基本的地物(feature),我们推荐创建扩展''StructureFeature<DefaultFeatureConfig>''的类。大多数原版结构,如沉船、雪屋、神殿都是以''StructureFeature<DefaultFeatureConfig>''为基础,
  
-创建基本功能我们建议创建一个扩展AbstractTempleFeature <DefaultFeatureConfig>的类。 海难,雪屋和神殿等各种原版结构都使用AbstractTempleFeature作为基础。 您将必须重写以下方法:+你需覆写''getStructureStartFactory''方法。对于''getStructureStartFactory''大多数原版的结构在其地物类中创建扩展''StructureStart''的类。
  
-   * shouldStartAt:出于测试目的,返回true。 +<code java> 
-   * getName:您的结构的名称 +public class MyFeature extends StructureFeature<DefaultFeatureConfig> { 
-   * getRadius:结构的半径,用于放置 +  public MyFeature(Codec<DefaultFeatureConfig> codec) { 
-   * getSeeedModifier+    super(codec); 
 +  }
  
-您可以将DefaultFeatureConfig :: deserialize传递给构造函数进行测试。+  @Override 
 +  public StructureFeature.StructureStartFactory<DefaultFeatureConfig> getStructureStartFactory() { 
 +    return Start::new; 
 +  }
  
-对于getStructureStartFactory,大多数原始结构会创建一个在其Feature类中扩展StructureStart的类:+  public static class Start extends StructureStart<DefaultFeatureConfig>
 +    public Start(StructureFeature<DefaultFeatureConfig> feature, int chunkX, int chunkZ, BlockBox box, int references, 
 +        long seed) { 
 +      super(feature, chunkX, chunkZ, box, references, seed); 
 +    }
  
-<code java [enable_line_numbers="true"]> +    // 世界尝试在新的结构中生成时调用,同时也是地物和结构之间的“空隙(gap)”。 
-public static class MyStructureStart extends StructureStart { +    public void init(DynamicRegistryManager registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, 
-    public MyStructureStart (StructureFeature<?> structureFeature_1int int_1, int int_2, Biome biome_1, MutableIntBoundingBox mutableIntBoundingBox_1, int int_3, long long_1) { +        int chunkZ, Biome biome, DefaultFeatureConfig config) { 
-        super(structureFeature_1, int_1, int_2, biome_1, mutableIntBoundingBox_1, int_3, long_1); +      int x = chunkX * 16; 
-    } +      int z = chunkZ * 16; 
-    @Override +      int y = chunkGenerator.getHeight(x, z, Heightmap.Type.WORLD_SURFACE_WG); 
-    public void initialize(ChunkGenerator<?> chunkGenerator, StructureManager structureManager, int chunkX, int chunkZ, Biome biome) { +      BlockPos pos = new BlockPos(x, y, z); 
-        DefaultFeatureConfig defaultFeatureConfig = chunkGenerator.getStructureConfig(biome, MyMainclass.myFeature); +      BlockRotation rotation = BlockRotation.random(this.random); 
-        int x = chunkX * 16; +      MyGenerator.addPieces(managerpos, rotation, this.children); 
-        int z = chunkZ * 16; +      this.setBoundingBoxFromChildren();
-        BlockPos startingPos = new BlockPos(x, 0, z); +
-        Rotation rotation = Rotation.values()[this.random.nextInt(Rotation.values().length)]+
-        MyGenerator.addParts(structureManagerstartingPos, rotation, this.children, this.random, defaultFeatureConfig); +
-        this.setBoundingBoxFromChildren();+
     }     }
 +  }
 } }
 </code> </code>
-     
-当世界尝试以新结构生成时,这称为“要素”和“生成器”之间的差距。 在您的主类中对该变量的引用尚不存在,但我们将在最后创建它。 您也可以将配置设置为等于新的DefaultFeatureConfig。 您可以在getStructureStartFactory中使用返回MyStructureStart :: new返回此函数。 
-这是结构文件和直接从generate方法生成的部分方式。 有两种解决方法: 
- 
-   *如果需要,您可以简单地在Feature类中重写generate,并使用setBlockState将块直接放置在世界上。 这是一个有效的选项,在1.13之前很流行。 
-   *使用结构文件和生成器。 在这一点上,这些功能非常强大,因此强烈建议使用。 
  
 ==== 创建一个生成器 ==== ==== 创建一个生成器 ====