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

Плагин [FIX]ItemFixer 3.1-Избавь свой сервер от читерских предметов!|Фикс DLC,WURST,SKILL|Upd 18.02.2018

Статус
Закрыто для дальнейших ответов.
Основной код на свежаке можно, а классы под версии отдельно, так все делают.
Ну тут все зависит от того, остался ли депрекадед код в новом апи или нет.
Это был сарказм про старую версию.
 
Пишу за деньги на 1.7.10. Косяк реализации, который нашел - ItemFlag в API есть, а в реализации нет.
Эт да. Были и такие приколы.
Я делаю типо проверки на креат, флай, год и тд. Тоесть в 1.5.2-1.8 можно чекать токо взрывное зелье и стрелу. А дальше появилась ещё одна стрела и зелье. И как их чекать я хз чтобы была поддержка старых версий.
Не пытайся засунуть всё в один класс. Сделай один класс с тем, что будет работать в любом случае на всех версиях сервера. Дальше подгружай другие классы по младшинству версии.
Ну у меня есть такое.

Java:
    HashMap<String, Boolean> bol = new HashMap<String, Boolean>();
    //Использую мапу, т.к у меня ~10 boolean значений которые не меняются после запуска сервера. И чтобы не загрязнять класс.
        String version = this.getServer().getClass().getPackage().getName().replace(".",  ",").split(",")[3];
        bol.put("use19", (version.equals("v1_10_R1") || version.equals("v1_9_R2") || version.equals("v1_9_R1")));
---
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
    public void onLaunch(ProjectileLaunchEvent e){
        if (e.getEntity().getShooter() instanceof Player) { // Ругается на эту строку. Если подключить ядро 1.5.2 без 1.10, то строку не подчеркивает.
            Player player = (Player) e.getEntity().getShooter();
            // if true then return - Приятно для чтения
            if (player.hasPermission("antirelog.bypass")) {
                return;
            }
                //if true then if true then logic - Плохо для чтения
                if (bol.get("use19")) {
                    //Слишком много типов? Прикола ради можно создать лист с типами и проверять наличие n в ней.
                    if (e.getEntity().getType() == EntityType.TIPPED_ARROW || e.getEntity().getType() == EntityType.ARROW || e.getEntity().getType() == EntityType.LINGERING_POTION || e.getEntity().getType() == EntityType.SPLASH_POTION ){
                        if (checkPlayer(player)) e.setCancelled(true);
                    }
                } else {
                    if (e.getEntity().getType() == EntityType.ARROW || e.getEntity().getType() == EntityType.SPLASH_POTION ){
                        if (checkPlayer(player)) e.setCancelled(true);
                    }
                }
            }
       
    }
 
Эт да. Были и такие приколы.
Не пытайся засунуть всё в один класс. Сделай один класс с тем, что будет работать в любом случае на всех версиях сервера. Дальше подгружай другие классы по младшинству версии.


Java:
    HashMap<String, Boolean> bol = new HashMap<String, Boolean>();
    //Использую мапу, т.к у меня ~10 boolean значений которые не меняются после запуска сервера. И чтобы не загрязнять класс.
        String version = this.getServer().getClass().getPackage().getName().replace(".",  ",").split(",")[3];
        bol.put("use19", (version.equals("v1_10_R1") || version.equals("v1_9_R2") || version.equals("v1_9_R1")));
---
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
    public void onLaunch(ProjectileLaunchEvent e){
        if (e.getEntity().getShooter() instanceof Player) { // Ругается на эту строку. Если подключить ядро 1.5.2 без 1.10, то строку не подчеркивает.
            Player player = (Player) e.getEntity().getShooter();
            // if true then return - Приятно для чтения
            if (player.hasPermission("antirelog.bypass")) {
                return;
            }
                //if true then if true then logic - Плохо для чтения
                if (bol.get("use19")) {
                    //Слишком много типов? Прикола ради можно создать лист с типами и проверять наличие n в ней.
                    if (e.getEntity().getType() == EntityType.TIPPED_ARROW || e.getEntity().getType() == EntityType.ARROW || e.getEntity().getType() == EntityType.LINGERING_POTION || e.getEntity().getType() == EntityType.SPLASH_POTION ){
                        if (checkPlayer(player)) e.setCancelled(true);
                    }
                } else {
                    if (e.getEntity().getType() == EntityType.ARROW || e.getEntity().getType() == EntityType.SPLASH_POTION ){
                        if (checkPlayer(player)) e.setCancelled(true);
                    }
                }
            }
      
    }
Там проблема оказывается была в том что getShooter () в 152 берется из Projectile. А в 1.10 из ProjectileSource.
Спасибо за советы.
 
А зачем нужен класс scheduler если можно сразу запустить Runs через onEnable?
Ну, это старая история. Шедулер на рефлексии был, вызывал разные классы и методы, которые передавались ему.
А тут у него 2 функции остались. Проверялка и кикалка.
Фиксанул дубликат кода в Runs.
https://github.com/alexandrage/EntFix/blob/master/src/EntFix/Runs.java
P.s Dereku не смотреть, там СТРАШНИЕ статики.
 
Java:
       Object CheckClass(Object o) {
            try {
                Class.forName("ЧТО ТО ТАМ1");
                return this.news.Functions(o);
            } catch (ClassNotFoundException e1) {
                try {
                Class.forName("ЧТО ТО ТАМ2");
                return this.old.Functions(o);
                } catch (ClassNotFoundException e2) {
                    return this.dinozavr.Functions(o);
                }
            }
        }

Как то так.
Java:
                Object shooter = Class.forName("org.bukkit.entity.Projectile").getMethod("getShooter");
                if (shooter instanceof Player) {
                    Player player = (Player) shooter;

И как мне правильно вытянуть getShooter()? В консоль shooter выводится как
public abstract org.bukkit.entity.LivingEntity org.bukkit.entity.Projectile.getShooter()
 
По всякому пытался обмануть плагин, работает как часы)
Спасибо автор!
 
Неплохая задумка. А я тут к вам с вопросиками.
1) Зачем регулярно проверять все инвентари, если конкретные предметы проверяются при использовании, выбрасывании и подбирании? Или этого уже нет?
2) Игрок может редактировать зачарования и NBT предметов в лишь том случае, если у него есть креатив? Или, может, на это и permission ядра какой влияет?
3) Что там с системой обновления? Удалена/работает?
 
1) Зачем регулярно проверять все инвентари, если конкретные предметы проверяются при использовании, выбрасывании и подбирании? Или этого уже нет?
Ну пока тестирую новую версию. Сейчас там токо проверка инвентаря. В новой версии используется удаление тегов, а предметы остаются.
2) Игрок может редактировать зачарования и NBT предметов в лишь том случае, если у него есть креатив? Или, может, на это и permission ядра какой влияет?
Онли креатив.
3) Что там с системой обновления? Удалена/работает?
Токо сообщения в консоль, о том что есть новая версия.
 
Ну пока тестирую новую версию. Сейчас там токо проверка инвентаря. В новой версии используется удаление тегов, а предметы остаются.
Да я не об этом, а о таймере, который раз в 15 секунд проверяет все предметы всех игроков. Нагрузочка же...
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх