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?
(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?
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.
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
public void onEntityDamage(EntityDamageEvent event) { Player player = event.getPlayer(); System.out.println("Damage: " + event.getDamage()); }
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?
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); } }
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.