mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-09-27 14:59:09 +02:00
Endgame Update (#4840)
General Added Crossbows Skill, this skill is a WIP and feedback on discord is appreciated. Added Tridents Skill, this skill is a WIP and feedback on discord is appreciated. Added the "endgame" triple drop subskill 'Mother Lode' to Mining Added the "endgame" triple drop subskill 'Clean Cuts' to Woodcutting Added the "endgame" triple drop subskill 'Verdant Bounty' to Herbalism Added /mmopower command which simply shows your power level (aliases /mmopowerlevel /powerlevel) Config Added 'Send_To_Console' settings to chat.yml to toggle sending party or admin chat messages to console. Replaced 'Experience_Formula.Modifier' in experience.yml with 'Experience_Formula.Skill_Multiplier' which is easier to understand and less prone to divide by zero bugs. child.yml config is gone now, feel free to delete it. Tweaks Tree Feller now drops 90% less non-wood block rewards (leaves/etc) on average from Knock on Wood. Treasure drop rate from Shake, Fishing, Hylian, and Excavation now benefit from the Luck perk. Updated advanced.yml with entries for the new skills Permission nodes Added 'mcmmo.commands.mmopower' permission node for the new /mmopower command Added 'mcmmo.commands.crossbows' permission node Added 'mcmmo.ability.crossbows.crossbowslimitbreak' permission node Added 'mcmmo.ability.crossbows.trickshot' permission node Added 'mcmmo.ability.herbalism.verdantbounty' permission node Added 'mcmmo.ability.mining.motherlode' permission node Added 'mcmmo.ability.woodcutting.cleancuts' permission node Locale Added locale entries for motherlode, cleancuts, and verdant bounty. Codebase Major rewrite for how random chance was handled in the code. Many skills with RNG elements now send out a SubSkillEvent (which can be used to modify probability or cancel the results), some skills without RNG still send out this event when activated, this event is cancellable so it can be used to make a skill fail. A lot of new unit tests were added to help keep mcMMO stable as part of this update, of course, more could always be added. NOTES: One feature of this update is to provide an endgame benefits to some skills that you can grind for a long time, ideally for a long while. I will likely expand upon this idea in future updates. A few skills have these endgame-oriented subskills, these new subskills provide a small benefit at first that grows and scales up to level 10,000 (or 1,000 for Standard mode which no one uses) and does not have ranks (other than the initial rank to unlock it). These endgame sub skills unlock at level 1000 for users with default mcMMO settings, or 100 for those using the optional Standard scaling. You can tweak the benefits of these skills in advanced.yml, the default settings are meant to be a good starting point. Crossbows and Tridents are WIP skills, I would like feedback on discord about them. More info on the new Triple Drop skills (Mother Lode, Clean Cuts, Verdant Bounty): Currently these start at about 5% chance and can reach a maximum 50% chance if a player acquired 10,000 skill, you can adjust this in advanced.yml These skills respect double drop settings from config.yml just like the corresponding Double Drop skills do, if a double drop is disabled for an item, then it's disabled for triple drops too. I added a new Power Level Command, for now this just shows you your current power level. If I ever add features based on power level, this command will likely display output related to those features. Regarding Maces, I will likely add that as a WIP skill when the next Minecraft update drops.
This commit is contained in:

committed by
GitHub

parent
bead5feb14
commit
2594dc1bca
@@ -31,7 +31,6 @@ import java.util.logging.Logger;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
//This class uses JUnit5/Jupiter
|
||||
class FlatFileDatabaseManagerTest {
|
||||
|
||||
public static final @NotNull String TEST_FILE_NAME = "test.mcmmo.users";
|
||||
@@ -39,7 +38,7 @@ class FlatFileDatabaseManagerTest {
|
||||
public static final @NotNull String BAD_DATA_FILE_LINE_TWENTY_THREE = "nossr51:baddata:::baddata:baddata:640:baddata:1000:1000:1000:baddata:baddata:baddata:baddata:16:0:500:20273:0:0:0:0::1000:0:0:baddata:1593543012:0:0:0:0::1000:0:0:baddata:IGNORED:1000:0:588fe472-1c82-4c4e-9aa1-7eefccb277e3:1:0:";
|
||||
public static final @NotNull String DB_BADDATA = "baddatadb.users";
|
||||
public static final @NotNull String DB_HEALTHY = "healthydb.users";
|
||||
public static final @NotNull String HEALTHY_DB_LINE_1 = "nossr50:1:IGNORED:IGNORED:10:2:20:3:4:5:6:7:8:9:10:30:40:50:60:70:80:90:100:IGNORED:11:110:111:222:333:444:555:666:777:IGNORED:12:120:888:IGNORED:HEARTS:13:130:588fe472-1c82-4c4e-9aa1-7eefccb277e3:1111:999:2020:";
|
||||
public static final @NotNull String HEALTHY_DB_LINE_1 = "nossr50:1:IGNORED:IGNORED:10:2:20:3:4:5:6:7:8:9:10:30:40:50:60:70:80:90:100:IGNORED:11:110:111:222:333:444:555:666:777:IGNORED:12:120:888:IGNORED:HEARTS:13:130:588fe472-1c82-4c4e-9aa1-7eefccb277e3:1111:999:2020:140:14:150:15:1111:2222:3333";
|
||||
public static final @NotNull String HEALTHY_DB_LINE_ONE_UUID_STR = "588fe472-1c82-4c4e-9aa1-7eefccb277e3";
|
||||
public static final String DB_MISSING_LAST_LOGIN = "missinglastlogin.users";
|
||||
public static final String LINE_TWO_FROM_MISSING_DB = "nossr50:1:IGNORED:IGNORED:10:2:20:3:4:5:6:7:8:9:10:30:40:50:60:70:80:90:100:IGNORED:11:110:111:222:333:444:555:666:777:IGNORED:12:120:888:0:HEARTS:13:130:588fe472-1c82-4c4e-9aa1-7eefccb277e3:1111:999:";
|
||||
@@ -52,16 +51,19 @@ class FlatFileDatabaseManagerTest {
|
||||
int expectedLvlMining = 1, expectedLvlWoodcutting = 2, expectedLvlRepair = 3,
|
||||
expectedLvlUnarmed = 4, expectedLvlHerbalism = 5, expectedLvlExcavation = 6,
|
||||
expectedLvlArchery = 7, expectedLvlSwords = 8, expectedLvlAxes = 9, expectedLvlAcrobatics = 10,
|
||||
expectedLvlTaming = 11, expectedLvlFishing = 12, expectedLvlAlchemy = 13;
|
||||
expectedLvlTaming = 11, expectedLvlFishing = 12, expectedLvlAlchemy = 13, expectedLvlCrossbows = 14,
|
||||
expectedLvlTridents = 15;
|
||||
|
||||
float expectedExpMining = 10, expectedExpWoodcutting = 20, expectedExpRepair = 30,
|
||||
expectedExpUnarmed = 40, expectedExpHerbalism = 50, expectedExpExcavation = 60,
|
||||
expectedExpArchery = 70, expectedExpSwords = 80, expectedExpAxes = 90, expectedExpAcrobatics = 100,
|
||||
expectedExpTaming = 110, expectedExpFishing = 120, expectedExpAlchemy = 130;
|
||||
expectedExpTaming = 110, expectedExpFishing = 120, expectedExpAlchemy = 130, expectedExpCrossbows = 140,
|
||||
expectedExpTridents = 150;
|
||||
|
||||
long expectedBerserkCd = 111, expectedGigaDrillBreakerCd = 222, expectedTreeFellerCd = 333,
|
||||
expectedGreenTerraCd = 444, expectedSerratedStrikesCd = 555, expectedSkullSplitterCd = 666,
|
||||
expectedSuperBreakerCd = 777, expectedBlastMiningCd = 888, expectedChimaeraWingCd = 999;
|
||||
expectedSuperBreakerCd = 777, expectedBlastMiningCd = 888, expectedChimaeraWingCd = 999,
|
||||
expectedSuperShotgunCd = 1111, expectedTridentSuperCd = 2222, expectedExplosiveShotCd = 3333;
|
||||
|
||||
int expectedScoreboardTips = 1111;
|
||||
Long expectedLastLogin = 2020L;
|
||||
@@ -226,7 +228,6 @@ class FlatFileDatabaseManagerTest {
|
||||
logger.info("File Path: "+healthyDB.getAbsolutePath());
|
||||
assertArrayEquals(HEALTHY_DB_LINE_1.split(":"), dataFromFile.get(0));
|
||||
assertEquals(dataFromFile.get(0)[FlatFileDatabaseManager.UUID_INDEX], HEALTHY_DB_LINE_ONE_UUID_STR);
|
||||
UUID healthDBEntryOneUUID = UUID.fromString(HEALTHY_DB_LINE_ONE_UUID_STR);
|
||||
|
||||
db = new FlatFileDatabaseManager(healthyDB, logger, PURGE_TIME, 0, true);
|
||||
List<FlatFileDataFlag> flagsFound = db.checkFileHealthAndStructure();
|
||||
@@ -451,14 +452,13 @@ class FlatFileDatabaseManagerTest {
|
||||
if(SkillTools.isChildSkill(primarySkillType))
|
||||
continue;
|
||||
|
||||
// logger.info("Checking expected values for: "+primarySkillType);
|
||||
// logger.info("Profile Level Value: "+profile.getSkillLevel(primarySkillType));
|
||||
// logger.info("Expected Lvl Value: "+getExpectedLevelHealthyDBEntryOne(primarySkillType));
|
||||
// logger.info("Profile Exp Value: "+profile.getSkillXpLevelRaw(primarySkillType));
|
||||
// logger.info("Expected Exp Value: "+getExpectedExperienceHealthyDBEntryOne(primarySkillType));
|
||||
int expectedLevelHealthyDBEntryOne = getExpectedLevelHealthyDBEntryOne(primarySkillType);
|
||||
int skillLevel = profile.getSkillLevel(primarySkillType);
|
||||
assertEquals(expectedLevelHealthyDBEntryOne, skillLevel);
|
||||
|
||||
assertEquals(getExpectedLevelHealthyDBEntryOne(primarySkillType), profile.getSkillLevel(primarySkillType));
|
||||
assertEquals(getExpectedExperienceHealthyDBEntryOne(primarySkillType), profile.getSkillXpLevelRaw(primarySkillType), 0);
|
||||
float expectedExperienceHealthyDBEntryOne = getExpectedExperienceHealthyDBEntryOne(primarySkillType);
|
||||
float skillXpLevelRaw = profile.getSkillXpLevelRaw(primarySkillType);
|
||||
assertEquals(expectedExperienceHealthyDBEntryOne, skillXpLevelRaw, 0);
|
||||
}
|
||||
|
||||
//Check the other things
|
||||
@@ -472,29 +472,24 @@ class FlatFileDatabaseManagerTest {
|
||||
}
|
||||
|
||||
private long getExpectedSuperAbilityDATS(@NotNull SuperAbilityType superAbilityType) {
|
||||
switch(superAbilityType) {
|
||||
case BERSERK:
|
||||
return expectedBerserkCd;
|
||||
case SUPER_BREAKER:
|
||||
return expectedSuperBreakerCd;
|
||||
case GIGA_DRILL_BREAKER:
|
||||
return expectedGigaDrillBreakerCd;
|
||||
case GREEN_TERRA:
|
||||
return expectedGreenTerraCd;
|
||||
case SKULL_SPLITTER:
|
||||
return expectedSkullSplitterCd;
|
||||
case TREE_FELLER:
|
||||
return expectedTreeFellerCd;
|
||||
case SERRATED_STRIKES:
|
||||
return expectedSerratedStrikesCd;
|
||||
case BLAST_MINING:
|
||||
return expectedBlastMiningCd;
|
||||
}
|
||||
return switch (superAbilityType) {
|
||||
case BERSERK -> expectedBerserkCd;
|
||||
case SUPER_BREAKER -> expectedSuperBreakerCd;
|
||||
case GIGA_DRILL_BREAKER -> expectedGigaDrillBreakerCd;
|
||||
case GREEN_TERRA -> expectedGreenTerraCd;
|
||||
case SKULL_SPLITTER -> expectedSkullSplitterCd;
|
||||
case SUPER_SHOTGUN -> expectedSuperShotgunCd;
|
||||
case TREE_FELLER -> expectedTreeFellerCd;
|
||||
case SERRATED_STRIKES -> expectedSerratedStrikesCd;
|
||||
case BLAST_MINING -> expectedBlastMiningCd;
|
||||
case TRIDENTS_SUPER_ABILITY -> expectedTridentSuperCd;
|
||||
case EXPLOSIVE_SHOT -> expectedExplosiveShotCd;
|
||||
default -> throw new RuntimeException("Values not defined for super ability please add " +
|
||||
"values for " + superAbilityType.toString() + " to the test");
|
||||
};
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//TODO: Why is this stuff a float?
|
||||
private float getExpectedExperienceHealthyDBEntryOne(@NotNull PrimarySkillType primarySkillType) {
|
||||
switch(primarySkillType) {
|
||||
case ACROBATICS:
|
||||
@@ -505,6 +500,8 @@ class FlatFileDatabaseManagerTest {
|
||||
return expectedExpArchery;
|
||||
case AXES:
|
||||
return expectedExpAxes;
|
||||
case CROSSBOWS:
|
||||
return expectedExpCrossbows;
|
||||
case EXCAVATION:
|
||||
return expectedExpExcavation;
|
||||
case FISHING:
|
||||
@@ -522,13 +519,15 @@ class FlatFileDatabaseManagerTest {
|
||||
return expectedExpSwords;
|
||||
case TAMING:
|
||||
return expectedExpTaming;
|
||||
case TRIDENTS:
|
||||
return expectedExpTridents;
|
||||
case UNARMED:
|
||||
return expectedExpUnarmed;
|
||||
case WOODCUTTING:
|
||||
return expectedExpWoodcutting;
|
||||
}
|
||||
|
||||
return -1;
|
||||
throw new RuntimeException("Values for skill not defined, please add values for " + primarySkillType.toString() + " to the test");
|
||||
}
|
||||
|
||||
private int getExpectedLevelHealthyDBEntryOne(@NotNull PrimarySkillType primarySkillType) {
|
||||
@@ -541,6 +540,8 @@ class FlatFileDatabaseManagerTest {
|
||||
return expectedLvlArchery;
|
||||
case AXES:
|
||||
return expectedLvlAxes;
|
||||
case CROSSBOWS:
|
||||
return expectedLvlCrossbows;
|
||||
case EXCAVATION:
|
||||
return expectedLvlExcavation;
|
||||
case FISHING:
|
||||
@@ -558,13 +559,15 @@ class FlatFileDatabaseManagerTest {
|
||||
return expectedLvlSwords;
|
||||
case TAMING:
|
||||
return expectedLvlTaming;
|
||||
case TRIDENTS:
|
||||
return expectedLvlTridents;
|
||||
case UNARMED:
|
||||
return expectedLvlUnarmed;
|
||||
case WOODCUTTING:
|
||||
return expectedLvlWoodcutting;
|
||||
}
|
||||
|
||||
return -1;
|
||||
throw new RuntimeException("Values for skill not defined, please add values for " + primarySkillType.toString() + " to the test");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -0,0 +1,245 @@
|
||||
package com.gmail.nossr50.database;
|
||||
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.GeneralConfig;
|
||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.compat.CompatibilityManager;
|
||||
import com.gmail.nossr50.util.platform.MinecraftGameVersion;
|
||||
import com.gmail.nossr50.util.skills.SkillTools;
|
||||
import com.gmail.nossr50.util.upgrade.UpgradeManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class SQLDatabaseManagerTest {
|
||||
private final static @NotNull Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);
|
||||
static MockedStatic<mcMMO> mockedMcMMO;
|
||||
SQLDatabaseManager sqlDatabaseManager;
|
||||
static GeneralConfig generalConfig;
|
||||
static AdvancedConfig advancedConfig;
|
||||
static UpgradeManager upgradeManager;
|
||||
static CompatibilityManager compatibilityManager;
|
||||
static SkillTools skillTools;
|
||||
|
||||
@BeforeAll
|
||||
static void setUpAll() {
|
||||
// stub mcMMO.p
|
||||
mockedMcMMO = Mockito.mockStatic(mcMMO.class);
|
||||
mcMMO.p = Mockito.mock(mcMMO.class);
|
||||
when(mcMMO.p.getLogger()).thenReturn(logger);
|
||||
|
||||
// general config mock
|
||||
mockGeneralConfig();
|
||||
|
||||
// advanced config mock
|
||||
advancedConfig = Mockito.mock(AdvancedConfig.class);
|
||||
when(mcMMO.p.getAdvancedConfig()).thenReturn(advancedConfig);
|
||||
|
||||
// starting level
|
||||
when(mcMMO.p.getAdvancedConfig().getStartingLevel()).thenReturn(0);
|
||||
|
||||
// wire skill tools
|
||||
skillTools = new SkillTools(mcMMO.p);
|
||||
when(mcMMO.p.getSkillTools()).thenReturn(skillTools);
|
||||
|
||||
// compatibility manager mock
|
||||
compatibilityManager = Mockito.mock(CompatibilityManager.class);
|
||||
when(mcMMO.getCompatibilityManager()).thenReturn(compatibilityManager);
|
||||
when(compatibilityManager.getMinecraftGameVersion()).thenReturn(new MinecraftGameVersion(1, 20, 4));
|
||||
|
||||
// upgrade manager mock
|
||||
upgradeManager = Mockito.mock(UpgradeManager.class);
|
||||
when(mcMMO.getUpgradeManager()).thenReturn(upgradeManager);
|
||||
|
||||
// don't trigger upgrades
|
||||
when(mcMMO.getUpgradeManager().shouldUpgrade(any())).thenReturn(false);
|
||||
}
|
||||
|
||||
private static void mockGeneralConfig() {
|
||||
generalConfig = Mockito.mock(GeneralConfig.class);
|
||||
when(generalConfig.getLocale()).thenReturn("en_US");
|
||||
when(mcMMO.p.getGeneralConfig()).thenReturn(generalConfig);
|
||||
|
||||
// max pool size
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
.thenReturn(10);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
.thenReturn(20);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxPoolSize(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
.thenReturn(20);
|
||||
|
||||
// max connections
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.MISC))
|
||||
.thenReturn(30);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.LOAD))
|
||||
.thenReturn(30);
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLMaxConnections(SQLDatabaseManager.PoolIdentifier.SAVE))
|
||||
.thenReturn(30);
|
||||
|
||||
// table prefix
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLTablePrefix()).thenReturn("mcmmo_");
|
||||
|
||||
// public key retrieval
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLPublicKeyRetrieval()).thenReturn(true);
|
||||
|
||||
// debug
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLDebug()).thenReturn(true);
|
||||
|
||||
// use mysql
|
||||
when(mcMMO.p.getGeneralConfig().getUseMySQL()).thenReturn(true);
|
||||
|
||||
// use ssl
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLSSL()).thenReturn(true);
|
||||
|
||||
// username
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLUserName()).thenReturn("sa");
|
||||
|
||||
// password
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLUserPassword()).thenReturn("");
|
||||
|
||||
// host
|
||||
when(mcMMO.p.getGeneralConfig().getMySQLServerName()).thenReturn("localhost");
|
||||
|
||||
// unused mob health bar thingy
|
||||
when(mcMMO.p.getGeneralConfig().getMobHealthbarDefault()).thenReturn(MobHealthbarType.HEARTS);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
assertNull(sqlDatabaseManager);
|
||||
sqlDatabaseManager = new SQLDatabaseManager(logger, "org.h2.Driver", true);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
sqlDatabaseManager = null;
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDownAll() {
|
||||
mockedMcMMO.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionMisc() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.MISC));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionLoad() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.LOAD));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetConnectionSave() throws Exception {
|
||||
assertNotNull(sqlDatabaseManager.getConnection(SQLDatabaseManager.PoolIdentifier.SAVE));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUser() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
sqlDatabaseManager.newUser(player);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUserGetSkillLevel() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNewUserGetSkillXpLevel() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillXpLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSaveSkillLevelValues() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
// Validate values are starting from zero
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillXpLevel(primarySkillType));
|
||||
}
|
||||
|
||||
// Change values
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
playerProfile.modifySkill(primarySkillType, 1 + primarySkillType.ordinal());
|
||||
}
|
||||
|
||||
boolean saveSuccess = sqlDatabaseManager.saveUser(playerProfile);
|
||||
assertTrue(saveSuccess);
|
||||
|
||||
PlayerProfile retrievedUser = sqlDatabaseManager.loadPlayerProfile(player.getName());
|
||||
|
||||
// Check that values got saved
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
if (primarySkillType == PrimarySkillType.SALVAGE || primarySkillType == PrimarySkillType.SMELTING) {
|
||||
// Child skills are not saved, but calculated
|
||||
continue;
|
||||
}
|
||||
|
||||
assertEquals(1 + primarySkillType.ordinal(), retrievedUser.getSkillLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSaveSkillXpValues() {
|
||||
Player player = Mockito.mock(Player.class);
|
||||
when(player.getUniqueId()).thenReturn(java.util.UUID.randomUUID());
|
||||
when(player.getName()).thenReturn("nossr50");
|
||||
PlayerProfile playerProfile = sqlDatabaseManager.newUser(player);
|
||||
|
||||
// Validate values are starting from zero
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
assertEquals(0, playerProfile.getSkillXpLevel(primarySkillType));
|
||||
}
|
||||
|
||||
// Change values
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
playerProfile.setSkillXpLevel(primarySkillType, 1 + primarySkillType.ordinal());
|
||||
}
|
||||
|
||||
sqlDatabaseManager.saveUser(playerProfile);
|
||||
|
||||
PlayerProfile retrievedUser = sqlDatabaseManager.loadPlayerProfile(player.getName());
|
||||
|
||||
// Check that values got saved
|
||||
for (PrimarySkillType primarySkillType : PrimarySkillType.values()) {
|
||||
if (primarySkillType == PrimarySkillType.SALVAGE || primarySkillType == PrimarySkillType.SMELTING) {
|
||||
// Child skills are not saved, but calculated
|
||||
continue;
|
||||
}
|
||||
|
||||
assertEquals(1 + primarySkillType.ordinal(), retrievedUser.getSkillXpLevel(primarySkillType));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user