Von Area erben

  • Hallo red51 ,


    gibt es irgendwie eine Möglichkeit, das man von der Klasse Area erben kann.

    Ich würde gerne eigene Area-Arten anlegen (z.B. "AreaPlot", "AreaFactory" etc.)

    Dann wäre das Verwalten und Filtern von Areas noch einfacher.

    Beispiel:

    Und dann:

    So wäre es auch möglich, nach bestimmten Areas zu filtern und man kann sicherstellen, dass diese Area von diesem Plugin kommt. :D


    Ich habe auch noch eine weitere Frage zu den Areas:

    Muss man neue Areas immer noch selbst in einer eigenen Datenbank speichern oder werden neu erstellte Areas von Plugins auch, wie deine WorldProtection-Areas in die World-Datenbank gespeichert und wir müssen nur die ID speichern? :thinking:

  • gibt es irgendwie eine Möglichkeit, das man von der Klasse Area erben kann.

    Das funktioniert leider nicht so richtig... das Problem ist, dass es auf nativer Seite nur die generische "Area" gibt. Wenn man also eine Area aus zB dem "PlayerEnterAreaEvent" ausliest, ist das nicht zwangsläufig dasselbe Area-Objekt, das du vorher erstellt hast. Intern werden Areas nur über ihre ID identifiziert. Das könnten wir theoretisch zwar ggf. ändern, aber die eigentliche Area-Referenz geht spätestens verloren, wenn eine Area aus der Datenbank ausgelesen wird. Sprich wenn du zB einen "FactoryPlot" erstellst und in der Datenbank speicherst und beim nächsten Mal ausliest, dann wird es automatisch zur "Area" (das lässt sich leider nicht ändern) :silenced:


    Muss man neue Areas immer noch selbst in einer eigenen Datenbank speichern oder werden neu erstellte Areas von Plugins auch, wie deine WorldProtection-Areas in die World-Datenbank gespeichert und wir müssen nur die ID speichern? :thinking:

    Es gibt temporäre und persistente Areas - letztere werden dauerhaft in der Datenbank gespeichert, bis sie explizit gelöscht werden ;) Das kann über den 2. Parameter von Server.addArea() bestimmt werden.

  • Intern werden Areas nur über ihre ID identifiziert. Das könnten wir theoretisch zwar ggf. ändern, aber die eigentliche Area-Referenz geht spätestens verloren, wenn eine Area aus der Datenbank ausgelesen wird. Sprich wenn du zB einen "FactoryPlot" erstellst und in der Datenbank speicherst und beim nächsten Mal ausliest, dann wird es automatisch zur "Area" (das lässt sich leider nicht ändern) :silenced:

    Das ist mir klar, dass ich da nur Areas bekommen, aber dies lässt sich ja in einer eigenen Datenbank speichern.

    In meiner Datenbank speicher ich nur die ID und welcher "AreaType" es ist (z.B. mit einer Zahl: 1 = FactoryPlot; 2 = PlayerPlot; etc.)
    Dann kann ich ja mit einer Methode wieder die Area z.B. zu einer FactoryPlot machen:

    Java
    List<SavedArea> areas = plugin.Areas.getAllAreasFromDB(); //SavedAreas ist eine Klasse, mit der ich die Area-ID, "AreaTyp" und Anderes erhalte erhalten kann
    for (SavedArea sa : areas) {
    Area area = Server.getArea(sa.getID())
    if (sa.getTyp() == 1) {
    FactoryPlot fp == new FactoryPlot(area);
    plugin.factory.addFactoryPlot(fp)
    }
    }

    Und somit habe ich aus der Area wieder eine FactoryPlot gemacht. Mann muss die Area nur eindeutig identifizieren können (z.B. ID).


    Mir ist dann nur wichtig, dass man auf die Area-Funktionen + meine eigenen Funktionen zugreifen kann. Meine eigenen Funktionen speichere ich in einer eigenen Datenbank. ;)

    Du musst sie nicht als FactoryPlot in deine Datenbank speichern. Wenn sie dort als Area gespeichert ist, reicht das völlig.

Participate now!

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