Проблема с порталом

Версия Minecraft
1.7.10
10
0
Ну, как бы при заходе в портал, меня телепортирует по тем же координатам, что и в overworldе, вот только если там координаты <50, то я просто задыхаюсь в блоках, если около 100, то разбиваюсь. Как можно сделать, чтобы портал спавнился на почве? Ни больше, ни меньше. Не хочу использовать костыли, ввиду удаления блоков вокруг себя, и спавна платформы под собой
Телепортер стандартный
Java:
public class FreeTeleporter extends Teleporter {

    public FreeTeleporter(WorldServer worldIn) {
        super(worldIn);
    }

    public void placeInPortal(Entity entityIn, float rotationYaw) {
    }

    public boolean placeInExistingPortal(Entity entityIn, float rotationYaw) {
        return true;
    }

    public boolean makePortal(Entity entityIn) {
        return true;
    }
}
Java:
playerMP.mcServer.getConfigurationManager().transferPlayerToDimension(playerMP, 55553, new FreeTeleporter(playerMP.mcServer.worldServerForDimension(55553)));
Опять же, костылем могу делать спавн один раз по ачивке, но блин, если ты переставил портал - это смэрт.
 

tox1cozZ

aka Agravaine
8,456
598
2,892
Напиши в placeInPortal:
Java:
entityIn.setPosition(entityIn.posX, minY, entityIn.posZ); // minY - минимальная высота, с которой нужно искать поверхность. Средняя высота мира, вроде, 64.
while(!entityIn.worldObj.getCollidingBoundingBoxes(entityIn, entityIn.boundingBox).isEmpty()){
    entityIn.setPosition(entityIn.posX, entityIn.posY + 1.0D, entityIn.posZ);
}
 
10
0
Огромное спасибо! Но как быть с возвращением? Не записывать же координаты портала каждого игрока?
P.S. С добавлением этого кода в PlaceInPortal, все равно ничего не поменялось, так же спавнит в блоках, высота у меня средняя 68, поставил искать от 63
P.S.S Проблема с setPosition, пробовал по координатам, все равно телепортирует туда, откуда вошел
P.S.S.S Проблема с placeInPortal. В нем не работает set position
 
Последнее редактирование:
7,099
324
1,510
Напиши в placeInPortal:
Агрованя, ты в порядке? Можно же просто из мира взять максимальную высоту твердого блока в точке x,z. Метод называется getTopBlock, че-то такое
 

ReyMagos

Тег-бомбастер
412
7
121
Проблему опиши до конца. Куда тебе нужно возвращаться из того мира? Туда же откуда ушёл?
Если до сих пор спавнит в блоках, попробуй в своём WorldProvider добавить этот код.
Java:
public boolean canCoordinateBeSpawn(int p_76566_1_, int p_76566_2_) {
    return this.worldObj.getTopBlock(p_76566_1_, p_76566_2_) == Blocks.grass; //Или какой у тебя блок спавнится сверху
}
 
10
0
Если до сих пор спавнит в блоках, попробуй в своём WorldProvider добавить этот код.
Странно, не помогло. Вот весь WorldProvider:
Java:
public class WorldProviderDeadLand extends WorldProvider {
    @Override
    public void registerWorldChunkManager()
    {
        this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.beach, 0.5F);
        this.dimensionId = 55553;
    }

    @Override
    protected void generateLightBrightnessTable()
    {
        float var1 = 0.1F;

        for (int var2 = 0; var2 <= 15; ++var2)
        {
            float var3 = 1.0F - var2 / 15.0F;
            this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1;
        }
    }

    @Override
    public float getCloudHeight()
    {
        return 128.0F;
    }



    @Override
    public boolean isSurfaceWorld()
    {
        return false;
    }

    @Override
    public float calculateCelestialAngle(long var1, float var3)
    {
        return 0F;
    }

    @Override
    public boolean canRespawnHere()
    {
        return false;
    }

    @Override
    public String getSaveFolder() {
        return "Arcana";
    }

    @Override
    public String getDimensionName()
    {
        return "Arcana";
    }
    
    @Override
    public boolean canCoordinateBeSpawn(int p_76566_1_, int p_76566_2_) {
        return this.worldObj.getTopBlock(p_76566_1_, p_76566_2_) == Blocks.sand; //Или какой у тебя блок спавнится сверху
    }
}
В принципе все верно, ну, то что ты написал. Но, поразмыслив мозгой, я понял, что если он в том мире построит новый портал - это его проблемы. А если он нырнет в старый - то на старом месте и окажется. Единственная проблема со спавном над\под блоками
 
10
0
UP. Я не понимаю почему не работают эти коды.
PS посмотрел как работает getTopBlock. Я так понимаю, он берет 63 высоту, и начиная прибавлять, начинает выше нее искать блок
 
Последнее редактирование:
Сверху