npcconfig.sk

Created by iCodeDreams

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.

options:
    Noperms: &cYou do not have permission to that command!




#===============================================================================#
import:
    java.util.Arrays
    org.bukkit.event.server.TabCompleteEvent
#===============================================================================#
effect set completions to %strings% at %string%:
    trigger:
        if expression-2 is "":
            event.setCompletions(Arrays.asList(expressions-1))
        else:
            set {_completions::*} to expressions-1
            loop expression-2.length() times:
                loop {_completions::*}:
                    if {_completions::%loop-index%}.substring(loop-number - 1, and loop-number) isn't expression-2.substring(loop-number - 1, and loop-number):
                        clear {_completions::%loop-index%} 
            event.setCompletions(Arrays.asList({_completions::*}))
#===============================================================================#
expression tabbed command:
    get:
        set {_text} to first element out of split event.getBuffer() at " "
        return "/%{_text}%" if event.getSender() is CONSOLE else {_text}
#===============================================================================#
expression tab arg[ument]( |-)%*number%:
    get:
        set {_l::*} to split event.getBuffer() at " "
        clear {_l::1}
        set {_l::*} to {_l::*}
        return {_l::%expr 1%}
#===============================================================================#
expression buffer:
    get:
        return event.getBuffer()
#===============================================================================#
on TabCompleteEvent:
    if tabbed command is "/npcsk":
        if tab arg 2 isn't set:
            set completions to "reload" or "info" at tab arg 1

on join:
    set {%player%.npc-use} to now

on right click:
    if event-entity is a citizen:
        set {_t} to name of event-entity
        replace all "ยง" with "&" in {_t}
        NPCFile({_t}, player)
        if player is sneaking:
            if {debug.mode.npc} is true:
                set {NPC::Debug-Alert::*} to {NPC::Debug-Alert} split at "[NPC NAME]"
                send "%{NPC::Debug-Alert::1}%&e%{_t}%%{NPC::Debug-Alert::2}%" to player
                if file "plugins/iCodeDevelopment/NPCS/NPC-Data/%{_t}%.json" is missing:
                    send "&cNPC File not Found!" to player
                    stop
                else:
                    send "&aNPC File Found!" to player
                    set {_contents::*} to file contents of "plugins/iCodeDevelopment/NPCS/NPC-Data/%{_t}%.json"
                    set {_content} to concat {_contents::*} with nl
                    send {_content} to player

function NPCFile(file: text, p: player):
    if file "plugins/iCodeDevelopment/NPCS/NPC-Data/%{_file}%.json" is missing:
        stop
    else:
        if difference between now and {%{_p}%.npc-use} is greater than or equal to 5 seconds:
            
            set {%{_p}%.npc-use} to now

            set {_contents::*} to file contents of "plugins/iCodeDevelopment/NPCS/NPC-Data/%{_file}%.json"
            set {_content} to concat {_contents::*} with nl
            set {_input} to {_content}
            copy json {_input} to {_output::*}
            set {_name} to {_output::Name}
            
            set {_chatcolor} to colored {_output::ChatColor}
            set {_messages::*} to {_output::Messages::*}
            if {_messages::*} is not "":
                loop {_messages::*}:
                    set {_msg} to loop-value
                    replace all "[PLAYER]" with "%{_p}%" in {_msg}
                    set {_message} to {NPC::Message Format}
                    replace all "[CHAT COLOR]" with {_chatcolor} in {_message}
                    replace all "[NPC NAME]" with {_name} in {_message}
                    replace all "[MESSAGE]" with {_msg} in {_message}
                    add {_message} to {_messages-npc::*}
            set {_commands::*} to {_output::Commands::*}
            if {_messages::*} is not "":
                loop {_messages-npc::*}:
                    send formatted loop-value to {_p}
                    wait {NPC::Message Delay}
            if {_commands::*} is not "":
                loop {_commands::*}:
                    set {_cmd} to loop-value
                    replace all "[PLAYER]" with "%{_p}%" in {_cmd}
                    make {_p} run command "%{_cmd}%" as op
        else:
            set {_time} to 5 seconds
            set {_dif} to difference between now and {%{_p}%.npc-use}
            remove {_dif} from {_time}
            send "&7You must wait &e%{_time}% &7before performing that action!" to {_p}





command npcsk [<text>] [<text>]:
    usage: /npcsk [Reload / Info]
    permission: command.npcsk
    permission message: {@Noperms}
    executable by: players and console
    trigger:
        if arg-1 is set:
            if player has permission "command.npcsk":
                if arg-1 is "Reload":
                    if file "plugins/iCodeDevelopment" is missing:
                        create directory "plugins/iCodeDevelopment/"
                    if file "plugins/iCodeDevelopment/NPCS" is missing:
                        create directory "plugins/iCodeDevelopment/NPCS"
                    if file "plugins/iCodeDevelopment/NPCS/NPC-Data" is missing:
                        create directory "plugins/iCodeDevelopment/NPCS/NPC-Data"
                    if {ServerID} is not set:
                        set {ServerID} to random 20 char string from charset `a-zA-Z0-9`

                    if file "plugins/iCodeDevelopment/NPCS/config.json" is missing:
                        download file from "https://raw.githubusercontent.com/iCodeDreamsMC/NPCS/master/config.json" to file "plugins/iCodeDevelopment/NPCS/config.json"
                    wait 2 ticks
                    set line 3 in file "plugins/iCodeDevelopment/NPCS/config.json" to "    ""Version"": ""1.0"","
                    set line 4 in file "plugins/iCodeDevelopment/NPCS/config.json" to "    ""ServerID"": ""%{ServerID}%"","

                

                    set {_contents::*} to file contents of "plugins/iCodeDevelopment/NPCS/config.json"
                    set {_content} to concat {_contents::*} with nl
                    set {_input} to {_content}
                    copy json {_input} to {_output::*}
                    set {NPC::Prefix} to colored {_output::Prefix} 
                    set {NPC::Version} to {_output::Version}
                    set {NPC::ServerID} to {_output::ServerID}
                    set {NPC::AdminID} to {_output::AdminID}
                    set {NPC::Debug} to {_output::Debug}
                    if {NPC::Debug} is true:
                        set {debug.mode.npc} to true
                    if {NPC::Debug} is false:
                        set {debug.mode.npc} to false

                    set {NPC::Message Format} to {_output::NPC Message Format}
                    set {NPC::Message Delay} to "%{_output::Message Delay}% seconds" parsed as timespan
                    
                    set {NPC::Reload-Message} to colored {_output::Messages::Reload} 
                    set {NPC::Debug-Alert} to colored {_output::Messages::Debug Alert} 
                    


                    send "%{NPC::Prefix}%%{NPC::Reload-Message}%" to player
                    send "%{NPC::Prefix}%%{NPC::Reload-Message}%" to console


                if arg-1 is "Info":
                    set {_contents1::*} to contents from url "https://raw.githubusercontent.com/iCodeDreamsMC/NPCS/master/api.json"
                    set {_content1} to concat {_contents1::*} with nl
                    set {_input1} to {_content1}
                    copy json {_input1} to {_output1::*}
                    set {_output1::LatestVersion} to {_output1::LatestVersion}
                    send "&a&m&l======================&2&m&l======================"
                    send ""
                    send "                               &2&lNPC &a&lSKRIPT"
                    send "                   &8Created by: %{_output1::Author}%"
                    send ""
                    send "             &7Server: &r%bukkit version% (%skript version%)"
                    if {_output1::LatestVersion} = {NPC::Version}:
                        send "                               &7Version: &r%{NPC::Version}%"
                    else:
                        send "             &7Version: &r%{NPC::Version}% &c&lOUTDATED! &8(New Version %{_output1::LatestVersion}%&8)"
                    send ""
                    send "&2&m&l======================&a&m&l======================"

                        
                else if arg-1 is not "Reload" or "Info":
                    send "&c[Error] &7Correct Usage: &e/npcsk [Reload / Info]"
            else:
                send "&cYou do not have permission to run this command!"
        else:
            send "&c[Error] &7Correct Usage: &e/npcsk [Reload / Info]"