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":
list.add("{MAGENTA}Permission list for {_YL}" + player.getName());
final PermissionAttachment pa = rscp.permissionManager.attachments.get(player);
if(pa == null)
break;
final Map<String, Boolean> pv = pa.getPermissions();
if(pv == null)
break;
final Map<String, Boolean> pv = rscp.permissionManager.listPlayerPermissions(player);
final ArrayList<String> sorted_keys = new ArrayList<>(pv.keySet());
Collections.sort(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
{
private final BukkitPluginMain plugin;
private final 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
public void onServerPing(ServerListPingEvent event)
{
if(plugin.settings.isInMaintenance())
if(rscp.settings.isInMaintenance())
{
String motd = "Server is under maintenance";
motd = plugin.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.default.motd", motd);
motd = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", motd);
motd = GenericChatCodes.processStringStatic(motd);
if(!"".equals(motd))
event.setMotd(motd);
@ -32,18 +36,18 @@ public class BukkitMaintenance implements Listener
@org.bukkit.event.EventHandler
public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event)
{
if("".equals(plugin.settings.getMaintenanceMode()))
if("".equals(rscp.settings.getMaintenanceMode()))
{
event.allow();
return;
}
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<>();
try
{
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));
} catch(RuntimeException ex) {
}
@ -51,7 +55,7 @@ public class BukkitMaintenance implements Listener
{
final UUID uuid = event.getUniqueId();
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));
} catch(RuntimeException | NoSuchMethodError ex) {
}
@ -62,17 +66,17 @@ public class BukkitMaintenance implements Listener
return;
}
String kickMsg = "{_YL}Server is in maintenance mode\nPlease try to connect later...";
kickMsg = plugin.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.default.motd", kickMsg);
kickMsg = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".motd", kickMsg);
kickMsg = GenericChatCodes.processStringStatic(kickMsg);
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_WHITELIST, kickMsg);
}
public void setMaintenanceMode(String mMode)
{
plugin.settings.setMaintenanceMode(mMode);
if(!plugin.settings.isInMaintenance())
rscp.settings.setMaintenanceMode(mMode);
if(!rscp.settings.isInMaintenance())
return;
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()
rscp.getServer().getScheduler().scheduleSyncDelayedTask(rscp, new Runnable()
{
@Override
public void run()
@ -82,11 +86,11 @@ public class BukkitMaintenance implements Listener
{
if(player.hasPermission("rscp.maintenance.*"))
continue;
if(player.hasPermission("rscp.maintenance." + plugin.settings.getMaintenanceMode()))
if(player.hasPermission("rscp.maintenance." + rscp.settings.getMaintenanceMode()))
continue;
String kick = "{_YL}Server is going into maintenance mode";
kick = plugin.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.default.kick", kick);
kick = rscp.getConfig().getString("language.maintenance.locked." + rscp.settings.getMaintenanceMode() + ".kick", kick);
kick = GenericChatCodes.processStringStatic(kick);
player.kickPlayer(kick);
}

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

@ -1,6 +1,9 @@
package ru.simsonic.rscPermissions.Bukkit;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import org.bukkit.entity.Player;
@ -19,11 +22,11 @@ public class BukkitPermissionManager extends RestartableThread
this.rscp = plugin;
}
private final LinkedBlockingQueue<Player> updateQueue = new LinkedBlockingQueue<>();
private final HashMap<Player, String> prefixes = new HashMap<>();
private final HashMap<Player, String> suffixes = new HashMap<>();
private final HashMap<Player, PermissionAttachment> attachments = new HashMap<>();
private final HashMap<Player, RowPermission[]> persistentPermissions = 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()
{
try
@ -58,6 +61,22 @@ public class BukkitPermissionManager extends RestartableThread
} 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
public void run()
{
@ -143,7 +162,9 @@ public class BukkitPermissionManager extends RestartableThread
// minecraft <= 1.7.x
}
// 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()]);
}
}

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

@ -45,13 +45,13 @@ public class PlayerEventsListener implements Listener
@EventHandler
public void onPlayerKick(PlayerKickEvent event)
{
rscp.permissionManager.attachments.remove(event.getPlayer());
rscp.permissionManager.removePlayer(event.getPlayer());
rscp.regionListProvider.removePlayer(event.getPlayer());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event)
{
rscp.permissionManager.attachments.remove(event.getPlayer());
rscp.permissionManager.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();
// Register event's dispatcher
getServer().getPluginManager().registerEvents(maintenance, this);
maintenance.onEnable();
getServer().getPluginManager().registerEvents(bukkitListener, this);
regionUpdateObserver.registerListeners();
// WorldGuard, Residence and other possible region list providers
regionListProvider.integrate();

Loading…
Cancel
Save