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

"Grafisches Interface"

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Ich programmiere zurzeit an BattleRoyale (http://minecraft-server.eu/board/showthread.php?13630-Konzept-BattleRoyal-%96-Kit-PVP-Minispiel) und habe auch alle Kits programmiert!

Ich möchte aber wenn man /klasse eingibt dass sich ein fenster öffnet, wo Items drinliegen welche man anklicken kann und somit die Kits bekommt, weiß jemand wie das geht, habe auf Google nichts gefunden!

Könnte mir jemand einen Code schreiben?

Wer nicht weiß was ich meine (auf dem Bild habe ich /kit eingegeben und das hat sich geöffnet!):


Geht dies vielleicht mit einer virtual chest? Aber wie kann man dann interagieren?
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Habe die Klasse von dem Link den @games6471 erstellt (die iconMenu.class)

Ich möchte jedoch das beim Klicken auf die icons im Menü ein Befehl ausgeführt wird, geht das irgendwie?

Oder das eben ein Item für je eine Klasse steht und eben z.B eine ghastträne für den ghost, bei zeigen auf die ghastträne werden die lores angezeigt welche die infos zur klasse darstellen und bei klick wird im falle vom ghost dies ausgeführt:

Code:
ItemStack Skalpell = new ItemStack(Material.STICK);
	    Skalpell.addUnsafeEnchantment( Enchantment.DAMAGE_ALL , 2);
	    ItemMeta SkalpellMeta = Skalpell.getItemMeta();
	    SkalpellMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Skalpell");
	    Skalpell.setItemMeta(SkalpellMeta);
        p.getInventory().addItem(new ItemStack[] { Skalpell });
	    
	    
	    
	    
		
	    p.getInventory().addItem(new ItemStack(364, 5));
		
		ItemStack CP = new ItemStack(Material.LEATHER_CHESTPLATE);
	    ItemMeta CPMeta = CP.getItemMeta();
	    CPMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Arztkittel");
	    CP.setItemMeta(CPMeta);
	    p.getInventory().setChestplate(CP);
        
        
		ItemStack Boots = new ItemStack(Material.LEATHER_BOOTS);
	    ItemMeta BootsMeta = Boots.getItemMeta();
	    BootsMeta.setDisplayName(ChatColor.LIGHT_PURPLE + "Arzt-Schlappen");
	    Boots.setItemMeta(BootsMeta);
	    p.getInventory().setBoots(Boots);
		
		ItemStack item3 = new ItemStack(373, 2, (short) 8193);
	    ItemMeta item3Meta = item3.getItemMeta();
	    item3Meta.setDisplayName(ChatColor.LIGHT_PURPLE + "Blutspende");
	    item3.setItemMeta(item3Meta);
        p.getInventory().addItem(new ItemStack[] { item3 });
		
		
		
		p.setDisplayName(ChatColor.AQUA+"[Doktor] "+ChatColor.RESET + p.getName());
 
Zuletzt bearbeitet:
G

games6471

Guest
Habe die Klasse von dem Link den @games6471 erstellt (die iconMenu.class)

Ich möchte jedoch das beim Klicken auf die icons im Menü ein Befehl ausgeführt wird, geht das irgendwie?

Ich glaube das hättest du auch selber rausfinden können.

Code:
            @Override
            public void onOptionClick(IconMenu.OptionClickEvent event) {
                event.getPlayer().sendMessage("You have chosen " + event.getName());
                event.setWillClose(true);
            }
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Also ich möchte in dem menü eben verschiedene Items für jede Klasse eins!

Wenn man auf die items klickt bekommt man die items, die für den Ghost seht ihr hier:

Code:
//Schwert mit anderem namen³
	    ItemStack Schwert = new ItemStack(Material.STONE_SWORD);
	    ItemMeta SchwertMeta = Schwert.getItemMeta();
	    SchwertMeta.setDisplayName(ChatColor.DARK_GRAY + "Geisterschwert");
	    Schwert.setItemMeta(SchwertMeta);
        p.getInventory().addItem(new ItemStack[] { Schwert });
        
        
	    
		p.getInventory().addItem(new ItemStack(364, 5));
		
	
		//Zucker
	
		p.getInventory().addItem(new ItemStack(353, 10));
		
		
	
		//GLOWSTONE_DUST
		p.getInventory().addItem(new ItemStack(348, 5));
		
		
		
		p.setDisplayName(ChatColor.DARK_GRAY+"[Ghost] "+ChatColor.RESET + p.getName());

So nun möchte ich das wenn man auf eine Ghastträne klickt diese Items bekommt, wie stell ich das an?

Und ich möchte das Menü mit dem Befehl /klasse öffnen, dieser wird in der hauptklasse definiert
 
G

games6471

Guest
Wie diese Menü geöffnet wird müsstest du bestimmt selber hinbekommen oder?

Das andere ist auch nicht besonders schwer, wenn man sich einmal die verwendete Klasse genau anschaut. Ich meinte auch nicht, dass diese Code 1:1 nehmen solltest sondern eigentlich mit diesem eine Idee bekommst wie man soetwas aufbaut, aber nun gut. Ich werde es trotzdem erklären.

Code:
.setOption(3, new ItemStack(Material.APPLE, 1), "Food", "The food is delicious")

Mithilfe von .setOption() kannst du festlegen welche Items in dem Fake-Inventar abgebildet werden. Die Methode verlangt zusätzlich in den Parametern einen String (im Beispiel Food), welche die Variable für das Item deklariert.

Sobald der jeweilige Spieler auf ein Item klickt wird dies ausgeführt:

Code:
            @Override
            public void onOptionClick(IconMenu.OptionClickEvent event) {

}

Dort kannst du einfach mithilfe von event.getName() den Variable-Namen des geklickten Items abrufen und darauf deine Methoden oder Statements ausführen.
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Ich hab jetzt in die herauskopiert Klasse "IconMenu" das geschrieben und komme nicht weiter:
Code:
    IconMenu menu = new IconMenu("Klassen:", 9, new IconMenu.OptionClickEventHandler() {
        @Override
        public void onOptionClick(IconMenu.OptionClickEvent event) {
        	
        	
        	
            event.setWillClose(true);
        }
    }, plugin)
    .setOption(0, new ItemStack(Material.STICK), "Doktor", "Items:", "- 2x Trank der Regeneration", "- 1x Stick (verzaubert auf Schärfe 2)", "- Lederschuhe", "- Lederharnisch", "- 5 Steaks")
    .setOption(1, new ItemStack(Material.GHAST_TEAR, 1), "Ghost", "beschreibung");
   
}

