Before I have been working with the dimension api, but in the next update for my mod I wanted to drop the api and use just forge.
I have taken out all the dimension api code and everything works except for the teleportation code. This is the code I have right now.
BlockGoblinPortal
[hide]
package GoblinsGiants.common;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import net.minecraft.server.MinecraftServer;
import net.minecraft.src.AxisAlignedBB;
import net.minecraft.src.BlockPortal;
import net.minecraft.src.CreativeTabs;
import net.minecraft.src.Entity;
import net.minecraft.src.EntityList;
import net.minecraft.src.EntityPlayerMP;
import net.minecraft.src.EntityPlayerSP;
import net.minecraft.src.IBlockAccess;
import net.minecraft.src.Material;
import net.minecraft.src.ModLoader;
import net.minecraft.src.Teleporter;
import net.minecraft.src.World;
import net.minecraft.src.WorldProvider;
import net.minecraft.src.WorldServer;
public class BlockGoblinPortal extends BlockPortal
{
public TeleporterGoblinsGiants teleporter = new TeleporterGoblinsGiants();
public BlockGoblinPortal(int i, int j)
{
super(i, j);
this.setCreativeTab(CreativeTabs.tabBlock);
}
public String getTextureFile()
{
return "/GoblinGiant/BlockGoblinGiant.png";
}
public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
{
float var5;
float var6;
if (par1IBlockAccess.getBlockId(par2 - 1, par3, par4) != this.blockID && par1IBlockAccess.getBlockId(par2 + 1, par3, par4) != this.blockID)
{
var5 = 0.125F;
var6 = 0.5F;
this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6);
}
else
{
var5 = 0.5F;
var6 = 0.125F;
this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6);
}
}
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
{
return null;
}
public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
{
if (!par5Entity.worldObj.isRemote && !par5Entity.isDead)
{
MinecraftServer var2 = MinecraftServer.getServer();
int var3 = par5Entity.dimension;
WorldServer var4 = var2.worldServerForDimension(var3);
WorldServer var5 = var2.worldServerForDimension(12);
par5Entity.dimension = 12;
par5Entity.worldObj.setEntityDead(par5Entity);
par5Entity.isDead = false;
var2.getConfigurationManager().func_82448_a(par5Entity, var3, var4, var5);
Entity var6 = EntityList.createEntityByName(EntityList.getEntityString(par5Entity), var5);
if (var6 != null)
{
var6.func_82141_a(par5Entity, true);
var5.spawnEntityInWorld(var6);
}
par5Entity.isDead = true;
var4.func_82742_i();
var5.func_82742_i();
}
/*if (par5Entity.ridingEntity == null && par5Entity.riddenByEntity == null)
{
if(ModLoader.getMinecraftInstance().thePlayer.timeUntilPortal == 0)
{
if(ModLoader.getMinecraftInstance().thePlayer.dimension != 12)
{
ModLoader.getMinecraftInstance().thePlayer.timeUntilPortal = 10;
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP)par5Entity, 12, new TeleporterGoblinsGiants());
}
else
{
ModLoader.getMinecraftInstance().thePlayer.timeUntilPortal = 10;
MinecraftServer.getServer().getConfigurationManager().transferPlayerToDimension((EntityPlayerMP)par5Entity, 1, new TeleporterGoblinsGiants());
}
}
else
{
ModLoader.getMinecraftInstance().thePlayer.timeUntilPortal = 10;
}
}*/
}
public WorldProvider getDimension()
{
return new WorldProviderGoblinsGiants();
}
public Teleporter getTeleporter()
{
return new TeleporterGoblinsGiants();
}
public List canTeleportFromDimension()
{
ArrayList list = new ArrayList();
list.add(0);
list.add(-1);
return list;
}
public boolean isOpaqueCube()
{
return false;
}
public boolean renderAsNormalBlock()
{
return false;
}
public boolean displayPortalOverlay()
{
return true;
}
public int getOverlayTexture()
{
return blockIndexInTexture;
}
public String getEnteringMessage()
{
return "Entering The Savannah.";
}
public String getLeavingMessage()
{
return "Leaving The Savannah.";
}
public int quantityDropped(Random par1Random)
{
return 1;
}
}
[/hide]
TeleporterGoblinsGiants
[hide]
package GoblinsGiants.common;
import java.util.Random;
import net.minecraft.src.Block;
import net.minecraft.src.Direction;
import net.minecraft.src.Entity;
import net.minecraft.src.MathHelper;
import net.minecraft.src.Teleporter;
import net.minecraft.src.World;
public class TeleporterGoblinsGiants extends Teleporter
{
/** A private Random() function in Teleporter */
private Random random = new Random();
/**
* Place an entity in a nearby portal, creating one if necessary.
*/
public void placeInPortal(World par1World, Entity par2Entity, double par3, double par5, double par7, float par9)
{
if (par1World.provider.dimensionId != 1)
{
if (!this.placeInExistingPortal(par1World, par2Entity, par3, par5, par7, par9))
{
this.createPortal(par1World, par2Entity);
this.placeInExistingPortal(par1World, par2Entity, par3, par5, par7, par9);
}
}
else
{
int var10 = MathHelper.floor_double(par2Entity.posX);
int var11 = MathHelper.floor_double(par2Entity.posY) - 1;
int var12 = MathHelper.floor_double(par2Entity.posZ);
byte var13 = 1;
byte var14 = 0;
for (int var15 = -2; var15 <= 2; ++var15)
{
for (int var16 = -2; var16 <= 2; ++var16)
{
for (int var17 = -1; var17 < 3; ++var17)
{
int var18 = var10 + var16 * var13 + var15 * var14;
int var19 = var11 + var17;
int var20 = var12 + var16 * var14 - var15 * var13;
boolean var21 = var17 < 0;
par1World.setBlockWithNotify(var18, var19, var20, var21 ? Block.obsidian.blockID : 0);
}
}
}
par2Entity.setLocationAndAngles((double)var10, (double)var11, (double)var12, par2Entity.rotationYaw, 0.0F);
par2Entity.motionX = par2Entity.motionY = par2Entity.motionZ = 0.0D;
}
}
/**
* Place an entity in a nearby portal which already exists.
*/
public boolean placeInExistingPortal(World par1World, Entity par2Entity, double par3, double par5, double par7, float par9)
{
short var10 = 128;
double var11 = -1.0D;
int var13 = 0;
int var14 = 0;
int var15 = 0;
int var16 = MathHelper.floor_double(par2Entity.posX);
int var17 = MathHelper.floor_double(par2Entity.posZ);
int var18;
double var25;
for (var18 = var16 - var10; var18 <= var16 + var10; ++var18)
{
double var19 = (double)var18 + 0.5D - par2Entity.posX;
for (int var21 = var17 - var10; var21 <= var17 + var10; ++var21)
{
double var22 = (double)var21 + 0.5D - par2Entity.posZ;
for (int var24 = par1World.getActualHeight() - 1; var24 >= 0; --var24)
{
if (par1World.getBlockId(var18, var24, var21) == Block.portal.blockID)
{
while (par1World.getBlockId(var18, var24 - 1, var21) == Block.portal.blockID)
{
--var24;
}
var25 = (double)var24 + 0.5D - par2Entity.posY;
double var27 = var19 * var19 + var25 * var25 + var22 * var22;
if (var11 < 0.0D || var27 < var11)
{
var11 = var27;
var13 = var18;
var14 = var24;
var15 = var21;
}
}
}
}
}
if (var11 < 0.0D)
{
return false;
}
else
{
double var46 = (double)var13 + 0.5D;
double var23 = (double)var14 + 0.5D;
var25 = (double)var15 + 0.5D;
int var47 = -1;
if (par1World.getBlockId(var13 - 1, var14, var15) == Block.portal.blockID)
{
var47 = 2;
}
if (par1World.getBlockId(var13 + 1, var14, var15) == Block.portal.blockID)
{
var47 = 0;
}
if (par1World.getBlockId(var13, var14, var15 - 1) == Block.portal.blockID)
{
var47 = 3;
}
if (par1World.getBlockId(var13, var14, var15 + 1) == Block.portal.blockID)
{
var47 = 1;
}
int var28 = par2Entity.func_82148_at();
if (var47 > -1)
{
int var29 = Direction.field_71578_g[var47];
int var30 = Direction.offsetX[var47];
int var31 = Direction.offsetZ[var47];
int var32 = Direction.offsetX[var29];
int var33 = Direction.offsetZ[var29];
boolean var34 = !par1World.isAirBlock(var13 + var30 + var32, var14, var15 + var31 + var33) || !par1World.isAirBlock(var13 + var30 + var32, var14 + 1, var15 + var31 + var33);
boolean var35 = !par1World.isAirBlock(var13 + var30, var14, var15 + var31) || !par1World.isAirBlock(var13 + var30, var14 + 1, var15 + var31);
if (var34 && var35)
{
var47 = Direction.footInvisibleFaceRemap[var47];
var29 = Direction.footInvisibleFaceRemap[var29];
var30 = Direction.offsetX[var47];
var31 = Direction.offsetZ[var47];
var32 = Direction.offsetX[var29];
var33 = Direction.offsetZ[var29];
var18 = var13 - var32;
var46 -= (double)var32;
int var20 = var15 - var33;
var25 -= (double)var33;
var34 = !par1World.isAirBlock(var18 + var30 + var32, var14, var20 + var31 + var33) || !par1World.isAirBlock(var18 + var30 + var32, var14 + 1, var20 + var31 + var33);
var35 = !par1World.isAirBlock(var18 + var30, var14, var20 + var31) || !par1World.isAirBlock(var18 + var30, var14 + 1, var20 + var31);
}
float var36 = 0.5F;
float var37 = 0.5F;
if (!var34 && var35)
{
var36 = 1.0F;
}
else if (var34 && !var35)
{
var36 = 0.0F;
}
else if (var34 && var35)
{
var37 = 0.0F;
}
var46 += (double)((float)var32 * var36 + var37 * (float)var30);
var25 += (double)((float)var33 * var36 + var37 * (float)var31);
float var38 = 0.0F;
float var39 = 0.0F;
float var40 = 0.0F;
float var41 = 0.0F;
if (var47 == var28)
{
var38 = 1.0F;
var39 = 1.0F;
}
else if (var47 == Direction.footInvisibleFaceRemap[var28])
{
var38 = -1.0F;
var39 = -1.0F;
}
else if (var47 == Direction.enderEyeMetaToDirection[var28])
{
var40 = 1.0F;
var41 = -1.0F;
}
else
{
var40 = -1.0F;
var41 = 1.0F;
}
double var42 = par2Entity.motionX;
double var44 = par2Entity.motionZ;
par2Entity.motionX = var42 * (double)var38 + var44 * (double)var41;
par2Entity.motionZ = var42 * (double)var40 + var44 * (double)var39;
par2Entity.rotationYaw = par9 - (float)(var28 * 90) + (float)(var47 * 90);
}
else
{
par2Entity.motionX = par2Entity.motionY = par2Entity.motionZ = 0.0D;
}
par2Entity.setLocationAndAngles(var46, var23, var25, par2Entity.rotationYaw, par2Entity.rotationPitch);
return true;
}
}
/**
* Create a new portal near an entity.
*/
public boolean createPortal(World par1World, Entity par2Entity)
{
byte var3 = 16;
double var4 = -1.0D;
int var6 = MathHelper.floor_double(par2Entity.posX);
int var7 = MathHelper.floor_double(par2Entity.posY);
int var8 = MathHelper.floor_double(par2Entity.posZ);
int var9 = var6;
int var10 = var7;
int var11 = var8;
int var12 = 0;
int var13 = this.random.nextInt(4);
int var14;
double var15;
int var17;
double var18;
int var21;
int var20;
int var23;
int var22;
int var25;
int var24;
int var27;
int var26;
int var28;
double var34;
double var32;
for (var14 = var6 - var3; var14 <= var6 + var3; ++var14)
{
var15 = (double)var14 + 0.5D - par2Entity.posX;
for (var17 = var8 - var3; var17 <= var8 + var3; ++var17)
{
var18 = (double)var17 + 0.5D - par2Entity.posZ;
label274:
for (var20 = par1World.getActualHeight() - 1; var20 >= 0; --var20)
{
if (par1World.isAirBlock(var14, var20, var17))
{
while (var20 > 0 && par1World.isAirBlock(var14, var20 - 1, var17))
{
--var20;
}
for (var21 = var13; var21 < var13 + 4; ++var21)
{
var22 = var21 % 2;
var23 = 1 - var22;
if (var21 % 4 >= 2)
{
var22 = -var22;
var23 = -var23;
}
for (var24 = 0; var24 < 3; ++var24)
{
for (var25 = 0; var25 < 4; ++var25)
{
for (var26 = -1; var26 < 4; ++var26)
{
var27 = var14 + (var25 - 1) * var22 + var24 * var23;
var28 = var20 + var26;
int var29 = var17 + (var25 - 1) * var23 - var24 * var22;
if (var26 < 0 && !par1World.getBlockMaterial(var27, var28, var29).isSolid() || var26 >= 0 && !par1World.isAirBlock(var27, var28, var29))
{
continue label274;
}
}
}
}
var32 = (double)var20 + 0.5D - par2Entity.posY;
var34 = var15 * var15 + var32 * var32 + var18 * var18;
if (var4 < 0.0D || var34 < var4)
{
var4 = var34;
var9 = var14;
var10 = var20;
var11 = var17;
var12 = var21 % 4;
}
}
}
}
}
}
if (var4 < 0.0D)
{
for (var14 = var6 - var3; var14 <= var6 + var3; ++var14)
{
var15 = (double)var14 + 0.5D - par2Entity.posX;
for (var17 = var8 - var3; var17 <= var8 + var3; ++var17)
{
var18 = (double)var17 + 0.5D - par2Entity.posZ;
label222:
for (var20 = par1World.getActualHeight() - 1; var20 >= 0; --var20)
{
if (par1World.isAirBlock(var14, var20, var17))
{
while (var20 > 0 && par1World.isAirBlock(var14, var20 - 1, var17))
{
--var20;
}
for (var21 = var13; var21 < var13 + 2; ++var21)
{
var22 = var21 % 2;
var23 = 1 - var22;
for (var24 = 0; var24 < 4; ++var24)
{
for (var25 = -1; var25 < 4; ++var25)
{
var26 = var14 + (var24 - 1) * var22;
var27 = var20 + var25;
var28 = var17 + (var24 - 1) * var23;
if (var25 < 0 && !par1World.getBlockMaterial(var26, var27, var28).isSolid() || var25 >= 0 && !par1World.isAirBlock(var26, var27, var28))
{
continue label222;
}
}
}
var32 = (double)var20 + 0.5D - par2Entity.posY;
var34 = var15 * var15 + var32 * var32 + var18 * var18;
if (var4 < 0.0D || var34 < var4)
{
var4 = var34;
var9 = var14;
var10 = var20;
var11 = var17;
var12 = var21 % 2;
}
}
}
}
}
}
}
int var30 = var9;
int var16 = var10;
var17 = var11;
int var31 = var12 % 2;
int var19 = 1 - var31;
if (var12 % 4 >= 2)
{
var31 = -var31;
var19 = -var19;
}
boolean var33;
if (var4 < 0.0D)
{
if (var10 < 70)
{
var10 = 70;
}
if (var10 > par1World.getActualHeight() - 10)
{
var10 = par1World.getActualHeight() - 10;
}
var16 = var10;
for (var20 = -1; var20 <= 1; ++var20)
{
for (var21 = 1; var21 < 3; ++var21)
{
for (var22 = -1; var22 < 3; ++var22)
{
var23 = var30 + (var21 - 1) * var31 + var20 * var19;
var24 = var16 + var22;
var25 = var17 + (var21 - 1) * var19 - var20 * var31;
var33 = var22 < 0;
par1World.setBlockWithNotify(var23, var24, var25, var33 ? Block.obsidian.blockID : 0);
}
}
}
}
for (var20 = 0; var20 < 4; ++var20)
{
par1World.editingBlocks = true;
for (var21 = 0; var21 < 4; ++var21)
{
for (var22 = -1; var22 < 4; ++var22)
{
var23 = var30 + (var21 - 1) * var31;
var24 = var16 + var22;
var25 = var17 + (var21 - 1) * var19;
var33 = var21 == 0 || var21 == 3 || var22 == -1 || var22 == 3;
par1World.setBlockWithNotify(var23, var24, var25, var33 ? Block.obsidian.blockID : Block.portal.blockID);
}
}
par1World.editingBlocks = false;
for (var21 = 0; var21 < 4; ++var21)
{
for (var22 = -1; var22 < 4; ++var22)
{
var23 = var30 + (var21 - 1) * var31;
var24 = var16 + var22;
var25 = var17 + (var21 - 1) * var19;
par1World.notifyBlocksOfNeighborChange(var23, var24, var25, par1World.getBlockId(var23, var24, var25));
}
}
}
return true;
}
}
[/hide]
When I use the par5Entity.usePortal() the portal block works and teleports me to the nether, but if I use the code in the onEntityCollide that is not commented out nothing happens and if I use the commented out code it will crash.
What is the teleportation code for 1.4.2?