Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #multiblock structure
- #rename function
- #requires: SkQuery, SkRayFall, Skellett, SkBee
- options:
- logo: &6&lBS&8:&7
- function gui(p: Player):
- open chest with 6 rows named "&8Anvil" to {_p}
- wait 2 ticks
- loop 9 times:
- set slot loop-value - 1 of {_p}'s current inventory to gray stained glass pane named "&8"
- set slot 54-loop-value of {_p}'s current inventory to gray stained glass pane named "&8"
- loop 5 times:
- set slot loop-value * 9 of {_p}'s current inventory to gray stained glass pane named "&8"
- set slot loop-value * 9-1 of {_p}'s current inventory to gray stained glass pane named "&8"
- # U T I L I T I E S
- function getNextNumber(base: number, addToDefault: number, max: number) :: number:
- set {_value} to {_base} + {_addToDefault}
- if {_value} > {_max}:
- set {_value} to {_addToDefault} - ({_max} - {_base})
- return {_value}
- function detectStair(facing: number, loc: Location, startValue: String) :: boolean:
- set {_list::*} to "westward red brick stair", "red brick stair", "eastward red brick stair" and "southward red brick stair"
- set {_dir} to {_facing}/2 + 1
- if {_dir} > 4:
- remove 4 from {_dir}
- if "%block at location of {_loc}%" is "%{_startValue}%%{_list::%{_dir}%}%":
- return true
- return false
- # F U R N A C E D E T E C T S
- function isFurnace1(below: Location) :: boolean:
- if block at {_below} is campfire:
- set {_xAdjust::*} to 1, 1, 1, 0, 0, -1, -1 and -1
- set {_zAdjust::*} to 1, 0, -1, 1, -1, 1, 0 and -1
- loop 8 times:
- set {_checkLoc} to location at x-coordinate of {_below}+{_xAdjust::%loop-value%}, y-coordinate of {_below}, z-coordinate of {_below}+{_zAdjust::%loop-value%} in world of {_below}
- if block at {_checkLoc} is not red brick block:
- return false
- else:
- return false
- return true
- function isFurnace2(loc: Location) :: boolean:
- if block at {_loc} is not blast furnace:
- return false
- set {_layer1::*} to air, brick slab, red brick block, air, red brick block, air, red brick block and brick slab
- set {_layer2::*} to air, red brick stair, eastward red brick stair and southward red brick stair
- set {_x::*} to 1, 1, 0, -1, -1, -1, 0 and 1
- set {_z::*} to 0, 1, 1, 1, 0, -1, -1 and -1
- set {_base} to -2
- if block at location at x-coordinate of {_loc} + {_x::1}, y-coordinate of {_loc}, z-coordinate of {_loc} + {_z::1} in world of {_loc} is {_layer1::1}:
- set {_base} to 0
- else if block at location at x-coordinate of {_loc} + {_x::3}, y-coordinate of {_loc}, z-coordinate of {_loc} + {_z::3} in world of {_loc} is {_layer1::1}:
- set {_base} to 2
- else if block at location at x-coordinate of {_loc} + {_x::5}, y-coordinate of {_loc}, z-coordinate of {_loc} + {_z::5} in world of {_loc} is {_layer1::1}:
- set {_base} to 4
- else if block at location at x-coordinate of {_loc} + {_x::7}, y-coordinate of {_loc}, z-coordinate of {_loc} + {_z::7} in world of {_loc} is {_layer1::1}:
- set {_base} to 6
- set {_size} to size of {_x::*}
- if {_base} is not -2:
- loop 7 times:
- set {_value} to getNextNumber({_base}, loop-value, {_size})
- if block at location at x-coordinate of {_loc} + {_x::%{_value}%}, y-coordinate of {_loc}, z-coordinate of {_loc} + {_z::%{_value}%} in world of {_loc} is not {_layer1::%loop-value%}:
- return false
- set {_facingAdjust::*} to 0, 4, 6 and 8
- if detectStair({_base}, location 1 meters above {_loc}, "top "):
- loop 4 times:
- set {_value} to getNextNumber({_base}, loop-value*2, {_size}) - 1
- set {_check} to location at x-coordinate of {_loc} + {_x::%{_value}%}, y-coordinate of {_loc} + 1, z-coordinate of {_loc} + {_z::%{_value}%} in world of {_loc}
- set {_facing} to {_base}
- if {_facing} - {_facingAdjust::%loop-value%} >= 2:
- remove {_facingAdjust::%loop-value%} from {_facing}
- else:
- add {_facingAdjust::%loop-value%} to {_facing}
- if loop-value is 1:
- if block at {_check} is not {_layer2::%loop-value%}:
- return false
- else if detectStair({_facing} - 2, {_check}, "") is false:
- return false
- if block at location 2 meters above {_loc} is not red brick block:
- return false
- else:
- return false
- else:
- return false
- return true
- # C L I C K E V E N T S
- on rightclick on smooth stone:
- if player is not sneaking:
- if {anvil.%location of clicked block%} is true:
- gui(player)
- cancel event
- on rightclick on cauldron:
- if {furnace.%location of event-block%} is true:
- if isFurnace1(location 1 meters below clicked block):
- cancel event
- send "WIP"
- else:
- delete {furnace.%location of event-block%}
- on rightclick on blast furnace:
- if {furnace2.%location of event-block%} is true:
- if isFurnace2(location of clicked block):
- cancel event
- send "WIP"
- else:
- delete {furnace2.%location of event-block%}
- on rightclick holding stone axe:
- if clicked block is smooth stone or iron block or diamond block:
- if {anvil.%location of event-block%} is not true:
- set {anvil.%location of event-block%} to true
- set {_tier} to "Tier I"
- if clicked block is smooth stone:
- set {anvil.%location of event-block%.tier} to 1
- else if clicked block is iron block:
- set {anvil.%location of event-block%.tier} to 2
- set {_tier} to "Tier II"
- else:
- set {anvil.%location of event-block%.tier} to 3
- set {_tier} to "Tier III"
- set {_s} to 6
- loop all players in radius 6 around event-block:
- set {_v} to ({_s} - distance between loop-player and event-block)
- play sound "block.anvil.place" with volume {_v} and pitch 0 to loop-player
- send "{@logo} Successfully created an anvil of %{_tier}%."
- summon armor stand at location 0.6 meters below event-block
- set name of last spawned armor stand to "&7Anvil"
- add "{Invisible:1b,NoGravity:1b,NoAI:1b,CustomNameVisible:1}" to NBT of last spawned armor stand
- summon armor stand at location 0.9 meters below event-block
- set name of last spawned armor stand to "&7%{_tier}%"
- add "{Invisible:1b,NoGravity:1b,NoAI:1b,CustomNameVisible:1}" to NBT of last spawned armor stand
- else if clicked block is cauldron:
- if {furnace.%location of event-block%} is not true:
- if isFurnace1(location 1 meters below clicked block):
- set {furnace.%location of event-block%} to true
- cancel event
- send "WIP"
- else if clicked block is blast furnace:
- if {furnace.%location of event-block%} is not true:
- if isFurnace2(location of clicked block):
- set {furnace2.%location of event-block%} to true
- cancel event
- send "WIP"
- on break of smooth stone or iron block or diamond block:
- if {anvil.%location of event-block%} is true:
- set {_s} to 6
- loop all players in radius 6 around event-block:
- set {_v} to ({_s} - distance between loop-player and event-block)
- play sound "block.anvil.place" with volume {_v} and pitch 0 to loop-player
- delete {anvil.%location of event-block%}
- delete {anvil.%location of event-block%.tier}
- loop entities in radius 1 around event-block:
- if type of loop-entity is armor stand:
- kill loop-entity
- on inventory click:
- if type of clicked inventory is chest inventory:
- if inventory name of player's current inventory is "&8Anvil":
- cancel event
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement