Beiträge von zM4xi

    Danke da hast du Recht :D


    Also für alle die es interessiert ich sorge jetzt einfach durch nen Cast zu nem Double dafür das immer ein XX.XX da steht und nutze dann folgendes Pattern

    Code
    1. ([xyz]?\s[<>=]?\s)(0|[0-9]+)\.[0-9]+|[0-9]+


    Funktioniert für meinen Zweck hervoragend :D

    Hey Leute,


    versuche gerade mittels Reges das Format eines Strings zu überprüfen. Jedoch funktioniert das Regex nicht ganz so wie es soll :(


    Folgendes Regex habe ich zusammen geschustert.


    Das prüft den ersten Teil des Strings

    Code
    1. ([x,y,z]?\ [<>=]?\ )

    sowie das den zweiten Teil prüft

    Code
    1. (0|[0-9]+)\.([0-9]+)|([0-9]+)

    jetzt muss ich es nur irgendwie kombinieren jedoch wenn ich das mache wirft es mir immer einige Zeilen raus


    Hier ein Livebeispiel:

    *regexr.com*


    Die 2 kompletten untersten Zeilen sollten eigentlich mit markiert sein. Wenn man jedoch die beiden Teile einzeln Testet machen die auch genau was sie sollen nur zusammen nicht :(


    Ich hoffe jemand kann mir helfen :D


    Grüße Maxi

    Das hängt von deiner Version ab auf der du Programmierst!

    Welche Version nutzt du den?


    Hier mal für die 1.8.8 warum auch immer noch Leute diesen veralteten Mist nutzen xD


    Code
    1. private void showActionbar(Player player, String text) {
    2. new Timer(player.getUniqueId().toString()).schedule(new TimerTask() {
    3. @Override
    4. public void run() {
    5. PacketPlayOutChat packet = new PacketPlayOutChat(IChatBaseComponent.ChatSerializer.a("{\"text\":\"" + text + "\"}"), (byte) 2);
    6. ((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);
    7. if(Bukkit.getPlayer(player.getUniqueId()) != null) this.cancel();
    8. }
    9. }, 0L, 1000);
    10. }

    Ja etwa so kann man das machen wobei ich empfehle der Datenintegrität zuliebe es in einer Datenbank zu speichern :D

    Ja die Klasse YamlConfiguration von Bukkit ist eigentlich nichts anderes als ein Cache der Datei und dem Inhalt.

    Das bedeutet solange dein Plugin läuft nutzt du einfach die Daten die in der YamlConfiguration "zwischengespeichert" sind und sobald das Plugin stoppt schreibst du dann die Daten in die Datei so musst du nicht jedes mal die gesamte Datei auslesen und wieder in ein YamlConfiguration Objekt speichern.


    Etwa so:


    In deiner Hauptklasse erzeugst du einfach ein Objekt zum Beispiel so:

    Und das kannst du dann ganz einfach aufrufen wann immer du etwas mit der Konfiguration machst. Natürlich nicht vergessen das du eine Instanz deiner Hauptklasse brauchst oder die Variable auf static setzt.

    So wird alles bei Start geladen sowie beim Stop des Plugins gespeichert.


    PS:


    Ich nutze das Prinzip des Cachen und habe eine erweiterte Version davon gemacht um mir etwas Schreibarbeit zu sparen die erledigt auch das Datei/Pfad anlegen etc.

    SpigotFile.java

    oder wenn du es Runtime unabhänig machen willst

    Configuration.java

    (Das hier hat natürlich noch ein paar Extras wie YAML, JSON, PROPERTY Support aber an sich funktioniert das alles genau so wie die YamlConfiguration von Bukkit)

    Update:


    Code
    1. public class Coordinate {
    2. public int x, y, z;
    3. public Coordinate(int x, int y, int z) {
    4. this.x = x;
    5. this.y = y;
    6. this.z = z;
    7. }
    8. }

    So kann man jede mögliche Form abfragen, natürlich ist es das eine das Ganze abzufragen jedoch was ganz anderes das zu speichern xD

    Also ich bin offen für Ideen wie ich Predicates speichere :D

    Ich stimme da JD1992 vollkommen zu du "zwischenspeicherst" in der Variable file die .yml aber eben mit dem Inhalt der drinnen steht zum Zeitpunkt an dem Java die Zeile im Code ausführt.

    Und da du das Ganze in am Anfang eines Befehl machst eben bevor irgendein Code des Befehls ausgeführt wird!

    Wenn du direkt aus der Datei die Werte lesen willst musst du jedesmal wenn du etwas änderst die Datei neu "aufrufen/laden" (new File("...");) um in der Variable den neusten Inhalt zu haben.


    Dennoch rate ich dir das nicht zu tun da es einfach unnötig Performance zieht, wieso nicht die YamlConfiguration nutzen wenn sie schon da ist.

    Hey Leute,


    also folgendes Konzept ich überlege gerade wie man erreichen könnte eine Region zu speichern von nicht definierter Form (kein Rechteck, Kreis, etc)


    Mein erster Gedankengang war ich speichere jeden Block in ner Liste der zur Region gehört das ist allerdings nicht gerade performant. Also muss wohl Mathematik her :(

    Nun ist meine Idee eine Art "Skript" Anweisung zu speichern die angibt unter welcher Bedingung die Koordinate noch innerhalb der Region liegt.


    Etwa so:

    Code
    1. Wenn (x < 15 oder x > -15) und (y > 0 oder y < 150) und (z > 15 oder z < -15) aber wenn (x > 10 und z > 10) dann (y < 100)

    Das sollte wenn mein Kopf nicht ganz kaputt ist ein Rechteck mit einem fehlenden Stück erzeugen.

    Nun sollte das Ganze verständlicherweise so geschrieben sein das es egal ist wie viele oder welche Bedingungen es gibt das man z.B. auch ein diagonales Rechteck erzeugen könnte oder eine Pyramide.


    Ich könnte mir vorstellen das in Java mit Predicate/s umzusetzten das mein ein Objekt erzeugt das eine Liste dieser Predicate/s hat und dann eine über eine Methode abfragen kann ob eine Koordinate innerhalb der Region liegt.

    Nun würde ich gerne eure Meinung dazu wissen wie findet Ihr die Idee oder habt Ihr Verbesserungen. Oder würdet Ihr komplett anders ansetzten?


    Freue mich auf eure Kommentare


    Grüße Maxi

    Das hängt vom Server ab auf der die Datenbank läuft.

    Es kommt nicht auf die Länge der Abfrage an sondern wie groß das Ergebnis ist xD


    100 m/bits sind zwar schön und gut haben aber überhaupt nichts mit einer SQL Query zu tun, das ist die Bandbreite das sagt dir nur wieviele Daten du aufeinmal Senden kannst und mit welcher Geschwindigkeit.

    Das was du brauchst ist der Ping!


    Und nun zur eigentlichen Frage: Die meisten "professionellen" Datenbank Server haben außer der Datenbank nichts anderes laufen und und somit maximale Leistung. Wir können dir da keine Zahl geben wie ja die kann bis zu 7.000 locker weil das Abhänig von der Query selbst dem Hardware sowie der Auslastung des Servers ist :D


    Aber warum überhaupt daran denken das Maximum zu sprengen es ist immer besser so wenig Querys wie möglich auszuführen.

    Hey Leute,


    ist bei mir schon einige Zeit her das ich nen Plugin geschrieben habe. Nun gab es ne Menge API Changes seit der 1.11 deshalb nun die Frage:


    Wie zum Geier soll ich den jetzt noch den Spieler/Inhaber des Inventares bekommen. Das kann doch nicht sein das ich sowas hier machen muss:



    Früher ging das einfach event.getPlayer() oder so aber was jetzt?


    Grüße Maxi

    Tatsächlich habe ich auch schon mal damit angefangen. Aber aufgrund von Zeit und zu viel Arbeit für einen. Es erstmal pausiert.


    Ich nutze das PHP Framework Laravel. das ist modern, aktuell und wenn man sich damit auskennt unglaublich gut!

    Ich habe es über die Arbeit kennengelernt und mit Laravel ist es wirklich möglich eine Webseite mit User Verwaltung, Rängen und mehr in nur wenigen Tagen zu bauen!


    Etwas wie ein Forum braucht natürlich länger jedoch würde ich schätzten das wenn man täglich ein paar Stunden nutzt sollte es mithilfe von Laravel nicht länger als 1 - max. 2 Monate dauern! (Bugfixing nicht eingerechnet)


    Also ich würde mich zur Verfügung stellen bei deinem Projekt zu helfen.


    Wäre cool wenn man mal persöhnlich sprechen könnte? Mich persöhnlich würde interessieren welche Funktionen du in deinem Forum Konzept so angedacht hast.

    Grundsätzlich gilt immer je näher dein Code an "Basis Code" ist desto performanter ist dieser. (Ausnahmen gibt es).


    Rechenoperationen - einfache Regel

    a) Je komplizierter die Rechnung desto länger braucht Java (1523³³)


    Zum selbst Testen:


    Output (hängt von CPU, etc ab):

    Code
    1. 4
    2. Operation needed : 736
    3. 1073741824
    4. Operation needed : 25
    5. 1.0692932125168965E105
    6. Operation needed : 1623


    Zeichenketten - ! Ausnahme !

    Dazu einfach mal diesen Artikel anschauen. Das Interessanteste bei Punkt 4


    Schleifen - sind immer ein Performance Killer durch

    a) große Anzahl an Durchläufen

    b) Komplizierte verschachtelte Operationen im Inneren


    Einfacher Logischer Gedanke:


    Aufgabe 1: 15x mal "Hello, World" ausgeben

    Aufwand: quasi null


    Aufgabe 2: 15x mal 1.000.000 / 23 rechnen dann das Ergebnis In eine Datei schreiben und zuguterletzt ausgeben

    Aufwand: hoch


    Zum selbst Testen:

    Output (hängt von CPU, etc ab):

    Code
    1. Operation needed : 866
    2. Operation needed : 15237

    Nun sollte klar sein je komplizierter der Code bzw die Aufgabe die er erfüllen soll desto länger wird Java dafür brauchen das Ganze auszuführen.

    Hey Leute,


    ich bastele mal wieder ein bisschen und wollte mal versuchen "Spezielle Effekte" zu generieren. Zum Beispiel eine Lawine, oder ein Laserstrahl, etc


    Ich weiß man kann sowas verwirklichen indem man ArmorStands unsichtbar macht und auf ihren Kopf (Lawine) Eis/Schnee Blöcke setzt. Aber wie "render" ich das am Besten ich glaube kaum das man das hardcoded! Irgendeine Art Algorithmus der nach einem vorgegebenen Prinzip die ArmorStands platziert.


    Nun werde ich das mal etwa so versuchen jedoch interessiert mich auch wie Ihr das machen würdet? Habt Ihr bessere Ideen oder andere Ansätzte?


    Freue mich auf Vorschläge.


    Grüße Maxi

    Sag mal mir scheint als würde ich hier eine Konversation mit irgendwem anderen führen nur nich mit dir :(

    Hast du überhaupt irgendwas von mir gelesen? Ich kann dir nicht helfen wenn du meine Fragen nicht beantwortest!


    Nochmal zusammen:


    Code
    1. @EventHandler
    2. public void onInventoryClick(InventoryClickEvent event) {
    3. System.out.println(event.getAction());
    4. }


    Füge das ein und mach das Plugin auf einen Server drauf. Führe im Inventar aus was du blocken willst, und lies in der Konsole ab was da steht! Dann fügst du einfach eine Abfrage hinzu und cancelst das Event.