Jump to content

Kleines Problem mit der Replace funktion von Spigot


Failcrafter1998

Empfohlene Beiträge

Guten Tag Liebe Community,

 

ich arbeite momentan an einem kleinen Pluign und habe folgendes Problem: 

Bei einem meiner Plugin Commands gibt es ein Cooldown und die Nachricht wird durch die Config abgerufen und dort soll %cooldown% mit dem Countdown ersetzt werden. Das Problem ist wenn ich dies mit der replace Funktion versuche bekomme ich einen Error das Int's nicht erlaubt sind. Mir ist bis jetzt kein andere Weg eingefallen, und frage deshalb jetzt euch nach einer Lösung.

 

Hier mein Code:

			if(this.time.containsKey(commandSender.getName())) {
				long diff = (System.currentTimeMillis() - ((Long)this.time.get(commandSender.getName())).longValue()) / 1000L / 60L;
				this.Cooldown = this.getConfig().getInt("settings.cooldown");
					if(diff < this.Cooldown) {
						String cooldownmsg = this.getConfig().getString("messages.cooldown");
						cooldownmsg = cooldownmsg.replace("%cooldown%", this.Cooldown - diff);
						commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', cooldownmsg));
					return true;
					}
			}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

So eine weitere Frage:

Ich möchte gerne den Befehl mit verschiedenen Args versehen. Mein Probleme ist jetzt wenn ich /argstest msg [Text] eingebe bekomme ich einen Error. Der Text hinter msg soll als Nachricht für alle Spieler ausgeben werden. Hier mein Code:

 

	public boolean onCommand (CommandSender sender, Command cmd, String cmdLabel, String [] args ) {
		if(cmd.getName().equalsIgnoreCase("argstest")) {
			if(!( sender instanceof Player)) {
				ConsoleCommandSender c = (ConsoleCommandSender) sender;
				c.sendMessage(ChatColor.translateAlternateColorCodes('&',this.getConfig().getString("messages.prefix") + this.getConfig().getString("messages.console")));
			} else {
				Player commandSender = (Player) sender;
				if(!(commandSender.hasPermission("test.test"))) {
					String noperm = this.getConfig().getString("messages.noperm");
					commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages.prefix") + noperm));
					return true;
				}
				if(this.time.containsKey(commandSender.getName())) {
					long diff = (System.currentTimeMillis() - ((Long)this.time.get(commandSender.getName())).longValue()) / 1000L / 60L;
					this.Cooldown = this.getConfig().getInt("settings.cooldown");
						if(diff < this.Cooldown) {
							String cooldownmsg = this.getConfig().getString("messages.cooldown");
							cooldownmsg = cooldownmsg.replace("%cooldown%", this.Cooldown - diff + "");
							commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages.prefix") + cooldownmsg));
							return true;
						}
				}
				if(commandSender.hasPermission("test.test")) {
					if(args.length == 0) {
						commandSender.sendMessage("Keine Args!");
						return true;
					} else if(args.length == 1) {
						if(args[0].equalsIgnoreCase("msg")) {
							if(args[1].length() >= 1 ) {
								if(eco.has(commandSender, this.getConfig().getInt("settings.costs"))) {
									
									StringBuilder text = new StringBuilder();
									for(int i = 0 ; i < args.length ; i++) {
										text.append(args[i]).append(" ");
									} 
									
									String ad = this.getConfig().getString("messages.ad");
									ad = ad.replace("%player%", commandSender.getName());
									Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', ad + text.toString()));
									String withdraw = this.getConfig().getString("messages.moneywithdraw");
									withdraw = withdraw.replace("%costs%", this.getConfig().getInt("settings.costs") + "");
									eco.withdrawPlayer(commandSender, this.getConfig().getInt("settings.costs"));
									commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages.prefix") + withdraw));
									this.time.put(commandSender.getName(), Long.valueOf(System.currentTimeMillis()));
									return true;
							} else {
								commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages.prefix") + this.getConfig().getString("messages.nomoney")));
							}
						} else {
							commandSender.sendMessage(ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("messages.prefix") + this.getConfig().getString("messages.notext")));
						}
					} else {
						commandSender.sendMessage("Bitte nutze einen Richtigen Arg´´");
						return true;
					}
				}
			}
		}
	}
		return false;
   }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nimm's mir nicht krumm, ich habe mir deinen Code nicht komplett durchgelesen, weil ich schon mitten drin Krämpfe bekommen habe :D

  1. "bekomme ich einen Error". Errors sind toll. Denn im allerwahrscheinlichsten Fall bekommst du einen stacktrace. Und dieser - halt dich fest - hilft dir, das Problem zu lösen, weil er exakt sagt, was falsch ist. Es ist also durchaus sinnvoll, wenn du uns diesen stacktrace schickst.
  2. hier mal zwei Code-Fehler, die ich beim Überfliegen sah, soweit wie ich bei Erhaltung meiner körperlichen Gesundheit kam: ConsoleCommandSender c = (ConsoleCommandSender) sender; komplett sinnfrei. Nimm einfach gleich sender.sendMessage("bla");
  3. wenn (args.length == 1) zutrifft, kann args[1] nicht existieren, also geht auch args[1].length() nicht und wird dir eine Exception werfen.

 

Ich hoffe, dass du uns mit dem stacktrace aushelfen kannst. Generell würde ich nochmal empfehlen, über die Java-Grundlagen zu schauen.

 

Liebe Grüße,
Baustein

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Fehler kommt sobald ich nur /argstest msg ausführe. Gebe ich /argstest msg [Text] ein passiert gar nichts außer das /argstest ausgeben wird

 

Hier der stacktrace: 

 

[14:27:55] [Server thread/INFO]: Failcrafter1998 issued server command: /argstest msg
[14:27:55] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'argstest' in plugin test v1.3
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[Spigot-1.11.jar:git-Paper-1079]
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:151) ~[Spigot-1.11.jar:git-Paper-1079]
	at org.bukkit.craftbukkit.v1_11_R1.CraftServer.dispatchCommand(CraftServer.java:675) ~[Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.PlayerConnection.handleCommand(PlayerConnection.java:1392) ~[Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.PlayerConnection.a(PlayerConnection.java:1197) ~[Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) ~[Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:14) ~[Spigot-1.11.jar:git-Paper-1079]
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_121]
	at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_121]
	at net.minecraft.server.v1_11_R1.SystemUtils.a(SourceFile:46) [Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.MinecraftServer.D(MinecraftServer.java:830) [Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.DedicatedServer.D(DedicatedServer.java:403) [Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.MinecraftServer.C(MinecraftServer.java:754) [Spigot-1.11.jar:git-Paper-1079]
	at net.minecraft.server.v1_11_R1.MinecraftServer.run(MinecraftServer.java:652) [Spigot-1.11.jar:git-Paper-1079]
	at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
	at testplugin.commands.test.onCommand(test.java:53) ~[?:?]
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[Spigot-1.11.jar:git-Paper-1079]
	... 15 more

 

bearbeitet von Failcrafter1998
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...
B
B