• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Hilfe bei meinem Plugin

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Hallöle,

und zwar brauche ich Hilfe bei meinem Plugin. Dies sieht folgendermaßen aus:
Man platziert ein Schild und schreibt in der ersten Zeile den Prefix hin. In der Zweiten Zeile die Item ID und dritte Zeile Wie oft das Item. Nun klappt alles auch gut. Inventar mit dem Item wird geöffnet. Doch nun zu ein paar kleinen Verbesserungen, die ich nicht hinbekomme. Und zwar möchte ich gerne, dass anstatt der ItemID das Material als Name angezeigt wird. was ich schon durch eine neue Funtkion versucht habe, jedoch gescheitert bin. Desweiteren hätte ich gerne einen Timer, der immer abfragt, ob der Spieler bereits 5 Sekunden gewartet hat, bevor er das Schild anklickt. Auch bereits durch eine ArrayList versucht, bin jedoch gescheitert. Zuletzt wollte ich es noch so machen, dass der Name der Chest nicht Chest ist sondern veränderbar ist, nur wie man diesen ändern kann, weiß ich leider nicht. Wenn jemand ein paar Code-Beißpiele oder Hilfen bzw. Lösungen eines oder mehrerer Probleme hat, wäre ich äußerst dankbar.

Gruß
LoganBwDE
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
ItemName:
Code:
ItemStack stack = new ItemStack(1);
        ItemMeta meta = stack.getItemMeta();
        meta.setDisplayName(stack.getType().toString());
        stack.setItemMeta(meta);
Timer: Spieler in die Arraylist einfügen, dann scheduler starten der den SPieler nach 5 sekunden wieder asunimmt.
Wenn ein Spieler eine Kiste recht anklickt einfach canceln, dann ein inventory erstellen und den name ändern und die items für das inventory einfach aus der Kiste übernehmen.
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Muss mich wohl korrigieren. Auf dem Schild wird abgefragt, welche ID man eingegeben hat und daraus wird dann ein Inventar mit dem Item erstellt. Die ID steht somit immernoch auf dem Schild. Doch wie bekomme ich nun den ItemNamen, um ihn wieder beim Schild auszugeben. Er klickt ein Schild an, dass ein virtuelles Inventar erstellt, doch mit dem Namen Chest. Doch wie kann man den verändern? :D
 

Alphy

Miner
Registriert
20 Dezember 2013
Beiträge
167
Diamanten
0
Zum Inventar:

Code:
Inventory inv = Bukkit.getInventory(null, InvGröße, InvName, InvType;

Zum Material:

Also vom Materialnamen zum Material:
Code:
Material mat = Material.getMaterial("STONE");

und von der Id zum Name:
Code:
String materialname = Material.getMaterial(ID).toString();

und vom namen zur ID:
Code:
Integer ID = Material.getMaterial("STONE").getId();

Das sind die sachen womit du probleme hattest. (So habe ich deine Frage gedeuted)

Ich hoffe ich konnte dir helfen.
LG
Kronos197
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Also Neues Problem: Ich bekomme eine NullPointerExeption....
Log und Code im Anhang ( Bitte nicht hauen, bin auch nur ein Mensch ;) )

Gruß
LoganBwDE
 

Anhänge

  • code.yml
    5,2 KB · Aufrufe: 236
  • log.txt
    2,5 KB · Aufrufe: 250

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
Ich würde dir dringend empfehlen erst ein paar tutorial zu gucken bzw. mehr o_O
Dein Fehler ist zeile 39
Code:
Caused by: java.lang.NullPointerException
    at me.loganbwde.KostenlosSchild.main.<init>(main.java:39) ~[?:?]
du versuchst da den Namen von einen Spieler heraus zu finden durch ein Event das garnicht existiert (null)
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
xD thx... kenn mich mit logs von minecraft halt kaum aus :D

EDIT: So nun 2 letzte Fragen, dann wäre das alles :D

1. Kann man einem Inventarnamen auch in Farbe anzeigen lassen, da ich nur "§bKostenlos" hinbekomme jedoch kein farbigen Text?
2. Wie frägt man ab, ob der Spieler das virtuelle Inventar verlassen bzw. geschlossen hat?
 
Zuletzt bearbeitet:

HardcorePvP

Kuhfänger
Registriert
3 September 2012
Beiträge
92
Diamanten
0
Minecraft
blooditor
1. §b ist Aqua also sollte das "Kostenlos" dann Aqua angezeigt werden.
2.
Code:
public void close(InventoryCloseEvent e){
   if(e.getInventory().getName().equals("§bKostenlos")){
     ...}}

