1

Custom dimension problem [Forge 1.5]

Strum355's Avatar Strum3554/20/13 8:27 am
6/21/2013 7:27 pm
duke_Frans's Avatar duke_Frans
Hey guys,
im working on a mod with a few people and i have to make a dimension for it. Now, everything seems to be working fine, except, the instant i land in the dimension, im standing in a nether portal and get teleported to the nether: https://www.youtube.com/watch?v=AdSwYc7fLuY&list=HL1366459232&feature=mh_lolz

heres the source code:
RainbowPortal.java

package mods.splash.blocks;

import java.util.Random;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import mods.splash.TeleporterRainbow;
import mods.splash.splash;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBreakable;
import net.minecraft.block.BlockPortal;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemMonsterPlacer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;


public class RainbowPortal extends BlockPortal {

public RainbowPortal(int id)
{
super(id);
this.setCreativeTab(CreativeTabs.tabBlock);
}

public void registerIcons(IconRegister par1IconRegister)
{
this.blockIcon = par1IconRegister.registerIcon("splash:RainbowPortal");
}

public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
{

}

public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
{
if (par5Entity.ridingEntity == null && par5Entity.riddenByEntity == null)
{
if (par5Entity instanceof EntityPlayerMP)
{
EntityPlayerMP thePlayer = (EntityPlayerMP) par5Entity;
if (par5Entity.dimension != splash.rainbowDimension)
{
thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, splash.rainbowDimension);
}
else
{
thePlayer.mcServer.getConfigurationManager().transferPlayerToDimension(thePlayer, 0, new TeleporterRainbow(thePlayer.mcServer.worldServerForDimension(0)));
}
}
}
}



public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
{

}

public void onNeighborBlockChange(World par1World, int par2, int par3, int par4, int par5)
{
byte b0 = 0;
byte b1 = 1;

if (par1World.getBlockId(par2 - 1, par3, par4) == this.blockID || par1World.getBlockId(par2 + 1, par3, par4) == this.blockID)
{
b0 = 1;
b1 = 0;
}

int i1;

for (i1 = par3; par1World.getBlockId(par2, i1 - 1, par4) == this.blockID; --i1)
{
;
}

if (par1World.getBlockId(par2, i1 - 1, par4) != Block.sandStone.blockID)
{
par1World.setBlockToAir(par2, par3, par4);
}
else
{
int j1;

for (j1 = 1; j1 < 4 && par1World.getBlockId(par2, i1 + j1, par4) == this.blockID; ++j1)
{
;
}

if (j1 == 3 && par1World.getBlockId(par2, i1 + j1, par4) == Block.sandStone.blockID)
{
boolean flag = par1World.getBlockId(par2 - 1, par3, par4) == this.blockID || par1World.getBlockId(par2 + 1, par3, par4) == this.blockID;
boolean flag1 = par1World.getBlockId(par2, par3, par4 - 1) == this.blockID || par1World.getBlockId(par2, par3, par4 + 1) == this.blockID;

if (flag && flag1)
{
par1World.setBlockToAir(par2, par3, par4);
}
else
{
if ((par1World.getBlockId(par2 + b0, par3, par4 + b1) != Block.sandStone.blockID || par1World.getBlockId(par2 - b0, par3, par4 - b1) != this.blockID) && (par1World.getBlockId(par2 - b0, par3, par4 - b1) != Block.sandStone.blockID || par1World.getBlockId(par2 + b0, par3, par4 + b1) != this.blockID))
{
par1World.setBlockToAir(par2, par3, par4);
}
}
}
else
{
par1World.setBlockToAir(par2, par3, par4);
}
}
}

}


WorldProviderRainbow.java

package mods.splash;

import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChunkCoordinates;
import net.minecraft.world.EnumGameType;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.WorldProviderHell;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManagerHell;
import net.minecraft.world.chunk.IChunkProvider;

