Browse Source

It's a working a bit.

But no permissions are calculated for online players.
master
Stanislav Usenkov 10 years ago
parent
commit
c7adbcb378
  1. 7
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java
  2. 38
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java
  3. 29
      src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java
  4. 4
      src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java
  5. 3
      src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

7
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitCommands.java

@ -256,12 +256,7 @@ public class BukkitCommands
{ {
case "permissions": case "permissions":
list.add("{MAGENTA}Permission list for {_YL}" + player.getName()); list.add("{MAGENTA}Permission list for {_YL}" + player.getName());
final PermissionAttachment pa = rscp.permissionManager.attachments.get(player); final Map<String, Boolean> pv = rscp.permissionManager.listPlayerPermissions(player);
if(pa == null)
break;
final Map<String, Boolean> pv = pa.getPermissions();
if(pv == null)
break;
final ArrayList<String> sorted_keys = new ArrayList<>(pv.keySet()); final ArrayList<String> sorted_keys = new ArrayList<>(pv.keySet());
Collections.sort(sorted_keys); Collections.sort(sorted_keys);
for(String perm : sorted_keys) for(String perm : sorted_keys)

38
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitMaintenance.java

@ -11,19 +11,23 @@ import ru.simsonic.rscUtilityLibrary.TextProcessing.GenericChatCodes;
public class BukkitMaintenance implements Listener public class BukkitMaintenance implements Listener
{ {
private final BukkitPluginMain plugin; private final BukkitPluginMain rscp;
public BukkitMaintenance(BukkitPluginMain rscp) public BukkitMaintenance(BukkitPluginMain rscp)
{ {
this.plugin = rscp; this.rscp = rscp;
}
public void onEnable()
{
rscp.getServer().getPluginManager().registerEvents(this, rscp);
} }
@org.bukkit.event.EventHandler @org.bukkit.event.EventHandler
public void onServerPing(ServerListPingEvent event) public void onServerPing(ServerListPingEvent event)
{ {
if(plugin.settings.isInMaintenance()) if(rscp.settings.isInMaintenance())
{ {
String motd = "Server is under maintenance"; String motd = "Server is under maintenance";
motd = plugin.getConfig().getString("language.maintenance.locked.default.motd", motd); motd = rscp.getConfig().getString("language.maintenance.locked.default.motd", motd);
motd = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".motd", motd); motd = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", motd);
motd = GenericChatCodes.processStringStatic(motd); motd = GenericChatCodes.processStringStatic(motd);
if(!"".equals(motd)) if(!"".equals(motd))
event.setMotd(motd); event.setMotd(motd);
@ -32,18 +36,18 @@ public class BukkitMaintenance implements Listener
@org.bukkit.event.EventHandler @org.bukkit.event.EventHandler
public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event)
{ {
if("".equals(plugin.settings.getMaintenanceMode())) if("".equals(rscp.settings.getMaintenanceMode()))
{ {
event.allow(); event.allow();
return; return;
} }
final String permissionAll = "rscp.maintenance.*"; final String permissionAll = "rscp.maintenance.*";
final String permission_mm = "rscp.maintenance." + (plugin.settings.getMaintenanceMode()); final String permission_mm = "rscp.maintenance." + (rscp.settings.getMaintenanceMode());
final HashMap<String, Boolean> permissions = new HashMap<>(); final HashMap<String, Boolean> permissions = new HashMap<>();
try try
{ {
final String name = event.getName(); final String name = event.getName();
plugin.internalCache.resolvePlayer(name, plugin.getServer().getServerId()); rscp.internalCache.resolvePlayer(name, rscp.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(name)); // permissions.putAll(plugin.cache.mapPermissions.get(name));
} catch(RuntimeException ex) { } catch(RuntimeException ex) {
} }
@ -51,7 +55,7 @@ public class BukkitMaintenance implements Listener
{ {
final UUID uuid = event.getUniqueId(); final UUID uuid = event.getUniqueId();
final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase(); final String userFriendlyUniqueId = uuid.toString().replace("-", "").toLowerCase();
plugin.internalCache.resolvePlayer(userFriendlyUniqueId, plugin.getServer().getServerId()); rscp.internalCache.resolvePlayer(userFriendlyUniqueId, rscp.getServer().getServerId());
// permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId)); // permissions.putAll(plugin.cache.mapPermissions.get(userFriendlyUniqueId));
} catch(RuntimeException | NoSuchMethodError ex) { } catch(RuntimeException | NoSuchMethodError ex) {
} }
@ -62,17 +66,17 @@ public class BukkitMaintenance implements Listener
return; return;
} }
String kickMsg = "{_YL}Server is in maintenance mode\nPlease try to connect later..."; String kickMsg = "{_YL}Server is in maintenance mode\nPlease try to connect later...";
kickMsg = plugin.getConfig().getString("language.maintenance.locked.default.motd", kickMsg); kickMsg = rscp.getConfig().getString("language.maintenance.locked.default.motd", kickMsg);
kickMsg = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".motd", kickMsg); kickMsg = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", kickMsg);
kickMsg = GenericChatCodes.processStringStatic(kickMsg); kickMsg = GenericChatCodes.processStringStatic(kickMsg);
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg); event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg);
} }
public void setMaintenanceMode(String mMode) public void setMaintenanceMode(String mMode)
{ {
plugin.settings.setMaintenanceMode(mMode); rscp.settings.setMaintenanceMode(mMode);
if(!plugin.settings.isInMaintenance()) if(!rscp.settings.isInMaintenance())
return; return;
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() rscp.getServer().getScheduler().scheduleSyncDelayedTask(rscp, new Runnable()
{ {
@Override @Override
public void run() public void run()
@ -82,11 +86,11 @@ public class BukkitMaintenance implements Listener
{ {
if(player.hasPermission("rscp.maintenance.*")) if(player.hasPermission("rscp.maintenance.*"))
continue; continue;
if(player.hasPermission("rscp.maintenance." + plugin.settings.getMaintenanceMode())) if(player.hasPermission("rscp.maintenance." + rscp.settings.getMaintenanceMode()))
continue; continue;
String kick = "{_YL}Server is going into maintenance mode"; String kick = "{_YL}Server is going into maintenance mode";
kick = plugin.getConfig().getString("language.maintenance.locked.default.kick", kick); kick = rscp.getConfig().getString("language.maintenance.locked.default.kick", kick);
kick = plugin.getConfig().getString("language.maintenance.locked." + plugin.settings.getMaintenanceMode() + ".kick", kick); kick = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".kick", kick);
kick = GenericChatCodes.processStringStatic(kick); kick = GenericChatCodes.processStringStatic(kick);
player.kickPlayer(kick); player.kickPlayer(kick);
} }

29
src/main/java/ru/simsonic/rscPermissions/Bukkit/BukkitPermissionManager.java

@ -1,6 +1,9 @@
package ru.simsonic.rscPermissions.Bukkit; package ru.simsonic.rscPermissions.Bukkit;
import java.net.InetSocketAddress;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -19,11 +22,11 @@ public class BukkitPermissionManager extends RestartableThread
this.rscp = plugin; this.rscp = plugin;
} }
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>(); private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final HashMap<Player, String> prefixes = new HashMap<>(); private final HashMap<Player, PermissionAttachment> attachments = new HashMap<>();
private final HashMap<Player, String> suffixes = new HashMap<>();
private final HashMap<Player, RowPermission[]> persistentPermissions = new HashMap<>(); private final HashMap<Player, RowPermission[]> persistentPermissions = new HashMap<>();
private final HashMap<Player, RowPermission[]> transientPermissions = new HashMap<>(); private final HashMap<Player, RowPermission[]> transientPermissions = new HashMap<>();
public final HashMap<Player, PermissionAttachment> attachments = new HashMap<>(); private final HashMap<Player, String> prefixes = new HashMap<>();
private final HashMap<Player, String> suffixes = new HashMap<>();
public void recalculateOnlinePlayersSync() public void recalculateOnlinePlayersSync()
{ {
try try
@ -58,6 +61,22 @@ public class BukkitPermissionManager extends RestartableThread
} catch(InterruptedException ex) { } catch(InterruptedException ex) {
} }
} }
public Map<String, Boolean> listPlayerPermissions(Player player)
{
final PermissionAttachment attachment = rscp.permissionManager.attachments.get(player);
if(attachment != null)
return attachment.getPermissions();
return Collections.EMPTY_MAP;
}
public void removePlayer(Player player)
{
updateQueue.remove(player);
attachments.remove(player);
prefixes.remove(player);
suffixes.remove(player);
persistentPermissions.remove(player);
transientPermissions.remove(player);
}
@Override @Override
public void run() public void run()
{ {
@ -143,7 +162,9 @@ public class BukkitPermissionManager extends RestartableThread
// minecraft <= 1.7.x // minecraft <= 1.7.x
} }
// IP address of a Player can be used as entity name too // IP address of a Player can be used as entity name too
result.add(player.getAddress().getAddress().getHostAddress()); InetSocketAddress socketAddress = player.getAddress();
if(socketAddress != null)
result.add(socketAddress.getAddress().getHostAddress());
return result.toArray(new String[result.size()]); return result.toArray(new String[result.size()]);
} }
} }

