• 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!

PlugIn Inventar "Glass"-Animation

B

BrutalVerzockt

Guest
Hallo,
ich habe ein Problem mit meinem Plugin. Ich würde gerne Glassscheiben in mein Inventar setzen jedoch alle Zeit verzögert zu einander, aber im selben Abstand. D. h. Ich öffne das Inventar mit dem Befehl. Und hier startet die Scheduler mit einen DelayedTask und soll alle 8 Ticks also 0,4 Sekunden eine neue Glassscheibe setzen, dafür habe ich mir die for - Schleife genommen, jedoch werden sie alle gleichzeitig gesetzt. Könnte mir jemand mit meinem Anliegen helfen.

Zu Testzwecken habe ich das Item jetzt einfach mal geändert, aber ist ja nicht dramatisch.

Würde mich über eine Antwort von euch freuen und bedanke mich schonmal im voraus.


Command::
package net.brutalverzockt.citybuild.commands;

import net.brutalverzockt.citybuild.coinsapi.main.CoinsAPI;
import net.brutalverzockt.citybuild.main.Citybuild;
import net.brutalverzockt.citybuild.utils.ItemBuilder;
import net.brutalverzockt.citybuild.utils.Prefix;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class Rand_cmd implements CommandExecutor {

    ItemStack item = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1);
    ItemMeta im = item.getItemMeta();

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (sender instanceof Player) {
            Player p = (Player) sender;
            if (args.length == 0) {
                if (CoinsAPI.getCoins(p) >= 2500) {
                    Inventory inv = Bukkit.createInventory(null, 45, "§4§n§lRänder");
                    p.openInventory(inv);
                    Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                        @Override
                        public void run() {

                            for (int i = 0; i < inv.getSize(); i++) {
                                inv.setItem(i, new ItemBuilder(Material.GOLDEN_APPLE).create());
                            }
                        }
                    },8);
                } else
                    p.sendMessage(Prefix.prefix + "Du hast nicht genügend §e§lSeelen");
            } else
                p.sendMessage(Prefix.usage);
        } else
            sender.sendMessage(Prefix.noplayer);
        return false;
    }
}

Ich weiß einfach nicht wo mein Denkfehler liegt...
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Naja, ist eigentlich kein wunder dass alle Items "direkt" gesetzt werden. Denn du hast nur einen Verzögerten Task. bedeutet nach 8 Ticks, schnellt eine Schleife dadurch. Das geschieht wahrscheinlich alles in dem gleichen Tick.

Eventuell ändere den Task zu einem verzögerten sich wiederholenden Task, wo du pro Wiederholung einen Slot weitergehst und ohne Schleife.^^
 
B

BrutalVerzockt

Guest
Methode Animation.:
public void animationStart(Inventory inv) {
        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
            @Override
            public void run() {
                inv.setItem(0, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                    @Override
                    public void run() {
                        inv.setItem(1, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                            @Override
                            public void run() {
                                inv.setItem(2, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                    @Override
                                    public void run() {
                                        inv.setItem(3, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                            @Override
                                            public void run() {
                                                inv.setItem(4, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                    @Override
                                                    public void run() {
                                                        inv.setItem(5, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                            @Override
                                                            public void run() {
                                                                inv.setItem(6, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                    @Override
                                                                    public void run() {
                                                                        inv.setItem(7, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                            @Override
                                                                            public void run() {
                                                                                inv.setItem(8, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                    @Override
                                                                                    public void run() {
                                                                                        inv.setItem(9, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                            @Override
                                                                                            public void run() {
                                                                                                inv.setItem(10, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                    @Override
                                                                                                    public void run() {
                                                                                                        inv.setItem(11, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                            @Override
                                                                                                            public void run() {
                                                                                                                inv.setItem(12, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                    @Override
                                                                                                                    public void run() {
                                                                                                                        inv.setItem(13, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                            @Override
                                                                                                                            public void run() {
                                                                                                                                inv.setItem(14, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                    @Override
                                                                                                                                    public void run() {
                                                                                                                                        inv.setItem(15, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                            @Override
                                                                                                                                            public void run() {
                                                                                                                                                inv.setItem(16, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                    @Override
                                                                                                                                                    public void run() {
                                                                                                                                                        inv.setItem(17, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                            @Override
                                                                                                                                                            public void run() {
                                                                                                                                                                inv.setItem(18, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                    @Override
                                                                                                                                                                    public void run() {
                                                                                                                                                                        inv.setItem(19, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                            @Override
                                                                                                                                                                            public void run() {
                                                                                                                                                                                inv.setItem(20, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                    @Override
                                                                                                                                                                                    public void run() {
                                                                                                                                                                                        inv.setItem(21, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                            @Override
                                                                                                                                                                                            public void run() {
                                                                                                                                                                                                inv.setItem(22, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                                    @Override
                                                                                                                                                                                                    public void run() {
                                                                                                                                                                                                        inv.setItem(23, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                                            @Override
                                                                                                                                                                                                            public void run() {
                                                                                                                                                                                                                inv.setItem(24, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                                                    @Override
                                                                                                                                                                                                                    public void run() {
                                                                                                                                                                                                                        inv.setItem(25, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                                        Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                                                            @Override
                                                                                                                                                                                                                            public void run() {
                                                                                                                                                                                                                                inv.setItem(26, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                                                Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                                                                                                                                                                                                                    @Override
                                                                                                                                                                                                                                    public void run() {
                                                                                                                                                                                                                                        inv.setItem(27, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                }, 4);
                                                                                                                                                                                                                            }
                                                                                                                                                                                                                        }, 4);
                                                                                                                                                                                                                    }
                                                                                                                                                                                                                }, 4);
                                                                                                                                                                                                            }
                                                                                                                                                                                                        }, 4);
                                                                                                                                                                                                    }
                                                                                                                                                                                                }, 4);
                                                                                                                                                                                            }
                                                                                                                                                                                        }, 4);
                                                                                                                                                                                    }
                                                                                                                                                                                }, 4);
                                                                                                                                                                            }
                                                                                                                                                                        }, 4);
                                                                                                                                                                    }
                                                                                                                                                                }, 4);
                                                                                                                                                            }
                                                                                                                                                        }, 4);
                                                                                                                                                    }
                                                                                                                                                }, 4);
                                                                                                                                            }
                                                                                                                                        }, 4);
                                                                                                                                    }
                                                                                                                                }, 4);
                                                                                                                            }
                                                                                                                        }, 4);
                                                                                                                    }
                                                                                                                }, 4);
                                                                                                            }
                                                                                                        }, 4);
                                                                                                    }
                                                                                                }, 4);
                                                                                            }
                                                                                        }, 4);
                                                                                    }
                                                                                }, 4);
                                                                            }
                                                                        }, 4);
                                                                    }
                                                                }, 4);
                                                            }
                                                        }, 4);
                                                    }
                                                }, 4);
                                            }
                                        }, 4);
                                    }
                                }, 4);
                            }
                        }, 4);
                    }
                }, 4);
            }
        }, 4);

