Posts by red51

A small new update is available now!

    Hallo Leute! Ein neues Update wurde soeben veröffentlicht, welches einige neue Features ins Spiel bringt. Insbesondere sind nun zwei interessante Items verfügbar: Einerseits ist es nun möglich, Handfackeln herzustellen, welche nützlich sind um die umliegende Umgebung auszuleuchten, zudem funktionieren sie auch unter Wasser, und - das Wichtigste - sie brennen weiterhin, wenn man sie zu Boden wirft.




    Andererseits bringt dieses Update Dynamit ins Spiel. Dazu gibt es im Grunde nicht viel zu sagen, man kann es einfach dazu verwenden, um alles mögliche in die Luft zu sprengen. Es ist recht einfach, damit einen "Tunnel" zu erzeugen, obwohl man berücksichtigen muss, dass man dadurch keine Rohstoffe erhält. Auch sollte man immer im Hinterkopf behalten, genügend Sicherheitsabstand einzuhalten ;)


    Abgesehen davon beinhaltet dieses Update neue Musik für unterirdische Höhlen - was eine gute Vorbereitung auf die kommenden Dungeons ist. Selbiges gilt für manch andere Änderung, die wir vorgenommen haben, so haben wir bspw. Echos/Hall zu Höhlen hinzugefügt.






    Zu guter Letzt beinhaltet dieses Update natürlich auch wie immer eine ganze Reihe an Bugfixes. Seid gespannt auf das nächste Update :)



    Changelog:

    • [Neu] Neuer Gegenstand: Dynamit (lasst uns was in die Luft sprengen!)
    • [Neu] Neuer Gegenstand: Bengalische Fackel
    • [Neu] Neues Erz: Schwefelerz (kann zu Schwefel verarbeitet werden)
    • [Neu] Neue Musik für unterirdische Höhlen
    • [Neu] Echo/Hall zu Höhlen hinzugefügt
    • [Neu] Neue Soundeffekte hinzugefügt
    • [Neu] Befehl "unban" und "deleteplayer" (Permissions beachten) für Multiplayer hinzugefügt
    • [Neu] Befehl "resetphysics" als temporären Workaround hinzugefügt, falls Spieler plötzlich steckenbleiben sollte
    • [Geändert] Updategeschwindigkeit (zB beim Platzieren/entfernen von Planken) von Chunks mit vielen Bauelementen erhöht
    • [Geändert] Platziergeschwindigkeit von Bauplänen erhöht
    • [Geändert] Wenn ein Fehler in einem Plugin auftritt, wird nun eine entsprechende Exception geworfen
    • [Geändert] Durch Plugins verursachte Fehler werden nun im Chat ausgegeben (außerdem erscheint ein Fehlerdialog, wenn zu viele Fehler auftraten)
    • [Geändert] Kobalt (Erz und Barren) entfernt
    • [Geändert] Einige Soundeffekte geändert (z.B. auf Holzblock schlagen)
    • [Geändert] Maximale Größe von Fenstern (Bauelemente) erhöht
    • [Geändert] KeyInputEvents werden nicht mehr ausgelöst wenn Textfeld fokussiert oder Spiel pausiert ist
    • [Behoben] Fehlende Item-Schnellleiste beim Wechsel vom Creative-Modus zu Survival behoben
    • [Behoben] Fehler behoben, dass man ohne ersichtlichen Grund steckengeblieben ist (Physik friert ein)
    • [Behoben] Crash im Zusammenhang mit der Physikengine behoben
    • [Behoben] Probleme beim Kompilieren von Plugins zur Laufzeit behoben (falscher Classpath)
    • [Behoben] Commit Problem behoben, wenn Plugin auf Weltdatenbank zugegriffen hat
    • [Behoben] Plugin API bezogene Fehler behoben, Änderungen durchgeführt und Neuerungen hinzugefügt (siehe API Changelog)
    • [Behoben] Problem mit Connections behoben, wenn Plugins auf MySQL Weltdatenbank zugegriffen haben
    • [Behoben] Problem beim Platzieren von mehreren Planken in einer Reihe behoben (im Creative Modus)

    Du bist nicht der einzige mit diesem Problem, es betrifft auch manche anderen Kabelnutzer, aber nicht alle (es lässt sich kein Muster erkennen, welche Faktoren genau zu diesem Problem führen).


    Ich vermute fast, es hängt mit DS-Lite zusammen, wie es bei eigentlich allen Kabelanbietern angewendet wird (weil ihnen nicht genug IPv4 Adressen zur Verfügung stehen, wird eine IP Adresse quasi von mehreren Kunden geteilt - dein Router verkapselt die IPv4 Pakete sozusagen in IPv6 Pakete, sendet diese an den Provider, dieser wiederum führt auf seiner Seite eine NAT durch).
    Das würde zumindestens erklären, warum das Problem mit DSL nicht auftritt (denn hier wenden die Provider bestenfalls "Dual Stack" an, was aber trotz der Namensähnlichkeit was völlig anderes als "Dual Stack Lite" ist, da hier an den Kunden weiterhin eine richtige IPv4 Adresse vergeben wird).


    Leider können wir nichts an diesem Problem machen, außer, einen automatisierten Reconnect einzubauen. Fest steht, wenn der Connection Reset auftritt, handelt es sich um einen kurzzeitigen Abbruch der gesamten Internetverbindung (auch die HIVE-Verbindung geht verloren, seit einigen Versionen verbindet sich das Spiel aber automatisch neu).
    Da das Spiel für den Netzwerkbetrieb mehrere Ports sowie nicht nur TCP, sondern auch UDP Verbindungen verwendet, ist die Umsetzung eines automatischen Reconnects leider mit einem gewissen Aufwand verbunden. Da wir generell planen, das Netzwerksystem zu überarbeiten (und im gleichen Zuge auch mit Steam's peer-to-peer kompatibel zu machen [also das bekannte Feature, Freunde über die Freundesliste direkt einzuladen ohne irgendwelche Ports freigeben zu müssen]), würde es sich anbieten, den automatischen Reconnect auch erst zu diesem Zeitpunkt einzubauen (das wäre sonst doppelte Arbeit). Leider haben wir noch nicht die Zeit dafür gefunden, und ich fürchte, die Akzeptanz dafür würde sich momentan auch in Grenzen halten (also wenn wir jetzt bspw. 1-2 Monate ins Netzwerksystem stecken, wovon effektiv nur wenige Leute direkt profitieren, es aber aktuell so viele andere Baustellen gibt).


    Wenn die Möglichkeit besteht, sollte IPv6 verwendet werden (denn von deinem Kabelanbieter bekommst du auf jeden Fall eine richtige IPv6 Adresse zugewiesen), oder alternativ einen VPN Service wie bspw. Cyberghost.

    Es gibt tatsächlich teilweise Schwierigkeiten mit den Permissions im LAN Modus. Es hängt auch damit zusammen, ob du selber Admin bist (also Host) oder nicht.
    Die Probleme sollten irgendwann in absehbarer Zeit behoben werden. Bis dahin wäre es sinnvoll, stattdessen einfach einen lokalen dedicated Server aufzusetzen.

    Wird es ansonsten eine funktionierende Löschfunktion im Spiel vor dem Herausnehmen der Lua Scripts geben?

    Momentan bietet die API diese Funktion noch nicht, daher bietet auch das Java-Pendant von Worldedit sowas nicht an. Mit dem nächsten Update werden diese Funktionen aber ins Spiel kommen, ich denke nach kurzer Zeit wird dann auch das Worldedit-Plugin geupdated.
    Früher oder später wird auch der reguläre Creativemodus diese Funktionen erhalten.

    Leider eine leere Fehlermeldung :( Ich denke, das hängt mit der Physikengine zusammen, da sollte sich mit dem nächsten Update was tun. Ansonsten wäre im Zweifelsfall ein vollständiger Log hilfreich (also einer, der den Zeitpunkt beinhaltet, wo solch ein Crash auftritt).

    i looked up the error, how do I set it to null???

    A NullPointerException indicates that you tried to access a variable or a value which is null. Especially when it comes to attributes, it does throw a NullPointerException if you try to access an attribute which does not exist. Although you can cast an attribute and check if it's null afterwards, but this does only work for objects, not for primitive data types. For example:

    Java
    //This does work, "value1" will be null if this
    //attribute is not set
    String value1 = (String)player.getAttribute("value1");
    //This throws a NullPointerException if the
    //attribute is not set
    int value2 = (int)player.getAttribute("value2");


    The next update introduces a convenient method "hasAttribute()" which can be used to check if an attribute is already set. But it's always favorable to make sure that an attribute is already set when accessing it (even if you just set a default value in the PlayerConnectEvent or PlayerSpawnEvent).

    Hast du ggf. mal versucht, das Brett mit STRG einzufrieren, sobald es in der gewünschten Position ist (sodass es sich nicht mehr bewegt, wenn du die Maus bewegst)? Dass so gewaltige Winkelunterschiede auftreten ist schon merkwürdig 8| Besteht irgendwie die Möglichkeit, deine Map (oder irgendwie ein Blueprint, mit welchem sich der Fehler reproduzieren lässt) irgendwo hochzuladen, damit wir uns das mal genauer zu Gemüte führen und der Ursache ggf. auf den Grund gehen können)?


    Wegen Steam: Die Meldung "Benutzerkonfiguration wird aktualisiert" kenne ich gar nicht, kann aber eigentlich nicht schlimm sein. Dass bei der Überprüfung der Spieldateien eine Datei neu angefordert wird, ist mehr oder weniger normal, das ist meist eine Konfigurationsdatei die sich direkt nach dem Download ändert.

    If it is of any help, this is what I tried: from one plug-in, I accessed the System Class Loaded

    Yeah, this would work of course (after making the addUrl() method accessible via reflection [it's ugly indeed, but not that ugly in this case :D ]), but it's favorable to have (a) separate classloader(s) for the plugins when it comes to reloading: Unloading a class during runtime isn't intended in Java, so the only "acceptable" way to reduce the risk of running into any memory issues or resource conflicts would be to unload the classloader (so invoking the garbage collector is supposed to remove all related objects), which wouldn't work with the system classloader :saint:

    Der sauberste Ansatz, um etwas zeitverzögert auszuführen, wäre die Verwendung von Timern (Wichtig: Auf den Import achten, also Timer aus net.risingworld.api importieren) :) Du könntest also in die PlayerConnectEvent oder besser noch PlayerSpawnEvent Methode folgendes reinpacken:


    Der Ansatz von @Galveston01 würde natürlich auch funktionieren, nur ist es hier unbedingt wichtig (wie in seinem Beispiel), dass der Threading Modus der Event-Methode auf "Threaded" gestellt wird (sonst bleibt der halbe Server für 30 Sekunden stehen) ;) Hier muss man jedoch berücksichtigen, dass diese Eventmethode dann immer in einem separaten Thread ausgeführt wird, man sich also zB beim Zugriff auf globale Variablen ggf. selbst um eine angemessene Synchronisierung kümmern muss. Da Multithreading teilweise sehr komplex sein kann, würde ich Anfängern dringlichst die Timer-Methode ans Herz legen (zumal die Verwendung von Threaded-Events in erster Linie nur dann sinnvoll ist, wenn wirklich rechenintensive Operationen durchgeführt werden sollen - davon sind wir in diesem Beispiel meilenweit entfernt, sodass ein Timer eindeutig resourcensparender wäre).

    Unfortunately, both methodologies suffer from a serious drawback: both require the target plug-in to be in the CLASSPATH. Apparently, no plug-in .jar is in the CLASSPATH (which makes sense from some point of view), so no plug-in can access the definition of other plug-in classes (or inner classes); trying results in a run-time java.lang.ClassNotFoundException.

    Hmm... this is indeed a problem (it makes the getPluginByID/Name() methods rather useless). Currently each plugin has an own classloader (in order to be able to unload a plugin properly), unfortunately these classloaders don't know anything about each other. Basically even a minor change (load all plugin by a single classloader) would do the trick, but first we have to make sure this doesn't result in any other issues (especially regarding the ability to reload plugins on the fly).