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

  • Автор темы Автор темы BeLkA
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Эхх был бы человек который мог научить подсказывать в трудных ситуациях.
 
Короче, рассказываю как нужно делать:
1. Ищите разные МГ, декомпилируете, смотрите. Пишите свою первую миниигру.
2. Доводите ее до ума, хотите написать вторую миниигру, но будет уже лень делать почти тоже самое.
3. Теперь идем и декоспилируем плагины mineplex'a и смотрим как там круто сделано и пытаемся написать что-то свое такое.
xD
 
Класс ArenaUtil не делает ничего такого супер офигенного. Он просто сохраняет, и загружает данные из конфига.

Java:
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 для этого и создан.

Java:
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
"теперь приступим к классу TeamManager" конец статьи... -_-
 
не удивительно что ты не знаешь -_-

(зато ты импортировать уже научился ._ .)
прогресс! )))
не удивительно что ты не знаешь -_-

(зато ты импортировать уже научился ._ .)
не бомби, но я решил сделать мод... я его уже сделал но лишь на командных блоках с дерьмо-оптимизацией... короче где тему создать про моды?
 
прогресс! )))

не бомби, но я решил сделать мод... я его уже сделал но лишь на командных блоках с дерьмо-оптимизацией... короче где тему создать про моды?
не на этом форуме.

Тут только по серверам
 
сервера с модами это одно. А создание модов НЕ СЮДА.

@Moderator убейте его
Че ты гонишь, есть раздел модификаций. А вот в плане помощи, это да, рашка не умеет в моды. Точнее умеет, но таких крайне мало и в основном любители на уровне кастомблока и тп.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх