HashMap gibt NullPointerException aus?

Hey,

ich programmiere gerade mit Java ein Minecraft-Plugin, welches beim Joinen aus der Datenbank die Coins-Anzahl eines Spielers in eine HashMap setzt und beim Quit die Anzahl aus der HashMap in die Datenbank einträgt.

Ich kann es zwar auch so machen, dass man immer wenn man z.b. /coins eingibt die Abfrage aus der Datenbank bekommt, allerdings ist es nicht so serverauslastend wenn man es mit einer HashMap macht.

Beim joinen werden die Coins auch richtig aus der Datenbank ausgelesen und in die HashMap gesetzt. Zudem wird aus der HashMap die gespeicherte Zahl auch richtig ausgegeben.

Wenn ich nun allerdings beim Quit die Anzahl aus der HashMap in die Datenbank einsetzen möchte, bekomme ich einen NullPointer zurück und ich finde schon seit Tagen keinen Fehler.

Ich habe mir alles mögliche einzeln ausgeben lassen, was auch einzeln funktioniert aber zusammen nicht funktioniert.

Hier ist die Zeile:

MySQL.setCoins(Bukkit.getOfflinePlayer(e.getPlayer().getName()).getUniqueId().toString(), MySQL.local_coins.get(e.getPlayer()));

--------------------

Die "MySQL.setCoins()" Methode funktioniert wenn ich die anderweitig verwende, die UUID wird mit "Bukkit.getOfflinePlayer(e.getPlayer().getName()).getUniqueId().toString()" richtig ausgegeben und die Anzahl aus "MySQL.local_coins.get(e.getPlayer()))" wird einzeln auch richtig ausgegeben.

Wenn ich das allerdings so nutze wie ich bei der Zeile benutze, bekomme ich den NullPointer.

Danke im Voraus :)

Computer, Programmieren, Java, Minecraft, Minecraft plugin
2 Antworten
Minecraft Kiste Items sortieren SPIGOT?

Servus,
ich möchte, dass in der Kiste die Items automatisch gestackt werden.
Ich bin da jz einige Stunden dran und weiß nicht mehr wie ichs machen könnte.

Hier was ich jz derzeit geschrieben habe:

ItemStack stack = null;
                    int itemPos = 0;
                    for(int c = 0; c < chestData.getSnapshotInventory().getSize(); c++) {
                        if(chestData.getSnapshotInventory().getItem(c) != null) {
                            if(stack == null) {
                                if(chestData.getSnapshotInventory().getItem(c).getAmount() != chestData.getSnapshotInventory().getItem(c).getMaxStackSize()) {
                                    stack = chestData.getSnapshotInventory().getItem(c);
                                    stack.setAmount(chestData.getSnapshotInventory().getItem(c).getAmount());
                                    itemPos = c;
                                }
                            }else if(stack.equals(chestData.getSnapshotInventory().getItem(c))){
                                if(stack.getAmount() + chestData.getSnapshotInventory().getItem(c).getAmount() >= stack.getMaxStackSize()) {
                                    int distance = stack.getMaxStackSize() - stack.getAmount();
                                    chestData.getSnapshotInventory().setItem(itemPos, stack);
                                    stack.setAmount(stack.getMaxStackSize());
                                    chestData.getSnapshotInventory().getItem(c).setAmount(chestData.getSnapshotInventory().getItem(c).getAmount()-distance);
                                }else {
                                    stack.setAmount(stack.getAmount() + chestData.getSnapshotInventory().getItem(c).getAmount());
                                    chestData.getSnapshotInventory().getItem(itemPos).setAmount(stack.getAmount());
                                }
                            }
                            
                            
                        }
                    }

DAnke im Vorraus!!

Computer, Programmieren, Java, Minecraft, Minecraft Server, Spigot, Minecraft plugin, Minecraft Plugins programmieren, Spiele und Gaming
1 Antwort
Java: Minecraft Plugin Code fehler?

Ich habe jezt für meinen Bukkit server ein kleines clear chat Plugin geschrieben. Aber es funktioniert nicht. Wenn ich auf meinem Server(1.15.2) /clearchat schreibe, dann wird immer der String aus der plugin.yml Datei, bei usage: angezeigt. Was ist falsch? Hier ist der Code:

package package1;

import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.plugin.java.JavaPlugin;

import com.mojang.brigadier.Command;

public class HauptKlasse extends JavaPlugin {
    private String pluginName=this.getDescription().getName();
    private String pluginVers=this.getDescription().getVersion();
    private int timer=100;
    
    @Override
    public void onEnable() {
        System.out.println(" ");
        System.out.println("["+pluginName+"] §aPlugin gestartet! Version: "+pluginVers);
        System.out.println(" ");
    }
    
    @Override
    public void onDisable() {
        System.out.println(" ");
        System.out.println("["+pluginName+"] §aPlugin ausgeschaltet! Version: "+pluginVers);
        System.out.println(" ");
    }

    @SuppressWarnings("rawtypes")
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
        
        Player player=null;
        if(sender instanceof Player) {
           player=(Player) sender;
        }
        
        if(((CommandSender) cmd).getName().equalsIgnoreCase("clearchat")) {
            if(sender.hasPermission("system.clearchat")) {
                while(timer>0) {
                    timer--;
                    Bukkit.broadcastMessage(" \n");
                }
                Bukkit.broadcastMessage("§9[Server]§cDer Chat wurde von "+sender+" geleert.");
                timer=100;
                return true;
            } else {
                player.sendMessage("§9[Server]§cDas darfst du nicht.");
            }
        }
        
        return false;
        
    }
}

Danke schonmal!

LG

PC, Computer, Schule, Programmieren, Java, Minecraft, developer, development, Eclipse, EDV, EDV-Kenntnisse, Informatik, Informatiker, Plug-in, Technologie, Minecraft plugin, Spiele und Gaming, eclipse java
3 Antworten
Bukkit Plugin Programmierung: Warum werden meine Spieler nicht teleportiert?

ich habe unten mal den Kommentar hinzugefügt aber irgendwie kann ich mich nicht zu den leuten die in dem Navigator drin sind teleportieren kann mir da jemand weiterhelfen

 public void onClick(InventoryClickEvent e) {
  Player p = (Player) e.getWhoClicked();
  if (e.getClickedInventory() != null && e.getCurrentItem() != null) {
   if (!QSG.main.alive.contains(p)) {
    e.setCancelled(true);
    if (e.getClickedInventory().getType().getDefaultTitle().equals("§cNavigator §7(Rechtsklick)")) {
     String playerName = e.getCurrentItem().getItemMeta().getDisplayName();
     Player port = (Player) Bukkit.getPlayer(playerName);
     p.teleport(port);
     p.sendMessage(QSG.main.pr + "§7Du wurdest zu §e" + port + " §7teleportiert");
    }
   }
  }
 }
 @SuppressWarnings("deprecation")
 @EventHandler
 public void onInteract(PlayerInteractEvent e) {
  Player p = e.getPlayer();
  if (!QSG.main.alive.contains(p)) {
   if (p.getItemInHand().getType() == Material.COMPASS) {
    int length = (QSG.main.alive.size() / 9) + 1;
    Inventory inv = Bukkit.createInventory(null, 9 * length, "§cNavigator §7(Rechtsklick)");
    for (Player alive : QSG.main.alive) {
     ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1, (short) 3);
     SkullMeta skullmeta = (SkullMeta) head.getItemMeta();
     skullmeta.setOwner(alive.getName());
     skullmeta.setDisplayName(alive.getDisplayName());
     head.setItemMeta(skullmeta);
     inv.addItem(head);
    }
    p.openInventory(inv);
   }
  }
 }
Programmieren, Minecraft, Bukkit, Spigot, Minecraft plugin
1 Antwort
Minecraft Server richtig mit Plugins konfigurieren?

Hey!

Ich und ein paar Kollegen sind gerade dabei einen Server für uns zu erstellen und konfigurieren. Wir haben aber ein paar schwierigkeit und wissen nicht weiter. Wir hoffen auf Gutefrage hilfe zu bekommen.

