Skip to content

Instantly share code, notes, and snippets.

@b1nary
Last active October 12, 2015 22:57
Show Gist options
  • Select an option

  • Save b1nary/4099897 to your computer and use it in GitHub Desktop.

Select an option

Save b1nary/4099897 to your computer and use it in GitHub Desktop.
RubyBukkit Colored chat plugin (with uptime lol)
# Display time since server start or reload
Plugin.is {
name "SetaMOD"
version "0.1"
author "Seta"
commands :uptime => {
:usage => "/uptime - display time since server start or reload"
}, :prefix => {
:usage => "/prefix - player prefix"
}, :farben => {
:usage => "/farben - listet farben",
:aliases => [ :colors, :colours ]
}, :farbe => {
:usage => "/farbe - setzt farbe",
:aliases => [ :color, :colour ]
}, :burger => {
:usage => "/burger USER - jmd. einbürgern",
:aliases => [ :burg ]
}
permissions "setamod.admin" => {
:default => :op,
:description => "Admin Commands"
}, "setamod.user" => {
:default => :op,
:description => "User Commands"
}
}
import 'org.bukkit.ChatColor'
import 'org.bukkit.event.player.PlayerLoginEvent'
import 'org.bukkit.event.block.SignChangeEvent'
import 'org.bukkit.event.player.AsyncPlayerChatEvent'
import 'org.bukkit.event.player.PlayerInteractEvent'
NO_RIGHTS = "$dNein! Böser Kater!"
$data = nil
class Permissions
# singleton
def self.instance
@permissions = Permissions.new if @permissions == nil
@permissions
end
def self.playerHas(player, perm, default); instance.playerHas(player, perm, default); end
def self.plugin; instance.plugin; end
def self.pluginName
plugin.getDescription.getFullName if plugin != nil
end
def self.setGroup player, group
plugin.getUser(player).addGroup(group)
end
# the handler
attr_reader :plugin
def initialize
server = org.bukkit.Bukkit.getServer
pex = server.getPluginManager.getPlugin("PermissionsEx")
if pex != nil then
@plugin = pex
@handler = proc { |player, perm, default| pex.has(player, perm) }
@handler2 = proc { |player, group| pex.getUser(player).addGroup(group) }
else
@handler = proc { |player, perm, default| default }
end
end
def playerHas(player, perm, default)
@handler.call(player, perm, default)
end
end
module PlayerPermissions
def has(name, default = false)
Permissions.playerHas(self, name, default)
end
end
JavaUtilities.extend_proxy("org.bukkit.entity.Player") {
include PlayerPermissions
}
def _save
if !$data.nil?
File.open("seta-is-best-pony.data","wb") do |file|
Marshal.dump($data,file)
end
end
end
def _load
if $data.nil?
File.open("seta-is-best-pony.data","rb") {|f| $data = Marshal.load(f)}
if $data[:signs].nil?
$data[:signs] = {}
end
end
end
if !File.exists? "seta-is-best-pony.data"
$data = { :player => {},
:prefix => {
'neuling' => "$5[$6Neuling$5]$6",
'op' => "$1[$4OP$1]$4",
'admin' => "$1[$4Admin$1]$4",
'burger' => "$2[$6Burger$2]$6",
'seta' => "$a[$b*_*$a]$b",
'noob' => "$0[$fN00B$0]$6" },
:has_prefix => {} }
_save
else
_load
end
def colorize(s)
map = {
'$0' => ChatColor::BLACK,
'$1' => ChatColor::DARK_BLUE,
'$2' => ChatColor::DARK_GREEN,
'$3' => ChatColor::DARK_AQUA,
'$4' => ChatColor::DARK_RED,
'$5' => ChatColor::DARK_PURPLE,
'$6' => ChatColor::GOLD,
'$7' => ChatColor::GRAY,
'$8' => ChatColor::DARK_GRAY,
'$9' => ChatColor::BLUE,
'$a' => ChatColor::GREEN,
'$b' => ChatColor::AQUA,
'$c' => ChatColor::RED,
'$d' => ChatColor::LIGHT_PURPLE,
'$e' => ChatColor::YELLOW,
'$f' => ChatColor::WHITE,
'&0' => ChatColor::BLACK,
'&1' => ChatColor::DARK_BLUE,
'&2' => ChatColor::DARK_GREEN,
'&3' => ChatColor::DARK_AQUA,
'&4' => ChatColor::DARK_RED,
'&5' => ChatColor::DARK_PURPLE,
'&6' => ChatColor::GOLD,
'&7' => ChatColor::GRAY,
'&8' => ChatColor::DARK_GRAY,
'&9' => ChatColor::BLUE,
'&a' => ChatColor::GREEN,
'&b' => ChatColor::AQUA,
'&c' => ChatColor::RED,
'&d' => ChatColor::LIGHT_PURPLE,
'&e' => ChatColor::YELLOW,
'&f' => ChatColor::WHITE,
}
map.each do|i,v|
s = s.gsub(i, v.to_s)
end
s
end
COLORS = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
DOT = colorize("$a:")
def expand str, len
if str.size < len
str += " "*(len-str.size)
end
str
end
def checkPlayer player
if $data[:player][player.getDisplayName].nil?
$data[:has_prefix][player.getDisplayName] = []
$data[:has_prefix][player.getDisplayName] << 'neuling'
$data[:has_prefix][player.getDisplayName] << 'noob'
$data[:has_prefix][player.getDisplayName] << 'burger'
$data[:player][player.getDisplayName] = {}
$data[:player][player.getDisplayName][:prefix] = colorize($data[:prefix]['neuling'])
$data[:player][player.getDisplayName][:color] = colorize("")
$data[:player][player.getDisplayName][:textcolor] = colorize("$f")
_save
end
end
# plugin class
class SetaMOD < RubyPlugin
def onEnable
registerEvents
@serverStart = time
print "[" + description.name + "] " + description.fullName + " enabled."
end
def onDisable; print uptimeString; end
def registerEvents
registerEvent(PlayerLoginEvent, :Normal) {
|loginEvent|
player = loginEvent.getPlayer
checkPlayer(player)
}
registerEvent(AsyncPlayerChatEvent, :Lowest) {
|chatEvent|
checkPlayer(chatEvent.getPlayer)
player = $data[:player][chatEvent.getPlayer.getDisplayName]
#event = #{player[:prefix]} #{player[:color]}#{player[:textcolor]}
chatEvent.setFormat("#{player[:prefix]} #{player[:color]}%s#{DOT} #{player[:textcolor]}%s")
}
registerEvent(SignChangeEvent, :Lowest) {
|sign|
if sign.getPlayer.hasPermission("setamod.admin") and sign.getLine(0) == "prefix"
if sign.getLine(1).include? '&'
if sign.getLine(2) != ""
if $data[:prefix][sign.getLine(2)].nil?
prefix = sign.getLine(1)
title = sign.getLine(2)
sign.setLine(0,"")
sign.setLine(1,colorize("&6*&3Prefix&6*"))
sign.setLine(2,colorize(prefix))
$data[:prefix][title] = prefix
$data[:signs][[sign.getBlock.getLocation.getX, sign.getBlock.getLocation.getY, sign.getBlock.getLocation.getZ]] = title
_save
sign.getPlayer.sendMessage(colorize("&aPrefix erstellt & gespeichert"))
else
sign.getPlayer.sendMessage(colorize("&4Dieser prefix titel ist bereits vergeben"))
end
else
sign.getPlayer.sendMessage(colorize("&4Bitte schreib einen titel für den neuen Prefix in Zeile 3"))
end
elsif !$data[:prefix][sign.getLine(1)].nil?
prefix = $data[:prefix][sign.getLine(1)]
title = sign.getLine(1)
sign.setLine(0,"")
sign.setLine(1,colorize("&6*&3Prefix&6*"))
sign.setLine(2,colorize(prefix))
sign.setLine(3,colorize("&7#{title}"))
$data[:signs][[sign.getBlock.getLocation.getX, sign.getBlock.getLocation.getY, sign.getBlock.getLocation.getZ]] = title
_save
sign.getPlayer.sendMessage(colorize("&aPrefix gespeichert"))
else
sign.getPlayer.sendMessage(colorize("&4Unbekannter Prefix"))
sign.getPlayer.sendMessage(colorize("Um einen neuen zu erstellen schreib einen titel für den neuen Prefix in Zeile 3, um einen vorhandenen zu verwenden schreib seinen namen in Zeile 2"))
end
end
}
registerEvent(PlayerInteractEvent, :Normal) {
|block|
blox = block.getClickedBlock.getType.to_s
if blox == "WALL_SIGN" or blox == "SIGN_POST"
if $data[:signs][[block.getClickedBlock.getLocation.getX, block.getClickedBlock.getLocation.getY, block.getClickedBlock.getLocation.getZ]]
title = $data[:signs][[block.getClickedBlock.getLocation.getX, block.getClickedBlock.getLocation.getY, block.getClickedBlock.getLocation.getZ]]
if $data[:has_prefix][block.getPlayer.getName].include? title
block.getPlayer.sendMessage(colorize('&aDu hast diesen Prefix bereits &b;) &5/prefix list'))
else
$data[:has_prefix][block.getPlayer.getName] << title
_save
block.getPlayer.sendMessage(colorize('&aNeuer prefix! *O* &5/prefix list'))
end
end
end
}
end
def onCommand(sender, command, label, args)
if command.getName.downcase == "uptime"
if sender.hasPermission("setamod.admin") then
sender.sendMessage colorize(uptimeString)
else
sender.sendMessage colorize(NO_RIGHTS)
end
elsif command.getName.downcase == "prefix"
if args.size > 0
if sender.hasPermission("setamod.admin")
#
# SET PREFIX
#
if args[0] == "give"
if args.size == 3
if $data[:prefix][args[2]].nil?
sender.sendMessage(colorize("$4Prefix $c"+args[2]+" $4existiert nicht."))
sender.sendMessage(colorize(" /prefix create NAME PREFIX"))
else
if $data[:player][args[1]].nil?
sender.sendMessage(colorize("$4Player $c#{args[1]} $4does not exist"))
else
$data[:player][args[1]][:prefix] = colorize($data[:prefix][args[2]])
_save
sender.sendMessage(colorize("$6Prefix für $a"+args[1]+" auf $b"+args[2]+"$a gesetzt. ~ "+$data[:prefix][args[2]])) end
end
else
sender.sendMessage(colorize("$4Syntax:$c /prefix give PLAYER PREFIX_NAME"))
end
#
# CREATE PREFIX
#
elsif args[0] == "create"
if args.size == 3
exists = false
exists = true if $data[:prefix][args[1]].nil?
$data[:prefix][args[1]] = args[2]
_save
if exists
sender.sendMessage(colorize("$2Yay!$6 Prefix erstellt: "+args[2]+"$6 als $a"+args[1]))
else
sender.sendMessage(colorize("$2Yay!$6 Prefix angepasst: "+args[2]+"$6 als $a"+args[1]))
end
else
sender.sendMessage(colorize("$4Syntax:$c /prefix create NAME PREFIX"))
end
#
# CHECK IF EXISTS PREFIX
#
elsif args[0] == "exists" || args[0] == "show"
if args.size == 2
if $data[:prefix][args[1]].nil?
sender.sendMessage(colorize("$4existiert nicht..."))
else
sender.sendMessage(colorize($data[:prefix][args[1]]))
end
else
sender.sendMessage(colorize("$4Syntax:$c /prefix show NAME"))
end
end
end
#
# USER COMMANDS
#
if args[0] == "list"
sender.sendMessage(colorize("$dDeine Prefixe:"))
$data[:has_prefix][sender.getName].each do |tag|
sender.sendMessage(colorize(expand(tag, 10)+": #{expand($data[:prefix][tag], 10)}"))
end
elsif args[0] == "listall"
sender.sendMessage(colorize("$dAlle Prefixe:"))
$data[:prefix].each do |key,val|
sender.sendMessage(colorize(expand(key, 10)+": #{expand(val, 10)}"))
end
elsif $data[:has_prefix][sender.getName].include? args[0]
$data[:player][sender.getName][:prefix] = colorize($data[:prefix][args[0]]);
sender.sendMessage(colorize("$aNeuer Prefix: "+$data[:prefix][args[0]]))
_save
end
else
sender.sendMessage(colorize("$a*O* $e*O* $a*O* $bPREFIX! $a*O* $e*O* $a*O*"))
sender.sendMessage(colorize("$a | $dDas ultimative Prefix Plugin $a| "))
sender.sendMessage(colorize("$6 /prefix list ~ liste deiner prefixe"))
sender.sendMessage(colorize("$6 /prefix NAME ~ setze prefix"))
sender.sendMessage(colorize("$6 /farben ~ listet farben"))
sender.sendMessage(colorize("$6 /farbe NUM ~ setzt farbe"))
if sender.hasPermission("setamod.admin")
sender.sendMessage(colorize("$d ADMIN COMMANDS"))
sender.sendMessage(colorize("$6 /prefix create NAME PREFIX"))
sender.sendMessage(colorize("$6 /prefix remove NAME"))
sender.sendMessage(colorize("$6 /prefix give PLAYER NAME"))
sender.sendMessage(colorize("$6 /prefix show NAME"))
sender.sendMessage(colorize("$6 /prefix listall"))
end
end
elsif command.getName.downcase == "farben"
sender.sendMessage("#{colorize("$00")}, #{colorize("$11")}, #{colorize("$22")}, #{colorize("$33")}, #{colorize("$44")}, #{colorize("$55")}, #{colorize("$66")}, #{colorize("$77")}, #{colorize("$88")}, #{colorize("$99")}, #{colorize("$aa")}, #{colorize("$bb")}, #{colorize("$cc")}, #{colorize("$dd")}, #{colorize("$ee")}, #{colorize("$ff")}")
elsif command.getName.downcase == "farbe"
if COLORS.include? args[0]
$data[:player][sender.getName][:color] = colorize("$#{args[0]}")
sender.sendMessage(colorize("$#{args[0]}Neue farbe"))
_save
else
sender.sendMessage(colorize("$cUnbekannte farbe... 1-f $d/farben"))
end
elsif command.getName.downcase == "burger"
if args.size == 1
player = getServer.getPlayer( args[0] )
print player
Permissions.setGroup(player, "User")
getServer.broadcastMessage(colorize("$6Spieler $a"+args[0]+"$6 ist jetzt Bürger! *O*"))
else
sender.sendMessage(colorize("$4Syntax:$c /burger PLAYER_NAME"))
end
end
true
end
def time; java.lang.System.currentTimeMillis / 1000; end
def uptimeString
diff = time - @serverStart
"$dUptime: $e#{diff / 86400}d #{diff / 3600 % 24}h $b#{diff / 60 % 60}m #{diff % 60}s"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment