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