Minecraft Casino EinarmigerBandit Animation

Minecraft - Java Edition

HerrInfo

Mitglied
Hallo zusammen,

ich versuche seit bereits einer Woche eine funktionierende Animation für meinen
einarmigen Banditen zu erstellen. Die Idee ist, das alle fünf Reihen gleichzeitig beginnen zu drehen. Danach sollen nacheinander die erste zweite und so weiter erst langsamer werden und dann schließlich nacheinander stoppen.

Hier ist die meine Klasse EinarmigerBanditGUI:

Java:
package net.tim.gambleplugin.guis;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin;

import java.util.ArrayList;

public class EinarmigerBanditGUI {

    Material[] einarmigerBanditItems = {Material.COAL_BLOCK, Material.IRON_BLOCK, Material.GOLD_BLOCK, Material.DIAMOND_BLOCK, Material.EMERALD_BLOCK, Material.NETHERITE_BLOCK};
    Material[][] slotMachine = new Material[5][5];

    private final Plugin plugin;
    Inventory gui;

    public EinarmigerBanditGUI(Plugin plugin){
        this.plugin = plugin;
    }

    public void openEinarmigerBanditGUI(Player player){

        gui = Bukkit.createInventory(null, 45, "Einarmiger Bandit");

        //Exit button
        ItemStack exit = new ItemStack(Material.BARRIER);
        ItemMeta exitMeta = exit.getItemMeta();
        exitMeta.setDisplayName("Exit");
        exitMeta.setLore(null);
        exit.setItemMeta(exitMeta);
        gui.setItem(34, exit);

        //Spin button
        ItemStack spin = new ItemStack(Material.OAK_BUTTON);
        ItemMeta spinMeta = spin.getItemMeta();
        spinMeta.setDisplayName("Spin");
        spinMeta.setLore(new ArrayList<>() {{add("Click to spin the slot machine.");}{add("Costs 1 diamond.");}});
        spin.setItemMeta(spinMeta);
        gui.setItem(16, spin);

        //Create Slot machine
        for (int i = 0; i < slotMachine.length; i++) {
            for (int j = 0; j < 5; j++) {
                slotMachine[i][j] = einarmigerBanditItems[j];
            }
        }

        //Draw slot machine
        drawSlotMachine(gui);

        player.openInventory(gui);

    }

    public void spin(){

    }

    private void manipulateSlotMachine(Material material){

    }

    private void drawSlotMachine(Inventory gui){
        for (int i = 0; i < slotMachine.length; i++){
            for (int j = 0; j < 5; j++){
                gui.setItem(9 * j +i, new ItemStack(slotMachine[i][j]));
            }
        }
    }

    private void spinSlotMachineOnce(int row){
        if (row < 0 || row >4)
            throw new IllegalArgumentException("Row must be between 0 and 4");

        slotMachine[row][0] = slotMachine[row][1];
        slotMachine[row][1] = slotMachine[row][2];
        slotMachine[row][2] = slotMachine[row][3];
        slotMachine[row][3] = slotMachine[row][4];
        slotMachine[row][4] = slotMachine[row][0];

        drawSlotMachine(gui);
    }
}

Ich wünsche mir definitiv nicht eine komplette Lösung, nur einen kleinen Anstupser. Ich denke, dass ich es mit einem Bukkit Runnable machen muss, stehe bei denen aber komplett auf dem Schlauch. Solltet ihr noch etwas benötigen lasst es mich gerne wissen.

Viele Grüße

Nachtrag:
Es handelt sich hier um ein Minecraft Plugin (Spigot).
 
Zuletzt bearbeitet:

Oneixee5

Top Contributor
Ich kenne Minecraft fast überhaupt nicht. Würde aber so ran gehen, pro Slot ein langes Bild, auf welchem alle Früchte nacheinander zu sehen sind. Dann das Bild quasi von oben durch den Slot "schieben". Dann sollte es so aussehen als würde sich der drehen. Am Ende wieder von vorn beginnen. Man könnte das auch etwas verzerren, damit der Eindruck einer Wölbung entsteht, so eine Art Linseneffekt.
Für eine Animation hast du noch sehr wenig Code, du wirst für jeden Slot mindestens einen Thread und mehrere GUI-Componenten und ein gutes Konzept brauchen.
 

Robert Zenz

Top Contributor
Das ist etwas schwieriger, da du in Bukkit auf der Server-Seite bist. Du kannst natuerlich ein Inventory erstellen und dem Spieler anzeigen, aber ich glaube die Regeln fuer die Aktualisierung der Anzeige sind da sehr schwammig, aus guten Grund. Ich denke ein "durchrotieren der Bilder" so das der Spieler das sieht kannst du direkt knicken. Die billigste Idee die da ginge waere entweder hast du ein gif welches du anzeigen lassen kannst in welchem die Bilder durchwechseln, aber ich glaube das kann Minecraft nicht (auszerdem Textur-Pakete). Oder du hast ein Bild welches signalisiert das sich das Ding dreht.

