Rubinks
Новичок
- Баллы
- 6
- Имя в Minecraft
- Rubinks
Создаю плагин мини игру но когда его загружаю на сервер вылезает ошибка:
at Monster.Hunter.RunMobSpawner.run(RunMobSpawner.java:14) ~[?:?]
at org.bukkit.craftbukkit.v1_13_R1.scheduler.CraftTask.run(CraftTask.java:58) ~[craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at org.bukkit.craftbukkit.v1_13_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:360) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.w(MinecraftServer.java:821) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.DedicatedServer.w(DedicatedServer.java:376) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.v(MinecraftServer.java:780) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.run(MinecraftServer.java:683) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at java.lang.Thread.run(Unknown Source) [?:?]
Вот класс RunMobSpawner:
package Monster.Hunter;
import org.bukkit.scheduler.BukkitRunnable;
public class RunMobSpawner extends BukkitRunnable{
private MonsterHunter plugin;
public RunMobSpawner(MonsterHunter pludin) {
this.plugin = plugin;
}
@Override
public void run() {
for(String name : plugin.getArenas().keySet()) {
plugin.getArenas().get(name).spawnMobs();
}
}
}
Вот основной класс(MonsterHunter):
package Monster.Hunter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import Monster.Hunter.MiniPlayer;
import Monster.Hunter.Arena;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
public class MonsterHunter extends JavaPlugin implements Listener{
int diamond_axe = 300;
boolean Diamond_axe = false;
public static Random rnd = new Random();
private HashMap<String, MiniPlayer> miniPlayers = new HashMap<String, MiniPlayer>();
private HashMap<String, Arena> arenas = new HashMap<String, Arena>();
public void onEnable(){
getLogger().info("RUN");
RunMobSpawner spawner = new RunMobSpawner(this);
spawner.runTaskTimer(this, 150L, 150L);
}
public void onDisable() {
getLogger().info("STOP");
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
miniPlayers.put(e.getPlayer().getDisplayName(), new MiniPlayer());
}
@EventHandler
public void onPlayerExit(PlayerQuitEvent e) {
miniPlayers.remove(e.getPlayer().getDisplayName());
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e) {
e.setDroppedExp(0);
}
@EventHandler
public void onEntityDeath(EntityDeathEvent e) {
e.getDrops().clear();
e.setDroppedExp(0);
if(e.getEntity().getKiller() != null) {
String nikename = e.getEntity().getKiller().getDisplayName();
if(miniPlayers.containsKey(nikename)) {
miniPlayers.get(nikename).addMoney(10);
}
e.getEntity().getKiller().sendMessage("You got 10 coins" );
}
}
@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
if(!miniPlayers.containsKey(e.getPlayer().getDisplayName())) {
return;
}
MiniPlayer miniPlayer = miniPlayers.get(e.getPlayer().getDisplayName());
if(e.getRightClicked().getType() == EntityType.ITEM_FRAME) {
ItemStack item = ((ItemFrame) e.getRightClicked()).getItem();
ItemMeta meta = item.getItemMeta();
if(meta.getLore() != null && meta.getLore().get(0) != null && meta.getLore().get(0) != "") {
int price = Integer.parseInt(meta.getLore().get(0));
e.getPlayer().sendMessage(price + "");
if(miniPlayer.getMoney() >= price) {
miniPlayer.setMoney(miniPlayer.getMoney() - price );
miniPlayer.addPlayerItem(item);
e.getPlayer().sendMessage("Ok");
}
}
}
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player player = (Player) sender;
if(command.getName().equalsIgnoreCase("/addArena")) {
if(args != null && args.length >= 3) {
String[] minLocation = args[1].split(",");
Location min = new Location(player.getWorld(),
Integer.parseInt(minLocation[0]),
Integer.parseInt(minLocation[1]),
Integer.parseInt(minLocation[2]));
String[] maxLocation = args[2].split(",");
Location max = new Location(player.getWorld(),
Integer.parseInt(maxLocation[0]),
Integer.parseInt(maxLocation[1]),
Integer.parseInt(maxLocation[2]));
Location spawn = player.getLocation();
arenas.put(args[0], new Arena(min, max, spawn));
return true;
}
}else if(command.getName().equalsIgnoreCase("/goArena")) {
for(ItemStack item : miniPlayers.get(player.getDisplayName()).getPlayerItems()) {
player.getInventory().addItem(item);
}
if(args != null) {
if(arenas.containsKey(args[0])) {
player.teleport(arenas.get(args[0]).getSpawnLocation());
return true;
}else {
player.sendMessage("There is no arena with name" + args[0]);
}
}
}else if(command.getName().equalsIgnoreCase("/buyMHI")) {
if(args != null && args.length >= 2) {
ItemStack ItemToGive = new ItemStack(Material.getMaterial(args[0]));
ItemMeta meta = ItemToGive.getItemMeta();
List<String> newLore = new ArrayList<String>();
for(int i = 0; i <args.length; i++) {
newLore.add(args);
}
meta.setLore(newLore);
ItemToGive.setItemMeta(meta);
player.getInventory().addItem(ItemToGive);
}
}
return false;
}
public HashMap<String, Arena> getArenas(){
return arenas;
}
}
Класс Arena:
package Monster.Hunter;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Drowned;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Zombie;
import org.*********ventory.ItemStack;
public class Arena {
private Location minLocation, maxLocation, spawnLocation;
public Arena(Location minLocation, Location maxLocation, Location spawnLocation) {
this.setMinLocation(minLocation);
this.setMaxLocation(maxLocation);
this.setSpawnLocation(spawnLocation);
}
public void spawnMobs() {
Location randomLocation = new Location(minLocation.getWorld(),
minLocation.getX() + (int) (Math.random() * (maxLocation.getBlockX() - minLocation.getBlockX()) +1),
minLocation.getY() +(int) (Math.random() * (maxLocation.getBlockY() - minLocation.getBlockY()) +1),
minLocation.getZ() + (int) (Math.random() * (maxLocation.getBlockZ() - minLocation.getBlockZ())+1));
Zombie drowned =(Zombie) randomLocation.getWorld().spawnEntity(randomLocation, EntityType.ZOMBIE);
drowned.setCustomName("undead");
drowned.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD));
}
public Location getMinLocation() {
return minLocation;
}
public void setMinLocation(Location minLocation) {
this.minLocation = minLocation;
}
public Location getMaxLocation() {
return maxLocation;
}
public void setMaxLocation(Location maxLocation) {
this.maxLocation = maxLocation;
}
public Location getSpawnLocation() {
return spawnLocation;
}
public void setSpawnLocation(Location spawnLocation) {
this.spawnLocation = spawnLocation;
}
}
Класс Mini Player:
package Monster.Hunter;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.*********ventory.ItemStack;
public class MiniPlayer {
public static int money = 0;
private List<ItemStack> playerItems = new ArrayList<ItemStack>();
public MiniPlayer() {
playerItems.add(new ItemStack(Material.IRON_SWORD));
}
public int getMoney(){
return money;
}
public void setMoney(int i) {
this.money = money;
}
public void addMoney(int money ) {
this.money += money;
}
public List<ItemStack> getPlayerItems() {
return playerItems;
}
public void setPlayerItems(List<ItemStack> playerItems) {
this.playerItems = playerItems;
}
public void addPlayerItem(ItemStack item) {
playerItems.add(item);
}
}
at Monster.Hunter.RunMobSpawner.run(RunMobSpawner.java:14) ~[?:?]
at org.bukkit.craftbukkit.v1_13_R1.scheduler.CraftTask.run(CraftTask.java:58) ~[craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at org.bukkit.craftbukkit.v1_13_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:360) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.w(MinecraftServer.java:821) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.DedicatedServer.w(DedicatedServer.java:376) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.v(MinecraftServer.java:780) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at net.minecraft.server.v1_13_R1.MinecraftServer.run(MinecraftServer.java:683) [craftbukkit-1.13.jar:git-Bukkit-1c7adf7]
at java.lang.Thread.run(Unknown Source) [?:?]
Вот класс RunMobSpawner:
package Monster.Hunter;
import org.bukkit.scheduler.BukkitRunnable;
public class RunMobSpawner extends BukkitRunnable{
private MonsterHunter plugin;
public RunMobSpawner(MonsterHunter pludin) {
this.plugin = plugin;
}
@Override
public void run() {
for(String name : plugin.getArenas().keySet()) {
plugin.getArenas().get(name).spawnMobs();
}
}
}
Вот основной класс(MonsterHunter):
package Monster.Hunter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import Monster.Hunter.MiniPlayer;
import Monster.Hunter.Arena;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.*********ventory.ItemStack;
import org.*********ventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
public class MonsterHunter extends JavaPlugin implements Listener{
int diamond_axe = 300;
boolean Diamond_axe = false;
public static Random rnd = new Random();
private HashMap<String, MiniPlayer> miniPlayers = new HashMap<String, MiniPlayer>();
private HashMap<String, Arena> arenas = new HashMap<String, Arena>();
public void onEnable(){
getLogger().info("RUN");
RunMobSpawner spawner = new RunMobSpawner(this);
spawner.runTaskTimer(this, 150L, 150L);
}
public void onDisable() {
getLogger().info("STOP");
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
miniPlayers.put(e.getPlayer().getDisplayName(), new MiniPlayer());
}
@EventHandler
public void onPlayerExit(PlayerQuitEvent e) {
miniPlayers.remove(e.getPlayer().getDisplayName());
}
@EventHandler
public void onPlayerDeath(PlayerDeathEvent e) {
e.setDroppedExp(0);
}
@EventHandler
public void onEntityDeath(EntityDeathEvent e) {
e.getDrops().clear();
e.setDroppedExp(0);
if(e.getEntity().getKiller() != null) {
String nikename = e.getEntity().getKiller().getDisplayName();
if(miniPlayers.containsKey(nikename)) {
miniPlayers.get(nikename).addMoney(10);
}
e.getEntity().getKiller().sendMessage("You got 10 coins" );
}
}
@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent e) {
if(!miniPlayers.containsKey(e.getPlayer().getDisplayName())) {
return;
}
MiniPlayer miniPlayer = miniPlayers.get(e.getPlayer().getDisplayName());
if(e.getRightClicked().getType() == EntityType.ITEM_FRAME) {
ItemStack item = ((ItemFrame) e.getRightClicked()).getItem();
ItemMeta meta = item.getItemMeta();
if(meta.getLore() != null && meta.getLore().get(0) != null && meta.getLore().get(0) != "") {
int price = Integer.parseInt(meta.getLore().get(0));
e.getPlayer().sendMessage(price + "");
if(miniPlayer.getMoney() >= price) {
miniPlayer.setMoney(miniPlayer.getMoney() - price );
miniPlayer.addPlayerItem(item);
e.getPlayer().sendMessage("Ok");
}
}
}
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
Player player = (Player) sender;
if(command.getName().equalsIgnoreCase("/addArena")) {
if(args != null && args.length >= 3) {
String[] minLocation = args[1].split(",");
Location min = new Location(player.getWorld(),
Integer.parseInt(minLocation[0]),
Integer.parseInt(minLocation[1]),
Integer.parseInt(minLocation[2]));
String[] maxLocation = args[2].split(",");
Location max = new Location(player.getWorld(),
Integer.parseInt(maxLocation[0]),
Integer.parseInt(maxLocation[1]),
Integer.parseInt(maxLocation[2]));
Location spawn = player.getLocation();
arenas.put(args[0], new Arena(min, max, spawn));
return true;
}
}else if(command.getName().equalsIgnoreCase("/goArena")) {
for(ItemStack item : miniPlayers.get(player.getDisplayName()).getPlayerItems()) {
player.getInventory().addItem(item);
}
if(args != null) {
if(arenas.containsKey(args[0])) {
player.teleport(arenas.get(args[0]).getSpawnLocation());
return true;
}else {
player.sendMessage("There is no arena with name" + args[0]);
}
}
}else if(command.getName().equalsIgnoreCase("/buyMHI")) {
if(args != null && args.length >= 2) {
ItemStack ItemToGive = new ItemStack(Material.getMaterial(args[0]));
ItemMeta meta = ItemToGive.getItemMeta();
List<String> newLore = new ArrayList<String>();
for(int i = 0; i <args.length; i++) {
newLore.add(args);
}
meta.setLore(newLore);
ItemToGive.setItemMeta(meta);
player.getInventory().addItem(ItemToGive);
}
}
return false;
}
public HashMap<String, Arena> getArenas(){
return arenas;
}
}
Класс Arena:
package Monster.Hunter;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Drowned;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Zombie;
import org.*********ventory.ItemStack;
public class Arena {
private Location minLocation, maxLocation, spawnLocation;
public Arena(Location minLocation, Location maxLocation, Location spawnLocation) {
this.setMinLocation(minLocation);
this.setMaxLocation(maxLocation);
this.setSpawnLocation(spawnLocation);
}
public void spawnMobs() {
Location randomLocation = new Location(minLocation.getWorld(),
minLocation.getX() + (int) (Math.random() * (maxLocation.getBlockX() - minLocation.getBlockX()) +1),
minLocation.getY() +(int) (Math.random() * (maxLocation.getBlockY() - minLocation.getBlockY()) +1),
minLocation.getZ() + (int) (Math.random() * (maxLocation.getBlockZ() - minLocation.getBlockZ())+1));
Zombie drowned =(Zombie) randomLocation.getWorld().spawnEntity(randomLocation, EntityType.ZOMBIE);
drowned.setCustomName("undead");
drowned.getEquipment().setItemInHand(new ItemStack(Material.WOOD_SWORD));
}
public Location getMinLocation() {
return minLocation;
}
public void setMinLocation(Location minLocation) {
this.minLocation = minLocation;
}
public Location getMaxLocation() {
return maxLocation;
}
public void setMaxLocation(Location maxLocation) {
this.maxLocation = maxLocation;
}
public Location getSpawnLocation() {
return spawnLocation;
}
public void setSpawnLocation(Location spawnLocation) {
this.spawnLocation = spawnLocation;
}
}
Класс Mini Player:
package Monster.Hunter;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.*********ventory.ItemStack;
public class MiniPlayer {
public static int money = 0;
private List<ItemStack> playerItems = new ArrayList<ItemStack>();
public MiniPlayer() {
playerItems.add(new ItemStack(Material.IRON_SWORD));
}
public int getMoney(){
return money;
}
public void setMoney(int i) {
this.money = money;
}
public void addMoney(int money ) {
this.money += money;
}
public List<ItemStack> getPlayerItems() {
return playerItems;
}
public void setPlayerItems(List<ItemStack> playerItems) {
this.playerItems = playerItems;
}
public void addPlayerItem(ItemStack item) {
playerItems.add(item);
}
}