- 1
- 0
Всем привет!
Прямо сейчас создаю мод, который добавит в игру все неиспользуемые эффекты в виде зелий. Сделал класс ItemPotion2, в основном копию ItemPotion.
Добился того, что смог добавить зелья всех возможных эффектов (включая те, что уже есть) и дать им нужный цвет. Меня интересует следующее:
как в оригинальном майнкрафте реализовано, что у зелья силы, например, 3 аналога разного времени и силы действия, у зелья скорости тоже 3 и всё в таком духе. Где это хранится и как настраивается? У меня у самого есть идея создать список из PotionEffect, но прежде, чем делать это, хочу узнать, есть ли способ оптимальнее этого.
Если кому-то понадобится, вот код ItemPotion2. PotionType это просто enum с двумя полями: Drinkable и Splash
Прямо сейчас создаю мод, который добавит в игру все неиспользуемые эффекты в виде зелий. Сделал класс ItemPotion2, в основном копию ItemPotion.
Добился того, что смог добавить зелья всех возможных эффектов (включая те, что уже есть) и дать им нужный цвет. Меня интересует следующее:
как в оригинальном майнкрафте реализовано, что у зелья силы, например, 3 аналога разного времени и силы действия, у зелья скорости тоже 3 и всё в таком духе. Где это хранится и как настраивается? У меня у самого есть идея создать список из PotionEffect, но прежде, чем делать это, хочу узнать, есть ли способ оптимальнее этого.
Если кому-то понадобится, вот код ItemPotion2. PotionType это просто enum с двумя полями: Drinkable и Splash
ItemPotion2:
public class ItemPotion2 extends ItemFood
{
@SideOnly(Side.CLIENT)
private static IIcon
potionBottleDrinkable,
potionBottleSplash,
potionOverlay;
private PotionType potionType;
public ItemPotion2(PotionType potionType)
{
super(0, 0F, false);
setUnlocalizedName("potion");
setMaxStackSize(1);
setMaxDamage(0);
setAlwaysEdible();
setHasSubtypes(true);
setCreativeTab(CreativeTabs.tabBrewing);
this.potionType = potionType;
}
@Override
public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
{
--stack.stackSize;
if (!player.capabilities.isCreativeMode)
{
if (stack.stackSize <= 0)
{
return new ItemStack(Items.glass_bottle);
}
player.inventory.addItemStackToInventory(new ItemStack(Items.glass_bottle));
}
//player.addPotionEffect(new PotionEffect(Potion.digSpeed.id, 100));
return stack;
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
if (potionType == PotionType.DRINKABLE)
{
player.setItemInUse(stack, getMaxItemUseDuration(stack));
return stack;
}
else if(potionType == PotionType.SPLASH)
{
return stack;
}
return stack;
}
public int getMaxItemUseDuration(ItemStack p_77626_1_)
{
return 32;
}
public EnumAction getItemUseAction(ItemStack p_77661_1_)
{
return EnumAction.drink;
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses() {
return true;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamageForRenderPass(int meta, int renderPass) {
return renderPass == 0 ? potionOverlay : super.getIconFromDamageForRenderPass(meta, renderPass);
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int damage)
{
return getIconFromPotionType(potionType);
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register) {
super.registerIcons(register);
potionOverlay = register.registerIcon("minecraft:potion_overlay");
potionBottleDrinkable = register.registerIcon("minecraft:potion_bottle_drinkable");
potionBottleSplash = register.registerIcon("minecraft:potion_bottle_splash");
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int renderPass) {
return renderPass > 0 ? 0xFFFFFF : getColorFromDamage(stack.getItemDamage());
}
@Override
@SideOnly(Side.CLIENT)
public void getSubItems(Item item, CreativeTabs tab, List items) {
for (int damage = 0, size = Potion.potionTypes.length; damage < size; damage++) {
if(Potion.potionTypes[damage] != null)
items.add(new ItemStack(item, 1, damage));
}
}
@SideOnly(Side.CLIENT)
public int getColorFromDamage(int damage)
{
//Potion potion = Potion.potionTypes[damage];
//return potion != null? potion.getLiquidColor() : 0xFFFFFF;
return Potion.potionTypes[damage].getLiquidColor();
}
@Override
public boolean hasEffect(ItemStack par1ItemStack, int pass) {
return true;
}
@SideOnly(Side.CLIENT)
public IIcon getIconFromPotionType(PotionType type)
{
switch (type)
{
case DRINKABLE:
return potionBottleDrinkable;
case SPLASH:
return potionBottleSplash;
}
return null;
}
}