- 9
- 0
Привет. Пытаюсь написать рендер чего-то на блоке с TileEntity. Но возникла проблема, при попытке рендера модель рендерится, но при этом не отображается ни текстура ни цвет. Рендерить пробовал различными способами. И через vao\vbo и через Tessellator и даже пытался скопировать из ванилы класс рендера эндер сундука. Все рендерится одинаково - модель есть, но черного цвета.
Может кто-то сможет подсказать, что я делаю не так? Если тема дубликат прошу простить, я искал на форме TileEntitySpecialRenderer и еще много всего, но не заметил такой проблемы еще у кого-то.
Вот как оно выглядит.
PS: Через отладчик id текстуры 37 или вроде того, то есть не 0 и текстуру оно видит, хотя не уверен, что это важно.
Может кто-то сможет подсказать, что я делаю не так? Если тема дубликат прошу простить, я искал на форме TileEntitySpecialRenderer и еще много всего, но не заметил такой проблемы еще у кого-то.
SimpleRender:
//Копия ванильного класса TileEntityEnderChestRenderer
public class SimpleRender extends TileEntitySpecialRenderer<TestTileEntity> {
private static final ResourceLocation ENDER_CHEST_TEXTURE = new ResourceLocation("textures/entity/chest/ender.png");
private final ModelChest modelChest = new ModelChest();
@Override
public void render(TestrTileEntity te, double x, double y, double z, float partialTicks, int destroyStage, float alpha) {
int i = 0;
if (te.hasWorld())
{
i = te.getBlockMetadata();
}
if (destroyStage >= 0)
{
this.bindTexture(DESTROY_STAGES[destroyStage]);
GlStateManager.matrixMode(5890);
GlStateManager.pushMatrix();
GlStateManager.scale(4.0F, 4.0F, 1.0F);
GlStateManager.translate(0.0625F, 0.0625F, 0.0625F);
GlStateManager.matrixMode(5888);
}
else
{
this.bindTexture(ENDER_CHEST_TEXTURE);
}
GlStateManager.pushMatrix();
GlStateManager.enableRescaleNormal();
GlStateManager.color(1.0F, 1.0F, 1.0F, alpha);
GlStateManager.translate((float)x, (float)y + 1.0F, (float)z + 1.0F);
GlStateManager.scale(1.0F, -1.0F, -1.0F);
GlStateManager.translate(0.5F, 0.5F, 0.5F);
int j = 0;
if (i == 2)
{
j = 180;
}
if (i == 3)
{
j = 0;
}
if (i == 4)
{
j = 90;
}
if (i == 5)
{
j = -90;
}
GlStateManager.rotate((float)j, 0.0F, 1.0F, 0.0F);
GlStateManager.translate(-0.5F, -0.5F, -0.5F);
float f = 1.0F;
this.modelChest.chestLid.rotateAngleX = -(f * ((float)Math.PI / 2F));
this.modelChest.renderAll();
GlStateManager.disableRescaleNormal();
GlStateManager.popMatrix();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
if (destroyStage >= 0)
{
GlStateManager.matrixMode(5890);
GlStateManager.popMatrix();
GlStateManager.matrixMode(5888);
}
}
}
Java:
public class BlockTest extends BlockTileEntity<TestTileEntity> {
public BlockTest(String name, Material material, float hardness, float resistanse, SoundType soundType) {
super(name, material, hardness, resistanse, soundType);
}
@Override
public boolean onBlockActivated(World world, BlockPos position, IBlockState blockState, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
if (CommonProxy.isServer(world)) {
TestTileEntity tileEntity = getTileEntity(world, position);
if (side == EnumFacing.DOWN) {
tileEntity.decrementCount();
}
else if (side == EnumFacing.UP) {
tileEntity.incrementCount();
}
player.sendMessage(new TextComponentString("Count: " + tileEntity.getCount()));
}
return true;
}
@Override
public Class<TestTileEntity> getTileEntityClass() {
return TestTileEntity.class;
}
@Nullable
@Override
public TestTileEntity createTileEntity(World world, IBlockState blockState) {
return new TestTileEntity();
}
}
TestTileEntity:
public class TestTileEntity extends TileEntity {
private int count;
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound.setInteger("count", this.count);
return super.writeToNBT(tagCompound);
}
@Override
public void readFromNBT(NBTTagCompound tagCompound) {
this.count = tagCompound.getInteger("count");
super.readFromNBT(tagCompound);
}
@Override
public NBTTagCompound getUpdateTag() {
return this.writeToNBT(new NBTTagCompound());
}
@Nullable
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
return new SPacketUpdateTileEntity(this.pos, this.getBlockMetadata(), this.getUpdateTag());
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
super.onDataPacket(net, packet);
this.handleUpdateTag(packet.getNbtCompound());
}
public int getCount() {
return this.count;
}
public void incrementCount() {
this.count++;
this.markDirty();
}
public void decrementCount() {
this.count--;
this.markDirty();
}
}
ClientProxy:
//Тут в bindTileEntitySpecialRenderer регистрирую рендер
public class ClientProxy extends CommonProxy {
@Override
public void preInit(FMLPreInitializationEvent event) {
super.preInit(event);
}
@Override
public void init(FMLInitializationEvent event) {
super.init(event);
BlockRegister.registerRender();
ClientRegistry.bindTileEntitySpecialRenderer(TestTileEntity.class, new SimpleRender());
}
@Override
public void postInit(FMLPostInitializationEvent event)
{
super.postInit(event);
}
}
PS: Через отладчик id текстуры 37 или вроде того, то есть не 0 и текстуру оно видит, хотя не уверен, что это важно.
Последнее редактирование: