Eigenes Plugin

06/26/2013 19:32 polikas#1
Hey Leute,
ich bin seit ein paar Tagen dabei mir ein eigenes Plugin zu schreiben.
Bis jetzt hat fast alles wunderbar geklappt.
Nur wenn ich bei meinen Plugin ingame /geschenk eingebe soll dieser Spieler ein geschenk bekommen und in einer Datei abgespeichert werden, um kein zweites Geschenk zu bekommen.
Das mit dem auflisten läuft perfekt, nur ich bekomme es nicht hin, das ich das Item in der Config einstellen kann.
Code:
 package de.norcdic.ewigkeitsplugin;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

public class GeschenkCommand implements CommandExecutor {
	private FileConfiguration getConfig() {
		return cfg;

	}
	
	public GeschenkCommand(Ewigkeit plugin) {
		
	}
	public void loadConfig() {
		FileConfiguration cfg = this.getConfig();
		cfg.options().copyDefaults(true);
		this.saveConfig();
	}
	
	private void saveConfig() {	
		
	}

	File file = new File("plugins/EwigkeitsPlugin", "geschenk.yml");
	FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
	@Override
	public boolean onCommand(CommandSender cs, Command cmd, String lable, String[] args) {
		if (!(cs instanceof Player)) {
			loadConfig();
			cs.sendMessage("§cDu kannst kein Geschenk bekommen, du hast kein Inventar!");
			return true;
		}
		Player p = (Player) cs;
		List<String> list = this.cfg.getStringList("geschenke");
		if (list == null) {
			list = new ArrayList<String>();
		}
		if (list.contains(p.getName())) {
			p.sendMessage("§cDu hast schon ein Geschenk bekommen!");
			return true;
		}
		PlayerInventory pi = p.getInventory();
		if (pi.firstEmpty() == -1) {
			p.sendMessage("§cDein Inventar ist voll!");
		}
		if (!cs.hasPermission("nor.geschenk")){
			p.sendMessage("§cDu hast keine Rechte!");
			return true;
		}
		list.add(p.getName());
		this.cfg.set("geschenke", list);
		try {
			this.cfg.save(file);
			int Config = this.getConfig().getInt("geschenkitem");
			ItemStack item = new ItemStack (Config);
			pi.addItem(new ItemStack (item));
			p.sendMessage("§cDu hast ein Geschenk bekommen.");
			p.updateInventory();
		} catch (IOException e) {
			e.printStackTrace();
			cs.sendMessage("§cEs ist ein Fehler aufgetreten!");
		}

		return true;	
			
	}
	
}
Vielen dank im voraus!
mfg
polikas
06/26/2013 19:47 ComputerBaer#2
Pack es bitte in [code][/ code].

Ich kann das Problem nicht erkennen, entweder weil nichts eingerückt ist oder weil es keinen gibt.

Tritt denn ein Fehler auf? Wie sieht die Config aus?
06/26/2013 19:50 polikas#3
So meine Config:
Code:
geschenkitem: 20
info:
  motd:
  - heyheyheyhey
messages:
- ASDASDASDASD
Und ja es tritt ein fehler auf, wenn ich den Server starte
Code:
2013-06-26 20:23:04 [WARNING] [ewigkeitsplugin] Task #6 for ewigkeitsplugin v1.0 generated an exception
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
	at java.util.ArrayList.RangeCheck(Unknown Source)
	at java.util.ArrayList.get(Unknown Source)
	at de.norcdic.ewigkeitsplugin.MessageRunnable.run(MessageRunnable.java:19)
	at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftTask.run(CraftTask.java:53)
	at org.bukkit.craftbukkit.v1_5_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:345)
	at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:513)
	at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)
	at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
	at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
	at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
2013-06-26 20:23:05 [INFO] NorCdiC issued server command: /geschenk
Funktioniert jetzt so wie es soll, außer das die Fehlermeldung in der Console bleibt
06/27/2013 16:41 vanilla.kush#4
Alle Zeichensetzungen richtig beachtet?
06/27/2013 16:44 ComputerBaer#5
Dann würde ich sagen, dass du den Fehler mal beheben solltest.
Hier ist dein Ansatzpunkt: de.norcdic.ewigkeitsplugin.MessageRunnable.run(Mes sageRunnable.java:19)
Und du suchst nach einer IndexOutOfBoundsException bei einer Liste.
06/28/2013 20:37 XxXRichiXxX#6
Warum machst du hier nochmal einen neuen ItemStack?

Code:
this.cfg.save(file);
int Config = this.getConfig().getInt("geschenkitem");
ItemStack item = new ItemStack (Config);
pi.addItem([B]new ItemStack[/B] (item));
p.sendMessage("§cDu hast ein Geschenk bekommen.");
p.updateInventory();
Du hast bereits mit
Code:
ItemStack item = new ItemStack (Config);
einen ItemStack erstellt, dann musst du noch eine Menge definieren
Code:
ItemStack item = new ItemStack (Config, MENGE(int));
und dann einfach so geben, wie du es hast.

Wenn du das beachtest, sollte es gehen.