Bukkit programmieren: Wie kann ich eine "Playerbezogene Klasse" erstellen?

3 Antworten

Nachtrag zu meiner Antwort:

Ich denke ich verstehe dein Problem erst jetzt so wirklich. Du kannst Variablen nicht so anlegen, dass sie sich automatisch auf einen Player beziehen.

Du musst die Variablen selbst dem Player zuordnen. Das geht beispielsweise mit einer HashMap: https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html Du nimmst als Key die UUID eines Players und kannst über diese dann den zugewiesenen Wert abrufen oder verändern.

Wenn du mehrere Werte speichern möchtest legst du einfach eine neue Klasse an, die alle benötigten Werte enthält und speicherst diese in der HashMap.

Ich hoffe, dass diese Antwort hilfreicher ist ;)

MfG

Trackfreak

Danke das hilft mir schon etwas mehr :)

Es wäre auch bei einem Scoreboard das gleiche Problem, wenn ich die Kills für jeden einzelnen Spieler abrufen möchte.

Würde das auch mit einer Hashmap gehen oder gäbe es eine einfachere Variante?

0

Hi,

es gibt verschiedene Methoden, um an die UUID oder die Instanz eines Spielers zu kommen:

  1. Per Event: Wenn ein Spieler eine Nachricht im Chat schreibt, um zu voten wird ein Chat Event erzeugt. Dieses kannst du über einen Eventhandler abfangen. In den Argumenten des Events findet sich der Player.
  2. Die Namen von Spielern sollten nicht mehr genutzt werden um Spieler zu identifizieren, da sich Spieler sonst kurz aus- und dann wieder mit anderem Name einloggen könnten. Damit könnten die Spieler das Ergebnis der Abstimmung manipulieren. Stattdessen sollte man Spieler per UUID identifizieren. Diese kann man mittels https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/OfflinePlayer.html#getUniqueId() ermitteln und den zugehörigen Player per Bukkit.getPlayer(uuid) bestimmen.

Um zu speichern welche Spieler bereits gevoted haben würde sich eine Liste oder HashMap anbieten, welche den Spieler, oder seine UUID zusammen mit seiner Stimme speichert. So kannst du immer überprüfen, ob ein Spieler schon abgestimmt hat.

MfG

Trackfreak

Mit getname (er sucht glaib damit den spieler)

Oder getplayer eines von beiden, sry hab das ma in irgend ein tutorial gesehen

0

Char zu int?

Hallo Leute, ich habe eine Aufgabe, könnt ihr mir helfen. Und etwas dazu erklären bitte. Danke für eure Hilfe.

Erstellen Sie ein Programm welches folgende Schritte abarbeitet:

• Deklaration und Initialisierung einer Variable vom Typ char mit dem Wert F.

• Deklaration und Initialisierung einer Variable vom Typ int mit dem Wert 13.

• Deklarieren Sie eine weitere int Variable mit Namen Summe und weisen Sie ihr die Summe der beiden bereits erstellten Variablen zu.

• Geben Sie den Wert der Variable Summe auf der Kommandozeile aus.

Erklären Sie, wie der Wert des Ergebnisses zu Stande kommt.

Achten Sie auf eine gute Code Formatierung. Achten Sie auch darauf, das Ihr Name in der Datei als Kommentar vorhanden ist.

Beispiel:

// Max Mustermann

// 552348

public class Primzahl { } 

...zur Frage

Java integer Variable soll sich +1 addieren

Hallo. Wie kann ich eine Integer Variable mit sich selbst mit 1 addieren?? Ich will, dass mein Knopf eine 0 anzeigt, welche beim Klicken zu einer 1 wird, beim zweiten klicken zu einer 2, beim dritten zu einer 3 usw usw usw.

Das hier ist meine Variablen-class und bei Zeile 3 kommt der Fehler, dass die Variable doppelt da ist. Genau so geht das aber in Python Batch usw. Es muss also auch in Java gehen.

public final class Variablen{
         public static int nummer(){
          int x = x+1;
         return x;
        } 
}

Hoffentlich kann mir wer helfen. PS: Die Variable wird aus einer anderen Class abgerufen mit folgendem Text:

package de.Leon.java;

import javax.swing.*;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Fenster extends JFrame

    implements ActionListener{
    
    private JButton  Knobb = new JButton("Drücken");
    private JButton DesIsAuchEnKnobb = new JButton("Zahlen");
    
    public Fenster(){
        
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Knobb.addActionListener(this);
    DesIsAuchEnKnobb.addActionListener(this);
    
    getContentPane().add(Knobb);
    getContentPane().add(DesIsAuchEnKnobb, BorderLayout.SOUTH);
    
    pack();
    
    setLocationRelativeTo(null);
    
    setVisible(true);
    
    }

    public static void main(String[] args) {
        new Fenster();
    }
    

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource()==Knobb){
            Knobb.setText("Gedrückt");
        }
        if (e.getSource()==DesIsAuchEnKnobb) {
            DesIsAuchEnKnobb.setText("" + Variablen.nummer());
        }
    }
    
}

Ich bin noch am Java lernen und kann also nicht sonderlich viel^^

Ich benutze Eclipse

...zur Frage

Java, Verschiebung innerhalb einer abstrakte Klasse?

Hey, ich habe eine zweite Aufgabe gelöst, bis auf die Aufgabe mit Funktionen (3. Punkt). Ich frage mich, ob das derzeitige Ergebnis stimmt und wie der dritte Punkt gelöst werden soll.

abstract class Figure {
  private Point p;

  Figure() {
    this.p = new Point(0, 0);
  }

  Figure(int s, int t) {
    this.p = new Point(s, t);
  }

  /*public void moveTo(int x, int y) {
    p.moveTo(x, y);
  }
  public void moveRel(int x, int y) {
    p.moveRel(x, y);
  }*/

  public abstract int getsize();

  public abstract void(int x);

  public abstract int getflaeche();

  public abstract int getUmfang();
}

Aufgabe:

Erstellen Sie nun eine abstrakte Klasse Figure die ebene geometrische Figuren repräsentiert.

  1. Sie besitzt ein gekapseltes Datenelement vom Typ Point das die Position der Figuren der Ebene bestimmt.
  2. Ein Standardkonstruktor und ein Konstruktor mit zwei int-Parametern erzeugen jeweils entsprechende Exemplare von Point und initialisieren damit das Datenelement der Klasse.
  3. Es gibt Methoden zum absoluten und relativen Verschieben der Figur. Nutzen Sie dazu die entsprechenden Methoden der Klasse Point.
  4. Es werden die Schnittstellen von vier weiteren Methoden vereinbart: Zum Abfragen und zum anderen der Größe der Figur (die jeweils durch einen int-Wert bestimmt sein wird), zur Berechnung des Flächeninhalts sowie des Umfangs der Figur.
...zur Frage

Minecraft Bukkit Plugin 1.8.3 fehler Grundgerüst

Ich habe das Grundgerüst für ein Plugin geschrieben: package me.main.main;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;


public class main extends JavaPlugin{
    @Override
    public void OnEnable() {
        System.out.println();
    }
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        return false;
    }
}   

Plugin.yml:

main: me.main.main.main name: Test version: 1.0

Und Eclipse zeigt mir bei OnEnable() den Fehler an das ich das @Override löschen soll. Dann funktioniert das Plugin aber nicht mehr. Was soll ich tun?

...zur Frage

[Bukkit Plugin Programmierung] Scheduler in onEnable, der nach bestimmter Zeit einen Plugin Befehl ausführt?

Hallo erstmal :D

Ich versuche mich seit ein paar Tagen an einfachen Bukkit Plugins ... ^^ Ich bringe mir damit auch gleichzeitig Java bei, da ich auf dem Gebiet noch nichts gemacht habe ;)

Mein momentanes Problem ist jetzt:

Ich würde gerne einen von mir erstellten Befehl beim Serverstart automatisch mit einem Repeating Scheduler in einem Loop ausführen.

Nur hängt es da bei mir ^^ Wie schaffe ich es, einen Sheduler in onEnable zu packen, der dann Bukkit.dispatchcommand ausführt? ^^ Denn dafür brauche ich ja einen sender, welchen in nur durch ein public boolean bekomme xD Den kann man ja schlecht in einen public void hauen ^^

Oder kann ich vielleicht eher den Inhalt des Befehls mit einem Scheduler in onEnable packen? Der Befehl würde das ausführen:

w.setThundering(false);
w.setStorm(false);
w.setWeatherDuration(1000000);

Aber dafür benötige ich ja auch einen public boolean ... ^^

Ich steh' da echt grad ein wenig auf dem Schlauch :D Bitte habt etwas Nachsicht ... Ich mach das echt erst seit 3 Tagen und muss noch viiiel lernen ^^

Ich bedanke mich schon einmal vielmals bei euch und wünsch' euch noch ne angenehme Nacht / Morgen ^^

MfG Tim ;)

...zur Frage

Bukkit Plugin Programmieren Events?

Hey, ich will ein Lobby Plugin (Bukkit) programmieren brauche aber noch hilfe:

  • Wie testet man ob ein Spieler Feuer mit der Hand ausschlägt?
  • Wie testet man ob ein Spieler brennt?
  • Wie testet man ob ein Spieler ein Feuerzeug benutzt?
  • Wie testet man ob ein Spieler ein Eimer leert / füllt?

Ich möchte all diese Sachen e.setCancelled(true); machen!

Mein Code bis jz mit Block break + Block build (Listener):


package Listener;

import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent;

public class noBuild implements Listener {

@EventHandler
public void onBlockBreak(BlockBreakEvent e){
    e.setCancelled(true);
}


@EventHandler
public void onBlockPlace(BlockPlaceEvent e){
    e.setCancelled(true);
}

}


...zur Frage

Was möchtest Du wissen?