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

Brauche Hilfe bei Programmierung eines Plugins.

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
Hallo ich bin neu hier und brauche nun hilfe
ich habe eine art Shopsystem in planung
und nun wollte ich das mein Plugin bei dem ersten laden eine config erstellt (funktioniert super)

jedoch brauche ich hilfe bei einem code teil undzwar handelt es sich dabei um den preis
dieser soll aus der Config rausgelesen werden und dann * die anzahl die der spieler eingegeben hat von seinem konto abgezogen bekommen
also eigendlich nur das der Festgelegte preis der in der Connfig steht rausgelesen wird.

eigendlich wollte ich das alles in eine variable packen das ich nur z.b. price*amount oder sowas angeben muss jedoch bin ich anfänger und suche nun eure hilfe

mit freundlichem gruß
BlueT3XoN
 

sirkarpfen

Minecrafter
Registriert
23 Februar 2013
Beiträge
10
Diamanten
0
Code:
int preis = plugin.getConfig().getInt("Pfad zum Preis")

So liest man aus der config einen int wert. Wenn du Gleitkomma verwendest, einfach das int durch ein double ersetzen und mit getDouble() den Preis auslesen :).

Vergiss aber nicht, dass du den Pfad auch dementsprechend in der config.yml eintragen musst. HIer noch ein kleiner Guide zu den Configuration-Objekten: http://wiki.bukkit.org/Introduction_to_the_New_Configuration/de
 

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
danke ^^

WoW erst mal danke für die schnelle antwort und die seite schau ich mir gleich mal an
den int muss ich den für jede ItemID nehmen ??
da ich alle items einbinden wollte und jedes item einen anderen preis haben soll
jetzt noch mal meine frage an dich persönlich
wie würdest du diese abfrage umsetzten um von der eingegeben ItemID den preis auszulesen ?
deine antwort werd ich gleich mal ausprobieren und die seite anschauen

ich entschuldige mich für die umstände
bin aber ein neuling im programmieren von Plugins
bisher klappt auch alles super nur dieses auslesen eben nicht

ach ja und das Verkaufen von items klappt dann wohl auch so über den INT z.b. int verkauspreis

ich danke dir noch mal ^^

okay neues problem neues glück
wenn ich nun /buy 1 3 (also 3 stone) dann kommt :

"An internal Error occurred while attempting to perform this command"

hier mein Buy code (bin anfänger)

Code:
package me.peddi20.MultiPlugin.VipShop;

import java.text.NumberFormat;
import me.peddi20.MultiPlugin.MultiPlugin;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.java.JavaPlugin;

public class CommandBuy extends JavaPlugin
{

	private Economy econ;
	
	public CommandBuy(MultiPlugin Multiplugin) 
	{
		this.econ = MultiPlugin.economy;
	}

	public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args) 
	{
		if (cs instanceof Player) 
		{
			Player p = (Player) cs;
			PlayerInventory pi = p.getInventory();
			int itemid = new preise().getItemID(args[0]);
			int amount;
			int preis = this.getConfig().getInt("vipshop.preise");
			if (args.length != 2)
			{
				p.sendMessage("falsche anzahl an Parametern");
				return true;
			}
			try 
			{
				itemid = Integer.valueOf(args[0]);
				amount = Integer.valueOf(args[1]);
			} catch (NumberFormatException nfe) 
			{
				cs.sendMessage("Du musst eine Zahl Angeben");
				return true;
			}
			if (Label.equalsIgnoreCase("buy")) 
			{
				if (pi.firstEmpty() == -1)
				{
					cs.sendMessage("Dein Inventar ist voll");
					return true;
				} else {
					
					if (this.econ.has(p.getName(), preis*amount))
					{
						pi.addItem(new ItemStack(itemid, amount));
						this.econ.withdrawPlayer(p.getName(), preis*amount);
						p.updateInventory();
					} else {
						cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
						return true;
				}
			}

			} else if (Label.equalsIgnoreCase("sell"))
			{
				
			}
		}
		cs.sendMessage("MultiPlugin");
		return false;
	}
	


}

und hier der teil mit der config

Code:
public void loadConfig()
  	{
  		String path1 = "vipshop.preise.stone";
  		this.getConfig().addDefault(path1, "10");
  		 		
  		this.getConfig().options().copyDefaults(true);
  		this.saveConfig();
  	}

falls ihr fehler / verbesserungen findet sagt es mit bitte
 
Zuletzt bearbeitet:

MrFlieder

Braumeister
Registriert
30 Dezember 2011
Beiträge
332
Diamanten
0
Minecraft
MrFlieder
int preis = this.getConfig().getInt("vipshop.preise");
In deiner Config gibt es keinen Pfad "vipshop.preise".
Ich würde die Items in der Config folgendermaßen eintragen:
Code:
getConfig().set("vipshop.preis.1", 5);
Somit setzt du für ItemID 1 den Preis 5.

Dann kannst du, wenn jemand Stein kaufen will, und nicht 1 sondern Stone eingibt deine preise().getItemID("stone"/args[0])-Methode verwenden.

Improvisierter Code:
Code:
int itemid = 0;
int amount = 0;
int preis = 0;
try
{
    itemid = Integer.parseInt(args[0]);
    amount = Integer.parseInt(args[1]);
    preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
} catch (Exception e) 
{
    if(preise().getItemID(args[0]) != null)
    {
        itemid = Integer.parseInt(preise().getItemID(args[0]);
        amount = Integer.parseInt(args[1]);
        preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
    } else
    {
        player.sendMessage("Dieses Item existiert nicht!");
    }
}
 

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
weiß nicht wieso aber ich krieg das nicht hin
es kommt weiterhin dieser fehler

An internal Error occurred while attempting to perform this command.


tut mir leid das ich dich noch einmal "belästigen" muss.

hier mal alle datein des plugins :

MultiPlugin.java

Code:
import me.peddi20.MultiPlugin.VipShop.CommandBuy;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;


public class MultiPlugin extends JavaPlugin{
	
	public static Economy economy = null;
	
	@Override
	public void onDisable() 
	{
		System.out.println("[MultiPlugin] Wurde Deaktiviert");
	}
	@Override
	public void onEnable() 
	{
		loadConfig();
		this.setupEconomy();
		
		System.out.println("[MultiPlugin] Aktiviert");
		System.out.println("[MultiPlugin] by peddi20");
		System.out.println("[MultiPlugin] website: http://www.mineyourlife.de/");
		
		this.getCommand("buy").setExecutor(new CommandBuy(this));
	}
	public boolean onCommand(CommandSender Sender, Command cmd, String cmdLabel, String[] args){
		boolean erfolg = false;
		
		Player p = (Player)Sender;
		
		if(cmd.getName().equalsIgnoreCase("multi"))							 
		{
			if(p.hasPermission("multi.help"))									 
			{
				if(args.length == 0)										 
				{
					p.sendMessage(ChatColor.GREEN + "============================================");
					p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "  MultiPlugin Hilfe (1/1) " + ChatColor.GREEN + "============");
					p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "         by. peddi20       " + ChatColor.GREEN + "============");
					p.sendMessage(ChatColor.GREEN + "============================================");
					
				
					erfolg = true;
				} else {
					erfolg = false;
				}
			}
		}
		if(cmd.getName().equalsIgnoreCase("multiexp"))							 
		{
			if(p.hasPermission("multi.help.exp"))									 
			{
				if(args.length == 0)										 
				{
					p.sendMessage(ChatColor.GREEN + "============================================");
					p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "  MultiPlugin Hilfe EXP.   " + ChatColor.GREEN + "============");
					p.sendMessage(ChatColor.GREEN + "============" + ChatColor.GOLD + "       by. peddi20         " + ChatColor.GREEN + "============");
					p.sendMessage(ChatColor.GREEN + "============================================");
					
					erfolg = true;
				} else {
					erfolg = false;
				}
			}
		}
			    
		return erfolg;	
	}
    private boolean setupEconomy()
    {
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
        if (economyProvider != null) {
            economy = economyProvider.getProvider();
        }
        return (economy != null);
    }
  	public void loadConfig()
  	{
  		getConfig().set("vipshop.preis.1", 50);
  	
  		this.getConfig().options().copyDefaults(true);
  		this.saveConfig();
  	}	
	}

CommandBuy.java

Code:
package me.peddi20.MultiPlugin.VipShop;

import java.text.NumberFormat;
import me.peddi20.MultiPlugin.MultiPlugin;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.java.JavaPlugin;

public class CommandBuy extends JavaPlugin
{

	private Economy econ;
	
	public CommandBuy(MultiPlugin Multiplugin) 
	{
		this.econ = MultiPlugin.economy;
	}
	public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args) 
	{
		if (cs instanceof Player) 
		{
			Player p = (Player) cs;
			PlayerInventory pi = p.getInventory();
			int itemid = 0;
			int amount = 0;
			int preis = 0;
			if (args.length != 2)
			{
				p.sendMessage("falsche anzahl an Parametern");
				return true;
			}
			try 
			{
				itemid = Integer.valueOf(args[0]);
				amount = Integer.valueOf(args[1]);
				preis = getConfig().getInt("vipshop.preis." + itemid) * amount;
			} catch (NumberFormatException nfe) 
			{
				cs.sendMessage("Du musst eine Zahl Angeben");
				return true;
			}
			if (Label.equalsIgnoreCase("buy")) 
			{
				if (pi.firstEmpty() == -1)
				{
					cs.sendMessage("Dein Inventar ist voll");
					return true;
				} else {
					if (this.econ.has(p.getName(), preis*amount))
					{
						pi.addItem(new ItemStack(itemid, amount));
						this.econ.withdrawPlayer(p.getName(), preis*amount);
						p.updateInventory();
					} else {
						cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
						return true;
				}
			}
			} else if (Label.equalsIgnoreCase("sell"))
			{	
			}
		}
		cs.sendMessage("MultiPlugin");
		return false;
	}
}

VaultAdapter.java

Code:
package me.peddi20.MultiPlugin.VipShop;

import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;

import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.plugin.RegisteredServiceProvider;

public class VaultAdapter {
    private static final String VAULT = "Vault";

    private static Economy ecoVault = null;
    private static Permission permVault = null;
    private static boolean vaultLoaded = false;
    
    public static Economy getEconomy(){
        if(!vaultLoaded){
            vaultLoaded = true;
            Server theServer = Bukkit.getServer();
            if (theServer.getPluginManager().getPlugin(VAULT) != null){
                RegisteredServiceProvider<Economy> rsp = theServer.getServicesManager().getRegistration(Economy.class);
                if(rsp!=null){
                   ecoVault = rsp.getProvider();
                }
            }
        }      
        return ecoVault;
    }    
    public static Permission getPermissions(){
        if(!vaultLoaded){
            vaultLoaded = true;
            Server theServer = Bukkit.getServer();
            if (theServer.getPluginManager().getPlugin(VAULT) != null){
                RegisteredServiceProvider<Permission> rsp = theServer.getServicesManager().getRegistration(Permission.class);
                if(rsp!=null){
                    permVault = rsp.getProvider();
                }
            }
        }      
        return permVault;
    }
}

noch mal sry =(
bin nen anfänger
 

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
aso ok sry wusste ich nicht
hier ist server log
Code:
2013-02-23 12:13:52 [INFO] Starting minecraft server version 1.4.7
2013-02-23 12:13:52 [INFO] Loading properties
2013-02-23 12:13:52 [INFO] Default game type: SURVIVAL
2013-02-23 12:13:52 [INFO] Generating keypair
2013-02-23 12:13:52 [INFO] Starting Minecraft server on localhost:25565
2013-02-23 12:13:52 [INFO] This server is running CraftBukkit version git-Bukkit-1.4.7-R1.0-b2624jnks (MC: 1.4.7) (Implementing API version 1.4.7-R1.0)
2013-02-23 12:13:53 [INFO] [MultiPlugin] Loading MultiPlugin v0.1
2013-02-23 12:13:53 [INFO] [Vault] Loading Vault v1.2.23-b301
2013-02-23 12:13:53 [INFO] [iConomy] Loading iConomy v7.0
2013-02-23 12:13:53 [INFO] [TagAPI] Loading TagAPI v1.9.3
2013-02-23 12:13:53 [INFO] [Vault] Enabling Vault v1.2.23-b301
2013-02-23 12:13:53 [WARNING] iConomy - If you are using Flatfile storage be aware that versions 6, 7 and 8 have a CRITICAL bug which can wipe ALL iconomy data.
2013-02-23 12:13:53 [WARNING] if you're using Votifier, or any other plugin which handles economy data in a threaded manner your server is at risk!
2013-02-23 12:13:53 [WARNING] it is highly suggested to use SQL with iCo6 or to use an alternative economy plugin!
2013-02-23 12:13:53 [INFO] [Vault][Economy] iConomy 6 found: Waiting
2013-02-23 12:13:53 [INFO] [Vault][Permission] SuperPermissions loaded as backup permission system.
2013-02-23 12:13:53 [INFO] [Vault] Enabled Version 1.2.23-b301
2013-02-23 12:13:53 [INFO] [Vault][Economy] iConomy 7 hooked.
2013-02-23 12:13:53 [WARNING] **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!
2013-02-23 12:13:53 [WARNING] The server will make no attempt to authenticate usernames. Beware.
2013-02-23 12:13:53 [WARNING] While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.
2013-02-23 12:13:53 [WARNING] To change this, set "online-mode" to "true" in the server.properties file.
2013-02-23 12:13:53 [INFO] Preparing level "world"
2013-02-23 12:13:53 [INFO] Preparing start region for level 0 (Seed: -4750547772315650326)
2013-02-23 12:13:53 [INFO] Preparing start region for level 1 (Seed: 1709146943286000967)
2013-02-23 12:13:54 [INFO] Preparing start region for level 2 (Seed: 1709146943286000967)
2013-02-23 12:13:54 [INFO] Preparing spawn area: 52%
2013-02-23 12:13:54 [INFO] [MultiPlugin] Enabling MultiPlugin v0.1
2013-02-23 12:13:54 [INFO] [MultiPlugin] Aktiviert
2013-02-23 12:13:54 [INFO] [MultiPlugin] by peddi20
2013-02-23 12:13:54 [INFO] [MultiPlugin] website: http://www.mineyourlife.de/
2013-02-23 12:13:54 [INFO] [iConomy] Enabling iConomy v7.0
2013-02-23 12:13:54 [INFO] [iConomy - April Fools] Enabled (18 ms)
2013-02-23 12:13:54 [INFO] [iConomy] Hello, I'm Nijikokun. Yes, this is an April Fools joke, but '/money top' was fixed! Enjoy :) - Rare Version!
2013-02-23 12:13:54 [INFO] [iConomy - April Fools] Purged accounts with default balance.
2013-02-23 12:13:54 [INFO] [TagAPI] Enabling TagAPI v1.9.3
2013-02-23 12:13:54 [INFO] [TagAPI] Using hooks for CraftBukkit v1_4_R1
2013-02-23 12:13:54 [INFO] Server permissions file permissions.yml is empty, ignoring it
2013-02-23 12:13:54 [INFO] Done (1.273s)! For help, type "help" or "?"
2013-02-23 12:14:01 [INFO] peddi20[/127.0.0.1:61461] logged in with entity id 288 at ([world] -132.865303717659, 70.0, 303.385726003733)
2013-02-23 12:14:07 [INFO] peddi20 issued server command: /buy 1 3
2013-02-23 12:14:07 [SEVERE] null
org.bukkit.command.CommandException: Unhandled exception executing command 'buy' in plugin MultiPlugin v0.1
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:186)
	at org.bukkit.craftbukkit.v1_4_R1.CraftServer.dispatchCommand(CraftServer.java:514)
	at net.minecraft.server.v1_4_R1.PlayerConnection.handleCommand(PlayerConnection.java:980)
	at net.minecraft.server.v1_4_R1.PlayerConnection.chat(PlayerConnection.java:898)
	at net.minecraft.server.v1_4_R1.PlayerConnection.a(PlayerConnection.java:853)
	at net.minecraft.server.v1_4_R1.Packet3Chat.handle(Packet3Chat.java:44)
	at net.minecraft.server.v1_4_R1.NetworkManager.b(NetworkManager.java:290)
	at net.minecraft.server.v1_4_R1.PlayerConnection.d(PlayerConnection.java:113)
	at net.minecraft.server.v1_4_R1.ServerConnection.b(SourceFile:39)
	at net.minecraft.server.v1_4_R1.DedicatedServerConnection.b(SourceFile:30)
	at net.minecraft.server.v1_4_R1.MinecraftServer.r(MinecraftServer.java:598)
	at net.minecraft.server.v1_4_R1.DedicatedServer.r(DedicatedServer.java:224)
	at net.minecraft.server.v1_4_R1.MinecraftServer.q(MinecraftServer.java:494)
	at net.minecraft.server.v1_4_R1.MinecraftServer.run(MinecraftServer.java:427)
	at net.minecraft.server.v1_4_R1.ThreadServerApplication.run(SourceFile:849)
