Zum Hauptinhalt springen

BetterFood Verhalten

BetterFood verwendet eine hungerbewusste Nahrungsauswahl, anstatt einfach das nahrhafteste Item zuerst zu essen.

Auslöser​

BetterFood reagiert auf das Vanilla-FoodLevelChangeEvent mit der Priorität HIGHEST und ignoriert Events, die beim Aufruf seines Listeners bereits abgebrochen sind. Es liest den Hungerwert, den vorherige Listener hinterlassen haben. Gegenüber anderen Listenern mit derselben Priorität ist damit keine Reihenfolge garantiert. Es wird nur aktiv, wenn der Hunger des Spielers sinkt. Der Spieler muss die Berechtigung betterfood.user besitzen und darf das automatische Essen nicht über /betterfood toggleEating deaktiviert haben.

Auswahlregeln​

Bei der Nahrungsauswahl durchläuft das Plugin seine unterstützten Nahrungsmittel einmal:

  1. Die unterstützten Nahrungsmittel stehen in einem Array, absteigend nach wiederhergestelltem Hunger sortiert. Bei Gleichstand entscheidet die wiederhergestellte Sättigung, ebenfalls absteigend, und zuletzt der Materialname aufsteigend. Eine vorberechnete Tabelle legt für jeden Hungerstand den Startindex fest.
  2. Ab diesem Index durchsucht das Plugin das Array in Richtung weniger nahrhafter Lebensmittel und nimmt das erste, das der Spieler tatsächlich bei sich trägt und das keine benutzerdefinierten Eigenschaften hat. Bei mehreren Stapeln desselben Nahrungsmittels wird der im niedrigsten Inventarslot verwendet. Sobald ein Treffer gefunden wurde, wird er gegessen und die Suche endet.

Das erste geeignete Nahrungsmittel kann mehr Hunger wiederherstellen, als fehlt. Bei Hunger 11 kann beispielsweise Kaninchenragout mit 10 Hungerpunkten vor gebratenem Rindfleisch mit 8 Hungerpunkten gewählt werden, obwohl nur 9 fehlen. Es gibt keinen zweiten Durchlauf, der überschüssige Wiederherstellung minimiert.

Nach dem Essen wird der Hunger auf 20 und die Sättigung auf den daraus resultierenden Hungerwert begrenzt, entsprechend den Vanilla-Grenzen.

Nahrung in Schüsseln​

Rote-Bete-Suppe, Pilzsuppe und Kanincheneintopf geben beim automatischen Essen eine leere Schüssel zurück, genau wie in Vanilla:

  • Wird der gegessene Stapel aufgebraucht, ersetzt die Schüssel ihn im selben Slot
  • Andernfalls wird die Schüssel dem Inventar hinzugefügt und zu Füßen des Spielers fallen gelassen, wenn kein Platz dafür vorhanden ist

Geschützte Items​

BetterFood vergleicht jeden Kandidaten über Bukkits ItemStack.isSimilar mit einem frisch erzeugten Vanilla-Item desselben Materials. Die Stapelgröße wird ignoriert. Items mit abweichenden Daten werden übersprungen, darunter:

  • ein benutzerdefinierter Anzeigename
  • Lore
  • Verzauberungen, benutzerdefinierte Modelldaten und andere Item-Komponenten
  • persistente Daten, die von anderen Plugins geschrieben wurden

Die Prüfung vergleicht das gesamte Item mit einem frisch erzeugten Vanilla-Stapel statt mit einer von Hand gepflegten Feldliste, sodass Item-Daten, die künftige Minecraft-Versionen hinzufügen, automatisch übersprungen werden. Dies soll die Chance verringern, versehentlich Plugin-Items oder dekorative Items zu konsumieren.

Unterstützte Nahrung​

BetterFood konsumiert automatisch die folgenden Nahrungsmittel:

NahrungHunger wiederhergestelltSättigung wiederhergestellt
Apfel42.4
Ofenkartoffel56.0
Rote Bete11.2
Rote-Bete-Suppe67.2
Brot56.0
Karotte33.6
Gebratenes Rindfleisch812.8
Gebratenes Hühnchen67.2
Gebratener Kabeljau56.0
Gebratenes Hammelfleisch69.6
Gebratenes Schweinefleisch812.8
Gebratenes Kaninchen56.0
Gebratener Lachs69.6
Keks20.4
Getrockneter Seetang10.6
Leuchtbeeren20.4
Goldene Karotte614.4
Melonenscheibe21.2
Pilzsuppe67.2
Kartoffel10.6
Kürbiskuchen84.8
Kanincheneintopf1012.0
Süßbeeren20.4

Ausgeschlossene Nahrung​

Die folgenden essbaren Items sind absichtlich vom automatischen Essen ausgeschlossen. Dies sind rohes Fleisch, spezielle Items oder Nahrung mit negativen oder unberechenbaren Effekten:

  • Rindfleisch (roh)
  • Hühnchen (roh)
  • Chorusfrucht
  • Kabeljau (roh)
  • Verzauberter goldener Apfel
  • Goldener Apfel
  • Honigflasche
  • Hammelfleisch (roh)
  • Giftkartoffel
  • Schweinefleisch (roh)
  • Kugelfisch
  • Kaninchen (roh)
  • Verrottetes Fleisch
  • Lachs (roh)
  • Spinnenauge
  • Seltsame Suppe
  • Tropenfisch

Alle anderen essbaren Materialien, die von neueren Minecraft-Versionen hinzugefügt wurden und nicht in der obigen Liste der unterstützten Nahrung stehen, werden ebenfalls übersprungen, bis sie ausdrücklich in diese Liste aufgenommen werden.

Beim Start führt BetterFood eine Abdeckungsprüfung über jedes essbare Item durch, das deine Serverversion kennt, und protokolliert eine einzelne Konsolenzeile mit denjenigen, die es absichtlich nicht automatisch isst (BetterFood is intentionally not auto-eating these food items: ...), sodass du auf einen Blick genau siehst, welche Items auf deiner Serverversion übersprungen werden. Die Zeile wird nur ausgegeben, wenn es mindestens ein übersprungenes Item gibt — bleibt sie ganz aus, deckt die unterstützte Liste bereits jedes essbare Item dieser Version ab.

Fehlerbehebung​

Wenn das Essen eines Spielers nicht verzehrt wird, prüfe in dieser Reihenfolge:

  • der Spieler hat betterfood.user und hat das Essen nicht mit /betterfood toggleEating ausgeschaltet
  • die Nahrung steht in der Liste der unterstützten Nahrung
  • der Stack ist normale Vanilla-Nahrung, ohne eigenen Namen, Lore, Verzauberung oder Plugin-Daten (siehe Geschützte Items)
  • der Hunger sinkt tatsächlich. BetterFood ist kein Timer und isst nur, wenn die Hungerleiste sinkt.
  • kein anderes Plugin bricht die Hungeränderung ab. BetterFood ignoriert FoodLevelChangeEvents, die bereits abgebrochen sind.

Wenn du um Hilfe bittest, gib die BetterFood- und die Serverversion, die Nahrungsart, die Angabe, ob der Stack normale Vanilla-Nahrung ist, und die Schritte zur Reproduktion des Problems an.