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

Как добавить эффект от зелья игроку?

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

  1. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Ситуация такая , я недавно изучил Java и пытаюсь что-то написюкать . Даже появилась надобность !

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

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

    Ну , великие умы человечества , надеюсь вы мне поможете !
    :)
     
  2. alexandrage

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

    Баллы:
    173
  3. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Там же по идее нужно получить локацию игрока , локацию блока и создать условия :
    public void Interact(PlayerEvent e)
    {
    Player p = e.getPlayer();
    Block b = e.getBlock();
    Location loc1 = b.getlocation();
    Location loc2 = p.getLocation();
    if(loc1 != loc2) return;
    }
    Затем,после этого условия написать , что будет происходить . НО при вводе функции :
    p.addPotionEffect(PotionEffectType.SLOW, 30);
    Выходит ошибка , в которой сказано , что не так введены аргументы.
    Именно поэтому я задал вопрос,ибо уже хз где рыскать .
     
    Последнее редактирование: 18 дек 2017
  4. TheZefirrkka

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

    Баллы:
    76
    Мда... Удачи тебе.
    Если что, этот ивент не вызовется, а у эффекта зелий есть ещё и время, сила эффекта, частицы , который можно в этом методе отключить/выключить.-
     
  5. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    А еще так добавить эффект нельзя, нужно создавать объяект p.addPotionEffect(new PotionEffect(PotionEffectType.TYPE, multiplier, delay));
     
  6. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Спасибо
    Просто я еще не очень опытен и это мой первый язык программирования
    :)
     
  7. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    А какой именно ивент подключить ?
     
  8. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    PlayerMoveEvent, а дальше отслеживать плиту, которая находится под игроком
     
  9. TheZefirrkka

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

    Баллы:
    76
    PlayerInteractEvent для плит можно ещё
    Так даже лучше будет.
     
    Последнее редактирование: 18 дек 2017
  10. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Точно
     
  11. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Я тут попробовал забасать аптечки из сталкера типо вот что вышло, но вылазет ошибка .
    ==============================
    Главный класс
    ==============================
    package MainPack;

    import java.util.ArrayList;
    import java.util.List;

    import org.bukkit.Material;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;

    import net.md_5.bungee.api.ChatColor;



    public class Main extends JavaPlugin{

    public void onEnable() {
    getServer().getPluginManager().registerEvents( new SmallHandler(), this);
    getLogger().info("Healer Started !");
    SmallMain();
    }
    public void onDisable() {
    getLogger().info("Healer Disabled !");
    }

    private void SmallMain()
    {
    ItemStack item = new ItemStack(Material.GOLDEN_APPLE);
    ItemMeta meta = item.getItemMeta();
    meta.setDisplayName(ChatColor.GREEN + "Аптечка");
    List<String> lore = new ArrayList<String>();
    lore.add("Обыкновенная аптечка есть у каждого сталкера . Восстанавливает 5хп !");
    item.setItemMeta(meta);
    meta.setLore(lore);
    }
    ====================================
    Слушатель
    ====================================

    package MainPack;

    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;

    import net.md_5.bungee.api.ChatColor;

    public class SmallHandler implements Listener{
    @EventHandler
    public void onInteract(PlayerInteractEvent e)
    {
    if(e.getPlayer().getItemInHand().getType() != Material.GOLDEN_APPLE) return;
    if(e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
    Player p = e.getPlayer();
    ItemStack item = p.getItemInHand();
    ItemMeta meta = item.getItemMeta();
    if(!(meta.hasDisplayName())) return;
    if(!(meta.hasLore())) return;
    if(!(meta.getDisplayName().equals(ChatColor.GREEN + "Аптечка"))) return;
    if(!(meta.getLore().get(0).equals("Обыкновенная аптечка есть у каждого сталкера . Восстанавливает 5хп !"))) return;
    e.setCancelled(true);
    onRemoveItem(p);
    onHeal(p);
    }
    private void onRemoveItem(Player p)
    {
    ItemStack item = p.getItemInHand();
    item.setAmount(item.getAmount() - 1);
    p.setItemInHand(item);
    }
    private void onHeal(Player p)
    {
    p.setHealth(p.getHealth() + 5);
    p.setHealth(p.getHealth());
    }
    }


    Ошибка прикреплена .
    Заранее спасибо!
     

    Вложения:

  12. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Ах , да.И plugin.yml :

    name: Heals
    main: MainPack.Main
    version: 1.0.0
    author: Karamba99
     
  13. TheZefirrkka

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

    Баллы:
    76
    Main 14 строка
     
  14. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Аххах, public void onEnable()
     
  15. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Наверное ты уже используешь какой-то свой плагин, который использует такой же путь к главному классу как и этот. оформляй пакеты так, пример ru.HunterGaming.имя_проекта, а в plugin.yml ru.HunterGaming.Имя_проекта.Главный_клаас
     
  16. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Теперь говорит мне на строку 19.
    19 : SmallHeal();
     
  17. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Все,разобрался,а как добавить к хп игрока 5 сердец?
     
  18. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    player.setMaxHealth(30);
    player.setHealth(30);

    Что я написал выше, помогло исправить ошибку?
     
  19. Автор темы
    Karamba99

    Karamba99 Ньюби Пользователь

    Баллы:
    1
    Имя в Minecraft:
    Karamba99
    Да, одну из них.
    Это к максимальному прибавить 5 сердец, а мне нужно получить здоровье игрока , а затем прибавить к нему 5хп.
    Я думаю,что так,но не работает
    private void Healer(Player p)
    {
    p.sethealth(p.gethealth() + 1);
    }
    Ну и естественно его в PlayerInteractEvent объявить
     
  20. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Нужно вначале установить максимальное здоровье, а потом здоровье игрока. Т.е. так
    p.setMaxHealth(p.gethealth() + 1);
    p.setHealth(p.gethealth() + 1);
     

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