Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Ich habe es jetzt einfach über den Namen, des Items laufen lassen! (facepalm) Ich habe die ganze Zeit nur an die Farben gedacht!
 
Ich habe es jetzt einfach über den Namen, des Items laufen lassen! (facepalm) Ich habe die ganze Zeit nur an die Farben gedacht!

Wenn du es effizienter machen möchtest , erstelle dir doch eine Boots Klasse , in der du im Constructor...

-ItemStack itemStack
-int/double/Strinh id
-Color (Name unsicher) color
-...

... übergibst.

Diese kannst du dann alle abfragen, und evtl. auch neue hinzufügen.
 
  • Like
Reaktionen: RedstoneRaudi
@galaone Wäre es nicht einfacher sich ein Enum zu erstellen? Dadurch könnte man viel schneller und einfacher Abfragen, welche Boots es waren.
 
@galaone Wäre es nicht einfacher sich ein Enum zu erstellen? Dadurch könnte man viel schneller und einfacher Abfragen, welche Boots es waren.
Sicher , das würde dich aber auf das Enum bzw. das Prüfen der Boots beschränken. Nimmst du die Boots aber als Superklasse , kannst du dich auf ihre Funktionalität fokussieren, ihre einzelnen Typen (Subklassen) strukturierter erarbeiten und hast am Ende einen besseren Blick über das Projekt ;)
 
Warum sollte man diese mit Packets spawnen?

Sollte so gehen:

Code:
     public static void spawnEnderCrystal(Player player, Location location){
       
        EntityEnderCrystal entity = new EntityEnderCrystal(getWorld(location.getWorld()));
        entity.setPosition(location.getX(), location.getY(), location.getZ());
       
        PacketPlayOutSpawnEntity packet = new PacketPlayOutSpawnEntity(entity, 200);
       
        ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
    }
    private static WorldServer getWorld(World world){
        return ((CraftWorld) world).getHandle();
    }
 
Warum sollte man diese mit Packets spawnen?

Sollte so gehen:

Code:
     public static void spawnEnderCrystal(Player player, Location location){
      
        EntityEnderCrystal entity = new EntityEnderCrystal(getWorld(location.getWorld()));
        entity.setPosition(location.getX(), location.getY(), location.getZ());
      
        PacketPlayOutSpawnEntity packet = new PacketPlayOutSpawnEntity(entity, 200);
      
        ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
    }
    private static WorldServer getWorld(World world){
        return ((CraftWorld) world).getHandle();
    }

Klappt nicht
 
Wie wird auf dem Gomme Netzwerk eigentlich folgendes Problem gehandhabt?
Wenn man eine UUID zu einem Namen braucht oder umgekehrt und der Spieler gerade nicht online ist, wird ja nur eure Datenbank mit Spielern, die schon mal auf dem Netzwerk waren, geprüft. Und jetzt das Problem: Spieler1 hat den Namen Olaf. Damit war er auch schon auf dem Server sodass in der Datenbank der Name Olaf der UUID von Spieler1 zugewiesen wird. Nun gefällt ihm sein Name allerdings nicht mehr und er benennt sich in Guenther um. Seit dem Namechange war er jedoch nie wieder auf dem Netzwerk sodass ihm dort immer noch der Name Olaf zugeordnet wird. Nach 37 Tagen nennt sich jetzt ein Spieler2 Olaf (geht ja nach 37 tagen) und joined damit auf das Netzwerk. Jetzt gibt es das Problem, dass zwei mal der Name Olaf in der Datenbank vergeben ist. Wenn jetzt ein Spieler z.B. "/friend add Olaf" eingibt, was passiert dann?
Wird dann einfach die UUID von dem neueren Olaf genommen und der alte ignoriert? Das hätte den Nachteil, dass Spieler1 nicht als Freund geaddet werden kann. Oder fragt ihr beim Joinen von Spieler2 die Mojang API nach Spieler1's aktuellem Namen?
@geNAZt @delta242
 
Wie wird auf dem Gomme Netzwerk eigentlich folgendes Problem gehandhabt?
Wenn man eine UUID zu einem Namen braucht oder umgekehrt und der Spieler gerade nicht online ist, wird ja nur eure Datenbank mit Spielern, die schon mal auf dem Netzwerk waren, geprüft. Und jetzt das Problem: Spieler1 hat den Namen Olaf. Damit war er auch schon auf dem Server sodass in der Datenbank der Name Olaf der UUID von Spieler1 zugewiesen wird. Nun gefällt ihm sein Name allerdings nicht mehr und er benennt sich in Guenther um. Seit dem Namechange war er jedoch nie wieder auf dem Netzwerk sodass ihm dort immer noch der Name Olaf zugeordnet wird. Nach 37 Tagen nennt sich jetzt ein Spieler2 Olaf (geht ja nach 37 tagen) und joined damit auf das Netzwerk. Jetzt gibt es das Problem, dass zwei mal der Name Olaf in der Datenbank vergeben ist. Wenn jetzt ein Spieler z.B. "/friend add Olaf" eingibt, was passiert dann?
Wird dann einfach die UUID von dem neueren Olaf genommen und der alte ignoriert? Das hätte den Nachteil, dass Spieler1 nicht als Freund geaddet werden kann. Oder fragt ihr beim Joinen von Spieler2 die Mojang API nach Spieler1's aktuellem Namen?
@geNAZt @delta242
Ich würde garnicht die Spieler in einer Datenbank speichern. Ich würde beim eingeben des Namens die UUID abfragen und nur mit dieser arbeiten.
 
@Dosenwerfer
Mojang bietet eine offizielle API, mit der man von Namen die zugehörige UUID bekommen kann und andersrum. Außerdem gibt es auch die Name-History, welche die sagt, wann der Name zu was geändert wurde.

MonangAPI: http://wiki.vg/Mojang_API
 
Ich würde beim eingeben des Namens die UUID abfragen und nur mit dieser arbeiten.
Und von wo willst du die abfragen, wenn der Spieler offline ist?
@Dosenwerfer
Mojang bietet eine offizielle API, mit der man von Namen die zugehörige UUID bekommen kann und andersrum. Außerdem gibt es auch die Name-History, welche die sagt, wann der Name zu was geändert wurde.

MonangAPI: http://wiki.vg/Mojang_API
Das habe ich doch geschrieben. Lies meinen Beitrag doch komplett. Du kannst die API aber nicht immer befragen:
1. Ist die langsam
2. Hat die eine Begrenzung (laut wiki.vg 600 Anfragen pro 10 Minuten)
3. Kann sie ausfallen
Hier bei Gomme wird der Name und die UUID eines Spielers in einer Datenbank gespeichert. Das erkennt man erstens daran, dass keine Verzögerung auftritt, wenn du z.B. "/friend add fkherjuh" eingibst und daran, dass Spieler, die existieren, aber noch nicht auf dem Netzwerk waren (z.B. Notch) nicht gefunden werden.
 
Man kann bei einer Gleichheit höchstens den Spieler direkt fragen, welche UUID er genau meint. Ich weiß auch gar nicht, ob das Team diesen extremen Sonderfall berücksichtigt hat.
 
Man kann bei einer Gleichheit höchstens den Spieler direkt fragen, welche UUID er genau meint.
Darauf bin ich auch schon gekommen, aber wäre das nicht etwas seltsam? "Wir haben in unserer Datenbank zwei Olafs. Bitte klicke auf die UUID von dem, den du meinst: UUID1 UUID2" Als ob derjenige die UUID von dem Spieler weiß, den er meint (er würde wahrscheinlich auf einer Website nachschauen und so ebenfalls die Mojang API anfragen, nur halt viel umständlicher).
Ich weiß auch gar nicht, ob das Team diesen extremen Sonderfall berücksichtigt hat.
So extrem unwahrscheinlich ist das nicht. Schau dir mal an wie viele Spieler hier spielen ;)
 
Folgendes würde auch noch gehen: Die Person, welche als letztes auf dem Server gespielt hat, ist mit höchster Wahrscheinlichkeit der wahre z.B. "Olaf". Wenn z.B. zwei Olafs in der Datenbank vorhanden sind, dann ist der Olaf, der schon seit längerem nicht mehr auf dem Server war, keinenfalls der richtige Olaf, der andere aber mit einer hohen Wahrscheinlichkeit schon. Man würde also die Person nehmen, welche als letztes den Namen Olaf getragen hat.
 
Hallo Liebe Programmierungsasse :)

Ich habe ein Problem mit der durchsichtigkeit der spectator wie auf gomme.
Der Theorie nach muss es klappen, wenn ich die Spieler einfach unsichtbar mache mithilfe eines Potioneffects, die dann alle in ein Team packe und registriere dass:
Code:
Team.setCanSeeFriendlyInvisibles(true);
Wenn ich dann noch das Scoreboard für den jeweiligen Spieler setze, dann müsste es eigentlich klappen. Ich habe das meiner Meinung nach auch genauso gemacht, aber es will nicht funktionieren. Die Spieler sind nicht durchsichtig sondern unsichbar. Dabei ist das board für den Spieler aktiv, er ist im Team und CanSeeFriendlyInvisibles ist auf true. Ich bin ratlos. Wenn jemand von euch eine Idee hat, wie man diesen Fehler beheben kann, dann her damit. Schreibt mir auch mögliche Fehlerquellen, ich muss einfach wieder an etwas ansetzen, was theoretisch noch nicht funktioniert.

Naja soviel dazu, hier ist der Quelltext:

Code:
public class Ghost {

    public static Scoreboard board;
    public static Team ghost;

    public static void init()
    {
        board = Bukkit.getScoreboardManager().getNewScoreboard();
        ghost = board.getTeam("specs");
        if(ghost == null)
        {
            ghost = board.registerNewTeam("specs");
        }
        ghost.setCanSeeFriendlyInvisibles(true);
        ghost.setNameTagVisibility(NameTagVisibility.NEVER);
    }

    public static void addGhost(Player p)
    {
            ghost.addPlayer(p);
            p.setScoreboard(board);
            p.sendMessage("" + p.getScoreboard().getPlayerTeam(p).canSeeFriendlyInvisibles());
            p.sendMessage("" + p.getScoreboard().getPlayerTeam(p).getName());
            p.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, Integer.MAX_VALUE, 0));
        }


}

Und im RespawnListener wird das hier aufgerufen:

Code:
Bukkit.getScheduler().runTaskLater(Skywars.plugin, new Runnable() {
            @Override
            public void run() {
                Ghost.addGhost(pp);

            }
        },5);

Ich hoffe jemand von euch hat einen Rat. Danke im Voraus.

mfg
Forward_R
 
Folgendes würde auch noch gehen: Die Person, welche als letztes auf dem Server gespielt hat, ist mit höchster Wahrscheinlichkeit der wahre z.B. "Olaf". Wenn z.B. zwei Olafs in der Datenbank vorhanden sind, dann ist der Olaf, der schon seit längerem nicht mehr auf dem Server war, keinenfalls der richtige Olaf, der andere aber mit einer hohen Wahrscheinlichkeit schon. Man würde also die Person nehmen, welche als letztes den Namen Olaf getragen hat.
Wird dann einfach die UUID von dem neueren Olaf genommen und der alte ignoriert? Das hätte den Nachteil, dass Spieler1 nicht als Freund geaddet werden kann. Oder fragt ihr beim Joinen von Spieler2 die Mojang API nach Spieler1's aktuellem Namen?
;)
 
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