hilfe -- plugin coden

Dieses Thema im Forum "Programmierung" wurde erstellt von AndyCrafty14, 30. Juni 2014.

  1. AndyCrafty14
    Offline

    AndyCrafty14

    Registriert seit:
    7. Januar 2014
    Beiträge:
    4
    Hallo liebe Community,

    Ich bin gerade ein plugin am coden und möchte dass Spieler x mit einem item einen Rechtsknick macht, dass alle Spieler um ihn herum weggeschleudert werden nun habe ich überhaupt keine plan wie ich das anstelle.
    Ich hoffe dass mir jemand helfen kann dennoch wäre es hilfreich wenn ihr mir keinen fertigen code gibt da ich daraus dann selbst nichts lernen kann^^.

    Lg. AndyCrafty14

    P.S: hier mein bisheriger code wie ich dachte dass mit dem rechts klick klappt weiter hab ich es aber nicht Geschafft.

    Code (Text):
    1.     public void playerInteract(PlayerInteractEvent e){
    2.           if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK)){
    3.             if(e.getClickedBlock().getType().equals(Material.BLAZE_ROD)){
    4.               Player p = e.getPlayer();
     
    #1
  2. At-M
    Offline

    At-M

    Registriert seit:
    30. März 2012
    Beiträge:
    194
    Ort:
    An der Nordsee
    Minecraft:
    At_M
    Ich kann leider nicht codetechnisch helfen, aber (falls es das alles gibt) würde ich das so machen

    wenn der rechtsklickt, wird auf deiner stelle eine tnt explosion getriggered, die aber keinen player oder umgebungsschaden hat, aber der knockback bleibt
     
    #2
  3. AndyCrafty14
    Offline

    AndyCrafty14

    Registriert seit:
    7. Januar 2014
    Beiträge:
    4
    das werde ich gleich mal ausprobieren und danke für die Idee
    Lg. Andy
     
    #3
  4. #4
  5. DBX12
    Offline

    DBX12

    Registriert seit:
    25. Juli 2012
    Beiträge:
    17
    Minecraft:
    DBX12
    Fände ich persönlich zwar cooler, wenn alles wegfliegt (wie bei einer Explosion), aber muss er TE wissen.
    Die Idee mit dem TNT ist zwar gut, aber der TNT-Sound ist halt noch da, den würde ich nicht wollen. Meine Idee wäre, alle nahen Entities zu "sammeln" und dann für jede den Vektor von mir zur Entity holen und ggf. mit einem Faktor x verlängern und eine entsprechende Beschleunigung setzen und anschließend als Bewegungsvektor angeben. So etwas habe ich schon mit Items gemacht und die dann "verschossen", da Spieler und Items beides Entities sind, sollte es klappen. ;)

    LG DBX12
     
    #5
  6. GermanUbuntu
    Online

    GermanUbuntu

    Ich weiß nicht wie ihr einen Spieler in die luft schleudert aber so habt ihr alle Spieler die 16 Blöcke vom Player mit dem item entfernt sind.
    Ob es sehr performant ist weiß ich leider nicht

    Code (Text):
    1.  
    2. Player Player = null;//Das ist der Player mit dem Item!
    3.         for(Player p : Bukkit.getOnlinePlayers()){
    4.             if(p.getLocation().distance(Player.getLocation()) <= 16){
    5.                 //Hier müsstest du die Player in die luft bekommen. Die methode dafür kenne ich leider nicht!
    6.             }
    7.         }
    8.  
     
    #6
  7. Muchacho LP
    Offline

    Muchacho LP

    Registriert seit:
    12. März 2013
    Beiträge:
    378
    Ort:
    ALT + F4
    Minecraft:
    ikrumi

    Erstens:
    Code (Text):
    1.  
    2. public void playerInteract(PlayerInteractEvent e){
    3.   if((e.getAction() == Action.RIGHT_CLICK_BLOCK)[COLOR="#FF0000"] || (e.getAction() == Action.RIGHT_CLICK_AIR)[/COLOR]){
    4.     if(e.getClickedBlock().getType().equals(Material.BLAZE_ROD)){
    5.       Player p = e.getPlayer();
    6.  
    Zweitens:
    Code (Text):
    1. player.setVelocity();
    Damit musst du arbeiten, um die Spieler "rumzuwerfen".
     
    #7
  8. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Damit der Spieler hochfliegen kann, muss er noch fliegen können. 'setFlying(true)'.
     
    #8
  9. h3inz3l
    Offline

    h3inz3l

    Registriert seit:
    12. April 2013
    Beiträge:
    131
    Ort:
    Hinter der nächsten Ecke
    Minecraft:
    h3inz3l
    Nein stimmt nicht, wenn du den Vektor von einem Spieler nimmst, kannst du seine Position und seine Geschwindigkeit in eine bestimmte Richtung setzten und ihn so zum Beispiel hoch in die Luft schleudern und ein paar Blöcke weg
     
    #9
  10. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    //Berichtigung meines vorherigen: Die Methode von Player, 'setAllowFlight(true)', muss aufgerufen werden, da der Spieler sonst evtl. wegen Fliegen gekickt wird.
     
    #10
  11. h3inz3l
    Offline

    h3inz3l

    Registriert seit:
    12. April 2013
    Beiträge:
    131
    Ort:
    Hinter der nächsten Ecke
    Minecraft:
    h3inz3l
    //Berichtigung meines: wenn du das so gemeint hast, dann ja, sollte gemacht werden, sollte aber allerdings nicht der Fall sein, da der Spieler ja wieder runterfällt, sonst müsste man ja beim springen gekickt werden ;)
     
    #11
  12. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Sicher ist sicher. Und wenn man mehrfach hintereinander katapultiert wird, wird man normalerweise gekickt. (Ich benutze das ganze bei meinem Plugin [, als Jetpack,] und habe es ausprobiert.)
     
    #12
  13. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    Einfach einen Verbindungsvektor zwischen dem Spieler mit dem Item und jedem anderen Spieler in der Nähe berechnen und diesen für das Wegschleudern verwenden. Damit es nicht zu dem Problem mit dem Kick kommt setzt du außerdem für jeden Spieler einen Timeout, dass dieser innerhalb der nächsten 2 Sekunden nicht erneut weggeschleudert werden kann. Und wenn du wirklich so viele Spieler auf dem Server hast, dass du angst um die Performance hast, dann prüfe nur die Spieler, die im Minigame sind (ich nehme an es geht um ein Minigame, ansonsten nehm die Spieler der aktuellen Map). Zum Berechnen der Entfernung kannst du dann einfach du einfach die Abstandsmessung von Bukkit verwenden, aber achte darauf dass du mit dem quadrierten Wert arbeitest und nicht die exakte Distanz bestimmst, weil das frisst dann wirklich Taktzyklen. Ansonsten glaub ich Bukkit bringt eh eine Methode mit um die Spieler in einem bestimmten Radius zu bekommen.
     
    #13