Browse Source
It should support some new possibilities: * Permissions for joining players will be already precalculated. * VaultAPI 100% support. * Separated Frontends, Internals and Backends - strong own API. * Use names, uuids and IP addresses in the entity column with type 1 (player). * Just be faster. * etc.master
30 changed files with 1541 additions and 552 deletions
After Width: | Height: | Size: 6.3 KiB |
@ -1,4 +1,4 @@ |
|||||||
package ru.simsonic.rscPermissions; |
package ru.simsonic.rscPermissions.DataTypes; |
||||||
import java.util.List; |
import java.util.List; |
||||||
|
|
||||||
public class CommandHelperAnswerException extends Exception |
public class CommandHelperAnswerException extends Exception |
@ -0,0 +1,18 @@ |
|||||||
|
package ru.simsonic.rscPermissions.DataTypes; |
||||||
|
|
||||||
|
public enum EntityType |
||||||
|
{ |
||||||
|
group(0), player(1), unknown(-1); |
||||||
|
private final int value; |
||||||
|
private EntityType(int value) |
||||||
|
{ |
||||||
|
this.value = value; |
||||||
|
} |
||||||
|
public static EntityType byValue(int value) |
||||||
|
{ |
||||||
|
for(EntityType constant : EntityType.values()) |
||||||
|
if(constant.value == value) |
||||||
|
return constant; |
||||||
|
return unknown; |
||||||
|
} |
||||||
|
} |
@ -1,17 +0,0 @@ |
|||||||
package ru.simsonic.rscPermissions.DataTypes; |
|
||||||
import java.sql.Timestamp; |
|
||||||
|
|
||||||
public class RowReward |
|
||||||
{ |
|
||||||
public int id; |
|
||||||
public String user; |
|
||||||
public String code; |
|
||||||
public boolean activated; |
|
||||||
public Timestamp activated_timestamp; |
|
||||||
public String execute_commands; |
|
||||||
public String command_permissions; |
|
||||||
public String add_group; |
|
||||||
public String add_group_destination; |
|
||||||
public int add_group_expirience; |
|
||||||
public String add_group_interval; |
|
||||||
} |
|
@ -1,6 +0,0 @@ |
|||||||
package ru.simsonic.rscPermissions.DataTypes; |
|
||||||
|
|
||||||
public class RowServer |
|
||||||
{ |
|
||||||
public String serverId; |
|
||||||
} |
|
@ -0,0 +1,367 @@ |
|||||||
|
package ru.simsonic.rscPermissions.Frontends; |
||||||
|
import net.milkbowl.vault.permission.Permission; |
||||||
|
import org.bukkit.OfflinePlayer; |
||||||
|
import org.bukkit.World; |
||||||
|
import org.bukkit.entity.Player; |
||||||
|
import ru.simsonic.rscPermissions.MainPluginClass; |
||||||
|
|
||||||
|
public final class VaultChat extends net.milkbowl.vault.chat.Chat |
||||||
|
{ |
||||||
|
private final MainPluginClass rscp; |
||||||
|
public VaultChat(MainPluginClass plugin, Permission perms) |
||||||
|
{ |
||||||
|
super(perms); |
||||||
|
this.rscp = plugin; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getName() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean isEnabled() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerPrefix(String world, String player) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerPrefix(String world, String player, String prefix) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerSuffix(String world, String player) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerSuffix(String world, String player, String suffix) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupPrefix(String world, String group) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupPrefix(String world, String group, String prefix) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupSuffix(String world, String group) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupSuffix(String world, String group, String suffix) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public int getPlayerInfoInteger(String world, String player, String node, int defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoInteger(String world, String player, String node, int value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public int getGroupInfoInteger(String world, String group, String node, int defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoInteger(String world, String group, String node, int value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public double getPlayerInfoDouble(String world, String player, String node, double defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoDouble(String world, String player, String node, double value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public double getGroupInfoDouble(String world, String group, String node, double defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoDouble(String world, String group, String node, double value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoBoolean(String world, String player, String node, boolean value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoBoolean(String world, String group, String node, boolean value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerInfoString(String world, String player, String node, String defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoString(String world, String player, String node, String value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupInfoString(String world, String group, String node, String defaultValue) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoString(String world, String group, String node, String value) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerPrefix(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
return getPlayerPrefix(world, player.getName()); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerPrefix(Player player) |
||||||
|
{ |
||||||
|
return getPlayerPrefix(player.getWorld().getName(), player); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerPrefix(String world, OfflinePlayer player, String prefix) |
||||||
|
{ |
||||||
|
setPlayerPrefix(world, player.getName(), prefix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerPrefix(Player player, String prefix) |
||||||
|
{ |
||||||
|
setPlayerPrefix(player.getWorld().getName(), player, prefix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerSuffix(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
return getPlayerSuffix(world, player.getName()); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerSuffix(Player player) |
||||||
|
{ |
||||||
|
return getPlayerSuffix(player.getWorld().getName(), player); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerSuffix(String world, OfflinePlayer player, String suffix) |
||||||
|
{ |
||||||
|
setPlayerSuffix(world, player.getName(), suffix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerSuffix(Player player, String suffix) |
||||||
|
{ |
||||||
|
setPlayerSuffix(player.getWorld().getName(), player, suffix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupPrefix(World world, String group) |
||||||
|
{ |
||||||
|
return getGroupPrefix(world.getName(), group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupPrefix(World world, String group, String prefix) |
||||||
|
{ |
||||||
|
setGroupPrefix(world.getName(), group, prefix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupSuffix(World world, String group) |
||||||
|
{ |
||||||
|
return getGroupSuffix(world.getName(), group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupSuffix(World world, String group, String suffix) |
||||||
|
{ |
||||||
|
setGroupSuffix(world.getName(), group, suffix); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public int getPlayerInfoInteger(String world, OfflinePlayer player, String node, int defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoInteger(world, player.getName(), node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public int getPlayerInfoInteger(Player player, String node, int defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoInteger(player.getWorld().getName(), player, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoInteger(String world, OfflinePlayer player, String node, int value) |
||||||
|
{ |
||||||
|
setPlayerInfoInteger(world, player.getName(), node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoInteger(Player player, String node, int value) |
||||||
|
{ |
||||||
|
setPlayerInfoInteger(player.getWorld().getName(), player, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public int getGroupInfoInteger(World world, String group, String node, int defaultValue) |
||||||
|
{ |
||||||
|
return getGroupInfoInteger(world.getName(), group, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoInteger(World world, String group, String node, int value) |
||||||
|
{ |
||||||
|
setGroupInfoInteger(world.getName(), group, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public double getPlayerInfoDouble(String world, OfflinePlayer player, String node, double defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoDouble(world, player.getName(), node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public double getPlayerInfoDouble(Player player, String node, double defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoDouble(player.getWorld().getName(), player, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoDouble(String world, OfflinePlayer player, String node, double value) |
||||||
|
{ |
||||||
|
setPlayerInfoDouble(world, player.getName(), node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoDouble(Player player, String node, double value) |
||||||
|
{ |
||||||
|
setPlayerInfoDouble(player.getWorld().getName(), player, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public double getGroupInfoDouble(World world, String group, String node, double defaultValue) |
||||||
|
{ |
||||||
|
return getGroupInfoDouble(world.getName(), group, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoDouble(World world, String group, String node, double value) |
||||||
|
{ |
||||||
|
setGroupInfoDouble(world.getName(), group, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean getPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoBoolean(world, player.getName(), node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean getPlayerInfoBoolean(Player player, String node, boolean defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoBoolean(player.getWorld().getName(), player, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoBoolean(String world, OfflinePlayer player, String node, boolean value) |
||||||
|
{ |
||||||
|
setPlayerInfoBoolean(world, player.getName(), node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoBoolean(Player player, String node, boolean value) |
||||||
|
{ |
||||||
|
setPlayerInfoBoolean(player.getWorld().getName(), player, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean getGroupInfoBoolean(World world, String group, String node, boolean defaultValue) |
||||||
|
{ |
||||||
|
return getGroupInfoBoolean(world.getName(), group, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoBoolean(World world, String group, String node, boolean value) |
||||||
|
{ |
||||||
|
setGroupInfoBoolean(world.getName(), group, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerInfoString(String world, OfflinePlayer player, String node, String defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoString(world, player.getName(), node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPlayerInfoString(Player player, String node, String defaultValue) |
||||||
|
{ |
||||||
|
return getPlayerInfoString(player.getWorld().getName(), player, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoString(String world, OfflinePlayer player, String node, String value) |
||||||
|
{ |
||||||
|
setPlayerInfoString(world, player.getName(), node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setPlayerInfoString(Player player, String node, String value) |
||||||
|
{ |
||||||
|
setPlayerInfoString(player.getWorld().getName(), player, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getGroupInfoString(World world, String group, String node, String defaultValue) |
||||||
|
{ |
||||||
|
return getGroupInfoString(world.getName(), group, node, defaultValue); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public void setGroupInfoString(World world, String group, String node, String value) |
||||||
|
{ |
||||||
|
setGroupInfoString(world.getName(), group, node, value); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerInGroup(String world, OfflinePlayer player, String group) |
||||||
|
{ |
||||||
|
// return perms.playerInGroup(world, player, group);
|
||||||
|
return false; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerInGroup(Player player, String group) |
||||||
|
{ |
||||||
|
// return playerInGroup(player.getWorld().getName(), player, group);
|
||||||
|
return false; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getPlayerGroups(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
// return perms.getPlayerGroups(world, player);
|
||||||
|
return null; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getPlayerGroups(Player player) |
||||||
|
{ |
||||||
|
// return getPlayerGroups(player.getWorld().getName(), player);
|
||||||
|
return null; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPrimaryGroup(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
// return perms.getPrimaryGroup(world, player);
|
||||||
|
return ""; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPrimaryGroup(Player player) |
||||||
|
{ |
||||||
|
return getPrimaryGroup(player.getWorld().getName(), player); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getGroups() |
||||||
|
{ |
||||||
|
// return perms.getGroups();
|
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,289 @@ |
|||||||
|
package ru.simsonic.rscPermissions.Frontends; |
||||||
|
import org.bukkit.OfflinePlayer; |
||||||
|
import org.bukkit.World; |
||||||
|
import org.bukkit.command.CommandSender; |
||||||
|
import org.bukkit.entity.Player; |
||||||
|
import org.bukkit.permissions.PermissionAttachment; |
||||||
|
import org.bukkit.permissions.PermissionAttachmentInfo; |
||||||
|
import ru.simsonic.rscPermissions.MainPluginClass; |
||||||
|
|
||||||
|
public class VaultPermission extends net.milkbowl.vault.permission.Permission |
||||||
|
{ |
||||||
|
private final MainPluginClass rscp; |
||||||
|
public VaultPermission(MainPluginClass plugin) |
||||||
|
{ |
||||||
|
this.rscp = plugin; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getName() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean isEnabled() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean hasSuperPermsCompat() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerHas(String world, String player, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAdd(String world, String player, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemove(String world, String player, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupHas(String world, String group, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupAdd(String world, String group, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupRemove(String world, String group, String permission) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerInGroup(String world, String player, String group) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddGroup(String world, String player, String group) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveGroup(String world, String player, String group) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getPlayerGroups(String world, String player) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPrimaryGroup(String world, String player) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getGroups() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean hasGroupSupport() |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean has(CommandSender sender, String permission) |
||||||
|
{ |
||||||
|
return sender.hasPermission(permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean has(Player player, String permission) |
||||||
|
{ |
||||||
|
return player.hasPermission(permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerHas(String world, OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return has((String)null, player.getName(), permission); |
||||||
|
return has(world, player.getName(), permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerHas(Player player, String permission) |
||||||
|
{ |
||||||
|
return has(player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAdd(String world, OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerAdd((String)null, player.getName(), permission); |
||||||
|
return playerAdd(world, player.getName(), permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAdd(Player player, String permission) |
||||||
|
{ |
||||||
|
return playerAdd(player.getWorld().getName(), player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddTransient(OfflinePlayer player, String permission) throws UnsupportedOperationException |
||||||
|
{ |
||||||
|
if(player.isOnline()) |
||||||
|
return playerAddTransient((Player)player, permission); |
||||||
|
throw new UnsupportedOperationException(getName() + " does not support offline player transient permissions!"); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddTransient(Player player, String permission) |
||||||
|
{ |
||||||
|
for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) |
||||||
|
if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) |
||||||
|
{ |
||||||
|
paInfo.getAttachment().setPermission(permission, true); |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
PermissionAttachment attach = player.addAttachment(plugin); |
||||||
|
attach.setPermission(permission, true); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddTransient(String worldName, OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
return playerAddTransient(worldName, player.getName(), permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddTransient(String worldName, Player player, String permission) |
||||||
|
{ |
||||||
|
return playerAddTransient(player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveTransient(String worldName, OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
return playerRemoveTransient(worldName, player.getName(), permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveTransient(String worldName, Player player, String permission) |
||||||
|
{ |
||||||
|
return playerRemoveTransient(worldName, (OfflinePlayer)player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemove(String world, OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerRemove((String)null, player.getName(), permission); |
||||||
|
return playerRemove(world, player.getName(), permission); |
||||||
|
} |
||||||
|
@Deprecated |
||||||
|
@Override |
||||||
|
public boolean playerRemove(World world, String player, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerRemove((String)null, player, permission); |
||||||
|
return playerRemove(world.getName(), player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemove(Player player, String permission) |
||||||
|
{ |
||||||
|
return playerRemove(player.getWorld().getName(), player, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveTransient(OfflinePlayer player, String permission) |
||||||
|
{ |
||||||
|
if(player.isOnline()) |
||||||
|
return playerRemoveTransient((Player)player, permission); |
||||||
|
else |
||||||
|
return false; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveTransient(Player player, String permission) |
||||||
|
{ |
||||||
|
for(PermissionAttachmentInfo paInfo : player.getEffectivePermissions()) |
||||||
|
if(paInfo.getAttachment() != null && paInfo.getAttachment().getPlugin().equals(plugin)) |
||||||
|
{ |
||||||
|
paInfo.getAttachment().unsetPermission(permission); |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupHas(World world, String group, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return groupHas((String)null, group, permission); |
||||||
|
return groupHas(world.getName(), group, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupAdd(World world, String group, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return groupAdd((String)null, group, permission); |
||||||
|
return groupAdd(world.getName(), group, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean groupRemove(World world, String group, String permission) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return groupRemove((String)null, group, permission); |
||||||
|
return groupRemove(world.getName(), group, permission); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerInGroup(String world, OfflinePlayer player, String group) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerInGroup((String)null, player.getName(), group); |
||||||
|
return playerInGroup(world, player.getName(), group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerInGroup(Player player, String group) |
||||||
|
{ |
||||||
|
return playerInGroup(player.getWorld().getName(), player, group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddGroup(String world, OfflinePlayer player, String group) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerAddGroup((String)null, player.getName(), group); |
||||||
|
return playerAddGroup(world, player.getName(), group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerAddGroup(Player player, String group) |
||||||
|
{ |
||||||
|
return playerAddGroup(player.getWorld().getName(), player, group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveGroup(String world, OfflinePlayer player, String group) |
||||||
|
{ |
||||||
|
if(world == null) |
||||||
|
return playerRemoveGroup((String)null, player.getName(), group); |
||||||
|
return playerRemoveGroup(world, player.getName(), group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public boolean playerRemoveGroup(Player player, String group) |
||||||
|
{ |
||||||
|
return playerRemoveGroup(player.getWorld().getName(), player, group); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getPlayerGroups(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
return getPlayerGroups(world, player.getName()); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String[] getPlayerGroups(Player player) |
||||||
|
{ |
||||||
|
return getPlayerGroups(player.getWorld().getName(), player); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPrimaryGroup(String world, OfflinePlayer player) |
||||||
|
{ |
||||||
|
return getPrimaryGroup(world, player.getName()); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public String getPrimaryGroup(Player player) |
||||||
|
{ |
||||||
|
return getPrimaryGroup(player.getWorld().getName(), player); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
package ru.simsonic.rscPermissions.InternalCache; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowEntity; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowLadder; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowPermission; |
||||||
|
|
||||||
|
public interface AbstractPermissionsCache |
||||||
|
{ |
||||||
|
public int ImportEntities(RowEntity[] rows); |
||||||
|
public int ImportPermissions(RowPermission[] rows); |
||||||
|
public int ImportInheritance(RowInheritance[] rows); |
||||||
|
public int ImportLadders(RowLadder[] rows); |
||||||
|
} |
@ -1,11 +1,11 @@ |
|||||||
package ru.simsonic.rscPermissions; |
package ru.simsonic.rscPermissions.InternalCache; |
||||||
import java.util.Set; |
import java.util.Set; |
||||||
import java.util.UUID; |
import java.util.UUID; |
||||||
import org.bukkit.Location; |
import org.bukkit.Location; |
||||||
import org.bukkit.entity.Player; |
import org.bukkit.entity.Player; |
||||||
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; |
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; |
||||||
import ru.simsonic.rscPermissions.DataTypes.RowPermission; |
import ru.simsonic.rscPermissions.DataTypes.RowPermission; |
||||||
import ru.simsonic.rscPermissions.LocalCacheTree.ResolutionLeaf; |
import ru.simsonic.rscPermissions.InternalCache.LocalCacheTree.ResolutionLeaf; |
||||||
|
|
||||||
public class AsyncPlayerInfo |
public class AsyncPlayerInfo |
||||||
{ |
{ |
@ -0,0 +1,230 @@ |
|||||||
|
package ru.simsonic.rscPermissions.InternalCache; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.HashSet; |
||||||
|
import java.util.Set; |
||||||
|
import org.bukkit.entity.Player; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.EntityType; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowEntity; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowLadder; |
||||||
|
import ru.simsonic.rscPermissions.DataTypes.RowPermission; |
||||||
|
import ru.simsonic.rscPermissions.MainPluginClass; |
||||||
|
|
||||||
|
public class BrandNewCache implements AbstractPermissionsCache |
||||||
|
{ |
||||||
|
protected final MainPluginClass plugin; |
||||||
|
protected BrandNewCache(MainPluginClass rscp) |
||||||
|
{ |
||||||
|
this.plugin = rscp; |
||||||
|
} |
||||||
|
protected final RowInheritance defaultInheritance = new RowInheritance(); |
||||||
|
public void setDefaultGroup(String defaultGroup) |
||||||
|
{ |
||||||
|
defaultInheritance.parent = defaultGroup; |
||||||
|
defaultInheritance.deriveInstance(); |
||||||
|
} |
||||||
|
protected final HashMap<String, RowEntity> entities_g = new HashMap<>(); |
||||||
|
protected final HashMap<String, RowEntity> entities_u = new HashMap<>(); |
||||||
|
protected final ArrayList<RowPermission> permissions_p2g = new ArrayList<>(); |
||||||
|
protected final ArrayList<RowPermission> permissions_p2u = new ArrayList<>(); |
||||||
|
protected final ArrayList<RowInheritance> inheritance_g2g = new ArrayList<>(); |
||||||
|
protected final ArrayList<RowInheritance> inheritance_g2u = new ArrayList<>(); |
||||||
|
protected final ArrayList<RowLadder> ladders_g = new ArrayList<>(); |
||||||
|
protected final ArrayList<RowLadder> ladders_u = new ArrayList<>(); |
||||||
|
public static class InheritanceLeaf implements Comparable<InheritanceLeaf> |
||||||
|
{ |
||||||
|
public RowInheritance node; |
||||||
|
public String instantiator; |
||||||
|
public InheritanceLeaf[] subleafs; |
||||||
|
public String resolvedPrefix; |
||||||
|
public String resolvedSuffix; |
||||||
|
@Override |
||||||
|
public int compareTo(InheritanceLeaf other) |
||||||
|
{ |
||||||
|
return (other.node != null && node != null) ? other.node.compareTo(node) : 0; |
||||||
|
} |
||||||
|
} |
||||||
|
public static class ResolutionParams |
||||||
|
{ |
||||||
|
public String[] applicableIdentifiers; |
||||||
|
public String[] destRegions; |
||||||
|
public String destWorld; |
||||||
|
public String destServerId; |
||||||
|
} |
||||||
|
public static class ResolutionResult |
||||||
|
{ |
||||||
|
public String prefix; |
||||||
|
public String suffix; |
||||||
|
public RowPermission[] permissions; |
||||||
|
} |
||||||
|
final HashMap<String, InheritanceLeaf> entityTrees = new HashMap<>(); |
||||||
|
// Права по сущностям
|
||||||
|
final HashMap<String, RowPermission[]> groupPermissions = new HashMap<>(); |
||||||
|
final HashMap<String, RowPermission[]> playerPermissions = new HashMap<>(); |
||||||
|
private void buildEntityTree() |
||||||
|
{ |
||||||
|
final HashSet<String> entitiesWhichInherits = new HashSet<>(); |
||||||
|
for(RowInheritance row : inheritance_g2u) |
||||||
|
entitiesWhichInherits.add(row.entity); |
||||||
|
for(String inheritingEntity : entitiesWhichInherits) |
||||||
|
{ |
||||||
|
final ArrayList<RowInheritance> entityDirectParents = new ArrayList<>(); |
||||||
|
for(RowInheritance row : inheritance_g2u) |
||||||
|
if(row.entity.equalsIgnoreCase(inheritingEntity)) |
||||||
|
entityDirectParents.add(row); |
||||||
|
Collections.sort(entityDirectParents); |
||||||
|
for(RowInheritance row : entityDirectParents) |
||||||
|
this.entityTrees.put(inheritingEntity, buildBranch(row)); |
||||||
|
} |
||||||
|
} |
||||||
|
private InheritanceLeaf buildBranch(RowInheritance source) |
||||||
|
{ |
||||||
|
final InheritanceLeaf result = new InheritanceLeaf(); |
||||||
|
result.node = source; |
||||||
|
result.instantiator = source.instance; |
||||||
|
final String entityName = source.entity.toLowerCase(); |
||||||
|
if(entities_g.containsKey(entityName)) |
||||||
|
{ |
||||||
|
result.resolvedPrefix = entities_g.get(entityName).prefix; |
||||||
|
result.resolvedSuffix = entities_g.get(entityName).suffix; |
||||||
|
} |
||||||
|
final ArrayList<RowInheritance> parents = new ArrayList<>(); |
||||||
|
for(RowInheritance row : inheritance_g2g) |
||||||
|
if(row.parent.equalsIgnoreCase(source.entity)) |
||||||
|
parents.add(row); |
||||||
|
Collections.sort(parents); |
||||||
|
final ArrayList<InheritanceLeaf> subleafs = new ArrayList<>(); |
||||||
|
for(RowInheritance row : parents) |
||||||
|
subleafs.add(buildBranch(row)); |
||||||
|
result.subleafs = subleafs.toArray(new InheritanceLeaf[subleafs.size()]); |
||||||
|
return result; |
||||||
|
} |
||||||
|
private static String[] getPlayerIdentifiers(Player player) |
||||||
|
{ |
||||||
|
final ArrayList<String> result = new ArrayList<>(); |
||||||
|
// For old servers Player's name can be used as entity name
|
||||||
|
try |
||||||
|
{ |
||||||
|
// minecraft <= 1.7.x
|
||||||
|
result.add(player.getName()); |
||||||
|
} catch(RuntimeException | NoSuchMethodError ex) { |
||||||
|
// minecraft >= 1.8
|
||||||
|
} |
||||||
|
// For newest servers Player's UUID is used as entity name
|
||||||
|
try |
||||||
|
{ |
||||||
|
// minecraft >= 1.8
|
||||||
|
result.add(player.getUniqueId().toString().toLowerCase()); |
||||||
|
} catch(RuntimeException | NoSuchMethodError ex) { |
||||||
|
// minecraft <= 1.7.x
|
||||||
|
} |
||||||
|
// IP address of a Player can be used as entity name too
|
||||||
|
result.add(player.getAddress().getAddress().getHostAddress()); |
||||||
|
return result.toArray(new String[result.size()]); |
||||||
|
} |
||||||
|
public void resolvePlayer(Player player) |
||||||
|
{ |
||||||
|
final ResolutionParams params = new ResolutionParams(); |
||||||
|
params.applicableIdentifiers = getPlayerIdentifiers(player); |
||||||
|
if(plugin.regionListProvider != null) |
||||||
|
{ |
||||||
|
Set<String> regionSet = plugin.regionListProvider.GetRegionList(player); |
||||||
|
params.destRegions = regionSet.toArray(new String[regionSet.size()]); |
||||||
|
} else |
||||||
|
params.destRegions = new String[] {}; |
||||||
|
params.destWorld = player.getLocation().getWorld().getName(); |
||||||
|
params.destServerId = plugin.getServer().getServerId(); |
||||||
|
// TO DO
|
||||||
|
} |
||||||
|
public void resolvePlayer(String player) |
||||||
|
{ |
||||||
|
final ResolutionParams params = new ResolutionParams(); |
||||||
|
params.applicableIdentifiers = new String[] { player }; |
||||||
|
params.destRegions = new String[] {}; |
||||||
|
params.destWorld = ""; |
||||||
|
params.destServerId = plugin.getServer().getServerId(); |
||||||
|
// TO DO
|
||||||
|
} |
||||||
|
private void resolvePlayer(ResolutionParams params) |
||||||
|
{ |
||||||
|
final ArrayList<InheritanceLeaf> leafs = new ArrayList<>(); |
||||||
|
for(String identifier : params.applicableIdentifiers) |
||||||
|
for(String tree : entityTrees.keySet()) |
||||||
|
if(tree.equals(identifier)) |
||||||
|
leafs.add(entityTrees.get(tree)); |
||||||
|
Collections.sort(leafs); |
||||||
|
final InheritanceLeaf root = new InheritanceLeaf(); |
||||||
|
} |
||||||
|
public void recoursion(ResolutionParams params, InheritanceLeaf branch) |
||||||
|
{ |
||||||
|
for(InheritanceLeaf leaf : branch.subleafs) |
||||||
|
{ |
||||||
|
} |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized int ImportEntities(RowEntity[] rows) |
||||||
|
{ |
||||||
|
entities_g.clear(); |
||||||
|
entities_u.clear(); |
||||||
|
if(rows == null) |
||||||
|
return 0; |
||||||
|
for(RowEntity row : rows) |
||||||
|
{ |
||||||
|
if(row.entityType == EntityType.group) |
||||||
|
entities_g.put(row.entity.toLowerCase(), row); |
||||||
|
else |
||||||
|
entities_u.put(row.entity.toLowerCase(), row); |
||||||
|
} |
||||||
|
return entities_g.size() + entities_u.size(); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized int ImportPermissions(RowPermission[] rows) |
||||||
|
{ |
||||||
|
permissions_p2g.clear(); |
||||||
|
permissions_p2u.clear(); |
||||||
|
if(rows == null) |
||||||
|
return 0; |
||||||
|
for(RowPermission row : rows) |
||||||
|
{ |
||||||
|
if(row.entityType == EntityType.group) |
||||||
|
permissions_p2g.add(row); |
||||||
|
else |
||||||
|
permissions_p2u.add(row); |
||||||
|
} |
||||||
|
return permissions_p2g.size() + permissions_p2u.size(); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized int ImportInheritance(RowInheritance[] rows) |
||||||
|
{ |
||||||
|
inheritance_g2g.clear(); |
||||||
|
inheritance_g2u.clear(); |
||||||
|
if(rows == null) |
||||||
|
return 0; |
||||||
|
for(RowInheritance row : rows) |
||||||
|
{ |
||||||
|
if(row.childType == EntityType.group) |
||||||
|
inheritance_g2g.add(row); |
||||||
|
else |
||||||
|
inheritance_g2u.add(row); |
||||||
|
} |
||||||
|
return inheritance_g2g.size() + inheritance_g2u.size(); |
||||||
|
} |
||||||
|
@Override |
||||||
|
public synchronized int ImportLadders(RowLadder[] rows) |
||||||
|
{ |
||||||
|
ladders_g.clear(); |
||||||
|
ladders_u.clear(); |
||||||
|
if(rows == null) |
||||||
|
return 0; |
||||||
|
for(RowLadder row : rows) |
||||||
|
{ |
||||||
|
if(row.climberType == EntityType.group) |
||||||
|
ladders_g.add(row); |
||||||
|
else |
||||||
|
ladders_u.add(row); |
||||||
|
} |
||||||
|
return ladders_g.size() + ladders_u.size(); |
||||||
|
} |
||||||
|
} |
@ -1,180 +0,0 @@ |
|||||||
package ru.simsonic.rscPermissions; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.logging.Level; |
|
||||||
import org.bukkit.entity.Player; |
|
||||||
import org.bukkit.permissions.PermissionAttachment; |
|
||||||
import ru.simsonic.rscPermissions.DataTypes.RowReward; |
|
||||||
import ru.simsonic.utilities.TimeIntervalParser; |
|
||||||
|
|
||||||
public class Rewards |
|
||||||
{ |
|
||||||
private static final String strCommandExecutorPlayer = "player:"; |
|
||||||
private static final String strCommandExecutorConsole = "console:"; |
|
||||||
private final MainPluginClass plugin; |
|
||||||
public Rewards(MainPluginClass rscp) |
|
||||||
{ |
|
||||||
this.plugin = rscp; |
|
||||||
} |
|
||||||
protected final HashMap<String, ArrayList<RowReward>> rewards = new HashMap<>(); |
|
||||||
public synchronized int ImportRewards(RowReward[] rows) |
|
||||||
{ |
|
||||||
rewards.clear(); |
|
||||||
if(rows == null) |
|
||||||
return 0; |
|
||||||
int total_rewards = 0; |
|
||||||
for(RowReward row : rows) |
|
||||||
{ |
|
||||||
ArrayList<RowReward> userRewards = rewards.get(row.user.toLowerCase()); |
|
||||||
if(userRewards == null) |
|
||||||
{ |
|
||||||
userRewards = new ArrayList<>(); |
|
||||||
rewards.put(row.user.toLowerCase(), userRewards); |
|
||||||
} |
|
||||||
userRewards.add(row); |
|
||||||
total_rewards += 1; |
|
||||||
} |
|
||||||
return total_rewards; |
|
||||||
} |
|
||||||
public synchronized HashMap<String, Integer> getAvailableRewards(String user) |
|
||||||
{ |
|
||||||
final HashMap<String, Integer> result = new HashMap<>(); |
|
||||||
ArrayList<RowReward> user_rewards = rewards.get(user.toLowerCase()); |
|
||||||
if(user_rewards != null) |
|
||||||
for(RowReward reward : user_rewards) |
|
||||||
result.put(reward.code, result.get(reward.code) + 1); |
|
||||||
return result; |
|
||||||
} |
|
||||||
public synchronized RowReward getRewardDetails(String user, String code) |
|
||||||
{ |
|
||||||
if((user == null) || (code == null)) |
|
||||||
return null; |
|
||||||
if("".equals(user) || "".equals(code)) |
|
||||||
return null; |
|
||||||
ArrayList<RowReward> user_rewards = rewards.get(user.toLowerCase()); |
|
||||||
for(RowReward row : user_rewards) |
|
||||||
if(row.code.equalsIgnoreCase(code)) |
|
||||||
return row; |
|
||||||
return null; |
|
||||||
} |
|
||||||
public void executeReward(final Player player, String reward) |
|
||||||
{ |
|
||||||
if(plugin.settings.isRewardsEnabled() == false) |
|
||||||
{ |
|
||||||
plugin.Message(player, "Rewards support has been disabled by administrator."); |
|
||||||
return; |
|
||||||
} |
|
||||||
final HashMap<String, Integer> reward_list = getAvailableRewards(player.getName()); |
|
||||||
if(reward == null) |
|
||||||
{ |
|
||||||
if(reward_list.isEmpty() == false) |
|
||||||
{ |
|
||||||
String text = ""; |
|
||||||
for(String code : reward_list.keySet()) |
|
||||||
{ |
|
||||||
Integer count = reward_list.get(code); |
|
||||||
text += ((count > 1) ? code + " (" + count.toString() + "), " : code + ", "); |
|
||||||
} |
|
||||||
plugin.Message(player, "Available rewards: {_R}" + text.substring(0, text.length() - 2) + "."); |
|
||||||
} |
|
||||||
else |
|
||||||
plugin.Message(player, "No rewards available."); |
|
||||||
return; |
|
||||||
} |
|
||||||
for(String code : reward_list.keySet()) |
|
||||||
if(code.equalsIgnoreCase(reward)) |
|
||||||
reward = code; |
|
||||||
final String correctFinalReward = reward; |
|
||||||
Integer count = reward_list.get(reward); |
|
||||||
if(count != null) |
|
||||||
{ |
|
||||||
Thread rewardExecutor = new Thread() |
|
||||||
{ |
|
||||||
@Override |
|
||||||
public void run() |
|
||||||
{ |
|
||||||
Thread.currentThread().setName("rscp:Rewarder"); |
|
||||||
Thread.currentThread().setPriority(Thread.MIN_PRIORITY); |
|
||||||
try |
|
||||||
{ |
|
||||||
plugin.connectionList.threadFetchTablesData().join(); |
|
||||||
final RowReward details = getRewardDetails(player.getName(), correctFinalReward); |
|
||||||
threadApplyReward(player, details); |
|
||||||
plugin.connectionList.threadFetchTablesData().join(); |
|
||||||
} catch(InterruptedException ex) { |
|
||||||
} |
|
||||||
plugin.Message(player, "You have received reward \"" + correctFinalReward + "\"!"); |
|
||||||
} |
|
||||||
}; |
|
||||||
rewardExecutor.start(); |
|
||||||
} |
|
||||||
else |
|
||||||
plugin.Message(player, "No such reward available for you."); |
|
||||||
} |
|
||||||
public void threadApplyReward(final Player player, final RowReward reward) |
|
||||||
{ |
|
||||||
if((reward == null) || (player == null)) |
|
||||||
return; |
|
||||||
if(reward.add_group != null) |
|
||||||
{ |
|
||||||
if(reward.add_group_destination != null) |
|
||||||
{ |
|
||||||
} |
|
||||||
if(reward.add_group_expirience != 0) |
|
||||||
{ |
|
||||||
} |
|
||||||
if(reward.add_group_interval != null) |
|
||||||
{ |
|
||||||
int seconds = TimeIntervalParser.parseTimeInterval(reward.add_group_interval); |
|
||||||
} |
|
||||||
} |
|
||||||
if(reward.execute_commands != null) |
|
||||||
{ |
|
||||||
final String[] commands = reward.execute_commands.split("[\r\n]+"); |
|
||||||
plugin.getServer().getScheduler().runTask(plugin, new Runnable() |
|
||||||
{ |
|
||||||
@Override |
|
||||||
public void run() |
|
||||||
{ |
|
||||||
PermissionAttachment temporary = player.addAttachment(plugin); |
|
||||||
if(reward.command_permissions != null) |
|
||||||
{ |
|
||||||
String[] permissions = reward.command_permissions.split("[\r\n]+"); |
|
||||||
for(String permission : permissions) |
|
||||||
{ |
|
||||||
MainPluginClass.consoleLog.log(Level.INFO, "[rscp] + temp perm: \"{0}\"", permission); |
|
||||||
temporary.setPermission(permission, true); |
|
||||||
} |
|
||||||
} |
|
||||||
player.recalculatePermissions(); |
|
||||||
for(String command : commands) |
|
||||||
{ |
|
||||||
boolean bConsole = false; |
|
||||||
if(command.toLowerCase().startsWith(strCommandExecutorConsole)) |
|
||||||
{ |
|
||||||
command = command.substring(strCommandExecutorConsole.length()); |
|
||||||
bConsole = true; |
|
||||||
} |
|
||||||
if(command.toLowerCase().startsWith(strCommandExecutorPlayer)) |
|
||||||
{ |
|
||||||
command = command.substring(strCommandExecutorPlayer.length()); |
|
||||||
bConsole = false; |
|
||||||
} |
|
||||||
MainPluginClass.consoleLog.log(Level.INFO, |
|
||||||
"[rscp] Reward \"{0}\" for user \"{1}\" executes command:\n{2} /{3}", new Object[] |
|
||||||
{ |
|
||||||
reward.code, |
|
||||||
player.getName(), |
|
||||||
bConsole ? strCommandExecutorConsole : strCommandExecutorPlayer, |
|
||||||
command, |
|
||||||
}); |
|
||||||
plugin.getServer().dispatchCommand(bConsole ? plugin.getServer().getConsoleSender() : player, command); |
|
||||||
player.sendMessage("You've received reward \"" + reward.code + "\"."); |
|
||||||
} |
|
||||||
player.removeAttachment(temporary); |
|
||||||
player.recalculatePermissions(); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,19 +0,0 @@ |
|||||||
CREATE TABLE IF NOT EXISTS `{DATABASE}`.`{PREFIX}rewards` ( |
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, |
|
||||||
`user` varchar(64) NOT NULL, |
|
||||||
`code` varchar(16) NOT NULL, |
|
||||||
`activated` bit(1) NOT NULL DEFAULT b'0', |
|
||||||
`activated_timestamp` timestamp NULL DEFAULT NULL, |
|
||||||
`execute_commands` varchar(1024) DEFAULT NULL, |
|
||||||
`command_permissions` varchar(1024) DEFAULT NULL, |
|
||||||
`add_group` varchar(64) DEFAULT NULL, |
|
||||||
`add_group_destination` varchar(256) DEFAULT NULL, |
|
||||||
`add_group_expirience` smallint(6) DEFAULT NULL, |
|
||||||
`add_group_interval` varchar(64) DEFAULT NULL, |
|
||||||
PRIMARY KEY (`id`), |
|
||||||
UNIQUE KEY `id_UNIQUE` (`id`) |
|
||||||
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE 'utf8_general_ci'; |
|
||||||
|
|
||||||
/* Update from 0.5.9b -> 0.6b */ |
|
||||||
|
|
||||||
ALTER TABLE `{DATABASE}`.`{PREFIX}rewards` COLLATE 'utf8_general_ci'; |
|
@ -1,27 +0,0 @@ |
|||||||
INSERT INTO `{DATABASE}`.`{PREFIX}servers` ( |
|
||||||
`serverid`, |
|
||||||
`plugin_version`, |
|
||||||
`settings_default-group`, |
|
||||||
`settings_treat-asterisk-as-op`, |
|
||||||
`settings_auto-reload-delay-sec`, |
|
||||||
`settings_maintenance-mode`, |
|
||||||
`settings_enable-rewards`, |
|
||||||
`internal_version` |
|
||||||
) VALUES ( |
|
||||||
'{SERVERID}', |
|
||||||
'v{PLUGIN_VER}', |
|
||||||
'{DEFAULT}', |
|
||||||
b'{OP}', |
|
||||||
'{DELAY}', |
|
||||||
{mMode}, |
|
||||||
b'{USE_R}', |
|
||||||
'{CFG_VER}' |
|
||||||
) ON DUPLICATE KEY UPDATE |
|
||||||
`serverid` = VALUES(`serverid`), |
|
||||||
`plugin_version` = VALUES(`plugin_version`), |
|
||||||
`settings_default-group` = VALUES(`settings_default-group`), |
|
||||||
`settings_treat-asterisk-as-op` = VALUES(`settings_treat-asterisk-as-op`), |
|
||||||
`settings_auto-reload-delay-sec` = VALUES(`settings_auto-reload-delay-sec`), |
|
||||||
`settings_maintenance-mode` = VALUES(`settings_maintenance-mode`), |
|
||||||
`settings_enable-rewards` = VALUES(`settings_enable-rewards`), |
|
||||||
`internal_version` = VALUES(`internal_version`); |
|
Loading…
Reference in new issue