Уникальное измерение

Версия Minecraft
1.12.2
API
Forge
31
0
Салам фарумчане, сделал собственное измерение и хочу чтобы оно было для каждого игрока уникальным, то есть, у меня есть блок который по нажатию по нему телепортирует в мое измерение, мне нужно сделать так, чтобы, допустим есть игрок 1 и 2, если игрок нажмет на блок портала то для него создается временно новое измерение, и только его туда телепортирует, если игрок 2 нажмет на блок портала то его так же телепортирует в измерение но уже которое создается для него и загружается во второе измерение, это для того, чтобы игроки не встретились и для каждого блока портала было свое временно уникальное измерение, я примерно понимаю как это реализовать, сгенерировать уникальный айди при помощи UUID, и по этому айди сгенерировать изерение, но не до конца понимаю как это исполнить, буду благодарен любой мысли
Метод нажатия в классе блока:
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
        if (!world.isRemote) {
            if (player instanceof EntityPlayerMP) {
                EntityPlayerMP playerMP = (EntityPlayerMP) player;

                MinecraftServer server = world.getMinecraftServer();
                if (server != null) {
                    WorldServer destinationWorld = server.getWorld(2);
                    if (destinationWorld != null) {
                        Teleporter teleporter = new TeleporterCustomDimension(destinationWorld);
                        server.getPlayerList().transferPlayerToDimension(playerMP, 2, teleporter);
                        world.setBlockToAir(pos);
                    }
                }
            }
        }
        return true;
    }
Инит измерения:
public class DimensionInit
{
    public static final DimensionType DANGE = DimensionType.register("Dange", "_dange", 2, DimensionDange.class, false);
   
    public static void registerDimension()
    {
        DimensionManager.registerDimension(2, DANGE);
    }
}
Класс телепортации:
public class TeleporterCustomDimension extends Teleporter {

    private final WorldServer worldServer;

    public TeleporterCustomDimension(WorldServer worldServer) {
        super(worldServer);
        this.worldServer = worldServer;
    }

    @Override
    public void placeInPortal(Entity entity, float rotationYaw) {
        entity.setPositionAndRotation(100, 10, 100, entity.rotationYaw, entity.rotationPitch);
    }

    @Override
    public boolean placeInExistingPortal(Entity entity, float rotationYaw) {
        return false;
    }

    @Override
    public boolean makePortal(Entity entity) {
        return true;
    }
}
Провайдер:
public class DimensionDange extends WorldProvider
{
    public DimensionDange()
    {
        this.biomeProvider = new BiomeProviderSingle(BiomeInit.DANGE);
        this.hasSkyLight = false;
    }
   
    @Override
    public DimensionType getDimensionType()
    {
        return DimensionInit.DANGE;
    }
   
    @Override
    public IChunkGenerator createChunkGenerator()
    {
        return new CustomChunkGenerator(world, true, world.getSeed());
    }
   
    @Override
    public boolean canRespawnHere()
    {
        return false;
    }
   
    @Override
    public boolean isSurfaceWorld()
    {
        return false;
    }
}
 
Последнее редактирование:
31
0
Единственное что пишет в консоль, эти две строки когда я телепортируюсь из моего измерения в верхнее.
Java:
[00:24:39] [main/WARN]: Received passengers for unknown entity
[00:24:39] [Server thread/INFO] [FML]: Unloading dimension 2

А эта уже когда я кликаю пкм по блоку и телепортируюсь в мое измерение
Java:
[00:26:53] [Server thread/INFO] [FML]: Loading dimension 2 (New World) (net.minecraft.server.integrated.IntegratedServer@6b36a5ff)
 
31
0
Хорошо, а что если сделать так, чтобы когда один игрок использует портал, то другому игроку который использует портал в радиусе 300 блоков от портала первого игрока напишет якобы тут уже активировали портал? Может так будет лучше? Если да, то как мне это реализовать? чтобы портал создавал себе некий барьер на некоторое время?
 
166
5
14
Я сейчас начал представлять полную картину того как это сделать и понял что разобраться со смещением будет раза в 3 легче
и сама по себе идея довольно костыльная
и если ты все таки будешь реализоовать тебе нужно знать
WorldSaveData
NBT
 
1,369
112
241
Хорошо, а что если сделать так, чтобы когда один игрок использует портал, то другому игроку который использует портал в радиусе 300 блоков от портала первого игрока напишет якобы тут уже активировали портал? Может так будет лучше? Если да, то как мне это реализовать? чтобы портал создавал себе некий барьер на некоторое время?
Смотришь на коорды в твоём мире и проверяешь на наличие блока. Есть - ставим "барьер", нет - генерим.
Это при условии, что генерятся оба они одинаково относительно друг друга (т.е. достаточно координаты 1 блока умножить на x, чтобы получить другой).
Если же у тебя этот блок будет генерироваться рандомно где-то в радиусе 300 блоков, то здесь только поиск блока в этой области. Но это достаточно дорогое решение, если честно.
 
31
0
Я сейчас начал представлять полную картину того как это сделать и понял что разобраться со смещением будет раза в 3 легче
и сама по себе идея довольно костыльная
и если ты все таки будешь реализоовать тебе нужно знать
WorldSaveData
NBT
Ну блин, со смещение уже перепробовал многое, никак не получается, как будто идея просто с барьером проще, возможно вы не правильно поняли мой запрос, и теперь я сомневаюсь и не знаю что делать дальше
 
31
0
Смотришь на коорды в твоём мире и проверяешь на наличие блока. Есть - ставим "барьер", нет - генерим.
Это при условии, что генерятся оба они одинаково относительно друг друга (т.е. достаточно координаты 1 блока умножить на x, чтобы получить другой).
Если же у тебя этот блок будет генерироваться рандомно где-то в радиусе 300 блоков, то здесь только поиск блока в этой области. Но это достаточно дорогое решение, если честно.
Нет, сам блок портала в измерение ставится самим игроком, никем больше, просто нужно чтобы при установке блока портала он создавал вокруг себя некий невидимый барьер, который запрещает ставить другим игрокам такой же портал
 
166
5
14
Нет, сам блок портала в измерение ставится самим игроком, никем больше, просто нужно чтобы при установке блока портала он создавал вокруг себя некий невидимый барьер, который запрещает ставить другим игрокам такой же портал
смотри чтобы знать какие блоки есть рядом нужно знать какие блоки есть в общем можно записать в лист но он выгрузится если пере зайти в мир, так что нужен NBT
можно просканировать все в радиусе 300 блоков но это довольно сильно будет нагружать компютер
 
Последнее редактирование:
31
0
В общем я сдался с этим барьером и решил довести до конца с перемещением, я сделал и все работает, даже удивлен что получилось, думаю за месяц моддинга это не плохо. Хотел бы узнать еще, как мне генерировать постройку при телепортации игрока в это измерение? возможно ли это сделать с помощью nbt который хранит в себе постройку? вот я рандомно генерировал постройку в биоме, можно ли так же делать, только чтобы она генерировалась под ногами игрока ?
 
1,369
112
241
Нет, сам блок портала в измерение ставится самим игроком, никем больше, просто нужно чтобы при установке блока портала он создавал вокруг себя некий невидимый барьер, который запрещает ставить другим игрокам такой же портал
Так лол, второй блок ты в любом случае будешь как-то генерировать, первый же неважно как будет появляться.
Первый блок при нажатии имеет след. логику:
Ветвление если блок в др. измерении был обнаружен (true = 1/ false = 2): 1) Не исполнять перемещение, вывести сообщение игроку; 2) Исполнить перемещение, установить блок (как-то) в конечном измерении.

Хотел бы узнать еще, как мне генерировать постройку при телепортации игрока в это измерение?
Обрабатывай это дело в Teleporter и ставь постройку. (Она будет считаться игрой порталом, но мы-то знаем, что это начало твоей кастомной структуры)
Ну или как вариант, после нажатия на блок такое дело проводить.
возможно ли это сделать с помощью nbt который хранит в себе постройку?
Структурные блоки и сохраняют структуры в nbt.
вот я рандомно генерировал постройку в биоме, можно ли так же делать, только чтобы она генерировалась под ногами игрока ?
Был гайд где-то на форуме на тему генерации построек. Поищи в ресурсах.
 
166
5
14
 
31
0
Структурные блоки и сохраняют структуры в nbt.
Да, я это и хотел уточнить что можно сгенерировать постройку под ногами
Был гайд где-то на форуме на тему генерации построек. Поищи в ресурсах.
Да, я уже работал с этим до, поэтому думаю справлю
[Guide][1.12.2] Генерация структур и заполнение сундуков с помощью loot_table.
Я писал что уже сделал генерацию в биоме, но все равно, спасибо)
В общем всем спасибо кто помогал в этой теме
 
428
41
108
Структурные блоки и сохраняют структуры в nbt.
Добавлю, что ванильный установщик структур из NBT не просто медленный а КРАЙНЕ медленный, лучше его не использовать для больших структур (больше 100 блоков). В 2-4 раза ускорить (для больших структур) вообще без проблем, и в 10-15 раз с "кастрациями"
 
Последнее редактирование:
Сверху