Einige Fragen!

Dieses Thema im Forum "Programmierung" wurde erstellt von Masterfran99, 2. April 2014.

  1. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Hallo,

    1.
    Ist es möglich die Befehle die in der plugin.yml stehen sie automatisch eintragen zulassen?
    Weil in der Hauptklasse müssen die Befehle ja auch registriert werden wenn sie in einer anderen Klasse sind.

    2.
    Was muss bei p.gettargetblock(arg1 arg2) rein??
    Das ist doch den block den man schaut seine location oder?

    3.
    p.setCustomname
    p.setdisplayname
    Was ist der unterschied und wie benutzt man es richtig?

    4.
    Was muss man machen das man z.B. keine Villager verschieben kann sie sollen an der Stelle bleiben wo man sie spawnt, man kann ja Slowness geben aber wie noch?

    5.
    Das Scoreboard unter dem Spielername?
    Wie macht man so etwas?
    Link zu einen Tut wäre toll.

    6.
    Code (Text):
    1. World w = p.getWorld();                
    2. w.setSpawnLocation(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ());
    3.  
    Wo was muss ich ändern das auch noch die Richtung wo der Spieler hinschaut gesetzt wird?

    EDIT BungeeCord Fragen:
    7.
    Wenn man BungeeCord installiert hat usw.. kann man doch bestimmt abfragen welche Spieler auf einen Server sind und wie viele oder?

    8.
    Zu BungeeCord kann man doch auch noch bestimmt abfragen welche Server vorhanden sind?

    9.
    Mit BungeeCord sollte doch auch möglich sein zu überprüfen wenn jemand den Server wechselt das da nicht steht Spieler ist offline oder sonstiges?

    EDIT:

    10.
    Hier habe ich was interresantes gefunden:
    https://board.nitrado.net/community...er-minecraft-gekauft-hat/index2.html?8f91eb5e
    Wie ist es den mit BungeeCord möglich das Login/Register Event wegzulassen wenn der Spieler den Premium Launcher benutzt?
    Das wäre ein Vorteil für Premium Spieler aber trotzdem sollten Cracked Spieler spielen können.

    Vielen Dank:D
     
    #1
  2. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    1. Nein, du kannst mit der Bukkit API keinen Befehl in die plugin.yml hinzufügen. Du kannst aber mit dem "PlayerCommandProcessEvent" aus einem Nichtvorhandenen Befehl einen machen.

    2. "getTargetBlock()" ist deprecated und sollte dahei nicht (mehr) benutzt werden.

    3. "setCustomName()" stammt aus der Klasse LivingEntity. Weil ein Player ein LivingEntity ist, hat er auch die Methode. Um aber den Namen im Chat zu setzten, musst du "setDisplayName()" benutzen.

    4. Du musst den Spielern ein Package senden, welches einen Villager beinhaltet, den es aber eigentlich nicht gibt.

    5. Du musst auf ein Objekt der Klasse "Objective" für das Scoreboard die Methode "setDisplaySlot(DisplaySlot.BELOW_NAME)" anwenden.

    6. Dafür musst du einen anderen Konstruktor von Location benutzen:
    Code (Text):
    1. w.setSpawnLocation(p.getLocation().getBlockX(), p.getLocation().getBlockY(), p.getLocation().getBlockZ(), p.getLocation().getYaw(), p.getLocation().getPitch());
    7. - 9. Weiß ich leider nicht.
     
    #2
  3. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Verwende mal /glist
     
    #3
  4. games6471
    Online

    games6471

    Es geht um die Programmierung, da sind Commands nicht sinnvoll.

    BungeeCord wiki

    7.
    PlayerCount
    PlayerList

    8.
    GetServers

    9.
    http://jd.bukkit.org/dev/apidocs/
    KickEvent
    QuitEvent
     
    #4
  5. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Lol bei p.getYaw(), usw.. muss doch vorne ran p.getLocation.getYaw() jedoch steht dann bei w.setspawnlocation rot unterstrichen float float muss weg.

    Danke an alle Antworten!
     
    #5
  6. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Wo steht das? Lesen will gelernt sein.


    Zu 10. Mach es AuthMe-Reloaded oder ähnlichem
     
    #6
  7. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Wie genau macht das Authme-Reloaded, denn ich benutze es.
     
    #7
  8. games6471
    Online

    games6471

    Und wo soll dies stehen? Wir sind hier unter der Kategorie Programmierung. Zudem sind die ersten Fragen eindeutig über Programmierung.
     
    #8
  9. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100

    Ich muss sagen ich versteh die Seite nicht.
    Ich möchte z.B. für jeden Server den es gibt 1 Item in einem Inventar:

    Code (Text):
    1. for(Server s : Ka hier eine Liste der Server){
    Den Rest weiß ich also die Items setzen.
    Was z.B. muss ich bei Server s : <Hier> eingeben?
     
    #9
    1 Person gefällt das.
  10. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Kennst du den Spruch , Wieso es machen wenn es schon vorhanden ist?
     
    #10
    1 Person gefällt das.
  11. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    BItte sagen wo wie genau Authme das macht.
     
    #11
  12. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938

    Genau lass das Rad neu erfinden!




    Und Authme macht das ...

    https://github.com/Xephi/AuthMeReloaded
     
    #12
  13. games6471
    Online

    games6471

    Sobald du die PluginMessage abgeschickt hast kannst du hiermit deine Antwort auslesen:

    Code (Text):
    1. String[] serverList = in.readUTF().split(", ");
    Dies ist ein Array aus den Servernamen, die in deiner BungeeCord Konfiguration stehen (Achtung die Server könnten offline, aber auch nicht für den Spieler zugänglich sein). Darauf kannst du dann die For-Schleife anwenden.

    Wo stehts denn?

    Commands sind für die Spieler gedacht und nicht für Plugins. Das Design könnte sich ändern,- Das Resultat von Commands muss immer geparst werden,- Du willst echt ein BungeeCord Command von einem Plugin ausführen? - Denk mal drüber nach wie BungeeCord funktioniert.
     
    #13
  14. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    AuthMe schützt Premium und Offline Spieler, somit kann dort jeder sein eigenen Account nochmals anlegen.

    Ich glaube kaum das es möglich ist , das sich Premium Spieler nicht einlogen brauchen und nur Cracked dafür. Das problem ist dann , das du dann nur Cracked Namen zulassen dürftest zu Registrieren und die Kids mit zB "Gronkh" es prüfen müsstest ob er Original ist. Aber selbst dafür musst du meineswissens den Bukkit selbst umschreiben erst einmal. ( www.gidf.de )



    Denk mal drüber nach wo steht das er ein neues Plugin schreiben will für BungeeCord. ;-)

    Auch wenn es die Plugin Ecke ist , werden hier auch einfach Plugins und Befehle Teilweise einfach nur gesucht. Und vorallem bei mehreren Frage auf einmal , da mach ich dafür kein Extra Thema auf ;-)

    Zuerst denken dann Schreiben ;-)
     
    #14
  15. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Also 1. ich rede hier über Programmierung weil alles was man selber macht kann man besser anwenden und kombinieren.

    Code (Text):
    1.     public void server(Player p){
    2.         ByteArrayOutputStream b = new ByteArrayOutputStream();
    3.         DataOutputStream out = new DataOutputStream(b);
    4.         ByteArrayInputStream bx = new ByteArrayInputStream(null);
    5.         DataInputStream in = new DataInputStream(bx);
    6.        
    7.         try{
    8.         out.writeUTF("GetServers");
    9.         }catch(IOException ex){
    10.            
    11.         }
    12.         p.sendPluginMessage(plugin, "BungeeCord", b.toByteArray());
    13.    
    14.         try{
    15.         String[] serverList = in.readUTF().split(", ");
    16.         }catch(IOException ex){}
    17.     }
    So nun das ist meine Void Methode die sendet eine Message nur das auslesen weiß ich nicht wo das hinkommt.
     
    #15
  16. games6471
    Online

    games6471

    Nichtsdestotrotz ändert dies nichts an den Nachteilen bei der Verwendung von Commands über ein Bukkit-Plugin.

    EDIT: Wie der Autor dieses Threads selbst gesagt, geht es um die Programmierung. Überlege mal wie BungeeCord funktioniert. Ich gebe dir mal ein Tipp, achte mal von welche Richtung aus die Commands von BungeeCord ausgeführt werden. (UpStreambridge)
    https://github.com/SpigotMC/BungeeC...d_5/bungee/connection/UpstreamBridge.java#L92


    BungeeCord arbeitet über die PluginChannnels. Das bedeutet, dass du erst beide Richtungen registrieren musst.

    Code (Text):
    1. public void onEnable() {
    2.         this.getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
    3.         this.getServer().getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
    4.     }
    Dazu brauchst du dann noch ein Listener für die eingehende Nachricht. Dort wirst du dann diese Antwort bekommen.

    Code (Text):
    1.     @Override
    2.     public void onPluginMessageReceived(String channel, Player player, byte[] message) {
    3.         if (!channel.equals("BungeeCord")) {
    4.             return;
    5.         }
    6.  
    7.         DataInputStream in = new DataInputStream(new ByteArrayInputStream(message));
    8.  
    9.         try {
    10.             String subchannel = in.readUTF();
    11.             if (subchannel.equals("SomeSubChannel")) {
    12.                 // Use the code sample in the 'Response' sections below to read
    13.                 // the data.
    14.             } else if (subchannel.equals("SomeOtherSubChannel")) {
    15.                 // Read the data for a different subchannel.
    16.             } else if (subchannel.equals("GetServer")) {
    17.                 // Example: GetServer subchannel
    18.                 serverName = in.readUTF();
    19.             }
    20.         } catch (IOException e) {
    21.             // There was an issue in creating the subchannel string
    22.         }
    23.     }
     
    #16
  17. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    Muss das alles sein?

    Wäre da nicht einfach for(Server : serverlist){
    eine bessere Idee?
    Anscheinend ist BungeeCord doch komplizierter als ich gedacht habe.
     
    #17
  18. games6471
    Online

    games6471

    Wo bekommst du denn die Variable her? BungeeCord könnte auch auf einem anderen Server liegen, deswegen sollte diese Operation auch nicht blockierend auf dem Main-Thread laufen.
     
    #18
  19. Pappi
    Offline

    Pappi Gesperrt

    Registriert seit:
    28. Oktober 2012
    Beiträge:
    141
    Ort:
    H.a.S/NRW/Germany
    Minecraft:
    Pappi / PapaHarni
    Wenn es ein Plugin für BungeeCord wird dann schaut das ganze so aus :

    Code (Text):
    1.  
    2. public class plist extends Command {
    3.    
    4.     public plist() {
    5.         super("plist", "plist.use");
    6.     }
    7.  
    8.     @Override
    9.     public void execute(CommandSender s, String[] args) {
    10.         ProxiedPlayer p = (ProxiedPlayer)s;
    11.        
    12.         if(p == null)
    13.             return;
    14.        
    15.         if(!p.hasPermission("plist.use"))
    16.             return;
    17.    
    18.         for (Map.Entry<String, ServerInfo> e : ProxyServer.getInstance().getServers().entrySet()) {
    19.             ServerInfo sinfo = e.getValue();
    20.             String list = "";
    21.             int i = 0;
    22.             p.sendMessage("Auf dem Server " + e.getKey() + " sind derzeit " + sinfo.getPlayers().size() + " Spieler Online :");
    23.             for(ProxiedPlayer pl: sinfo.getPlayers()) {
    24.                 list += ((list.length() <= 1)?"":", ") + pl.getDisplayName();
    25.                 i++
    26.                 if(i % 5 == 0) {
    27.                     p.sendMessage(list);
    28.                     list = "";
    29.                 }
    30.             }
    31.             if(list.length() > 1)
    32.                 p.sendMessage(list);
    33.         }
    34.     }
    35. }
    Dann spart man sich einiges an Arbeit für Bukkit ;-)

    P.S. Code ungetestet.
     
    #19
  20. Masterfran99
    Offline

    Masterfran99 Gesperrt

    Registriert seit:
    13. Oktober 2012
    Beiträge:
    100
    ja danke
    selbst wenn ich das alles habe nur wie kann ich dann das mit der for schleife einbauen?
     
    #20