3,417
个编辑
MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
| 第175行: | 第175行: | ||
private MapGenBase structureGenerator1 = new ...; | private MapGenBase structureGenerator1 = new ...; | ||
... | ... | ||
private double[] heightMap; | |||
private Biome[] biomesForGeneration; | private Biome[] biomesForGeneration; | ||
private float[] biomeWeights; | |||
private double[] mainNoiseRegion; | |||
private double[] minLimitRegion; | |||
private double[] maxLimitRegion; | |||
private double[] depthRegion; | |||
{ | { | ||
| 第193行: | 第202行: | ||
this.noiseGeneratorN = new NoiseGeneratorPerlin(this.rand, ...); | this.noiseGeneratorN = new NoiseGeneratorPerlin(this.rand, ...); | ||
... | ... | ||
this.heightMap = new double[825]; | |||
this.biomeWeights = new float[25]; | |||
} | } | ||
| 第226行: | 第238行: | ||
读者可能会感到奇怪:不是说维度的区块生成没有通用程式吗?当然没有,只不过这些代码在许多模组的新维度区块生成类中都能找到,甚至连参数值都不改的,它们应该都是借鉴于原版主世界生成的相关代码。这里我们可以注意到,只有地表噪音的类型是NoiseGeneratorPerlin。 | 读者可能会感到奇怪:不是说维度的区块生成没有通用程式吗?当然没有,只不过这些代码在许多模组的新维度区块生成类中都能找到,甚至连参数值都不改的,它们应该都是借鉴于原版主世界生成的相关代码。这里我们可以注意到,只有地表噪音的类型是NoiseGeneratorPerlin。 | ||
另外,你还应该这么做: | |||
InitNoiseGensEvent.contextOverworld context = new InitNoiseGensEvent.ContextOverworld(minLimitPerlinNoise, maxLimitPerlinNoise, mainLimitPerlinNoise, surfaceNoise, scaleNoise, depthNoise, null); | |||
context = TerrainGen.getModdedNoiseGenerators(this.world, this.rand, context); | |||
minLimitPerlinNoise = context.getLPerlin1(); | |||
maxLimitPerlinNoise = context.getLPerlin2(); | |||
mainPerlinNoise = context.getPerlin(); | |||
surfaceNoise = context.getHeight(); | |||
scaleNoise = context.getScale(); | |||
depthNoise = context.getDepth(); | |||
看到Event这个字眼之后,你就应该明白这一段和Forge有关。 | |||
然后是一个World类型的变量,这也显得理所应当——这个类中当然要有一个World实例了。 | 然后是一个World类型的变量,这也显得理所应当——这个类中当然要有一个World实例了。 | ||
| 第232行: | 第256行: | ||
然后就是声明了一大堆MapGenBase子类变量,这些主要用于生成大型结构。这些变量一般在声明之时就初始化,然后在初始化块中再赋值——赋的这个值,笔者也不懂其具体含义,这块读者直接参阅原版的相关源代码,就知道怎么填了。 | 然后就是声明了一大堆MapGenBase子类变量,这些主要用于生成大型结构。这些变量一般在声明之时就初始化,然后在初始化块中再赋值——赋的这个值,笔者也不懂其具体含义,这块读者直接参阅原版的相关源代码,就知道怎么填了。 | ||
之后,是一个double类型的数组heightMap,就是用于存放高度分布的,笔者也不知道这个数组长度825是怎么得出来的,按理说16×16 = 256就可以了,不过原版和很多模组的代码都是这么写的。 | |||
然后是一个Biome数组,它用于存储该维度中所有的生物群系种类,并在generateChunk阶段以此为依据替换表层方块。如果你的维度中只有一个生物群系,那么这个Biome数组完全没必要声明,你直接在generateChunk里面向结果编程就好了。 | 然后是一个Biome数组,它用于存储该维度中所有的生物群系种类,并在generateChunk阶段以此为依据替换表层方块。如果你的维度中只有一个生物群系,那么这个Biome数组完全没必要声明,你直接在generateChunk里面向结果编程就好了。 | ||
然后是一个float数组,用于指定各生物群系生成的权重。直接贴代码吧: | |||
for(int i = -2; i <= 2; i++) | |||
{ | |||
for(int j = -2; j <= 2; j++) | |||
{ | |||
this.biomeWeights[ i + 2 + (j + 2)* 5] = 10.0F / MathHelper.sqrt((float)(i * i + j * j) + 0.2F); | |||
} | |||
} | |||
看不懂没关系,可以照着抄,反正原版和很多模组就是这么写的。 | |||
最后说一句,区块生成类的构造器并没有对形参列表的强制要求(不像TileEntity和Entity,前者要求有一个零参构造器,后者要求有一个形参只有一个World类型参数的构造器),因此这里传入什么参数就完全看你个人的需求了。 | 最后说一句,区块生成类的构造器并没有对形参列表的强制要求(不像TileEntity和Entity,前者要求有一个零参构造器,后者要求有一个形参只有一个World类型参数的构造器),因此这里传入什么参数就完全看你个人的需求了。 | ||