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:
- 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.
- 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:
| Nahrung | Hunger wiederhergestellt | Sättigung wiederhergestellt |
|---|---|---|
| Apfel | 4 | 2.4 |
| Ofenkartoffel | 5 | 6.0 |
| Rote Bete | 1 | 1.2 |
| Rote-Bete-Suppe | 6 | 7.2 |
| Brot | 5 | 6.0 |
| Karotte | 3 | 3.6 |
| Gebratenes Rindfleisch | 8 | 12.8 |
| Gebratenes Hühnchen | 6 | 7.2 |
| Gebratener Kabeljau | 5 | 6.0 |
| Gebratenes Hammelfleisch | 6 | 9.6 |
| Gebratenes Schweinefleisch | 8 | 12.8 |
| Gebratenes Kaninchen | 5 | 6.0 |
| Gebratener Lachs | 6 | 9.6 |
| Keks | 2 | 0.4 |
| Getrockneter Seetang | 1 | 0.6 |
| Leuchtbeeren | 2 | 0.4 |
| Goldene Karotte | 6 | 14.4 |
| Melonenscheibe | 2 | 1.2 |
| Pilzsuppe | 6 | 7.2 |
| Kartoffel | 1 | 0.6 |
| Kürbiskuchen | 8 | 4.8 |
| Kanincheneintopf | 10 | 12.0 |
| Süßbeeren | 2 | 0.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.userund hat das Essen nicht mit/betterfood toggleEatingausgeschaltet - 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.