From 709d428b4cb94e8eca53b6f32e0f8b1be5a323b9 Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Wed, 2 Jun 2021 16:04:59 -0500 Subject: include more data about skills (#51) --- build/cleaners/skyblock/member.js | 2 +- build/cleaners/skyblock/skills.js | 54 +- build/constants.js | 10 +- src/cleaners/skyblock/member.ts | 2 +- src/cleaners/skyblock/skills.ts | 66 +- src/constants.ts | 8 + test-data-generator/index.ts | 13 +- test/data/constants/manual/skill_xp.json | 61 + test/data/constants/manual/skill_xp_easier.json | 26 + test/data/constants/minions.json | 1 + test/data/constants/slayers.json | 1 + test/data/constants/stats.json | 69 + test/data/constants/values.json | 2 +- test/data/constants/zones.json | 1 + .../player/6536bfed869548fd83a1ecd24cf2a0fd.json | 214 +-- .../player/ef3bb867eec048a1a9b92b451f0ffc66.json | 645 +++++---- .../profiles/6536bfed869548fd83a1ecd24cf2a0fd.json | 626 +++++---- .../profiles/ef3bb867eec048a1a9b92b451f0ffc66.json | 1434 +++++++++++++------- test/test.js | 27 +- 19 files changed, 2124 insertions(+), 1138 deletions(-) create mode 100644 test/data/constants/manual/skill_xp.json create mode 100644 test/data/constants/manual/skill_xp_easier.json diff --git a/build/cleaners/skyblock/member.js b/build/cleaners/skyblock/member.js index a9a419a..8e72be8 100644 --- a/build/cleaners/skyblock/member.js +++ b/build/cleaners/skyblock/member.js @@ -68,7 +68,7 @@ async function cleanSkyBlockProfileMemberResponse(member, included = null) { fairy_souls: fairySouls, inventories: inventoriesIncluded ? await inventory_1.cleanInventories(member) : undefined, objectives: objectives_1.cleanObjectives(member), - skills: skills_1.cleanSkills(member), + skills: await skills_1.cleanSkills(member), visited_zones: zones_1.cleanVisitedZones(member), collections: collections_1.cleanCollections(member), slayers: slayers_1.cleanSlayers(member) diff --git a/build/cleaners/skyblock/skills.js b/build/cleaners/skyblock/skills.js index 4ec5ec2..a761ec8 100644 --- a/build/cleaners/skyblock/skills.js +++ b/build/cleaners/skyblock/skills.js @@ -1,15 +1,61 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.cleanSkills = void 0; -function cleanSkills(data) { +exports.cleanSkills = exports.levelForSkillXp = void 0; +const constants_1 = require("../../constants"); +// the highest level you can have in each skill +// numbers taken from https://hypixel-skyblock.fandom.com/wiki/Skills +// maybe these should be moved to skyblock-constants? +const skillsMaxLevel = { + farming: 60, + mining: 60, + combat: 60, + foraging: 50, + fishing: 50, + enchanting: 60, + alchemy: 50, + taming: 50, + dungeoneering: 50, + carpentry: 50, + runecrafting: 25, + social: 25 +}; +// for skills that aren't in maxSkills, default to this +const skillsDefaultMaxLevel = 50; +/** + * Get the skill level for the amount of total xp + * @param xp The xp we're finding the level for + * @param easierLevel Whether it should use the alternate leveling xp table (used for cosmetic skills and dungeoneering) + */ +async function levelForSkillXp(xp, maxLevel) { + const xpTable = maxLevel <= 25 ? await constants_1.fetchSkillXpEasier() : await constants_1.fetchSkillXp(); + const skillLevel = [...xpTable].reverse().findIndex(levelXp => xp >= levelXp); + return skillLevel === -1 ? 0 : xpTable.length - skillLevel; +} +exports.levelForSkillXp = levelForSkillXp; +async function cleanSkills(data) { + var _a; const skills = []; for (const item in data) { if (item.startsWith('experience_skill_')) { const skillName = item.substr('experience_skill_'.length); - const skillValue = data[item]; + // the amount of total xp you have in this skill + const skillXp = data[item]; + const skillMaxLevel = (_a = skillsMaxLevel[skillName]) !== null && _a !== void 0 ? _a : skillsDefaultMaxLevel; + const xpTable = skillMaxLevel <= 25 ? await constants_1.fetchSkillXpEasier() : await constants_1.fetchSkillXp(); + // the level you're at for this skill + const skillLevel = await levelForSkillXp(skillXp, skillMaxLevel); + // the total xp required for the previous level + const previousLevelXp = skillLevel >= 1 ? xpTable[skillLevel - 1] : 0; + // the extra xp left over + const skillLevelXp = skillXp - previousLevelXp; + // the amount of extra xp required for this level + const skillLevelXpRequired = xpTable[skillLevel] - previousLevelXp; skills.push({ name: skillName, - xp: skillValue + xp: skillXp, + level: skillLevel, + levelXp: skillLevelXp, + levelXpRequired: skillLevelXpRequired }); } } diff --git a/build/constants.js b/build/constants.js index c620a32..22327c5 100644 --- a/build/constants.js +++ b/build/constants.js @@ -25,7 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.setConstantValues = exports.fetchConstantValues = exports.addMinions = exports.fetchMinions = exports.addSlayers = exports.fetchSlayers = exports.addZones = exports.fetchZones = exports.addSkills = exports.fetchSkills = exports.addCollections = exports.fetchCollections = exports.addStats = exports.fetchStats = exports.addJSONConstants = exports.fetchJSONConstant = void 0; +exports.setConstantValues = exports.fetchConstantValues = exports.addMinions = exports.fetchSkillXpEasier = exports.fetchSkillXp = exports.fetchMinions = exports.addSlayers = exports.fetchSlayers = exports.addZones = exports.fetchZones = exports.addSkills = exports.fetchSkills = exports.addCollections = exports.fetchCollections = exports.addStats = exports.fetchStats = exports.addJSONConstants = exports.fetchJSONConstant = void 0; // we have to do this so we can mock the function from the tests properly const constants = __importStar(require("./constants")); const node_cache_1 = __importDefault(require("node-cache")); @@ -223,6 +223,14 @@ async function fetchMinions() { return await constants.fetchJSONConstant('minions.json'); } exports.fetchMinions = fetchMinions; +async function fetchSkillXp() { + return await constants.fetchJSONConstant('manual/skill_xp.json'); +} +exports.fetchSkillXp = fetchSkillXp; +async function fetchSkillXpEasier() { + return await constants.fetchJSONConstant('manual/skill_xp_easier.json'); +} +exports.fetchSkillXpEasier = fetchSkillXpEasier; /** Add skills to skyblock-constants. This has caching so it's fine to call many times */ async function addMinions(addingMinions) { await constants.addJSONConstants('minions.json', addingMinions, 'minion'); diff --git a/src/cleaners/skyblock/member.ts b/src/cleaners/skyblock/member.ts index 0ec2c0a..4a2f8cc 100644 --- a/src/cleaners/skyblock/member.ts +++ b/src/cleaners/skyblock/member.ts @@ -79,7 +79,7 @@ export async function cleanSkyBlockProfileMemberResponse(member, included: Inclu fairy_souls: fairySouls, inventories: inventoriesIncluded ? await cleanInventories(member) : undefined, objectives: cleanObjectives(member), - skills: cleanSkills(member), + skills: await cleanSkills(member), visited_zones: cleanVisitedZones(member), collections: cleanCollections(member), slayers: cleanSlayers(member) diff --git a/src/cleaners/skyblock/skills.ts b/src/cleaners/skyblock/skills.ts index e283379..fa27217 100644 --- a/src/cleaners/skyblock/skills.ts +++ b/src/cleaners/skyblock/skills.ts @@ -1,17 +1,77 @@ +import { fetchSkillXp, fetchSkillXpEasier } from '../../constants' + export interface Skill { name: string xp: number + level: number + + levelXp: number + levelXpRequired: number +} + +// the highest level you can have in each skill +// numbers taken from https://hypixel-skyblock.fandom.com/wiki/Skills +// maybe these should be moved to skyblock-constants? +const skillsMaxLevel: { [ key: string ]: number } = { + farming: 60, + mining: 60, + combat: 60, + foraging: 50, + fishing: 50, + enchanting: 60, + alchemy: 50, + taming: 50, + dungeoneering: 50, + carpentry: 50, + runecrafting: 25, + social: 25 } -export function cleanSkills(data: any): Skill[] { +// for skills that aren't in maxSkills, default to this +const skillsDefaultMaxLevel: number = 50 + +/** + * Get the skill level for the amount of total xp + * @param xp The xp we're finding the level for + * @param easierLevel Whether it should use the alternate leveling xp table (used for cosmetic skills and dungeoneering) + */ +export async function levelForSkillXp(xp: number, maxLevel: number) { + const xpTable = maxLevel <= 25 ? await fetchSkillXpEasier() : await fetchSkillXp() + const skillLevel = [...xpTable].reverse().findIndex(levelXp => xp >= levelXp) + return skillLevel === -1 ? 0 : xpTable.length - skillLevel +} + +export async function cleanSkills(data: any): Promise { const skills: Skill[] = [] for (const item in data) { if (item.startsWith('experience_skill_')) { const skillName = item.substr('experience_skill_'.length) - const skillValue = data[item] + + // the amount of total xp you have in this skill + const skillXp = data[item] + + const skillMaxLevel = skillsMaxLevel[skillName] ?? skillsDefaultMaxLevel + + const xpTable = skillMaxLevel <= 25 ? await fetchSkillXpEasier() : await fetchSkillXp() + + // the level you're at for this skill + const skillLevel = await levelForSkillXp(skillXp, skillMaxLevel) + + // the total xp required for the previous level + const previousLevelXp = skillLevel >= 1 ? xpTable[skillLevel - 1] : 0 + + // the extra xp left over + const skillLevelXp = skillXp - previousLevelXp + + // the amount of extra xp required for this level + const skillLevelXpRequired = xpTable[skillLevel] - previousLevelXp + skills.push({ name: skillName, - xp: skillValue + xp: skillXp, + level: skillLevel, + levelXp: skillLevelXp, + levelXpRequired: skillLevelXpRequired }) } } diff --git a/src/constants.ts b/src/constants.ts index 48f9619..9699e57 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -227,6 +227,14 @@ export async function fetchMinions(): Promise { return await constants.fetchJSONConstant('minions.json') } +export async function fetchSkillXp(): Promise { + return await constants.fetchJSONConstant('manual/skill_xp.json') +} + +export async function fetchSkillXpEasier(): Promise { + return await constants.fetchJSONConstant('manual/skill_xp_easier.json') +} + /** Add skills to skyblock-constants. This has caching so it's fine to call many times */ export async function addMinions(addingMinions: string[]): Promise { await constants.addJSONConstants('minions.json', addingMinions, 'minion') diff --git a/test-data-generator/index.ts b/test-data-generator/index.ts index 408f76a..b0b3ba6 100644 --- a/test-data-generator/index.ts +++ b/test-data-generator/index.ts @@ -20,7 +20,7 @@ const playerUuids = [ async function writeTestData(requestPath: string, name: string, contents: any) { const dir = path.join(__dirname, '..', 'test', 'data', requestPath) - await fs.mkdir(dir, { recursive: true }) + await fs.mkdir(path.dirname(path.join(dir, `${name}.json`)), { recursive: true }) await fs.writeFile(path.join(dir, `${name}.json`), JSON.stringify(contents, null, 2)) } @@ -35,7 +35,16 @@ async function addResponse(requestPath: string, args: { [ key: string ]: string async function addConstants() { - const constantNames = ['collections', 'minions', 'skills', 'slayers', 'stats', 'zones'] + const constantNames = [ + 'collections', + 'minions', + 'skills', + 'slayers', + 'stats', + 'zones', + 'manual/skill_xp', + 'manual/skill_xp_easier', + ] for (const constantName of constantNames) { const constantData = await constants.fetchJSONConstant(constantName + '.json') await writeTestData('constants', constantName, constantData) diff --git a/test/data/constants/manual/skill_xp.json b/test/data/constants/manual/skill_xp.json new file mode 100644 index 0000000..2aee873 --- /dev/null +++ b/test/data/constants/manual/skill_xp.json @@ -0,0 +1,61 @@ +[ 50, + 175, + 375, + 675, + 1175, + 1925, + 2925, + 4425, + 6425, + 9925, + 14925, + 22425, + 32425, + 47425, + 67425, + 97425, + 147425, + 222425, + 322425, + 522425, + 822425, + 1222425, + 1722425, + 2322425, + 3022425, + 3822425, + 4722425, + 5722425, + 6822425, + 8022425, + 9322425, + 10722425, + 12222425, + 13822425, + 15522425, + 17322425, + 19222425, + 21222425, + 23322425, + 25522425, + 27822425, + 30222425, + 32722425, + 35322425, + 38072425, + 40972425, + 44072425, + 47472425, + 51172425, + 55172425, + 59472425, + 64072425, + 68972425, + 74172425, + 79672425, + 85472425, + 91572425, + 97972425, + 104672425, + 111672425 +] \ No newline at end of file diff --git a/test/data/constants/manual/skill_xp_easier.json b/test/data/constants/manual/skill_xp_easier.json new file mode 100644 index 0000000..b1be10b --- /dev/null +++ b/test/data/constants/manual/skill_xp_easier.json @@ -0,0 +1,26 @@ +[ 50, + 150, + 275, + 435, + 635, + 885, + 1200, + 1600, + 2100, + 2725, + 3510, + 4510, + 5760, + 7325, + 9325, + 11825, + 14950, + 18950, + 23950, + 30200, + 38050, + 47850, + 60100, + 75400, + 94450 +] \ No newline at end of file diff --git a/test/data/constants/minions.json b/test/data/constants/minions.json index 5291a34..a44cd62 100644 --- a/test/data/constants/minions.json +++ b/test/data/constants/minions.json @@ -50,6 +50,7 @@ "spruce", "sugar_cane", "tarantula", + "voidling", "wheat", "zombie" ] \ No newline at end of file diff --git a/test/data/constants/slayers.json b/test/data/constants/slayers.json index f9bc036..f7ba838 100644 --- a/test/data/constants/slayers.json +++ b/test/data/constants/slayers.json @@ -1,4 +1,5 @@ [ + "enderman", "spider", "wolf", "zombie" diff --git a/test/data/constants/stats.json b/test/data/constants/stats.json index 89685bd..0632eef 100644 --- a/test/data/constants/stats.json +++ b/test/data/constants/stats.json @@ -53,16 +53,22 @@ "deaths_crypt_souleater", "deaths_crypt_tank_zombie", "deaths_crypt_undead", + "deaths_crypt_undead_adamwho", "deaths_crypt_undead_agentk", "deaths_crypt_undead_alexander", "deaths_crypt_undead_apunch", + "deaths_crypt_undead_bembo", "deaths_crypt_undead_bernhard", + "deaths_crypt_undead_blockskey", + "deaths_crypt_undead_bloozing", "deaths_crypt_undead_cecer", "deaths_crypt_undead_chilynn", "deaths_crypt_undead_christian", "deaths_crypt_undead_codename_b", "deaths_crypt_undead_connorlinfoot", "deaths_crypt_undead_dctr", + "deaths_crypt_undead_donpireso", + "deaths_crypt_undead_dueces", "deaths_crypt_undead_erosemberg", "deaths_crypt_undead_externalizable", "deaths_crypt_undead_flameboy101", @@ -71,8 +77,10 @@ "deaths_crypt_undead_jamiethegeek", "deaths_crypt_undead_jayavarmen", "deaths_crypt_undead_judg3", + "deaths_crypt_undead_ladybleu", "deaths_crypt_undead_likaos", "deaths_crypt_undead_luckykessie", + "deaths_crypt_undead_magicboys", "deaths_crypt_undead_marius", "deaths_crypt_undead_minikloon", "deaths_crypt_undead_nicholas", @@ -84,7 +92,9 @@ "deaths_crypt_undead_relenter", "deaths_crypt_undead_revengeee", "deaths_crypt_undead_rezzus", + "deaths_crypt_undead_robitybobity", "deaths_crypt_undead_sfarnham", + "deaths_crypt_undead_skyerzz", "deaths_crypt_undead_sylent", "deaths_crypt_undead_thorlon", "deaths_crypt_undead_valentin", @@ -128,10 +138,12 @@ "deaths_goblin_weakling_melee", "deaths_great_white_shark", "deaths_grim_reaper", + "deaths_grinch", "deaths_guardian", "deaths_guardian_defender", "deaths_guardian_emperor", "deaths_headless_horseman", + "deaths_horse", "deaths_horseman_bat", "deaths_horseman_horse", "deaths_horseman_zombie", @@ -161,29 +173,48 @@ "deaths_master_crypt_tank_zombie", "deaths_master_crypt_undead", "deaths_master_crypt_undead__fudgiethewhale", + "deaths_master_crypt_undead__onah", "deaths_master_crypt_undead_adamwho", "deaths_master_crypt_undead_agentk", + "deaths_master_crypt_undead_alexander", "deaths_master_crypt_undead_apunch", + "deaths_master_crypt_undead_bernhard", + "deaths_master_crypt_undead_bloozing", + "deaths_master_crypt_undead_chilynn", "deaths_master_crypt_undead_codename_b", "deaths_master_crypt_undead_connorlinfoot", "deaths_master_crypt_undead_dctr", + "deaths_master_crypt_undead_districtgecko", "deaths_master_crypt_undead_donpireso", + "deaths_master_crypt_undead_dueces", + "deaths_master_crypt_undead_externalizable", + "deaths_master_crypt_undead_flameboy101", + "deaths_master_crypt_undead_friedrich", "deaths_master_crypt_undead_hypixel", "deaths_master_crypt_undead_jamiethegeek", "deaths_master_crypt_undead_jayavarmen", "deaths_master_crypt_undead_judg3", + "deaths_master_crypt_undead_ladybleu", "deaths_master_crypt_undead_likaos", + "deaths_master_crypt_undead_magicboys", "deaths_master_crypt_undead_minikloon", + "deaths_master_crypt_undead_mistresseldrid", "deaths_master_crypt_undead_nicholas", "deaths_master_crypt_undead_nitroholic_", "deaths_master_crypt_undead_orangemarshall", + "deaths_master_crypt_undead_plancke", "deaths_master_crypt_undead_plummel", "deaths_master_crypt_undead_relenter", + "deaths_master_crypt_undead_revengeee", "deaths_master_crypt_undead_rezzus", "deaths_master_crypt_undead_sfarnham", + "deaths_master_crypt_undead_skyerzz", + "deaths_master_crypt_undead_sylent", "deaths_master_crypt_undead_themgrf", "deaths_master_crypt_undead_thorlon", + "deaths_master_crypt_undead_valentin", "deaths_master_crypt_undead_vinny8ball666", + "deaths_master_crypt_undead_williamtiger", "deaths_master_crypt_witherskeleton", "deaths_master_deathmite", "deaths_master_diamond_guy", @@ -219,6 +250,7 @@ "deaths_master_skeletor_prime", "deaths_master_sniper_skeleton", "deaths_master_spirit_bat", + "deaths_master_spirit_bull", "deaths_master_spirit_chicken", "deaths_master_spirit_miniboss", "deaths_master_spirit_rabbit", @@ -265,6 +297,7 @@ "deaths_professor_priest_guardian", "deaths_professor_warrior_guardian", "deaths_protector_dragon", + "deaths_rabbit", "deaths_random_slime", "deaths_redstone_pigman", "deaths_respawning_skeleton", @@ -289,6 +322,8 @@ "deaths_sea_witch", "deaths_shadow_assassin", "deaths_sheep", + "deaths_shrine_charged_creeper", + "deaths_shrine_skeleton_horseman", "deaths_siamese_lynx", "deaths_silverfish", "deaths_skeleton", @@ -304,6 +339,7 @@ "deaths_snowman", "deaths_soul_of_the_alpha", "deaths_spider", + "deaths_spider_1", "deaths_spider_jockey", "deaths_spirit_bat", "deaths_spirit_bull", @@ -329,7 +365,10 @@ "deaths_unburried_zombie", "deaths_unknown", "deaths_unstable_dragon", + "deaths_vicious_wolf", "deaths_void", + "deaths_voidling_extremist", + "deaths_voidling_fanatic", "deaths_voracious_spider", "deaths_watcher", "deaths_watcher_bonzo", @@ -365,6 +404,7 @@ "deaths_zombie_lord", "deaths_zombie_soldier", "deaths_zombie_villager", + "deaths_lost_adventure", "dungeon_hub_crystal_core_anything_no_return_best_time", "dungeon_hub_crystal_core_anything_with_return_best_time", "dungeon_hub_crystal_core_no_abilities_no_return_best_time", @@ -538,24 +578,48 @@ "kills_master_crypt_souleater", "kills_master_crypt_tank_zombie", "kills_master_crypt_undead", + "kills_master_crypt_undead__onah", + "kills_master_crypt_undead_agentk", "kills_master_crypt_undead_alexander", + "kills_master_crypt_undead_apunch", + "kills_master_crypt_undead_bembo", "kills_master_crypt_undead_bernhard", "kills_master_crypt_undead_bloozing", + "kills_master_crypt_undead_cecer", "kills_master_crypt_undead_chilynn", "kills_master_crypt_undead_christian", + "kills_master_crypt_undead_codename_b", + "kills_master_crypt_undead_connorlinfoot", "kills_master_crypt_undead_dctr", "kills_master_crypt_undead_donpireso", + "kills_master_crypt_undead_dueces", + "kills_master_crypt_undead_externalizable", "kills_master_crypt_undead_flameboy101", "kills_master_crypt_undead_friedrich", "kills_master_crypt_undead_hypixel", + "kills_master_crypt_undead_jamiethegeek", + "kills_master_crypt_undead_jayavarmen", "kills_master_crypt_undead_judg3", + "kills_master_crypt_undead_ladybleu", + "kills_master_crypt_undead_likaos", + "kills_master_crypt_undead_magicboys", "kills_master_crypt_undead_marius", + "kills_master_crypt_undead_minikloon", "kills_master_crypt_undead_nicholas", "kills_master_crypt_undead_nitroholic_", + "kills_master_crypt_undead_orangemarshall", "kills_master_crypt_undead_pieter", + "kills_master_crypt_undead_plancke", + "kills_master_crypt_undead_relenter", + "kills_master_crypt_undead_revengeee", + "kills_master_crypt_undead_rezzus", "kills_master_crypt_undead_sfarnham", "kills_master_crypt_undead_skyerzz", + "kills_master_crypt_undead_sylent", + "kills_master_crypt_undead_themgrf", + "kills_master_crypt_undead_thorlon", "kills_master_crypt_undead_valentin", + "kills_master_crypt_undead_williamtiger", "kills_master_crypt_witherskeleton", "kills_master_deathmite", "kills_master_diamond_guy", @@ -658,6 +722,8 @@ "kills_sea_witch", "kills_shadow_assassin", "kills_sheep", + "kills_shrine_charged_creeper", + "kills_shrine_skeleton_horseman", "kills_siamese_lynx", "kills_silverfish", "kills_skeleton", @@ -700,6 +766,9 @@ "kills_unburried_zombie", "kills_unstable_dragon", "kills_vicious_wolf", + "kills_voidling_enderman", + "kills_voidling_extremist", + "kills_voidling_fanatic", "kills_voracious_spider", "kills_watcher", "kills_watcher_bonzo", diff --git a/test/data/constants/values.json b/test/data/constants/values.json index a7aed8e..4b2a608 100644 --- a/test/data/constants/values.json +++ b/test/data/constants/values.json @@ -1,4 +1,4 @@ { - "max_minions": 609, + "max_minions": 613, "max_fairy_souls": 227 } \ No newline at end of file diff --git a/test/data/constants/zones.json b/test/data/constants/zones.json index 9c34487..9943fc4 100644 --- a/test/data/constants/zones.json +++ b/test/data/constants/zones.json @@ -87,6 +87,7 @@ "treasure_hunter_camp", "upper_mines", "village", + "void_sepulture", "wilderness", "windmill", "winter_island", diff --git a/test/data/player/6536bfed869548fd83a1ecd24cf2a0fd.json b/test/data/player/6536bfed869548fd83a1ecd24cf2a0fd.json index 9bd0611..4c5ad19 100644 --- a/test/data/player/6536bfed869548fd83a1ecd24cf2a0fd.json +++ b/test/data/player/6536bfed869548fd83a1ecd24cf2a0fd.json @@ -274,7 +274,8 @@ "skyblock_fully_evolved", "tntgames_spleef_repulsor", "pit_get_endless_quiver_arrows", - "pit_small_streak" + "pit_small_streak", + "skyblock_bigger_storage_is_seeded" ], "displayname": "py5", "firstLogin": 1424644924085, @@ -288,12 +289,12 @@ "py5", "b3abus" ], - "lastLogin": 1620001797684, - "networkExp": 14303970, + "lastLogin": 1622501301452, + "networkExp": 14449927, "playername": "py5", "stats": { "Arcade": { - "coins": 2113250, + "coins": 2122258, "deaths_throw_out": 13, "kills_throw_out": 10, "music": true, @@ -396,10 +397,10 @@ "legacyachievement10", "legacyachievement9" ], - "coins": 162465 + "coins": 166325 }, "TNTGames": { - "coins": 66894, + "coins": 70584, "deaths_bowspleef": 15, "tags_bowspleef": 271, "new_spleef_repulsor": 1, @@ -487,7 +488,7 @@ "shoes_active": "GOLD_SHOES", "jacket_active": "GOLD_JACKET", "pants_active": "GOLD_PANTS", - "coins": 66890, + "coins": 70395, "lastTourneyAd": 1596934457455 }, "SkyWars": { @@ -569,7 +570,7 @@ "losses_kit_basic_solo_default": 59, "deaths_team_insane": 23, "survived_players_kit_mining_team_default": 91, - "coins": 599383, + "coins": 603673, "survived_players_team": 235, "losses_team_insane": 22, "losses_kit_mining_team_default": 8, @@ -1170,7 +1171,7 @@ "melee_kills_lab_kit_mining_team_default": 2 }, "MCGO": { - "coins": 172085, + "coins": 176555, "packages": [ "legacyachievementnewnewnew", "achievement_flag_3", @@ -1205,7 +1206,7 @@ "achievement_flag_3" ], "kills": 249, - "coins": 73327, + "coins": 76832, "monthly_kills_b": 110, "weekly_kills_b": 225, "deaths": 183, @@ -1248,7 +1249,7 @@ "achievement_flag_1", "achievement_flag_2" ], - "coins": 70402, + "coins": 73907, "favorite_slots": "null,null,null", "showKillPrefix": true, "kills": 38, @@ -1261,7 +1262,7 @@ "updated_stats": true, "human_deaths": 7, "zombie_kills": 22, - "coins": 69174, + "coins": 72679, "vampire_deaths": 20, "votes_Cavern": 3, "vampire_kills": 13, @@ -1657,7 +1658,7 @@ "entity_explosion_final_kills_bedwars": 1 }, "HungerGames": { - "coins": 119759, + "coins": 123789, "packages": [ "fixachievements2", "fixachievements1", @@ -1703,7 +1704,7 @@ "autoarmor": true }, "Walls": { - "coins": 71890, + "coins": 75395, "monthly_assists_a": 2, "assists": 2, "weekly_assists_a": 1, @@ -1712,10 +1713,10 @@ "weekly_assists_b": 1 }, "Arena": { - "coins": 66890 + "coins": 70395 }, "Walls3": { - "coins": 69430, + "coins": 72950, "packages": [ "achievement_fix_flag", "legacy_achievement_a" @@ -1805,13 +1806,13 @@ "phoenix_wins": 1 }, "UHC": { - "coins": 60126, + "coins": 63301, "clearup_achievement": true, "saved_stats": true, "deaths": 1 }, "SuperSmash": { - "coins": 113810, + "coins": 117850, "lastLevel_THE_BULK": 0, "active_class": "THE_BULK", "win_streak": 0, @@ -1867,7 +1868,7 @@ ] }, "SpeedUHC": { - "coins": 203305, + "coins": 206600, "firstJoinLobbyInt": 3, "killstreak": 0, "win_streak": 0, @@ -2475,7 +2476,7 @@ "Duels": { "kit_menu_option": "off", "sw_duels_kit": "kit_ranked_ranked_champion", - "games_played_duels": 16774, + "games_played_duels": 16801, "show_lb_option": "on", "rematch_option_1": "default", "duels_recently_played": "BRIDGE_DUEL#SUMO_DUEL#BRIDGE_DUEL", @@ -2492,17 +2493,17 @@ "duels_winstreak_best_op_duel": 14, "duels_winstreak_best_combo_duel": 6, "duels_winstreak_best_classic_duel": 18, - "melee_swings": 321294, - "losses": 5354, - "melee_hits": 113417, - "rounds_played": 13033, + "melee_swings": 322031, + "losses": 5366, + "melee_hits": 113648, + "rounds_played": 13060, "sw_duel_health_regenerated": 6475, "sw_duel_losses": 781, - "deaths": 7425, + "deaths": 7435, "sw_duel_damage_dealt": 16893, - "health_regenerated": 38179, + "health_regenerated": 38180, "sw_duel_rounds_played": 2035, - "damage_dealt": 166764, + "damage_dealt": 166773, "sw_duel_deaths": 782, "sw_duel_melee_hits": 7860, "sw_duel_melee_swings": 23838, @@ -2514,19 +2515,19 @@ "combo_duel_deaths": 30, "combo_duel_melee_swings": 15388, "combo_duel_wins": 32, - "wins": 6674, - "kills": 6071, + "wins": 6689, + "kills": 6086, "combo_duel_kills": 26, - "classic_duel_rounds_played": 7554, - "classic_duel_melee_hits": 62256, - "classic_duel_health_regenerated": 14787, - "classic_duel_damage_dealt": 120525, - "classic_duel_melee_swings": 171816, + "classic_duel_rounds_played": 7555, + "classic_duel_melee_hits": 62262, + "classic_duel_health_regenerated": 14788, + "classic_duel_damage_dealt": 120534, + "classic_duel_melee_swings": 171826, "classic_duel_wins": 4204, - "bow_shots": 21561, - "classic_duel_losses": 3176, - "classic_duel_bow_shots": 18254, - "classic_duel_deaths": 3176, + "bow_shots": 21564, + "classic_duel_losses": 3177, + "classic_duel_bow_shots": 18257, + "classic_duel_deaths": 3177, "bow_hits": 8914, "classic_duel_bow_hits": 7928, "classic_duel_kills": 4176, @@ -2607,24 +2608,24 @@ }, "current_bow_winstreak": 0, "best_bow_winstreak": 1, - "coins": 451678, + "coins": 458208, "bow_duel_wins": 1, "bow_duel_kills": 1, - "current_sumo_winstreak": 4, - "sumo_duel_losses": 759, - "sumo_duel_melee_swings": 64266, - "sumo_duel_rounds_played": 1919, - "sumo_duel_melee_hits": 20398, - "sumo_duel_deaths": 689, + "current_sumo_winstreak": 0, + "sumo_duel_losses": 770, + "sumo_duel_melee_swings": 64993, + "sumo_duel_rounds_played": 1945, + "sumo_duel_melee_hits": 20623, + "sumo_duel_deaths": 698, "best_sumo_winstreak": 18, - "sumo_duel_wins": 849, + "sumo_duel_wins": 864, "sumo_tournament_deaths": 51, "sumo_tournament_rounds_played": 74, "sumo_tournament_melee_hits": 628, "sumo_tournament_melee_swings": 1066, "sumo_tournament_losses": 51, "sumo_tournament_kills": 7, - "sumo_duel_kills": 713, + "sumo_duel_kills": 728, "duels_winstreak_best_sumo_duel": 17, "sw_duels_kit_new": "kit_ranked_ranked_champion", "sw_duel_armorer_kit_wins": 6, @@ -2710,7 +2711,7 @@ "projectile_trail_water" ], "challenges_enabled": true, - "duels_chests": 6, + "duels_chests": 7, "Duels_openedChests": 107, "Duels_openedCommons": 62, "Duels_openedRares": 34, @@ -2878,7 +2879,7 @@ "bridge_tournament_deaths": 3, "duels_winstreak_best_bridge_duel": 4, "best_winstreak_mode_sumo_duel": 18, - "current_winstreak_mode_sumo_duel": 4, + "current_winstreak_mode_sumo_duel": 0, "all_modes_master_title_prestige": 5, "bridge_duel_bridge_deaths": 955, "bridge_duel_bridge_kills": 510, @@ -2893,7 +2894,7 @@ "blitz_duel_blocks_placed": 25, "duels_recently_played2": "SW_DUEL#SUMO_DUEL#OP_DUEL", "bridge_duel": true, - "leaderboardPage_win_streak": 0, + "leaderboardPage_win_streak": 1, "current_winstreak_mode_bridge_four": 0, "bridge_four_blocks_placed": 99, "bridge_four_bridge_deaths": 3, @@ -6543,7 +6544,7 @@ "timePlaying": 30, "uuid": "6536bfed869548fd83a1ecd24cf2a0fd", "eugene": { - "dailyTwoKExp": 1616095769320 + "dailyTwoKExp": 1621125386796 }, "quests": { "gingerbread_bling_bling": { @@ -7096,8 +7097,15 @@ }, { "time": 1619929233490 + }, + { + "time": 1620944032412 } - ] + ], + "active": { + "objectives": {}, + "started": 1621036060760 + } }, "duels_killer": { "completions": [ @@ -7364,13 +7372,14 @@ }, { "time": 1619845316356 + }, + { + "time": 1620943937050 } ], "active": { - "objectives": { - "kill": 4 - }, - "started": 1619928730661 + "objectives": {}, + "started": 1621036060760 } }, "duels_winner": { @@ -7659,8 +7668,15 @@ }, { "time": 1619928822304 + }, + { + "time": 1620943937050 } - ] + ], + "active": { + "objectives": {}, + "started": 1621036060760 + } }, "duels_weekly_kills": { "completions": [ @@ -7717,13 +7733,14 @@ }, { "time": 1618882258575 + }, + { + "time": 1620944251790 } ], "active": { - "objectives": { - "kill": 91 - }, - "started": 1619224017835 + "objectives": {}, + "started": 1621036060760 } }, "duels_weekly_wins": { @@ -7803,7 +7820,7 @@ ], "active": { "objectives": { - "win": 17 + "win": 32 }, "started": 1619837300742 } @@ -8363,11 +8380,11 @@ "warlords_paladin_level": 0, "quake_kills": 251, "quake_wins": 3, - "general_challenger": 1027, + "general_challenger": 1037, "quake_killing_sprees": 8, - "general_wins": 6802, + "general_wins": 6817, "copsandcrims_bomb_specialist": 0, - "general_quest_master": 393, + "general_quest_master": 397, "tntgames_bow_spleef_wins": 0, "tntgames_tnt_run_wins": 5, "tntgames_wizards_wins": 0, @@ -8414,7 +8431,7 @@ "buildbattle_build_battle_score": 610, "buildbattle_guess_the_build_guesses": 35, "bedwars_loot_box": 17, - "duels_duels_winner": 6689, + "duels_duels_winner": 6704, "duels_duels_win_streak": 20, "duels_duels_trophies": 3, "gingerbread_banker": 49675, @@ -8448,10 +8465,10 @@ "skyblock_gatherer": 23, "skyblock_harvester": 18, "skyblock_treasury": 59, - "skyblock_minion_lover": 244, + "skyblock_minion_lover": 266, "skyblock_combat": 19, "tntgames_block_runner": 41625, - "skyblock_angler": 28, + "skyblock_angler": 29, "skyblock_augmentation": 14, "halloween2017_pumpkinator": 11, "christmas2017_advent_2019": 17, @@ -8603,7 +8620,7 @@ "specialoccasion_summer_2016_skull_portable_grill" ], "playerSettings": { - "VISIBILITY": "IntegerState-0", + "VISIBILITY": "IntegerState-4", "customVisibility": 1, "BORDER": "BooleanState-true", "TIPS": "BooleanState-false" @@ -8699,35 +8716,35 @@ "last_mcmp": 1519590874735 }, "mcVersionRp": "1.11.2", - "karma": 9896215, + "karma": 10231740, "petConsumables": { "CARROT_ITEM": 297, - "FEATHER": 914, + "FEATHER": 919, "BREAD": 325, - "SLIME_BALL": 957, - "RED_ROSE": 298, - "COOKED_BEEF": 306, - "WATER_BUCKET": 1881, + "SLIME_BALL": 959, + "RED_ROSE": 299, + "COOKED_BEEF": 307, + "WATER_BUCKET": 1885, "MELON": 339, - "WOOD_SWORD": 995, - "STICK": 986, - "MILK_BUCKET": 1940, - "PORK": 338, - "GOLD_RECORD": 949, - "PUMPKIN_PIE": 331, + "WOOD_SWORD": 996, + "STICK": 987, + "MILK_BUCKET": 1943, + "PORK": 339, + "GOLD_RECORD": 950, + "PUMPKIN_PIE": 332, "LEASH": 979, - "LAVA_BUCKET": 1926, + "LAVA_BUCKET": 1929, "BONE": 337, - "WHEAT": 302, + "WHEAT": 303, "BAKED_POTATO": 303, - "HAY_BLOCK": 321, + "HAY_BLOCK": 322, "RAW_FISH": 299, - "MAGMA_CREAM": 331, + "MAGMA_CREAM": 333, "ROTTEN_FLESH": 296, - "CAKE": 320, - "APPLE": 302, + "CAKE": 321, + "APPLE": 303, "MUSHROOM_SOUP": 321, - "COOKIE": 314 + "COOKIE": 316 }, "levelingReward_0": true, "levelingReward_1": true, @@ -9001,11 +9018,11 @@ } ] }, - "lastAdsenseGenerateTime": 1616095765770, - "lastLogout": 1620002036251, + "lastAdsenseGenerateTime": 1621125384799, + "lastLogout": 1622501380845, "friendRequestsUuid": [], "levelingReward_4": true, - "channel": "ALL", + "channel": "PARTY", "newPackageRank": "MVP_PLUS", "levelUp_VIP": 1505951821790, "currentPet": "SLIME_SMALL", @@ -9105,7 +9122,7 @@ "BUILD_BATTLE__top_3_challenge": 12, "SKYWARS__rush_challenge": 36, "BEDWARS__support": 28, - "DUELS__feed_the_void_challenge": 695, + "DUELS__feed_the_void_challenge": 705, "MURDER_MYSTERY__murder_spree": 15, "MURDER_MYSTERY__sherlock": 1, "MURDER_MYSTERY__hero": 1, @@ -9174,7 +9191,7 @@ } }, "levelingReward_31": true, - "achievementPoints": 3675, + "achievementPoints": 3700, "levelingReward_32": true, "levelingReward_33": true, "levelingReward_34": true, @@ -9273,6 +9290,13 @@ "VIP_PLUS": true, "MVP": true, "MVP_PLUS": true + }, + "5-2021": { + "REGULAR": true, + "VIP": true, + "VIP_PLUS": true, + "MVP": true, + "MVP_PLUS": true } }, "levelingReward_37": true, @@ -9370,7 +9394,6 @@ "levelingReward_97": true, "levelingReward_98": true, "levelingReward_99": true, - "mostRecentGameType": "DUELS", "adventRewards2017": { "day9": 1512838283610, "day15": 1513379822711, @@ -9396,6 +9419,7 @@ "day19": 1576799550122, "day20": 1576893108869, "day21": 1576906795987 - } + }, + "mostRecentGameType": "PROTOTYPE" } } \ No newline at end of file diff --git a/test/data/player/ef3bb867eec048a1a9b92b451f0ffc66.json b/test/data/player/ef3bb867eec048a1a9b92b451f0ffc66.json index e894744..bae9e94 100644 --- a/test/data/player/ef3bb867eec048a1a9b92b451f0ffc66.json +++ b/test/data/player/ef3bb867eec048a1a9b92b451f0ffc66.json @@ -5,7 +5,7 @@ "uuid": "ef3bb867eec048a1a9b92b451f0ffc66", "firstLogin": 1482769356469, "playername": "nmart", - "lastLogin": 1619917204304, + "lastLogin": 1622471801276, "displayname": "NMART", "knownAliases": [ "Foxydasher101", @@ -289,12 +289,15 @@ "easter_happy_easter_2021", "skyblock_fully_evolved", "easter_bw_jump_boost", - "skyblock_the_flash" + "skyblock_the_flash", + "skyblock_bigger_storage_is_seeded", + "skyblock_sweet_tooth", + "skyblock_dullahan" ], "stats": { "Arcade": { "weekly_coins_a": 10016, - "coins": 110954, + "coins": 206450, "monthly_coins_a": 7556, "dec2016_achievements": true, "dec2016_achievements2": true, @@ -380,7 +383,7 @@ }, "TNTGames": { "record_pvprun": 38, - "coins": 34151, + "coins": 35516, "deaths_bowspleef": 33, "tags_bowspleef": 549, "packages": [ @@ -481,7 +484,7 @@ "cakes_fix_flag_2" ], "chosen_class": "Shark", - "coins": 16439, + "coins": 17819, "classes": { "skeleton": { "skill_level_dChecked5": true, @@ -635,7 +638,7 @@ "kills_deathmatch": 16, "headshot_kills": 11, "criminal_kills_deathmatch": 11, - "coins": 41642, + "coins": 42602, "shots_fired": 680, "round_wins": 9, "deaths": 17, @@ -654,7 +657,7 @@ "game_plays": 1 }, "UHC": { - "coins": 11883, + "coins": 13278, "clearup_achievement": true, "deaths": 19, "packages": [ @@ -752,7 +755,7 @@ ], "kills": 17, "wins": 2, - "coins": 18310, + "coins": 19705, "shots_fired": 618, "deaths": 33, "killstreaks": 2, @@ -1015,34 +1018,34 @@ "usedSoulWell": true, "souls": 3931, "soul_well": 167, - "games_played_skywars": 4634, + "games_played_skywars": 4641, "win_streak": 0, "lastMode": "SOLO", - "survived_players_solo": 17986, - "blocks_placed": 29080, + "survived_players_solo": 18026, + "blocks_placed": 29134, "time_played_kit_basic_solo_default": 1397, - "blocks_broken": 2022, - "games_solo": 923, - "losses": 3240, - "coins": 122307, - "chests_opened_solo": 9760, - "time_played_solo": 216882, - "losses_solo": 2889, - "deaths_solo_normal": 1195, + "blocks_broken": 2024, + "games_solo": 926, + "losses": 3247, + "coins": 130666, + "chests_opened_solo": 9783, + "time_played_solo": 217300, + "losses_solo": 2896, + "deaths_solo_normal": 1199, "chests_opened_kit_basic_solo_default": 40, - "survived_players": 22189, - "chests_opened": 10433, - "time_played": 248489, + "survived_players": 22229, + "chests_opened": 10456, + "time_played": 248907, "survived_players_kit_basic_solo_default": 99, "losses_kit_basic_solo_default": 15, - "games": 994, + "games": 997, "deaths_kit_basic_solo_default": 15, - "deaths": 3252, - "losses_solo_normal": 1195, + "deaths": 3259, + "losses_solo_normal": 1199, "games_kit_basic_solo_default": 4, - "deaths_solo": 2889, - "activeKit_SOLO": "kit_advanced_solo_armorer", - "quits": 2449, + "deaths_solo": 2896, + "activeKit_SOLO": "kit_advanced_solo_jester", + "quits": 2453, "chests_opened_kit_attacking_team_default": 3, "deaths_kit_attacking_team_default": 4, "chests_opened_team": 581, @@ -1080,8 +1083,8 @@ "activeKit_TEAMS": "kit_defending_team_armorer", "quits_lab": 755, "egg_thrown": 2577, - "losses_solo_insane": 1694, - "deaths_solo_insane": 1694, + "losses_solo_insane": 1697, + "deaths_solo_insane": 1697, "games_team": 59, "losses_kit_attacking_team_grenade": 53, "survived_players_kit_attacking_team_grenade": 640, @@ -1104,12 +1107,12 @@ "longest_bow_shot_kit_basic_solo_default": 25, "longest_bow_shot": 11, "longest_bow_shot_solo": 44, - "arrows_hit": 1103, + "arrows_hit": 1104, "arrows_shot_kit_basic_solo_default": 3, - "arrows_hit_solo": 958, + "arrows_hit_solo": 959, "arrows_hit_kit_basic_solo_default": 1, - "arrows_shot_solo": 3208, - "arrows_shot": 3728, + "arrows_shot_solo": 3214, + "arrows_shot": 3734, "items_enchanted": 547, "freeLootChestNpc": 1520704241725, "skywars_chests": 0, @@ -1139,9 +1142,9 @@ "most_kills_game_kit_mining_team_default": 1, "most_kills_game": 7, "kills_weekly_b": 1098, - "kills": 2105, + "kills": 2113, "survived_players_kit_mining_team_default": 14, - "void_kills": 741, + "void_kills": 743, "time_played_kit_mining_team_default": 86, "kills_team_normal": 58, "kills_team": 190, @@ -1175,7 +1178,7 @@ "most_kills_game_lab": 3, "void_kills_lab": 259, "souls_gathered_lab": 250, - "kills_weekly_a": 1562, + "kills_weekly_a": 1570, "void_kills_lab_kit_attacking_team_grenade": 7, "kills_lab_kit_attacking_team_grenade": 24, "kills_lab": 555, @@ -1304,12 +1307,12 @@ "longest_bow_kill": 40, "longest_bow_kill_solo": 40, "longest_bow_kill_kit_basic_solo_scout": 2, - "melee_kills_solo": 1082, + "melee_kills_solo": 1088, "kills_kit_basic_solo_scout": 25, - "kills_solo_normal": 779, - "melee_kills": 1198, + "kills_solo_normal": 785, + "melee_kills": 1204, "melee_kills_kit_basic_solo_scout": 10, - "kills_solo": 1894, + "kills_solo": 1902, "killstreak": 550, "killstreak_team": 51, "killstreak_kit_attacking_team_grenade": 3, @@ -1326,16 +1329,16 @@ "longest_bow_kill_team": 9, "melee_kills_team": 100, "melee_kills_kit_attacking_team_grenade": 5, - "losses_kit_defending_team_armorer": 1073, - "time_played_kit_defending_team_armorer": 74377, - "chests_opened_kit_defending_team_armorer": 3536, - "survived_players_kit_defending_team_armorer": 7415, - "deaths_kit_defending_team_armorer": 1083, - "games_kit_defending_team_armorer": 346, + "losses_kit_defending_team_armorer": 1076, + "time_played_kit_defending_team_armorer": 74520, + "chests_opened_kit_defending_team_armorer": 3545, + "survived_players_kit_defending_team_armorer": 7431, + "deaths_kit_defending_team_armorer": 1086, + "games_kit_defending_team_armorer": 347, "longest_bow_kill_kit_defending_team_armorer": 80, "most_kills_game_kit_defending_team_armorer": 7, - "melee_kills_kit_defending_team_armorer": 442, - "kills_kit_defending_team_armorer": 808, + "melee_kills_kit_defending_team_armorer": 444, + "kills_kit_defending_team_armorer": 810, "chests_opened_lab_kit_defending_team_armorer": 890, "deaths_lab_kit_defending_team_armorer": 264, "survived_players_lab_kit_defending_team_armorer": 1709, @@ -1345,19 +1348,19 @@ "kills_lab_kit_defending_team_armorer": 206, "most_kills_game_kit_advanced_solo_jester": 5, "longest_bow_kill_kit_advanced_solo_jester": 59, - "deaths_kit_advanced_solo_jester": 506, - "kills_kit_advanced_solo_jester": 245, - "survived_players_kit_advanced_solo_jester": 3394, - "time_played_kit_advanced_solo_jester": 45140, - "melee_kills_kit_advanced_solo_jester": 106, - "losses_kit_advanced_solo_jester": 506, - "chests_opened_kit_advanced_solo_jester": 1578, - "void_kills_solo": 667, - "void_kills_kit_advanced_solo_jester": 118, + "deaths_kit_advanced_solo_jester": 510, + "kills_kit_advanced_solo_jester": 251, + "survived_players_kit_advanced_solo_jester": 3418, + "time_played_kit_advanced_solo_jester": 45415, + "melee_kills_kit_advanced_solo_jester": 110, + "losses_kit_advanced_solo_jester": 510, + "chests_opened_kit_advanced_solo_jester": 1592, + "void_kills_solo": 669, + "void_kills_kit_advanced_solo_jester": 120, "longest_bow_shot_kit_advanced_solo_jester": 35, - "arrows_shot_kit_advanced_solo_jester": 351, - "arrows_hit_kit_advanced_solo_jester": 110, - "games_kit_advanced_solo_jester": 133, + "arrows_shot_kit_advanced_solo_jester": 357, + "arrows_hit_kit_advanced_solo_jester": 111, + "games_kit_advanced_solo_jester": 135, "longest_bow_shot_lab_kit_defending_team_armorer": 43, "most_kills_game_lab_kit_defending_team_armorer": 2, "arrows_hit_lab_kit_defending_team_armorer": 102, @@ -1423,7 +1426,7 @@ "time_played_kit_attacking_team_scout": 4655, "kills_team_insane": 132, "void_kills_kit_basic_solo_scout": 15, - "kills_solo_insane": 1115, + "kills_solo_insane": 1117, "assists_kit_attacking_team_jester": 4, "void_kills_kit_attacking_team_jester": 15, "deaths_kit_attacking_team_energix": 12, @@ -1453,7 +1456,7 @@ "mega_mining_expertise": 0, "team_lucky_charm": 16, "solo_nourishment": 0, - "enderpearls_thrown": 611, + "enderpearls_thrown": 612, "assists_lab_kit_advanced_solo_jester": 7, "void_kills_lab_kit_advanced_solo_jester": 57, "active_cage": "cage_faded-cage", @@ -1461,7 +1464,7 @@ "tnt_madness_explained": 51, "tnt_madness_explained_last": 1610681800482, "games_lab_kit_advanced_solo_jester": 42, - "kills_monthly_b": 1406, + "kills_monthly_b": 1414, "longest_bow_shot_lab_kit_attacking_team_jester": 12, "arrows_shot_lab_kit_attacking_team_jester": 50, "arrows_hit_lab_kit_attacking_team_jester": 12, @@ -1759,7 +1762,7 @@ "void_kills_lab_kit_basic_solo_armorsmith": 2, "arrows_shot_lab_kit_basic_solo_armorsmith": 9, "arrows_hit_lab_kit_basic_solo_armorsmith": 2, - "skywars_experience": 5075, + "skywars_experience": 5083, "team_marksmanship": 0, "team_nourishment": 0, "team_juggernaut": 4, @@ -3310,7 +3313,7 @@ "damage_dealt": 3050, "losses_teams": 9, "smashed_teams": 11, - "coins": 25584, + "coins": 26484, "losses_weekly_a": 20, "games_weekly_a": 23, "losses_monthly_b": 5, @@ -3394,7 +3397,7 @@ "achievementsupdatedd", "achievementsupdatedc" ], - "coins": 18304, + "coins": 19699, "horn": "DEFAULT", "parts": "{GingerbreadPart:{PartType:TURBOCHARGER,PartRarity:SUPER,Attributes:[{KartAttributeType:DRIFTING_EFFICIENCY,Level:3},{KartAttributeType:BOOSTER_SPEED,Level:4}]}}", "banana_hits_received": 1, @@ -3417,7 +3420,7 @@ "packages": [ "achievement_flag_3" ], - "coins": 17125, + "coins": 18520, "alternative_gun_cooldown_indicator": true, "compass_selected": true, "showDashCooldown": true, @@ -3435,7 +3438,7 @@ "updated_stats": true, "vampire_deaths": 41, "most_vampire_kills_new": 0, - "coins": 20386, + "coins": 21781, "human_deaths": 6, "human_kills": 2 }, @@ -3620,7 +3623,7 @@ "heal": 1446, "kills": 1, "damage_prevented_mage": 1300, - "coins": 28146, + "coins": 28956, "damage_taken": 30960 }, "Walls": { @@ -3629,12 +3632,12 @@ "weekly_assists_b": 1, "losses": 1, "deaths": 1, - "coins": 17125 + "coins": 18520 }, "Bedwars": { "first_join_7": true, "bedwars_boxes": 1, - "Experience": 467338, + "Experience": 481487, "bedwars_box": 12, "chest_history": "§aInvisibility Potion Spray,§aLava Projectile Trail,§aBazinga Death Cry,§bBrick House Island Topper,§aSkeleton Shopkeeper", "packages": [ @@ -3819,103 +3822,105 @@ "sprays_bunny_gg", "islandtopper_easter_bell", "npcskin_aqua_duck_pajamas", - "beddestroy_eggsplosion" + "beddestroy_eggsplosion", + "beddestroy_pig_missile", + "killmessages_oink" ], "bedwars_box_commons": 10, "bedwars_box_rares": 4, "activeNPCSkin": "npcskin_you", - "games_played_bedwars_1": 1817, + "games_played_bedwars_1": 1857, "winstreak": 0, - "final_deaths_bedwars": 1284, - "gold_resources_collected_bedwars": 54883, - "void_deaths_bedwars": 3705, - "eight_two_void_deaths_bedwars": 1534, - "deaths_bedwars": 6151, - "resources_collected_bedwars": 407144, + "final_deaths_bedwars": 1316, + "gold_resources_collected_bedwars": 56297, + "void_deaths_bedwars": 3763, + "eight_two_void_deaths_bedwars": 1570, + "deaths_bedwars": 6252, + "resources_collected_bedwars": 417857, "eight_two_permanent _items_purchased_bedwars": 775, - "eight_two_resources_collected_bedwars": 149484, - "eight_two_kills_bedwars": 1783, - "games_played_bedwars": 1715, + "eight_two_resources_collected_bedwars": 155548, + "eight_two_kills_bedwars": 1844, + "games_played_bedwars": 1755, "permanent _items_purchased_bedwars": 2047, - "eight_two_entity_attack_kills_bedwars": 1001, - "eight_two_iron_resources_collected_bedwars": 123955, - "beds_lost_bedwars": 1298, - "kills_bedwars": 4232, - "eight_two_final_deaths_bedwars": 592, - "eight_two_void_final_deaths_bedwars": 238, - "entity_attack_kills_bedwars": 2297, - "eight_two_deaths_bedwars": 2625, - "eight_two__items_purchased_bedwars": 14335, - "eight_two_games_played_bedwars": 752, - "eight_two_items_purchased_bedwars": 15480, - "eight_two_beds_lost_bedwars": 597, - "void_final_deaths_bedwars": 552, - "eight_two_gold_resources_collected_bedwars": 21501, - "losses_bedwars": 1307, - "items_purchased_bedwars": 39376, - "iron_resources_collected_bedwars": 341822, - "eight_two_losses_bedwars": 597, - "_items_purchased_bedwars": 36391, - "eight_two_entity_attack_final_deaths_bedwars": 333, - "entity_attack_final_deaths_bedwars": 671, + "eight_two_entity_attack_kills_bedwars": 1041, + "eight_two_iron_resources_collected_bedwars": 129186, + "beds_lost_bedwars": 1330, + "kills_bedwars": 4334, + "eight_two_final_deaths_bedwars": 610, + "eight_two_void_final_deaths_bedwars": 243, + "entity_attack_kills_bedwars": 2358, + "eight_two_deaths_bedwars": 2692, + "eight_two__items_purchased_bedwars": 14903, + "eight_two_games_played_bedwars": 774, + "eight_two_items_purchased_bedwars": 16090, + "eight_two_beds_lost_bedwars": 616, + "void_final_deaths_bedwars": 564, + "eight_two_gold_resources_collected_bedwars": 22241, + "losses_bedwars": 1339, + "items_purchased_bedwars": 40375, + "iron_resources_collected_bedwars": 350930, + "eight_two_losses_bedwars": 615, + "_items_purchased_bedwars": 37309, + "eight_two_entity_attack_final_deaths_bedwars": 346, + "entity_attack_final_deaths_bedwars": 690, "spray_storage_new": "VIP_PLUS,NONE,NONE,NONE", "glyph_storage_new": "GOLD,BED,EMERALD,NONE", - "void_kills_bedwars": 1829, - "coins": 245441, - "eight_two_entity_attack_final_kills_bedwars": 427, - "entity_attack_final_kills_bedwars": 781, - "eight_two_void_kills_bedwars": 744, - "eight_two_entity_attack_deaths_bedwars": 1034, - "entity_attack_deaths_bedwars": 2274, - "final_kills_bedwars": 1206, - "eight_two_final_kills_bedwars": 650, - "eight_two_beds_broken_bedwars": 360, - "diamond_resources_collected_bedwars": 7393, - "eight_two_diamond_resources_collected_bedwars": 2830, - "eight_two_wins_bedwars": 141, - "wins_bedwars": 365, - "beds_broken_bedwars": 611, - "emerald_resources_collected_bedwars": 3046, - "eight_two_emerald_resources_collected_bedwars": 1198, - "eight_two_void_final_kills_bedwars": 198, - "void_final_kills_bedwars": 378, + "void_kills_bedwars": 1866, + "coins": 263169, + "eight_two_entity_attack_final_kills_bedwars": 443, + "entity_attack_final_kills_bedwars": 802, + "eight_two_void_kills_bedwars": 763, + "eight_two_entity_attack_deaths_bedwars": 1062, + "entity_attack_deaths_bedwars": 2312, + "final_kills_bedwars": 1238, + "eight_two_final_kills_bedwars": 672, + "eight_two_beds_broken_bedwars": 373, + "diamond_resources_collected_bedwars": 7514, + "eight_two_diamond_resources_collected_bedwars": 2906, + "eight_two_wins_bedwars": 145, + "wins_bedwars": 373, + "beds_broken_bedwars": 635, + "emerald_resources_collected_bedwars": 3116, + "eight_two_emerald_resources_collected_bedwars": 1215, + "eight_two_void_final_kills_bedwars": 204, + "void_final_kills_bedwars": 387, "eight_two_custom_deaths_bedwars": 1, "custom_deaths_bedwars": 1, "custom_final_deaths_bedwars": 1, "eight_two_custom_final_deaths_bedwars": 1, "activeDeathCry": "deathcry_dragon_roar", - "four_three_void_final_kills_bedwars": 96, - "four_three_void_kills_bedwars": 584, - "four_three_entity_attack_kills_bedwars": 670, - "four_three_wins_bedwars": 117, - "four_three_iron_resources_collected_bedwars": 108517, - "four_three_games_played_bedwars": 521, - "four_three__items_purchased_bedwars": 11636, - "four_three_emerald_resources_collected_bedwars": 1024, - "four_three_void_deaths_bedwars": 1190, - "four_three_entity_attack_deaths_bedwars": 656, - "four_three_gold_resources_collected_bedwars": 18181, + "four_three_void_final_kills_bedwars": 97, + "four_three_void_kills_bedwars": 597, + "four_three_entity_attack_kills_bedwars": 685, + "four_three_wins_bedwars": 120, + "four_three_iron_resources_collected_bedwars": 111037, + "four_three_games_played_bedwars": 531, + "four_three__items_purchased_bedwars": 11833, + "four_three_emerald_resources_collected_bedwars": 1056, + "four_three_void_deaths_bedwars": 1203, + "four_three_entity_attack_deaths_bedwars": 666, + "four_three_gold_resources_collected_bedwars": 18605, "four_three_permanent _items_purchased_bedwars": 709, - "four_three_deaths_bedwars": 1910, - "four_three_entity_attack_final_kills_bedwars": 166, - "four_three_diamond_resources_collected_bedwars": 2808, - "four_three_final_kills_bedwars": 271, - "four_three_items_purchased_bedwars": 12668, - "four_three_kills_bedwars": 1290, - "four_three_resources_collected_bedwars": 130530, + "four_three_deaths_bedwars": 1933, + "four_three_entity_attack_final_kills_bedwars": 168, + "four_three_diamond_resources_collected_bedwars": 2827, + "four_three_final_kills_bedwars": 275, + "four_three_items_purchased_bedwars": 12886, + "four_three_kills_bedwars": 1319, + "four_three_resources_collected_bedwars": 133525, "four_three_fall_kills_bedwars": 34, - "fall_kills_bedwars": 93, - "four_three_beds_lost_bedwars": 383, - "four_three_losses_bedwars": 390, - "four_three_void_final_deaths_bedwars": 171, - "four_three_final_deaths_bedwars": 373, - "four_three_entity_attack_final_deaths_bedwars": 183, + "fall_kills_bedwars": 96, + "four_three_beds_lost_bedwars": 390, + "four_three_losses_bedwars": 397, + "four_three_void_final_deaths_bedwars": 175, + "four_three_final_deaths_bedwars": 381, + "four_three_entity_attack_final_deaths_bedwars": 186, "spray_glyph_field": "VIP_PLUS,VIP,EMERALD,BED,NONE,NONE", "projectile_final_deaths_bedwars": 2, "eight_two_projectile_final_deaths_bedwars": 1, "four_four__items_purchased_bedwars": 8959, "four_four_permanent _items_purchased_bedwars": 454, - "fall_deaths_bedwars": 87, + "fall_deaths_bedwars": 91, "four_four_void_kills_bedwars": 462, "four_four_kills_bedwars": 1059, "four_four_fall_deaths_bedwars": 27, @@ -3940,49 +3945,49 @@ "activeKillMessages": "killmessages_snow_storm", "activeProjectileTrail": "projectiletrail_random", "activeIslandTopper": "islandtopper_chicken", - "eight_two_fall_deaths_bedwars": 28, + "eight_two_fall_deaths_bedwars": 31, "projectile_deaths_bedwars": 16, "eight_two_projectile_deaths_bedwars": 4, "eight_two_fall_final_kills_bedwars": 16, - "fall_final_kills_bedwars": 28, - "eight_one_beds_lost_bedwars": 88, - "eight_one_entity_attack_final_kills_bedwars": 26, - "eight_one_final_deaths_bedwars": 86, - "eight_one_deaths_bedwars": 209, - "eight_one_games_played_bedwars": 98, + "fall_final_kills_bedwars": 29, + "eight_one_beds_lost_bedwars": 94, + "eight_one_entity_attack_final_kills_bedwars": 29, + "eight_one_final_deaths_bedwars": 92, + "eight_one_deaths_bedwars": 220, + "eight_one_games_played_bedwars": 106, "eight_one_entity_attack_deaths_bedwars": 79, - "eight_one_final_kills_bedwars": 37, - "eight_one_beds_broken_bedwars": 58, - "eight_one_losses_bedwars": 88, - "eight_one_iron_resources_collected_bedwars": 13727, - "eight_one__items_purchased_bedwars": 1461, - "eight_one_emerald_resources_collected_bedwars": 221, - "eight_one_items_purchased_bedwars": 1597, - "eight_one_diamond_resources_collected_bedwars": 395, + "eight_one_final_kills_bedwars": 43, + "eight_one_beds_broken_bedwars": 67, + "eight_one_losses_bedwars": 95, + "eight_one_iron_resources_collected_bedwars": 15084, + "eight_one__items_purchased_bedwars": 1614, + "eight_one_emerald_resources_collected_bedwars": 242, + "eight_one_items_purchased_bedwars": 1768, + "eight_one_diamond_resources_collected_bedwars": 421, "eight_one_permanent _items_purchased_bedwars": 109, - "eight_one_void_kills_bedwars": 39, - "eight_one_kills_bedwars": 100, - "eight_one_void_final_deaths_bedwars": 37, - "eight_one_resources_collected_bedwars": 17215, - "eight_one_gold_resources_collected_bedwars": 2872, - "four_three_beds_broken_bedwars": 116, + "eight_one_void_kills_bedwars": 44, + "eight_one_kills_bedwars": 112, + "eight_one_void_final_deaths_bedwars": 40, + "eight_one_resources_collected_bedwars": 18869, + "eight_one_gold_resources_collected_bedwars": 3122, + "four_three_beds_broken_bedwars": 118, "four_three_fall_deaths_bedwars": 32, "bedwars_halloween_boxes": 0, "free_event_key_bedwars_halloween_boxes_2017": true, - "Bedwars_openedChests": 351, - "Bedwars_openedCommons": 199, + "Bedwars_openedChests": 357, + "Bedwars_openedCommons": 202, "chest_history_new": [ - "glyph_diamond", - "npcskin_aqua_duck_pajamas", - "sprays_bunny_gg", - "sprays_egg_time", - "islandtopper_easter_bell" + "§b§b§bCoins", + "glyph_daisy", + "killmessages_oink", + "beddestroy_pig_missile", + "glyph_yes" ], - "Bedwars_openedRares": 113, + "Bedwars_openedRares": 116, "spooky_open_ach": 2, "activeGlyph": "glyph_cry_face", "activeVictoryDance": "victorydance_abominable_snowman", - "eight_one_entity_attack_kills_bedwars": 59, + "eight_one_entity_attack_kills_bedwars": 65, "bedwars_lunar_boxes": 0, "free_event_key_bedwars_lunar_boxes_2018": true, "activeSprays": "sprays_snowman_rampage", @@ -3995,18 +4000,18 @@ "eight_two_winstreak": 0, "Bedwars_openedEpics": 35, "four_three_winstreak": 0, - "four_three_fall_final_deaths_bedwars": 9, - "fall_final_deaths_bedwars": 24, + "four_three_fall_final_deaths_bedwars": 10, + "fall_final_deaths_bedwars": 25, "four_four_fall_final_deaths_bedwars": 3, "four_four_projectile_deaths_bedwars": 3, "eight_one_winstreak": 0, - "eight_one_void_deaths_bedwars": 128, - "eight_one_entity_attack_final_deaths_bedwars": 46, + "eight_one_void_deaths_bedwars": 137, + "eight_one_entity_attack_final_deaths_bedwars": 49, "eight_one_fall_final_deaths_bedwars": 1, "eight_two_entity_explosion_final_kills_bedwars": 1, "entity_explosion_final_kills_bedwars": 4, "eight_one_projectile_final_deaths_bedwars": 1, - "four_three_fall_final_kills_bedwars": 7, + "four_three_fall_final_kills_bedwars": 8, "castle_winstreak": 0, "castle_beds_lost_bedwars": 2, "castle_deaths_bedwars": 3, @@ -4020,7 +