Войти или зарегистрироваться

Помогите Kick с сервера при входе, если у игрока дефолтовские permissions

Статус
Закрыто для дальнейших ответов.

Epictrium

Новичок
Пользователь
Баллы
6
Имя в Minecraft
Epictrium
Приветствую!

Недавно возникла идея сделать автоматический "кик" с сервера при входе, если игрок состоит в permissions как default. То есть на сервер могут зайти только те игроки, которые имеют permissions выше дефолтовских.

Написал код, протестил - кикать то кикает, но кикает всех без разбору, не обращая внимания на permissions игрока..

Собственно сам код:
Код:
package lst.permissionizer;

import org.bukkit.plugin.java.JavaPlugin;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

public class LSTPermissionizer extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
 
    @Override
    public void onEnable() {
           Bukkit.getPluginManager().registerEvents(this, this);
    }
 
    @EventHandler
    public void onPlayerConnect(PlayerJoinEvent e){
        Player p = e.getPlayer();
     
        if(p.hasPermission("lst.guest")){
            p.kickPlayer(ChatColor.RED + "KICK!");
        }
        else if(p.hasPermission("lst.member")){
            return;
        }
    }
}

Дефолтовская группа у меня именуется как "lst.guest", а группа игроков, которую сервер не будет кикать называется "lst.member".

В качестве API использую jar файл крафтбаккита версии 1.8.7

Прошу Вашей помощи! С меня огромное спасибо!
 
Код:
@EventHandler
public void onPlayerConnect(PlayerJoinEvent e)
{
if(e.getPlayer().hasPermission("lst.member"))
    return;
e.getPlayer().kickPlayer(ChatColor.RED + "KICK!");
}
Попробуйте так. Чтобы не кикало выдайте разрешение группе lst.member.
 
Код:
@EventHandler
public void onPlayerConnect(PlayerJoinEvent e)
{
if(e.getPlayer().hasPermission("lst.member"))
    return;
e.getPlayer().kickPlayer(ChatColor.RED + "KICK!");
}
Попробуйте так. Чтобы не кикало выдайте разрешение группе lst.member.
Попробовал - все равно кикает всех без разбору =(
Почему PlayerLoginEvent не используете? Так можно вообще не пускать на сервер.
Пробовал - не помогло(
up((
 
А ты в плугин умл регистрировал пермишены? Не факт, что поможет, но стоит попробовать.
Можешь обращаться к пексу, если он есть, и использовать его методы получения пермишена.
 
А ты в плугин умл регистрировал пермишены? Не факт, что поможет, но стоит попробовать.
Можешь обращаться к пексу, если он есть, и использовать его методы получения пермишена.
Пробовал и в плугин умл добавлять пермишены - тот же резульат.
А как обратиться к пексу и использовать его методы получения пермишена?
 
Пробовал и в плугин умл добавлять пермишены - тот же резульат.
А как обратиться к пексу и использовать его методы получения пермишена?
Java:
Player player = (Player) sender;
PermissionUser user = PermissionsEx.getUser(player);

if (user.has("super.permission.node")) {
// do smth
}
 
Java:
Player player = (Player) sender;
PermissionUser user = PermissionsEx.getUser(player);

if (user.has("super.permission.node")) {
// do smth
}
Итак, вот код:
Код:
package lst.permissionizer;
import org.bukkit.plugin.java.JavaPlugin;
import ru.tehkode.permissions.PermissionUser;
import ru.tehkode.permissions.bukkit.PermissionsEx;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
public class LSTPermissionizer extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    @Override
    public void onEnable() {
           Bukkit.getPluginManager().registerEvents(this, this);
    }
    @EventHandler
    public void onPlayerConnect(PlayerJoinEvent sender){
        Player player = (Player) sender;
        PermissionUser user = PermissionsEx.getUser(player);
        
        if (user.has("Guest")) {
            sender.getPlayer().kickPlayer(ChatColor.RED + "KICK!");
        }
        else {
            return;
        }
    }
}

Вот пермишен умл:
Код:
groups:
  Guest:
    default: true
    build: false
    permissions:
    - modifyworld.*
  Member:
    default: false
    build: true
    permissions:
    - modifyworld.*

users:
  Epictrium:
    group:
    - Member

Вот плугин умл:
Код:
name: LSTPermissionizer
main: lst.permissionizer.LSTPermissionizer
version: 1.1.0
Результат - теперь вообще никого не кикает...
З.Ы. При запуске сервера в конфиге ни единой ошибки по пексу и по моему плагину...
 
Java:
    @EventHandler
    public void onLogin(PlayerLoginEvent e){
        if(!e.getPlayer().hasPermission("lst.member")){
            e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
            e.setKickMessage(ChatColor.RED + "KICK.");
        }
    }
 
Последнее редактирование:
Java:
    @EventHandler
    public void onLogin(PlayerLoginEvent e){
        if(!e.getPlayer().hasPermission("lst.member")){
            e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
            e.setKickMessage(ChatColor.RED + "KICK.");
        }
    }
Мне кажется, что у меня проблема с обозначением самого пермишена, потому что либо кикает всех, либо не кикает никого)) По сути скрипт работает, но что то не так с обозначением перпишенов)

Вот список того, что я пробовал с обозначением permissions:

1) hasPermission("Guest"), где "Guest" название группы в файле "permissions.yml". Результат - кикает всех;

2) hasPermission("bukkit.command.list"), где "bukkit.command.list" находилось в пермишенах группы "Guest" в файле "prmissions.yml". Результат - никого не кикает.

3) hasPermission("lst.member"), где "lst.member" выдуманное мной пермишн, которое ничего не давало и даже не было зарегистрировано в коде, но было зарегистрировано в файле "plugin.yml" (я не полностью понимаю принцип работы пермишенов). Результат - никого не кикает.

Чую, решение моей проблемы совсем близко:lol:
 
Последнее редактирование:
Мне кажется, что у меня проблема с обозначением самого пермишена, потому что либо кикает всех, либо не кикает никого)) По сути скрипт работает, но что то не так с обозначением перпишенов)
я тебе скинул рабочий код. У меня он работает. Я использую PlayerLoginEvent, а не PlayerJoinEvent.
upload_2015-12-3_19-38-44.png
Смотри в консоль. С начало у меня небыло lst.member. Добавил себя в группу vip, где есть есть lst.member и зашёл.
 
я тебе скинул рабочий код. У меня он работает. Я использую PlayerLoginEvent, а не PlayerJoinEvent.
Я знаю что он рабочий, просто не могу разобраться как правильно указать эти пермишенс:cry:
я тебе скинул рабочий код. У меня он работает. Я использую PlayerLoginEvent, а не PlayerJoinEvent.
Смотри в консоль. С начало у меня небыло lst.member. Добавил себя в группу vip, где есть есть lst.member и зашёл.
Я кажется понял в чем дело... Сейчас отпишусь)
 
1) hasPermission("Guest"), где "Guest" название группы в файле "permissions.yml". Результат - кикает всех;
По стандарту у всех есть эта группа.

vip:
inheritance:
- Guest

Поэтому и кикает всех.

3) hasPermission("lst.member"), где "lst.member" выдуманное мной пермишн, которое ничего не давало и даже не было зарегистрировано в коде, но было зарегистрировано в файле "plugin.yml" (я не полностью понимаю принцип работы пермишенов). Результат - никого не кикает.
Ну так если в коде нету перма, то как плагин должен работать?

if(!e.getPlayer().hasPermission("lst.member"))
! - Если у игрока НЕТУ lst.member выполнять код.
 
По стандарту у всех есть эта группа.

vip:
inheritance:
- Guest

Поэтому и кикает всех.
Дело в том, что у всех групп в моем пермишенс файле нет строчки "inheritance:". А что если ее добавить к недефолтовской группе и после нее вместо "- Guest" оставить пустое поле? Получается, уже не будет считаться, что у недефолтофской группы дефолтофская группа?
 
Дело в том, что у всех групп в моем пермишенс файле нет строчки "inheritance:". А что если ее добавить к недефолтовской группе и после нее вместо "- Guest" оставить пустое поле? Получается, уже не будет считаться, что у недефолтофской группы дефолтофская группа?
значит из-за
default: true

Используй мой код. И нужным группам выдай lst.member - чтобы их не кикало при заходе.
 
upload_2015-12-3_20-15-44.png

Java:
package lst.permissionizer;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
public class LSTPermissionizer extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    @Override
    public void onEnable() {
           Bukkit.getPluginManager().registerEvents(this, this);
           LSTPermissionizer._log.info("Плагин включён!");
    }
    @Override
    public void onDisable() {
        LSTPermissionizer._log.info("Плагин отключён!");
    }
   
    @EventHandler
    public void onLogin(PlayerLoginEvent e){
        if(!e.getPlayer().hasPermission("lst.member")){
            e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
            e.setKickMessage(ChatColor.RED + "KICK.");
        }
    }
}

permissions.yml

Код:
groups:
  Guest:
    default: true
    build: true
    permissions:
    - modifyworld.*
  Member:
    inheritance:
    default: false
    build: true
    permissions:
    - modifyworld.*
    - lst.member

plugin.yml

Код:
name: asd
main: lst.permissionizer.LSTPermissionizer
version: 1.0
author: asd
 

Java:
package lst.permissionizer;
import org.bukkit.plugin.java.JavaPlugin;

import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerLoginEvent;
public class LSTPermissionizer extends JavaPlugin implements Listener{
    public static final Logger _log = Logger.getLogger("Minecraft");
    @Override
    public void onEnable() {
           Bukkit.getPluginManager().registerEvents(this, this);
           LSTPermissionizer._log.info("Плагин включён!");
    }
    @Override
    public void onDisable() {
        LSTPermissionizer._log.info("Плагин отключён!");
    }

    @EventHandler
    public void onLogin(PlayerLoginEvent e){
        if(!e.getPlayer().hasPermission("lst.member")){
            e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
            e.setKickMessage(ChatColor.RED + "KICK.");
        }
    }
}

permissions.yml

Код:
groups:
  Guest:
    default: true
    build: true
    permissions:
    - modifyworld.*
  Member:
    inheritance:
    default: false
    build: true
    permissions:
    - modifyworld.*
    - lst.member

plugin.yml

Код:
name: asd
main: lst.permissionizer.LSTPermissionizer
version: 1.0
author: asd
Вот такая вот басня:
52e7fa89cad1.png
6c8e68a7865b.png
5b462b5653f5.png
17ac8ac306c7.png
4aa61cfab833.png
ed96e0977640.png
683067569d06.png
3946892ec9af.png
 
Вот такая вот басня:
52e7fa89cad1.png
6c8e68a7865b.png
5b462b5653f5.png
17ac8ac306c7.png
4aa61cfab833.png
ed96e0977640.png
683067569d06.png
3946892ec9af.png
хм. Ну а если попробовать себя опнуть? Или офнуть плагин. Дать группу. И опять включить плагин.
У тестил на 1.8.8. И у меня всё робило. У тебя точно последний пекс?
 
хм. Ну а если попробовать себя опнуть? Или офнуть плагин. Дать группу. И опять включить плагин.
У тестил на 1.8.8. И у меня всё робило. У тебя точно последний пекс?
Так в втом то и дело что у него не последний)
 
Так в втом то и дело что у него не последний)
пусть ставит последний.
Так как в последнем Nick/Nick автоматом меняется на UUID/Nick. В других версиях так и остаётся всегда Nick/Nick. Поэтому игрок и не получает группу.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх