Skellett - The beast addon!

Addon Skellett - The beast addon! 2.0.10

  • Welcome to skUnity!

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

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

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

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_language.skript:
[the] [skellett[ ][(cord|proxy)]] (global|network) [var[iable]] [(from|of)] %object%
This can only be set and grabbed at the moment.

Example:

code_language.skript:
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_language.skript:
set global variable {test} to "&6Hello world"
On other servers, all I would have to do is;
code_language.skript:
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!
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!
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_language.skript:
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 2 days 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 :emoji_stuck_out_tongue:
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. (Reported by @NeNex)
- Fixed the SkellettProxy port not accepting anything but 4 digit ports. You can now put any port you want. (Reported by @NeNex)
- 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_language.skript:
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_language.skript:
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
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 (Suggestion from @Rixic)
- 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_language.skript:
%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_language.skript:
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_language.skript:
#/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
Added event-player event value to Packets

Code:
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}%"
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_language.skript:
#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_language.skript:
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}%"
Added:
- Block durability
- Readded the string option for bungeecord UUID

Fixed:
- Some null pointers
- Bug fixes

Syntax:
code_language.skript:
#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_language.skript:
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}%"
        #Below is not recommended because it has a chance of not being the exact uuid, but a generated one.
        set {_this} to bungeecord uuid of "%uuid of player%"
        broadcast "%{_this}%"
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
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_language.skript:
   #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]