помойму я что-то делаю не так со своим измерением

Версия Minecraft
1.7.10
235
3
21
делаю свое измерение
оно должно быть таким же как основной мир но без руд
вроде все сделал, работает, руды не спавнит, залил на термос, тпнулся туда через плагин
при взаимодействии с блоком (ЛКМ/ПКМ) он просто исчезает, а после перезахода я оказываюсь не в моем измерении, а в краю на тех же кордах, а все блоки, которые исчезали остаются на месте

руды я убрал заменив через провайдер для своего измерения ChunkGenerator, в котором после генерации списка биомомов прохожусь по ним и заменяю BiomeDecorator на свой унаследованный от обычного но с пустым методом для спавна руд
Java:
public class DimensionRegister
{
    public static void register()
    {
        registerDeathWorld();
    }

    public static int DEATH_PROVIDER_ID = 2;
    public static int DEATH_DIM_ID = 2;
    public static String DEATH_DIM_NAME = "death";
    public static long DEATH_DIM_SEED = 6637334307563055196L;

    public static void registerDeathWorld()
    {
        DimensionManager.registerProviderType(DEATH_PROVIDER_ID, DeathWorldProvider.class, false);
        DimensionManager.registerDimension(DEATH_DIM_ID, DEATH_PROVIDER_ID);
    }
}
Java:
public class DeathWorldProvider extends WorldProvider
{
    @Override
    public String getDimensionName()
    {
        return DimensionRegister.DEATH_DIM_NAME;
    }
  
    @Override
    public IChunkProvider createChunkGenerator()
    {
        return (IChunkProvider)new DeathWorldChunkProviderGenerate(this.worldObj, DimensionRegister.DEATH_DIM_SEED, this.worldObj.getWorldInfo().isMapFeaturesEnabled());
    }
}
Java:
public class DeathWorldChunkProviderGenerate extends ChunkProviderGenerate
{
    public DeathWorldChunkProviderGenerate(World p_i2006_1_, long p_i2006_2_, boolean p_i2006_4_)
    {
        super(p_i2006_1_, p_i2006_2_, p_i2006_4_);
    }

    @Override
    public void func_147424_a(int p_147424_1_, int p_147424_2_, Block[] p_147424_3_)
    {
        byte b0 = 63;
        this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, p_147424_1_ * 4 - 2, p_147424_2_ * 4 - 2, 10, 10);
    
        //===============================================//
        for(int i=0; i<this.biomesForGeneration.length; i++)
        {
            if(this.biomesForGeneration[i] != null)
            {
                this.biomesForGeneration[i].theBiomeDecorator = new DeathWorldBiomeDecorator();
            }
        }
        //===============================================//
    
        this.func_147423_a(p_147424_1_ * 4, 0, p_147424_2_ * 4);

        for (int k = 0; k < 4; ++k)
        {
            int l = k * 5;
            int i1 = (k + 1) * 5;

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

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

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

                        for (int i3 = 0; i3 < 4; ++i3)
                        {
                            int j3 = i3 + k * 4 << 12 | 0 + j1 * 4 << 8 | k2 * 8 + l2;
                            short short1 = 256;
                            j3 -= short1;
                            double d14 = 0.25D;
                            double d16 = (d11 - d10) * d14;
                            double d15 = d10 - d16;

                            for (int k3 = 0; k3 < 4; ++k3)
                            {
                                if ((d15 += d16) > 0.0D)
                                {
                                    p_147424_3_[j3 += short1] = Blocks.stone;
                                }
                                else if (k2 * 8 + l2 < b0)
                                {
                                    p_147424_3_[j3 += short1] = Blocks.water;
                                }
                                else
                                {
                                    p_147424_3_[j3 += short1] = null;
                                }
                            }

                            d10 += d12;
                            d11 += d13;
                        }

                        d1 += d5;
                        d2 += d6;
                        d3 += d7;
                        d4 += d8;
                    }
                }
            }
        }
    }
Java:
public class DeathWorldBiomeDecorator extends BiomeDecorator
{
    public DeathWorldBiomeDecorator()
    {
        super();
    }

    @Override
    protected void generateOres()
    {
        return;
    }
}
 
3,005
192
592
Когда не смог найти исполнителя и решил делать сам, орррр.

А по теме - ты уверен, что твой плагин нормально работает? Попробуй попасть в мир без плагина.
 