public class WorldProviderRainbow extends WorldProvider{

public String getDimensionName()
{
return "Rainbow Land";
}

public boolean canRespawnHere()
{
return false;
}

public void registerWorldChunkManager()
{
this.worldChunkMgr = new WorldChunkManagerHell(splash.rainbowLand, 0.8F, 0.1F);
}

@Override
public IChunkProvider createChunkGenerator()
{
return new ChunkProviderRainbow(worldObj, worldObj.getSeed(), true);
}

public float getCloudHeight()
{
return 200.0F;
}

public String getWelcomeMessage()
{
return "Entering the Rainbow Land";
}

public String getDepartureMessage()
{
return "Leaving the Rainbow Land";
}

public boolean canCoordinateBeSpawn(int par1, int par2)
{
return false;
}

public ChunkCoordinates getEntrancePortalLocation()
{
return null;
}

public void setDimension(int dim)
{
this.dimensionId = dim;
}

public String getSaveFolder()
{
return (dimensionId == 0 ? null : "DIM" + dimensionId);
}

public double getMovementFactor()
{

return 1.0;
}

public ChunkCoordinates getRandomizedSpawnPoint()
{
ChunkCoordinates chunkcoordinates = new ChunkCoordinates(this.worldObj.getSpawnPoint());

boolean isAdventure = worldObj.getWorldInfo().getGameType() == EnumGameType.ADVENTURE;
int spawnFuzz = terrainType.getSpawnFuzz();
int spawnFuzzHalf = spawnFuzz / 2;

if (!hasNoSky && !isAdventure)
{
chunkcoordinates.posX += this.worldObj.rand.nextInt(spawnFuzz) - spawnFuzzHalf;
chunkcoordinates.posZ += this.worldObj.rand.nextInt(spawnFuzz) - spawnFuzzHalf;
chunkcoordinates.posY = this.worldObj.getTopSolidOrLiquidBlock(chunkcoordinates.posX, chunkcoordinates.posZ);
}

return chunkcoordinates;
}

public int getRespawnDimension(EntityPlayerMP player){
return 25;
}


}


WorldChunkManagerRainbow.java

package mods.splash;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.BiomeCache;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.gen.layer.GenLayer;
import net.minecraft.world.gen.layer.IntCache;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.terraingen.WorldTypeEvent;

public class WorldChunkManagerRainbow extends WorldChunkManager
{
public static ArrayList<BiomeGenBase> allowedBiomes = new ArrayList<BiomeGenBase>(Arrays.asList(splash.rainbowLand));
public static BiomeGenBase[] generateBiomes = new BiomeGenBase[]{splash.rainbowLand};
private GenLayer genBiomes;

/** A GenLayer containing the indices into BiomeGenBase.biomeList[] */
private GenLayer biomeIndexLayer;

/** The BiomeCache object for this world. */
private BiomeCache biomeCache;

/** A list of biomes that the player can spawn in. */
private List biomesToSpawnIn;

protected WorldChunkManagerRainbow()
{
this.biomeCache = new BiomeCache(this);
this.biomesToSpawnIn = new ArrayList();
this.biomesToSpawnIn.addAll(allowedBiomes);
}

public WorldChunkManagerRainbow(boolean cons)
{
//Nothing
}

public WorldChunkManagerRainbow(long par1, WorldType par3WorldType)
{
this();
GenLayer[] agenlayer = GenLayer.initializeAllBiomeGenerators(par1, par3WorldType);
agenlayer = getModdedBiomeGenerators(par3WorldType, par1, agenlayer);
this.genBiomes = agenlayer[0];
this.biomeIndexLayer = agenlayer[1];
}

public WorldChunkManagerRainbow(World par1World)
{
this(par1World.getSeed(), par1World.getWorldInfo().getTerrainType());
}

/**
* Gets the list of valid biomes for the player to spawn in.
*/
@Override
public List getBiomesToSpawnIn()
{
return this.biomesToSpawnIn;
}

/**
* Returns the BiomeGenBase related to the x, z position on the world.
*/
@Override
public BiomeGenBase getBiomeGenAt(int par1, int par2)
{
return this.biomeCache.getBiomeGenAt(par1, par2);
}

/**
* Returns a list of rainfall values for the specified blocks. Args: listToReuse, x, z, width, length.
*/
@Override
public float[] getRainfall(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)
{
IntCache.resetIntCache();

if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
{
par1ArrayOfFloat = new float[par4 * par5];
}

int[] aint = this.biomeIndexLayer.getInts(par2, par3, par4, par5);

for (int i1 = 0; i1 < par4 * par5; ++i1)
{
float f = (float)BiomeGenBase.biomeList[aint[i1]].getIntRainfall() / 65536.0F;

if (f > 1.0F)
{
f = 1.0F;
}

par1ArrayOfFloat[i1] = f;
}

return par1ArrayOfFloat;
}

@SideOnly(Side.CLIENT)

/**
* Return an adjusted version of a given temperature based on the y height
*/
@Override
public float getTemperatureAtHeight(float par1, int par2)
{
return par1;
}

/**
* Returns a list of temperatures to use for the specified blocks. Args: listToReuse, x, y, width, length
*/
@Override
public float[] getTemperatures(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)
{
IntCache.resetIntCache();

if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
{
par1ArrayOfFloat = new float[par4 * par5];
}

int[] aint = this.biomeIndexLayer.getInts(par2, par3, par4, par5);

for (int i1 = 0; i1 < par4 * par5; ++i1)
{
float f = (float)BiomeGenBase.biomeList[aint[i1]].getIntTemperature() / 65536.0F;

if (f > 1.0F)
{
f = 1.0F;
}

par1ArrayOfFloat[i1] = f;
}

return par1ArrayOfFloat;
}

/**
* Returns an array of biomes for the location input.
*/
@Override
public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
{
IntCache.resetIntCache();

if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
{
par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
}

int[] aint = this.genBiomes.getInts(par2, par3, par4, par5);

for (int i1 = 0; i1 < par4 * par5; ++i1)
{
par1ArrayOfBiomeGenBase[i1] = BiomeGenBase.biomeList[aint[i1]];
}

return par1ArrayOfBiomeGenBase;
}

/**
* Returns biomes to use for the blocks and loads the other data like temperature and humidity onto the
* WorldChunkManager Args: oldBiomeList, x, z, width, depth
*/
@Override
public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
{
return this.getBiomeGenAt(par1ArrayOfBiomeGenBase, par2, par3, par4, par5, true);
}

/**
* Return a list of biomes for the specified blocks. Args: listToReuse, x, y, width, length, cacheFlag (if false,
* don't check biomeCache to avoid infinite loop in BiomeCacheBlock)
*/
@Override
public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5, boolean par6)
{
IntCache.resetIntCache();

if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
{
par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
}

if (par6 && par4 == 16 && par5 == 16 && (par2 & 15) == 0 && (par3 & 15) == 0)
{
BiomeGenBase[] abiomegenbase1 = this.biomeCache.getCachedBiomes(par2, par3);
System.arraycopy(abiomegenbase1, 0, par1ArrayOfBiomeGenBase, 0, par4 * par5);
return par1ArrayOfBiomeGenBase;
}
else
{
int[] aint = this.biomeIndexLayer.getInts(par2, par3, par4, par5);

for (int i1 = 0; i1 < par4 * par5; ++i1)
{
par1ArrayOfBiomeGenBase[i1] = BiomeGenBase.biomeList[aint[i1]];
}

return par1ArrayOfBiomeGenBase;
}
}

/**
* checks given Chunk's Biomes against List of allowed ones
*/
@Override
public boolean areBiomesViable(int par1, int par2, int par3, List par4List)
{
IntCache.resetIntCache();
int l = par1 - par3 >> 2;
int i1 = par2 - par3 >> 2;
int j1 = par1 + par3 >> 2;
int k1 = par2 + par3 >> 2;
int l1 = j1 - l + 1;
int i2 = k1 - i1 + 1;
int[] aint = this.genBiomes.getInts(l, i1, l1, i2);

for (int j2 = 0; j2 < l1 * i2; ++j2)
{
BiomeGenBase biomegenbase = BiomeGenBase.biomeList[aint[j2]];

if (!par4List.contains(biomegenbase))
{
return false;
}
}

return true;
}

/**
* Finds a valid position within a range, that is in one of the listed biomes. Searches {par1,par2} +-par3 blocks.
* Strongly favors positive y positions.
*/
@Override
public ChunkPosition findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random)
{
IntCache.resetIntCache();
int l = par1 - par3 >> 2;
int i1 = par2 - par3 >> 2;
int j1 = par1 + par3 >> 2;
int k1 = par2 + par3 >> 2;
int l1 = j1 - l + 1;
int i2 = k1 - i1 + 1;
int[] aint = this.genBiomes.getInts(l, i1, l1, i2);
ChunkPosition chunkposition = null;
int j2 = 0;

for (int k2 = 0; k2 < l1 * i2; ++k2)
{
int l2 = l + k2 % l1 << 2;
int i3 = i1 + k2 / l1 << 2;
BiomeGenBase biomegenbase = BiomeGenBase.biomeList[aint[k2]];

if (par4List.contains(biomegenbase) && (chunkposition == null || par5Random.nextInt(j2 + 1) == 0))
{
chunkposition = new ChunkPosition(l2, 0, i3);
++j2;
}
}

return chunkposition;
}

/**
* Calls the WorldChunkManager's biomeCache.cleanupCache()
*/
@Override
public void cleanupCache()
{
this.biomeCache.cleanupCache();
}
@Override
public GenLayer[] getModdedBiomeGenerators(WorldType worldType, long seed, GenLayer[] original)
{
WorldTypeEvent.InitBiomeGens event = new WorldTypeEvent.InitBiomeGens(worldType, seed, original);
MinecraftForge.TERRAIN_GEN_BUS.post(event);
return event.newBiomeGens;
}
}


TeleporterRainbow.java
package mods.splash;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.util.Direction;
import net.minecraft.util.LongHashMap;
import net.minecraft.util.MathHelper;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.PortalPosition;
import net.minecraft.world.Teleporter;
import net.minecraft.world.WorldServer;

