Posts by noci

    getstatisticnew-api-vs-old-api


    Java
    @EventMethod
    public void onChatMessage(PlayerChatEvent evt) {
    processChatEvent(evt);
    }
    public void processChatEvent(PlayerChatEvent evt) {
    System.out.println(evt.getChatMessage());
    }



    new-plugin-ui





    new-plugin-game-objects




    Als "Workaround" bis dahin kannst du sonst das HUD auf Screenshots sichtbar lassen, aber über die API ausblenden. Das geht über diesen Code:

    Code
    Style s = new Style();
    s.display.set(DisplayStyle.None);
    Internals.overwriteUIStyle(player, "HudLayer/hudContainer", s);

    Nur Vorsicht: Du kannst danach den Chat nicht mehr bedienen (daher macht das Sinn, das nicht über einen Command zu machen, sondern über einen Tastendruck, wodurch "DisplayStyle" anschließend wieder auf "Flex" gesetzt werden kann).


    Im Zweifelsfall kannst du die Welt neu laden, dabei wird die UI wieder zurückgesetzt ^^




    some-gui-question



    plugin-api-wehre-schön-wenn-fehlerberichte-it-would-be-nice-if-bug-reports

    Java
    //Load an image from a plugin resource
    TextureAsset image = TextureAsset.loadFromPlugin(this, ...);
    //Create new UI element and assign the image
    UIElement panel = new UIElement();
    panel.style.backgroundImage.set(image);
    //Add element to player screen
    player.addUIElement(panel);



    chat-farben

    Code
    player.sendTextMessage("<color=red>Roter Text</color>");
    player.sendTextMessage("<color=#ff0000>Roter Text</color>");

    Supported rich-text tags

    javadoc: Class Player

    ColorNames



    getstatistic



    calculate-height-on-z-axis



    onplayersleepevent


    Java
    @EventMethod
    public void onPlayerChangeState(PlayerChangeStateEvent evt){
    Player player = evt.getPlayer();
    //If new state is "sleeping", player went to bed
    if(evt.getNewState() == Player.State.Sleeping) System.out.println("Player " + player.getName() + " is now sleeping");
    //If old state was sleeping, player is now definitely no longer sleeping
    //(otherwise there wouldn't have been a state change)
    else if(evt.getOldState() == Player.State.Sleeping) System.out.println("Player " + player.getName() + " is no longer sleeping...");
    }


    ui-override

    Java
    Style style = new Style();
    style.backgroundImage.set(TextureAsset.loadFromFile(...));
    style.backgroundImageTintColor.set(1f, 1f, 1f, 1f);
    Internals.overwriteUIStyle(player, "inventoryLayer/inventoryContainer", style);


    an-callback-example

    Java
    event.getPlayer().showMessageBox(MessageBoxButtons.Yes_No_Cancel, "Title", "Question", 0, button -> {
    switch (button) {
    case 0 -> event.getPlayer().sendTextMessage("YES!");
    case 1 -> event.getPlayer().sendTextMessage("NO!");
    case 2 -> event.getPlayer().sendTextMessage("CANCEL! (Or just timeout)");
    }
    });


    Wetter Ändern

    Java
    WeatherDefs.Weather heavyRain = Definitions.getWeather("heavyrain");
    Server.setWeather(heavyRain, true);


    playercraftitemevent

    Java
    //Example: Prevent player from crafting the repeater item or paper press object
    @EventMethod
    public void onPlayerCraftItem(PlayerCraftItemEvent evt) {
    Crafting.Recipe recipe = evt.getRecipe();
    if (recipe.name.equals("repeater") || recipe.name.equals("paperpress")) {
    evt.setCancelled(true);
    }
    }


    blueprints-and-total-elements

    ehrlich gesagt ein bisschen "Overengineered"

    :lol:Ja, sorry das kommt bei mir immer mal wieder vor:D


    wir könnten ggf. ein weiteres UITarget einführen

    Ja, ich denke auch das würde Reichen:thumbup:


    =Oda muss ich erstmal noch einiges Lesen:Dich vermisse an einiegen Stellen kleine Beispiele in der API, zum besseren verständnis der zusammenhänge, alles zu seiner Zeit:saint:

    OKe, das habe ich übersehen


    Aber irgendwie sind die jetzt etwas unterschiedlich


    Vorher hat es mir besser gefallen, das der Hud nicht mit dabei war


    Kann ich nicht im Plugin entscheiden ob es auf dem Screenshoot mit erscheinen Darf oder generell nicht?
    Könntest du da Vieleicht noch eine Option für "nur Sicht"(kein HUD) und mit "Normal"(wie vorher war) und "Alles"(so wie Jetzt ist) machen:saint:
    Geht das nicht das auf dem HUD Mehrere Ebenen sind? (Spiel-HUD, Spiel-Anzeigen,UIElement,Yell-Nachrichten)
    Gibt es da schon eine nur für UIElemente?
    Die Ebenen könnten ja dann für den Screenshoot einzeln eingestellt werden^^

    :thumbup:Super, Danke für das Update


    Andere Plugins könen jetzt geladen werden^^
    Die System.out.println & System.err.println sind jetzt in der Konsole gut zu unterscheiden:wow:

    Noch eine kleinigkeit, wegen dem UIElement und dem hoverStyle, wenn ich einen PlayerUIElementClickEvent habe und wie in ASB den Inhalt überarbeite, Funktioniert danach das Hovern nicht mehr.
    Ich hatte auch schon Versucht nach dem überarbeiten die betreffenden style & hoverStyle neu zu setzen, ohne erfolg.
    Meine Vermutung liegt darin das eventuell das mir dem ClickEvent und der Maus Position im Hoverbereich zusammen hängt. Wie wenn ich eine Taste gedrückt halte, das Spiel den Focus verliert und damit den "KeyUp" nicht mehr registriert, und ich damit Dauerfeuer "geschietet" habe ^^

    Mein zewiter Ansatz ist, weil die UIElemente über die Player Attribute gespeichert werden und da etwas nicht Richtig mit kommt.


    Ist das absicht?

    Das bei einem PlayerUIElementClickEvent mir der Event von allen Registrierten Playern auftaucht?

    Dieses Plugin verlangt bei der ersten Server Anmeldung vom Spieler, die Regeln durchzublättern und zu akzeptieren oder abzulehnen. (Steuerung über Maus)

    Werden die ASB akzeptiert, wird der Spieler in die Gruppe acceptGrouphinzugefügt.

    Andernfalls wird er in die Gruppe defaultGroup gesetzt, wenn er nicht schon in ihr ist.


    Sollte sich jemand erneut anmelden, der zuvor schon die Bedingung abgelehnt hat, wird ihm das Regelwerk ab der 2. Seite wieder angezeigt.



    Die Texte können alle gängigen Rich Text Tags enthalten



    ### INSTALATION ###

    Das Arcive Öffnen und den Ordner ASB in den OrdnerPlugins



    :!:Es müssen beide Dateien Heruntergeladen werden und im gleichen Ordner liegen um sie zu Entpacken:!:

    Looks like there is no such constructor in target class, at least for these arguments. Usage of reflections is also not a very good way, is it possible to avoid them for your case?


    Also der Konstrukter ist definitiv da, sogar in einer Seperaten Datei

    ---

    So the constructor is definitely there, even in a separate file


    Ja eigendlich wollte ich mit den Fields Arbeiten

    ---

    Actually, I wanted to work with the Fields

    Code
    public Object reload(Object config, JSONObject loadConfig){
    Class<?> configClass = config.getClass();
    Field[] fields = configClass.getDeclaredFields();
        ...
    }


    Ich Lade die vorkonfiegurirte Variable und überschreibe die Vorhandenen Daten, das geht auch so weit ohne große Probleme.

    Nur wenn ich einen neuwn Datensatz hinzufüge, brauche ich eine Vorlage
    Nehme ich eine der vorhandenen, da es "nur" Zeiger sind , bekomme ich das Orginal der Vorlage und habe eine Identische Kopie
    Hier muss ich eine dan die Class erstellen mit neuem Zeiger, aber hier gibt es auch sein Java8 eine umstellung und Chaos

    Und selbst wenn ich mit den Metoden arbeite muss ich ja wenn etwas hinzu kommt auch einen "Unbekannten Type" inizialiesieren
    Das bauche ich auf jeden fall noch, um zwischen dem Orginal-Type der Klasse und dem JSON-Typen zu Konvertieren

    ---

    I load the preconfigured variable and overwrite the existing data, that goes so far without any major problems.

    Only when I add a new record do I need a template
    If I take one of the existing ones, since they are "only" pointers, I get the original of the template and have an identical copy
    Here I have to create a dan the class with a new pointer, but here there is also a Java8 conversion and chaos

    And even if I work with the methods, I have to initialize an "unknown type" if something is added
    In any case, I still need that to convert between the original type of the class and the JSON type



    Wenn du einen anderen ansatz hast, große Konfigurationen Überlichtlich zu Schreiben und dabei noch Dynamisch beim Laden zu halten, lass es mich wissen ^^

    Das ist gedacht um soviel wie möglich an Einstellungen und anpassung für den Serverbetreiber zur verfügung zu stellen.

    z.b das ein Serverbetreiber mit einer Config ein eigenes Rezept (Konfiguration, Bilder) mit Item (3D Daten) mit Event auswahl selber definieren kann, und das ebend soviel er Konfigurieren kann8)

    ---

    If you have another approach to overlighting large configs while still keeping dynamic while loading, let me know ^^

    This is meant to provide as much settings and customization as possible for the server operator.

    e.g. that a server operator can define his own recipe (configuration, images) with item (3D data) with event selection with a config, and that as much as he can configure8)


    Schöner als uhrConfigRecipe.yml.txt und mehr:saint:

    Ich habe noch ein Problem, ich versuche eine neue Insctance zu erstellen(so im Netzt gefunden):


    Java
    Class<?> clazz = Class.forName(componentType.getName());
    System.out.println("("+i+":> "+" NewClass["+componentType.getName()+"] ");
    System.out.println("("+i+":> "+" NewClass["+clazz.getClass()+"] ");
    // Get the private constructor.
    Constructor<?> cons = clazz.getDeclaredConstructor(componentType);
    // Since it is private, make it accessible.
    cons.setAccessible(true);
    // Create new object.
    Object obj = cons.newInstance();

    Allerdings komme ich nicht an der net.jiw.unity.runtime.PluginLoader.loadPlugins(PluginLoader.java:71) vorbei, das Netz liefert keine andere Lösung, die ClassASBConfig ist public und constructor ist auch vorhanden.

    Code
    Apr. 20, 2023 1:20:53 AM de.chaoswg.JSONManagerASB reload
    SCHWERWIEGEND: null
    java.lang.NoSuchMethodException: de.chaoswg.ClassASBConfig$ClassSeite.<init>(de.chaoswg.ClassASBConfig$ClassSeite)
    at java.base/java.lang.Class.getConstructor0(Class.java:3685)
    at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2854)
    at de.chaoswg.JSONManagerASB.reload(JSONManagerASB.java:304)
    at de.chaoswg.JSONManagerASB.update(JSONManagerASB.java:472)
    at de.chaoswg.ASB.onEnable(ASB.java:119)
    at net.jiw.unity.runtime.PluginLoader.loadPlugins(PluginLoader.java:71)

    Ich hoffe ja das es mit dem Update beim Classloader Funktioniert, vieleicht kannst du ja schon sehen ob sich das geben wird
    Oder muss ich noch etwas berücksichtiegen?

    Wie bekomme ich die ServerOptionen herraus?
    Normal sollte das ja mit Server.getOptiongehen.

    Ich bekomme bei allen Varianten NULL zurück:

    System.out.println("SRV Option: "+Server.getOption("Permissions_DefaultNewPlayerPermissionGroup"));

    System.out.println("SRV Option: "+Server.getOption("Permissions DefaultNewPlayerPermissionGroup"));

    System.out.println("SRV Option: "+Server.getOption("DefaultNewPlayerPermissionGroup"));

    Also ich arbeite derzeit nur für Server und habe in der Sub-Class:

    ---

    So I'm currently only working for servers and have in the sub-class:

    Code
    public MyListener(Plugin plugin){
        this.plugin = plugin;
        plugin.registerEventListener(this);
    }

    Das klappt ohne Fehler

    ---

    This works without errors


    Dann aber auch ohne diese Zeile

    ---

    But then also without this line

    Code
    @Override
    public void onEnable() {
        MyListener lt = new MyListener(plugin);
        registerEventListener(lt);
    }

    Aber ob das nicht auch so gehen soll wie du das gemacht hast, weiß ich nicht, vieleicht ist das doch ein fehler

    ---

    But I don't know whether it shouldn't work the way you did it, maybe that's a mistake

    :saint:Ja, vieleicht war ich etwas zu Müde und zu Ungeduldig
    Die Seite mit IStyle habe ich neben bei offen, nur Blind gewesen
    Zeilenumbruch klappt einbanfrei:thumbup:

    Nur der clickable hat die Runde Ecke nicht erkannt


    Wenn ich hier nix gemacht haben um das Abzuschalten
    Klappt das noch nicht richtig


    panelHG ist mit Fester Größe, deswegen kann ich die Rundung so berechnen


    Also wenn das mit den Rundungen klappt reicht das ja schon:thumbup:müssen ja nicht übertreiben:saint:

    Ich versuche gerade Text schön zu gestallten ^^
    Irgendwie bekomme ich den Automatischen Zeilenumbruch nicht hin

    Bin ich hier Richtig bei flexWarp

    Kann vieleicht noch für den Clickable Event eine Maske einfügen, damit bei Runden oder Transparenten Bildern auch nur im Richtiegen Bereich der Event ausgelöst wird. Mit OverflowClipBox.ContentBox kann ich auch nichts Steuern, selbst innerhalb vom Ramen bringt nix
    Oder ich bin da auf dem Holzweg^^

    Wehre es möglich eine JSON.jar mit in den RisingWorldDedicatedServer\Data\Java\Libs Ordner zu Packen?
    Allerdings bin ich selber etwas überfordert, welche die richtige ist, zumindestens habe ich keine Version gefunden die unter NetBeans JDK 20 funktioniert

    Ich finde das JSON-File-Format schöner als das fon snakeyaml^^

    ###
    Also json-simple-1.1.1.jar fäuft jetzt, aber ich hatte mir das anders vorgestellt, mit Writer, Reader und Pharser:dizzy: