summaryrefslogtreecommitdiff
path: root/punishments.py
blob: 4b57be14ffc0672243ebf24e9bad1b3cb0504ad9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
from helpers import *
from java.util.UUID import fromString as juuid
import org.bukkit.Material as Material

spawn_world = "Spawn"
punish_world = "Punishments"

slave_perm = "utils.minerslaves"

slaves = []

def save_slaves():
    buf = []
    for slave in slaves:
        buf.append(slave.get_data())
    save_json_file("miner_slaves", buf)

def load_slaves():
    buf = open_json_file("miner_slaves", [])
    for data in buf:
        slave = Slave(True, None, None)
        slave.load_data(data)
        slaves.append(slave)

def get_slave(player):
    for slave in slaves:
        if slave.get_uuid() == player:
            return slave
    return None

class Slave(object):

    def __init__(self, from_file, player, amount):
        if from_file:
            self.players = None
            self.blocks = None
            return
        slave = get_slave(uid(player))
        if slave != None:
            slave.set_blocks(slave.get_blocks() + amount)
        else:
            self.player = uid(player)
            self.blocks = amount
            slaves.append(self)

    def get_uuid(self):
        return self.player

    def get_blocks(self):
        return self.blocks

    def set_blocks(self, amount):
        self.blocks = amount

    def update(self):
        self.blocks -= 1
        if self.blocks <= 0:
            server.getPlayer(juuid(self.get_uuid())).teleport(server.getWorld(spawn_world).getSpawnLocation())
            slaves.remove(self)
            save_slaves()

    def get_data(self):
        return {
        "player": self.player,
        "amount": self.blocks
        }

    def load_data(self, data):
        self.player = str(data["player"])
        self.blocks = int(data["amount"])

load_slaves()

@hook.event("block.BlockBreakEvent", "low")
def event(event):
    if event.getPlayer().getWorld().getName() != punish_world:
        return
    slave = get_slave(uid(event.getPlayer()))
    if slave != None and event.getBlock().getType() == Material.OBSIDIAN:
        slave.update()

@hook.command("miner")
def command(sender, cmd, label, args):
    if not sender.hasPermission(slave_perm):
        noperm(sender)
        return True
    if len(args) == 0 or (len(args) != 1 and args[0] == "list") or (len(args) != 2 and args[0] == "rem") or (len(args) != 3 and args[0] == "add"):
        msg(sender, "&e-&a /miner add/rem/list <name> <amount>")
        return True
    if args[0] == "add":
        try:
            int(args[2])
        except:
            msg(sender, "&cArgument <amount> is not a number")
            return True
    if args[0] == "list":
        if len(slaves) == 0:
            msg(sender, "&e-&a There are no people mining obsidian")
            return True
        for slave in slaves:
            msg(sender, "&e-&a %s: %s blocks" % (server.getOfflinePlayer(juuid(slave.get_uuid())).getName(), slave.get_blocks()))
        return True
    elif args[0] == "add":
        player = server.getOfflinePlayer(str(args[1]))
        if player.isOnline():
            player.teleport(server.getWorld(punish_world).getSpawnLocation())
            Slave(False, player, int(args[2]))
            save_slaves()
            msg(player, "&e-&a You have been punished, mine %s blocks of obsidian to get out!" % args[2])
            msg(sender, "&e-&a Player %s has been added into punishments for %s blocks of obsidian" % (player.getName(), args[2]))
        else:
            msg(sender, "&cYou can only punish online players")
            return True
    elif args[0] == "rem":
        player = server.getOfflinePlayer(str(args[1]))
        if player.isOnline():
            slave = get_slave(uid(player))
            if slave != None:
                server.getPlayer(juuid(slave.get_uuid())).teleport(server.getWorld(spawn_world).getSpawnLocation())
                slaves.remove(slave)
                save_slaves()
            else:
                msg(sender, "&e-&a Player not in punishments")
        else:
            msg(sender, "&cYou can only remove online players")
            return True
    else:
        msg(sender, "&e-&a /miner add/rem/list <name> <amount>")
    return True