Jump to content

Recommended Posts

Posted (edited)

Hello! I have made a dimension and custom biomes. I want to have floating islands only in one biome so I copied code from ChunkGeneratorEnd, pasted it into my ChunkGenerator and code from ChunkGeneratorEnd is done only in FloatingIslands biome. Though I've got some problems on borders of the biome: https://i.imgur.com/vzFE1yl.png . So the goal is to somehow smooth these pieces, or maybe let chunkgenerator complete generation if it's out the biome border but basing on noise the stone should be generated here. Does anyone have any idea or can help me?
Here's my ChunkGenerator:
 

Spoiler

public class ChunkGeneratorMystic implements IChunkGenerator
{
    protected static final IBlockState STONE = KCore.MythicStone.getDefaultState();
    private final Random rand;
    private NoiseGeneratorOctaves minLimitPerlinNoise;
    private NoiseGeneratorOctaves maxLimitPerlinNoise;
    private NoiseGeneratorOctaves mainPerlinNoise;
    private NoiseGeneratorPerlin surfaceNoise;
    public NoiseGeneratorOctaves scaleNoise;
    public NoiseGeneratorOctaves depthNoise;
    public NoiseGeneratorOctaves forestNoise;
    private final World world;
    private final WorldType terrainType;
    private final double[] heightMap;
    private final float[] biomeWeights;
    private ChunkGeneratorSettings settings;
    private IBlockState oceanBlock = Blocks.WATER.getDefaultState();
    private double[] depthBuffer = new double[256];
    private Biome[] biomesForGeneration;
    double[] mainNoiseRegion;
    double[] minLimitRegion;
    double[] maxLimitRegion;
    double[] depthRegion;
    private MapGenBase caveGenerator = new MapGenKetherCaves();
    
    //Islands
    private NoiseGeneratorOctaves lperlinNoise1;
    private NoiseGeneratorOctaves lperlinNoise2;
    private NoiseGeneratorOctaves perlinNoise1;
    public NoiseGeneratorOctaves noiseGen5;
    public NoiseGeneratorOctaves noiseGen6;
    private NoiseGeneratorSimplex islandNoise;
    private double[] buffer;
    double[] pnr;
    double[] ar;
    double[] br;
    private int chunkX = 0;
    private int chunkZ = 0;
    private int upperScale=100;

