попробуюСделай рендер для блока свой и там крути
Мне бы сначала разобраться в самом механизме вращения.
public class RenderTestAnim extends TileEntitySpecialRenderer<TileEntityTestAnim> {
@Override
public void render(TileEntityTestAnim te, double x, double y, double z, float partialTicks, int destroyStage, float alpha)
{
GL11.glPushMatrix();
GL11.glRotated(45, 0, 1, 0);
}
}
MinecraftForgeClient.registerItemRenderer(item, new RenderItem());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTestAnim.class, new RenderTestAnim());
public class ClientProxy extends CommonProxy
{
@Override
public void preInit(FMLPreInitializationEvent event)
{
super.preInit(event);
OBJLoader.INSTANCE.addDomain(Reference.MODID);
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTestAnim.class, new RenderTestAnim());
}
@Override
public void init(FMLInitializationEvent event)
{
super.init(event);
}
@Override
public void postInit(FMLPostInitializationEvent event)
{
super.postInit(event);
}
}
public class RenderTestAnim extends TileEntitySpecialRenderer<TileEntityTestAnim> {
@Override
public void render(TileEntityTestAnim te, double x, double y, double z, float partialTicks, int destroyStage, float alpha)
{
GL11.glRotated(45, 0, 1, 0);
GL11.glPushMatrix();
}
}
public class BlockTestAnim extends BlockTileEntity<TileEntityTestAnim> {
public BlockTestAnim(String name, Material material, float hardness, float resistanse, CreativeTabs creativetab) {
super(name, material, hardness, resistanse, creativetab);
this.setHarvestLevel("pickaxe", 3);
}
@Override
public boolean isOpaqueCube(IBlockState state) {
return false;
}
@SideOnly(Side.CLIENT)
public void initModel() {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
}
@Override
public boolean isFullCube(IBlockState state) {
return false;
}
@Override
public boolean onBlockActivated(World world, BlockPos position, IBlockState blockState, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
TileEntityTestAnim 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<TileEntityTestAnim> getTileEntityClass() {
return TileEntityTestAnim.class;
}
@Override
public TileEntityTestAnim createTileEntity(World world, IBlockState blockState) {
return new TileEntityTestAnim();
}
}
public class TileEntityTestAnim 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);
}
public int getCount() {
return this.count;
}
public void incrementCount() {
this.count++;
this.markDirty();
}
public void decrementCount() {
this.count--;
this.markDirty();
}
}
[12:51:00] [Client thread/ERROR] [minecraft/Minecraft]: ########## GL ERROR ##########
[12:51:00] [Client thread/ERROR] [minecraft/Minecraft]: @ Post render
[12:51:00] [Client thread/ERROR] [minecraft/Minecraft]: 1283: Stack overflow
Если добавляю GL11.glPopMatrix()
GL11.glPushMatrix();
GL11.glRotated(45, 0, 1, 0);
GL11.glPopMatrix();
public class RenderTestAnim extends TileEntitySpecialRenderer<TileEntityTestAnim>
{
private static List<BakedQuad> quads;
@Override
public void render(TileEntityTestAnim tile, double x, double y, double z, float partialTicks, int destroyStage, float alpha)
{
Tessellator tessellator = Tessellator.getInstance();
GlStateManager.pushMatrix();
GlStateManager.translate(x+.5, y+.5, z+.5);
GlStateManager.rotate(45, 0, 1, 0);
GlStateManager.scale(1, 1, 1);
BufferBuilder worldRenderer = tessellator.getBuffer();
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
worldRenderer.setTranslation(-.5, -.5, -.5);
ClientUtils.renderModelTESRFast(quads, worldRenderer, tile.getWorld(), tile.getPos());
worldRenderer.setTranslation(0, 0, 0);
tessellator.draw();
GlStateManager.popMatrix();
}
}
public class ClientUtils
{
public static void renderModelTESRFast(List<BakedQuad> quads, BufferBuilder renderer, World world, BlockPos pos)
{
int brightness = world.getCombinedLight(pos, 0);
int l1 = (brightness >> 0x10)&0xFFFF;
int l2 = brightness&0xFFFF;
for(BakedQuad quad : quads)
{
int[] vData = quad.getVertexData();
VertexFormat format = quad.getFormat();
int size = format.getIntegerSize();
int uv = format.getUvOffsetById(0)/4;
for(int i = 0; i < 4; ++i)
{
renderer
.pos(Float.intBitsToFloat(vData[size*i]),
Float.intBitsToFloat(vData[size*i+1]),
Float.intBitsToFloat(vData[size*i+2]))
.color(255, 255, 255, 255)
.tex(Float.intBitsToFloat(vData[size*i+uv]), Float.intBitsToFloat(vData[size*i+uv+1]))
.lightmap(l1, l2)
.endVertex();
}
}
}
}