public class TeleporterRainbow extends Teleporter
{
private final WorldServer worldServerInstance;
private final Random random;
private final LongHashMap field_85191_c = new LongHashMap();
private final List field_85190_d = new ArrayList();

public TeleporterRainbow(WorldServer par1WorldServer)
{
super(par1WorldServer);
this.worldServerInstance = par1WorldServer;
this.random = new Random(par1WorldServer.getSeed());
}




@Override
public void func_85189_a(long par1)
{
if (par1 % 100L == 0L)
{
Iterator var3 = this.field_85190_d.iterator();
long var4 = par1 - 600L;

while (var3.hasNext())
{
Long var6 = (Long) var3.next();
PortalPosition var7 = (PortalPosition) this.field_85191_c.getValueByKey(var6.longValue());

if (var7 == null || var7.field_85087_d < var4)
{
var3.remove();
this.field_85191_c.remove(var6.longValue());
}
}
}
}

}


ChunkProviderRainbow.java

package mods.splash;

import java.util.List;

import net.minecraft.entity.EnumCreatureType;
import net.minecraft.util.IProgressUpdate;
import net.minecraft.world.ChunkPosition;
import net.minecraft.world.World;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.CAVE;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.MINESHAFT;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.RAVINE;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.SCATTERED_FEATURE;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.STRONGHOLD;
import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.VILLAGE;
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.BlockSand;
import net.minecraft.entity.EnumCreatureType;
import net.minecraft.util.IProgressUpdate;
import net.minecraft.util.MathHelper;
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.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.MapGenScatteredFeature;
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.MapGenStronghold;
import net.minecraft.world.gen.structure.MapGenVillage;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.Event.Result;
import net.minecraftforge.event.terraingen.ChunkProviderEvent;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
import net.minecraftforge.event.terraingen.TerrainGen;

public class ChunkProviderRainbow implements IChunkProvider {

/** RNG. */
private Random rand;

/** A NoiseGeneratorOctaves used in generating terrain */
private NoiseGeneratorOctaves noiseGen1;

/** A NoiseGeneratorOctaves used in generating terrain */
private NoiseGeneratorOctaves noiseGen2;

/** A NoiseGeneratorOctaves used in generating terrain */
private NoiseGeneratorOctaves noiseGen3;

/** A NoiseGeneratorOctaves used in generating terrain */
private NoiseGeneratorOctaves noiseGen4;

/** A NoiseGeneratorOctaves used in generating terrain */
public NoiseGeneratorOctaves noiseGen5;

/** A NoiseGeneratorOctaves used in generating terrain */
public NoiseGeneratorOctaves noiseGen6;
public NoiseGeneratorOctaves mobSpawnerNoise;

/** Reference to the World object. */
private World worldObj;

/** are map structures going to be generated (e.g. strongholds) */
private final boolean mapFeaturesEnabled;

/** Holds the overall noise array used in chunk generation */
private double[] noiseArray;
private double[] stoneNoise = new double[256];
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;

/** A double array that hold terrain noise from noiseGen3 */
double[] noise3;

/** A double array that hold terrain noise */
double[] noise1;

/** A double array that hold terrain noise from noiseGen2 */
double[] noise2;

/** A double array that hold terrain noise from noiseGen5 */
double[] noise5;

/** A double array that holds terrain noise from noiseGen6 */
double[] noise6;

/**
* Used to store the 5x5 parabolic field that is used during terrain generation.
*/
float[] parabolicField;
int[][] field_73219_j = new int[32][32];

{
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 ChunkProviderRainbow(World par1World, long par2, boolean par4)
{
this.worldObj = par1World;
this.mapFeaturesEnabled = par4;
this.rand = new Random(par2);
this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16);
this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16);
this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8);
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, 8);

NoiseGeneratorOctaves[] noiseGens = {noiseGen1, noiseGen2, noiseGen3, noiseGen4, noiseGen5, noiseGen6, mobSpawnerNoise};
noiseGens = TerrainGen.getModdedNoiseGenerators(par1World, this.rand, noiseGens);
this.noiseGen1 = noiseGens[0];
this.noiseGen2 = noiseGens[1];
this.noiseGen3 = noiseGens[2];
this.noiseGen4 = noiseGens[3];
this.noiseGen5 = noiseGens[4];
this.noiseGen6 = noiseGens[5];
this.mobSpawnerNoise = noiseGens[6];
}

/**
* Generates the shape of the terrain for the chunk though its all stone though the water is frozen if the
* temperature is low enough
*/
public void generateTerrain(int par1, int par2, byte[] par3ArrayOfByte)
{
byte var4 = 4;
byte var5 = 16;
byte var6 = 63;
int var7 = var4 + 1;
byte var8 = 17;
int var9 = var4 + 1;
this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, var7 + 5, var9 + 5);
this.noiseArray = this.initializeNoiseField(this.noiseArray, par1 * var4, 0, par2 * var4, var7, var8, var9);