    public ChunkGeneratorMystic(World worldIn, long seed)
    {
        //caveGenerator = net.minecraftforge.event.terraingen.TerrainGen.getModdedMapGen(caveGenerator, net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.CAVE);
        this.world = worldIn;
        this.terrainType = worldIn.getWorldInfo().getTerrainType();
        this.rand = new Random(seed);
        this.minLimitPerlinNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.maxLimitPerlinNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.mainPerlinNoise = new NoiseGeneratorOctaves(this.rand, 8);
        this.surfaceNoise = new NoiseGeneratorPerlin(this.rand, 4);
        this.scaleNoise = new NoiseGeneratorOctaves(this.rand, 10);
        this.depthNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.forestNoise = new NoiseGeneratorOctaves(this.rand, 8);
        this.heightMap = new double[825];
        this.biomeWeights = new float[25];

        for (int i = -2; i <= 2; ++i)
        {
            for (int j = -2; j <= 2; ++j)
            {
                float f = 10.0F / MathHelper.sqrt((float)(i * i + j * j) + 0.2F);
                this.biomeWeights[i + 2 + (j + 2) * 5] = f;
            }
        }
        
        this.oceanBlock = Blocks.WATER.getDefaultState();
        worldIn.setSeaLevel(63);
        this.settings = ChunkGeneratorSettings.Factory.jsonToFactory("nope").build();


        net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld ctx =
                new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld(minLimitPerlinNoise, maxLimitPerlinNoise, mainPerlinNoise, surfaceNoise, scaleNoise, depthNoise, forestNoise);
        ctx = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(worldIn, this.rand, ctx);
        this.minLimitPerlinNoise = ctx.getLPerlin1();
        this.maxLimitPerlinNoise = ctx.getLPerlin2();
        this.mainPerlinNoise = ctx.getPerlin();
        this.surfaceNoise = ctx.getHeight();
        this.scaleNoise = ctx.getScale();
        this.depthNoise = ctx.getDepth();
        this.forestNoise = ctx.getForest();
        
        //islands
        this.lperlinNoise1 = new NoiseGeneratorOctaves(this.rand, 16);
        this.lperlinNoise2 = new NoiseGeneratorOctaves(this.rand, 16);
        this.perlinNoise1 = new NoiseGeneratorOctaves(this.rand, 8);
        this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);
        this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);
        this.islandNoise = new NoiseGeneratorSimplex(this.rand);
        net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextEnd ctx2 =
                new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextEnd(lperlinNoise1, lperlinNoise2, perlinNoise1, noiseGen5, noiseGen6, islandNoise);
        ctx2 = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(worldIn, this.rand, ctx2);
        this.lperlinNoise1 = ctx2.getLPerlin1();
        this.lperlinNoise2 = ctx2.getLPerlin2();
        this.perlinNoise1 = ctx2.getPerlin();
        this.noiseGen5 = ctx2.getDepth();
        this.noiseGen6 = ctx2.getScale();
        this.islandNoise = ctx2.getIsland();
    }

    public void setBlocksInChunk(int x, int z, ChunkPrimer primer)
    {
        this.biomesForGeneration = this.world.getBiomeProvider().getBiomesForGeneration(this.biomesForGeneration, x * 4 - 2, z * 4 - 2, 10, 10);
        this.generateHeightmap(x * 4, 0, z * 4);

        for (int i = 0; i < 4; ++i)
        {
            int j = i * 5;
            int k = (i + 1) * 5;

            for (int l = 0; l < 4; ++l)
            {
                int i1 = (j + l) * 33;
                int j1 = (j + l + 1) * 33;
                int k1 = (k + l) * 33;
                int l1 = (k + l + 1) * 33;

                for (int i2 = 0; i2 < 32; ++i2)
                {
                    double d0 = 0.125D;
                    double d1 = this.heightMap[i1 + i2];
                    double d2 = this.heightMap[j1 + i2];
                    double d3 = this.heightMap[k1 + i2];
                    double d4 = this.heightMap[l1 + i2];
                    double d5 = (this.heightMap[i1 + i2 + 1] - d1) * 0.125D;
                    double d6 = (this.heightMap[j1 + i2 + 1] - d2) * 0.125D;
                    double d7 = (this.heightMap[k1 + i2 + 1] - d3) * 0.125D;
                    double d8 = (this.heightMap[l1 + i2 + 1] - d4) * 0.125D;

                    for (int j2 = 0; j2 < 8; ++j2)
                    {
                        double d9 = 0.25D;
                        double d10 = d1;
                        double d11 = d2;
                        double d12 = (d3 - d1) * 0.25D;
                        double d13 = (d4 - d2) * 0.25D;

                        for (int k2 = 0; k2 < 4; ++k2)
                        {
                            double d14 = 0.25D;
                            double d16 = (d11 - d10) * 0.25D;
                            double lvt_45_1_ = d10 - d16;

                            for (int l2 = 0; l2 < 4; ++l2)
                            {
                                if ((lvt_45_1_ += d16) > 0.0D)
                                {
                                    primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, STONE);
                                }
                                else if (i2 * 8 + j2 < this.settings.seaLevel)
                                {
                                    primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, this.oceanBlock);
                                }
                            }

                            d10 += d12;
                            d11 += d13;
                        }

                        d1 += d5;
                        d2 += d6;
                        d3 += d7;
                        d4 += d8;
                    }
                }
            }
        }
    }

    public void replaceBiomeBlocks(int x, int z, ChunkPrimer primer, Biome[] biomesIn)
    {
        if (!net.minecraftforge.event.ForgeEventFactory.onReplaceBiomeBlocks(this, x, z, primer, this.world)) return;
        double d0 = 0.03125D;
        this.depthBuffer = this.surfaceNoise.getRegion(this.depthBuffer, (double)(x * 16), (double)(z * 16), 16, 16, 0.0625D, 0.0625D, 1.0D);

        for (int i = 0; i < 16; ++i)
        {
            for (int j = 0; j < 16; ++j)
            {
                Biome biome = biomesIn[j + i * 16];
                biome.genTerrainBlocks(this.world, this.rand, primer, x * 16 + i, z * 16 + j, this.depthBuffer[j + i * 16]);
            }
        }
    }



    private void generateHeightmap(int p_185978_1_, int p_185978_2_, int p_185978_3_)
    {
        this.depthRegion = this.depthNoise.generateNoiseOctaves(this.depthRegion, p_185978_1_, p_185978_3_, 5, 5, (double)this.settings.depthNoiseScaleX, (double)this.settings.depthNoiseScaleZ, (double)this.settings.depthNoiseScaleExponent);
        float f = this.settings.coordinateScale;
        float f1 = this.settings.heightScale;
        this.mainNoiseRegion = this.mainPerlinNoise.generateNoiseOctaves(this.mainNoiseRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)(f / this.settings.mainNoiseScaleX), (double)(f1 / this.settings.mainNoiseScaleY), (double)(f / this.settings.mainNoiseScaleZ));
        this.minLimitRegion = this.minLimitPerlinNoise.generateNoiseOctaves(this.minLimitRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)f, (double)f1, (double)f);
        this.maxLimitRegion = this.maxLimitPerlinNoise.generateNoiseOctaves(this.maxLimitRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)f, (double)f1, (double)f);
        int i = 0;
        int j = 0;

        for (int k = 0; k < 5; ++k)
        {
            for (int l = 0; l < 5; ++l)
            {
                float f2 = 0.0F;
                float f3 = 0.0F;
                float f4 = 0.0F;
                int i1 = 2;
                Biome biome = this.biomesForGeneration[k + 2 + (l + 2) * 10];

                for (int j1 = -2; j1 <= 2; ++j1)
                {
                    for (int k1 = -2; k1 <= 2; ++k1)
                    {
                        Biome biome1 = this.biomesForGeneration[k + j1 + 2 + (l + k1 + 2) * 10];
                        float f5 = this.settings.biomeDepthOffSet + biome1.getBaseHeight() * this.settings.biomeDepthWeight;
                        float f6 = this.settings.biomeScaleOffset + biome1.getHeightVariation() * this.settings.biomeScaleWeight;

                        if (this.terrainType == WorldType.AMPLIFIED && f5 > 0.0F)
                        {
                            f5 = 1.0F + f5 * 2.0F;
                            f6 = 1.0F + f6 * 4.0F;
                        }

                        float f7 = this.biomeWeights[j1 + 2 + (k1 + 2) * 5] / (f5 + 2.0F);

                        if (biome1.getBaseHeight() > biome.getBaseHeight())
                        {
                            f7 /= 2.0F;
                        }

                        f2 += f6 * f7;
                        f3 += f5 * f7;
                        f4 += f7;
                    }
                }

                f2 = f2 / f4;
                f3 = f3 / f4;
                f2 = f2 * 0.9F + 0.1F;
                f3 = (f3 * 4.0F - 1.0F) / 8.0F;
                double d7 = this.depthRegion[j] / 8000.0D;

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

                d7 = d7 * 3.0D - 2.0D;

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

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

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

                    d7 = d7 / 8.0D;
                }

                ++j;
                double d8 = (double)f3;
                double d9 = (double)f2;
                d8 = d8 + d7 * 0.2D;
                d8 = d8 * (double)this.settings.baseSize / 8.0D;
                double d0 = (double)this.settings.baseSize + d8 * 4.0D;

                for (int l1 = 0; l1 < 33; ++l1)
                {
                    double d1 = ((double)l1 - d0) * (double)this.settings.stretchY * 128.0D / 256.0D / d9;

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

                    double d2 = this.minLimitRegion[i] / (double)this.settings.lowerLimitScale;
                    double d3 = this.maxLimitRegion[i] / (double)this.settings.upperLimitScale;
                    double d4 = (this.mainNoiseRegion[i] / 10.0D + 1.0D) / 2.0D;
                    double d5 = MathHelper.clampedLerp(d2, d3, d4) - d1;

                    if (l1 > 29)
                    {
                        double d6 = (double)((float)(l1 - 29) / 3.0F);
                        d5 = d5 * (1.0D - d6) + -10.0D * d6;
                    }

                    this.heightMap[i] = d5;
                    ++i;
                }
            }
        }
    }
    
    /**
     * Generates the chunk at the specified position, from scratch
     */
    public Chunk generateChunk(int x, int z)
    {
        this.rand.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
        ChunkPrimer chunkprimer = new ChunkPrimer();
        this.setBlocksInChunk(x, z, chunkprimer);
        this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16);
        this.replaceBiomeBlocks(x, z, chunkprimer, this.biomesForGeneration);
        
        int ii = x * 16;
        int j = z * 16;
        BlockPos blockpos = new BlockPos(ii, 0, j);
        Biome biome = this.world.getBiome(blockpos.add(16, 0, 16));
       if(biome == KCore.instance.FloatingIslands) {
        	this.setBlocksInChunkIsland(x,z,chunkprimer);
        	this.buildSurfaces(chunkprimer);
        }
       
       // this.caveGenerator.generate(this.world, x, z, chunkprimer);
        if(rand.nextInt(15)==0) {
        	caveGenerator.generate(world, x, z, chunkprimer);
        }

        Chunk chunk = new Chunk(this.world, chunkprimer, x, z);
        byte[] abyte = chunk.getBiomeArray();

        for (int i = 0; i < abyte.length; ++i)
        {
            abyte[i] = (byte)Biome.getIdForBiome(this.biomesForGeneration[i]);
        }


 
        chunk.generateSkylightMap();
        return chunk;
    }

    /**
     * Generate initial structures in this chunk, e.g. mineshafts, temples, lakes, and dungeons
     */
    public void populate(int x, int z)
    {
        BlockFalling.fallInstantly = true;

        int i = x * 16;
        int j = z * 16;
        BlockPos blockpos = new BlockPos(i, 0, j);
        Biome biome = this.world.getBiome(blockpos.add(16, 0, 16));
        this.rand.setSeed(this.world.getSeed());
        long k = this.rand.nextLong() / 2L * 2L + 1L;
        long l = this.rand.nextLong() / 2L * 2L + 1L;
        this.rand.setSeed((long)x * k + (long)z * l ^ this.world.getSeed());
        boolean flag = false;
        ChunkPos chunkpos = new ChunkPos(x, z);

        net.minecraftforge.event.ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, flag);


        if (biome != Biomes.DESERT && biome != Biomes.DESERT_HILLS && this.settings.useWaterLakes && !flag && this.rand.nextInt(this.settings.waterLakeChance) == 0)
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE))
        {
            int i1 = this.rand.nextInt(16) + 8;
            int j1 = this.rand.nextInt(256);
            int k1 = this.rand.nextInt(16) + 8;
            (new WorldGenMysticLakes(Blocks.WATER)).generate(this.world, this.rand, blockpos.add(i1, j1, k1));
        }

        if (!flag && this.rand.nextInt(this.settings.lavaLakeChance / 10) == 0 && this.settings.useLavaLakes)
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAVA))
        {
            int i2 = this.rand.nextInt(16) + 8;
            int l2 = this.rand.nextInt(this.rand.nextInt(248) + 8);
            int k3 = this.rand.nextInt(16) + 8;

            if (l2 < this.world.getSeaLevel() || this.rand.nextInt(this.settings.lavaLakeChance / 8) == 0)
            {
                (new WorldGenMysticLakes(Blocks.LAVA)).generate(this.world, this.rand, blockpos.add(i2, l2, k3));
            }
        }

        biome.decorate(this.world, this.rand, new BlockPos(i, 0, j));
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ANIMALS))
        WorldEntitySpawner.performWorldGenSpawning(this.world, biome, i + 8, j + 8, 16, 16, this.rand);
        blockpos = blockpos.add(8, 0, 8);
        

        net.minecraftforge.event.ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, flag);

        BlockFalling.fallInstantly = true;

    }
    
    public void buildSurfaces(ChunkPrimer primer)
    {
        for (int i = 0; i < 16; ++i)
        {
            for (int j = 0; j < 16; ++j)
            {
                int k = 1;
                int l = -1;
                IBlockState iblockstate = KCore.MythicStone.getDefaultState();
                IBlockState iblockstate1 = KCore.MythicStone.getDefaultState();

                for (int i1 = 127; i1 >= 0; --i1)
                {
                    IBlockState iblockstate2 = primer.getBlockState(i, i1+upperScale, j);

                    if (iblockstate2.getMaterial() == Material.AIR)
                    {
                        l = -1;
                    }
                    else if (iblockstate2.getBlock() == Blocks.STONE)
                    {
                        if (l == -1)
                        {
                            l = 1;

                            if (i1 >= 0)
                            {
                                primer.setBlockState(i, i1+upperScale, j, iblockstate);
                            }
                            else
                            {
                                primer.setBlockState(i, i1+upperScale, j, iblockstate1);
                            }
                        }
                        else if (l > 0)
                        {
                            --l;
                            primer.setBlockState(i, i1+upperScale, j, iblockstate1);
                        }
                    }
                }
            }
        }
    }
    
	   /**
  * Generates a bare-bones chunk of nothing but stone or ocean blocks, formed, but featureless.
  */
 public void setBlocksInChunkIsland(int x, int z, ChunkPrimer primer)
 {
     int i = 2;
     int j = 3;
     int k = 33;
     int l = 3;
     this.buffer = this.getHeights(this.buffer, x * 2, 0, z * 2, 3, 33, 3);

     for (int i1 = 0; i1 < 2; ++i1)
     {
         for (int j1 = 0; j1 < 2; ++j1)
         {
             for (int k1 = 0; k1 < 32; ++k1)
             {
                 double d0 = 0.25D;
                 double d1 = this.buffer[((i1 + 0) * 3 + j1 + 0) * 33 + k1 + 0];
                 
                 double d2 = this.buffer[((i1 + 0) * 3 + j1 + 1) * 33 + k1 + 0];
                 double d3 = this.buffer[((i1 + 1) * 3 + j1 + 0) * 33 + k1 + 0];
                 double d4 = this.buffer[((i1 + 1) * 3 + j1 + 1) * 33 + k1 + 0];
                 double d5 = (this.buffer[((i1 + 0) * 3 + j1 + 0) * 33 + k1 + 1] - d1) * 0.25D;
                 double d6 = (this.buffer[((i1 + 0) * 3 + j1 + 1) * 33 + k1 + 1] - d2) * 0.25D;
                 double d7 = (this.buffer[((i1 + 1) * 3 + j1 + 0) * 33 + k1 + 1] - d3) * 0.25D;
                 double d8 = (this.buffer[((i1 + 1) * 3 + j1 + 1) * 33 + k1 + 1] - d4) * 0.25D;

                 for (int l1 = 0; l1 < 4; ++l1)
                 {
                     double d9 = 0.125D;
                     double d10 = d1;
                     double d11 = d2;
                     double d12 = (d3 - d1) * 0.125D;
                     double d13 = (d4 - d2) * 0.125D;

                     for (int i2 = 0; i2 < 8; ++i2)
                     {
                         double d14 = 0.125D;
                         double d15 = d10;
                         double d16 = (d11 - d10) * 0.125D;

                         for (int j2 = 0; j2 < 8; ++j2)
                         {
                             IBlockState iblockstate = Blocks.AIR.getDefaultState();

                             if (d15 > 0.0D)
                             {
                                 iblockstate = Blocks.STONE.getDefaultState();
                             }

                             int k2 = i2 + i1 * 8;
                             int l2 = l1 + k1 * 4;
                             int i3 = j2 + j1 * 8;
                             primer.setBlockState(k2, l2+upperScale, i3, iblockstate);
                             
                             d15 += d16;

                         }

                         d10 += d12;
                         d11 += d13;
                     }

                     d1 += d5;
                     d2 += d6;
                     d3 += d7;
                     d4 += d8;
                 }
             }
         }
     }
 }
 

 
 private double[] getHeights(double[] p_185963_1_, int p_185963_2_, int p_185963_3_, int p_185963_4_, int p_185963_5_, int p_185963_6_, int p_185963_7_)
 {
     if (p_185963_1_ == null)
     {
         p_185963_1_ = new double[p_185963_5_ * p_185963_6_ * p_185963_7_];
     }

     double d0 = 684.412D;
     double d1 = 684.412D;
     d0 = d0 * 2.0D;
     this.pnr = this.perlinNoise1.generateNoiseOctaves(this.pnr, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0 / 80.0D, 4.277575000000001D, d0 / 80.0D);
     this.ar = this.lperlinNoise1.generateNoiseOctaves(this.ar, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0, 684.412D, d0);
     this.br = this.lperlinNoise2.generateNoiseOctaves(this.br, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0, 684.412D, d0);
     int i = p_185963_2_ / 2;
     int j = p_185963_4_ / 2;
     int k = 0;

     for (int l = 0; l < p_185963_5_; ++l)
     {
         for (int i1 = 0; i1 < p_185963_7_; ++i1)
         {
             float f = this.getIslandHeightValue(i, j, l, i1);

             for (int j1 = 0; j1 < p_185963_6_; ++j1)
             {
                 double d2 = this.ar[k] / 2048.0D;
                 double d3 = this.br[k] / 2048.0D;
                 double d5 = (this.pnr[k] / 10.0D + 1.0D) / 8.0D;
                 double d4;

                 if (d5 < 0.0D)
                 {
                     d4 = d2;
                 }
                 else if (d5 > 1.0D)
                 {
                     d4 = d3;
                 }
                 else
                 {
                     d4 = d2 + (d3 - d2) * d5;
                 }

                 d4 = d4 - 8.0D;
                 d4 = d4 + (double)f;
                 int k1 = 2;

                 if (j1 > p_185963_6_ / 2 - k1)
                 {
                     double d6 = (double)((float)(j1 - (p_185963_6_ / 2 - k1)) / 64.0F);
                     d6 = MathHelper.clamp(d6, 0.0D, 1.0D);
                     d4 = d4 * (1.0D - d6) + -3000.0D * d6;
                 }

                 k1 = 8;

                 if (j1 < k1)
                 {
                     double d7 = (double)((float)(k1 - j1) / ((float)k1 - 1.0F));
                     d4 = d4 * (1.0D - d7) + -30.0D * d7;
                 }

                 p_185963_1_[k] = d4;
                 ++k;
             }
         }
     }

     return p_185963_1_;
 }
 
 private float getIslandHeightValue(int p_185960_1_, int p_185960_2_, int p_185960_3_, int p_185960_4_)
 {
     float f = (float)(p_185960_1_ * 2 + p_185960_3_);
     float f1 = (float)(p_185960_2_ * 2 + p_185960_4_);
     float f2 = 100.0F - MathHelper.sqrt(f * f + f1 * f1) * 8.0F;

     if (f2 > 80.0F)
     {
         f2 = 80.0F;
     }

     if (f2 < -100.0F)
     {
         f2 = -100.0F;
     }

     for (int i = -12; i <= 12; ++i)
     {
         for (int j = -12; j <= 12; ++j)
         {
             long k = (long)(p_185960_1_ + i);
             long l = (long)(p_185960_2_ + j);

             if (this.islandNoise.getValue((double)k, (double)l) < -0.8999999761581421D)
             {
                 float f3 = (MathHelper.abs((float)k) * 3439.0F + MathHelper.abs((float)l) * 147.0F) % 13.0F + 9.0F;
                 f = (float)(p_185960_3_ - i * 2);
                 f1 = (float)(p_185960_4_ - j * 2);
                 float f4 = 100.0F - MathHelper.sqrt(f * f + f1 * f1) * f3;

                 if (f4 > 80.0F)
                 {
                     f4 = 80.0F;
                 }

                 if (f4 < -100.0F)
                 {
                     f4 = -100.0F;
                 }

                 if (f4 > f2)
                 {
                     f2 = f4;
                 }
             }
         }
     }

     return f2;
 }

    public List<Biome.SpawnListEntry> getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos)
    {
        Biome biome = this.world.getBiome(pos);

        return biome.getSpawnableList(creatureType);
    }

	@Override
	public boolean generateStructures(Chunk chunkIn, int x, int z) {
		return false;
	}

	@Override
	public BlockPos getNearestStructurePos(World worldIn, String structureName, BlockPos position,
			boolean findUnexplored) {
		return null;
	}

	@Override
	public void recreateStructures(Chunk chunkIn, int x, int z) {
		
	}

	@Override
	public boolean isInsideStructure(World worldIn, String structureName, BlockPos pos) {
		return false;
	}
}

 

 I thought of checking neighbour heightMap if the method is generating blocks on a border of chunk and if it is positive than generate neighbour chunk,but operating on this heightMap seems quite difficult.

