Archiv verlassen und diese Seite im Standarddesign anzeigen : org.bukkit.inventory.itemstack cast to net.minecraft.server.itemstack
Johannes_C25
03.04.2012, 08:10
Hallo, ich hab ein Problem. Ich habe mir eine Klasse extends IInventory gemacht, mit der ich ein Inventar haben will, in welches die Sachen eines Spielers reinkommen, wenn er gestorben ist.
Ich habe auch schon ein void, welchen mehrere Items hinzufügt. Nun ist aber das Problem, dass das void ein net.minecraft.server.itemstack benötigt, ich aber ein org.bukkit.inventory.ItemStack bekomme...
(groß und kleinschreibung in den Pfäden bitte ignorieren...)
Ich habs mit
ItemStack[] DropedItems = event.getDrops().toArray(new ItemStack[event.getDrops().size()]);
net.minecraft.itemstack[] Drops = (net.minecraft.itemstack[])DropedItems;
und mit
ItemStack[] DropedItems = event.getDrops().toArray(new ItemStack[event.getDrops().size()]);
net.minecraft.server.ItemStack[] Drops = new net.minecraft.server.ItemStack[DropedItems.length];
for(int i = 0; i<DropedItems.length; i++) {
ItemStack dIs = DropedItems[i];
net.minecraft.server.ItemStack addIs = (net.minecraft.server.ItemStack)dIs;
Drops[i] = addIs;
}
probiert, beide male ein Error (in NetBeans schon...):
inconvertible Types
required: net.minecraft.server.ItemStack
found: org.bukkit.inventory.ItemStack
(Alt-Enter shows hints)
Verstehe ich aber irgendwie nicht sio ganz...ich caste es doch nach net.minecraft.server.ItemStack...
Hoffe, jemand kann mir helfen.
Mit Freundlichen Grüßen
Johannes C25
Edit: (04.04.2012 um 18:11)
Weiß niemand, wie ich das machen kann???
spoothie
13.04.2012, 01:09
Verstehe ich aber irgendwie nicht sio ganz...ich caste es doch nach net.minecraft.server.ItemStack...
Du kannst einen org.bukkit.inventory.ItemStack nun mal nicht einfach so in einen net.minecraft.server.ItemStack casten.
Wozu brauchst du den nms-ItemStack denn umbedingt?
(Btw: Hier siehst du die Einschränkungen der Bukkit API (und damit wohl einen Kritikpunkt am Wrapperdasein Craftbukkits). Um an erweiterte Funktionen zu kommen, die noch nicht in der API enthalten sind, muss man sich mit dem (obfuscateten) Minecraft Server Code herumschlagen. ;) )
Johannes_C25
14.04.2012, 19:07
spoothie
Danke erst einmal für deine Antwort. Ich habe eine Klasse mit extends IInventory. Ich möchte nun, dass wenn ein Spieler stirbt, seine gesamten Items in dieses Inventar reingepackt werden. Aber ich bekomme dafür halt von bukkit ein org.bukkit.inventory.ItemStack, benötige aber für die Klasse (da IInventory von Minecraft ist) ein net.minecraft.server.ItemStack...
Johannes_C25
23.04.2012, 16:03
Hat nicht irgendjemand eine Idee???
spoothie
23.04.2012, 18:08
Johannes_C25
Muss es denn unbedingt ein net.minecraft.server.IInventory sein? Könntest du nicht einfach ein org.bukkit.inventory.Inventory verwenden? Was möchtest du denn genau machen?
Johannes_C25
23.04.2012, 18:24
Wenn der Spieler stirbt, sollen die Gegenstände die er hatte in einem Inventar gespeichert werden. An der stelle, an der er gestorben ist, wird ein Schild erstellt. Wenn der Spieler jetzt rechtsklick auf das Schild macht, sieht es aus, wie bei einer Truhe, nur dass die anzahl der Plätze anders sein kann (dies kommt auf den Rang der Benutzer an...)
spoothie
24.04.2012, 19:02
Johannes_C25
AFAIK kann man mittels der Methode getServer().createInventory() ein neues Inventar erschaffen. Du könntest dann z.B. eine Hashmap anlegen und für jeden Spieler ein Inventar schaffen, in welches du die Items nach dem Tod transferierst.
Johannes_C25
24.04.2012, 19:53
spoothie
Dazu dann zwei Fragen:
1. Was soll ich bei InventoryHolder angeben
2. Wie kann der Spieler dann das Inventar öffnen?
(Nochmal die Erklärung: Wenn der Spieler stirbt, sollen alle seine Sachen in ein Inventar getan werden. An seinem Todespunkt steht ein Schild, über welches der Spieler auf das Inventar zugreifen kann. Sollte ein Spieler zweimal nacheinander sterben, kommen die Gegenstände auch in zwei verschiedene Inventare. Wenn der Spieler dann rechtsklick auf das Schild macht, öffnet er das Inventar, wie es auch aussieht, wenn man eine Truhe öffnet...
dies hatte ich bisher immer so:
CraftPlayer cplayer = (CraftPlayer)player;
cplayer.getHandle().openContainer(inventory);
Nur leider benötigt das openContainer ein IInventory...(für dieses habe ich eine Klasse extends IInventory, anders wäre es natürlich schöner...)
Würde mich darüber freuen, wenn du mir sagst, wie du das genau gemeint hast...
Mit Freundlichen Grüßen
Johannes_C25
spoothie
24.04.2012, 20:32
1. Siehe hier: http://jd.bukkit.org/apidocs/org/bukkit/inventory/InventoryHolder.html
2. Mit der Methode org.bukkit.entity.Player.openInventory(Inventory)
Sollte ein Spieler zweimal nacheinander sterben, kommen die Gegenstände auch in zwei verschiedene Inventare.
Dann haut das mit meinen Vorschlägen vermutlich nicht mehr hin und du solltest versuchen, die Inventare irgendwie an die Schilder anstatt an die Spieler zu binden.
Johannes_C25
24.04.2012, 20:49
spoothie
Zu 1: das erste kapier ich nicht... ich hab mir die Seite durchgelesen, aber da stand nur was davon, was implementiert ist, von was die Klasse implementiert wird, und wie man durch die Methode das Inventar bekommt. Aber was soll ich dann da angeben?
Also was soll ich an der Stelle übergeben...? Bin da gerade etwas ratlos...
Zu 2: Danke!
Und wie ich das an das Schild gebunden bekomme, bekomm ich selber hin...
spoothie
24.04.2012, 23:03
Johannes_C25
Soweit ich das verstanden habe, ist das der Besitzer des Inventars. Da das Inventar ja nicht einem bestimmten Spieler oder einer Kiste "gehören" soll, solltest du denke ich einfach nur null als Argument übergeben. So hätte ich es jetzt gemacht, probiers einfach mal aus. ;)
Johannes_C25
25.04.2012, 11:59
spoothie
Danke! Habe das ganze mal ausprobiert:
Inventory bInv;
public void onEnable() {
bInv = getServer().createInventory(null, 11, "Test Inventar");
}
public boolean onCommand(/*...*/) {
Player p = (Player)sender;
p.openInventory(bInv);
}
nur mal zum Testen...
Wenn cih jetzt den Befehl eingebe kommt in der Konsole:
2012-04-25 12:58:49 [SEVERE] null
org.bukkit.command.CommandException: Unhandled exception executing command 'testui' in plugin Test v1.0
at org.bukkit.command.PluginCommand.execute(PluginCom mand.java:42)
at org.bukkit.command.SimpleCommandMap.dispatch(Simpl eCommandMap.java:166)
at org.bukkit.craftbukkit.CraftServer.dispatchCommand (CraftServer.java:473)
at net.minecraft.server.NetServerHandler.handleComman d(NetServerHandler.java:821)
at net.minecraft.server.NetServerHandler.chat(NetServ erHandler.java:781)
at net.minecraft.server.NetServerHandler.a(NetServerH andler.java:764)
at net.minecraft.server.Packet3Chat.handle(Packet3Cha t.java:33)
at net.minecraft.server.NetworkManager.b(NetworkManag er.java:229)
at net.minecraft.server.NetServerHandler.a(NetServerH andler.java:113)
at net.minecraft.server.NetworkListenThread.a(Network ListenThread.java:78)
at net.minecraft.server.MinecraftServer.w(MinecraftSe rver.java:554)
at net.minecraft.server.MinecraftServer.run(Minecraft Server.java:452)
at net.minecraft.server.ThreadServerApplication.run(S ourceFile:490)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
at de.Johannes.Test.Test.onCommand(Test.java:47)
at org.bukkit.command.PluginCommand.execute(PluginCom mand.java:40)
... 12 more
Edit: (25.04.2012 um 15:43)
spoothie
Ok, vergiss es. Ich hatte ein anderes Plugin mit einem Änlichen Befehl und dieses Plugin hat darauf reagiert. Funktioniert jetzt alles wieder gut. Aber weißt du, wie man z.b. ein Inventar mit 10 Plätzen machen kann?(Konsole sagt, die Zahl muss mit 9 Multiplizierbar sein...)
spoothie
26.04.2012, 20:44
Aber weißt du, wie man z.b. ein Inventar mit 10 Plätzen machen kann?(Konsole sagt, die Zahl muss mit 9 Multiplizierbar sein...)
Dann ist es wohl schlicht und ergreifend nicht möglich. ;)
Johannes_C25
27.04.2012, 11:52
spoothie
Ok, schade...
Trotzdem danke, für deine ganzen Antworten!
Powered by vBulletin® Version 4.1.4 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.