base mod created
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
package net.minecraft.enchantment;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.EnumCreatureAttribute;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.inventory.EntityEquipmentSlot;
|
||||
import net.minecraft.item.ItemAxe;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
|
||||
public class EnchantmentDamage extends Enchantment
|
||||
{
|
||||
/** None */
|
||||
private static final String[] DAMAGE_NAMES = new String[] {"all", "undead", "arthropods"};
|
||||
/** Holds the base factor of enchantability needed to be able to use the enchant. */
|
||||
private static final int[] MIN_COST = new int[] {1, 5, 5};
|
||||
/** None */
|
||||
private static final int[] LEVEL_COST = new int[] {11, 8, 8};
|
||||
/** None */
|
||||
private static final int[] LEVEL_COST_SPAN = new int[] {20, 20, 20};
|
||||
/** Defines the type of damage of the enchantment, 0 = all, 1 = undead, 3 = arthropods */
|
||||
public final int damageType;
|
||||
|
||||
public EnchantmentDamage(Enchantment.Rarity rarityIn, int damageTypeIn, EntityEquipmentSlot... slots)
|
||||
{
|
||||
super(rarityIn, EnumEnchantmentType.WEAPON, slots);
|
||||
this.damageType = damageTypeIn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimal value of enchantability needed on the enchantment level passed.
|
||||
*/
|
||||
public int getMinEnchantability(int enchantmentLevel)
|
||||
{
|
||||
return MIN_COST[this.damageType] + (enchantmentLevel - 1) * LEVEL_COST[this.damageType];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum value of enchantability nedded on the enchantment level passed.
|
||||
*/
|
||||
public int getMaxEnchantability(int enchantmentLevel)
|
||||
{
|
||||
return this.getMinEnchantability(enchantmentLevel) + LEVEL_COST_SPAN[this.damageType];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the maximum level that the enchantment can have.
|
||||
*/
|
||||
public int getMaxLevel()
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the additional damage that will be dealt by an item with this enchantment. This alternative to
|
||||
* calcModifierDamage is sensitive to the targets EnumCreatureAttribute.
|
||||
*/
|
||||
public float calcDamageByCreature(int level, EnumCreatureAttribute creatureType)
|
||||
{
|
||||
if (this.damageType == 0)
|
||||
{
|
||||
return 1.0F + (float)Math.max(0, level - 1) * 0.5F;
|
||||
}
|
||||
else if (this.damageType == 1 && creatureType == EnumCreatureAttribute.UNDEAD)
|
||||
{
|
||||
return (float)level * 2.5F;
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.damageType == 2 && creatureType == EnumCreatureAttribute.ARTHROPOD ? (float)level * 2.5F : 0.0F;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the name of key in translation table of this enchantment.
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return "enchantment.damage." + DAMAGE_NAMES[this.damageType];
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the enchantment passed can be applyied together with this enchantment.
|
||||
*/
|
||||
public boolean canApplyTogether(Enchantment ench)
|
||||
{
|
||||
return !(ench instanceof EnchantmentDamage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if this enchantment can be applied to a specific ItemStack.
|
||||
*/
|
||||
public boolean canApply(ItemStack stack)
|
||||
{
|
||||
return stack.getItem() instanceof ItemAxe ? true : super.canApply(stack);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called whenever a mob is damaged with an item that has this enchantment on it.
|
||||
*/
|
||||
public void onEntityDamaged(EntityLivingBase user, Entity target, int level)
|
||||
{
|
||||
if (target instanceof EntityLivingBase)
|
||||
{
|
||||
EntityLivingBase entitylivingbase = (EntityLivingBase)target;
|
||||
|
||||
if (this.damageType == 2 && entitylivingbase.getCreatureAttribute() == EnumCreatureAttribute.ARTHROPOD)
|
||||
{
|
||||
int i = 20 + user.getRNG().nextInt(10 * level);
|
||||
entitylivingbase.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, i, 3));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user