Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

.

Статус
Закрыто для дальнейших ответов.
Дабы не надоедать всем своими вопросами, я решил создать единственную тему.
Я разрабатываю свой первый легкий плагин MoreHealth (я решил что он будет именно синего цвета :D).
Его функционал не велик, предполагается что в нем будет всего две команды:
/moreh enable
/moreh disable
Первая команда при наличии определенного права(далее пермишана) включает игроку дополнительный(е) ряд(ы) сердечек (кол-во рядов зависит от пермишена у игрока).
Вторая команда - выключает дополнительный ряд сердечек (на самом деле просто устанавливает стандартное кол-во сердечек).
Знаю, что такие плагины есть, возможно даже много, но, вспомните свои первые плагины, могу быть уверен, что они были не лучше.
Немного обо мне, я начинающий программист(далее гавнокодер), изучаю Java меньше месяца на JavaRush, мне 12 лет.
Так как это мой первый плагин, и саму Джаву я изучил плохо, прошу меня не сильно тралить.
JavaScript:
package com.roboman.plugins;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Solution extends JavaPlugin implements Listener
{

    @Override
    public void onLoad()
    {
        Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_AQUA + "Успешно загружен.");
    }

    @Override
    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(this, this);
        Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_GREEN + "Успешно включен.");
    }

    @Override
    public void onDisable()
    {
        Player[] players = getServer().getOnlinePlayers();
        for (Player player:players)
        {
            player.setMaxHealth(20);
        }
        Bukkit.broadcastMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.DARK_RED + "Был выключен.");
    }

    @EventHandler
    public void onQuit(PlayerQuitEvent pqe)
    {
        Player player = pqe.getPlayer();
        player.setMaxHealth(20);
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
    {
        Player player = null;
        if (sender instanceof Player)
        {
            player = (Player) sender;
        }
        if (cmd.getName().equalsIgnoreCase("moreh"))
        {
            if (у команды нет аргументов)//Вот в этом месте нужна помощь.
            {
                player.sendMessage(ChatColor.BLUE + "[MoreHealth] " + ChatColor.RED + "Использование плагина: " + ChatColor.GREEN + "/morehealth <args>");
            }
            return true;
        }
        return false;
    }
}
name: MoreHealth
main: com.roboman.plugins.Solution
version: 0.1
author: Mr_RoboMan
description: Плагин для дополнительных сердец.
commands:
moreh:
description: Основная команда плагина.
permission: morehealth.user
usage: /<command> [args]
Прощу помочь, как узнать (желательно в одном if()) что у команды нет аргументов?
Пробовал всякое args.equals(null) и т.д. = не работает.
Давай разберемся, что из себя представляет args?
 
Не знаю, но как я думаю: это массив в котором записаны аргументы(наверно String) команды.
Правильно, это массив. Какой параметр есть у массива? Какого будет значение этого параметра при отсутствии аргументов?
 
Правильно, это массив. Какой параметр есть у массива? Какого будет значение этого параметра при отсутствии аргументов?
Наверно длинна массива, при отсутствии наверно будет null..
 
Наверно длинна массива, при отсутствии наверно будет null..
Ну раз до этого момента дошел, то подскажу. Длина масива будет равна 0. Т.е. проверяешь: если(длина масива == 0) то ...
 
Ну раз до этого момента дошел, то подскажу. Длина масива будет равна 0. Т.е. проверяешь: если(длина масива == 0) то ...
Блин, спасибо большое!)) А я постоянно проверял на null :D
Я пошел дальше писать плагин и совершать глупейшие ошибки.
Хотя не, лучше отдохну в официальную CS:GO :D
Прошу помочь. Что я делаю не так?
JavaScript:
if (player.getMaxHealth() > 20.0)
//Код

UP
 
Последнее редактирование:
Блин, спасибо большое!)) А я постоянно проверял на null :D
Я пошел дальше писать плагин и совершать глупейшие ошибки.
Хотя не, лучше отдохну в официальную CS:GO :D
Прошу помочь. Что я делаю не так?
JavaScript:
if (player.getMaxHealth() > 20.0)
//Код

UP
Ошибка какая-то или что?
 
Не подходит чет..
upload_2015-1-12_8-45-23.png
Меня удивляет ваша логика.
Всё дело в том что там 2 метода с таким названием, но возращают разные типы данных.
Ну а как мне получить то что надо... Т.Е. Просто int с максимальным кол-вом сердечек у игрока?..
 
Вот что использует например @fromgate - https://github.com/fromgate/ReActio...te/reactions/util/BukkitCompatibilityFix.java
Вполне сносное решение, а главное универсальное.
И тут я понял что смогу написать плагин без getMaxHealth() :D
Пожалуй сегодня выложу плагин. Если людям понравиться - буду дальше обновлять.
Хотя нет, еще вопрос как добавить в plugin.yml команду с аргументами? А именно:
/moreh enable
/moreh disable
 
И тут я понял что смогу написать плагин без getMaxHealth() :D
Пожалуй сегодня выложу плагин. Если людям понравиться - буду дальше обновлять.
Хотя нет, еще вопрос как добавить в plugin.yml команду с аргументами? А именно:
/moreh enable
/moreh disable
Достаточно добавить команду moreh, аргументы уже проверяешь в методе-обработчике ( args[0] ).
 
Достаточно добавить команду moreh, аргументы уже проверяешь в методе-обработчике ( args[0] ).
Это знаю, у меня сейчас все так и работает. Мне чтоб при tab высвечивало аргументы команды в чате (как у нормальных плагинов).
UP
UP :D
Еще один бессмысленный UP :D
 
Кроме дефолтных команд сервера не видел подобного. Пруфы?
А, да, извиняюсь провтыкал с чем-то перепутал наверно O.o.

То-есть если у меня в плагине единственная команда - /moreh а все остальные аргументы то из регистрировать не надо?
 
А, да, извиняюсь провтыкал с чем-то перепутал наверно :confused:.

То-есть если у меня в плагине единственная команда - /moreh а все остальные аргументы то из регистрировать не надо?
Да.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх