mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 03:36:47 -04:00
parent
b7c7ed8221
commit
eb3e6d8727
@ -177,6 +177,8 @@ object Localization {
|
|||||||
def PrintRedstoneLevel(level: Int): String = localizeImmediately("tooltip.print.RedstoneLevel", level.toString)
|
def PrintRedstoneLevel(level: Int): String = localizeImmediately("tooltip.print.RedstoneLevel", level.toString)
|
||||||
|
|
||||||
def MFULinked(isLinked: Boolean): String = localizeImmediately(if (isLinked) "tooltip.upgrademf.Linked" else "tooltip.upgrademf.Unlinked")
|
def MFULinked(isLinked: Boolean): String = localizeImmediately(if (isLinked) "tooltip.upgrademf.Linked" else "tooltip.upgrademf.Unlinked")
|
||||||
|
|
||||||
|
def ExperienceLevel(level: Double): String = localizeImmediately("tooltip.robot_level", level.toString)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,25 @@
|
|||||||
package li.cil.oc.common.item
|
package li.cil.oc.common.item
|
||||||
|
|
||||||
class UpgradeExperience(val parent: Delegator) extends traits.Delegate with traits.ItemTier
|
import java.util
|
||||||
|
|
||||||
|
import li.cil.oc.util.UpgradeExperience
|
||||||
|
import net.minecraft.client.util.ITooltipFlag
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import net.minecraft.world.World
|
||||||
|
import net.minecraftforge.fml.relauncher.{Side, SideOnly}
|
||||||
|
import li.cil.oc.Localization;
|
||||||
|
|
||||||
|
class UpgradeExperience(val parent: Delegator) extends traits.Delegate with traits.ItemTier {
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT) override
|
||||||
|
def tooltipLines(stack: ItemStack, world: World, tooltip: util.List[String], flag: ITooltipFlag): Unit = {
|
||||||
|
if (stack.hasTagCompound) {
|
||||||
|
val nbt = li.cil.oc.integration.opencomputers.Item.dataTag(stack)
|
||||||
|
val experience = UpgradeExperience.getExperience(nbt)
|
||||||
|
val level = UpgradeExperience.calculateLevelFromExperience(experience)
|
||||||
|
val reportedLevel = UpgradeExperience.calculateExperienceLevel(level, experience)
|
||||||
|
tooltip.add(Localization.Tooltip.ExperienceLevel(reportedLevel))
|
||||||
|
}
|
||||||
|
super.tooltipLines(stack, world, tooltip, flag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -14,9 +14,8 @@ import li.cil.oc.api.machine.Arguments
|
|||||||
import li.cil.oc.api.machine.Callback
|
import li.cil.oc.api.machine.Callback
|
||||||
import li.cil.oc.api.machine.Context
|
import li.cil.oc.api.machine.Context
|
||||||
import li.cil.oc.api.network.Visibility
|
import li.cil.oc.api.network.Visibility
|
||||||
import li.cil.oc.api.prefab
|
|
||||||
import li.cil.oc.api.prefab.AbstractManagedEnvironment
|
import li.cil.oc.api.prefab.AbstractManagedEnvironment
|
||||||
import net.minecraft.enchantment.Enchantment
|
import li.cil.oc.util.UpgradeExperience
|
||||||
import net.minecraft.enchantment.EnchantmentHelper
|
import net.minecraft.enchantment.EnchantmentHelper
|
||||||
import net.minecraft.entity.item.EntityXPOrb
|
import net.minecraft.entity.item.EntityXPOrb
|
||||||
import net.minecraft.init.Items
|
import net.minecraft.init.Items
|
||||||
@ -47,11 +46,7 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends A
|
|||||||
|
|
||||||
var level = 0
|
var level = 0
|
||||||
|
|
||||||
def xpForLevel(level: Int): Double =
|
def xpForNextLevel: Double = UpgradeExperience.xpForLevel(level + 1)
|
||||||
if (level == 0) 0
|
|
||||||
else Settings.get.baseXpToLevel + Math.pow(level * Settings.get.constantXpGrowth, Settings.get.exponentialXpGrowth)
|
|
||||||
|
|
||||||
def xpForNextLevel = xpForLevel(level + 1)
|
|
||||||
|
|
||||||
def addExperience(value: Double) {
|
def addExperience(value: Double) {
|
||||||
if (level < MaxLevel) {
|
if (level < MaxLevel) {
|
||||||
@ -71,7 +66,7 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends A
|
|||||||
// xp(level) = base + (level * const) ^ exp
|
// xp(level) = base + (level * const) ^ exp
|
||||||
// pow(xp(level) - base, 1/exp) / const = level
|
// pow(xp(level) - base, 1/exp) / const = level
|
||||||
val oldLevel = level
|
val oldLevel = level
|
||||||
level = math.min((Math.pow(experience - Settings.get.baseXpToLevel, 1 / Settings.get.exponentialXpGrowth) / Settings.get.constantXpGrowth).toInt, 30)
|
level = UpgradeExperience.calculateLevelFromExperience(experience)
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
if (level != oldLevel) {
|
if (level != oldLevel) {
|
||||||
updateClient()
|
updateClient()
|
||||||
@ -81,11 +76,8 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends A
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Callback(direct = true, doc = """function():number -- The current level of experience stored in this experience upgrade.""")
|
@Callback(direct = true, doc = """function():number -- The current level of experience stored in this experience upgrade.""")
|
||||||
def level(context: Context, args: Arguments): Array[AnyRef] = {
|
def level(context: Context, args: Arguments): Array[AnyRef] =
|
||||||
val xpNeeded = xpForNextLevel - xpForLevel(level)
|
result(UpgradeExperience.calculateExperienceLevel(level, experience))
|
||||||
val xpProgress = math.max(0, experience - xpForLevel(level))
|
|
||||||
result(level + xpProgress / xpNeeded)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Callback(doc = """function():boolean -- Tries to consume an enchanted item to add experience to the upgrade.""")
|
@Callback(doc = """function():boolean -- Tries to consume an enchanted item to add experience to the upgrade.""")
|
||||||
def consume(context: Context, args: Arguments): Array[AnyRef] = {
|
def consume(context: Context, args: Arguments): Array[AnyRef] = {
|
||||||
@ -123,16 +115,14 @@ class UpgradeExperience(val host: EnvironmentHost with internal.Agent) extends A
|
|||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
|
|
||||||
private final val XpTag = Settings.namespace + "xp"
|
|
||||||
|
|
||||||
override def save(nbt: NBTTagCompound) {
|
override def save(nbt: NBTTagCompound) {
|
||||||
super.save(nbt)
|
super.save(nbt)
|
||||||
nbt.setDouble(XpTag, experience)
|
UpgradeExperience.setExperience(nbt, experience)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def load(nbt: NBTTagCompound) {
|
override def load(nbt: NBTTagCompound) {
|
||||||
super.load(nbt)
|
super.load(nbt)
|
||||||
experience = nbt.getDouble(XpTag) max 0
|
experience = UpgradeExperience.getExperience(nbt)
|
||||||
updateXpInfo()
|
updateXpInfo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
28
src/main/scala/li/cil/oc/util/UpgradeExperience.scala
Normal file
28
src/main/scala/li/cil/oc/util/UpgradeExperience.scala
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package li.cil.oc.util
|
||||||
|
|
||||||
|
import li.cil.oc.Settings
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
|
|
||||||
|
object UpgradeExperience {
|
||||||
|
final val XpTag = Settings.namespace + "xp"
|
||||||
|
|
||||||
|
def getExperience(nbt: NBTTagCompound): Double = nbt.getDouble(XpTag) max 0
|
||||||
|
|
||||||
|
def getExperience(stack: ItemStack): Double = if (!stack.hasTagCompound) 0 else getExperience(stack.getTagCompound)
|
||||||
|
|
||||||
|
def setExperience(nbt: NBTTagCompound, experience: Double): Unit = nbt.setDouble(XpTag, experience)
|
||||||
|
|
||||||
|
def xpForLevel(level: Int): Double =
|
||||||
|
if (level == 0) 0
|
||||||
|
else Settings.get.baseXpToLevel + Math.pow(level * Settings.get.constantXpGrowth, Settings.get.exponentialXpGrowth)
|
||||||
|
|
||||||
|
def calculateExperienceLevel(level: Int, experience: Double): Double = {
|
||||||
|
val xpNeeded = xpForLevel(level + 1) - xpForLevel(level)
|
||||||
|
val xpProgress = math.max(0, experience - xpForLevel(level))
|
||||||
|
level + xpProgress / xpNeeded
|
||||||
|
}
|
||||||
|
|
||||||
|
def calculateLevelFromExperience(experience: Double): Int =
|
||||||
|
math.min((Math.pow(experience - Settings.get.baseXpToLevel, 1 / Settings.get.exponentialXpGrowth) / Settings.get.constantXpGrowth).toInt, 30)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user