Caused by: java.lang.IllegalArgumentException: File cannot be null
	at org.apache.commons.lang.Validate.notNull(Validate.java:203)
	at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:170)
	at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:117)
	at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
	at me.peddi20.MultiPlugin.VipShop.CommandBuy.onCommand(CommandBuy.java:46)
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
	... 15 more
2013-02-23 12:14:08 [INFO] peddi20 lost connection: disconnect.quitting
2013-02-23 12:14:08 [INFO] Connection reset
2013-02-23 12:14:16 [INFO] CONSOLE: Stopping the server..
2013-02-23 12:14:16 [INFO] Stopping server
2013-02-23 12:14:16 [INFO] [TagAPI] Disabling TagAPI v1.9.3
2013-02-23 12:14:16 [INFO] [iConomy] Disabling iConomy v7.0
2013-02-23 12:14:16 [INFO] [Vault][Economy] iConomy 7 unhooked.
2013-02-23 12:14:16 [INFO] [iConomy] Closing general data...
2013-02-23 12:14:16 [INFO] [iConomy] Disabled. (0 ms)
2013-02-23 12:14:16 [INFO] [Vault] Disabling Vault v1.2.23-b301
2013-02-23 12:14:16 [INFO] [MultiPlugin] Disabling MultiPlugin v0.1
2013-02-23 12:14:16 [INFO] [MultiPlugin] Wurde Deaktiviert
2013-02-23 12:14:16 [INFO] Saving players
2013-02-23 12:14:16 [WARNING] DSCT: socket closed
2013-02-23 12:14:16 [INFO] Saving worlds
2013-02-23 12:14:16 [INFO] Closing listening thread
2013-02-23 12:14:16 [INFO] Saving chunks for level 'world'/Overworld
2013-02-23 12:14:17 [INFO] Saving chunks for level 'world_nether'/Nether
2013-02-23 12:14:17 [INFO] Saving chunks for level 'world_the_end'/The End
2013-02-23 12:14:17 [INFO] Stopping server
 
G

