Beiträge von zM4xi

    Eigentlich nicht besonders kompliziert.

    Aber etwas Können gehört dazu :D


    Zuerst speicherst du am besten immer die Blocklocation der Kisten, dann zum sichern des Inhalt abfragen beim Öffnen von Kisten ob es eine der gespeicherten Locations ist, Ausnahme der Besitzter natürlich.


    Nun zum Schild, das Schild aktualisierst du am Besten bei jedem Ver- /Kauf und wenn der Inhaber die Kiste schließt. Somit sollte das Schild immer aktuelle Werte anzeigen.


    Um das Schild zu erstellen kannst du 2 wählen zwischen via Command oder direkt per Hand schreiben.

    Via Command hat den Vorteil du kannst das Schild nachträglich ändern ohne das man es erst abreißen und neuplatzieren muss.


    Per Schild ist eigentlich ja selbsterklärend, beim SignChangeEvent die Zeilen abfragen und nach den Informationen prüfen.


    Die Itemanzahl in der Kiste zählen geht indem du den Block der gespeicherten Location bekommst und dann checkst ob es ein Container ist (Keyword: instanceof) ist das der Fall zu einem Container casten und den Inhalt zählen.


    Zum Thema automatische Itemerkennung, das ist etwas knifflig entweder beim in die Kiste legen prüfst du das nur ein Typ Item drinne ist oder du lässt den Spieler per Hand schreiben/per Command welches Item verkauft/gekauft werden soll.


    Da du schon geschrieben hast es die Items erkennen soll hier wie es geht:


    Beim Container schließen prüfen ob nur ein Typ Item in der Kiste ist falls nicht, Inventar wieder öffnen oder optional einfach alle Items droppen. (Hier kannst du, wenn du gerne Algoryhtmen schreibst, nur die Itemtypen droppen die in der Minderheit sind)

    Dann bei Command/Schild platzieren einfach wieder auf den Block bzw den Container zugreifen und die Items "auslesen"

    Es wäre zum einen schonmal gut wenn wir wissen um welche Sprache es sich hier handeln soll, dementsprechend gibt es vielleicht wie z.B. Java oder PHP UUID in C' gibts Guid's etc

    Und dann die Frage speicherst du das in ner Datenbank? Wenn ja einfach ne Spalte uniqueUserId INT AUTO_INCREMENT PRIMARY KEY machen?

    2. Spieler in Creative Mode setzen, und InventoryOpen, BlockPlace, BlockBreak Events und so weiter selber handeln.

    Das Problem dabei is nur das er dann auich keinen Schaden bekommt oder Leben hat er müsste eigentlich einen komplett eigenen Gamemode entwickeln :D


    Die wohl einfachste Variante ist, wie Pierre schon sagte, ein Ressourcepack und das dann "Forcen"

    Allerdings kannst du natürlich auch versuchen Vehicle Packets zu senden. Wie das geht kann ich dir aber leider nicht sagen.

    Naja die ersten 7 Fehler sagen Type Missmatch!

    Der Rest sieht so aus als wären es Folgefehler der Type Missmatches!


    Ich rate einfach mal MCP neu zu laden.

    Versuch doch mal deine Hashmap anders zu befüllen. Soweit ich weiß hat das befüllen mithilfe einer anonymen klasse einige seiteneffekte und kann zu Fehlverhalten führen in gewissen Konstellationen.


    Also Map deklarieren, dann einzeln Elemente hinzufügen und dann map in das Jason packen.

    Das habe ich bereits ich hab versucht direkt den Datentyp Map / List zu setzten in die Map hat aber das selbe Ergebnis hervorgebracht.


    Admiral_Zott

    Ist zwar ganz nett so aber mein Ziel ist mit dieser Datei gewesen EINE Klasse zu haben die ich einfach importiere und fertig.

    Und das das mit den Properties nicht klappt erklärt sich einfach dadurch das eine .properties Datei schon von der Struktur her nicht in der Lage ist irgendeine Art von "Complex Datatype" anzuzeigen.



    OKAY WOW...


    ich hab mein "Fehler" gefunden oder sollte ich sagen das Hirngespinst von JAVA :(

    Also das Problem waren die Doppelten geschweiften Klammern anscheinend interpretiert Java die so als wäre kein Konstruktor vorhanden zumindest hat Gson dann das hier {} als Konstruktor beim auslesen. Naja wenn man sich seine Finger bricht und die 2 extra Zeilen schreibt erkennt Gson auch den Konstruktor und bekommt nicht null raus.


    UND JA ich weine innerlich :D

    Also für alle Schreibfaulen die das selbe Problem haben schreib die Deklarierung, Initialisierung und die Befüllung in einzelne Zeilen dann ist das Problem gelöst :D

    Ok im Anhang die Configuration Klasse :D

    Aber an setMap() liegt es sicher nicht. Ich setzte wortwörtlich nur die Value in der HashMap sonst nichts :(

    Zu Json und somit in die File gespeichert wird es erst in save().


    Ich werde mal versuchen das ganze so umzubauen anstatt den Objekten direkt nur die Json Strings zu speichern aber das ist dann wiederum mit ner Menge de/serializen verbunden für jedes einzelen Objekt das gepsiechert wird.

    Ja also ich hab die aktuellste Version von Gson (2.8.5).


    Ich habe ein sehr seltsames Verhalten beobachtet. Ich habe den Code von dir kopiert und ausprobiert funktioniert auch wie bei dir einwandfrei. Nun überschreibe ich die HashMap der Configuration Klasse direkt mit einem Setter und dann funktioniert das auch über die Configuration Klasse.


    Sobald ich allerdings die Werte einzeln in die HashMap einfüge kann Gson es auf einmal nicht mehr lesen und ich kann einfach nicht verstehen wieso!


    Code
    1. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
    2. serializeHashMapTest();
    3. Configuration.JSON json = new Configuration.JSON(file, "plswork");
    4. json.setDataMap(map);
    5. json.save();

    Ergebniss:


    Und dann so:

    Ergebniss:

    Code
    1. {
    2. "testInt": 15,
    3. "fixedMap": null,
    4. "string": "test",
    5. "Map": null
    6. }

    Die Map zum internen speichern in der Configuration Klasse ist ebenfalls eine LinkedHashMap mit den selben Typ Parametern.

    Hey Leute,


    habe ein kleines Problem ich arbeite gerade mit Gson und versuche in einer LinkedHashMap<String, Object> eine HashMap zu speichern sozusagen wie folgt:


    Code
    1.         LinkedHashMap<String, Object> dataMap = new LinkedHashMap<>();
    2. HashMap<?, ?> hashMap = new HashMap<>();
    3. dataMap.put("key", hashMap);


    Nun will aber Gson aus irgendeinem Grund die Map nicht serialisieren. Auch eine ArrayList klappt nicht allgemein alle complexen Datentypen. Lustigerweise funktionieren eigene Klassen einwandfrei :(


    Folgende Methode führe ich aus


    Und in der Datei bekomme ich folgendes Ergebnis:



    Hier noch die verwendeten Methoden:

    Ich hoffe irgend jemand weiß wieso die einfach nicht serialisieren wollen. Ich habe auch schon einen Test gemacht ohne die überliegende HashMap (direkt HashMap nach Json) das funktioniert ohne Probleme ich vermute dass es daran liegt das ich die HashMap/List/etc. als Object zwischenspeichere bin mir aber nicht sichern.

    Gut mit der Gefahr das jemand das Programm decompiled muss man wohl bei Java leider immer rechnen.


    Nun vermutlich wäre tatsächlich die beste Lösung wie schon LGA1151 angedeutet hat die Authentifizierung auf einen für Dritte unzugänglichen Service auszulagern.

    Dabei fallen mir 2 Wege ein.

    Datenbank oder REST-API

    Wobei natürlich die REST-API das mit Abstand der beste wäre da wirklich der komplete Code für die Authentifizierung außer Reichweite Dritter liegt. Und alles was sie aus einer Response erhalten würden wäre true oder false.


    Nun zum eigentlichen Thema:


    Schreibe dir eine eigene Session Klasse. Ist nicht sehr schwer, alles was du brauchst ist der Zeitpunkt der letzten Aktion nun legst du einen maximale Dauer fest zur letzten Aktivität, sollte diese überschritten werden einfach die Session "schließen". Bei jeder Aktion prüfst du ob die Session schon abgelaufen ist, falls ja muss der Nutzer sich zuerst wieder einloggen :D

    Natürlich bei jeder Aktion die SessionActivity updaten :D



    PS:

    ---

    1) Große Programme bzw. Spiele entsprechen nicht der Performance einer neueren Sprache. Siehe Minecraft.

    2) Java würde ich jetzt nicht als die leichteste Sprache deklarieren...

    3) Die Ladezeiten: Ja..ein schönes UI ist auch in JavaFX noch möglich...jedoch bist du bei C# schon 1000x besser dran mit den Ladezeiten als bei Java!

    ---

    Java ist im Vergleich zu einigen anderen Sprachen sehr performant.

    Java mag zwar nicht die einfachste zu Lernende / Programmierende Sprache sein aber als Entwickler so einiger Sprachen versichere ich dir das es SEHR angenehm ist einfach eine Variable deklarieren zu können ohne darauf achten zu müssen die Ressource wieder freizugeben :D Auch was Deployment angeht ist Java ein Traum mit der richtigen IDE kannst du mit nur einem Klick compilen, deploy'n und einen Test starten :D

    Im dritten Punkt gebe ich dir voll Recht JavaFX ist wirklich keine Schönheit aber mal ehrlich das sind "reine" WindowsForms oder WCF auch nicht wirklich. Deswegen gibt es Leute die Frameworks/Libs/etc schreiben um das zu erreichen ich zum Beispiel nutze in C# häufig Modern UI (Windows 8.1 Styled C# WF Framwork) und ich habe zwar noch nie dannach gesucht aber ich bin mir sicher das es auch in Java Design Frameworks gibt.


    Hoffe das hat etwas geholfen ;|


    Grüße Maxi

    Falsch ein Betreiber eines Service darf alles speichern was er will solange der Nutzer diesem auch zustimmt. Dazu akzeptierst du hier im Forum auch dieses kleine nervige Fenster jedesmal wenn sich die DSGVO ändert :D

    Insbesondere die IP's solltest du nicht löschen den für den Fall das auf deinem Service illegales getrieben wird und du nicht nachweisen kannst das Nutzer X das war dann wirst du dafür belangt.


    Also wenn du es richtig machen willst, lass die Nutzer es entweder manuel akzeptieren oder schreib Ihnen durch "Durch das benutzten dieses Service, akzeptierst du ..."

    So bist du abgesichert und hast dennoch die Möglichkeit diese durchaus brauchbaren Daten für Statistiken, Sperren etc zu verwenden.

    Wenn du 100% auf Nummer sicher gehen willst hash die IP Adressen bevor sie in ne Datenbank etc gepackt werden. Funktioniert an sich noch exakt gleich nur das man halt die IP nicht im Klartext lesen kann!


    Hier nochmal gut nachzulesen: https://www.datenschutz.org/ip-adresse-datenschutz/

    Zitat


    Doch das EuGH-Urteil bedeutet nicht, dass keiner mehr eine IP-Adresse speichern darf. Erlaubt ist dies nach wie vor, wenn Sicherheits- oder Funktionalitätsinteressen dem Datenschutz der Seitenbesucher überwiegen.

    (Der nutzen bei einem Minecraft Server wäre hierbei das Bansystem, ohne das die einwandfreie Nutzung nicht mehr möglich ist)

    Also spätesten nach diesem "unprofessionellen und kindischem" Beitrag ist wohl allen klar das man sich wohl 2x mal überlegen sollte seine Zeit für dieses Projekt zu opfern :(

    Also ich kann nirgends in seinem Beitrag lesen das er behaupteten würde er würde so etwas nicht machen.


    Damit die Tomaten auf den Augen das auch mal mitbekommen.

    Ein einfacher Blick ins Impressum der Seite zeigt schon das Matthias nicht der Inhaber dieser Seite ist und somit in keinster Weise für deren Inhalt/Links etc. verantwortlich ist.

    Vielleicht hat der Inhaber hytale-news.de sich einfach gedacht 2 deutsche Hytale Foren machen keinen Sinn verlinke ich also einfach das andere.

    Ich vermute mal Matthias wird da nichts gegen die Gratis Werbung haben xD


    Nur weil auf einer Webseite eine andere verlinkt ist bedeutet das nicht das er irgendwie in Verbindung mit dieser Seite steht :D

    Du hast auf deiner Seite Facebook, Twitter, YouTube und Google verlinkt, hast du die per Mail über eure Partnerschaft benachrichtigt oder hast du Beziehungen?


    Thema Behauptungen aufstellen. Du schreibst:

    Selbst große Entwickler aus der Minecraft Scene und Leute vom Fach sind schon bei uns, weil sie erkennen, welche einmalige Chance uns da bietet.

    Doch hast du irgendwelche Referenzen gegeben? Nein also rede nicht so gescheit daher von wegen Behauptungen :D

    Stell es dir etwa vor wie die Befehlsreihe im Militär :D


    Ein Soldat möchte Urlaub beatragen weil seine Frau schwanger ist. Nun mus dieser zunächst zu einer "höher liegenden" Stelle um das zu beantragen und diese Stelle gibt dann die Erlaubnis sowie auch ein Schreiben an sein Platoon sowie seine Kameraden das er ab Datum X im Urlaub ist.


    Selbes Prinzip bei einem Wrapper das ist eigentlich nur eine "höher gelegene" oder auch "zentrale" Stelle für alle unterliegenden Server/Services etc. um Informationen an andere weiterzugeben den so musst du anstatt zu jedem einzelnen Server eine Nachricht/Verbindung senden nur einmal eine an den Wrapper und dieser benachrichtigt über die bereits bestehenden Verbindungen die anderen Server.


    Natürlich ist diese Erklärung nur grob und man kann noch einges mehr mit einem Wrapper machen hier nur ein par Beispiele "zentrale Ressourcenverwaltung, globalisierte Rechte, zentralles Servermanagment" etc.


    Du merkst aber anhand der Beispiele es geht im Grunde darum Funktionen die ansonsten X-fache Konfiguration, Verwaltung etc. benötigen zu zentrialisieren.

    Natürlich könnte man ja MySQL nehmen..allerdings frage ich mich ob das nicht zu viele Ressourcen fressen würde wenn man keine 5 Sekunden Verzögerung haben will sondern das ganze in nun ja knapper Echtzeit aufbauen will :)


    Selbst wenn du eine herkömliche "relationelle Datenbank" verwenden würdest müsstet du irgendwie den anderen Server bescheid geben das ein Update passiert ist. Den eine Schleife die im Sekunden Takt die gesamte Datenbank auf Anderungen abfragt ist weder performant noch effizient.


    Um den Serven bescheid zu sagen ist z.B ein Socket nötig jedoch könntest du dir hierbei einfach die Datenbank sparen und die Daten selbst direkt schicken die sich geändert haben :D


    Schreib dir einfach mal ein silmples Konsoleninput Programm mit Server/Client Verbindung und frage irgedwelche Befehle ab die dann Funktionen auf den Clients ausführen :D

    Und auf diesem Programm kannst du dann aufbauen bzw es in dein eigentliches Projekt übertragen :D

    So du musst das Vector Object velocity noch Deklarieren und Initialisieren.

    Dann sollte das auch funktionieren :D

    Code
    1. Player player = null;
    2. Vector pushUp = new Vector(0D, 1D, 0D);
    3. Vector pushPositiveX = new Vector(1D, 0D, 0D);
    4. Vector pushNegativeZ = new Vector(0D, 0D, 1D);
    5. Vector pushBackwardsFromWalkingDirection = player.getLocation().getDirection().multiply(-1);


    An sich ist das ganze relativ einfach stell dir einfach vor du befindest dich in einem 3 Dimensionalen Koordinaten System und nun möchtest du von Punkt 1, 5, 2 zu 15, 24, 9 diese Strecke ist dann ein Vector in diesem Fall wäre der Vector 14, 19, 7


    Nun ist aber eine "Velocity" in Spigot etwas anders, auch wenn man einen Vector angibt hat das nicht wirklich was mit dem Vector aus der Geometrie was zu tun.

    Der Vector gibt hierbei die "Kraft" an mit welcher das Entity entlang der entsprechenden Koordinatenachse "geschubst" wird.


    Deswegen sieht es oft so aus wenn man einen Spieler umherschiebt. Das Beispiel sollte auch ganz gut zu deinem eigentlichen Ziel passen :D



    Die Werte liegen im Normalfall, außer du möchtest den Spieler ins All katapultieren, zwischen 0 und 1.

    Hoffe das hilft dir weiter. Aber nicht einfach abschreiben sondern selbst verstehen jop? ;D


    Das packst du jetzt einfach noch in einen Command. Tada

    Das ist aber der undynamische Weg in der server.properties, funktioniert zwar auch aber ist halt, wie erwähnt, undynamisch :D

    Ich schließe mich dem "Rechtlichen Problem" an. Ich bin mir sicher das Ihr nichts böses im Sinne hattet, sondern einfach nur die ersten sein wolltet aber den Namen könnt Ihr wirklich nicht nehmen.

    Ich kann mir vorstellen wenn du eine offiziele Anfrage an Hypixel Studios schickst und Referenzen aufweißt die bestätigen das Ihr in der Lage seit ein Forum derartiger Größe (angenommen das Spiel wird kein Flop) zu leiten dann sind sie sicher bereit mit euch zu verhandeln ob ihr das machen dürft oder nicht.


    Ich hätte das Projekt gerne unterstützt wenn Ihr einfach gesagt hättet wir wollen der erste "Deutsche öffentliche Hytale Server" sein. Und suchen dazu Leute die uns Unterstützen. Aber ein Forum zu machen was sowieso von den Entwicklern früher oder später zur Vefügung gestellt wird finde ich unsinnig.


    btw. die Sprache in der Hytale programmiert wird ist entweder C# oder C++ (ist zwar nicht bestätigt aber Hypixel wird nicht den selben Fehler wie Mojang machen xD)