Jump to content

How to make a dimension teleporter in 1.8?! NEED HELP.


MacDue

Recommended Posts

I have been trying to find out how to make a dimension teleport in 1.8 (and a dimension) but there seems to be no information on the topic. I think I have been able to make other parts of the dimension by looking at the minecraft source code and how it's changed, but I can't find out how I would teleport the player to my dimension. All older code I have tried is too outdated and I do not know in what ways it's changed so cannot fix it. Please could someone give some information.  :-\

Link to comment
Share on other sites

I never ran the code, the only examples of a teleport are for minecraft 1.7 and there are lots of errors in them.

 

This code is my teleport code from the last version of my mod for minecraft 1.4.7. I do not know how much needs to be changed but there is about as many errors in this as any 1.7 example.

 

package epicarno.mystical.common.block;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import epicarno.mystical.common.mystical_epicarno_mod;

import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.util.Direction;
import net.minecraft.util.LongHashMap;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.PortalPosition;
import net.minecraft.world.Teleporter;
import net.minecraft.world.WorldServer;

public class TportE extends Teleporter
{
private final WorldServer field_85192_a;
private final Random random;
private final LongHashMap field_85191_c = new LongHashMap();
private final List field_85190_d = new ArrayList();

  public TportE(WorldServer par1WorldServer)
{
  super(par1WorldServer);
  this.field_85192_a = par1WorldServer;
  this.random = new Random(par1WorldServer.getSeed());
}

  @Override
public void placeInPortal(Entity par1Entity, double par2, double par4, double par6, float par8)
{
  if (this.field_85192_a.provider.dimensionId != 1)
  {
   if (!this.placeInExistingPortal(par1Entity, par2, par4, par6, par8))
   {
    this.func_85188_a(par1Entity);
    this.placeInExistingPortal(par1Entity, par2, par4, par6, par8);
   }
  }
  else
  {
   int var9 = MathHelper.floor_double(par1Entity.posX);
   int var10 = MathHelper.floor_double(par1Entity.posY) - 1;
   int var11 = MathHelper.floor_double(par1Entity.posZ);
   byte var12 = 1;
   byte var13 = 0;

    for (int var14 = -2; var14 <= 2; ++var14)
   {
    for (int var15 = -2; var15 <= 2; ++var15)
    {
     for (int var16 = -1; var16 < 3; ++var16)
     {
      int var17 = var9 + var15 * var12 + var14 * var13;
      int var18 = var10 + var16;
      int var19 = var11 + var15 * var13 - var14 * var12;
      boolean var20 = var16 < 0;
      this.field_85192_a.setBlockWithNotify(var17, var18, var19, var20 ? mystical_epicarno_mod.Epicarno.blockID : 0);
     }
    }
   }

    par1Entity.setLocationAndAngles((double) var9, (double) var10, (double) var11, par1Entity.rotationYaw, 0.0F);
   par1Entity.motionX = par1Entity.motionY = par1Entity.motionZ = 0.0D;
  }
}

