Gens skrip not working

  • Welcome to skUnity!

    Welcome to skUnity! This is a forum where members of the Skript community can communicate and interact. Skript Resource Creators can post their Resources for all to see and use.

    If you haven't done so already, feel free to join our official Discord server to expand your level of interaction with the comminuty!

    Now, what are you waiting for? Join the community now!

  • LOOKING FOR A VERSION OF SKRIPT?

    You can always check out skUnity Downloads for downloads and any other information about Skript!

2xiaoben

Member
Apr 7, 2023
1
0
1
18
options:
prefix: &b&lGens &8>>
gens: coal block or raw copper block or copper block or raw iron block or iron block or raw gold block or gold block or lapis block or redstone block or diamond block or emerald block or obsidian or netherrack or nether gold ore or nether bricks or magma block or netherite block or basalt or blackstone or crying obsidian or end stone or sea lanter or prismarine or beacon
noprefix: &c

function registerGens(index: integer, id: itemtype, name: string, upgrade: number = 0, next: itemtype, drop: itemtype, sell: number, dropname: string):
set {-gens::%{_index}%} to {_id}
set {-gens::%{_index}%::name} to {_name}
set {-gens::%{_index}%::upgrade} to {_upgrade}
set {-gens::%{_index}%::next} to {_next}
set {-gens::%{_index}%::drop} to {_drop}
set {-gens::%{_index}%::sell} to {_sell}
set {-gens::%{_index}%::dropname} to {_dropname}

# format:
# loadgen( gen block item, gen drops item, level, upgrade price, sell price of drops)
#
# gens are upgraded based on level: 1,2,3,4 etc.
#
# the gen block item cannot be named as
# the name will be the name of the drop item
# eg. loadgen(diamond block, diamond named "crystal", 1, 100, 1)
# will be named "crystal gen" and is level 1 which will be auto given
# to new players and diamond named "crystal" sells for 1
# and gen costs 100 to upgrade to next

loadgen(block of coal, coal named "&8&lCoal", 1, 100, 1,)
loadgen(block of raw copper, raw copper ingot named "&6&lRaw copper", 2, 700, 5)
loadgen(block of copper, copper ingot named "&6&lCopper", 3, 1800, 8)
loadgen(block of raw iron, raw iron named "&f&lRaw Iron", 4, 7000, 12)
loadgen(block of iron, iron ingot named "&f&lIron", 5, 14000, 20)
loadgen(block of raw gold, raw gold ingot named "&e&lRaw gold", 6, 20000, 25)
loadgen(gold block, gold ingot named "&e&lGold", 7, 50000, 30)
loadgen(block of lapis lazuli, lapis lazuli named "&9&lLapis", 8, 100000, 35)
loadgen(block of redstone, redstone named "&c&lRedstone", 9, 200000, 40)
loadgen(block of diamond, diamond named "&b&lDiamond", 10, 400000, 50)
loadgen(block of emerald, emerald named "&a&lEmerald", 11, 700000, 53)
loadgen(obsidian, obsidian named "&7&lObsidian", 12, 1000000, 60)
loadgen(netherrack, nether wart named "&c&lNether Wart", 13, 5000000, 64)
loadgen(nether gold ore, gold nugget named "&6&lNether gold", 14, 14000000, 76)
loadgen(nether bricks, nether brick named "&c&lNether ingot", 15, 30000000, 83)
loadgen(magma block, magma cream named "&6&lMagma fragment", 16, 80000000, 91)
loadgen(netherite block, netherite ingot named "&8&lNetherite", 17, 160000000, 103)
loadgen(basalt, flint named "&8&lbasalt fragment", 18, 200000000, 113)
loadgen(blackstone, blackstone button named "&8&lBlackstone", 19, 350000000, 124)
loadgen(crying obsidian, ghast tear named "&f&lTear of Obsidian", 20, 500000000, 137)
loadgen(end stone, end rod named "&dEnd rod", 21, 800000000, 144)
loadgen(sea lantern, heart of the sea named "&3Heart of the sea", 21, 1000000000, 190)
loadgen(prismarine, prismarine shard named "&3Prismarine", 22, 4000000000, 800)
loadgen(beacon, nether star named "&f&lNether star", 23, 6000000000, 1200)

on place of coal block or raw copper block or copper block or raw iron block or iron block or raw gold block or gold block or lapis block or redstone block or diamond block or emerald block or obsidian or netherrack or nether gold ore or nether bricks or magma block or netherite block or basalt or blackstone or crying obsidian or end stone or sea lanter or prismarine or beacon:
cancel event

every {@spawntime} seconds:
loop all players:
genData(loop-player)

function genData(p: player):
loop {gendata::gensloc::%uuid of {_p}%::*}:
chunk at loop-value is loaded
add 1 to {_counter}
if {_counter}+0 > 100:
wait 3 ticks
delete {_counter}
dropItems(loop-value-1, {_p})

function dropItems(loc: location, p: player):
loop {-gens::*}:
set {_type} to {-gens::%loop-index%}
set {_block} to block at {_loc}
{_type} = {_block}
set {_drop} to {-gens::%loop-index-1%::drop}
set {_name} to {-gens::%loop-index-1%::dropname}
set {_price} to {-gens::%loop-index-1%::sell}
set name of {_drop} to "%{_name}%"
set lore of {_drop} to "", "&8• &fSell me for &2$&a%format({_price})%", ""

set {_drops} to (1 * (1+{pets::boost::%uuid of {_p}%}))
drop {_drops} of {_drop} 1 meter above {_loc} without velocity

function giveGens(p: player, block: itemtype, amount: integer):
loop {-gens::*}:
set {_type} to {-gens::%loop-index%}
set {_upgrade} to {-gens::%loop-index%::upgrade}
set {_name} to {-gens::%loop-index%::name}
set {_sell} to {-gens::%loop-index%::sell}
{_type} = {_block}
set {_gen} to {_type} named "%{_name}% &8[&fTier %loop-index parsed as a number%&8]" with lore "&8Generator", "", "&8• &fUpgrade: &2$&a%format({_upgrade})%", "&8• &fDrop Sell: &2$&a%format({_sell})%", "" with all flags hidden
give {_p} {_amount} of {_gen}

function upgradeGens(p: player, block: itemtype, loc: location):
loop {-gens::*}:
set {_type} to {-gens::%loop-index%}
{_type} = {_block}
set {_upgrade} to {-gens::%loop-index%::upgrade}
{_upgrade} != 0
set {_next} to {-gens::%loop-index%::next}
if {_p}'s balance < ({_upgrade}):
send action bar "{@prefix} &fYou need &2$&a%format({_upgrade})%!" to {_p}
stop
remove ({_upgrade}) from {_p}'s balance
set block at {_loc} to {_next}
set {_block} to "%{_block}%"
set {_index} to loop-index parsed as an number
send action bar "{@prefix} &fUpgraded Generator!" to {_p}
stop


function placeGens(p: player, block: itemtype):
set {slots::%uuid of {_p}%} to 0 if {slots::%uuid of {_p}%} is not set
set {maxslots::%uuid of {_p}%} to 25 if {maxslots::%uuid of {_p}%} is not set
loop {-gens::*}:
set {_type} to {-gens::%loop-index%}
{_type} = {_block}
{slots::%uuid of {_p}%} < {maxslots::%uuid of {_p}%}
add 1 to {slots::%uuid of {_p}%}
send action bar "{@prefix} &fPlaced Generator &7(&f%{slots::%uuid of {_p}%}%&7/&f%{maxslots::%uuid of {_p}%}%&7)" to {_p}
send title "&aPlaced Gen &7(&f%{slots::%uuid of {_p}%}%&7/&f%{maxslots::%uuid of {_p}%}%&7)" with subtitle "&aShift Right-Click to upgrade, Shift Left-Click to delete" to {_p}

function genCheck(p: player):
loop {gendata::loc::%uuid of {_p}%::*}:
if {gendata::loc::%uuid of {_p}%::%loop-value%} = "air":
remove 1 from {slots::%uuid of {_p}%}
if {slots::%uuid of {_p}%} is less than 0:
set {slots::%uuid of {_p}%} to 0
if {slots::%uuid of {_p}%} is not set:
set {slots::%uuid of {_p}%} to 0

#every 30 seconds:
#loop all players:
#genCheck(loop-player)

on join:
while player is online:
genCheck(player)
wait 1 seconds

on place of {@gens}:
if {_waited} is less than a minute:
message "&cWait, you have a cooldown of{_waited}%"
stop
if name of player's tool contains "GEN":
event-world is "{@genworld}"
set {_tool} to player's tool
if ({slots::%uuid of player%}) >= {maxslots::%uuid of player%} ? 25:
cancel event
stop
placeGens(player, event-block)
set {_block2} to type of event-block
add location of event-block to {gendata::gensloc::%uuid of player%::*}
dropItems(location of event-block, player)
wait 2 ticks
block at location of event-block != {_block2}
loop {-gens::*}:
set {_event} to {-gens::%loop-index%}
{_event} = {_block2}
remove 1 from {slots::%uuid of player%}

on right click on {@gens}:
player is sneaking
{gendata::gensloc::%uuid of player%::*} contains location of event-block
set {_block} to type of event-block
set {_loc} to location of event-block
if {_block} is lit redstone ore:
set {_block} to redstone ore
if uncolored name of player's tool contains "Upgrade Wand 3x3":
set {_loc} to location of event-block
add 1 to x-coord of {_loc}
add 1 to z-coord of {_loc}
set {_pos1} to {_loc}
remove 2 from x-coord of {_loc}
remove 2 from z-coord of {_loc}
loop all blocks within {_pos1} and {_loc}:
loop-block != air
set {_loc} to location of loop-block
set {_block} to type of loop-block
if {_block} is lit redstone ore:
set {_block} to redstone ore
upgradeGens(player, {_block}, {_loc})
else if uncolored name of player's tool contains "Upgrade Wand 5x5":
set {_loc} to location of event-block
add 2 to x-coord of {_loc}
add 2 to z-coord of {_loc}
set {_pos1} to {_loc}
remove 4 from x-coord of {_loc}
remove 4 from z-coord of {_loc}
loop all blocks within {_pos1} and {_loc}:
loop-block != air
set {_loc} to location of loop-block
set {_block} to type of loop-block
if {_block} is lit redstone ore:
set {_block} to redstone ore
upgradeGens(player, {_block}, {_loc})
else if uncolored name of player's tool contains "Upgrade Wand 10x10":
set {_loc} to location of event-block
add 5 to x-coord of {_loc}
add 5 to z-coord of {_loc}
set {_pos1} to {_loc}
remove 10 from x-coord of {_loc}
remove 10 from z-coord of {_loc}
loop all blocks within {_pos1} and {_loc}:
loop-block != air
set {_loc} to location of loop-block
set {_block} to type of loop-block
if {_block} is lit redstone ore:
set {_block} to redstone ore
upgradeGens(player, {_block}, {_loc})
else:
upgradeGens(player, {_block}, {_loc})


on left click on {@gens}:
set {gendata::cooldown::%uuid of player%} to now
set {_block} to "%type of event-block%"
replace all " " in {_block} with "_"
loop {-gens::*}:
set {_type} to {-gens::%loop-index%}
{_type} = type of event-block
replace all "_" in {_block} with " "
if {_block} is "lit redstone ore":
replace all "lit " in {_block} with ""
execute console command "gens give %player% %{_block}% 1"
remove location of event-block from {gendata::gensloc::%uuid of player%::*}
remove 1 from {slots::%uuid of player%}
set event-block to air
send action bar "{@prefix} &fRemoved Generator &7(&f%{slots::%uuid of player%}%&7/&f%{maxslots::%uuid of player%}%&7)" to player

