Как получить seed мира?

Версия Minecraft
1.16.5
API
Forge
1,370
112
241
При переносе мода с 1.12.2 на 1.16.5 столкнулся с проблемой: world#getSeed() не существует. Как получить seed мира?

Хочу его использовать в Random'е и использовать в дальнейшем для перемешивания кастомного листа с String'ами. World получаю через WorldEvent.Load.
 
Решение
В seed реализация слегка запутана, поэтому оставлю тут код для потомков. Доставать пришлось не через World, а через ServerWorld.
Java:
    @SubscribeEvent
    public static void onWorldLoaded(WorldEvent.Load e) {
        if(!e.getWorld().isRemote() && e.getWorld() instanceof ServerWorld) {//Проверка на серверный мир. Первая проверка была до ServerWorld, но мне лень её убирать
            ServerWorld world = (ServerWorld)e.getWorld();
            ItemsRegister.initList(); //Тут я инициализирую свой лист, этот шаг необязателен для вас
            createList(new Random(world.getSeed())); //И тут уже сам сид.
        }
    }
1,370
112
241
Там есть то ли dimension, то ли worldSettings в котором есть seed.
Ничего из этого напрямую из IWorld не достаётся.
Попробуй посмотреть как возвращает seed мира команда /seed
Спасибо за подсказку, сейчас попробую. Сразу в голову что-то не пришло.
 
36
3
9
У мира есть интерфейс WorldGenLevel(это офф мапинги - как у тебя не ведаю) и там определён геттер сида. Сделай проверку на него. Если это он, то получай сид, в противном случае это нельзя сделать без нестабильных костылей
 
1,370
112
241
В seed реализация слегка запутана, поэтому оставлю тут код для потомков. Доставать пришлось не через World, а через ServerWorld.
Java:
    @SubscribeEvent
    public static void onWorldLoaded(WorldEvent.Load e) {
        if(!e.getWorld().isRemote() && e.getWorld() instanceof ServerWorld) {//Проверка на серверный мир. Первая проверка была до ServerWorld, но мне лень её убирать
            ServerWorld world = (ServerWorld)e.getWorld();
            ItemsRegister.initList(); //Тут я инициализирую свой лист, этот шаг необязателен для вас
            createList(new Random(world.getSeed())); //И тут уже сам сид.
        }
    }
 
1,370
112
241
Просто список String'ов, которые я получаю от кастомного предмета. Эти String'и я использую в тайле, так что это не имеет значения.
Я хотел сделать рандомную генерацию пар Item (String) - Enchantment (сделал для этого карту) и привязать это всё к миру. В 1.12.2 я для этого использовал сид, именно поэтому решил сделать и тут, на 1.16.5, также.
 
Последнее редактирование модератором:
Сверху