Jump to content

Recommended Posts

Posted

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.

  • Guest locked this topic
Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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