function genList(p: player, page: number = 1):
create a gui with virtual chest inventory with 6 rows named "Gen List (&b%{_page}%&8)":
make gui slot (all integers between 0 and 53) with black stained glass pane named "&7" with all flags hidden
make gui slot (10,11,12,13,14,15,16,19,20,21,22,23,24,25,28,29,30,31,32,33,34,37,38,39,40,41,42,43) with stone button named "&7" with all flags hidden
make gui slot 49 with barrier named "&c&lClick to exit" with all flags hidden:
close inventory of {_p}
set {_slot} to 10
set {_minIndex} to 1+(({_page}-1)*28)
loop {-gens::*}:
add 1 to {_index}
{_index} >= {_minIndex}
set {_item} to {-gens::%loop-index%}
set {_upgrade} to {-gens::%loop-index%::upgrade}
set {_name} to {-gens::%loop-index%::name}
set {_sell} to {-gens::%loop-index%::sell}

make gui slot {_slot} with {_item} named "%{_name}% &8[&fTier %loop-index parsed as a number%&8]" with lore "&8Generator", "", "&8• &fSell: &2$&a%format({_sell})%", "&8• &fUpgrade: &2$&a%format({_upgrade})%", "" with all flags hidden
add 1 to {_slot}
if mod({_slot}+1, 9) = 0:
add 2 to {_slot}
if {_slot} >= 46:
exit loop
set {_amount} to (amount of {-gens::*})+1
set {_amount} to {_amount}/28
set {_amount} to ceil({_amount})
if {_amount} is greater than 1:
make gui slot 50 to arrow named "&aNext Page" with lore "", "&7• &fClick to go to the next page" and "" with all flags hidden:
genList({_p}, ({_page} - 1))
play sound "ui.toast.out" to {_p}
if {_page} = 1:
make gui slot 48 to red dye named "&cNo Pages" with lore "", "&7• &fThere are no more pages" and "" with all flags hidden
make gui slot 50 to arrow named "&aNext Page" with lore "", "&7• &fClick to go to the next page" and "" with all flags hidden:
genList({_p}, ({_page} + 1))
play sound "ui.toast.out" to {_p}
if {_page} is {_amount}:
make gui slot 50 to red dye named "&cNo Pages" with lore "", "&7• &fThere are no more pages" and "" with all flags hidden
make gui slot 48 to arrow named "&fGo Back" with lore "", "&7• &fClick to go to the next page" and "" with all flags hidden:
genList({_p}, ({_page} - 1))
play sound "ui.toast.out" to {_p}
open last gui to {_p}

command /genlist:
trigger:
genList(player)

command /gens [<text>] [<player>] [<itemtype>] [<integer>]:
permission: op
trigger:
if arg-1 is "give":
giveGens(arg-2, arg-3, arg-4)
if arg-1 is "reset":
loop {-gens::*}:
delete {-gens::%loop-index%::%uuid of arg-2%::*}

set {slots::%uuid of arg-2%} to 0
set {maxslots::%uuid of arg-2%} to 25
if arg-1 is "addslots":
add arg-4 to {maxslots::%uuid of arg-2%}
send "{@prefix} &fAdded %arg-4% to %arg-2%'s Gen Slots" to player
if arg-1 is "givewand3":
give arg-2 arg-4 of stick named "&b&lUpgrade Wand &7&o3x3" with lore "&8Tool", "", " &e&l| &fUpgrade gens in a 3x3 Area!"
if arg-1 is "givewand5":
give arg-2 arg-4 of stick named "&b&lUpgrade Wand &7&o5x5" with lore "&8Tool", "", " &e&l| &fUpgrade gens in a 5x5 Area!"
if arg-1 is "givewand10":
give arg-2 arg-4 of stick named "&b&lUpgrade Wand &7&o10x10" with lore "&8Tool", "", " &e&l| &fUpgrade gens in a 10x10 Area!"

on break of {@gens}:
if {gendata::gensloc::%uuid of player%::*} contains location of event-block:
cancel event

on break of {@gens}:
if {gendata::gensloc::%uuid of player%::*} != location of event-block:
cancel event

on place of {@gens}:
if off hand item of player does not contain air:
cancel event
stop

on craft of {@gens}:
cancel event

on block interact:
if {gendata::gensloc::%uuid of player%::*} contains location of event-block:
cancel event
 
Here is my Gen Skript supper easy to work! @2xiaoben

Code:
options:
    world: gens # What world generators will be used in
    prefix: &b&lGENS &8• &3
    Delay: 5 seconds #How many seconds you would like the drops to take to spawn
    c: &3
    c1: &b
    primary: &b


on tab complete of "/gens" or "/gen":
    set tab completions for position 1 to "create", "set", "give", "reset", "edit" and "help"
    if tab arg-1 = "give":
        set tab completions for position 3 to uncolored {genlist::*}
    else if tab arg-1 = "set":
        set tab completions for position 3 to "cap", and "count"
function gensHelp(p: player):
    message "&8&m                                                      {@primary}" to {_p}
    message "" to {_p}
    message "{@c1}&lGenerator Help" to {_p}
    message "{@primary}&oMade By: GalaxyBrady" to {_p}
    message "" to {_p}
    message "&8&l▶ {@c1}Admin Commands" to {_p}
    message "{@c1}&l| {@c}/gens give <player> <Generator Name> <amount> &8- {@primary}Used To give you or another player a generator" to {_p}
    message "{@c1}&l| {@c}/gens reset <player> &8- {@primary}deletes all of the players generators and resets their gen count" to {_p}
    message "{@c1}&l| {@c}/gens set <player> <count or cap> <amount> &8- {@primary}used to set a players max generators or amount placed!" to {_p}
    message "{@c1}&l| {@c}/gens help &8- {@primary}Opens this message" to {_p}
    message "{@c1}&l| {@c}/gens create &8- {@primary}Used to create generators" to {_p}
    message "{@c1}&l| {@c}/gens Edit &8- {@primary}Edit All the generators created" to {_p}
    message "&8&m " to {_p}
Function CreateGenerator(GenName: text, Block: item, Drop: item type, tier: integer, dropname: text, upgradePrice: integer, dropsellprice: integer):
    if {gen.%{_gentempname}%::block} or {gen.%{_gentempname}%::drop} or {gen.%{_gentempname}%::upgradePrice} or {gen.%{_gentempname}%::dropsellprice} or {gen.%{_gentempname}%::tier} or {gen.%{_gentempname}%::dropname} or {gen.%{_gentempname}%::genname} is not set:   
        set {_gentempname} to ReplaceNames({_GenName})
        set {gen.%{_gentempname}%::block} to {_Block}
        set {gen.%{_gentempname}%::drop} to {_Drop}
        set {gen.%{_gentempname}%::upgradePrice} to {_upgradePrice}
        set {gen.%{_gentempname}%::dropsellprice} to {_dropsellprice}
        set {gen.%{_gentempname}%::tier} to uncolored {_tier}
        set {gen.%{_gentempname}%::dropname} to colored {_dropname}
        set {gen.%{_gentempname}%::genname} to colored {_Genname}
        add 1 to {gens.amount}
        set {genlist::%{_tier}%} to {_gentempname}
function ReplaceNames(i: text) :: text:
    replace all " " in {_i} with "_"
    return uncolored {_i}

