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

[СТАТЬЯ] Как сделать мини игру?

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

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

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    МИНИ ИГРА

    На самом деле, писать мини игру не так уж и сложно. Нужны просто вспомогательные классы. В первой части о написании мини игр, я напишу код класса Arena, ArenaManager, и ArenaUtil (класс, добавленный мной, для хранения арен). Класс Arena будет служить для нас чуть ли не основой плагина. Начнем с него.

    Что такое арена, думаю знают многие (в смысле MineCraft).

    У арены должно быть имя, минимальное кол-во игроков, для ее старта, максимальное кол-во игроков, List<String> с именами игроков, которые есть на арене, List<String> с ожидающими, булевское значение "в игре", время арены, и три локации - лобби, спавн, и локация конца игры.

    Начнем, наш класс арены:

    Код:
    package me.belka.energyapi;
    
    import java.util.ArrayList;
    import java.util.List;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    
    public class Arena extends ArenaManager {
    
        private List<String> players = new ArrayList<>(); // Лист с игроками
        private int time; // Время арены
        private int start; // Кол-во игроков для старта
        private int max; // Максимальное кол-во игроков
        private String name; // Имя арены
        private Location spawn, lobby, end; // Локации
        private List<String> waiters = new ArrayList<>(); // Лист с ожидающими
        private boolean inGame; // Булевское значение - в игре
    
        public Arena(String name, String prefix, int time, int start, int max, Location spawn, Location lobby, Location end) {
    
            this.time = time;
            this.max = max;
            this.name = name;
            this.spawn = spawn;
            this.lobby = lobby;
            this.end = end;
            this.prefix = prefix;
    
        } // Функция для создания арены. Для этого нам потребуются некоторые аргументы. Чтобы создать арену, нам нужно будет сделать переменную арены типа этой: Arena a = new Arena(...); , и затем пользоваться ей, но так арену мы создавать не будем, будем создавать ее через ArenaManager, об этом чуть позже
    
        public List<String> getPlayers() { // Метод getPlayers() возвращает лист игроков, который можно изменять.
            return players;
        }
    
        public int getTime() {// Метод getTime() возвращает время арены
            return time;
        }
    
        public void setTime(int time) { // Установка времени
            this.time = time;
        }
    
        public int getStart() { // Возвращает кол-во игроков для старта
            return start;
        }
    
        public void setStart(int start) { // Установка кол-ва игроков для старта
            this.start = start;
        }
    
        public int getMax() { // Возвращает кол-во макс. игроков
            return max;
        }
    
        public void setMax(int max) { // Установка числа макс. игроков
            this.max = max;
        }
    
        public String getName() { // Возвращает имя
            return name;
        }
    
        public void setName(String name) { // Установка имени
            this.name = name;
        }
    
        public Location getSpawn() { // Возвращает локацию спавна
            return spawn;
        }
    
        public void setSpawn(Location spawn) { // Установка локации спавна
            this.spawn = spawn;
        }
    
        public Location getLobby() { // Возвращает локацию лобби
            return lobby;
        }
    
        public void setLobby(Location lobby) { // Установка локации лобби
            this.lobby = lobby;
        }
    
        public Location getEnd() { // Возвращает локацию конца игры
            return end;
        }
    
        public void setEnd(Location end) { // Установка локации конца игры
            this.end = end;
        }
    
        public boolean isFull() { // Булевское значение, которое проверяет, полная ли арена
    
            if (players.size() >= max) {
            return true;
            } else {
            return false;
            }
    
        }
    
        public void sendMessage(String msg) { // Отсылка сообщения всем игрокам в арене
            for(String str : players) {
    
                Bukkit.getPlayer(str).sendMessage(msg);
    
            }
        }
    
        public boolean isInGame() { // Проверка, в игре ли арена
            return inGame;
        }
    
        public void setInGame(boolean inGame) { // Установка булевского значения "в игре"
            this.inGame = inGame;
        }
    
    }
    
    
    И теперь следующий класс, ArenaManager

    С помощью него можно будет добавлять игроку в арену, удалять его оттуда, делать что либо с ареной, и т.д.

    Код:
    package me.belka.energyapi;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.entity.Player;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class ArenaManager {
    
        private static ArenaManager am = new ArenaManager(); // Наш менеджер
        public List<Arena> arenas = new ArrayList<>(); // Лист с аренами, которые будут храниться временно
    
        public static ArenaManager getManager() { // Для того, чтобы использовать менеджер.
            return am;
        }
    
        public void addPlayer(Player p, Arena arena) { // Добавление игрока в арену
            if(arena == null) { // Проверка, существует ли арена
                p.sendMessage("§cNo arena!");
                return;
            }
    
            if(arena.isFull()) { // А она не заполнена?
                p.sendMessage(arena.getPrefix() +  "Arena is full!");
                return;
            }
    
            if(arena.isInGame()) { // А если она в игре?
                p.sendMessage(arena.getPrefix() + "Arena is already in game!");
                return;
            }
    
            p.setHealth(p.getMaxHealth()); // Лечим игрока
            p.setFireTicks(0); // Еще лечим
    
            p.teleport(arena.getLobby()); // Телепорт игрока в лобби
     
            arena.getPlayers().add(p.getName()); // Добавляем игрока к игрокам на арене
    
            int playersLeft = arena.getStart() - arena.getPlayers().size(); // Кол-во игроков минимум - кол-во игроков на арене
    
            if (playersLeft == 0) { // Если это число == 0, то старт арены
            startArena(arena);
            }
    
        }
    
        public void startArena(final Arena arena) { // Метод старта арены
            if(arena.getPlayers() != null) // Проверяем, не повыходили ли игроки?
    
                              for(String str : arena.getPlayers()) { // Берем все имена игроков
    
                                Player pl = Bukkit.getPlayer(str); // Превращяем их в игроков
    
                                pl.teleport(arena.getSpawn());
    
                                arena.setInGame(true); // Арена в игре!
    
                                arena.getWaiters().clear(); // Очищаем список ожидающих
    
                              }
    
            Bukkit.getScheduler().scheduleSyncDelayedTask(EnergyAPI.getAPI(), new Runnable() { // Запускаем шедулер, здесь мы его запустим, чтобы через какое-то время арена кончилась.
    
                public void run() {
                    endArena(arena); // Метод завершения игры на арене
                }
    
            }, arena.getTime() * 20); // Время арены в тиках умноженное на 20, чтобы это были секунды
    
        }
    
        public void endArena(Arena arena) { // Метод завершения игры на арене
            if(arena == null) { // А существует ли арена?
                return;
            }
    
            if(arena.getPlayers() != null) { // А на арене есть игроки?
    
                arena.sendMessage(arena.getPrefix() + "The end of the game!");
                arena.setInGame(false); // Арена не в игре!
    
                Iterator<String> players = arena.getPlayers().iterator(); // Итератор - почти тоже самое, что у оператор for, но только если здесь вы используете for, и начнете чистить список играющих, то у вас вылетит ConcurrentModificationException, поэтому здесь используем Iterator
    
                while(players.hasNext())
                { // Пока у итератора не кончились ячейки
                String str = players.next(); // Тоже, что и for (String str : arena.getPlayers())
    
                Player p = Bukkit.getPlayer(str); // Теперь это у нас игрок
    
                players.remove(); // Очищаем список играющих
    
                p.setHealth(p.getMaxHealth()); // Лечим игрока
    
                p.setFireTicks(0); // Еще лечим игрока
    
                removePlayer(p); // Убиарем игрока из арены
    
                p.teleport(arena.getEnd());
    
                }
    
            }
    
        }
    
        public void removePlayer(Player p) { // Метод удаления игрока из арены
            for(Arena arena : arenas) { // Проходимя по всем аренам
    
            if (arena == null) { // Арена существует?
                p.sendMessage("§cNo arena!");
                return;
            }
    
                if(arena.getPlayers().contains(p.getName())) { // А в ней есть игрок?
    
                p.setHealth(p.getMaxHealth()); // Лечим, потом еще
                p.setFireTicks(0);
    
                p.teleport(arena.getEnd());
    
                arena.getPlayers().remove(p.getName()); // Удаляем игрока из играющих
    
                arena.sendMessage(arena.getPrefix() + p.getName() + " left the game! §6" + arena.getPlayers().size() + "§4/§6" + arena.getMax()); // Он покинул нас :c
    
                if(arena.getPlayers().size() <= 1) { // А на арене остался только один, или нет игроков вообще? Заканчиваем арену.
                    endArena(arena);
                }
    
                }
    
            }
    
        }
    
    
        public void registerNewArena(String name, String prefix, int time, int start, int max, Location spawn, Location lobby, Location end) { // Как я и говорил, тут мы создаем арену, тоже самое, только тут мы ее еще будем хранить в листе
    
            Arena arena = new Arena(name, prefix, time, start, max, spawn, lobby, end);
    
            arenas.add(arena);
    
        }
    
        public boolean isInGame(Player p) { // Булевское значение, утилита. В игре ли игрок?
            for(Arena a : arenas) {
    
                if(a.getPlayers().contains(p.getName())) {
                    return true;
                }
            }
            return false;
        }
    
    
        public boolean isWaiter(Player p) { // А если игрок ожидающий? Еще одна утилита.
            for(Arena a : arenas) {
                if(a.getWaiters().contains(p.getName())) {
                    return true;
                }
            }
            return false;
        }
    
    
        public boolean hasPlayerInGame(Arena arena, Player p) { // Играет ли игрок на определенной арене?
            if(arena.getPlayers().contains(p.getName()) && !arena.getWaiters().contains(p.getName())) {
                return true;
    
            }
            return false;
        }
    
    
        public boolean hasWaiter(Arena arena, Player p) { // А может, он только ожидающий на этой арене?
            if(!arena.getPlayers().contains(p.getName()) && arena.getWaiters().contains(p.getName())) {
                return true;
            }
            return false;
        }
    
    
        public Arena getArena(String name) { // Найдем арену по имени
            for(Arena a : arenas) {
                if(a.getName().equalsIgnoreCase(name)) {
                    return a;
                }
            }
            return null;
        }
    
    
        public Arena getPlayingArena(Player p) { // В какой же арене играет игрок? Утилита.
            for(Arena a : arenas) {
                if(a.getPlayers().contains(p.getName())) {
                    return a;
                }
            }
            return null;
        }
    
        public void removeArena(Arena arena) { // Метод удаления арены
            if(arena != null) {
                arenas.remove(arena);
            }
        }
    
    
    }
    
    
    Так как с каждой перезагрузкой сервера каждый List любого типа в плагине очищается, и арена перестает существовать, то нам понадобится хранить арену в конфигурационном файле. Этю плюшку я для вас тоже приготовил :3

    И так, наш код, с идеальными комментариями будет ниже, т.к. Admin запретил больше 15 КК символов в сообщении :3
     
    Последнее редактирование модератором: 12 окт 2023
  2. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Класс ArenaUtil не делает ничего такого супер офигенного. Он просто сохраняет, и загружает данные из конфига.

    Код:
    package me.belka.energyapi;
    
    import java.io.File;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.configuration.file.YamlConfiguration;
    
    public class ArenaUtil {
    
        public static void saveArena(Arena arena, File f) { // Метод сохранения арены. Два аргумента - арена, и файл, куда сохранять.
       
            String name = arena.getName(); // Имя арены. Дальше просто разделяем каждую составляющую арены на части.
       
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f); // Наша конфигурация
       
            config.set("arenas." + name + ".prefix", arena.getPrefix().replace("&", "§"));
       
            config.set("arenas." + name + ".spawn.loc.world", arena.getSpawn().getWorld().getName());
            config.set("arenas." + name + ".spawn.loc.x", arena.getSpawn().getX());
            config.set("arenas." + name + ".spawn.loc.y", arena.getSpawn().getY());
            config.set("arenas." + name + ".spawn.loc.z", arena.getSpawn().getZ());
       
            config.set("arenas." + name + ".lobby.loc.world", arena.getLobby().getWorld().getName());
            config.set("arenas." + name + ".lobby.loc.x", arena.getLobby().getX());
            config.set("arenas." + name + ".lobby.loc.y", arena.getLobby().getY());
            config.set("arenas." + name + ".lobby.loc.z", arena.getLobby().getZ());
       
            config.set("arenas." + name + ".end.loc.world", arena.getEnd().getWorld().getName());
            config.set("arenas." + name + ".end.loc.x", arena.getEnd().getX());
            config.set("arenas." + name + ".end.loc.y", arena.getEnd().getY());
            config.set("arenas." + name + ".end.loc.z", arena.getEnd().getZ());
       
            config.set("arenas." + name + ".time", arena.getTime());
            config.set("arenas." + name + ".start", arena.getStart());
            config.set("arenas." + name + ".max", arena.getMax());
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            } // Типа сохранили, и подгрузили конфиг.
        }
    
        public static void loadArena(String name, File f) { // Загружаем арену, но тут в аргументах не арена, а строка, какую мы будем подгружать.
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f); // Наша конфигурация
       
    // Дальше идут три наших локации арены
    
            Location spawn = new Location(Bukkit.getWorld(config.getString("arenas." + name + ".spawn.loc.world")),
                    config.getDouble("arenas." + name + ".spawn.loc.x"),
                    config.getDouble("arenas." + name + ".spawn.loc.y"),
                    config.getDouble("arenas." + name + ".spawn.loc.z"));
       
            Location lobby = new Location(Bukkit.getWorld(config.getString("arenas." + name + ".lobby.loc.world")),
                    config.getDouble("arenas." + name + ".lobby.loc.x"),
                    config.getDouble("arenas." + name + ".lobby.loc.y"),
                    config.getDouble("arenas." + name + ".lobby.loc.z"));
       
            Location end = new Location(Bukkit.getWorld(config.getString("arenas." + name + ".end.loc.world")),
                    config.getDouble("arenas." + name + ".end.loc.x"),
                    config.getDouble("arenas." + name + ".end.loc.y"),
                    config.getDouble("arenas." + name + ".end.loc.z"));
       
            if(config.getConfigurationSection("arenas." + name) != null) {
                EnergyAPI.am.registerNewArena(name, config.getString("arenas." + name + ".prefix").replace("&", "§"),
                    config.getInt("arenas." + name + ".time"),
                    config.getInt("arenas." + name + ".start"),
                    config.getInt("arenas." + name + ".max"),
                    spawn,
                    lobby,
                    end);
           
                // Тут мы создали, и подгрузили арену.
    
                EnergyAPI.am.getArena(name).setInGame(false);
                EnergyAPI.am.getArena(name).setSpawn(spawn);
                EnergyAPI.am.getArena(name).setEnd(end);
                EnergyAPI.am.getArena(name).setLobby(lobby);
                EnergyAPI.am.getArena(name).setPrefix(config.getString("arenas." + name + ".prefix").replace("&", "§"));
                EnergyAPI.am.getArena(name).setTime(config.getInt("arenas." + name + ".time"));
                EnergyAPI.am.getArena(name).setMax(config.getInt("arenas." + name + ".max"));
                EnergyAPI.am.getArena(name).setStart(config.getInt("arenas." + name + ".start"));
    
    // И так, тут мы уже добавляем арену во временное хранение, в пожизненном хранении никуда ее не деваем.
    
            }
        }
    
        public static void loadAllArenas(File f) { // Метод, для удобной подгрузки всех арен из конфигурации в методе onEnable()
       
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f); // Наша конфигурация
       
            if(config.getConfigurationSection("arenas") != null) { // Проверяем, есть ли в конфиге секция "arenas"
           
            for(String an : config.getConfigurationSection("arenas").getValues(false).keySet()) { // Проходимся по всем подсекциям в секции "arenas"
                loadArena(an, f); // И тут загружаем каждую
            }
           
            }
        }
    
    // Далее пойдут методы для каждой функции, которые будет производиться не во временном, а в пожизненном хранении.
    
        public static void removeArena(String name, File f) { // Метод удаления арены
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            if(config.getConfigurationSection("arenas." + name) != null) { // Есть ли секция arenas.name?
                config.set("arenas." + name, null); // Теперь эта секция - null
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setStart(int i, Arena arena, File f) { // Метод для установки кол-ва игроков для старта
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) {
                config.set("arenas." + arena.getName() + ".start", i);
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setMax(int i, Arena arena, File f) { // Метод для установки макс. игроков
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) {
                config.set("arenas." + arena.getName() + ".max", i);
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setTime(int i, Arena arena, File f) { // Метод установки времени для арены
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) {
                config.set("arenas." + arena.getName() + ".time", i);
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setSpawn(Location loc, Arena arena, File f) { // Метод установки локации спавна
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            String name = arena.getName();
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) { // Есть такая секция? Далее разбиваем локацию на мир, x, y ,z.
                config.set("arenas." + name + ".spawn.loc.world", arena.getSpawn().getWorld().getName());
                config.set("arenas." + name + ".spawn.loc.x", arena.getSpawn().getX());
                config.set("arenas." + name + ".spawn.loc.y", arena.getSpawn().getY());
                config.set("arenas." + name + ".spawn.loc.z", arena.getSpawn().getZ());
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setLobby(Location loc, Arena arena, File f) { // Метод установки локации лобби
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            String name = arena.getName();
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) { // Есть такая секция? Далее разбиваем локацию на мир, x, y ,z.
                config.set("arenas." + name + ".lobby.loc.world", arena.getLobby().getWorld().getName());
                config.set("arenas." + name + ".lobby.loc.x", arena.getLobby().getX());
                config.set("arenas." + name + ".lobby.loc.y", arena.getLobby().getY());
                config.set("arenas." + name + ".lobby.loc.z", arena.getLobby().getZ());
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
        public static void setEnd(Location loc, Arena arena, File f) { // Метод установки локации конца игры
    
            YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
       
            String name = arena.getName();
       
            if(config.getConfigurationSection("arenas." + arena.getName()) != null) { // Есть такая секция? Далее разбиваем локацию на мир, x, y ,z.
                config.set("arenas." + name + ".end.loc.world", arena.getEnd().getWorld().getName());
                config.set("arenas." + name + ".end.loc.x", arena.getEnd().getX());
                config.set("arenas." + name + ".end.loc.y", arena.getEnd().getY());
                config.set("arenas." + name + ".end.loc.z", arena.getEnd().getZ());
            }
       
            try {
                config.save(f);
                config.load(f);
            } catch(Exception e1) {
                e1.printStackTrace();
            }
        }
    
    }
    
    С классом ArenaUtil закончили! Теперь арены можно сохранять, и не бояться за потерю данных.

    Теперь мы сделаем команды для арен! Класс GameTeam для этого и создан.

    Код:
    package me.belka.energyapi;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    
    public class GameTeam extends TeamManager {
    
        private List<String> teamPlayers = new ArrayList<>(); // Список игроков в команде
        private ChatColor color; // Цвет, который будет у игрока над головой
        private String name; // Имя команды
        private Arena arena; // Арена, в которой будет эта команда
     
        public GameTeam(String name, ChatColor color, Arena arena) { // Метод создания команды, затронем его в TeamManager
            this.name = name;
            this.color = color;
            this.arena = arena;
        }
     
        public String getName() { // Возвращает имя команды
            return name;
        }
     
        public void setName(String name) { // Устанавливает имя команды
            this.name = name;
        }
    
        public ChatColor getColor() { // Возвращает цвет команды... Дальше все понятно, все так же.
            return color;
        }
    
        public void setColor(ChatColor color) {
            this.color = color;
        }
    
        public List<String> getTeamPlayers() {
            return teamPlayers;
        }
    
        public void setTeamPlayers(List<String> teamPlayers) {
            this.teamPlayers = teamPlayers;
        }
    
        public Arena getArena() {
            return arena;
        }
    
        public void setArena(Arena arena) {
            this.arena = arena;
        }
     
        public void sendMessage(String msg) { // Утилита отсылки сообщения команде
            for(String players : teamPlayers) {
                Bukkit.getPlayer(players).sendMessage(msg);
            }
        }
     
        public boolean isFull() { // Утилита проверки - полная ли команда?
            if(teamPlayers.size() >= (arena.getPlayers().size() / 2)) {
                return true;
            }
            return false;
        }
     
    }
    
    Теперь приступим к классу TeamManager
     
    Последнее редактирование: 17 окт 2014
  3. Hilgert

    Hilgert Старожил Пользователь

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    пиши c:
     
  4. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    + 1 читатель! Сегодня как приду с учёбы, сразу начну с:
     
  5. Феня

    Феня Старожил Пользователь

    Баллы:
    123
    Skype:
    vasilev_max
    Имя в Minecraft:
    eblan_tupoj
    Го! C:
     
  6. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    тыц. Здесь был тутор, теперь он наверху.
     
    Последнее редактирование: 8 окт 2014
  7. Hilgert

    Hilgert Старожил Пользователь

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    Молодец!
     
  8. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    А вот к тебе вопрос - писал ли ты раньше игры, или теперь по моим туторам будешь учиться? :D
     
  9. Hilgert

    Hilgert Старожил Пользователь

    Баллы:
    123
    Skype:
    mixa2258
    Имя в Minecraft:
    Hilgert
    неа, не писал c:
    Может и научусь по твоим туторам :D
     
  10. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    УХУХУХУХУХХУ, Ну ты меня и вдохновил, всеее, парень, держись, там около 7-9 классов :D

    P.S. Все они по существу написаны.
     
  11. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ты же вроде Старожил, перемести все туторы в первое и второе сообщение, чтобы красивее было.
     
  12. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Допишу тутор по мини игре, и сделаю. Я вот тоже сначала думал делать резервы, но потом передумал. Ну что ж, чего людя хотят, то и сделаю.
     
  13. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Мини игры очень полезный тутор :good:
     
  14. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Здешние туторы == Туторы собранные с форумов баккита мной, и переведенные на русский язык. Следующий тутор будет про дизгайзы.
    Здешний тутор перекочевал на верх.
     
    Последнее редактирование: 8 окт 2014
  15. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Как это бы мне это разбросать на сервере на миры? Жду тутора мини-игр с использованием Multiverse API (каждая арена в своём мире, выгрузка мира из памяти по окончанию раунда и регенерация арены)
     
  16. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Тут все просто (без регенерации арены, прост я пока хз как сделать.) - Берешь, создаешь миры, и в них ставишь локацию лобби, спавна, и еще где-нибудь локацию конца игры. Поддержка разных миров у арен есть.
     
  17. rsod

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

    Баллы:
    68
    хреновый, очень хреновый пример.
    Подобные вещи надо выносить в методы.
    Код:
    public Location getLocationFromConfig(String path){
         return getLocationFromCustomConfig(this.getConfig(), path);
       }
       
       public Location getLocationFromCustomConfig(FileConfiguration file, String path){
         if(!file.contains(path)) return null;
         return new Location(Bukkit.getWorld(file.getString(path+".world")),
             file.getInt(path+".x"),
             file.getInt(path+".y"),
             file.getInt(path+".z"));
       }
       
       public void writeLocationToConfig(String path, Location loc){
         writeLocationToCustomConfig(this.getConfig(), path, loc);
       }
       
       public void writeLocationToCustomConfig(FileConfiguration file, String path, Location loc){
         if(loc == null){
           this.getConfig().set(path, null);
           return;
         }
         file.set(path+".world", loc.getWorld().getName());
         file.set(path+".x", loc.getBlockX());
         file.set(path+".y", loc.getBlockY());
         file.set(path+".z", loc.getBlockZ());
       }
    
    p.s. здесь я пренебрёг проверкой на существование мира, указанного в конфиге, так как плагин, из которого часть кода, я делал для себя, и там я знал, что
    неправильных входных данных быть не может.
     
  18. Автор темы
    BeLkA

    BeLkA Старожил Пользователь

    Баллы:
    153
    Skype:
    FayStaff
    Ну что ж, это лично мой метод записи данных. Вы можете изменять код, так, как Вам угодно. Я даю вам исходники, и вы делаете с ними все, что хотите ;)
     
  19. doodka

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

    Баллы:
    68
    Skype:
    d_oo_d
    Хороший тутор. Мне нравится :)
     
  20. Bars

    Bars Старожил Девелопер Пользователь

    Баллы:
    173
    Перевод с Bukkit Forums? :rolleyes:
    Я там для себя такой же почти что откопал :D
     
Статус темы:
Закрыта.

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