Как создать блок с моделью [1.7.10]

11
1
Пилил индустриальный мод, начал добавлять руды и прочие материалы, добавил все и начал делать механизмы. Разумеется механизмы я хотел не со стандартными моделями и максимально реалистичные. Первый механизм который я собрался создать - это доменная печь.
_7hpNDbF-SA.jpg

Сделал я модель ,а вот как сделать чтобы она отображалась вместо блока я не понял. Я скурил все мануалы. Посмотрел гайды ,но ничего не нашел кроме старых видео где блок надо отнести к группе BlockContainer,а она красным горит, пишет что такой и вовсе нет. Есть ли варианты как по другому это сделать. Напишите что надо писать в классе блока, и в главном классе.

P.s Заранее спасибо.
 
Как не крути, не катит!  Первый пример просто вырезка из мода и к тому же не рабочая и с кучей лишней фигни, а второй под 1.6.4 и у него методы другие - все методы красные. Блин вот уже сколько ищу ничего не находит.
 
FoserosX написал(а):
BlockContainer,а она красным горит, пишет что такой и вовсе нет.
Не понятно чем у тебя это вызвано, но его импорт вот такой:
Код:
import net.minecraft.block.BlockContainer;

FoserosX написал(а):
Есть ли варианты как по другому это сделать.
Я вижу только скриншот модели, а не код. Так что я не знаю как тебе по-другому сделать.

FoserosX написал(а):
Напишите что надо писать в классе блока, и в главном классе.
LeonidM/Dasperal вроде как дал на это ответ.
[merge_posts_bbcode]Добавлено: 08.05.2016 07:48:35[/merge_posts_bbcode]

FoserosX написал(а):
а второй под 1.6.4 и у него методы другие - все методы красные.
Если ты про тему [1.7.10/1.6.4][Forge]: Примеры рендеров ... для предмета и блока. , то там примеры не только под 1.6.4, но и под 1.7.10.
И проверь, что импортируешь нужные классы, а не первые попавшийся.
 
сейчас вроде получилось, я поменял ваш метод Init(FMLInitializationEvent event) на Load(FMLInitializationEvent event) это видимо такое различие в версиях forge'a, такая-же проблема с ивентами пре и пост инициализации. Блок этот сработал, дальше я заменил модель а там косяк с осями вращения какой-то
Вот собственно код новой модели и скрины
Код:
package com.foserosx.realcraft.blocks.machines.blastfurnace;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;

public class ModelBlastFurnace extends ModelBase {

    //fields
    ModelRenderer foundationlayer1;
    ModelRenderer foundationlayer2;
    ModelRenderer metaloutput;
    ModelRenderer otheroutput;
    ModelRenderer shaft1;
    ModelRenderer shaft2;
    ModelRenderer shaft3;
    ModelRenderer input;
    ModelRenderer shaft4;
    ModelRenderer gasoutput;

    public ModelBlastFurnace() {
      textureWidth = 128;
      textureHeight = 128;

      foundationlayer1 = new ModelRenderer(this, 0, 0);
      foundationlayer1.addBox(0F, -1.999512E-13F, 0F, 14, 2, 14);
      foundationlayer1.setRotationPoint(-7F, 22F, -7F);
      foundationlayer1.setTextureSize(128, 128);
      foundationlayer1.mirror = true;
      setRotation(foundationlayer1, 0F, 0F, 0F);
      foundationlayer2 = new ModelRenderer(this, 56, 0);
      foundationlayer2.addBox(0F, 0F, 0F, 10, 6, 10);
      foundationlayer2.setRotationPoint(-5F, 16F, -5F);
      foundationlayer2.setTextureSize(128, 128);
      foundationlayer2.mirror = true;
      setRotation(foundationlayer2, 0F, 0F, 0F);
      metaloutput = new ModelRenderer(this, 0, 16);
      metaloutput.addBox(0F, 0F, 0F, 6, 6, 3);
      metaloutput.setRotationPoint(-3F, 13F, 5F);
      metaloutput.setTextureSize(128, 128);
      metaloutput.mirror = true;
      setRotation(metaloutput, 0F, 0F, 0F);
      otheroutput = new ModelRenderer(this, 0, 16);
      otheroutput.addBox(0F, 0F, 0F, 6, 6, 3);
      otheroutput.setRotationPoint(-3F, 13F, -8F);
      otheroutput.setTextureSize(128, 128);
      otheroutput.mirror = true;
      setRotation(otheroutput, 0F, 0F, 0F);
      shaft1 = new ModelRenderer(this, 18, 16);
      shaft1.addBox(0F, 0F, 0F, 14, 9, 14);
      shaft1.setRotationPoint(-7F, 7F, -7F);
      shaft1.setTextureSize(128, 128);
      shaft1.mirror = true;
      setRotation(shaft1, 0F, 0F, 0F);
      shaft2 = new ModelRenderer(this, 18, 39);
      shaft2.addBox(0F, 0F, 0F, 12, 4, 12);
      shaft2.setRotationPoint(-6F, 3F, -6F);
      shaft2.setTextureSize(128, 128);
      shaft2.mirror = true;
      setRotation(shaft2, 0F, 0F, 0F);
      shaft3 = new ModelRenderer(this, 18, 55);
      shaft3.addBox(0F, 0F, 0F, 10, 4, 10);
      shaft3.setRotationPoint(-5F, -1F, -5F);
      shaft3.setTextureSize(128, 128);
      shaft3.mirror = true;
      setRotation(shaft3, 0F, 0F, 0F);
      input = new ModelRenderer(this, 96, 0);
      input.addBox(0F, 0F, 0F, 6, 3, 6);
      input.setRotationPoint(-3F, -8F, -3F);
      input.setTextureSize(128, 128);
      input.mirror = true;
      setRotation(input, 0F, 0F, 0F);
      shaft4 = new ModelRenderer(this, 18, 69);
      shaft4.addBox(-4F, 0F, 0F, 8, 4, 8);
      shaft4.setRotationPoint(0F, -5F, -4F);
      shaft4.setTextureSize(128, 128);
      shaft4.mirror = true;
      setRotation(shaft4, 0F, 0F, 0F);
      gasoutput = new ModelRenderer(this, 0, 25);
      gasoutput.addBox(0F, 0F, 0F, 4, 4, 4);
      gasoutput.setRotationPoint(-2F, -2F, 4F);
      gasoutput.setTextureSize(128, 128);
      gasoutput.mirror = true;
      setRotation(gasoutput, 0F, 0F, 0F);
    }

    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
      super.render(entity, f, f1, f2, f3, f4, f5);
      setRotationAngles(f, f1, f2, f3, f4, f5);
      foundationlayer1.render(f5);
      foundationlayer2.render(f5);
      metaloutput.render(f5);
      otheroutput.render(f5);
      shaft1.render(f5);
      shaft2.render(f5);
      shaft3.render(f5);
      input.render(f5);
      shaft4.render(f5);
      gasoutput.render(f5);
    }

    private void setRotation(ModelRenderer model, float x, float y, float z) {
      model.rotateAngleX = x;
      model.rotateAngleY = y;
      model.rotateAngleZ = z;
    }

    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) {
      super.setRotationAngles(f, f1, f2, f3, f4, f5);
    }

  }
 
Названия метода для FMLInitializationEvent и других его подобных классов не важны (есть исключения).
Ссылки на скриншоты не доступны.
 
Первый скриншот - ты не увидел в коде и читал нужный гайд. Нужно в методе:
Код:
render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
приписать к ссылающийся методу setRotationAngles аргумент от Entity. И приписать аргумент Entity для метода setRotationAngles.
Второй скришот - метод render() это я его создал. В том случаи выглядело-бы так:
Код:
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {
      super.render(entity, f, f1, f2, f3, f4, f5);
      setRotationAngles(f, f1, f2, f3, f4, f5);
      render(f5);
    }

    public void render() {
      render(0.0625F);
    }

    public void render(float f5) {
      foundationlayer1.render(f5);
      foundationlayer2.render(f5);
      metaloutput.render(f5);
      otheroutput.render(f5);
      shaft1.render(f5);
      shaft2.render(f5);
      shaft3.render(f5);
      input.render(f5);
      shaft4.render(f5);
      gasoutput.render(f5);
    }
Третий скриншот - аналогичен ошибкой от второго скриншота.
[merge_posts_bbcode]Добавлено: 08.05.2016 18:21:28[/merge_posts_bbcode]

Я не так хорошо знаю классы ModelRenderer и ModelBase, чтобы точно что-то писать на них модели.

[merge_posts_bbcode]Добавлено: 08.05.2016 18:25:15[/merge_posts_bbcode]

