Discord

  • 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!

Erledigt PlugIn Minecraft Täglicher ItemCommand. Benötige Hilfe und Ratschläge!

Steiniiii

Minecrafter
Mitglied seit
4 Januar 2018
Beiträge
20
Hallo miteinander, ;)

jetzt muss ich doch erneut nochmal um Hilfe bitten. Ich versuche mich nachwievor frohen Mutes an der Minecraft Plugin Programmierung, komme allerdings schon wieder nicht weiter.:mad: Vorab ich bin Anfänger...:rolleyes::oops:

Ich bastle an einem kleinen Übungsplugin, welches einem Spieler, wenn dieser einen bestimmten Command ausführt Items gibt.

Soweit so gut. o_O

Das Kommando lautet /loot und die Items, welche im Plugin "feste hinterlegt" sind werden dem Spieler ins Inventar gelegt.:) Jetzt soll der Spieler, den Befehl nur einmal täglich ausführen können, dazu habe ich eine ArrayList erstellt und den Spieler sobald er den Befehl eingibt eingespeichert. Gibt er den Befehl nochmal ein, bekommt er die Meldung, dass er seine tägliche Belohnung bereits eingefordert hat.

Mein bisheriger Code: (falls es zudem noch Verbesserungsvorschläge geben sollte, gerne her damit, wie gesagt ich bin Anfänger und will dazu lernen) :)

https://pastebin.com/6t8HjQLJ

Nun meine Fragen:eek:_O

1. Wie speichere ich aber nun den Timestamp, sodass der Spieler, 24h später nicht mehr in der Arrayliste ist und den Befehl erneut ausführen kann? Oder doch eher mit einem Scheduler? Habe mir versucht, dass auf einigen Internetseiten durchzulesen, werde aber nicht wirklich schlau daraus. Am besten wäre eine Variante die Serverressourcen sparend ist. Zusatz: Der Spieler soll die Zeit einsehen können, bis er den Befehl erneut ausführen kann.

2. Wie lese ich in diesem Fall die Config aus, sodass man die Items selber bestimmen kann über die Config? (ID des Items in Config eintragen)
Geht das über this.plugin.getConfig().getInt(PFAD);

Optional:

Wie könnte ich das ganze über eine tägliche Kiste am Spawn auf einem Server laufen lassen? Spieler klickt auf Kiste, GUI öffnet sich. Spieler klickt auf Item. Belohnung wird aus Config ausgelesen und in das Inventar des Spieles gelegt? Sollte das für einen Anfänger noch nicht möglich sein, dürft ihr mir das gerne an den Kopf werfen. ;)

Ich weis, ich frage wieder viel, aber ich sehe gerade selbst keinen anderen Ausweg. Wenn es jemanden möglich ist, vielleicht mit ein paar Codebeispielen zum veranschaulichen erklären? Ich würde mich auch über Hinweise/Links zu Foren und Beiträgen freuen, damit ich in Zukunft meine Probleme selbst lösen kann. :D

Indem Sinne, vielen Dank schon jetzt für alle konstruktiven Kommentare und einen schönen Sonntag. :):D

Gruß Steini :)
 
Zuletzt bearbeitet:

FraxDzn

Minecrafter
Mitglied seit
21 Juli 2018
Beiträge
21
1. einfach den Timestamp speichern Tag mit Monat, und checken ob ein Tag vorbei ist mit Mathematik. Arraylist muss jetzt nicht unbedingt sein kannst einfach auch übern Timestamp es überprüfen

2. Kannst einfach ne Liste aus ints in der Config speichern und diese dann wieder auslesen mit getList oder sowas

Google einfach wie man listen speichert und ausliest
 

DerFrZocker

Miner
Osterei Experte
Mitglied seit
10 Dezember 2017
Beiträge
160
Alter
19
Minecraft
DerFrZocker
Erstmal schön das du keine Lange if Abzweigungen machst. Sondern gleich return benutzt, dass macht es viel angenehmer den Code zu Lesen.

Ich würde dir empfehlen keine ArrayList für seuche Sachen zu nutzen. Da:

1: Die Arraylist nach einem Server Neustart wieder gelehrt wird.
2: Wenn ein Spieler den Server verlässt, du ein unbrauchbares Player Object in deiner Liste hat, dass führt zu unnötiger Ram Belegung.
3: Wenn ein Spieler sich auf einen Server Connectet wird immer ein neuer Player erzeugt, dass heißt der Spieler muss nur Reconnecten um sein Bonus wieder abzuholen, ohne das er den Tag warten muss.

Speichere deshalb Lieber die UUID von dem Spieler in eine Datei.

ItemStacks kannst du ganz einfach so auslesen:
Code:
 this.plugin.getConfig().getItemStack("TEST");
In deiner Config musst du dan nur:
Code:
TEST:
  ==: org.bukkit.inventory.ItemStack
    type: SIGN
    meta:
      ==: ItemMeta
      meta-type: UNSPECIFIC
      display-name: 'Ich bin ein Test'
      lore:
      - "Ich bin eine Lore"
      - " "
      - "Ich bin eine Weitere Zeile"
schreiben. (Die Methode finde ich immer ganz angenehm, da man das Item nicht selber "bauen" muss, und der spätere Nutzer volle Configurations Möglichkeiten beim Item hat)

Für den Timer würde ich dir sowas empfehlen:
https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#schedule(java.util.TimerTask, java.util.Date)

Das Datum kannst auch einfach mit
Code:
 getConfig().set("playerUUID.datum",new Date());
in der Config speichern.

und mit
Code:
 Date date = (Date) getConfig.get("playerUUID.datum");
wieder holen.

Ich empfehle dir aber die playerUUID und Datum nicht in die Config zu speichern sondern in eine Extra file.

Fals noch Fragen sind einfach schreiben.
 

FraxDzn

Minecrafter
Mitglied seit
21 Juli 2018
Beiträge
21
Bitte keinen Timer machen ist voll sinnlos und ineffizient. Mit bissel Mathematik kann man das alles viel besser gestalten.
Einfach mit ner If abfrage gucken, ob die differenz >= 1 ist, wenn ja loot geben und neuen eintrag, wenn nein verbieten lassen.
 

Marc-Senpai

Minecrafter
Mitglied seit
13 Mai 2018
Beiträge
18
Minecraft
Marc_Senpai
1. bei Command Event Timestap holen mit der Zeit in der config „vergleichen“ und wenn über 24h Befehl einfach ausführen lassen wenn nicht Event canceln
2. Sry hab nur die Hälfte gelesen kann schon so gesagt sein, aber so wie ich keiner xd
3. Jetzt hast du es auch nach dem reload des Servers
4. Für Hilfe eine pn
 
Oben