On join:
    if {gencount::%Player's uuid%} is not set:
        set {gencount::%Player's uuid%} to 0
        set {gencap::%Player's uuid%} to 25       
function GeneratorEdit(p: player):
    create a gui with virtual chest inventory with 6 rows named "&b&lGenerator Editer":
        make gui integers between 0 and 100 with black stained glass panes named " "
        set {_s} to 10
        set {_s1} to 1
        loop {gens.amount} times:
            make gui {_s} with {gen.%{genlist::%{_s1}%}%::block} named "%colored {gen.%{genlist::%{_s1}%}%::genname}% &7[Tier %{_s1}%]" with lore " ", "<##08E1F4>&lINFO", "<##08E1F4>Cost: &f$%{gen.%{genlist::%{_s1}%}%::dropsellprice}%", "<##08E1F4>Upgrade: &f$%{gen.%{genlist::%{_s1}%}%::upgradePrice}%", "", "&7Right Click to Delete Generator", "&7Left Click to Edit Generator":
                set {_tier} to Gettier({gen.%{genlist::%{_s1}%}%::block})
                if "%click type%" contains "right":
                    close {_p}'s inventory
                    send title "{@c}&lGenerator Delete" with subtitle "{@c1}You have deleted a Generator!" to {_p} for 1.5 seconds
                    delete {gen.%{genlist::%{_tier}%}%::block}
                    delete {gen.%{genlist::%{_tier}%}%::drop}
                    delete {gen.%{genlist::%{_tier}%}%::upgradePrice}
                    delete {gen.%{genlist::%{_tier}%}%::dropsellprice}
                    delete {gen.%{genlist::%{_tier}%}%::tier}
                    delete {gen.%{genlist::%{_tier}%}%::dropname}
                    delete {gen.%{genlist::%{_tier}%}%::genname}
                    remove 1 from {gens.amount}
                    delete {genlist::%{_tier}%}
                if "%click type%" contains "left":
                    close {_p}'s inventory
                    send title "{@c}&lGenerator Edit" with subtitle "{@c1}Edit the generator in the gui!" to {_p} for 1.5 seconds
                    wait 2 seconds
                    GenCreateGUI({_p}, {gen.%{genlist::%{_s1}%}%::drop}, {gen.%{genlist::%{_s1}%}%::block}, {gen.%{genlist::%{_s1}%}%::dropname}, {gen.%{genlist::%{_s1}%}%::genname}, {_tier}, {gen.%{genlist::%{_s1}%}%::upgradePrice}, {gen.%{genlist::%{_s1}%}%::dropsellprice})
            add 1 to {_s}
            add 1 to {_s1}
            if {_s} = 17 or 26 or 35 or 44:
                add 2 to {_s}
    open last gui for {_p}
Command /Gens [<text>] [<player>] [<text>] [<integer>]:
    permission: Gen.admin
    permission message: &fYou don't have the required permission to use this command.
    trigger:
        if arg-1 = "give":
            if {genlist::*} contains arg-3:
                if arg-4 is not set:
                    GiveGenerator(player, {gen.%arg-3%::genname}, {gen.%arg-3%::block}, {gen.%arg-3%::dropname}, {gen.%arg-3%::drop}, Gettier({gen.%arg-3%::block}), 1, {gen.%arg-3%::dropsellprice}, {gen.%arg-3%::upgradePrice})
                if arg-4 is set:
                    GiveGenerator(player, {gen.%arg-3%::genname}, {gen.%arg-3%::block}, {gen.%arg-3%::dropname}, {gen.%arg-3%::drop}, Gettier({gen.%arg-3%::block}), arg-4, {gen.%arg-3%::dropsellprice}, {gen.%arg-3%::upgradePrice})
            else:
                send "{@prefix} Please enter a valid generator!"
        if arg-1 = "edit":
            GeneratorEdit(player)
        if arg-1 = "create":
            set {_d} to {gens.amount}
            add 1 to {_d}
            GenCreateGUI(player, Barrier, Barrier, "&cNot Set", "&cNot Set", {_d}, 0, 0)
        if arg-1 = "reset":
            if arg-2 is set:
                arg-3 is not set:
                    if arg-4 is not set:
                        loop {gens.location::%arg-2's uuid%::*}:
                            set block at loop-value to air
                            delete {genowner::%loop-value%}
                        send "{@prefix} You have reset %arg-2%'s Gens" to player
                        delete {gens.location::%arg-2's uuid%::*}
                        set {gencount::%Player's uuid%} to 0
                        send "{@prefix} Your gens have been reset by a staff member!" to arg-2
        if arg-1 = "set":
            if arg-2 is set:
                if arg-3 is "cap":
                    if arg-4 is set:
                        set {gencap::%arg-2's uuid%} to arg-4
                        send "{@prefix} You have set %arg-2%'s generator cap to %arg-4%" to player
                if arg-3 is "count":
                    if arg-4 is set:
                        set {gencount::%arg-2's uuid%} to arg-4
                        send "{@prefix} You have set %arg-2%'s generator count to %arg-4%" to player
        if arg-1 is not "give" or "reset" or "set" or "create" or "edit":
            gensHelp(player)
function Genlist(P: player, page: integer):
    create a gui with virtual chest inventory with 6 rows named "&b&lGenlist | Page %{_page}%":
        make gui integers between 0 and 100 with black stained glass panes named " "
        make gui 53 with arrow named "&aNext Page":
            add 1 to {_page}
            Genlist({_P}, ({_page}))
        make gui 45 with arrow named "&cBack":
            if {_page} > 1:
                remove 1 from {_page}
                Genlist({_P}, ({_page}))
            else:
                send "{@prefix} You cannot go back further!" to {_p}
        set {_s} to 10
        if {_page} = 1:
            set {_s1} to 1
        else if {_page} > 1:
            set {_s1} to 28*{_page}-28
        loop {gens.amount} times:
            if {_s1} = 29*{_page}:
                stop loop
            else:
                make gui {_s} with {gen.%{genlist::%{_s1}%}%::block} named "%colored {gen.%{genlist::%{_s1}%}%::genname}% &7[Tier %{_s1}%]" with lore " ", "<##08E1F4>&lINFO", "<##08E1F4>Cost: &f$%format({gen.%{genlist::%{_s1}%}%::dropsellprice})%", "<##08E1F4>Upgrade: &f$%format({gen.%{genlist::%{_s1}%}%::upgradePrice})%"
                add 1 to {_s}
                add 1 to {_s1}
                if {_s} = 17 or 26 or 35 or 44:
                    add 2 to {_s}
    open last gui for {_p}       
Command /genlist:
    trigger:
        Genlist(player, 1)
On place:
    if name of tool contains "generator":
        set {_d} to Gettier(event-block)
        if {gen.%{genlist::%{_d}%}%::block} = event-block:
            if event-world = "{@world}":
                if event is not canceled:
                    if {gencount::%player's uuid%} < {gencap::%player's uuid%}:
                        add 1 to {gencount::%Player's uuid%}
                        add location of event-block to {gens.location::%player's uuid%::*}
                        set {genowner::%event-block%} to player
                        send "{@prefix} You have placed a generator %{gencount::%player's uuid%}%/%{gencap::%player's uuid%}%"
                    else:
                        cancel event
                        send "{@prefix} You already reached the max generators %{gencount::%player's uuid%}%/%{gencap::%player's uuid%}%"
                else:
                    cancel event
                    send "{@prefix} You can only place generators at your plot!" to player
function Gettier(e: item) :: integer:
    set {_s} to 1
    loop {gens.amount} times:
        if {gen.%{genlist::%{_s}%}%::block} = {_e}:
            return {_s}
            stop loop
        else:
            add 1 to {_s}
On left click:
    set {_d} to Gettier(event-block)
    if {gen.%{genlist::%{_d}%}%::block} = event-block:
        if {genowner::%event-block%} is set:
            if {gens.location::%Player's uuid%::*} contains location of event-block:
                GiveGenerator(player, {gen.%{genlist::%{_d}%}%::genname}, {gen.%{genlist::%{_d}%}%::block}, {gen.%{genlist::%{_d}%}%::dropname}, {gen.%{genlist::%{_d}%}%::drop}, {_d}, 1, {gen.%{genlist::%{_d}%}%::dropsellprice}, {gen.%{genlist::%{_d}%}%::upgradePrice})
                remove location of event-block from {gens.location::%player's uuid%::*}
                set event-block to air
                remove 1 from {gencount::%Player's uuid%}
                send "{@prefix} You have removed a generator %{gencount::%player's uuid%}%/%{gencap::%player's uuid%}%"
            else:
                send "{@prefix} &cThat is not your generator!" to player
On break:
    set {_d} to Gettier(event-block)
    if {gen.%{genlist::%{_d}%}%::block} = event-block:
        if {genowner::%event-block%} is set:
            cancel event
        
function GetMultiplier(i: item) :: integer:
    set {_id::*} to uncolored line 2 of lore of {_i}
    replace all "Multiplier:" and "x" and " " in {_id::*} with ""
    return "%{_id::*}%" parsed as an integer
    
On right click:
    if player is sneaking:
        set {_tier} to Gettier(event-block)
        if {genowner::%event-block%} is set:
            if {gen.%{genlist::%{_tier}%}%::block} = event-block:
                if {gens.location::%player's uuid%::*} contains location of event-block:
                    if {_tier} < {gens.amount}:
                        if player's balance >= {gen.%{genlist::%{_tier}%}%::upgradePrice}:
                            set event-block to {gen.%{genlist::%({_tier}+1)%}%::block}
                        else:
                            send "{@prefix} You cant afford that!" to player
                    else:
                        send "{@prefix} That is the MAX Generator!"
Command /sell:
    trigger:
        sell(player)
function sell(P: player):
    set {_s} to 1
    loop {gens.amount} times:
        if {_p}'s inventory contains {gen.%{genlist::%{_s}%}%::drop}:
            add number of {gen.%{genlist::%{_s}%}%::drop} in {_p}'s inventory*{gen.%{genlist::%{_s}%}%::dropsellprice} to {_total}
            add number of {gen.%{genlist::%{_s}%}%::drop} in {_p}'s inventory to {_numberItems}
            remove all {gen.%{genlist::%{_s}%}%::drop} from {_p}'s inventory
        if {_s} = {gens.amount}:
            add {_total}*{pmulti::%{_p}'s uuid%} to {_p}'s balance
            send "&8------------------------" to {_p}
            send " " to {_p}
            send "&b&lSELL" to {_p}
            send "&aSell Total: $%regex({_total} ? 0)%" to {_p}
            send "&bNumber Of Sold Items: %{_numberItems} ? 0%" to {_p}
            send " " to {_p}
            send "&8------------------------" to {_p}
        add 1 to {_s}
function regex(n: object) :: text:
    if "%{_n}%" contains ".":
        set {_s::*} to split "%{_n}%" at "."
        set {_n} to "%a({_s::1})%.%last 2 characters of {_s::2}%"
        return "%{_n}%"
    else:
        set {_n} to a("%{_n}%")
        return "%{_n} ? 0%"
function a(b: text) :: text:
    if length of {_b} > 3:
        return "%a(first length of {_b} - 3 characters of {_b})%,%last 3 characters of {_b}%"
    return {_b}
    
function GiveSellwand(p: player, multi: integer):
    set {_i} to blaze rod named "<##fbe410>&lS<##fbd115>&le<##fcbf19>&ll<##fcac1e>&ll<##fc9a23>&lw<##fc8728>&la<##fd752c>&ln<##fd6231>&ld" with lore "", "<##fbe410>&lM<##fbd614>&lu<##fbc717>&ll<##fcb91b>&lt<##fcaa1f>&li<##fc9c22>&lp<##fc8d26>&ll<##fd7f2a>&li<##fd702d>&le<##fd6231>&lr: &f%{_multi}%x", "<##fbe410>&lO<##fbca17>&lw<##fcb01d>&ln<##fc9624>&le<##fd7c2a>&lr<##fd6231>&l: &f%{_p}%", " "
    give {_p} 1 of {_i}
Command /sellwand <player> <integer=1>:
    permission: Gens.admin
    trigger:
        GiveSellwand(arg-1, arg-2)
function sellwand(p: player, block: block):
    set {_s} to 1
    loop {gens.amount} times:
        if {_block}'s inventory contains {gen.%{genlist::%{_s}%}%::drop}:
            add number of {gen.%{genlist::%{_s}%}%::drop} in {_block}'s inventory*{gen.%{genlist::%{_s}%}%::dropsellprice} to {_total}
            add number of {gen.%{genlist::%{_s}%}%::drop} in {_block}'s inventory to {_numberItems}
            remove all {gen.%{genlist::%{_s}%}%::drop} from {_block}'s inventory
        if {_s} = {gens.amount}:
            set {_t} to GetMultiplier({_p}'s tool)
            add {_total}*{_t}*{pmulti::%{_p}'s uuid%} to {_p}'s balance
            set {_total} to {_total}*{_t}
            send "&8------------------------" to {_p}
            send " " to {_p}
            send "&b&lSELL" to {_p}
            send "&aSell Total: $%regex({_total} ? 0)%" to {_p}
            send "&bNumber Of Sold Items: %regex({_numberItems} ? 0)%" to {_p}
            send " " to {_p}
            send "&8------------------------" to {_p}
        add 1 to {_s}
On right click on chest:
    if player is not sneaking:
        if players' tool = blaze rod:
            cancel event
            sellwand(player, event-block)
function NumberGUI(P: player, t: integer) :: integer:
    if {_t} = 0:
        delete {_t}
    set {_tier} to {_t}
    create a gui with virtual chest inventory with 6 rows named "&a&lNumber GUI | Number %{_t} ? 0%":
        make gui integers between 0 and 60 with black stained glass pane named " "
        make gui 10 with Emerald block named "&b1":
            if {_tier} is not set:
                set {_tier} to 1
            else:
                set {_tier} to "%{_tier}%1" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 34 with emerald named "&aDone":
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {currentblock.change::%{_p}'s uuid%}, {currentdropname.change::%{_p}'s uuid%}, {currentgenname.change::%{_p}'s uuid%}, {_tier}, {currentupgradeprice.change::%{_p}'s uuid%}, {currentdropsellprice.change::%{_p}'s uuid%})
        make gui 11 with Emerald block named "&b2":
            if {_tier} is not set:
                set {_tier} to 2
            else:
                set {_tier} to "%{_tier}%2" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 12 with Emerald block named "&b3":
            if {_tier} is not set:
                set {_tier} to 3
            else:
                set {_tier} to "%{_tier}%3" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 19 with Emerald block named "&b4":
            if {_tier} is not set:
                set {_tier} to 4
            else:
                set {_tier} to "%{_tier}%4" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 20 with Emerald block named "&b5":
            if {_tier} is not set:
                set {_tier} to 5
            else:
                set {_tier} to "%{_tier}%5" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 21 with Emerald block named "&b6":
            if {_tier} is not set:
                set {_tier} to 6
            else:
                set {_tier} to "%{_tier}%6" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 28 with Emerald block named "&b7":
            if {_tier} is not set:
                set {_tier} to 7
            else:
                set {_tier} to "%{_tier}%7" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 29 with Emerald block named "&b8":
            if {_tier} is not set:
                set {_tier} to 8
            else:
                set {_tier} to "%{_tier}%8" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 30 with Emerald block named "&b9":
            if {_tier} is not set:
                set {_tier} to 9
            else:
                set {_tier} to "%{_tier}%9" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 38 with Emerald block named "&b0":
            
            if {_tier} is not set:
                set {_tier} to 0
            else:
                set {_tier} to "%{_tier}%0" parsed as an integer
                wait 5 ticks
            NumberGUI({_p}, {_tier})
            play sound "entity.experience_orb.pickup" at {_p}
        make gui 25 with Paper named "&bNumber Digit" with lore "&b%{_tier} ? 0%"
        make gui 39 with arrow named "&cClear":
            delete {_tier}
            NumberGUI({_P}, 0)
            play sound "block.anvil.land" at {_p}
    open last gui for {_p}
function format(n: number) :: text:
    set {_data} to "NGTN,90|OTGN,87|STGN,84|HNGT,81|QTGTN,78|QTGT,75|TGT,72|DGT,69|UG,66|V,63|NVD,60|OD,57|SPT,54|HD,51|QTD,48|QTW,45|TD,42|DD,39|UD,36|D,33|N,30|OCT,27|SP,24|HT,21|QT,18|Q,15|T,12|B,9|M,6|K,3"
    loop split {_data} at "|":
        set {_s::*} to split loop-value at ","
        {_n} >= 10 ^ {_s::2} parsed as number
        return "%{_n} / 10 ^ {_s::2} parsed as number%%{_s::1}%"
    return "%{_n}%"
every 5 seconds:
    loop all players:
        loop {gens.location::%loop-player's uuid%::*}:
            set {_blocktier} to block at loop-value-2
            set {_tier} to Gettier({_blocktier})
            set {_i} to 1 of {gen.%{genlist::%{_tier}%}%::drop} named "%colored {gen.%{genlist::%{_tier}%}%::dropname}%"
            drop {_i} at location 0.5 meter above loop-value-2 without velocity
function GenCreateGUI(P: player, Drop: item type, block: item type, DropName: text, generatorName: text, tier: integer, upgradePrice: integer, dropsellprice: integer):
    create a gui with virtual chest inventory with 6 rows named "&b&lGenerator Creater":
        make gui integers between 0 and 100 with black stained glass pane named " "
        make gui 13 with {_block} named "<##94F408>Block Type" with lore " ",  "&7Current Block Type: &a%{_block}%", "&7Left Click to edit Block type", "&7Or Drag and Drop an item":
            if {_p}'s cursor slot = air:
                if "%click type%" contains "left":
                    set {Gen.Block::change.%{_p}%} to true
                    close {_p}'s inventory
                    set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                    set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                    set {currentdropname.change::%{_p}'s uuid%} to {_DropName}
                    set {currenttier.change::%{_p}'s uuid%} to {_tier}
                    set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                    set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                    send "<##94F408>Type in Chat what block you would like your generator to be)" to {_p}
            else:
                GenCreateGUI({_p}, {_Drop}, ("%{_p}'s cursor slot%" parsed as an item type), {_DropName}, {_generatorName}, {_tier}, {_upgradePrice}, {_dropsellprice})
        make gui 10 with Name tag named "<##94F408>Generator Name" with lore " ", "&7Current Name: %{_generatorName}%", "&7Left Click to edit Generator Name":
            if "%click type%" contains "left":
                set {Gen.Name::Change.%{_p}%} to true
                close {_p}'s inventory
                set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                set {currentblock.change::%{_p}'s uuid%} to {_block}
                set {currentdropname.change::%{_p}'s uuid%} to {_DropName}
                set {currenttier.change::%{_p}'s uuid%} to {_tier}
                set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}   
                send "<##94F408>Type in Chat what you would like your generator to be named (Include ColorCodes)" to {_p}
        make gui 31 with {_drop} named "<##086BF4>Drop Type" with lore " ",  "&7Current Drop Type: &a%{_Drop}%", "&7Left Click to edit Drop type", "&7Or Drag and Drop an item":
            if {_p}'s cursor slot = air:
                if "%click type%" contains "left":
                    set {Gen.Drop::Change.%{_p}%} to true
                    close {_p}'s inventory
                    set {currentdropname.change::%{_p}'s uuid%} to {_dropname}
                    set {currentblock.change::%{_p}'s uuid%} to {_block}
                    set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                    set {currenttier.change::%{_p}'s uuid%} to {_tier}
                    set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                    set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                    send "<##94F408>Type in Chat what you would like your generator to drop" to {_p}
            else:
                GenCreateGUI({_p}, ("%{_p}'s cursor slot%" parsed as an item type), {_block}, {_DropName}, {_generatorName}, {_tier}, {_upgradePrice}, {_dropsellprice})
        make gui 28 with Name tag named "<##086BF4>Drop Name" with lore " ", "&7Current Name: &r%{_DropName}%", "&7Left Click to edit Drop Name":
            if "%click type%" contains "left":
                set {Gen.DropName::Change.%{_p}%} to true
                close {_p}'s inventory
                set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                set {currentblock.change::%{_p}'s uuid%} to {_block}
                set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                set {currenttier.change::%{_p}'s uuid%} to {_tier}
                set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                send "<##94F408>Type in Chat what you would like your generator drop to be named (Include ColorCodes)" to {_p}
        make gui 19 with Emerald named "<##08F423>Tier" with lore " ", "&7Current Tier: %{_tier}%", "&7Left click to edit Tier":
            if "%click type%" contains "left":
                close {_p}'s inventory
                set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                set {currentblock.change::%{_p}'s uuid%} to {_block}
                set {currentdropname.change::%{_p}'s uuid%} to {_DropName}
                set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                close {_p}'s inventory
                wait 5 ticks
                play sound "entity.experience_orb.pickup" at {_p}
                NumberGUI({_p}, {_tier})
        make gui 53 with Chest named "&aCreate Generator":
            GiveGenerator({_p}, {_generatorName}, {_Block}, {_dropname}, {_drop}, {_tier}, 1, {_dropsellprice}, {_upgradePrice})
            CreateGenerator({_generatorName}, {_Block}, {_drop}, {_tier}, {_dropname}, {_upgradePrice}, {_dropsellprice})
            close {_p}'s inventory
            send action bar "&aYou have created a generator!" to {_p}
        make gui 37 with gold ingot named "<##F39201>Upgrade Price" with lore " ", "&7Current Upgrade Price: &a%{_upgradePrice}%", "&7Left Click to edit Upgrade Price":
            if "%click type%" contains "left":
                set {Gen.upgrade::Change.%{_p}%} to true
                close {_p}'s inventory
                set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                set {currentblock.change::%{_p}'s uuid%} to {_block}
                set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                set {currenttier.change::%{_p}'s uuid%} to {_tier}
                set {currentdropname.change::%{_p}'s uuid%} to {_DropName}
                set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                send "<##94F408>Type in Chat what you would like your generator upgrade price to be" to {_p}
        make gui 40 with iron ingot named "<##F39201>Drop Sell Price" with lore " ", "&7Current Upgrade Price: &a%{_dropsellprice}%", "&7Left Click to edit Drop Sell Price":
            if "%click type%" contains "left":
                set {Gen.Dropsell::Change.%{_p}%} to true
                close {_p}'s inventory
                set {currentdrop.change::%{_p}'s uuid%} to {_drop}
                set {currentblock.change::%{_p}'s uuid%} to {_block}
                set {currentgenname.change::%{_p}'s uuid%} to {_generatorName}
                set {currenttier.change::%{_p}'s uuid%} to {_tier}
                set {currentupgradeprice.change::%{_p}'s uuid%} to {_upgradePrice}
                set {currentdropsellprice.change::%{_p}'s uuid%} to {_dropsellprice}
                set {currentdropname.change::%{_p}'s uuid%} to {_DropName}
                send "<##94F408>Type in Chat what you would like your generator drop sell price to be" to {_p}
    open last gui for {_p}
function GiveGenerator(p: player, genname: text, block: item type, dropname: text, drop: item type, tier: integer, amount: integer, dropprice: integer, upgradePrice: integer):
    give {_p} {_amount} of {_block} named "%colored {_genname}% &7[Tier %{_tier}%]" with lore " ", "<##08E1F4>&lINFO", "<##08E1F4>Cost: &f$%format({_dropprice})%", "<##08E1F4>Upgrade: &f$%format({_upgradePrice})%"
On chat:
    set {_p} to player
    if {Gen.name::change.%player%} = true:
        cancel event
        set {_i} to colored message
        if {_i} is set:
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {currentblock.change::%{_p}'s uuid%}, {currentdropname.change::%{_p}'s uuid%}, "%{_i}%", {currenttier.change::%{_p}'s uuid%}, {currentupgradeprice.change::%{_p}'s uuid%}, {currentdropsellprice.change::%{_p}'s uuid%})
        set {gen.name::change.%player%} to false
    if {Gen.Block::Change.%player%} = true:
        cancel event
        set {_i} to message parsed as an item type
        if {_i} is set:
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {_i}, {currentdropname.change::%{_p}'s uuid%}, {currentgenname.change::%{_p}'s uuid%}, {currenttier.change::%{_p}'s uuid%}, {currentupgradeprice.change::%{_p}'s uuid%}, {currentdropsellprice.change::%{_p}'s uuid%})
        else:
            send "&cPlease Enter a Valid Block!" to player
        set {gen.Block::Change.%Player%} to false
    if {Gen.DropName::Change.%{_p}%} = true:
        cancel event
        set {_i} to colored message
        if {_i} is set:
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {currentblock.change::%{_p}'s uuid%}, "%{_i}%", {currentgenname.change::%{_p}'s uuid%}, {currenttier.change::%{_p}'s uuid%}, {currentupgradeprice.change::%{_p}'s uuid%}, {currentdropsellprice.change::%{_p}'s uuid%})
        set {Gen.DropName::Change.%{_p}%} to false
    if {Gen.drop::Change.%player%} = true:
        cancel event
        set {_i} to message parsed as an item type
        if {_i} is set:
            GenCreateGUI(player, {_i}, {currentblock.change::%{_p}'s uuid%}, {currentdropname.change::%{_p}'s uuid%}, {currentgenname.change::%{_p}'s uuid%}, {currenttier.change::%{_p}'s uuid%}, {currentupgradeprice.change::%{_p}'s uuid%}, {currentdropsellprice.change::%{_p}'s uuid%})
        else:
            send "&cPlease Enter a Valid item!" to player
        set {gen.drop::Change.%Player%} to false
    if {Gen.upgrade::Change.%{_p}%} = true:
        cancel event
        set {_i} to message parsed as an integer
        if {_i} is set:
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {currentblock.change::%{_p}'s uuid%}, {currentdropname.change::%{_p}'s uuid%}, {currentgenname.change::%{_p}'s uuid%}, {currenttier.change::%{_p}'s uuid%}, {_i}, {currentdropsellprice.change::%{_p}'s uuid%})
        else:
            send "&cPlease Enter a Valid Number!" to player
        set {gen.upgrade::Change.%Player%} to false
    if {Gen.Dropsell::Change.%{_p}%} = true:
        cancel event
        set {_i} to message parsed as an integer
        if {_i} is set:
            GenCreateGUI(player, {currentdrop.change::%{_p}'s uuid%}, {currentblock.change::%{_p}'s uuid%}, {currentdropname.change::%{_p}'s uuid%}, {currentgenname.change::%{_p}'s uuid%}, {currenttier.change::%{_p}'s uuid%}, {currentupgradeprice.change::%{_p}'s uuid%}, {_i})
        else:
            send "&cPlease Enter a Valid Number!" to player
        set {gen.Dropsell::Change.%Player%} to false           
            
Command /tokens [<text>] [<player>] [<integer>]:
    permission: Tokens.Admin
    trigger:
        if arg-1 = "set":
            if arg-2 is set:
                if arg-3 is set:
                    Set {tokens::%arg-2's uuid%} to arg-3
                    send "{@prefix} You have set %arg-2%'s Tokens to %arg-3%" to player
        if arg-1 = "add":
            if arg-2 is set:
                if arg-3 is set:
                    add arg-3 to {tokens::%arg-2's uuid%}
                    send "{@prefix} You have added %arg-3% Tokens to %arg-2%" to player
        if arg-1 = "remove":
            if arg-2 is set:
                if arg-3 is set:
                    remove arg-3 from {tokens::%arg-2's uuid%}
                    send "{@prefix} You have removed %arg-3% tokens from %arg-2%" to player