Wie kann ich den Spielern einen Kopf aufsetzen lassen?

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

Woher ich das weiß:eigene Erfahrung

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).

MaxKrull  11.07.2018, 21:58

So also eigentlich:
/replaceitem entity @p slot.armor.head skull 1 3 {SkullOwner:"xdrawngamerhd"}

0
MaxKrull  11.07.2018, 22:00

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"
    }
}

0
MaxKrull  11.07.2018, 22:05

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.

0

[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

EinBenutzer672  03.08.2020, 12:17

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

0