Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Ja Bukkit blockt den Spieler der über BungeeCord hergeschickt wird und daher wird der Spieler über BungeeCord wieder auf den ursprünglichen Server geschickt das willst du doch erreichen?
 
Moin Leute,

ich habe eine Frage zu BungeeCord Plugins.

Wie kann ich abfragen ob ein Server vom BC Netzwerk voll ist?

Gruß,
-lusu007
Beim Switchen benutzt du das ServerSwitchEvent.
Beim Joinen des "Netzwerkes" benutzt du das LoginEvent oder PreLoginEvent. Was du eben erreichen willst.
So müsstest du die Abfrage machen:
Code:
            if(BungeeCord.getInstance().getServerInfo("server").getPlayers().size() >= 24) {
              
            }
Es wäre aber viel sinnvoller, wenn du das eben durch Bukkit machst. Es kommt drauf an, was du überhaupt willst.
 
@CallMeGod Das Problem ist, dass die unten aufgelisteten Fragen nichtmal gestellt werden. Sie wollen einfach die Lösung. Nehmen wir als Beispiel weiter vorne das hier:
Hey, ich habe ein Soup plugin geschrieben.

Code:
@EventHandler
    public void onInteract(PlayerInteractEvent e)
    {
        Player p = e.getPlayer();
        if(e.getAction() == Action.RIGHT_CLICK_AIR | e.getAction() == Action.RIGHT_CLICK_BLOCK)
        {    
            if(e.getMaterial().equals(Material.MUSHROOM_SOUP)){
                if(Main.soupingame.contains(e.getPlayer().getName())){
                    if(p.getHealth() < 20){                    
                        if(p.getHealth() >= 16){
                            p.setHealth(20);

                            ItemStack bowl = new ItemStack(Material.BOWL);
                            p.setItemInHand(bowl);
                        }
                        else{
                            int health = (int) p.getHealth();
                            p.setHealth(health + 4);
                        
                            ItemStack bowl = new ItemStack(Material.BOWL);
                            p.setItemInHand(bowl);
                        }
                    }
                }
                else{
                    e.getPlayer().sendMessage(Main.error);
                }
            }
        }
    }

Nun habe ich das Problem, wenn ich die Muschroom Bowl rechtsklicke und dabei in die Luvt zeige, kommen nur Herzen hinzu und die Bowl wird nicht ersetze. Aber wenn ich auf den Boden (Block) zeige funktioniert alles.
Was habe ich falsch gemacht?
Der Fehler ist eindeutig, klar man übersieht das gerne mal, alles kein Problem.
Ich würde dir raten, nicht das bitweise "oder" zu verwenden.
Spätestens hier hat man den Fehler.. auch wenn man das "bitweise" weglässt, kommt man drauf.
Da das hier allerdings kein vorgefertigter Code ist, welchen man Copy-Pasten kann und man wie in diesem Falle wohl kein Java kann, wird es ignoriert, und einfach mal "Ok" geschrieben btw. vom eigentlichen Inhalt abgewandt.
Könnte es daran liegen, das setItemInHand() nicht geht, wenn man in die Luft pointed? Das sollte das problem sein. Wie kann ich das lösen?
Gesagt - Getan.
Nun spricht man, in diesem Falle Sheigutn, die Person nochmal auf das Problem an..
@geilNico Zitierst meine Nachricht, aber ignorierst den Inhalt völlig? Cool.
Nun, da man in 10 Minuten kein Java lernt, schreibt man natürlich es geht nicht. Wie auch, wenn man es nicht versteht, was eigentlich das Grundlegende ist.
Dein Tipp bringt mir auch nichts. paasiert das gleiche.
Nun, da er einen vorgefertigten Code provozieren will, hofft er hiermit drauf, was aber nach hinten losging und er nun lächerlich dasteht.
Hast ihn wahrscheinlich nicht mal verstanden.
Hier wird er auf seine Non-Fähigkeit angesprochen und da es offensichtlich stimmt, wird es ignoriert, da man ja ach so toll ist.
Gruß,
Gelox_
 
Beim Switchen benutzt du das ServerSwitchEvent.
Beim Joinen des "Netzwerkes" benutzt du das LoginEvent oder PreLoginEvent. Was du eben erreichen willst.
So müsstest du die Abfrage machen:
Code:
            if(BungeeCord.getInstance().getServerInfo("server").getPlayers().size() >= 24) {
             
            }
Es wäre aber viel sinnvoller, wenn du das eben durch Bukkit machst. Es kommt drauf an, was du überhaupt willst.

Ich möchte, wenn ein Spieler joint das er zufällig entweder auf Lobby 1 oder auf Lobby 2 connected.
 