4
src/main/java/ru/simsonic/rscPermissions/Bukkit/PlayerEventsListener.java

@ -45,13 +45,13 @@ public class PlayerEventsListener implements Listener
@EventHandler @EventHandler
public void onPlayerKick(PlayerKickEvent event) public void onPlayerKick(PlayerKickEvent event)
{ {
rscp.permissionManager.attachments.remove(event.getPlayer()); rscp.permissionManager.removePlayer(event.getPlayer());
rscp.regionListProvider.removePlayer(event.getPlayer()); rscp.regionListProvider.removePlayer(event.getPlayer());
} }
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) public void onPlayerQuit(PlayerQuitEvent event)
{ {
rscp.permissionManager.attachments.remove(event.getPlayer()); rscp.permissionManager.removePlayer(event.getPlayer());
rscp.regionListProvider.removePlayer(event.getPlayer()); rscp.regionListProvider.removePlayer(event.getPlayer());
} }
} }

3
src/main/java/ru/simsonic/rscPermissions/BukkitPluginMain.java

@ -52,7 +52,8 @@ public final class BukkitPluginMain extends JavaPlugin
{ {
settings.readSettings(); settings.readSettings();
// Register event's dispatcher // Register event's dispatcher
getServer().getPluginManager().registerEvents(maintenance, this); maintenance.onEnable();
getServer().getPluginManager().registerEvents(bukkitListener, this);
regionUpdateObserver.registerListeners(); regionUpdateObserver.registerListeners();
// WorldGuard, Residence and other possible region list providers // WorldGuard, Residence and other possible region list providers
regionListProvider.integrate(); regionListProvider.integrate();

Loading…
Cancel
Save