Jump to content

Lucaffinity

Members
  • Posts

    1
  • Joined

  • Last visited

Everything posted by Lucaffinity

  1. Hey! I was basically trying to create a new Dimension which was working fine until the game crashed when upon colliding with the Portal i created. After this didnt' work out, watched a tutorial and copied it's code into my Mod. Then I realized it wasn't working although the recompiling didn't get any Errors. The Console said that the Errors occured in the Teleporters' super method and in I will simply post my code below: 1. The Handler package lucaffinity.destinies_dynasty.general.handler; import lucaffinity.destinies_dynasty.dimension.orfestia.WorldProviderOrfestia; import net.minecraftforge.common.DimensionManager; public class DimensionHandler { public static void Modfile(){ registerDimension(); } public static final int OrfestiaId = 8; public static void registerDimension(){ DimensionManager.registerProviderType(OrfestiaId, WorldProviderOrfestia.class, false); DimensionManager.registerDimension(OrfestiaId, OrfestiaId); } } 2. The Portal-Block File package lucaffinity.destinies_dynasty.blocks; import java.util.Random; import lucaffinity.destinies_dynasty.dimension.orfestia.OrfestiaTeleporter; import lucaffinity.destinies_dynasty.general.CreativeTab; import lucaffinity.destinies_dynasty.general.handler.DimensionHandler; import net.minecraft.block.Block; import net.minecraft.block.BlockPortal; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class BlockOrfestiaPortal extends BlockPortal { public BlockOrfestiaPortal(){ super(); this.setCreativeTab(CreativeTab.destinies_dynasty_portal); } /*public void updateTick(World world, int x, int y, int z, Random rand){ }*/ public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z){ return null; } public boolean renderAsNormalBlock(){ return false; } public void onNeighborBlockChange(World world, int x, int y, int z, Block block){ byte b0 = 0; byte b1 = 1; if(world.getBlock(x - 1, y, z) == ModBlocks.orfestia_portalframe || world.getBlock(x + 1, y, z) == ModBlocks.orfestia_portalframe){ b0 = 1; b1 = 0; } int i1; for(i1 = y; world.getBlock(x, i1 - 1, z) == this; --i1){ ; } if(world.getBlock(x, i1 - 1, z) != ModBlocks.orfestia_portalframe){ world.setBlockToAir(x, y, z); }else{ int j1; for(j1 = 1; j1 < 4 && world.getBlock(x, i1 + j1, z) == this; ++j1){ ; } if(j1 == 3 && world.getBlock(x, i1 + j1, z) == ModBlocks.orfestia_portalframe){ boolean flag = world.getBlock(x - 1, y, z) == this || world.getBlock(x + 1, y, z) == this; boolean flag1 = world.getBlock(x, y, z - 1) == this || world.getBlock(x, y, z - 1) == this; if(flag && flag1){ world.setBlockToAir(x, y, z); }else{ if((world.getBlock(x+b0, y, z+b1) != ModBlocks.orfestia_portalframe || world.getBlock(x-b0, y, z-b1) != this) && (world.getBlock(x-b0, y, z-b1) !=ModBlocks.orfestia_portalframe || world.getBlock(x+b0, y, z+b1) != this)){ world.setBlockToAir(x, y, z); } } }else{ world.setBlockToAir(x, y, z); } } } public int quantityDropped(Random rand){ return 0; } public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity){ if(entity.ridingEntity == null && entity.riddenByEntity == null && entity instanceof EntityPlayerMP){ EntityPlayerMP thePlayer = (EntityPlayerMP) entity; MinecraftServer server = MinecraftServer.getServer(); if(entity instanceof EntityPlayerMP){ if(thePlayer.timeUntilPortal > 0){ thePlayer.timeUntilPortal = 10; Error }else if(thePlayer.dimension != DimensionHandler.OrfestiaId){ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, DimensionHandler.OrfestiaId, new OrfestiaTeleporter(server.worldServerForDimension(DimensionHandler.OrfestiaId))); }else{ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new OrfestiaTeleporter(server.worldServerForDimension(0))); } } } } public boolean tryTroCreatePortal(World world, int x, int y, int z){ byte b0 = 0; byte b1 = 0; if(world.getBlock(x - 1 , y, z) == ModBlocks.orfestia_portalframe || world.getBlock(x + 1, y, z) == ModBlocks.orfestia_portalframe){ b0 = 1; } if (world.getBlock(x, y, z - 1) == ModBlocks.orfestia_portalframe || world.getBlock(x, y, z + 1) == ModBlocks.orfestia_portalframe){ b1 = 1; } if(b0 == b1){ return false; } else{ if(world.getBlock(x - b0, y, z - b1) == Blocks.air){ x -= b0; z -= b1; } int l; int i1; for(l = -1; l <= 2; ++l){ for(i1 = -1; i1 <= 3; ++i1){ boolean flag = l == -1 || l == 2 || i1 == -1 || i1 == 3; if( l != -1 && l != 2 || i1 != -1 && i1 !=3){ Block j1 = world.getBlock(x + b0 * l, y + i1, z + b1 * l); if(flag){ if(j1 != ModBlocks.orfestia_portalframe){ return false; } } else if(j1 != Blocks.air && j1 != Blocks.fire){ return false; } } } } for(l = 0; l < 2; ++l){ for(i1 = 0; i1 < 3; ++i1){ world.setBlock(x + b0 * l, y + i1, z + b1 * l, ModBlocks.orfestia_portal, 0, 2); } } return true; } } } 3.The World provider package lucaffinity.destinies_dynasty.dimension.orfestia; import lucaffinity.destinies_dynasty.general.handler.DimensionHandler; import net.minecraft.world.WorldProvider; import net.minecraft.world.biome.WorldChunkManagerHell; import net.minecraft.world.chunk.IChunkProvider; public class WorldProviderOrfestia extends WorldProvider{ public void registerWorldChunkManager(){ this.worldChunkMgr = new WorldChunkManagerHell(lucaffinity.destinies_dynasty.generation.biome.BiomeRegistry.biomeMagicalForest, 1.2F); this.dimensionId = DimensionHandler.OrfestiaId; } public IChunkProvider createChunkGeneration(){ return null; } @Override public String getDimensionName() { return "Orfestia"; } } 4.The Teleporter package lucaffinity.destinies_dynasty.dimension.orfestia; import java.util.ArrayList; import java.util.List; import java.util.Random; import lucaffinity.destinies_dynasty.blocks.ModBlocks; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.Direction; import net.minecraft.util.LongHashMap; import net.minecraft.util.MathHelper; import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.Teleporter; import net.minecraft.world.WorldServer; public class OrfestiaTeleporter extends Teleporter { private final WorldServer worldServerInstance; private final Random random; private final LongHashMap destinationCoordinateCache = new LongHashMap(); private final List destinationCoordinateKeys = new ArrayList(); public OrfestiaTeleporter(WorldServer worldserver) { Error super(worldserver); this.worldServerInstance = worldserver; this.random = new Random(worldserver.getSeed()); } public void placeInPortal(Entity entity, double par2, double par4, double par6, float par8){ if(this.worldServerInstance.provider.dimensionId != 1){ if(!this.placeInExistingPortal(entity, par2, par4, par6, par8)){ this.makePortal(entity); this.placeInExistingPortal(entity, par2, par4, par6, par8); } } else{ int i = MathHelper.floor_double(entity.posX); int j = MathHelper.floor_double(entity.posY) - 1; int k = MathHelper.floor_double(entity.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; j < 3; ++j1){ int k1 = i + i1 * b0 + l * b1; int l1 = j + j1; int i2 = k + i1 * b1 - l * b0; boolean flag = j1 < 0; this.worldServerInstance.setBlock(k1, l1, i2, flag ?ModBlocks.orfestia_portalframe : Blocks.air); } } } entity.setLocationAndAngles((double)i, (double)j, (double)k, entity.rotationYaw, 0.0F); entity.motionX = entity.motionY = entity.motionZ = 0.0D; } } public boolean placeInExistingPortal(Entity entity, 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(entity.posX); int i1 = MathHelper.floor_double(entity.posZ); long j1 = ChunkCoordIntPair.chunkXZ2Int(l, i1); boolean flag = true; double d7; int l3; if(this.destinationCoordinateCache.containsItem(j1)){ OrfestiaTeleporter.PortalPosition portalposition = (Teleporter.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(l3 = l - short1; l3 <= 1 + 128; ++l3){ double d4 = (double)l3 + 0.5D - entity.posX; for(int l1 = i1 - short1; l1 <= i1 + short1; ++l1){ double d5 = (double)l1 + 0.5D - entity.posZ; for(int i2 = this.worldServerInstance.getActualHeight() -1; i2 >=0; --i2){ if(this.worldServerInstance.getBlock(l3, i2, l1) == ModBlocks.orfestia_portal){ while (this.worldServerInstance.getBlock(l3, i2 - 1, l1) == ModBlocks.orfestia_portal){ --i2; } d7 = (double) i2 + 0.5D - entity.posY; double d8 = d4 * d4 + d7 * d7 + d5 * d5; if (d3 < 0.0D || d8 < d3){ d3 = d8; i = l3; j = i2; k = l1; } } } } } } if (d3 >= 0.0D){ if(flag){ this.destinationCoordinateCache.add(j1, new OrfestiaTeleporter.PortalPosition(i, j, k, this.worldServerInstance.getTotalWorldTime())); this.destinationCoordinateKeys.add(Long.valueOf(j1)); System.out.println("Location " + j1); } double d11 = (double)i + 0.5D; double d6 = (double)j + 0.5D; d7 = (double)k + 0.5D; int i4 = -1; if(this.worldServerInstance.getBlock(i - 1, j, k) == ModBlocks.orfestia_portal){ i4 = 2; } if(this.worldServerInstance.getBlock(i + 1, j, k) == ModBlocks.orfestia_portal){ i4 = 0; } if(this.worldServerInstance.getBlock(i, j, k - 1) == ModBlocks.orfestia_portal){ i4 = 3; } if(this.worldServerInstance.getBlock(i, j, k + 1) == ModBlocks.orfestia_portal){ i4 = 1; } int j2 = entity.getTeleportDirection(); if(i4 > -1){ int k2 = Direction.rotateLeft[i4]; int l2 = Direction.offsetX[i4]; int i3 = Direction.offsetZ[i4]; int j3 = Direction.offsetX[k2]; int k3 = Direction.offsetZ[k2]; boolean flag1 = !this.worldServerInstance.isAirBlock(i + l2 + j3, j, k + i3 + k3) || !this.worldServerInstance.isAirBlock(i + l2 + j3, j + 1, k + i3 + k3); boolean flag2 = !this.worldServerInstance.isAirBlock(i + l2 + j3, j, k + i3) || !this.worldServerInstance.isAirBlock(i + l2 + j3, j + 1, k + i3); if(flag1 && flag2){ i4 = Direction.rotateOpposite[i4]; k2 = Direction.rotateOpposite[k2]; l2 = Direction.offsetX[i4]; i3 = Direction.offsetZ[i4]; j3 = Direction.offsetX[k2]; k3 = Direction.offsetZ[k2]; l3 = i - j3; d11 -= (double)j3; int k1 = k - k3; d7 -= (double)k3; flag1 = !this.worldServerInstance.isAirBlock(i + l2 + j3, j, k + i3 + k3) || !this.worldServerInstance.isAirBlock(i + l2 + j3, j + 1, k + i3 + k3); flag2 = !this.worldServerInstance.isAirBlock(i + l2 + j3, j, k + i3) || !this.worldServerInstance.isAirBlock(i + l2 + j3, j + 1, k + i3); } 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; } d11 += (double)((float)j3 * f1 + f2 * (float)l2); d7 += (double)((float)k3 * f1 + f2 * (float)i3); float f3 = 0.0F; float f4 = 0.0F; float f5 = 0.0F; float f6 = 0.0F; if(i4 == j2){ f3 = 1.0F; f4 = 1.0F; } else if(i4 == Direction.rotateOpposite[j2]){ f3 = -1.0F; f4 = -1.0F; } else if(i4 == Direction.rotateRight[j2]){ f5 = 1.0F; f6 = -1.0F; } else{ f5 = -1.0F; f6 = 1.0F; } double d9 = entity.motionX; double d10 = entity.motionZ; entity.motionX = d9 * (double)f3 + d10 * (double)f6; entity.motionZ = d9 * (double)f5 + d10 * (double)f4; entity.rotationYaw = par8 - (float)(j2 * 90) + (float)(i4 *90); } else{ entity.motionX = entity.motionY = entity.motionZ = 0.0D; } entity.setLocationAndAngles(d11, d6, d7, entity.rotationYaw, entity.rotationPitch); return true; } else{ return false; } } } I appreciate any help and if this is the wrong place to post in, Im sorry, this is my first post.
×
×
  • Create New...

Important Information

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