Wie kann ich den Spielern einen Kopf aufsetzen lassen?
Ich bin gerade dabei mein eigenes Lobby System zu programmieren.
Ich habe schon die ganzen Items in der Hotbar wie zum beispiel das "Inventar" Item, das Item öffnet ein Inventar mit viel Auswahl wie zum beispiel "Köpfe".
Nun sollen die Spieler die Möglichkeit haben, dass wenn Sie auf einen Kopf klicken ihn dann auch automatisch aufgesetzt bekommen.
Kann mir jemand dazu einen Coden schreiben?
Oder mir vllt. helfen, wie man merkt programmiere ich nicht lange.
3 Antworten
Du kannst es mit dem PlayerInteractEvent versuchen. Dann musst du halt die Blockposition (auf die man klickt) abfragen und überprüfen ob es dieselbe ist die der Knopf hat den du willst.
Dann sowas in der art:
ItemStack is = new ItemStack(1, Material.Skull);
Dann:
ItemMeta im = is.getMeta();
Dann machst du den Skull zu einem Playerskull(Skull:3) ich weiß leider nicht aus dem Kopf wie das geht.
Dann setze den skullowner des Itemstacks zu was auch immer du willst.
Dann: is.setMeta(im);
Anschließend:
[EventName].getPlayer().getInventory().addItem([30, [Itemstackname wie auch immer er heißt]]);
Oder irgendwie so. Hab schon Monate nichts mehr mit Bukkit gemacht also bitte verurteilt mich nicht falls was falsch ist.
PS: Edit: hab die Frage nicht ganz gelesen zuerst. Ich dachte du willst auf einen Knopf drücken um den Kopf zu bekommen. Aber da müsstest du mit Inventarende arbeiten die du erstellt und so. Kannst dir ja Teile von meinem Code nehmen und zusammen mit dem von anderen zu deinem Plugin machen. Viel Glück und Spaß noch beim Programmieren weiterer Plugins!😀
-Robert
Geht meine ich mit dem command replaceitem. Schau dir mal die Syntax an. Mit dem richtigem Slot und dem richtigen gegebenen item kannst du den command auch irgendwie in so ein „Server Schild“ kriegen (schau am besten ob das auf ner Website geht).
So also eigentlich:
/replaceitem entity @p slot.armor.head skull 1 3 {SkullOwner:"xdrawngamerhd"}
Dank eines online Generators:
/give @p sign 1 0 {
BlockEntityTag: {
Text2: "{\"text\":\"Kopf\",\"color\":\"green\",\"bold\":true,\"italic\":true,\"underlined\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/replaceitem entity @p slot.armor.head skull 1 3 {SkullOwner:\\"xdrawngamerhd\\"}\"}}"
},
display: {
Name: "Custom Sign"
}
}
Whoops ich hab Knopf in der Frage gelesen... wie das so wie du meintest zu realisieren ist weiß ich nicht genau... der aufwändige weg: eine clock die testet ob In dem inventarslot ein item ist. Wenn ja dann alles gut, wenn nein, wird der replaceitem Befehl angewendet und danach wird da wieder der Kopf in den Slot getan... wie man das genau Programmiert weiß ich nicht.
[Die Github Repository herunterladen]
public enum PlayerHeadSrc {
PLAYER,
URL
}
public void setPlayerHead(Player p, String urlorplayer, PlayerHeadSrc headsrc, boolean helmetIsEmpty) {
if(p.getInventory().getHelmet() == null || !helmetIsEmpty) {
p.getInventory().setHelmet(headsrc == PlayerHeadSrc.PLAYER ? Skull.getPlayerSkull(urlorplayer) : (headsrc == PlayerHeadSrc.URL ? Skull.getCustomSkull(urlorplayer) : null));
}
}
WICHTIG: Du MUSST die Repository herunterladen und einbinden.
Bsp:
setPlayerHead(p, p.getN, PlayerHeadSrc.PLAYER, false);
p = Der Spieler,
PlayerHeadSrc.PLAYER = gibt an, dass es von einem Spieler sein soll
PlayerHeadSrc.URL = gibt an, dass es von einer URL sein soll
false = gibt an, dass es egal ist, ob der Kopfslot belegt ist
Ohne Repository:
public void setPlayerHead(Player p, String urlorplayer, boolean helmetIsEmpty) {
if(p.getInventory().getHelmet() == null || !helmetIsEmpty) {
ItemStack head = new ItemStack(Material.SKULL);
SkullMeta meta = (SkullMeta) head.getItemMeta();
meta.setOwner(urlorplayer);
head.setItemMeta(meta);
p.getInventory().setHelmet(head);
}
}
p = der Spieler
urlorplayer = die Textur
false = gibt an, dass es egal ist, ob der Kopfslot belegt ist