Zum Inhalt: Es gibt eine Lobby mit 3 Portalen: "Hardcore", "2v2" und "Arena".

Hardcore: Das ist eine Welt, die wir schon seit längerem haben und wie der Name sagt im hardcore Modus ist.

2v2: Eine random generierte normale Welt wo zwei Teams in eine Ecke gehen (1000x1000 Blöcke) und nach 15 Minuten "Aufwärmphase" eine Barriere 45 Minuten lang nach innen geht bis die Teams sich treffen und es zum Showdown kommt. Den Modus wollen wir auch mit Mods ausprobieren.

Arena: Hier kommt man in eine Lobby wo entschieden werden kann wie genau in einer Arena und auf welcher Map gekämpft wird. Es kann folgendermaßen ausgewählt werden: 1v1, 2v2, 1v1v1, 3v3, 1v1v1v1 usw. Außerdem gibt es vorgefertigte Kits

Zu den Problemen dir wir haben (Eine Liste mit allen Plugins die wir haben steht unten):

1). Man hat einen Kompass in der Hand auf jeder Welt welchen man nicht weg machen kann und eine Anzeige (so Bossanzeige mäßig) steht ebenfalls immer oben (diese soll nur in der Lobby erscheinen) (hub menu mäßig - Plugin: Hubbasics).

2.) In der Hardcore Welt ist man nicht im hardcore modus.

3.) Wie kann man automatisieren (Problem bei 2v2 und Arena). Beispiel 2v2 - man kommt erst in eine "unterLobby" und dort kann man auswählen wer mit wem in einem Team ist. Wenn das fertig ist wird man teleportiert in jeweils den beiden Ecken und ein Countdown zählt runter und es kann beginnen (also auch zone). Beispiel Arena(soll so sein wie bei Hypixel): man kommt in eine "unterlobby" und kann entscheiden wer mit wem und gegen wen spielt, das kit und die Map. Dann kommt auch ein Countdown und wenn ein Team gewinnt endet das Spiel und alle kommen in die unterlobby (map wird zurückgesetzt)

4.) Wie macht man dass mab nur bei 2v2 Mods benutzen kann

Liste aller Plugins die wir haben:

worldguard, worldedit, timber, multiversecore/-inventories/-NetherPortals/-portals, greatkits, hubbasics, GreatKits, BetterSleeping

Server, Computer, Minecraft, Minecraft Mods, Minecraft Server, minecraftserver, Minecraft plugin, Spiele und Gaming
1 Antwort
Minecraft plugin scheduler?

Hallo leute, sobald ich zwei cooldowns parallel am laufen habe, und einer durch ist, gibt es beim zweiten cooldown folgende errormeldung. Weiß jemand wo das Problem ist?:

java.lang.NullPointerException
    at de.johannes.hcfabilitys.main.ABILITYT$1.run(ABILITY.java:101) ~[?:?]
    at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:71) ~[spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:723) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [spigot-1.8.8-R0.1-SNAPSHOT-latest.jar:git-Spigot-db6de12-18fbb24]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_241]

Hier der code:

public static void inGameCountDown(Player p, Player t) {
tp = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getPlugin(), new Runnable() {
@Override
public void run() {
System.out.println("Activating run for: " + p.getName());
if(cooldown.get(p) == null) {
returnInventory(p, t);
Bukkit.getScheduler().cancelTask(tp);
}
if (cooldown.get(p) == 1) {
System.out.println("Canceling cooldown for: " + p.getName());
Bukkit.getScheduler().cancelTask(tp);
cooldown.remove(p);
returnInventory(p, t);
}
if(cooldown.containsKey(p)) {
int c = cooldown.get(p);
c--;
System.out.println("Hashmap contains key for: " + p.getName() + "   " + c);
cooldown.put(p, c);
}
}
}, 20, 20);
}
Java, Bukkit, Spigot, Minecraft plugin, Minecraft Plugins programmieren
1 Antwort

Meistgelesene Fragen zum Thema Minecraft plugin