Hello, I am designing a plugin that lets people join or leave PVP and a scoreboard utilized that to show how many people get kills. But for some reason it wont toggle the damage. Java; Code:java package net.myfallen.pvp; import java.util.HashMap;import java.util.List; import org.bukkit.Bukkit;import org.bukkit.OfflinePlayer;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.entity.EntityDamageEvent;import org.bukkit.metadata.FixedMetadataValue;import org.bukkit.metadata.MetadataValue;import org.bukkit.plugin.Plugin;import org.bukkit.plugin.java.JavaPlugin;import org.bukkit.scoreboard.DisplaySlot;import org.bukkit.scoreboard.Objective;import org.bukkit.scoreboard.Score;import org.bukkit.scoreboard.Scoreboard;import org.bukkit.scoreboard.ScoreboardManager; public class Main extends JavaPlugin { private Integer pvpenabled; private Integer pvpdisabled; public void onEnable() { getLogger().info("[PVPToggler] - Starting up."); } public void onDisable() { getLogger().info("[PVPToggler] - Disabled."); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if(cmd.getName().equalsIgnoreCase("pvpjoin")) { ScoreboardManager manager = Bukkit.getScoreboardManager(); Scoreboard board = manager.getNewScoreboard(); Objective objective = board.registerNewObjective("Player Kills", "playerKillCount"); objective.setDisplaySlot(DisplaySlot.SIDEBAR); // Set sidebar name objective.setDisplayName("PVP - Player Kills!"); sender.sendMessage("[PVPToggler] - You have joined PVP, anyone else that has joined PVP can kill you now."); sender.sendMessage("[PVPToggler] - Please Note: By joining PVP you have accepted a global PVP battle. To leave type: /pvpleave"); HashMap<String, Integer> pvp = new HashMap<String, Integer>(); pvp.put(sender.getName(), pvpenabled); // THis has assigned PVP Enabled return true; } if(cmd.getName().equalsIgnoreCase("pvpleave")) { sender.sendMessage("[PVPToggler] - You have left PVP, You will not receive anymore damage."); sender.sendMessage("[PVPToggler] - Mobs and other entities can hurt you but other players cannot."); ScoreboardManager manager = Bukkit.getScoreboardManager(); Scoreboard board = manager.getNewScoreboard(); HashMap<String, Integer> pvp = new HashMap<String, Integer>(); pvp.put(sender.getName(), pvpdisabled); return true; } return false; }// Lets check if they can PVP. @EventHandler public void onEntityDamage(EntityDamageEvent event) { HashMap<String, Integer> pvp = null; if(event.getEntity() instanceof Player) { if(pvp.containsKey(((OfflinePlayer) event).getPlayer())) { if(pvp.containsKey(pvpdisabled)) { event.setCancelled(true); } else { if(pvp.containsKey(pvpenabled)) { return; } } } } } }
I'm not the greatest at Java to be honest i'm a beginner, but at least a nice error will push me into the right way to get this working. Would Metadata or Hashmaps be better for this? EDIT by Moderator: merged posts, please use the edit button instead of double posting.
NoMansLand I would use a HashMap<String, Boolean>. Also, you are always creating a new variable when you need it, and instead you should only have 1 variable outside of all your methods.
ok so I did a bit of work and it loads with no issues but now they can "Join" & "Leave" but still issue damage. Code:java package net.myfallen.pvp; import java.util.HashMap;import java.util.List; import org.bukkit.Bukkit;import org.bukkit.OfflinePlayer;import org.bukkit.command.Command;import org.bukkit.command.CommandSender;import org.bukkit.entity.Entity;import org.bukkit.entity.Player;import org.bukkit.event.EventHandler;import org.bukkit.event.Listener;import org.bukkit.event.entity.EntityDamageByEntityEvent;import org.bukkit.event.entity.EntityDamageEvent;import org.bukkit.metadata.FixedMetadataValue;import org.bukkit.metadata.MetadataValue;import org.bukkit.plugin.Plugin;import org.bukkit.plugin.java.JavaPlugin;import org.bukkit.scoreboard.DisplaySlot;import org.bukkit.scoreboard.Objective;import org.bukkit.scoreboard.Score;import org.bukkit.scoreboard.Scoreboard;import org.bukkit.scoreboard.ScoreboardManager; public class Main extends JavaPlugin implements Listener { private static final HashMap<String, Boolean> pvp = new HashMap<String, Boolean>();; private Boolean pvpenabled; private Boolean pvpdisabled; public void onEnable() { getLogger().info("[PVPToggler] - Starting up."); this.getServer().getPluginManager().registerEvents(this,this); } public void onDisable() { getLogger().info("[PVPToggler] - Disabled."); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { ScoreboardManager manager = Bukkit.getScoreboardManager(); Scoreboard board = manager.getNewScoreboard(); Objective objective = board.registerNewObjective("Player Kills", "playerKillCount"); objective.setDisplaySlot(DisplaySlot.SIDEBAR); // Set sidebar name objective.setDisplayName("PVP - Player Kills!"); if(cmd.getName().equalsIgnoreCase("pvpjoin")) { sender.sendMessage("[PVPToggler] - You have joined PVP, anyone else that has joined PVP can kill you now."); sender.sendMessage("[PVPToggler] - Please Note: By joining PVP you have accepted a global PVP battle. To leave type: /pvpleave"); pvp.put(sender.getName(), pvpenabled); // THis has assigned PVP Enabled return true; } if(cmd.getName().equalsIgnoreCase("pvpleave")) { sender.sendMessage("[PVPToggler] - You have left PVP, You will not receive anymore damage."); sender.sendMessage("[PVPToggler] - Mobs and other entities can hurt you but other players cannot."); pvp.remove(sender.getName()); // Removed it. return true; } return false; }// Lets check if they can PVP. @EventHandler public void onPlayerDamage(EntityDamageByEntityEvent event) { if(event.getEntity() instanceof Player) { Entity player = event.getEntity(); if(!pvp.get(player)) { event.setCancelled(true); } else { if(pvp.get(player)) { return; } } } } }