Идея Сделать плагин на ограничение максимально допустимого уровня прокачки персонажа

  • Автор темы Автор темы Artur97
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Artur97

Активный участник
Пользователь
Баллы
68
Имя в Minecraft
Kachkan
Кто бы мог подумать что такой вещи до сих пор нету в паутине интернет пространства . Перерыл все что мог - итог , ничего подобного нету
Кто может , имеет время и возможности прошу сделать ! Уверен это будет полезно и для друг кто возможно ранее искал и не нашел ничего подобного .
Версия желательно 1.10-1.11.2
 
О какой прокачке идёт речь?
 
О какой прокачке идёт речь?
Обычные уровни , которые можно потратить на зачарование и ремонт в ванильном майнкрафт

Хотелось бы становить максимальный уровень , после которого експ не ростет
 
Обычные уровни , которые можно потратить на зачарование и ремонт в ванильном майнкрафт

Хотелось бы становить максимальный уровень , после которого експ не ростет
if(player.getLevel() > 30) {
e.setCancelled(true);
}
Название евента не помню, но точно знаю что там есть Orb/Pickup
 
Должно работать.
Java:
package ua.haipls.ml;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerExpChangeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class MaxLevel extends JavaPlugin implements Listener{
    int maxlevels;  
    public void onEnable(){
        getServer().getPluginManager().registerEvents(this, this);
        saveDefaultConfig();
        maxlevels = getConfig().getInt("maxlevels");
        if(getConfig().getBoolean("command_provsi")){
          new BukkitRunnable() {
            @Override
            public void run() {
                for(Player p : Bukkit.getOnlinePlayers()){
                    if(p.getLevel() >= maxlevels){
                        p.setLevel(maxlevels);
                    }
                }
              
            }
        }
        .runTaskTimer(this, 0, getConfig().getInt("interval"));
    }
    }
    @EventHandler
    public void levels(PlayerExpChangeEvent e){
        if(e.getPlayer().getLevel() >= maxlevels){
        e.setAmount(0);
        e.getPlayer().setLevel(maxlevels);
        }
    }

}
https://yadi.sk/d/UTIEPwX83G883f
 
Должно работать.
Java:
package ua.haipls.ml;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerExpChangeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class MaxLevel extends JavaPlugin implements Listener{
    int maxlevels;
    public void onEnable(){
        getServer().getPluginManager().registerEvents(this, this);
        saveDefaultConfig();
        maxlevels = getConfig().getInt("maxlevels");
        if(getConfig().getBoolean("command_provsi")){
          new BukkitRunnable() {
            @Override
            public void run() {
                for(Player p : Bukkit.getOnlinePlayers()){
                    if(p.getLevel() >= maxlevels){
                        p.setLevel(maxlevels);
                    }
                }
            
            }
        }
        .runTaskTimer(this, 0, getConfig().getInt("interval"));
    }
    }
    @EventHandler
    public void levels(PlayerExpChangeEvent e){
        if(e.getPlayer().getLevel() >= maxlevels){
        e.setAmount(0);
        e.getPlayer().setLevel(maxlevels);
        }
    }

}
https://yadi.sk/d/UTIEPwX83G883f
Зачем шедулер? Тоже самое выполнить можно один раз прии старте и при входе, нах*й так сервер грузить?
 
Можно в 3 командых блока это сделать.
 
Зачем шедулер? Тоже самое выполнить можно один раз прии старте и при входе, нах*й так сервер грузить?
Евент проверяет уровень игрока при получения опыта.А шедулер нужен если уровень выдан был комадной,шедулер возможно отключить в конфиге,и там же настроить интервал.

PS: Шедулер запускаетса один раз при старте сервера.
 
Последнее редактирование:
Евент проверяет уровень игрока при получения опыта.А шедулер нужен если уровень выдан был комадной,шедулер возможно отключить в конфиге,и там же настроить интервал.

PS: Шедулер запускаетса один раз при старте сервера.
PlayerExpChangeEvent выполняется и при его модификации командой, насколько я знаю
 
PlayerExpChangeEvent выполняется и при его модификации командой, насколько я знаю
Ну проверь у меня не выполнялса.После достижения 30 лвл я прописал команду /xp 25L Haipls уровень стал 55 и не изменилса,но после получения опыта путем убийства моба, он стал 30 лвл как и должен.
 
Ну проверь у меня не выполнялса.После достижения 30 лвл я прописал команду /xp 25L Haipls уровень стал 55 и не изменилса,но после получения опыта путем убийства моба, он стал 30 лвл как и должен.
Отслеживать PlayerCommandPreprocessEvent. Уж лучше, чем шедулеры
 
Отслеживать PlayerCommandPreprocessEvent. Уж лучше, чем шедулеры
Не думаю что 1 шедулер что то сделает страшное серверу.Командой возможно выдать лвл другому игроку и как тогда отслеживать?
 
Не думаю что 1 шедулер что то сделает страшное серверу.Командой возможно выдать лвл другому игроку и как тогда отслеживать?
1 шедулер в основном потоке + 600 онлайн. Залагает страшно
 
шедулер нужен если уровень выдан был комадной
Вряд ли на сервере, где важна система уровней, кто-то будет командами выдавать опыт.
Не думаю что 1 шедулер что то сделает страшное серверу.Командой возможно выдать лвл другому игроку и как тогда отслеживать?
Я так понимаю, DonDays предлагает проверять уровень игрока после использования команды /xp (и подобных)
 
Всем спасибо , с данным вопросом в корне разобрался .
Ставил плагин ItemLoreStats , в конфиге настройка есть ,и вообще плагин сам хороший
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх