[Skript Java Addon] Skellett icon

[Skript Java Addon] Skellett -----

All your Skript needs in one addon!




- Updated to Skript 2.8.2 and Spigot 1.20.4
----------, Feb 21, 2024

- Removed text components, they're in vanilla Skript now.
- Fixed Skellett not starting on 1.10 and lower due to the BlockSave syntaxes
- Fixed Bossbars not working on 1.9
- Fixed Skellett not working on Java 8
- Updated to Spigot 1.19.3
- Added new syntax to boost a player using a firework when they're in elytra mode
Code (Text):
# Effect
(boost|launch) %players% using [firework [rocket]] %itemstack%
----------, Jan 24, 2023

Updated libraries
----------, Nov 5, 2022

Fixes an issue with bossbars
----------, Jun 30, 2022

- Fixed conflicts with SkBee and the new bossbars that was added. (Defaults to SkBee's types, so if bossbars are broken, it's Skbee).
- Fixed a load chunk error in the load effect.
- Added more localization files.
- Fixed block data issues in versions lower than 1.9
- Lots of code cleaning and optimizations.
----------, Jun 24, 2022

- Added fishing back

Code (Text):
#Get the fishing hook entity
[the] [event-]fish[ing]( |-)hook

# The fish entity if state was caught
hook[ed] entity

# event value
[the] [event-]fish[ing]( |-)state

- Fixed bossbar flags not working properly
- Fixed fishing state not being comparable.
- Fixed up the player bossbar syntax
- Fixed up the scoreboard team classinfo.

Included is an over engineered grappling hook example which will also require Khoryl and SkQuery on the GitHub by clicking the download link for redirect.
----------, Jun 16, 2022

- Fixes a bug that disables SkBee or Skellett from running.
----------, Jun 7, 2022

- Fixed a bug where the boss bar flag and a citizens condition could not find the correct classinfo for it's syntaxes.
- Fixed the NpcIsSpawned condition not working.
- Started to add .lang types, You can compile Skellett (or any of my addons) and add a Skript supported language in the /lang file.
- Added (npc|citizen)s? as the regex for the classinfo, so you can parse as an npc or citizen depending on if you have another citizens addon installed.
- Added fishing event, fishing state expression and the classinfos for them.
- Various class cleaning and optimizations.

event
Code (Text):
[player] fish[ing] [state[s] [of] %-fishingstates%] with event-entity, and fishing state [the] [event-]fish[ing]( |-)state
example
Code (Text):
on player fishing state of reel in or failed:
     if fishing state is failed:
        message "Damn, you failed at a fishing?"
Legacy plans note:
So obviously Skellett is massive and many parts are outdated or implemented wrong. A complete recode will take a long time, what i've been doing since 2.0 is recoding and cleaning up parts of Skellett. All `com.gmail.thelimeglass` classes are old and still require a recode. All `me.limeglass.skellett` classes have been cleaned up and optimized. So in this update I re-added fishing, but they're actually properly done. I'll probably remove them again after the fishing pull request for Skript itself is added.
----------, Jun 7, 2022

- Removed Armour stand syntaxes, they're moved to Khoryl
- Removed the download effect as it was insecure and not practical.
- Removed the message center syntax as the client can have set their settings to be any chat length making this syntax not work.
- Recoded Chunk outline, Entity ID and more.
- Removed un-used BlockConstructor code.

- Added new syntax
Code (Text):
(0¦ticks|1¦milli[( |-)]seconds|2¦seconds|3¦minutes|4¦hours|5¦days|6¦weeks|7¦months|8¦years) (of|from|[with]in) %timespans%
So you can now get values from a timespan.

- Updated libraries: Minecraft 1.18.1 and Skript 2.6.1

Due to how Skript is removing versions equal and older than 1.12 and Mojang requiring latest Java versions. Backwards support for older versions is getting harder and harder, so the following will now apply;

Latest 2.0.3+ version only works with Skript 2.6.1+ and was compiled in Java 17 (MC 1.13+). If you're running 1.9-1.12 or any Java versions that's not Java 17 use Skellett version 2.0.2, it has a zip of multiple possible versions to use. Click the "Version History" tab to view older versions.
----------, Jan 27, 2022

Added 1.18 support.

Skellett will now be separated into two versions. Java 17 and Java 11. The Java 17 versions is for 1.18+ mc and the Java 11 is for other versions. Both included in a ZIP.

Skellett now runs autonomously on the github, so when a version or library Skellett uses gets updated. The GitHub will automatically get updated and publish a nightly build. You can grab a 1.18.2+ version of Skellett if Mojang decides to do that at the source code here https://github.com/TheLimeGlass/Skellett

Report issues at https://github.com/TheLimeGlass/Skellett/issues

Skellett is an open source free project developed over the years, any donations are welcome and appreciated thank you!
[​IMG]
----------, Dec 15, 2021

- Added block saves more below.
Code (Text):
block save[s] of %blocks

%blocks%'[s] block save
- Added automatic github actions, so you can now grab nightly builds at https://github.com/TheLimeGlass/Skellett/actions
- Fixed collidable condition not being proper grammar.
- Removed item frame syntaxes, they're going to be going into Khoryl.
- Removed spawner synatxes, they're going to be going into Khoryl.
- Removed Jukebox syntaxes, they're going to be going into Khoryl.
- Removed LLama syntaxes, they're going to be going into Khoryl.
- Removed Repeater syntaxes, they're going to be going into Khoryl.
- Removed slime size syntaxes, they're going to be going into Khoryl.

For those of you that wish to use the Java 11 version of 2.0.1 for 1.8 servers, you can grab it from here by clicking on any latest build and downloading the nightly jar https://github.com/TheLimeGlass/Skellett/actions

Finally a better way of handling blocks and their types/data! Skellett has a utility expression called block saves, what this does is the return type will be a custom object, that's also serializable yay! That can be saved to a variable. So you can save a block save to a variable and set the block to the exact block save later, example script used to save and load areas:

Code (skript (Unknown Language)):

command /pos1:
   trigger:
       if target block is set:
           set {pos::%player%::1} to location of target block
       else:
           set {pos::%player%::1} to location of player
       message "pos1 set to %{pos::%player%::1}%"

command /pos2:
   trigger:
       if target block is set:
           set {pos::%player%::2} to location of target block
       else:
           set {pos::%player%::2} to location of player
       message "pos2 set to %{pos::%player%::2}%"

command /save <string>:
   trigger:
       {pos::%player%::2} is set
       {pos::%player%::1} is set
       set {saves::%player%::%argument%::*} to block saves of blocks within {pos::%player%::2} to {pos::%player%::1}
       clear {pos::%player%::1} and {pos::%player%::2}
       message "Saved blocks to save %argument%"

command /load <string>:
   trigger:
       {saves::%player%::%argument%::*} is set
       loop {saves::%player%::%argument%::*}:
           set block at loop-value to loop-value
       message "Loaded blocks from save %argument%"

command /delete [<string>]:
   trigger:
       if argument is set:
           delete {saves::%player%::%argument%::*}
           message "Deleted save %argument%"
           stop
       delete {saves::%player%::*}
       message "Deleted all saves"

command /listSaves:
   trigger:
       message indexes of {saves::%player%::*}

on quit:
   delete {pos::%player%::*}

on script unload:
   delete {pos::*}
 
----------, Nov 17, 2021

Here we are, 2 years later when Skellett rain vain.
This update isn't an addition update unfortunately. This update removes everything that is already added in Skript. Since the SkriptLang team has expanded and became more active, it really deprecates the usage of Skellett. Skellett became so popular because it had so many syntaxes that Skript didn't have yet. So today's update is the start of that change, lets get Skellett back to being useful, I plan on updating Skellett with more modern syntaxes that Skript has yet to add, or features that don't suit Skript.
15% of Skellett has been recoded in this update, and more to come. Thanks for choosing Skellett after all these years, and lets go for another couple more years.

Requirements: Skript 2.6+

Changelog:


