|
|
|
|
@@ -3,6 +3,7 @@ package StevenDimDoors.mod_pocketDim;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
|
|
@@ -31,9 +32,13 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
public boolean isNearRift=false;
|
|
|
|
|
private int count=200;
|
|
|
|
|
private int count2 = 0;
|
|
|
|
|
private int soundCount = 0;
|
|
|
|
|
|
|
|
|
|
public HashMap<Integer, double[]> renderingCenters = new HashMap<Integer, double[]>();
|
|
|
|
|
public LinkData nearestRiftData;
|
|
|
|
|
Random rand = new Random();
|
|
|
|
|
Random rand = new Random();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public float age = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -41,38 +46,28 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateEntity()
|
|
|
|
|
public void clearBlocksOnRift()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(count>200&&dimHelper.instance.getDimData(this.worldObj.provider.dimensionId)!=null)
|
|
|
|
|
for(double[] coord: this.renderingCenters.values())
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
if(rand.nextBoolean())
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
**/
|
|
|
|
|
int x = MathHelper.floor_double(coord[0]+.5);
|
|
|
|
|
int y = MathHelper.floor_double(coord[1]+.5);
|
|
|
|
|
int z = MathHelper.floor_double(coord[2]+.5);
|
|
|
|
|
this.worldObj.setBlockToAir(this.xCoord+x, this.yCoord+y, this.zCoord+z);
|
|
|
|
|
|
|
|
|
|
this.worldObj.setBlockToAir(this.xCoord-x, this.yCoord+y, this.zCoord-z);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void spawnEndermen()
|
|
|
|
|
{
|
|
|
|
|
if(count>200&&dimHelper.instance.getDimData(this.worldObj.provider.dimensionId)!=null)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nearestRiftData = dimHelper.instance.getDimData(this.worldObj.provider.dimensionId).findNearestRift(worldObj, 5, xCoord, yCoord, zCoord);
|
|
|
|
|
if(nearestRiftData!=null)
|
|
|
|
|
{
|
|
|
|
|
this.xOffset=this.xCoord-nearestRiftData.locXCoord;
|
|
|
|
|
this.yOffset=this.yCoord-nearestRiftData.locYCoord;
|
|
|
|
|
this.zOffset=this.zCoord-nearestRiftData.locZCoord;
|
|
|
|
|
this.distance=(int) (MathHelper.abs(xOffset)+MathHelper.abs(yOffset)+MathHelper.abs(zOffset));
|
|
|
|
|
this.isNearRift=true;
|
|
|
|
|
|
|
|
|
|
if(!this.worldObj.isRemote&&distance>1)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
grow(distance);
|
|
|
|
|
}
|
|
|
|
|
catch(Exception e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if(rand.nextInt(30)==0&&!this.worldObj.isRemote)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
@@ -82,29 +77,11 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EntityEnderman creeper = new EntityEnderman(worldObj);
|
|
|
|
|
creeper.setLocationAndAngles(this.xCoord+.5, this.yCoord-1, this.zCoord+.5, 5, 6);
|
|
|
|
|
worldObj.spawnEntityInWorld(creeper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
if(dimHelper.instance.getDimData(this.worldObj.provider.dimensionId)!=null)
|
|
|
|
|
{
|
|
|
|
|
ArrayList rifts = dimHelper.instance.getDimData(this.worldObj.provider.dimensionId).findRiftsInRange(worldObj, 6, this.xCoord, this.yCoord, this.zCoord);
|
|
|
|
|
if(rifts.size()>15)
|
|
|
|
|
{
|
|
|
|
|
MobObelisk creeper = new MobObelisk(worldObj);
|
|
|
|
|
creeper.setLocationAndAngles(this.xCoord+.5, yCoordHelper.getFirstUncovered(this.worldObj, this.xCoord, this.yCoord, this.zCoord), this.zCoord+.5, 5, 6);
|
|
|
|
|
worldObj.spawnEntityInWorld(creeper);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
**/
|
|
|
|
|
EntityEnderman enderman = new EntityEnderman(worldObj);
|
|
|
|
|
enderman.setLocationAndAngles(this.xCoord+.5, this.yCoord-1, this.zCoord+.5, 5, 6);
|
|
|
|
|
worldObj.spawnEntityInWorld(enderman);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
@@ -112,87 +89,124 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
}
|
|
|
|
|
count=0;
|
|
|
|
|
}
|
|
|
|
|
else if(dimHelper.instance.getLinkDataFromCoords(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId)==null)
|
|
|
|
|
{
|
|
|
|
|
this.invalidate();
|
|
|
|
|
this.worldObj.setBlockToAir(xCoord, yCoord, zCoord);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void closeRift()
|
|
|
|
|
{
|
|
|
|
|
if(count2>20&&count2<22)
|
|
|
|
|
{
|
|
|
|
|
nearestRiftData = dimHelper.instance.getDimData(this.worldObj.provider.dimensionId).findNearestRift(worldObj, 10, xCoord, yCoord, zCoord);
|
|
|
|
|
if(this.nearestRiftData!=null)
|
|
|
|
|
{
|
|
|
|
|
TileEntityRift rift = (TileEntityRift) this.worldObj.getBlockTileEntity(nearestRiftData.locXCoord, nearestRiftData.locYCoord, nearestRiftData.locZCoord);
|
|
|
|
|
if(rift!=null)
|
|
|
|
|
{
|
|
|
|
|
rift.shouldClose=true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(count2>40)
|
|
|
|
|
{
|
|
|
|
|
this.invalidate();
|
|
|
|
|
this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord,0);
|
|
|
|
|
if(dimHelper.instance.getLinkDataFromCoords(this.xCoord, this.yCoord, this.zCoord, this.worldObj.provider.dimensionId)!=null)
|
|
|
|
|
{
|
|
|
|
|
dimHelper.instance.removeLink(this.worldObj.provider.dimensionId, this.xCoord, this.yCoord, this.zCoord);
|
|
|
|
|
this.worldObj.playSound(xCoord, yCoord, zCoord, "mods.DimDoors.sfx.riftClose", (float) .7, 1,true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
count2++;
|
|
|
|
|
}
|
|
|
|
|
public void updateEntity()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
if(rand.nextInt(10)==0)
|
|
|
|
|
{
|
|
|
|
|
age = age + 1;
|
|
|
|
|
this.calculateNextRenderQuad(age, rand);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
this.clearBlocksOnRift();
|
|
|
|
|
this.spawnEndermen();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
count++;
|
|
|
|
|
|
|
|
|
|
if(this.shouldClose)
|
|
|
|
|
{
|
|
|
|
|
// System.out.println(count2);
|
|
|
|
|
if(count2>20&&count2<22)
|
|
|
|
|
{
|
|
|
|
|
nearestRiftData = dimHelper.instance.getDimData(this.worldObj.provider.dimensionId).findNearestRift(worldObj, 10, xCoord, yCoord, zCoord);
|
|
|
|
|
if(this.nearestRiftData!=null)
|
|
|
|
|
{
|
|
|
|
|
TileEntityRift rift = (TileEntityRift) this.worldObj.getBlockTileEntity(nearestRiftData.locXCoord, nearestRiftData.locYCoord, nearestRiftData.locZCoord);
|
|
|
|
|
if(rift!=null)
|
|
|
|
|
{
|
|
|
|
|
rift.shouldClose=true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(count2>40)
|
|
|
|
|
{
|
|
|
|
|
this.invalidate();
|
|
|
|
|
this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord,0);
|
|
|
|
|
if(dimHelper.instance.getLinkDataFromCoords(this.xCoord, this.yCoord, this.zCoord, this.worldObj.provider.dimensionId)!=null)
|
|
|
|
|
{
|
|
|
|
|
dimHelper.instance.removeLink(this.worldObj.provider.dimensionId, this.xCoord, this.yCoord, this.zCoord);
|
|
|
|
|
this.worldObj.playSound(xCoord, yCoord, zCoord, "mods.DimDoors.sfx.riftClose", (float) .7, 1,true);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
count2++;
|
|
|
|
|
closeRift();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(dimHelper.instance.getLinkDataFromCoords(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId)==null)
|
|
|
|
|
{
|
|
|
|
|
this.invalidate();
|
|
|
|
|
this.worldObj.setBlockToAir(xCoord, yCoord, zCoord);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void grow(int distance)
|
|
|
|
|
{
|
|
|
|
|
int count=0;
|
|
|
|
|
if(rand.nextInt(distance*2)==0)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int x=0,y=0,z=0;
|
|
|
|
|
while(count<100)
|
|
|
|
|
{
|
|
|
|
|
count++;
|
|
|
|
|
x=this.xCoord+(1-(rand.nextInt(2)*2)*rand.nextInt(6));
|
|
|
|
|
y=this.yCoord+(1-(rand.nextInt(2)*2)*rand.nextInt(4));
|
|
|
|
|
z=this.zCoord+(1-(rand.nextInt(2)*2)*rand.nextInt(6));
|
|
|
|
|
if(this.worldObj.isAirBlock(x, y, z))
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (count<100)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
LinkData link = dimHelper.instance.getLinkDataFromCoords(this.xCoord, this.yCoord, this.zCoord, worldObj);
|
|
|
|
|
if(link!=null)
|
|
|
|
|
{
|
|
|
|
|
if(!this.hasGrownRifts&&rand.nextInt(3)==0)
|
|
|
|
|
{
|
|
|
|
|
// System.out.println(link.numberofChildren);
|
|
|
|
|
link.numberofChildren++;
|
|
|
|
|
dimHelper.instance.createLink(this.worldObj.provider.dimensionId, link.destDimID, x, y, z, link.destXCoord, link.destYCoord, link.destZCoord).numberofChildren=link.numberofChildren+1;
|
|
|
|
|
this.hasGrownRifts=true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public void calculateNextRenderQuad(float age, Random rand)
|
|
|
|
|
{
|
|
|
|
|
int iteration = MathHelper.floor_double((Math.log(Math.pow(age+1,1.5))));
|
|
|
|
|
double fl =Math.log(iteration+1)/(iteration);
|
|
|
|
|
double[] coords= new double[4];
|
|
|
|
|
double noise = ((rand.nextGaussian())/(10)*(iteration+1));
|
|
|
|
|
|
|
|
|
|
if(!this.renderingCenters.containsKey(iteration-1))
|
|
|
|
|
{
|
|
|
|
|
if(rand.nextBoolean())
|
|
|
|
|
{
|
|
|
|
|
coords[0] = fl*1.5;
|
|
|
|
|
coords[1] = rand.nextGaussian()/10;
|
|
|
|
|
coords[2] = 0;
|
|
|
|
|
coords[3] = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
coords[0] = 0;
|
|
|
|
|
coords[1] = rand.nextGaussian()/10;
|
|
|
|
|
coords[2] = fl*1.5;
|
|
|
|
|
coords[3] = 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
this.renderingCenters.put(iteration-1,coords);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if(!this.renderingCenters.containsKey(iteration))
|
|
|
|
|
{
|
|
|
|
|
if(this.renderingCenters.get(iteration-1)[3]==0)
|
|
|
|
|
{
|
|
|
|
|
coords[0]=noise/2+this.renderingCenters.get(iteration-1)[0];
|
|
|
|
|
coords[1]=noise+this.renderingCenters.get(iteration-1)[1];
|
|
|
|
|
coords[2]= this.renderingCenters.get(iteration-1)[2]+fl;
|
|
|
|
|
coords[3] = 0;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
coords[0]=this.renderingCenters.get(iteration-1)[0]+fl;
|
|
|
|
|
coords[1]=noise+this.renderingCenters.get(iteration-1)[1];
|
|
|
|
|
coords[2]=noise/2+this.renderingCenters.get(iteration-1)[2];
|
|
|
|
|
coords[3] = 1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.renderingCenters.put(iteration,coords);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public boolean shouldRenderInPass(int pass)
|
|
|
|
|
{
|
|
|
|
|
return pass == 1;
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
public void readFromNBT(NBTTagCompound nbt)
|
|
|
|
|
{
|
|
|
|
|
@@ -200,15 +214,22 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
int i = nbt.getInteger(("Size"));
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
this.xOffset = nbt.getInteger("xOffset");
|
|
|
|
|
this.yOffset = nbt.getInteger("yOffset");
|
|
|
|
|
this.zOffset = nbt.getInteger("zOffset");
|
|
|
|
|
this.hasGrownRifts =nbt.getBoolean("grownRifts");
|
|
|
|
|
{
|
|
|
|
|
this.count=nbt.getInteger("count");
|
|
|
|
|
this.count2=nbt.getInteger("count2");
|
|
|
|
|
this.shouldClose=nbt.getBoolean("shouldClose");
|
|
|
|
|
|
|
|
|
|
this.age=nbt.getFloat("age");
|
|
|
|
|
for(int key=0; key<=nbt.getInteger("hashMapSize");key++)
|
|
|
|
|
{
|
|
|
|
|
double[] coords = new double[4];
|
|
|
|
|
|
|
|
|
|
coords[0]= nbt.getDouble(key+"+0");
|
|
|
|
|
coords[1]= nbt.getDouble(key+"+1");
|
|
|
|
|
coords[2]= nbt.getDouble(key+"+2");
|
|
|
|
|
coords[3]= nbt.getDouble(key+"+3");
|
|
|
|
|
|
|
|
|
|
this.renderingCenters.put(key, coords);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -216,7 +237,7 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -225,12 +246,19 @@ public class TileEntityRift extends TileEntity
|
|
|
|
|
{
|
|
|
|
|
int i = 0;
|
|
|
|
|
super.writeToNBT(nbt);
|
|
|
|
|
nbt.setInteger("xOffset", this.xOffset);
|
|
|
|
|
nbt.setInteger("yOffset", this.yOffset);
|
|
|
|
|
nbt.setInteger("zOffset", this.zOffset);
|
|
|
|
|
nbt.setBoolean("grownRifts",this.hasGrownRifts);
|
|
|
|
|
|
|
|
|
|
for(Integer key:this.renderingCenters.keySet())
|
|
|
|
|
{
|
|
|
|
|
nbt.setDouble(key+"+0", this.renderingCenters.get(key)[0]);
|
|
|
|
|
nbt.setDouble(key+"+1", this.renderingCenters.get(key)[1]);
|
|
|
|
|
nbt.setDouble(key+"+2", this.renderingCenters.get(key)[2]);
|
|
|
|
|
nbt.setDouble(key+"+3", this.renderingCenters.get(key)[3]);
|
|
|
|
|
}
|
|
|
|
|
nbt.setInteger("hashMapSize", this.renderingCenters.size());
|
|
|
|
|
nbt.setInteger("count", this.count);
|
|
|
|
|
nbt.setInteger("count2", this.count2);
|
|
|
|
|
nbt.setFloat("age", this.age);
|
|
|
|
|
|
|
|
|
|
nbt.setBoolean("shouldClose", this.shouldClose);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|