diff --git a/config.yml b/config.yml index 8a20cb8..724035c 100644 --- a/config.yml +++ b/config.yml @@ -2,11 +2,13 @@ # Verschiedene Einstellungen +# Standardeinstellungen sind in [] angegeben +# Löschen einzelner Einstellungen deaktiviert sie -# Ob der Spieler beim nächsten Einloggen nach starker Trunkenheit am nächsten morgen Zuhause "aufwacht" (Ein home Plugin muss installiert sein!) +# Ob der Spieler beim nächsten Einloggen nach starker Trunkenheit am nächsten morgen Zuhause "aufwacht" (Ein home Plugin muss installiert sein!) [true] enableHome: true -# Art des Nachhause-teleports: +# Art des Nachhause-teleports: ['cmd: home'] # bed = Spieler wird zu seinem Spawn Bett teleportiert # SamplePlugin = installiertes home plugin. Unterstützt: ManagerXL. Wenn dies nicht geht: # 'cmd: home' = /home wird vom Spieler ausgelöst. Es sollte kein Verzögerungs, etc. plugin installiert sein! @@ -15,23 +17,23 @@ enableHome: true homeType: 'cmd: home' # Ob der Spieler nach etwas kürzerem Ausloggen an einem zufälligen Ort "aufwacht" (diese müssen durch '/br Wakeup add' von einem Admin festgelegt werden) -# Der Spieler wacht an dem nähesten zweier zufälliger Orte aus seiner Welt auf. +# Der Spieler wacht an dem nähesten zweier zufälliger Orte aus seiner Welt auf. [true] enableWake: true # Der Text, den der Spieler beim Aufwachen sieht wakeString: 'Ohh nein! Ich kann mich nicht erinnern, wie ich hier hergekommen bin... *hicks*' -# Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert +# Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert [true] enableLoginDisallow: true -# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) und sich für einige Minuten nicht einloggen kann +# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) und sich für einige Minuten nicht einloggen kann [true] enableKickOnOverdrink: true -# Ob der Spieler sich bei großer Trunkenheit übergibt (unten definiertes Item aus dem Mund fallen lässt) +# Ob der Spieler sich bei großer Trunkenheit übergibt (unten definiertes Item aus dem Mund fallen lässt) [true] # Das Item kann nicht aufgesammelt werden und bleibt bis zum Despawnen liegen. (Achtung: Kann nach Serverrestart, oder durch Hopper aufgesammelt werden.) enablePuke: true -# Item das beim Erbrechen mehrfach unaufsammelbar fallen gelassen wird +# Item das beim Erbrechen mehrfach unaufsammelbar fallen gelassen wird [SOUL_SAND] pukeItem: SOUL_SAND # Konsumierbares Item/Stärke. Senkt den Alkoholpegel um wenn konsumiert. @@ -39,11 +41,14 @@ drainItems: - BREAD/4 - MILK_BUCKET/2 -# Färben der Iteminformationen je nach Qualität während sie sich 1. im Fass und/oder 2. im Braustand befinden +# Zeit (in Tagen) die Trunkenheitsdaten nach offlinegehen eines Spielers im Speicher verbleiben, um z.B. Kater-Effekte anzuwenden. [7] +hangoverDays: 7 + +# Färben der Iteminformationen je nach Qualität während sie sich 1. im Fass und/oder 2. im Braustand befinden [true, false] colorInBarrels: true colorInBrewer: false -# Autosave Intervall in Minuten +# Autosave Intervall in Minuten [3] autosave: 3 diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index f1fd34a..9e4fbf4 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -19,12 +19,13 @@ import com.dre.brewery.Brew; public class BPlayer { public static Map players = new HashMap();// Players name and BPlayer - public static Map drainItems = new HashMap();// DrainItem Material and Strength private static Map pTasks = new HashMap();// Player and count + private static int taskId; // Settings - private static int taskId; + public static Map drainItems = new HashMap();// DrainItem Material and Strength public static int pukeItemId; + public static int hangoverTime; public static boolean overdrinkKick; public static boolean enableHome; public static boolean enableLoginDisallow; @@ -144,7 +145,9 @@ public class BPlayer { // drain the drunkeness by amount, returns true when player has to be removed public boolean drain(String name, int amount) { - quality -= getQuality() * amount; + if (drunkeness > 0) { + quality -= getQuality() * amount; + } drunkeness -= amount; if (drunkeness > 0) { if (offlineDrunk == 0) { @@ -152,8 +155,13 @@ public class BPlayer { offlineDrunk = drunkeness; } } - } else if (drunkeness <= (-1) * offlineDrunk) { - return true; + } else { + quality = getQuality(); + if (drunkeness <= -offlineDrunk) { + if (drunkeness <= -hangoverTime) { + return true; + } + } } return false; } @@ -274,6 +282,10 @@ public class BPlayer { passedOut = false; } + public void disconnecting() { + offlineDrunk = drunkeness; + } + public void goHome(final Player player) { if (homeType != null) { Location home = null; @@ -505,16 +517,18 @@ public class BPlayer { P.p.errorLog("drunkeness should not be 0!"); return quality; } + if (drunkeness < 0) { + return quality; + } return Math.round(quality / drunkeness); } // opposite of quality public int getHangoverQuality() { - return -getQuality() + 10; - } - - public int getHangoverProgress() { - return offlineDrunk + drunkeness; + if (drunkeness < 0) { + return quality + 11; + } + return -getQuality() + 11; } } \ No newline at end of file diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index 8326aa8..a751763 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -137,6 +137,7 @@ public class P extends JavaPlugin { // various Settings autosave = config.getInt("autosave", 3); BPlayer.pukeItemId = Material.matchMaterial(config.getString("pukeItem", "SOUL_SAND")).getId(); + BPlayer.hangoverTime = config.getInt("hangoverDays", 0) * 24 * 60; BPlayer.overdrinkKick = config.getBoolean("enableKickOnOverdrink", false); BPlayer.enableHome = config.getBoolean("enableHome", false); BPlayer.enableLoginDisallow = config.getBoolean("enableLoginDisallow", false); diff --git a/src/com/dre/brewery/listeners/CommandListener.java b/src/com/dre/brewery/listeners/CommandListener.java index 6823c10..1bc6d25 100644 --- a/src/com/dre/brewery/listeners/CommandListener.java +++ b/src/com/dre/brewery/listeners/CommandListener.java @@ -242,6 +242,9 @@ public class CommandListener implements CommandExecutor { public void cmdPlayer(CommandSender sender, String[] args) { int drunkeness = p.parseInt(args[1]); + if (drunkeness < 0) { + return; + } int quality = -1; if (args.length > 2) { quality = p.parseInt(args[2]); diff --git a/src/com/dre/brewery/listeners/PlayerListener.java b/src/com/dre/brewery/listeners/PlayerListener.java index 04df1bf..d4d7c65 100644 --- a/src/com/dre/brewery/listeners/PlayerListener.java +++ b/src/com/dre/brewery/listeners/PlayerListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerLoginEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -165,4 +166,12 @@ public class PlayerListener implements Listener { } } } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + BPlayer bplayer = BPlayer.get(event.getPlayer().getName()); + if (bplayer != null) { + bplayer.disconnecting(); + } + } } \ No newline at end of file