Jump to content

Recommended Posts

Posted

Hello all, got my custom dimension to work, with custom trees, grass, dirt rock, ores, plants, etc. But not, I am walking around and I see a hole in the ground, I think, "Yes, finally a cave!" and when I fly down there I see.... The dirt has a hole in it, but the rock was not replaced in the cave generation leaving me with this:

 

2013-110.jpg

 

Anyone know what is going on with this? I find it slightly weird because when I originally started working on the dimension and used my custom rock, grass, dirt, it generated them perfectely (I even got one that was far batter than any I have seen in vanilla) and somewhere in the process of me adding in trees/plants/custom models/ores it got messed up and does that.

 

Here is all the code I think you guys might need:

 

WorldProvider

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.client.main.Main;

import net.minecraft.util.ChunkCoordinates;

import net.minecraft.util.MathHelper;

import net.minecraft.util.Vec3;

import net.minecraft.world.World;

import net.minecraft.world.WorldProvider;

import net.minecraft.world.biome.WorldChunkManagerHell;

import net.minecraft.world.chunk.IChunkProvider;

import net.minecraftforge.common.DimensionManager;

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

 

public class LegendofZeldaWorldProvider extends WorldProvider

{

private float[] colorsSunriseSunset = new float[4];

public void registerWorldChunkManager()

{

this.worldChunkMgr = new WorldChunkManagerZelda(LegendofZelda.LoZBiome, 2.0F, 4.0F);

this.dimensionId = LegendofZelda.DimID;

this.hasNoSky = false;

}

public IChunkProvider createChunkGenerator()

{

return new LegendofZeldaChunkProvider(this.worldObj, this.worldObj.getSeed(), false);

}

public int getAverageGroundLevel()

{

return 0;

}

@SideOnly(Side.CLIENT)

public boolean doesXZShowFog(int par1, int par2)

{

return false;

}

public String getDimensionName()

{

return "The Legend of Zelda Dimension";

}

public boolean renderStars()

{

return true;

}

public float getStarBrightness(World world, float f)

{

return 12.0F;

}

public boolean renderClouds()

{

return true;

}

public boolean renderVoidFog()

{

return false;

}

public boolean renderEndSky()

{

return false;

}

public float setSunSize()

{

return 12.0F;

}

public float setMoonSize()

{

return 40.0F;

}

@SideOnly(Side.CLIENT)

public boolean isSkyColored()

{

return true;

}

public boolean canRespawnHere()

{

return true;

}

public boolean isSurfaceWorld()

{

return true;

}

@SideOnly(Side.CLIENT)

public float getCloudHeight()

{

return 128.0F;

}

@SideOnly(Side.CLIENT)

public String getSunTexture()

{

return "/Main:TwinSuns.png";

}

public boolean canCoordinateBeSpawn(int par1, int par2)

{

return false;

}

 

protected void generateLightBrightnessTable()

{

float f = 12.0F;

for (int i = 0; i <= 15; i++)

{

float f1 = 12.0F - i / 15.0F;

this.lightBrightnessTable = ((1.0F - f1) / (f1 * 3.0F + 1.0F) * (1.0F - f) + f);

}

}

@SideOnly(Side.CLIENT)

public String getWelcomeMessage()

{

if ((this instanceof LegendofZeldaWorldProvider))

{

return "Entering The Legend of Zelda Dimension";

}

return null;

}

@SideOnly(Side.CLIENT)

public float[] calcSunriseSunsetColors(float par1, float par2)

{

float f2 = 0.4F;

float f3 = MathHelper.cos(par1 * 3.141593F * 2.0F) - 0.0F;

float f4 = -0.0F;

if ((f3 >= f4 - f2) && (f3 <= f4 + f2))

{

float f5 = (f3 - f4) / f2 * 0.5F + 0.5F;

float f6 = 1.0F - (1.0F - MathHelper.sin(f5 * 3.141593F)) * 0.99F;

f6 *= f6;

this.colorsSunriseSunset[0] = (f5 * 0.3F + 0.7F);

this.colorsSunriseSunset[1] = (f5 * f5 * 0.7F + 0.2F);

this.colorsSunriseSunset[2] = (f5 * f5 * 0.0F + 0.2F);

this.colorsSunriseSunset[3] = f6;

return this.colorsSunriseSunset;

}

return null;

}

public float calculateCelestialAngle(long par1, float par3)

{

int j = (int)(par1 % 24000L);

float f1 = (j + par3) / 24000.0F - 0.25F;

if (f1 < 0.0F)

{

f1 += 1.0F;

}

if (f1 > 1.0F)

{

f1 -= 1.0F;

}

float f2 = f1;

f1 = 1.0F - (float)((Math.cos(f1 * 3.141592653589793D) + 1.0D) / 2.0D);

f1 = f2 + (f1 - f2) / 3.0F;

return f1;

}

@SideOnly(Side.CLIENT)

public Vec3 getFogColor(float par1, float par2)

{

int i = 10518688;

float f2 = MathHelper.cos(par1 * 3.141593F * 2.0F) * 2.0F + 0.5F;

if (f2 < 0.0F)

{

f2 = 0.0F;

}

if (f2 > 1.0F)

{

f2 = 1.0F;

}

float f3 = (i >> 16 & 0xFF) / 255.0F;

float f4 = (i >> 8 & 0xFF) / 255.0F;

float f5 = (i & 0xFF) / 255.0F;

f3 *= (f2 * 0.0F + 0.15F);

f4 *= (f2 * 0.0F + 0.15F);

f5 *= (f2 * 0.0F + 0.15F);

return this.worldObj.getWorldVec3Pool().getVecFromPool(f3, f4, f5);

}

public static WorldProvider getProviderForDimension(int par0)

{

    return DimensionManager.createProviderFor(par0);

}

public ChunkCoordinates getEntrancePortalLocation()

{

    return null;

}

}

 

 

 

 

Chunk Provider

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.List;

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.client.main.Main;

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.WorldGenLakes;

import net.minecraft.world.gen.structure.MapGenMineshaft;

import net.minecraft.world.gen.structure.MapGenStronghold;

import net.minecraft.world.gen.structure.MapGenVillage;

 

public class LegendofZeldaChunkProvider implements IChunkProvider

{

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 World worldObj;

private final boolean mapFeaturesEnabled;

private double[] noiseArray;

private double[] stoneNoise = new double[256];

private MapGenBase caveGenerator = new MapGenCaves();

private MapGenStronghold strongholdGenerator = new MapGenStronghold();

private MapGenVillage villageGenerator = new MapGenVillage();

private MapGenMineshaft mineshaftGenerator = new MapGenMineshaft();

private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature();

private MapGenBase ravineGenerator = new MapGenRavine();

private BiomeGenBase[] biomesForGeneration;

double[] noise3;

double[] noise1;

double[] noise2;

double[] noise5;

double[] noise6;

float[] parabolicField;

int[][] field_73219_j = new int[32][32];

public LegendofZeldaChunkProvider(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);

}

