-ShopListener:
- type: world
- debug: false
- name:
- - if <def[name].is[==].to[<c.entity.framed_item.material.name>]> {
- - adjust <c.entity.framed_item> 'display_name:' save:new
- } else {
- - adjust <c.entity.framed_item> 'display_name:<def[name].before_last[ <blue>]>' save:new }
- events:
- on player damages ITEM_FRAME:
- - define name <c.entity.framed_item.display_name||<c.entity.framed_item.material.name>>
- # \/ Handles admin /shop command
- - if <player.has_flag[shop]> {
-
- - determine passively CANCELLED
- - define shop <player.flag[shop].before[/]>
-
- - if <def[shop].is[==].to[buy]> {
- - if '<def[name].contains[<blue>Buy: ]>' { - define name '<def[name].before[ <blue>Buy:]>' }
- - if '<def[name].contains[<blue>Sell: ]>' { - define name '<def[name].before[ <blue>Sell:]>' }
- - adjust <c.entity.framed_item> 'display_name:<def[name]> <blue>Buy: $<player.flag[shop].after[/]>' save:new
- - adjust <c.entity> framed:<entry[new].result> }
-
- - if <def[shop].is[==].to[sell]> {
- - if '<def[name].contains[<blue>Buy: ]>' { - define name '<def[name].before[ <blue>Buy:]>' }
- - if '<def[name].contains[<blue>Sell: ]>' { - define name '<def[name].before[ <blue>Sell:]>' }
- - adjust <c.entity.framed_item> 'display_name:<def[name]> <blue>Sell: $<player.flag[shop].after[/]>' save:new
- - adjust <c.entity> framed:<entry[new].result> }
-
- - if <def[shop].is[==].to[remove]> {
- - if '<def[name].contains[<blue>Buy: ]>' { - define name '<def[name].before[ <blue>Buy:]>' }
- - if '<def[name].contains[<blue>Sell: ]>' { - define name '<def[name].before[ <blue>Sell:]>' }
- - inject locally name
- - if '<entry[new].result.lore.get[1].contains[<red>- ]||false>' {
- - adjust <entry[new].result> 'lore:<c.entity.framed_item.lore.get[2].to[9999]||>' save:lore
- - adjust <c.entity> framed:<entry[lore].result> } else { - adjust <c.entity> framed:<entry[new].result> }
- }
-
- - if <def[shop].is[==].to[task]> {
- - if '<def[name].contains[ <blue>Buy: ].not>' {
- - narrate "<red>Item must be purchasable to set task."
- - queue clear }
- - adjust <c.entity.framed_item> 'lore:<red>- run <player.flag[shop].after[/]>|<c.entity.framed_item.lore>' save:new
- - if '<c.entity.framed_item.lore.get[1].contains[<red>- ]>' { - adjust <c.entity.framed_item> 'lore:<red>- run <player.flag[shop].after[/]>|<c.entity.framed_item.lore.get[2].to[9999].after[li@]>' save:new }
- - adjust <c.entity> framed:<entry[new].result> }
-
- - determine CANCELLED }
-
- # ===== Buy ===== #
- - if '<def[name].contains[ <blue>Buy: ]>' {
- - determine passively CANCELLED
- - define price '<def[name].after_last[$]>'
- - if <player.money.is[OR_LESS].to[<def[price]>]> {
- - narrate "<red>Not enough money."
- - queue clear }
- - take money qty:<def[price]>
-
- - if '<c.entity.framed_item.lore.get[1].contains[<red>- run ]||false>' {
- - run '<c.entity.framed_item.lore.get[1].after[run ]>'
- - queue clear }
-
- - define name <def[name].before_last[<blue>]>
- - inject locally name
- - give <entry[new].result>
- }
-
- # ===== Sell ===== #
- - if '<def[name].contains[ <blue>Sell: ]>' {
- - determine passively CANCELLED
- - define price '<def[name].after_last[$]>'
- - define name <def[name].before_last[<blue>]>
- - inject locally name
- - if <player.inventory.contains[<entry[new].result>].not> queue clear
- - take <entry[new].result>
- - give money qty:<def[price]>
- }
- - narrate <player.money>
-
- on shop command:
- - determine passively FULFILLED
- - flag player shop:!
- - wait 1s
- - choose <c.args.get[1]>:
- - case clear:
- - flag player shop:!
- - case remove:
- - flag player shop:remove/ d:5m
- - case buy:
- - flag player shop:buy/<c.args.get[2]||1> d:5m
- - case sell:
- - flag player shop:sell/<c.args.get[2]||1> d:5m
- - case task:
- - flag player 'shop:task/<c.raw_args.after[task ]>' d:5m
- - case help:
- - narrate 'Help goes here.'
- - default:
- - narrate '/shop [remove/buy/sell/task/help/clear] [price/taskname]'
- - if <player.has_flag[shop].not> queue clear
- - wait 2t
- - while <player.has_flag[shop]> {
- - adjust <player> 'action_bar:<aqua>shopmode: <dark_aqua><player.flag[shop].before[/]>'
- - wait 1s
- }
-
-testtask:
- type: task
- script:
- - narrate hi