Jump to content

Funktion ab einem gewissen Datum Verfügbar!


Scripticus
 Share

Recommended Posts

Liebe Community,

Ich programmiere momentan ein Plugin welches 3 Schilder beinhaltet, welche dir unterschiedliche Sachen ausgiebt. Jedoch sollen diese an unterschiedlichen (Datum´s)-Daten nur zur Verfügung stehen, damit meine ich, dass ich z.b erst etwas am 1.1.16 bekomme und nicht davor.

Mein Code:

@EventHandler
    public void BlockKlick(PlayerInteractEvent e) {
        if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
            if (e.getClickedBlock().getType() == Material.SIGN_POST || e.getClickedBlock().getType() == Material.WALL_SIGN) {
                Sign sign = (Sign) e.getClickedBlock().getState();
                String[] lines = sign.getLines();
                if (lines[1].equalsIgnoreCase("Geschenke")) {
                        Player p = e.getPlayer();

                        if (lines[2].equalsIgnoreCase("Heiligabend")) {
                            ItemStack geschenk1 = new ItemStack(Material.DIAMOND_BLOCK, 4);
                            if (p.getInventory().firstEmpty() == -1 ) {
                                p.sendMessage(ChatColor.DARK_RED+"Bitte leere dein Invetar!");
                            }
                            else {
                                p.sendMessage(ChatColor.GOLD + "Du hast das Geschenk bekommen!");
                                p.getInventory().addItem(geschenk1);
                            }

                        }
                        else if (lines[2].equalsIgnoreCase("Silvester")) {
                            ItemStack geschenk2 = new ItemStack(Material.DIAMOND_BLOCK, 2);
                            if (p.getInventory().firstEmpty() == -1) {
                                p.sendMessage(ChatColor.DARK_RED+"Bitte leere dein Invetar!");
                            }
                            else {
                                p.sendMessage(ChatColor.GOLD + "Du hast das Geschenk bekommen!");
                                p.getInventory().addItem(geschenk2);
                            }
                        }
                        else if (lines[2].equalsIgnoreCase("Server B-Day")) {
                            ItemStack geschenk3 = new ItemStack(Material.DIAMOND_BLOCK, 6);
                            if (p.getInventory().firstEmpty() == -1) {
                                p.sendMessage(ChatColor.DARK_RED+"Bitte leere dein Invetar!");
                            }
                            else {
                                p.sendMessage(ChatColor.GOLD + "Du hast das Geschenk bekommen!");
                                p.getInventory().addItem(geschenk3);
                            }
                        }

                    }
                }
            }
        }
    }
}

Ich hoffe ihr könnt mir helfen. Desweiteren hätte ich das Problem das jeder Spieler es nur einmal drücken darf!

Über eine Antwort würde ich mich sehr freuen!:)

 

Mit freundlichen Grüßen,

Scripticus

Link to comment
Share on other sites

@Scripticus

Dein erstes Problem musst du mit der Systemzeit bewältigen. Mit

System.currentTimeMillis();

erhältst du die Millisekunden seit dem 01.01.1970.

 

Mit der folgenden Methode kannst du dir die Millisekunden zu einem bestimmten Datum zurückgeben lassen:

/**
 * @param date Das Datum im SimpleDateFormat dd/MM/yyyy - Beispiel: 24/12/2015
 * @return Gibt die Millisekunden zu diesem Datum um 00:00 Uhr an.
 */
private long getMilliseconds(String date) {
	SimpleDateFormat simpleDate = new SimpleDateFormat("dd/MM/yyyy");
	Date d;
	try {
		d = simpleDate.parse(date);
		return d.getTime();
	} catch (ParseException e) {
		// Irgendwas machen, das Datum konnte nicht gefunden werden.
	}
	return 0; // Kannst du gegen irgendwas anderes ersetzen, wenn das für dich mehr Sinn macht.
}

So wäre die Systemzeit zum 24.12. um 00:00 Uhr beispielsweise 1450911600000.

 

Jetzt kannst du in deinem obigen Code abfragen

long weihnachten = getMilliseconds("24/12/2015"), silvester = getMilliseconds("01/01/2016");

if (System.currentTimeMillis() < weihnachten) {
	// Man befindet sich vor Weihnachten
}
else {
	// Es ist Weihnachten bzw. Weihnachten ist schon vorbei
}

if (System.currentTimeMillis() < silvester) {
	// Man befindet sich vor Silvester
}
else {
	// Es ist Silvester bzw. Silvester ist schon vorbei
}

 

Damit ein Spieler nur einmal drücken kann, musst du irgendwie für sie einen Wert speichern. Hier bietet sich ein boolean (true oder false) an.

Dafür informierst du dich am besten mal über sogenannte HashMaps. In diesen könntest du zum Beispiel die UUID des Spielers mit dem boolean (ob er bereits auf das Schild geklickt hat) gegenüberstellen. Diese HashMap gilt es, beim Stopp des Servers zu speichern, am einfachsten wohl in der Config, am saubersten in einer eigenen Datei.

 

 

Sollte dir mein Beitrag geholfen haben, würde ich mich sehr über eine positive Bewertung freuen.

 

Liebe Grüße,

Baustein

Link to comment
Share on other sites

@Scripticus

vor 13 Minuten, Scripticus sagte:

Geht das nicht einfacher?

Würde ich einen einfacheren Weg kennen, so hätte ich dir den obigen nicht auferlegt. Die Methode zum Finden der Systemzeit musst du nicht in dein Plugin integrieren, die brauchst du ja nur einmal um die Millisekunden zu finden.

 

vor 14 Minuten, Scripticus sagte:

Und muss ich nicht zu jedem ein das anhängen: Else if (System.currenttimeMillis()== weihnachten)

Nein. Mit (X < Y) wird abgefragt, ob X kleiner als Y ist (Datum X liegt vor Datum Y).

else fängt jetzt alle davon abweichenden Möglichkeiten ab, also sowohl X > Y als auch X = Y.

 

 

Liebe Grüße,

Baustein

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...
B
B