diff --git a/config.yml b/config.yml index fe4dd1b..4eb050d 100644 --- a/config.yml +++ b/config.yml @@ -1,5 +1,8 @@ # config für Brewery.jar + +# Verschiedene Einstellungen + # Ob der Spieler beim nächsten Einloggen nach starker Trunkenheit am nächsten morgen Zuhause "aufwacht" (Ein home Plugin muss installiert sein!) enableHome: true @@ -19,14 +22,16 @@ enableWake: true # Ob der Spieler sich bei großer Trunkenheit teilweise nicht einloggen kann und kurz warten muss, da sein Charakter nicht reagiert enableLoginDisallow: true -# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) +# Ob der Spieler sich übertrinken kann und dann in Ohnmacht fällt (gekickt wird) und sich für einige Stunden nicht einloggen kann enableKickOnOverdrink: true # Autosave Intervall in Minuten autosave: 3 -# name: versch. Namen für schlecht/mittel/gut +# Rezepte für Getränke + +# name: Verschiedene Namen für schlecht/mittel/gut # ingredients: Auflistung von material/Anzahl # cookingtime: Zeit in Echtminuten die die Zutaten kochen müssen # distillruns: Wie oft destilliert werden muss 0-10 (0=ohne Destillieren) @@ -140,7 +145,7 @@ recipes: -#cooked: ALLE möglichen Zutaten und die nach dem Gähren daraus entstehenden Tranknamen: (leer für undefiniert) +# cooked: ALLE möglichen Zutaten und die nach dem Gähren daraus entstehenden Tranknamen: (leer für undefiniert) cooked: WHEAT: Getreideferment @@ -152,13 +157,15 @@ cooked: -#words: Wörter und Buchstaben die bei Trunkenheit ersetzt werden sollen -#replace: Zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt ein Leerzeichen, "-random": Eine zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.) -#to: In welches Wort es ersetzt werden soll. -#pre: Wörter und Buchstaben vor dem gesuchten Wort (durch "," getrennt) -#match: true = eines der "pre"-Wörter muss vor dem gesuchten Wort stehen, false = keines der "pre" Wörter darf vor dem gesuchten stehen -#alcohol: 1-100 trunkenheit ab der die Wörter ersetzt werden -#percentage: Wahrscheinlichkeit des Ersetzen eines Wortes in Prozent +# words: Wörter und Buchstaben die bei Chatten während Trunkenheit ersetzt werden sollen. +# Diese werden von oben nach unten gelesen und in dieser Reihenfolge wird ein geschriebener Satz dann verändert. + +# replace: Zu ersetzendes Wort oder Buchstabe. (Besondere: "-space": ersetzt Leerzeichen, "-random": Eine zufällige Position, "-start": Ganz am Anfang, "-end": Ganz ans Ende.) +# to: In welches Wort es ersetzt werden soll. +# pre: Wörter und Buchstaben vor dem gesuchten Wort (durch "," getrennt) +# match: true = eines der "pre"-Wörter muss vor dem gesuchten Wort stehen, false = keines der "pre" Wörter darf vor dem gesuchten stehen +# alcohol: 1-100 Trunkenheit ab der die Wörter ersetzt werden +# percentage: Wahrscheinlichkeit des Ersetzen eines Wortes in Prozent words: - replace: ch @@ -179,24 +186,56 @@ words: to: uuh percentage: 20 +- replace: u + to: uo + pre: u + match: false + percentage: 60 + - replace: das to: dass - percentage: 10 + percentage: 20 alcohol: 40 +- replace: p + to: b + percentage: 30 + +- replace: p + to: b + percentage: 70 + alcohol: 60 + +- replace: up + to: ubb + percentage: 80 + +- replace: o + to: oh + percentage: 20 + +- replace: ei + to: i + percentage: 15 + +- replace: b + to: bb + percentage: 80 + alcohol: 40 + +- replace: '!!!' + to: '!!!111!!!einself!1!' + pre: '!' + match: false + percentage: 20 + alcohol: 70 + - replace: '!' to: '!!' pre: '!' match: false percentage: 90 -- replace: '!!' - to: '!!!111!!!einself!1!' - pre: '!' - match: false - percentage: 20 - alcohol: 70 - - replace: betrunken to: brhetriunkhn pre: bist,seid @@ -209,14 +248,48 @@ words: pre: kannst,kannst noch,kannst nicht match: false percentage: 80 - alcohol: 85 + alcohol: 30 - replace: gehen to: hgheehn pre: kannst,kannst noch,kannst nicht match: false percentage: 80 - alcohol: 85 + alcohol: 40 + +- replace: wtf + to: wft + percentage: 20 + alcohol: 40 + +- replace: lol + to: loool + percentage: 80 + alcohol: 10 + +- replace: afk + to: aafka + percentage: 20 + alcohol: 30 + +- replace: schreiben + to: schribeen + pre: kannst,kannst noch,kannst nicht + match: false + percentage: 80 + alcohol: 50 + +- replace: trinken + to: saufen + percentage: 80 + alcohol: 70 + +- replace: '?' + to: '????' + pre: '?' + match: false + percentage: 80 + alcohol: 40 - replace: -space to: '' @@ -226,7 +299,7 @@ words: - replace: -space to: '' - percentage: 50 + percentage: 40 alcohol: 35 - replace: -space @@ -234,17 +307,17 @@ words: percentage: 10 - replace: -start - to: dssho + to: dho percentage: 15 alcohol: 50 - replace: -start - to: hhng + to: hhn percentage: 10 alcohol: 50 - replace: -random - to: lrg + to: lug percentage: 10 - replace: -random @@ -263,7 +336,7 @@ words: alcohol: 75 - replace: -random - to: grulg + to: gul percentage: 50 alcohol: 80 @@ -281,11 +354,41 @@ words: percentage: 50 alcohol: 70 +- replace: -random + to: ' ' + percentage: 100 + alcohol: 70 + +- replace: -random + to: ' ' + percentage: 60 + alcohol: 40 + +- replace: -random + to: ' ' + percentage: 50 + alcohol: 30 + - replace: -end to: '!' - percentage: 30 + percentage: 40 alcohol: 30 +- replace: -random + to: ' *hicks* ' + percentage: 80 + alcohol: 70 + +- replace: -random + to: ' *hicks* ' + percentage: 20 + alcohol: 40 + +- replace: -space + to: ' *hicks* ' + percentage: 20 + alcohol: 20 + - replace: -end to: ' *hicks*' percentage: 70 diff --git a/src/com/dre/brewery/BPlayer.java b/src/com/dre/brewery/BPlayer.java index c8a32d0..e515488 100644 --- a/src/com/dre/brewery/BPlayer.java +++ b/src/com/dre/brewery/BPlayer.java @@ -44,7 +44,7 @@ public class BPlayer { return null; } - public String getPlayerName() { + /*public String getPlayerName() { for (Map.Entry entry : players.entrySet()) { if (entry.getValue() == this) { return entry.getKey(); @@ -55,7 +55,7 @@ public class BPlayer { public Player getPlayer() { return org.bukkit.Bukkit.getPlayer(getPlayerName()); - } + }*/ public static Player getPlayer(String name) { return org.bukkit.Bukkit.getPlayer(name); @@ -65,7 +65,9 @@ public class BPlayer { public static boolean drink(int uid, Player player) { Brew brew = Brew.get(uid); if (brew != null) { - if (brew.calcAlcohol() == 0) { + int brewAlc = brew.calcAlcohol(); + if (brewAlc == 0) { + //no alcohol so we dont need to add a BPlayer addBrewEffects(brew, player); return true; } @@ -74,22 +76,26 @@ public class BPlayer { bPlayer = new BPlayer(); players.put(player.getName(), bPlayer); } - bPlayer.drunkeness += brew.calcAlcohol(); - bPlayer.quality += brew.getQuality() * brew.calcAlcohol(); + bPlayer.drunkeness += brewAlc; + bPlayer.quality += brew.getQuality() * brewAlc; if (bPlayer.drunkeness <= 100) { + addBrewEffects(brew, player); + if (brew.getQuality() < 5) { + addQualityEffects(brew.getQuality(), brewAlc, player); + } + } else { if (P.p.getConfig().getBoolean("enableKickOnOverdrink", false)) { bPlayer.passOut(player); } else { bPlayer.quality = bPlayer.getQuality() * 100; bPlayer.drunkeness = 100; - P.p.msg(player, "Du kannst einfach nicht mehr trinken"); - return false; + P.p.msg(player, "Du kannst nicht mehr trinken"); } } - P.p.log(player.getName() + " ist nun " + bPlayer.drunkeness + "% betrunken, mit einer Qualität von " + bPlayer.getQuality()); + P.p.msg(player, "Du bist nun " + bPlayer.drunkeness + "% betrunken, mit einer Qualität von " + bPlayer.getQuality()); return true; } return false; @@ -197,7 +203,7 @@ public class BPlayer { }, 1L); } - // he is having a hangover + // he may be having a hangover public void login(final Player player) { if (drunkeness < 10) { if (offlineDrunk > 60) { @@ -205,14 +211,14 @@ public class BPlayer { goHome(player); } } + hangoverEffects(player); + // wird der spieler noch gebraucht? + players.remove(player.getName()); + } else if (offlineDrunk - drunkeness >= 20) { // do some random teleport later } - hangoverEffects(player); - - // wird der spieler noch gebraucht? - players.remove(player.getName()); offlineDrunk = 0; } @@ -231,7 +237,7 @@ public class BPlayer { } else if (homeType.startsWith("cmd:")) { player.performCommand(homeType.substring(4)); } else { - P.p.errorLog("'homeType: " + homeType + "' unknown!"); + P.p.errorLog("Config.yml 'homeType: " + homeType + "' unknown!"); } if (home != null) { player.teleport(home); @@ -243,8 +249,35 @@ public class BPlayer { int duration = offlineDrunk * 50 * getHangoverQuality(); int amplifier = getHangoverQuality() / 3; - PotionEffectType.getByName("SLOW").createEffect(duration, amplifier).apply(player); - PotionEffectType.getByName("HUNGER").createEffect(duration, amplifier).apply(player); + PotionEffectType.SLOW.createEffect(duration, amplifier).apply(player); + PotionEffectType.HUNGER.createEffect(duration, amplifier).apply(player); + } + + public void drunkEffects(Player player) { + int duration = 10 - getQuality(); + duration += drunkeness / 2; + duration *= 20; + if (duration > 960) { + duration *= 5; + } else if (duration < 460) { + duration = 460; + } + PotionEffectType.CONFUSION.createEffect(duration, 0).apply(player); + } + + public static void addQualityEffects(int quality, int brewAlc, Player player) { + int duration = 7 - quality; + duration *= 250; + PotionEffectType.BLINDNESS.createEffect(duration, 0).apply(player); + + if (brewAlc > 15) { + duration = 10 - quality; + duration += brewAlc; + duration *= 40; + } else { + duration = 200; + } + PotionEffectType.POISON.createEffect(duration, 0).apply(player); } public static void addBrewEffects(Brew brew, Player player) { @@ -257,6 +290,20 @@ public class BPlayer { } } + public static void drunkeness() { + for (String name : players.keySet()) { + BPlayer bplayer = players.get(name); + if (bplayer.drunkeness > 30) { + if (bplayer.offlineDrunk == 0) { + Player player = getPlayer(name); + if (player != null) { + bplayer.drunkEffects(player); + } + } + } + } + } + // decreasing drunkeness over time public static void onUpdate() { if (!players.isEmpty()) { @@ -271,7 +318,7 @@ public class BPlayer { bplayer.drunkeness -= soberPerMin; if (bplayer.drunkeness > 0) { if (bplayer.offlineDrunk == 0) { - if (getPlayer(name) == null) {// working offline check? + if (getPlayer(name) == null) { bplayer.offlineDrunk = bplayer.drunkeness; } } diff --git a/src/com/dre/brewery/Barrel.java b/src/com/dre/brewery/Barrel.java index ca2f3c6..ab9c7b2 100644 --- a/src/com/dre/brewery/Barrel.java +++ b/src/com/dre/brewery/Barrel.java @@ -304,12 +304,15 @@ public class Barrel { // when not // the barrel needs to be formed correctly public static Block getBrokenBlock(Block spigot) { - spigot = getSpigotOfSign(spigot); - if (isSign(spigot)) { + if (spigot.getChunk().isLoaded()) { + spigot = getSpigotOfSign(spigot); + if (isSign(spigot)) { return checkSBarrel(spigot); - } else { + } else { return checkLBarrel(spigot); + } } + return null; } public static Block checkSBarrel(Block spigot) { diff --git a/src/com/dre/brewery/P.java b/src/com/dre/brewery/P.java index b6b7584..1101f62 100644 --- a/src/com/dre/brewery/P.java +++ b/src/com/dre/brewery/P.java @@ -57,7 +57,8 @@ public class P extends JavaPlugin { p.getServer().getPluginManager().registerEvents(inventoryListener, p); p.getServer().getPluginManager().registerEvents(worldListener, p); - p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 1200, 1200); + p.getServer().getScheduler().runTaskTimer(p, new BreweryRunnable(), 650, 1200); + p.getServer().getScheduler().runTaskTimer(p, new DrunkRunnable(), 120, 120); this.log(this.getDescription().getName() + " enabled!"); } @@ -255,7 +256,6 @@ public class P extends JavaPlugin { // save all Data public void saveData() { - log("saving"); File datafile = new File(p.getDataFolder(), "data.yml"); FileConfiguration oldData = YamlConfiguration.loadConfiguration(datafile); @@ -313,6 +313,19 @@ public class P extends JavaPlugin { return null; } + public class DrunkRunnable implements Runnable { + + public DrunkRunnable() { + } + + @Override + public void run() { + if (!BPlayer.players.isEmpty()) { + BPlayer.drunkeness(); + } + } + } + public class BreweryRunnable implements Runnable { public BreweryRunnable() { diff --git a/src/com/dre/brewery/Words.java b/src/com/dre/brewery/Words.java index 93e2d40..1e2b1ed 100644 --- a/src/com/dre/brewery/Words.java +++ b/src/com/dre/brewery/Words.java @@ -92,7 +92,11 @@ public class Words { from = " "; } else if (from.equalsIgnoreCase("-random")) { // inserts "to" on a random position in "words" - int charIndex = (int) (Math.random() * (words.length() - 1)); + int charIndex = (int) (Math.random() * 100.0); + P.p.log("random: " + charIndex); + charIndex *= (words.length() - 1); + charIndex /= 100; + P.p.log("charIndex: " + charIndex); if (charIndex > words.length() / 2) { from = words.substring(charIndex); to = to + from;