/**

* 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 b0 = 4;

byte b1 = 16;

byte b2 = 63;

int k = b0 + 1;

byte b3 = 17;

int l = b0 + 1;

this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, k + 5, l + 5);

this.noiseArray = this.initializeNoiseField(this.noiseArray, par1 * b0, 0, par2 * b0, k, b3, l);

for (int i1 = 0; i1 < b0; ++i1)

{

for (int j1 = 0; j1 < b0; ++j1)

{

for (int k1 = 0; k1 < b1; ++k1)

{

        double d0 = 0.125D;

        double d1 = this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 0];

        double d2 = this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 0];

        double d3 = this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 0];

        double d4 = this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 0];

        double d5 = (this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 1] - d1) * d0;

        double d6 = (this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 1] - d2) * d0;

        double d7 = (this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 1] - d3) * d0;

        double d8 = (this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 1] - d4) * d0;

        for (int l1 = 0; l1 < 8; ++l1)

        {

        double d9 = 0.25D;

        double d10 = d1;

        double d11 = d2;

        double d12 = (d3 - d1) * d9;

        double d13 = (d4 - d2) * d9;

        for (int i2 = 0; i2 < 4; ++i2)

        {

        int j2 = i2 + i1 * 4 << 11 | 0 + j1 * 4 << 7 | k1 * 8 + l1;

        short short1 = 128;

        j2 -= short1;

        double d14 = 0.25D;

        double d15 = (d11 - d10) * d14;

        double d16 = d10 - d15;

        for (int k2 = 0; k2 < 4; ++k2)

        {

        if ((d16 += d15) > 0.0D)

        {

                /** Main filler block fill's all the underground, replaces block stone **/

                par3ArrayOfByte[j2 += short1] = (byte)253;//

        }

        else if (k1 * 8 + l1 < b2)

        {

                par3ArrayOfByte[j2 += short1] = (byte)Block.waterStill.blockID;

        }

        else

        {

                par3ArrayOfByte[j2 += short1] = 0;

        }

        }

        d10 += d12;

        d11 += d13;

        }

        d1 += d5;

        d2 += d6;

        d3 += d7;

        d4 += d8;

        }

}

}

}

}

public void replaceBlocksForBiome(int par1, int par2, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase)

{

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;

        }

        /** Main filler block fill's all the underground, replaces block stone **/

        else if (var18 != 253)

        {

        if (var13 == -1)

        {

        if (var12 == 0)

        {

                var14 = 0;

               

                /** change to custom dirt **/

                var15 = (byte)LegendofZelda.LoZDirt.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;

        }

        }

        }

        }

}

}

}

}

public Chunk loadChunk(int par1, int par2)

{

return provideChunk(par1, par2);

}

public Chunk provideChunk(int par1, int par2)

{

this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L);

byte[] var3 = new byte[32768];

generateTerrain(par1, par2, var3);

this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);

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;

}

private double[] initializeNoiseField(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7)

{

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(var8 * var8 + var9 * var9 + 0.2F);

        this.parabolicField[(var8 + 2 + (var9 + 2) * 5)] = var10;

}

}

}

double var44 = 684.41200000000003D;

double var45 = 684.41200000000003D;

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 = var17;

        double var26 = var16;

        var48 += var47 * 0.2D;

        var48 = var48 * par6 / 16.0D;

        double var28 = par6 / 2.0D + var48 * 4.0D;

        double var30 = 0.0D;

        double var32 = (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 = (var46 - (par6 - 4)) / 3.0F;

        var30 = var30 * (1.0D - var40) + -10.0D * var40;

        }

        par1ArrayOfDouble[var12] = var30;

        var12++;

}

}

}

return par1ArrayOfDouble;

}

public boolean chunkExists(int par1, int par2)

{

return true;

}

public void populate(IChunkProvider par1IChunkProvider, int par2, int par3)

{

net.minecraft.block.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(par2 * var7 + par3 * var9 ^ this.worldObj.getSeed());

boolean var11 = false;

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);

}

if ((!var11) && (this.rand.nextInt(4) == 0))

{

int var12 = var4 + this.rand.nextInt(16) + 8;

int var13 = this.rand.nextInt(128);

int var14 = var5 + this.rand.nextInt(16) + 8;

new WorldGenLakes(Block.waterStill.blockID).generate(this.worldObj, this.rand, var12, var13, var14);

}

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;

for (int var12 = 0; var12 < 16; var12++)

{

for (int var13 = 0; var13 < 16; var13++)

{

int 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);

}

}

}

net.minecraft.block.BlockSand.fallInstantly = false;

}

public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate)

{

return true;

}

public boolean unload100OldestChunks()

{

return false;

}

public boolean canSave()

{

return true;

}

public String makeString()

{

return "RandomLevelSource";

}

public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4)

{

BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(par2, par4);

return var5 == null ? null : var5.getSpawnableList(par1EnumCreatureType);

}

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 boolean unloadQueuedChunks()

{

return false;

}

public void recreateStructures(int i, int j)

{

}

@Override

public void saveExtraData(){

 

}

}

 

 

 

 

Dimension Biome

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS;

 

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.block.material.Material;

import net.minecraft.entity.monster.EntityEnderman;

import net.minecraft.entity.passive.EntityWolf;

import net.minecraft.world.World;

import net.minecraft.world.biome.BiomeGenBase;

import net.minecraft.world.biome.SpawnListEntry;

import net.minecraft.world.gen.feature.WorldGenFlowers;

import net.minecraft.world.gen.feature.WorldGenTaiga1;

import net.minecraft.world.gen.feature.WorldGenTaiga2;

import net.minecraft.world.gen.feature.WorldGenerator;

import net.minecraftforge.event.terraingen.TerrainGen;

 

public class LegendofZeldaDimensionBiome extends BiomeGenBase{

 

 

private Object worldGeneratorTutorialBigTree;

 

public final Material blockMaterial;

public LegendofZeldaDimensionBiome(int par1){

super(par1);

this.blockMaterial = Material.water;

this.minHeight = 0.1F;

this.maxHeight = 0.6F;

this.spawnableMonsterList.clear();

this.spawnableCreatureList.clear();

this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 10, 4, 4));

this.topBlock = ((byte)252);

this.fillerBlock = ((byte)251);

this.setBiomeName("Legend of Zelda");

this.theBiomeDecorator.treesPerChunk = 5;

        this.theBiomeDecorator.grassPerChunk = 15;

     

}

 

public void decorate(World w, Random r, int x, int z)

    {

 

super.decorate(w, r, x, z);

WorldGenFlowers ZeldaTGrass = new WorldGenFlowers(LegendofZelda.ZeldaGrass.blockID);

boolean doGen = TerrainGen.decorate(w, r, x, z, FLOWERS);

        for (int j = 0; doGen && j < 2; ++j)

        {

            int k = x + r.nextInt(16) + 8;

            int l = r.nextInt(128);

            int i1 = z + r.nextInt(16) + 8;

            ZeldaTGrass.generate(w, r, k, l, i1);

 

 

        }

     

    }

public WorldGenerator getRandomWorldGenForTrees(Random par1Random)

    {

        return (WorldGenerator)(par1Random.nextInt(2) == 0 ? new LegendofZeldaTree() : new LegendofZeldaTree());

    }

}

 

 

 

Teleporter ( I honestly have no clue what this would do with the caves generating, but hey, why not even if it is useless someone might get to use it, Open source FTW! )

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.client.main.Main;

import net.minecraft.entity.Entity;

import net.minecraft.entity.player.EntityPlayer;

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 LoZTeleporter extends Teleporter