Edited by Krevik
Posted

I am no expert on this, but i would propose to get rid of the if(biome == KCore.instance.FloatingIslands) line. Floating islands will be created everywhere but there shouldn't be any chunk problems with chunk borders. If you really need to have a floating island biome at these positions then let the setBlocksInChunkIsland method return something telling you if there was at least one non-air block set, so you can fix the biome.

  • Like 1
Posted (edited)
47 minutes ago, null said:

I am no expert on this, but i would propose to get rid of the if(biome == KCore.instance.FloatingIslands) line. Floating islands will be created everywhere but there shouldn't be any chunk problems with chunk borders. If you really need to have a floating island biome at these positions then let the setBlocksInChunkIsland method return something telling you if there was at least one non-air block set, so you can fix the biome.

Hmm I think I understand what you've got on your mind, thanks, will try! Anyway I am not sure if it will work cause these non air block are generated exactly at the chunk border so the new chunk is just empty and has no floating stones to detect

Edited by Krevik
Posted

Biomes are not chunk-based. They are block-based, ignoring the y (meaning a single chunk can have 256 different biomes inside of it, each on a different x&z coord)
You need to use the biome-check on each block-position when placing the actual block, not just check it once per chunk.

Also previously known as eAndPi.

"Pi, is there a station coming up where we can board your train of thought?" -Kronnn

Published Mods: Underworld

Handy links: Vic_'s Forge events Own WIP Tutorials.

Posted
2 minutes ago, Matryoshika said:

Biomes are not chunk-based. They are block-based, ignoring the y (meaning a single chunk can have 256 different biomes inside of it, each on a different x&z coord)
You need to use the biome-check on each block-position when placing the actual block, not just check it once per chunk.

Typically a chunk never has more than 2, and rarely 3, but yes.

I've played a custom map where every achievement expanded the world border by 1 block (starting with it being 1 block in size). Yes, there was a way to visit every biome.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)
47 minutes ago, Matryoshika said:

Biomes are not chunk-based. They are block-based, ignoring the y (meaning a single chunk can have 256 different biomes inside of it, each on a different x&z coord)
You need to use the biome-check on each block-position when placing the actual block, not just check it once per chunk.

I get something like that: https://i.imgur.com/OkOPOqJ.png . NOTHING :/
Here's updated code:
 

Spoiler

public class ChunkGeneratorMystic implements IChunkGenerator
{
    protected static final IBlockState STONE = KCore.MythicStone.getDefaultState();
    private final Random rand;
    private NoiseGeneratorOctaves minLimitPerlinNoise;
    private NoiseGeneratorOctaves maxLimitPerlinNoise;
    private NoiseGeneratorOctaves mainPerlinNoise;
    private NoiseGeneratorPerlin surfaceNoise;
    public NoiseGeneratorOctaves scaleNoise;
    public NoiseGeneratorOctaves depthNoise;
    public NoiseGeneratorOctaves forestNoise;
    private final World world;
    private final WorldType terrainType;
    private final double[] heightMap;
    private final float[] biomeWeights;
    private ChunkGeneratorSettings settings;
    private IBlockState oceanBlock = Blocks.WATER.getDefaultState();
    private double[] depthBuffer = new double[256];
    private Biome[] biomesForGeneration;
    double[] mainNoiseRegion;
    double[] minLimitRegion;
    double[] maxLimitRegion;
    double[] depthRegion;
    private MapGenBase caveGenerator = new MapGenKetherCaves();
    
    //Islands
    private NoiseGeneratorOctaves lperlinNoise1;
    private NoiseGeneratorOctaves lperlinNoise2;
    private NoiseGeneratorOctaves perlinNoise1;
    public NoiseGeneratorOctaves noiseGen5;
    public NoiseGeneratorOctaves noiseGen6;
    private NoiseGeneratorSimplex islandNoise;
    private double[] buffer;
    double[] pnr;
    double[] ar;
    double[] br;
    private int chunkX = 0;
    private int chunkZ = 0;
    private int upperScale=100;

    public ChunkGeneratorMystic(World worldIn, long seed)
    {
        //caveGenerator = net.minecraftforge.event.terraingen.TerrainGen.getModdedMapGen(caveGenerator, net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.CAVE);
        this.world = worldIn;
        this.terrainType = worldIn.getWorldInfo().getTerrainType();
        this.rand = new Random(seed);
        this.minLimitPerlinNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.maxLimitPerlinNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.mainPerlinNoise = new NoiseGeneratorOctaves(this.rand, 8);
        this.surfaceNoise = new NoiseGeneratorPerlin(this.rand, 4);
        this.scaleNoise = new NoiseGeneratorOctaves(this.rand, 10);
        this.depthNoise = new NoiseGeneratorOctaves(this.rand, 16);
        this.forestNoise = new NoiseGeneratorOctaves(this.rand, 8);
        this.heightMap = new double[825];
        this.biomeWeights = new float[25];

        for (int i = -2; i <= 2; ++i)
        {
            for (int j = -2; j <= 2; ++j)
            {
                float f = 10.0F / MathHelper.sqrt((float)(i * i + j * j) + 0.2F);
                this.biomeWeights[i + 2 + (j + 2) * 5] = f;
            }
        }
        
        this.oceanBlock = Blocks.WATER.getDefaultState();
        worldIn.setSeaLevel(63);
        this.settings = ChunkGeneratorSettings.Factory.jsonToFactory("nope").build();


        net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld ctx =
                new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextOverworld(minLimitPerlinNoise, maxLimitPerlinNoise, mainPerlinNoise, surfaceNoise, scaleNoise, depthNoise, forestNoise);
        ctx = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(worldIn, this.rand, ctx);
        this.minLimitPerlinNoise = ctx.getLPerlin1();
        this.maxLimitPerlinNoise = ctx.getLPerlin2();
        this.mainPerlinNoise = ctx.getPerlin();
        this.surfaceNoise = ctx.getHeight();
        this.scaleNoise = ctx.getScale();
        this.depthNoise = ctx.getDepth();
        this.forestNoise = ctx.getForest();
        
        //islands
        this.lperlinNoise1 = new NoiseGeneratorOctaves(this.rand, 16);
        this.lperlinNoise2 = new NoiseGeneratorOctaves(this.rand, 16);
        this.perlinNoise1 = new NoiseGeneratorOctaves(this.rand, 8);
        this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);
        this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);
        this.islandNoise = new NoiseGeneratorSimplex(this.rand);
        net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextEnd ctx2 =
                new net.minecraftforge.event.terraingen.InitNoiseGensEvent.ContextEnd(lperlinNoise1, lperlinNoise2, perlinNoise1, noiseGen5, noiseGen6, islandNoise);
        ctx2 = net.minecraftforge.event.terraingen.TerrainGen.getModdedNoiseGenerators(worldIn, this.rand, ctx2);
        this.lperlinNoise1 = ctx2.getLPerlin1();
        this.lperlinNoise2 = ctx2.getLPerlin2();
        this.perlinNoise1 = ctx2.getPerlin();
        this.noiseGen5 = ctx2.getDepth();
        this.noiseGen6 = ctx2.getScale();
        this.islandNoise = ctx2.getIsland();
    }

    public void setBlocksInChunk(int x, int z, ChunkPrimer primer)
    {
        this.biomesForGeneration = this.world.getBiomeProvider().getBiomesForGeneration(this.biomesForGeneration, x * 4 - 2, z * 4 - 2, 10, 10);
        this.generateHeightmap(x * 4, 0, z * 4);

        for (int i = 0; i < 4; ++i)
        {
            int j = i * 5;
            int k = (i + 1) * 5;

            for (int l = 0; l < 4; ++l)
            {
                int i1 = (j + l) * 33;
                int j1 = (j + l + 1) * 33;
                int k1 = (k + l) * 33;
                int l1 = (k + l + 1) * 33;

                for (int i2 = 0; i2 < 32; ++i2)
                {
                    double d0 = 0.125D;
                    double d1 = this.heightMap[i1 + i2];
                    double d2 = this.heightMap[j1 + i2];
                    double d3 = this.heightMap[k1 + i2];
                    double d4 = this.heightMap[l1 + i2];
                    double d5 = (this.heightMap[i1 + i2 + 1] - d1) * 0.125D;
                    double d6 = (this.heightMap[j1 + i2 + 1] - d2) * 0.125D;
                    double d7 = (this.heightMap[k1 + i2 + 1] - d3) * 0.125D;
                    double d8 = (this.heightMap[l1 + i2 + 1] - d4) * 0.125D;

                    for (int j2 = 0; j2 < 8; ++j2)
                    {
                        double d9 = 0.25D;
                        double d10 = d1;
                        double d11 = d2;
                        double d12 = (d3 - d1) * 0.25D;
                        double d13 = (d4 - d2) * 0.25D;

                        for (int k2 = 0; k2 < 4; ++k2)
                        {
                            double d14 = 0.25D;
                            double d16 = (d11 - d10) * 0.25D;
                            double lvt_45_1_ = d10 - d16;

                            for (int l2 = 0; l2 < 4; ++l2)
                            {
                                if ((lvt_45_1_ += d16) > 0.0D)
                                {
                                    primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, STONE);
                                }
                                else if (i2 * 8 + j2 < this.settings.seaLevel)
                                {
                                    primer.setBlockState(i * 4 + k2, i2 * 8 + j2, l * 4 + l2, this.oceanBlock);
                                }
                            }

                            d10 += d12;
                            d11 += d13;
                        }

                        d1 += d5;
                        d2 += d6;
                        d3 += d7;
                        d4 += d8;
                    }
                }
            }
        }
    }

    public void replaceBiomeBlocks(int x, int z, ChunkPrimer primer, Biome[] biomesIn)
    {
        if (!net.minecraftforge.event.ForgeEventFactory.onReplaceBiomeBlocks(this, x, z, primer, this.world)) return;
        double d0 = 0.03125D;
        this.depthBuffer = this.surfaceNoise.getRegion(this.depthBuffer, (double)(x * 16), (double)(z * 16), 16, 16, 0.0625D, 0.0625D, 1.0D);

        for (int i = 0; i < 16; ++i)
        {
            for (int j = 0; j < 16; ++j)
            {
                Biome biome = biomesIn[j + i * 16];
                biome.genTerrainBlocks(this.world, this.rand, primer, x * 16 + i, z * 16 + j, this.depthBuffer[j + i * 16]);
            }
        }
    }



    private void generateHeightmap(int p_185978_1_, int p_185978_2_, int p_185978_3_)
    {
        this.depthRegion = this.depthNoise.generateNoiseOctaves(this.depthRegion, p_185978_1_, p_185978_3_, 5, 5, (double)this.settings.depthNoiseScaleX, (double)this.settings.depthNoiseScaleZ, (double)this.settings.depthNoiseScaleExponent);
        float f = this.settings.coordinateScale;
        float f1 = this.settings.heightScale;
        this.mainNoiseRegion = this.mainPerlinNoise.generateNoiseOctaves(this.mainNoiseRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)(f / this.settings.mainNoiseScaleX), (double)(f1 / this.settings.mainNoiseScaleY), (double)(f / this.settings.mainNoiseScaleZ));
        this.minLimitRegion = this.minLimitPerlinNoise.generateNoiseOctaves(this.minLimitRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)f, (double)f1, (double)f);
        this.maxLimitRegion = this.maxLimitPerlinNoise.generateNoiseOctaves(this.maxLimitRegion, p_185978_1_, p_185978_2_, p_185978_3_, 5, 33, 5, (double)f, (double)f1, (double)f);
        int i = 0;
        int j = 0;

        for (int k = 0; k < 5; ++k)
        {
            for (int l = 0; l < 5; ++l)
            {
                float f2 = 0.0F;
                float f3 = 0.0F;
                float f4 = 0.0F;
                int i1 = 2;
                Biome biome = this.biomesForGeneration[k + 2 + (l + 2) * 10];

                for (int j1 = -2; j1 <= 2; ++j1)
                {
                    for (int k1 = -2; k1 <= 2; ++k1)
                    {
                        Biome biome1 = this.biomesForGeneration[k + j1 + 2 + (l + k1 + 2) * 10];
                        float f5 = this.settings.biomeDepthOffSet + biome1.getBaseHeight() * this.settings.biomeDepthWeight;
                        float f6 = this.settings.biomeScaleOffset + biome1.getHeightVariation() * this.settings.biomeScaleWeight;

                        if (this.terrainType == WorldType.AMPLIFIED && f5 > 0.0F)
                        {
                            f5 = 1.0F + f5 * 2.0F;
                            f6 = 1.0F + f6 * 4.0F;
                        }

                        float f7 = this.biomeWeights[j1 + 2 + (k1 + 2) * 5] / (f5 + 2.0F);

                        if (biome1.getBaseHeight() > biome.getBaseHeight())
                        {
                            f7 /= 2.0F;
                        }

                        f2 += f6 * f7;
                        f3 += f5 * f7;
                        f4 += f7;
                    }
                }

                f2 = f2 / f4;
                f3 = f3 / f4;
                f2 = f2 * 0.9F + 0.1F;
                f3 = (f3 * 4.0F - 1.0F) / 8.0F;
                double d7 = this.depthRegion[j] / 8000.0D;

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

                d7 = d7 * 3.0D - 2.0D;

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

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

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

                    d7 = d7 / 8.0D;
                }

                ++j;
                double d8 = (double)f3;
                double d9 = (double)f2;
                d8 = d8 + d7 * 0.2D;
                d8 = d8 * (double)this.settings.baseSize / 8.0D;
                double d0 = (double)this.settings.baseSize + d8 * 4.0D;

                for (int l1 = 0; l1 < 33; ++l1)
                {
                    double d1 = ((double)l1 - d0) * (double)this.settings.stretchY * 128.0D / 256.0D / d9;

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

                    double d2 = this.minLimitRegion[i] / (double)this.settings.lowerLimitScale;
                    double d3 = this.maxLimitRegion[i] / (double)this.settings.upperLimitScale;
                    double d4 = (this.mainNoiseRegion[i] / 10.0D + 1.0D) / 2.0D;
                    double d5 = MathHelper.clampedLerp(d2, d3, d4) - d1;

                    if (l1 > 29)
                    {
                        double d6 = (double)((float)(l1 - 29) / 3.0F);
                        d5 = d5 * (1.0D - d6) + -10.0D * d6;
                    }

                    this.heightMap[i] = d5;
                    ++i;
                }
            }
        }
    }
    
    /**
     * Generates the chunk at the specified position, from scratch
     */
    public Chunk generateChunk(int x, int z)
    {
        this.rand.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
        ChunkPrimer chunkprimer = new ChunkPrimer();
        this.setBlocksInChunk(x, z, chunkprimer);
        this.biomesForGeneration = this.world.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16);
        this.replaceBiomeBlocks(x, z, chunkprimer, this.biomesForGeneration);
        
        int ii = x * 16;
        int j = z * 16;
        BlockPos blockpos = new BlockPos(ii, 0, j);


       // this.caveGenerator.generate(this.world, x, z, chunkprimer);
        if(rand.nextInt(15)==0) {
        	caveGenerator.generate(world, x, z, chunkprimer);
        }

        Chunk chunk = new Chunk(this.world, chunkprimer, x, z);
        byte[] abyte = chunk.getBiomeArray();

        for (int i = 0; i < abyte.length; ++i)
        {
            abyte[i] = (byte)Biome.getIdForBiome(this.biomesForGeneration[i]);
        }


    	this.setBlocksInChunkIsland(world,x,z,chunkprimer);

        chunk.generateSkylightMap();
        return chunk;
    }

    /**
     * Generate initial structures in this chunk, e.g. mineshafts, temples, lakes, and dungeons
     */
    public void populate(int x, int z)
    {
        BlockFalling.fallInstantly = true;

        int i = x * 16;
        int j = z * 16;
        BlockPos blockpos = new BlockPos(i, 0, j);
        Biome biome = this.world.getBiome(blockpos.add(16, 0, 16));
        this.rand.setSeed(this.world.getSeed());
        long k = this.rand.nextLong() / 2L * 2L + 1L;
        long l = this.rand.nextLong() / 2L * 2L + 1L;
        this.rand.setSeed((long)x * k + (long)z * l ^ this.world.getSeed());
        boolean flag = false;
        ChunkPos chunkpos = new ChunkPos(x, z);

        net.minecraftforge.event.ForgeEventFactory.onChunkPopulate(true, this, this.world, this.rand, x, z, flag);


        if (biome != Biomes.DESERT && biome != Biomes.DESERT_HILLS && this.settings.useWaterLakes && !flag && this.rand.nextInt(this.settings.waterLakeChance) == 0)
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE))
        {
            int i1 = this.rand.nextInt(16) + 8;
            int j1 = this.rand.nextInt(256);
            int k1 = this.rand.nextInt(16) + 8;
            (new WorldGenMysticLakes(Blocks.WATER)).generate(this.world, this.rand, blockpos.add(i1, j1, k1));
        }

        if (!flag && this.rand.nextInt(this.settings.lavaLakeChance / 10) == 0 && this.settings.useLavaLakes)
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAVA))
        {
            int i2 = this.rand.nextInt(16) + 8;
            int l2 = this.rand.nextInt(this.rand.nextInt(248) + 8);
            int k3 = this.rand.nextInt(16) + 8;

            if (l2 < this.world.getSeaLevel() || this.rand.nextInt(this.settings.lavaLakeChance / 8) == 0)
            {
                (new WorldGenMysticLakes(Blocks.LAVA)).generate(this.world, this.rand, blockpos.add(i2, l2, k3));
            }
        }

        biome.decorate(this.world, this.rand, new BlockPos(i, 0, j));
        if (net.minecraftforge.event.terraingen.TerrainGen.populate(this, this.world, this.rand, x, z, flag, net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ANIMALS))
        WorldEntitySpawner.performWorldGenSpawning(this.world, biome, i + 8, j + 8, 16, 16, this.rand);
        blockpos = blockpos.add(8, 0, 8);
        

        net.minecraftforge.event.ForgeEventFactory.onChunkPopulate(false, this, this.world, this.rand, x, z, flag);

        BlockFalling.fallInstantly = true;

    }
    

    
	   /**
  * Generates a bare-bones chunk of nothing but stone or ocean blocks, formed, but featureless.
  */
 public void setBlocksInChunkIsland(World world,int x, int z, ChunkPrimer primer)
 {
     int i = 2;
     int j = 3;
     int k = 33;
     int l = 3;
     this.buffer = this.getHeights(this.buffer, x * 2, 0, z * 2, 3, 33, 3);

     for (int i1 = 0; i1 < 2; ++i1)
     {
         for (int j1 = 0; j1 < 2; ++j1)
         {
             for (int k1 = 0; k1 < 32; ++k1)
             {
                 double d0 = 0.25D;
                 double d1 = this.buffer[((i1 + 0) * 3 + j1 + 0) * 33 + k1 + 0];
                 
                 double d2 = this.buffer[((i1 + 0) * 3 + j1 + 1) * 33 + k1 + 0];
                 double d3 = this.buffer[((i1 + 1) * 3 + j1 + 0) * 33 + k1 + 0];
                 double d4 = this.buffer[((i1 + 1) * 3 + j1 + 1) * 33 + k1 + 0];
                 double d5 = (this.buffer[((i1 + 0) * 3 + j1 + 0) * 33 + k1 + 1] - d1) * 0.25D;
                 double d6 = (this.buffer[((i1 + 0) * 3 + j1 + 1) * 33 + k1 + 1] - d2) * 0.25D;
                 double d7 = (this.buffer[((i1 + 1) * 3 + j1 + 0) * 33 + k1 + 1] - d3) * 0.25D;
                 double d8 = (this.buffer[((i1 + 1) * 3 + j1 + 1) * 33 + k1 + 1] - d4) * 0.25D;

                 for (int l1 = 0; l1 < 4; ++l1)
                 {
                     double d9 = 0.125D;
                     double d10 = d1;
                     double d11 = d2;
                     double d12 = (d3 - d1) * 0.125D;
                     double d13 = (d4 - d2) * 0.125D;

                     for (int i2 = 0; i2 < 8; ++i2)
                     {
                         double d14 = 0.125D;
                         double d15 = d10;
                         double d16 = (d11 - d10) * 0.125D;

                         for (int j2 = 0; j2 < 8; ++j2)
                         {
                             IBlockState iblockstate = Blocks.AIR.getDefaultState();

                             if (d15 > 0.0D)
                             {
                                 iblockstate = Blocks.STONE.getDefaultState();
                             }

                             int k2 = i2 + i1 * 8;
                             int l2 = l1 + k1 * 4;
                             int i3 = j2 + j1 * 8;
                        	 Biome biome = world.getBiome(new BlockPos(k2,l2+upperScale,i3));
                        	 if(biome==KCore.instance.FloatingIslands) {
                        		 primer.setBlockState(k2, l2+upperScale, i3, iblockstate);
                        	 }
                             
                             d15 += d16;

                         }

                         d10 += d12;
                         d11 += d13;
                     }

                     d1 += d5;
                     d2 += d6;
                     d3 += d7;
                     d4 += d8;
                 }
             }
         }
     }
 }
 

 
 private double[] getHeights(double[] p_185963_1_, int p_185963_2_, int p_185963_3_, int p_185963_4_, int p_185963_5_, int p_185963_6_, int p_185963_7_)
 {
     if (p_185963_1_ == null)
     {
         p_185963_1_ = new double[p_185963_5_ * p_185963_6_ * p_185963_7_];
     }

     double d0 = 684.412D;
     double d1 = 684.412D;
     d0 = d0 * 2.0D;
     this.pnr = this.perlinNoise1.generateNoiseOctaves(this.pnr, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0 / 80.0D, 4.277575000000001D, d0 / 80.0D);
     this.ar = this.lperlinNoise1.generateNoiseOctaves(this.ar, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0, 684.412D, d0);
     this.br = this.lperlinNoise2.generateNoiseOctaves(this.br, p_185963_2_, p_185963_3_, p_185963_4_, p_185963_5_, p_185963_6_, p_185963_7_, d0, 684.412D, d0);
     int i = p_185963_2_ / 2;
     int j = p_185963_4_ / 2;
     int k = 0;

     for (int l = 0; l < p_185963_5_; ++l)
     {
         for (int i1 = 0; i1 < p_185963_7_; ++i1)
         {
             float f = this.getIslandHeightValue(i, j, l, i1);

             for (int j1 = 0; j1 < p_185963_6_; ++j1)
             {
                 double d2 = this.ar[k] / 2048.0D;
                 double d3 = this.br[k] / 2048.0D;
                 double d5 = (this.pnr[k] / 10.0D + 1.0D) / 8.0D;
                 double d4;

                 if (d5 < 0.0D)
                 {
                     d4 = d2;
                 }
                 else if (d5 > 1.0D)
                 {
                     d4 = d3;
                 }
                 else
                 {
                     d4 = d2 + (d3 - d2) * d5;
                 }

                 d4 = d4 - 8.0D;
                 d4 = d4 + (double)f;
                 int k1 = 2;

                 if (j1 > p_185963_6_ / 2 - k1)
                 {
                     double d6 = (double)((float)(j1 - (p_185963_6_ / 2 - k1)) / 64.0F);
                     d6 = MathHelper.clamp(d6, 0.0D, 1.0D);
                     d4 = d4 * (1.0D - d6) + -3000.0D * d6;
                 }

                 k1 = 8;

                 if (j1 < k1)
                 {
                     double d7 = (double)((float)(k1 - j1) / ((float)k1 - 1.0F));
                     d4 = d4 * (1.0D - d7) + -30.0D * d7;
                 }

                 p_185963_1_[k] = d4;
                 ++k;
             }
         }
     }

     return p_185963_1_;
 }
 
 private float getIslandHeightValue(int p_185960_1_, int p_185960_2_, int p_185960_3_, int p_185960_4_)
 {
     float f = (float)(p_185960_1_ * 2 + p_185960_3_);
     float f1 = (float)(p_185960_2_ * 2 + p_185960_4_);
     float f2 = 100.0F - MathHelper.sqrt(f * f + f1 * f1) * 8.0F;

     if (f2 > 80.0F)
     {
         f2 = 80.0F;
     }

     if (f2 < -100.0F)
     {
         f2 = -100.0F;
     }

     for (int i = -12; i <= 12; ++i)
     {
         for (int j = -12; j <= 12; ++j)
         {
             long k = (long)(p_185960_1_ + i);
             long l = (long)(p_185960_2_ + j);

             if (this.islandNoise.getValue((double)k, (double)l) < -0.8999999761581421D)
             {
                 float f3 = (MathHelper.abs((float)k) * 3439.0F + MathHelper.abs((float)l) * 147.0F) % 13.0F + 9.0F;
                 f = (float)(p_185960_3_ - i * 2);
                 f1 = (float)(p_185960_4_ - j * 2);
                 float f4 = 100.0F - MathHelper.sqrt(f * f + f1 * f1) * f3;

                 if (f4 > 80.0F)
                 {
                     f4 = 80.0F;
                 }

                 if (f4 < -100.0F)
                 {
                     f4 = -100.0F;
                 }

                 if (f4 > f2)
                 {
                     f2 = f4;
                 }
             }
         }
     }

     return f2;
 }

    public List<Biome.SpawnListEntry> getPossibleCreatures(EnumCreatureType creatureType, BlockPos pos)
    {
        Biome biome = this.world.getBiome(pos);

        return biome.getSpawnableList(creatureType);
    }

	@Override
	public boolean generateStructures(Chunk chunkIn, int x, int z) {
		return false;
	}

	@Override
	public BlockPos getNearestStructurePos(World worldIn, String structureName, BlockPos position,
			boolean findUnexplored) {
		return null;
	}

	@Override
	public void recreateStructures(Chunk chunkIn, int x, int z) {
		
	}

	@Override
	public boolean isInsideStructure(World worldIn, String structureName, BlockPos pos) {
		return false;
	}
}

 

Basically as you said I removed checking biome method from generateChunk method to setBlocksInChunkIsland method to make it check biome for every single biome. I think that even if it would work I would still be getting cut-outs like on the first image. 

EDIT:
With biome checking changed to 

                        	 Biome biome = world.getBiome(new BlockPos(x+k2,l2+upperScale,z+i3));

It still doesn't work

Edited by Krevik
Posted (edited)

you write your blocks into the chunkprimer after you have copied it to the chunk, you call setBlocksInChunkIsland to late.

Put it directly after "this.setBlocksInChunk ..." or after "this.biomesForGeneration = ..." if you want to manipulate the biomes. 

 

Edit:

I am not shure if the world object has the biome information you need at this point, use biomesForGeneration instead, you have to calculate the coordinates manually since biomesForGeneration is an one dimensional array. 

 

Edit 2:

Also you should not check for the right biome and instead just update the biome information when a block is set.

 

[...]
primer.setBlockState(k2, l2+upperScale, i3, iblockstate);
if(iblockstate != Blocks.AIR.getDefaultState()) {
  this.biomesForGeneration[k2 + i3 * 16] = KCore.instance.FloatingIslands; //i am not shure about the coordinates it could be i3 + k2*16 instead
}
[...]

 

 

Edited by null
  • Like 1
Posted
14 minutes ago, null said:

you write your blocks into the chunkprimer after you have copied it to the chunk, you call setBlocksInChunkIsland to late.

Put it directly after "this.setBlocksInChunk ..." or after "this.biomesForGeneration = ..." if you want to manipulate the biomes. 

 

Edit:

I am not shure if the world object has the biome information you need at this point, use biomesForGeneration instead, you have to calculate the coordinates manually since biomesForGeneration is an one dimensional array. 

 

Edit 2:

Also you should not check for the right biome and instead just update the biome information when a block is set.

 


[...]
primer.setBlockState(k2, l2+upperScale, i3, iblockstate);
if(iblockstate != Blocks.AIR.getDefaultState()) {
  this.biomesForGeneration[k2 + i3 * 16] = KCore.instance.FloatingIslands; //i am not shure about the coordinates it could be i3 + k2*16 instead
}
[...]

 

 

Ahh you mean just change biome in this place? Great! Thanks will test it soon and tell you if it will be working!

Posted
24 minutes ago, null said:

you write your blocks into the chunkprimer after you have copied it to the chunk, you call setBlocksInChunkIsland to late.

Put it directly after "this.setBlocksInChunk ..." or after "this.biomesForGeneration = ..." if you want to manipulate the biomes. 

 

Edit:

I am not shure if the world object has the biome information you need at this point, use biomesForGeneration instead, you have to calculate the coordinates manually since biomesForGeneration is an one dimensional array. 

 

Edit 2:

Also you should not check for the right biome and instead just update the biome information when a block is set.

 