P.S all deine Fragen werden auch in anderen Foren häufig gestellt also benutz vorher immer Google weil dann lernt man es auch besser als wenn dir einfach der Code hingeklatscht wird ;)
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Glaub mir ich google auch, finde nur oft nichts.

Also habe jetzt mal versucht, die ID durch den Material-Namen zu ersetzen.
Der Code dazu:
Code:
Sign schild = (Sign)event.getBlock().getState();
int id = Integer.parseInt(schild.getLine(1));
mat  = Material.getMaterial(id).toString();
event.setLine(0, scolour + prefix);
event.setLine(1, scolour2 + mat);
schild.update(true);

Der Fehler dazu:
[20:37:14] [Server thread/ERROR]: Could not pass event SignChangeEvent to KostenlosSchild v1.1
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[start.jar:git-Spigot-1649]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[start.jar:git-Spigot-1649]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:514) [start.jar:git-Spigot-1649]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:499) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:1713) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.PacketPlayInUpdateSign.a(PacketPlayInUpdateSign.java:58) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.PacketPlayInUpdateSign.handle(PacketPlayInUpdateSign.java:78) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:186) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.ServerConnection.c(ServerConnection.java:81) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:734) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:289) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:584) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:490) [start.jar:git-Spigot-1649]
at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [start.jar:git-Spigot-1649]
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source) ~[?:1.7.0_65]
at java.lang.Integer.parseInt(Unknown Source) ~[?:1.7.0_65]
at java.lang.Integer.parseInt(Unknown Source) ~[?:1.7.0_65]
at me.loganbwde.KostenlosSchild.main.onSignCreate(main.java:99) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_65]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_65]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_65]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_65]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:298) ~[start.jar:git-Spigot-1649]
... 13 more

Ich weiß das das Format nicht simmt, nur wenn ich ändere bekomme ich eine NullPointerExeption.

Und dass mit der Inventar Farbe klappt leider nicht.
Geht doch, hatte einen Denkfehler drinnen.
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Das hab ich auch schon rausgefunden -.- nur er will irgendwie den String nicht schnallen..

EDIT: Alles tut nun wie es soll, doch das mit dem ID vom Schild holen, dann Material davon rausfinden und zuletzt auf das Schild ausgeben funktioniert als einziges immer noch nicht...
 
Zuletzt bearbeitet:

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
Deswegen sollte man auch eine Programmiersprache lernen und sich nicht alles zusammenfragen und kopieren. "Ich finde bei google nix" - Natürlich findest du bei google nichts, wenn du einfach die falschen Begriffe googlest.

Im übrigen: Gute Ergebnisse in google findet man im übrigen nicht bei deutschen Suchbegriffen, denn die meisten deutschen "Programmierer" sind Idioten und eben Personen, die sich dinge zusammenkopiert haben um dann anderen zu sagen: "jahaha, das geht so: ...."

Wenn man sich schon eine Linie von einem Schild liest, dann hat man auch gefälligst einen try catch block zu setzen, so wie du es dort implementiert hast. Der Nutzer kann _immer_ keine Zahl angeben. - getLine startet im übrigen, wie so fast alles in der Informatik, mit 0.
Im übrigen sind warscheinlich RegEx hier sinnvoller, aber das werde ich dir sicherlich nicht vorkauen.

Außerdem kannst "0" + sign.getLine(i) machen, dann sollten zumindest einige Fehler unterdrückt werden...

PS: Arg.. Immer... deutsche... namen... in englischem mix... arghhh...
PPS: "Ich kann eben nicht so gut Englisch" - Na dann lerne es oder programmiere eben nicht. So einfach ist das.
 

LoganBwDE

Miner
Registriert
26 November 2014
Beiträge
192
Diamanten
315
Minecraft
LoganBwDE
Wenn du jetzt hier meine Kenntnisse in Frage stellst, mir egal. Doch verzehl mir mal, wo ich "Ich kann eben nicht so gut Englisch" geschrieben habe ;D Programmieren tu ich außerdem seit 3 Jahren, dies aber nur in C++ und Php sowie Html. Java ist nicht komplett Neuland doch Bukkit leider schon.

"denn die meisten deutschen "Programmierer" sind Idioten und eben Personen, die sich dinge zusammenkopiert haben um dann anderen zu sagen: "jahaha, das geht so: ...." "
Wenn du einen Beleg dafür hast gerne.

