Beiträge von Admiral_Zott

    Auch wenn das Thema jetzt schon abgeschlossen ist habe ich noch einen kleinen Denkanstoß für dich: "Quests mit mehrerern Abschnitten".

    Einige Quests könnten auf anderen aufbauen. Das heißt du brauchst eine Art Relation. Ich würde das über eine parentId machen. Für die erste Quests wäre das dann die 0 und sonst halt die jeweilige Id.


    Um eine Vielzahl von Aufgaben zu bieten, kannst du ja eine art BaseQuest machen, welche grundlegende Features bietet, die alle Quests haben. von der lässt du dann erben und validierst die daraus enstehende Quest mit einer Factory.


    Sowas würde sich dann auch relativ einfach in einer Datenbank speichern lassen in dem du einen String abspeicherst, der das Questobjekt als Json beinhaltet.

    Aber das Problem liegt nur bei dir? Alles andern können spielen ohne Probleme?

    Wenn das Problem wirklich so sein sollte, kannst du mal versuchen deine Spielerdaten auf dem Server zu löschen (also global und in jeder Map). Wenn das nichts hilft, einfach mal deinen

    %appdata%/.minecraft Ordner löschen und neu installieren. Vielleicht bekommst du ja so diese Probleme weg.


    Und für die Zukunft hast du hoffentlich gelernt, dass du niemals jemandem einfach Rechte geben solltest, wenn ihn nicht kennst.

    Danke erstmal für deine Antwort Floppy012 .

    Multithreading habe ich natürlich schon benutzt, was jedoch auch nur teilweise einen Performanceschub bringt. Da ich mit Android entwickel, bin ich natürlich sehr auf die kleinen Prozessoren der Mobilgeräte angewiesen und begrenzt. Und diese haben natürlich nicht die Kapazitäten x Thread aufzumachen, die dann auch noch parallel laufen.


    Namp habe ich mir tatsächlich auch schon während meiner Recherche angeschaut. Dort wird aber im Prinzip das selbe gemacht, wie bei mir. Nur dass die halt dort mit den SYN/ACK Paketen arbeiten.

    Das ist in Java aber leider nicht möglich. (siehe Stackoverflow)


    Ich bin aber dennoch gerne für weitere Inspirationen offen.

    ich habe aber kein onCreate und wenn ich denn Command ein ein eigenes plugin mache geht es

    Es geht hier auch nicht um die Benennung der Methode, sondern um den Zusammenhang zwischen deinem Code und einem möglichen Fehler.

    Wir können dir hier schlecht helfen, wenn du uns nichts aussagende Fehler schickst, bzw dein Problem genau erläuterst.

    Du solltest vielleicht auch in Zukunft versuchen die Erklärungsansätze zu verstehen oder zumindest nachzufragen, wenn du was nicht verstehst.

    Und sowas grundlegendes wie ein Beispiel und deinen Fall auseinander halten zu können kann man ja wohl voraussetzen.

    immer wenn ich einen Neuen command Hinzufüge bekomme ich ein Fehler in der Console


    Der "Fehler" den du uns geschickt hast ist komplett nichts aussagend.

    Fehlermeldungen fangen generell immer mit dem Grund an:

    Code
    1. java.lang.RuntimeException: Unable to create application tld.dein.package.Class: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
    2. at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5876)
    3. .......
    4. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
    5. Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
    6. at tld.dein.package.Class.onCreate(Class.java:37)
    7. at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
    8. ......

    Dabei ist java.lang.NullPointerException der Fehler der geworfen wurde und tld.dein.package.Class die Stelle wo du diesen findest. Danach steht noch was genau der Fehler ist (sozusagen eine Beschreibung).

    Unten drunter steht dann sogar noch die genaue Zeilenangabe mit der Methode: tld.dein.package.Class.onCreate(Class.java:37)


    //EDIT: Ach ja: HIER und HIER sind noch Dokumentationen wie man eine plugin.yml aufbaut.

    Ich habe vor das gesamte lokale Netzwerk nach einem Webserver zu scannen. Dies funktioniert auch soweit, dauert aber sehr lange, wenn viele Ip-Adressen im Subnetz sind.


    Derzeit löse ich mein Problem damit, dass ich mir durch die Subnetzmaske und die Ip-Adresse des Clients alle möglichen Ip-Adressen im Netz berechne.

    Danach versuche ich eine Verbindung zu dem Client aufzubauen und schaue, ob diese zu Stande kommt. Das sieht dann in etwa so aus.

    Dies passiert für jede mögliche Ip-Adresse.


    Gehen wir davon aus, dass ich in einem /21 - Netz bin. Dann habe ich schon mal 2046 Adressen, die ich anpingen muss. Das ganze mal dem Timeout von 1500ms mach dann so ~ 51 Minuten(!).

    Da das zu lange ich, versteht sich glaube ich von selbst.


    Meine Idee war nun, vielleicht durch die Broadcast-Adresse alle benutzen Ip-Adresse nur zu testen. Laut IEEE müssten ja dann alle Clients eine Antwort zurückgeben.

    Jetzt ist nur meine Frage, wie ich das in Java umsetzen kann. Ich habe nun schon seit ein paar Stunden im Netz gesucht, aber keine passende Antwort gefunden.


    Vielleicht habt ihr aber auch noch eine andere Idee, wie man das Lösen kann? Irgendwie bekommt Minecraft das ja auch mit den Lokalen Servern hin...


    Danke schon im Voraus!


    // EDIT: Ach ja, und den Timeout zu reduzieren ist keine Alternative.

    Versuchs mal mit dem InventoryClickEvent und dann auf den InventoryType.PLAYER überprüfen.

    Zudem ist deine letzte Abfrage falsch: if(p.getInventory().getChestplate() == null||p.getInventory().getChestplate().getType() == Material.LEATHER_CHESTPLATE == false) {

    Man verneint Vergleiche mit einem !.

    p.getInventory().getChestplate().getType() == Material.LEATHER_CHESTPLATE == false --> p.getInventory().getChestplate().getType() != Material.LEATHER_CHESTPLATE[/tt][/tt]


    BTW: bitte beachte mal ein bisschen deinen Codestyle. Ich sehe da auf Anhieb 3 böse Sachen in einer Variable:

    Main.Jetpack_Rüstung.add(p);

    Zu Erklärung: Variablen schreibt man grundsätzlich klein AUßER: Variablen mit den Modifiern final & static in Kombination!

    Niemals Umlaute in Variablen -> Englische Sprache hat kein üöä im Alphabet.

    Variablen schreibt man im LowerCamelCase d.h.: erster Buchstabe klein, jedes neue anfangende Wort groß.

    Versuchs mal mit block.getBlock().setType(Material.QUARTZ_ORE, true);

    Das sollte glaube ich nicht bringen. Laut JavaDoc setzt der Bool nur, ob der Block die physics beachten soll oder nicht.

    Normalerweise sollte sich der Block automatisch auch für den Player updaten.

    Man kann aber alle Spieler durch Iterieren und dann die Methode PLAYER.sendBlockChange() aufrufen. Damit sollte das BlockUpdate auch beim Spieler ankommen. (siehe JavaDoc)

    Ich habe das Problem auch mal vor ein paar Jahren gehabt. Da habe ich es gelöst, indem ich die Kiste erst befülle, wenn sie gesetzt wurde.

    Einfach dann den Block zur Chest casten und dann auf das Inventory zugreifen und befüllen.


    Um die Kiste beim Setzen zuzuordnen kannst du ja nen TAG auf die Chest legen.

    Hallo NichtAfk,

    ich konnte durch deinen Beitrag noch nicht wirklich dein Problem bzw dein Thema rauslesen. Du willst also einen eigenen Minecraft-Client programmieren, hast aber noch keinerlei Programmiererfahrung?

    Wenn das so ist, die ich das jetzt verstehe, kann ich dir schon mal im Voraus sagen, dass das so nichts wird. Du solltest dir vielleicht erstmal die Grundlagen der Programmierung aneignen bevor du zu sowas wechselst. Also Sachen wie, was sind Variablen, Datentypen, Funktionen, OOP, usw...

    Programmieren erfordert einiges an Durchhaltevermögen und sehr viel Zeit es zu lernen. Die Ausbildung zum Softwareentwickler dauert nicht umsonst 3 Jahre.... und das sind erstmal nur die Grundlagen.

    Aber wenn du wirklich die Motivation dazu hast, dann fang an und lass dich nicht von Rückschlägen entmutigen.

    Bist du dir sicher, dass nur die ältere Version exportiert wird, oder nimmst du immer nur die falsche Datei zum Testen? Versuch einfach mal die Version von deinem Projekt zu erhöhen und Exportiere dann nochmal. Dort sollte ja dann die neue Version mit im Namen der Datei stehen. Wenn dass nicht funktioniert, kannst du ja mal folgenden Build verwenden und mal schauen, ob es damit funktioniert.

    Zu beachten hierbei ist, dass der tag <mainClass>${project.groupId}.${project.artifactId}.Main</mainClass> auf deine Hauptklasse zeigen muss, in der du dein Plugin startest.

    Außerdem werden zwei Dateien generiert. Eine ohne die zusätzlichen Dependencies und eine mit. Hierbei solltest du die mit den Dependencies verwenden, da dort auch dein javax.mail mit kompiliert wird.

    Bei der Dependency von javax.mail solltest du mal noch den scope compile hinzufügen. Dadurch wird die Dependency beim kompilieren mit "verpackt".

    XML
    1. <dependency>
    2. <groupId>javax.mail</groupId>
    3. <artifactId>javax.mail-api</artifactId>
    4. <version>1.6.0</version>
    5. </dependency>

    Das sähe dann in etwa so aus:

    XML
    1. <dependency>
    2. <groupId>javax.mail</groupId>
    3. <artifactId>javax.mail-api</artifactId>
    4. <version>1.6.0</version>
    5.             <scope>compile</scope>
    6. </dependency>

    Ach ja, und du könntest mal die Version von javax.mail auf 1.6.2 updaten. Laut https://mvnrepository.com/arti…mail/javax.mail-api/1.6.2 ist die die aktuelle.

    Wie zM4xi schon geschrieben hat, BASE64 ist eine Lösung, aber meiner Meinung nach keine schöne. Durch die Konvertierung von Dateiformaten (dazu gehören auch .pdf und alle Bilder) entsteht ein String der eine 1,5fache Größe des ursprünglichen Dokuments hat. Dies zieht Speicherplatz und performance. Sinnvoller wäre es die Datei, wie du schon die Idee hattest, in ein Dateisystem zu schieben und nur noch den Pfad in einer Datenbank zu speichern. Eine andere Alternative ist der Datentyp BLOB. Dieser ist dafür gedacht, Datei direkt in Datenbanken zu speichern. Hierbei hast du auch nicht mehr den unschönen Nachteil der 1,5fachen Speichergröße.


    Zur Filterung ist JSON auch eine Lösung, aber leider nicht wirklich performant, da die JSON immer wieder vom Programm encoded und decoded werden muss. Zudem werden sehr viele Daten doppelt auftreten, wie JD1992 schon sagte. Hier würde ich auf einzelne Bits setzten, die du in der Datenbank setzt. Diese kannst du dann mit den Bitwise Operatoren (&,|,^) wieder auslesen. Vorteil ist hier, dass du nur eine sehr kleine Datenmenge hast, die du speichern musst und das Auslesen und Auflösen sehr sehr performant ist.

    Habe mir mal deine Klasse gezogen und mal bisschen bearbeitet. Ist sogar nen bisschen abstrakter geworden als gedacht :)

    Funktioniert jetzt auf jeden Fall alles. Bei der PropertiesConfiguration musst du vielleicht nochmal drüber schauen. Da klappt noch nicht ganz alles mit Maps usw (ist aber nur ne Kleinigkeit)


    Ach ja, configuration.tar einmal zum downloaden :D