Jump to content

cader1114

Forge Modder
  • Posts

    6
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

cader1114's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. Would be helpful if someone, anyone replied.
  2. Just to say, I am probably messing something easy up, and It would be helpful if anyone else can spot it because I can't.
  3. I am creating a dimension, but when the fire is ignited on the portal, the portal won't create. Here are my classes: PortalBlock package com.cader1114.blocks; import java.util.Random; import com.cader1114.MainRegistry; import com.cader1114.dimension.dimensionRegistry; 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.item.ItemMonsterPlacer; import net.minecraft.server.MinecraftServer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class BlockKryptonitePortal extends BlockPortal { public BlockKryptonitePortal(){ super(); } public void updateTick(World par1, int par2, int par3, int par4, Random par5) { super.updateTick(par1, par2, par3, par4, par5); if (par1.provider.isSurfaceWorld() && par1.getGameRules().getGameRuleBooleanValue("doMobSpawning") && par5.nextInt(2000) < par1.difficultySetting.getDifficultyId()) { int l; for (l = par3; !World.doesBlockHaveSolidTopSurface(par1, par2, l, par4) && l > 0; --l) { ; } if (l > 0 && !par1.getBlock(par2, l + 1, par4).isNormalCube()) { Entity entity = ItemMonsterPlacer.spawnCreature(par1, 57, (double)par2 + 0.5D, (double)l + 1.1D, (double)par4 + 0.5D); if (entity != null) { entity.timeUntilPortal = entity.getPortalCooldown(); } } } } 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) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; b1 = 0; } int i1; for(i1 = y; world.getBlock(x, i1 - 1, z) == this; --i1){ ; } if(world.getBlock(x, i1 - 1, z) != MainRegistry.blockKryptoniteOre){ 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) == MainRegistry.blockKryptoniteOre){ 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) != MainRegistry.blockKryptoniteOre || world.getBlock(x-b0, y, z-b1) != this) && (world.getBlock(x-b0, y, z-b1) !=MainRegistry.blockKryptoniteOre || 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; }else if(thePlayer.dimension != dimensionRegistry.dimensionId){ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, dimensionRegistry.dimensionId, new TeleporterKryptonite(server.worldServerForDimension(dimensionRegistry.dimensionId))); }else{ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new TeleporterKryptonite(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) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; } if (world.getBlock(x, y, z - 1) == MainRegistry.blockKryptoniteOre || world.getBlock(x, y, z + 1) == MainRegistry.blockKryptoniteOre){ 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 != MainRegistry.blockKryptoniteOre){ 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, MainRegistry.blockKryptonitePortal, 0, 2); } } return true; } } } TeleporterKryptonite package com.cader1114.blocks; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import com.cader1114.MainRegistry; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.ChunkCoordinates; 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 TeleporterKryptonite extends Teleporter { private final WorldServer worldServerInstance; private final Random random; private final LongHashMap destinationCoordinateCache = new LongHashMap(); private final List destinationCoordinateKeys = new ArrayList(); private static final String __OBFID = "CL_00000153"; public TeleporterKryptonite(WorldServer par1) { super(par1); this.worldServerInstance = par1; this.random = new Random(par1.getSeed()); } public void placeInPortal(Entity par1, double par2, double par4, double par6, float par8) { if (this.worldServerInstance.provider.dimensionId != 1) { if (!this.placeInExistingPortal(par1, par2, par4, par6, par8)) { this.makePortal(par1); this.placeInExistingPortal(par1, par2, par4, par6, par8); } } else { int i = MathHelper.floor_double(par1.posX); int j = MathHelper.floor_double(par1.posY) - 1; int k = MathHelper.floor_double(par1.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; this.worldServerInstance.setBlock(k1, l1, i2, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } par1.setLocationAndAngles((double)i, (double)j, (double)k, par1.rotationYaw, 0.0F); par1.motionX = par1.motionY = par1.motionZ = 0.0D; } } /** * Place an entity in a nearby portal which already exists. */ public boolean placeInExistingPortal(Entity par1, 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(par1.posX); int i1 = MathHelper.floor_double(par1.posZ); long j1 = ChunkCoordIntPair.chunkXZ2Int(l, i1); boolean flag = true; double d7; int l3; if (this.destinationCoordinateCache.containsItem(j1)) { TeleporterKryptonite.PortalPosition portalposition = (TeleporterKryptonite.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 <= l + short1; ++l3) { double d4 = (double)l3 + 0.5D - par1.posX; for (int l1 = i1 - short1; l1 <= i1 + short1; ++l1) { double d5 = (double)l1 + 0.5D - par1.posZ; for (int i2 = this.worldServerInstance.getActualHeight() - 1; i2 >= 0; --i2) { if (this.worldServerInstance.getBlock(l3, i2, l1) == MainRegistry.blockKryptonitePortal) { while (this.worldServerInstance.getBlock(l3, i2 - 1, l1) == MainRegistry.blockKryptonitePortal) { --i2; } d7 = (double)i2 + 0.5D - par1.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 TeleporterKryptonite.PortalPosition(i, j, k, this.worldServerInstance.getTotalWorldTime())); this.destinationCoordinateKeys.add(Long.valueOf(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) == MainRegistry.blockKryptonitePortal) { i4 = 2; } if (this.worldServerInstance.getBlock(i + 1, j, k) == MainRegistry.blockKryptonitePortal) { i4 = 0; } if (this.worldServerInstance.getBlock(i, j, k - 1) == MainRegistry.blockKryptonitePortal) { i4 = 3; } if (this.worldServerInstance.getBlock(i, j, k + 1) == MainRegistry.blockKryptonitePortal) { i4 = 1; } int j2 = par1.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, j, k + i3) || !this.worldServerInstance.isAirBlock(i + l2, 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(l3 + l2 + j3, j, k1 + i3 + k3) || !this.worldServerInstance.isAirBlock(l3 + l2 + j3, j + 1, k1 + i3 + k3); flag2 = !this.worldServerInstance.isAirBlock(l3 + l2, j, k1 + i3) || !this.worldServerInstance.isAirBlock(l3 + l2, j + 1, k1 + 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 = par1.motionX; double d10 = par1.motionZ; par1.motionX = d9 * (double)f3 + d10 * (double)f6; par1.motionZ = d9 * (double)f5 + d10 * (double)f4; par1.rotationYaw = par8 - (float)(j2 * 90) + (float)(i4 * 90); } else { par1.motionX = par1.motionY = par1.motionZ = 0.0D; } par1.setLocationAndAngles(d11, d6, d7, par1.rotationYaw, par1.rotationPitch); return true; } else { return false; } } public boolean makePortal(Entity par1) { byte b0 = 16; double d0 = -1.0D; int i = MathHelper.floor_double(par1.posX); int j = MathHelper.floor_double(par1.posY); int k = MathHelper.floor_double(par1.posZ); int l = i; int i1 = j; int j1 = k; int k1 = 0; int l1 = this.random.nextInt(4); int i2; double d1; int k2; double d2; int i3; int j3; int k3; int l3; int i4; int j4; int k4; int l4; int i5; double d3; double d4; for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - par1.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - par1.posZ; label274: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 4; ++j3) { k3 = j3 % 2; l3 = 1 - k3; if (j3 % 4 >= 2) { k3 = -k3; l3 = -l3; } for (i4 = 0; i4 < 3; ++i4) { for (j4 = 0; j4 < 4; ++j4) { for (k4 = -1; k4 < 4; ++k4) { l4 = i2 + (j4 - 1) * k3 + i4 * l3; i5 = i3 + k4; int j5 = k2 + (j4 - 1) * l3 - i4 * k3; if (k4 < 0 && !this.worldServerInstance.getBlock(l4, i5, j5).getMaterial().isSolid() || k4 >= 0 && !this.worldServerInstance.isAirBlock(l4, i5, j5)) { continue label274; } } } } d3 = (double)i3 + 0.5D - par1.posY; d4 = d1 * d1 + d3 * d3 + d2 * d2; if (d0 < 0.0D || d4 < d0) { d0 = d4; l = i2; i1 = i3; j1 = k2; k1 = j3 % 4; } } } } } } if (d0 < 0.0D) { for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - par1.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - par1.posZ; label222: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 2; ++j3) { k3 = j3 % 2; l3 = 1 - k3; for (i4 = 0; i4 < 4; ++i4) { for (j4 = -1; j4 < 4; ++j4) { k4 = i2 + (i4 - 1) * k3; l4 = i3 + j4; i5 = k2 + (i4 - 1) * l3; if (j4 < 0 && !this.worldServerInstance.getBlock(k4, l4, i5).getMaterial().isSolid() || j4 >= 0 && !this.worldServerInstance.isAirBlock(k4, l4, i5)) { continue label222; } } } d3 = (double)i3 + 0.5D - par1.posY; d4 = d1 * d1 + d3 * d3 + d2 * d2; if (d0 < 0.0D || d4 < d0) { d0 = d4; l = i2; i1 = i3; j1 = k2; k1 = j3 % 2; } } } } } } } int k5 = l; int j2 = i1; k2 = j1; int l5 = k1 % 2; int l2 = 1 - l5; if (k1 % 4 >= 2) { l5 = -l5; l2 = -l2; } boolean flag; if (d0 < 0.0D) { if (i1 < 70) { i1 = 70; } if (i1 > this.worldServerInstance.getActualHeight() - 10) { i1 = this.worldServerInstance.getActualHeight() - 10; } j2 = i1; for (i3 = -1; i3 <= 1; ++i3) { for (j3 = 1; j3 < 3; ++j3) { for (k3 = -1; k3 < 3; ++k3) { l3 = k5 + (j3 - 1) * l5 + i3 * l2; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2 - i3 * l5; flag = k3 < 0; this.worldServerInstance.setBlock(l3, i4, j4, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } } for (i3 = 0; i3 < 4; ++i3) { for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; flag = j3 == 0 || j3 == 3 || k3 == -1 || k3 == 3; this.worldServerInstance.setBlock(l3, i4, j4, (Block)(flag ? MainRegistry.blockKryptoniteOre : MainRegistry.blockKryptonitePortal), 0, 2); } } for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; this.worldServerInstance.notifyBlocksOfNeighborChange(l3, i4, j4, this.worldServerInstance.getBlock(l3, i4, j4)); } } } return true; } 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(); TeleporterKryptonite.PortalPosition portalposition = (TeleporterKryptonite.PortalPosition)this.destinationCoordinateCache.getValueByKey(olong.longValue()); if (portalposition == null || portalposition.lastUpdateTime < j) { iterator.remove(); this.destinationCoordinateCache.remove(olong.longValue()); } } } } public class PortalPosition extends ChunkCoordinates { public long lastUpdateTime; private static final String __OBFID = "CL_00000154"; public PortalPosition(int par2, int par3, int par4, long par5) { super(par2, par3, par4); this.lastUpdateTime = par5; } } } I think thats all the code that is needed, and have a thanks in advance.
  4. I am having some trouble with portals. I have the code set to create a portal upon right click of a flint and steel(Blocks.fire), but It either won't register the fire, or I am doing something wrong. Here is the code: Block Of The Portal package com.cader1114.blocks; import java.util.Random; import com.cader1114.MainRegistry; import com.cader1114.dimension.dimensionRegistry; 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 BlockKryptonitePortal extends BlockPortal { public BlockKryptonitePortal(){ super(); } /*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) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; b1 = 0; } int i1; for(i1 = y; world.getBlock(x, i1 - 1, z) == this; --i1){ ; } if(world.getBlock(x, i1 - 1, z) != MainRegistry.blockKryptoniteOre){ 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) == MainRegistry.blockKryptoniteOre){ 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) != MainRegistry.blockKryptoniteOre || world.getBlock(x-b0, y, z-b1) != this) && (world.getBlock(x-b0, y, z-b1) !=MainRegistry.blockKryptoniteOre || 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; }else if(thePlayer.dimension != dimensionRegistry.dimensionId){ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, dimensionRegistry.dimensionId, new TeleporterKryptonite(server.worldServerForDimension(dimensionRegistry.dimensionId))); }else{ thePlayer.timeUntilPortal = 10; thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new TeleporterKryptonite(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) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; } if (world.getBlock(x, y, z - 1) == MainRegistry.blockKryptoniteOre || world.getBlock(x, y, z + 1) == MainRegistry.blockKryptoniteOre){ 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 != MainRegistry.blockKryptoniteOre){ 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, MainRegistry.blockKryptonitePortal, 0, 2); } } return true; } } } Teleporter package com.cader1114.blocks; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import com.cader1114.MainRegistry; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.ChunkCoordinates; 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 TeleporterKryptonite 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(); private static final String __OBFID = "CL_00000153"; public TeleporterKryptonite(WorldServer par1) { super(par1); this.worldServerInstance = par1; this.random = new Random(par1.getSeed()); } /** * Place an entity in a nearby portal, creating one if necessary. */ public void placeInPortal(Entity p_77185_1_, double p_77185_2_, double p_77185_4_, double p_77185_6_, float p_77185_8_) { if (this.worldServerInstance.provider.dimensionId != 1) { if (!this.placeInExistingPortal(p_77185_1_, p_77185_2_, p_77185_4_, p_77185_6_, p_77185_8_)) { this.makePortal(p_77185_1_); this.placeInExistingPortal(p_77185_1_, p_77185_2_, p_77185_4_, p_77185_6_, p_77185_8_); } } else { int i = MathHelper.floor_double(p_77185_1_.posX); int j = MathHelper.floor_double(p_77185_1_.posY) - 1; int k = MathHelper.floor_double(p_77185_1_.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; this.worldServerInstance.setBlock(k1, l1, i2, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } p_77185_1_.setLocationAndAngles((double)i, (double)j, (double)k, p_77185_1_.rotationYaw, 0.0F); p_77185_1_.motionX = p_77185_1_.motionY = p_77185_1_.motionZ = 0.0D; } } /** * Place an entity in a nearby portal which already exists. */ public boolean placeInExistingPortal(Entity p_77184_1_, double p_77184_2_, double p_77184_4_, double p_77184_6_, float p_77184_8_) { short short1 = 128; double d3 = -1.0D; int i = 0; int j = 0; int k = 0; int l = MathHelper.floor_double(p_77184_1_.posX); int i1 = MathHelper.floor_double(p_77184_1_.posZ); long j1 = ChunkCoordIntPair.chunkXZ2Int(l, i1); boolean flag = true; double d7; int l3; if (this.destinationCoordinateCache.containsItem(j1)) { TeleporterKryptonite.PortalPosition portalposition = (TeleporterKryptonite.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 <= l + short1; ++l3) { double d4 = (double)l3 + 0.5D - p_77184_1_.posX; for (int l1 = i1 - short1; l1 <= i1 + short1; ++l1) { double d5 = (double)l1 + 0.5D - p_77184_1_.posZ; for (int i2 = this.worldServerInstance.getActualHeight() - 1; i2 >= 0; --i2) { if (this.worldServerInstance.getBlock(l3, i2, l1) == MainRegistry.blockKryptonitePortal) { while (this.worldServerInstance.getBlock(l3, i2 - 1, l1) == MainRegistry.blockKryptonitePortal) { --i2; } d7 = (double)i2 + 0.5D - p_77184_1_.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 TeleporterKryptonite.PortalPosition(i, j, k, this.worldServerInstance.getTotalWorldTime())); this.destinationCoordinateKeys.add(Long.valueOf(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) == MainRegistry.blockKryptonitePortal) { i4 = 2; } if (this.worldServerInstance.getBlock(i + 1, j, k) == MainRegistry.blockKryptonitePortal) { i4 = 0; } if (this.worldServerInstance.getBlock(i, j, k - 1) == MainRegistry.blockKryptonitePortal) { i4 = 3; } if (this.worldServerInstance.getBlock(i, j, k + 1) == MainRegistry.blockKryptonitePortal) { i4 = 1; } int j2 = p_77184_1_.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, j, k + i3) || !this.worldServerInstance.isAirBlock(i + l2, 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(l3 + l2 + j3, j, k1 + i3 + k3) || !this.worldServerInstance.isAirBlock(l3 + l2 + j3, j + 1, k1 + i3 + k3); flag2 = !this.worldServerInstance.isAirBlock(l3 + l2, j, k1 + i3) || !this.worldServerInstance.isAirBlock(l3 + l2, j + 1, k1 + 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 = p_77184_1_.motionX; double d10 = p_77184_1_.motionZ; p_77184_1_.motionX = d9 * (double)f3 + d10 * (double)f6; p_77184_1_.motionZ = d9 * (double)f5 + d10 * (double)f4; p_77184_1_.rotationYaw = p_77184_8_ - (float)(j2 * 90) + (float)(i4 * 90); } else { p_77184_1_.motionX = p_77184_1_.motionY = p_77184_1_.motionZ = 0.0D; } p_77184_1_.setLocationAndAngles(d11, d6, d7, p_77184_1_.rotationYaw, p_77184_1_.rotationPitch); return true; } else { return false; } } public boolean makePortal(Entity p_85188_1_) { byte b0 = 16; double d0 = -1.0D; int i = MathHelper.floor_double(p_85188_1_.posX); int j = MathHelper.floor_double(p_85188_1_.posY); int k = MathHelper.floor_double(p_85188_1_.posZ); int l = i; int i1 = j; int j1 = k; int k1 = 0; int l1 = this.random.nextInt(4); int i2; double d1; int k2; double d2; int i3; int j3; int k3; int l3; int i4; int j4; int k4; int l4; int i5; double d3; double d4; for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - p_85188_1_.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - p_85188_1_.posZ; label274: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 4; ++j3) { k3 = j3 % 2; l3 = 1 - k3; if (j3 % 4 >= 2) { k3 = -k3; l3 = -l3; } for (i4 = 0; i4 < 3; ++i4) { for (j4 = 0; j4 < 4; ++j4) { for (k4 = -1; k4 < 4; ++k4) { l4 = i2 + (j4 - 1) * k3 + i4 * l3; i5 = i3 + k4; int j5 = k2 + (j4 - 1) * l3 - i4 * k3; if (k4 < 0 && !this.worldServerInstance.getBlock(l4, i5, j5).getMaterial().isSolid() || k4 >= 0 && !this.worldServerInstance.isAirBlock(l4, i5, j5)) { continue label274; } } } } d3 = (double)i3 + 0.5D - p_85188_1_.posY; d4 = d1 * d1 + d3 * d3 + d2 * d2; if (d0 < 0.0D || d4 < d0) { d0 = d4; l = i2; i1 = i3; j1 = k2; k1 = j3 % 4; } } } } } } if (d0 < 0.0D) { for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - p_85188_1_.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - p_85188_1_.posZ; label222: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 2; ++j3) { k3 = j3 % 2; l3 = 1 - k3; for (i4 = 0; i4 < 4; ++i4) { for (j4 = -1; j4 < 4; ++j4) { k4 = i2 + (i4 - 1) * k3; l4 = i3 + j4; i5 = k2 + (i4 - 1) * l3; if (j4 < 0 && !this.worldServerInstance.getBlock(k4, l4, i5).getMaterial().isSolid() || j4 >= 0 && !this.worldServerInstance.isAirBlock(k4, l4, i5)) { continue label222; } } } d3 = (double)i3 + 0.5D - p_85188_1_.posY; d4 = d1 * d1 + d3 * d3 + d2 * d2; if (d0 < 0.0D || d4 < d0) { d0 = d4; l = i2; i1 = i3; j1 = k2; k1 = j3 % 2; } } } } } } } int k5 = l; int j2 = i1; k2 = j1; int l5 = k1 % 2; int l2 = 1 - l5; if (k1 % 4 >= 2) { l5 = -l5; l2 = -l2; } boolean flag; if (d0 < 0.0D) { if (i1 < 70) { i1 = 70; } if (i1 > this.worldServerInstance.getActualHeight() - 10) { i1 = this.worldServerInstance.getActualHeight() - 10; } j2 = i1; for (i3 = -1; i3 <= 1; ++i3) { for (j3 = 1; j3 < 3; ++j3) { for (k3 = -1; k3 < 3; ++k3) { l3 = k5 + (j3 - 1) * l5 + i3 * l2; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2 - i3 * l5; flag = k3 < 0; this.worldServerInstance.setBlock(l3, i4, j4, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } } for (i3 = 0; i3 < 4; ++i3) { for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; flag = j3 == 0 || j3 == 3 || k3 == -1 || k3 == 3; this.worldServerInstance.setBlock(l3, i4, j4, (Block)(flag ? MainRegistry.blockKryptoniteOre : MainRegistry.blockKryptonitePortal), 0, 2); } } for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; this.worldServerInstance.notifyBlocksOfNeighborChange(l3, i4, j4, this.worldServerInstance.getBlock(l3, i4, j4)); } } } 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 p_85189_1_) { if (p_85189_1_ % 100L == 0L) { Iterator iterator = this.destinationCoordinateKeys.iterator(); long j = p_85189_1_ - 600L; while (iterator.hasNext()) { Long olong = (Long)iterator.next(); TeleporterKryptonite.PortalPosition portalposition = (TeleporterKryptonite.PortalPosition)this.destinationCoordinateCache.getValueByKey(olong.longValue()); if (portalposition == null || portalposition.lastUpdateTime < j) { iterator.remove(); this.destinationCoordinateCache.remove(olong.longValue()); } } } } public class PortalPosition extends ChunkCoordinates { /** The worldtime at which this PortalPosition was last verified */ public long lastUpdateTime; private static final String __OBFID = "CL_00000154"; public PortalPosition(int p_i1962_2_, int p_i1962_3_, int p_i1962_4_, long p_i1962_5_) { super(p_i1962_2_, p_i1962_3_, p_i1962_4_); this.lastUpdateTime = p_i1962_5_; } } } I probably am doing something wrong, so I am sorry for that, but thanks in advance!
  5. I am having some dimension issues and I can't figure out why. The code will be posted. Thanks in advance. Also, just to clarify, the problem is the fact that when I go through the portal it brings me to the nether instead of my custom dimension. Chunk Provider: package com.cader1114.dimension; import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.DUNGEON; import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ICE; import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE; import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAVA; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockFalling; import net.minecraft.entity.EnumCreatureType; import net.minecraft.init.Blocks; import net.minecraft.util.IProgressUpdate; import net.minecraft.world.ChunkPosition; import net.minecraft.world.SpawnerAnimals; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.ChunkProviderGenerate; import net.minecraft.world.gen.MapGenBase; import net.minecraft.world.gen.MapGenCaves; import net.minecraft.world.gen.MapGenRavine; import net.minecraft.world.gen.NoiseGeneratorOctaves; import net.minecraft.world.gen.feature.WorldGenDungeons; import net.minecraft.world.gen.feature.WorldGenLakes; import net.minecraft.world.gen.structure.MapGenMineshaft; import net.minecraft.world.gen.structure.MapGenScatteredFeature; import net.minecraft.world.gen.structure.MapGenStronghold; import net.minecraft.world.gen.structure.MapGenVillage; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; public class ChunkProviderDimensionKryptonite implements IChunkProvider { public World worldObj; private Random rand; private NoiseGeneratorOctaves noiseGen1; private NoiseGeneratorOctaves noiseGen2; private NoiseGeneratorOctaves noiseGen3; private NoiseGeneratorOctaves noiseGen4; public NoiseGeneratorOctaves noiseGen5; public NoiseGeneratorOctaves noiseGen6; public NoiseGeneratorOctaves mobSpawnerNoise; private final boolean mapFeaturesEnabled; /** Holds Cave Generator */ private MapGenBase caveGenerator = new MapGenCaves(); /** Holds Stronghold Generator */ private MapGenStronghold strongholdGenerator = new MapGenStronghold(); /** Holds Village Generator */ private MapGenVillage villageGenerator = new MapGenVillage(); /** Holds Mineshaft Generator */ private MapGenMineshaft mineshaftGenerator = new MapGenMineshaft(); private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature(); /** Holds ravine generator */ private MapGenBase ravineGenerator = new MapGenRavine(); /** The biomes that are used to generate the chunk */ private BiomeGenBase[] biomesForGeneration; /* { caveGenerator = TerrainGen.getModdedMapGen(caveGenerator, CAVE); strongholdGenerator = (MapGenStronghold) TerrainGen.getModdedMapGen(strongholdGenerator, STRONGHOLD); villageGenerator = (MapGenVillage) TerrainGen.getModdedMapGen(villageGenerator, VILLAGE); mineshaftGenerator = (MapGenMineshaft) TerrainGen.getModdedMapGen(mineshaftGenerator, MINESHAFT); scatteredFeatureGenerator = (MapGenScatteredFeature) TerrainGen.getModdedMapGen(scatteredFeatureGenerator, SCATTERED_FEATURE); ravineGenerator = TerrainGen.getModdedMapGen(ravineGenerator, RAVINE); } */ public ChunkProviderDimensionKryptonite(World worldObj, long seed, boolean mapFeatures) { this.worldObj = worldObj; this.mapFeaturesEnabled = mapFeatures; this.rand = new Random(seed); this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16); this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16); this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, ; this.noiseGen4 = new NoiseGeneratorOctaves(this.rand, 4); this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10); this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16); this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, ; } @Override public boolean chunkExists(int var1, int var2) { // TODO Auto-generated method stub return false; } @Override public Chunk provideChunk(int var1, int var2) { this.rand.setSeed((long) var1 * 341873128712L + (long) var2 * 132897987541L); byte[] abyte = new byte[32768]; //this.generateTerrain(var1, var2, abyte); this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16); //this.caveGenerator.generate(this, this.worldObj, var1, var2, abyte); //this.ravineGenerator.generate(this, this.worldObj, var1, var2, abyte); if (this.mapFeaturesEnabled) { //this.scatteredFeatureGenerator.generate(this, this.worldObj, var1, var2, abyte); } Chunk chunk = new Chunk(this.worldObj, var1, var2); byte[] abyte1 = chunk.getBiomeArray(); for (int k = 0; k < abyte1.length; ++k) { abyte1[k] = (byte) this.biomesForGeneration[k].biomeID; } chunk.generateSkylightMap(); return chunk; } @Override public Chunk loadChunk(int var1, int var2) { // TODO Auto-generated method stub return this.provideChunk(var1, var2); } @Override public void populate(IChunkProvider var1, int var2, int var3) { // TODO Auto-generated method stub } @Override public boolean saveChunks(boolean var1, IProgressUpdate var2) { // TODO Auto-generated method stub return false; } @Override public boolean unloadQueuedChunks() { // TODO Auto-generated method stub return false; } @Override public boolean canSave() { // TODO Auto-generated method stub return false; } @Override public String makeString() { // TODO Auto-generated method stub return "random text"; } @Override public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { // TODO Auto-generated method stub return null; } @Override public ChunkPosition func_147416_a(World var1, String var2, int var3, int var4, int var5) { // TODO Auto-generated method stub return null; } @Override public int getLoadedChunkCount() { // TODO Auto-generated method stub return 0; } @Override public void recreateStructures(int par1, int par2) { /* if (this.mapFeaturesEnabled) { this.mineshaftGenerator.generate(this, this.worldObj, par1, par2, (byte[]) null); this.villageGenerator.generate(this, this.worldObj, par1, par2, (byte[]) null); this.strongholdGenerator.generate(this, this.worldObj, par1, par2, (byte[]) null); this.scatteredFeatureGenerator.generate(this, this.worldObj, par1, par2, (byte[]) null); } */ } @Override public void saveExtraData() { // TODO Auto-generated method stub } } World Provider: package com.cader1114.dimension; import net.minecraft.world.WorldProvider; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.biome.WorldChunkManagerHell; import net.minecraft.world.chunk.IChunkProvider; public class WorldProviderKryptonite extends WorldProvider{ public void registerWorldChunkManager(){ this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.desertHills, 0.8F); this.dimensionId = dimensionRegistry.dimensionId; } public IChunkProvider createChunkGeneration(){ return new com.cader1114.dimension.ChunkProviderDimensionKryptonite(worldObj, worldObj.getSeed(), true); } @Override public String getDimensionName() { return "Kryptonite"; } } DimensionRegistry: package com.cader1114.dimension; import net.minecraftforge.common.DimensionManager; public class dimensionRegistry { public static void mainRegistry(){ registerDimension(); } public static final int dimensionId=8; public static void registerDimension(){ DimensionManager.registerProviderType(dimensionRegistry.dimensionId, WorldProviderKryptonite.class, true); DimensionManager.registerDimension(dimensionRegistry.dimensionId, dimensionRegistry.dimensionId); } } Portal Block: package com.cader1114.blocks; import java.util.Random; import com.cader1114.MainRegistry; import com.cader1114.dimension.dimensionRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import net.minecraft.block.Block; import net.minecraft.block.BlockPortal; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; 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; import net.minecraft.world.WorldServer; public class BlockKryptonitePortal extends BlockPortal { public BlockKryptonitePortal() { super(); } 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) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; b1 = 0; } int i1; for(i1 = y; world.getBlock(x, i1 - 1, z) == this; --i1){ ; } if(world.getBlock(x, i1 - 1, z) != MainRegistry.blockKryptoniteOre){ 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) == MainRegistry.blockKryptoniteOre){ 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) != MainRegistry.blockKryptoniteOre || world.getBlock(x-b0, y, z-b1) != this) && (world.getBlock(x-b0, y, z-b1) !=MainRegistry.blockKryptoniteOre || 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, EntityPlayerMP player){ Side sidex = FMLCommonHandler.instance().getEffectiveSide(); if (sidex == Side.SERVER){ if (player instanceof EntityPlayerMP){ System.out.println("after instace of PlayerMP"); WorldServer worldserver = (WorldServer)world; EntityPlayerMP playerMP = (EntityPlayerMP)player; if (player.ridingEntity == null && player.riddenByEntity == null && player instanceof EntityPlayer){ FMLCommonHandler.instance().getMinecraftServerInstance(); MinecraftServer mServer = MinecraftServer.getServer(); playerMP.mcServer.getConfigurationManager().transferPlayerToDimension(playerMP, 8, new com.cader1114.blocks.TeleporterKryptonite(mServer.worldServerForDimension(dimensionRegistry.dimensionId))); } } } } public boolean tryToCreatePortal(World world, int x, int y, int z){ byte b0 = 0; byte b1 = 0; if(world.getBlock(x - 1, y, z) == MainRegistry.blockKryptoniteOre || world.getBlock(x + 1, y, z) == MainRegistry.blockKryptoniteOre){ b0 = 1; } if(world.getBlock(x, y, z - 1) == MainRegistry.blockKryptoniteOre || world.getBlock(x, y, z + 1) == MainRegistry.blockKryptoniteOre){ b1 = 1; } if(b0 == b1){ return true; } else{ if(world.getBlock(x - b0, y, z - b1) == Blocks.air){ x -= b0; z -= b1; } int l = 0; int il; for(l = -l; l <= 2; ++l){ for(il = -l; il <= 3; ++il){ boolean flag = l == -1 || l == 2 || il == -1 || il == 3; if(l != -1 && l != 2 || il != -1 && il != 3){ Block j1 = world.getBlock(x + b0 * l, y + il, z + b1 * l); if(flag){ if(j1 !=MainRegistry.blockKryptoniteOre){ return true; } } else if(j1 != Blocks.air && j1 != Blocks.fire){ return true; } } } } for(l = 0; l < 2; ++l){ for(il = 0; il < 3; ++il){ world.setBlock(x + b0 * l, y + il, z + b1 * l, MainRegistry.blockKryptonitePortal, 0, 2); } } } return true; } } Teleporter Block: package com.cader1114.blocks; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import com.cader1114.MainRegistry; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.init.Blocks; import net.minecraft.util.ChunkCoordinates; 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 TeleporterKryptonite 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(); private static final String __OBFID = "CL_00000153"; public TeleporterKryptonite(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; this.worldServerInstance.setBlock(k1, l1, i2, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } 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 d7; int l3; if (this.destinationCoordinateCache.containsItem(j1)) { Teleporter.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 <= l + short1; ++l3) { double d4 = (double)l3 + 0.5D - par1Entity.posX; for (int l1 = i1 - short1; l1 <= i1 + short1; ++l1) { double d5 = (double)l1 + 0.5D - par1Entity.posZ; for (int i2 = this.worldServerInstance.getActualHeight() - 1; i2 >= 0; --i2) { if (this.worldServerInstance.getBlock(l3, i2, l1) == MainRegistry.blockKryptonitePortal) { while (this.worldServerInstance.getBlock(l3, i2 - 1, l1) == MainRegistry.blockKryptonitePortal) { --i2; } d7 = (double)i2 + 0.5D - par1Entity.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 Teleporter.PortalPosition(i, j, k, this.worldServerInstance.getTotalWorldTime())); this.destinationCoordinateKeys.add(Long.valueOf(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) == MainRegistry.blockKryptonitePortal) { i4 = 2; } if (this.worldServerInstance.getBlock(i + 1, j, k) == MainRegistry.blockKryptonitePortal) { i4 = 0; } if (this.worldServerInstance.getBlock(i, j, k - 1) == MainRegistry.blockKryptonitePortal) { i4 = 3; } if (this.worldServerInstance.getBlock(i, j, k + 1) == MainRegistry.blockKryptonitePortal) { i4 = 1; } int j2 = par1Entity.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, j, k + i3) || !this.worldServerInstance.isAirBlock(i + l2, 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(l3 + l2 + j3, j, k1 + i3 + k3) || !this.worldServerInstance.isAirBlock(l3 + l2 + j3, j + 1, k1 + i3 + k3); flag2 = !this.worldServerInstance.isAirBlock(l3 + l2, j, k1 + i3) || !this.worldServerInstance.isAirBlock(l3 + l2, j + 1, k1 + 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 = par1Entity.motionX; double d10 = par1Entity.motionZ; par1Entity.motionX = d9 * (double)f3 + d10 * (double)f6; par1Entity.motionZ = d9 * (double)f5 + d10 * (double)f4; par1Entity.rotationYaw = par8 - (float)(j2 * 90) + (float)(i4 * 90); } else { par1Entity.motionX = par1Entity.motionY = par1Entity.motionZ = 0.0D; } par1Entity.setLocationAndAngles(d11, d6, d7, par1Entity.rotationYaw, par1Entity.rotationPitch); return true; } else { return true; } } 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 k2; int i3; int k3; int j3; int i4; int l3; int k4; int j4; int i5; int l4; double d3; double d4; for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - par1Entity.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - par1Entity.posZ; label274: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 4; ++j3) { k3 = j3 % 2; l3 = 1 - k3; if (j3 % 4 >= 2) { k3 = -k3; l3 = -l3; } for (i4 = 0; i4 < 3; ++i4) { for (j4 = 0; j4 < 4; ++j4) { for (k4 = -1; k4 < 4; ++k4) { l4 = i2 + (j4 - 1) * k3 + i4 * l3; i5 = i3 + k4; int j5 = k2 + (j4 - 1) * l3 - i4 * k3; if (k4 < 0 && !this.worldServerInstance.getBlock(l4, i5, j5).getMaterial().isSolid() || k4 >= 0 && !this.worldServerInstance.isAirBlock(l4, i5, j5)) { continue label274; } } } } d4 = (double)i3 + 0.5D - par1Entity.posY; d3 = d1 * d1 + d4 * d4 + d2 * d2; if (d0 < 0.0D || d3 < d0) { d0 = d3; l = i2; i1 = i3; j1 = k2; k1 = j3 % 4; } } } } } } if (d0 < 0.0D) { for (i2 = i - b0; i2 <= i + b0; ++i2) { d1 = (double)i2 + 0.5D - par1Entity.posX; for (k2 = k - b0; k2 <= k + b0; ++k2) { d2 = (double)k2 + 0.5D - par1Entity.posZ; label222: for (i3 = this.worldServerInstance.getActualHeight() - 1; i3 >= 0; --i3) { if (this.worldServerInstance.isAirBlock(i2, i3, k2)) { while (i3 > 0 && this.worldServerInstance.isAirBlock(i2, i3 - 1, k2)) { --i3; } for (j3 = l1; j3 < l1 + 2; ++j3) { k3 = j3 % 2; l3 = 1 - k3; for (i4 = 0; i4 < 4; ++i4) { for (j4 = -1; j4 < 4; ++j4) { k4 = i2 + (i4 - 1) * k3; l4 = i3 + j4; i5 = k2 + (i4 - 1) * l3; if (j4 < 0 && !this.worldServerInstance.getBlock(k4, l4, i5).getMaterial().isSolid() || j4 >= 0 && !this.worldServerInstance.isAirBlock(k4, l4, i5)) { continue label222; } } } d4 = (double)i3 + 0.5D - par1Entity.posY; d3 = d1 * d1 + d4 * d4 + d2 * d2; if (d0 < 0.0D || d3 < d0) { d0 = d3; l = i2; i1 = i3; j1 = k2; k1 = j3 % 2; } } } } } } } int k5 = l; int j2 = i1; k2 = j1; int l5 = k1 % 2; int l2 = 1 - l5; if (k1 % 4 >= 2) { l5 = -l5; l2 = -l2; } boolean flag; if (d0 < 0.0D) { if (i1 < 70) { i1 = 70; } if (i1 > this.worldServerInstance.getActualHeight() - 10) { i1 = this.worldServerInstance.getActualHeight() - 10; } j2 = i1; for (i3 = -1; i3 <= 1; ++i3) { for (j3 = 1; j3 < 3; ++j3) { for (k3 = -1; k3 < 3; ++k3) { l3 = k5 + (j3 - 1) * l5 + i3 * l2; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2 - i3 * l5; flag = k3 < 0; this.worldServerInstance.setBlock(l3, i4, j4, flag ? MainRegistry.blockKryptoniteOre : Blocks.air); } } } } for (i3 = 0; i3 < 4; ++i3) { for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; flag = j3 == 0 || j3 == 3 || k3 == -1 || k3 == 3; this.worldServerInstance.setBlock(l3, i4, j4, (Block)(flag ? MainRegistry.blockKryptoniteOre : MainRegistry.blockKryptonitePortal), 0, 2); } } for (j3 = 0; j3 < 4; ++j3) { for (k3 = -1; k3 < 4; ++k3) { l3 = k5 + (j3 - 1) * l5; i4 = j2 + k3; j4 = k2 + (j3 - 1) * l2; this.worldServerInstance.notifyBlocksOfNeighborChange(l3, i4, j4, this.worldServerInstance.getBlock(l3, i4, j4)); } } } 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(); Teleporter.PortalPosition portalposition = (Teleporter.PortalPosition)this.destinationCoordinateCache.getValueByKey(olong.longValue()); if (portalposition == null || portalposition.lastUpdateTime < j) { iterator.remove(); this.destinationCoordinateCache.remove(olong.longValue()); } } } } public class PortalPosition extends ChunkCoordinates { /** * The worldtime at which this PortalPosition was last verified */ public long lastUpdateTime; private static final String __OBFID = "CL_00000154"; public PortalPosition(int par2, int par3, int par4, long par5) { super(par2, par3, par4); this.lastUpdateTime = par5; } } } I believe thats all the classes. Thanks in advance
×
×
  • Create New...

Important Information

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