Jump to content

Hast du schon das Minecraftforum.de-Gütesiegel gesehen? Hier kommst du dorthin!

mik3_1802

User
  • Gesamte Inhalte

    22
  • Benutzer seit

  • Letzter Besuch

Reputation in der Community

0 Noch unbekannt

Über mik3_1802

  • Rang
    Holzfäller

Profil Information

  • Geschlecht
    Männlich

Minecraft Information

  • Minecraft
    mik3_1802
  1. Bukkit API 1.12 Trank erstellen

    Hey Leute Ich wollte mal fragen wie es möglich ist ein Item mit seiner SubID zu erstellen. Hab da schon viel dazu gesehen und ausprobiert, aber nichts funktioniert. Wie das hier zB. chestinv.addItem(new ItemStack(Material.POTION, 1, (short) 8197)); Ich komme da einfach nicht weiter.. Oder gibt es einen anderen Weg z.B. einen Trank mit der jeweiligen SubID in ein Inventory zu legen? Danke im Voraus für Antworten!
  2. [GELÖST] Problem beim Kiste befüllen <BUKKIT API>

    Also ich hab das Problem gelöst, nachdem ich bis um 4/5Uhr morgens weiter probiert habe Ich hab das jetzt so geregelt, das ich die Chest und das Inventory vor der while-Schleife definiert habe. Irgendwie macht das Probleme wenn es innerhalb der Schleife ist. Dann habe ich noch die Variable int ergebnis, die ich für die Wahrscheinlichkeit und für die Anzahl benutzt habe getrennt. Also einen Integer für die Wahrscheinlichkeit und einen extra für die Anzahl der Items. public void FillChests () { World world = Bukkit.createWorld(WorldCreator.name("world")); ResultSet pvpChests = mysql.getAllChests(); // Hier habe ich die Chest und das Inventory vor (!) der Schleife definiert Chest chest = null; Inventory chestinv = null; /* Und hier die Integer für Wahrscheinlichkeit (int ergebnis) und für die Anzahl (int anz) getrennt */ int ergebnis = 0; int anz = 0; try { while (pvpChests.next()) { Danach hat es funktioniert
  3. Hey Leute, ich komme wieder nicht weiter.. Ich schreibe gerade ein Plugin für eine PVP-Map die alle 10min Kisten befüllt. Dafür habe ich in meiner Datenbank zwei Tabellen angelegt: - Eine für die Kistenpositionen und den Kistentyp(Ich will das in Kisten die schwer zugänglich sind(Typ = 1) bessere Items sind) - Eine für die Items. Da wird angegeben welche Items es für den Typ 1, Typ 2 usw gibt. Was die maximale anzahl (die dann per random geholt wird) ist und die Wahrscheinlichkeit, wie wahrscheinlich es ist das dieses Item in der Kiste landet (Eine Zahl zwischen 1 - 100) Die Datenbank Connection und das abrufen der Tabelle funktioniert einwandfrei. Nur irgendwie kommt es mir so vor als Würde er die Daten nur teilweise abrufen.. Ich weiß nicht warum. Und in die Kisten wird es auch nicht geladen. Nur ab und zu und dann mit der falschen Anzahl. Um das zu prüfen hab ich an zwei Stellen im Code etwas in den öffentlichen Chat schreiben lassen. Einmal "1 + Materialname aus der DB" und dann nochmal "2 + Materialname aus DB" nachdem per Random die Wahrscheinlichkeit "überprüft" wurde. Edit: Irgendwie wird in der While-Schleife nur die erste Spalte aus dem ResultSet durchgegangen, also die erste Kiste. Und die wird nur befüllt mit den Items, wenn ich den Server stoppe und dann wieder starte. Und was die Items angeht, ist das so als würde das Plugin nach Lust und Laune einfach an irgendeiner Stelle stoppen... Hier erstmal der Code: public void FillChests () { Random generator = new Random(); World world = Bukkit.createWorld(WorldCreator.name("world")); /* Hier werden aus der MySQL Klasse alle Kisten mit dem Typ und der Position aus der Datenbank abgerufen */ ResultSet pvpChests = mysql.getAllChests(); try { // Eine While-Schleife die je Kiste ausgeführt wird while (pvpChests.next()) { int type = pvpChests.getInt("type"); int posx = pvpChests.getInt("posx"); int posy = pvpChests.getInt("posy"); int posz = pvpChests.getInt("posz"); // Die Position der Kiste Location loc = new Location(world, posx, posy, posz); Block block = loc.getBlock(); // Hier erstelle ich ein neues Inventar mit 27 Slots (Wie eine einzelne Kiste) Inventory inv = Bukkit.createInventory(null, 27); // Hier werden alle Items für die Kiste nach dem jeweiligen Typ aus der Datenbank abgerufen ResultSet items = mysql.getChestItems(type); // Eine Schleife die für jedes Item ausgeführt wird while (items.next()) { // Name des Materials String mat = items.getString("blocktype"); // Maximale Anzahl int anzahl = items.getInt("maximal"); // Die Wahrscheinlichkeit (1 - 100) int zufall = items.getInt("prob"); // Jetzt wird eine zufällige Zahl für die Wahrscheinlichkeit erzeugt int ergebnis = generator.nextInt(100); // Die eben erwähnte Nachricht Bukkit.broadcastMessage("1" + mat); // Wenn die eben erzeugte Zahl kleiner/gleich als die Wahrscheinlichkeit ist: if (ergebnis <= zufall) { // Die eben erwähnte zweite Nachricht Bukkit.broadcastMessage("2" + mat); ergebnis = 0; // So lange die Anzahl 0 ist, wird eine neue Zahl generiert while (ergebnis == 0) { ergebnis = generator.nextInt(anzahl); } // Item wird dem Inventar hinzugefügt inv.addItem(new ItemStack(Material.getMaterial(mat), ergebnis)); } } // Die Chest wird abgerufen Chest chest = (Chest) block.getState(); // Das Inventar der Chest wird agerufen Inventory chestinv = chest.getInventory(); // Die Kiste wird geleert chestinv.clear(); // Das Inventar wird in ein ItemStack Array gelegt ItemStack[] itemss = inv.getContents(); // Die Items werden dem Inventar der Kiste hinzugefügt for (ItemStack is : itemss) { if (is != null) { chestinv.addItem(is); } } } } catch (SQLException e) { e.printStackTrace(); } } Irgendwie läuft der Code ab der (Ab dem Kommentar im Code "// Item wird dem Inventar hinzugefügt") Stelle einfach nicht weiter. Ich bekomme keinen Fehler, keine Meldung einfach garnichts.. Weiß jemand was da dass Problem ist? Was da sein könnte warum das einfach nicht weiter läuft.. Danke im Voraus für Antworten!
  4. Hey Leute Ich will ein Plugin schreiben in dem es von Vorteil wäre wenn ich die Regionen die ich mit WorldEdit/Guard erstellt habe nutzen will. Einfach nur aus dem Grund, um zu überprüfen ob ich mit in Region xy befinde oder nicht. Da wollte ich mal fragen was es da so für Möglichkeiten gibt. Ein kleiner Denkanstoß wäre echt super Danke im Voraus für Antworten!
  5. permissions.yml mit der Spigot|Bukkit API bearbeiten

    Das ist schade.. Ich hab mir jetzt ein eigenes kleines Permissions System geschrieben für meine Plugins. Funktioniert und das reicht mir so Problem gelöst MfG Mike
  6. Heey Leute Ich will die permissions.yml im Hauptverzeichnis nutzen. Ich weiß auch wie ich diese auslese, aber ich finde nichts dazu wie ich Werte ändere, einen Spieler hinzufügen/löschen, dem Spieler eine Permission geben, die Gruppe ändern kann. Und ich finde einfach mal nichts dazu im Internet. Nur dazu wie man die mit anderen Plugins wie PermissionsEx usw verwendet. Aber nichts dazu wie man die mit eigenen Plugins bzw der Spigot API verändern kann.. Weiß da jemand von euch weiter oder kennt eine Seite im Internet dazu die ich vielleicht noch nicht gefunden habe? Danke im Voraus für Antworten! MfG Mike
  7. Soo hier wie ich das gelöst habe: Das hier kommt an den Anfang der Klasse, das die Werte immer abgerufen werden können public double positx; public double posity; public double positz; public String schildname; public String schildart; public Sign sign; Hier das Event wenn ein Schild erstellt wird @EventHandler public void onSignChange(SignChangeEvent e) { sign = (Sign)e.getBlock().getState(); } Dann habe ich es hier etwas abgeändert, und zwar muss ich einen Befehl eingeben um das Schild zu erstellen Das passiert natürlich in einer onCommand Methode // Wenn der Befehl /signcreate <start|ziel> <schildname> ausgeführt wird if (label.equalsIgnoreCase("signcreate")) { Player player = (Player) sender; String username = player.getName(); String welt = player.getWorld().getName(); if (args.length == 2) { schildart = args[0]; schildname = args[1]; if (schildart.equalsIgnoreCase("ziel")) { // Position des zuvor erstellten Schildes ermitteln Location loc = sign.getLocation(); // Und dann an die Methode signUpdater() weitergeben signUpdater(loc); return true; } else if (schildart.equalsIgnoreCase("start")) { if (schildname == "") { player.sendMessage("§cDu musst einen Schildnamen in der dritten Reihe angeben!"); } else { player.sendMessage("§aDein Schild §9" + schildname + " §awurde erstellt!"); Location loc = sign.getLocation(); signUpdater(loc); return true; } } } } Und das hier ist die Methode signUpdater() public void signUpdater (Location loc) { World w = loc.getWorld(); Block a = w.getBlockAt(loc); if (a.getType() == Material.SIGN_POST || a.getType() == Material.WALL_SIGN) { Sign sign = (Sign) a.getState(); sign.setLine(0, "§a[Teleport]"); sign.setLine(1, schildart); sign.setLine(2, schildname); sign.update(true); } } Ich hoffe ich konnte jemandem helfen der auf das selbe Problem stößt, bzw wie ich nicht wusste das man ein Schild nicht in dem SignChangeEvent bearbeiten kann
  8. Danke für die Antwort Ja das habe ich mir abgeschaut, dachte es wäre richtig so. Aber gibt schon Sinn was du schreibst. Ich probier das jetzt mal aus und melde mich dann mit dem Ergebnis Also der Fehler kommt immer noch jedes mal wenn ich ein Schild erstelle.. Generell wenn ich ein Schild erstelle. Also es ist egal ob ich [Teleport] oder nichts drin stehen hab. Weißt du boomer41, oder sonst jemand was das sein könnte? Also ich hab rausgefunden was das Problem ist. Ich schreibe es mal für diejenigen die auf den Post stoßen und das gleiche Problem haben: Man kann das Schild nicht in dem SignChangeEvent bearbeiten. Man muss dafür eine eigene Methode erstellen die man aufruft. Wenn ich Zuhause bin poste ich mal wie ich das gelöst habe.
  9. Hey Leute Ich bin gerade dabei ein kleines Plugin zum teleportieren zu schreiben. Die erste Funktion, den Spieler an irgendeinen zufällige Stelle der Map zu teleportieren klappt wunderbar. Jetzt will ich Schilder erstellen können, ein Schild als Start, und ein Schild als Ziel. Zum teleportieren also. Nur wenn ich ein Schild erstelle, bekomme ich direkt den Fehler in der Konsole: [17:39:32 ERROR]: Could not pass event SignChangeEvent to Teleport v1.0.3 org.bukkit.event.EventException: null at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013] at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:499) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:484) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:2187) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.PacketPlayInUpdateSign.a(SourceFile:44) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.PacketPlayInUpdateSign.a(SourceFile:10) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_112] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_112] at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:747) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:405) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:678) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:576) [spigot-1.12.jar:git-Spigot-7228328-af1c013] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112] Caused by: java.lang.ClassCastException: org.bukkit.craftbukkit.v1_12_R1.block.CraftBlock cannot be cast to org.bukkit.block.Sign at tlprt.teleport.Main.onSignCreate(Main.java:82) ~[?:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_112] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_112] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_112] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_112] at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.jar:git-Spigot-7228328-af1c013] ... 15 more Ich weiß nicht woran das liegt... Also ja natürlich an dem SignChangeEvent, aber wodurch genau er da ausgelöst wird weiß ich leider nichts. Hier ist noch die Stelle die den Fehler verursacht: // Wenn ein Schild erstellt wird @EventHandler public void onSignCreate (SignChangeEvent e) { // Daten vom Schild holen Sign s = (Sign)e.getBlock(); Location sloc = e.getBlock().getLocation(); String[] lines = s.getLines(); Player player = (Player) e; String playername = player.getName(); // Überprüfen ob in der ersten Zeile [Teleport] steht if (lines.length == 2 && lines[0].equalsIgnoreCase("[Teleport]")) { // Wenn in der zweiten Zeile ziel steht if (lines[1].equalsIgnoreCase("ziel")) { // Die Koordinaten des Schildes speichern int posx = sloc.getBlockX(); int posy = sloc.getBlockY(); int posz = sloc.getBlockZ(); String signname = lines[2]; // Wenn in der dritten Zeile kein Schildname steht if (signname == null) { // Spieler benachrichtigen und Schild auf Rot stellen player.sendMessage("§cDu musst einen Schildnamen in der dritten Reihe angeben!"); e.setLine(0, "§c[Teleport]"); } else { // Wenn ein Schildname angegeben wurde, Schildname und Koordinaten in der config speichern e.setLine(0, "§1[Teleport]"); Main.cfg.set("Signs." + playername + "." + signname + ".X", posx); Main.cfg.set("Signs." + playername + "." + signname + ".Y", posy); Main.cfg.set("Signs." + playername + "." + signname + ".Z", posz); this.getConfig().options().copyDefaults(true); this.saveConfig(); } // Wenn start in der zweiten Zeile steht } else if (lines[1].equalsIgnoreCase("start")) { String ziel = lines[2]; // Versuchen Wert X aus der Config zu laden String exist = Main.cfg.getString("Signs." + playername + "." + ziel + ".X"); // Wenn der Wert X nicht null ist if (exist == null) { // Spieler benachrichtigen und Schild auf Rot stellen player.sendMessage("Das Ziel existiert nichts!"); e.setLine(0, "§c[Teleport]"); } else { } // Wenn kein Start oder Ziel angegeben wurde } else { player.sendMessage("§cDu musst in der zweiten Zeile start/ziel angeben"); } } } Ich hoffe das mir jemand weiterhelfen kann. Danke im Voraus für Antworten!
  10. Stimmt. Ja ich hab viel mit Google geschaut, aber da wird nie so richtig auf die Materie eingegangen.. Und ja das mit Java sollte ich echt mal machen Hab mich früher immer wieder mal dran versucht aber dann keine Lust mehr gehabt, weil es dann an irgendwas hing. Aber jetzt bin ich ja etwas älter und das Verständnis ist besser, deswegen will ich mich da wieder dran versuchen Also Danke dir nochmal für die Hilfe!
  11. Wow es klappt Super Danke!! Die Map sieht jetzt schon ganz verrückt aus mit den Spuren in der Luft haha Nur nochmal zum Verständnis: Zwei Events im Konstruktor ist ein Nogo? Und noch eine Frage: Kennst du eine gute Tutorial-Reihe oder sowas dass die Spigot API und Java gut erklärt? Weil mit der Javadoc komme ich irgendwie nicht zurecht bzw weiß nicht wie ich die richtig verstehen soll..
  12. So lange ich einen Stick oder Papier in der Haupt-Hand halte
  13. Das ist die Frage Wenn ich es im PlayerInteract mache, wird dass dann so lange ausgeführt wie ich dieses Item in der Hand habe, oder nur wenn ich auf das Item wechsle? Oder muss ich es dann doch eher im PayerMove machen, dass dann immer wenn ich mich bewege überprüft wird ob das Item in der Hand ist und das der Block dann erstellt wird?
  14. Hab gedacht das passt so. Wie gesagt weiß ich noch nicht wie ich das ganze richtig anwende. Ich finde viele Tutorials dazu, aber nur mit Code Beispiel. Ohne das wirklich erklärt wird, was das jetzt genau macht und wieso.. Mir ist eben doch was aufgefallen in der Konsole: [13:40:20 ERROR]: [Testplugin] Testplugin v1.0.3 attempted to register an invalid EventHandler method signature "public void test.testplugin.Listeners.onPlayerMove(org.bukkit.event.player.PlayerMoveEvent,org.bukkit.event.player.PlayerInteractEvent)" in class test.testplugin.Listeners
  15. Danke für die schnelle Antwort Nein in der Konsole passiert nichts, außer der Ausgabe dass das Plugin funktioniert, die ja in onEnable ausgeführt wird. Also es passiert einfach nichts. Kein Fehler, keine Meldung oder sonst was.
×