Implement checks to handle doubled statistics issue, and complete final tweaks of stat conversion system
This commit is contained in:
parent
02dc0458d9
commit
fedbf2397b
|
@ -22,6 +22,8 @@ import mineplex.core.account.CoreClient;
|
|||
import mineplex.core.account.CoreClientManager;
|
||||
import mineplex.core.account.permissions.Permission;
|
||||
import mineplex.core.account.permissions.PermissionGroup;
|
||||
import mineplex.core.common.util.F;
|
||||
import mineplex.core.common.util.UtilPlayer;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.common.util.UtilTasks;
|
||||
import mineplex.core.leaderboard.LeaderboardManager;
|
||||
|
@ -382,23 +384,42 @@ public class StatsManager extends MiniClientPlugin<PlayerStats>//MiniDbClientPlu
|
|||
{
|
||||
final UUID uuid = event.getPlayer().getUniqueId();
|
||||
final int accountId = _coreClientManager.Get(event.getPlayer()).getAccountId();
|
||||
UtilPlayer.message(event.getPlayer(), F.main(getName(), "Loading your stats..."));
|
||||
runAsync(() ->
|
||||
{
|
||||
_repository.loadStatsFromOld(accountId, data ->
|
||||
{
|
||||
PlayerStats stats = new PlayerStats(false);
|
||||
Map<String, Long> decrement = new HashMap<>();
|
||||
|
||||
data.forEach((stat, values) ->
|
||||
{
|
||||
stats.addStat(stat, values.getRight());
|
||||
stats.setStatOld(stat, values.getLeft());
|
||||
if (values.getLeft() > 0 && values.getRight() >= (values.getLeft() * 2))
|
||||
{
|
||||
decrement.put(stat, -1 * values.getLeft());
|
||||
stats.addStat(stat, values.getRight() - values.getLeft());
|
||||
}
|
||||
else
|
||||
{
|
||||
stats.addStat(stat, values.getRight());
|
||||
}
|
||||
});
|
||||
|
||||
if (_loading.remove(uuid))
|
||||
{
|
||||
Set(uuid, stats);
|
||||
if (!decrement.isEmpty())
|
||||
{
|
||||
decrement.forEach((stat, value) ->
|
||||
{
|
||||
addToQueue(stat, _coreClientManager.Get(uuid), value);
|
||||
});
|
||||
}
|
||||
UtilPlayer.message(event.getPlayer(), F.main(getName(), "Your stats have been loaded!"));
|
||||
}
|
||||
});
|
||||
}, 5000); //Load 5 seconds later
|
||||
}, 5 * 20); //Load 5 seconds later
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
|
|
|
@ -20,12 +20,13 @@ import org.jooq.Update;
|
|||
import org.jooq.impl.DSL;
|
||||
import org.jooq.types.ULong;
|
||||
|
||||
import com.mysql.jdbc.exceptions.jdbc4.MySQLDataException;
|
||||
|
||||
import mineplex.core.common.Pair;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.database.Tables;
|
||||
import mineplex.serverdata.database.DBPool;
|
||||
import mineplex.serverdata.database.RepositoryBase;
|
||||
import mineplex.serverdata.database.column.ColumnInt;
|
||||
import mineplex.serverdata.database.column.ColumnVarChar;
|
||||
|
||||
public class StatsRepository extends RepositoryBase
|
||||
|
@ -54,17 +55,37 @@ public class StatsRepository extends RepositoryBase
|
|||
final Map<String, Pair<Long, Long>> statMap = new HashMap<>();
|
||||
while (oldSet.next())
|
||||
{
|
||||
statMap.put(oldSet.getString(1), Pair.create(oldSet.getLong(2), 0L));
|
||||
String statName = oldSet.getString(1);
|
||||
long oldValue;
|
||||
try
|
||||
{
|
||||
oldValue = oldSet.getLong(2);
|
||||
}
|
||||
catch (MySQLDataException ex)
|
||||
{
|
||||
oldValue = 0;
|
||||
}
|
||||
statMap.put(statName, Pair.create(oldValue, 0L));
|
||||
}
|
||||
while (newSet.next())
|
||||
{
|
||||
if (statMap.containsKey(newSet.getString(1)))
|
||||
String statName = newSet.getString(1);
|
||||
long newValue;
|
||||
try
|
||||
{
|
||||
statMap.get(newSet.getString(1)).setRight(newSet.getLong(2));
|
||||
newValue = newSet.getLong(2);
|
||||
}
|
||||
catch (MySQLDataException ex)
|
||||
{
|
||||
newValue = 0;
|
||||
}
|
||||
if (statMap.containsKey(statName))
|
||||
{
|
||||
statMap.get(statName).setRight(newValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
statMap.put(oldSet.getString(1), Pair.create(0L, newSet.getLong(2)));
|
||||
statMap.put(statName, Pair.create(0L, newValue));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ import java.util.Map.Entry;
|
|||
|
||||
import com.google.common.io.Files;
|
||||
import com.mineplex.statconverter.database.mysql.DBPool;
|
||||
import com.mysql.jdbc.exceptions.jdbc4.MySQLDataException;
|
||||
|
||||
public class Main
|
||||
{
|
||||
|
@ -130,7 +131,16 @@ public class Main
|
|||
{
|
||||
while (rs.next())
|
||||
{
|
||||
oldStats.put(rs.getInt("statId"), rs.getLong("value"));
|
||||
long oldValue;
|
||||
try
|
||||
{
|
||||
oldValue = rs.getLong("value");
|
||||
}
|
||||
catch (MySQLDataException ex)
|
||||
{
|
||||
oldValue = 0;
|
||||
}
|
||||
oldStats.put(rs.getInt("statId"), oldValue);
|
||||
}
|
||||
}
|
||||
try (Statement s = c.createStatement();
|
||||
|
@ -139,7 +149,16 @@ public class Main
|
|||
{
|
||||
while (rs.next())
|
||||
{
|
||||
newStats.put(rs.getInt("statId"), rs.getLong("value"));
|
||||
long newValue;
|
||||
try
|
||||
{
|
||||
newValue = rs.getLong("value");
|
||||
}
|
||||
catch (MySQLDataException ex)
|
||||
{
|
||||
newValue = 0;
|
||||
}
|
||||
newStats.put(rs.getInt("statId"), newValue);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,8 +176,17 @@ public class Main
|
|||
{
|
||||
if (newStats.get(oldEntry.getKey()) < oldEntry.getValue())
|
||||
{
|
||||
Long diff = oldEntry.getValue() - newStats.get(oldEntry.getKey());
|
||||
updateStatement.setLong(1, diff);
|
||||
Long delta = oldEntry.getValue() - newStats.get(oldEntry.getKey());
|
||||
updateStatement.setLong(1, delta);
|
||||
updateStatement.setInt(2, accountId);
|
||||
updateStatement.setInt(3, oldEntry.getKey());
|
||||
updateStatement.addBatch();
|
||||
updates++;
|
||||
}
|
||||
else if (oldEntry.getValue() > 0 && newStats.get(oldEntry.getKey()) >= (oldEntry.getValue() * 2))
|
||||
{
|
||||
Long delta = -1 * oldEntry.getValue();
|
||||
updateStatement.setLong(1, delta);
|
||||
updateStatement.setInt(2, accountId);
|
||||
updateStatement.setInt(3, oldEntry.getKey());
|
||||
updateStatement.addBatch();
|
||||
|
|
Loading…
Reference in New Issue