for (int var10 = 0; var10 < var4; ++var10)
{
for (int var11 = 0; var11 < var4; ++var11)
{
for (int var12 = 0; var12 < var5; ++var12)
{
double var13 = 0.125D;
double var15 = this.noiseArray[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 0];
double var17 = this.noiseArray[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 0];
double var19 = this.noiseArray[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 0];
double var21 = this.noiseArray[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 0];
double var23 = (this.noiseArray[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 1] - var15) * var13;
double var25 = (this.noiseArray[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 1] - var17) * var13;
double var27 = (this.noiseArray[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 1] - var19) * var13;
double var29 = (this.noiseArray[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 1] - var21) * var13;

for (int var31 = 0; var31 < 8; ++var31)
{
double var32 = 0.25D;
double var34 = var15;
double var36 = var17;
double var38 = (var19 - var15) * var32;
double var40 = (var21 - var17) * var32;

for (int var42 = 0; var42 < 4; ++var42)
{
int var43 = var42 + var10 * 4 << 11 | 0 + var11 * 4 << 7 | var12 * 8 + var31;
short var44 = 128;
var43 -= var44;
double var45 = 0.25D;
double var49 = (var36 - var34) * var45;
double var47 = var34 - var49;

for (int var51 = 0; var51 < 4; ++var51)
{
if ((var47 += var49) > 0.0D)
{
par3ArrayOfByte[var43 += var44] = (byte)Block.stone.blockID;
}
else if (var12 * 8 + var31 < var6)
{
par3ArrayOfByte[var43 += var44] = (byte)Block.waterStill.blockID;
}
else
{
par3ArrayOfByte[var43 += var44] = 0;
}
}

var34 += var38;
var36 += var40;
}

var15 += var23;
var17 += var25;
var19 += var27;
var21 += var29;
}
}
}
}
}

/**
* Replaces the stone that was placed in with blocks that match the biome
*/
public void replaceBlocksForBiome(int par1, int par2, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase)
{
ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, par1, par2, par3ArrayOfByte, par4ArrayOfBiomeGenBase);
MinecraftForge.EVENT_BUS.post(event);
if (event.getResult() == Result.DENY) return;

byte var5 = 63;
double var6 = 0.03125D;
this.stoneNoise = this.noiseGen4.generateNoiseOctaves(this.stoneNoise, par1 * 16, par2 * 16, 0, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D);

for (int var8 = 0; var8 < 16; ++var8)
{
for (int var9 = 0; var9 < 16; ++var9)
{
BiomeGenBase var10 = par4ArrayOfBiomeGenBase[var9 + var8 * 16];
float var11 = var10.getFloatTemperature();
int var12 = (int)(this.stoneNoise[var8 + var9 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D);
int var13 = -1;
byte var14 = var10.topBlock;
byte var15 = var10.fillerBlock;

for (int var16 = 127; var16 >= 0; --var16)
{
int var17 = (var9 * 16 + var8) * 128 + var16;

if (var16 <= 0 + this.rand.nextInt(5))
{
par3ArrayOfByte[var17] = (byte)Block.bedrock.blockID;
}
else
{
byte var18 = par3ArrayOfByte[var17];

if (var18 == 0)
{
var13 = -1;
}
else if (var18 == Block.stone.blockID)
{
if (var13 == -1)
{
if (var12 <= 0)
{
var14 = 0;
var15 = (byte)Block.stone.blockID;
}
else if (var16 >= var5 - 4 && var16 <= var5 + 1)
{
var14 = var10.topBlock;
var15 = var10.fillerBlock;
}

if (var16 < var5 && var14 == 0)
{
if (var11 < 0.15F)
{
var14 = (byte)Block.ice.blockID;
}
else
{
var14 = (byte)Block.waterStill.blockID;
}
}

var13 = var12;

if (var16 >= var5 - 1)
{
par3ArrayOfByte[var17] = var14;
}
else
{
par3ArrayOfByte[var17] = var15;
}
}
else if (var13 > 0)
{
--var13;
par3ArrayOfByte[var17] = var15;

if (var13 == 0 && var15 == Block.sand.blockID)
{
var13 = this.rand.nextInt(4);
var15 = (byte)Block.sandStone.blockID;
}
}
}
}
}
}
}
}

/**
* loads or generates the chunk at the chunk location specified
*/
@Override
public Chunk loadChunk(int par1, int par2)
{
return this.provideChunk(par1, par2);
}

/**
* Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
* specified chunk from the map seed and chunk seed
*/
@Override
public Chunk provideChunk(int par1, int par2)
{
this.rand.setSeed((long)par1 * 341873128712L + (long)par2 * 132897987541L);
byte[] var3 = new byte[32768];
this.generateTerrain(par1, par2, var3);
this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);
this.replaceBlocksForBiome(par1, par2, var3, this.biomesForGeneration);
this.caveGenerator.generate(this, this.worldObj, par1, par2, var3);
this.ravineGenerator.generate(this, this.worldObj, par1, par2, var3);

if (this.mapFeaturesEnabled)
{
this.mineshaftGenerator.generate(this, this.worldObj, par1, par2, var3);
this.villageGenerator.generate(this, this.worldObj, par1, par2, var3);
this.strongholdGenerator.generate(this, this.worldObj, par1, par2, var3);
this.scatteredFeatureGenerator.generate(this, this.worldObj, par1, par2, var3);
}

Chunk var4 = new Chunk(this.worldObj, var3, par1, par2);
byte[] var5 = var4.getBiomeArray();

for (int var6 = 0; var6 < var5.length; ++var6)
{
var5[var6] = (byte)this.biomesForGeneration[var6].biomeID;
}

var4.generateSkylightMap();
return var4;
}

/**
* generates a subset of the level's terrain data. Takes 7 arguments: the [empty] noise array, the position, and the
* size.
*/
private double[] initializeNoiseField(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7)
{
ChunkProviderEvent.InitNoiseField event = new ChunkProviderEvent.InitNoiseField(this, par1ArrayOfDouble, par2, par3, par4, par5, par6, par7);
MinecraftForge.EVENT_BUS.post(event);
if (event.getResult() == Result.DENY) return event.noisefield;

if (par1ArrayOfDouble == null)
{
par1ArrayOfDouble = new double[par5 * par6 * par7];
}

if (this.parabolicField == null)
{
this.parabolicField = new float[25];

for (int var8 = -2; var8 <= 2; ++var8)
{
for (int var9 = -2; var9 <= 2; ++var9)
{
float var10 = 10.0F / MathHelper.sqrt_float((float)(var8 * var8 + var9 * var9) + 0.2F);
this.parabolicField[var8 + 2 + (var9 + 2) * 5] = var10;
}
}
}

double var44 = 684.412D;
double var45 = 684.412D;
this.noise5 = this.noiseGen5.generateNoiseOctaves(this.noise5, par2, par4, par5, par7, 1.121D, 1.121D, 0.5D);
this.noise6 = this.noiseGen6.generateNoiseOctaves(this.noise6, par2, par4, par5, par7, 200.0D, 200.0D, 0.5D);
this.noise3 = this.noiseGen3.generateNoiseOctaves(this.noise3, par2, par3, par4, par5, par6, par7, var44 / 80.0D, var45 / 160.0D, var44 / 80.0D);
this.noise1 = this.noiseGen1.generateNoiseOctaves(this.noise1, par2, par3, par4, par5, par6, par7, var44, var45, var44);
this.noise2 = this.noiseGen2.generateNoiseOctaves(this.noise2, par2, par3, par4, par5, par6, par7, var44, var45, var44);
boolean var43 = false;
boolean var42 = false;
int var12 = 0;
int var13 = 0;

for (int var14 = 0; var14 < par5; ++var14)
{
for (int var15 = 0; var15 < par7; ++var15)
{
float var16 = 0.0F;
float var17 = 0.0F;
float var18 = 0.0F;
byte var19 = 2;
BiomeGenBase var20 = this.biomesForGeneration[var14 + 2 + (var15 + 2) * (par5 + 5)];

for (int var21 = -var19; var21 <= var19; ++var21)
{
for (int var22 = -var19; var22 <= var19; ++var22)
{
BiomeGenBase var23 = this.biomesForGeneration[var14 + var21 + 2 + (var15 + var22 + 2) * (par5 + 5)];
float var24 = this.parabolicField[var21 + 2 + (var22 + 2) * 5] / (var23.minHeight + 2.0F);

if (var23.minHeight > var20.minHeight)
{
var24 /= 2.0F;
}

var16 += var23.maxHeight * var24;
var17 += var23.minHeight * var24;
var18 += var24;
}
}

var16 /= var18;
var17 /= var18;
var16 = var16 * 0.9F + 0.1F;
var17 = (var17 * 4.0F - 1.0F) / 8.0F;
double var47 = this.noise6[var13] / 8000.0D;

if (var47 < 0.0D)
{
var47 = -var47 * 0.3D;
}

var47 = var47 * 3.0D - 2.0D;

if (var47 < 0.0D)
{
var47 /= 2.0D;

if (var47 < -1.0D)
{
var47 = -1.0D;
}

var47 /= 1.4D;
var47 /= 2.0D;
}
else
{
if (var47 > 1.0D)
{
var47 = 1.0D;
}

var47 /= 8.0D;
}

++var13;

for (int var46 = 0; var46 < par6; ++var46)
{
double var48 = (double)var17;
double var26 = (double)var16;
var48 += var47 * 0.2D;
var48 = var48 * (double)par6 / 16.0D;
double var28 = (double)par6 / 2.0D + var48 * 4.0D;
double var30 = 0.0D;
double var32 = ((double)var46 - var28) * 12.0D * 128.0D / 128.0D / var26;

if (var32 < 0.0D)
{
var32 *= 4.0D;
}

double var34 = this.noise1[var12] / 512.0D;
double var36 = this.noise2[var12] / 512.0D;
double var38 = (this.noise3[var12] / 10.0D + 1.0D) / 2.0D;

if (var38 < 0.0D)
{
var30 = var34;
}
else if (var38 > 1.0D)
{
var30 = var36;
}
else
{
var30 = var34 + (var36 - var34) * var38;
}

var30 -= var32;

if (var46 > par6 - 4)
{
double var40 = (double)((float)(var46 - (par6 - 4)) / 3.0F);
var30 = var30 * (1.0D - var40) + -10.0D * var40;
}

par1ArrayOfDouble[var12] = var30;
++var12;
}
}
}

return par1ArrayOfDouble;
}

