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; |
||||
|
||||
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.UUID; |
||||
import org.bukkit.Location; |
||||
import org.bukkit.entity.Player; |
||||
import ru.simsonic.rscPermissions.DataTypes.RowInheritance; |
||||
import ru.simsonic.rscPermissions.DataTypes.RowPermission; |
||||
import ru.simsonic.rscPermissions.LocalCacheTree.ResolutionLeaf; |
||||
import ru.simsonic.rscPermissions.InternalCache.LocalCacheTree.ResolutionLeaf; |
||||
|
||||
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