Kann mir jemand helfen?
Ich habe ein kleines Plugin mit Config geschrieben, aber irgendwie funktioniert das mit den Texten nicht richtig!
Hier mein Code:

Code:
public class Gamemode extends JavaPlugin {
   
    @Override
    public void onEnable() {
        System.out.println("[Simple Gamemode] Plugin started!");
        loadConfig();
    }

    @Override
    public void onDisable() {
        System.out.println("[Simple Gamemode] Plugin deactivated!");
    }
   
   
   
   
   
    public boolean onCommand(CommandSender sender,Command cmd, String cmdlabel, String[] args ) {
        Player p = (Player) sender;
       
       
       
        if(cmd.getName().equalsIgnoreCase("heal")) {
           
            String msg = getConfig().getString("heal.msg");
            p.setHealth(20.0);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
            return true;
        }
       
       
       
       
        return false;
    }
    public void loadConfig() {
       
        getConfig().options().copyDefaults(true);
        saveConfig();
       
       
    }
}

Hier die plugin.yml
Code:
name: SimpleGamemode
version: 1.0
author: Lel
main: me.lel.simplegm.Gamemode
commands:
     heal:
          description: Heal
          usage: </command>

Und noch die config.yml:
Code:
heal:
  msg: '&6Du wurdest geheilt!'


Das Problem ist aber nun, dass wenn ich /heal eingebe, werde ich zwar geheilt aber die Nachricht wird nicht angezeigt und es erscheint: An internal error occured while attemting to perform this command

Ich hoffe mir kann jemand sagen, wo das Problem liegt

LG Lel
 
Das Problem ist aber nun, dass wenn ich /heal eingebe, werde ich zwar geheilt aber die Nachricht wird nicht angezeigt und es erscheint: An internal error occured while attemting to perform this command

Ich hoffe mir kann jemand sagen, wo das Problem liegt
Wie wäre es mit dem StackTrace? Der sagt dir auf die Zeile genau wo und was der Fehler ist

//Edit
Ist gar nicht nötig. Der Fehler ist, dass du vergessen hast, den CommandExecutor zu registrieren.
PHP:
public class Gamemode extends JavaPlugin implements CommandExecutor
&
PHP:
public void onEnable() {
    // ...
    getCommand("heal").setExecutor(this);
}

Außerdem darfst du den CommandSender doch nicht einfach so zum Spieler casten (facepalm). Was, wenn die Konsole den Command ausführt?
PHP:
if (sender instanceof Player) {
    Player p = (Player) sender;
    // do your stuff
} else {
    sender.sendMessage("Only players can use that!");
}

Des Weiteren gibst du false zurück, wenn ein Command eingegeben wird, welcher nicht "heal" ist. Das bedeutet jedes mal, wenn jemand einen Command eingibt, der nicht "heal" lautet, wird demjenigen automatisch angezeigt, wie er den command heal zu benutzen hat.
 
Zuletzt bearbeitet:
Wie wäre es mit dem StackTrace? Der sagt dir auf die Zeile genau wo und was der Fehler ist

//Edit
Ist gar nicht nötig. Der Fehler ist, dass du vergessen hast, den CommandExecutor zu registrieren.
PHP:
public class Gamemode extends JavaPlugin implements CommandExecutor
&
PHP:
public void onEnable() {
    // ...
    getCommand("heal").setExecutor(this);
}

Außerdem darfst du den CommandSender doch nicht einfach so zum Spieler casten (facepalm). Was, wenn die Konsole den Command ausführt?
PHP:
if (sender instanceof Player) {
    Player p = (Player) sender;
    // do your stuff
} else {
    sender.sendMessage("Only players can use that!");
}

Des Weiteren gibst du false zurück, wenn ein Command eingegeben wird, welcher nicht "heal" ist. Das bedeutet jedes mal, wenn jemand einen Command eingibt, der nicht "heal" lautet, wird demjenigen automatisch angezeigt, wie er den command heal zu benutzen hat.
Man braucht keinen CommandExecutor in der Hauptklasse. Es geht auch, wenn du if(cmd.getname() ... ) machst & sie in plugin.yml einträgst.


Kann mir jemand helfen?
Ich habe ein kleines Plugin mit Config geschrieben, aber irgendwie funktioniert das mit den Texten nicht richtig!
Hier mein Code:

Code:
public class Gamemode extends JavaPlugin {
 
    @Override
    public void onEnable() {
        System.out.println("[Simple Gamemode] Plugin started!");
        loadConfig();
    }

    @Override
    public void onDisable() {
        System.out.println("[Simple Gamemode] Plugin deactivated!");
    }
 
 
 
 
 
