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

Instant Death/Kills zählen trotzt runtergeschlagen.

777dodi

Minecrafter
Registriert
31 Oktober 2016
Beiträge
10
Diamanten
250
Hi!
Ich habe zwei Probleme:
1 Thema: Instant Death.
2. Aus der Welt fallen, jedoch den Kill bekommen.

1.
Ich suche nach einem Plugin oder einem Command, das/der den Spieler sofort, ab einer bestimmten Höhe, killt, da man sich auf der Map in das ,,nichts,, schubsen muss, und es nervt, andauernd darauf zu warten, das man stirbt.

2.
Ich suche ein einem Plugin oder einem Comand, das obwahl man den Spieler runterschlägt, und eigenntlich er aus der Welt fällt, und nicht von dem Spieler gekillt wird, dafür sorgt, das der Spieler, und nicht das ,,nichts,, ihn tötet, damit in den Stats, ein Kill angezeigt wird.

Falls sich damit jemand auskennt, kann er mir gerne helfen. Bei genaueren Fragen, einfach melden.
Mfg, 777dodi.
 

777dodi

Minecrafter
Registriert
31 Oktober 2016
Beiträge
10
Diamanten
250

777dodi

Minecrafter
Registriert
31 Oktober 2016
Beiträge
10
Diamanten
250

Anhänge

  • Capture.PNG
    Capture.PNG
    44,3 KB · Aufrufe: 161

PSandro

Kuhfänger
Registriert
7 November 2016
Beiträge
51
Diamanten
302
Für diese dreiste Antwort gehörst du eigentlich aus diesem Forum ausgeschlossen, wenn es nach mir ginge...

Um die Frage zu beantworten: Damit das PlayerDeathEvent nicht doppelt oder mehrfach ungewollt ausgerufen wird, kann man sich das Spieler Objekt in einer Liste mit beispielsweise dem UNIX timestamp abspeichern und nach einer gewissen Zeit dann wieder entfernen. Solange der Spieler in der Liste enthalten ist, wird entsprechend das Event "beendet".

Das könnte zum Beispiel so aussehen:

Code:
private static HashMap<Long, UUID> already = new HashMap<>();

    public static void updateAlready() {

        Iterator it = already.entrySet().iterator();
        while (it.hasNext()) {
            Entry item = (Entry) it.next();
            long en = (long) item.getKey();
            long now = System.currentTimeMillis();

            if (en < now) {
                if (now - en >= 5000) {
                    it.remove();
                }
            }
        }

    }

Code:
@EventHandler
    public void onDeaths(PlayerDeathEvent e) {

        Player p = e.getEntity();
        Player killer = e.getEntity().getKiller();

        if (already.containsValue(p.getUniqueId()))
            return;

        PlayerInfo i = new PlayerInfo(p);

        if (killer == null) {
            if (Attack.isInAttack(p)) {

[...]

Hoffentlich konnte ich helfen.
 
F

Figz

Guest
Für diese dreiste Antwort gehörst du eigentlich aus diesem Forum ausgeschlossen, wenn es nach mir ginge...

Um die Frage zu beantworten: Damit das PlayerDeathEvent nicht doppelt oder mehrfach ungewollt ausgerufen wird, kann man sich das Spieler Objekt in einer Liste mit beispielsweise dem UNIX timestamp abspeichern und nach einer gewissen Zeit dann wieder entfernen. Solange der Spieler in der Liste enthalten ist, wird entsprechend das Event "beendet".

Das könnte zum Beispiel so aussehen:

Code:
private static HashMap<Long, UUID> already = new HashMap<>();

    public static void updateAlready() {

        Iterator it = already.entrySet().iterator();
        while (it.hasNext()) {
            Entry item = (Entry) it.next();
            long en = (long) item.getKey();
            long now = System.currentTimeMillis();

            if (en < now) {
                if (now - en >= 5000) {
                    it.remove();
                }
            }
        }

    }

Code:
@EventHandler
    public void onDeaths(PlayerDeathEvent e) {

        Player p = e.getEntity();
        Player killer = e.getEntity().getKiller();

        if (already.containsValue(p.getUniqueId()))
            return;

        PlayerInfo i = new PlayerInfo(p);

        if (killer == null) {
            if (Attack.isInAttack(p)) {

[...]

Hoffentlich konnte ich helfen.

Entschuldige der Herr, jedoch liefere ich lieber keine Lösung, als so eine wie du sie hier lieferst ;)


Code:
@EventHandler
  public void onPlayerDamage(EntityDamageEvent event)
  {
  if ((event.getEntity() instanceof Player)) {
  if (event.getCause() == EntityDamageEvent.DamageCause.VOID)
  {
  event.setCancelled(true);
  
  ((Player)event.getEntity()).setHealth(0.0D);
  }
  }
  }


ODER:

Code:
  @EventHandler
  public void onPlayerDamage(EntityDamageEvent event)
  {
  if ((event.getEntity() instanceof Player))
  {
  if (event.getCause() == EntityDamageEvent.DamageCause.VOID)
  {
  Bukkit.getScheduler().runTaskLater(JavaPlugin, new Runnable()
  {
  @Override
  public void run()
  {
  ((Player) event.getEntity()).setHealth(0.0D);
  }
  }, 1);

  }
  }
  }


Meinetwegen auch canceln UND einen Tick warten.

Nachteil beim Canceln ist, dass man keinen Schadensound hört ;)


PS: Hab einfach vergessen hier die Lösung zu posten, funktionieren PL hat der TE schon längst..
 
Oben