Реализация больших дверей

Версия Minecraft
1.12.2
5,149
49
899
Всем привет, норот. В общем, подскочил такой вопросец - хочу сделать большие двери, да с анимацией, желательно(гермозатвор должен медленно открываться)
Я умею в форджевскую анимацию, но там можно делать лишь с одним куском модели. Грубо говоря, если я хочу делать модель двери 3х3, то мне придется делать единую модель рамы 3х3 и подвижную часть(3х3) - то есть, не получится сделать ее поблочно, а модель больше чем один блок - это заведомо проблемы с расчетом света потом.
Также форджевская анимация не учитывает расстояние. Если от начальной точки блока до края модели есть какое то расстояние - оно будет радиусом движения(дверь не откроется вокруг своей оси, короче говоря).
Предложите какие нибудь варианты, если у вас есть мысли как это сделать. PS API малисисдорс не предлагать, не хочу грузить мод лишними либами.
 
Если от начальной точки блока до края модели есть какое то расстояние - оно будет радиусом движения(дверь не откроется вокруг своей оси, короче говоря).
Хочешь сказать, нельзя задать движение по произвольной кривой?
 
Могу дать совет, т.к я работал с гермоворотами:
Делать лучше гермы, открывающиеся вверх или вбок(only glTranlatef), то есть без каких либо поворотов.
Если делать повороты, вбок то ты замаешься сетать инвиз блоки для коллизии двери, это я тебе говорю.
Есть интересная тема насчет мода UgoCraft, япошки как то сделали такую фичу с коллизией,там есть блок, который может заставлять поворачиваться кучу блоков вокруг блока-вращателя, и все это дело соприкасается норм так с игроком и сущностями. Глянуть бы их код... Авось поможет тебе
 
Я видел подобный мод.
Посмотри Tall Doors мод.
Ещё что-то подобное было в моде Ancient Warface (могу неправильно написать название)
Так же я видел крупные двери в моде "Властелин колец", но там они просто соединяются, а что касается анимации, то это два мода выше
 
Могу дать совет, т.к я работал с гермоворотами:
Делать лучше гермы, открывающиеся вверх или вбок(only glTranlatef), то есть без каких либо поворотов.
Если делать повороты, вбок то ты замаешься сетать инвиз блоки для коллизии двери, это я тебе говорю.
Есть интересная тема насчет мода UgoCraft, япошки как то сделали такую фичу с коллизией,там есть блок, который может заставлять поворачиваться кучу блоков вокруг блока-вращателя, и все это дело соприкасается норм так с игроком и сущностями. Глянуть бы их код... Авось поможет тебе
Мне не важна коллизия двери в момент открывания. Интересует только закрытое-открытое состояние.
Но короче я понял, через TESR это все делать. А каким образом мне в теср подтянуть мою json модельку?(1.12.2)
 
Но короче я понял, через TESR это все делать. А каким образом мне в теср подтянуть мою json модельку?(1.12.2)
ТЫК
Но ведь без коллизии это ж кал(( Я когда делал, все челы вокруг кайфовали, как классно работает открытие закрытие герм
 
Потому что я хочу сделать поворачивающуюся. в сторону
Кинь какой нить видос со своими гермами глянуть.
Кстати буду рад посмотреть твой кодэ, если можна. Я не буду тыбрить, я не люблю разбираться как работает чужой код.
 
я тогда так костыльно сделал коллизию, и там такой говнокод, что стыдно показывать. Но по фпсу оно не давало нагрузки, просто визуально код говно.
Выглядела она как то так, а видоса, к сожалению, нет - попросту не сохранился.
Кстати, вот код транслейта показать могу.
float runSwitch = tile.lastrunProgress + ( tile.runProgress - tile.lastrunProgress); //недоинтерполяция из фланса
GL11.glTranslatef(0, -3.3F * runSwitch, 0);
tile.runProgress изменялась в зависимости от того, давалась ли энергия на герму (редстоун), и приплюсовывается каждый тик на опр значение до определенного значения, типа вот
Java:
@Override
      public void updateEntity() {
          
          
          lastrunProgress = runProgress;
          if(super.worldObj.isBlockIndirectlyGettingPowered(super.xCoord, super.yCoord, super.zCoord))
          {
              if(timer < 301){
                    ++timer;
              }   
              if(timer == 160){
                  sound2 = true;
              }
              if(timer > 160){
                  sound2 = false;
              }
              runProgress = 1F - (1F - runProgress) * 0.995F;
              if(runProgress > 0.5){
                  runProgress = 1F - (1F - runProgress) * 0.995F;
                  if(runProgress > 0.8){
                      runProgress = 1F - (1F - runProgress) * 0.985F; 
                      if(runProgress > 0.94){
                          runProgress = 1F - (1F - runProgress) * 0.945F; 
                      }
                  }
              }
          }
          else
          {
              if(timer > 0){
                  --timer;
              }
              if(timer == 140){
                  sound3 = true;
              }
              if(timer < 140){
                  sound3 = false;
              }
              runProgress *= 0.995F;
              if(runProgress < 0.5){
                  runProgress *= 0.995F;
                  if(runProgress < 0.2){
                      runProgress *= 0.985F;
                      if(runProgress < 0.05){
                          runProgress *= 0.945F;
                      }
                  }
                      
              }
          }
        
      }
Костыльный код потому что срочно требовалось чота написать, щас то я могу реализовать намного лучше, но вот с коллизией проблемы(
Не знаю чем их решить
 

Вложения

  • 1580148858731.png
    1580148858731.png
    877.6 KB · Просмотры: 26
А каким образом мне в теср подтянуть мою json модельку?(1.12.2)
Для твоего случая(просто повернуть) после получения IBakedModel можно зарендерить ее так:
Scala:
val mc=Minecraft.getMinecraft
mc.getRenderItem.renderItem(new ItemStack(<block>), <model>);
Или так:
Scala:
mc.getItemRenderer.renderItem(m.player,new ItemStack(<block>),TransformType.GROUND)
 
Назад
Сверху