games6471

Guest
Darauf habe ich garnicht mehr geachtet^^....kann es sein, dass vllt das Format des Files automatisch geändert wird? Ich wüsste zwar nicht wieso, aber das wäre vllt eine Idee...

Ich finds auch ziemlich komisch. Denn die Datei wird wirklich beim starten eines Plugins beschrieben, also kann diese nicht Null sein. Darf ich Fragen welche Craftbukkitversion du (BlueT3XoN)?
 

sirkarpfen

Minecrafter
Registriert
23 Februar 2013
Beiträge
10
Diamanten
0
Also es könnte daran liegen, dass du sowohl MultiPlugin als auch CommandBuy von JavaPlugin erben lässt. Damit hast du eigentlich 2 main-Klassen erstellt. Wenn du in CommandBuy getConfig() aufrufst, rufst du eine Config ab, die es in CommandBuy einfach nicht gibt. Die Config wird erst erstellt, wenn die onEnable()-Methode der jeweiligen Klasse fertig ist.

Mein Vorschlag ist, dass du erstmal die Deklaration der Klasse CommandBuy auf:

Code:
public class CommandBuy extends CommandExecutor

änderst. Dann die Zeile in der MultiPlugin Klasse:

Code:
this.getCommand("buy").setExecutor(new CommandBuy(this));

auf das hier änderst:

Code:
this.getCommand("buy").setExecutor(new CommandBuy(this, getConfig()));

Somit hast du der CommandBuy-Klasse, die Config überliefert.
Nun musst du noch den Konstruktor der Klasse CommandBuy abändern:

Code:
private FileConfiguration config;

public CommandBuy(MultiPlugin Multiplugin, FileConfiguration config) 
	{
		this.econ = MultiPlugin.economy;
                this.config = config;
	}

Anbei bemerke ich noch, dass du mit MultiPlugin.economy einen statischen Zugriff auf die Klasse machst, obwohl du schon als Parameter ein MultiPlugin-Objekt mitlieferst. Richtig wäre hierbei: Multiplugin.economy. Außerdem wäre es der Übersicht halber, angenehmer, wenn du die Java Code Conventions ein wenig beachtest. Variablen immer klein schreiben, Klassen immer groß usw. Gibt sicherlich im Netz, Infos darüber, wie du deinen Code schöner machen kannst :).
 
Zuletzt bearbeitet:

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
ersteinmal danke für eure antworten
jedoch besteht der fehle weiterhin

