#Author: PanMaruda #$ version: 0.1.6 $# import: org.bukkit.event.inventory.InventoryDragEvent custom event "guiClickEvent": patterns: [on] m[-]GUI click event-values: player, number, item, click type condition %player% has m[-]GUI: check: if {mGUI::status::%name of expr-1%} is set: continue condition [mGUI] %integer% of %string% is unstealable: check: if {mGUI::data::%expr-2%::slot::%expr-1%::unstealable} is true: continue expression: patterns: m[-]gui of %player% %player%'s m[-]gui get: return {mGUI::status::%name of expr-1%} ? null effect: patterns: create [a] [new] m[-]GUI %string% with %integer% row[s] [named %string%] create [a] [new] whitelisted m[-]GUI %string% with %integer% row[s] [named %string%] trigger: if pattern is 1: delete {mGUI::data::%expr-1%::*} set {mGUI::data::%expr-1%::inventory} to chest with expr-2 rows named (expr-3 ? "") if pattern is 2: if {mGUI::data::%expr-1%::*} is not set: set {mGUI::data::%expr-1%::inventory} to chest with expr-2 rows named (expr-3 ? "") set {mGUI::data::%expr-1%::whitelist} to true effect: patterns: (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% to be unstealable (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% to close (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% to open gui %string% (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% to run %commandsender% command %string% (format|make|create|set) m[-]GUI slot[s] %numbers% of %string% (with|to) %item% to close and run %commandsender% command %string% trigger: set slot expr-1 of {mGUI::data::%expr-2%::inventory} to expr-3 loop {_slots::*}: delete {mGUI::data::%expr-2%::slot::%loop-value%::*} if pattern is not 1: set {_slots::*} to expr-1 loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::unstealable} to true if pattern is 3: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::close} to true else if pattern is 4: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::close} to true set {mGUI::data::%expr-2%::slot::%loop-value%::openGUI} to expr-4 else if pattern is 5: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::command} to expr-5 set {mGUI::data::%expr-2%::slot::%loop-value%::commandSender} to expr-4 else if pattern is 6: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::close} to true set {mGUI::data::%expr-2%::slot::%loop-value%::command} to expr-5 set {mGUI::data::%expr-2%::slot::%loop-value%::commandSender} to expr-4 else if pattern is 7: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::effect} to expr-4 else if pattern is 8: loop {_slots::*}: set {mGUI::data::%expr-2%::slot::%loop-value%::close} to true set {mGUI::data::%expr-2%::slot::%loop-value%::effect} to expr-4 effect close m[-]GUI %string% [to %players%]: trigger: if {mGUI::data::%expr-1%::inventory} is set: if expr-2 is set: set {_players::*} to expr-2 loop {_players::*}: close inventory of loop-value else: set {_players::*} to {mGUI::data::%expr-1%::inventory}.getViewers() loop {_players::*}: close inventory of loop-value effect open m[-]GUI %string% to %players%: trigger: close inventory of expr-2 if {mGUI::data::%expr-1%::inventory} is not set: send "[mGUI] GUI of ID %expr-1% doesn't exist" to console else: open {mGUI::data::%expr-1%::inventory} to expr-2 set {_players::*} to expr-2 loop {_players::*}: set {mGUI::status::%name of loop-value%} to expr-1 effect execute slot %integer% of [m[-]GUI] %string% for %player%: trigger: if {mGUI::data::%expr-2%::slot::%expr-1%::close} is true: close mgui expr-2 to expr-3 if {mGUI::data::%expr-2%::slot::%expr-1%::openGUI} is set: open mgui {mGUI::data::%expr-2%::slot::%expr-1%::openGUI} to expr-3 if {mGUI::data::%expr-2%::slot::%expr-1%::command} is set: execute {mGUI::data::%expr-2%::slot::%expr-1%::commandSender} command {mGUI::data::%expr-2%::slot::%expr-1%::command} on InventoryDragEvent: if event.getWhoClicked() has mgui: set {_slots::*} to ...event.getRawSlots() loop {_slots::*}: if loop-value of (mgui of event.getWhoClicked()) is unstealable: event.setCancelled(true) on inventory click: if player has mgui: if clicked inventory is current inventory of player: set {_v::player} to player set {_v::number} to event.getSlot() set {_v::item} to event.getCurrentItem() set {_v::click type} to click type set {_event} to (custom event "guiClickEvent" with event-values {_v::*}) call event {_event} if {_event} is cancelled: cancel event if (event.getSlot()) of (mgui of player) is unstealable: cancel event execute slot (event.getSlot()) of mgui of player for player if click type is not right mouse button or left mouse button or double click using mouse: cancel event if inventory action is not pickup all or pickup half or place one or place all: cancel event on inventory close: delete {mGUI::status::%name of player%} on load: #AxAutoUpdate section (https://skript.pl/temat/40795-axautoupdate) set {AxUpdate::mGUI::link} to "code.skript.pl/DW4orhrQ/raw" set {AxUpdate::mGUI::status} to true set {AxUpdate::mGUI::name} to "mGUI" set {AxUpdate::mGUI} to script loop (indexes of {mGUI::data::*}): if {mGUI::data::%loop-value%::whitelist} is not true: delete {mGUI::data::%loop-value%::*}