/**
* Checks to see if a chunk exists at x, y
*/
public boolean chunkExists(int par1, int par2)
{
return true;
}

/**
* Populates chunk with ores etc etc
*/
public void populate(IChunkProvider par1IChunkProvider, int par2, int par3)
{
BlockSand.fallInstantly = true;
int var4 = par2 * 16;
int var5 = par3 * 16;
BiomeGenBase var6 = this.worldObj.getBiomeGenForCoords(var4 + 16, var5 + 16);
this.rand.setSeed(this.worldObj.getSeed());
long var7 = this.rand.nextLong() / 2L * 2L + 1L;
long var9 = this.rand.nextLong() / 2L * 2L + 1L;
this.rand.setSeed((long)par2 * var7 + (long)par3 * var9 ^ this.worldObj.getSeed());
boolean var11 = false;

MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, worldObj, rand, par2, par3, var11));

if (this.mapFeaturesEnabled)
{
this.mineshaftGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);
var11 = this.villageGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);
this.strongholdGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);
this.scatteredFeatureGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);
}

int var12;
int var13;
int var14;

if (TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, var11, LAKE) &&
!var11 && this.rand.nextInt(4) == 0)
{
var12 = var4 + this.rand.nextInt(16) + 8;
var13 = this.rand.nextInt(128);
var14 = var5 + this.rand.nextInt(16) + 8;
(new WorldGenLakes(Block.waterStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14);
}

if (TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, var11, LAVA) &&
!var11 && this.rand.nextInt(8) == 0)
{
var12 = var4 + this.rand.nextInt(16) + 8;
var13 = this.rand.nextInt(this.rand.nextInt(120) + 8);
var14 = var5 + this.rand.nextInt(16) + 8;

if (var13 < 63 || this.rand.nextInt(10) == 0)
{
(new WorldGenLakes(Block.lavaStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14);
}
}

boolean doGen = TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, var11, DUNGEON);
for (var12 = 0; doGen && var12 < 8; ++var12)
{
var13 = var4 + this.rand.nextInt(16) + 8;
var14 = this.rand.nextInt(128);
int var15 = var5 + this.rand.nextInt(16) + 8;

if ((new WorldGenDungeons()).generate(this.worldObj, this.rand, var13, var14, var15))
{
;
}
}

var6.decorate(this.worldObj, this.rand, var4, var5);
SpawnerAnimals.performWorldGenSpawning(this.worldObj, var6, var4 + 8, var5 + 8, 16, 16, this.rand);
var4 += 8;
var5 += 8;

doGen = TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, var11, ICE);
for (var12 = 0; doGen && var12 < 16; ++var12)
{
for (var13 = 0; var13 < 16; ++var13)
{
var14 = this.worldObj.getPrecipitationHeight(var4 + var12, var5 + var13);

if (this.worldObj.isBlockFreezable(var12 + var4, var14 - 1, var13 + var5))
{
this.worldObj.setBlock(var12 + var4, var14 - 1, var13 + var5, Block.ice.blockID);
}

if (this.worldObj.canSnowAt(var12 + var4, var14, var13 + var5))
{
this.worldObj.setBlock(var12 + var4, var14, var13 + var5, Block.snow.blockID);
}
}
}

MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, worldObj, rand, par2, par3, var11));

BlockSand.fallInstantly = false;
}

/**
* Two modes of operation: if passed true, save all Chunks in one go. If passed false, save up to two chunks.
* Return true if all chunks have been saved.
*/
public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate)
{
return true;
}

/**
* Unloads the 100 oldest chunks from memory, due to a bug with chunkSet.add() never being called it thinks the list
* is always empty and will not remove any chunks.
*/
public boolean unload100OldestChunks()
{
return false;
}