hat jemand ein selbstgeschriebenes plugin das presie aus einer config liest und könnte mir dies zum anschauen zur verfügung stellen
damit ich selber noch ein wenig mehr lerne und eventuell finde wo mein fehler ist =(

// EDIT


Also wenn ich nun diese zeile rausnehme da das getConfig() rot unterstrichen ist.

Code:
preis = getconfig().getInt("vipshop.preis." + itemid) * amount;

und

Code:
int preis = 0;

durch

Code:
int preis = 50;

ersetze dann kann ich komischerweise kaufen und ein stein kostet tatsächlich 50
Jedoch wenn ich /buy 1 3 eingebe dann bekomme ich 3 stein und mir werden 150 abgezogen
aber wenn ich dies eingebe sehe ich im chat "MultiPlugin" und da drunter "/buy" ist zwar nur nen schönheitsfehler aber wenn jemand wieß wies weg geht einfach mal kurz nen kommentar da lassen und ich bitte um hilfe bei dem getConfig
also diese zeile mit dem getconfig() funktioniert anscheind nicht ganz ich brauch da noch ma hilfe.


Code:
package me.peddi20.MultiPlugin.VipShop;

import java.text.NumberFormat;
import me.peddi20.MultiPlugin.MultiPlugin;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.plugin.java.JavaPlugin;

public class CommandBuy implements CommandExecutor
{

	private Economy econ;
	
	private FileConfiguration config;

	public CommandBuy(MultiPlugin Multiplugin, FileConfiguration config) 
		{
			this.econ = MultiPlugin.economy;
	                this.config = config;
		}

	public boolean onCommand(CommandSender cs, Command cmd, String Label, String[] args) 
	{
		if (cs instanceof Player) 
		{
			Player p = (Player) cs;
			PlayerInventory pi = p.getInventory();
			int itemid = 0;
			int amount = 0;
			int preis = 50;
			if (args.length != 2)
			{
				p.sendMessage("falsche anzahl an Parametern");
				return true;
			}
			try 
			{
				itemid = Integer.valueOf(args[0]);
				amount = Integer.valueOf(args[1]);
			} catch (NumberFormatException nfe) 
			{
				cs.sendMessage("Du musst eine Zahl Angeben");
				return true;
			}
			if (Label.equalsIgnoreCase("buy")) 
			{
				if (pi.firstEmpty() == -1)
				{
					cs.sendMessage("Dein Inventar ist voll");
					return true;
				} else {
					
					if (this.econ.has(p.getName(), preis*amount))
					{
						pi.addItem(new ItemStack(itemid, amount));
						this.econ.withdrawPlayer(p.getName(), preis*amount);
						p.updateInventory();
					} else {
						cs.sendMessage("Du hast nicht genug " +this.econ.currencyNameSingular() + "!");
						return true;
				}
			}

			} else if (Label.equalsIgnoreCase("sell"))
			{
				
			}
		}
		cs.sendMessage("MultiPlugin");
		return false;
	}
	


}
 
Zuletzt bearbeitet:

sirkarpfen

Minecrafter
Registriert
23 Februar 2013
Beiträge
10
Diamanten
0
Also, da du ja jetzt das Config-Objekt über den Konstruktor übernimmst, brauchst du auch kein getConfig() mehr.

Code:
preis = config.getInt("vipshop.preis." + itemid) * amount;

ist da der richtige Ansatz.

So... Nachstehend hab ich mal ein wenig an deiner Klasse rumgebastelt. Ich hoffe die Kommentare dazu helfen dir weiter :). Am besten du kopierst das ganze irgendwo in deinen Eclipse Editor, bzw. den Editor den du benutzt. Damit du die Kommentare besser siehst :).

Code:
public class CommandBuy implements CommandExecutor {

	private Economy econ;

	private FileConfiguration config;
	
	// Das hier meinte ich mit klein geschriebenen Variablennamen. Nur klassen sollten groß geschrieben werden, 
	// damit die Übersicht gewahrt bleibt
	public CommandBuy(MultiPlugin multiPlugin, FileConfiguration config) {
		this.econ = multiPlugin.economy;
		this.config = config;
	}

