Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Minecraft
You last visited: Today at 10:56

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Bukkit Inventar problem

Discussion on Bukkit Inventar problem within the Minecraft forum part of the Other Online Games category.

Reply
 
Old   #1
 
.cryptex's Avatar
 
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
Bukkit Inventar problem

Hey Community,

Ich programmiere derzeit an einem Server, und versuche
auch ein Inventar zu öffnen, klappt auch. Aber wie mache ich
dass man wenn man nur in dem bestimmten Inventar auf das Item klickt,
was bekommt und ich im normalen player Inventar? Weil immer
wenn ich dieses Item ausziehen will, bekommt ich das zeug grade nochmal.

Kann mir einer Helfen?

mfg
.cryptex is offline  
Old 04/06/2014, 00:25   #2

 
Floppy012's Avatar
 
elite*gold: 36
Join Date: Jun 2013
Posts: 701
Received Thanks: 170
Bin grade nicht am PC. Du kannst versuchen die Namen der Inventare miteinander zu vergleichen.

Ich versuche es mal zu beschreiben
Code:
Inventory inv //<- Das ist dein Custom inventory

@EventHandler
public void onInventoryClick(InventoryClickEvent event){
Inventory eventInv = e.getInventroy();
if(eventInv.getName().equals(inv.getName())){
//Hier das machen Wenn die Inventare gleich sind.
}
}
so ungefähr sollte es aussehen. Wie gesagt, ich bin nicht am pc. Also codefehler bitte nicht beachten.

Mit freundlichen Grüßen

Floppy012
Floppy012 is offline  
Thanks
1 User
Old 04/06/2014, 00:29   #3
Administrator
 
lordsill's Avatar
 
elite*gold: 25736
Join Date: May 2011
Posts: 20,755
Received Thanks: 2,290
Erstelle mit der Bukkit API ein neues Inventar
Speichere den Spieler, der via Befehl das Inventar geöffnet hat in z.b. einer Liste.
Wenn nun ein Klick (InventoryClickEvent war das glaube ich) passiert, prüfe, ob der Spieler in der Liste ist
mit dem InventoryCloseEvent prüfst du, ob der Spieler in der Liste ist. Wenn er es ist, entfernst du ihn wieder.

Beim InventoryClickEvent kannst du ja schauen, auf welchen Slot geklickt wurde über das Event. Werde die SlotID aus und gebe dem Spieler ein Item (oder was du auch immer machen wolltest)
lordsill is offline  
Thanks
1 User
Old 04/06/2014, 00:33   #4
 
.cryptex's Avatar
 
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
Das von Floppy kapiere ich nocht nicht^^.

Das von Lordsill werde ich mal testen.
.cryptex is offline  
Old 04/06/2014, 00:39   #5

 
Floppy012's Avatar
 
elite*gold: 36
Join Date: Jun 2013
Posts: 701
Received Thanks: 170
Du kannst den inventaren Namen geben. Dann gibst du dem Inventar, das du selber erstellt hast, einen Namen. Dann kannst du im InventoryClickEvent das Inventar durch das das Event ausgelöst wurde abrufen. Dann kannst du von beiden Inventaren die Namen abrufen und sie vergleichen. Sind diese gleich, dann wird es wohl dein eigens erstelltes Inventar sein, falls nicht, nicht. LordSill's variante ist sicherer aber länger.

Mit freundlichen Grüßen

Floppy012
Floppy012 is offline  
Old 04/06/2014, 11:49   #6
 
.cryptex's Avatar
 
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
PHP Code:
@EventHandler
    
public void onJoinEvent(PlayerJoinEvent e) {
        
Player p e.getPlayer();
        
        
ItemStack pvptool = new ItemStack(Material.COMPASS);
        
ItemMeta pvptoolmeta pvptool.getItemMeta();
        
pvptoolmeta.setDisplayName("§cPvP-Tool");
        
pvptool.setItemMeta(pvptoolmeta);
        
        
p.getInventory().setItem(8pvptool);
        
p.sendMessage(prefix "Willkommen auf dem Server!");
    }
    
    @
EventHandler
    
public void onDropEvent(PlayerDropItemEvent e) {
        if(
e.getItemDrop().getItemStack().getItemMeta().getDisplayName().equalsIgnoreCase("§cPvP-Tool")) {
        
e.setCancelled(true);
        }
    }
    @
EventHandler
    
