diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BaseDimDoor.java b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BaseDimDoor.java index ed0abd7..0395fb6 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BaseDimDoor.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/BaseDimDoor.java @@ -424,9 +424,10 @@ public abstract class BaseDimDoor extends BlockDoor implements IDimDoor, ITileEn } @Override - public void initDoorTE(World world, int x, int y, int z) + public TileEntity initDoorTE(World world, int x, int y, int z) { TileEntity te = this.createNewTileEntity(world); world.setBlockTileEntity(x, y, z, te); + return te; } } \ No newline at end of file diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/IDimDoor.java b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/IDimDoor.java index e593915..b3884dc 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/IDimDoor.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/IDimDoor.java @@ -1,6 +1,7 @@ package StevenDimDoors.mod_pocketDim.blocks; import net.minecraft.entity.Entity; +import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public interface IDimDoor @@ -11,5 +12,5 @@ public interface IDimDoor public int getDrops(); - public void initDoorTE(World world, int x, int y, int z); + public TileEntity initDoorTE(World world, int x, int y, int z); } diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/TransTrapdoor.java b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/TransTrapdoor.java index 6eac539..d1b7fd4 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/blocks/TransTrapdoor.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/blocks/TransTrapdoor.java @@ -120,9 +120,10 @@ public class TransTrapdoor extends BlockTrapDoor implements IDimDoor, ITileEntit } @Override - public void initDoorTE(World world, int x, int y, int z) + public TileEntity initDoorTE(World world, int x, int y, int z) { TileEntity te = this.createNewTileEntity(world); world.setBlockTileEntity(x, y, z, te); + return te; } } \ No newline at end of file diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java b/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java index 73ccf96..012c537 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/core/DDTeleporter.java @@ -25,6 +25,7 @@ import net.minecraftforge.common.network.packet.DimensionRegisterPacket; import StevenDimDoors.mod_pocketDim.DDProperties; import StevenDimDoors.mod_pocketDim.Point3D; import StevenDimDoors.mod_pocketDim.mod_pocketDim; +import StevenDimDoors.mod_pocketDim.blocks.BaseDimDoor; import StevenDimDoors.mod_pocketDim.helpers.yCoordHelper; import StevenDimDoors.mod_pocketDim.items.BaseItemDoor; import StevenDimDoors.mod_pocketDim.items.ItemDimensionalDoor; @@ -598,9 +599,11 @@ public class DDTeleporter return; } } - + BaseItemDoor.placeDoorBlock(destWorld, link.destination().getX(), link.destination().getY()-1, link.destination().getZ(),link.getDestinationOrientation(), door); - TileEntity doorDestTE = startWorld.getBlockTileEntity(link.destination().getX(), link.destination().getY(), link.destination().getZ()); + + TileEntity doorDestTE = ((BaseDimDoor)door).initDoorTE(destWorld, link.destination().getX(), link.destination().getY(), link.destination().getZ()); + if(doorDestTE instanceof TileEntityDimDoor) { diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/core/DimLink.java b/src/main/java/StevenDimDoors/mod_pocketDim/core/DimLink.java index 7b0d18a..8ee3d9a 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/core/DimLink.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/core/DimLink.java @@ -62,7 +62,12 @@ public abstract class DimLink } public int getDestinationOrientation() { - return PocketManager.getLink(link.point.getX(), link.point.getY(), link.point.getZ(), link.point.getDimension()).link().orientation; + DimLink link = PocketManager.getLink(this.destination().getX(), this.destination().getY(), this.destination().getZ(), this.destination().getDimension()); + if(link !=null) + { + return link.orientation(); + } + return (this.orientation()+2)%4; } public boolean hasDestination() { diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java index ee6a62f..9066fd2 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/items/ItemRiftSignature.java @@ -48,7 +48,6 @@ public class ItemRiftSignature extends Item @Override public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { - //TODO- recognize doors and intelligently place rifts on them. // We must use onItemUseFirst() instead of onItemUse() because Minecraft checks // whether the user is in creative mode after calling onItemUse() and undoes any // damage we might set to indicate the rift sig has been activated. Otherwise, diff --git a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java index 3c7900c..7aa470e 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java +++ b/src/main/java/StevenDimDoors/mod_pocketDim/ticking/MobMonolith.java @@ -27,41 +27,37 @@ import StevenDimDoors.mod_pocketDim.world.PocketProvider; public class MobMonolith extends EntityFlying implements IMob { - - float soundTime = 0; public int aggro = 0; - byte textureState = 0; - float entityCollisionReduction = 100; - float scaleFactor = 0; - int aggroMax; - int destX = 0; // unused fields? - int destY = 0; - int destZ = 0; + private float soundTime = 0; + private byte textureState = 0; + private float scaleFactor = 0; + private int aggroMax; + + private static DDProperties properties = null; - @Override - protected void damageEntity(DamageSource par1DamageSource, float par2) - { - return; - } - - @Override - public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) - { - return false; - } public MobMonolith(World par1World) { super(par1World); this.setSize(3F, 9.0F); this.noClip=true; - this.scaleFactor= (float) ((rand.nextDouble()/2)+1); - this.aggroMax=rand.nextInt(245)+200; + this.scaleFactor = (float) ((rand.nextDouble()/2)+1); + this.aggroMax = rand.nextInt(245)+200; if (properties == null) properties = DDProperties.instance(); } - private static DDProperties properties = null; + @Override + protected void damageEntity(DamageSource par1DamageSource, float par2) + { + return; + } + + @Override + public boolean attackEntityFrom(DamageSource par1DamageSource, float par2) + { + return false; + } @Override public boolean canDespawn() @@ -101,39 +97,39 @@ public class MobMonolith extends EntityFlying implements IMob super.entityInit(); this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); } - - public boolean isClipping() - { - - int i = MathHelper.floor_double(this.boundingBox.minX); - int j = MathHelper.floor_double(this.boundingBox.maxX + 1.0D); - int k = MathHelper.floor_double(this.boundingBox.minY); - int l = MathHelper.floor_double(this.boundingBox.maxY + 1.0D); - int i1 = MathHelper.floor_double(this.boundingBox.minZ); - int j1 = MathHelper.floor_double(this.boundingBox.maxZ + 1.0D); - for (int k1 = i; k1 < j; ++k1) - { - for (int l1 = k; l1 < l; ++l1) - { - for (int i2 = i1; i2 < j1; ++i2) - { + public boolean isClipping() + { + + int i = MathHelper.floor_double(this.boundingBox.minX); + int j = MathHelper.floor_double(this.boundingBox.maxX + 1.0D); + int k = MathHelper.floor_double(this.boundingBox.minY); + int l = MathHelper.floor_double(this.boundingBox.maxY + 1.0D); + int i1 = MathHelper.floor_double(this.boundingBox.minZ); + int j1 = MathHelper.floor_double(this.boundingBox.maxZ + 1.0D); + + for (int k1 = i; k1 < j; ++k1) + { + for (int l1 = k; l1 < l; ++l1) + { + for (int i2 = i1; i2 < j1; ++i2) + { if(!this.worldObj.isAirBlock(k1, l1, i2)) { return true; } - } - } - } - + } + } + } - return false; - } - @Override - public boolean isEntityAlive() - { - return false; - } + + return false; + } + @Override + public boolean isEntityAlive() + { + return false; + } @Override public void onEntityUpdate() @@ -142,7 +138,7 @@ public class MobMonolith extends EntityFlying implements IMob { this.setDead(); } - + super.onEntityUpdate(); if(this.isClipping()) { @@ -245,13 +241,13 @@ public class MobMonolith extends EntityFlying implements IMob public boolean attackEntityFrom(DamageSource par1DamageSource, int par2) { - if(!(par1DamageSource == DamageSource.inWall)) + if (par1DamageSource == DamageSource.inWall) { - this.aggro=400; + this.posY = posY + 1; } else { - this.posY=posY+1; + this.aggro = this.aggroMax; } return false; } @@ -338,7 +334,7 @@ public class MobMonolith extends EntityFlying implements IMob this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); } - + public DataWatcher getDataWatcher() { return this.dataWatcher; diff --git a/src/main/java/StevenDimDoors/mod_pocketDimClient/RenderMobObelisk.java b/src/main/java/StevenDimDoors/mod_pocketDimClient/RenderMobObelisk.java index 64b1b59..557e397 100644 --- a/src/main/java/StevenDimDoors/mod_pocketDimClient/RenderMobObelisk.java +++ b/src/main/java/StevenDimDoors/mod_pocketDimClient/RenderMobObelisk.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL12; import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderLiving; @@ -29,81 +30,96 @@ public class RenderMobObelisk extends RenderLiving super(new ModelMobObelisk(), f); this.obeliskModel = (ModelMobObelisk)this.mainModel; } - + public void doRenderLiving(EntityLiving entity, double x, double y, double z, float par8, float par9) { - int noiseFactor = (int) (50-Math.log(MobMonolith.class.cast(entity).aggro)); - this.render(entity, x+entity.worldObj.rand.nextGaussian()/noiseFactor, y+entity.worldObj.rand.nextGaussian()/noiseFactor, z+entity.worldObj.rand.nextGaussian()/noiseFactor, par8, par9); + final float minScaling = 0; + final float maxScaling = 0.1f; + final int maxAggroLevel = 500; + MobMonolith monolith = ((MobMonolith) entity); + + // Use linear interpolation to scale how much jitter we want for our given aggro level + float aggroScaling = minScaling + monolith.aggro * (maxScaling - minScaling) / maxAggroLevel; + + // Calculate jitter - include entity ID to give Monoliths individual jitters + float time = ((Minecraft.getSystemTime() + 0xF1234568 * monolith.entityId) % 200000) / 50.0F; + // We use random constants here on purpose just to get different wave forms + double xJitter = aggroScaling * Math.sin(1.1f * time) * Math.sin(0.8f * time); + double yJitter = aggroScaling * Math.sin(1.2f * time) * Math.sin(0.9f * time); + double zJitter = aggroScaling * Math.sin(1.3f * time) * Math.sin(0.7f * time); + + // Render with jitter + this.render(entity, x + xJitter, y + yJitter, z + zJitter, par8, par9); this.func_110827_b(entity, x, y, z, par8, par9); } - + public void render(EntityLiving par1EntityLivingBase, double x, double y, double z, float par8, float par9) { - if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return; - GL11.glPushMatrix(); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9); + if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return; + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9); - try - { - float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9); - float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9); - float rotation; - float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9; - this.renderLivingAt(par1EntityLivingBase, x, y, z); + try + { + float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9); + float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9); + float rotation; + float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9; + this.renderLivingAt(par1EntityLivingBase, x, y, z); - rotation = this.handleRotationFloat(par1EntityLivingBase, par9); - this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9); - float f6 = 0.0625F; - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glScalef(-1.0F, -1.0F, 1.0F); - this.preRenderCallback(par1EntityLivingBase, par9); - GL11.glTranslatef(0.0F, -24.0F * f6 - 0.0078125F, 0.0F); + rotation = this.handleRotationFloat(par1EntityLivingBase, par9); + this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9); + float f6 = 0.0625F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.preRenderCallback(par1EntityLivingBase, par9); + GL11.glTranslatef(0.0F, -24.0F * f6 - 0.0078125F, 0.0F); - this.renderModel(par1EntityLivingBase, 0, 0, rotation, interpolatedYawHead - interpolatedYaw, pitch, f6); + this.renderModel(par1EntityLivingBase, 0, 0, rotation, interpolatedYawHead - interpolatedYaw, pitch, f6); - OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GL11.glDisable(GL11.GL_TEXTURE_2D); - OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); - - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - } - catch (Exception exception) - { - exception.printStackTrace(); - } + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); - OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); - GL11.glEnable(GL11.GL_TEXTURE_2D); - OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + catch (Exception exception) + { + exception.printStackTrace(); + } - GL11.glPopMatrix(); - MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this)); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + + GL11.glPopMatrix(); + MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this)); } - - private float interpolateRotation(float par1, float par2, float par3) - { - float f3; - for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F) - { - ; - } + private float interpolateRotation(float par1, float par2, float par3) + { + float f3; - while (f3 >= 180.0F) - { - f3 -= 360.0F; - } + for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F) + { + ; + } - return par1 + par3 * f3; - } + while (f3 >= 180.0F) + { + f3 -= 360.0F; + } + + return par1 + par3 * f3; + } @Override protected ResourceLocation getEntityTexture(Entity entity) {