AHu*_*Ici 5 java enums minecraft minecraft-forge
我正在尝试为 1.7.10 制作一个模组(我知道,已经过时了,但我认为在这种情况下这并不重要),将一些模组与 CustomNPC 合并,基本上添加了一些看起来和工作起来都像 CustomNPC 的武器武器但由不同模组的材料制成。由于某种原因,mod 提供的防护罩需要在其构造函数中使用特定的枚举:
public class ItemShield extends ItemNpcInterface {
public EnumNpcToolMaterial material;
public ItemShield(int par1, EnumNpcToolMaterial material) {
super(par1);
this.material = material;
setMaxDamage(material.getMaxUses());
setCreativeTab((CreativeTabs)CustomItems.tabWeapon);
}
Run Code Online (Sandbox Code Playgroud)
枚举存储材料类型及其所有值。我不想编辑该模组本身的代码,但我想向其中添加更多材料。有没有办法向该枚举添加一些内容,或者可以将具有不同材料的相同枚举转换为这种类型?
我已经找到了一种解决方法,通过创建一个自定义屏蔽类,该类只需从我的自定义枚举中获取值,但我很好奇是否有一种方法可以在不添加新类的情况下做到这一点。
编辑
我想我会添加 mod 的 EnumNpcToolMaterial,这样就更清楚屏蔽构造函数到底想要什么
public enum EnumNpcToolMaterial {
WOOD(0, 59, 2.0F, 0, 15),
STONE(1, 131, 4.0F, 1, 5),
BRONZE(2, 170, 5.0F, 2, 15),
IRON(2, 250, 6.0F, 2, 14),
DIA(3, 1561, 8.0F, 3, 10),
GOLD(0, 32, 12.0F, 1, 22),
EMERALD(3, 1000, 8.0F, 4, 10),
DEMONIC(3, 100, 8.0F, 6, 10),
FROST(2, 59, 6.0F, 3, 5),
MITHRIL(3, 3000, 8.0F, 3, 10);
private final int harvestLevel;
private final int maxUses;
private final float efficiencyOnProperMaterial;
private final int damageVsEntity;
private final int enchantability;
EnumNpcToolMaterial(int par3, int par4, float par5, int par6, int par7) {
this.harvestLevel = par3;
this.maxUses = par4;
this.efficiencyOnProperMaterial = par5;
this.damageVsEntity = par6;
this.enchantability = par7;
}
public int getMaxUses() {
return this.maxUses;
}
public float getEfficiencyOnProperMaterial() {
return this.efficiencyOnProperMaterial;
}
public int getDamageVsEntity() {
return this.damageVsEntity;
}
public int getHarvestLevel() {
return this.harvestLevel;
}
public int getEnchantability() {
return this.enchantability;
}
}
Run Code Online (Sandbox Code Playgroud)
您正在寻找EnumHelper.addEnum。虽然在 Java 中没有官方支持的动态扩展Enums 的方法,但在经过修改的 Minecraft 中,有足够的需要这样做,因此 Forge 创建了一个类来自动执行所需的所有反射和黑客操作。你会像这样使用它(未经测试):
EnumNpcToolMaterial ADAMANT = EnumHelper.addEnum(EnumNpcToolMaterial.class, "ADAMANT", new Class<?>[]{int.class, int.class, float.class, int.class, int.class}, new Object[]{3, 5000, 15.0F, 10, 30});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |