Player killed by entering water

Discussion in 'Plugin Development' started by RedstoneFreak99, Oct 2, 2013.

Thread Status:
Not open for further replies.
  1. Offline

    RedstoneFreak99

    Help me please. I want to make a plugin for my server. This plugin will kill the player if hes entering water.

    Code:java
    1. package de.RedstoneFreak99.DW;
    2.  
    3. import org.bukkit.Material;
    4. import org.bukkit.event.EventHandler;
    5. import org.bukkit.event.player.PlayerMoveEvent;
    6. import org.bukkit.plugin.java.JavaPlugin;
    7. import org.bukkit.entity.Player;
    8.  
    9. public final class DeadlyWater extends JavaPlugin {
    10.  
    11.  
    12. @Override
    13. public void onEnable(){
    14.  
    15. }
    16.  
    17. @Override
    18. public void onDisable() {
    19.  
    20. }
    21. @EventHandler
    22. public void onPlayerMove(PlayerMoveEvent e){
    23. if((e.getPlayer().getLocation().getBlock().getType() == Material.STATIONARY_WATER) || (e.getPlayer().getLocation().getBlock().getType() == Material.WATER)){
    24. if (!Player.isDead()){
    25. Player.setHealth(0);
    26. }
    27. }
    28. }
    29. }


    thats my code. But Player.setHealth(0); has this error "Cannot make a static reference to the non-static method setHealth(int) from the type Damageable"

    and Player.isDied "Cannot make a static reference to the non-static method isDead() from the type Entity)

    Please help my im bad in english, i cant understand this errors.
     
  2. Offline

    Zettelkasten

    If you call Player, you call the static Player-class. This class is a class like the Bukkit-Class. But you want to reference to your player object.
    Do it like this:
    Code:java
    1. @EventHandler
    2. public void onPlayerMove(PlayerMoveEvent e) {
    3. // First get the player as an object
    4. Player p = e.getPlayer(); // My player now is the object "p"
    5. // Your code, for example do:
    6. p.setHealth(0);
    7. }


    German version:
    Und hier nochmal auf Deutsch (für Dich :) ):
    Es gibt in Java Klassen, diese werden normaler Weise groß geschrieben. Eine statische Funktion einer Klasse bezieht sich meist auf alle Elemente dieser Klasse. Deshalb funktioniert Player.setHealth(0); nicht, da diese Funktion nicht statisch ist - sie bezieht sich nur auf einen einzigen Spieler, aber Java hat keine Ahnung, auf welchen.
    Dein PlayerMoveEvent speichert einen Spieler, welcher sich bewegt. Diesen kannst du (wie du auch getan hast) mit e.getPlayer() abrufen. Diese Funktion gibt ein nicht-statisches Objekt zurück (Objekte sind nie statisch, da sie nur ein einziges Objekt sind). Ich empfehle Dir, dieses in einer Variable zu speichern, z.B. so:
    Code:java
    1. Player p = e.getPlayer();

    Jetzt kannst Du auf deinen Spieler zugreifen, und z.B. sein Leben setzen. Jetzt weiß Java, auf welchen Spieler du Dich beziehst.
    Code:java
    1. p.setHealth(0);


    Ich hoffe, ich konnte Dir helfen.

    LG Zettelkasten

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 4, 2016
  3. Offline

    Garris0n


    In addition to this, you must register your events.
    http://wiki.bukkit.org/Event_API_Reference
     
  4. Offline

    RedstoneFreak99


    Danke. Ich musste nur
    Player p = e.getPlayer();
    Einfügen. Nur p.setHealh(0) ist gelb unterstrichen und schwarz durchgestrichenen

    Thanks. im only need to write
    Player p = e.getPlayer();
    But p.setHealth is yellow underlined and crossed out in black
     
Thread Status:
Not open for further replies.

Share This Page