Не спится что-то...

Версия Minecraft
1.10.2
4,167
68
693
Всем привет!
Беда следующая: кровать не апдейтит время в кастомном измерении...
Ложусь нормально, засыпаю... Встаю, а кругом ночь!
Аналогично и с погодными явлениями... Ни дождь, ни гроза после сна не прекращается...

В чём может быть ошибка?
 
В общем, беда в следующем:
В апдейте WorldServer есть проверка на то, спят ли все игроки.
И там же происходит переключение времени на дневное:
Код:
if (this.areAllPlayersAsleep()) {
     if (this.getGameRules().getBoolean("doDaylightCycle")) {
          long i = this.worldInfo.getWorldTime() + 24000L;
          this.worldInfo.setWorldTime(i - i % 24000L);
     }
     this.wakeAllPlayers();
}

Так вот данный метод, почему-то отказывается работать, когда я нахожусь в своём измерении...
А именно не работает само переключение worldInfo.setWorldTime();
Принудительный вызов данного метода не даёт результатов.

Однако, через команды консоли, время переключается... Но там всё устроено немного по другому:
Проверяются все миры и во всех меняется время.
Код:
protected void incrementAllWorldTimes(MinecraftServer server, int amount) {
     for (int i = 0; i < server.worldServers.length; ++i) {
          WorldServer worldserver = server.worldServers[i];
          worldserver.setWorldTime(worldserver.getWorldTime() + (long)amount);
     }
}

Причём в самом MinecraftServer переменная worldServers значится как:
Код:
public WorldServer[] worldServers = new WorldServer[0];

Ну а в методе run() того же MinecraftServer есть строчки:
Код:
if (this.worldServers[0].areAllPlayersAsleep()) {
     this.tick();
     i = 0L;
}

Не очень понимаю, как всё это работает... Но, по ходу, апдейт мира пытается изменить время в обычном мире, а не в том, где находится игрок...

Так же, начинаю подозревать, что это может быть причиной странного поведения погоды в моём дименсе.

Кто-нибудь может помочь?
 
Мдяяяяяяяяя... Беда...
Неожиданно оказалось, что работает следующий метод:
Код:
long i = world.getWorldInfo().getWorldTime() + 24000L;
WorldServer worldserver = DimensionManager.getWorld(0); // "0", Карл!!!
worldserver.setWorldTime(i - i % 24000L);

То есть, даже находясь в своём измерении, я могу переключить время только в обычном мире...
И тогда время переключится и у меня )
Что говорит о том, что в обычном мире и у меня время одно и то же...

Беда в том, что кровать пытается переключить время через WorldServer моего мира, а не обычного...

Отсюда вопрос: а реально ли кастомному миру задать своё независимое время?
 
Advent of ascession(возможно, с ошибкой написал), добавляет мир precasia, в нем происходит цикл дня и ночи. Кроватью время менять не пробовал, но набалдашник времени из TaintegMagic пашет как надо
 
Запили кастомную кровать, перехватывай события установки блока обычной кровати, заменяй их на свою
 
Есть мыслишка получше... Сейчас пробую реализовать...
Моя проблема даже не в том, что я не могу переключить ночь на день, а в том, что если кто-то поспит в обычном мире, то в моём делается день.
Да! Добро пожаловать в МАЙНКРАФТ!
 
Наводящий вопрос: как можно убрать эффект плавного понижения, когда игрок ложится в кровать?
Мне нужно, чтобы он оказывался там мгновенно и чтобы камера при этом не дёргалась.
В EntityRenderer нашёл такую вот штуку:
Код:
if (entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPlayerSleeping()) {
     f = (float)((double)f + 1.0D);
      GlStateManager.translate(0.0F, 0.3F, 0.0F);

      if (!this.mc.gameSettings.debugCamEnable) {
            BlockPos blockpos = new BlockPos(entity);
            IBlockState iblockstate = this.mc.theWorld.getBlockState(blockpos);
                net.minecraftforge.client.ForgeHooksClient.orientBedCamera(this.mc.theWorld, blockpos, iblockstate, entity);

            GlStateManager.rotate(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTicks + 180.0F, 0.0F, -1.0F, 0.0F);
            GlStateManager.rotate(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTicks, -1.0F, 0.0F, 0.0F);
       }
}

Но приравнивание entity.prevRotationYaw к entity.rotationYaw эффекта не даёт.
 
Нужно отменить то, что внутри if (!this.mc.gameSettings.debugCamEnable) { ?
Ставь это значение(debugCamEnable) на true, когда игрок ложится и на false, когда встает
 
Серьёзно?
И что за метод?


Тут же фишка в том, что все изменения во времени делаются через WorldInfo... А оно одно, как я понял, на всю игру. То есть, фактически, менять время можно только в обычном мире, так как метод setTotalTime() (вроде) действует только в нулевом измерении...

Ну да ладно... Я это решил кое-каким сюжетным обоснованием и жутким костылём )))
 
Liahim написал(а):
Хм... Интересно...
И чо, реально работает?
То есть, бывает такое, что у тебя там ночь, а в обычном мире день?


Чо-т в 1.10.2 такого не нахожу (


Нее, это именно в моем мире. То есть сколько будут идти сутки


Liahim написал(а):
То есть, бывает такое, что у тебя там ночь, а в обычном мире день?
В зависимости от установленного времени - да
 
RonyC написал(а):
Нее, это именно в моем мире. То есть сколько будут идти сутки

Хм... И как ты это сделал?
Прописывал свой рендер неба  и систему освещения?
И поведение мобов? И... много чего ещё?

Или что-то хитрее есть?
 
Liahim написал(а):
Хм... И как ты это сделал?
Прописывал свой рендер неба  и систему освещения?
И поведение мобов? И... много чего ещё?

Или что-то хитрее есть?
Почему ты все усложняешь?)) Если для своего мира, то вроде можно обычный использовать(но я так не пробовал, мне звезд на небе нужно много, да и объекты свои рендерить), но я не знаю как его вызывать. А так писать свой WorldProvider и туда свое  значение вставить. Посмотри какие-нибудь исходники модов на 1.10.2 Вроде тот twilight есть. А получилось вот так:




То есть на этой планете время идет 28,8 минут. Это полный цикл день/ночь.
 
Liahim написал(а):
Ох ты ж!
Так я и пишу свой ВорлдПровайдер... Но там нет указанного метода...
В твилайте я смотрел...
Там такого тоже нет...
Да и день там равен обычному...
Как у тебя всё работает, не пойму...
Ну у меня на 1.7.10, поэтому. Так-то я хотел предложить у Jimmy посмотреть, но ты пишешь на 1.10.2


А ты в ванильном смотрел?
 
Назад
Сверху