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

Помогите Отключение опыта от торговли

Тема в разделе "Разработка плагинов для новичков", создана пользователем Phizzle, 25 июн 2020.

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

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

    Баллы:
    66
    Имя в Minecraft:
    Phizzle
    Привет всем, в новых версиях админы серверов сталкиваются с такой проблемой как "абуз жителей" в следствие чего игроки размножая и торгуя с жителями получают огромное количество опыта, я так и не нашел ивент через который я мог бы отключить выдачу опыта после успешной сделки с жителем, подскажите пожалуйста (1.15-1.16)
     
  2. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Никогда о таком не думал, но вот 2 доки возможно могут помочь или толкнуть на мысль
    Нашёл 3 ивента связанных с жителями
     
  3. Автор темы
    Phizzle

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

    Баллы:
    66
    Имя в Minecraft:
    Phizzle
    ивенты то я тоже нашел) но как получать из них результат сделки в виде кол-ва опыт - нет
     
  4. Exception_Prototype

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

    Баллы:
    96
    Согласно этому:
    PHP:
    // CraftBukkit 1.12
    // net.minecraft.entity.passive.EntityVillager#useRecipe
    if (recipe.getRewardsExp())
    {
        
    this.world.spawnEntity(new EntityXPOrb(this.worldthis.posXthis.posY 0.5Dthis.posZi));
    }
    При каждом использовании рецепта, в случае, если жителю разрешается дропать опыт, то он это делает.
    Контроль этого осуществляется с помощью переменой rewardsExp.

    org.bukkit.craft*********ventory.CraftMerchantRecipe#setExperienceReward
    org.*********ventory.MerchantRecipe#setExperienceReward
    (я не знаю почему форум делает звёздачками путь)

    Осталось только найти способом принудительно выключать всем жителям дроп опыта.
    Сперва я бы попробовал изучить эвенты выше более внимательнее, скорей всего через них может это всё получится, ибо там передаются рецепты торгов по которым можно пробежаться и сделать то, что я описал выше.
    Второе, что приходит в голову, так это при взаимодействии с сущностью, проверять является ли это житель и вырубать дроп опыта setExperienceReward(false) для каждого рецепта.
    Третье, в чём я менее уверен, и не знаю можно ли это сделать, ибо смотреть лень, так это получение списка всех рецептом и сразу установка им возможности дропа опыта на false, но скорей всего это

    Я смотрел версию 1.12, ибо у меня нет под рукой 1.15 а ставить просто так лень да и не за чем, не думаю что там сильно что-то изменилось, хоть и VillagerCareerChangeEvent отсутствует на 1.12.
     
    Последнее редактирование: 26 июн 2020
  5. Автор темы
    Phizzle

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

    Баллы:
    66
    Имя в Minecraft:
    Phizzle
    спасибо, я посмотрю, а на счет последнего абзаца, в 1.14 меняли полностью жителей, поэтому возможно и способы управления наградой
     

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