Why is this not working in-game?

Discussion in 'Plugin Development' started by OhYes, Feb 25, 2016.

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

    OhYes

    Hi, so I'm making like a command, which, when you change from creative to survival, you wont take fall damage. I have this so far, but idk why it isn't working in game?

    Code:
    package me.OhYes.main;
    
    import java.util.ArrayList;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.GameMode;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin implements Listener{
    
        ArrayList<Player> fall = new ArrayList<Player>();
       
        @Override
        public void onEnable(){
            Bukkit.getServer().getPluginManager().registerEvents(this, this);
            System.out.println("DE-1.0 Enabled.");
        }
        @Override
        public void onDisable(){
            System.out.println("DE-1.0 Disabled.");
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
            if(!(sender instanceof Player)){
                sender.sendMessage("Only players may use the commands for DEssentials.");
                return false;
            }else{
                final Player p = (Player) sender;
                if(commandLabel.equalsIgnoreCase("gm")){
                    if(p.getGameMode().equals(GameMode.SURVIVAL)){
                        p.setGameMode(GameMode.CREATIVE);
                        p.sendMessage(ChatColor.GREEN + "Gamemode set to: " + ChatColor.AQUA + "CREATIVE");
                        return false;
                    }else if(p.getGameMode().equals(GameMode.CREATIVE)){
                        p.setGameMode(GameMode.SURVIVAL);
                        p.sendMessage(ChatColor.GREEN + "Gamemode set to: " + ChatColor.RED + "SURVIVAL");
                        setImmune(p);
                        return false;
                    }
                }
            }
            return false;
        }
       
        public void setImmune(final Player p){
           
            fall.add(p);
           
            Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable(){
    
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    fall.remove(p);
                }
               
                //Ticks until array list remove.
            }, 100);
               
        }
       
        public void onPlayerDamageEvent(EntityDamageEvent e){
            if(!(e.getEntity() instanceof Player)) return;
            Player p = (Player) e.getEntity();
            if(!(e.getCause().equals(DamageCause.FALL))) return;
            if(!(fall.contains(p))) return;
           
            e.setCancelled(true);
            p.sendMessage(ChatColor.GOLD + "*Damage Nullified*");
        }
       
    }
    
    The plugin yml is working before you ask, as the command works fine, just the nullification of the fall damage doesn't seem to want to work?

    Thanks,
    OhYes.
     
  2. Offline

    timtower Administrator Administrator Moderator

    @OhYes You are missing @EventHandler
     
  3. Offline

    mine-care

    Hello, @timtower answered your question, but i have some improvments to sugest:

    Dont store Player objects unless you handle them properly (removal on player disconnect) because they cause ram leaks. In other words, when the player disconnects, you keep the object stored and that keeps the chunk the player was on loaded.
    You dont need enable/disable messages because bukkit is already showing them for you, but if you insist, use the Logger to show console messages, not the default printstream. In the main class, the logger can be obtained by invoking the 'getLogger()' method.
     
  4. Offline

    OhYes

    OHHHHHHHH Damnit, I recently got back into coding so I'm rusty xDXD

    EDIT: Thankyou, works perfectly now. Lol, I'm a derp x|
     
Thread Status:
Not open for further replies.

Share This Page