mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
117 lines
2.9 KiB
Java
117 lines
2.9 KiB
Java
package com.hbm.util;
|
|
|
|
import net.minecraft.enchantment.Enchantment;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
public class EnchantmentUtil {
|
|
|
|
/**
|
|
* Adds an enchantment of the given level to the supplied itemstack
|
|
* @param stack
|
|
* @param enchantment
|
|
* @param level
|
|
*/
|
|
public static void addEnchantment(ItemStack stack, Enchantment enchantment, int level) {
|
|
|
|
stack.addEnchantment(enchantment, level);
|
|
}
|
|
|
|
/**
|
|
* Removes an enchantment from the given itemstack, regardless of level
|
|
* @param stack
|
|
* @param enchantment
|
|
*/
|
|
public static void removeEnchantment(ItemStack stack, Enchantment enchantment) {
|
|
|
|
if(stack.getEnchantmentTagList() == null)
|
|
return;
|
|
|
|
int i = 0;
|
|
for( ; i < stack.getEnchantmentTagList().tagCount(); i++) {
|
|
if(stack.getEnchantmentTagList().getCompoundTagAt(i).getShort("id") == enchantment.effectId)
|
|
break;
|
|
}
|
|
|
|
if(i < stack.getEnchantmentTagList().tagCount())
|
|
stack.getEnchantmentTagList().removeTag(i);
|
|
|
|
if(stack.getEnchantmentTagList().tagCount() == 0)
|
|
stack.getTagCompound().removeTag("ench");
|
|
}
|
|
|
|
/**
|
|
* Returns the size of the XP bar for the given level
|
|
* @param level
|
|
* @return
|
|
*/
|
|
public static int xpBarCap(int level) {
|
|
return level >= 30 ? 62 + (level - 30) * 7 : (level >= 15 ? 17 + (level - 15) * 3 : 17);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param targetXp
|
|
* @return
|
|
*/
|
|
public static int getLevelForExperience(int xp) {
|
|
|
|
int level = 0;
|
|
|
|
while (true) {
|
|
|
|
int xpCap = xpBarCap(level);
|
|
|
|
if (xp < xpCap)
|
|
return level;
|
|
|
|
xp -= xpCap;
|
|
level++;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Identical to EntityPlayer.addExperience but without increasing the player's score
|
|
* @param player
|
|
* @param xp
|
|
*/
|
|
public static void addExperience(EntityPlayer player, int xp, boolean silent) {
|
|
|
|
int j = Integer.MAX_VALUE - player.experienceTotal;
|
|
|
|
if(xp > j) {
|
|
xp = j;
|
|
}
|
|
|
|
player.experience += (float)xp / (float)player.xpBarCap();
|
|
|
|
for(player.experienceTotal += xp; player.experience >= 1.0F; player.experience /= (float)player.xpBarCap()) {
|
|
player.experience = (player.experience - 1.0F) * (float)player.xpBarCap();
|
|
|
|
if(silent)
|
|
addExperienceLevelSilent(player, 1);
|
|
else
|
|
player.addExperienceLevel(1);
|
|
}
|
|
}
|
|
|
|
public static void setExperience(EntityPlayer player, int xp) {
|
|
|
|
player.experienceLevel = 0;
|
|
player.experience = 0.0F;
|
|
player.experienceTotal = 0;
|
|
|
|
addExperience(player, xp, true);
|
|
}
|
|
|
|
public static void addExperienceLevelSilent(EntityPlayer player, int level) {
|
|
player.experienceLevel += level;
|
|
|
|
if (player.experienceLevel < 0) {
|
|
player.experienceLevel = 0;
|
|
player.experience = 0.0F;
|
|
player.experienceTotal = 0;
|
|
}
|
|
}
|
|
}
|