[1.7.10] Поворот TileEntity к лицу игрока

667
7
2
Есть TileEntity с моделью obj. Но у него есть "недостаток", всегда когда я ставлю блок, моя модель смотрит в одну сторону. Учитывая то что модель имеет переднюю часть, это очень катастрофично.
Block
Код:
package com.virysd.decostorage.blocks;

import com.virysd.decostorage.DecoStorage;
import com.virysd.decostorage.tile.TileEntityWorkbenchForStorage;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public class BlockWorkbenchForStorage extends Block implements ITileEntityProvider{
    public BlockWorkbenchForStorage() {
        super(Material.wood);
        setCreativeTab(DecoStorage.tabsDecoStorage);
        setBlockName("workbenchforstorage");
    }

    @Override
    public TileEntity createNewTileEntity(World world, int metadata) {
        return new TileEntityWorkbenchForStorage();
    }

    public int getRenderType() {
        return -1;
    }

    public boolean isOpaqueCube() {
        return false;
    }

    public boolean renderAsNormalBlock() {
        return false;
    }

}


TileEntity
Код:
package com.virysd.decostorage.tile;

import net.minecraft.tileentity.TileEntity;

public class TileEntityWorkbenchForStorage extends TileEntity {

}
TileEntityRender
Код:
package com.virysd.decostorage.render;

import com.virysd.decostorage.tile.TileEntityWorkbenchForStorage;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11;

public class ModelTileEntityWorkbenchForStorage extends TileEntitySpecialRenderer {
    public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("DecoStorage:models/ct.obj"));
    public static final ResourceLocation texture = new ResourceLocation("DecoStorage:models/tx.png");

    @Override
    public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) {
        render((TileEntityWorkbenchForStorage)tile, x, y, z, f);
    }

    private void render(TileEntityWorkbenchForStorage tile, double x, double y, double z, float f) {
        GL11.glPushMatrix();
        GL11.glTranslated(x, y, z);
        GL11.glTranslatef(0.5F, 0.5F, 0.5F);
        bindTexture(texture);
        model.renderAll();
        GL11.glPopMatrix();
    }
}
 

timaxa007

Модератор
5,831
409
672
Подобное объясняли. Во-основном помню про мясорубку для 1.6.4.
[merge_posts_bbcode]Добавлено: 23.06.2016 11:37:23[/merge_posts_bbcode]

[1.6.4] Obj: Поворот модели | блока к игроку при установке

[merge_posts_bbcode]Добавлено: 23.06.2016 11:41:13[/merge_posts_bbcode]

Если тебе нужен пример для 1.7.10, то я так-же я делал пример, [1.7.10] Сидеть на стуле (слив кода), стул поворачиваться лицом к игроку.
 
2,505
81
397
Дак возьми в рендере игрока и поверни модель так, чтобы смотрела на координаты игрока. В чем проблема-то?
 
608
5
15
glRotatef(player.rotetionPich + 180, 0, 0)
[merge_posts_bbcode]Добавлено: 23.06.2016 15:43:50[/merge_posts_bbcode]

Можно ещё и по Y на Yaw вращать, если нужно :)
 
667
7
2
timaxa007 написал(а):
Если тебе нужен пример для 1.7.10, то я так-же я делал пример, [1.7.10] Сидеть на стуле (слив кода), стул поворачиваться лицом к игроку.
Попробовал этот код:
Код:
@Override
 public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack is) {
     int l = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
     /* Изменяем метудату от 0 до 3 зависимо от положения entity.
* Будет использоваться для поворота нашей модели.*/
     world.setBlockMetadataWithNotify(x, y, z, l, 2);
 }
Модель стала вертеться.
2c33410b858ed376248d5bdfdaf5fabe.png
svk2140
glRotatef(player.rotetionPich + 180, 0, 0)
А это еще что за заморский способ вертеть модель?
 
608
5
15
Записываешь в переменную в тайле, player.rotetionPich + 180 при установке, а потом вертишь в рендере.
Оно вертит не только под 90° :D
 
1,137
5
3
Ну во-первых, glRotatef
А во-вторых, у меты всего 16 возможных значений( [0;15])
 
608
5
15
wilah написал(а):
Ну во-первых, glRotatef
А во-вторых, у меты всего 16 возможных значений( [0;15])
Боже, когда ты читать научишься?
Записываешь в переменную в тайле, player.rotetionPich + 180 при установке, а потом вертишь в рендере.
Оно вертит не только под 90° 
grin.png
 
1,137
5
3
>>Записываешь в переменную в тайле, player.rotetionPich 
Тогда уж не "в переменную", а "переменную".
 
Сверху