{

private final WorldServer worldServerInstance;

/** A private Random() function in Teleporter */

private final Random random;

 

/**

        * 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();

public LoZTeleporter(WorldServer par1WorldServer)

{

        super(par1WorldServer);

        this.worldServerInstance = par1WorldServer;

        this.random = new Random(par1WorldServer.getSeed());

}

@Override

public boolean makePortal(Entity par1Entity)

{return false;}

 

@Override

public boolean placeInExistingPortal(Entity par1Entity, double par2, double par4, double par6, float par8)

{return false;}

@Override

public void placeInPortal(Entity e, double par2, double par4, double par6, float par8)

{

 

 

 

System.out.println("Enter: The Legend of Zelda");

 

 

 

 

}

 

}

 

 

 

 

Custom WorldGenMinabl class

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.util.MathHelper;

import net.minecraft.world.World;

import net.minecraft.world.gen.feature.WorldGenerator;

 

public class WorldGenMinableLoZ  extends WorldGenerator

{

    /** The block ID of the ore to be placed using this generator. */

    private int minableBlockId;

    private int minableBlockMeta = 0;

 

    /** The number of blocks to generate. */

    private int numberOfBlocks;

 

    /** The block ID of the block to be replaced with the ore (usually stone) */

    private int blockToReplace = LegendofZelda.LoZRock.blockID;

 

    public WorldGenMinableLoZ(int par1, int par2)

    {

        this(par1, par2, LegendofZelda.LoZRock.blockID);

    }

 

    public WorldGenMinableLoZ(int par1, int par2, int par3)

    {

        this.minableBlockId = par1;

        this.numberOfBlocks = par2;

        this.blockToReplace = par3;

    }

 

    public WorldGenMinableLoZ(int id, int meta, int number, int target)

    {

        this(id, number, target);

        this.minableBlockMeta = meta;

    }

 

    public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)

    {

        float f = par2Random.nextFloat() * (float)Math.PI;

        double d0 = (double)((float)(par3 + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);

        double d1 = (double)((float)(par3 + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);

        double d2 = (double)((float)(par5 + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);

        double d3 = (double)((float)(par5 + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);

        double d4 = (double)(par4 + par2Random.nextInt(3) - 2);

        double d5 = (double)(par4 + par2Random.nextInt(3) - 2);

 

        for (int l = 0; l <= this.numberOfBlocks; ++l)

        {

            double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks;

            double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks;

            double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks;

            double d9 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D;

            double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;

            double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;

            int i1 = MathHelper.floor_double(d6 - d10 / 2.0D);

            int j1 = MathHelper.floor_double(d7 - d11 / 2.0D);

            int k1 = MathHelper.floor_double(d8 - d10 / 2.0D);

            int l1 = MathHelper.floor_double(d6 + d10 / 2.0D);

            int i2 = MathHelper.floor_double(d7 + d11 / 2.0D);

            int j2 = MathHelper.floor_double(d8 + d10 / 2.0D);

 

            for (int k2 = i1; k2 <= l1; ++k2)

            {

                double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D);

 

                if (d12 * d12 < 1.0D)

                {

                    for (int l2 = j1; l2 <= i2; ++l2)

                    {

                        double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D);

 

                        if (d12 * d12 + d13 * d13 < 1.0D)

                        {

                            for (int i3 = k1; i3 <= j2; ++i3)

                            {

                                double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D);

 

                                Block block = Block.blocksList[par1World.getBlockId(k2, l2, i3)];

                                if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, k2, l2, i3, this.blockToReplace)))

                                {

                                    par1World.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2);

                                }

                            }

                        }

                    }

                }

            }

        }

 

        return true;

    }

}

 

 

 

 

WorldGnererator

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.world.World;

import net.minecraft.world.chunk.IChunkProvider;

import net.minecraft.world.gen.feature.WorldGenMinable;

import cpw.mods.fml.common.IWorldGenerator;

 

public class WorldGeneratorLoZ implements IWorldGenerator {

 

@Override

public void generate(Random random, int chunkX, int chunkZ, World world,

IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {

switch(world.provider.dimensionId){

 

 

case -1:

generateNether(world, random, chunkX*16, chunkZ*16);

 

case 0:

generateOverworld(world, random, chunkX*16, chunkZ*16);

 

case 1:

generateEnd(world, random, chunkX*16, chunkZ*16);

 

case 4:

generateLoZ(world, random, chunkX*16, chunkZ*16);

}

 

}

 

private void generateNether(World w, Random r, int x, int z) {

 

 

}

 

private void generateOverworld(World w, Random r, int x, int z) {

 

 

}

 

private void generateEnd(World w, Random r, int x, int z) {

 

 

}

 

private void generateLoZ(World w, Random r, int x, int z) {

 

generateOre(LegendofZelda.LoZCopperOre, w, r, x, z, 16, 16, 8 + r.nextInt(6), 20, 20, 80);

 

}

 

private void generateOre(Block b, World w, Random r, int x, int z, int maxX, int maxZ, int maxVeinSize, int chanceToSpawn, int minY, int maxY){

 

for(int i = 0; i< chanceToSpawn; i++){

int posX = x + r.nextInt(maxX);

int posY = minY + r.nextInt(maxY - minY);

int posZ = z + r.nextInt(maxZ);

new WorldGenMinableLoZ(b.blockID, maxVeinSize).generate(w, r, posX, posY, posZ);

 

}

}

 

}

 

 

 

ChunkProvider

 

 

package net.CJCutrone.LegendofZelda.Dimension;

import java.util.Arrays;

import java.util.List;

import java.util.Random;

 

import net.minecraft.world.ChunkPosition;

import net.minecraft.world.biome.BiomeGenBase;

import net.minecraft.world.biome.WorldChunkManager;

 

 

public class WorldChunkManagerZelda extends WorldChunkManager

{

    /** this is the sole biome to utilize for this world */

    private BiomeGenBase biomeToUse;

    private float temp;

 

    /** The rainfall in the world */

    private float rainfall;

 

    public WorldChunkManagerZelda(BiomeGenBase par1BiomeGenBase, float par2, float par3)

    {

        this.biomeToUse = par1BiomeGenBase;

        this.temp = par2;

        this.rainfall = par3;

    }

 

    /**

    * Returns the BiomeGenBase related to the x, z position on the world.

    */

    public BiomeGenBase getBiomeGenAt(int par1, int par2)

    {

        return this.biomeToUse;

    }

 

    /**

    * Returns an array of biomes for the location input.

    */

    public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)

    {

        if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)

        {

            par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];

        }

 

        Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, this.biomeToUse);

        return par1ArrayOfBiomeGenBase;

    }

 

    /**

    * Returns a list of temperatures to use for the specified blocks.  Args: listToReuse, x, y, width, length

    */

    public float[] getTemperatures(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)

    {

        if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)

        {

            par1ArrayOfFloat = new float[par4 * par5];

        }

 

        Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, this.temp);

        return par1ArrayOfFloat;

    }

 

    /**

    * Returns a list of rainfall values for the specified blocks. Args: listToReuse, x, z, width, length.

    */

    public float[] getRainfall(float[] par1ArrayOfFloat, int par2, int par3, int par4, int par5)

    {

        if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)

        {

            par1ArrayOfFloat = new float[par4 * par5];

        }

 

        Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, this.rainfall);

        return par1ArrayOfFloat;

    }

 

    /**

    * 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

    */

    public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)

    {

        if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)

        {

            par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];

        }

 

        Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, this.biomeToUse);

        return par1ArrayOfBiomeGenBase;

    }

 

    /**

    * 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)

    */

    public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5, boolean par6)

    {

        return this.loadBlockGeneratorData(par1ArrayOfBiomeGenBase, par2, par3, par4, par5);

    }

 

    /**

    * 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.

    */

    public ChunkPosition findBiomePosition(int par1, int par2, int par3, List par4List, Random par5Random)

    {

        return par4List.contains(this.biomeToUse) ? new ChunkPosition(par1 - par3 + par5Random.nextInt(par3 * 2 + 1), 0, par2 - par3 + par5Random.nextInt(par3 * 2 + 1)) : null;

    }

 

    /**

    * checks given Chunk's Biomes against List of allowed ones

    */

    public boolean areBiomesViable(int par1, int par2, int par3, List par4List)

    {

        return par4List.contains(this.biomeToUse);

    }

}

 

 

 

Posted