Was muss ich machen damit einem beim Klick nun die Items gegeben werden?
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Ich hab jetzt in die IconMenu Klasse geschrieben:

Code:
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = ((Player) sender).getPlayer();
            IconMenu menu = new IconMenu("Menu", 27, new IconMenu.OptionClickEventHandler() {
 
                @Override
                public void onOptionClick(IconMenu.OptionClickEvent event) {

                    event.setWillClose(true);
                }
            }, [COLOR="#FF0000"]IconMenu.plugin[/COLOR]);
            menu.setOption(3, new ItemStack(Material.APPLE, 1), "Food", "The food is delicious");
            menu.setOption(4, new ItemStack(Material.IRON_SWORD, 1), "Weapon", "Weapons are for awesome people");
            menu.setOption(5, new ItemStack(Material.EMERALD, 1), "Money", "Money brings happiness");
            menu.open(p);
            return true;
        }
        return false;
    }

Das rote wird unerringelt, was muss ich noch machen?
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Ja ist in der Main-Klasse, habe jetzt das doch "An internal Error occured while performing this command":

Code:
	public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    		
    		
    		Player p = (Player)sender;
    		String error = this.getConfig().getString("Config.messages.Klassen_error");
    		String mainPath = "Users.";
    		String kit = ".kit";
    		
    		if(cmd.getName().equalsIgnoreCase("klasse")){
    			IconMenu menu = new IconMenu("Menu", 27, new IconMenu.OptionClickEventHandler() {
    				 
                    @Override
                    public void onOptionClick(IconMenu.OptionClickEvent event) {

                        event.setWillClose(true);
                    }
                }, this.plugin);
                menu.setOption(3, new ItemStack(Material.SUGAR, 1), "Doktor", "DoktorInfo");
                menu.setOption(3, new ItemStack(Material.GHAST_TEAR, 1), "Ghost", "GhostInfo");
                menu.setOption(3, new ItemStack(Material.TNT, 1), "Pyro", "PyroInfo");
                menu.setOption(3, new ItemStack(Material.FIRE, 1), "Rambo", "RamboInfo");
                menu.setOption(3, new ItemStack(Material.STONE_SWORD, 1), "Scout", "ScoutInfo");
                menu.setOption(3, new ItemStack(Material.BOW, 1), "Sniper", "SniperInfo");
                menu.setOption(3, new ItemStack(Material.DIAMOND_SWORD, 1), "Tank", "TankInfo");
                menu.setOption(3, new ItemStack(Material.STICK, 1), "Zauberer", "ZaubererInfo");
                
                menu.open(p);
                return true;
    			
    			
    			
    			
    			
    		}
 
