Fix rank issues found in testing
This commit is contained in:
parent
919141f2a7
commit
9faeb955cb
|
@ -18,7 +18,7 @@ public class CoreClient
|
|||
private String _name;
|
||||
private UUID _uuid;
|
||||
private Player _player;
|
||||
private PermissionGroup _primary, _lastPrimary;
|
||||
private PermissionGroup _primary;
|
||||
private Set<PermissionGroup> _extra = new HashSet<>();
|
||||
|
||||
/*
|
||||
|
@ -114,14 +114,6 @@ public class CoreClient
|
|||
{
|
||||
return;
|
||||
}
|
||||
if (_primary != null)
|
||||
{
|
||||
_lastPrimary = _primary;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lastPrimary = group;
|
||||
}
|
||||
|
||||
_primary = group;
|
||||
}
|
||||
|
@ -148,7 +140,6 @@ public class CoreClient
|
|||
{
|
||||
_disguisedName = null;
|
||||
_disguisedSkin = null;
|
||||
_lastPrimary = _disguisedPrimary;
|
||||
_disguisedPrimary = null;
|
||||
_disguisedUUID = null;
|
||||
}
|
||||
|
@ -187,14 +178,6 @@ public class CoreClient
|
|||
_disguisedName = name;
|
||||
_disguisedUUID = uuid;
|
||||
_disguisedPrimary = group;
|
||||
if (_primary != null)
|
||||
{
|
||||
_lastPrimary = _primary;
|
||||
}
|
||||
else
|
||||
{
|
||||
_lastPrimary = group;
|
||||
}
|
||||
}
|
||||
|
||||
public PermissionGroup getRealOrDisguisedPrimaryGroup()
|
||||
|
|
|
@ -10,7 +10,9 @@ import java.util.Map;
|
|||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.BiConsumer;
|
||||
|
@ -36,8 +38,6 @@ import mineplex.core.MiniPlugin;
|
|||
import mineplex.core.account.command.RanksCommand;
|
||||
import mineplex.core.account.event.ClientUnloadEvent;
|
||||
import mineplex.core.account.event.ClientWebResponseEvent;
|
||||
import mineplex.core.account.event.OnlineGroupAddEvent;
|
||||
import mineplex.core.account.event.OnlineGroupRemoveEvent;
|
||||
import mineplex.core.account.event.OnlinePrimaryGroupUpdateEvent;
|
||||
import mineplex.core.account.permissions.Permission;
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
|
@ -59,7 +59,6 @@ import mineplex.core.common.util.UUIDFetcher;
|
|||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTasks;
|
||||
import mineplex.core.common.util.UtilTime;
|
||||
import mineplex.core.updater.UpdateType;
|
||||
import mineplex.core.updater.event.UpdateEvent;
|
||||
import mineplex.core.utils.UtilGameProfile;
|
||||
|
@ -691,22 +690,6 @@ public class CoreClientManager extends MiniPlugin
|
|||
_repository.setPrimaryGroup(accountId, group, after);
|
||||
}
|
||||
|
||||
public void addAdditionalGroup(Player player, final PermissionGroup group, Consumer<Boolean> successCallback)
|
||||
{
|
||||
addAdditionalGroup(Get(player).getAccountId(), group, success ->
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
Get(player).addAdditionalGroup(group);
|
||||
UtilServer.CallEvent(new OnlineGroupAddEvent(player, group));
|
||||
}
|
||||
if (successCallback != null)
|
||||
{
|
||||
successCallback.accept(success);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void addAdditionalGroup(final int accountId, final PermissionGroup group, Consumer<Boolean> successCallback)
|
||||
{
|
||||
_repository.addAdditionalGroup(accountId, group, success ->
|
||||
|
@ -717,23 +700,7 @@ public class CoreClientManager extends MiniPlugin
|
|||
}
|
||||
if (!success)
|
||||
{
|
||||
System.out.println("Error adding additional group " + group.name() + " to account " + accountId + "!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void removeAdditionalGroup(Player player, final PermissionGroup group, Consumer<Boolean> successCallback)
|
||||
{
|
||||
removeAdditionalGroup(Get(player).getAccountId(), group, success ->
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
Get(player).removeAdditionalGroup(group);
|
||||
UtilServer.CallEvent(new OnlineGroupRemoveEvent(player, group));
|
||||
}
|
||||
if (successCallback != null)
|
||||
{
|
||||
successCallback.accept(success);
|
||||
System.out.println("Error adding additional group " + group + " to account " + accountId + "!");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -753,29 +720,6 @@ public class CoreClientManager extends MiniPlugin
|
|||
});
|
||||
}
|
||||
|
||||
public void clearGroups(Player player, Consumer<Boolean> successCallback)
|
||||
{
|
||||
clearGroups(Get(player).getAccountId(), success ->
|
||||
{
|
||||
if (success)
|
||||
{
|
||||
PermissionGroup old = Get(player).getPrimaryGroup();
|
||||
Set<PermissionGroup> cleared = Sets.newHashSet(Get(player).getAdditionalGroups());
|
||||
Get(player).setPrimaryGroup(PermissionGroup.PLAYER);
|
||||
Get(player).getAdditionalGroups().clear();
|
||||
UtilServer.CallEvent(new OnlinePrimaryGroupUpdateEvent(player, old, PermissionGroup.PLAYER));
|
||||
for (PermissionGroup clr : cleared)
|
||||
{
|
||||
UtilServer.CallEvent(new OnlineGroupRemoveEvent(player, clr));
|
||||
}
|
||||
}
|
||||
if (successCallback != null)
|
||||
{
|
||||
successCallback.accept(success);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void clearGroups(final int accountId, Consumer<Boolean> successCallback)
|
||||
{
|
||||
_repository.clearGroups(accountId, success ->
|
||||
|
@ -795,42 +739,37 @@ public class CoreClientManager extends MiniPlugin
|
|||
{
|
||||
_repository.fetchGroups(accountId, (primaryGroup, additionalGroups) ->
|
||||
{
|
||||
AtomicReference<PermissionGroup> primaryReference = new AtomicReference<>();
|
||||
UUID uuid;
|
||||
if (primaryGroup == null && (uuid = _repository.getClientUUID(accountId)) != null)
|
||||
if (primaryGroup == null)
|
||||
{
|
||||
runAsync(() ->
|
||||
{
|
||||
String legacy = loadOfflineClient(uuid).Rank;
|
||||
PermissionGroup defaultGroup = PermissionGroup.PLAYER;
|
||||
PermissionGroup loaded = PermissionGroupHelper.getGroupFromLegacy(legacy);
|
||||
if (loaded == null)
|
||||
{
|
||||
primaryReference.compareAndSet(null, defaultGroup);
|
||||
}
|
||||
else
|
||||
{
|
||||
primaryReference.compareAndSet(null, loaded);
|
||||
}
|
||||
});
|
||||
long start = System.currentTimeMillis();
|
||||
while (primaryReference.get() == null && !UtilTime.elapsed(start, 5000)) {}
|
||||
primaryReference.compareAndSet(null, PermissionGroup.PLAYER);
|
||||
UtilServer.runSync(() -> resultCallback.accept(primaryGroup, additionalGroups));
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
UUID uuid;
|
||||
if ((uuid = _repository.getClientUUID(accountId)) != null)
|
||||
{
|
||||
PermissionGroup defaultGroup = PermissionGroup.PLAYER;
|
||||
if (primaryGroup == null)
|
||||
try
|
||||
{
|
||||
primaryReference.set(defaultGroup);
|
||||
}
|
||||
else
|
||||
PermissionGroup legacyPrimary = CompletableFuture.supplyAsync(() ->
|
||||
{
|
||||
String legacy = loadOfflineClient(uuid).Rank;
|
||||
PermissionGroup defaultGroup = PermissionGroup.PLAYER;
|
||||
PermissionGroup loaded = PermissionGroupHelper.getGroupFromLegacy(legacy);
|
||||
|
||||
return loaded == null ? defaultGroup : loaded;
|
||||
}).get(5, TimeUnit.SECONDS);
|
||||
|
||||
UtilServer.runSync(() -> resultCallback.accept(legacyPrimary, additionalGroups));
|
||||
return;
|
||||
|
||||
} catch (Exception e)
|
||||
{
|
||||
primaryReference.set(primaryGroup);
|
||||
System.out.println("Error fetching groups of account " + accountId + "!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
UtilServer.runSync(() -> resultCallback.accept(primaryReference.get(), additionalGroups));
|
||||
UtilServer.runSync(() -> resultCallback.accept(PermissionGroup.PLAYER, additionalGroups));
|
||||
}, () ->
|
||||
{
|
||||
if (onError != null)
|
||||
|
|
|
@ -50,7 +50,7 @@ public class ResetPlayerCommand extends CommandBase<CoreClientManager>
|
|||
final CoreClient client = Plugin.Get(uuid);
|
||||
Plugin.clearGroups(client.getAccountId(), success ->
|
||||
{
|
||||
if (success.booleanValue())
|
||||
if (success)
|
||||
{
|
||||
PermissionGroup old = client.getPrimaryGroup();
|
||||
client.setPrimaryGroup(PermissionGroup.PLAYER);
|
||||
|
|
|
@ -25,7 +25,7 @@ public class ClearGroupsHandler implements CommandCallback<ClearGroups>
|
|||
{
|
||||
_clientManager.runSync(() ->
|
||||
{
|
||||
Optional<Player> opt = Bukkit.getOnlinePlayers().stream().map(Player.class::cast).filter(player -> _clientManager.getAccountId(player) == command.getAccountId()).findAny();
|
||||
Optional<? extends Player> opt = Bukkit.getOnlinePlayers().stream().filter(player -> _clientManager.getAccountId(player) == command.getAccountId()).findAny();
|
||||
|
||||
if (opt.isPresent())
|
||||
{
|
||||
|
|
|
@ -97,31 +97,29 @@ public class AccountRepository extends MinecraftRepository
|
|||
System.out.println(name + " Loaded Account ID From Cache [" + name + " - " + accountId + "]");
|
||||
}
|
||||
|
||||
statement.execute("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";");
|
||||
try (ResultSet rankSet = statement.getResultSet())
|
||||
{
|
||||
statement.execute("SELECT * FROM accountRanks WHERE accountId=" + accountId + ";");
|
||||
try (ResultSet rankSet = statement.getResultSet())
|
||||
boolean anyRows = false;
|
||||
while (rankSet.next())
|
||||
{
|
||||
boolean anyRows = false;
|
||||
while (rankSet.next())
|
||||
{
|
||||
anyRows = true;
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankSet.getString("rankIdentifier"));
|
||||
boolean primary = rankSet.getBoolean("primaryGroup");
|
||||
anyRows = true;
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankSet.getString("rankIdentifier"));
|
||||
boolean primary = rankSet.getBoolean("primaryGroup");
|
||||
|
||||
if (primary)
|
||||
{
|
||||
primaryRank = group;
|
||||
}
|
||||
else
|
||||
{
|
||||
extraRanks.add(group);
|
||||
}
|
||||
}
|
||||
|
||||
if (!anyRows)
|
||||
if (primary)
|
||||
{
|
||||
statement.execute(UPDATE_PRIMARY_RANK.replace("?", "" + accountId));
|
||||
primaryRank = group;
|
||||
}
|
||||
else
|
||||
{
|
||||
extraRanks.add(group);
|
||||
}
|
||||
}
|
||||
|
||||
if (!anyRows)
|
||||
{
|
||||
statement.execute(UPDATE_PRIMARY_RANK.replace("?", "" + accountId));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -399,7 +397,7 @@ public class AccountRepository extends MinecraftRepository
|
|||
Runnable r = () ->
|
||||
{
|
||||
AtomicBoolean errored = new AtomicBoolean();
|
||||
AtomicReference<String> primary = new AtomicReference<>();
|
||||
AtomicReference<PermissionGroup> primary = new AtomicReference<>();
|
||||
Set<PermissionGroup> additional = new HashSet<>();
|
||||
|
||||
executeQuery("SELECT * FROM accountRanks WHERE accountId=?;", rs ->
|
||||
|
@ -408,7 +406,7 @@ public class AccountRepository extends MinecraftRepository
|
|||
{
|
||||
if (rs.getBoolean("primaryGroup"))
|
||||
{
|
||||
primary.set(rs.getString("rankIdentifier"));
|
||||
primary.set(PermissionGroup.valueOf(rs.getString("rankIdentifier")));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -428,7 +426,7 @@ public class AccountRepository extends MinecraftRepository
|
|||
{
|
||||
if (resultCallback != null)
|
||||
{
|
||||
resultCallback.accept(PermissionGroup.valueOf(primary.get()), additional);
|
||||
resultCallback.accept(primary.get(), additional);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -69,6 +69,7 @@ public class AntihackLogger extends MiniPlugin
|
|||
|
||||
private void generatePermissions()
|
||||
{
|
||||
PermissionGroup.ADMIN.setPermission(Perm.SAVE_METADATA_COMMAND, true, true);
|
||||
PermissionGroup.QA.setPermission(Perm.SAVE_METADATA_COMMAND, true, true);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.bukkit.Bukkit;
|
|||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.account.permissions.PermissionGroupHelper;
|
||||
import mineplex.core.common.util.Callback;
|
||||
import mineplex.serverdata.database.DBPool;
|
||||
import mineplex.serverdata.database.RepositoryBase;
|
||||
|
@ -61,20 +62,20 @@ public class SalesAnnouncementRepository extends RepositoryBase
|
|||
{
|
||||
for (String rankStr : rankString.split(","))
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankStr);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankStr);
|
||||
ranks.add(group);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankString);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankString);
|
||||
ranks.add(group);
|
||||
}
|
||||
PermissionGroup[] displayTo = ranks.toArray(new PermissionGroup[ranks.size()]);
|
||||
String message = resultSet.getString("message");
|
||||
boolean enabled = resultSet.getBoolean("enabled");
|
||||
|
||||
data.add(new SalesAnnouncementData(Integer.valueOf(id), displayTo, message, enabled));
|
||||
data.add(new SalesAnnouncementData(id, displayTo, message, enabled));
|
||||
}
|
||||
|
||||
runSync(() ->
|
||||
|
@ -101,13 +102,13 @@ public class SalesAnnouncementRepository extends RepositoryBase
|
|||
{
|
||||
for (String rankStr : rankString.split(","))
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankStr);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankStr);
|
||||
ranks.add(group);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankString);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankString);
|
||||
ranks.add(group);
|
||||
}
|
||||
PermissionGroup[] displayTo = ranks.toArray(new PermissionGroup[ranks.size()]);
|
||||
|
|
|
@ -8,6 +8,7 @@ import org.bukkit.Bukkit;
|
|||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.account.permissions.PermissionGroupHelper;
|
||||
import mineplex.core.common.util.Callback;
|
||||
import mineplex.serverdata.database.DBPool;
|
||||
import mineplex.serverdata.database.RepositoryBase;
|
||||
|
@ -61,20 +62,20 @@ public class SalesAnnouncementRepository extends RepositoryBase
|
|||
{
|
||||
for (String rankStr : rankString.split(","))
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankStr);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankStr);
|
||||
ranks.add(group);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankString);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankString);
|
||||
ranks.add(group);
|
||||
}
|
||||
PermissionGroup[] displayTo = ranks.toArray(new PermissionGroup[ranks.size()]);
|
||||
String message = resultSet.getString("message");
|
||||
boolean enabled = resultSet.getBoolean("enabled");
|
||||
|
||||
data.add(new SalesAnnouncementData(Integer.valueOf(id), displayTo, message, enabled));
|
||||
data.add(new SalesAnnouncementData(id, displayTo, message, enabled));
|
||||
}
|
||||
|
||||
runSync(() ->
|
||||
|
@ -101,20 +102,20 @@ public class SalesAnnouncementRepository extends RepositoryBase
|
|||
{
|
||||
for (String rankStr : rankString.split(","))
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankStr);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankStr);
|
||||
ranks.add(group);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PermissionGroup group = PermissionGroup.valueOf(rankString);
|
||||
PermissionGroup group = PermissionGroupHelper.getGroupFromLegacy(rankString);
|
||||
ranks.add(group);
|
||||
}
|
||||
PermissionGroup[] displayTo = ranks.toArray(new PermissionGroup[ranks.size()]);
|
||||
String message = resultSet.getString("message");
|
||||
boolean enabled = resultSet.getBoolean("enabled");
|
||||
|
||||
final SalesAnnouncementData data = new SalesAnnouncementData(Integer.valueOf(aId), displayTo, message, enabled);
|
||||
final SalesAnnouncementData data = new SalesAnnouncementData(aId, displayTo, message, enabled);
|
||||
runSync(() ->
|
||||
{
|
||||
callback.run(data);
|
||||
|
|
Loading…
Reference in New Issue