Alternativ koenntest du auch das Iventory aendern bei jedem, uh, "Frame", damit haettest du eine solche Animation. Das Problem ist aber dass ich nichts gefunden habe in der Bukkit Dokumentation was der Sache annaehernd nahe kommen wuerde. Eventuell funktioniert es auch wenn du dir einen Scheduler anlegst und darin das Inventory aenderst, ich wuerde aber nicht darauf wetten.
 

HerrInfo

Mitglied
Alternativ koenntest du auch das Iventory aendern bei jedem, uh, "Frame", damit haettest du eine solche Animation.
Daran hatte ich auch gedacht. Dabei hat sich für mich nur das Problem ergeben, dass Threads in Bukkit nicht so richtig funktionieren und man es nur mit einem Bukkit runnable machen kann. Dort laufen die Berechnungen aber wieder synchronisiert und stoppen nicht zum passenden Moment und ich weiß nicht, wie ich erst auf den Stopp des vorherigen warten kann.
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal ist die große Frage: Wieso zwingend mehrere Threads? Mal unabhängig von der Thematik, die Robert benannt hat:
Es reicht auch ein Thread, der dann in regelmäßigen, kurzen Abständen den Zustand der Reihen verändert. Wenn du alle 50ms einen neuen Zustand setzen kannst, dann kannst Du die Reihen unterschiedlich schnell machen:
  • Bei jedem Durchlauf eine neue Position setzen.
  • Bei jedem zweiten Durchlauf eine neue Position setzen
  • ...
Und natürlich kannst Du die Positionen unterschiedlich neu setzen ... Um wie viel etwas weiter gedreht wird, kannst Du ja auch beeinflussen.

Aber unabhängig davon musst du den Zustand der einzelnen Reihen doch eh kennen. Darauf kannst Du dann auch reagieren. Die zweite Reihe kann sich den Zustand der ersten Reihe anschauen und dann darauf basierend agieren. Bei mehreren Threads musst Du aber aufpassen - ggf. muss dann eine Variable auch volatile sein, damit ein Thread Veränderungen eines anderen Threads mitbekommt.

Aber durch die Client-Server Problematik wirst Du da so fein vermutlich gar nichts machen können.... Daher ist das mehr eine allgemeine Antwort.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Casino Simulator - Leute gesucht Spiele- und Multimedia-Programmierung 0
K Casino Spiele UI Spiele- und Multimedia-Programmierung 7
B Animation Spiele- und Multimedia-Programmierung 4
Meeresgott Morph Targets und Skeleton Animation Spiele- und Multimedia-Programmierung 2
J (Libgdx) animation nur einmal in einem Event aufrufen Spiele- und Multimedia-Programmierung 1
N Animation funktioniert icht wie sie soll Spiele- und Multimedia-Programmierung 10
K Animation fliegendes JLabel Spiele- und Multimedia-Programmierung 1
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
R Animation mit Interpolator starten wenn Key pressed Spiele- und Multimedia-Programmierung 0
kaoZ Animation in eigenen Thread auslagern..... Spiele- und Multimedia-Programmierung 1
S Animation zieht "Spur" hinter sich her Spiele- und Multimedia-Programmierung 2
H [ANIMATION] Hintergrundbild nur einmal zeichnen Spiele- und Multimedia-Programmierung 3
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
0 Sprung Animation Spiele- und Multimedia-Programmierung 10
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
StrikeTom .gif animation als image abspielen Spiele- und Multimedia-Programmierung 2
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
baddestpoet Animation startet bei gedrückter Taste immer wieder von vorn Spiele- und Multimedia-Programmierung 12
M Animation Spiele- und Multimedia-Programmierung 5
aze Animation an TransformGroup anpassen Spiele- und Multimedia-Programmierung 5
S Animation mit repaint Spiele- und Multimedia-Programmierung 2
K "Animation" funktioniert nur bedingt. Spiele- und Multimedia-Programmierung 8
W Flüssige Animation Spiele- und Multimedia-Programmierung 8
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
D Problem mit Animation bei Little Fighter Spiele- und Multimedia-Programmierung 5
R Double Buffering in Animation ich bekomms einfach nicht hin? Spiele- und Multimedia-Programmierung 3
G GL4Java Animation erstellen Spiele- und Multimedia-Programmierung 2
T Geschwindigkeit einer Animation aendern Spiele- und Multimedia-Programmierung 6
S 3ds animation einbinden Spiele- und Multimedia-Programmierung 3
A Animation mit jmonkeyengine Spiele- und Multimedia-Programmierung 10
S Gif Animation aus Prog heraus erstellen Spiele- und Multimedia-Programmierung 11

Ähnliche Java Themen

Neue Themen


Oben