Help for beginner

Discussion in 'Plugin Development' started by Xadrian, Jun 12, 2011.

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

    Xadrian

    Hi, i just started working on my first bukkit plugin, and it doesn't goes well, because server does nothing, except throwing errors.

    ItemStack.java:
    Code:
    package me.visher.itemstack;
    import java.util.ArrayList;
    import java.util.HashMap;
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginDescriptionFile;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    public class ItemStack extends JavaPlugin {
        // Player listener
        private final BasicPlayerListener playerListener = new BasicPlayerListener(this);
        // Block listener
        // private final BasicBlockLisener blockListener = new BasicBlockListener(this);
    
        // Creating the HashMap
        public final HashMap<Player, ArrayList<Block>> basicUsers = new HashMap();
        private final HashMap<Player, Boolean> debugees = new HashMap<Player,Boolean>();
    
        @Override
        public void onDisable() {
            // TODO Auto-generated method stub
        }
        @Override
        public void onEnable() {
            PluginManager pm = getServer().getPluginManager();
            pm.registerEvent(Event.Type.PLAYER_COMMAND_PREPROCESS, this.playerListener, Event.Priority.Normal, this);
            //pm.registerEvent(Event.Type.BLOCK_PLACE, this.blockListener, Event.Priority.Normal, this);
    
            PluginDescriptionFile pdfFile = this.getDescription();
            System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!");
        }
    }
    
    BasicPlayerListener:
    Code:
    package me.visher.itemstack;
    
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.player.PlayerCommandPreprocessEvent;
    import org.bukkit.event.player.PlayerListener;
    
    public class BasicPlayerListener extends PlayerListener {
    	
    	public static ItemStack plugin;
    	public BasicPlayerListener(ItemStack instance) {
    		plugin = instance;
    	}
    	
    	public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) {
    		String[] split = event.getMessage().split(" ");
    		// Get Player that talked
    		
    		Player player = event.getPlayer();
    		
    		if(split[0].equalsIgnoreCase("/bread") || split[0].equalsIgnoreCase("/b")) {
    			if(player.getInventory().contains(Material.BREAD, 1)) {
    				System.out.println(player.getName() + " has a bread!");
    			}
    		}
    		
    		event.setCancelled(true);
    	} 
    }
    
    plugin.yml:
    Code:
    name: ItemStack
    main: me.visher.itemstack.ItemStack
    version: 0.1
    description: >
    	by Visher
    commands:
    
    error:
    Code:
    14:10:52 [SEVERE] Nag author: 'Visher' of 'ItemStack' about the following: onPla
    yerCommandPreprocess has been replaced with a new signature, (PlayerCommandPrepr
    ocessEvent)
    
    Plugin is loaded, because bukkit outputs specifed message: [INFO] ItemStack version 0.1 is enabled!

    Somebody can help me?
     
  2. Offline

    David K

    (common sense, I'm not really comfortable with Java yet) By the error it looks that you have to replace "onPlayerCommandPreprocess" with "PlayerCommandPreprocessEvent". Did you create this plugin based on an old tutorial?
     
  3. Offline

    Xadrian

    Ok, fixed that. Now it works.

    Now i've created DamageListener (and it works), that outputs entity's lost health in console. How can I check name of player/entity who lost health?

    Code:
    package me.visher.itemstack;
    
    import org.bukkit.event.entity.EntityDamageEvent;
    import org.bukkit.event.entity.EntityListener;
    
    public class BasicDamageListener extends EntityListener {
    	
    	public static ItemStack plugin;
    	public BasicDamageListener(ItemStack instance) {
    		plugin = instance;
    	}
    	
    	public void onEntityDamage(EntityDamageEvent event) {
    		System.out.println("Damage: " + event.getDamage());
    	}
    }
    


    Thanks in advice.
     
  4. Offline

    RazorFlint

    Just some advice.
    1. Find a plugin (inactive)
    2. Make sure it has source code :)
    3. Take a swing at that first before making your own :D
     
  5. Offline

    0ffn00b



    public void onEntityDamage(EntityDamageEvent event) {
    Player player = event.getPlayer();
    System.out.println("Damage: " + event.getDamage()); }
     
  6. Offline

    Xadrian

    1. There is no getPlayer() function on entity
    2. I've done it in this way:
    Player playerDamaged = (Player)event.getEntity();
    String name = playerDamaged.getName();

    Thanks anyway. My next question is: how to remove a single item from player inventory?
     
  7. Offline

    0ffn00b

    are you sure cause im using that in my code for a plugin to get the person who placed a block. To remove an enitre stack of an item i did this:
    Code:
    Inventory inv = player.getInventory();
    
    for (int f = 0; f < inv.getSize();f++){
           if (inv.getItem(f) == theBlockYouWantToRemove{
                 inv.setItem(f,null);
    }
     }
     
  8. Offline

    nisovin

    The Inventory has a removeItem() method, I believe. Something like player.getInventory().removeItem(new ItemStack(type, 1));
    Not all events have a getPlayer(). BlockPlace does.
     
  9. Offline

    0ffn00b

    ahh ok
     
Thread Status:
Not open for further replies.

Share This Page