Не рендерится 3d модель блока

Версия Minecraft
1.6.4
149
1
2
Привет. Я сделал 3д рендер для блока, но он опять же не рендерится как броня.

import cool.Mod.MyTestMod;
import cool.Mod.TileEntity.TileEntityComputer;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;

public class BlockComputer extends BlockContainer{

public BlockComputer(int par1, Material par2Material) {
super(par1, par2Material);
this.setCreativeTab(CreativeTabs.tabDecorations);
}
public AxisAlignedBB getCollisionBoundingsu_boxFromPool(World par1World, int par2, int par3, int par4){ 
return null; 


public boolean isOpaqueCube(){ 
return false; 


public boolean renderAsNormalBlock(){ 
return false; 

public int getRenderType(){ 
return -1; 
}
@Override
public TileEntity createNewTileEntity(World world) {
return new TileEntityComputer();
}

}


import org.lwjgl.opengl.GL11;

import cool.Mod.TileEntity.TileEntityComputer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;

public class ModelBarrelRender extends TileEntitySpecialRenderer{
IModelCustom model;

public ModelBarrelRender(){
model = AdvancedModelLoader.loadModel("/cool/Mod/obj/Blocks/barrel.obj");
}

@Override
public void renderTileEntityAt(TileEntity te, double d1, double d2, double d3, float f) { 
renderTE((TileEntityComputer)te, d1, d2, d3, f); 
}

private void renderTE(TileEntity te, double d1, double d2, double d3, float f) {
bindTexture(new ResourceLocation("testmod", "textures/models/blocks/barrel.png"));
GL11.glPushMatrix(); 
GL11.glEnable(GL11.GL_BLEND); 
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 
GL11.glTranslatef(0, 0, 0);
GL11.glScalef(5, 5, 5);
GL11.glRotatef(0, 0, 0, 0);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();

public void renderTileEntity(TileEntityComputer tileEntity, double d1, double d2, double d3, float f) { 

int i = 0; 
if (tileEntity.hasWorldObj()) { i = tileEntity.getBlockMetadata(); } 
short rotation = 0; 
if (i == 1) { rotation = 360; } 
if (i == 2) { rotation = 270; } 
if (i == 3) { rotation = 180; } 
if (i == 4) { rotation = 90; } 

GL11.glPushMatrix(); 
GL11.glTranslatef((float)d1 + 0.1F, (float)d2 + 1.5F, (float)d3 + 0.5F); 
if(i == 1) {GL11.glTranslatef(-0.1F, 0.0F, 0.0F); } 
if(i == 2) {GL11.glTranslatef(0.4F, 0.0F, -0.5F); } 
if(i == 3) {GL11.glTranslatef(0.9F, 0.0F, 0.0F); } 
if(i == 4) {GL11.glTranslatef(0.4F, 0.0F, 0.5F); } 

GL11.glRotatef(rotation, 0, 1, 0); 
GL11.glRotatef(180F, 0, 0, 1); 
GL11.glScalef(1F, 1F, 1F); 
GL11.glPopMatrix(); 

public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 

float f = 0.0000F; 
this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.0F, f, 0.0F); 
}

private void setBlockBounds(float f, float g, float h, float i, float f2, float j) {
// TODO Auto-generated method stub

}
}
 
149
1
2
MaximPixel написал(а):
TileEntitySpecialRenderer привязывается к TileEntity. А не рендерится, потому что в ItemBlock нету TileEntity. Для блока-брони нужно что-то другое.
Чот ничего не понял :s
Можно по проще?
 
1,560
86
204
polsovatel написал(а):
MaximPixel написал(а):
TileEntitySpecialRenderer привязывается к TileEntity. А не рендерится, потому что в ItemBlock нету TileEntity. Для блока-брони нужно что-то другое.
Чот ничего не понял :s
Можно по проще?
При установки блока в мир появляется TileEntity, который и имеет рендер. А броня это же обычный Item, ну или в твоём случае это ItemBlock.
 
149
1
2
MaximPixel написал(а):
polsovatel написал(а):
MaximPixel написал(а):
TileEntitySpecialRenderer привязывается к TileEntity. А не рендерится, потому что в ItemBlock нету TileEntity. Для блока-брони нужно что-то другое.
Чот ничего не понял :s
Можно по проще?
При установки блока в мир появляется TileEntity, который и имеет рендер. А броня это же обычный Item, ну или в твоём случае это ItemBlock.

Про броню это я просто сказал. Меня интересует почему блок не рендерится
 

timaxa007

Модератор
5,831
409
672
Код:
public class RenderTileEntityObj extends TileEntitySpecialRenderer {

	public static final IModelCustom model = 
			AdvancedModelLoader.loadModel("/assets/" + ModBlockObj.MODID + "/obj/block.obj");
	public static final ResourceLocation texture = new ResourceLocation(ModBlockObj.MODID, "textures/blocks/model_obj.png");

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

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

}
Код:
model.renderAll();
 
149
1
2
timaxa007 написал(а):
Код:
public class RenderTileEntityObj extends TileEntitySpecialRenderer {

 public static final IModelCustom model = 
 AdvancedModelLoader.loadModel("/assets/" + ModBlockObj.MODID + "/obj/block.obj");
 public static final ResourceLocation texture = new ResourceLocation(ModBlockObj.MODID, "textures/blocks/model_obj.png");

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

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

}
Код:
model.renderAll();

Сделал, но лучше от этого не стало
Код:
import org.lwjgl.opengl.GL11;

import cool.Mod.MyTestMod;
import cool.Mod.TileEntity.TileEntityComputer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;

public class ModelBarrelRender extends TileEntitySpecialRenderer{
 
 public static final ResourceLocation texture = new ResourceLocation(MyTestMod.modid , "textures/models/blocks/barrel.png");
 public static final IModelCustom model = AdvancedModelLoader.loadModel("/assets/testmod/obj/blocks/barrel.obj");
 
 @Override
 public void renderTileEntityAt(TileEntity te, double d1, double d2, double d3, float f) { 
 renderTE((TileEntityComputer)te, d1, d2, d3, f); 
 }

 private void renderTE(TileEntity te, double d1, double d2, double d3, float f) {
 GL11.glPushMatrix();
        GL11.glTranslatef(0.5F, 0.0F, 0.5F);
        bindTexture(texture);
        model.renderAll();
        GL11.glPopMatrix(); } 
 public void renderTileEntity(TileEntityComputer tileEntity, double d1, double d2, double d3, float f) { 

 int i = 0; 
 if (tileEntity.hasWorldObj()) { i = tileEntity.getBlockMetadata(); } 
 short rotation = 0; 
 if (i == 1) { rotation = 360; } 
 if (i == 2) { rotation = 270; } 
 if (i == 3) { rotation = 180; } 
 if (i == 4) { rotation = 90; } 

 GL11.glPushMatrix(); 
 GL11.glTranslatef((float)d1 + 0.1F, (float)d2 + 1.5F, (float)d3 + 0.5F); 
 if(i == 1) {GL11.glTranslatef(-0.1F, 0.0F, 0.0F); } 
 if(i == 2) {GL11.glTranslatef(0.4F, 0.0F, -0.5F); } 
 if(i == 3) {GL11.glTranslatef(0.9F, 0.0F, 0.0F); } 
 if(i == 4) {GL11.glTranslatef(0.4F, 0.0F, 0.5F); } 

 GL11.glRotatef(rotation, 0, 1, 0); 
 GL11.glRotatef(180F, 0, 0, 1); 
 GL11.glScalef(1F, 1F, 1F); 
 GL11.glPopMatrix(); 
 } 
 public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) 
 { 
 float f = 0.0000F; 
 this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.0F, f, 0.0F); 
 }

 private void setBlockBounds(float f, float g, float h, float i, float f2, float j) {
 // TODO Auto-generated method stub
 
 }
}
 

timaxa007

Модератор
5,831
409
672
polsovatel, ещё надо указать место рендера.
polsovatel написал(а):
Код:
private void renderTE(TileEntity te, double d1, double d2, double d3, float f) {
GL11.glPushMatrix();
       GL11.glTranslatef(0.5F, 0.0F, 0.5F);
       bindTexture(texture);
       model.renderAll();
       GL11.glPopMatrix(); }
Код:
private void renderTE(TileEntityComputer te, double d1, double d2, double d3, float f) {
       GL11.glPushMatrix();
       GL11.glTranslated(d1, d2, d3);
       GL11.glTranslatef(0.5F, 0.0F, 0.5F);
       bindTexture(texture);
       model.renderAll();
       GL11.glPopMatrix();
}
 
149
1
2
timaxa007 написал(а):
polsovatel, ещё надо указать место рендера.
polsovatel написал(а):
Код:
private void renderTE(TileEntity te, double d1, double d2, double d3, float f) {
GL11.glPushMatrix();
       GL11.glTranslatef(0.5F, 0.0F, 0.5F);
       bindTexture(texture);
       model.renderAll();
       GL11.glPopMatrix(); }
Код:
private void renderTE(TileEntityComputer te, double d1, double d2, double d3, float f) {
       GL11.glPushMatrix();
       GL11.glTranslated(d1, d2, d3);
       GL11.glTranslatef(0.5F, 0.0F, 0.5F);
       bindTexture(texture);
       model.renderAll();
       GL11.glPopMatrix();
}

Но чобы я не делал блок все равно не рендерится :/
 

timaxa007

Модератор
5,831
409
672
Убедись, что сама модель находиться в нужном пространстве и нужных размеров. Если слишком большой, то можешь находиться внутри этой модели. Если не в нужном пространстве, то он может быть под землей и/или на далеко находиться от своего места.
Убедись, что ты правильно дал класс рендера для твоего TileEntity. Т.е. регистрация рендера и то что она зарегистрирована, но в том методе где он находиться, может не как задействован.


А так-же посмотри в консоль, когда будешь устанавливать блок с этим TileEntity. Возможно, что сама модель может не зарендериться, так как загрузчик obj не смог его правильно преобразовать в нужный вид.
 
149
1
2
149
1
2
timaxa007 написал(а):
Убедись, что сама модель находиться в нужном пространстве и нужных размеров. Если слишком большой, то можешь находиться внутри этой модели. Если не в нужном пространстве, то он может быть под землей и/или на далеко находиться от своего места.
Убедись, что ты правильно дал класс рендера для твоего TileEntity. Т.е. регистрация рендера и то что она зарегистрирована, но в том методе где он находиться, может не как задействован.


А так-же посмотри в консоль, когда будешь устанавливать блок с этим TileEntity. Возможно, что сама модель может не зарендериться, так как загрузчик obj не смог его правильно преобразовать в нужный вид.



Вот что пишет когда ставлю блок
2017-06-26 16:30:18 [SEVERE] [ForgeModLoader] A TileEntity type cool.Mod.TileEntity.TileEntityComputer has throw an exception trying to write state. It will not persist. Report this to the mod author
java.lang.RuntimeException: class cool.Mod.TileEntity.TileEntityComputer is missing a mapping! This is a bug!
at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:108)
at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:317)
at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:127)
at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:232)
at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:284)
at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:899)
at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:360)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:124)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:484)
at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
 
149
1
2
Сверху