From 86082e2f6385b261beb2a9045dfea5877be24c00 Mon Sep 17 00:00:00 2001 From: graywolf336 Date: Tue, 15 Jul 2014 00:11:36 -0500 Subject: [PATCH] Allow resisting arrests via the jail stick. --- .../graywolf336/jail/JailStickManager.java | 2 +- .../com/graywolf336/jail/beans/Stick.java | 19 ++++- .../graywolf336/jail/enums/LangString.java | 4 ++ .../jail/listeners/PlayerListener.java | 71 ++++++++++--------- src/main/resources/config.yml | 2 +- src/main/resources/en.yml | 2 + 6 files changed, 63 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/graywolf336/jail/JailStickManager.java b/src/main/java/com/graywolf336/jail/JailStickManager.java index f6fab71..fa00124 100644 --- a/src/main/java/com/graywolf336/jail/JailStickManager.java +++ b/src/main/java/com/graywolf336/jail/JailStickManager.java @@ -54,7 +54,7 @@ public class JailStickManager { } try { - this.sticks.put(m, new Stick(a[2], a[3], Long.valueOf(a[1]))); + this.sticks.put(m, new Stick(a[2], a[3], Long.valueOf(a[1]), Double.valueOf(a[4]))); }catch (Exception e) { e.printStackTrace(); pl.getLogger().severe(s); diff --git a/src/main/java/com/graywolf336/jail/beans/Stick.java b/src/main/java/com/graywolf336/jail/beans/Stick.java index 175af9c..cbc2766 100644 --- a/src/main/java/com/graywolf336/jail/beans/Stick.java +++ b/src/main/java/com/graywolf336/jail/beans/Stick.java @@ -11,27 +11,42 @@ package com.graywolf336.jail.beans; public class Stick { private String jail, reason; private long time; + private double health; - public Stick(String jail, String reason, long time) { + public Stick(String jail, String reason, long time, double health) { this.jail = jail; this.reason = reason; this.time = time; + this.health = health; } + /** Gets the name of the jail a player will be sent when jailed via this jail stick. */ public String getJail() { return this.jail; } + /** Gets the reason a player will be jailed for when jailed via this stick. */ public String getReason() { return this.reason; } + /** Gets the amount of time a player has to serve when they are jailed via this stick. */ public long getTime() { return this.time; } + /** Gets the amount of health a player has to have before getting jailed via this stick. + * + *

+ * + * See here for reference: http://dev.bukkit.org/bukkit-plugins/jail/tickets/415/ + */ + public double getHealth() { + return this.health; + } + @Override public String toString() { - return time + "," + jail + "," + reason; + return time + "," + jail + "," + reason + "," + health; } } diff --git a/src/main/java/com/graywolf336/jail/enums/LangString.java b/src/main/java/com/graywolf336/jail/enums/LangString.java index 8bee0f4..917b64d 100644 --- a/src/main/java/com/graywolf336/jail/enums/LangString.java +++ b/src/main/java/com/graywolf336/jail/enums/LangString.java @@ -70,6 +70,10 @@ public enum LangString { PROVIDEAPLAYER ("jailing"), /** The message sent to the sender when they need to provide a jail. */ PROVIDEAJAIL ("jailing"), + /** The message sent to someone trying to jail someone else with a jail stick that requires health below a certain amount. */ + RESISTEDARRESTJAILER ("jailing"), + /** The message sent to the person someone else is trying to jail that requires their health below a certain amount. */ + RESISTEDARRESTPLAYER ("jailing"), /** The message sent when to a prisoner about their status in jail. */ STATUS ("jailing"), /** The message sent to the sender of a command when suggesting a cell. */ diff --git a/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java b/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java index cba3166..c09f2db 100644 --- a/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java +++ b/src/main/java/com/graywolf336/jail/listeners/PlayerListener.java @@ -223,42 +223,47 @@ public class PlayerListener implements Listener { }else { Stick s = pl.getJailStickManager().getStick(attacker.getItemInHand().getType()); - Prisoner p = new Prisoner(player.getUniqueId().toString(), player.getName(), - pl.getConfig().getBoolean(Settings.AUTOMATICMUTE.getPath()), - s.getTime(), attacker.getName(), s.getReason()); - - PrePrisonerJailedByJailStickEvent jEvent = new PrePrisonerJailedByJailStickEvent( - pl.getJailManager().getJail(s.getJail()), null, p, player, attacker.getName(), s); - - pl.getServer().getPluginManager().callEvent(jEvent); - - if(jEvent.isCancelled()) { - if(jEvent.getCancelledMessage().isEmpty()) - attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.CANCELLEDBYANOTHERPLUGIN, player.getName())); - else - attacker.sendMessage(jEvent.getCancelledMessage()); - }else { - //recall data from the event - Jail j = jEvent.getJail(); - Cell c = jEvent.getCell(); - p = jEvent.getPrisoner(); - player = jEvent.getPlayer(); + if(player.getHealth() <= s.getHealth() || s.getHealth() == -1) { + Prisoner p = new Prisoner(player.getUniqueId().toString(), player.getName(), + pl.getConfig().getBoolean(Settings.AUTOMATICMUTE.getPath()), + s.getTime(), attacker.getName(), s.getReason()); - //Player is not online - if(player == null) { - attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.OFFLINEJAIL, - new String[] { p.getLastKnownName(), String.valueOf(p.getRemainingTimeInMinutes()) })); + PrePrisonerJailedByJailStickEvent jEvent = new PrePrisonerJailedByJailStickEvent( + pl.getJailManager().getJail(s.getJail()), null, p, player, attacker.getName(), s); + + pl.getServer().getPluginManager().callEvent(jEvent); + + if(jEvent.isCancelled()) { + if(jEvent.getCancelledMessage().isEmpty()) + attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.CANCELLEDBYANOTHERPLUGIN, player.getName())); + else + attacker.sendMessage(jEvent.getCancelledMessage()); }else { - //Player *is* online - attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.ONLINEJAIL, - new String[] { p.getLastKnownName(), String.valueOf(p.getRemainingTimeInMinutes()) })); - } - - try { - pl.getPrisonerManager().prepareJail(j, c, player, p); - } catch (Exception e) { - attacker.sendMessage(ChatColor.RED + e.getMessage()); + //recall data from the event + Jail j = jEvent.getJail(); + Cell c = jEvent.getCell(); + p = jEvent.getPrisoner(); + player = jEvent.getPlayer(); + + //Player is not online + if(player == null) { + attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.OFFLINEJAIL, + new String[] { p.getLastKnownName(), String.valueOf(p.getRemainingTimeInMinutes()) })); + }else { + //Player *is* online + attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.ONLINEJAIL, + new String[] { p.getLastKnownName(), String.valueOf(p.getRemainingTimeInMinutes()) })); + } + + try { + pl.getPrisonerManager().prepareJail(j, c, player, p); + } catch (Exception e) { + attacker.sendMessage(ChatColor.RED + e.getMessage()); + } } + }else { + attacker.sendMessage(pl.getJailIO().getLanguageString(LangString.RESISTEDARRESTJAILER, player.getName())); + player.sendMessage(pl.getJailIO().getLanguageString(LangString.RESISTEDARRESTPLAYER, attacker.getName())); } } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 165e3b6..916b409 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -77,4 +77,4 @@ jailpay: priceInfinite: 10000 jailstick: enabled: true - sticks: ["stick,30,,Running away"] \ No newline at end of file + sticks: ["stick,30,,Running away,-1", "blaze_rod,15,,Having too much fun,6"] \ No newline at end of file diff --git a/src/main/resources/en.yml b/src/main/resources/en.yml index 0a4b145..d7a3c87 100644 --- a/src/main/resources/en.yml +++ b/src/main/resources/en.yml @@ -63,6 +63,8 @@ language: protectionmessagenopenalty: '&cProtection enabled for %0%, do not do it again.' provideaplayer: '&cPlease provide a player when %0% &cthem.' provideajail: '&cPlease provide a jail to %0% &cthem to.' + resistedarrestjailer: '&c%0% has resisted arrest thanks to having more health than you can jail at.' + resistedarrestplayer: '&cYou have resisted arrest due to having more health than %0% can jail at.' status: "&2You have been jailed with a reason of '%0%' by %1% and have %2% minutes remaining." suggestedcell: '&cAn empty cell in the same jail, %0%, was found: %1%' telein: "&9Teleported %0% to %1%'s teleport in location."