На самом деле, возможно нужно типа рендерить как-то так:
Код:
model.render((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
Но я не уверен в этом случаи (но работать будет).
 
FoserosX написал(а):
Ты имел ввиду нормально? Или нет?

FoserosX написал(а):
как сделать кстати так чтобы по нормалям этот блок был высотой в 2 блока, ато только 1 и модель выступает за его границу сверху
Если я правельно понял, то увеличить границу рендера модели. Метод getRenderBoundingBox в твоём TileEntity.

FoserosX написал(а):

Ссылка ведёт на страницу "Файлы".
 
Нормали это >Тык< иначе говоря коллизионная геометрия. она есть у каждого блока в игре, чёрные границы у блока при наведении на него курсором или энтити это не просто выделение а ещё и нормали. Которые в 3d индустрии используются для того чтобы игрок или сторонний энтити не мог ходить сквозь блок.
https://www.dropbox.com/s/d7plefm6ktygdip/4.png?dl=0

и getRenderBoundingBox даёт вылет при размещении блока
 
[1.7.2]Баундсы и коллизия блока больше чем 1
[merge_posts_bbcode]Добавлено: 08.05.2016 20:22:51[/merge_posts_bbcode]

FoserosX написал(а):
и getRenderBoundingBox даёт вылет при размещении блока
Типа этого надо:
Код:
    @SideOnly(Side.CLIENT)
    @Override
    public AxisAlignedBB getRenderBoundingBox() {
        return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 2, zCoord + 1);
    }
 
FoserosX написал(а):
Нормали это >Тык< иначе говоря коллизионная геометрия. она есть у каждого блока в игре, чёрные границы у блока при наведении на него курсором или энтити это не просто выделение а ещё и нормали. Которые в 3d индустрии используются для того чтобы игрок или сторонний энтити не мог ходить сквозь блок.
https://www.dropbox.com/s/d7plefm6ktygdip/4.png?dl=0

и getRenderBoundingBox даёт вылет при размещении блок
В статье с вики написано, что это прямая, перпендикулярная поверхности.
 
wilah написал(а):
FoserosX написал(а):
Нормали это >Тык< иначе говоря коллизионная геометрия. она есть у каждого блока в игре, чёрные границы у блока при наведении на него курсором или энтити это не просто выделение а ещё и нормали. Которые в 3d индустрии используются для того чтобы игрок или сторонний энтити не мог ходить сквозь блок.
https://www.dropbox.com/s/d7plefm6ktygdip/4.png?dl=0

и getRenderBoundingBox даёт вылет при размещении блок
В статье с вики написано, что это прямая, перпендикулярная поверхности.
Хмм... Насколько я помню ещё с тех времен когда делал ремейк одной игры на Source Engine , нормали это коллизионные блоки , которые служили для игровой физики крайними точками соприкосновения объектов. Если пошарить по инету или найти один из редакторов моделей ,то можно найти там редактор коллизионных нормалей
 
timaxa007 написал(а):
[1.7.2]Баундсы и коллизия блока больше чем 1
[merge_posts_bbcode]Добавлено: 08.05.2016 20:22:51[/merge_posts_bbcode]

FoserosX написал(а):
и getRenderBoundingBox даёт вылет при размещении блока
Типа этого надо:
Код:
    @SideOnly(Side.CLIENT)
    @Override
    public AxisAlignedBB getRenderBoundingBox() {
        return AxisAlignedBB.getBoundingBox(xCoord, yCoord, zCoord, xCoord + 1, yCoord + 2, zCoord + 1);
    }
Куда это впиливать, и всё ли это что нужно?
 
Такое чувство что 2 вход для подключения трубы, а 3 для мехов
 
FoserosX, я же писал, что getRenderBoundingBox надо в твой TileEntity. И это не всё. И нужно создать фатомный блок над основном блоком или типа того, чтобы он был физичен. Но если расширять коллизию по стандартным методам, бывают баги - так как есть коллизия на проходимость, а есть коллизия на выделения блока. И насколько я знаю коллизия: на выделение не когда не было больше одного блока, коллизия на проходимость можно было сделать больше, но иногда у мобов из-за этого были проблемы. Была одна тема где об этом обсуждали, но я так и не нашёл. Так что, скорее всего надо будет использовать фантомный блок для дополнения коллизии, а не расширения стандартной коллизии.
 
Назад
Сверху