diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java b/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java index 5b0dea3..0effc8b 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/tileentities/TileEntityRift.java @@ -1,7 +1,6 @@ package StevenDimDoors.mod_pocketDim.tileentities; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Random; @@ -13,7 +12,6 @@ import net.minecraft.network.INetworkManager; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.Packet132TileEntityData; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import StevenDimDoors.mod_pocketDim.ServerPacketHandler; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.config.DDProperties; @@ -33,97 +31,71 @@ public class TileEntityRift extends DDTileEntityBase private static final int MAX_RIFT_SPREAD_CHANCE = 256; private static final int HOSTILE_ENDERMAN_CHANCE = 1; private static final int MAX_HOSTILE_ENDERMAN_CHANCE = 3; - private static final float[] POCKET_RENDER_COLOR= {1,1,1,.7F}; - private static final float[] DEFAULT_RENDER_COLOR= {1,1,1,1}; + private static final int UPDATE_PERIOD = 200; + private static final int CLOSING_PERIOD = 40; private static Random random = new Random(); - private int age = 0; - private int updateTimer = 0; - private int riftCloseTimer = 0; + private int updateTimer; + private int closeTimer = 0; public int xOffset = 0; public int yOffset = 0; public int zOffset = 0; public boolean shouldClose = false; - private boolean hasUpdated = false; public DimLink nearestRiftData; public int spawnedEndermenID = 0; - public HashMap renderingCenters = new HashMap(); + + public TileEntityRift() + { + // Vary the update times of rifts to prevent all the rifts in a cluster + // from updating at the same time. + updateTimer = random.nextInt(UPDATE_PERIOD); + } @Override public void updateEntity() { - // Determines if rift should render white closing particles and spread closing effect to other rifts nearby - if (this.shouldClose) + if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj.provider.dimensionId) == null) { - closeRift(); - } - else if (PocketManager.getLink(xCoord, yCoord, zCoord, worldObj.provider.dimensionId) == null) - { - this.invalidate(); if (worldObj.getBlockId(xCoord, yCoord, zCoord) == mod_pocketDim.blockRift.blockID) { worldObj.setBlockToAir(xCoord, yCoord, zCoord); - this.invalidate(); - return; } + else + { + this.invalidate(); + } + return; } - + if (worldObj.getBlockId(xCoord, yCoord, zCoord) != mod_pocketDim.blockRift.blockID) { - worldObj.removeBlockTileEntity(xCoord, yCoord, zCoord); this.invalidate(); return; } - - //The code for the new rift rendering hooks in here, as well as in the ClientProxy to bind the TESR to the rift. - //It is inactive for now. - /** - if(rand.nextInt(15) == 1) - { - age = age + 1; - this.calculateNextRenderQuad(age, rand); - } - this.clearBlocksOnRift(); - **/ - - //This code should execute once every 10 seconds - if (updateTimer >= 200) + + // Check if this rift should render white closing particles and + // spread the closing effect to other rifts nearby. + if (this.shouldClose) + { + closeRift(); + return; + } + + if (updateTimer >= UPDATE_PERIOD) { this.spawnEndermen(mod_pocketDim.properties); - this.grow(mod_pocketDim.properties); updateTimer = 0; } - else if (updateTimer == 0) + else if (updateTimer == UPDATE_PERIOD / 2) { - this.calculateOldParticleOffset(); //this also calculates the distance for the particle stuff. + this.calculateParticleOffsets(); + this.spread(mod_pocketDim.properties); } updateTimer++; } - private void clearBlocksOnRift() - { - //clears blocks for the new rending effect - for (double[] coord : this.renderingCenters.values()) - { - int x = MathHelper.floor_double(coord[0] + 0.5); - int y = MathHelper.floor_double(coord[1] + 0.5); - int z = MathHelper.floor_double(coord[2] + 0.5); - - // Right side - if (!mod_pocketDim.blockRift.isBlockImmune(worldObj, this.xCoord + x, this.yCoord + y, this.zCoord + z)) - { - worldObj.setBlockToAir(this.xCoord + x, this.yCoord + y, this.zCoord + z); - } - // Left side - if (!mod_pocketDim.blockRift.isBlockImmune(worldObj, this.xCoord - x, this.yCoord - y, this.zCoord - z)) - { - worldObj.setBlockToAir(this.xCoord - x, this.yCoord - y, this.zCoord - z); - } - } - } - private void spawnEndermen(DDProperties properties) { if (worldObj.isRemote || !properties.RiftsSpawnEndermenEnabled) @@ -174,14 +146,14 @@ public class TileEntityRift extends DDTileEntityBase private void closeRift() { NewDimData dimension = PocketManager.getDimensionData(worldObj); - if (riftCloseTimer == 20) + if (closeTimer == CLOSING_PERIOD / 2) { - ArrayList rifts= dimension.findRiftsInRange(worldObj, 6, xCoord, yCoord, zCoord); - if (rifts.size()>0) + ArrayList riftLinks = dimension.findRiftsInRange(worldObj, 6, xCoord, yCoord, zCoord); + if (riftLinks.size() > 0) { - for(DimLink riftToClose : rifts) + for (DimLink riftLink : riftLinks) { - Point4D location = riftToClose.source(); + Point4D location = riftLink.source(); TileEntityRift rift = (TileEntityRift) worldObj.getBlockTileEntity(location.getX(), location.getY(), location.getZ()); if (rift != null) { @@ -191,9 +163,8 @@ public class TileEntityRift extends DDTileEntityBase } } } - if (riftCloseTimer > 40) + if (closeTimer >= CLOSING_PERIOD) { - this.invalidate(); if (!this.worldObj.isRemote) { DimLink link = PocketManager.getLink(this.xCoord, this.yCoord, this.zCoord, worldObj); @@ -204,13 +175,12 @@ public class TileEntityRift extends DDTileEntityBase } worldObj.setBlockToAir(xCoord, yCoord, zCoord); worldObj.playSound(xCoord, yCoord, zCoord, "mods.DimDoors.sfx.riftClose", (float) .7, 1, true); - this.worldObj.removeBlockTileEntity(xCoord, yCoord, zCoord); return; } - riftCloseTimer++; + closeTimer++; } - private void calculateOldParticleOffset() + private void calculateParticleOffsets() { if (updateNearestRift()) { @@ -218,68 +188,16 @@ public class TileEntityRift extends DDTileEntityBase this.xOffset = this.xCoord - location.getX(); this.yOffset = this.yCoord - location.getY(); this.zOffset = this.zCoord - location.getZ(); - int distance = Math.abs(xOffset) + Math.abs(yOffset) + Math.abs(zOffset); } else { - this.xOffset=0; - this.yOffset=0; - this.xOffset=0; + this.xOffset = 0; + this.yOffset = 0; + this.xOffset = 0; } this.onInventoryChanged(); } - - private void calculateNextRenderQuad(float age, Random rand) - { - int maxSize = MathHelper.floor_double((Math.log(Math.pow(age+1,2)))); - int iteration=0; - while(iteration< maxSize) - { - iteration++; - double fl =Math.log(iteration+1)/(iteration); - double[] coords= new double[4]; - double noise = ((rand.nextGaussian())/(2+iteration/3+1)); - - if(!this.renderingCenters.containsKey(iteration-1)) - { - if (rand.nextBoolean()) - { - coords[0] = fl*1.5; - coords[1] = rand.nextGaussian()/5; - coords[2] = 0; - coords[3] = 1; - } - else - { - coords[0] = 0; - coords[1] = rand.nextGaussian()/5; - coords[2] = fl*1.5; - coords[3] = 0; - } - this.renderingCenters.put(iteration-1,coords); - iteration--; - } - 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/2+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/2+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) { @@ -292,13 +210,10 @@ public class TileEntityRift extends DDTileEntityBase { return countAncestorLinks(link.parent()) + 1; } - else - { - return 0; - } + return 0; } - public void grow(DDProperties properties) + public void spread(DDProperties properties) { if (worldObj.isRemote || !properties.RiftSpreadEnabled || random.nextInt(MAX_RIFT_SPREAD_CHANCE) < RIFT_SPREAD_CHANCE || this.shouldClose) @@ -329,13 +244,10 @@ public class TileEntityRift extends DDTileEntityBase public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - this.renderingCenters = new HashMap(); - this.updateTimer = nbt.getInteger("count"); - this.riftCloseTimer = nbt.getInteger("count2"); + this.updateTimer = nbt.getInteger("updateTimer"); this.xOffset = nbt.getInteger("xOffset"); this.yOffset = nbt.getInteger("yOffset"); this.zOffset = nbt.getInteger("zOffset"); - this.age = nbt.getInteger("age"); this.shouldClose = nbt.getBoolean("shouldClose"); this.spawnedEndermenID = nbt.getInteger("spawnedEndermenID"); } @@ -344,9 +256,7 @@ public class TileEntityRift extends DDTileEntityBase public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setInteger("age", this.age); - nbt.setInteger("count", this.updateTimer); - nbt.setInteger("count2", this.riftCloseTimer); + nbt.setInteger("updateTimer", this.updateTimer); nbt.setInteger("xOffset", this.xOffset); nbt.setInteger("yOffset", this.yOffset); nbt.setInteger("zOffset", this.zOffset);