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

int, der nur für einen Spieler gilt

D

deleted195658

Guest
Hey Leute!
Ich will einfach nicht kapieren, wie man macht, dass ein int nur für einen Spieler gilt ;/ Es wäre sehr nett, wenn ihr mir das sagen würdet...
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Speicher dir dein "int" für deinen Spieler in einer Map.
Am Ende legst du dir (vermutlich global) deine Map an. Müsste dann so aussehen:
Code:
Map<Player,Integer> playerIntMap = new HashMap<>();

Zugriff darauf:
Code:
if(playerMap.containsKey(player))
int i = playerIntMap.get(player);

Darauf schreiben:
Code:
playerIntMap.put(player, 5)
 
D

deleted195658

Guest
Speicher dir dein "int" für deinen Spieler in einer Map.
Am Ende legst du dir (vermutlich global) deine Map an. Müsste dann so aussehen:
Code:
Map<Player,Integer> playerIntMap = new HashMap<>();

Zugriff darauf:
Code:
if(playerMap.containsKey(player))
int i = playerIntMap.get(player);

Darauf schreiben:
Code:
playerIntMap.put(player, 5)
mhh, sry aber ich kapier das nicht so ganz, ich arbeite an einem VoteSystem, funktioniert auch alles, aber ich will machen, dass man schauen kann, wie oft ein Spieler bisher gevotet hat und dazu muss ich ja jedesmal wenn ein Vote empfangen wird seinen "Votewert" ändern.
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
Dann solltest du das dazuschreiben :p

Das einfachste wird wohl sein, wenn du dich in Config-Dateien einliest (Google hilft).
Wenn du dir das durchgelesen hast, wie das alles funktioniert, setzt du in deiner Config unter der entsprechenden UUID (Namen können sich ändern) einen Int, welche du auslesen kannst.

Im grunde genommen sieht das dann irgendwann so (oder so ähnlich) aus:
Code:
FileConfiguration config = getConfiguration(); // das musst du noch irgendwie machen, am besten globale Variable in deiner Main.

//Bekommen:
UUID uuid = player.getUUID();
int count = config.getInt(uuid.toString());

//addieren und speichern:
config.set(uuid.toString(), count+1);

Und dann musst du die Config noch entsprechend laden und speichern, aber das gibts zuhauf im Internet
 
D

deleted195658

Guest
mhh, also sozusagen so in der Class...
Code:
public class Votelistener implements Listener {
  
    private FileConfiguration config;
  
    UUID uuid = Player.getuuid();
    int count = config.getInt(uuid.toString());
  
  
    @EventHandler
    public void onPlayerVote(VotifierEvent e) {
        Vote v = e.getVote();
        Bukkit.getServer().broadcastMessage(ChatColor.GREEN + v.getUsername() + " hat für uns auf " + v.getServiceName() + " gevotet! Dafür hat er 1 Vote-Punkt bekommen und 1 Diamanten!");
      
        Player p = Bukkit.getServer().getPlayer(v.getUsername());
        if (p == null) {
            return;
        }
        p.getInventory().addItem(new ItemStack(Material.DIAMOND, 1));
        config.set(uuid.toString(), count+1);
  
      
    }
  

}
...und so in der main? @JOO200
Code:
public class main extends JavaPlugin {
  
    FileConfiguration config = getConfig();
 

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
442
Diamanten
228
@TommyboyTV wenn du deine FileConfiguration in deinem Listener privat deklarierst, kannst du nicht von der Main aus zugreifen. Meine Empfehlung wäre es, das in der Main zu deklarieren (Java Konventions beachten -> Klassennamen sollte groß sein (main -> MyPlugin oder sowas).
Danach übergibst du das im Konstruktor der Listener-Klasse über:
Code:
public VoteListener(FileConfiguration config) {
    this.config = config;
}

Wie du die Config lädst darfst du selbst ergoogeln.

Ansonsten: Du hast in deiner VoteListener-Klasse eine UUID und eine int global deklariert? Dir sollte klar sein, dass bei jedem Aufruf des Listeners eine andere UUID vorliegt, deswegen ist es nicht sinnvoll, diese global zu deklarieren.

Zuletzt musst du dir noch irgendeine Logik überlegen. Wenn du die config als globale Variable angibst, kannst du auf diese relativ einfach zugreifen, also mit
Code:
config.set(player.getUUID().toString, voteCount);
config.save(); // braucht normalerweise ein Try-Catch
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Du solltest auch irgendwo die ausstehenden Belohnung abspeichern. Derzeit prüfst du nur, ob er online ist. Und auch nur dann wird in der Config ein Wert hochgezählt.

Du behandelst außerdem auch eine andere Fälle nicht: Was passiert, wenn der Spieler gerade tot ist? Was wenn sein Inventar voll ist?
 
Oben