- Баллы
- 88
Подскажите, где в этом коде допущены ошибки
ArenaPVP.java
ArenaManager.java
Arena.java
ArenaPVP.java
Код:
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class ArenaPVP extends JavaPlugin implements Listener
{
@Override
public void onEnable(){
new ArenaManager(this);
if (getConfig().contains("1"))
{
ArenaManager.getManager().loadGames();
}
saveDefaultConfig();
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]){
if(!(sender instanceof Player)){
sender.sendMessage("Только игроки могут использовать эту команду!");
return true;
}else{
Player p = (Player) sender;
if(cmd.getName().equalsIgnoreCase("create")){
ArenaManager.getManager().createArena(p.getLocation());
p.sendMessage("Арена создана в " + p.getLocation().toString());
return true;
}
if(cmd.getName().equalsIgnoreCase("join")){
if(args.length != 1){
p.sendMessage("Insuffcient arguments!");
return true;
}
int num = 0;
try{
num = Integer.parseInt(args[0]);
}catch(NumberFormatException e){
p.sendMessage("Неправильный арена ID");
}
ArenaManager.getManager().addPlayer(p, num);
return true;
}
if(cmd.getName().equalsIgnoreCase("leave")){
ArenaManager.getManager().removePlayer(p);
p.sendMessage("Вы покинули арену!");
return true;
}
if(cmd.getName().equalsIgnoreCase("remove")){
if(args.length != 1){
p.sendMessage("Insuffcient arguments!");
return true;
}
int num = 0;
try{
num = Integer.parseInt(args[0]);
}catch(NumberFormatException e){
p.sendMessage("Неправильный арена ID");
}
ArenaManager.getManager().removeArena(num);
return true;
}
}
return false;
}
@EventHandler
public void onRClick(PlayerInteractEvent e)
{
e.getAction();
if (Action.RIGHT_CLICK_BLOCK == e.getAction() || Action.RIGHT_CLICK_AIR == e.getAction())
{
if (e.getPlayer().getItemInHand().getItemMeta().getDisplayName().equals("Dragon's Wand"))
{
Player player = e.getPlayer();
player.launchProjectile(Fireball.class);
}
}
}
}
Код:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.*********ventory.ItemStack;
public class ArenaManager{
public Map<String, Location> locs = new HashMap<String, Location>();
public static ArenaManager a = new ArenaManager();
Map<String, ItemStack[]> inv = new HashMap<String, ItemStack[]>();
Map<String, ItemStack[]> armor = new HashMap<String, ItemStack[]>();
List<Arena> arenas = new ArrayList<Arena>();
int arenaSize = 0;
ArenaPVP plugin;
public ArenaManager(ArenaPVP arenaPVP) {
this.plugin = arenaPVP;
}
public ArenaManager(){
}
public static ArenaManager getManager(){
return a;
}
public Arena getArena(int i){
for(Arena a : arenas){
if(a.getId() == i){
return a;
}
}
return null;
}
public void addPlayer(Player p, int i){
Arena a = getArena(i);
if(a == null){
p.sendMessage("Invalid arena!");
return;
}
a.getPlayers().add(p.getName());
inv.put(p.getName(), p.getInventory().getContents());
armor.put(p.getName(), p.getInventory().getArmorContents());
p.teleport(a.spawn);
}
public void removePlayer(Player p){
Arena a = null;
for(Arena arena : arenas){
if(arena.getPlayers().contains(p.getName())){
a = arena;
}
}
if(a == null || !a.getPlayers().contains(p.getName())){
p.sendMessage("Invalid operation!");
return;
}
a.getPlayers().remove(p.getName());
p.getInventory().setContents(inv.get(p.getName()));
p.getInventory().setArmorContents(armor.get(p.getName()));
inv.remove(p.getName());
armor.remove(p.getName());
p.teleport(locs.get(p.getName()));
locs.remove(p.getName());
}
public void createArena(Location l){
int num = arenaSize + 1;
arenaSize++;
Arena a = new Arena(l, num);
arenas.add(a);
plugin.getConfig().set("Arenas" + num, serializeLoc(l));
List<Integer> list = plugin.getConfig().getIntegerList("Arenas.Arenas");
list.add(num);
plugin.getConfig().set("Arenas.Arenas", list);
}
public void removeArena(int i){
for(String s : getArena(i).getPlayers()){
Player p = Bukkit.getPlayerExact(s);
if(p != null){
p.teleport(locs.get(p.getName()));
locs.remove(p.getName());
}
}
arenas.remove(getArena(i));
}
public void loadGames(){
for(int i : plugin.getConfig().getIntegerList("Arenas.Arenas")){
Arena a = new Arena(deserializeLoc(plugin.getConfig().getString("Arenas" + i)), i);
arenas.add(a);
}
}
public String serializeLoc(Location l){
return l.getWorld().getName()+","+l.getBlockX()+","+l.getBlockY()+","+l.getBlockZ();
}
public Location deserializeLoc(String s){
String[] st = s.split(",");
return new Location(Bukkit.getWorld(st[1]), Integer.parseInt(st[1]), Integer.parseInt(st[2]), Integer.parseInt(st[3]));
}
}
Код:
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
public class Arena{
//you want some info about the arena stored here
int number = 0;//the arena id
Location spawn = null;//spawn location for the arena
List<String> players = new ArrayList<String>();//list of players
//now let's make a few getters/setters, and a constructor
public Arena(Location loc, int id){
this.spawn = loc;
this.number = id;
}
public int getId(){
return this.number;
}
public List<String> getPlayers(){
return this.players;
}
}