Die Methode matchMaterial returnt null, falls ein falscher Wert eingegeben wurde. Also überprüfst du einfach, ob das Material null ist und sendest dem Spieler die Fehlermeldung, falls das der Fall ist.- snip -
Die Methode matchMaterial returnt null, falls ein falscher Wert eingegeben wurde. Also überprüfst du einfach, ob das Material null ist und sendest dem Spieler die Fehlermeldung, falls das der Fall ist.- snip -
Geht leider nicht oder ich habe es falsch gemacht.Die Methode matchMaterial returnt null, falls ein falscher Wert eingegeben wurde. Also überprüfst du einfach, ob das Material null ist und sendest dem Spieler die Fehlermeldung, falls das der Fall ist.
if (cmd.getName().equalsIgnoreCase("Hut"))
{
//Wenn ein Item eingegebn wird
if (args.length == 1)
{
ItemStack txt = new ItemStack(Material.matchMaterial(args[0]));
if (txt == null)
{
p.sendMessage(prefix + ChatColor.RED + "Du hast das Item falsch geschrieben!");
}
else
{
p.getInventory().setHelmet(txt);
}
}
//Wenn kein Item eingegeben wird.
else
{
ItemStack hi = p.getInventory().getItemInHand();
p.getInventory().setHelmet(hi);
}
}
Du überprüfst du nur, ob der ItemStack null ist, aber da du ihn davor bereits gesetzt hast, ist er's in keinem Fall. Speicher am besten das Material in einer extra Variable und überprüf, ob sie null ist.Geht leider nicht oder ich habe es falsch gemacht.
Code:if (cmd.getName().equalsIgnoreCase("Hut")) { //Wenn ein Item eingegebn wird if (args.length == 1) { ItemStack txt = new ItemStack(Material.matchMaterial(args[0])); if (txt == null) { p.sendMessage(prefix + ChatColor.RED + "Du hast das Item falsch geschrieben!"); } else { p.getInventory().setHelmet(txt); } } //Wenn kein Item eingegeben wird. else { ItemStack hi = p.getInventory().getItemInHand(); p.getInventory().setHelmet(hi); } }
Ich galube ich sollte mich noch mal besser über Java und Bukkit informieren... Wenn ich eine Material variabel probiere zu erstellen, dann steht da "Material has private access in org.bukkit.Material"Du überprüfst du nur, ob der ItemStack null ist, aber da du ihn davor bereits gesetzt hast, ist er's in keinem Fall. Speicher am besten das Material in einer extra Variable und überprüf, ob sie null ist.
Nein, nein, du sollst auch kein neues Material erstellen. Ich meinte es eher so:Ich galube ich sollte mich noch mal besser über Java und Bukkit informieren... Wenn ich eine Material variabel probiere zu erstellen, dann steht da "Material has private access in org.bukkit.Material"
Material material = Material.matchMaterial(args[0]);
if (material == null) {
// Fehlermeldung
}
@NikiNein, nein, du sollst auch kein neues Material erstellen. Ich meinte es eher so:
und so weiter.Code:Material material = Material.matchMaterial(args[0]); if (material == null) { // Fehlermeldung }
Einfacher wäre:Nein, nein, du sollst auch kein neues Material erstellen. Ich meinte es eher so:
und so weiter.Code:Material material = Material.matchMaterial(args[0]); if (material == null) { // Fehlermeldung }
Material mat = Material.matchMaterial(args[0]);
if(mat != null)
{...}
else{...Fehlermeldung...}
Falsch. Eher andersrum. Else mag ich nicht ._.Einfacher wäre:
Da man die Fehlermeldung meist immer nachdem es nicht null ist setzt. Genauso wie try-catch.Code:Material mat = Material.matchMaterial(args[0]); if(mat != null) {...} else{...Fehlermeldung...}
BTW... Gab es nicht eine andere Methode für Material(String)?
if(mat == null) {
//FEHLER
return;
}
//Aktion
Ich hab vorhin noch getMaterial(String) gefunden, aber das nimmt nur den genauen Namen an, bei matchMaterial wird noch was mit 'nem RegEx gemacht.BTW... Gab es nicht eine andere Methode für Material(String)?
Es ist nicht Falsch.Falsch. Eher andersrum. Else mag ich nicht ._.
Code:if(mat == null) { //FEHLER return; } //Aktion
Es ist nicht falsch, aber CodeNesting.Es ist nicht Falsch.
try-catch, switch-case-default etc. laufen nach dem "Erst richtig, dann falsch"- bzw. "Vorhanden? Sonst..."-Prinzip...
Bzw umbenennen zu IntelliJ IDEA/Eclipse!
p.playEffect(new Location(p.getWorld(),x,y,z), Effect.POTION_BREAK, 5);
particle.getStrings().write(0, "instantSpell");
particle.getFloat().write(0, x).write(1, y).write(2, z).write(3, 0F).write(4, 0F).write(5, 0F).write(6, 6F);
particle.getIntegers().write(0, 10);
Bin in letzter Zeit zunehmend auf Tapatalk, da geht das leider nichtBzw umbenennen zu IntelliJ IDEA/Eclipse!
Das kann man eh nicht selbst machen, deshalb //v4renaming Coding mit Java @DomelyBin in letzter Zeit zunehmend auf Tapatalk, da geht das leider nicht
Da der Sound bei der Location abgespielt wird, könntest du versuchen den Spieler zu einer Location und dann wieder zurück zu porten. Das wäre Ressourcenaufwändig, aber spontan die einfachste Lösung die mir einfällt.Hey, folgendes Problem:
Ich erstelle Potion Break Partikel und zwar diese hier: http://minecraft.gamepedia.com/Data_values#Status_effects Nummer 6. Zuerst habe ich es mit
gemacht.Code:p.playEffect(new Location(p.getWorld(),x,y,z), Effect.POTION_BREAK, 5);
Da hierbei aber auch der Potion_Break Sound entsteht, wollte ich es über das Particle-Packet versuchen.
Wichtig ist hierbei Zeile 2 Index 6.Code:particle.getStrings().write(0, "instantSpell"); particle.getFloat().write(0, x).write(1, y).write(2, z).write(3, 0F).write(4, 0F).write(5, 0F).write(6, 6F); particle.getIntegers().write(0, 10);
Egal was ich als "Particle Data" angebe, ich erhalte immer die Standard Partikel (einfach nur weiße Kreuze, wie mein gewünschter Effekt, nur weiß). 6 geht nicht (Value des Effektes), 5 nicht (wie bei PlayEffect). Diese ganze Zeile bei Instant Health auch nicht http://minecraft.gamepedia.com/Potion#Data_value_table
Auch alle anderen Zahlen (z.B. 3) liefern nur die Standard weißen Partikel.
Packetinformation (ist eine alte Version weil in der neuen Version der Seite alles für den 1.8 Server geändert wurde):
http://wiki.vg/index.php?title=Protocol&oldid=5980#Particle
Hat jemand eine Lösung wie ich die gewünschten Partikel (http://minecraft.gamepedia.com/Data_values#Status_effects Nummer 6) erstellen kann ohne Sound?
Also was muss ich bei "Data Value" im Float index 6 angeben? Oder lässt sich der Sound unterdrücken?
Auch nicht so das wahre. Vor allem wenn ich viele Partikel schicken will....Da der Sound bei der Location abgespielt wird, könntest du versuchen den Spieler zu einer Location und dann wieder zurück zu porten. Das wäre Ressourcenaufwändig, aber spontan die einfachste Lösung die mir einfällt.
@DREAMZiiHey, folgendes Problem:
Ich erstelle Potion Break Partikel und zwar diese hier: http://minecraft.gamepedia.com/Data_values#Status_effects Nummer 6. Zuerst habe ich es mit
gemacht.Code:p.playEffect(new Location(p.getWorld(),x,y,z), Effect.POTION_BREAK, 5);
Da hierbei aber auch der Potion_Break Sound entsteht, wollte ich es über das Particle-Packet versuchen.
Wichtig ist hierbei Zeile 2 Index 6.Code:particle.getStrings().write(0, "instantSpell"); particle.getFloat().write(0, x).write(1, y).write(2, z).write(3, 0F).write(4, 0F).write(5, 0F).write(6, 6F); particle.getIntegers().write(0, 10);
Egal was ich als "Particle Data" angebe, ich erhalte immer die Standard Partikel (einfach nur weiße Kreuze, wie mein gewünschter Effekt, nur weiß). 6 geht nicht (Value des Effektes), 5 nicht (wie bei PlayEffect). Diese ganze Zeile bei Instant Health auch nicht http://minecraft.gamepedia.com/Potion#Data_value_table
Auch alle anderen Zahlen (z.B. 3) liefern nur die Standard weißen Partikel.
Packetinformation (ist eine alte Version weil in der neuen Version der Seite alles für den 1.8 Server geändert wurde):
http://wiki.vg/index.php?title=Protocol&oldid=5980#Particle
Hat jemand eine Lösung wie ich die gewünschten Partikel (http://minecraft.gamepedia.com/Data_values#Status_effects Nummer 6) erstellen kann ohne Sound?
Also was muss ich bei "Data Value" im Float index 6 angeben? Oder lässt sich der Sound unterdrücken?