|
You last visited: Today at 10:56
Advertisement
Bukkit Inventar problem
Discussion on Bukkit Inventar problem within the Minecraft forum part of the Other Online Games category.
04/06/2014, 00:16
|
#1
|
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
|
|
|
04/06/2014, 00:25
|
#2
|
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
|
|
|
04/06/2014, 00:29
|
#3
|
Administrator
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)
|
|
|
04/06/2014, 00:33
|
#4
|
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.
|
|
|
04/06/2014, 00:39
|
#5
|
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
|
|
|
04/06/2014, 11:49
|
#6
|
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(8, pvptool); 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 = (Player) e.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(null, 27, " PvP-Tool"); ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE,1,(short) 15); ItemMeta glassmeta = glass.getItemMeta(); glassmeta.setDisplayName(" "); glass.setItemMeta(glassmeta); inv.setItem(21, glass); inv.setItem(22, glass); inv.setItem(23, glass); p.getPlayer().openInventory(inv); } } }
Ich glaube du meinst es dann so Floppy oder? Wenn ja dann habe ich ein Problem bei Inventory Click event.
|
|
|
04/06/2014, 12:21
|
#7
|
Administrator
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)
|
|
|
04/06/2014, 13:39
|
#8
|
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
|
Habs nun gedändert, aber trotzdem wird es auch im inventar geschlossen...
|
|
|
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.
|
|
|
04/06/2014, 17:47
|
#10
|
elite*gold: 106
Join Date: Dec 2013
Posts: 435
Received Thanks: 23
|
Habe ein Teil entfernt^^ Der Text wollte ich nicht so lang machen.
|
|
|
|
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.
|
|