1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Ошибка [?:?]

Тема в разделе "Разработка плагинов для новичков", создана пользователем Rubinks, 7 авг 2018.

Статус темы:
Закрыта.
  1. Автор темы
    Rubinks

    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);
    }
    }
     
  2. ZENEGIX

    ZENEGIX Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Все, что могу сказать по той инфе, что ты предоставил, ошибка в данном участке кода
    Код:
    @Override
    public void run() {
      for(String name : plugin.getArenas().keySet()) {
        plugin.getArenas().get(name).spawnMobs();
      }
    }
    
    Скорее всего, тут
    Код:
    plugin.getArenas().get(name).spawnMobs();
    Учитесь читать ошибки, это не так сложно)
    Ну или хотя бы вставляйте полные ошибки, а то вы предоставили только стек вызова. Ни типа ошибки, ни сообщения нет.
     
  3. ZENEGIX

    ZENEGIX Активный участник Пользователь

    Баллы:
    61
    Имя в Minecraft:
    ZENEGIX
    Еще не тестировали код на двух и более игроках?)
    Напоритесь на ошибку в коде, а именно в MiniPlayer. Изменяете статик переменную в каждом инстансе объекта.
     
  4. Автор темы
    Rubinks

    Rubinks Новичок

    Баллы:
    6
    Имя в Minecraft:
    Rubinks

    [11:44:13 WARN]: [MonsterHunter] Task #5 for MonsterHunter v1.0 generated an exception
    java.lang.NullPointerException: null
    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) [?:?]
     
  5. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Так лень найти 14 строчку в классе RunMobSpawner и посмотреть какая переменная там null?
    И код лучше под спойлер давать, можно и обернуть в
    Код:
    
    
     
  6. Автор темы
    Rubinks

    Rubinks Новичок

    Баллы:
    6
    Имя в Minecraft:
    Rubinks
    Я разобрался
     
Статус темы:
Закрыта.

Поделиться этой страницей