    public boolean onCommand(CommandSender sender,Command cmd, String cmdlabel, String[] args ) {
        Player p = (Player) sender;
     
     
     
        if(cmd.getName().equalsIgnoreCase("heal")) {
         
            String msg = getConfig().getString("heal.msg");
            p.setHealth(20.0);
            p.sendMessage(ChatColor.translateAlternateColorCodes('&', msg));
            return true;
        }
     
     
     
     
        return false;
    }
    public void loadConfig() {
     
        getConfig().options().copyDefaults(true);
        saveConfig();
     
     
    }
}

Hier die plugin.yml
Code:
name: SimpleGamemode
version: 1.0
author: Lel
main: me.lel.simplegm.Gamemode
commands:
     heal:
          description: Heal
          usage: </command>

Und noch die config.yml:
Code:
heal:
  msg: '&6Du wurdest geheilt!'


Das Problem ist aber nun, dass wenn ich /heal eingebe, werde ich zwar geheilt aber die Nachricht wird nicht angezeigt und es erscheint: An internal error occured while attemting to perform this command

Ich hoffe mir kann jemand sagen, wo das Problem liegt

LG Lel
Probier mal:
Code:
String msg = getConfig().getString("heal.msg");
msg = ChatColor.translateAlternateColorCodes('&', msg);
p.setHealth(20.0D);
p.sendMessage(msg);
So müsste es eigentlich gehen..

//EDIT: Vergiss nicht eine instanceof-Abfrage zu machen. Sonst kommt ein Fehler, wenn du den Befehl mit der Konsole ausführt. (HerrDosHD hat dir's gezeigt)
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: codex01
@iGamePlayHD Funktioniert leider immer noch nicht :/

Hier der Fehler in der Konsole:
Code:
[20:29:05 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'heal
' in plugin SimpleGamemode v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
1) ~[spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
r.java:643) ~[spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerCon
nection.java:1083) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java
:918) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
:26) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
:53) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
?:1.7.0_72]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_72]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:6
86) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:3
16) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
27) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:530) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at java.lang.Thread.run(Unknown Source) [?:1.7.0_72]
Caused by: java.lang.NoClassDefFoundError: net/md_5/bungee/api/ChatColor
        at me.texasfons.simplegm.Gamemode.onCommand(Gamemode.java:62) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        ... 14 more
 
@iGamePlayHD Funktioniert leider immer noch nicht :/

Hier der Fehler in der Konsole:
Code:
[20:29:05 ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'heal
' in plugin SimpleGamemode v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:18
1) ~[spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServe
r.java:643) ~[spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerCon
nection.java:1083) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java
:918) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
:26) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java
:53) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13) [spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [
?:1.7.0_72]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.7.0_72]
        at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:6
86) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:3
16) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:6
27) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java
:530) [spigot18.jar:git-Spigot-da32fe1-df0b4c1]
        at java.lang.Thread.run(Unknown Source) [?:1.7.0_72]
Caused by: java.lang.NoClassDefFoundError: net/md_5/bungee/api/ChatColor
        at me.texasfons.simplegm.Gamemode.onCommand(Gamemode.java:62) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
got18.jar:git-Spigot-da32fe1-df0b4c1]
        ... 14 more
Du darfst nich die ChatColor der BungeeAPI importieren xD und bitte lerne Stacktraces zu lesen.
 
wie checke ich ob eine tabelle in mysql datenbank existiert?? also nicht was darin sondern nur die tabelle :D danke ;D
 
Außerdem darfst du den CommandSender doch nicht einfach so zum Spieler casten (facepalm). Was, wenn die Konsole den Command ausführt?
Naja ich mach meine Befehle auch immer ohne der überprüfung da ich davon ausgehe das ich nicht die Befehle in der Console benutzen möchte :D

Sinnvoll ists nur wenn man diese veröffentlicht :)
 
  • Like
Reaktionen: Gelox_
Naja ich mach meine Befehle auch immer ohne der überprüfung da ich davon ausgehe das ich nicht die Befehle in der Console benutzen möchte :D

Sinnvoll ists nur wenn man diese veröffentlicht :)
Ich mach das einfach zur Vollständigkeit, da es meiner Meinung nach einfach dazu gehört c:
Man kann nie davon ausgehen, dass der Benutzer dein Plugin "richtig" verwendet c:
 
Naja ich mach meine Befehle auch immer ohne der überprüfung da ich davon ausgehe das ich nicht die Befehle in der Console benutzen möchte :D

Sinnvoll ists nur wenn man diese veröffentlicht :)
Eigentlich unnötig..
Falsch... Das wäre schlechter Code. Du kannst nicht einfach was zu etwas casten, wenn es die Möglichkeit gibt, dass es das nicht ist. Selbst wenn man das nicht vor hat ist es trotzdem unsauberer Code.
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop