#Author: PanMaruda #$ version: 0.2.0 $# 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 %strings% with %integer% row[s] named %string% create [a] [new] m[-]GUI %strings% with %integer% row[s] and shape %strings% named %string% trigger: set {_id::*} to expr-1 if integer > 50: send "[mGUI] row count of ID %expr-1% is too big (%expr-2%)" to console stop loop {_id::*}: delete {mGUI::data::%loop-value%::*} if pattern = 1: set {mGUI::data::%loop-value%::inventory} to chest with expr-2 rows named expr-3 else: set {mGUI::data::%loop-value%::inventory} to chest with expr-2 rows named expr-4 set {_shape::*} to expr-3 loop {_shape::*}: if loop-index-2 parsed as integer <= expr-2: set {_rows::*} to loop-value-2 split at "-" loop 9 times: if {_rows::%loop-number%} is set: set {_index} to loop-index-2 parsed as integer set {_i} to ((loop-number - 1) + (({_index} - 1) * 9)) set {mGUI::data::%loop-value-1%::shape::%{_i}%} to {_rows::%loop-number%} else: stop loop effect: patterns: (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% to be unstealable (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% to close (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% to open gui %string% (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% to run %commandsender% command %string% (format|make|create|set) m[-]GUI slot[s] %numbers% of %strings% (with|to) %item% to close and run %commandsender% command %string% (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% to be unstealable (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% to close (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% to open gui %string% (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% to run %commandsender% command %string% (format|make|create|set) m[-]GUI shape[s] %strings% of %strings% (with|to) %item% to close and run %commandsender% command %string% trigger: set {_id::*} to expr-2 if pattern is between 1 and 6: loop {_id::*}: set {_slots::%loop-value%::*} to expr-1 if pattern is between 7 and 12: set {_shape::*} to expr-1 loop {_id::*}: loop {mGUI::data::%loop-value-1%::shape::*}: loop {_shape::*}: if loop-value-2 = loop-value-3: add (loop-index-2 parsed as integer) to {_slots::%loop-value-1%::*} loop {_id::*}: set slot {_slots::%loop-value%::*} of {mGUI::data::%loop-value%::inventory} to expr-3 loop {_id::*}: loop {_slots::%loop-value%::*}: delete {mGUI::data::%loop-value-1%::slot::%loop-value-2%::*} set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::status} to true if pattern is not 1 or 7: loop {_id::*}: loop {_slots::%loop-value%::*}: set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::unstealable} to true if pattern is 3 or 9: loop {_id::*}: loop {_slots::%loop-value%::*}: set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::close} to true else if pattern is 4 or 10: loop {_id::*}: loop {_slots::%loop-value%::*}: set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::close} to true set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::openGUI} to expr-4 else if pattern is 5 or 11: loop {_id::*}: loop {_slots::%loop-value%::*}: set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::command} to expr-5 set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::commandSender} to expr-4 else if pattern is 6 or 12: loop {_id::*}: loop {_slots::%loop-value%::*}: set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::close} to true set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::command} to expr-5 set {mGUI::data::%loop-value-1%::slot::%loop-value-2%::commandSender} to expr-4 effect: patterns: (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% to be unstealable (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% to close (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% to open gui %string% (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% to run %commandsender% command %string% (format|make|create|set) m[-]GUI next slot of %strings% (with|to) %item% to close and run %commandsender% command %string% trigger: set {_id::*} to expr-1 loop {_id::*}: set {_size} to {mGUI::data::%loop-value%::inventory}.getSize() loop {_size} times: if {mGUI::data::%loop-value-1%::slot::%(loop-number - 1)%::status} is not true: set {_slot} to (loop-number - 1) stop loop loop {_id::*}: set slot {_slot} of {mGUI::data::%loop-value%::inventory} to expr-2 if pattern is not 1: loop {_id::*}: set {mGUI::data::%loop-value%::slot::%{_slot}%::unstealable} to true if pattern is 3: loop {_id::*}: set {mGUI::data::%loop-value%::slot::%{_slot}%::close} to true else if pattern is 4: loop {_id::*}: set {mGUI::data::%loop-value%::slot::%{_slot}%::close} to true set {mGUI::data::%loop-value%::slot::%{_slot}%::openGUI} to expr-3 else if pattern is 5: loop {_id::*}: set {mGUI::data::%loop-value%::slot::%{_slot}%::command} to expr-4 set {mGUI::data::%loop-value%::slot::%{_slot}%::commandSender} to expr-3 else if pattern is 6: loop {_id::*}: set {mGUI::data::%loop-value%::slot::%{_slot}%::close} to true set {mGUI::data::%loop-value%::slot::%{_slot}%::command} to expr-4 set {mGUI::data::%loop-value%::slot::%{_slot}%::commandSender} to expr-3 effect: patterns: [m[-]GUI] fill [empty slots of] %strings% with %item% [m[-]GUI] fill all slots of %strings% with %item% trigger: set {_id::*} to expr-1 if pattern is 1: loop {_id::*}: set {_size} to {mGUI::data::%loop-value%::inventory}.getSize() loop {_size} times: if {mGUI::data::%loop-value-1%::slot::%(loop-number - 1)%::status} is not true: set mgui slot (loop-number - 1) of loop-value-1 to expr-2 to be unstealable else: loop {_id::*}: set {_size} to {mGUI::data::%loop-value%::inventory}.getSize() loop {_size} times: set mgui slot (loop-number - 1) of loop-value-1 to expr-2 to be unstealable 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 unload: delete {mGUI::*}