Kurze Frage, aber so war das nicht gemeint oder ?
 

UnityGaming

Workaholic
Registriert
25 Oktober 2015
Beiträge
527
Alter
26
Diamanten
312
Minecraft
FastFelix771
Kurze Frage, aber so war das nicht gemeint oder ?
Nein, so war das sicher nicht gemeint. :gusta:

Versuche bitte die Tasks nicht zu verschachteln, sondern das in einem Loop zu regeln oder mit einem RepeatingTask (da gibts Hinweise in div. Threads o. via Google).
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Wie mein vorgänger schon meint, nein, so war das nicht gemeint.^^

Code:
new BukkitRunnable()
        {
            int slot = 0;
            @Override
            public void run()
            {
                //Hier setzen vom item(EINMAL^^)
                slot++;
                if(slot == 53)
                {
                    cancel();
                }
            }
        }.runTaskTimer(plugin, 8L, 2L);

So Anmerkung, warum einen BukkitRunnable? Weil das man die auch sehr einfach canceln kann.
 
B

BrutalVerzockt

Guest
Vielen dank @Avankziar, @UnityGaming, und ihr Kreativitätsbewerter ;), ihr wart mir eine große Hilfe jetzt bei dieser eigentlich so einfach Lösung. Nun hätte ich aber noch eine Sache, häätet ihr auch eine Idee wie ich es genau so mit mehrereren Items zeitverzögert zu einander machen könnte. Sprich, dass ich EMERALD_BLOCK, (4 Ticks warten), GOLD_BLOCK, (4 Ticks warten) etc. setzen könnte ? Ohne, dass ich so viele Scheduler benutzen muss ? Weil diese Art ist offensichtlich nur für einmal Gedacht. Oder mehrere Items derselben Art.
 
B

BrutalVerzockt

Guest
Danke für den Hinweis bis jetzt klappt es super, allerdings werden Items aus der List nicht nacheinander genommen, sondern nur das letzte und das, aber in jeden Slot, und nein, ich habe auch andere mit reingenommen.

Hier der Code dazu
Methode:
new BukkitRunnable() {
            int slot = 10;

            @Override
            public void run() {
                for (ItemStack is : items) {
                    inv.setItem(slot, is);
                }

                slot++;
                if (slot == 17) {
                    cancel();
                }
            }
        }.runTaskTimer(Citybuild.getPlugin(), 100, 40);
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Ähm, haben wir nicht gesagt, dass man keine Schleife nutzten sollte zum hintereinander setzten?

Und hier MIT Schleife wird nur das letzte Item übernommen weil sin IN der Schleife der Slot nicht ändert.
 
B

BrutalVerzockt

Guest
Ja okay, habs jetzt verstanden. KEINE Schleifen mehr. Aber wie meinst du, dass ich den Slot als Indexgeber nehmen soll, weil ich habe nicht so viele Einträge als Slots.

