I've made a turbine block that looks like a windmill. It's supposed to run off of steam blocks that I've added, but it doesn't rotate correctly.
My TESR class:
package com.example.gammacraft.blockRenderers;
import org.lwjgl.opengl.GL11;
import com.example.gammacraft.TileEntity.SteamTurbineTileEntity;
import assets.gammacraft.textures.models.SteamTurbineModel;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
public class SteamTurbineRenderer extends TileEntitySpecialRenderer {
SteamTurbineModel model;
public SteamTurbineRenderer() {
model = new SteamTurbineModel();
}
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y,double z, float scale) {
int dir = tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord);
SteamTurbineTileEntity te = (SteamTurbineTileEntity)tile.getWorldObj().getTileEntity(tile.xCoord, tile.yCoord, tile.zCoord);
GL11.glPushMatrix();
GL11.glTranslated(x+0.5F, y+0.5F, z);
GL11.glRotated(te.getRotation(), 0, 0, 1);
System.out.println(te.getRotation());
GL11.glDisable(GL11.GL_LIGHTING);
this.bindTexture(new ResourceLocation("gammacraft:textures/blocks/Candle.png"));
this.model.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
GL11.glPopMatrix();
}
My TileEntity (I will add the packets later):
package com.example.gammacraft.TileEntity;
import net.minecraft.tileentity.TileEntity;
public class SteamTurbineTileEntity extends TileEntity {
public int Speed = 0;
public float rotation = 0;
public SteamTurbineTileEntity() {
// TODO Auto-generated constructor stub
}
public void setRotation(float rot){
this.rotation = rot;
}
public float getRotation(){
return this.rotation;
}
public void setSpeed(int Speed){
this.Speed = Speed;
}
public int getSpeed(){
return this.Speed;
}
}
And my block class:
package com.example.gammacraft.blocks.energy;
import java.util.Random;
import com.example.gammacraft.gammacraft;
import com.example.gammacraft.TileEntity.SteamTurbineTileEntity;
import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class SteamTurbine extends Block implements ITileEntityProvider {
public SteamTurbine() {
super(Material.iron);
this.setCreativeTab(gammacraft.gammacraftcreativetab);
this.setBlockName("SteamTurbine");
}
public void onNeighborBlockChange(World world, int x, int y, int z, Block block){
SteamTurbineTileEntity te = (SteamTurbineTileEntity)world.getTileEntity(x, y, z);
if(world.getBlock(x, y-1, z)==gammacraft.SteamBlock)te.Speed=5;
world.scheduleBlockUpdate(x, y, z, (Block)this, 1);
}
public void updateTick(World world,int x,int y,int z,Random random){
SteamTurbineTileEntity te = (SteamTurbineTileEntity)world.getTileEntity(x, y, z);
te.setRotation(te.getRotation()+te.getSpeed());
if(world.getBlock(x, y-1, z)!=gammacraft.SteamBlock){
if(te.Speed>0){
te.Speed--;
}
if(te.Speed<0){
te.Speed++;
}
}else{
if(te.Speed>0){
te.Speed++;
}
if(te.Speed<0){
te.Speed--;
}
}
System.out.println(te.Speed);
if(te.Speed!=0)
world.scheduleBlockUpdate(x, y, z, (Block)this, 2);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float Hitx, float Hity, float Hitz) {
if(player.getHeldItem()!=null){
if(player.getHeldItem().getItem()==gammacraft.wrench){
if(side!=0||side!=1){
world.setBlockMetadataWithNotify(x, y, z, side-2, 0);
System.out.println(side);
}
return true;
}
}
return false;
}
@Override
public TileEntity createNewTileEntity(World var1, int var2) {
return new SteamTurbineTileEntity();
}
@Override
public boolean isOpaqueCube(){
return false;
}
@Override
public int getRenderType() {
return -1;
}
public boolean renderAsNormalBlock() {
return false;
}
}