[...]
primer.setBlockState(k2, l2+upperScale, i3, iblockstate);
if(iblockstate != Blocks.AIR.getDefaultState()) {
  this.biomesForGeneration[k2 + i3 * 16] = KCore.instance.FloatingIslands; //i am not shure about the coordinates it could be i3 + k2*16 instead
}
[...]

 

 

https://i.imgur.com/ZpuIBSo.png It works perfect! Thank you so much null! Seems that you know something about noises. Could you give me some tips? E.g. how to operate density of these islands maybe?

Posted

i don't understand much of minecrafts chunk generation code, i implemented my own version.

If you want to learn about manipulating noise in general you could dive into the subject of computer graphics, try the chapter about generative design from https://thebookofshaders.com/ .

  • Like 1
Posted
23 minutes ago, null said:

i don't understand much of minecrafts chunk generation code, i implemented my own version.

If you want to learn about manipulating noise in general you could dive into the subject of computer graphics, try the chapter about generative design from https://thebookofshaders.com/ .

Thanks!

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

    • I just removed that mod as well and it's still stuck on 100% loading and does still not go past it. all of my modded maps are so unplayable, i like, have no idea what to do https://mclo.gs/XHWCu5M
    • Here is the newest crash report because I've been trying to fix the problem for hours, please help me also its "error code -1"   ---- Minecraft Crash Report ---- // Daisy, daisy... Time: 2024-11-27 15:43:43 Description: Rendering screen java.lang.NoClassDefFoundError: org/spongepowered/asm/synthetic/args/Args$1     at net.minecraft.client.gui.GuiGraphics.m_280677_(GuiGraphics.java:562) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.GuiGraphics.renderTooltip(GuiGraphics.java:556) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.inventory.AbstractContainerScreen.m_280072_(AbstractContainerScreen.java:163) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:attributeslib.mixins.json:client.AbstractContainerScreenMixin,pl:mixin:APP:majruszlibrary-forge.mixins.json:MixinAbstractContainerScreen,plasmixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.inventoasasry.CreativeModeInventoryScreen.m_88315_(CreativeModeInventoryScreen.java:650) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.Screen.m_280264_(Screen.java:109) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen,pl:mixin:APP:CustomCursor-comm-common.mixins.json:ScreenIgnoreRenderAfterOverlayMixin,pl:mixin:APP:CustomCursor-comm-common.mixins.json:ScreenMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraftforge.client.ForgeHooksClient.drawScreenInternal(ForgeHooksClient.java:427) ~[forge-1.20.1-47.3.0-universal.jar%23355!/:?] {re:classloading,re:mixin}     at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:420) ~[forge-1.20.1-47.3.0-universal.jar%23355!/:?] {re:classloading,re:mixin}     at net.minecraft.client.renderer.GameRenderer.m_109093_(GameRenderer.java:965) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:jeg.mixins.json:client.GameRendererMixin,pl:mixin:APP:alexscaves.mixins.json:client.GameRendererMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.compat.MixinGameRenderer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1146) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-47.3.0.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {} Caused by: java.lang.ClassNotFoundException: org.spongepowered.asm.synthetic.args.Args$1     at jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?] {}     at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?] {}     at cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:137) ~[securejarhandler-2.1.10.jar:?] {}     at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?] {}     at cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:137) ~[securejarhandler-2.1.10.jar:?] {}     at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?] {}     ... 26 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Suspected Mods: NONE Stacktrace:     at net.minecraft.client.gui.GuiGraphics.m_280677_(GuiGraphics.java:562) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.GuiGraphics.renderTooltip(GuiGraphics.java:556) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.inventory.AbstractContainerScreen.m_280072_(AbstractContainerScreen.java:163) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:attributeslib.mixins.json:client.AbstractContainerScreenMixin,pl:mixin:APP:majruszlibrary-forge.mixins.json:MixinAbstractContainerScreen,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen.m_88315_(CreativeModeInventoryScreen.java:650) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:classloading,pl:runtimedistcleaner:A}     at net.minecraft.client.gui.screens.Screen.m_280264_(Screen.java:109) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:patchouli_xplat.mixins.json:client.AccessorScreen,pl:mixin:APP:CustomCursor-comm-common.mixins.json:ScreenIgnoreRenderAfterOverlayMixin,pl:mixin:APP:CustomCursor-comm-common.mixins.json:ScreenMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraftforge.client.ForgeHooksClient.drawScreenInternal(ForgeHooksClient.java:427) ~[forge-1.20.1-47.3.0-universal.jar%23355!/:?] {re:classloading,re:mixin}     at net.minecraftforge.client.ForgeHooksClient.drawScreen(ForgeHooksClient.java:420) ~[forge-1.20.1-47.3.0-universal.jar%23355!/:?] {re:classloading,re:mixin} -- Screen render details -- Details:     Screen name: net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen     Mouse location: Scaled: (273, 153). Absolute: (546.000000, 307.000000)     Screen size: Scaled: (547, 308). Absolute: (1093, 615). Scale factor of 2.000000 Stacktrace:     at net.minecraft.client.renderer.GameRenderer.m_109093_(GameRenderer.java:965) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:jeg.mixins.json:client.GameRendererMixin,pl:mixin:APP:alexscaves.mixins.json:client.GameRendererMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.compat.MixinGameRenderer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1146) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-47.3.0.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {} -- Affected level -- Details:     All players: 1 total; [LocalPlayer['muglad'/4, l='ClientLevel', x=11.34, y=-62.50, z=7.05]]     Chunk stats: 529, 313     Level dimension: minecraft:overworld     Level spawn location: World: (0,-63,0), Section: (at 0,1,0 in 0,-4,0; chunk contains blocks 0,-64,0 to 15,319,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,-64,0 to 511,319,511)     Level time: 522 game time, 522 day time     Server brand: forge     Server type: Integrated singleplayer server Stacktrace:     at net.minecraft.client.multiplayer.ClientLevel.m_6026_(ClientLevel.java:455) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:citadel.mixins.json:client.ClientLevelMixin,pl:mixin:APP:architectury.mixins.json:MixinClientLevel,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinClientLevel,pl:mixin:APP:starlight.mixins.json:client.world.ClientLevelMixin,pl:mixin:APP:alexscaves.mixins.json:client.ClientLevelMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91354_(Minecraft.java:2319) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:735) ~[client-1.20.1-20230612.114412-srg.jar%23350!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:alexscaves.mixins.json:client.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.world_leaks.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:bugfix.concurrency.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.blast_search_trees.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:perf.dedicated_reload_executor.MinecraftMixin,pl:mixin:APP:modernfix-common.mixins.json:feature.measure_time.MinecraftMixin,pl:mixin:APP:modernfix-forge.mixins.json:feature.measure_time.MinecraftMixin_Forge,pl:mixin:APP:bookshelf.common.mixins.json:accessors.client.AccessorMinecraft,pl:mixin:APP:architectury.mixins.json:MixinMinecraft,pl:mixin:APP:monolib.mixins.json:MinecraftMixin,pl:mixin:APP:majruszlibrary-common.mixins.json:MixinMinecraft,pl:mixin:APP:jeg.mixins.json:client.MinecraftMixin,pl:mixin:APP:immediatelyfast-common.mixins.json:core.MixinMinecraftClient,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-47.3.0.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}     at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.3.0.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] {}     at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {} -- Last reload -- Details:     Reload number: 1     Reload reason: initial     Finished: Yes     Packs: vanilla, mod_resources -- System Details -- Details:     Minecraft Version: 1.20.1     Minecraft Version ID: 1.20.1     Operating System: Windows 11 (amd64) version 10.0     Java Version: 17.0.8, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 1400903168 bytes (1336 MiB) / 3370123264 bytes (3214 MiB) up to 4261412864 bytes (4064 MiB)     CPUs: 4     Processor Vendor: GenuineIntel     Processor Name: 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz     Identifier: Intel64 Family 6 Model 140 Stepping 1     Microarchitecture: Tiger Lake     Frequency (GHz): 3.00     Number of physical packages: 1     Number of physical CPUs: 2     Number of logical CPUs: 4     Graphics card #0 name: Intel(R) UHD Graphics     Graphics card #0 vendor: Intel Corporation (0x8086)     Graphics card #0 VRAM (MB): 128.00     Graphics card #0 deviceId: 0x9a78     Graphics card #0 versionInfo: DriverVersion=31.0.101.5186     Memory slot #0 capacity (MB): 4096.00     Memory slot #0 clockSpeed (GHz): 3.20     Memory slot #0 type: DDR4     Memory slot #1 capacity (MB): 4096.00     Memory slot #1 clockSpeed (GHz): 3.20     Memory slot #1 type: DDR4     Virtual memory max (MB): 19346.77     Virtual memory used (MB): 17116.04     Swap memory total (MB): 11511.14     Swap memory used (MB): 2066.14     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx4064m -Xms256m     Launched Version: forge-47.3.0     Backend library: LWJGL version 3.3.1 build 7     Backend API: Intel(R) UHD Graphics GL version 4.6.0 - Build 31.0.101.5186, Intel     Window size: 1093x615     GL Caps: Using framebuffer using OpenGL 3.2     GL debug messages:      Using VBOs: Yes     Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge'     Type: Integrated Server (map_client.txt)     Graphics mode: fast     Resource Packs:      Current Language: en_us     CPU: 4x 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz     Server Running: true     Player Count: 1 / 8; [ServerPlayer['muglad'/4, l='ServerLevel[New Worldassssssssssssasasas]', x=11.34, y=-62.50, z=7.05]]     Data Packs: vanilla, mod:elevated_enchantment, mod:treechopper (incompatible), mod:quarryplus, mod:geckolib, mod:playeranimator (incompatible), mod:placebo (incompatible), mod:modernfix (incompatible), mod:citadel (incompatible), mod:mixinextras (incompatible), mod:morebuckets, mod:botanypotstiers (incompatible), mod:bookshelf, mod:ironshulkerbox, mod:ironbookshelves, mod:raw_iron_block_can_be_heated, mod:iron_extra_things, mod:cloth_config (incompatible), mod:more_villager_trades, mod:ironbows (incompatible), mod:industrialforegoing (incompatible), mod:farmersdelight, mod:iron_ender_chests, mod:ironfurnaces, mod:structurecompass, mod:lionfishapi (incompatible), mod:mysticaladaptations, mod:maxxam_aiot, mod:structureexpansion (incompatible), mod:patchouli (incompatible), mod:ironchests (incompatible), mod:advancednetherite, mod:mysticalagriculturedelight, mod:gk_unbreakable (incompatible), mod:attributeslib (incompatible), mod:mysticalcustomization, mod:mifa, mod:resourcefullib (incompatible), mod:veinst, mod:architectury (incompatible), mod:squatgrow (incompatible), mod:xenotech (incompatible), mod:monolib (incompatible), mod:disenchanting_table (incompatible), mod:more_bows_and_arrows (incompatible), mod:hasteenchantment, mod:quad (incompatible), mod:ironcoals (incompatible), mod:framework, mod:nebs (incompatible), mod:majruszlibrary (incompatible), mod:fixed_netherite, mod:x_player_info (incompatible), mod:cucumber, mod:jeg (incompatible), mod:ironladders, mod:attributefix (incompatible), mod:configlibtxf, mod:fortune_on_netherite_forge, mod:caelus (incompatible), mod:enchantment_reveal (incompatible), mod:botanypots (incompatible), mod:starlight (incompatible), mod:grand_enchantment_table, mod:iron_bushes, mod:iron_fishing_rods, mod:puzzlesaccessapi, mod:forge, mod:more_wandering_trades, mod:mctb (incompatible), mod:mteg (incompatible), mod:mysticalagriculture, mod:mysticalagradditions, mod:matc, mod:mysticriftsmelt_ancient_debris, mod:more_underground_structures, mod:lucky (incompatible), mod:aurorasarsenal (incompatible), mod:alexscaves, mod:more_useful_copper (incompatible), mod:enchdesc (incompatible), mod:customcursorcomm (incompatible), mod:titanium (incompatible), mod:mysterious_mountain_lib (incompatible), mod:ironspawners, mod:enchlevellangpatch (incompatible), mod:vtaw_mw (incompatible), mod:mr_reds_morestructures, mod:watching, mod:ironbarrels, mod:mysticalexpansion, mod:easy_emerald, mod:more_beautiful_torches (incompatible), mod:universalenchants, mod:immediatelyfast (incompatible), mod:moremobvariants, mod:ferritecore (incompatible), mod:mvw, mod:puzzleslib, mod:overpowered_creative_items, mod:overloadedarmorbar (incompatible), mod:overflowingbars     Enabled Feature Flags: minecraft:vanilla     World Generation: Stable     ModLauncher: 10.0.9+10.0.9+main.dcd20f30     ModLauncher launch target: forgeclient     ModLauncher naming: srg     ModLauncher services:          mixin-0.8.5.jar mixin PLUGINSERVICE          eventbus-6.0.5.jar eventbus PLUGINSERVICE          fmlloader-1.20.1-47.3.0.jar slf4jfixer PLUGINSERVICE          fmlloader-1.20.1-47.3.0.jar object_holder_definalize PLUGINSERVICE          fmlloader-1.20.1-47.3.0.jar runtime_enum_extender PLUGINSERVICE          fmlloader-1.20.1-47.3.0.jar capability_token_subclass PLUGINSERVICE          accesstransformers-8.0.4.jar accesstransformer PLUGINSERVICE          fmlloader-1.20.1-47.3.0.jar runtimedistcleaner PLUGINSERVICE          modlauncher-10.0.9.jar mixin TRANSFORMATIONSERVICE          modlauncher-10.0.9.jar fml TRANSFORMATIONSERVICE      FML Language Providers:          [email protected]         lowcodefml@null         [email protected]         javafml@null     Mod List:          Elevated enchantment-forge_1.20.1.jar             |Elevated enchantment          |elevated_enchantment          |1.0.0               |DONE      |Manifest: NOSIGNATURE         treechopper-1.0.0.jar                             |TreeChopper                   |treechopper                   |1.0.0               |DONE      |Manifest: NOSIGNATURE         AdditionalEnchantedMiner-1.20.1-1201.1.90.jar     |QuarryPlus                    |quarryplus                    |1201.1.90           |DONE      |Manifest: ef:50:af:b3:03:e0:3e:70:a7:ef:78:77:a5:4d:d4:b5:07:ec:df:9d:d6:f3:12:13:c9:3c:cd:9a:0a:3e:6b:43         geckolib-forge-1.20.1-4.4.9.jar                   |GeckoLib 4                    |geckolib                      |4.4.9               |DONE      |Manifest: NOSIGNATURE         player-animation-lib-forge-1.0.2-rc1+1.20.jar     |Player Animator               |playeranimator                |1.0.2-rc1+1.20      |DONE      |Manifest: NOSIGNATURE         Placebo-1.20.1-8.6.2.jar                          |Placebo                       |placebo                       |8.6.2               |DONE      |Manifest: NOSIGNATURE         modernfix-forge-5.19.5+mc1.20.1.jar               |ModernFix                     |modernfix                     |5.19.5+mc1.20.1     |DONE      |Manifest: NOSIGNATURE         citadel-2.6.0-1.20.1.jar                          |Citadel                       |citadel                       |2.6.0               |DONE      |Manifest: NOSIGNATURE         mixinextras-forge-0.4.1.jar                       |MixinExtras                   |mixinextras                   |0.4.1               |DONE      |Manifest: NOSIGNATURE         MoreBuckets-1.20.1-4.0.4.jar                      |More Buckets                  |morebuckets                   |4.0.4               |DONE      |Manifest: NOSIGNATURE         BotanyPotsTiers-Forge-1.20.1-6.0.1.jar            |BotanyPotsTiers               |botanypotstiers               |6.0.1               |DONE      |Manifest: NOSIGNATURE         Bookshelf-Forge-1.20.1-20.2.13.jar                |Bookshelf                     |bookshelf                     |20.2.13             |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         ironshulkerbox-1.20.1-5.3.2.jar                   |Iron Shulker Boxes            |ironshulkerbox                |1.20.1-5.3.2        |DONE      |Manifest: NOSIGNATURE         ironbookshelves-1.20.1-1.4.0-forge.jar            |Iron Bookshelves              |ironbookshelves               |1.20.1-1.4.0-forge  |DONE      |Manifest: NOSIGNATURE         raw_iron_block_can_heated-1.0.0-forge-1.20.1.jar  |Raw Iron Block can be heated  |raw_iron_block_can_be_heated  |1.0.0               |DONE      |Manifest: NOSIGNATURE         Iron Extra Things 1.0.6.jar                       |Iron Extra Things             |iron_extra_things             |1.0.5               |DONE      |Manifest: NOSIGNATURE         cloth-config-11.1.136-forge.jar                   |Cloth Config v10 API          |cloth_config                  |11.1.136            |DONE      |Manifest: NOSIGNATURE         More Villager Trades 1.0.0 - 1.20.1.jar           |More Villager Trades          |more_villager_trades          |1.0.0               |DONE      |Manifest: NOSIGNATURE         ironbows-1.20.1-FORGE-1.10.jar                    |Iron Bows (Forge)             |ironbows                      |1.20.1-FORGE-1.10   |DONE      |Manifest: NOSIGNATURE         industrial-foregoing-1.20.1-3.5.19.jar            |Industrial Foregoing          |industrialforegoing           |3.5.19              |DONE      |Manifest: NOSIGNATURE         FarmersDelight-1.20.1-1.2.5.jar                   |Farmer's Delight              |farmersdelight                |1.20.1-1.2.5        |DONE      |Manifest: NOSIGNATURE         iron_ender_chests-1.20-1.0.3.jar                  |Iron Ender Chests             |iron_ender_chests             |1.20-1.0.3          |DONE      |Manifest: NOSIGNATURE         ironfurnaces-1.20.1-4.1.6.jar                     |Iron Furnaces                 |ironfurnaces                  |4.1.6               |DONE      |Manifest: NOSIGNATURE         StructureCompass-1.20.1-2.1.0.jar                 |Structure Compass Mod         |structurecompass              |2.1.0               |DONE      |Manifest: NOSIGNATURE         lionfishapi-2.4-Fix.jar                           |LionfishAPI                   |lionfishapi                   |2.4-Fix             |DONE      |Manifest: NOSIGNATURE         MysticalAdaptations-1.20.1-1.0.1.jar              |Mystical Adaptations          |mysticaladaptations           |1.20.1-1.0.1        |DONE      |Manifest: NOSIGNATURE         AIOT 1.20.1 (v2.3) by 96maxxam69.jar              |maxxam AIOTs                  |maxxam_aiot                   |2.3                 |DONE      |Manifest: NOSIGNATURE         structure-expansion-2.0.1-build.11.jar            |Structure Expansion           |structureexpansion            |2.0.1-build.11      |DONE      |Manifest: NOSIGNATURE         Patchouli-1.20.1-84-FORGE.jar                     |Patchouli                     |patchouli                     |1.20.1-84-FORGE     |DONE      |Manifest: NOSIGNATURE         ironchests-5.0.2-forge.jar                        |Iron Chests: Restocked        |ironchests                    |5.0.2               |DONE      |Manifest: NOSIGNATURE         advancednetherite-forge-2.1.3-1.20.1.jar          |Advanced Netherite            |advancednetherite             |2.1.3               |DONE      |Manifest: NOSIGNATURE         mysticalagriculturedelight-1.0.2-1.20.1.jar       |Mystical Agriculture Delight  |mysticalagriculturedelight    |1.0.2-1.20.1        |DONE      |Manifest: NOSIGNATURE         gk_unbreakable-2.7.jar                            |Simple Unbreakable Tools      |gk_unbreakable                |2.7                 |DONE      |Manifest: NOSIGNATURE         ApothicAttributes-1.20.1-1.3.7.jar                |Apothic Attributes            |attributeslib                 |1.3.7               |DONE      |Manifest: NOSIGNATURE         MysticalCustomization-1.20.1-5.0.2.jar            |Mystical Customization        |mysticalcustomization         |5.0.2               |DONE      |Manifest: NOSIGNATURE         mifa-forge-1.20.x-1.1.1.jar                       |More Industrial Foregoing Addo|mifa                          |1.1.1               |DONE      |Manifest: NOSIGNATURE         resourcefullib-forge-1.20-2.0.6.jar               |Resourceful Lib               |resourcefullib                |2.0.6               |DONE      |Manifest: NOSIGNATURE         veinst-1.0.0.jar                                  |Veinst                        |veinst                        |1.0.0               |DONE      |Manifest: NOSIGNATURE         architectury-9.2.14-forge.jar                     |Architectury                  |architectury                  |9.2.14              |DONE      |Manifest: NOSIGNATURE         squatgrow-forge-5.3.0+mc1.20.1.jar                |Squat Grow                    |squatgrow                     |5.3.0+mc1.20.1      |DONE      |Manifest: NOSIGNATURE         xenotech-1.20.1-1.17.jar                          |XenoTech                      |xenotech                      |1.20.1-1.17         |DONE      |Manifest: NOSIGNATURE         monolib-forge-1.20.1-1.4.1.jar                    |MonoLib                       |monolib                       |1.4.1               |DONE      |Manifest: NOSIGNATURE         disenchanting_table-merged-1.20.1-3.1.0.jar       |Dis-Enchanting Table          |disenchanting_table           |3.1.0               |DONE      |Manifest: NOSIGNATURE         more_bows_and_arrows-merged-1.20.1-3.2.0.jar      |More Bows and Arrows          |more_bows_and_arrows          |3.2.0               |DONE      |Manifest: NOSIGNATURE         Haste Enchantment 1.0.0 - 1.20.1.jar              |Haste Enchantment             |hasteenchantment              |1.0.0               |DONE      |Manifest: NOSIGNATURE         Quad-1.2.9+1.20.4-Forge.jar                       |Quad                          |quad                          |1.2.9               |DONE      |Manifest: NOSIGNATURE         ironcoals-4.1.6.jar                               |Iron Coals                    |ironcoals                     |4.1.6               |DONE      |Manifest: NOSIGNATURE         framework-forge-1.20.1-0.7.12.jar                 |Framework                     |framework                     |0.7.12              |DONE      |Manifest: 0d:78:5f:44:c0:47:0c:8c:e2:63:a3:04:43:d4:12:7d:b0:7c:35:37:dc:40:b1:c1:98:ec:51:eb:3b:3c:45:99         NekosEnchantedBooks-1.20.1-1.8.0.jar              |Neko's Enchanted Books        |nebs                          |1.8.0               |DONE      |Manifest: NOSIGNATURE         majrusz-library-forge-1.20.1-7.0.8.jar            |Majrusz Library               |majruszlibrary                |7.0.8               |DONE      |Manifest: NOSIGNATURE         ReworkedNetheriteV2.jar                           |Fixed netherite               |fixed_netherite               |1.0.0               |DONE      |Manifest: NOSIGNATURE         X-PlayerInfo-1.20.1-1.0.8.1-SNAPSHOT.jar          |X-PlayerInfo                  |x_player_info                 |1.20.1-1.0.8.1-SNAPS|DONE      |Manifest: NOSIGNATURE         Cucumber-1.20.1-7.0.13.jar                        |Cucumber Library              |cucumber                      |7.0.13              |DONE      |Manifest: NOSIGNATURE         JustEnoughGuns-0.8.0-1.20.1.jar                   |Just Enough Guns              |jeg                           |0.8.0               |DONE      |Manifest: NOSIGNATURE         ironladders-1.20.1-2.5.10-forge.jar               |Iron Ladders                  |ironladders                   |2.5.10              |DONE      |Manifest: NOSIGNATURE         AttributeFix-Forge-1.20.1-21.0.4.jar              |AttributeFix                  |attributefix                  |21.0.4              |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         configlibtxf-4.2.5-forge.jar                      |ConfigLib TXF                 |configlibtxf                  |4.2.5-forge         |DONE      |Manifest: NOSIGNATURE         fortune_on_netherite_1.1.0_forge_1.20.1.jar       |Fortune on Netherite forge    |fortune_on_netherite_forge    |1.0.0               |DONE      |Manifest: NOSIGNATURE         caelus-forge-3.2.0+1.20.1.jar                     |Caelus API                    |caelus                        |3.2.0+1.20.1        |DONE      |Manifest: NOSIGNATURE         Enchantment-Reveal-1.20.1-Forge.jar               |Enchantment Reveal            |enchantment_reveal            |1.0.0               |DONE      |Manifest: NOSIGNATURE         BotanyPots-Forge-1.20.1-13.0.39.jar               |BotanyPots                    |botanypots                    |13.0.39             |DONE      |Manifest: NOSIGNATURE         starlight-1.1.2+forge.1cda73c.jar                 |Starlight                     |starlight                     |1.1.2+forge.1cda73c |DONE      |Manifest: NOSIGNATURE         Grand Enchantment Table 1.0.0 - 1.20.1.jar        |Grand Enchantment Table       |grand_enchantment_table       |1.0.0               |DONE      |Manifest: NOSIGNATURE         Iron Bushes 1.0.0 - 1.20.1.jar                    |Iron Bushes                   |iron_bushes                   |1.0.0               |DONE      |Manifest: NOSIGNATURE         Iron Fishing Rods 1.0.0 - 1.20.1.jar              |Iron Fishing Rods             |iron_fishing_rods             |1.0.0               |DONE      |Manifest: NOSIGNATURE         puzzlesaccessapi-forge-8.0.7.jar                  |Puzzles Access Api            |puzzlesaccessapi              |8.0.7               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         forge-1.20.1-47.3.0-universal.jar                 |Forge                         |forge                         |47.3.0              |DONE      |Manifest: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54:47:1a:9f:7f:ed:5e:f2:90         More Wandering Trades 1.0.0 - 1.20.1.jar          |More Wandering Trades         |more_wandering_trades         |1.0.0               |DONE      |Manifest: NOSIGNATURE         [1.20.1]MoreCraftingTables-5.1.3.jar              |More Crafting Tables Mod      |mctb                          |1.20.1              |DONE      |Manifest: NOSIGNATURE         M'TEG-1.1.0-1.20.1.jar                            |Mo' Than Enough Guns          |mteg                          |1.1.0               |DONE      |Manifest: NOSIGNATURE         MysticalAgriculture-1.20.1-7.0.14.jar             |Mystical Agriculture          |mysticalagriculture           |7.0.14              |DONE      |Manifest: NOSIGNATURE         MysticalAgradditions-1.20.1-7.0.6.jar             |Mystical Agradditions         |mysticalagradditions          |7.0.6               |DONE      |Manifest: NOSIGNATURE         matc-1.6.0.jar                                    |Mystical Agriculture Tiered Cr|matc                          |1.6.0               |DONE      |Manifest: NOSIGNATURE         client-1.20.1-20230612.114412-srg.jar             |Minecraft                     |minecraft                     |1.20.1              |DONE      |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         mysticriftsmelt_ancient_debris-1.2.2-forge-1.20.1.|MysticRift:Smelt Ancient Debri|mysticriftsmelt_ancient_debris|1.2.2               |DONE      |Manifest: NOSIGNATURE         more_undrground_structures_1.20.1_8.1.jar         |more underground structures   |more_underground_structures   |7.1.0               |DONE      |Manifest: NOSIGNATURE         lucky-block-forge-1.20.1-13.0.jar                 |Lucky Block                   |lucky                         |1.20.1-13.0         |DONE      |Manifest: NOSIGNATURE         Aurora's-Arsenal-1.0.0-1.20.1.jar                 |Aurora's Arsenal              |aurorasarsenal                |1.0.0               |DONE      |Manifest: NOSIGNATURE         alexscaves-2.0.2.jar                              |Alex's Caves                  |alexscaves                    |2.0.2               |DONE      |Manifest: NOSIGNATURE         more_useful_copper-merged-1.20.1-1.2.0.jar        |More Useful Copper            |more_useful_copper            |1.2.0               |DONE      |Manifest: NOSIGNATURE         EnchantmentDescriptions-Forge-1.20.1-17.1.19.jar  |EnchantmentDescriptions       |enchdesc                      |17.1.19             |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         CustomCursor-comm-1.2.0-forge.jar                 |customcursorcomm              |customcursorcomm              |1.0-SNAPSHOT        |DONE      |Manifest: NOSIGNATURE         titanium-1.20.1-3.8.32.jar                        |Titanium                      |titanium                      |3.8.32              |DONE      |Manifest: NOSIGNATURE         mysterious_mountain_lib-1.5.17-1.20.1.jar         |Mysterious Mountain Lib       |mysterious_mountain_lib       |1.5.17-1.20.1       |DONE      |Manifest: NOSIGNATURE         ironspawners-1.0.0.jar                            |Iron Spawners                 |ironspawners                  |1.0.0               |DONE      |Manifest: NOSIGNATURE         enchlevel-langpatch-2.2.8.jar                     |Enchantment Level Language Pat|enchlevellangpatch            |2.2.8               |DONE      |Manifest: NOSIGNATURE         vtaw_mw-forge-1.20.1-1.0.4.jar                    |Variant Tools and Weaponry - E|vtaw_mw                       |1.0.4               |DONE      |Manifest: NOSIGNATURE         reds-more-structures-1.0.8-common.jar             |Red’s More Structures         |mr_reds_morestructures        |1.0.8               |DONE      |Manifest: NOSIGNATURE         From-The-Fog-1.20-v1.9.2-Forge-Fabric.jar         |From The Fog                  |watching                      |1.9.2               |DONE      |Manifest: NOSIGNATURE         IronBarrels1.20.1-V1.0.jar                        |IronBarrelsUpdated            |ironbarrels                   |1.0.0               |DONE      |Manifest: NOSIGNATURE         MysticalExpansion-1.20.1-1.0.0.jar                |Mystical Expansion            |mysticalexpansion             |1.0.0               |DONE      |Manifest: NOSIGNATURE         EasyEmerald-Forge-1.20.1-1.5.8.jar                |Easy Emerald                  |easy_emerald                  |1.5.8               |DONE      |Manifest: NOSIGNATURE         more_beautiful_torches-merged-1.20.1-3.0.0.jar    |More Beautiful Torches!       |more_beautiful_torches        |3.0.0               |DONE      |Manifest: NOSIGNATURE         UniversalEnchants-v8.0.0-1.20.1-Forge.jar         |Universal Enchants            |universalenchants             |8.0.0               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         ImmediatelyFast-Forge-1.3.2+1.20.4.jar            |ImmediatelyFast               |immediatelyfast               |1.3.2+1.20.4        |DONE      |Manifest: NOSIGNATURE         moremobvariants-forge+1.20.1-1.3.0.1.jar          |More Mob Variants             |moremobvariants               |1.3.0.1             |DONE      |Manifest: NOSIGNATURE         ferritecore-6.0.1-forge.jar                       |Ferrite Core                  |ferritecore                   |6.0.1               |DONE      |Manifest: 41:ce:50:66:d1:a0:05:ce:a1:0e:02:85:9b:46:64:e0:bf:2e:cf:60:30:9a:fe:0c:27:e0:63:66:9a:84:ce:8a         Mvw-2.3.3c.jar                                    |MoreVanillaWeapons            |mvw                           |2.3.3c              |DONE      |Manifest: NOSIGNATURE         PuzzlesLib-v8.1.25-1.20.1-Forge.jar               |Puzzles Lib                   |puzzleslib                    |8.1.25              |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a         Overpowered Creative Items.jar                    |Overpowered Creative Items    |overpowered_creative_items    |1.0.0               |DONE      |Manifest: NOSIGNATURE         overloadedarmorbar-1.20.1-1.jar                   |Overloaded Armor Bar          |overloadedarmorbar            |1.20.1-1            |DONE      |Manifest: NOSIGNATURE         OverflowingBars-v8.0.1-1.20.1-Forge.jar           |Overflowing Bars              |overflowingbars               |8.0.1               |DONE      |Manifest: 9a:09:85:98:65:c4:8c:11:c5:49:f6:d6:33:23:39:df:8d:b4:ff:92:84:b8:bd:a5:83:9f:ac:7f:2a:d1:4b:6a     Crash Report UUID: ccaf101c-823f-47b9-9c2f-7d3d0db92823     FML: 47.3     Forge: net.minecraftforge:47.3.0
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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