public void Inventory(InventoryClickEvent e) {
        
Player p = (Playere.getWhoClicked();
        
        if(
e.getInventory().getName().equalsIgnoreCase("§cPvP-Tool"));
        
        if(
e.getCurrentItem().getType() == Material.LEATHER_HELMET) {
               
e.getWhoClicked().closeInventory();
        }
    }
    
    @
EventHandler
    
public void OnInventoryClick(PlayerInteractEvent e) {
        
Player p e.getPlayer();
        
    if(
e.getItem().getItemMeta().getDisplayName().equalsIgnoreCase("§cPvP-Tool")) {
        
Inventory inv p.getServer().createInventory(null27"            PvP-Tool");
            
                
ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE,1,(short15);
                
ItemMeta glassmeta glass.getItemMeta();
                
glassmeta.setDisplayName(" ");
                
glass.setItemMeta(glassmeta);
                
                
inv.setItem(21glass);
                
inv.setItem(22glass);
                
inv.setItem(23glass);
                
            
p.getPlayer().openInventory(inv);
            }
        }
      

Ich glaube du meinst es dann so Floppy oder? Wenn ja dann habe ich ein Problem bei Inventory Click event.
.cryptex is offline  
Old 04/06/2014, 12:21   #7
Administrator
 
lordsill's Avatar
 
elite*gold: 25736
Join Date: May 2011
Posts: 20,755
Received Thanks: 2,290
Da sind nur einige Fehler drinne.
Hier hast du u.a. den Namen des Inventars festgelegt:
Code:
Inventory inv = p.getServer().createInventory(null, 27, "            PvP-Tool");
In diesem Fall: " PvP-Tool"

Nun prüfst du aber, ob der Spieler das Inventar "§cPvP-Tool" offen hat (welches zu keinem Zeitpunkt erstellt wurde)
Denn "§cPvP-Tool" ist der Anzeigename eines Items, aber nicht der des Inventars, weshalb du daher dort auch den Namen des Inventars nehmen solltest: (InventoryClickEvent)
Code:
if(e.getInventory().getName().equalsIgnoreCase("            PvP-Tool"))
{
//Der Spieler nutzt das "neue" Inventar
}
Innerhalb der {} setzt du dann den Code, der prüft, was angeklickt wurde im neuen Inventar (Welches aktuell 3x Glass enthält)
Dort kannst dann die SlotID prüfen und anschließend deine gewünschte Aktion ausführen, sofern der Spieler auf den richtigen Slot geklickt hat.
(verwende dazu am besten am ende der If Anweisung vom Inventar ein e.setCancelled(true); damit man sich das Item nicht aus dem Inventar klauen kann)
lordsill is offline  
Old 04/06/2014, 13:39   #8
 
.cryptex's Avatar
 
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
Habs nun gedändert, aber trotzdem wird es auch im inventar geschlossen...
.cryptex is offline  
Old 04/06/2014, 14:48   #9
Moderator


 
elite*gold: 558
Join Date: Feb 2010
Posts: 6,544
Received Thanks: 1,424
Code:
    @EventHandler
    public void Inventory(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        
        if(e.getInventory().getName().equalsIgnoreCase("§cPvP-Tool"));
        
        if(e.getCurrentItem().getType() == Material.LEATHER_HELMET) {
               e.getWhoClicked().closeInventory();
        }
    }
+
Code:
if(e.getInventory().getName().equalsIgnoreCase("            PvP-Tool"))
{
//Der Spieler nutzt das "neue" Inventar
}
=
Code:
    @EventHandler
    public void Inventory(InventoryClickEvent e) {
        Player p = (Player) e.getWhoClicked();
        
        if(e.getInventory().getName().equalsIgnoreCase("            PvP-Tool"))
        {
            if(e.getCurrentItem().getType() == Material.LEATHER_HELMET) {
                e.getWhoClicked().closeInventory();
            }
        }
    }
Edit:
Ich kann allerdings nicht nachvollziehen, wieso du auf einen Lederhelm reagierst, aber nur Glas im Inventar hast.
ComputerBaer is offline  
Old 04/06/2014, 17:47   #10
 
.cryptex's Avatar
 
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
Habe ein Teil entfernt^^ Der Text wollte ich nicht so lang machen.
.cryptex is offline  
Reply


Similar Threads Similar Threads
Bukkit Plugin, Virtuelles Inventar
04/13/2014 - Minecraft - 6 Replies
Hallo, ich bin gerade dabei ein kleines Plugin zu schreiben, dass bei einem Rechtsklick auf einen Block ein Inventar öffnet. Ich habe das Ganze in 2 Klassen aufgeteilt, übersichtshalber. In der ersten Klasse habe ich jedoch ein Problem, und zwar beim anzeigen des Menüs. Sieht jemand von euch den Fehler? Wäre echt klasse. package me.themrdomi.Spawn; import java.awt.Menu;
Problem mit Inventar
04/06/2013 - Metin2 Private Server - 4 Replies
Hey Leute, ich habe ein Problem mit meinem Inventar. Wenn ich etwas droppe dann ist es nicht im Inventar. Erst wenn ich auf Seite II und dann wieder auf I dann ist das Item da. Und wenn ich etwas droppe und dann Offline gehe (während das Item nicht Sichtbar im Inventar ist) dann ist der Charakter kaputt, also der lade Balken hängt am ende und es sind komische Zahlen bei der Maus. Screens:...
[Bukkit] Inventar speichern
03/31/2013 - Minecraft - 9 Replies
Hii, ich möchte bei meinem Plugin das Inventar speichern können und zu einem späteren Zeitpunkt wiederherstellen. Ich habe keine Ahnung wie ich das machen könnte. Freue mich auf Antworten
Problem mit dem Inventar
02/05/2013 - Flyff Private Server - 8 Replies
Hallo ich habe ein Problem, sobald ich mich einlogge und bei der Channel auswahl bin geht nichts mehr.Serverside bekomme ich ein Error weiß jedoch nicht was er beudeutet oder wodurch er hervorgerufen wird. 2013/ 2/ 3 23:26:03 SendPlayerList::Inventory : << IndexItem Milka, 2508 2013/ 2/ 3 23:26:03 Inventory =...



All times are GMT +2. The time now is 10:56.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.