Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Lucaffinity

Members
  • Joined

  • Last visited

  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.

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.