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

PolizeiDuty funktioniert nicht, warum?

Kraetzy

Redstoneengineer
Registriert
16 Dezember 2017
Beiträge
41
Alter
22
Diamanten
250
Minecraft
MinesuchtBOT
Hey,

Ich bekomme jedesmal die Nachrich "Du befindest dich nicht an der Dienststelle!", warum?

Code:
package fraktion_polizei;

import java.util.ArrayList;
import java.util.List;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;

import reallife.main.Main;


public class DutyP implements Listener, CommandExecutor {
    public static List<Player> PolizeiDuty = new ArrayList<>();
    public static List<Player> Ort = new ArrayList<>();
   

    @Override
    public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] args) {
       
        Player p = (Player) sender;
        if(sender instanceof Player);
        if(args.length == 0) {
            if(Ort.contains(p)) {
                if(!PolizeiDuty.contains(p)) {
                    PolizeiDuty.add(p);
                    p.sendMessage(Main.prefix + "§7Du bist nun im Dienst!");
                } else {
                    PolizeiDuty.remove(p);
                    p.sendMessage(Main.prefix + "§7Du bist nun nicht im Dienst!");
                }
               
               
            } else {
                p.sendMessage(Main.prefix + "§7Du befindest dich nicht an der Dienststelle!");
            }
        }
           
       
       
        return false;
    }
   
    @EventHandler
    public void onMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
       
        if(!Ort.contains(p)) {
            if(p.getLocation().getBlock().getType() == Material.STONE) {
                Ort.add(p);
            }
        } else {
            Ort.remove(p);
        }
       
    }
   
}
 
D

deleted196100

Guest
In deinem onMove Listener prüfst du ob an der Stelle an der sich der Spieler befindet ein Steinblock ist. Wenn dem so wäre würde der Spieler zerquetscht werden. Du solltest also den y-Wert der Spielerlocation um 1 verringern um den Block unter dem Spieler zu prüfen, ansonsten wird an der Stelle meistens Luft sein und folglich nichts passieren.

Mal davon abgesehen finde ich es sehr Fragwürdig eine "Dienstellle" anhand des Materials festzumachen, eventuell wäre es da sinnvoller die Koordinaten einer Dienststelle irgendwo in einer Config oder einer Datenbank zu speichern und anhand dieser Koordinaten prüfen ob der Spieler sich dort befindet.
 

Kraetzy

Redstoneengineer
Registriert
16 Dezember 2017
Beiträge
41
Alter
22
Diamanten
250
Minecraft
MinesuchtBOT
In deinem onMove Listener prüfst du ob an der Stelle an der sich der Spieler befindet ein Steinblock ist. Wenn dem so wäre würde der Spieler zerquetscht werden. Du solltest also den y-Wert der Spielerlocation um 1 verringern um den Block unter dem Spieler zu prüfen.

Mal davon abgesehen finde ich es sehr Fragwürdig eine "Dienstellle" anhand des Materials festzumachen, eventuell wäre es da sinnvoller die Koordinaten einer Dienststelle irgendwo in einer Config oder einer Datenbank zu speichern und anhand dieser Koordinaten prüfen ob der Spieler sich dort befindet.
Kannst du mir ggf. kurz den Code dazu geben?
 
D

deleted196100

Guest
Kannst du mir ggf. kurz den Code dazu geben?
Ich würd dir eher empfehlen dich selbst damit zu beschäftigen, wenn du irgendwelchen Code zusammenpastest kommt da wahrscheinlich nichts brauchbares dabei raus. Der Lerneffekt dabei hält sich auch in Grenzen.
Die Ursache des oben beschriebenen Fehlers habe ich dir ja bereits beschrieben.

Hier ein paar Links zur Location, der Spigot Config und jdbc
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Location.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/file/YamlConfiguration.html
https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
 

Kraetzy

Redstoneengineer
Registriert
16 Dezember 2017
Beiträge
41
Alter
22
Diamanten
250
Minecraft
MinesuchtBOT
Ich würd dir eher empfehlen dich selbst damit zu beschäftigen, wenn du irgendwelchen Code zusammenpastest kommt da wahrscheinlich nichts brauchbares dabei raus. Der Lerneffekt dabei hält sich auch in Grenzen.
Die Ursache des oben beschriebenen Fehlers habe ich dir ja bereits beschrieben.

Hier ein paar Links zur Location, der Spigot Config und jdbc
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Location.html
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/configuration/file/YamlConfiguration.html
https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
Ich habe es nun so probiert, es geht aber immernoch nicht:

Code:
@EventHandler
    public void onMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
       
        if(!Ort.contains(p)) {
            if(p.getLocation().getBlock().getType() == Material.STONE) {
                if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.STONE) {
                    Ort.add(p);
                }
               
            }
        } else {
            Ort.remove(p);
        }
       
    }
 
D

deleted196100

Guest
Ich habe es nun so probiert, es geht aber immernoch nicht:

Code:
@EventHandler
    public void onMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
      
        if(!Ort.contains(p)) {
            if(p.getLocation().getBlock().getType() == Material.STONE) {
                if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.STONE) {
                    Ort.add(p);
                }
              
            }
        } else {
            Ort.remove(p);
        }
      
    }
Die neue Abfrage wird nicht erreicht wenn der Spieler nicht in einem Stein steht. Du solltest deine alte Abfrage durch die neue austauschen sonst hat das Ganze keinen Wert.
 

Kraetzy

Redstoneengineer
Registriert
16 Dezember 2017
Beiträge
41
Alter
22
Diamanten
250
Minecraft
MinesuchtBOT
Funktioniert nach wie vor nicht..
Code:
@EventHandler
    public void onMove(PlayerMoveEvent e) {
        Player p = e.getPlayer();
       
        if(!Ort.contains(p)) {
                if(p.getLocation().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.STONE) {
                    Ort.add(p);
                }
               
           
        } else {
            Ort.remove(p);
        }
       
    }
 
D

deleted196100

Guest
Wie wäre es wenn du dir deinen(?) Code ersteinmal durchliest und versuchst ihn zu verstehen bevor du hier antwortest?
Wenn der Spieler zu Ort hinzugefügt wurde wird er sofort wieder entfernt wenn er sich das nächste mal bewegt. Wenn ich richtig verstehe was du machen willst sollte der Spieler nur aus Ort entfernt werden wenn er nicht auf einem Stein steht. Diese Abfrage fehlt.
 
Oben