Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ==========================================
- # CHAT AND PREFIX SYSTEM
- # Mireacul
- # ==========================================
- options:
- P: &7[&eServer&7]
- perms: group.admin
- # ==========================================
- # PREFIX MANAGEMENT — global registry
- # ==========================================
- function createPrefix(name: text, prefixColor: text, bracketColor: text):
- if {prefixes::*} contains {_name}:
- stop
- add {_name} to {prefixes::*}
- set {prefixdata.color::%{_name}%} to {_prefixColor}
- set {prefixdata.brackets::%{_name}%} to {_bracketColor}
- function setPrefixColor(name: text, prefixColor: text, bracketColor: text):
- if {prefixes::*} does not contain {_name}:
- stop
- set {prefixdata.color::%{_name}%} to {_prefixColor}
- set {prefixdata.brackets::%{_name}%} to {_bracketColor}
- function deletePrefix(name: text):
- if {prefixes::*} does not contain {_name}:
- stop
- remove {_name} from {prefixes::*}
- delete {prefixdata.color::%{_name}%}
- delete {prefixdata.brackets::%{_name}%}
- loop all players:
- if {prefix.unlocked::%loop-player%::*} contains {_name}:
- remove {_name} from {prefix.unlocked::%loop-player%::*}
- if {prefix::%loop-player%} is {_name}:
- delete {prefix::%loop-player%}
- function grantPrefix(p: player, name: text):
- if {prefixes::*} does not contain {_name}:
- stop
- if {prefix.unlocked::%{_p}%::*} contains {_name}:
- stop
- add {_name} to {prefix.unlocked::%{_p}%::*}
- function revokePrefix(p: player, name: text):
- if {prefix.unlocked::%{_p}%::*} does not contain {_name}:
- stop
- remove {_name} from {prefix.unlocked::%{_p}%::*}
- if {prefix::%{_p}%} is {_name}:
- delete {prefix::%{_p}%}
- # ==========================================
- # OFFLINE PREFIX HANDLER
- # ==========================================
- on join:
- # Clean up any prefixes that no longer exist
- loop {prefix.unlocked::%player%::*}:
- if {prefixes::*} does not contain loop-value:
- remove loop-value from {prefix.unlocked::%player%::*}
- if {prefix::%player%} is set:
- if {prefixes::*} does not contain {prefix::%player%}:
- delete {prefix::%player%}
- # ==========================================
- # CHAT FORMAT
- # ==========================================
- on chat:
- cancel event
- set {_name} to player's name
- set {_msg} to message
- # Mute checks
- if {muteall} is set:
- if player does not have permission "{@perms}":
- send "{@P} &fChat is muted!" to player
- stop
- if {mute::%player%} is set:
- send "{@P} &fYou are muted." to player
- stop
- # Cooldown check — staff bypass
- if player does not have permission "{@perms}":
- if {chatcooldown::%player%} is set:
- if difference between {chatcooldown::%player%} and now < 3 seconds:
- send "{@P} &fDo not spam." to player
- stop
- set {chatcooldown::%player%} to now
- # Build name with optional bold and donor color
- set {_nameColor} to "&f"
- if {donor::%player%} is set:
- if {donor.namecolor::%player%} is set:
- set {_nameColor} to {donor.namecolor::%player%}
- if {bold.name::%player%} is set:
- set {_nameColor} to "%{_nameColor}%&l"
- set {_formattedName} to "%{_nameColor}%%{_name}%"
- # Staff check — LuckPerms groups
- if player has permission "group.owner":
- set {_line} to "&7[&c&lOwner&7] %{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- stop
- if player has permission "group.admin":
- set {_line} to "&7[&c&lAdmin&7] %{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- stop
- if player has permission "group.staff":
- set {_line} to "&7[&cStaff&7] %{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- stop
- if player has permission "group.helper":
- set {_line} to "&7[&aHelper&7] %{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- stop
- # Player with prefix
- if {prefix::%player%} is set:
- set {_prefName} to {prefix::%player%}
- set {_bColor} to {prefixdata.brackets::%{_prefName}%}
- set {_pColor} to {prefixdata.color::%{_prefName}%}
- if {_bColor} is not set:
- set {_bColor} to "&8"
- if {_pColor} is not set:
- set {_pColor} to "&c"
- set {_openB} to "%{_bColor}%["
- set {_closeB} to "%{_bColor}%]"
- if {bold.brackets::%player%} is set:
- set {_openB} to "%{_bColor}%&l["
- set {_closeB} to "%{_bColor}%&l]"
- set {_prefixText} to {_pColor}
- if {bold.prefix::%player%} is set:
- set {_prefixText} to "%{_pColor}%&l"
- set {_line} to "%{_openB}%%{_prefixText}%%{_prefName}%%{_closeB}% %{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- stop
- # Basic player — no prefix
- set {_line} to "%{_formattedName}% &7» &f%{_msg}%"
- broadcast coloured {_line}
- # ==========================================
- # PREFIX GUI — /prefix command
- # ==========================================
- command /prefix:
- trigger:
- openPrefixGUI(player, 1)
- function openPrefixGUI(p: player, page: number):
- set {_gui} to chest inventory with 3 rows named "&8Prefix Menu — Page %{_page}%"
- set {_start} to ({_page} - 1) * 9
- set {_slot} to 0
- set {_count} to 0
- loop {prefix.unlocked::%{_p}%::*}:
- add 1 to {_count}
- if {_count} > {_start}:
- if {_slot} < 9:
- set {_pColor} to {prefixdata.color::%loop-value%}
- set {_bColor} to {prefixdata.brackets::%loop-value%}
- if {_pColor} is not set:
- set {_pColor} to "&c"
- if {_bColor} is not set:
- set {_bColor} to "&8"
- set {_display} to coloured "%{_bColor}%[%{_pColor}%%loop-value%%{_bColor}%]"
- set {_item} to name tag named {_display}
- set string tag "prefix_name" of custom nbt of {_item} to loop-value
- add "&7Click to equip" to lore of {_item}
- if {prefix::%{_p}%} is loop-value:
- enchant {_item} with unbreaking 1
- set lore of {_item} to "&aCurrently equipped" and "&7Click to unequip"
- set slot {_slot} of {_gui} to {_item}
- add 1 to {_slot}
- if {_slot} is 0:
- set {_empty} to gray stained glass pane named "&7No prefixes unlocked"
- set slot 4 of {_gui} to {_empty}
- # Bold toggles — middle row (donor only)
- if {donor::%{_p}%} is set:
- set {_bracketsItem} to iron nugget named "&7Bold Brackets &8[ ]"
- if {bold.brackets::%{_p}%} is set:
- add "&aEnabled — click to disable" to lore of {_bracketsItem}
- enchant {_bracketsItem} with unbreaking 1
- else:
- add "&cDisabled — click to enable" to lore of {_bracketsItem}
- set slot 12 of {_gui} to {_bracketsItem}
- set {_prefixItem} to iron nugget named "&7Bold Prefix"
- if {bold.prefix::%{_p}%} is set:
- add "&aEnabled — click to disable" to lore of {_prefixItem}
- enchant {_prefixItem} with unbreaking 1
- else:
- add "&cDisabled — click to enable" to lore of {_prefixItem}
- set slot 13 of {_gui} to {_prefixItem}
- set {_nameItem} to iron nugget named "&7Bold Name"
- if {bold.name::%{_p}%} is set:
- add "&aEnabled — click to disable" to lore of {_nameItem}
- enchant {_nameItem} with unbreaking 1
- else:
- add "&cDisabled — click to enable" to lore of {_nameItem}
- set slot 14 of {_gui} to {_nameItem}
- # Donor color selector
- if {donor::%{_p}%} is set:
- set {_colorItem} to gold ingot named "&6Name Color"
- add "&7Click to cycle colors" to lore of {_colorItem}
- if {donor.namecolor::%{_p}%} is set:
- set {_colorLore} to coloured "&7Current: %{donor.namecolor::%{_p}%}%This color"
- add {_colorLore} to lore of {_colorItem}
- set slot 22 of {_gui} to {_colorItem}
- # Remove prefix button
- set {_removeItem} to barrier named "&cRemove Prefix"
- add "&7Click to unequip current prefix" to lore of {_removeItem}
- set slot 26 of {_gui} to {_removeItem}
- # Page navigation
- set {_totalPrefixes} to size of {prefix.unlocked::%{_p}%::*}
- set {_totalPages} to ceil({_totalPrefixes} / 9)
- if {_page} > 1:
- set {_prevArrow} to arrow named "&ePrevious Page"
- set slot 18 of {_gui} to {_prevArrow}
- if {_page} < {_totalPages}:
- set {_nextArrow} to arrow named "&eNext Page"
- set slot 8 of {_gui} to {_nextArrow}
- set {prefix.page::%{_p}%} to {_page}
- open {_gui} to {_p}
- # ==========================================
- # PREFIX GUI — click handling
- # ==========================================
- on inventory click:
- name of player's current inventory contains "Prefix Menu"
- cancel event
- event-item is not air
- # Prefix selection — top row
- if index of clicked slot < 9:
- if event-item is a name tag:
- set {_clicked} to string tag "prefix_name" of custom nbt of event-item
- if {_clicked} is not set:
- stop
- if {prefix::%player%} is {_clicked}:
- delete {prefix::%player%}
- send "{@P} &ePrefix removed." to player
- else:
- set {prefix::%player%} to {_clicked}
- send "{@P} &ePrefix set to &c%{_clicked}%&e." to player
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Bold brackets toggle (donor only)
- if index of clicked slot is 12:
- if {donor::%player%} is not set:
- send "{@P} &cThis is a donor feature." to player
- stop
- if {bold.brackets::%player%} is set:
- delete {bold.brackets::%player%}
- else:
- set {bold.brackets::%player%} to true
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Bold prefix toggle (donor only)
- if index of clicked slot is 13:
- if {donor::%player%} is not set:
- send "{@P} &cThis is a donor feature." to player
- stop
- if {bold.prefix::%player%} is set:
- delete {bold.prefix::%player%}
- else:
- set {bold.prefix::%player%} to true
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Bold name toggle (donor only)
- if index of clicked slot is 14:
- if {donor::%player%} is not set:
- send "{@P} &cThis is a donor feature." to player
- stop
- if {bold.name::%player%} is set:
- delete {bold.name::%player%}
- else:
- set {bold.name::%player%} to true
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Donor color cycle
- if index of clicked slot is 22:
- if {donor::%player%} is set:
- set {_colors::*} to "&c", "&6", "&e", "&a", "&b", "&d", "&9", "&5"
- set {_current} to {donor.namecolor::%player%}
- if {_current} is not set:
- set {donor.namecolor::%player%} to "&c"
- else:
- set {_next} to false
- loop {_colors::*}:
- if {_next} is true:
- set {donor.namecolor::%player%} to loop-value
- set {_next} to "done"
- stop loop
- if loop-value is {_current}:
- set {_next} to true
- if {_next} is not "done":
- set {donor.namecolor::%player%} to "&c"
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Remove prefix
- if index of clicked slot is 26:
- delete {prefix::%player%}
- send "{@P} &ePrefix removed." to player
- openPrefixGUI(player, {prefix.page::%player%})
- stop
- # Page navigation
- if event-item is an arrow:
- if name of event-item contains "Next":
- openPrefixGUI(player, {prefix.page::%player%} + 1)
- if name of event-item contains "Previous":
- openPrefixGUI(player, {prefix.page::%player%} - 1)
- # ==========================================
- # ADMIN COMMANDS
- # ==========================================
- command /createprefix <text> <text> <text>:
- permission: {@perms}
- usage: /createprefix <prefixColor> <bracketColor> <name>
- trigger:
- createPrefix(arg-3, arg-1, arg-2)
- set {_line} to "{@P} &eCreated prefix &f%arg-3% &ewith color %arg-1%%arg-3% &eand brackets %arg-2%[ ]"
- send coloured {_line} to player
- command /prefixcolor <text> <text> <text>:
- permission: {@perms}
- usage: /prefixcolor <prefixColor> <bracketColor> <name>
- trigger:
- setPrefixColor(arg-3, arg-1, arg-2)
- set {_line} to "{@P} &eUpdated &f%arg-3% &eto color %arg-1%%arg-3% &eand brackets %arg-2%[ ]"
- send coloured {_line} to player
- command /deleteprefix <text>:
- permission: {@perms}
- trigger:
- deletePrefix(arg-1)
- send "{@P} &eDeleted prefix &f%arg-1% &efrom all players." to player
- command /grantprefix <player> <text>:
- permission: {@perms}
- trigger:
- if {prefixes::*} does not contain arg-2:
- send "{@P} &cPrefix &f%arg-2% &cdoes not exist. Create it first." to player
- stop
- grantPrefix(arg-1, arg-2)
- send "{@P} &eGranted &c%arg-2% &eto %arg-1%." to player
- send "{@P} &eYou unlocked the prefix &c%arg-2%&e! Use /prefix to equip it." to arg-1
- command /revokeprefix <player> <text>:
- permission: {@perms}
- trigger:
- revokePrefix(arg-1, arg-2)
- send "{@P} &eRevoked &c%arg-2% &efrom %arg-1%." to player
- command /listprefixes:
- permission: {@perms}
- trigger:
- if {prefixes::*} is not set:
- send "{@P} &cNo prefixes exist." to player
- stop
- send "{@P} &eGlobal prefixes:" to player
- loop {prefixes::*}:
- set {_line} to " &7- %{prefixdata.brackets::%loop-value%}%[%{prefixdata.color::%loop-value%}%%loop-value%%{prefixdata.brackets::%loop-value%}%]"
- send coloured {_line} to player
- command /setdonor <player>:
- permission: {@perms}
- trigger:
- if {donor::%arg-1%} is set:
- delete {donor::%arg-1%}
- delete {donor.namecolor::%arg-1%}
- send "{@P} &eRemoved donor status from %arg-1%." to player
- else:
- set {donor::%arg-1%} to true
- send "{@P} &eGranted donor status to %arg-1%." to player
- # ==========================================
- # MODERATION
- # ==========================================
- command /mute [<offlineplayer>] [<text>]:
- permission: {@perms}
- trigger:
- if arg-1 is not set:
- send "{@P} /mute <player> [reason]"
- stop
- if arg-2 is not set:
- if {mute::%arg-1%} is set:
- delete {mute::%arg-1%}
- send "&eYou are unmuted" to arg-1
- send "{@P} %arg-1% has been unmuted" to player
- else:
- set {mute::%arg-1%} to true
- send "&eYou are muted" to arg-1
- send "{@P} %arg-1% has been muted" to player
- else:
- if {mute::%arg-1%} is set:
- delete {mute::%arg-1%}
- send "&eYou have been unmuted because %arg-2%" to arg-1
- send "{@P} %arg-1% has been unmuted because %arg-2%" to player
- else:
- set {mute::%arg-1%} to true
- send "&eYou have been muted because %arg-2%" to arg-1
- send "{@P} %arg-1% has been muted because %arg-2%" to player
- command /muteall:
- permission: {@perms}
- trigger:
- if {muteall} is set:
- broadcast "{@P} Chat is now unmuted"
- delete {muteall}
- else:
- set {muteall} to true
- broadcast "{@P} Chat is now muted"
Advertisement
Add Comment
Please, Sign In to add comment