Add new perlin generator.

master
mckuhei 2 years ago
parent 1f83b7bec2
commit 9c16f06540

@ -126,7 +126,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
this.craftingInventory = this.inventorySlots;
this.yOffset = 1.62F;
ChunkCoordinates var2 = par1World.getSpawnPoint();
this.setLocationAndAngles((double)var2.posX.doubleValue() + 0.5D, (double)(var2.posY + 1), (double)var2.posZ.doubleValue() + 0.5D, 0.0F, 0.0F);
this.setLocationAndAngles(MathHelper.toBigDecimal(var2.posX).add(new BigDecimal(0.5)), (double)(var2.posY + 1), MathHelper.toBigDecimal(var2.posZ).add(new BigDecimal(0.5)), 0.0F, 0.0F);
this.entityType = "humanoid";
this.field_70741_aB = 180.0F;
this.fireResistance = 20;
@ -617,6 +617,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
public void moveEntity(double par1, double par3, double par5)
{
super.boundingBox.setBounds(this.boundingBox.minX.doubleValue(), this.boundingBox.minY, this.boundingBox.minZ.doubleValue(), this.boundingBox.maxX.doubleValue(), this.boundingBox.maxY, this.boundingBox.maxZ.doubleValue());
AxisAlignedBB bb = super.boundingBox.copy();
super.moveEntity(par1, par3, par5);
this.boundingBox.maxY = super.boundingBox.maxY;
this.boundingBox.minY = super.boundingBox.minY;
@ -655,7 +656,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
{
double var19;
for (var19 = 0.05D; par1 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, super.boundingBox.getOffsetBoundingBox(par1, -1.0D, 0.0D)).isEmpty(); var11 = par1)
for (var19 = 0.05D; par1 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, bb.getOffsetBoundingBox(par1, -1.0D, 0.0D)).isEmpty(); var11 = par1)
{
if (par1 < var19 && par1 >= -var19)
{
@ -671,7 +672,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
}
}
for (; par5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, super.boundingBox.getOffsetBoundingBox(0.0D, -1.0D, par5)).isEmpty(); var15 = par5)
for (; par5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, bb.getOffsetBoundingBox(0.0D, -1.0D, par5)).isEmpty(); var15 = par5)
{
if (par5 < var19 && par5 >= -var19)
{
@ -687,7 +688,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
}
}
while (par1 != 0.0D && par5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, super.boundingBox.getOffsetBoundingBox(par1, -1.0D, par5)).isEmpty())
while (par1 != 0.0D && par5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, bb.getOffsetBoundingBox(par1, -1.0D, par5)).isEmpty())
{
if (par1 < var19 && par1 >= -var19)
{
@ -720,11 +721,11 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
}
}
List var30 = this.worldObj.getCollidingBoundingBoxes(this, super.boundingBox.addCoord(par1, par3, par5));
List var30 = this.worldObj.getCollidingBoundingBoxes(this, bb.addCoord(par1, par3, par5));
AxisAlignedBB var21;
// Do not process Y axis movement
// for (Iterator var20 = var30.iterator(); var20.hasNext(); par3 = var21.calculateYOffset(super.boundingBox, par3))
// for (Iterator var20 = var30.iterator(); var20.hasNext(); par3 = var21.calculateYOffset(bb, par3))
// {
// var21 = (AxisAlignedBB)var20.next();
// }
@ -742,7 +743,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
AxisAlignedBB var22;
Iterator var32;
for (var32 = var30.iterator(); var32.hasNext(); par1 = var22.calculateXOffset(super.boundingBox, par1))
for (var32 = var30.iterator(); var32.hasNext(); par1 = var22.calculateXOffset(bb, par1))
{
var22 = (AxisAlignedBB)var32.next();
}
@ -756,7 +757,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
par1 = 0.0D;
}
for (var32 = var30.iterator(); var32.hasNext(); par5 = var22.calculateZOffset(super.boundingBox, par5))
for (var32 = var30.iterator(); var32.hasNext(); par5 = var22.calculateZOffset(bb, par5))
{
var22 = (AxisAlignedBB)var32.next();
}
@ -783,11 +784,11 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
par5 = var15;
BigDecimalAABB var27 = this.boundingBox.copy();
this.boundingBox.setBB(var17);
var30 = this.worldObj.getCollidingBoundingBoxes(this, super.boundingBox.addCoord(var11, par3, var15));
var30 = this.worldObj.getCollidingBoundingBoxes(this, bb.addCoord(var11, par3, var15));
Iterator var28;
AxisAlignedBB var29;
for (var28 = var30.iterator(); var28.hasNext(); par3 = var29.calculateYOffset(super.boundingBox, par3))
for (var28 = var30.iterator(); var28.hasNext(); par3 = var29.calculateYOffset(bb, par3))
{
var29 = (AxisAlignedBB)var28.next();
}
@ -801,7 +802,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
par1 = 0.0D;
}
for (var28 = var30.iterator(); var28.hasNext(); par1 = var29.calculateXOffset(super.boundingBox, par1))
for (var28 = var30.iterator(); var28.hasNext(); par1 = var29.calculateXOffset(bb, par1))
{
var29 = (AxisAlignedBB)var28.next();
}
@ -815,7 +816,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
par1 = 0.0D;
}
for (var28 = var30.iterator(); var28.hasNext(); par5 = var29.calculateZOffset(super.boundingBox, par5))
for (var28 = var30.iterator(); var28.hasNext(); par5 = var29.calculateZOffset(bb, par5))
{
var29 = (AxisAlignedBB)var28.next();
}
@ -839,7 +840,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
{
par3 = (double)(-this.stepHeight);
for (var28 = var30.iterator(); var28.hasNext(); par3 = var29.calculateYOffset(super.boundingBox, par3))
for (var28 = var30.iterator(); var28.hasNext(); par3 = var29.calculateYOffset(bb, par3))
{
var29 = (AxisAlignedBB)var28.next();
}

@ -7,12 +7,15 @@ import static net.minecraft.src.Constants.*;
public class NoiseGeneratorOctaves extends NoiseGenerator
{
/**
/**
* Collection of noise generation functions. Output is combined to produce different octaves of noise.
*/
private NoiseGenerator[] generatorCollection;
private int octaves;
private static final String noiseType;
private static final PerlinNoiseFactory noiseFactory;
public NoiseGeneratorOctaves(Random par1Random, int par2)
{
this.octaves = par2;
@ -20,7 +23,7 @@ public class NoiseGeneratorOctaves extends NoiseGenerator
for (int var3 = 0; var3 < par2; ++var3)
{
this.generatorCollection[var3] = USE_64BIT_PERLIN_GENERATOR ? new NoiseGeneratorPerlin64(par1Random) : new NoiseGeneratorPerlin(par1Random);
this.generatorCollection[var3] = noiseFactory != null ? noiseFactory.createPerlinNoiseGenerator(par1Random) : USE_64BIT_PERLIN_GENERATOR ? new NoiseGeneratorPerlin64(par1Random) : new NoiseGeneratorPerlin(par1Random);
}
}
@ -77,4 +80,17 @@ public class NoiseGeneratorOctaves extends NoiseGenerator
{
return this.generateNoiseOctaves(par1ArrayOfDouble, par2, 10, par3, par4, 1, par5, par6, 1.0D, par8);
}
static {
PerlinNoiseFactory f = null;
noiseType = System.getProperty("net.minecraft.src.NoiseGeneratorOctaves.noiseType");
try {
if(noiseType != null) {
f = PerlinNoiseFactory.valueOf(noiseType);
}
} catch(Throwable t) {
t.printStackTrace();
}
noiseFactory = f;
}
}

@ -44,7 +44,7 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
return par3 + par1 * (par5 - par3);
}
public final double func_76309_a(int par1, double par2, double par4)
public final double grad2(int par1, double par2, double par4)
{
int var6 = par1 & 15;
double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2;
@ -120,7 +120,7 @@ public class NoiseGeneratorPerlin extends NoiseGenerator
int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0;
var22 = this.permutations[var67] + var41;
var70 = this.lerp(var35, this.func_76309_a(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var70 = this.lerp(var35, this.grad2(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
double var79 = this.lerp(var42, var70, var73);
var10001 = var75++;

@ -0,0 +1,213 @@
package net.minecraft.src;
import java.util.Random;
import static net.minecraft.src.Constants.*;
public class NoiseGeneratorPerlin2 extends NoiseGenerator
{
private int[] permutations;
public double xCoord;
public double yCoord;
public double zCoord;
public NoiseGeneratorPerlin2()
{
this(new Random());
}
public NoiseGeneratorPerlin2(Random par1Random)
{
this.permutations = new int[512];
this.xCoord = par1Random.nextDouble() * 256.0D;
this.yCoord = par1Random.nextDouble() * 256.0D;
this.zCoord = par1Random.nextDouble() * 256.0D;
int var2;
for (var2 = 0; var2 < 256; this.permutations[var2] = var2++)
{
;
}
for (var2 = 0; var2 < 256; ++var2)
{
int var3 = par1Random.nextInt(256 - var2) + var2;
int var4 = this.permutations[var2];
this.permutations[var2] = this.permutations[var3];
this.permutations[var3] = var4;
this.permutations[var2 + 256] = this.permutations[var2];
}
}
public final double lerp(double par1, double par3, double par5)
{
return par3 + par1 * (par5 - par3);
}
public final double grad2(int par1, double par2, double par4)
{
int var6 = par1 & 15;
double var7 = (double)(1 - ((var6 & 8) >> 3)) * par2;
double var9 = var6 < 4 ? 0.0D : (var6 != 12 && var6 != 14 ? par4 : par2);
return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9);
}
public final double grad(int par1, double par2, double par4, double par6)
{
int var8 = par1 & 15;
double var9 = var8 < 8 ? par2 : par4;
double var11 = var8 < 4 ? par4 : (var8 != 12 && var8 != 14 ? par6 : par2);
return ((var8 & 1) == 0 ? var9 : -var9) + ((var8 & 2) == 0 ? var11 : -var11);
}
/**
* pars: noiseArray , xOffset , yOffset , zOffset , xSize , ySize , zSize , xScale, yScale , zScale , noiseScale.
* noiseArray should be xSize*ySize*zSize in size
*/
public void populateNoiseArray(double[] par1ArrayOfDouble, double par2, double par4, double par6, int par8, int par9, int par10, double par11, double par13, double par15, double par17)
{
int var10001;
int var19;
int var22;
double var31;
double var35;
int var37;
double var38;
int var41;
double var42;
int var75;
if (par9 == 1)
{
boolean var64 = false;
boolean var65 = false;
boolean var21 = false;
boolean var68 = false;
double var70 = 0.0D;
double var73 = 0.0D;
var75 = 0;
double var77 = 1.0D / par17;
for (int var30 = 0; var30 < par8; ++var30)
{
var31 = par2 + (double)var30 * par11 + this.xCoord;
double var78 = Math.rint(var31);
if (var31 < (double)var78)
{
--var78;
}
int var34 = (int) (var78 % 256D) & 255;
var31 -= (double)var78;
var35 = var31 * var31 * var31 * (var31 * (var31 * 6.0D - 15.0D) + 10.0D);
for (var37 = 0; var37 < par10; ++var37)
{
var38 = par6 + (double)var37 * par15 + this.zCoord;
double var40 = Math.rint(var38);
if (var38 < (double)var40)
{
--var40;
}
var41 = (int) (var40 % 256D) & 255;
var38 -= (double)var40;
var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D);
var19 = this.permutations[var34] + 0;
int var66 = this.permutations[var19] + var41;
int var67 = this.permutations[var34 + 1] + 0;
var22 = this.permutations[var67] + var41;
var70 = this.lerp(var35, this.grad2(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38));
var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D));
double var79 = this.lerp(var42, var70, var73);
var10001 = var75++;
par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var79 * var77) : var79 * var77;
}
}
}
else
{
var19 = 0;
double var20 = 1.0D / par17;
var22 = -1;
boolean var23 = false;
boolean var24 = false;
boolean var25 = false;
boolean var26 = false;
boolean var27 = false;
boolean var28 = false;
double var29 = 0.0D;
var31 = 0.0D;
double var33 = 0.0D;
var35 = 0.0D;
for (var37 = 0; var37 < par8; ++var37)
{
var38 = par2 + (double)var37 * par11 + this.xCoord;
double var40 = Math.rint(var38);
if (var38 < (double)var40)
{
--var40;
}
var41 = (int) (var40 % 256D) & 255;
var38 -= (double)var40;
var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D);
for (int var44 = 0; var44 < par10; ++var44)
{
double var45 = par6 + (double)var44 * par15 + this.zCoord;
double var47 = Math.rint(var45);
if (var45 < (double)var47)
{
--var47;
}
int var48 = (int) (var47 % 256D) & 255;
var45 -= (double)var47;
double var49 = var45 * var45 * var45 * (var45 * (var45 * 6.0D - 15.0D) + 10.0D);
for (int var51 = 0; var51 < par9; ++var51)
{
double var52 = par4 + (double)var51 * par13 + this.yCoord;
double var54 = Math.rint(var52);
if (var52 < (double)var54)
{
--var54;
}
int var55 = (int) (var54 % 256D) & 255;
var52 -= (double)var54;
double var56 = var52 * var52 * var52 * (var52 * (var52 * 6.0D - 15.0D) + 10.0D);
if (var51 == 0 || var55 != var22)
{
var22 = var55;
int var69 = this.permutations[var41] + var55;
int var71 = this.permutations[var69] + var48;
int var72 = this.permutations[var69 + 1] + var48;
int var74 = this.permutations[var41 + 1] + var55;
var75 = this.permutations[var74] + var48;
int var76 = this.permutations[var74 + 1] + var48;
var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45));
var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45));
var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D));
var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D));
}
double var58 = this.lerp(var56, var29, var31);
double var60 = this.lerp(var56, var33, var35);
double var62 = this.lerp(var49, var58, var60);
var10001 = var19++;
par1ArrayOfDouble[var10001] += FLOAT_PERLIN_GENERATOR ? (float) (var62 * var20) : var62 * var20;
}
}
}
}
}
}

@ -0,0 +1,29 @@
package net.minecraft.src;
import java.util.Random;
public enum PerlinNoiseFactory {
intType {
@Override
public NoiseGenerator createPerlinNoiseGenerator(Random random) {
return new NoiseGeneratorPerlin(random);
}
},
longType {
@Override
public NoiseGenerator createPerlinNoiseGenerator(Random random) {
return new NoiseGeneratorPerlin64(random);
}
},
doubleType {
@Override
public NoiseGenerator createPerlinNoiseGenerator(Random random) {
return new NoiseGeneratorPerlin2(random);
}
};
public NoiseGenerator createPerlinNoiseGenerator() {
return createPerlinNoiseGenerator(new Random());
}
public abstract NoiseGenerator createPerlinNoiseGenerator(Random random);
}
Loading…
Cancel
Save