SkEnchants.sk

Created by Terry Jackson

Just so you know, we don't know the file format for every file. If it's just a bunch of random characters, it's probably a .zip or .jar.

function decode(t: text) :: integer:
    if {_t} parsed as integer > 10:
        return {_t} parsed as integer
    if {_t} = "X":
        return 10
    else if {_t} = "IX":
        return 9
    else if {_t} = "VIII":
        return 8
    else if {_t} = "VII":
        return 7
    else if {_t} = "VI":
        return 6
    else if {_t} = "V":
        return 5
    else if {_t} = "IV":
        return 4
    else if {_t} = "III":
        return 3
    else if {_t} = "II":
        return 2
    else if {_t} = "I":
        return 1

function toRoman(n: integer) :: string:
    if {_n} > 10:
        return "%{_n}%"
        stop
	set {_roman::*} to "X", "IX", "V", "IV" and "I"
	loop 10, 9, 5, 4 and 1:
		add 1 to {_index}
		while {_n} >= loop-value:
			add 1 to {_next}
			remove loop-value from {_n}
			set {_result::%{_next}%} to {_roman::%{_index}%}
	return (join {_result::*} by "") ? "0"

function hasEnchant(i: item, t: string) :: boolean:
    set {_lore::*} to lore of {_i} split at "||"
    loop {_lore::*}:
        if loop-value contains "%{_t}%":
            return true

function getEnchantLevel(i: item, t: string) :: integer:
    set {_lore::*} to lore of {_i} split at "||"
    set {_n} to 0
    loop {_lore::*}:
        add 1 to {_n}
        if loop-value contains "%{_t}%":
            set {_enchant::*} to loop-value split at "%{_t}% "
            set {_enchant} to decode({_enchant::2})
    return {_enchant}

function applyEnchant(i: item, t: string, l: integer, r: boolean):
    set {_lore::*} to lore of {_i} split at "||"
    set {_n} to 0
    loop {_lore::*}:
        add 1 to {_n}
        if loop-value contains "%{_t}%":
            if {_r} = true:
                set line {_n} of lore of {_i} to "%{_t}% %toRoman({_l})%"
            else:
                set line {_n} of lore of {_i} to "%{_t}% %{_l}%"

function removeEnchant(i: item, t: string):
    set {_lore::*} to lore of {_i} split at "||"
    set {_n} to 0
    loop {_lore::*}:
        add 1 to {_n}
        if loop-value contains "%{_t}%":
            delete {_lore::%{_n}%}
            set {_lore} to (join {_lore::*} by "||")
            set lore of {_i} to {_lore}

function addEnchantLevel(i: item, t: string, l: integer, r: boolean):
    set {_lore::*} to lore of {_i} split at "||"
    set {_n} to 0
    loop {_lore::*}:
        add 1 to {_n}
        if loop-value contains "%{_t}%":
            set {_level::*} to loop-value split at "%{_t}% "
            set {_level} to decode({_level::2})
            add {_l} to {_level}
            if {_r} = true:
                set line {_n} of lore of {_i} to "%{_t}% %toRoman({_level})%"
            else:
                set line {_n} of lore of {_i} to "%{_t}% %{_level}%"

function subtractEnchantLevel(i: item, t: string, l: integer, r: boolean):
    set {_lore::*} to lore of {_i} split at "||"
    set {_n} to 0
    loop {_lore::*}:
        add 1 to {_n}
        if loop-value contains "%{_t}%":
            set {_level::*} to loop-value split at "%{_t}% "
            set {_level} to decode({_level::2})
            subtract {_l} from {_level}
            if {_level} < 1:
                set {_level} to 1
            if {_r} = true:
                set line {_n} of lore of {_i} to "%{_t}% %toRoman({_level})%"
            else:
                set line {_n} of lore of {_i} to "%{_t}% %{_level}%"