	public boolean onCommand(CommandSender cs, Command cmd, String label,
			String[] args) {
		// zu allererst abfragen, ob der Sender auch wirklich ein Player ist. Wenn nicht, wirf die message aus, und return.
		if (!(cs instanceof Player)) {
			cs.sendMessage("Nur Spieler können dieses Command ausführen.");
			return true;
		}
		
		// Eleganter als dein Ansatz, weil so die Übersichtlichkeit gewahrt wird. Zu viele verschachtelte If-Abfragen machen es schwer,
		// sich im Code zurecht zu finden.
		Player p = (Player) cs;
		
		// Die Abfrage sollte auch relativ früh vorgenommen werden, damit du dir unnötige Deklarationen oder Berechnungen sparst,
		// falls der User das Command falsch eingegeben hat.
		if (args.length != 2) {
			p.sendMessage("falsche anzahl an Parametern");
			return true;
		}
		
		// erst wenn wirklich /buy eingegeben wird, solltest du anfangen, Berechnungen durchzuführen oder Daten auszulesen.
		if (label.equalsIgnoreCase("buy")) {
			PlayerInventory pi = p.getInventory();
			int itemid = 0;
			int amount = 0;
			
			// das hier meinte ich. Wie oben geschrieben, wird dem Konstruktor dieser Klasse, die Config übergeben. Damit ist
			// jeder weitere Aufruf von getConfig() unnötig geworden.
			int preis = config.getInt("vipshop.preis." + itemid) * amount;
			
			try {
				itemid = Integer.valueOf(args[0]);
				amount = Integer.valueOf(args[1]);
			} catch (NumberFormatException nfe) {
				p.sendMessage("Du musst eine Zahl Angeben");
				return true;
			}
			
			if (pi.firstEmpty() == -1) {
				p.sendMessage("Dein Inventar ist voll");
				return true;
			} else {
				
				// updateInventory() ist bereits als Deprecated deklariert. Gegebenenfalls musst du die Methode irgendwann austauschen,
				// Wenn Bukkit eine neue Vergleichbare Methode dazu rausbringt. Ansonsten scheint mir hier kein Fehler vorhanden zu sein.
				if (this.econ.has(p.getName(), preis * amount)) {
					pi.addItem(new ItemStack(itemid, amount));
					this.econ.withdrawPlayer(p.getName(), preis * amount);
					p.updateInventory();
				} else {
					cs.sendMessage("Du hast nicht genug "
							+ this.econ.currencyNameSingular() + "!");
					return true;
				}
			}
		}
		// Keine Ahnung wofür das ist...
		p.sendMessage("MultiPlugin");
		return false;
	}
}
 
Zuletzt bearbeitet:

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
Also erst ma danke für die antwort und das kommentieren meiner datei
find ich klasse und joa das ganz unten xD habs rausgenommen wusste auch nicht wozu das da ist,

nu fungtioniert der Buy befehl,

also :
wenn ich 1000 € habe
und ein stein kostet 50
das währen demnach 20 Steine
mehr sollte ich eigendlich nicht kriegen
jedoch wenn ich mit dem kaufpreis über mein budget hinausgehe kommt keine fehlermeldung das ich nciht genügend geld habe
sondern ich bekomme die anzahl steine die ich eingegeben habe und habe immer noch meine 1000 € auf dem konto ;(
wenn ich aber 19 eingebe zieht er mir 950 € ab
es ist nur wenn ich über das vorhandene budget hinausgehe

ich verzweifel langsam aber sicher, was mache ich falsch ?
achso und wenn ich /buy 1 20 eingebe dann seh ich den befehl in dem chatfenster was mich ein wenig stört

mich stört eher das mit dem geld.

falls du dafür ne lösung hast währe echt super und sry das ich dich wiedr belästige
 

BlueT3xoN

Minecrafter
Registriert
13 Februar 2013
Beiträge
15
Diamanten
0
//EDIT

also ich habs selber rausgefunden :D

habe die zeile
Code:
int preis = config.getInt("vipshop.preis." + itemid) * amount;

nur ein wenig runtergesetzt unter das } else {
und schon klappt alles :D

//EDIT
noch ein fehler entdeckt wenn ich mehr als 1 item kaufen wollte hat es komischerweise viel mehr gekostet ^^
z.b.
1 stein kostet 10
ich habe 100 = 10 steine dem nach
jedoch wenn ich /buy 1 10 eingegen habe kam nun ne fehlermeldung das ich nicht genug geld habe
die war einfach zu beheben
undzwar habe ich diese zeile
Code:
int preis = config.getInt("vipshop.preis." + itemid) * amount;
in
Code:
int preis = config.getInt("vipshop.preis." + itemid);

Geändert
so kostet tatsächlich alles soviel wie es in der config steht
und nun kann ich für 100 auch 10 steine kaufen und habe 0 € nach dem kauf
wenn ich aber 11 kaufen will kommt die meldung ich habe nicht genug geld :D

wunderbar
vielen dank an euch alle

ich melde mich falls ich noch probleme haben sollte
 
Zuletzt bearbeitet:
Oben