Помогите Как узнать на игрока светит солнце или нет?

Статус
Закрыто для дальнейших ответов.

ShitCoder

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
TheLastGapple
в шапке вапрос. Ну типо нужен плагин если игрок стоит на солнце то убить его.
 
Как отследить именно свет от Солнца - я не знаю, но можно опробовать через byte getLightLevel() получать освещение блока под игроком. (тут появляется проблема источника освещения: освещать может, например, факел)

UPD:
Нашел другой метод: byte getLightFromSky() - «Get the amount of light at this block from the sky. Any light given from other sources (such as blocks like torches) will be ignored.»
 
Как отследить именно свет от Солнца - я не знаю, но можно опробовать через byte getLightLevel() получать освещение блока под игроком. (тут появляется проблема источника освещения: освещать может, например, факел)

UPD:
Нашел другой метод: byte getLightFromSky() - «Get the amount of light at this block from the sky. Any light given from other sources (such as blocks like torches) will be ignored.»
Получение освещение блока, а если человек летает?
 
Получение освещение блока, а если человек летает?
Как вариант - можно получить игровое время, и исходя из него убивать/не убивать игрока. Проблема: игрок может летать за деревом/стеной etc.
 
Можно проверять, нет ли над ним блоков, что-то в этом духе (ну, если над ним нет блоков, то значит над ним только небо => на него светит солнце, однако это не работает, например, для энда или ада, или когда идет дождь/ночь, но это все можно обработать отдельно)
 
Малопроизводительный фикс - искать блоки, которые могут загородить свет в стороне заката 😁

End и Nether можно не проверять с помощью
PHP:
if (player.getWorld().getName().equals("какой-нибудь мир")) {
    return;
}
 
Код:
    public static boolean needDayBurn(Player player) {
        if (player.getGameMode() == GameMode.CREATIVE) return false;
        Block block1 = player.getLocation().add(0, 1, 0).getBlock();
        if (block1.getType() == Material.WATER || block1.getType() == Material.STATIONARY_WATER) return false;
        Block block = player.getLocation().getBlock();
        if (block.getType() == Material.WATER || block.getType() == Material.STATIONARY_WATER) return false;
        return block1.getLightFromSky() >= 15;
    }
Посмотрел, была похожая тема оказывается.. Но тут горю и ночью, а вот под землёй не горю. Добавить проверку на время - как то слишком костыльно 🙂. Наверное потому что у AIR всегда эта переменная = 15.
 
Малопроизводительный фикс - искать блоки, которые могут загородить свет в стороне заката 😁

End и Nether можно не проверять с помощью player.getWorld().getName().equals("какой-нибудь мир");
Мой способ будет работать только если считать, что солнце всегда наверху, ибо если, действительно, будет закат или рассвет, и мы будем искать блоки, которые будут мешать нам "получать свет", сервер упадет))
 
Дабы быть более реалистичным, я бы замерял угол солнца относительно поверхности за игровым временем, а затем чекал бы трасером от самой высокой точки до игрока.
 
Как узнать горит игрок или нет? 😕
UPD. getFireTicks() спасло меня. Тему закрываю.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх