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

Karamba99

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

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

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

Ну , великие умы человечества , надеюсь вы мне поможете !
🙂
 
Там же по идее нужно получить локацию игрока , локацию блока и создать условия :
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);
Выходит ошибка , в которой сказано , что не так введены аргументы.
Именно поэтому я задал вопрос,ибо уже хз где рыскать .
 
Последнее редактирование:
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);
Мда... Удачи тебе.
Если что, этот ивент не вызовется, а у эффекта зелий есть ещё и время, сила эффекта, частицы , который можно в этом методе отключить/выключить.-
 
А еще так добавить эффект нельзя, нужно создавать объяект p.addPotionEffect(new PotionEffect(PotionEffectType.TYPE, multiplier, delay));
 
Спасибо
Просто я еще не очень опытен и это мой первый язык программирования
🙂
 
Мда... Удачи тебе.
Если что, этот ивент не вызовется, а у эффекта зелий есть ещё и время, сила эффекта, частицы , который можно в этом методе отключить/выключить.-
А какой именно ивент подключить ?
 
PlayerMoveEvent, а дальше отслеживать плиту, которая находится под игроком
 
PlayerInteractEvent для плит можно ещё
Так даже лучше будет.
 
Последнее редактирование:
PlayerInteractEvent для плит можно ещё
Так даже лучше будет.
Я тут попробовал забасать аптечки из сталкера типо вот что вышло, но вылазет ошибка .
==============================
Главный класс
==============================
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());
}
}


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

Вложения

  • Безымянный.png
    Безымянный.png
    61,5 КБ · Просмотры: 12
Наверное ты уже используешь какой-то свой плагин, который использует такой же путь к главному классу как и этот. оформляй пакеты так, пример ru.HunterGaming.имя_проекта, а в plugin.yml ru.HunterGaming.Имя_проекта.Главный_клаас
 
Наверное ты уже используешь какой-то свой плагин, который использует такой же путь к главному классу как и этот. оформляй пакеты так, пример ru.HunterGaming.имя_проекта, а в plugin.yml ru.HunterGaming.Имя_проекта.Главный_клаас
Теперь говорит мне на строку 19.
19 : SmallHeal();
 
Наверное ты уже используешь какой-то свой плагин, который использует такой же путь к главному классу как и этот. оформляй пакеты так, пример ru.HunterGaming.имя_проекта, а в plugin.yml ru.HunterGaming.Имя_проекта.Главный_клаас
Все,разобрался,а как добавить к хп игрока 5 сердец?
 
player.setMaxHealth(30);
player.setHealth(30);

Что я написал выше, помогло исправить ошибку?
Да, одну из них.
Это к максимальному прибавить 5 сердец, а мне нужно получить здоровье игрока , а затем прибавить к нему 5хп.
Я думаю,что так,но не работает
private void Healer(Player p)
{
p.sethealth(p.gethealth() + 1);
}
Ну и естественно его в PlayerInteractEvent объявить
 
Да, одну из них.
Это к максимальному прибавить 5 сердец, а мне нужно получить здоровье игрока , а затем прибавить к нему 5хп.
Я думаю,что так,но не работает
private void Healer(Player p)
{
p.sethealth(p.gethealth() + 1);
}
Ну и естественно его в PlayerInteractEvent объявить
Нужно вначале установить максимальное здоровье, а потом здоровье игрока. Т.е. так
p.setMaxHealth(p.gethealth() + 1);
p.setHealth(p.gethealth() + 1);
 
Назад
Верх