  @Override
public boolean placeInExistingPortal(Entity par1Entity, double par2, double par4, double par6, float par8)
{
  short var9 = 128;
  double var10 = -1.0D;
  int var12 = 0;
  int var13 = 0;
  int var14 = 0;
  int var15 = MathHelper.floor_double(par1Entity.posX);
  int var16 = MathHelper.floor_double(par1Entity.posZ);
  long var17 = ChunkCoordIntPair.chunkXZ2Int(var15, var16);
  boolean var19 = true;
  double var27;
  int var48;

   if (this.field_85191_c.containsItem(var17))
  {
   PortalPosition var20 = (PortalPosition) this.field_85191_c.getValueByKey(var17);
   var10 = 0.0D;
   var12 = var20.posX;
   var13 = var20.posY;
   var14 = var20.posZ;
   var20.field_85087_d = this.field_85192_a.getTotalWorldTime();
   var19 = false;
  }
  else
  {
   for (var48 = var15 - var9; var48 <= var15 + var9; ++var48)
   {
    double var21 = (double) var48 + 0.5D - par1Entity.posX;

     for (int var23 = var16 - var9; var23 <= var16 + var9; ++var23)
    {
     double var24 = (double) var23 + 0.5D - par1Entity.posZ;

      for (int var26 = this.field_85192_a.getActualHeight() - 1; var26 >= 0; --var26)
     {
      if (this.field_85192_a.getBlockId(var48, var26, var23) == mystical_epicarno_mod.portal.blockID)
      {
       while (this.field_85192_a.getBlockId(var48, var26 - 1, var23) == mystical_epicarno_mod.portal.blockID)
       {
        --var26;
       }

        var27 = (double) var26 + 0.5D - par1Entity.posY;
       double var29 = var21 * var21 + var27 * var27 + var24 * var24;

        if (var10 < 0.0D || var29 < var10)
       {
        var10 = var29;
        var12 = var48;
        var13 = var26;
        var14 = var23;
       }
      }
     }
    }
   }
  }

   if (var10 >= 0.0D)
  {
   if (var19)
   {
    this.field_85191_c.add(var17, new PortalPosition(this, var12, var13, var14, this.field_85192_a.getTotalWorldTime()));
    this.field_85190_d.add(Long.valueOf(var17));
   }

    double var49 = (double) var12 + 0.5D;
   double var25 = (double) var13 + 0.5D;
   var27 = (double) var14 + 0.5D;
   int var50 = -1;

    if (this.field_85192_a.getBlockId(var12 - 1, var13, var14) == mystical_epicarno_mod.portal.blockID)
   {
    var50 = 2;
   }

    if (this.field_85192_a.getBlockId(var12 + 1, var13, var14) == mystical_epicarno_mod.portal.blockID)
   {
    var50 = 0;
   }

    if (this.field_85192_a.getBlockId(var12, var13, var14 - 1) == mystical_epicarno_mod.portal.blockID)
   {
    var50 = 3;
   }

    if (this.field_85192_a.getBlockId(var12, var13, var14 + 1) == mystical_epicarno_mod.portal.blockID)
   {
    var50 = 1;
   }

    int var30 = par1Entity.func_82148_at();

    if (var50 > -1)
   {
    int var31 = Direction.field_71578_g[var50];
    int var32 = Direction.offsetX[var50];
    int var33 = Direction.offsetZ[var50];
    int var34 = Direction.offsetX[var31];
    int var35 = Direction.offsetZ[var31];
    boolean var36 = !this.field_85192_a.isAirBlock(var12 + var32 + var34, var13, var14 + var33 + var35) || !this.field_85192_a.isAirBlock(var12 + var32 + var34, var13 + 1, var14 + var33 + var35);
    boolean var37 = !this.field_85192_a.isAirBlock(var12 + var32, var13, var14 + var33) || !this.field_85192_a.isAirBlock(var12 + var32, var13 + 1, var14 + var33);

     if (var36 && var37)
    {
     var50 = Direction.footInvisibleFaceRemap[var50];
     var31 = Direction.footInvisibleFaceRemap[var31];
     var32 = Direction.offsetX[var50];
     var33 = Direction.offsetZ[var50];
     var34 = Direction.offsetX[var31];
     var35 = Direction.offsetZ[var31];
     var48 = var12 - var34;
     var49 -= (double) var34;
     int var22 = var14 - var35;
     var27 -= (double) var35;
     var36 = !this.field_85192_a.isAirBlock(var48 + var32 + var34, var13, var22 + var33 + var35) || !this.field_85192_a.isAirBlock(var48 + var32 + var34, var13 + 1, var22 + var33 + var35);
     var37 = !this.field_85192_a.isAirBlock(var48 + var32, var13, var22 + var33) || !this.field_85192_a.isAirBlock(var48 + var32, var13 + 1, var22 + var33);
    }

     float var38 = 0.5F;
    float var39 = 0.5F;

     if (!var36 && var37)
    {
     var38 = 1.0F;
    }
    else if (var36 && !var37)
    {
     var38 = 0.0F;
    }
    else if (var36 && var37)
    {
     var39 = 0.0F;
    }

     var49 += (double) ((float) var34 * var38 + var39 * (float) var32);
    var27 += (double) ((float) var35 * var38 + var39 * (float) var33);
    float var40 = 0.0F;
    float var41 = 0.0F;
    float var42 = 0.0F;
    float var43 = 0.0F;

     if (var50 == var30)
    {
     var40 = 1.0F;
     var41 = 1.0F;
    }
    else if (var50 == Direction.footInvisibleFaceRemap[var30])
    {
     var40 = -1.0F;
     var41 = -1.0F;
    }
    else if (var50 == Direction.enderEyeMetaToDirection[var30])
    {
     var42 = 1.0F;
     var43 = -1.0F;
    }
    else
    {
     var42 = -1.0F;
     var43 = 1.0F;
    }

     double var44 = par1Entity.motionX;
    double var46 = par1Entity.motionZ;
    par1Entity.motionX = var44 * (double) var40 + var46 * (double) var43;
    par1Entity.motionZ = var44 * (double) var42 + var46 * (double) var41;
    par1Entity.rotationYaw = par8 - (float) (var30 * 90) + (float) (var50 * 90);
   }
   else
   {
    par1Entity.motionX = par1Entity.motionY = par1Entity.motionZ = 0.0D;
   }

    par1Entity.setLocationAndAngles(var49 + 3, var25, var27 + 3, par1Entity.rotationYaw, par1Entity.rotationPitch);
   return true;
  }
  else
  {
   return false;
  }
}

