Résolu Block extends BlockIce
-
Bonsoir,
Voilà, je code actuellement un bloc qui reprend les mêmes fonctions que le bloc de glace ainsi j’ai décidé d’utiliser ceci :
public class BlockIceBrick extends BlockIce
en pensant bien à y ajouter l’import. (Bien obligé à dire vrai pour éviter les erreurs.)
import net.minecraft.block.BlockIce;
En jeu, mon bloc utilise bel et bien les même fonctions mais par la même occasion… La texture du bloc de glace, tout en gardant le nom que je lui ai donné.
:::
:::Pourtant j’utilise la même méthode pour un autre bloc et lui garde sa texture. Une idée du pourquoi ?
Voici la classe principale de mon mod ainsi que du bloc en question
package iglooCraft.common; import iglooCraft.block.*; import iglooCraft.proxies.ICraftCommonProxy; import net.minecraft.block.Block; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "KIC", name = "IglooCraft", version = "1.0.0") @NetworkMod(clientSideRequired = true, serverSideRequired = false) public class IglooCraft { @SidedProxy(clientSide = "iglooCraft.proxies.ICraftClientProxy", serverSide = "iglooCraft.proxies.ICraftCommonProxy") public static ICraftCommonProxy proxy; public static Block ice_brick, snow_brick; @EventHandler public void PreInit(FMLPreInitializationEvent event) { ice_brick = new BlockIceBrick(3421); snow_brick = new BlockSnowBrick(3422); GameRegistry.registerBlock(snow_brick, "snow_brick"); GameRegistry.registerBlock(ice_brick, "ice_brick"); } @EventHandler public void Init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void PostInit(FMLPostInitializationEvent event) { } }
package iglooCraft.block; import net.minecraft.block.BlockIce; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class BlockIceBrick extends BlockIce { public BlockIceBrick(int id) { super(id); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(0.1F); this.setStepSound(soundGlassFootstep); this.setUnlocalizedName("ice_brick"); this.func_111022_d("kic:ice_brick"); } }
Merci d’avance.
-
Dans Block.java il y a ça :
public Block func_111022_d(String par1Str) { this.field_111026_f = par1Str; return this; } @SideOnly(Side.CLIENT) protected String func_111023_E() { return this.field_111026_f == null ? "MISSING_ICON_TILE_" + this.blockID + "_" + this.unlocalizedName : this.field_111026_f; } @SideOnly(Side.CLIENT) public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon(this.func_111023_E()); }
En fait quand tu utilise func_111022_d(“kic:ice_brick”), le String “field_111026_f” prend la valeur kic:ice_brick. Ensuite la fonction func_111023_E() vérifie que la texture n’est pas null, si elle est null ça devient un MISSING_ICON, si elle est ok, la fonction registerIcons enregistre l’icône.
Le problème est que la glace est extends BlockBreakable, dans BlockBreakable.java je vois ça :
public void registerIcons(IconRegister par1IconRegister) { this.blockIcon = par1IconRegister.registerIcon(this.breakableBlockIcon); }
Donc tu ne peux pas utiliser .func_111022_d(modid:texture) si ton bloc est extends BlockBreakable ou qu’il est extends d’une classe qui est elle même extends BlockBreakable.
Voila l’explication de pourquoi ça ne marche pas.Pour corriger ce problème, ajoute dans ta classe :
public void registerIcons(IconRegister iconRegister) { this.blockIcon = iconRegister.registerIcon("kic:ice_brick"); }
-
Merci à toi, je n’avais pas pensé à ça. Problème réglé !
-
Euh… J’ai rien compris
-
Tu n’as pas comprit quoi ? ^^