- 235
- 3
- 21
в моде который я пишу нужно создать измерение, где время будет противополножным(день/ночь) основному миру и не будет руд
я создал свой провайдер для измерения и начал через него менять части
спавн руд настраивается в BiomeDecorator для каждого биома, список биомов я нашел в ChunkProvider, поэтому сделал свои унаследованные от оригинальных классы с небольшими поправками, применяю я это только к своему измерению, но проблема в том, что оно применяется и для главного, руд нет в обоих измерениях, и я не понимаю почему
я создал свой провайдер для измерения и начал через него менять части
спавн руд настраивается в BiomeDecorator для каждого биома, список биомов я нашел в ChunkProvider, поэтому сделал свои унаследованные от оригинальных классы с небольшими поправками, применяю я это только к своему измерению, но проблема в том, что оно применяется и для главного, руд нет в обоих измерениях, и я не понимаю почему
Код:
public class DeathWorldManager
{
public static int DEATH_PROVIDER_ID = 228;
public static int DEATH_DIM_ID = 228;
public static String DEATH_DIM_NAME = "death";
public static void register()
{
DimensionManager.registerProviderType(DEATH_PROVIDER_ID, DeathWorldProvider.class, true);
DimensionManager.registerDimension(DEATH_DIM_ID, DEATH_PROVIDER_ID);
}
}
Код:
public class DeathWorldProvider extends WorldProvider
{
private MinecraftServer server = MinecraftServer.getServer();
@Override
public String getDimensionName()
{
return DeathWorldManager.DEATH_DIM_NAME;
}
@Override
public IChunkProvider createChunkGenerator()
{
return (IChunkProvider)new DeathWorldChunkProviderGenerate(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled());
}
@Override
public float calculateCelestialAngle(long par1, float par2)
{
return server.getEntityWorld().provider.getProviderForDimension(0).calculateCelestialAngle(par1 + 24000, par2);
}
@Override
public int getMoonPhase(long par1)
{
return server.getEntityWorld().provider.getProviderForDimension(0).getMoonPhase(par1 + 24000);
}
}
Код:
public class DeathWorldChunkProviderGenerate extends ChunkProviderGenerate
{
public DeathWorldChunkProviderGenerate(World p_i2006_1_, long p_i2006_2_, boolean p_i2006_4_)
{
super(p_i2006_1_, p_i2006_2_, p_i2006_4_);
}
@Override
public void func_147424_a(int p_147424_1_, int p_147424_2_, Block[] p_147424_3_)
{
byte b0 = 63;
this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, p_147424_1_ * 4 - 2, p_147424_2_ * 4 - 2, 10, 10);
//----------------------------------//
for(int i=0; i<this.biomesForGeneration.length; i++)
{
if(this.biomesForGeneration[i] != null)
{
this.biomesForGeneration[i].theBiomeDecorator = new DeathWorldBiomeDecorator();
}
}
//----------------------------------//
//вызываю локальную копию функции, тк не хочу менять область видимости через at, чтобы ничего не сломалось, если есть классы наследующие данный
this.copy_func_147423_a(p_147424_1_ * 4, 0, p_147424_2_ * 4);
for (int k = 0; k < 4; ++k)
{
int l = k * 5;
int i1 = (k + 1) * 5;
for (int j1 = 0; j1 < 4; ++j1)
{
int k1 = (l + j1) * 33;
int l1 = (l + j1 + 1) * 33;
int i2 = (i1 + j1) * 33;
int j2 = (i1 + j1 + 1) * 33;
for (int k2 = 0; k2 < 32; ++k2)
{
double d0 = 0.125D;
double d1 = this.field_147434_q[k1 + k2];
double d2 = this.field_147434_q[l1 + k2];
double d3 = this.field_147434_q[i2 + k2];
double d4 = this.field_147434_q[j2 + k2];
double d5 = (this.field_147434_q[k1 + k2 + 1] - d1) * d0;
double d6 = (this.field_147434_q[l1 + k2 + 1] - d2) * d0;
double d7 = (this.field_147434_q[i2 + k2 + 1] - d3) * d0;
double d8 = (this.field_147434_q[j2 + k2 + 1] - d4) * d0;
for (int l2 = 0; l2 < 8; ++l2)
{
double d9 = 0.25D;
double d10 = d1;
double d11 = d2;
double d12 = (d3 - d1) * d9;
double d13 = (d4 - d2) * d9;
for (int i3 = 0; i3 < 4; ++i3)
{
int j3 = i3 + k * 4 << 12 | 0 + j1 * 4 << 8 | k2 * 8 + l2;
short short1 = 256;
j3 -= short1;
double d14 = 0.25D;
double d16 = (d11 - d10) * d14;
double d15 = d10 - d16;
for (int k3 = 0; k3 < 4; ++k3)
{
if ((d15 += d16) > 0.0D)
{
p_147424_3_[j3 += short1] = Blocks.stone;
}
else if (k2 * 8 + l2 < b0)
{
p_147424_3_[j3 += short1] = Blocks.water;
}
else
{
p_147424_3_[j3 += short1] = null;
}
}
d10 += d12;
d11 += d13;
}
d1 += d5;
d2 += d6;
d3 += d7;
d4 += d8;
}
}
}
}
}
private void copy_func_147423_a(int p_147423_1_, int p_147423_2_, int p_147423_3_)
{
double d0 = 684.412D;
double d1 = 684.412D;
double d2 = 512.0D;
double d3 = 512.0D;
this.field_147426_g = this.noiseGen6.generateNoiseOctaves(this.field_147426_g, p_147423_1_, p_147423_3_, 5, 5, 200.0D, 200.0D, 0.5D);
this.field_147427_d = this.field_147429_l.generateNoiseOctaves(this.field_147427_d, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 8.555150000000001D, 4.277575000000001D, 8.555150000000001D);
this.field_147428_e = this.field_147431_j.generateNoiseOctaves(this.field_147428_e, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);
this.field_147425_f = this.field_147432_k.generateNoiseOctaves(this.field_147425_f, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);
boolean flag1 = false;
boolean flag = false;
int l = 0;
int i1 = 0;
double d4 = 8.5D;
for (int j1 = 0; j1 < 5; ++j1)
{
for (int k1 = 0; k1 < 5; ++k1)
{
float f = 0.0F;
float f1 = 0.0F;
float f2 = 0.0F;
byte b0 = 2;
BiomeGenBase biomegenbase = this.biomesForGeneration[j1 + 2 + (k1 + 2) * 10];
for (int l1 = -b0; l1 <= b0; ++l1)
{
for (int i2 = -b0; i2 <= b0; ++i2)
{
BiomeGenBase biomegenbase1 = this.biomesForGeneration[j1 + l1 + 2 + (k1 + i2 + 2) * 10];
float f3 = biomegenbase1.rootHeight;
float f4 = biomegenbase1.heightVariation;
if (this.field_147435_p == WorldType.AMPLIFIED && f3 > 0.0F)
{
f3 = 1.0F + f3 * 2.0F;
f4 = 1.0F + f4 * 4.0F;
}
float f5 = this.parabolicField[l1 + 2 + (i2 + 2) * 5] / (f3 + 2.0F);
if (biomegenbase1.rootHeight > biomegenbase.rootHeight)
{
f5 /= 2.0F;
}
f += f4 * f5;
f1 += f3 * f5;
f2 += f5;
}
}
f /= f2;
f1 /= f2;
f = f * 0.9F + 0.1F;
f1 = (f1 * 4.0F - 1.0F) / 8.0F;
double d12 = this.field_147426_g[i1] / 8000.0D;
if (d12 < 0.0D)
{
d12 = -d12 * 0.3D;
}
d12 = d12 * 3.0D - 2.0D;
if (d12 < 0.0D)
{
d12 /= 2.0D;
if (d12 < -1.0D)
{
d12 = -1.0D;
}
d12 /= 1.4D;
d12 /= 2.0D;
}
else
{
if (d12 > 1.0D)
{
d12 = 1.0D;
}
d12 /= 8.0D;
}
++i1;
double d13 = (double)f1;
double d14 = (double)f;
d13 += d12 * 0.2D;
d13 = d13 * 8.5D / 8.0D;
double d5 = 8.5D + d13 * 4.0D;
for (int j2 = 0; j2 < 33; ++j2)
{
double d6 = ((double)j2 - d5) * 12.0D * 128.0D / 256.0D / d14;
if (d6 < 0.0D)
{
d6 *= 4.0D;
}
double d7 = this.field_147428_e[l] / 512.0D;
double d8 = this.field_147425_f[l] / 512.0D;
double d9 = (this.field_147427_d[l] / 10.0D + 1.0D) / 2.0D;
double d10 = MathHelper.denormalizeClamp(d7, d8, d9) - d6;
if (j2 > 29)
{
double d11 = (double)((float)(j2 - 29) / 3.0F);
d10 = d10 * (1.0D - d11) + -10.0D * d11;
}
this.field_147434_q[l] = d10;
++l;
}
}
}
}
}
Код:
public class DeathWorldBiomeDecorator extends BiomeDecorator
{
public DeathWorldBiomeDecorator()
{
super();
}
@Override
protected void generateOres()
{
}
}