我试图为扩展我的主类(BlockOre.java)的每个类执行类似的代码块。我要问的代码是针对Minecraft mod,但问题只是关于Java,而不是我的世界。在我的主要课程中,我创建了三个新的" Block"对象。
public static Block AluminumOre = new BlockAluminumOre();
public static Block VibraniumOre = new BlockVibraniumOre();
public static Block PoloniumOre = new BlockPoloniumOre();
每个块的类扩展了我的类BlockOre。在我的BlockOre类中,我希望拥有这些块的所有类似重复功能。
@SideOnly(Side.CLIENT)
public IIcon iconOre;
@SideOnly(Side.CLIENT)
public IIcon iconNetherOre;
@SideOnly(Side.CLIENT)
public IIcon iconEndOre;
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister){
iconOre = iconRegister.registerIcon(Reference.MODID + ":EndAluminumOre");
iconNetherOre = iconRegister.registerIcon(Reference.MODID + ":NetherAluminumOre");
iconEndOre = iconRegister.registerIcon(Reference.MODID + ":AluminumOre");
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int metadata ){
int dim = Minecraft.getMinecraft().theWorld.provider.dimensionId;
if (dim == -1)
return iconNetherOre;
else if(dim == 0)
return iconOre;
else if(dim == 1)
return iconEndOre;
else
return iconOre;
}
我希望他们能做什么。我需要创建这些新的图标,注册它们,然后将它们返回到将获取块的纹理的函数。我只有非常基本的java知识,似乎无法弄清楚如何根据继承类的内容来更改所有对象。
所以更简单地说,我需要iconOre = icon(x)Ore,其中x =扩展此类的类。
聚苯乙烯。我知道我可以使用"这个"得到对象。我也需要更改字符串,如何正确格式化this.toString()。它返回[Object] @XXXXXXXX,具体取决于内存中的位置。正确的吗?
答案 0 :(得分:0)
最简单的方法是创建一个扩展BlockOre并包含您需要检索的名称的泛型类,例如:
public class GenericBlockOre extends BlockOre
{
final String name;
@SideOnly(Side.CLIENT)
public IIcon iconOre, iconNetherOre, iconEndOre;
public GenericBlockOre(final int id, final String name)
{
super(id);
this.name = name;
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister)
{
iconOre = iconRegister.registerIcon(Reference.MODID + ":End" + this.name + "Ore");
iconNetherOre = iconRegister.registerIcon(Reference.MODID + ":Nether" + this.name + "Ore");
iconEndOre = iconRegister.registerIcon(Reference.MODID + ":" + this.name + "Ore");
}
}
你的物品将成为:
public static Block aluminumOre = new GenericBlockOre(1, "Aluminum");
public static Block vibraniumOre = new GenericBlockOre(2, "Vibranium");
public static Block poloniumOre = new GenericBlockOre(3, "Polonium");
或者如果你真的需要创建一个新类,扩展类可以简单如下:
class AluminumOre extends GenericBlockOre
{
public AluminumOre()
{
super(1, "Aluminum");
}
}
N.B。显然,您无法使用1
,2
,3
作为您的块ID,需要进行更改。
然而,如果你绝对肯定它必须是通用的并且你愿意为它牺牲你的mod的效率,你可以这样做以便从类中获得矿石名称:
final AluminumOre ore = new AluminumOre();
final String className = ore.getClass().getSimpleName();
final String oreName = className.substring(0, className.indexOf("Ore"));
System.out.println(oreName); //Prints: Aluminum