Posts by red51

    so this shows you can use multiple textures on the same car

    Just to avoid misunderstandings: every model can only have one single texture, trust me :D In other words, if you want to use multiple textures, you have to use multiple models (one texture per model).


    because it gives me around 20-30 fps I would need to reduce it down a lot

    It's important to keep polycounts as low as possible ;) On the one hand, it has a direct impact on rendering performance (it highly depends on your hardware, an NVIDIA GTX 1080 can definitely handle much more polygons than an integrated Intel HD graphics adapter), usually you can keep "a few million triangles" in mind when it comes to the total polygon count (but keep in mind that the game scene already consists of a lot of triangles).
    But on the other hand, high polygon counts also result in bigger file sizes, i.e. especially in multiplayer it takes more bandwith to transfer the model data to the client.
    For a decent looking car (if you create a model from scratch), I'd recommend to not use more than 10,000 - 30,000 triangles (you can achieve really great results with these limits, everything above that is basically a waste of resources).

    Der eigentliche Fehler ist dieser hier (ab der nächsten Version werden die Pluginfehlermeldungen deutlicher):

    Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -7

    Der besagt, dass du bei einer String-Operation (in dem Fall "substring()") einen falschen Index angegeben hast, der länger als der String selber ist.


    Hier ist der Übeltäter:

    Quote

    String welcomeTextNew = cmd[2];
    String welcomeTextNew2 = welcomeTextNew.substring(12);

    In cmd[2] bzw. "welcomeTextNew" würde in deinem Fall nur "Hallo" stehen, wenn du versuchst, davon ab dem 12. Zeichen einen Substring zu bilden, schlägt das natürlich fehl (weil das Wort "Hallo" nicht so viele Zeichen besitzt) ;) Hingegen macht es Sinn, den Substring des gesamten Commands zu nehmen, also was in der Variable "command" bzw. in "event.getCommand()" steht. Also so:
    String welcomeTextNew2 = command.substring(12);

    Wenn ich das richtig verstanden habe brauche ich gar nicht eine Verbindung mit getMySQLGedönns aufbauen ich kann ja einfach die vorhandene benutzen.

    Ja also wenn du direkt auf die Weltdatenbank zugreifen möchtest, dann musst du keine eigene Verbindung aufbauen, sondern kannst direkt getWorldDatabase() aufrufen. Damit hast du Zugriff entweder auf die bestehenden Welttabellen (zB die Spielertabelle, oder Direktzugriff auf Chunks etc), du kannst natürlich aber auch eigene Tabellen anlegen. Nur das wird dann logischerweise alles direkt in der Weltdatenbank vorgenommen.


    nimmt er doch die Datenbank die der Admin in der server.properties angegeben hat, dabei richtet er sich doch nach dem Wert der unter database_type= angegeben wurde, oder liege ich da ganz falsch?

    Genau, halt die Weltdatenbank. Im Grundsatz sind aber alle Fkt in dieser Klasse so ausgelegt, dass es dir quasi egal sein kann, ob es eine SQLite oder MySQL Datenbank ist :D Ansonsten kannst du auf die Weltdatenbank auch getType() aufrufen, dann erhälst du den Datenbanktyp (also SQLite oder MySQL)


    Diese kann ich aber nicht mit db.close(); dicht machen, dann zeigt mir Eclipse ne Warnung an.

    Nee, die "Weltdatenbank" ist ein Sonderfall, die kann nicht mit close() dichtgemacht werden, sondern ist zur Laufzeit immer vorhanden und offen ^^


    Ganz wichtig sind die Hochkomma Teile, mal müssen diese ` und mal diese ' verwendet werden.... wer kommt den bitte auf so einen Mist?

    Ja, das ist bei MySQL leider so. SQLite ist da eher unproblematisch und legt gar nicht so viel Wert auf die korrekte Zeichenverwendung, MySQL hingegen ist da pingelig ;) Grundsätzlich die Hochkomma ` für Tabellen- oder Spaltennamen, die einfachen Anführungszeichen ' für Strings

    Are you referring to plugins or to "classical mods"?
    If you're talking about plugins, every model can only have a single texture. So if your car consists of several textures, every part that's covered by a different texture has to be a separate model.

    68. String query = "SELECT * FROM EffNet WHERE Player_user = GetPlayer";

    As mentioned, you have to use single quotes, and if it's a variable, you have to use string concatenation: String query = "SELECT * FROM EffNet WHERE Player_user = '" + GetPlayer + "';


    and I did reply to my old topic and no one answered

    Your latest post was >>the above code SHOULD work and update the record<<, how is this a question? Apparently you edited your initial post (you removed your original text and replaced it by a new question), you should never do that, since that makes all replies in your topic pointless (and, in addition, no one will see your question) :!: If you have a new question (which is related to the topic), post it in a new response.

    But that's no reason to create multiple topics about the same issue. If you have created a topic, please stick to that topic when you want to post anything that's related to your topic.


    In this case, please post your full code.

    As it has been pointed out in your other topic, you have to put strings into single quotes (INSERT INTO `XXXXX` (Player_user, Player_money) VALUES ('GetPlayer', 2000);), or if "GetPlayer" is a variable, you have to use string concatenation (INSERT INTO `XXXXX` (Player_user, Player_money) VALUES ('" + GetPlayer + "', 2000);)

    Caused by: java.lang.ClassNotFoundException: commons.definitions.Items

    Hmpf, das ist tatsächlich ein Fehler, bzw. liegt an der Obfuscation des Spiels. Das wird in Kürze behoben, vll morgen schon als Nightly in Steam verfügbar, ich sage dann jedenfalls Bescheid :)


    Als letzte Frage : Ist es so, das ich mit der Methode getInventory aus der Klasse Player nur die 5 Items aus meiner Actionbar erhalte?

    Also getInventory() liefert ja das jeweilige Spielerinventar zurück, darin hast du im Grunde Zugriff auf alle Items, die der Spieler besitzt. Das Inventar ist quasi in 4 Kategorien unterteilt, mit den getItem() oder getItems() Funktionen erhälst du das jeweilige Item bzw. die Items des jeweiligen SlotType (Quickslots [Hotbar], Armor, Equipment oder Inventory [Hauptinventar]). Mit getAllItems() wird ein neues Array erstellt, welches sämtliche Items des Inventars enthält. Man muss generell bedenken, dass die zurückgelieferten Arrays immer eine feste Länge haben. Wenn in irgendeinem der Inventarslots kein Item vorhanden ist, ist der entsprechende Slot im Array null

    cannot load coal / planks into the small furnace: a small icon appears in the shape of a flame and the message 'this furnace has no fuel'; when pressing the interaction key nothing happens

    You find a small hatch on the bottom left side of the furnace, you have to open it and put coal or lumber in it in order to fuel the furnace ;)


    when i want to craft or sleep and i press my interaction key 9 times out of 10 a process bar appears stating 'removing shelter/workbench' instead of letting me access the crafting menu / sleep.

    This happens when you keep your interaction key pressed. Then the remove-process will be started (which allows you to pick up objects). If you simply want to interact with them, briefly press your interaction key

    Das Guestbook-Plugin enthält ein Beispiel, wie etwas aus einer Datei ausgelesen werden kann, wenngleich das Beispiel etwas umfangreicher ist (da alle Eventualitäten abgedeckt werden, also geprüft wird, ob der Text in der Textdatei das richtige Format hat, es sich um Zahlen handelt etc).


    Um ganz simpel den Inhalt einer Datei zu erhalten, kann die Hilfsklasse "Utils.FileUtils" herangezogen werden: Diese bietet statische Methoden (d.h. sie sind von überall aus aufrufbar), um bspw. Dateien einzulesen, etwas in eine Datei zu schreiben oder Md5 Checksummen zu erstellen. Mit Utils.FileUtils.readStringFromFile(file) kann ein String aus einer Datei gelesen werden. Also Parameter muss man die entsprechende "File" mitgeben. Beispiel:

    Java
    //Zugriff auf eine Datei "test.txt" im Pluginordner,
    //getPath() liefert den Pfad in den Pluginordner zurück
    File file = new File(getPath() + "/test.txt");
    //Text auslesen
    String text = Utils.FileUtils.readStringFromFile(file);
    //In "text" steht nun der gesamte Text aus der Datei


    Mit den Grund-String-Funktionen wie split(), contains(), startsWith(), matches(), equals() und/oder substring() kann der String dann überprüft und manipuliert werden (zB wenn mehrere Zeilen eingelesen werden usw).

    Das Spiel bietet Hilfsfunktionen, um SQL Abfragen durchzuführen. Die meisten Hilfestellungen im Internet sind also daher umfangreicher und komplexer als das, was du mit der API machst^^


    Das Database Objekt bietet Zugriff auf die Funktionen execute(), executeUpdate() und executeQuery(). "execute()" wird verwendet, wenn du bspw. ein "CREATE" oder "DELETE" Statement durchführen willst. "executeUpdate()" verwendest du, wenn du INSERT, UPDATE oder DELETE durchführen möchtest. "executeQuery()" ist für SELECT Abfragen gedacht, dabei wird auch ein ResultSet zurückgegeben. Das Javadoc enthält dazu auch Beispiele.


    Damit ist quasi alles abgedeckt. Alternativ kann mit "getConnection()" direkten Zugriff auf das Connection Objekt erhalten, womit dann alles, was der JDBC Treiber bereitstellt, gemacht werden kann (zB PreparedStatements verwenden, Tabellenmetadaten auslesen usw). Das ist mächtiger, aber auch komplexer. Das kannst du im Grunde erstmal ignorieren ;)


    Hier ein Beispiel um eine Tabelle zu erstellen und einen Eintrag einzufügen:

    Danke für das Feedback! Ich bin nicht ganz sicher, ob diese Version auch 100%ig kompatibel mit den Servern ist (sollte sie aber eigentlich), und ein Serverupdate möchte ich deswegen nur ungerne forcieren, darum wird die Änderung sicherheitshalber wohl erst in das nächste Update einfließen (das aber vmtl. nicht lange auf sich warten lässt)^^

    Also irgendwie war es mit Lua viel einfacher...

    Das ist eine reine Gewöhnungssache ;) Natürlich ist der Umstieg erstmal ungewohnt, aber wenn man sich erstmal dran gewöhnt hat, läuft eigentlich alles wie geschmiert.
    Wichtig ist, dass du das Javadoc in die IDE einfügst, damit du direkt die Autovervollständigung (inkl. Dokumentation) nutzen kannst (welche das Programmieren ungemein erleichtert)

    That's a strange issue oO But apparently this only affects labels? At least I can't see a difference in the textures/images 8|
    Do you only encounter this issue in combination with plugins, or also with some of the default game texts?