Помогите Пропадают мобы (жители) при смерти игрока

_MasterCapeXD_

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
_MasterCapeXD_
Решил написать плагин на BedWars. Все работает, но есть одна проблема. Если игрок умирает, все жители (других мобов просто в мире нет) в мире пропадают ДЛЯ НЕГО визуально (звуки их слышны, но магазин никак не открыть, так как просто не срабатывает EntityInteractEntityEvent). Остальные игроки видят всех жителей, и могут покупать вещи. Но им достаточно умереть и респавниться, как и для них жители пропадут. Использую в PlayerDeathEvent player.spigot().respawn(); и телепортирую потом игрока на свою базу (конечно, если есть кровать, иначе - gamer.setSpectator(true), но это не важно).

Почему так происходит? Мои догадки:
1) player.spigot().respawn() создает эту ошибку. (Думаю, если в этом проблема, то через NMS тоже нет смысла это делать).
2) Кривой спавн самого жителя (маловероятно).
Код:
    public void spawn(Location location)
    {
        Entity trader = location.getWorld().spawnEntity(location, EntityType.VILLAGER);
        trader.setCustomName(ChatColor.translateAlternateColorCodes('&', cfg.getString("path"));
        trader.setCustomNameVisible(true);
        Villager villager = (Villager) trader;
        villager.setProfession(Profession.NITWIT);
        villager.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(0);
    }
3) проблема с ядром.
... Ваш ответ.

Вообщем, хотел бы узнать причину этого бага, и почему так происходит, чтобы знать, что убирать и переделывать (да и другим может встретиться этот баг).
 
setRemoveWhenFarAway(false);
Так житель то не удаляется, он просто становится невидимым умершему, другим игрокам он остается видимым. Хотя все равно установлю это значение, но решит ли это проблему?
 
Последнее редактирование:
Боюсь, что не решит.

Для начала поставь последний билд ядра для нужной версии игры.

Затем проверь, как ведёт себя сервер без всех остальных плагинов (должен стоять только твой и зависимости). Если все станет нормально - поиграйся с приоритетом события смерти.

Последнее, что могу предложить - вызывай респаун через один тик после смерти.

Также для диагностики можешь наспаунить обычных ванильных мобов и посмотреть, пропадут ли они
 
Для начала поставь последний билд ядра для нужной версии игры.
Поставил, при смерти все жители все равно на карте для игрока пропадают визуально.
Также для диагностики можешь наспаунить обычных ванильных мобов и посмотреть, пропадут ли они
Поставил на центре ведьм, при телепорте на карту все мобы видны, и жители и ведьмы. При смерти ни тех ни других не видно. Главное, ведьмы не видны, а вот зельки в игрока бросают.
Затем проверь, как ведёт себя сервер без всех остальных плагинов (должен стоять только твой и зависимости). Если все станет нормально - поиграйся с приоритетом события смерти.
У меня и так стоит сам плагин + MultiWorld.
 
Последнее, что могу предложить - вызывай респаун через один тик после смерти.
Не помогло (
Поставил EventPriority.HIGHEST - тоже не помогло.
После респавна все равно мобы больше не видны для респавнутого игрока.
 
Нашел в интернете этот тред: https://bugs.mojang.com/browse/MC-68403
Похоже, это ошибка билда (хотя, вроде у меня релизная версия). Пофиксить ее на уровне сервера возможно?
Версия клиента - 1.12 + OptiFine.
Версия ядра сервера - spigot-1.12-R0.1-SNAPSHOT-b1376
 
Затестил на 1.8 ядре, проблема пропала. Так вот.. шо делать с 1.12)
 
Затестил на 1.8 ядре, проблема пропала. Так вот.. шо делать с 1.12)
Если в твоем плагине покупка идёт через gui, а не через самого жителя, то можешь отрубить AI жителя (хз может поможет)
Код:
villager.setAI(false);
 
Если в твоем плагине покупка идёт через gui, а не через самого жителя, то можешь отрубить AI жителя (хз может поможет)
Код:
villager.setAI(false);

Боюсь, не поможет. Ведь я спавнил ведьм, и они тоже пропадали, хотя они не имеют AI, насколько я знаю.
 
Назад
Верх