/**
* Returns if the IChunkProvider supports saving.
*/
public boolean canSave()
{
return true;
}

/**
* Converts the instance data to a readable string.
*/
public String makeString()
{
return "RandomLevelSource";
}

/**
* Returns a list of creatures of the specified type that can spawn at the given location.
*/
public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4)
{
BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(par2, par4);
return var5 == null ? null : (var5 == BiomeGenBase.swampland && par1EnumCreatureType == EnumCreatureType.monster && this.scatteredFeatureGenerator.hasStructureAt(par2, par3, par4) ? this.scatteredFeatureGenerator.getScatteredFeatureSpawnList() : var5.getSpawnableList(par1EnumCreatureType));
}

/**
* Returns the location of the closest structure of the specified type. If not found returns null.
*/
public ChunkPosition findClosestStructure(World par1World, String par2Str, int par3, int par4, int par5)
{
return "Stronghold".equals(par2Str) && this.strongholdGenerator != null ? this.strongholdGenerator.getNearestInstance(par1World, par3, par4, par5) : null;
}

public int getLoadedChunkCount()
{
return 0;
}

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 boolean unloadQueuedChunks() {
// TODO Auto-generated method stub
return false;
}

}


occasionally, this error comes up, but the game continues:
Click to reveal
2013-04-20 12:56:28 [INFO] [ForgeModLoader] Unloading dimension 25
2013-04-20 12:56:28 [SEVERE] [ForgeModLoader] Detected leaking worlds in memory. There are 2 worlds that appear to be persisting. A mod is likely caching the world incorrectly

2013-04-20 12:56:28 [SEVERE] [ForgeModLoader] The world 1051694a (New World) has leaked.


If anything else is needed, please tell me, thanks
Posted by Strum355's Avatar
Strum355
Level 6 : Apprentice Miner
10

Create an account or sign in to comment.

11

1
06/21/2013 7:27 pm
Level 66 : High Grandmaster Modder
duke_Frans
duke_Frans's Avatar
Very easy mistake you made here.
The normal teleporter class which you extended is by default set to have a nether portal in it, just copy over the whole teleporter class and change the nether portal block to urs.
1
06/15/2013 10:14 pm
Level 1 : New Miner
eliteGhost910234
eliteGhost910234's Avatar
Do you mind if I use this code as a learning device and Implament it into my mod but change as much up as I need to? I am in need for either example code or a tut. for a dimension but can't find one. If its okay with you, I would like to copy and paste this code and change everything I need to?
1
06/17/2013 10:31 am
Level 6 : Apprentice Miner
Strum355
Strum355's Avatar
Sure, go ahead. It may or may not work haha
1
04/20/2013 6:35 pm
Level 29 : Expert Chef
quitefrank_ly
quitefrank_ly's Avatar
Moved to Modding

-VoV
1
04/20/2013 4:31 pm
Level 6 : Apprentice Miner
Strum355
Strum355's Avatar
Nvm my friend solved it my portal cool down code didnt work but his did
1
04/20/2013 9:47 am
Level 52 : Grandmaster Modder
Magnet_man16
Magnet_man16's Avatar
As your problem is with being in contact with the world i doubt that its anything but your TeleporterRainbow.java. However it could be a crash which returns the player or the world mis loading. However if your teleporter class generates a portal maybe its generating it in the wrong place. Or exactly on the player.

By watching your video i would suggest spawning the player out of the portal to see if thats the problem.

Please send me a copy of the compiled class files so i can test the mod my self to see if i can avoid the return.
1
04/20/2013 3:05 pm
Level 6 : Apprentice Miner
Strum355
Strum355's Avatar
I just have the portal block itself. Also, i spawn in a nether portal, strangely enough, and other nether portal frames have been seen spawning too.

Ill send it to you tomorrow when im on my pc next
1
04/20/2013 8:43 am
Level 38 : Artisan Programmer
deadrecon98
deadrecon98's Avatar
Dude. You just gave away your code -_-
1
04/20/2013 9:32 am
Level 6 : Apprentice Miner
Strum355
Strum355's Avatar
1. The answer might lie in the code itself, so people willing to help can point things out
2. Have you never heard of open source?
1
04/20/2013 9:37 am
Level 52 : Grandmaster Modder
Magnet_man16
Magnet_man16's Avatar
Thats right! Tell that bitch. Open source and many people can help. Like me however i have no experience with forge but i have made mods... so..
1
04/20/2013 9:39 am
Level 6 : Apprentice Miner
Strum355
Strum355's Avatar
Haha considering i have a linux mint banner in my signature youd think people would realise i support open source but still, if you know anyone who has dimension knowledge send 'em my way. Its really fustrating to know i got it before but not anymor
Planet Minecraft

Website

© 2010 - 2024
www.planetminecraft.com

Welcome