private plugin, input listener (spout)

Discussion in 'Plugin Development' started by Grammar Troll, Aug 7, 2011.

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

    Grammar Troll

    I'm making a fun little plugin for my server, but I don't know how to continue.
    Please be gentle with me, I do not have much Java knowledge, I just wanted to create a fun little plugin:
    Code:
    	public void onKeyPressedEvent(KeyPressedEvent event) {
    		if (event.getKey() == Keyboard.KEY_B) {
    			SpoutPlayer player = event.getPlayer();
                if(permissionHandler.has(player, "combust.explode")) {
                	player.getWorld().createExplosion(player.getLocation(), 4F, false);
                } else
                {
                    player.sendMessage(ChatColor.RED + "You are not allowed to do that");
                }}
            }
    I think the problem exists at SpoutPlayer player = event.getPlayer();, but I don't know what to do else.
     
  2. Offline

    Shamebot

    What's the error?
    If the returntype of event.getPlayer() is Player, not SpoutPlayer you need to cast
    Code:
    SpoutPlayer player = (SpoutPlayer)event.getPlayer();
    Edit:
    No, according to the JavaDocs the returntype is SpoutPlayer, so you don't need to cast.
     
  3. Offline

    Grammar Troll

    No error, it just doesn't do anything when I press B.
     
  4. Offline

    Shamebot

    Do you use the spou client and registered the event?
     
  5. Offline

    Grammar Troll

    Yes, I installed the spout client, here is the full code:
    Code:
    package me.troll.explode;
    
    import java.util.logging.Logger;
    import org.bukkit.*;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.plugin.java.JavaPlugin;
    import com.nijiko.permissions.PermissionHandler;
    import com.nijikokun.bukkit.Permissions.Permissions;
    import org.bukkit.plugin.Plugin;
    import org.getspout.spoutapi.event.input.KeyPressedEvent;
    import org.getspout.spoutapi.keyboard.Keyboard;
    import org.getspout.spoutapi.player.SpoutPlayer;
    
    public class Explode extends JavaPlugin{
    	Logger log = Logger.getLogger("Minecraft");
    	public static PermissionHandler permissionHandler;
    	public void onKeyPressedEvent(KeyPressedEvent event) {
    		if (event.getKey() == Keyboard.KEY_B) {
    			SpoutPlayer player = event.getPlayer();
                if(permissionHandler.has(player, "troll.explode")) {
                	player.getWorld().createExplosion(player.getLocation(), 4F, false);
                } else
                {
                    player.sendMessage(ChatColor.RED + "You are not allowed to do that");
                }
    		}
    	}
    	public void onDisable() {
    		log.info("[Combust] Disabled!!");
    	}
    	public void onEnable() {
    		setupPermissions();
    		log.info("[Combust] Enabled!");
    	}
    	private void setupPermissions() {
    	    if (permissionHandler != null) {
    	        return;
    	    }
    	    Plugin permissionsPlugin = this.getServer().getPluginManager().getPlugin("Permissions");
    	    if (permissionsPlugin == null) {
            log("Permission system not detected, defaulting to OP");
    	        return;
    	    }
    	    permissionHandler = ((Permissions) permissionsPlugin).getHandler();
        log("Found and will use plugin "+((Permissions)permissionsPlugin).getDescription().getFullName());
    	}
    }
    
     
  6. Offline

    Shamebot

    You need to register your listener and your on keypress method must be in a listener.
    Code:
    public class Explode extends JavaPlugin{
        Logger log = Logger.getLogger("Minecraft");
        public static PermissionHandler permissionHandler;
    
        public void onDisable() {
            log.info("[Combust] Disabled!!");
        }
        public void onEnable() {
            InputListener iListener = new InputListener()
            {
                @Override
                public void onKeyPressedEvent(KeyPressedEvent event) {
                if (event.getKey() == Keyboard.KEY_B) {
                    SpoutPlayer player = event.getPlayer();
                    if(permissionHandler.has(player, "troll.explode")) {
                        player.getWorld().createExplosion(player.getLocation(), 4F, false);
                    } else
                    {
                        player.sendMessage(ChatColor.RED + "You are not allowed to do that");
                    }
                }
            };
            getServer().getPluginManager().registerEvent(Type.Custom, iListener, Priority.Normal, this);
    
            setupPermissions();
            log.info("[Combust] Enabled!");
        }
        private void setupPermissions() {
            if (permissionHandler != null) {
                return;
            }
            Plugin permissionsPlugin = this.getServer().getPluginManager().getPlugin("Permissions");
            if (permissionsPlugin == null) {
            log("Permission system not detected, defaulting to OP");
                return;
            }
            permissionHandler = ((Permissions) permissionsPlugin).getHandler();
        log("Found and will use plugin "+((Permissions)permissionsPlugin).getDescription().getFullName());
        }
    }
    If you add much code to onKeyPessedEvent consider moving the Listener to a seperate file.
     
  7. Offline

    Grammar Troll

    Thank you, I get it. I'll test the plugin right now :)

    I did exactly what you did, but the plugin still does nothing when I press on B. No error, I have the permission and I'm using the Spout client.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: May 18, 2016
  8. Offline

    Shamebot

    Add a debug line in the onKeyboardPressedEvent and print something out to see whether it's called.
     
Thread Status:
Not open for further replies.

Share This Page