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

[BUKKIT]: InventarMenü!

MineForce

Schafhirte
Gesperrt
Registriert
17 Oktober 2012
Beiträge
122
Diamanten
0
Hallo Leute,

Ich habe ein Problem:

Ich möchte ein Shop-Plugin machen.
Es soll aber kein Schilder Shop oder Befehl Shop sein sondern ein Inventar Shop (Gui Shop).

Aber wenn ich iConomy/Vault einbaue und die Abfrage wenn er auf Item ... klickt und 20 Geld hat soll das passieren doch irgendwie passiert garnix es wird nichtmal überprüft ob er das Geld hat D:

Weiß jemand ob das überhaupt funktioniert: InventarGui + Economy?

Hoffe mir kann jemand schnell helfen.
 

MineForce

Schafhirte
Gesperrt
Registriert
17 Oktober 2012
Beiträge
122
Diamanten
0
Code:
			if(event.getCurrentItem().getType() == Material.BOOK_AND_QUILL && this.econ.has(p.getName(), 100)) {
	    			this.econ.withdrawPlayer(p.getName(), 100);
	    			p.sendMessage("§aDu hast 9000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
	    			Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.enchant");
					event.getView().close();
	    		}else{
	    			p.sendMessage("§cDu hast nicht genug §6" + this.econ.currencyNameSingular() + "§c!");
	    		
	          }

Normaler Weise müsste es funktionieren!
 

MineForce

Schafhirte
Gesperrt
Registriert
17 Oktober 2012
Beiträge
122
Diamanten
0
Code:
package Shop;

import me.FranTv.DiscoverShop.MainClass;
import net.milkbowl.vault.economy.Economy;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;

public class ShopCommandListener implements Listener {
    private Economy econ;
	private MainClass plugin;
	
	public ShopCommandListener(MainClass plugin) {
		this.plugin = plugin;
	}


	@EventHandler
	public void Inventory(InventoryClickEvent event) {
		Player p = (Player) event.getWhoClicked();
		ConsoleCommandSender c = this.plugin.getServer().getConsoleSender();
		
		if(event.getInventory().getName().equalsIgnoreCase("§aDiscoverCraft CommandShop:")) {

			//Kit 1
			if(event.getCurrentItem().getType() == Material.BOOK_AND_QUILL && this.econ.has(p.getName(), 100)) {
	    			this.econ.withdrawPlayer(p.getName(), 100);
	    			p.sendMessage("§aDu hast 9000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
	    			Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.enchant");
					event.getView().close();
	    		}else{
	    			p.sendMessage("§cDu hast nicht genug §6" + this.econ.currencyNameSingular() + "§c!");
	    		
	          }
			
			}else if(event.getCurrentItem().getType() == Material.FEATHER) {
	    		if (this.econ.has(p.getName(), 12000)){
	    			this.econ.withdrawPlayer(p.getName(), 12000);
	    			p.sendMessage("§aDu hast 12000 §6" + this.econ.currencyNameSingular() + "§a bezahlt!");
	    			Bukkit.dispatchCommand(c, "manuaddp" + p.getName() + "essentials.fly");
					event.getView().close();
	    		}else{
	    			p.sendMessage("§cDu hast nicht genug Geld!");
			
			
		}
			}	}
	

	
	}

kb auf Pastebin
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Hast Du Dir die Seite von Vault angeschaut? Da fehlt was oben in der Klasse:
Code:
public static Economy economy = null;
private boolean setupEconomy()
    {
        RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
        if (economyProvider != null) {
            economy = economyProvider.getProvider();
        }

        return (economy != null);
    }
Natürlich muss die Methode im Konstruktor zuerst aufgerufen werden.
Die Klasse bei Dir wurde nicht einmal initialisiert und das ganze mit Vault "verbunden". Wie soll das denn dann funktionieren?
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Trotzdem ist "econ" in Deiner Klasse nicht initialisiert. Schreibe in den Konstruktor Deiner Klasse ShopCommandListener:

Code:
econ = plugin.econ;
-
Oder benutze überall wo Du mit der Klasse ShopCommandListener auf Economy zugreifst, statt "this.econ.methode()" "plugin.econ.methode()".
 

MineForce

Schafhirte
Gesperrt
Registriert
17 Oktober 2012
Beiträge
122
Diamanten
0
was ist getter und sichtbarkeit?

Neuer Code:
Code:
package me.FranTv.DiscoverShop;

import java.util.ArrayList;

import net.milkbowl.vault.economy.Economy;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class Shop implements CommandExecutor, Listener {
	private Inventory inv = null;

	@Override
	public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) {
		
		Player p = (Player) cs;
		
		if(cmd.getName().equalsIgnoreCase("blockshop")) {
			inv = p.getPlayer().getServer().createInventory(null, 9, "§aDiscoverCraft BlockShop:");
			
			ItemStack istack = new ItemStack(Material.STONE);
			ItemMeta istackMeta = istack.getItemMeta();
			istackMeta.setDisplayName("§aStein");
			ArrayList<String> lore = new ArrayList<>();
			lore.add("§6Preis: 35");
			istackMeta.setLore(lore);
			istack.setItemMeta(istackMeta);
			
			inv.setItem(0, istack);
			
			p.getPlayer().openInventory(inv);
		}
		
		return false;
		
	}
	@EventHandler
	public void Inventory(InventoryClickEvent event) {
		Player pl = (Player) event.getWhoClicked();
		
		ItemStack Stone = new ItemStack(Material.STONE, 10);
		
		if(event.getInventory().getName().equalsIgnoreCase("§aDiscoverCraft BlockShop:")) {

			
			if(event.getCurrentItem().getType() == Material.STONE) {
	    	 if (MainClass.econ.has(pl.getName(), 35)){
	    		 MainClass.econ.withdrawPlayer(pl.getName(), 35);
    			pl.sendMessage("§aDu hast 35 §6" + MainClass.econ.currencyNameSingular() + "§a bezahlt!");
				pl.getInventory().addItem(new ItemStack(Stone));
				event.getView().close();
		}}}

}}
Code:
[16:45:35 ERROR]: Could not pass event InventoryClickEvent to DiscoverZone v1.2.
0
org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:320) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:481) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:466) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.PlayerConnection.a(PlayerConnection.java
:1351) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.a(SourceFile:32)
 [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.PacketPlayInWindowClick.handle(SourceFil
e:10) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:146
) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.ServerConnection.c(SourceFile:134) [craf
tbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.u(MinecraftServer.java:6
55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.DedicatedServer.u(DedicatedServer.java:2
50) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.t(MinecraftServer.java:5
45) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java
:457) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:6
17) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
Caused by: java.lang.NullPointerException
        at me.FranTv.DiscoverShop.Shop.Inventory(Shop.java:56) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0
_45]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0
_45]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1
.7.0_45]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:318) ~[craftbukkit.jar:git-Bukkit-1.7.2-R0.2-3-g530fcb7-b2978jnks]
        ... 13 more
 
G

games6471

Guest
Sichtbarkeit:

  • private
  • package (besitzt kein Schlüsselwort)
  • protected
  • public

Getter: Es erlaubt dem Entwickler die Abfragen anzupassen. z.B. das Arbeiten mit locks, Read-only Objekten oder Ähnlichem

private int variable;

public int getVariable {
return variable;
}

Achso und deine Variable econ ist null.
 

MineForce

Schafhirte
Gesperrt
Registriert
17 Oktober 2012
Beiträge
122
Diamanten
0
Hab in der MainClass ganz folgendes:

Code:
public static Economy econ;
Economy Methode:
Code:
    private void setupEconomy()
    {
      RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
      if (economyProvider != null)
      {
        economy = (Economy)economyProvider.getProvider();
      }
      else
      {
        getServer().getConsoleSender().sendMessage(ChatColor.RED + "Can not find an economy plugin!");
        getServer().getConsoleSender().sendMessage(ChatColor.RED + "Deactivating shop plugin!");
        getPluginLoader().disablePlugin(this);
      }
    }

Kann mir einer sagen was an der Zeile 56 in der neuen Klasse (Neuer Code oben) falsch ist?
Ich versteh es nicht ich bin mit Economy noch nicht so weit hab davon kaum Ahnung.
 

MiCrJonas

Threadripper
Registriert
29 Oktober 2012
Beiträge
1.064
Diamanten
0
Benutze statt "MainClass.econ..." "plugin.econ...", deklariere MainClass in der Klasse "Shop" als "plugin" und initialisiere dies dann im Konstruktor:
Code:
private MainClass plugin;
public Shop(MainClass plugin) {
this.plugin = plugin;
}
-
Außerdem: Warum benutzt Du in deiner Shop Klasse @Override, obwohl Du gar keine Klasse erweiterst? Bzw. von welcher Klasse willst Du die Methode "onCommand()" überschreiben?
 
Zuletzt bearbeitet:
Oben