Item Name ändern

07/24/2014 06:44 ຖēxiຊ#1
Heejho Epvpler!

Ich hab da nen kleines Problem.

Ich wollte das ein bestimmtes Item einen Dauerhaften anderen namen trägt den jeder so sieht wie es in der config.yml steht.
Das item hat jeder Spieler im Inventar.

habe das ganze so probiert:

Code:
if ((itemonjoin) && (!e.getPlayer().getInventory().contains(item)));
	ItemStack clock = new ItemStack(item);
	ItemMeta meta = clock.getItemMeta();
	meta.setDisplayName(itemname);
	Object lores = new ArrayList();
	((List)lores).add(itemlore);
	meta.setLore((List)lores);
	clock.setItemMeta(meta);
	e.getPlayer().getInventory().addItem(new ItemStack[] { clock });
Es wird InGame aber noch genau so angezeigt wie es Normal ist.
Restliche vom Plugin funktioniert aber!

Könntet ihr mir helfen das so hinzubekommen das der Name dauerhaft geändert bleibt bis man es anders in die config.yml einträgt und das man das Item nicht im Inventar bewegen kann und das man es bei tot nicht Verliert.
Ich bin noch ziemlich neu am programmieren ich hoffe ihr könnt mir dort weiter helfen.

Liebe grüße Nexiz.
07/24/2014 10:24 ComputerBaer#2
Ich habe jetzt nicht die Lösung für dein Problem, aber einige Fragen zu deinem Quellcode. Wenn das Problem sich dadurch lösen lässt, ist das Zufall.

Funktionen:

Eher optisch:

Zum eigentlichen Problem will mir grade nichts weiter einfallen, also gibts jetzt noch ein paar Fragen:
4. Ist der EventListener, in dem sich dieser Code befindet, bei Bukkit registriert? Und wird aufgerufen?
5. Gibt es irgendwelche Fehlermeldungen?
6. Verstehe ich das richtig, du willst das ein Item serverweit immer den selben geänderten Namen trägt? Dann brauchst du nicht nur Code zum erstmaligen geben des Items, sondern auch welchen um die vorhandenen Items zu aktualisieren.

Quote:
Originally Posted by ຖēxiຊ View Post
das man das Item nicht im Inventar bewegen kann
Dazu solltest du dir mal die InventarEvents ansehen, InventoryClickEvent sollte dir da helfen können.

Quote:
Originally Posted by ຖēxiຊ View Post
das man es bei tot nicht Verliert
Da musst du selber etwas basteln. Ich würde das Item beim Tod löschen, bevor es auf den Boden geworfen wird, und es dem Spieler dann beim Respawn wieder ins Inventar legen.
07/24/2014 12:58 ຖēxiຊ#3
Okej ich Versuch dies alles mal umzusetzen, Danke. :)
Weitere ideen gern gesehen! :p

€:

Hier der Error in der Konsole:
[Only registered and activated users can see links. Click Here To Register...]

6.:Ich hätte das gerne so, dass wenn ich in der Config den Namen eingebe und das dass Item dann jeder so im Inventar hat wie der Name in der Config steht.

Beispiel:

config item name derzeit: Test
User loggte sich ein bekommt das Item mit den Namen "Test".
Ich ändere den namen in der config zu "Test2" und User bekommen das Item beim Relogen mit den Namen "Test2"

Derzeit kann ich den Namen vom Item aber garnicht ändern außer ich ändere es im sorce.
z.B.:
Code:
//Derzeitig das er in die Config eingreifen soll und dort den Name dann einfügt dies Funktioniert aber nicht
meta.setDisplayName(itemname);

//andere methode wie es Funktionieren würde nur das ich es dann nicht in der Config ändern kann
meta.setDisplayName("itemname");

Hier hab ich die config eingestellt:
07/24/2014 14:31 ComputerBaer#4
Der Error besagt, dass du versuchst einen ungültigen EventHandler zu registrieren. Dabei geht es um "public static void Main.Main.UseClock(org.bukkit.entity.Player)" und das ist eindeutig kein Event. Also entweder die Annotation wegnehmen oder ein gültiges Event draus machen.

Dann solltest du überprüfen ob und was du aus deiner Konfigurationsdatei ausliest. Wenn da jetzt z.B. null raus kommt, kann ich mir sehr gut vorstellen das es den Standardnamen bekommt. Eventuell spinnt auch deine Methode "colorize" rum, das ist der einzige Unterscheid zwischen den Nachrichten und dem Namen.
07/24/2014 15:03 ຖēxiຊ#5
Habs jetzt so Geschrieben das es einen festen Namen hat jetzt will ich ein PlayerDropItemEvent hinzugefügt damit man das Item nichtmehr dropen kann und es zeigt mir einen fehler an.

Code:
//bei "onDrop(" fehler: void is an invalid type for the variable onDrop
//bei "e)" fehler: Syntax error on token ")", ; expected
	@EventHandler
	public void onDrop(PlayerDropItemEvent e) {
			if (e.getItemDrop().getItemStack().getItemMeta().getDisplayName().equalsIgnoreCase("§5§lHider")){
				e.setCancelled(true);
			}
		}
07/24/2014 15:10 ComputerBaer#6
Da musst du mal dein Dokument überprüfen, da werden wohl irgendwelche Klammern nicht stimmen. Alternativ kannst du es z.B. bei pastebin hochladen und ich suche den Fehler.
07/24/2014 15:25 ຖēxiຊ#7
Hast ne Pn mit dem pastebin link :)