# ======================= #
# Author: KeangDavid #
# Version: 1.3.0 #
# Denizen: 0.9.7-SNAPSHOT #
# Build: 404 :) #
# Core: 1.10 #
# ======================= #
-#changes Added entities to front procedure. added COLNUM < undocumented
-#added random location
-#removed bound handeler
-
# == Contents == #
# PvP Checker
# Raw JSON Handler
# Pager
# Save Inventory
# Open Inventory
# Queue Listener
# Book Interface
# Front Finder
# Basic Toggle
# Color Numbers
+# Random Location
#-----------------Player vs Player Check-----------------#
pvpcheck:
type: procedure
debug: false
script:
- define pvp true
- if <c.entity.is_player> {
- if <yaml[<c.damager.name>].read[info.pvp].not> || <yaml[<c.entity.name>].read[info.pvp].not> {
- determine false }
}
- determine true
#-----------------Player vs Player Check-----------------#
#-----------------Raw JSON Handler-----------------#
# Valid hoverEvent actions: show_text, others are unsuported.
# Valid clickEvent actions: run_command, suggest_command, change_page, open_url
rtag:
# you can omit hover and/or click event, for text only.
# Usage: <proc[rtag].context[text(|hover_event_action:hover_event_value)(|click_event_action:click_event_value)]>
# exmaples:
# <proc[rtag].context[just text]>
# will determine {text:"just text"}
# <proc[rtag].context[text|show_text:and hover text]>
# will determine "{text:"text",hoverEvent:{action:show_text,value:"and hover text"}}"
# <proc[rtag].context[text||run_command:/teleport Larry]>
# will determine "{text:"text",clickEvent:{action:run_command,value:"/teleport Larry"}}"
type: procedure
debug: false
script:
- define json 'text:"<def[1].unescaped>"'
- if <def[2].is[!=].to[]||false> define json '<def[json]>,hoverEvent:{action:<def[2].before[:]>,value:"<def[2].after[:].unescaped>"}'
else define json '<def[json]>,hoverEvent:{action:show_text,value:""}'
# /\ this is a bug 'fix' to remove misleading hover text
- if <def[3].is[!=].to[]||false> define json '<def[json]>,clickEvent:{action:<def[3].before[:]>,value:"<def[3].after[:].unescaped>"}'
- define json {<def[json]>}
- determine '<def[json]>'
rpage:
# do not include "li@" in context list
# Usage: <proc[rpage].context[rtag1|rtag2|rtag3|ect..]>
# exmaples:
# <proc[rtag].context[<proc[rtag].context[some ]>|<proc[rtag].context[text.]>]>
# will determine [{text:\"some \"},{text:\"text.\"}]
# note: the quotes become Minecraft escaped when put through the rpage procedure
type: procedure
debug: false
script:
- define page "["
- foreach <queue.definitions.exclude[page]> {
- if <queue.definition[<def[value]>].is[==].to[]> || <queue.definition[<def[value]>].is[==].to[li@]> foreach next
- define page '<def[page]>,<queue.definition[<def[value]>]>'
#- narrate "<def[value]>: <queue.definition[<def[value]>].substring[1,10]>"
}
- define page "[<def[page].after[,]>]"
- determine '<def[page].replace[<&dq>].with[\\<&dq>]>'
rbook:
# do not include "li@" in context list
# Usage: <proc[rbook].context[page1|page2|page3|ect..]>
# note: Works just like rpage. just with pages insted of tags.
type: procedure
debug: false
script:
- define book "["
- foreach <queue.definitions.exclude[book]> {
- if <queue.definition[<def[value]>].is[==].to[]> || <queue.definition[<def[value]>].is[==].to[li@]> foreach next
- define book '<def[book]>,"<queue.definition[<def[value]>]>"'
#- narrate "<def[value]>: <queue.definition[<def[value]>].substring[1,10]>"
}
- define info "title:Title,author:KeangDavid"
- execute as_op 'give <player.name> written_book 1 0 {pages:[<def[book].replace[\"].with["]>],<def[info]>}'
- determine "{pages:[<def[book].after[,]>],title:bookScript,author:<player.name>}"
# \/ unsuported! Use new rtag procedure.
ChatButton:
type: procedure
debug: false
script:
- determine "{text: <&dq><def[2].unescaped><&dq>,color: <def[1]>,clickEvent: {action: run_command,value: <&dq><def[4]><&dq>},hoverEvent: {action: show_text,value: <&dq><def[3].unescaped><&dq>}}"
ChatPlayer:
type: procedure
debug: false
script:
- define rank "<yaml[<player.name>].read[prison.rank]||Citizen> of <yaml[<player.name>].read[prison.name]||Server>"
- define playerinfo "<def[rank]>\nNAME: <player.name>\nUUID: <player.uuid>\n\n<aqua>Click to send private message."
- determine "{text: <&dq><blue>[<reset><player.name.display><blue>]<&dq>,hoverEvent: {action: show_text,value: <&dq><def[playerinfo]><&dq>},clickEvent: {action: suggest_command,value:<&dq>/tell <player.name> <&dq>}}"
#-----------------Raw JSON Handler-----------------#
#-----------------Pager-----------------#
# Returns a list with number of context to a page
# usage: <proc[page].context[1|2]>
# Key: 1= #of items, 2= #of item per page
# Example: <proc[page].context[15|3]>
# Returns: li@1,3|4,6|7,9|10,12|13,15
page:
type: procedure
debug: false
script:
- define out "li@"
- repeat <def[1].div[<def[2]>].round_up> {
- define high <def[value].mul[<def[2]>]>
- define low <def[high].sub[<def[2]>].add[1]>
- define out <def[out]>|<def[low]>,<def[high]> }
- determine "<def[out].remove[1]>"
#-----------------Pager-----------------#
#------------------Save Inventory------------------#
# usage: - run inventorysave def:name
# requies player yaml files.
inventorySave:
type: task
debug: false
speed: 0
script:
- ^define 1 <def[1]||Default>
- ^yaml id:<player.name> set inventories.<def[1]>.inventory:!
- ^yaml id:<player.name> set inventories.<def[1]>.inventory:||:<player.inventory.list_contents>
- ^yaml id:<player.name> set inventories.<def[1]>.head:<player.equipment.helmet||i@air>
- ^yaml id:<player.name> set inventories.<def[1]>.chest:<player.equipment.chestplate||i@air>
- ^yaml id:<player.name> set inventories.<def[1]>.legs:<player.equipment.leggings||i@air>
- ^yaml id:<player.name> set inventories.<def[1]>.feet:<player.equipment.boots||i@air>
- ^yaml id:<player.name> set inventories.<def[1]>.saturation:<player.saturation>
- ^yaml id:<player.name> set inventories.<def[1]>.hunger:<player.food_level>
- ^yaml id:<player.name> set inventories.<def[1]>.health:<player.health>
- ^yaml id:<player.name> set inventories.<def[1]>.effects:null
- ^yaml id:<player.name> savefile:Players/<player.uuid>.yml
inventoryLoad:
type: task
debug: false
speed: 0
script:
- define 1 <def[1]||Default>
- inventory set d:<player.inventory> o:<yaml[<player.name>].read[inventories.<def[1]>.inventory]>
- equip <player> head:<yaml[<player.name>].read[inventories.<def[1]>.head]>
- equip <player> chest:<yaml[<player.name>].read[inventories.<def[1]>.chest]>
- equip <player> legs:<yaml[<player.name>].read[inventories.<def[1]>.legs]>
- equip <player> boots:<yaml[<player.name>].read[inventories.<def[1]>.feet]>
- adjust <player> saturation:<yaml[<player.name>].read[inventories.<def[1]>.saturation]>
- adjust <player> food_level:<yaml[<player.name>].read[inventories.<def[1]>.hunger]>
- adjust <player> health:<yaml[<player.name>].read[inventories.<def[1]>.health]>
- adjust <player> remove_effects
#------------------Save Survival------------------#
#------------------Open Inventory------------------#
# Usage - run Inv "def:<s@script>|<li@items.escaped>"
# Example - run Inv "def:<script>|<li@i@stone|i@stick.escaped>"
InventoryListener:
type: world
debug: false
events:
on player closes inventory:
- flag player inventorytype:!
- flag player inventory:!
on player clicks in inventory:
- if <player.has_flag[inventorytype]> {
- if <player.flag[inventorytype].is[==].to[CUI]> determine CANCELLED
}
Inv:
type: task
debug: false
script:
- ^define size '<parse:<def[1].yaml_key[size]||9>>'
- ^define title '<parse:<def[1].yaml_key[title].substring[1,30]||--ERROR-->>'
- ^define name '<parse:<def[1].yaml_key[name]||generic>>'
- ^note "in@generic[size=<def[size]>;title=<def[title]>;contents=<def[2].unescaped>]" as:<def[name]>
# ---- Flagged before and after for security ---------------------------
- ^flag player inventorytype:<def[1].yaml_key[inventorytype]||CUI>
- ^inventory open d:in@<def[name]>
- ^flag player inventorytype:<def[1].yaml_key[inventorytype]||CUI>
# DEBUG
#- narrate <red><def[name]><blue>[size=<def[size]>;title=<def[title]>;contents=<def[2].unescaped>]
#------------------Open Inventory------------------#
#------------------queue Listener------------------#
# Usage - flag player QLer:<queue>
# Flagging the player with CLQ will make chat wait for input
# ! REMEMBER to add the <queue> that the Listener will continue !
# Pause the script waiting for input with - queue pause.
# Example:
QLer:
type: task
debug: false
script:
- narrate "<aqua>Type somthing in chat."
- flag player QLer:<queue>
- queue pause
- narrate "<aqua>You typed: <gold><player.flag[QLed]>"
Queue_Listener:
type: world
debug: false
events:
on player clicks in inventory:
- if <player.has_flag[QLer]> {
- flag player QLed:<c.item>
- queue <player.flag[QLer]> resume
- flag player QLer:!
- determine CANCELLED }
on player right clicks entity:
- if <player.has_flag[QLer]> {
- flag player QLed:<c.entity>
- queue <player.flag[QLer]> resume
- flag player QLer:! }
on player chats priority:-112:
- if <player.has_flag[QLer]> {
- flag player QLed:<c.message>
- queue <player.flag[QLer]> resume
- flag player QLer:!
- determine CANCELLED }
#------------------queue Listener------------------#
#------------------Book Interface------------------#
book:
type: task
debug: false
script:
- ^if <def[1].is[==].to[]||true> { - queue clear }
- ^define ps <player.item_in_hand.slot>
- ^adjust <player> item_slot:1
- ^define pi <player.item_in_hand>
- ^take slot:1
- ^execute as_server "give <player.name> minecraft:written_book 1 0 <def[1]>" silent
- ^adjust <player> open_book
- ^take slot:1
- ^give <def[pi]> slot:1
- ^adjust <player> item_slot:<def[ps]>
#------------------Book Interface------------------#
#------------------Front Finder------------------#
# Returns what to add to a location to get the front.
# Usage - <proc[front].context[l@location or m@material]>
# Example - showfake glowstone <player.location.cursor_on.add[<proc[front].context[<player.location.cursor_on>]>]>
# NoFront Note: Will return below the block if there is no front.
# Doors Note: The top parts of doors will return 0,0,0 if context is not a location
# Skulls Note: Only skkulls placed on a wall have a denizen readble direction
# Stairs Note: Denizen makes no distinction between corner and side stairs.
# Note: Anvil enderportalfram tripwirehooks and gates ToDo.
Front:
type: procedure
debug: false
sixteen: 'li@0,0,1|0,0,1|-1,0,1|-1,0,0|-1,0,0|-1,0,0|-1,0,-1|0,0,-1|0,0,-1|0,0,-1|1,0,-1|1,0,0|1,0,0|1,0,0|1,0,1|0,0,1'
door:
- if <def[num].is[OR_MORE].to[9]> { - inject locally below }
- if <def[num].is[OR_MORE].to[5]> { - define num <def[num].sub[4].as_int> }
- define changes li@-1,0,0|0,0,-1|1,0,0|0,0,1|-1,0,0|1,0,0
below:
- if <def[1].contains[l@].not> determine 0,0,0
- define 1 <def[1].sub[0,1,0]>
- inject locally number
- inject locally door
number:
- if <def[1].contains[l@]> { - define mat <def[1].as_location.material>
} else { - define mat <def[1]> }
- define num <def[mat].after[,].add[1]||1>
- if <def[num].is[==].to[]> { - define num 1 }
entity:
- determine <def[1].location.add[<def[1].location.direction.vector.mul[1.25]>].add[0,1,0]>
script:
- if <def[1].is_living||false> inject locally entity
- inject locally number
- define changes li@0,-1,0|0,1,0|0,0,-1|0,0,1|-1,0,0|1,0,0
- if <def[mat].contains[door]> inject locally door
- if <def[mat].contains[bed]> define changes li@0,0,-1|1,0,0|0,0,1|-1,0,0|||||0,0,-1|1,0,0|0,0,1|-1,0,0
- if <def[mat].contains[standing_banner]> || <def[mat].contains[sign_post]> define changes <script.yaml_key[sixteen]>
- if <def[mat].contains[stairs]> define changes 'li@-1,0,0|1,0,0|0,0,-1|0,0,1|-1,0,0|1,0,0|0,0,-1|0,0,1'
- narrate <def[num]>
- determine <def[changes].get[<def[num]>]>
test_front:
type: task
speed: 0
script:
- narrate "<green>Used for testing the Front procedure"
- define loc <player.location.cursor_on>
- showfake glowstone <def[loc].as_location.add[<proc[front].context[<def[loc]>]>]> duration:10t
#------------------Front Finder------------------#
#------------------Basic Toggle------------------#
# ToDo >add toggle for yaml values<
# Key - 1=type 2=value
# Usage - run Tog "def:[flag]|[value]"
# Example - run Tog "def:flag|admin"
Tog:
type: task
debug: false
script:
- ^if <def[1].is[==].to[flag]> {
- if <player.has_flag[%2%]> flag player %2%:!
else flag player %2%
}
- ^title "title:<def[2]>" "subtitle:toggled to <player.has_flag[%2%]>"
#------------------Basic Toggle------------------#
#------------------Color Numbers------------------#
# No context will return <server.current_time_millis> in color code
# <proc[colnum].context[123]> will return "<dark_blue><green><aqua>" parsed.
# <proc[colnum].context[<aqua><green><aqua>]> will return "323".
colnum:
type: procedure
debug: false
tocolor:
- foreach <def[1].to_list> { - define result <def[result]||><parse:<&%value%>> }
tonumber:
- foreach <def[1].escaped.replace[&ss].with[|].as_list.remove[1]> { - define result <def[result]||><def[value]> }
script:
- define 1 <def[1]||<server.current_time_millis>>
- if <def[1].as_int.is[OR_MORE].to[0]||false> inject locally tocolor
else inject locally tonumber
- determine <def[result]>
#------------------Color Numbers------------------#
#------------------Random Location------------------#
# <proc[ranloc].context[ {location} | {radius/min|max} ]>
# Example: <proc[ranloc].context[<player.location>|10]>
# Returns a random, safe, surface location within 10 blocks of the player
ranloc:
type: procedure
debug: false
safecheck:
- define loc l@<def[1].x.add[%x%]>,0,<def[1].z.add[%z%]>,<def[1].world.name>
- if <def[loc].highest.material.contains[water].not> || <def[loc].highest.material.contains[lava].not> {
- determine <def[loc].highest.add[0.5,1.5,0.5]> }
radius:
- define x <util.random.int[-<def[2]||0>].to[<def[2]||0>]>
- define z <util.random.int[-<def[2]||0>].to[<def[2]||0>]>
- inject locally safecheck
- inject locally radius
range:
- define x <util.random.int[<def[2]||0>].to[<def[3]||0>]>
- if <util.random.int[1].to[2].is[==].to[1]> define x -<def[x]>
- define z <util.random.int[<def[2]||0>].to[<def[3]||0>]>
- if <util.random.int[1].to[2].is[==].to[1]> define z -<def[z]>
- inject locally safecheck
- inject locally range
script:
- if <def[3].abs.is[OR_MORE].to[0]||false>
{ - inject locally range } else { - inject locally radius }
#------------------Random Location------------------#
# Use to tell if server has api loaded for other scripts.
# <server.list_scripts.contains[s@KeangDavid_API]>
KeangDavid_API:
type: version
author: KeangDavid
name: KeangDavid_API
version: 1.3.0
description: Used in scripts made by KeangDavid.
id: 54