You can do that programmatically of course
Each model is a separate object, but one could create a new class which holds multiple World3DModel instances. Once we have some more time we may release an example plugin for that (or maybe integrate such a class in the API directly).
However, it's always necessary that your model still has a separate obj file (and texture) per part^^
Posts by red51
-
-
Generell ist es bei der Pluginentwicklung sehr hilfreich, wenn die (zumindestens wenn man im Singleplayer testet) Debugkonsole aktiviert ist, dann sieht man sofort, wenn ein Fehler auftritt
Diese kann aktiviert werden, indem game_debug_console in der config.properties Datei auf true gesetzt wird. Kombiniert man das damit, dass das Spiel im Fenstermodus ausgeführt wird (sodass man die Konsole gleichzeitig im Blick hat), hat man eine enorme Effizienzsteigerung 
Aber ich merke doch sehr wie das nix für mich ist.
Aller Anfang ist schwer, wobei solche MySQL Dinge ja nicht mehr unbedingt zum Einstiegskram gehören
MySQL ist generell pingeliger bei den Abfragen und verlangt einen ordentlichen Syntax (hat ja nichts mit Java zutun), SQLite ist da deutlich toleranter (bei Lua hatten wir ja nie MySQL Support, wobei man SQLite jetzt natürlich auch weiterhin nutzen kann)^^ -
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
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:
QuoteString 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
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 -
-
I moved your topic to the plugins section then
However, you can only have one single texture on a model. When creating a model file, you have to assign an ImageInformation object to it, which represents the texture. That's the texture that will be applied to the model. -
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);)
-
Leider ist das ein Bug, dass Holzplanken und -balken im Creativemodus nicht in Reihe gezogen werden können, also genau genommen spielt dort die tatsächliche Itemanzahl noch eine Rolle. Das wird mit dem nächsten Update geändert

-
Hmm... what graphics card do you use exactly? Are the graphics drivers up-to-date?
-
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:
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:
-
Das "Server" Objekt bietet Funktionen, um einen Spieler anhand des Spielernamens oder der ID zu erhalten (nur Spieler die derzeit online sind). Du kannst also server.getPlayer(spielername) verwenden, um den entsprechenden Spieler zu erhalten (bedenke, dass die Fkt. null zurückgibt, falls der Spieler nicht gefunden wurde)

-
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)^^
-
The database is on the server of course, not in the client files
But I can implement a command to do that, or alternatively a plugin (if that's sufficient, or if you have access to install the plugin) 