From 40ae8a06bdf3eb74830cab9c8f0157e467b6cab0 Mon Sep 17 00:00:00 2001 From: GreyMario Date: Sun, 18 Aug 2013 02:38:23 -0700 Subject: [PATCH 1/7] Fixed the NEI breaking bug (and an undiscovered bug involving sleeping and entering pocket dimensions) --- .../mod_pocketDim/helpers/dimHelper.java | 98 +++++++++++++------ 1 file changed, 69 insertions(+), 29 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java index 5e7bf63..7f0f8f9 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java @@ -102,28 +102,37 @@ public class dimHelper extends DimensionManager else return 1; } - private Entity teleportEntity(World oldWorld, Entity entity, LinkData link) //this beautiful teleport method is based off of xCompWiz's teleport function. - { - Entity cart=entity.ridingEntity; - if(entity.riddenByEntity!=null) + // GreyMaria: My god, what a mess. Here, let me clean it up a bit. + private Entity teleportEntity(World world, Entity entity, LinkData link) //this beautiful teleport method is based off of xCompWiz's teleport function. + { + // GreyMaria: Added to simplify some code further in. + WorldServer oldWorld = (WorldServer)world; + + // Is something riding? Handle it first. + if(entity.riddenByEntity != null) { return this.teleportEntity(oldWorld,entity.riddenByEntity, link); } - if (entity.ridingEntity != null) + // Are we riding something? Dismount and tell the mount to go first. + Entity cart = entity.ridingEntity; + if (cart != null) { entity.mountEntity(null); cart = teleportEntity(oldWorld, cart, link); + // We keep track of both so we can remount them on the other side. } WorldServer newWorld; + // Destination doesn't exist? We need to make it. if(DimensionManager.getWorld(link.destDimID)==null) { DimensionManager.initDimension(link.destDimID); } - boolean difDest = link.destDimID != link.locDimID; + // Determine if our destination's in another realm. + boolean difDest = link.destDimID != link.locDimID; if(difDest) { newWorld = DimensionManager.getWorld(link.destDimID); @@ -133,40 +142,53 @@ public class dimHelper extends DimensionManager newWorld=(WorldServer)oldWorld; } + // GreyMaria: What is this even accomplishing? We're doing the exact same thing at the end of this all. + // TODO Check to see if this is actually vital. mod_pocketDim.teleporter.placeInPortal(entity, newWorld, link); - if ((entity instanceof EntityPlayerMP)) - { - EntityPlayerMP player = (EntityPlayerMP)entity; - if (difDest) - { - GameRegistry.onPlayerChangedDimension((EntityPlayer)entity); - + // We'll need to know if we're teleporting a player entity. + // If this value is NULL, then we're not teleporting a player entity. + EntityPlayerMP player = null; + if (entity instanceof EntityPlayerMP) player = (EntityPlayerMP)entity; + + if (difDest) // Are we moving our target to a new dimension? + { + if(player != null) // Are we working with a player? + { + // We need to do all this special stuff to move a player between dimensions. + + // Set the new dimension and inform the client that it's moving to a new world. player.dimension = link.destDimID; player.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(player.dimension, (byte)player.worldObj.difficultySetting, newWorld.getWorldInfo().getTerrainType(), newWorld.getHeight(), player.theItemInWorldManager.getGameType())); - WorldServer.class.cast(oldWorld).removeEntity(player); + // GreyMaria: Used the safe player entity remover. + // This should fix an apparently unreported bug where + // the last non-sleeping player leaves the Overworld + // for a pocket dimension, causing all sleeping players + // to remain asleep instead of progressing to day. + oldWorld.removePlayerEntityDangerously(player); player.isDead=false; - oldWorld.playerEntities.remove(player); - WorldServer.class.cast(oldWorld).getPlayerManager().removePlayer(player); + // Creates sanity by ensuring that we're only known to exist where we're supposed to be known to exist. + oldWorld.getPlayerManager().removePlayer(player); newWorld.getPlayerManager().addPlayer(player); player.theItemInWorldManager.setWorld((WorldServer)newWorld); + // Synchronize with the server so the client knows what time it is and what it's holding. player.mcServer.getConfigurationManager().updateTimeAndWeatherForPlayer(player, (WorldServer)newWorld); player.mcServer.getConfigurationManager().syncPlayerInventory(player); - for(Object potionEffect : player.getActivePotionEffects()) { PotionEffect effect = (PotionEffect)potionEffect; player.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(player.entityId, effect)); } - player.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(player.experience, player.experienceTotal, player.experienceLevel)); - } - } - if(difDest) - { + + // GreyMaria: Can someone tell me why we need this? I'm commenting it out for now. We'll see if it causes problems. + //player.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(player.experience, player.experienceTotal, player.experienceLevel)); + } + + // Creates sanity by removing the entity from its old location's chunk entity list, if applicable. int entX = entity.chunkCoordX; int entZ = entity.chunkCoordZ; if ((entity.addedToChunk) && (oldWorld.getChunkProvider().chunkExists(entX, entZ))) @@ -174,8 +196,10 @@ public class dimHelper extends DimensionManager oldWorld.getChunkFromChunkCoords(entX, entZ).removeEntity(entity); oldWorld.getChunkFromChunkCoords(entX, entZ).isModified = true; } + // Memory concerns. oldWorld.releaseEntitySkin(entity); - if (!(entity instanceof EntityPlayer)) + + if (player == null) // Are we NOT working with a player? { NBTTagCompound entityNBT = new NBTTagCompound(); entity.isDead = false; @@ -183,26 +207,42 @@ public class dimHelper extends DimensionManager entity.isDead = true; entity = EntityList.createEntityFromNBT(entityNBT, newWorld); - if (entity == null) - { - + if (entity == null) + { // TODO FIXME IMPLEMENT NULL CHECKS THAT ACTUALLY DO SOMETHING. + /* + * shit ourselves in an organized fashion, preferably + * in a neat pile instead of all over our users' games + */ } + } + + // Finally, respawn the entity in its new home. newWorld.spawnEntityInWorld(entity); entity.setWorld(newWorld); } entity.worldObj.updateEntityWithOptionalForce(entity, false); - if ((entity != null) && (cart != null)) + + // Hey, remember me? It's time to remount. + if (cart != null) { - if ((entity instanceof EntityPlayerMP)) + // Was there a player teleported? If there was, it's important that we update shit. + if (player != null) { entity.worldObj.updateEntityWithOptionalForce(entity, true); } entity.mountEntity(cart); } - if(entity instanceof EntityPlayerMP) + + // Did we teleport a player? Load the chunk for them. + if(player != null) { WorldServer.class.cast(newWorld).getChunkProvider().loadChunk(MathHelper.floor_double(entity.posX) >> 4, MathHelper.floor_double(entity.posZ) >> 4); + + // Tell Forge we're moving its players so everyone else knows. + // Let's try doing this down here in case this is what's killing NEI. + GameRegistry.onPlayerChangedDimension((EntityPlayer)entity); + } mod_pocketDim.teleporter.placeInPortal(entity, newWorld, link); return entity; -- 2.39.5 From 2d6194d5999dd7c20f5b8d64ec6273b952e4f0ae Mon Sep 17 00:00:00 2001 From: GreyMario Date: Sun, 18 Aug 2013 02:42:07 -0700 Subject: [PATCH 2/7] Fixed the NEI breaking bug. Whoops. We needed that experience packet. --- StevenDimDoors/mod_pocketDim/helpers/dimHelper.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java index 7f0f8f9..5b55199 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java @@ -184,8 +184,7 @@ public class dimHelper extends DimensionManager player.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(player.entityId, effect)); } - // GreyMaria: Can someone tell me why we need this? I'm commenting it out for now. We'll see if it causes problems. - //player.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(player.experience, player.experienceTotal, player.experienceLevel)); + player.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(player.experience, player.experienceTotal, player.experienceLevel)); } // Creates sanity by removing the entity from its old location's chunk entity list, if applicable. -- 2.39.5 From 40310688edd538a9457566e834e9eb607ab64dc2 Mon Sep 17 00:00:00 2001 From: GreyMario Date: Sun, 18 Aug 2013 14:11:51 -0700 Subject: [PATCH 3/7] yCoordhelper: added top-down search (may be redundant) This is used for the code that determines where to come out of Limbo in. It tries to search from the top down to find a solid block to stand on. Isn't complete, though. This code does need some considerations put in, though... I'm concerned about Natura's clouds, for instance. --- .../mod_pocketDim/helpers/yCoordHelper.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/helpers/yCoordHelper.java b/StevenDimDoors/mod_pocketDim/helpers/yCoordHelper.java index be3e878..dd14838 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/yCoordHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/yCoordHelper.java @@ -21,6 +21,9 @@ public class yCoordHelper } public static int getFirstUncovered(int worldID, int x, int yStart, int z) + { return getFirstUncovered(worldID, x, yStart, z, false); } + + public static int getFirstUncovered(int worldID, int x, int yStart, int z, boolean fromTop) { if (dimHelper.getWorld(worldID) == null || dimHelper.getWorld(worldID).provider == null) @@ -28,10 +31,13 @@ public class yCoordHelper dimHelper.initDimension(worldID); } - return yCoordHelper.getFirstUncovered(dimHelper.getWorld(worldID), x, yStart, z); + return yCoordHelper.getFirstUncovered(dimHelper.getWorld(worldID), x, yStart, z, fromTop); } public static int getFirstUncovered(World world, int x, int yStart, int z) + { return getFirstUncovered(world, x, yStart, z, false); } + + public static int getFirstUncovered(World world, int x, int yStart, int z, boolean fromTop) { Chunk chunk = world.getChunkProvider().loadChunk(x >> 4, z >> 4); @@ -40,10 +46,21 @@ public class yCoordHelper int height = MAXIMUM_UNCOVERED_Y; //world.getHeight(); int y; - boolean covered = true; - for (y = yStart; y < height && covered; y++) + if(!fromTop) { - covered = IsCoveredBlock(chunk, localX, y - 1, localZ) || IsCoveredBlock(chunk, localX, y, localZ); + boolean covered = true; + for (y = yStart; y < height && covered; y++) + { + covered = IsCoveredBlock(chunk, localX, y - 1, localZ) || IsCoveredBlock(chunk, localX, y, localZ); + } + } else { + boolean covered = false; + for (y = MAXIMUM_UNCOVERED_Y; y > 1 && !covered; y--) + { + covered = IsCoveredBlock(chunk, localX, y - 1, localZ); + } + if (!covered) y = 63; + y++; } return y; @@ -69,4 +86,4 @@ public class yCoordHelper material = block.blockMaterial; return (material.isLiquid() || !material.isReplaceable()); } -} \ No newline at end of file +} -- 2.39.5 From 740ba51a04859e8fa4adc4059cb06d0821f9f772 Mon Sep 17 00:00:00 2001 From: GreyMario Date: Sun, 18 Aug 2013 14:13:23 -0700 Subject: [PATCH 4/7] BlockDimWallPerm: Sped up transition from Limbo to Overworld Hijacking teleportEntity seems to make this faster. --- .../mod_pocketDim/blocks/BlockDimWallPerm.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java index 46b43ce..95289a9 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockDimWallPerm.java @@ -56,6 +56,8 @@ public class BlockDimWallPerm extends Block { link =new LinkData(0,0,0,0); } + link.destDimID = 0; + link.locDimID = par1World.provider.dimensionId; if(dimHelper.getWorld(0)==null) @@ -74,22 +76,27 @@ public class BlockDimWallPerm extends Block x = x + (x >> 4); z = z + (z >> 4); - int y = yCoordHelper.getFirstUncovered(0, x, 63, z); + int y = yCoordHelper.getFirstUncovered(0, x, 63, z, true); EntityPlayer.class.cast(par5Entity).setPositionAndUpdate( x, y, z ); //this complicated chunk teleports the player back to the overworld at some random location. Looks funky becaue it has to load the chunk - - FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) par5Entity, 0,new BlankTeleporter((WorldServer)par5Entity.worldObj)); + link.destXCoord = x; + link.destYCoord = y; + link.destZCoord = z; + dimHelper.instance.teleportEntity(par1World, par5Entity, link); + //FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP) par5Entity, 0,new BlankTeleporter((WorldServer)par5Entity.worldObj)); //dimHelper.instance.teleportToPocket(par1World, new LinkData(par1World.provider.dimensionId,0,x,y,z,link.locXCoord,link.locYCoord,link.locZCoord,link.isLocPocket,0), // EntityPlayer.class.cast(par5Entity)); EntityPlayer.class.cast(par5Entity).setPositionAndUpdate( x, y, z ); - //makes sure they can breath when they teleport + // Make absolutely sure the player doesn't spawn inside blocks, though to be honest this shouldn't ever have to be a problem... dimHelper.getWorld(0).setBlock(x, y, z, 0); + dimHelper.getWorld(0).setBlock(x, y+1, z, 0); + int i=x; - int j=y-1; + int j=y; int k=z; -- 2.39.5 From 0deb4b89174bebd6384c81e2cdc33cf700cfe672 Mon Sep 17 00:00:00 2001 From: GreyMario Date: Sun, 18 Aug 2013 14:14:36 -0700 Subject: [PATCH 5/7] dimHelper: changed teleportEntity to public This enables use in BlockDimWallPerm for escaping Limbo quickly. --- .../mod_pocketDim/helpers/dimHelper.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java index 5b55199..10a6151 100644 --- a/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java +++ b/StevenDimDoors/mod_pocketDim/helpers/dimHelper.java @@ -103,17 +103,28 @@ public class dimHelper extends DimensionManager } // GreyMaria: My god, what a mess. Here, let me clean it up a bit. - private Entity teleportEntity(World world, Entity entity, LinkData link) //this beautiful teleport method is based off of xCompWiz's teleport function. - { - // GreyMaria: Added to simplify some code further in. + public Entity teleportEntity(World world, Entity entity, LinkData link) //this beautiful teleport method is based off of xCompWiz's teleport function. + { WorldServer oldWorld = (WorldServer)world; + WorldServer newWorld; + EntityPlayerMP player = (entity instanceof EntityPlayerMP) ? (EntityPlayerMP)entity : null; - // Is something riding? Handle it first. + /*// SPECIAL CASE: Is our link null? If so, we've likely come from Limbo. Ensure this is the case. + if(link == null) + { + if(world.provider.dimensionId == DDProperties.instance().LimboDimensionID) + { + link = new LinkData(0, 0, 0, 0); + // Find destination point. + } + }*/ + + + // Is something riding? Handle it first. if(entity.riddenByEntity != null) { return this.teleportEntity(oldWorld,entity.riddenByEntity, link); } - // Are we riding something? Dismount and tell the mount to go first. Entity cart = entity.ridingEntity; if (cart != null) @@ -123,8 +134,6 @@ public class dimHelper extends DimensionManager // We keep track of both so we can remount them on the other side. } - WorldServer newWorld; - // Destination doesn't exist? We need to make it. if(DimensionManager.getWorld(link.destDimID)==null) { @@ -146,12 +155,7 @@ public class dimHelper extends DimensionManager // TODO Check to see if this is actually vital. mod_pocketDim.teleporter.placeInPortal(entity, newWorld, link); - // We'll need to know if we're teleporting a player entity. - // If this value is NULL, then we're not teleporting a player entity. - EntityPlayerMP player = null; - if (entity instanceof EntityPlayerMP) player = (EntityPlayerMP)entity; - - if (difDest) // Are we moving our target to a new dimension? + if (difDest) // Are we moving our target to a new dimension? { if(player != null) // Are we working with a player? { -- 2.39.5 From 2e833b55c394a4d2e5eea71614c68c3e41903f5b Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Wed, 21 Aug 2013 01:10:28 -0400 Subject: [PATCH 6/7] rift rendering work Getting closer- still need to sync client and server --- .../mod_pocketDim/TileEntityRift.java | 35 ++++++++++++------- .../mod_pocketDimClient/RenderRift.java | 14 ++++---- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/TileEntityRift.java b/StevenDimDoors/mod_pocketDim/TileEntityRift.java index a66ac03..16c2e09 100644 --- a/StevenDimDoors/mod_pocketDim/TileEntityRift.java +++ b/StevenDimDoors/mod_pocketDim/TileEntityRift.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Random; +import StevenDimDoors.mod_pocketDim.blocks.BlockRift; import StevenDimDoors.mod_pocketDim.helpers.dimHelper; import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; @@ -53,9 +54,16 @@ public class TileEntityRift extends TileEntity 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); + + if(!BlockRift.isBlockImmune(worldObj,this.xCoord+x, this.yCoord+y, this.zCoord+z)) + { + this.worldObj.setBlockToAir(this.xCoord+x, this.yCoord+y, this.zCoord+z); + } - this.worldObj.setBlockToAir(this.xCoord-x, this.yCoord+y, this.zCoord-z); + if(!BlockRift.isBlockImmune(worldObj,this.xCoord-x, this.yCoord-y, this.zCoord-z)) + { + this.worldObj.setBlockToAir(this.xCoord-x, this.yCoord-y, this.zCoord-z); + } } } @@ -77,9 +85,9 @@ public class TileEntityRift extends TileEntity { - EntityEnderman enderman = new EntityEnderman(worldObj); - enderman.setLocationAndAngles(this.xCoord+.5, this.yCoord-1, this.zCoord+.5, 5, 6); - worldObj.spawnEntityInWorld(enderman); + EntityEnderman creeper = new EntityEnderman(worldObj); + creeper.setLocationAndAngles(this.xCoord+.5, this.yCoord-1, this.zCoord+.5, 5, 6); + worldObj.spawnEntityInWorld(creeper); } } } @@ -153,21 +161,21 @@ public class TileEntityRift extends TileEntity 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)); + 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()/10; + coords[1] = rand.nextGaussian()/5; coords[2] = 0; coords[3] = 1; } else { coords[0] = 0; - coords[1] = rand.nextGaussian()/10; + coords[1] = rand.nextGaussian()/5; coords[2] = fl*1.5; coords[3] = 0; @@ -181,7 +189,7 @@ public class TileEntityRift extends TileEntity 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[1]=noise/2+this.renderingCenters.get(iteration-1)[1]; coords[2]= this.renderingCenters.get(iteration-1)[2]+fl; coords[3] = 0; @@ -189,7 +197,7 @@ public class TileEntityRift extends TileEntity else { coords[0]=this.renderingCenters.get(iteration-1)[0]+fl; - coords[1]=noise+this.renderingCenters.get(iteration-1)[1]; + coords[1]=noise/2+this.renderingCenters.get(iteration-1)[1]; coords[2]=noise/2+this.renderingCenters.get(iteration-1)[2]; coords[3] = 1; @@ -210,7 +218,7 @@ public class TileEntityRift extends TileEntity @Override public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); + int i = nbt.getInteger(("Size")); try @@ -239,13 +247,14 @@ public class TileEntityRift extends TileEntity { e.printStackTrace(); } + super.readFromNBT(nbt); } @Override public void writeToNBT(NBTTagCompound nbt) { int i = 0; - super.writeToNBT(nbt); + for(Integer key:this.renderingCenters.keySet()) { @@ -260,6 +269,6 @@ public class TileEntityRift extends TileEntity nbt.setFloat("age", this.age); nbt.setBoolean("shouldClose", this.shouldClose); - + super.writeToNBT(nbt); } } diff --git a/StevenDimDoors/mod_pocketDimClient/RenderRift.java b/StevenDimDoors/mod_pocketDimClient/RenderRift.java index d3bc985..39ed2f9 100644 --- a/StevenDimDoors/mod_pocketDimClient/RenderRift.java +++ b/StevenDimDoors/mod_pocketDimClient/RenderRift.java @@ -41,7 +41,7 @@ public class RenderRift extends TileEntitySpecialRenderer //GL11.glLogicOp(GL11.GL_INVERT); // GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); - GL11.glColor4f(.3F, .3F, .3F, .2F); + GL11.glColor4f(.15F, .15F, .15F, 1F); GL11.glEnable(GL_BLEND); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); @@ -67,8 +67,8 @@ public class RenderRift extends TileEntitySpecialRenderer { GL11.glBegin(GL11.GL_QUAD_STRIP); - drawVertex(xWorld+.5, yWorld-Math.log(quads.size()+1)/8, zWorld+.5); - drawVertex(xWorld+.5, yWorld+Math.log(quads.size()+1)/8, zWorld+.5); + drawVertex(xWorld+.5, yWorld-Math.log(Math.pow(quads.size(),2)+1)/14, zWorld+.5); + drawVertex(xWorld+.5, yWorld+Math.log(Math.pow(quads.size(),2)+1)/14, zWorld+.5); for(int i = 0;;i++) { if(!quads.containsKey(i)) @@ -76,7 +76,7 @@ public class RenderRift extends TileEntitySpecialRenderer break; } double[] coords = quads.get(i); - double width=Math.log(quads.size()-i+1)/8; + double width=Math.log(Math.pow(quads.size(),2-i/2)+1)/14; if(coords[3]==0) { @@ -128,8 +128,8 @@ public class RenderRift extends TileEntitySpecialRenderer { GL11.glBegin(GL11.GL_QUAD_STRIP); - drawVertex(xWorld+.5, yWorld+Math.log(quads.size()+1)/8, zWorld+.5); - drawVertex(xWorld+.5, yWorld-Math.log(quads.size()+1)/8, zWorld+.5); + drawVertex(xWorld+.5, yWorld+Math.log(Math.pow(quads.size(),2)+1)/14, zWorld+.5); + drawVertex(xWorld+.5, yWorld-Math.log(Math.pow(quads.size(),2)+1)/14, zWorld+.5); for(int i = 0;;i++) { if(!quads.containsKey(i)) @@ -137,7 +137,7 @@ public class RenderRift extends TileEntitySpecialRenderer break; } double[] coords = quads.get(i); - double width=Math.log(quads.size()-i+1)/8; + double width=Math.log(Math.pow(quads.size(),2-i/2)+1)/14; if(coords[3]==0) { -- 2.39.5 From c7ddff97b25934a3a7c1205b752c1dd37b29a674 Mon Sep 17 00:00:00 2001 From: StevenRS11 Date: Wed, 21 Aug 2013 22:13:59 -0400 Subject: [PATCH 7/7] Rift rendering work Not sure if I want to keep working at this or not --- .../mod_pocketDim/TileEntityRift.java | 101 ++++++++++-------- .../mod_pocketDim/blocks/BlockRift.java | 2 +- .../mod_pocketDimClient/RenderRift.java | 6 +- 3 files changed, 60 insertions(+), 49 deletions(-) diff --git a/StevenDimDoors/mod_pocketDim/TileEntityRift.java b/StevenDimDoors/mod_pocketDim/TileEntityRift.java index 16c2e09..ddf5229 100644 --- a/StevenDimDoors/mod_pocketDim/TileEntityRift.java +++ b/StevenDimDoors/mod_pocketDim/TileEntityRift.java @@ -12,10 +12,15 @@ import StevenDimDoors.mod_pocketDim.helpers.dimHelper; import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; +import net.minecraft.entity.DataWatcher; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.entity.monster.EntityEnderman; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetworkManager; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.Packet130UpdateSign; +import net.minecraft.network.packet.Packet132TileEntityData; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; @@ -36,10 +41,11 @@ public class TileEntityRift extends TileEntity public HashMap renderingCenters = new HashMap(); public LinkData nearestRiftData; - Random rand = new Random(); + Random rand; + DataWatcher watcher = new DataWatcher(); - public float age = 0; + public int age = 0; @@ -128,11 +134,18 @@ public class TileEntityRift extends TileEntity } public void updateEntity() { - - if(rand.nextInt(10)==0) + if(rand == null) { + rand = new Random(); + rand.setSeed(this.xCoord+this.yCoord+this.zCoord); + + } + if(rand.nextInt(15) == 1) + { + age = age + 1; this.calculateNextRenderQuad(age, rand); + } this.clearBlocksOnRift(); @@ -158,7 +171,13 @@ public class TileEntityRift extends TileEntity } public void calculateNextRenderQuad(float age, Random rand) { - int iteration = MathHelper.floor_double((Math.log(Math.pow(age+1,1.5)))); + 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)); @@ -181,7 +200,7 @@ public class TileEntityRift extends TileEntity } this.renderingCenters.put(iteration-1,coords); - + iteration--; } else if(!this.renderingCenters.containsKey(iteration)) @@ -205,8 +224,10 @@ public class TileEntityRift extends TileEntity this.renderingCenters.put(iteration,coords); - + + } } + } @@ -218,57 +239,47 @@ public class TileEntityRift extends TileEntity @Override public void readFromNBT(NBTTagCompound nbt) { - - int i = nbt.getInteger(("Size")); - - try - { + super.readFromNBT(nbt); + this.renderingCenters= new HashMap(); this.count=nbt.getInteger("count"); this.count2=nbt.getInteger("count2"); + this.age=nbt.getInteger("age"); 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); - } - - - - - } - catch (Exception e) - { - e.printStackTrace(); - } - super.readFromNBT(nbt); + } @Override public void writeToNBT(NBTTagCompound nbt) { - int i = 0; - - - 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]); - } + super.writeToNBT(nbt); + nbt.setInteger("hashMapSize", this.renderingCenters.size()); + nbt.setInteger("age", this.age); nbt.setInteger("count", this.count); nbt.setInteger("count2", this.count2); - nbt.setFloat("age", this.age); nbt.setBoolean("shouldClose", this.shouldClose); - super.writeToNBT(nbt); + } + + @Override + public Packet getDescriptionPacket() { + Packet132TileEntityData packet = new Packet132TileEntityData(); + packet.actionType = 0; + packet.xPosition = xCoord; + packet.yPosition = yCoord; + packet.zPosition = zCoord; + + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + packet.customParam1 = nbt; + return packet; + } + + @Override + public void onDataPacket(INetworkManager net, Packet132TileEntityData pkt) { + readFromNBT(pkt.customParam1); + } + } diff --git a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java index 850acec..12dc289 100644 --- a/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java +++ b/StevenDimDoors/mod_pocketDim/blocks/BlockRift.java @@ -161,7 +161,7 @@ public class BlockRift extends BlockContainer if (random.nextInt(MAX_BLOCK_SEARCH_CHANCE) < BLOCK_SEARCH_CHANCE && ((TileEntityRift) world.getBlockTileEntity(x, y, z)).isNearRift ) { - destroyNearbyBlocks(world, x, y, z, random); + // destroyNearbyBlocks(world, x, y, z, random); } } } diff --git a/StevenDimDoors/mod_pocketDimClient/RenderRift.java b/StevenDimDoors/mod_pocketDimClient/RenderRift.java index 39ed2f9..3d55fe1 100644 --- a/StevenDimDoors/mod_pocketDimClient/RenderRift.java +++ b/StevenDimDoors/mod_pocketDimClient/RenderRift.java @@ -41,7 +41,7 @@ public class RenderRift extends TileEntitySpecialRenderer //GL11.glLogicOp(GL11.GL_INVERT); // GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); - GL11.glColor4f(.15F, .15F, .15F, 1F); + GL11.glColor4f(.3F, .3F, .3F, 1F); GL11.glEnable(GL_BLEND); glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); @@ -76,7 +76,7 @@ public class RenderRift extends TileEntitySpecialRenderer break; } double[] coords = quads.get(i); - double width=Math.log(Math.pow(quads.size(),2-i/2)+1)/14; + double width=Math.log(Math.pow(quads.size(),2-Math.log(i+1))+1)/14; if(coords[3]==0) { @@ -137,7 +137,7 @@ public class RenderRift extends TileEntitySpecialRenderer break; } double[] coords = quads.get(i); - double width=Math.log(Math.pow(quads.size(),2-i/2)+1)/14; + double width=Math.log(Math.pow(quads.size(),2-Math.log(i+1))+1)/14; if(coords[3]==0) { -- 2.39.5