Als einziger Fehler ist nur noch, wie bereits gesagt, das abholen der Zahl vom Schild, das bilden des Materials aus der ID und dann wieder auf das Schild schreiben. Problem einzig und allein ist dabei das Bilden des Materials aus der ID, bei dem ich leider nicht weiter weißt.

Gruß
LoganBwDE
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
Minecraft
GPSforLEGENDS
Code:
ItemStack stack = new ItemStack(zahl);
Material mat = stack.getType();

PS: fürs nächste mal, einfach google benutzen... da findest du ALLES zu bukkit... einfach richtigen Syntax benutzen -> bukkit (das was du machen willst auf englisch) -> z.B bukkit id to material
 

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
Doch verzehl mir mal, wo ich "Ich kann eben nicht so gut Englisch" geschrieben habe ;D
Allein die Tatsache, dass du in deutsch schreibst. Gemeint war es im übrigen, dass eine derartig lächerliche Rechtfertigung nicht verwendet werden kann. Erkennbar am "-".

Programmieren tu ich außerdem seit 3 Jahren, dies aber nur in C++ und Php sowie Html. Java ist nicht komplett Neuland doch Bukkit leider schon.
Copy & Paste schreibt man übrigens nicht "Programmieren". Deine Rechtfertigung ist lächerlich. Davon mal abgesehen, dass HTML keine Kunst ist. [Im übrigen: Jeder Programmierer kann jede Programmiersprache verwenden, jedoch muss er sich etwas an die neuen Syntax elemente gewöhnen. Wenn du also C++ könntest, gäbe es kein Problem mit Java. Das anwenden einer API ist für einen richtigen Programmierer im übrigen auch kein Problem.

"denn die meisten deutschen "Programmierer" sind Idioten und eben Personen, die sich dinge zusammenkopiert haben um dann anderen zu sagen: "jahaha, das geht so: ...." "
Wenn du einen Beleg dafür hast gerne.
Du. Du bist ja anscheinend nicht fähig folgendes zu finden:
https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/Material.java#L575

Das Nitradoforum, *snip* und *snip* sind übrigens auch ziemlich gute Anlaufstellen für derartige Experten.
 

NoWayOut

Minecrafter
Registriert
28 Januar 2012
Beiträge
20
Diamanten
0
Minecraft
Darkangel
Noch ein kleiner Tipp am Rande: Ich würd das mit den 5 Sekunden nicht durch einen Sheduler und einer Arraylist mit dem Spielernamen lösen, sondern dem Spieler eine Metadata mit einem Timestamp geben. diese Metadata dann bei dem Clickevent abfragen und errechnen ob 5 Sekunden um sind. Ist ein kleinerer Speicheraufwand und auch performanceschonender ;)
 

Inkemann

Braumeister
Registriert
3 Mai 2015
Beiträge
339
Diamanten
301
Minecraft
Inkemann
Noch ein kleiner Tipp am Rande: Ich würd das mit den 5 Sekunden nicht durch einen Sheduler und einer Arraylist mit dem Spielernamen lösen, sondern dem Spieler eine Metadata mit einem Timestamp geben. diese Metadata dann bei dem Clickevent abfragen und errechnen ob 5 Sekunden um sind. Ist ein kleinerer Speicheraufwand und auch performanceschonender ;)

Der Speicheraufwand ist nicht kleiner, sondern im Mittel sogar größer ^^ Wobei man hier von Mengen spricht, bei denen weder Speicherbedarf noch Rechenaufwand eine messbare Rolle spielen.
 

NoWayOut

Minecrafter
Registriert
28 Januar 2012
Beiträge
20
Diamanten
0
Minecraft
Darkangel
Selbst bei 10.000 Spielern macht das keinen sinnvoll messbaren Unterschied.
doch tut es. Selbst wenn das nur ein unterschied von 10 ms ist wäre das bei 10.000 Spieler ein Faktor von 100 sec. (ist hier unrealistisch, da nicht jeder auf das Schild klikt, jedoch hab ich mein Beispiel nicht gemessen). Ich hab hier auch wenig Interesse mi t dir zu diskutieren ob und wann das relevant ist. Fakt ist, dass es mit einer Metadata weniger Traffic verursacht (und das schon ab 1 Spieler, auch wenn das nur wenige microssekunden sind). Wir wissen ja alles, das in Java vorallem das erstellen von Objekten zeitintensiv ist (teilweise im sekundenbereich). Kannst ja gerne eine geeignete Testreihe machen.
 
Oben