diff options
author | Dico <dico.karssiens@gmail.com> | 2014-07-15 18:49:36 +0200 |
---|---|---|
committer | Dico <dico.karssiens@gmail.com> | 2014-07-15 18:49:36 +0200 |
commit | 2acd32f80eb1cd2424dc997887107efbd4a00430 (patch) | |
tree | 216d5481e37e22be395584c194e0ac4e983625a7 /forcefield.py | |
parent | 4b15a85ac8d981787166fcafa272560e6a07778d (diff) |
Think I finally fixed ALL forcefield bugs, command-side-wise
Diffstat (limited to 'forcefield.py')
-rw-r--r-- | forcefield.py | 173 |
1 files changed, 111 insertions, 62 deletions
diff --git a/forcefield.py b/forcefield.py index 550a0f0..4d573dd 100644 --- a/forcefield.py +++ b/forcefield.py @@ -1,5 +1,5 @@ from helpers import * -from java.util.UUID import fromString as juuid +from java.util.UUID import fromString as idToPlayer forcefield_permissions = ["utils.forcefield", "utils.forcefield.ignore"] forcefield_prefix = "&8[&aFF&8]" @@ -8,6 +8,84 @@ fd = 4 # forcefield distance forcefield_toggle = [] forcefield_whitelist = {} +@hook.command("forcefield") +def onForceFieldCommand(sender, args): + if not isPlayer(sender) or not sender.hasPermission(forcefield_permissions[0]): + noperm(sender) + return True + sender_id = str(sender.getUniqueId()) + if not args or args[0].lower() == "toggle": #Toggle + toggle_forcefield(sender, sender_id) + elif args[0].lower() in ["whitelist", "wl", "wlist"]: #Whitelist commands + if not args[1:] or args[1].lower() == "list": + whitelist_list(sender, sender_id) + elif args[1].lower() == "clear": + whitelist_clear(sender, sender_id) + elif args[1].lower() in ["add", "+"]: + whitelist_add(sender, sender_id, True, args[2:]) + elif args[1].lower() in ["remove", "delete", "rem", "del", "-"]: + whitelist_add(sender, sender_id, False, args[2:]) + else: + invalid_syntax(sender) + elif args[0].lower() in ["help", "?"]: #/forcefield help + forcefield_help(sender) + else: + invalid_syntax(sender) + return True + +def whitelist_add(sender, sender_id, add, players): + if not players: + msg(sender, "%s &cGive space-separated playernames." % forcefield_prefix) + elif add == True and sender_id not in forcefield_whitelist: + forcefield_whitelist[sender_id] = [] + online_players = [] + for name in list(server.getOnlinePlayers()): + online_players.append(str(name).lower()) + for name in players: + online = False + player = server.getPlayer(name) if name.lower() in online_players else server.getOfflinePlayer(name) + if name.lower() in online_players: + online = True + if not player == "null": + uid = str(player.getUniqueId()) + pname = player.getDisplayName() + if add == True and uid not in forcefield_whitelist[sender_id]: + if player == sender: + msg(sender, "%s &cYou can't whitelist yourself." % forcefield_prefix) + else: + forcefield_whitelist[sender_id].append(uid) + msg(sender, "%s &aAdded %s to your forcefield whitelist." % (forcefield_prefix, pname)) + if online == True: + msg(player, "%s %s &aAdded you to his forcefield whitelist." % (forcefield_prefix, sender.getDisplayName())) + elif add == False and uid in forcefield_whitelist[sender_id]: + forcefield_whitelist[sender_id].remove(uid) + msg(sender, "%s &cRemoved %s from your forcefield whitelist." % (forcefield_prefix, pname)) + if online == True: + msg(player, "%s %s &cRemoved you from his forcefield whitelist." % (forcefield_prefix, sender.getDisplayName())) + elif add == True: + msg(sender, "%s &c%s &cWas already in your forcefield whitelist." % (forcefield_prefix, pname)) + else: + msg(sender, "%s &c%s &cWas not in your forcefield whitelist." % (forcefield_prefix, pname)) + else: + msg(sender, "%s &cplayer %s &cwas not found." % (forcefield_prefix, name)) + +def whitelist_list(sender, sender_id): + msg(sender, "%s &aForceField Whitelist:" % forcefield_prefix) + if not sender_id in forcefield_whitelist or len(forcefield_whitelist[sender_id]) == 0: + msg(sender, "&c Your whitelist has no entries.") + else: + c=0 + for uid in forcefield_whitelist[sender_id]: + c+=1 + msg(sender, "&a %s. &f%s" % (c, server.getPlayer(idToPlayer(uid)).getDisplayName())) + +def whitelist_clear(sender, sender_id): + if len(forcefield_whitelist[sender_id]) == 0: + msg(sender, "%s &cYou had no players whitelisted." % forcefield_prefix) + else: + forcefield_whitelist[sender_id] = [] + msg(sender, "%s &aForceField Whitelist cleared." % forcefield_prefix) + def forcefield_help(sender): msg(sender, "%s &a&l/ForceField Help: \n&aYou can use the forcefield to keep players on distance." % forcefield_prefix) msg(sender, "&2Commands:") @@ -18,66 +96,18 @@ def forcefield_help(sender): msg(sender, "&a5. &6/ff wl &oadd <players> &a: aliases: &o+") msg(sender, "&a6. &6/ff wl &oremove <players> &a: aliases: &odelete, rem, del, -") -@hook.event("player.PlayerQuitEvent") -def onQuit(event): - try: - forcefield_toggle.remove(str(event.getPlayer().getUniqueId())) - except: - pass - -#forcefield toggle -@hook.command("forcefield") -def onForceFieldCommand(sender, args): - if not sender.hasPermission(forcefield_permissions[0]): - noperm(sender) - return True - sender_id = str(sender.getUniqueId()) - args = args.lower() - if not args or args[0] == "toggle": #Toggle - if sender_id in forcefield_toggle: - forcefield_toggle.remove(sender_id) - msg(sender, "%s &aForceField toggle: &cOFF" % forcefield_prefix) - else: - forcefield_toggle.append(sender_id) - msg(sender, "%s &aForceField toggle: &2ON" % forcefield_prefix) - elif args[0] in ["whitelist", "wl", "wlist"]: #Whitelist commands - if not args[1] or args[1] == "list": - msg(sender, "%s &aForceField Whitelist:" % forcefield_prefix) - c=0 - for uid in forcefield_whitelist[sender_id]: - c+=1 - msg(sender, "&a%s. &f%s" % (c, juuid(uid))) - elif args[1] == "clear": - forcefield_whitelist[sender_id] = [] - msg(sender, "%s &aForceField Whitelist cleared." % forcefield_prefix) - elif args[1] in ["add", "+"]: - if not args[2:]: - msg(sender, "%s &cGive playernames to add to your whitelist.\nSeparate with spaces." % forcefield_prefix) - else: - for name in args[2:]: - uid = str(server.getPlayer(name).getUniqueId()) - forcefield_whitelist[sender_id].append(uid) - elif args[1] in ["remove", "delete", "rem", "del", "-"]: - if not args[2:]: - msg(sender, "%s &cGive playernames to remove from your whitelist. \nSeparate with spaces." % forcefield_prefix) - else: - for name in args[2:]: - uid = str(server.getPlayer(name).getUniqueId()) - forcefield_whitelist[sender_id].remove(uid) - elif args[0] in ["help", "?"]: #/forcefield help - forcefield_help(sender) +def toggle_forcefield(sender, sender_id): + if sender_id in forcefield_toggle: + forcefield_toggle.remove(sender_id) + msg(sender, "%s &aForceField toggle: &cOFF" % forcefield_prefix) else: - msg(sender, "%s &cInvalid syntax. Use &o/ff ? &cfor more info." % forcefield_prefix) - return True + forcefield_toggle.append(sender_id) + msg(sender, "%s &aForceField toggle: &2ON" % forcefield_prefix) -def setVelocityAway(player, entity): #Moves entity away from player - player_loc = player.getLocation() - entity_loc = entity.getLocation() - dx = entity_loc.getX() - player_loc.getX() - dy = entity_loc.getY() - player_loc.getY() - dz = entity_loc.getZ() - player_loc.getZ() - negator = fd/2 - entity.setVelocity(negator/dx, negator/dy, negator/dz) +def invalid_syntax(sender): + msg(sender, "%s &cInvalid syntax. Use &o/ff ? &cfor more info." % forcefield_prefix) + +#--------------------------------------------------------------------------------------------------------# @hook.event("player.PlayerMoveEvent") def onMove(event): @@ -85,14 +115,33 @@ def onMove(event): player_id = str(player.getUniqueId()) if player_id in forcefield_toggle: #player has forcefield, entity should be launched for entity in player.getNearbyEntities(fd, fd, fd): - if isPlayer(entity) and not entity.hasPermission(forcefield_permissions[1]) and not str(entity.getUniqueId()) in forcefield_whitelist[player_id]: + log("%s" % entity.getName()) + if isPlayer(entity) and not entity.hasPermission(forcefield_permissions[1]) and not str(entity.getUniqueId()) in forcefield_whitelist[player_id] and not entity == player: setVelocityAway(player, entity) if not player.hasPermission(forcefield_permissions[1]): #player should be launched, entity has forcefield for entity in player.getNearbyEntities(fd, fd, fd): entity_id = str(entity.getUniqueId()) - if isPlayer(entity) and entity_id in forcefield_toggle and not player_id in forcefield_whitelist[entity_id]: + if isPlayer(entity) and entity_id in forcefield_toggle and not player_id in forcefield_whitelist[entity_id] and not entity == player: if event.getFrom().distance(entity.getLocation()) > 4: event.setCancelled(True) msg(player, "&cYou may not get closer than %sm to %s &cdue to their forcefield." % (fd, entity.getDisplayName())) else: - setVelocityAway(entity, player) #Other way around
\ No newline at end of file + setVelocityAway(entity, player) #Other way around + +def setVelocityAway(player, entity): #Moves entity away from player + player_loc = player.getLocation() + entity_loc = entity.getLocation() + dx = entity_loc.getX() - player_loc.getX() + dy = entity_loc.getY() - player_loc.getY() + dz = entity_loc.getZ() - player_loc.getZ() + negator = fd/2 + entity.setVelocity(negator/dx, negator/dy, negator/dz) + +#--------------------------------------------------------------------------------------------------------# + +@hook.event("player.PlayerQuitEvent") +def onQuit(event): + try: + forcefield_toggle.remove(str(event.getPlayer().getUniqueId())) + except: + pass
\ No newline at end of file |