235
3
21
переделал способ исключения спавна руд, так как прошлый влиял на декораторы во всех биомах, а не только в моем измерении и руд не было нигде
сделал хуком метода спавна руд
Java:
public class BiomeDecoratorHook
{
    @Hook(createMethod = true, returnCondition = ReturnCondition.ALWAYS)
    public static void generateOres(BiomeDecorator biomeDecorator)
    {
        System.out.println(biomeDecorator.currentWorld.provider.getDimensionName());
        
        if(!biomeDecorator.currentWorld.provider.getDimensionName().equalsIgnoreCase(DimensionRegister.DEATH_DIM_NAME))
        {
            MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.chunk_X, biomeDecorator.chunk_Z));
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.dirtGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, DIRT))
                copy_genStandardOre1(biomeDecorator, 20, biomeDecorator.dirtGen, 0, 256);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.gravelGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, GRAVEL))
                copy_genStandardOre1(biomeDecorator, 10, biomeDecorator.gravelGen, 0, 256);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.coalGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, COAL))
                copy_genStandardOre1(biomeDecorator, 20, biomeDecorator.coalGen, 0, 128);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.ironGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, IRON))
                copy_genStandardOre1(biomeDecorator, 20, biomeDecorator.ironGen, 0, 64);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.goldGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, GOLD))
                copy_genStandardOre1(biomeDecorator, 2, biomeDecorator.goldGen, 0, 32);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.redstoneGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, REDSTONE))
                copy_genStandardOre1(biomeDecorator, 8, biomeDecorator.redstoneGen, 0, 16);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.diamondGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, DIAMOND))
                copy_genStandardOre1(biomeDecorator, 1, biomeDecorator.diamondGen, 0, 16);
            if (TerrainGen.generateOre(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.lapisGen, biomeDecorator.chunk_X, biomeDecorator.chunk_Z, LAPIS))
                copy_genStandardOre2(biomeDecorator, 1, biomeDecorator.lapisGen, 16, 16);
            MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, biomeDecorator.chunk_X, biomeDecorator.chunk_Z));
        }
    }

    private static void copy_genStandardOre1(BiomeDecorator biomeDecorator, int p_76795_1_, WorldGenerator p_76795_2_, int p_76795_3_, int p_76795_4_)
    {
        for (int l = 0; l < p_76795_1_; ++l)
        {
            int i1 = biomeDecorator.chunk_X + biomeDecorator.randomGenerator.nextInt(16);
            int j1 = biomeDecorator.randomGenerator.nextInt(p_76795_4_ - p_76795_3_) + p_76795_3_;
            int k1 = biomeDecorator.chunk_Z + biomeDecorator.randomGenerator.nextInt(16);
            p_76795_2_.generate(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, i1, j1, k1);
        }
    }
    
    private static void copy_genStandardOre2(BiomeDecorator biomeDecorator, int p_76793_1_, WorldGenerator p_76793_2_, int p_76793_3_, int p_76793_4_)
    {
        for (int l = 0; l < p_76793_1_; ++l)
        {
            int i1 = biomeDecorator.chunk_X + biomeDecorator.randomGenerator.nextInt(16);
            int j1 = biomeDecorator.randomGenerator.nextInt(p_76793_4_) + biomeDecorator.randomGenerator.nextInt(p_76793_4_) + (p_76793_3_ - p_76793_4_);
            int k1 = biomeDecorator.chunk_Z + biomeDecorator.randomGenerator.nextInt(16);
            p_76793_2_.generate(biomeDecorator.currentWorld, biomeDecorator.randomGenerator, i1, j1, k1);
        }
    }
}
сделал телепорт модом, проблема описанная в 1 сообщении осталась, хотя принтлн в методе спавна руд выводит нормальное измерение
Java:
public class WorldUtil
{
    public static void travelToDimensionWithoutPortal(Entity entity, int dimTo, double x, double y, double z)
    {
        if (dimTo == entity.dimension)
        {
            entity.setPosition(x, y, z);
        }

        if (entity instanceof EntityPlayerMP)
        {
            EntityPlayerMP player = (EntityPlayerMP) entity;
            WorldServer worldTo = player.mcServer.worldServerForDimension(dimTo);
            player.mcServer.getConfigurationManager().transferPlayerToDimension(player, dimTo, new FreeTeleporter(worldTo, x, y, z));
        }
    }

    public static class FreeTeleporter extends Teleporter
    {
        protected double x, y, z;
       
        public FreeTeleporter(WorldServer worldIn, double x, double y, double z)
        {
            super(worldIn);

            this.x = x;
            this.y = y;
            this.z = z;
        }

        @Override
        public void placeInPortal(Entity entity, double x, double y, double z, float rotationYaw) {}
    }
}
 
235
3
21
потратил уйму времени включая и отключая весь свой огромный мод по кусочкам и отловил причину
никогда так не делайте, ибо будете таким же дауном как я (у меня это было в 1 из кусков кода который остался со времен начала изучения forge, я так переходил из 1 измерения в другое тогда...)
worldObj.provider.setDimension(int)
 
7,099
324
1,510
Прям варп-двигатель: двигаем все вокруг, кроме нас самих
 
Сверху