Updated:
Code (Text):
- Updated to Java 16
- Updated to Skript 2.6
- Updated to Spigot 1.17
- Updated to Gradle 7.1.1
- Updated Citizens to 2.0.27
- 35% smaller jar size
- Changed the collidable state to a condition %livingentities% is|are collidable
- Updated the open book effect to use Spigot method and not reflection now.
Removed:
Code (Text):
because they're in Skript 2.6+ now (I added majority of these to Skript myself):
- Removed event cancel event.
- Removed condition to check if redstone is powered.
- Removed condition to check if item is unbreakable.
- Removed condition to check if player is whitelisted.
- Removed the effect to teleport a player to a world spawn (You can get the spawn of a world now)
- Removed active potion effects expression (This is just a string and not properly implemented and Skript will soon)
- Removed expression for getting drops of a block.
- Removed powered block value (Redstone).
- Removed block hardness expression.
- Removed block xp expression.
- Removed clicked action expression it's now inventory action in Skript.
- Removed clicked inventory expression.
- Removed clicked slot expression use index of clicked slot.
- Removed clicked type expression.
- Removed clicked hotbar type expression.
- Removed client side weather syntaxes.
- Removed custom syntaxes shit.
- Removed custom name of entities expression.
- Removed enchantment level expression.
- Removed custom name visible expression.
- Removed player exhaustion expression.
- Removed fall distance expression.
- Removed fishing syntaxes (Use RandomSk until it's added in Skript, Skellett had poor implementation)
- Removed hotbar switch expressions.
- Removed inventory type expression.
- Removed invulnerable state expression.
- Removed projectile bounce expression and condition.
- Removed silent state of entities expression.
- Removed spectate target expression.
- Removed whitelist syntaxes.
- Removed world change event value expression. Use former|future event-location in Skript.
- Removed stuck arrows expression.
- Removed title expression.
- Removed fireworks.
- Removed item despawn event.
- Removed entity teleport event (but kept the event values as Skript doesn't for some reason)
- Removed resurrect event.
- Removed particles (Bad implementation)
- Removed sound syntaxes.

Removed because un-used or un-needed:
- REMOVED ALL DISGUISE SYNTAXES (Unreleased addon for Disguises coming soon)
- Removed the effects relating to files (Use Skent or SkQuery)
- Removed condition to check if a player is viewing the credits. (It used reflection and isn't really a good addition)
- Removed file existence condition (It's in Skent or SkQuery or SkUtils)
- Removed the effect that opens a chest to players (It's in Khoryl now)
- Removed the reload whitelist effect (This isn't required anymore)
- Removed the effect that saved the player list (This isn't required anymore)
- Removed the serialize effect (Skript serializing should not be accessible for Skript users)
- Removed the expression getting size of variables (Inefficient, not needed and shouldn't be accessible for Skript users)
- Removed hitbox syntaxes (This used reflection and was bad, It's now called BoundingBox in Spigot and will be added sometime to Skellett maybe)
- Removed java version expression. (Skript users don't need this)
- Removed long date expression (Skript users don't need this)
- Removed item type to material string expression (Skript users don't need this)
- Removed NBT syntaxes (These are just item flags and should be implemented properly)
- Removed world folder expression (Skript users don't need this and it's not needed for other parts of Skellett)
- Removed Yaml (There are lots of other alternatives now). I'm over the yaml hype train. Don't use YAML as a database, it's for configurations, but Skript has variables and options at the top of a script so.
Bug fixes:
Code (Text):
- Fixed adding text components to books (Used to use reflection and it broke in newer Spigot)
- Updated the %players% is in water condition to 1.17 methods.
----------, Sep 16, 2021

Fixed some addon's conflict with scoreboard teams.
----------, Oct 24, 2020

  • Removed Client Border syntaxes.
  • Fixed #98 in which there was a casting issue with Item frame Hanging events.
  • Fixed #92 in which Skellett conflicted with another unknown addon?
----------, Oct 20, 2020

  • Removed lots of things that are in vanilla Skript.
  • Removed Holograms (You can use dedicated hologram addon)
  • Removed PlayerPoints syntaxes
  • Re-added the new written book syntax for json books due to high demand. Skript's aliases broken.
  • Fixed a few null pointers.
  • Fixed some syntax not working, main one being the item cooldown.
  • Fixed lots of bugs.
  • Updated to 1.16
Changes at https://github.com/TheLimeGlass/Skellett/commit/21433c828916ab067613000b42bd73ba69b6ed3e
----------, Jun 29, 2020

Fixed:
  • Fixed a NullPointerException in player teleport to world spawn syntax when attempting to get a world that doesn't exist.
  • Fixed SpawnerSpawnEvent registering on 1.8 servers when it doesn't exist on 1.8 servers.
  • Fixed a NullPointerException when adding null text components to books.
  • Fixed set collidable being registered on 1.8 when it doesn't exist on 1.8.
Removed:
  • Removed ground state, it's in Vanilla Skript now as a condition. `if %player% is on the ground`
  • Removed gravity state, it's in Vanilla Skript now.
  • Remove glide state, it's in Vanilla Skript now.
  • Removed indices of variables, it's in Vanilla Skript now.
  • Removed inventory viewers, it's in Vanilla Skript now.
  • Removed offline players, it's in Skript now ;) lol.
  • Removed sounds, I manually added it to Vanilla Skript now.
  • Removed entities in radius, it's in Vanilla Skript now.
  • Removed ping of player, it's in Vanilla Skript now.
  • Removed unbreakable, it's in Vanilla Skript now.
  • Removed teleport cause, it's in Vanilla Skript now.
  • Removed spawn reason, it's in Vanilla Skript now.
  • Removed the syntax that overrid Skript's slot system to allow for multiple slots. I manually added it to Vanilla Skript now.
  • Removed scoreboard tags, it's in Vanilla Skript now.
  • Removed break block naturally, it's in Vanilla Skript now.
  • Removed hiding players from other players, it's in Vanilla Skript now.
  • Removed particles, Skript has fixed it a bit, it's still trash because of the Spigot API.
----------, Sep 26, 2019

Removed:
  • Removed RPGPlayerLeveling syntax (Was a bad plugin API from the start)
  • Removed SkellettProxy (Use Skungee now)
  • Removed regenerators
  • Removed the DataTypeWatcher packet (Can't be asked to do research and update it's reflection)
  • Removed ProtocolSupport (Their API has drastically changed)
  • Removed One In The Battle Support
  • Removed MySQL syntax, use SkQuery or that other MySQL addon
  • Removed Feudal support (Plugin was abandoned)
  • Removed Eggwars support
  • Removed Book support (It's in vanilla Skript now)
  • Removed SquidHQ (They moved on to managing a minecraft server list site)
  • Removed fireworks (I added them in vanilla Skript)
  • Removed Async World load effect (FAWE has been abandoned at the moment)
  • Removed Packets
  • Removed Dyed Armour (It's in vanilla Skript now)
  • Removed Crop State (The Spigot API for crops has changed completely)
Changed:
  • In the latest CorpseReborn, you can't set/get the player instance of the corpse, so now new syntax `name of corpse %corpse%` will just return the name of the corpse.
Fixed:
  • Fixed opening books to players for 1.14.4 servers, Also made the syntax multiple players open book %itemstack% to %players%

    Donations help influence the plugin if you want to help there is a donation button on the main thread, donations are not required, but appreciated.
----------, Sep 22, 2019

Added a syntax to get all the function names of current functions.

Syntax:
Code (skript (Unknown Language)):
[(the|all)] [of] [the] [loaded] functions
Example:
Code (skript (Unknown Language)):
function broadcastExample(message: string):
    broadcast {_message}
on script load:
    set {_functions::*} to all functions where [string input contains "broadcastExample"]
    evaluate "%{_functions::1}%(""Hello world!"")"
I'm making a neat Skript API for my next public script i'm going to release and I needed to be able to load external Functions ;)

Enjoy
----------, Oct 1, 2017

In this update I added the ability to configure the MySQL properties. You can read up about these at https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

The MySQL.yml will have to be deleted then restart your server for these newer properties. The default properties allow for reconnection which helps you in the long term without reloading often.

The newer MySQL.yml is doc mented so you can read up on that stuff.
----------, Sep 15, 2017

Fixed:
- Strange bossbar bugs
- Bossbar crashing
- Bossbar last created version dependant
- Debug option crash
- Fixed wrong version crash issue
- Fixed debug colours not working
- Changed some register features
- Fixed some register bugs
- Cleaned some code up.
- Citizen type not registering on some events (event-citizen)

Added:
- NametagEdit support
- Paste schematic (more WorldEdit coming soon)

Changed:
- Removed the old Nametag system (It was only for user in the same scoreboard)
#Info: You can still make a nametag system using Full scoreboards, which simulate the exact same thing.
http://skunity.com/search?search=Full+scoreboards#

Worldedit:
Code (skript (Unknown Language)):
   #effects:
      (place|paste) schematic %string% at %locations% [[(with|at)] angle %-number%] [with limit %-number%] [[and] (without|exclud(e|ing)) air %-boolean%]

Examples:
Code (skript (Unknown Language)):
paste schematic "test" at player with angle 90 and without air true
Syntax:
Code (skript (Unknown Language)):

#Expressions:
 
   #Can only be reset or cleared (Reset reloads the nametag)
   [nametag edit] [name[ ]]tag of %player/string%
   %player/string%'s [nametag edit] [name[ ]]tag
 
   #Set/Get the prefix of a nametag
   [nametag edit] [name[ ]]tag prefix of %player/string%
   %player/string%'s [nametag edit] [name[ ]]tag prefix
 
   #Set/Get the suffix of a nametag
   [nametag edit] [name[ ]]tag suffix of %player/string%
   %player/string%'s [nametag edit] [name[ ]]tag suffix
----------, Aug 8, 2017

Changed:
- Changed Client time relative syntax
Code (skript (Unknown Language)):
[skellett] [client] relative time of %player% [is] [%-boolean%] [relative] [to] [server]
#to
[client] relative time of %player% (1¦is|2¦is(n't| not)) relative [to server]
- Changed whitelisted condition syntax
Code (skript (Unknown Language)):
[server] whitelist[ed] [state]
#to
[server] (1¦is|2¦is(n't| not)) whitelisted
- Fixed what ever the old syntax for this was. Also made a toggle for it? Fixed this crap up.
Code (skript (Unknown Language)):
[file] exist(s|ance) [(at|of)] %string% [is %-boolean%]
Fixed:
- Added plural to add text component
- Cleaned up old gross conditions
- Some code cleaning
- Some minor bugs
- Some null pointers
- Fixed internal errors caused when Citizens disables itself due to unsupported version. Update your Citizens to the recommended version for your server.

Added:
Hidden syntax that are now public or weren't working:
- Jukebox is playing condition
- Jukebox force eject
- Skull owner/rotation
- Ticks from timespan
- More citizens stuff
- More regenerators stuff
- Remove potion effects
- Skull stuff
- Jukebox stuff
- Last created bossbar
- Create new inventory expression (Returns empty inventory) (Example below)

Info:
- As I promised every update will have some sorta Citizens feature until all of Citizens is supported (if it's not a bug fix update) Going back on that promise.

Syntax:
Code (skript (Unknown Language)):
Conditions:
 
    juke[ ]box %block% (1¦is|2¦is(n't| not)) playing [a] (record|track|song)
 
#Effects:

    #Removes all potion effects from a player
    remove all [potion] effects from %players%
 
#Expressions:

    #Returns a blank inventory
    [a] new inv[entory] [with type] %string% [with %-number% row[s]] [named %-string%]
 
    [the] tick[s] (of|from) [time[span]] %timespan%", "[time[span]] %timespan%'s tick[s]
 
    #Returns the offline player of a skull block
    [the] [skellett] skull[ ]owner of [skull] %block%
    [skellett] [skull] %block%'s skull[ ]owner
 
    #Returns the block face of a skull block in direction, blockface or string
    [the] [skellett] skull[ ]rotation of [skull] %block% [in (1¦direction|2¦blockface)]
    [skellett] [skull] %block%'s skull[ ]rotation [in (1¦direction|2¦blockface)]
 
    #Grabs the spigot BlockFace compared from a direction and block
    [the] [block[ ]]face of [block] %block% from %direction%
    [block] %block%'s [block[ ]]face from %direction%
 
    #Grabs the last bossbar that was created
    [the] last created [boss[ ]]bar
 
#Regenerators:
 
    #Effects
    #Create a regenerator with specific blocks. Good for minigames like Paintball.
    (create|make) [a] [new] [skellett] regenerator with ID %string% (from|with) %blocks%
 
    #Expressions
    #Get all blocks of a regenerator
    block[s] of [skellett] regenerator [[with] id] %string%
 
#Citizens:

    #Effect
    (make|force) [the] (npc|citizen) %citizen% (talk|say|speak) %string% [to %-players%]
 
    #Event:
    [on] (npc|citizen) (speech|speak|talk):
     
        #Get message in event
        event-string
     
        #Get citizen in event
        event-citizen
 
Dab

Our Discord: https://discord.gg/eFgxASt
----------, Jun 30, 2017

Fixed:
- Improved Actionbar parser time a little
- Changed entity can see condition
Code (skript (Unknown Language)):
%entity% [can] (see|visibly see|line of sight) [can see] %entity%
#to
%entity% (1¦can|2¦can([ ]no|')t) [visibly] see %entity%
- Fixed a bunch of bugs I forgot to write down
- Fixed some issues with some syntax
- Did alot of testing all over Skellett (Not SkellettProxy yet, Update next week)

Added:
- Support for multiple text components in the book add page effect
- Support for 1.12 titles/subtitles

More updates will be coming this week aswell.
----------, Jun 16, 2017

Added:
- Json/Interactive clickable books
- Expression to get a blank book
- Added indexes of list variable

Fixed:
- Actionbars not working in 1.12
- Fixed 3 Citizen 1.8 issues (Released in 1.9.3 on github)

1.12 todo list:
- Add 1.12 support for the titles
- Add 1.12 support for tablist
- Add 1.12 support for removing of arrows in player

Todo with text components:
- Add text component support for Bensku's json
- Add text component support for SkellettProxy

[​IMG]

Syntax:
Code (skript (Unknown Language)):
#Expressions:
   
    #Grab a new written book (Because Skript's is different)
    [a] new [written] book

#TextComponent stuff

    #Create a new text component
    [a] [new] text component [with [text]] %strings%
   
    #Add hover event stuff to the text component (When a player hovers their mouse over it)
    add hover event with action %hovereventaction% (and|with) [(value|text)] %string% to [text component] %textcomponent%
   
    #Add clickable event stuff to the text component (When a player clicks the text)
    add click event with action %clickeventaction% (and|with|to) [(execute|text|link)]  %string% to [text component] %textcomponent%

    #Add a page with the text component to a book
    add text component %textcomponent% to [book] %itemstack%
   
    #Message the json text component (tellraw) to the player
    message text component %textcomponent% to %players%
   
    #Works from 1.8-1.12 as tested
Example script:
Code (skript (Unknown Language)):
command /book <integer>:
    trigger:
        set {_book} to a new book
        #SUGGEST_COMMAND and OPEN_FILE doesn't work in books. It is a chat only feature. Which is coming soon!
        if arg 1 is 1:
            set {_component} to a new text component with "Hello world!%nl%%nl%&5&lExample %arg 1%!"
            add hover event with action SHOW_TEXT with text "&5This message is a hover!" to text component {_component}
            add text component {_component} to book {_book}
        else if arg 1 is 2:
            set {_component} to a new text component with "&l&nExample 2!%nl%%nl%%nl%%nl%%nl%&4Working!"
            #If the slash isn't inserted in the execute string. It will make them chat.
            #WARNING: Entering color symbols in the execute string, causes the player to crash.
            add click event with action RUN_COMMAND with execute "/example" to text component {_component}
            add hover event with action SHOW_TEXT with text "&3&oClick me to execute chat or command" to text component {_component}
            add text component {_component} to book {_book}
        else if arg 1 is 3:
            add page "Testing 1" to {_book}
            add page "&1Testing 2" to {_book}
            set {_component} to a new text component with "&3&l&n&nExample 3!%nl%%nl%&4Working! %all players%"
            add click event with action CHANGE_PAGE to "2" to text component {_component}
            add hover event with action SHOW_TEXT with text "&4&kgewhbewgjbjehbf%nl%&r&5Click me%nl%to go back a page" to text component {_component}
            add text component {_component} to book {_book}
            add page "&6Testing 3" to {_book}
        else if arg 1 is 4:
            set {_component} to a new text component with "%nl%%nl%%nl%%nl%%nl%     &5&l&nClick me link!%nl%&rLeave a 5 star review!"
            add click event with action OPEN_URL with link "https://forums.skunity.com/threads/skellett.39/" to text component {_component}
            add hover event with action SHOW_TEXT with text "&5&lClick me to open Skellett.%nl%&5The beast addon!" to text component {_component}
            add text component {_component} to book {_book}
            #message text component {_component} to player
        open book {_book} to player

As always enjoy :D
----------, Jun 4, 2017

Added:
- Async world creation
- SkellettProxy switch server event
- Get folder path of a world
- Move file
- Copy file
- Fully tested 1.12 support
- DataWatcher grabber (Info below) (Ultimate entity data finder)
- DataWatcher type grabber (Info below)

Fixed:
- A bossbar issue
- Some SkellettProxy bugs
- Made the delete file accept directories
- Made the create file accept directories
- Bugs
- Bug in 1.12 where version dependent syntax were not getting registered (Due to unsupported version)
- Fixed an optional spamming issue caused by 1.12
- Fixed some syntax not working in 1.12

Syntax:
Code (Text):
#Events:

    [on] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) [player] switch server[s]
    [on] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) [player] server[s] switch

#Effects:
 
    #Create or load a world Async and/or with a generator.
    #Info You can't have a generator option if you're loading the world Async, Because FAWE is your generator.
    #Also the node Async has to be enabled in the Skellett config.yml and FAWE installed for the async to work.
    [skellett] (load|create) world %string% [with generator %-string%] [[and] [with] [fawe] async[hronous]]

#Expresions:
 
    #Get the world folder file path
    world folder of %world%

         #Get any data possible from an entity
        data watcher value %number% from %entity%

         data watcher type (of|from) %*object%
Data Watcher info: Basically the data watcher is a system built into Minecraft itself, it's a variable system that mojang uses to send a bunch of variables all at once to the server and client about an entity. It contains lots and almost everything you need about an entity, from it's display name to it's health. Here is a really good wiki about what and how to use this system http://wiki.vg/Entities#Entity_Metadata_Format

Example:
Code (skript (Unknown Language)):
command /dw <integer>:
    trigger:
        broadcast "%data watcher value arg 1 from target entity%"
So assuming i'm looking at a boat
[​IMG]
I could type /dw 8 and it would return a number of how much damage this boat has taken.

I could type /dw 10 and determine if the boat's Right paddle is turning! This system has so much data and it's yours to explore within Skript!

Other syntax examples I was playing with:

Simple way to determine how large a chest should be:
Code (skript (Unknown Language)):
command /sizedChest:
    trigger:
        loop 6 times:
            if size of all players is within row loop-number:
                set {_size} to loop-number
                exit loop
        open "CHEST" with {_size} rows named "&6This" to player
Code (skript (Unknown Language)):
on bungeecord player disconnect:
    broadcast "%event-string%"
    broadcast "%event-uuid%"
    broadcast "%event-offlineplayer%"
on bungeecord player switch server:
    broadcast "%event-string%"
    broadcast "%event-uuid%"
    broadcast "%event-offlineplayer%"
Hope you enjoy this update!

This version needs the latest SkellettProxy 1.3.2+ in order to run SkellettProxy stuff!
----------, May 26, 2017

Fixes for SkellettProxy and adds server switch event
Code (skript (Unknown Language)):
[on] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) [player] switch server[s]
[on] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) [player] server[s] switch
This version needs SkellettProxy 1.3.2 in order to run SkellettProxy stuff!
----------, May 13, 2017

Added:
- 1.8 pvp reverter (Basically this turns 1.9+ pvp into 1.8 pvp all that built in)
- Skull owner
- Spigot material name getter
- Clicked row expressions
- Pastebin

Fixed:
- Made the cooldown syntax accept multiple players.
- Cooldown not accepting Numbers.
- Added support for 1.11+ ShulkerBox's in some inventory clicking syntax.
- Changed a debug message to be understood easier.
- Fixed a possible socket issue?
- Fixed a bug in 1.8.4 and lower 1.8 versions
- Added a doc generator for Mathhulks docs. Doesn't work at the moment, only preparing.
- Added a pastebin API generator
- Fixed a packet sending issue
- Changed a debug message for SkellettProxy to be easier to understand.

Todo:
- Working on a system to auto update Skellett

Syntax:
Code (skript (Unknown Language)):
#Expressions:
 
    #Changers: set (OfflinePlayer)
    #Info: Gets the offline player linked to the skull.
    #Info: This can only be set at the moment for some reason.
    [the] skull[ ]owner of [skull] %block%
    [skull] %block%'s skull[ ]owner
 
    #Info: Returns a spigot material name of a aliases https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
    [the] [spigot] material [name] (from|of) %itemtype%
    %itemtype%'s [spigot] material [name]
 
    #Info: Calculates the row that was clicked in the inventory clicking event.
    [the] click[ed] row
 
    #Info: create a pastebin. This returns the link of the pastebin.
    #You can get and find your pastebin API key at https://pastebin.com/api
    [(get|make|create)] [a] paste[ ]bin [link] with (data|lines) %strings%[(,| and|with)] (title|header) %string%[(,| and|with|for)] [api] key %string%
 
#Conditions:

    #Info: Checks if a slot is within a row of a defined inventory.
    #If the inventory isn't set, it assumes it's a chest.
    #Supported inventories: Player, Chest, ShulkerBox, Enderchest, Dropper, Dispenser, Workbench and Hopper.
    #Any other inventory will be calculated and guessed apon it's inventory size.
    [slot] %number% (1¦is|2¦is(n't| not)) (within|of|in) row %number% [(of|in|from) [inventory] %-inventory%]
Examples:
Code (skript (Unknown Language)):
on inventory click:
   cancel event
   broadcast "&6%clicked row%"
   if clicked slot is within row 2 of clicked inventory:
       broadcast "&a&lYes"
   if clicked row is 2:
       broadcast "&a&lDoes same thing :P"
Code (skript (Unknown Language)):
on rightclick on anything:
    set {_material} to material from player's tool
    if player hasn't got a cooldown for {_material}:
        set the cooldown of {_material} for player to 100
    wait 2 ticks
    if player has a cooldown for {_material}:
        broadcast "yes"
command /skull:
    trigger:
        broadcast "%skull owner of target block%"
Info:
- One of the syntax can be used outside of the inventory clicking event and the other can't.
- I added this as it made some of my GUI animations faster and cleaner. :p
- Have any suggestions send them my way, I can look into adding it.
- Thanks for 1.5 million players in Skellett's database!
- If you find any bugs please report them to me by PM or tag me anytime :D

Skript community discord: https://discord.gg/eFgxASt
----------, May 6, 2017

Hello guys! Sorry about missing last week's update. Skellett releases an update every week and last week I was on vacation so I missed that update. Sorry about that. This update has alot of features to make up for that :p

Added:
- Full RedisBungee support
- A method invoke effect.
- Loaded chunks of a world
- Java version
- Date from milliseconds expression
- Material cooldowns

Fixes:
- The SkellettProxy connect player to server effect not accepting UUID's
- The ability to delete/reset network variables
- Bug where temporarily stored global script files were not being deleted.
- Added the ability to get methods from class strings. This also goes for the new invoke effect:
New Syntax:
Code (skript (Unknown Language)):
[event] method %string% [is [a] loop[able] %-boolean%] [(from|of) [(expression|type|class)] %-object%] [with parameter[s] %-objects%]
Example:
invoke method "registerNpc" from class "me.limeglass.npcaddon.util.npcs.NpcManager" with parameters "LimeGlass" and player's location

https://github.com/TheLimeGlass/Npc...ss/npcaddon/util/npcs/NpcManager.java#L61-L76
- More random bug fixes

Syntax:
Code (skript (Unknown Language)):
#Effects:

    #Info: This acts the same as the custom effect executer. Except you don't need to return an object. This just invokes it raw.
    (invoke|execute|run) method %string% [(from|of) [(expression|type|class)] %-object%] [with parameter[s] %-objects%]
    #Example:
        invoke method "setFlying" from player with parameter true
   
#Expressions:

    #Info: Get all the loaded chunks of a world.
    [(the|all)] [of] [the] loaded chunks (in|of|from) [world] %world%
   
    #Info: Get the server's java version
    [the] server[[']s] java version
    [the] java version of [the] server
   
    #Info: Returns a date string from the given milliseconds
    date (from|of) [(long|millseconds)] %number%
   
    #Changers: set and reset (Number)
    #Info: Set or return a cooldown of an item. This shows the cooldown animation on an items slot when used.
    #Keep in mind this is only an animation. You will have to test if the cooldown is set using the cooldown condition.
    #This is similar to the 1.11+ cooldown enderpearls have when used.
    [the] cool[ ]down of [(item|material)] %string% (for|of) %player%
    [(item|material)] %string%'s cool[ ]down (for|of) %player%

#Conditons:
   
    #Info: Check if a player has a cooldown active for a specific material
    %player% (1¦does|2¦does(n't| not)) have [a] cool[ ]down for [(item|material)] %string%
   
#RedisBungee:

    #Info: Returns a list of all redisbungee servers.
    [(the|all)] [of] [the] redis[[ ]bungee] [connected] servers
   
    #Info: Returns a list of all redisbungee players.
    [(the|all)] [of] [the] redis[[ ]bungee] players
   
    #Does the same thing as above, but with usernames rather than uuids.
    [(the|all)] [of] [the] [online] redis[[ ]bungee] player [user]names
   
    #Info: Returns a long (number) in milliseconds of the date the player last logged in.
    #Info: You can use the date from long expression to get the date string.
    [the] last login of redis[[ ]bungee] [(player|uuid)] %string%
    redis[[ ]bungee] [(player|uuid)] %string%'s last login
   
    #Info: Get players on a proxy.
    [(the|all)] [of] [the] redis[[ ]bungee] players on proxy %string%
    redis[[ ]bungee] proxy %string%'s players
   
    #Info: Get players on a server from redis bungee.
    [(the|all)] [of] [the] redis[[ ]bungee] players on server %string%
    redis[[ ]bungee] server %string%'s players
   
    #Info: Returns the redis bungee id of a player.
    redis[[ ]bungee] player id (for|of) [(player|uuid)] %string%
   
    #Info: Get a server of a player within the redis bungee system.
    [the] redis[[ ]bungee] [connected] server (for|of) [(player|uuid)] %string%
   
    #Info: Returns the redis bungee id of the bungeecord this syntax is attached too.
    [the] redis[[ ]bungee] server id [(for|of) this bungee[[ ]cord]]
   
    #Info: Get the username of an uuid though redis bungee.
    #The lookup addon allows you to tell redis bungee to do a more indepth uuid name lookup.
    #It will always be true if that part of the syntax is added.
    [the] redis[[ ]bungee] [player] [user[ ]]name of uuid %string% [[with] expensive lookup %-boolean%]

    #Info: Check if a player/uuid is online the redis bungee network.
    redis[[ ]bungee] [(player|uuid)] %string% (1¦is|2¦is(n't| not)) online [the] [bungee[ ][cord]]
   
    #Info: Executes a command on all proxy servers connected to the redis.
    #If the ID is set. The command will only be ran on that proxy with that id.
    (run|execute) redis[[ ]bungee] [proxy] command %string% on [all [of the]] proxy server[s] [[with] id %-sting%]
Info:
- The redis bungee syntax are untested as I couldn't get RedisBungee to work. If you find any bugs with them, please notify me asap.
- If you find any bugs please report them to me.
- Materials doc list: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html

If you want to use the new RedisBungee features. This Skellett version needs 1.3.1 of SkellettProxy in order to work!

Hope you enjoy :D
----------, Apr 24, 2017

1.12 prep and optimizations.

This Skellett version should work on 1.12+ when it comes out, unless Spigot or Mojang deside to modify some critical features. Enjoy

Thanks for 550,000+ different minecraft users on servers using Skellett and thanks for making Skellett the #1 source for Skript addon, and thanks for 1,100+ downloads!

Our discord https://discord.gg/phpWHGU
----------, Apr 7, 2017

Fixed a critical bug where Skript wouldn't parse the reloaded global scripts properly.

This bug also had todo with the fix I had last version for the empty scripts folder not allowing global scripts.

Fixed minor bugs aswell.
----------, Mar 26, 2017

Fixed:
- InventoryType expression now returns as a string. (Old support still works)
- Fixed spigot 1.7.2 and lower crashing due to packets.
- Fixed issue with bensku's edit and versions lower than spigot 1.10.
- Fixed comments not being generating in the files for SkellettProxy.yml and MySQL.yml.
- Made it so Skellett now reconnects to SkellettProxy if the bungeecord restarts.
- Fixed the empty scripts folder not allowing globalscripts (As said in my video tutorial)
- Fixed some null pointers

Added:
- Npc is navigating

Syntax:
Code (skript (Unknown Language)):
[the] (npc|citizen) %npc% (1¦is|2¦is(n't| not)) (navigating|moving)
This Skellett version needs version 1.3.0+ of SkellettProxy in order to run SkellettProxy features!

Also thank you for making Skellett the second most used addon for Skript :D And thank you for nearly 1000+ downloads!
----------, Mar 25, 2017

You can now share variables between servers on your bungeecord server.

Basically this allows you set a variable on the bungeecord and then on another server call that variable.

Syntax:
Code (skript (Unknown Language)):
[the] [skellett[ ][(cord|proxy)]] (global|network) [var[iable]] [(from|of)] %object%
This can only be set and grabbed at the moment.

Example:

Code (skript (Unknown Language)):
set network variable {test} to "&6Hello world!"
set {_this} to network variable {test}
Simple and sweet.

There is also a backup system to save your variables so you don't have to worry about losing your data if something goes wrong. You can access the settings for this in the config of SkellettProxy on the bungeecord

There is also an option called AutomaticSharing. What this does is basically sets the physical variable on the spigot server side.

So if I run

Code (skript (Unknown Language)):
set global variable {test} to "&6Hello world"
 
On other servers, all I would have to do is;
Code (skript (Unknown Language)):
broadcast "%{test}%"
In order to access the variable.

This project has taken me about a week or so to make. Hope you enjoy it. Was quite the trouble to make it aswell.

This Skellett version needs SkellettProxy 1.2.9+ to run if you're using SkellettProxy features!
----------, Mar 20, 2017

Today I present to you Bungeecord side scripts!

You can place any of your scripts in the SkellettProxy/scripts folder on the bungeecord and SkellettProxy will load all these scripts in this folder across all of your bungeecord servers!

No more hastle of going into each server and updating each script manually. You can now edit everything from the SkellettProxy scripts folder! How cool is that!?

New settings: You can enable/disable GlobalScripts in the SkellettProxy config with the new setting. I will be adding more configurable options to this as it's got alot that can be done. There is also a new option that can enable/disable the console messaging for when a script is reloaded or created.

Info:

You must have the "events" option enabled in the SkellettProxy.yml found at plugins/Skellett/SkellettProxy.yml on your Spigot server.

This Skellett version needs SkellettProxy 1.2.8 in order to run SkellettProxy stuff!
----------, Mar 14, 2017

I have been getting litterally 20+ messages a day saying that Skellett and SkellettProxy aren't working. Sorry about that lol. I just didn't have any time to work on a fix. Now I have some time and here is a fix and tested.

Added:
- Citizens Attack (Requested by @pepper82)
- Server tick

Fixed a few other things.

Syntax:
Code (skript (Unknown Language)):
Expressions:

    #Info: This gets the server tick not tps. Tick is basically the interval of Minecraft.
    #It's like the System time, but for Minecraft.
    #You can use this to get how long the server has been up in ticks etc.
    [the] server tick[s]
    [the] server's tick[s]
    [the] tick[s] of [the] server

#Effects:

    #Make a citizens attack another entity
    #Info: The aggressive state means the Npc will attack and damage it. If this is false the npc will just target an entity but not damage
    (make|force) (npc|citizen) %npc% (target|attack|damage|follow) %entity% [[aggressive] [state] %-boolean%]
This update was mainly to fix the SkellettProxy issue.

Thanks for your patience and waiting 1 day for a fix xD

Info:
You still only need the latest SkellettProxy 1.2.7 for this to work. It's a Skellett side issue :p
----------, Mar 13, 2017

Added:
- Hanging event + every spigot event value. The hanging event deals with Item frames, fence leashes or painting.
- Condition to test if a player can see a player with the protocol hidden syntax.
- Statistics support (Requested by @Blueyescat)
- Blocks outlining chunk

Changed:
- Changed from MCstats to bStats for metrics https://bstats.org/plugin/bukkit/Skellett

Fixed:
- A critical bug where the SkellettProxy.yml port would reset all the time if it wasn't a port that Skellett liked.
- Fixed the SkellettProxy port not accepting anything but 4 digit ports. You can now put any port you want.
- Add page with string being split into mulitple pages (Reported by @Blueyescat)
- Fixed pages being added to random items throwing errors
- Harmless MySQL null pointers
- Alot of minor bug fixes
- 6+ null pointers

Syntax:
Code (skript (Unknown Language)):
Events:

    [on] (unhang|[entity] unhung)
       
        #The entity being unhung
        event-entity
       
        #Gets the entity removing the hung entity
        [the] (hung|hang)[(ed|ing)] remover [entity]
       
        #Returns the cause of this event
        [the] (hung|hang)[(ed|ing)] cause
   
    [on] (hang|[entity] hung)
       
        #The player hanging the entity
        event-player
        #The hanged entity
        event-entity
        #The block an entity was hung on
        event-block
       
    [on] ([un]hang[ing]|[un]hung) [entity] (remove|break|destroy)
       
        #Gets the entity removing the hung entity
        [the] (hung|hang)[(ed|ing)] remover [entity]
       
        #The entity being destroyed
        event-entity
       
        #Returns the cause of this event
        [the] (hung|hang)[(ed|ing)] cause

Conditions:

    #Checks if the player is protocol hidden to another player using the reveal and hide effects
    [player] %player% (1¦can|2¦can([ ]no|')t) see [player] %player%
       
Expressions:

    #Get the statistic of anything from a player
    #Info if the Statistic requires a Material or Entity. Insert that data into the appropriate string provided.
    [the] stat[istic][s] %string% (of|from) %player% [[(with|from|for|of)] entity[[ ]type] %-string%] [[(with|from|for|of)] material %-string%]
   
    #Get the locations outlining a chunk
    [(the|all)] [of] [the] blocks [in [a[n]]] (around|outlin(e|ing)) [of] chunk %chunk% [[at] [y(-| )coordinate] %-number%]
Info:
Statistics: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Statistic.html
EntityTypes: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/EntityType.html
Materials: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html

Test script:
Code (skript (Unknown Language)):
command /stats <text> <text> [<integer>]:
    usage: /stats (get|set|add|subtract|reset) (statistic) [(value)]
    trigger:
        loop enum values of statistic:
            if "%loop-value%" is arg 2:
                set {_found} to true
        if {_found} is true:
            if arg 1 is "set":
                if arg 3 is set:
                    set statistic "%arg 2%" from player to arg 3
            else if arg 1 is "add":
                if arg 3 is set:
                    add arg 3 to statistic "%arg 2%" from player
            else if arg 1 is "subtract":
                if arg 3 is set:
                    subtract arg 3 from statistic "%arg 2%" from player
            else if arg 1 is "reset":
                reset statistic "%arg 2%" from player
            set {_stat} to statistic "%arg 2%" from player
            broadcast "%{_stat}%"
        else:
            message "&c%arg 2% is not a statistic"
command /statMaterial:
    trigger:
        set {_stat} to statistic "DROP" from player from material "ROTTEN_FLESH"
        broadcast "%{_stat}%"
command /statEntity:
    trigger:
        set {_stat} to statistic "KILL_ENTITY" from player from entity "ZOMBIE"
        broadcast "%{_stat}%"
command /blocks <boolean>:
    trigger:
        set {_chunk} to chunk at player's location
        if arg 1 is false:
            loop all blocks outlining chunk {_chunk}:
                set loop-block to diamond block
        else:
            loop all blocks outlining chunk {_chunk} at y-coordinate of player:
                set loop-block to diamond block
                wait a tick
on unhang:
    if unhang cause is not "ENTITY":
        cancel event
----------, Mar 11, 2017

Added:
- Client chest open and close animation
- A bunch of beta syntax that are disabled because they broke? .-.
- Load chunk
- Unload chunk
- Itemframe rotation and item within
- PlaceholderAPI attempt? PlaceholderAPI always returns the input. Atleast for my 1.11.2 version. I need to contact Clip which I have, waiting for reply.
- Added all Skellett events to the docs
- Added option to fix muliple queries issues.

Fixed:
- Fixed weird suppressed warning on all expressions. (Internal)
- Changed second syntax of custom name disguise:
Code (Text):
%disguise%'s [custom] name
#to
disguise %disguise%'s [custom] name
- Fixed clicked item error
- Fixed some internal stuff that was mainly to help myself.
- Minor Bug fixes.
- Null pointers

Syntax:
Code (Text):
Effects:

    #Make a block appear open like a chest or shulker box
    [skellett] make [the] %block% (appear|look) (1¦open|2¦closed) for %players%
    [skellett] play chest (1¦open|2¦close) animation at %block% for %players%
    [skellett] (1¦open|2¦close) [the] %block% for %players%
   
    #If generating is true, it will generate the chunk if it's never been loaded before
    [skellett] load chunk %chunk% [[with] generat(e|ing) %-boolean%]
   
    #Saving will save the chunk to memory
    [skellett] unload chunk %chunk% [[with] sav(e|ing) %-boolean%]
   
Expressions:

    #Changers: set (ItemStack)
    [skellett] item (in|inside|within|of|from) item[ ]frame %entity%
    [skellett] %entity%'s item[ ]frame item
    [skellett] item[ ]frame %entity%'s item
   
    #Changers: set (Rotation)
    [skellett] rotation (of|from) item[ ]frame %entity%
    [skellett] %entity%'s item[ ]frame rotation
    [skellett] item[ ]frame %entity%'s rotation
   
    #Doesn't work. PlaceholderAPI is stupid.
    [parse[d]] place[ ]holder [(from|with)] %string% [[(from|for)] %-player%]

Types:
   
    rotation
Rotation types:
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Rotation.html

CLOCKWISE
Rotated clockwise by 90 degrees
CLOCKWISE_135
Rotated clockwise by 135 degrees
CLOCKWISE_45
Rotated clockwise by 45 degrees
COUNTER_CLOCKWISE
Rotated counter-clockwise by 90 degrees
COUNTER_CLOCKWISE_45
Rotated counter-clockwise by 45 degrees
FLIPPED
Flipped upside-down, a 180 degree rotation
FLIPPED_45
Flipped upside-down + 45 degree rotation
NONE
No rotation

Test script:
Code (Text):
#/itemframe stone COUNTER_CLOCKWISE_45
command /itemframe [<item>] [<rotation>]:
    trigger:
        if target entity is set:
            if arg 1 is set:
                set item in itemframe target entity to arg 1
                broadcast "%item in itemframe target entity%"
            if arg 2 is set:
                set rotation of itemframe target entity to arg 2
                broadcast "%rotation of itemframe target entity%"
command /openChest:
    trigger:
        make target block appear open for player
----------, Mar 10, 2017

Added event-player event value to Packets

Code (Text):
on packet:
    if event-string is "PacketPlayInSettings":
        broadcast "%event-player%"
        set {_this} to packet field "a"
        broadcast "Language: %{_this}%"
        set {_this} to packet field "b"
        broadcast "View distance: %{_this}%"
        set {_this} to packet field "c"
        broadcast "Chat setting: %{_this}%"
        set {_this} to packet field "f"
        broadcast "Lefty or Righty: %{_this}%"
----------, Mar 3, 2017

Added:
- Full packet support with every packet the client recieves and sends

Fixed:
- Some bug fixes

Info:
Basically packets are like a channel between the minecraft client and the minecraft server. These packets are what allow minecraft to function and communicate. With Skellett you can now intercept and manipulate these packets. Along with cancelling them. Skellett packets require no external dependency and include every single packet the client sends and recieves. This leads to alot of data manipulation and control over your server.

You can view all packets and data infomation here http://wiki.vg/Protocol

Syntax:

Code (skript (Unknown Language)):
#Event:
    [on] packet [(send|sent|recieve)]
#Expression:
    #Changers: set (Object)
    [the] [skellett] packet (data|value|field) %string% [[is] [a] loop[able] %-boolean%]

Example script:

Code (skript (Unknown Language)):
on packet:
    if event-string is "PacketPlayInSettings":
        set {_this} to packet field "a"
        broadcast "Language: %{_this}%"
        set {_this} to packet field "b"
        broadcast "View distance: %{_this}%"
        set {_this} to packet field "c"
        broadcast "Chat setting: %{_this}%"
        set {_this} to packet field "f"
        broadcast "Lefty or Righty: %{_this}%"
----------, Mar 3, 2017

Added:
- Block durability
- Readded the string option for bungeecord UUID

Fixed:
- Some null pointers
- Bug fixes

Syntax:
Code (skript (Unknown Language)):
#Changers: set, add and remove (Number)
#Info: This was a test to see how minecraft handles block hardness/durability.
#This expression applys to all blocks of it's type. Not just one.
#When setting this, say you set the value to like 5.5 or something.
#The block won't break until the durability of the block has reached 5.5. This will stay contant.
#So if you break a block it won't break until X ticks after, this isn't the value 5.5 that's in ticks.
#It's just a strange mechanic I was playing around with. I thought the outcome would be different, but my hypothesis was wrong.
#Anyways you can get the hardness of any block which can be helpful.
[the] block (break delay|durability|hardness) of [all] %block%
[all] %block%'s block (break delay|durability|hardness)
Test script:
Code (skript (Unknown Language)):
command /hardness [<number>]:
    trigger:
        broadcast "%block hardness of target block%"
        if arg 1 is set:
            set block hardness of target block to arg 1
            broadcast "&cNew: %block hardness of target block%"
command /test:
    trigger:
        set {_this} to bungeecord uuid of player
        broadcast "%{_this}%"
        set {_this} to bungeecord uuid of "%player%"
        broadcast "%{_this}%"
        set {_this} to bungeecord uuid of "%uuid of player%"
        broadcast "%{_this}%"
----------, Mar 3, 2017

Fixed a scoreboard issue where if you updated the slot and text at the same time, the text would get cut off.

Also made the scoreboards about 25% faster
----------, Feb 27, 2017

Fixed:
- Crashing bug with image class

Added:

- Inventory rows size
- Make inventory size settable (Needs to be multiple of 9)
- Made open inventory effect not flash or move cursor of player

Syntax:
Code (skript (Unknown Language)):
   #Changers: set (Number)
   #This is the size of rows
   [skellett] (gui|menu|inventory|chest|window) row[s] (of|from) %inventory%
   %inventory%'s (gui|menu|inventory|chest|window) row[s]
----------, Feb 24, 2017

Added:
- Beta support for SQLite or any SQL driver. You can now input your class path and SQLite option.
- Added create a blank map.

Fixed:
- Fixed a critial bug when connecting to MySQL using the connect syntax.
- Small bugs

Syntax:
Code (skript (Unknown Language)):
Expressions:
     
    #Returns a new blank map created for a world
    [skellett] [a] new map[[ ]view] (for|from|with) [world] %world%
----------, Feb 22, 2017

I made the Stylish scoreboards anti-flicker. No changes to the syntax or anything. I just rewrote the system so it doesn't flicker anymore. :p

I have tested it and with a TPS of 19.95+ you will get no flicker at all. But if you start to drop FPS like below 19.95 you start to see some flicker. This only happens when you contantly update the scoreboard ticks at a time like in this video. It won't flicker at all if you don't update by a tick everytime.

In this video i'm updating 15 lines every tick. Which is insane and you can see no flicker running 19.96+ tps (In the video) but when it drops like I said you will notice flicker. This is shown in the video.



Example script:

Code (skript (Unknown Language)):
function animate(p: player):
    add "&a", "&b", "&c", "&d", "&e", "&1", "&2", "&3", "&4", "&5", "&6", "&7", "&8", "&9" and "&f" to {_d::*}
    set {_t} to "This is some text made for testing yeeeeeeeeeeeeeee!"
    set {_num} to a random integer out of {list::*}
    remove {_num} from {list::*}
    #set {_time} to "%random integer between 1 and 3% ticks" parsed as timespan
    loop (the length of {_t}) times:
        wait a tick
        set {_s} to subtext of {_t} from characters loop-number to (loop-number + 32)
        set the text of id "%{_p}%Slot%{_num}%" to "%{_d::%{_num}%}%&6%{_s}%"
command /testing:
    trigger:      
        add "&a", "&b", "&c", "&d", "&e", "&1", "&2", "&3", "&4", "&5", "&6", "&7", "&8", "&9" and "&f" to {_d::*}
        if stylish scoreboard "T-%player%" does not exist:
            create new stylish scoreboard named "T-%player%"
            loop 15 times:
                if loop-number is not 15:
                    add loop-number to {list::*}
                create a new id based score "%player%Slot%loop-number%" with text "%{_d::%loop-number%}%" slot loop-number for stylish scoreboard "T-%player%"
        set title of stylish scoreboard "T-%player%" to "&a&lSkellett"
        set stylish scoreboard of player to "T-%player%"
        set the text of id "%player%Slot15" to "&a&lSkellett stylish scoreboards ftw"
        loop 50 times:
            animate(player)
            wait "%random integer between 1 and 10% ticks" parsed as timespan
        delete {list::*}
        wait a second
        message "done"
        loop 15 times:
            delete the id based score "%player%Slot%loop-number%" in stylish scoreboard "T-%player%"
        delete stylish scoreboard "T-%player%"
        loop 15 times:
            delete the id based score "%player%Slot%loop-number%" in stylish scoreboard "TEST-%player%"
        delete stylish scoreboard "TEST-%player%"
If you find any bugs with the stylish scoreboards please tell me and downgrade to 1.8.1.

Hope you enjoy!

Make something cool with stylish scoreboards? Send me a gif/image I would love to see it!
----------, Feb 21, 2017

Added:
- Clientside world borders. This means that these borders are only seen to a player.

Fixed:
- Some bug fixes

Syntax:

Code (skript (Unknown Language)):
Client borders:

    Expressions:
       
        #Changers: set (Location)
        #Info: The location ignores the y coordinate
        [client [side]] [world] border center [location] (for|of) %player%
        %player%'s [client [side]] [world] border center [location]
       
        #Changers: set, add, remove and reset (Number)
        #Info: Resetting it returns it to like how a new border would be made
        [client [side]] [world] border size (for|of) %player%
        %player%'s [client [side]] [world] border size
       
        #Changers: set, add, remove and reset (Number)
        #Info: Resetting it returns it to like how a new border would be made
        [client [side]] [world] border [damage] buffer (for|of) %player%
        %player%'s [client [side]] [world] border [damage] buffer
       
        #Changers: set, add, remove and reset (Number)
        #Info: Resetting it returns it to like how a new border would be made
        [client [side]] [world] border damage [amount] (for|of) %player%
        %player%'s [client [side]] [world] border damage [amount]
       
        #Changers: set, add, remove and reset (Integer)
        #Info: Resetting it returns it to like how a new border would be made
        [client [side]] [world] border warning [time] (for|of) %player%
        %player%'s [client [side]] [world] border warning [time]
       
        #Changers: set, add, remove and reset (Integer)
        #Info: Resetting it returns it to like how a new border would be made
        [client [side]] [world] border warning distance (for|of) %player%
        %player%'s [client [side]] [world] border warning distance
Example script:
Code (skript (Unknown Language)):
command /b:
    trigger:
        set client border warning distance of player to 100
        set client border center location of player to player's location
        broadcast "&6%client border center location of player%"
        broadcast "%client border size of player%"
        loop 20 times:
            set client border size of player to loop-number
            broadcast "%client border size of player%"
            wait a second
        reset client border warning distance of player
Info:
- There are two new config options added. The first one is to save and get any changes that were using when using client borders. You can enable and disable this. The second option is to change the client borders into world borders. You can make the worldborders act like normal borders aswell.

#SpreadLoveForGavin
----------, Feb 19, 2017

This update doesn't add much for the spigot side of things. This version is mainly used to support the new SkellettProxy update. You can read more about it here https://www.spigotmc.org/resources/...-plugin-for-skript.35636/update?update=145503

I fixed a few small bugs though.
----------, Feb 19, 2017

Added:
- Update inventory
- Open book client side
- Hitbox sizes of entities
- Player viewing credits
- Entity in water
- Full spawner support

Fixed:
- Add page with string not working
- More null pointers

Syntax:
Code (skript (Unknown Language)):
Effects:

   update [the] (inventory|menu|gui) %inventory%

   open book %itemstack% to %player%

Expressions:

   [the] hitbox length of %entity%
   %entity%'s hitbox length
   [the] length of %entity%'s hitbox

   [the] hitbox width of %entity%
   %entity%'s hitbox width
   [the] width of %entity%'s hitbox

Conditions:

   [player] %player% (1¦is|2¦is(n't| not)) viewing [the] credits

   [entity] %entity% (1¦is|2¦is(n't| not)) in water

Spawners:

   Expressions:

       #Changers: set, add and remove (Integer)
       delay (of|from) spawner [at] %block%
       %block%'s spawn[er] delay
       spawn[er] delay (of|from) %block%
 
       #Changers: set (String)
       (entity|mob|creature) [type] (of|from) spawner [at] %block%
       %block%'s spawn[er] (entity|mob|creature) [type]
 
   Effects:

       (make|force) spawner [at] %block% to spawn [[a[n]] entity]
 
   Events:

       [on] spawner spawn:
     
           #Get the spawner used to spawn the entity
           event-block
     
           #Get entity spawned
           event-entity
Example script:
Code (skript (Unknown Language)):
#command /egg:
#    trigger:
#        set {_p} to the eggwars player player
#        broadcast "%{_p}%"
command /hello:
    trigger:
        if enchantments of player's tool are set:
            loop all enchantments on player's tool:
                add "%loop-enchantment% %enchantment level of loop-enchantment in player's tool%" to {_enchantments::*}
            broadcast "%{_enchantments::*}%"
command /i <itemtype>:
    trigger:
        give player arg 1
#on npc rightclick:
#    if id of npc event-npc is 6:
#        make event-player execute command "say hi"
command /hi:
    trigger:
        open "HOPPER" to player
        wait 2 seconds
        open "BEACON" to player
#on join:
#    while player is online:
#        wait a second
#        if player is viewing the credits:
#            broadcast "&aYes"
#        else:
#            broadcast "no"
command /test:
    trigger:
        skellett nms of target entity
command /example:
    trigger:
        if target entity is in water:
            broadcast "&bYes"
        else:
            broadcast "no"
command /spawnTest:
    trigger:
        set mob type of spawner target block to "Zombie"
        message "%mob of spawner target block%"
on spawner spawn:
    broadcast "%event-block%"
    broadcast "%event-entity%"
command /size:
    trigger:
        message "%target entity%: %hitbox length of target entity% x %hitbox width of target entity%"
command /search <text>:
    trigger:
        message " "
        loop all packettypes:
            if "%loop-value%" contains "%arg 1%":
                message "&6%loop-value%"
        message " "
command /openBook:
    trigger:
        set {_item} to slot player's current hotbar slot of player
        set slot player's current hotbar slot of player to a written book
        add page "&4&l&m-&a&l*&4&l&m__ &2&l&nSkellett&4&l&m __&a&l*&4&l&m-&r%nl%%nl%%nl%%nl%%nl%%nl%%nl%%nl%%nl%%nl%           &dHot" to player's tool
        open book player's tool to player
        set slot player's current hotbar slot of player to {_item}
Info:
- Skellett has had weekly updates for nearly 3+ months now. That's how we do it!
- I'm sick right now. So that may or may not decrease my productivity.
- I'm starting to play around with NMS stuff now. As you can tell by this update. None of it expect spawners can be obtained in Spigot. This all uses NMS with Reflections. Meaning you won't have to worry about Skellett breaking on version changes. Unlike the others. I will tend to keep it that way aswell.
- Everything in Spigot is pretty much possible in Skellett so i'm moving to NMS now. If you have any suggestions or things that are possible, feel free to tell me :emoji_grinning:

GG
----------, Feb 15, 2017

Added:
- Custom name toggle
- Multiple slot expression

Fixed:

- Fixed creating scoreboard not working
- Fixed some bugs
- Fixed some null pointers

Changed:
Code (skript (Unknown Language)):
[a] [new] (npc|citizen) [with] (name[d]|id|string) %string% [and] [with] [entity [type]] %string%
[a] [new] npc [with] [entity [type]] %string% [and] [with] (name[d]|id|string) %string%
Syntax:
Code (skript (Unknown Language)):
Expressions:
 
    #Changers: set (Boolean)
    [skellett] custom name visib(le|ility) of %entity%
    [skellett] visib(le|ility) of %entity%'s custom name
     
    #Changers: set, reset, remove, remove all and delete (ItemStack)
    [items (from|of|in)] slots %numbers% (from|of|in) %inventory%
----------, Feb 14, 2017

Added:
- Citizen get Npc by ID or Entity
- PlayerPoints support
- SkellettProxy online status

Fixed:
- Folders being generated when using the create file syntax or using yaml with a file that didn't exist.
- Fixed Seemless potion's syntax not working.
- Fixed a critical bug that made Skellett not work on 1.8-1.10 versions
- Fixed some null pointers

Syntax:


Code (skript (Unknown Language)):
Npc:
   
    Expressions:
       
        [the] (npc|citizen) (of|from) entity %entity%
       
        [the] (npc|citizen) (of|from) [id] %number%

PlayerPoints:
   
    Expressions:
   
        #Changers: set, add, remove/subtract, remove all and delete
        [the] [player[ ]]points of [(player|uuid)] %string%
        [(player|uuid)] %string%'s [player[ ]]points
       
    Effects:
   
        pay %string% %number% [player[ ]]points from %string%['s account]
        [(force|make)] %string% [to] pay %number% [player[ ]]points to %string%
       
SkellettProxy:

    Expressions:
   
        [the] [(skellett[ ][(cord|proxy)]|bungee[ ][cord])] online [status] of (skellett[ ][(cord|proxy)]|bungee[ ][cord]) server %string%
Please note that you will need the latest SkellettProxy in order to use the new SkellettProxy syntax.
----------, Feb 9, 2017

Yes it's true. For the first time in Skript history you will now be able to run ANY effect on another server connected to your bungeecord! This means cross variable sharing, Data transfering and so much more!

Added:

- CROSS BUNGEECORD EFFECT
- BETA BUNGEE EVENTS
- Full control over all servers and Bungeecord (Mainly a feature for myself)
- Communication between all servers
- Probably alot of bugs. If you find any please report

Fixed:
- Some bugs

Syntax:
Code (skript (Unknown Language)):
[on] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) player (disconnect|leave)

eval[uate] [skript] [code] %string% (on|from) [the] [bungee[ ][cord]] [server] %string%
Example script:
Code (skript (Unknown Language)):
on script load:
    evaluate "set {testing} to ""&6&lYES""" on bungeecord server "Tests2"
    evaluate "broadcast ""&6&lWhat the actual ****!!!!!""" on bungeecord server "Tests2"
    broadcast "sent"
on bungee player leave:
    broadcast "%event-player%"

Info:
- I'm currently working on more bungeecord event plus event values for them. (This is litterally badness to code. Currently the events work but the event-values and data don't)
- I am planning on making bungeecord expressions aswell.
- If you find any bugs or small null pointers please notify me of it.
- Thank you for 100 downloads on SkUnity. It means alot <3
- Don't forget to leave a 5 star review as this is litterally madness right now :D
- I have been working on this project for a week non stop. I have just been so hooked into making this a reality, well now it's finally a thing.
- The Bungee events are currently under beta testing. Feel free to try them if you please. You will need to setup a port and enable the Events node found in the SkellettProxy.yml all features from the events are in beta so just be cautious about that. They shouldn't be harmless to your server in any ways.

The string used for the server string in the Max players and Evaluate syntax is the name of the server from the server.properties. So if the name of a bungeecord connected server is Test2 is in the server.properties. That is what the string will be. If this is still confusing and you don't get how to make it work, feel free to contact me.

This version needs SkellettProxy 1.2.5+ to run
----------, Feb 2, 2017

Added:
- Support for the new server watcher in SkellettProxy
- Added Max players of bungeecord server
Code (skript (Unknown Language)):
[the] max[imum] [amount] [of] players for (skellett[ ][(cord|proxy)]|bungee[ ][cord]) server %string%
- Added get Entity from uuid
Code (skript (Unknown Language)):
[skellett] entity (from [the]|of) (uuid|[universal] unique id) %string%
Fixed/Changed:
- Changed syntaxs
Code (skript (Unknown Language)):
[skellett] [get] item[s] (of|in|inside|within) entity %entity%
[skellett] (size|number|amount) of item[[ ]stack] %itemstack%
Info:
If you don't know what SkellettProxy is. Basically it's a way to give full control over the entire Bungeecord within Skript. You can read more about it here
https://forums.skunity.com/resources/skellettproxy.87

If you use SkellettProxy you need the latest 1.2.4 update https://forums.skunity.com/resources/skellettproxy.87/update?update=127
----------, Jan 31, 2017

Fixed/Changed:
- Changed syntax:
Code (Text):
[skellett] (size|number|amount) of item[[ ]stack] %itemstack%
- A few null pointers
- SkellettProxy issue
- 1.8.8 issue
- Small syntax issues.

I have been doing alot of testing on minor things to make sure Skellett is as stable as can be :D
----------, Jan 27, 2017

Fixed:
- A Tuske issue
- Some syntax interference as reported by @F8te (lol that double tag)
- Code clean
- Updated some syntax to new style
- Bug fixes
- More null pointer fixes
----------, Jan 26, 2017

Fixed/Changed:
- Changed a bolding format in the /skellett syntax toggles.
- A little bit of code cleaning. No noticeable change.
- Fixed a 1.8 bug with the breeding event.
- Fixed a few null pointers.
- Fixed not being able to change the age of zombies.
- Changed syntax:
Code (Text):
%player% (1¦is|2¦is(n't| not)) (running|using) [the] [client] SquidHQ [client]
Test script:
Code (Text):
command /spawnmob:
    trigger:
        spawn 1 of zombie
        set {_entity} to last spawned zombie
        if {_entity} is an adult:
            broadcast "yes"
        else:
            broadcast "no"
        make {_entity} a baby
----------, Jan 26, 2017

Added:
- Ability to hide and show players to other players
- Async ability for the regenerators (Enable and Info in the config.yml)

Fixed:
- LibsDisguise crashing error on startup
- A few null pointers

New Syntax:
Code (Text):
#Effects:

    [skellett] hide [player] %player% from %players%
 
    [skellett] show [player] %player% to %players%

#Expressions:

    #Loopable
    [(the|all)] [of] [the] hidden players (of|from) %player%
    [all] [of] %player%'s hidden players
----------, Jan 24, 2017

Added:
- Remade LibsDisguise support
- Added an update checker
- Added an option to use MySQL AutoReconnect
If the value "AutoReconnect" doesn't exist in your MySQL.yml remove the MySQL.yml and restart
or add the value "AutoReconnect: true" if you want to use this feature and it's not there.
-
Citizens events
- Regenerators (Fast way to save and rebuild blocks)
- Potion effect without particles
- Player ping (With reflection built in)
- Piston toggle state
- Repeater delay
- More blockstate stuff
- CorpseReborn support

Fixed:
- Fixed a null pointer in custom name
- Fixed a null pointer in Fall distance
- Fixed two syntax errors
- changed this syntax added [player]
Code (Text):
[the] (skellett[ ][(cord|proxy)]|bungee[ ][cord]) [player] (uuid|unique[ ]id) of [player] %player%
(skellett[ ][(cord|proxy)]|bungee[ ][cord]) %player%['s] (uuid|unique[ ]id)
New Syntax:
Code (Text):
#Effects:

   [skellett] apply [potion[s]] [of] %potioneffecttype% [potion] [[[of] tier] %-number%] to %livingentities% [for %-timespan%] [[and] ambient %-boolean% [hide [particle [effects] %-boolean% [colo[u]r %-color%]]]

#Expressions:
 
   [skellett] [dye[d]] [colo[u]r] [of] %itemstack% [to] (colo[u]r[ed]|dyed) %color%
 
   [skellett] ping of [player] %player%
   [skellett] %player%'s ping
 
   #Changers: set (Boolean)
   [skellett] piston[s] (power|toggle) [state] of %block%
   %block%'s piston (power|toggle) [state]
 
   #Changers: set (Integer)
   #Info: This is the repeater tick delay
   [skellett] [redstone] repeater[s] [(redstone|power)] delay of %block%
   [redstone] repeater %block%'s [(redstone|power)] delay
 
#Conditons:
 
   [piston] %block% (1¦is|2¦is(n't| not)) [a] sticky [piston]
 
#Regenerators:

   #Expressions:
   
     #Changers: set (Location)
     #Info: Once changed the regenerator will rebuild itself then reconfigure itself
     pos[ition][ ]1 of [skellett] regenerator [[with] id] %string%
   
     #Changers: set (Location)
     #Info: Once changed the regenerator will rebuild itself then reconfigure itself
     pos[ition][ ]2 of [skellett] regenerator [[with] id] %string%
   
     #Loopable
     [(the|all)] [of] [the] [skellett] regenerator [ids]
   
   #Effects:
   
     create a regenerator with ID "test" from player's location to location of target block
     (create|make) [a] [new] [skellett] regenerator with ID %string% (from|within) [location[s]] %location% (to|and) %location%
   
     #Info if te rebuild is not defined it will default to true
     (delete|remove) [the] [skellett] regenerator with ID %string% [re[ ]build %-boolean]
   
     re[ ]configure [the] [skellett] regenerator with ID %string%
   
     re(generate|[ ]build) [the] [skellett] regenerator with ID %string%
   
   #Conditions:
 
     [skellett] regenerator with id %string% (1¦does|2¦does(n't| not)) exist

#Citizen stuff:

   #Events:
   
     [on] (npc|citizen) damage (by|from) [a[n]] entity
     
       #Get the attacker
       event-entity
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get damage cause in String
       event-string
     
       #Get or set the damage (Number)
       [the] (citizen|npc) damage
     
     [on] (npc|citizen) damage (by|from) [a] block
     
       #Get the block
       event-block
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get or set the damage (Number)
       [the] (citizen|npc) damage
   
     #This is called when a citizen attacks
     [on] (npc|citizen) entity damage
   
       #Get the victim
       event-entity
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get or set the damage (Number)
       [the] (citizen|npc) damage
   
     [on] entity target (npc|citizen)
   
       #Get the entity that targeted this npc
       event-entity
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get the target reason
       [the] target reason
     
     [on] (npc|citizen) [(right|left)] click
   
       #Get the player that clicked the NPC
       [the] (citizen|npc) [event[(-| )]](player|clicker)
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) [entity] colli(sion|de)
     
       #Get the entity that was collided with
       event-entity
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) (combust[ion]|ignition) (by|from) [a] block
     
       #Get the block
       event-block
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get or set the combustion time (Number)
       [the] (citizen|npc) [event[(-| )]](combust[ion]|ignition) time
     
     [on] (npc|citizen) (combust[ion]|ignition) (by|from) [a[n]] entity
     
       #Get the entity
       event-entity
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get or set the combustion time (Number)
       [the] (citizen|npc) [event[(-| )]](combust[ion]|ignition) time
     
     [on] (npc|citizen) create
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) despawn
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
       #Get despawn reason
       [the] [(npc|citizen)] despawn reason
     
     [on] (npc|citizen) ender[[ ]pearl] [teleport]
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) (push|(vector|velocity) change)
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) remove
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) sel[ect[ed]]
     
       [the] (citizen|npc) [player] selector
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] (npc|citizen) spawn
     
       #Get the location
       event-location
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)
   
     [on] (npc|citizen) teleport
     
       #Get the future location.
       event-location
           
       #Get the NPC
       [the] [event(-| )](citizen|npc)
     
     [on] player create (npc|citizen)
     
       #Get the creator
       event-player
     
       #Get the NPC
       [the] [event(-| )](citizen|npc)

   #Condtions:
 
     [entity] %entity% (1¦is|2¦is(n't| not)) [a[n]] (npc|citizen)
 
   #Effects:
 
     (delete|unregister) (npc|citizen) %npc%
   
     (delete|unregister|remove) [(the|all)] [of] [the] (npcs|citizens)

#CorpseReborn stuff:

   #Effects:
 
     (spawn|create) [a] corpse [with] [player [data]] %player% at %location% [with] id %string% [[with] inventory %-itemstacks%] [[with] helmet %-itemstack%[(,| and)] chestplate %-itemstack%[(,| and)] leg[ging][s] %-itemstack%[(,| and)] boot[s] %-itemstack%] [holding [item] %-itemstack%] [[and] offhand [item] %-itemstack%]]
   
     (delete|unregister|remove) (the|all) [of] [the] corpse[s]
   
     (delete|remove|unregister) corpse %corpse%
   
   #Expressions:
 
     #Loopable
     [(the|all)] [of] [the] corpse[s]
   
     [the] corpse with ID %string%
   
     #Changers: set (Player)
     [the] player of corpse %corpse%
     corpse %corpse%'s player
   
#LibsDisguises stuff:

   #Expressions:
 
     [a] [new] disguise [with] type %disguisetype% [with block [id] %-integer%] [(and|with) data [id] %-integer%] [with [user[ ]]name %-string%] [(and|with) baby [state] %-boolean%]
   
     disguise type of %entities%[[']s]
     %entities%'s disguise type
   
     #Changers: set (Disguise)
     #Info: if the player option is set this will make the entities disguise client side to that player
     disguise [of] %entities%[[']s] [(to|from) player %player%]
     %entities%'s disguise [(to|from) player %player%]
   
     #Info: This gets all possible disguises that different players can see of this entity
     [(the|all)] [of] [the] client [viewed] disguise[[']s] [of] %entity%
   
     #Changers: set (Boolean)
     self view[ing] disguise [state] of %entities%[[']s]
     %entities%'s self view[ing] disguise [state]
   
     #Changers: set (Entity)
     [the] entity of disguise %disguise%
     %disguise%'s disgusie entity
   
     [(the|all)] [of] [the] armo[u]r of disguise %disguise%
     %disguise%'s armo[u]r
   
     #Changers: set (ItemStack)
     [held] item of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s [held] item
   
     #Changers: set (ItemStack)
     [held] offhand item of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s [held] offhand item
   
     #Changers: set (ItemStack)
     [the] (item|equipment) [in] slot %equipmentslot% (of|in) disguise %disguise%
     [skellett] [[Libs]Disguises] slot %equipmentslot% (of|in) disguise %disguise%
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] (burning|ignited|lit) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s (burning|ignited|lit) [state]
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] (vanish[ed]|invisible) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s (vanish[ed]|invisible) [state]
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] (sprint[ing]|run[ning]) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s (sprint[ing]|run[ning]) [state]
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] (sneak[ing]|crouch[ing]) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s (sneak[ing]|crouch[ing]) [state]
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] (block[ing]|right[(-| )]click[ing]) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s (block[ing]|right[(-| )]click[ing]) [state]
   
     #Changers: set (Boolean)
     [skellett] [[Libs]Disguises] name visib(le|ility) [state] of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s name visib(le|ility) [state]
   
     #Changers: set (String)
     [skellett] [[Libs]Disguises] [custom] name of disguise %disguise%
     [skellett] [[Libs]Disguises] %disguise%'s [custom] name
   
   #Effects:
   
     un[( |-)]disguise %entity%
   
   #Condition:
   
     [(entity|player)] %entity% (1¦(is|[does] (ha(s|ve)))|2¦(do[es](n't| not) have|is(n't| not))) [a] disguise[d]
     [(entity|player)] %entity% is disguised
     [(entity|player)] %entity% is(n't| not) disguised
     [(entity|player)] %entity% [does] (ha(s|ve)) [a] disguise
     [(entity|player)] %entity% do[es](n't| not) have [a] disguise
   
     disguise %disguise% (1¦(is|[does] (ha(s|ve)))|2¦(do[es](n't| not) have|is(n't| not))) [a] [custom] name
Test script:
Code (Text):
command /example:
    trigger:
        spawn a corpse with player data player at location of player with id "Test" with inventory air with helmet diamond helmet, chestplate diamond chestplate, legs diamond leggings, boots diamond boots holding diamond sword
command /exampledel:
    trigger:
        set {_corpse} to corpse with ID "Test"
        unregister corpse {_corpse}
command /test1:
    trigger:
        if target block is a piston:
            broadcast "%piston power of target block%"
            set piston power of target block to true
            broadcast "%piston power of target block%"
            if target block is not a sticky piston:
                broadcast "test"
            else:
                broadcast "test1"
        else if target block is a repeater:
            broadcast "%redstone repeater delay of target block%"
            set redstone repeater delay of target block to 2
            broadcast "%redstone repeater delay of target block%"
command /ping:
    trigger:
        broadcast "Your ping: %ping of player%"
command /regen:
    trigger:
        if regenerator with id "test" does exist:
            regenerate regenerator with ID "test"
            message "done"
        else:
            message "hello?"
command /testd:
    trigger:
        if player is not disguised:
            set {_d} to a new disguise with type PLAYER with username "%player%"
            set disguise of player to {_d}
            set self viewing disguise state of player to true
            broadcast "%self viewing disguise state of player%"
            set {_e} to the entity of disguise {_d}
            broadcast "&e%{_e}%"
            broadcast "&b%armour of disguise {_d}%"
            set item slot HEAD of disguise {_d} to diamond helmet
            set item slot CHEST of disguise {_d} to diamond chestplate
            set item slot LEGS of disguise {_d} to diamond leggings
            set item slot FEET of disguise {_d} to diamond boots
            broadcast "&b%armour of disguise {_d}%"
            set held item of disguise {_d} to stone sword
            set held offhand item of disguise {_d} to stone pickaxe
            broadcast "%item in slot HAND of disguise {_d}%"
            set burning state of disguise {_d} to true
            broadcast "%vanished state of disguise {_d}%"
            set sprinting state of disguise {_d} to true
            set sneaking state of disguise {_d} to true
            set blocking state of disguise {_d} to true
            set name visibility of disguise {_d} to true
            set custom name of disguise {_d} to "&6&l%player%"
        broadcast "%disguise type of player%"

Info:
For the %equipmentslot% type. Here are the types for it

CHEST
FEET
HAND
HEAD
LEGS
OFF_HAND


The regenerators are basically a quick way to save blocks within two locations and then that data can be regenerated anytime. This is good for minigames that need to restore alot of blocks after a game has just been played. I added this because I noticed that Skript is very slow at writing block types to the variable database. So I made a quick and simple way to do the same thing that variables do but way way way faster.

If you have any questions or need help with anything, feel free to use the discussion page and I will help you as soon as I can.
----------, Jan 22, 2017

Quick fix
----------, Jan 13, 2017

[​IMG]
Added:
- 100% Rendering Map support
- Piston reaction
- Added a get hologram from ID syntax
- Added get all hologram id's
- Made the hologram text line settable
- Ability to get hologram items in a line and set them
- Block is powered (Redstone wise)

Fixed:
- Some syntax bugs
- Few fixes

Syntax:
Code (Text):
#Expressions:

   #Gets the piston reaction state of what is going to happen if a piston was to extend this block
   [the] piston [move] reaction (of|from) %block%
   %block%'s piston [move] reaction
   
   [skellett] [the] image (of|from) [the] file [(location|path)] %string%
   
   [the] [skellett] holo[gram] with ID %string%
   
   [(the|all)] [of] [the] [skellett] holo[gram][s] ids
   
   #made this settable (So you can update holograms cleaner)
   [the] [skellett] (text|string) of holo[gram] line %hologramline%
   
   #Changers: set (ItemStack)
   [the] [skellett] item[[ ](type|stack)] of holo[gram] line %hologramline%
   
   [skellett] [(the|all)] [of] [the] map cursors (in|on|for) [skellett] [map] %map%
   
   #Changers: set (Integer)
   [skellett] map cursor direction (of|for) [map[ ]cursor] %mapcursor%
   
   #Changers: set (String)
   #Info: This is a MapCursor.Type
   [skellett] map cursor type (of|for) [map[ ]cursor] %mapcursor%
   
   #Changers: set (Integer)
   [skellett] map cursor (1¦x|2¦y)(-| )(coord[inate]|pos[ition]|loc[ation])[s] of [map[ ]cursor] %mapcursor%
   
   #Changers: set (Boolean)
   [skellett] map cursor visibl(e|ity) [state] (of|for) [map[ ]cursor] %mapcursor%
   
   #Changers: set (Number)
   #Info: The number is a byte being a colour on Spigot's MapColour scale
   [skellett] map pixle [colo[u]r] at [coordinate[s]] [x] %number%(,| and) [y] %number% (on|in) [skellett] map %map%
   
#Conditons:

   [block] %block% (1¦(is|has)|2¦(is|has)(n't| not)) [got] [redstone] powered
   
   [map] %map% (1¦is|2¦is(n't| not)) being handled [by skellett]
   
#Effects:

   (manage|override|overwrite|create) [skellett] map %map% [[and] [with] override %-boolean%]
   
   (show|send|display) [skellett] [custom] map %map% to %players%
   
   draw [buffered] image %image% [at [coordinate[s]] [x] %number%(,| and) [y] %number%] on [skellett] map %map%
   
   draw [map] cursor %string% pointing %number% at [coordinate[s]] [x] %number%(,| and) [y] %number% on [skellett] map %map%
   
   (erase|clear|remove|delete|unregister) [skellett] map %map%
Byte colours:

TRANSPARENT = 0
GRASS = 1
SAND = 2
RED = 4
SKY_BLUE = 5
GRAY = 6
GREEN = 7
WHITE = 6
LIGHT_GRAY = 9
LIGHT_BROWN = 10
DARK_GRAY = 11
BLUE = 12
FADED_BROWN = 13
FADED_WHITE = 14
GENERAL_ORANGE = 15
GENERAL_MAGENTA = 16
GENERAL_LIGHT_BLUE = 17
GENERAL_YELLOW = 18
GENERAL_LIME = 19
GENERAL_PINK = 20
GENERAL_GRAY = 21
GENERAL_LIGHT_GRAY = 22
GENERAL_CYAN = 23
GENERAL_PURPLE = 24
GENERAL_BLUE = 25
GENERAL_BROWN = 26
GENERAL_GREEN = 27
GENERAL_RED = 28
GENERAL_BLACK = 29
GOLD = 30
DIAMOND_BLUE = 31
LAPIS_BLUE = 32
EMERALD_GREEN = 33
OBSIDIAN_BLACK = 34
COLOR_NETHER = 35
Any numbers higher than this are untested. I have no clue where it stops

Cursor types:

BLUE_POINTER
GREEN_POINTER
RED_POINTER
WHITE_CROSS
WHITE_POINTER

Test script:
Code (Text):
on map:
   set {_map} to event-map
   set scale of map {_map} to FARTHEST
   broadcast "%scale of map {_map}%"
   manage skellett map {_map}
   if map {_map} is being handled by skellett:
     set {_image} to image from the file path "plugins\Skellett\test.png"
     draw image {_image} on skellett map {_map}
     draw text "&aSexy" at 44, 30 on skellett map {_map}
     draw cursor "BLUE_POINTER" pointing 1 at 50, 50 on skellett map {_map}
     loop all players:
       send map {_map} to loop-player
     stop
     loop all of the map cursors in skellett map {_map}:
       broadcast "&a%map cursor direction of cursor loop-value%"
       set map cursor direction of cursor loop-value to 5
       broadcast "&2%map cursor direction of cursor loop-value%"
       broadcast "&c%map cursor type of cursor loop-value%"
       set map cursor type of cursor loop-value to "RED_POINTER"
       broadcast "&4%map cursor type of cursor loop-value%"
       broadcast "&b%map cursor x-coord of cursor loop-value%"
       set map cursor x-coord of cursor loop-value to 30
       broadcast "&1%map cursor x-coord of cursor loop-value%"
       broadcast "&3%map cursor y-coord of cursor loop-value%"
       set map cursor y-coord of cursor loop-value to 30
       broadcast "&9%map cursor y-coord of cursor loop-value%"
       broadcast "&7%map cursor visible state of cursor loop-value%"
       set map cursor visible state of cursor loop-value to false
       broadcast "&8%map cursor visible state of cursor loop-value%"
       wait a second
       set map cursor visible state of cursor loop-value to true
       add "WHITE_POINTER", "GREEN_POINTER", "RED_POINTER", "WHITE_CROSS" and "BLUE_POINTER" to {_s::*}
       loop {_s::*}:
         set map cursor type of cursor loop-value-1 to loop-value-2
         wait 10 ticks
     broadcast "&f%map pixle at 50, 50 in skellett map {_map}%"
command /test:
   trigger:
     if target block is not redstone powered:
       broadcast "no"
     else:
       broadcast "yes"
If you need help with anything in this update feel free to reply in the discussion page, and I will help you as soon as I can.
----------, Jan 13, 2017

Added:
- Entity age
- Entity age lock
- Entity breeding state
- Entity baby and adult state
- Entity UUID
- Numbers within String
- World of location
- Stylish board exists condition

Syntax:
Code (Text):
#Effects:

   [(make|set)] [entity] %entity% [to] [a[n]] (1¦baby|2¦adult)

#Expressions:

   [get] [the] (digit|num[ber])[s] (of|from|in) %string%
   
   #Changers: set (Integer)
   [skellett] age of [entity] %entity%
   [entity] %entity%'s age
   
   #Changers: set (Boolean)
   #Info: This locks the age of an entity
   [skellett] age lock of [entity] %entity%
   [entity] %entity%'s age lock
   
   #Changers: set (Boolean)
   #Info: This toggles the ability for an entity to breed
   [skellett] breeding state of [entity] %entity%
   [entity] %entity%'s breeding state
   
   #Changers: set (World)
   [skellett] world (of|from) [location] %location%
   
   [skellett] (uuid|[universal] unique id) of [entity] %entity%
   [entity] %entity%'s (uuid|[universal] unique id)

#Conditions:

   [entity] %entity% (1¦is|2¦is(n't| not)) [a[n] adult

   [entity] %entity% (1¦can|2¦(can([ ]no|')t) breed

   (stylish|style|simple) [score][ ]board %string% (1¦(is set|[does] exist[s])|2¦(is(n't| not) set|does(n't| not) exist[s]))
Enjoy using the sexyest Skript addon!
----------, Jan 12, 2017

Added:
- Support for RPG Player Leveling

Fixed:

- Some bugs

Syntax:
Code (Text):
#Changers: set (Number)
[the] rpg leveling (xp|experience) of player %player%
%player%'s rpg leveling (xp|experience)

#Changers: set (Number)
[the] rpg leveling mana of player %player%
%player%'s rpg leveling mana

[the] rpg leveling max (level|xp|experience) of player %player%
%player%'s rpg leveling max (level|xp|experience)

[the] rpg leveling max mana of player %player%
%player%'s rpg leveling max mana

[the] rpg leveling max power of player %player%
%player%'s rpg leveling max power

#Changers: set (Number)
[the] rpg leveling level of player %player%
%player%'s rpg leveling level

#Changers: set (Number)
[the] rpg leveling power of player %player%
%player%'s rpg leveling power

#Changers: set (Number)
[the] rpg leveling stat[istic] point[s] of player %player%
%player%'s rpg leveling stat[istic] point[s]
----------, Jan 11, 2017

Added:
- Holograms support

Fixed:
- Syntax.yml not fully generating all syntax

New Syntax:
Code (Text):
[skellett] save [the] holo[gram] %hologram%

[skellett] remove %hologramline% from holo[gram] %hologram%

[skellett] [a] [new] [holo[gram]] line (for|in|of) holo[gram] %hologram% [and] (1¦with [(text|string)] %-string%|2¦with [item[(stack|type)]] %-itemstack%)

[the] [skellett] holo[gram] location of %hologram%
[skellett] holo[gram] %hologram%'s location

[skellett] (delete|remove) [the] holo[gram] %hologram%

[the] [skellett] height of holo[gram] line %hologramline%

[skellett] [create] [a] [new] holo[gram] at %location% [with] id %string%

[the] [skellett] holo[gram] line %number% (in|from|of) %hologram%

[skellett] add %hologramline% to holo[gram] %hologram% [(on|to) line %-number%]

[the] [skellett] location of holo[gram] line %hologramline%

[the] [skellett] visib(le|ility) [state] of holo[gram] line %hologramline%

[skellett] (despawn|clear) holo[gram] %hologram%

[(the|all)] [of] [the] [skellett] holo[gram] lines (in|from|of) %hologram%

[skellett] [re[-]]spawn holo[gram] %hologram%

[the] [skellett] holo[gram] ID of %hologram%
[skellett] holo[gram] %hologram%'s ID
[skellett] id of holo[gram] %hologram%

[skellett] (delete|remove|clear) [(the|all)] [of] [the] holograms

[the] [skellett] (text|string) of holo[gram] line %hologramline%
Example script used:
Code (Text):
command /testing:
   trigger:
     set {_holo} to a new hologram at player's location with id "Example"
     set {_newLine} to a new line in hologram {_holo} with text "&6&lTesting"
     set {_newLineItem} to a new line in hologram {_holo} with itemstack diamond sword of sharpness
     add {_newLine} to hologram {_holo}
     add {_newLineItem} to hologram {_holo}
     loop all hologram lines of {_holo}:
       broadcast "%text of hologram line loop-value%"
     broadcast "ID: %hologram id of {_holo}%"
     wait 5 seconds
     delete hologram {_holo}
----------, Jan 6, 2017

Resource Information
Author:
----------
Total Downloads: 133,993
First Release: Jan 6, 2017
Last Update: Feb 21, 2024
Category: ---------------
All-Time Rating:
88 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings