Résolu Bloc TESR avec blockstates
-
Bonjour, donc je suis en 1.8 et j’ai créé un bloc TESR avec plusieurs blockstates, mais la méthode onTileEntityRendered n’est jamais appelé
Le bloc :
public class WindMillSupportBlock extends Block { public static final PropertyEnum VARIANT = PropertyEnum.create("type", EnumSupportType.class); protected WindMillSupportBlock() { super(Material.wood); setUnlocalizedName("windmillSupport"); setCreativeTab(ModElemental.eUtils); setDefaultState(getDefaultState().withProperty(VARIANT, EnumSupportType.TUBE)); setBlockBounds(0.3F, 0F, 0.3F, 0.7F, 1F, 0.7F); setHarvestLevel("axe", 0); setHardness(8.0F); setResistance(17.0F); } public TileEntity createTileEntity(World world, IBlockState state) { if(state.getValue(VARIANT) == EnumSupportType.FOOT) { return new TileEntityWindMillFoot(); } else if(state.getValue(VARIANT) == EnumSupportType.TUBE) { return new TileEntityWindMillTube(); } else if(state.getValue(VARIANT) == EnumSupportType.UPPER) { return new TileEntityWindMillUpper(); } System.out.println("ERROR : this is not an existing blockstate"); return null; } public boolean hasTileEntity() { return true; } public boolean isOpaqueCube() { return false; } public boolean isNormalCube() { return false; } @SideOnly(Side.CLIENT) public int getRenderType() { return -1; } public IBlockState getStateFromMeta(int meta) { return getDefaultState().withProperty(VARIANT, EnumSupportType.getStateFromMeta(meta)); } public int getMetaFromState(IBlockState state) { return ((EnumSupportType) state.getValue(VARIANT)).getMetadata(); } protected BlockState createBlockState() { return new BlockState(this, new IProperty[]{VARIANT}); } public String getUnlocalizedName(int meta) { return super.getUnlocalizedName() + "." + EnumSupportType.getStateFromMeta(meta); } public static enum EnumSupportType implements IStringSerializable { FOOT(0, "foot"), TUBE(1, "tube"), UPPER(2, "upper"); private static final EnumSupportType[] METADATA = new EnumSupportType[values().length]; private final String name; private final int metadata; private EnumSupportType(int meta, String name) { this.metadata = meta; this.name = name; } @Override public String getName() { return name; } public int getMetadata() { return metadata; } public String toString() { return name; } public static EnumSupportType getStateFromMeta(int meta) { if(meta < 0 || meta >= METADATA.length) { meta = 0; } return METADATA[meta]; } static { EnumSupportType[] v = values(); for(int i = 0; i < v.length; i++) { METADATA[v*.getMetadata()] = v*; } } } }
**Mon ClientProxy :
**```java
public class ClientProxy extends CommonProxy {public static KeyBinding keybindShowPower;
private SpecialRendererWindMillSupportTileEntity tesrWMS = new SpecialRendererWindMillSupportTileEntity();public ClientProxy() {
FMLCommonHandler.instance().bus().register(this);
keybindShowPower = new KeyBinding(“keybind.showPowerBar”, Keyboard.KEY_RCONTROL, “key.categories.misc”);
ClientRegistry.registerKeyBinding(keybindShowPower);
}@SubscribeEvent
public void keyInput(KeyInputEvent e) {
if(keybindShowPower.isPressed()) {
PowerOverlay.instance.setShowing(!PowerOverlay.instance.isShowing());
}
}@Override
public void registerRender() {
RenderingRegistry.registerEntityRenderingHandler(EntitySnowBoss.class,
new RenderSnowBoss(Minecraft.getMinecraft().getRenderManager(), new ModelPlayer(0.0F, false), 0.5F));
ClientRegistry.bindTileEntitySpecialRenderer(WindLiftTileEntity.class, new SpecialRendererWindLiftTileEntity());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWindMillFoot.class, tesrWMS);
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWindMillTube.class, tesrWMS);
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWindMillUpper.class, tesrWMS);
}@Override
protected void registerItemTexture(Item item, int metadata, String name) {
ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
mesher.register(item, metadata, new ModelResourceLocation(“elementalmod:” + name, “inventory”));
}@Override
protected void registerItemTexture(Item item, String name) {
registerItemTexture(item, 0, name);
}@Override
protected void registerBlockTexture(Block block, int metadata, String name) {
registerItemTexture(Item.getItemFromBlock(block), metadata, name);
}@Override
protected void registerBlockTexture(Block block, String name) {
registerBlockTexture(block, 0, name);
}
}Et mon TESR (qui n'est pas appelé) : **```java public class SpecialRendererWindMillSupportTileEntity extends TileEntitySpecialRenderer { public static WindMillFootModel model1 = new WindMillFootModel(); public static WindMillTubeModel model2 = new WindMillTubeModel(); public static WindMillUpperModel model3 = new WindMillUpperModel(); public static ResourceLocation texture = new ResourceLocation("elementalmod", "textures/models/blocks/wind_mill_support.png"); @Override public void renderTileEntityAt(TileEntity tile, double posX, double posY, double posZ, float partialRenderTick, int par6) { System.out.println("Special rendering…"); GL11.glPushMatrix(); GL11.glTranslated(posX + 0.5, posY + 1.5, posZ + 0.5); GL11.glRotatef(180F, 0F, 0F, 1F); bindTexture(texture); if(tile instanceof TileEntityWindMillTube) { model2.renderAll();//Tube } else if(tile instanceof TileEntityWindMillUpper) { model3.renderAll();//Haut } else { model1.renderAll();//Pied } GL11.glPopMatrix(); System.out.println("Special rendered."); } }
Merci d’avance.
-
Salut,
Ta fonction hasTileEntity n’est pas bonne. Regardes dans la classe bloc, il faut ajouter block state en argument. -
OK, c’est bon la méthode est appelée. Mais toujours pas de rendu…
-
Ton
System.out.println(“Special rendering…”);
S’affiche dans la console mais tu n’as aucun affichage en jeu ? -
C’est ça
-
Peut-être un problème au niveau du modèle ?
-
Ah oui, j’avais oublié de déplacer le mirror sur deux des trois modèles !
EDIT : En fait ça change rien… -
À mon avis utiliser le même TileEntitySpecialRenderer pour trois TileEntity différent n’est pas une bonne idée.
-
Ok, ça fonctionne