Увеличение длительности сна после затухания экрана

Версия Minecraft
1.12.2
Простите за возможно идиотский вопрос, но можно ли как-то заставить игрока не просыпаться со сменой времени сразу после полного затухания экрана, а лежать определённое время? Где-то слышал, что можно использовать код из самого Майнкрафта, который срабатывает если на сервере спят не все игроки, но так его и не нашёл.
 

timaxa007

Модератор
5,831
409
672
Определённое время это в игроке sleepTimer.
можно ли как-то заставить игрока не просыпаться со сменой времени сразу после полного затухания экрана
sleepTimer = 100; и sleeping = true;
Или можно использовать эвент SleepingTimeCheckEvent.
Или тебе нужно точку спавна игрока, то это bedLocation в игроке.
Игрок
Java:
EntityPlayer#wakeUpPlayer(false, true, true);
Есть игроки
Java:
if (WorldServer#areAllPlayersAsleep()) {
    WorldServer#wakeAllPlayers();
}
 
sleepTimer = 100; и sleeping = true;
Я же правильно понял, что нужно получать эти поля через
Java:
f = EntityPlayer.class.getDeclaredField
и потом изменять значения через
Java:
f.set()
?
 
Вариант звучит беспроигрышно, тем не менее, по какой-то причине, не работает. Экран просто темнеет на секунду, даже без анимации того, как персонаж ложится.

Java:
@SubscribeEvent
    public void SPEvent(PlayerSleepInBedEvent event) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
    {
        
        player = event.getEntityPlayer();       
        pos = event.getPos();   
                
        f = EntityPlayer.class.getDeclaredField("sleepTimer");
        f1 = EntityPlayer.class.getDeclaredField("sleeping");
                
        f.setAccessible(true);
        f1.setAccessible(true);
        
        f.set(player, 100);
        f1.set(player, true);
        
    }
 
Сверху