Cave code is set so it only generates cave in stone and the biomes top and filler blocks.  Copy the MapGenCaves file into a new file, look in the code for where it checks for stone etc and adjust it so check includes your custom blocks, then in your ChunkProvider change the MapGenCaves relevant code to your custom cave code.

Posted

I would love to say that I love you... But it didn't work... :(

 

Here is my MapGenCaves and updated ChunkProvider:

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.util.MathHelper;

import net.minecraft.world.World;

import net.minecraft.world.biome.BiomeGenBase;

import net.minecraft.world.gen.MapGenBase;

 

public class MapGenCavesLoZ extends MapGenBase

{

    /**

    * Generates a larger initial cave node than usual. Called 25% of the time.

    */

    protected void generateLargeCaveNode(long par1, int par3, int par4, byte[] par5ArrayOfByte, double par6, double par8, double par10)

    {

        this.generateCaveNode(par1, par3, par4, par5ArrayOfByte, par6, par8, par10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D);

    }

 

    /**

    * Generates a node in the current cave system recursion tree.

    */

    protected void generateCaveNode(long par1, int par3, int par4, byte[] par5ArrayOfByte, double par6, double par8, double par10, float par12, float par13, float par14, int par15, int par16, double par17)

    {

        double d4 = (double)(par3 * 16 + 8);

        double d5 = (double)(par4 * 16 + 8);

        float f3 = 0.0F;

        float f4 = 0.0F;

        Random random = new Random(par1);

 

        if (par16 <= 0)

        {

            int j1 = this.range * 16 - 16;

            par16 = j1 - random.nextInt(j1 / 4);

        }

 

        boolean flag = false;

 

        if (par15 == -1)

        {

            par15 = par16 / 2;

            flag = true;

        }

 

        int k1 = random.nextInt(par16 / 2) + par16 / 4;

 

        for (boolean flag1 = random.nextInt(6) == 0; par15 < par16; ++par15)

        {

            double d6 = 1.5D + (double)(MathHelper.sin((float)par15 * (float)Math.PI / (float)par16) * par12 * 1.0F);

            double d7 = d6 * par17;

            float f5 = MathHelper.cos(par14);

            float f6 = MathHelper.sin(par14);

            par6 += (double)(MathHelper.cos(par13) * f5);

            par8 += (double)f6;

            par10 += (double)(MathHelper.sin(par13) * f5);

 

            if (flag1)

            {

                par14 *= 0.92F;

            }

            else

            {

                par14 *= 0.7F;

            }

 

            par14 += f4 * 0.1F;

            par13 += f3 * 0.1F;

            f4 *= 0.9F;

            f3 *= 0.75F;

            f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;

            f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4.0F;

 

            if (!flag && par15 == k1 && par12 > 1.0F && par16 > 0)

            {

                this.generateCaveNode(random.nextLong(), par3, par4, par5ArrayOfByte, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 - ((float)Math.PI / 2F), par14 / 3.0F, par15, par16, 1.0D);

                this.generateCaveNode(random.nextLong(), par3, par4, par5ArrayOfByte, par6, par8, par10, random.nextFloat() * 0.5F + 0.5F, par13 + ((float)Math.PI / 2F), par14 / 3.0F, par15, par16, 1.0D);

                return;

            }

 

            if (flag || random.nextInt(4) != 0)

            {

                double d8 = par6 - d4;

                double d9 = par10 - d5;

                double d10 = (double)(par16 - par15);

                double d11 = (double)(par12 + 2.0F + 16.0F);

 

                if (d8 * d8 + d9 * d9 - d10 * d10 > d11 * d11)

                {

                    return;

                }

 

                if (par6 >= d4 - 16.0D - d6 * 2.0D && par10 >= d5 - 16.0D - d6 * 2.0D && par6 <= d4 + 16.0D + d6 * 2.0D && par10 <= d5 + 16.0D + d6 * 2.0D)

                {

                    int l1 = MathHelper.floor_double(par6 - d6) - par3 * 16 - 1;

                    int i2 = MathHelper.floor_double(par6 + d6) - par3 * 16 + 1;

                    int j2 = MathHelper.floor_double(par8 - d7) - 1;

                    int k2 = MathHelper.floor_double(par8 + d7) + 1;

                    int l2 = MathHelper.floor_double(par10 - d6) - par4 * 16 - 1;

                    int i3 = MathHelper.floor_double(par10 + d6) - par4 * 16 + 1;

 

                    if (l1 < 0)

                    {

                        l1 = 0;

                    }

 

                    if (i2 > 16)

                    {

                        i2 = 16;

                    }

 

                    if (j2 < 1)

                    {

                        j2 = 1;

                    }

 

                    if (k2 > 120)

                    {

                        k2 = 120;

                    }

 

                    if (l2 < 0)

                    {

                        l2 = 0;

                    }

 

                    if (i3 > 16)

                    {

                        i3 = 16;

                    }

 

                    boolean flag2 = false;

                    int j3;

                    int k3;

 

                    for (j3 = l1; !flag2 && j3 < i2; ++j3)

                    {

                        for (int l3 = l2; !flag2 && l3 < i3; ++l3)

                        {

                            for (int i4 = k2 + 1; !flag2 && i4 >= j2 - 1; --i4)

                            {

                                k3 = (j3 * 16 + l3) * 128 + i4;

 

                                if (i4 >= 0 && i4 < 128)

                                {

                                    if (isOceanBlock(par5ArrayOfByte, k3, j3, i4, l3, par3, par4))

                                    {

                                        flag2 = true;

                                    }

 

                                    if (i4 != j2 - 1 && j3 != l1 && j3 != i2 - 1 && l3 != l2 && l3 != i3 - 1)

                                    {

                                        i4 = j2;

                                    }

                                }

                            }

                        }

                    }

 

                    if (!flag2)

                    {

                        for (j3 = l1; j3 < i2; ++j3)

                        {

                            double d12 = ((double)(j3 + par3 * 16) + 0.5D - par6) / d6;

 

                            for (k3 = l2; k3 < i3; ++k3)

                            {

                                double d13 = ((double)(k3 + par4 * 16) + 0.5D - par10) / d6;

                                int j4 = (j3 * 16 + k3) * 128 + k2;

                                boolean flag3 = false;

 

                                if (d12 * d12 + d13 * d13 < 1.0D)

                                {

                                    for (int k4 = k2 - 1; k4 >= j2; --k4)

                                    {

                                        double d14 = ((double)k4 + 0.5D - par8) / d7;

 

                                        if (d14 > -0.7D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D)

                                        {

                                            if (isTopBlock(par5ArrayOfByte, j4, j3, k4, k3, par3, par4))

                                            {

                                                flag3 = true;

                                            }

 

                                            digBlock(par5ArrayOfByte, j4, j3, k4, k3, par3, par4, flag3);

                                        }

 

                                        --j4;

                                    }

                                }

                            }

                        }

 

                        if (flag)

                        {

                            break;

                        }

                    }

                }

            }

        }

    }

 

    /**

    * Recursively called by generate() (generate) and optionally by itself.

    */

    protected void recursiveGenerate(World par1World, int par2, int par3, int par4, int par5, byte[] par6ArrayOfByte)

    {

        int i1 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1);

 

        if (this.rand.nextInt(15) != 0)

        {

            i1 = 0;

        }

 

        for (int j1 = 0; j1 < i1; ++j1)

        {

            double d0 = (double)(par2 * 16 + this.rand.nextInt(16));

            double d1 = (double)this.rand.nextInt(this.rand.nextInt(120) + 8);

            double d2 = (double)(par3 * 16 + this.rand.nextInt(16));

            int k1 = 1;

 

            if (this.rand.nextInt(4) == 0)

            {

                this.generateLargeCaveNode(this.rand.nextLong(), par4, par5, par6ArrayOfByte, d0, d1, d2);

                k1 += this.rand.nextInt(4);

            }

 

            for (int l1 = 0; l1 < k1; ++l1)

            {

                float f = this.rand.nextFloat() * (float)Math.PI * 2.0F;

                float f1 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F;

                float f2 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat();

 

                if (this.rand.nextInt(10) == 0)

                {

                    f2 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F;

                }

 

                this.generateCaveNode(this.rand.nextLong(), par4, par5, par6ArrayOfByte, d0, d1, d2, f2, f, f1, 0, 0, 1.0D);

            }

        }

    }

 

    protected boolean isOceanBlock(byte[] data, int index, int x, int y, int z, int chunkX, int chunkZ)

    {

        return data[index] == Block.waterMoving.blockID || data[index] == Block.waterStill.blockID;

    }

 

    //Exception biomes to make sure we generate like vanilla

    private boolean isExceptionBiome(BiomeGenBase biome)

    {

        if (biome == BiomeGenBase.mushroomIsland) return true;

        if (biome == BiomeGenBase.beach) return true;

        if (biome == BiomeGenBase.desert) return true;

        return false;

    }

 

    //Determine if the block at the specified location is the top block for the biome, we take into account

    //Vanilla bugs to make sure that we generate the map the same way vanilla does.

    private boolean isTopBlock(byte[] data, int index, int x, int y, int z, int chunkX, int chunkZ)

    {

        BiomeGenBase biome = worldObj.getBiomeGenForCoords(x + chunkX * 16, z + chunkZ * 16);

        return (isExceptionBiome(biome) ? data[index] == Block.grass.blockID : data[index] == biome.topBlock);

    }

 

    /**

    * Digs out the current block, default implementation removes stone, filler, and top block

    * Sets the block to lava if y is less then 10, and air other wise.

    * If setting to air, it also checks to see if we've broken the surface and if so

    * tries to make the floor the biome's top block

    *

    * @param data Block data array

    * @param index Pre-calculated index into block data

    * @param x local X position

    * @param y local Y position

    * @param z local Z position

    * @param chunkX Chunk X position

    * @param chunkZ Chunk Y position

    * @param foundTop True if we've encountered the biome's top block. Ideally if we've broken the surface.

    */

    protected void digBlock(byte[] data, int index, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop)

    {

        BiomeGenBase biome = worldObj.getBiomeGenForCoords(x + chunkX * 16, z + chunkZ * 16);

        int top    = (isExceptionBiome(biome) ? Block.grass.blockID : biome.topBlock);

        int filler = (isExceptionBiome(biome) ? Block.dirt.blockID  : biome.fillerBlock);

        int block  = data[index];

 

        if (block == LegendofZelda.LoZRock.blockID || block == filler || block == top)

        {

            if (y < 10)

            {

                data[index] = (byte)Block.lavaMoving.blockID;

            }

            else

            {

                data[index] = 0;

 

                if (foundTop && data[index - 1] == filler)

                {

                    data[index - 1] = (byte)top;

                }

            }

        }

    }

}

 

 

 

 

 

package net.CJCutrone.LegendofZelda.Dimension;

 

import java.util.List;

import java.util.Random;

 

import net.CJCutrone.LegendofZelda.common.LegendofZelda;

import net.minecraft.block.Block;

import net.minecraft.client.main.Main;

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.MapGenRavine;

import net.minecraft.world.gen.NoiseGeneratorOctaves;

import net.minecraft.world.gen.feature.MapGenScatteredFeature;

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;

 

public class LegendofZeldaChunkProvider implements IChunkProvider

{

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 World worldObj;

private final boolean mapFeaturesEnabled;

private double[] noiseArray;

private double[] stoneNoise = new double[256];

private MapGenBase caveGenerator = new MapGenCavesLoZ();

private MapGenStronghold strongholdGenerator = new MapGenStronghold();

private MapGenVillage villageGenerator = new MapGenVillage();

private MapGenMineshaft mineshaftGenerator = new MapGenMineshaft();

private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature();

private MapGenBase ravineGenerator = new MapGenRavine();

private BiomeGenBase[] biomesForGeneration;

double[] noise3;

double[] noise1;

double[] noise2;

double[] noise5;

double[] noise6;

float[] parabolicField;

int[][] field_73219_j = new int[32][32];

public LegendofZeldaChunkProvider(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);

}

/**

* 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 b0 = 4;

byte b1 = 16;

byte b2 = 63;

int k = b0 + 1;

byte b3 = 17;

int l = b0 + 1;

this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, par1 * 4 - 2, par2 * 4 - 2, k + 5, l + 5);

this.noiseArray = this.initializeNoiseField(this.noiseArray, par1 * b0, 0, par2 * b0, k, b3, l);

for (int i1 = 0; i1 < b0; ++i1)

{

for (int j1 = 0; j1 < b0; ++j1)

{

for (int k1 = 0; k1 < b1; ++k1)

{

        double d0 = 0.125D;

        double d1 = this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 0];

        double d2 = this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 0];

        double d3 = this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 0];

        double d4 = this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 0];

        double d5 = (this.noiseArray[((i1 + 0) * l + j1 + 0) * b3 + k1 + 1] - d1) * d0;

        double d6 = (this.noiseArray[((i1 + 0) * l + j1 + 1) * b3 + k1 + 1] - d2) * d0;

        double d7 = (this.noiseArray[((i1 + 1) * l + j1 + 0) * b3 + k1 + 1] - d3) * d0;

        double d8 = (this.noiseArray[((i1 + 1) * l + j1 + 1) * b3 + k1 + 1] - d4) * d0;

        for (int l1 = 0; l1 < 8; ++l1)

        {

        double d9 = 0.25D;

        double d10 = d1;

        double d11 = d2;

        double d12 = (d3 - d1) * d9;

        double d13 = (d4 - d2) * d9;

        for (int i2 = 0; i2 < 4; ++i2)

        {

        int j2 = i2 + i1 * 4 << 11 | 0 + j1 * 4 << 7 | k1 * 8 + l1;

        short short1 = 128;

        j2 -= short1;

        double d14 = 0.25D;

        double d15 = (d11 - d10) * d14;

        double d16 = d10 - d15;

        for (int k2 = 0; k2 < 4; ++k2)

        {

        if ((d16 += d15) > 0.0D)

        {

                /** Main filler block fill's all the underground, replaces block stone **/

                par3ArrayOfByte[j2 += short1] = (byte)253;//

        }

        else if (k1 * 8 + l1 < b2)

        {

                par3ArrayOfByte[j2 += short1] = (byte)Block.waterStill.blockID;

        }

        else

        {

                par3ArrayOfByte[j2 += short1] = 0;

        }

        }

        d10 += d12;

        d11 += d13;

        }

        d1 += d5;

        d2 += d6;

        d3 += d7;

        d4 += d8;

        }

}

}

}

}

public void replaceBlocksForBiome(int par1, int par2, byte[] par3ArrayOfByte, BiomeGenBase[] par4ArrayOfBiomeGenBase)

{

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;

        }

        /** Main filler block fill's all the underground, replaces block stone **/

        else if (var18 != 253)

        {

        if (var13 == -1)

        {

        if (var12 == 0)

        {

                var14 = 0;

               

                /** change to custom dirt **/

                var15 = (byte)LegendofZelda.LoZDirt.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;

        }

        }

        }

        }

}

}

}

}

public Chunk loadChunk(int par1, int par2)

{

return provideChunk(par1, par2);

}

public Chunk provideChunk(int par1, int par2)

{

this.rand.setSeed(par1 * 341873128712L + par2 * 132897987541L);

byte[] var3 = new byte[32768];

generateTerrain(par1, par2, var3);

this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);

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;

}

private double[] initializeNoiseField(double[] par1ArrayOfDouble, int par2, int par3, int par4, int par5, int par6, int par7)

{

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(var8 * var8 + var9 * var9 + 0.2F);

        this.parabolicField[(var8 + 2 + (var9 + 2) * 5)] = var10;

}

}

}

double var44 = 684.41200000000003D;

double var45 = 684.41200000000003D;

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 = var17;

        double var26 = var16;

        var48 += var47 * 0.2D;

        var48 = var48 * par6 / 16.0D;

        double var28 = par6 / 2.0D + var48 * 4.0D;

        double var30 = 0.0D;

        double var32 = (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 = (var46 - (par6 - 4)) / 3.0F;

        var30 = var30 * (1.0D - var40) + -10.0D * var40;

        }

        par1ArrayOfDouble[var12] = var30;

        var12++;

}

}

}

return par1ArrayOfDouble;

}

public boolean chunkExists(int par1, int par2)

{

return true;

}

public void populate(IChunkProvider par1IChunkProvider, int par2, int par3)

{

net.minecraft.block.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(par2 * var7 + par3 * var9 ^ this.worldObj.getSeed());

boolean var11 = false;

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);

}

if ((!var11) && (this.rand.nextInt(4) == 0))

{

int var12 = var4 + this.rand.nextInt(16) + 8;

int var13 = this.rand.nextInt(128);

int var14 = var5 + this.rand.nextInt(16) + 8;

new WorldGenLakes(Block.waterStill.blockID).generate(this.worldObj, this.rand, var12, var13, var14);

}

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;

for (int var12 = 0; var12 < 16; var12++)

{

for (int var13 = 0; var13 < 16; var13++)

{

int 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);

}

}

}

net.minecraft.block.BlockSand.fallInstantly = false;

}

public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate)

{

return true;

}

public boolean unload100OldestChunks()

{

return false;

}

public boolean canSave()

{

return true;

}

public String makeString()

{

return "RandomLevelSource";

}

public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4)

{

BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(par2, par4);

return var5 == null ? null : var5.getSpawnableList(par1EnumCreatureType);

}

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 boolean unloadQueuedChunks()

{

return false;

}

public void recreateStructures(int i, int j)

{

}

@Override

public void saveExtraData(){

 

}

}

 

 

Posted

I'll take a better look later when I get off work, but I'm pretty sure it's something in your digblock method logic that just may be throwing it off.    I have a version at home I used to do something similar to what you are doing Ill get back to you later.

Posted

Ok so went to look at this again and was having the same issue you did so spent a few hours trying to figure this out, turns out answer is pretty easy.  I noticed the cave would generate in my replacement stone when it was also listed as the filler block in my biome, so went over the code trying different things trying to figure out why it wasn't digging the block.  Anyway it's such a stupid thing but at least I figured it out hopefully for people in the future.

 

This code should work for you, I just changed everything to byte instead of integer.

 

   protected void digBlock(byte[] data, int index, int x, int y, int z, int chunkX, int chunkZ, boolean foundTop)
    {
        BiomeGenBase biome = worldObj.getBiomeGenForCoords(x + chunkX * 16, z + chunkZ * 16);
        byte top    = (isExceptionBiome(biome) ? (byte)Block.grass.blockID : biome.topBlock);
        byte filler = (isExceptionBiome(biome) ? (byte)Block.dirt.blockID  : biome.fillerBlock);
        byte block  = data[index];

        if (block == (byte)LegendofZelda.LoZRock.blockID || block == filler || block == top)
        {
            if (y < 10)
            {
                data[index] = (byte)Block.lavaMoving.blockID;
            }
            else
            {
                data[index] = 0;

                if (foundTop && data[index - 1] == filler)
                {
                    data[index - 1] = (byte)top;
                }
            }
        }
    }
}

 

NSeUglf.png

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • [02:17:17] [main/INFO]: Loading ImmediateWindowProvider fmlearlywindow [02:17:17] [main/INFO]: Trying GL version 4.6 [02:17:17] [main/INFO]: Requested GL version 4.6 got version 4.6 [02:17:17] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/Sami/curseforge/minecraft/Install/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT [02:17:17] [pool-2-thread-1/INFO]: GL info: NVIDIA GeForce RTX 2070 SUPER/PCIe/SSE2 GL version 4.6.0 NVIDIA 566.36, NVIDIA Corporation [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-9.21.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-Ice-and-Fire-1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.1-forge]-Epic-Knights-Ores-and-Alloys-1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Addon-1.22.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Antique-Legacy-1.8.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file [1.20.x-forge]-Epic-Knights-Slavic-Armory-1.5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file alexsmobs-1.22.9.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file almanac-1.20.x-forge-1.0.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file AmbientSounds_FORGE_v6.1.4_mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file amendments-1.20-1.2.14.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file appleskin-forge-mc1.20.1-2.5.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file architectury-9.2.14-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file astikorcarts-1.20.1-1.1.8.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file bettercombat-forge-1.8.6+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file biomemakeover-FORGE-1.20.1-1.11.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file BiomesOPlenty-1.20.1-18.0.0.592.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file blockui-1.20.1-1.0.156-RELEASE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Bookshelf-Forge-1.20.1-20.2.13.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Bountiful-6.0.4+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file carryon-forge-1.20.1-2.1.2.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file citadel-2.6.1-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cloth-config-11.1.136-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Clumps-forge-1.20.1-12.0.0.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file comforts-forge-6.4.0+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Controlling-forge-1.20.1-12.0.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Corgilib-Forge-1.20.1-4.0.3.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file CreativeCore_FORGE_v2.12.30_mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cristellib-1.1.6-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file cupboard-1.20.1-2.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file curios-forge-5.11.1+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file curiosbackslot-4.0.6-nc.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file decorative_blocks-forge-1.20.1-4.1.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file domum_ornamentum-1.20.1-1.0.186-RELEASE-universal.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file dragonseeker-1.2.0-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file dungeons_enhanced-1.20.1-5.3.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file embeddium-0.3.31+mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file EnchantmentDescriptions-Forge-1.20.1-17.1.19.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file entityculling-forge-1.7.2-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Explorify v1.6.2 f10-48.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Fallingleaves-1.20.1-2.1.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file FarmersDelight-1.20.1-1.2.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file ferritecore-6.0.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file framework-forge-1.20.1-0.7.12.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file geckolib-forge-1.20.1-4.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Geophilic v3.2 f15-61.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file GlitchCore-forge-1.20.1-0.0.1.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file goblintraders-forge-1.20.1-1.9.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file gravestone-forge-1.20.1-1.0.24.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file guardvillagers-1.20.1-1.6.10.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file handcrafted-forge-1.20.1-3.0.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file iceandfire-2.1.13-1.20.1-beta-5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file immersive_weathering-1.20.1-2.0.3-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Jade-1.20.1-Forge-11.12.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file jei-1.20.1-forge-15.12.2.51.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file JustEnoughResources-1.20.1-1.4.0.247.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Kambrik-6.1.1+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Kobolds-2.12.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file kotlinforforge-4.11.0-all.jar of type LIBRARY with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file kubejs-forge-2001.6.5-build.16.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file LeavesBeGone-v8.0.0-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file leawind_third_person-v2.2.0-mc1.20-1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letmedespawn-1.20.x-forge-1.4.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-API-forge-1.2.15-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-bakery-forge-1.1.15.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-brewery-forge-1.1.9.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-candlelight-forge-1.2.13.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-meadow-forge-1.3.19.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file letsdo-vinery-forge-1.4.37.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file libraryferret-forge-1.20.1-4.0.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file map_atlases-1.20-6.0.12.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-bridges-3.0.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-doors-1.1.1forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-fences-1.1.2-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-furniture-3.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-lights-1.1.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-paintings-1.0.5-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-paths-1.0.5-1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-roofs-2.3.1-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-trapdoors-1.1.4-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mcw-windows-2.3.0-mc1.20.1forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file medieval_boomsticks-1.01.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file modernfix-forge-5.20.0+mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file moonlight-1.20-2.13.51-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file MouseTweaks-forge-mc1.20.1-2.25.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file mowziesmobs-1.6.5.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file NaturesCompass-1.20.1-1.11.2-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file oculus-mc1.20.1-1.8.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Oh-The-Trees-Youll-Grow-forge-1.20.1-1.3.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Patchouli-1.20.1-84-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Placebo-1.20.1-8.6.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file player-animation-lib-forge-1.0.2-rc1+1.20.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file polymorph-forge-0.49.8+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file PuzzlesLib-v8.1.25-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file realmrpg_seadwellers_2.9.9_forge_1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file realmrpg_skeletons-1.1.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file recruits-1.20.1-1.12.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file resourcefullib-forge-1.20.1-2.1.29.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file rhino-forge-2001.2.3-build.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file right-click-harvest-3.2.3+1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file rubidium-extra-0.5.4.4+mc1.20.1-build.131.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Searchables-forge-1.20.1-1.0.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file SereneSeasons-forge-1.20.1-9.1.0.0.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file SimplyDesirePaths-1.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file smallships-forge-1.20.1-2.0.0-b1.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file snowundertrees-1.20.1-1.4.6.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file spark-1.10.53-forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file structure_gel-1.20.1-2.16.2.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file structurize-1.20.1-1.0.742-RELEASE.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file supplementaries-1.20-3.1.11.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file TerraBlender-forge-1.20.1-3.0.1.7.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Terralith_1.20.x_v2.5.4.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file Towns-and-Towers-1.12-Fabric+Forge.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file weaponmaster_ydm-forge-1.20.1-4.2.3.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/INFO]: Found mod file zmedievalmusic-1.20.1-2.1.jar of type MOD with provider {mods folder locator at C:\Users\Sami\curseforge\minecraft\Instances\bals 2\mods} [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.3.12\fmlcore-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.3.12\javafmllanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.3.12\lowcodelanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/WARN]: Mod file C:\Users\Sami\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.3.12\mclanguage-1.20.1-47.3.12.jar is missing mods.toml file [02:17:17] [main/INFO]: Found mod file fmlcore-1.20.1-47.3.12.jar of type LIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file javafmllanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file lowcodelanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file mclanguage-1.20.1-47.3.12.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file client-1.20.1-20230612.114412-srg.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:17] [main/INFO]: Found mod file forge-1.20.1-47.3.12-universal.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@33cbfa57 [02:17:18] [main/WARN]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File:  and Mod File: . Using Mod File: [02:17:18] [main/INFO]: Found 16 dependencies adding them to mods collection [02:17:18] [main/INFO]: Found mod file mixinextras-forge-0.4.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file mixinsquared-forge-0.1.2-beta.5.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file jankson-1.2.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file yabn-1.0.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kfflang-4.11.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file spectrelib-forge-0.13.17+1.20.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file taniwha-forge-1.20.0-5.4.4.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file MixinSquared-0.1.2-beta.5.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file mclib-20.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file puzzlesaccessapi-forge-8.0.7.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kfflib-4.11.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file kffmod-4.11.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file bytecodecs-1.0.2.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file NanoLiveConfig-1.2.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file MixinExtras-0.4.1.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:18] [main/INFO]: Found mod file jcpp-1.4.14.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@475646d4 [02:17:20] [main/INFO]: Compatibility level set to JAVA_17 [02:17:20] [main/INFO]: Launching target 'forgeclient' with arguments [--version, forge-47.3.12, --gameDir, C:\Users\Sami\curseforge\minecraft\Instances\bals 2, --assetsDir, C:\Users\Sami\curseforge\minecraft\Install\assets, --uuid, be779ab0d8dd4d16a1f1aa5b21c9f2f3, --username, Kaiserwaffe, --assetIndex, 5, --accessToken, ????????, --clientId, ODk4Y2EyYTAtMTA2OC00MmYwLThiOGItMGU1MzRlMDdjZjQ2, --xuid, 2535449048843979, --userType, msa, --versionType, release, --width, 854, --height, 480, --quickPlayPath, C:\Users\Sami\curseforge\minecraft\Install\quickPlay\java\1737271034449.json] [02:17:20] [main/INFO]: Loaded configuration file for ModernFix 5.20.0+mc1.20.1: 86 options available, 0 override(s) found [02:17:20] [main/INFO]: Applying Nashorn fix [02:17:20] [main/INFO]: Applied Forge config corruption patch [02:17:20] [main/INFO]: Loaded configuration file for Embeddium: 167 options available, 3 override(s) found [02:17:20] [main/INFO]: Searching for graphics cards... [02:17:20] [main/INFO]: Found graphics card: GraphicsAdapterInfo[vendor=NVIDIA, name=NVIDIA GeForce RTX 2070 SUPER, version=DriverVersion=32.0.15.6636] [02:17:20] [main/WARN]: Embeddium has applied one or more workarounds to prevent crashes or other issues on your system: [NVIDIA_THREADED_OPTIMIZATIONS] [02:17:20] [main/WARN]: This is not necessarily an issue, but it may result in certain features or optimizations being disabled. You can sometimes fix these issues by upgrading your graphics driver. [02:17:20] [main/WARN]: Reference map 'handcrafted-forge-1.20.1-forge-refmap.json' for handcrafted.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'smallships-forge-refmap.json' for smallships.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'CuriosBackSlot.refmap.json' for curiosbackslot.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/WARN]: Reference map 'mixins.epic_knights_ice_and_fire.refmap.json' for mixins.epic_knights_ice_and_fire.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/INFO]: Loaded configuration file for Sodium Extra: 35 options available, 0 override(s) found [02:17:20] [main/INFO]: Loading 121 mods:     - alexsmobs 1.22.9     - almanac 1.0.2     - ambientsounds 6.1.4     - amendments 1.20-1.2.14     - antiquelegacy 1.8     - appleskin 2.5.1+mc1.20.1     - architectury 9.2.14     - astikorcarts 1.1.8     - bakery 1.1.15     - bettercombat 1.8.6+1.20.1     - biomemakeover 1.20.1-1.11.4         \-- taniwha 1.20.0-5.4.4     - biomesoplenty 18.0.0.592     - blockui 1.20.1-1.0.156-RELEASE     - bookshelf 20.2.13     - bountiful 6.0.4+1.20.1     - brewery 1.1.9     - candlelight 1.2.13     - carryon 2.1.2.7     - citadel 2.6.1     - cloth_config 11.1.136     - clumps 12.0.0.4     - comforts 6.4.0+1.20.1     - controlling 12.0.2     - corgilib 4.0.3.3     - creativecore 2.12.30     - cristellib 1.1.6     - cupboard 1.20.1-2.7     - curios 5.11.1+1.20.1     - curiosbackslot 4.0.6-nc     - decorative_blocks 4.1.3     - doapi 1.2.15         \-- terraform 7.0.1     - domum_ornamentum 1.20.1-1.0.186-RELEASE     - dragonseeker 1.2.0-1.20.1     - dungeons_enhanced 5.3.0     - embeddium 0.3.31+mc1.20.1         \-- rubidium 0.7.1     - embeddium_extra 0.5.4.4+mc1.20.1-build.131     - enchdesc 17.1.19     - entityculling 1.7.2     - epic_knights_ice_and_fire 1.0     - epic_knights_ores_and_alloys 1.1     - explorify 1.6.2     - fallingleaves 2.1.0     - farmersdelight 1.20.1-1.2.6     - ferritecore 6.0.1     - forge 47.3.12     - framework 0.7.12     - geckolib 4.7     - geophilic 3.2     - glitchcore 0.0.1.1     - goblintraders 1.9.3     - gravestone 1.20.1-1.0.24     - guardvillagers 1.20.1-1.6.10     - handcrafted 3.0.6     - iceandfire 2.1.13-1.20.1     - immersive_weathering 1.20.1-2.0.3     - jade 11.12.2+forge     - jei 15.12.2.51     - jeresources 1.4.0.247     - kambrik 6.1.1+1.20.1     - kobolds 2.12.0     - kotlinforforge 4.11.0     - kubejs 2001.6.5-build.16     - leavesbegone 8.0.0     - leawind_third_person 2.2.0     - letmedespawn 1.4.4     - libraryferret 4.0.0     - magistuarmory 9.21     - magistuarmoryaddon 1.22     - map_atlases 1.20-6.0.12         \-- mixinextras 0.4.1     - mcwbridges 3.0.0     - mcwdoors 1.1.1     - mcwfences 1.1.2     - mcwfurnitures 3.3.0     - mcwlights 1.1.0     - mcwpaintings 1.0.5     - mcwpaths 1.0.5     - mcwroofs 2.3.1     - mcwtrpdoors 1.1.4     - mcwwindows 2.3.0     - meadow 1.3.19         \-- mixinsquared 0.1.2-beta.5     - medieval_boomsticks 1.01     - medievalmusic 1.20.1-2.1     - minecraft 1.20.1     - modernfix 5.20.0+mc1.20.1     - moonlight 1.20-2.13.51     - mousetweaks 2.25.1     - mowziesmobs 1.6.4     - naturescompass 1.20.1-1.11.2-forge     - oculus 1.8.0     - ohthetreesyoullgrow 1.20.1-1.3.4     - patchouli 1.20.1-84-FORGE     - paths 1.0.0     - placebo 8.6.2     - playeranimator 1.0.2-rc1+1.20     - polymorph 0.49.8+1.20.1         \-- spectrelib 0.13.17+1.20.1     - puzzleslib 8.1.25         \-- puzzlesaccessapi 8.0.7     - realmrpg_skeletons 1.1.0     - recruits 1.12.3     - resourcefullib 2.1.29     - rhino 2001.2.3-build.6     - rightclickharvest 3.2.3+1.20.1-forge     - seadwellers 2.9.9     - searchables 1.0.3     - sereneseasons 9.1.0.0     - slavicarmory 1.5     - smallships 2.0.0-b1.4     - snowundertrees 1.4.6     - spark 1.10.53     - structure_gel 2.16.2     - structurize 1.20.1-1.0.742-RELEASE     - supplementaries 1.20-3.1.11     - t_and_t 0.0NONE     - terrablender 3.0.1.7     - terralith 2.5.4     - vinery 1.4.37     - weaponmaster_ydm 4.2.3 [02:17:20] [main/WARN]: Reference map 'cristellib-forge-refmap.json' for cristellib.mixins.json could not be read. If this is a development environment you can ignore this message [02:17:20] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:20] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:21] [main/WARN]: Error loading class: net/raphimc/immediatelyfast/feature/map_atlas_generation/MapAtlasTexture (java.lang.ClassNotFoundException: net.raphimc.immediatelyfast.feature.map_atlas_generation.MapAtlasTexture) [02:17:21] [main/WARN]: Error loading class: mekanism/client/render/entity/RenderFlame (java.lang.ClassNotFoundException: mekanism.client.render.entity.RenderFlame) [02:17:21] [main/WARN]: Error loading class: mekanism/client/render/armor/MekaSuitArmor (java.lang.ClassNotFoundException: mekanism.client.render.armor.MekaSuitArmor) [02:17:21] [main/WARN]: Error loading class: mezz/modnametooltip/TooltipEventHandler (java.lang.ClassNotFoundException: mezz.modnametooltip.TooltipEventHandler) [02:17:21] [main/WARN]: Error loading class: me/shedaniel/rei/impl/client/ClientHelperImpl (java.lang.ClassNotFoundException: me.shedaniel.rei.impl.client.ClientHelperImpl) [02:17:21] [main/WARN]: Error loading class: twilightforest/TFMagicMapData$TFMapDecoration (java.lang.ClassNotFoundException: twilightforest.TFMagicMapData$TFMapDecoration) [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.WorldRendererMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.ClientWorldMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.world.sky.BackgroundRendererMixin' as rule 'mixin.features.render.world.sky' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.gui.font.GlyphRendererMixin' as rule 'mixin.features.render.gui.font' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.gui.font.FontSetMixin' as rule 'mixin.features.render.gui.font' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.shadows.EntityRenderDispatcherMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.remove_streams.ModelPartMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.remove_streams.HierarchicalModelMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.fast_render.ModelPartMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.fast_render.CuboidMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/WARN]: Force-disabling mixin 'features.render.entity.cull.EntityRendererMixin' as rule 'mixin.features.render.entity' (added by mods [oculus]) disables it and children [02:17:22] [main/INFO]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.4.1). [02:17:22] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:22] [main/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:22] [main/WARN]: Static binding violation: PRIVATE @Overwrite method m_216202_ in modernfix-forge.mixins.json:perf.tag_id_caching.TagOrElementLocationMixin cannot reduce visibiliy of PUBLIC target method, visibility will be upgraded. [02:17:23] [pool-4-thread-1/INFO]: ModernFix reached bootstrap stage (9.268 s after launch) [02:17:23] [pool-4-thread-1/WARN]: @Final field delegatesByName:Ljava/util/Map; in modernfix-forge.mixins.json:perf.forge_registry_alloc.ForgeRegistryMixin should be final [02:17:23] [pool-4-thread-1/WARN]: @Final field delegatesByValue:Ljava/util/Map; in modernfix-forge.mixins.json:perf.forge_registry_alloc.ForgeRegistryMixin should be final [02:17:24] [pool-4-thread-1/INFO]: Vanilla bootstrap took 968 milliseconds [02:17:24] [pool-4-thread-1/INFO]: Patching IForgeItemStack#getEnchantmentLevel [02:17:24] [pool-4-thread-1/INFO]: Patching IForgeItemStack#getEnchantmentLevel
    • Hello, Can anyone provide some pointers on generating TallFlowerBlocks using Datagen? I have only been successful generating a two-block tall plant with the bottom block as both, the top block as both, or without any texture applied. It seems that I cannot figure out a method to call that would properly generate the (or any) blockstate profile for a TallFlowerBlock. Thank you.
    • instead of deleting the whole mod, just delete the config files related to it, i dont know which in specific but it work for me and kept the waypoints
    • I am having this issue as well. It crashes immediately after hitting play from the launcher. I am able to play vanilla minecraft and also optifine, both 1.21.4 and before. How do I view the crash report? I am on Ubuntu 20.04. I checked my ~/.minecraft folder and the crash isn't there. On the launcher I see "An unexpected issue occurred and the game has crashed. We're sorry for the inconvenience. Crash dump sent! Exit Code: 1" I am trying to play version 1.21.4-54.0.17, which I downloaded from the forge website.
    • Ive recently made an ATM 8 server with some family. It was running fine for the first few hours but it seems to crash every 10 minutes now. Ive no idea on how to properly read the crash report so i was hoping someone here could help me out.   https://pastebin.com/KeWyDZd1    
  • Topics

×
×
  • Create New...

Important Information

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