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

Помогите Дроп с мобов

ekbasiaa

Активный участник
Пользователь
Баллы
66
Как реализовать дроп по типу яица с кур? Добавлять каждой сущности в мире отдельную переменную и дропать через таймер с проверкой времени? Возмжоно ли создавать кастомные NBT?
Необходимо именно рандомно и чтоб не одновременно)
 
Накидал такой вариант, но что-то прям не уверен...
Код:
public void update() {
        List<Entity> chickens = new ArrayList<>();
        BukkitTask task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
            int random = new Random().nextInt(Bukkit.getOnlinePlayers().size());
            Player randomPlayer = (Player) Bukkit.getOnlinePlayers().toArray()[random];
            List<Entity> entities = randomPlayer.getNearbyEntities(10, 10, 10);
           
            for (Entity entity : entities) {
                if (entity.getType() != EntityType.CHICKEN) continue;
                chickens.add(entity);
            }

            Entity chicken = chickens.get(random);
            World world = chicken.getWorld();
            Location loc = chicken.getLocation();
            world.dropItemNaturally(loc, new ItemStack(Material.FEATHER, 1));
        }, -1L, 20L * 30);
    }
 
Для кастомных данных с 1.14 в Paper существует PersistentDataContainer
 
Накидал такой вариант, но что-то прям не уверен...
Код:
public void update() {
        List<Entity> chickens = new ArrayList<>();
        BukkitTask task = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
            int random = new Random().nextInt(Bukkit.getOnlinePlayers().size());
            Player randomPlayer = (Player) Bukkit.getOnlinePlayers().toArray()[random];
            List<Entity> entities = randomPlayer.getNearbyEntities(10, 10, 10);
         
            for (Entity entity : entities) {
                if (entity.getType() != EntityType.CHICKEN) continue;
                chickens.add(entity);
            }

            Entity chicken = chickens.get(random);
            World world = chicken.getWorld();
            Location loc = chicken.getLocation();
            world.dropItemNaturally(loc, new ItemStack(Material.FEATHER, 1));
        }, -1L, 20L * 30);
    }
  1. Реализация в таймере не такая уж и плохая.
  2. Ненужно получать сущностей рядом с игроком, пустая трата времени процессора еще 1 циклом, просто получи всех сущностей и я даю 100% гарантию что она будет рядом с игроком
  3. Очень плохая реализация рандомного дропа, следует пробежаться по каждой курице и рассчитать для нее рандом, ибо чем больше у тебя куриц тем меньше у тебя будет падать с них лута
  4. Зачем вешать на курицу еще какойто тег? просто пробегись по ним и все
 
  1. Реализация в таймере не такая уж и плохая.
  2. Ненужно получать сущностей рядом с игроком, пустая трата времени процессора еще 1 циклом, просто получи всех сущностей и я даю 100% гарантию что она будет рядом с игроком
  3. Очень плохая реализация рандомного дропа, следует пробежаться по каждой курице и рассчитать для нее рандом, ибо чем больше у тебя куриц тем меньше у тебя будет падать с них лута
  4. Зачем вешать на курицу еще какойто тег? просто пробегись по ним и все
2 и 3 поясни подробнее) + 3 отвечает на твой 4 вопрос
В майне это реализовано через нбт layTime, которая просто является обратным отсчётом и при movementTick дропает яйко c повторной устанавкой layTime в промежутке от/до, если <= 0
Так-же туалетная бумага которая лучше во всём: :whistle:
обязательно)
 
  1. Реализация в таймере не такая уж и плохая.
  2. Ненужно получать сущностей рядом с игроком, пустая трата времени процессора еще 1 циклом, просто получи всех сущностей и я даю 100% гарантию что она будет рядом с игроком
  3. Очень плохая реализация рандомного дропа, следует пробежаться по каждой курице и рассчитать для нее рандом, ибо чем больше у тебя куриц тем меньше у тебя будет падать с них лута
  4. Зачем вешать на курицу еще какойто тег? просто пробегись по ним и все
И прибегать к ненужным вычислениям, в тз не указанно что да как должно работать, человек предоставил простую реализацию, хотя можно еще проще.
 
Thx) Но оно есть и в кране. Вам не перетащить меня на сторону туалетной бумаги!)
Я не знаю, что там существует в кране, я им не пользуюсь уже лет 5, чего и тебе желаю
 

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

Назад
Верх