• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Probleme mit dem Auslesen einer Datei?

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Moin,
Ich habe eine Datei, in der immer, wenn ein Server startet oder herunterfährt, der Status reingeschrieben wird. Nun habe ich eine Art InventoryManager, und der bearbeitet die Items je nach ob er an ist oder nicht, bzw. liest die Datei aus. Nun wenn der Server geschlossen wird, wird der Status zwar in die Datei geschrieben, aber nicht ingame angewendet. Immer wenn jemand auf das Inventar zugreifen möchte, wird es "Reloaded", sodass keine Falschen daten angezeigt werden. Nun ist das leider doch der Fall. Der bleibt einfach auch wenn ich ihn herunterfahre auf online. Aber warum? Die Klassen sind hier: https://hasteb.in/cuvakuyo.cs, https://hasteb.in/iyuteqep.swift Vielen dank für eure Hilfe.
 

Excendia

Minecrafter
Registriert
14 April 2020
Beiträge
4
Diamanten
300
Moin Felix,
Deine Frage ist etwas ungenau formuliert und vielleicht solltest du da ein wenig detaillierter beschreiben was das Problem ist und wo es liegen könnte.

Ansätze die vielleicht helfen könnten:

- Wird beim Server runter-/hochfahren wirklich in deine .yml Datei der Status-String geändert? (Da wäre die Klasse auch ganz nützlich)
- Debugge alle Stellen, wo der Fehler sein könnte

Was es sein könnte:

Du könntest (oder solltest) die Methode ...
Code:
public static void setInventorys()
... zu ...
Code:
public void setInventorys()
... machen. Dann müsstest du in deiner OnInteractListener Klasse eine neues Objekt vom InventoryManager erstellen. Das sieht dann in etwa so aus
Code:
InventoryManager inventoryManager = new InventoryManager();
.

Was dir das bringt: Du hast zum einen keinen statischen Aufruf, der bei Java genutzt wird bei sich nicht ändernden Variablen und deine data Variable liest zu 100% den aktuellen data-String aus (Da vermute ich dein Problem, dass die .yml Datei-Strings richtig sind, aber dein File ein altes File-Objekt ist und ingame Änderungen daher nicht erkannt werden).


Deine OnInteractListener-Klasse:
Code:
   @EventHandler
    public void onInteract(PlayerInteractEvent event) {
        InventoryManager inventoryManager = new InventoryManager();
        Player player = event.getPlayer();
       
        if(event.getItem().getItemMeta().getDisplayName().equalsIgnoreCase(ChatColor.BLUE + "" + ChatColor.BOLD + "Compass")) {
            inventoryManager.setInventorys();
            player.openInventory(InventoryManager.mainmenu);
        }
       
    }

Auch wenn das eine ziemlich schlechter Ansatz ist (du erstellst bei jedem Event, also bei jedem klicken ein Objekt), sollte er dir helfen zu verstehen, ob das wirklich das Problem sein könnte. Um das zu optimieren, könntest du einen Konstruktor-Aufruf in der Klasse machen, wo dein Server-Status in die .yml reingeschrieben werden. Von dort aus kannst du deiner InventoryManager-Klasse dein neues File Objekt rüber schicken und das ein wenig optimierter machen. Vorausgesetz natürlich, dass das der Fehler dort liegt.


PS: Benutze static nur, wenn du eine Variable hast, die sich über dein ganzes Projekt hin nicht ändert. Deine File ändert sich bei jedem Serverneustart ständig. Der Fehler könnte auch in der Klasse liegen, wo du dein File managst, da sollte definitiv kein static vorkommen. Schreib sonst eine Pn

Viel Glück noch und ich hoffe du konntest damit ein wenig was anfangen,

Gruß,

Excendia
 

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Moin,
vielen dank für deine sehr ausführliche Antwort.
Der Status wird zu 100% in die Datei geschrieben, dass habe ich gecheckt.
Ich habe deine Vorschläge geändert, trotzdem bleibt es bei dem Problem.
Vielleicht habe ich etwas falsch verstanden?
Das mit der Datei habe ich jetzt noch nicht so richtig verstanden.
Wenn du das nochmal genauer erklären könntest, wäre es mega!
Ich schick dir nochmal die Interact-Klasse.

Viele Grüße

Links: https://hasteb.in/hiwanaja.java
 

Excendia

Minecrafter
Registriert
14 April 2020
Beiträge
4
Diamanten
300
Versuch mal in deiner InventoryManager Klasse die variablen file und data in die Methode setInventorys() zu verschieben.

Wenn es dann klappt, dann liegt es daran, dass dein File nicht aktualisiert wird nach Server restarts. Du kannst dir das so vorstellen, dass dein new File() nur den File zeigt wie er aussah, als dein Plugin geladen wurde. Das heißt wenn dein Plugin nach dem Start Änderungen am Gile vornimmt, müsstest du erneut new File() aufrufen.
 

Excendia

Minecrafter
Registriert
14 April 2020
Beiträge
4
Diamanten
300
Würde dir jetzt nur noch mal zu Herzen legen, dass du da eine sehr nicht Ressourcenschonende Methode hast. Du rufst bei JEDEM klicken new File auf und erstellst ein neues Objekt. Überleg dir mal wie du nur einmal ein neues Objekt erstellst und trotzdem auf alles zugreifen kannst.

Viel Glück und Spaß noch,

Excendia
 
Oben