Расположение блока

Версия Minecraft
1.7.10
199
1
17
Ребят, с добавил в майн OBJ блок и когда я его ставил заметил одну штуку, где бы я не стоял и не ставил блок он ставиться в одном направление. Как мне это исправить?
P.S. Я хочу чтобы он поворачивался в любые стороны, а не смотрел в одну. Надеюсь вы поняли.
 

Вложения

  • 2018-01-26_16.52.36.png
    2018-01-26_16.52.36.png
    280.9 KB · Просмотры: 23
243
28
202
В рендере в зависимости от меты определяй угол поворота и поворачивай по y.
Java:
    public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {

        GL11.glPushMatrix();

        ...
        
        int facing = tileEntity.getBlockMetadata();
        
        int k = 0;

        if (facing == 0) {
        
            k = 0;
        }
 
         ...
        
        GL11.glRotatef(k, 0.0F, 1.0F, 0.0F);
        
        ...
        
        model.renderModel(0.0625F);

        GL11.glPopMatrix();
    }
 
199
1
17
В рендере в зависимости от меты определяй угол поворота и поворачивай по y.
Java:
    public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) {

        GL11.glPushMatrix();

        ...
       
        int facing = tileEntity.getBlockMetadata();
       
        int k = 0;

        if (facing == 0) {
       
            k = 0;
        }

         ...
       
        GL11.glRotatef(k, 0.0F, 1.0F, 0.0F);
       
        ...
       
        model.renderModel(0.0625F);

        GL11.glPopMatrix();
    }
Окей, спасибо, я попробую.
 
1,976
68
220
Фигню он тебе дал, полнейшую, даже установки меты нет.
В блок:
Java:
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
    int l = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
    world.setBlockMetadataWithNotify(x, y, z, l, 2);
}

В рендер:
Код:
GL11.glRotatef(90 * (tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord) + 1), 0.0F, 1.0F, 0.0F);

Готово.
 
199
1
17
Теперь когда я иду или ставлю блок и затем другой то они пропадают, а когда я отворачиваюсь от них то они с боку и идут за мной.
Класс блока
Java:
package excraft3.blocks.obj;

import excraft3.blocks.ExCraftBlockMods;
import excraft3.blocks.Tile.TileEntityBarikada;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class Barikada extends Block implements ITileEntityProvider {

    public Barikada() {
        super(Material.circuits);
        setCreativeTab(ExCraftBlockMods.tabBlocks);
        setHardness(0.25F);
        setStepSound(soundTypeMetal);
        setBlockTextureName("iron_block");
        setBlockName(ExCraftBlockMods.MODID + ".barikada");
        
         this.setBlockBounds(00, 00, 00, 01, 02, 01);
    }
         public boolean getRenderBoundingBox() {
         this.setSize(1, 2, 1);
        return blockConstructorCalled;
         }
    private void setSize(int i, int j, int k) {
            // TODO Auto-generated method stub
            
        }
    
    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
        int l = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
        world.setBlockMetadataWithNotify(x, y, z, l, 2);
    }

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

    public int getRenderType() {
        return -1;
    }

    public boolean isOpaqueCube() {
        return false;
    }

    public boolean renderAsNormalBlock() {
        return false;
    }

}
А вот класс рендера самого блока
Код:
package excraft3.blocks.Tile.render;

import org.lwjgl.opengl.GL11;

import excraft3.blocks.ExCraftBlockMods;
import excraft3.blocks.Tile.TileEntityBarikada;
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;

public class RenderTileEntityBarikada extends TileEntitySpecialRenderer {

    public static final IModelCustom model =
            AdvancedModelLoader.loadModel(new ResourceLocation(ExCraftBlockMods.MODID, "blocks/barikada.obj"));
    public static final ResourceLocation texture = new ResourceLocation(ExCraftBlockMods.MODID, "textures/blocks/barikada.png");

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

    private void render(TileEntityBarikada tile, double x, double y, double z, float f) {
        GL11.glPushMatrix();
        GL11.glTranslated(x, y, z);
        GL11.glTranslatef(0.5F, 0.0F, 0.5F);
        GL11.glRotatef(90 * (tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord) + 1), 0.0F, 1.0F, 0.0F);
        bindTexture(texture);
        model.renderAll();
        GL11.glPopMatrix();
    }

}
А вот уже скрин
 

Вложения

  • 2018-02-10_17.44.07.png
    2018-02-10_17.44.07.png
    209.5 KB · Просмотры: 16
  • 2018-02-10_17.44.08.png
    2018-02-10_17.44.08.png
    182.7 KB · Просмотры: 16
5,020
47
784
Печку смотри. Там вапще изи
Или делай как я(вроде есть енумфейсинг на 1.7, да?)
Ну в любом случае - получаешь угол в которую повернута голова игрока, кастишь ее в инт и чекаешь какая это сторона света и потом поворачиваешь противоположно
Java:
    @Override
    public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack)
    {
        EnumFacing facing = EnumFacing.fromAngle(placer.getRotationYawHead());
        world.setBlockState(pos, state.withProperty(FACING, facing));
    }
 

CumingSoon

Местный стендапер
1,634
12
269
Теперь когда я иду или ставлю блок и затем другой то они пропадают, а когда я отворачиваюсь от них то они с боку и идут за мной.
Класс блока
Java:
package excraft3.blocks.obj;

import excraft3.blocks.ExCraftBlockMods;
import excraft3.blocks.Tile.TileEntityBarikada;
import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class Barikada extends Block implements ITileEntityProvider {

    public Barikada() {
        super(Material.circuits);
        setCreativeTab(ExCraftBlockMods.tabBlocks);
        setHardness(0.25F);
        setStepSound(soundTypeMetal);
        setBlockTextureName("iron_block");
        setBlockName(ExCraftBlockMods.MODID + ".barikada");
        
         this.setBlockBounds(00, 00, 00, 01, 02, 01);
    }
         public boolean getRenderBoundingBox() {
         this.setSize(1, 2, 1);
        return blockConstructorCalled;
         }
    private void setSize(int i, int j, int k) {
            // TODO Auto-generated method stub
            
        }
    
    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
        int l = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
        world.setBlockMetadataWithNotify(x, y, z, l, 2);
    }

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

    public int getRenderType() {
        return -1;
    }

    public boolean isOpaqueCube() {
        return false;
    }

    public boolean renderAsNormalBlock() {
        return false;
    }

}
А вот класс рендера самого блока
Код:
package excraft3.blocks.Tile.render;

import org.lwjgl.opengl.GL11;

import excraft3.blocks.ExCraftBlockMods;
import excraft3.blocks.Tile.TileEntityBarikada;
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;

public class RenderTileEntityBarikada extends TileEntitySpecialRenderer {

    public static final IModelCustom model =
            AdvancedModelLoader.loadModel(new ResourceLocation(ExCraftBlockMods.MODID, "blocks/barikada.obj"));
    public static final ResourceLocation texture = new ResourceLocation(ExCraftBlockMods.MODID, "textures/blocks/barikada.png");

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

    private void render(TileEntityBarikada tile, double x, double y, double z, float f) {
        GL11.glPushMatrix();
        GL11.glTranslated(x, y, z);
        GL11.glTranslatef(0.5F, 0.0F, 0.5F);
        GL11.glRotatef(90 * (tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord) + 1), 0.0F, 1.0F, 0.0F);
        bindTexture(texture);
        model.renderAll();
        GL11.glPopMatrix();
    }

}
А вот уже скрин
Не знаю, как там и что работает. Но мне кажется, что сначала нужно повернуть, а потом уже подвинуть
 
Сверху