G

games6471

Guest
Das man alles wieder hinterfragen muss. "An internal Error occured while performing this command" Schick uns mal den passenden Fehler in der Konsole oder Server.log. Es wäre viel schneller damit den Fehler zu finden.
 

Kombustor

Redstoneengineer
Registriert
1 Februar 2013
Beiträge
39
Diamanten
0
Biddö :)
Code:
2013-04-08 19:19:39 [INFO] KombustorLP issued server command: /klasse
2013-04-08 19:19:39 [SEVERE] null
org.bukkit.command.CommandException: Unhandled exception executing command 'klasse' in plugin BattleRoyale v0.2.3.9
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46)
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:188)
	at org.bukkit.craftbukkit.v1_5_R2.CraftServer.dispatchCommand(CraftServer.java:523)
	at net.minecraft.server.v1_5_R2.PlayerConnection.handleCommand(PlayerConnection.java:966)
	at net.minecraft.server.v1_5_R2.PlayerConnection.chat(PlayerConnection.java:884)
	at net.minecraft.server.v1_5_R2.PlayerConnection.a(PlayerConnection.java:841)
	at net.minecraft.server.v1_5_R2.Packet3Chat.handle(Packet3Chat.java:44)
	at net.minecraft.server.v1_5_R2.NetworkManager.b(NetworkManager.java:292)
	at net.minecraft.server.v1_5_R2.PlayerConnection.d(PlayerConnection.java:110)
	at net.minecraft.server.v1_5_R2.ServerConnection.b(SourceFile:35)
	at net.minecraft.server.v1_5_R2.DedicatedServerConnection.b(SourceFile:30)
	at net.minecraft.server.v1_5_R2.MinecraftServer.r(MinecraftServer.java:578)
	at net.minecraft.server.v1_5_R2.DedicatedServer.r(DedicatedServer.java:225)
	at net.minecraft.server.v1_5_R2.MinecraftServer.q(MinecraftServer.java:474)
	at net.minecraft.server.v1_5_R2.MinecraftServer.run(MinecraftServer.java:407)
	at net.minecraft.server.v1_5_R2.ThreadServerApplication.run(SourceFile:573)
Caused by: java.lang.NullPointerException
	at de.diacrafting.BattleRoyale.IconMenu.<init>(IconMenu.java:42)
	at de.diacrafting.BattleRoyale.BattleRoyale.onCommand(BattleRoyale.java:78)
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
	... 15 more
 
Oben