Ein paar Bitten für die neue API

  • Hi red51 ,


    ich hätte ein paar Bitten für die neue API:


    1. Es wäre Super, wenn man mit der neuen API genau feststellen kann, ob das Item in der Truhe/Hand/Inventar ein Objekt (Tür, Truhe etc.) , Item oder Kleidung ist. Du hattest mir mal vor langer Zeit mal gesagt, dass man immer Nachprüfen muss, ob ein Item, dass ich ihn die Truhe lege, immer nach einem "ItemAttribute" abfragen muss und dies dann prüfen muss, ob diese nicht NULL ist, weil nicht jedes Item ein Attribut hat.

    Ich würde mir wünschen, dass jedes Item ein Attribut besitzt, wo man genau feststellen kann, was es ist. Das würde viele Fehler beim Handeln beheben.

    ODER noch besser: Jedes Element hat seine eigene ID (einmalig). Somit muss man nur eine ID eingeben und man hat das Item.

    So das man nur eine ID oder Code auf ein Schild schreibt und somit genau dieses Item, Objekt oder Kleidung bekommt.
    Es muss ja nicht jeder Variation seinen eigenen Code erhalten. Das Standart würde schon reichen.


    2. Kleider sollte man als Paket oder so in die Hand nehmen können.


    3. Könnt ihr euch nicht noch überlegen, die Schilder-Position zu speichern? Von einer Storage bekommt man ja auch die Position. Das selbe sollte auch mit Schildern der fall sein. Es würde mir die Block-Position reichen, damit ich die Distanz zwischen Object/NPC/Player ermitteln kann.


    4. Dann hätte ich noch eine Frage: Wenn ich npc.kill() mache, bleibt da ein Leiche zurück?
    Wenn ja, wäre es super, wenn es auch ein npc.despown() gäbe. (NPC löschen ohne Leiche)

  • 1. Es wäre Super, wenn man mit der neuen API genau feststellen kann, ob das Item in der Truhe/Hand/Inventar ein Objekt (Tür, Truhe etc.) , Item oder Kleidung ist. Du hattest mir mal vor langer Zeit mal gesagt, dass man immer Nachprüfen muss, ob ein Item, dass ich ihn die Truhe lege, immer nach einem "ItemAttribute" abfragen muss und dies dann prüfen muss, ob diese nicht NULL ist, weil nicht jedes Item ein Attribut hat.

    Hmm... wie meinst du das genau? Also aktuell ist es ja so, dass es nur das universelle "Item" gibt, was quasi erstmal jeglicher Item-Typ sein kann. Wobei wenn wir von "Items" reden bezieht sich das natürlich nur auf die Art von Items, die man auch tatsächlich im Inventar haben kann. Da nun für spezielle Items (zB Kleidung) noch zusätzliche Informationen gespeichert werden müssen (für andere Items hingegen aber nicht), gibt es für diese Items die besagten Attribute. Aus Performancegründen wird so ein ItemAttribute normalerweise nur den Items vergeben, die auch wirklich eines benötigen (denn beim Standarditem wäre das Attribute ja quasi nutzlos und würde unnötig Speicher verbrauchen).


    Tatsächlich weiß ich aber noch nicht, ob wir das in der neuen Version weiterhin so handhaben werden. Möglicherweise werden wir das etwas anders aufbauen und ggf. auch die API dahingehend anpassen (und in dieser Hinsicht vll etwas vereinfachen) ;)


    ODER noch besser: Jedes Element hat seine eigene ID (einmalig). Somit muss man nur eine ID eingeben und man hat das Item.

    Du meinst eine einmalige ID für jede Item-Instanz (also die 1. Pickaxe die gecrafted wird bekommt zB ID 0, die 2. Pickaxe bekommt ID 1, nächster gecrafteter Block bekommt ID 2 usw)? Sowas wäre grundsätzlich auf jeden Fall sinnvoll, bringt aber leider auch ein paar Schwierigkeiten mit sich, vor allem wenn es bspw. um Stacks geht (denn bei Stacks ist generell ja trotzdem nur 1 Item vorhanden, wo lediglich die "stacksize" Variable geändert wird). Wir müssen uns hier unbedingt mal Gedanken machen...


    2. Kleider sollte man als Paket oder so in die Hand nehmen können.

    Das könnten wir machen, wobei das ja unabhängig von der API wäre. Gäbe es einen bestimmten Grund für diese Änderung?


    3. Könnt ihr euch nicht noch überlegen, die Schilder-Position zu speichern? Von einer Storage bekommt man ja auch die Position. Das selbe sollte auch mit Schildern der fall sein. Es würde mir die Block-Position reichen, damit ich die Distanz zwischen Object/NPC/Player ermitteln kann.

    Ja, auf jeden Fall. Die Schilder-API werden wir komplett überarbeiten und vereinfachen. Das Handling in der jetzigen API ist momentan nicht gut gelungen (und auch intern im Spiel ist es eher suboptimal)...


    4. Dann hätte ich noch eine Frage: Wenn ich npc.kill() mache, bleibt da ein Leiche zurück?
    Wenn ja, wäre es super, wenn es auch ein npc.despown() gäbe. (NPC löschen ohne Leiche)

    Ja, normalerweise müsste dabei auch eine Leiche zurückbleiben (zumindest bei den NPCs, die auch tatsächlich einen toten Körper zurücklassen - das gilt also nicht für Skelette, Regenwürmer etc). Eine separate Funktion um einen NPC zu entfernen ohne einen toten Körper zurückzulassen macht absolut Sinn, das wird in der neuen Version auf jeden Fall hinzugefügt ;):thumbup:

  • Das könnten wir machen, wobei das ja unabhängig von der API wäre. Gäbe es einen bestimmten Grund für diese Änderung?

    Ja. Mein AktiveSign-Plugin brauch zum Handeln die ID, die Verkauft bzw. Gekauft werden soll.

    Manche wissen aber nicht, welche ID das Item/Objekt/Kleidung hat. Deswegen habe ich ein Kommando eingefügt, um die ID zu erhalten. Geht aber nur, wenn der Spieler es in der Hand hält.


    Hmm... wie meinst du das genau? Also aktuell ist es ja so, dass es nur das universelle "Item" gibt, was quasi erstmal jeglicher Item-Typ sein kann. Wobei wenn wir von "Items" reden bezieht sich das natürlich nur auf die Art von Items, die man auch tatsächlich im Inventar haben kann. Da nun für spezielle Items (zB Kleidung) noch zusätzliche Informationen gespeichert werden müssen (für andere Items hingegen aber nicht), gibt es für diese Items die besagten Attribute. Aus Performancegründen wird so ein ItemAttribute normalerweise nur den Items vergeben, die auch wirklich eines benötigen (denn beim Standarditem wäre das Attribute ja quasi nutzlos und würde unnötig Speicher verbrauchen).


    Tatsächlich weiß ich aber noch nicht, ob wir das in der neuen Version weiterhin so handhaben werden. Möglicherweise werden wir das etwas anders aufbauen und ggf. auch die API dahingehend anpassen (und in dieser Hinsicht vll etwas vereinfachen)

    D.h. Ich kann mit der ItemAttribute definitif festellen, ob das Item z.B. eine Schaufel, Schrank oder Jacke ist.


    Sagen wir es einfach so. Ich warte mal ab, was da kommt. Vielleicht passt jetzt ja dann bereits so.;)


    Aber dennoch habe ich die Frage: Was ist das für ein Item, wenn bei ItemAttribute ein NULL kommt? Ein Item oder etwas, was man nicht ins Inventar tun kann?

  • Und was mir noch eingefallen ist: Plugin-Permission.


    Es wäre super, wenn es langesam mal möglich wäre, die Plugins in mit Permissions in einzelne Breich einzuteilen. Dann könnten Server auch eine Support erstellen und denen dan erlauben, gewisse Breiche eines Plugins zu benutzen.


    Es ist als Admin eines Server nämlich nicht schön, wenn man alles aleine machen muss,

    da das Plugin nur von Admins oder Nicht-Admins unterscheidet. (Arme Admins ^^)


    Aussehen (z.B): <Pluginname>.<Permission>


    Für mein Schilder-Plugin wäre z.B. beim erstellen:
    AktiveSign.sign.create.<Typ> oder AktiveSign.sign.create.* (für alle)


    Auf jeden fall ist der Pluginname ganz vore Pflicht.


    Die Permissions selbst, würde ich dan in den einzelnen Gruppen-Daten (admin.permission etc.), die bereits schon existieren, einfach unter der Kategorie: "Plugins" einfügen. (Pro Zeile 1 Permission)
    In der API müssen natürlich in der onEnabled alle Permissions registiert werden. (Oder in der plugin.yml unter "Permissions")

  • Servus miteinand;


    was mir grad so einfallen tut zu diesem Thema:


    Eindeutige ID`s für nicht-stackable-Items (befüllte Truhen, Rüstungsteile, Waffen, Werkzeuge etc) würde auch ich mir wünschen. Also bei eigentlich allem, was man in-game als Item in der Welt aufsammeln kann, was nicht Rohstoff ist. Sprich alle Gegenstände, wo Zusatzeigenschaften Sinn machen.

    Sei es, um eine Art Haltbarkeit von Ausrüstungsgegenständen oder Textinhalt von Schildern zu speichern.

    Alles, was von der Art der Sache her stapelbar sein kann (Abbaurückstände wie Erde, Stein, Erz; allgemeine Gebrauchsgegenstände wie Fackeln, Verbände, Essen und Trinken oder die 'normalen' Baumaterialien) benötigt m.E. keine eindeutige ID, da diese Sachen ja stapelbar sein können.

    Nur alles, wo man gegebenenfalls benutzerspezifische Eigenschaften dranhängen könnte, wie z.B. (aber nicht ausschließlich)

    - Leuchtmittel (wegen Lichtfarbe, Lichtstärke, Lichtradius, etc...)

    - Waffen (Haltbarkeit, evtl. individuelle max-Haltbarkeit, individueller Schaden....)

    - Rüstungsteile (siehe Waffen)

    - naja, und so weiter, und so fort und so...

    da, ja da, würde mich eine sog. 'unique ID' wirklich mehr als nur freuen :P!!!!!!!!


    Ich denke mir, daß das für Deppen wie mich, die RP-begeistert sind und einen Server zu hosten, zu betreiben und zu pflegen in der Lage sind, eventuell von Interesse sein dürfte.


    So (sorry)-hicks... nach dem 2. Bier(Faxe 10%) ist für mich nu grad wirklich's Wochenend angebrochen!


    Pfiats euch!

  • D.h. Ich kann mit der ItemAttribute definitif festellen, ob das Item z.B. eine Schaufel, Schrank oder Jacke ist.

    Jein... grundsätzlich müssen wir uns beim Begriff "Item" erstmal darauf beschränken, dass dies nur die Items betrifft, die man im Inventar haben kann. Alles, was in der Welt platziert wird (Blöcke, Möbel, Türen etc) sind zunächst keine Items. Da man diese aber auch irgendwie im Inventar haben muss (um sie platzieren zu können), gibt es davon entsprechende Item-Repräsentationen. Bei Objekten (also Möbel, Türen, Lichter usw) gibt es da bspw. das Universalitem "objectkit" - d.h. jedes mal, wenn du eine Kiste oder einen Ofen oder eine Tür aufnimmst, bekommst du dasselbe Item ins Inventar, nämlich das universelle "objectkit".


    Um aber jetzt unterscheiden zu können, um was für ein Objekt es sich genau handelt, gibt es die ItemAttribute. Die Attribute gibt es nur für die Items, die noch zusätzliche Informationen haben die nicht in den Standard Item Variablen gespeichert werden können. Im Falle von Objekten (Möbel etc) ist das zB die "ObjectID" - hier ist die tatsächliche Objekt-TypID hinterlegt (das Piano hat zB ID 8, der Schmelzofen ID 11, die Zugbrücke 211 usw). Somit kann also bei einem universellen "objectkit" herausgefunden werden, was für ein Objekt das genau ist.


    Andere Items - wie bspw. die Pickaxe - brauchen sowas aber nicht. Daher haben normale Items (zB Werkzeuge, Waffen, Equipment, Nahrung etc) keine Attribute.


    Nur Objekte (Möbel, Türen, Lichter etc) haben ItemAttribute, sowie Kleidungsstücke (hier ist zB die TypID des Kleidungsstückes hinterlegt, sowie die Farbe des Kleidungsstückes [wird noch nicht verwendet]) und auch CustomItems die über die API erstellt wurden (hier ist u.a. die UUID des Items hinterlegt).


    Aber dennoch habe ich die Frage: Was ist das für ein Item, wenn bei ItemAttribute ein NULL kommt? Ein Item oder etwas, was man nicht ins Inventar tun kann?

    Wenn kein ItemAttribute vorhanden ist, dann handelt es sich um ein "normales" Item was keine Zusatzinformationen trägt - zB Pickaxe, Kompass, Fernglas, Sättel, Pelze usw. Ich würde aber eher andersherum rangehen: Wenn ein ItemAttribute vorhanden ist weißt du, dass es entweder ein Objekt ist (also ein Einrichtungsgegenstand der platziert werden kann) oder ein Kleidungsstück ;)


    Es wäre super, wenn es langesam mal möglich wäre, die Plugins in mit Permissions in einzelne Breich einzuteilen. Dann könnten Server auch eine Support erstellen und denen dan erlauben, gewisse Breiche eines Plugins zu benutzen.

    Ja, das ist dringend nötig... wir wollten das bisher nicht umsetzen da wir uns noch nicht sicher waren, was der beste Weg dafür wäre - und wenn wir es einmal umsetzen, gäbe es keinen Weg mehr zurück (ohne Probleme für bestehende Plugins zu bereiten) - und nichts ist ärgerlicher als für alle Ewigkeit schlechte Designentscheidungen mitzutragen, die in frühen Tagen getroffen wurden...


    Wir überlegen evtl. aber auch, das Permissionsystem generell für die neue Version zu überarbeiten. Das funktioniert zwar an sich ganz gut, doch ist YAML wirklich sehr pingelig was Einrückung etc. angeht - und das führt ja immer wieder mal für allerlei Fehler. Aber hier werden wir in naher Zukunft noch etwas Feedback sammeln ^^


    Eindeutige ID`s für nicht-stackable-Items (befüllte Truhen, Rüstungsteile, Waffen, Werkzeuge etc) würde auch ich mir wünschen. Also bei eigentlich allem, was man in-game als Item in der Welt aufsammeln kann, was nicht Rohstoff ist. Sprich alle Gegenstände, wo Zusatzeigenschaften Sinn machen.

    Einmalige IDs wären wirklich nicht schlecht, doch wenn wir sowas für Items (nach der obigen Definition) umsetzen, müssten wir es konsequent für alle Items umsetzen... sonst wäre es evtl. sehr irritierend, wenn eine Pickaxe zwar eine einmalige ID hat, ein Apfel hingegen nicht :thinking: Aber gerade das Stapeln kann hier für Verwirrung sorgen (siehe oben)... wir müssen uns da nochmal genauer Gedanken machen.


    Ein paar Dinge haben aber bereits einmalige IDs, wie bspw. befüllte Truhen. Die ID verweist zwar nicht direkt auf die Truhe, die in der Welt platziert ist, sondern auf den eigentlichen Storage.

  • Wir überlegen evtl. aber auch, das Permissionsystem generell für die neue Version zu überarbeiten. Das funktioniert zwar an sich ganz gut, doch ist YAML wirklich sehr pingelig was Einrückung etc. angeht - und das führt ja immer wieder mal für allerlei Fehler. Aber hier werden wir in naher Zukunft noch etwas Feedback sammeln

    Naja, das Einrücken in YAML kenne ich bereits von Minecraft. Das hat man schnell raus. Besonders mit Tutoeials. ;)

  • Wir überlegen evtl. aber auch, das Permissionsystem generell für die neue Version zu überarbeiten. Das funktioniert zwar an sich ganz gut, doch ist YAML wirklich sehr pingelig was Einrückung etc. angeht - und das führt ja immer wieder mal für allerlei Fehler. Aber hier werden wir in naher Zukunft noch etwas Feedback sammeln

    Das sich da was evtl ändern soll wurde glaub ich schon mal angedeutet.

    Ich komme zwar auch mit dem jetzigen Systen recht gut zurecht aber viele auch nicht. Grad solche die noch nie mit sowas gearbeitet haben. Letzlich wäre das einzig ware sowas wie ein Editor ( Idee, siehe Bild ), der dann die Permission in welcher Sprache auch immer raus gibt und man diese dann nur noch auf dem Server kopieren muss. Eine weitere Möglichkeit wäre natürlich auch eine Ingame-Vatiante, wo die erstellte Permission dann sofort am richtigen Ort steht.


    Nur das das hier mit der Permissions ja eigendlich ein anderes Thema ist.


    Bei dem Bild habe ich jetz ja weit nicht alle permissions rein geschrieben. Nur so in der Art würde ich mir das Vorstellen. Dahinter dann auch immer gleich eine kurze Erklärung für was das ist. So braucht man nur alle Daten eingeben und in vielen Fällen nur auf True oder False klicken.

  • Letzlich wäre das einzig ware sowas wie ein Editor ( Idee, siehe Bild ), der dann die Permission in welcher Sprache auch immer raus gibt und man diese dann nur noch auf dem Server kopieren muss. Eine weitere Möglichkeit wäre natürlich auch eine Ingame-Vatiante, wo die erstellte Permission dann sofort am richtigen Ort steht.

    Ja, das ist auf jeden Fall geplant, unabhängig davon, wie die Permissions tatsächlich umgesetzt werden. Wir hatten sowas auch bereits für das neue RCON Tool umgesetzt, welches noch für die alte Version angedacht war (es war auch schon recht fortgeschritten, doch der Wechsel auf die neue Version hat diese Pläne natürlich durcheinandergeworfen) :hushed:

  • Moin.

    Einmalige IDs wären wirklich nicht schlecht, doch wenn wir sowas für Items (nach der obigen Definition) umsetzen, müssten wir es konsequent für alle Items umsetzen... sonst wäre es evtl. sehr irritierend, wenn eine Pickaxe zwar eine einmalige ID hat, ein Apfel hingegen nicht :thinking: Aber gerade das Stapeln kann hier für Verwirrung sorgen (siehe oben)... wir müssen uns da nochmal genauer Gedanken machen.


    Ein paar Dinge haben aber bereits einmalige IDs, wie bspw. befüllte Truhen. Die ID verweist zwar nicht direkt auf die Truhe, die in der Welt platziert ist, sondern auf den eigentlichen Storage.

    Also ja, hast recht, wenn der Apfel ein Verfallsdatum hat. Dann aber wäre er ja auch nicht mehr stapelbar. Andernfalls erschließt sich mir die Irriwirrung nicht so wirklich. Liegt vermutlich an meinen unzureichenden Programmierfähigkeiten :D (Keine Ironie, bin nur Hobbiepfuscher und kein Profi ;)

  • showInventory(Player player)

    Das wäre tatsächlich hilfreich, vor allem für Admins. In der alten Version können wir das zwar nicht so ohne Weiteres hinzufügen (da ein Spieler i.d.R. die restlichen Spielerinventare nicht kennt und das Inventar-Handling nicht darauf ausgelegt ist), aber wir versuchen, das in der neuen Version zu berücksichtigen ;)


    Andernfalls erschließt sich mir die Irriwirrung nicht so wirklich

    Möglicherweise reden wir aneinander vorbei, was die IDs betrifft :D Aber wenn manche Items eine einmalige ID haben, andere wiederum nicht, dann könnte das für einen Plugin-Entwickler durchaus verwirrend sein (warum haben nur manche Items eine einmalige ID und andere nicht?)... aber wie gesagt, wir müssen mal schauen, wie wir dieses Thema angehen ^^

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!