  @Override
public boolean func_85188_a(Entity par1Entity)
{
  byte var2 = 16;
  double var3 = -1.0D;
  int var5 = MathHelper.floor_double(par1Entity.posX);
  int var6 = MathHelper.floor_double(par1Entity.posY);
  int var7 = MathHelper.floor_double(par1Entity.posZ);
  int var8 = var5;
  int var9 = var6;
  int var10 = var7;
  int var11 = 0;
  int var12 = this.random.nextInt(4);
  int var13;
  double var14;
  double var17;
  int var16;
  int var19;
  int var21;
  int var20;
  int var23;
  int var22;
  int var25;
  int var24;
  int var27;
  int var26;
  double var31;
  double var32;

   for (var13 = var5 - var2; var13 <= var5 + var2; ++var13)
  {
   var14 = (double) var13 + 0.5D - par1Entity.posX;

    for (var16 = var7 - var2; var16 <= var7 + var2; ++var16)
   {
    var17 = (double) var16 + 0.5D - par1Entity.posZ;
    label274:

     for (var19 = this.field_85192_a.getActualHeight() - 1; var19 >= 0; --var19)
    {
     if (this.field_85192_a.isAirBlock(var13, var19, var16))
     {
      while (var19 > 0 && this.field_85192_a.isAirBlock(var13, var19 - 1, var16))
      {
       --var19;
      }

       for (var20 = var12; var20 < var12 + 4; ++var20)
      {
       var21 = var20 % 2;
       var22 = 1 - var21;

        if (var20 % 4 >= 2)
       {
        var21 = -var21;
        var22 = -var22;
       }

        for (var23 = 0; var23 < 3; ++var23)
       {
        for (var24 = 0; var24 < 4; ++var24)
        {
         for (var25 = -1; var25 < 4; ++var25)
         {
          var26 = var13 + (var24 - 1) * var21 + var23 * var22;
          var27 = var19 + var25;
          int var28 = var16 + (var24 - 1) * var22 - var23 * var21;

           if (var25 < 0 && !this.field_85192_a.getBlockMaterial(var26, var27, var28).isSolid() || var25 >= 0 && !this.field_85192_a.isAirBlock(var26, var27, var28))
          {
           continue label274;
          }
         }
        }
       }

        var32 = (double) var19 + 0.5D - par1Entity.posY;
       var31 = var14 * var14 + var32 * var32 + var17 * var17;

        if (var3 < 0.0D || var31 < var3)
       {
        var3 = var31;
        var8 = var13;
        var9 = var19;
        var10 = var16;
        var11 = var20 % 4;
       }
      }
     }
    }
   }
  }

   if (var3 < 0.0D)
  {
   for (var13 = var5 - var2; var13 <= var5 + var2; ++var13)
   {
    var14 = (double) var13 + 0.5D - par1Entity.posX;

     for (var16 = var7 - var2; var16 <= var7 + var2; ++var16)
    {
     var17 = (double) var16 + 0.5D - par1Entity.posZ;
     label222:

      for (var19 = this.field_85192_a.getActualHeight() - 1; var19 >= 0; --var19)
     {
      if (this.field_85192_a.isAirBlock(var13, var19, var16))
      {
       while (var19 > 0 && this.field_85192_a.isAirBlock(var13, var19 - 1, var16))
       {
        --var19;
       }

        for (var20 = var12; var20 < var12 + 2; ++var20)
       {
        var21 = var20 % 2;
        var22 = 1 - var21;

         for (var23 = 0; var23 < 4; ++var23)
        {
         for (var24 = -1; var24 < 4; ++var24)
         {
          var25 = var13 + (var23 - 1) * var21;
          var26 = var19 + var24;
          var27 = var16 + (var23 - 1) * var22;

           if (var24 < 0 && !this.field_85192_a.getBlockMaterial(var25, var26, var27).isSolid() || var24 >= 0 && !this.field_85192_a.isAirBlock(var25, var26, var27))
          {
           continue label222;
          }
         }
        }

         var32 = (double) var19 + 0.5D - par1Entity.posY;
        var31 = var14 * var14 + var32 * var32 + var17 * var17;

         if (var3 < 0.0D || var31 < var3)
        {
         var3 = var31;
         var8 = var13;
         var9 = var19;
         var10 = var16;
         var11 = var20 % 2;
        }
       }
      }
     }
    }
   }
  }

   int var29 = var8;
  int var15 = var9;
  var16 = var10;
  int var30 = var11 % 2;
  int var18 = 1 - var30;

   if (var11 % 4 >= 2)
  {
   var30 = -var30;
   var18 = -var18;
  }

   boolean var33;

   if (var3 < 0.0D)
  {
   if (var9 < 70)
   {
    var9 = 70;
   }

    if (var9 > this.field_85192_a.getActualHeight() - 10)
   {
    var9 = this.field_85192_a.getActualHeight() - 10;
   }

    var15 = var9;

    for (var19 = -1; var19 <= 1; ++var19)
   {
    for (var20 = 1; var20 < 3; ++var20)
    {
     for (var21 = -1; var21 < 3; ++var21)
     {
      var22 = var29 + (var20 - 1) * var30 + var19 * var18;
      var23 = var15 + var21;
      var24 = var16 + (var20 - 1) * var18 - var19 * var30;
      var33 = var21 < 0;
      this.field_85192_a.setBlockWithNotify(var22, var23, var24, var33 ? mystical_epicarno_mod.Epicarno.blockID : 0);
     }
    }
   }
  }

   for (var19 = 0; var19 < 4; ++var19)
  {
   this.field_85192_a.editingBlocks = true;

    for (var20 = 0; var20 < 4; ++var20)
   {
    for (var21 = -1; var21 < 4; ++var21)
    {
     var22 = var29 + (var20 - 1) * var30;
     var23 = var15 + var21;
     var24 = var16 + (var20 - 1) * var18;
     var33 = var20 == 0 || var20 == 3 || var21 == -1 || var21 == 3;
     this.field_85192_a.setBlockWithNotify(var22, var23, var24, var33 ? mystical_epicarno_mod.Epicarno.blockID : mystical_epicarno_mod.portal.blockID);
    }
   }

    this.field_85192_a.editingBlocks = false;

    for (var20 = 0; var20 < 4; ++var20)
   {
    for (var21 = -1; var21 < 4; ++var21)
    {
     var22 = var29 + (var20 - 1) * var30;
     var23 = var15 + var21;
     var24 = var16 + (var20 - 1) * var18;
     this.field_85192_a.notifyBlocksOfNeighborChange(var22, var23, var24, this.field_85192_a.getBlockId(var22, var23, var24));
    }
   }
  }

   return true;
}

  @Override
public void func_85189_a(long par1)
{
  if (par1 % 100L == 0L)
  {
   Iterator var3 = this.field_85190_d.iterator();
   long var4 = par1 - 600L;

    while (var3.hasNext())
   {
    Long var6 = (Long) var3.next();
    PortalPosition var7 = (PortalPosition) this.field_85191_c.getValueByKey(var6.longValue());

     if (var7 == null || var7.field_85087_d < var4)
    {
     var3.remove();
     this.field_85191_c.remove(var6.longValue());
    }
   }
  }
}

}

 

Also here is a 1.7 example from a random tutorial

package dimension;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.util.Direction;
import net.minecraft.util.LongHashMap;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.PortalPosition;
import net.minecraft.world.Teleporter;
import net.minecraft.world.WorldServer;
public class TutorialTeleporter extends Teleporter
{
private final WorldServer worldServerInstance;
/** A private Random() function in Teleporter */
private final Random random;
/** Stores successful portal placement locations for rapid lookup. */
private final LongHashMap destinationCoordinateCache = new LongHashMap();
/**
* A list of valid keys for the destinationCoordainteCache. These are based on the X & Z of the players initial
* location.
*/
private final List destinationCoordinateKeys = new ArrayList();
public TutorialTeleporter(WorldServer par1WorldServer)
{
super(par1WorldServer);
this.worldServerInstance = par1WorldServer;
this.random = new Random(par1WorldServer.getSeed());
}
/**
* Place an entity in a nearby portal, creating one if necessary.
*/
public void placeInPortal(Entity par1Entity, double par2, double par4, double par6, float par8)
{
if (this.worldServerInstance.provider.dimensionId != 1)
{
if (!this.placeInExistingPortal(par1Entity, par2, par4, par6, par8))
{
this.makePortal(par1Entity);
this.placeInExistingPortal(par1Entity, par2, par4, par6, par8);
}
}
else
{
int i = MathHelper.floor_double(par1Entity.posX);
int j = MathHelper.floor_double(par1Entity.posY) - 1;
int k = MathHelper.floor_double(par1Entity.posZ);
byte b0 = 1;
byte b1 = 0;
for (int l = -2; l <= 2; ++l)
{
for (int i1 = -2; i1 <= 2; ++i1)
{
for (int j1 = -1; j1 < 3; ++j1)
{
int k1 = i + i1 * b0 + l * b1;
int l1 = j + j1;
int i2 = k + i1 * b1 - l * b0;
boolean flag = j1 < 0;

/** change this block **/
this.worldServerInstance.setBlock(k1, l1, i2, flag ? Block.blockDiamond.blockID : 0);
}
}
}
par1Entity.setLocationAndAngles((double)i, (double)j, (double)k, par1Entity.rotationYaw, 0.0F);
par1Entity.motionX = par1Entity.motionY = par1Entity.motionZ = 0.0D;
}
}
/**
* Place an entity in a nearby portal which already exists.
*/
public boolean placeInExistingPortal(Entity par1Entity, double par2, double par4, double par6, float par8)
{
short short1 = 128;
double d3 = -1.0D;
int i = 0;
int j = 0;
int k = 0;
int l = MathHelper.floor_double(par1Entity.posX);
int i1 = MathHelper.floor_double(par1Entity.posZ);
long j1 = ChunkCoordIntPair.chunkXZ2Int(l, i1);
boolean flag = true;
double d4;
int k1;
if (this.destinationCoordinateCache.containsItem(j1))
{
PortalPosition portalposition = (PortalPosition)this.destinationCoordinateCache.getValueByKey(j1);
d3 = 0.0D;
i = portalposition.posX;
j = portalposition.posY;
k = portalposition.posZ;
portalposition.lastUpdateTime = this.worldServerInstance.getTotalWorldTime();
flag = false;
}
else
{
for (k1 = l - short1; k1 <= l + short1; ++k1)
{
double d5 = (double)k1 + 0.5D - par1Entity.posX;
for (int l1 = i1 - short1; l1 <= i1 + short1; ++l1)
{
double d6 = (double)l1 + 0.5D - par1Entity.posZ;
for (int i2 = this.worldServerInstance.getActualHeight() - 1; i2 >= 0; --i2)
{
/** change this block **/
if (this.worldServerInstance.getBlockId(k1, i2, l1) == Main.TutorialPortal.blockID)
{
/** change this block **/
while (this.worldServerInstance.getBlockId(k1, i2 - 1, l1) == Main.TutorialPortal.blockID)
{
--i2;
}
d4 = (double)i2 + 0.5D - par1Entity.posY;
double d7 = d5 * d5 + d4 * d4 + d6 * d6;
if (d3 < 0.0D || d7 < d3)
{
d3 = d7;
i = k1;
j = i2;
k = l1;
}
}
}
}
}
}
if (d3 >= 0.0D)
{
if (flag)
{
this.destinationCoordinateCache.add(j1, new TutorialPortalPosition(this, i, j, k, this.worldServerInstance.getTotalWorldTime()));
this.destinationCoordinateKeys.add(Long.valueOf(j1));
}
double d8 = (double)i + 0.5D;
double d9 = (double)j + 0.5D;
d4 = (double)k + 0.5D;
int j2 = -1;
/** change this block **/
if (this.worldServerInstance.getBlockId(i - 1, j, k) == Main.TutorialPortal.blockID)
{
j2 = 2;
}
/** change this block **/
if (this.worldServerInstance.getBlockId(i + 1, j, k) == Main.TutorialPortal.blockID)
{
j2 = 0;
}
/** change this block **/
if (this.worldServerInstance.getBlockId(i, j, k - 1) == Main.TutorialPortal.blockID)
{
j2 = 3;
}
/** change this block **/
if (this.worldServerInstance.getBlockId(i, j, k + 1) == Main.TutorialPortal.blockID)
{
j2 = 1;
}
int k2 = par1Entity.getTeleportDirection();
if (j2 > -1)
{
int l2 = Direction.rotateLeft[j2];
int i3 = Direction.offsetX[j2];
int j3 = Direction.offsetZ[j2];
int k3 = Direction.offsetX[l2];
int l3 = Direction.offsetZ[l2];
boolean flag1 = !this.worldServerInstance.isAirBlock(i + i3 + k3, j, k + j3 + l3) || !this.worldServerInstance.isAirBlock(i + i3 + k3, j + 1, k + j3 + l3);
boolean flag2 = !this.worldServerInstance.isAirBlock(i + i3, j, k + j3) || !this.worldServerInstance.isAirBlock(i + i3, j + 1, k + j3);
if (flag1 && flag2)
{
j2 = Direction.rotateOpposite[j2];
l2 = Direction.rotateOpposite[l2];
i3 = Direction.offsetX[j2];
j3 = Direction.offsetZ[j2];
k3 = Direction.offsetX[l2];
l3 = Direction.offsetZ[l2];
k1 = i - k3;
d8 -= (double)k3;
int i4 = k - l3;
d4 -= (double)l3;
flag1 = !this.worldServerInstance.isAirBlock(k1 + i3 + k3, j, i4 + j3 + l3) || !this.worldServerInstance.isAirBlock(k1 + i3 + k3, j + 1, i4 + j3 + l3);
flag2 = !this.worldServerInstance.isAirBlock(k1 + i3, j, i4 + j3) || !this.worldServerInstance.isAirBlock(k1 + i3, j + 1, i4 + j3);
}
float f1 = 0.5F;
float f2 = 0.5F;
if (!flag1 && flag2)
{
f1 = 1.0F;
}
else if (flag1 && !flag2)
{
f1 = 0.0F;
}
else if (flag1 && flag2)
{
f2 = 0.0F;
}
d8 += (double)((float)k3 * f1 + f2 * (float)i3);
d4 += (double)((float)l3 * f1 + f2 * (float)j3);
float f3 = 0.0F;
float f4 = 0.0F;
float f5 = 0.0F;
float f6 = 0.0F;
if (j2 == k2)
{
f3 = 1.0F;
f4 = 1.0F;
}
else if (j2 == Direction.rotateOpposite[k2])
{
f3 = -1.0F;
f4 = -1.0F;
}
else if (j2 == Direction.rotateRight[k2])
{
f5 = 1.0F;
f6 = -1.0F;
}
else
{
f5 = -1.0F;
f6 = 1.0F;
}
double d10 = par1Entity.motionX;
double d11 = par1Entity.motionZ;
par1Entity.motionX = d10 * (double)f3 + d11 * (double)f6;
par1Entity.motionZ = d10 * (double)f5 + d11 * (double)f4;
par1Entity.rotationYaw = par8 - (float)(k2 * 90) + (float)(j2 * 90);
}
else
{
par1Entity.motionX = par1Entity.motionY = par1Entity.motionZ = 0.0D;
}
par1Entity.setLocationAndAngles(d8, d9, d4, par1Entity.rotationYaw, par1Entity.rotationPitch);
return true;
}
else
{
return false;
}
}
public boolean makePortal(Entity par1Entity)
{
byte b0 = 16;
double d0 = -1.0D;
int i = MathHelper.floor_double(par1Entity.posX);
int j = MathHelper.floor_double(par1Entity.posY);
int k = MathHelper.floor_double(par1Entity.posZ);
int l = i;
int i1 = j;
int j1 = k;
int k1 = 0;
int l1 = this.random.nextInt(4);
int i2;
double d1;
double d2;
int j2;
int k2;
int l2;
int i3;
int j3;
int k3;
int l3;
int i4;
int j4;
int k4;
double d3;
double d4;
for (i2 = i - b0; i2 <= i + b0; ++i2)
{
d1 = (double)i2 + 0.5D - par1Entity.posX;
for (j2 = k - b0; j2 <= k + b0; ++j2)
{
d2 = (double)j2 + 0.5D - par1Entity.posZ;
label274:
for (k2 = this.worldServerInstance.getActualHeight() - 1; k2 >= 0; --k2)
{
if (this.worldServerInstance.isAirBlock(i2, k2, j2))
{
while (k2 > 0 && this.worldServerInstance.isAirBlock(i2, k2 - 1, j2))
{
--k2;
}
for (i3 = l1; i3 < l1 + 4; ++i3)
{
l2 = i3 % 2;
k3 = 1 - l2;
if (i3 % 4 >= 2)
{
l2 = -l2;
k3 = -k3;
}
for (j3 = 0; j3 < 3; ++j3)
{
for (i4 = 0; i4 < 4; ++i4)
{
for (l3 = -1; l3 < 4; ++l3)
{
k4 = i2 + (i4 - 1) * l2 + j3 * k3;
j4 = k2 + l3;
int l4 = j2 + (i4 - 1) * k3 - j3 * l2;
if (l3 < 0 && !this.worldServerInstance.getBlockMaterial(k4, j4, l4).isSolid() || l3 >= 0 && !this.worldServerInstance.isAirBlock(k4, j4, l4))
{
continue label274;
}
}
}
}
d4 = (double)k2 + 0.5D - par1Entity.posY;
d3 = d1 * d1 + d4 * d4 + d2 * d2;
if (d0 < 0.0D || d3 < d0)
{
d0 = d3;
l = i2;
i1 = k2;
j1 = j2;
k1 = i3 % 4;
}
}
}
}
}
}
if (d0 < 0.0D)
{
for (i2 = i - b0; i2 <= i + b0; ++i2)
{
d1 = (double)i2 + 0.5D - par1Entity.posX;
for (j2 = k - b0; j2 <= k + b0; ++j2)
{
d2 = (double)j2 + 0.5D - par1Entity.posZ;
label222:
for (k2 = this.worldServerInstance.getActualHeight() - 1; k2 >= 0; --k2)
{
if (this.worldServerInstance.isAirBlock(i2, k2, j2))
{
while (k2 > 0 && this.worldServerInstance.isAirBlock(i2, k2 - 1, j2))
{
--k2;
}
for (i3 = l1; i3 < l1 + 2; ++i3)
{
l2 = i3 % 2;
k3 = 1 - l2;
for (j3 = 0; j3 < 4; ++j3)
{
for (i4 = -1; i4 < 4; ++i4)
{
l3 = i2 + (j3 - 1) * l2;
k4 = k2 + i4;
j4 = j2 + (j3 - 1) * k3;
if (i4 < 0 && !this.worldServerInstance.getBlockMaterial(l3, k4, j4).isSolid() || i4 >= 0 && !this.worldServerInstance.isAirBlock(l3, k4, j4))
{
continue label222;
}
}
}
d4 = (double)k2 + 0.5D - par1Entity.posY;
d3 = d1 * d1 + d4 * d4 + d2 * d2;
if (d0 < 0.0D || d3 < d0)
{
d0 = d3;
l = i2;
i1 = k2;
j1 = j2;
k1 = i3 % 2;
}
}
}
}
}
}
}
int i5 = l;
int j5 = i1;
j2 = j1;
int k5 = k1 % 2;
int l5 = 1 - k5;
if (k1 % 4 >= 2)
{
k5 = -k5;
l5 = -l5;
}
boolean flag;
if (d0 < 0.0D)
{
if (i1 < 70)
{
i1 = 70;
}
if (i1 > this.worldServerInstance.getActualHeight() - 10)
{
i1 = this.worldServerInstance.getActualHeight() - 10;
}
j5 = i1;
for (k2 = -1; k2 <= 1; ++k2)
{
for (i3 = 1; i3 < 3; ++i3)
{
for (l2 = -1; l2 < 3; ++l2)
{
k3 = i5 + (i3 - 1) * k5 + k2 * l5;
j3 = j5 + l2;
i4 = j2 + (i3 - 1) * l5 - k2 * k5;
flag = l2 < 0;

/** change this block **/
this.worldServerInstance.setBlock(k3, j3, i4, flag ? Block.blockDiamond.blockID : 0);
}
}
}
}
for (k2 = 0; k2 < 4; ++k2)
{
for (i3 = 0; i3 < 4; ++i3)
{
for (l2 = -1; l2 < 4; ++l2)
{
k3 = i5 + (i3 - 1) * k5;
j3 = j5 + l2;
i4 = j2 + (i3 - 1) * l5;
flag = i3 == 0 || i3 == 3 || l2 == -1 || l2 == 3;

/** change these blocks **/
this.worldServerInstance.setBlock(k3, j3, i4, flag ? Block.blockDiamond.blockID : Main.TutorialPortal.blockID, 0, 2);
}
}
for (i3 = 0; i3 < 4; ++i3)
{
for (l2 = -1; l2 < 4; ++l2)
{
k3 = i5 + (i3 - 1) * k5;
j3 = j5 + l2;
i4 = j2 + (i3 - 1) * l5;
this.worldServerInstance.notifyBlocksOfNeighborChange(k3, j3, i4, this.worldServerInstance.getBlockId(k3, j3, i4));
}
}
}
return true;
}
/**
* called periodically to remove out-of-date portal locations from the cache list. Argument par1 is a
* WorldServer.getTotalWorldTime() value.
*/
public void removeStalePortalLocations(long par1)
{
if (par1 % 100L == 0L)
{
Iterator iterator = this.destinationCoordinateKeys.iterator();
long j = par1 - 600L;
while (iterator.hasNext())
{
Long olong = (Long)iterator.next();
PortalPosition portalposition = (PortalPosition)this.destinationCoordinateCache.getValueByKey(olong.longValue());
if (portalposition == null || portalposition.lastUpdateTime < j)
{
iterator.remove();
this.destinationCoordinateCache.remove(olong.longValue());
}
}
}
}
}

 

 

These are the problems from the 1.7.2 example, but I don't know what to change them to (there is a lot more but they all seem to be the same).

 

 

this.worldServerInstance.setBlock(k1, l1, i2, flag ? Block.blockDiamond.blockID : 0);

(I know BlockID is gone)

 

i = portalposition.posX;

 

(this.worldServerInstance.getBlockId(i - 1, j, k) == Main.TutorialPortal.blockID)

 

Direction.offsetX[j2];

 

this.worldServerInstance.isAirBlock(i2, k2 - 1, j2)

 

!this.worldServerInstance.getBlockMaterial(l3, k4, j4).isSolid()

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.