//Weil sonst bekomme ich ja ne IndexOutOfBound***eception.
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Sagen wir mal, du hast ne List<ItemStack> irgendwo gemacht. Auf dieser kannst du per list.get(Zahl) auf die einzelen ItemStacks in dem Runnable zugreifen. Natürlich must du die List aber vorher auch gefüllt haben.

Code:
new BukkitRunnable() {
            int slot = 10;

            @Override
            public void run() {
                inv.setItem(slot, list.get(slot));

                slot++;
                if (slot == 17) {
                    cancel();
                }
            }
        }.runTaskTimer(Citybuild.getPlugin(), 100, 40);
 
B

BrutalVerzockt

Guest
So okay, und ich habe jetzt ein anderes Problem mit der Arraylist Größe.
Und zwar ist es so, dass ich versuche die Items ab dem 10 Slot zu adden, weil ab dem Eintrag geht es los, aber wenn ich versuche sie da zu adden oder zu setzen kommt nur das:


Code:
Bukkit.getScheduler().scheduleSyncDelayedTask(Citybuild.getPlugin(), new Runnable() {
                                @Override
                                public void run() {
                                    p.openInventory(inv);

                                    items.add(10, new ItemBuilder(Material.WARPED_HYPHAE).create());

                                    animation(inv);
                                    animatedBorder(inv, p);
                                    Bukkit.broadcastMessage("TEST" + items.size()); //Ist für Debug gewesen
                                }
                            }, 80);
                        } else
                            p.sendMessage(Prefix.prefix + "Du bist nicht der §4Inhaber §7des Grundstücks");
                    } else
                        p.sendMessage(Prefix.prefix + "Du bist auf §4§n§lkeinem§r §7Plot");
                } else
                    p.sendMessage(Prefix.prefix + "Du hast nicht genügend §e§lSeelen");
            } else
                p.sendMessage(Prefix.usage);
        } else
            sender.sendMessage(Prefix.noplayer);
        return false;
    }

    public void animation(Inventory inv) {
        items.add(10, new ItemBuilder(Material.EMERALD_BLOCK).setName("§aEmerald").create());
        items.add(11, new ItemBuilder(Material.SLIME_BLOCK).setName("§2Slime").create());
        items.add(12, new ItemBuilder(Material.HONEY_BLOCK).setName("§6Honig").create());
        items.add(13, new ItemBuilder(Material.SHROOMLIGHT).setName("§ePilz").create());
        items.add(14, new ItemBuilder(Material.CRIMSON_HYPHAE).setName("§4Crymson").create());
        items.add(15, new ItemBuilder(Material.CRYING_OBSIDIAN).setName("§9Weinender Obsidian").create());
        items.add(16, new ItemBuilder(Material.WARPED_HYPHAE).setName("Wirrhyphen").create());


        new BukkitRunnable() {
            int slot = 0;

            @Override
            public void run() {
                inv.setItem(slot, new ItemBuilder(Material.BLACK_STAINED_GLASS_PANE).create());
                slot++;
                if (slot == 27) {
                    cancel();
                }
            }

        }.runTaskTimer(Citybuild.getPlugin(), 10, 1);
    }

    public void animatedBorder(Inventory inv, Player p) {
        new BukkitRunnable() {
            int slot = 10;

            @Override
            public void run() {
                inv.setItem(slot, items.get(slot));
                slot++;
                if (slot == 17) {
                    cancel();
                }
            }
        }.runTaskTimer(Citybuild.getPlugin(), 100, 40);
    }
}

Die List:
List<ItemStack> items = new ArrayList<ItemStack>();

Ausgabe:
java.lang.IndexOutOfBound***ception: Index: 10, Size: 0
        at java.util.ArrayList.rangeCheckForAdd(ArrayList.java:788) ~[?:?]
        at java.util.ArrayList.add(ArrayList.java:513) ~[?:?]
        at net.brutalverzockt.citybuild.commands.Rand_cmd$1.run(Rand_cmd.java:51) ~[?:?]
 

Avankziar

Schafhirte
Registriert
12 Februar 2018
Beiträge
135
Alter
33
Diamanten
324
Minecraft
Avankziar
Naja, wenn die Liste leer ist, kannst du nicht einfach an der 10. Stelle etwas einfügen. Musst du ja auch nicht. Mach einfach bei setzen von den Items:
inv.setItem(slot, items.get(slot-10));

Dann kannst du auch nur adden ohne eine Zahl als Index anzugeben.
 
B

BrutalVerzockt

Guest
Okay vielen Dank nochmal,

um mehrer Reihen zu erstellen, habe ich jetzt die Stellen die "übersrpungen" werden sollten mit einer Abfrage gelöst bzw. die Übersrpingen Items für die Ränder gesetzt.

Vielen Dank euch.

Liebe Grüße Marco F.
 
Oben