|
@@ -3,13 +3,18 @@ package com.gmail.nossr50;
|
|
import com.gmail.nossr50.commands.levelup.LevelUpCommandManager;
|
|
import com.gmail.nossr50.commands.levelup.LevelUpCommandManager;
|
|
import com.gmail.nossr50.config.*;
|
|
import com.gmail.nossr50.config.*;
|
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
|
|
|
+import com.gmail.nossr50.datatypes.experience.FormulaType;
|
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
|
|
|
+import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
|
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
|
|
|
|
+import com.gmail.nossr50.events.experience.McMMOPlayerPreXpGainEvent;
|
|
import com.gmail.nossr50.listeners.SelfListener;
|
|
import com.gmail.nossr50.listeners.SelfListener;
|
|
import com.gmail.nossr50.util.*;
|
|
import com.gmail.nossr50.util.*;
|
|
import com.gmail.nossr50.util.blockmeta.ChunkManager;
|
|
import com.gmail.nossr50.util.blockmeta.ChunkManager;
|
|
|
|
+import com.gmail.nossr50.util.experience.FormulaManager;
|
|
|
|
+import com.gmail.nossr50.util.player.NotificationManager;
|
|
import com.gmail.nossr50.util.player.UserManager;
|
|
import com.gmail.nossr50.util.player.UserManager;
|
|
import com.gmail.nossr50.util.skills.RankUtils;
|
|
import com.gmail.nossr50.util.skills.RankUtils;
|
|
import com.gmail.nossr50.util.skills.SkillTools;
|
|
import com.gmail.nossr50.util.skills.SkillTools;
|
|
@@ -26,8 +31,10 @@ import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
import org.mockito.MockedStatic;
|
|
import org.mockito.MockedStatic;
|
|
import org.mockito.Mockito;
|
|
import org.mockito.Mockito;
|
|
|
|
+import org.mockito.internal.matchers.Not;
|
|
|
|
|
|
import java.util.UUID;
|
|
import java.util.UUID;
|
|
|
|
+import java.util.function.Function;
|
|
|
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.mock;
|
|
@@ -39,11 +46,11 @@ public abstract class MMOTestEnvironmentBasic {
|
|
protected MockedStatic<Bukkit> mockedBukkit;
|
|
protected MockedStatic<Bukkit> mockedBukkit;
|
|
protected MockedStatic<ChatConfig> mockedChatConfig;
|
|
protected MockedStatic<ChatConfig> mockedChatConfig;
|
|
protected MockedStatic<ExperienceConfig> experienceConfig;
|
|
protected MockedStatic<ExperienceConfig> experienceConfig;
|
|
|
|
+ private MockedStatic<NotificationManager> mockedNotificationManager;
|
|
protected MockedStatic<Permissions> mockedPermissions;
|
|
protected MockedStatic<Permissions> mockedPermissions;
|
|
protected MockedStatic<RankUtils> mockedRankUtils;
|
|
protected MockedStatic<RankUtils> mockedRankUtils;
|
|
protected MockedStatic<UserManager> mockedUserManager;
|
|
protected MockedStatic<UserManager> mockedUserManager;
|
|
protected MockedStatic<Misc> mockedMisc;
|
|
protected MockedStatic<Misc> mockedMisc;
|
|
- protected MockedStatic<SkillTools> mockedSkillTools;
|
|
|
|
protected MockedStatic<EventUtils> mockedEventUtils;
|
|
protected MockedStatic<EventUtils> mockedEventUtils;
|
|
protected SelfListener selfListener;
|
|
protected SelfListener selfListener;
|
|
protected TransientEntityTracker transientEntityTracker;
|
|
protected TransientEntityTracker transientEntityTracker;
|
|
@@ -57,6 +64,8 @@ public abstract class MMOTestEnvironmentBasic {
|
|
protected PluginManager pluginManager;
|
|
protected PluginManager pluginManager;
|
|
protected World world;
|
|
protected World world;
|
|
|
|
|
|
|
|
+ private FormulaManager formulaManager;
|
|
|
|
+
|
|
/* Mocks */
|
|
/* Mocks */
|
|
protected Player player;
|
|
protected Player player;
|
|
|
|
|
|
@@ -87,6 +96,10 @@ public abstract class MMOTestEnvironmentBasic {
|
|
mcMMO.p = mock(mcMMO.class);
|
|
mcMMO.p = mock(mcMMO.class);
|
|
when(mcMMO.p.getLogger()).thenReturn(logger);
|
|
when(mcMMO.p.getLogger()).thenReturn(logger);
|
|
|
|
|
|
|
|
+ // formula manager
|
|
|
|
+ formulaManager = new FormulaManager(FormulaType.UNKNOWN);
|
|
|
|
+ when(mcMMO.p.getFormulaManager()).thenReturn(formulaManager);
|
|
|
|
+
|
|
// place store
|
|
// place store
|
|
chunkManager = mock(ChunkManager.class);
|
|
chunkManager = mock(ChunkManager.class);
|
|
when(mcMMO.getPlaceStore()).thenReturn(chunkManager);
|
|
when(mcMMO.getPlaceStore()).thenReturn(chunkManager);
|
|
@@ -115,7 +128,7 @@ public abstract class MMOTestEnvironmentBasic {
|
|
mockExperienceConfig();
|
|
mockExperienceConfig();
|
|
|
|
|
|
// wire skill tools
|
|
// wire skill tools
|
|
- this.skillTools = new SkillTools(mcMMO.p);
|
|
|
|
|
|
+ this.skillTools = Mockito.spy(new SkillTools(mcMMO.p));
|
|
when(mcMMO.p.getSkillTools()).thenReturn(skillTools);
|
|
when(mcMMO.p.getSkillTools()).thenReturn(skillTools);
|
|
|
|
|
|
this.transientEntityTracker = new TransientEntityTracker();
|
|
this.transientEntityTracker = new TransientEntityTracker();
|
|
@@ -123,6 +136,8 @@ public abstract class MMOTestEnvironmentBasic {
|
|
|
|
|
|
mockPermissions();
|
|
mockPermissions();
|
|
|
|
|
|
|
|
+ mockNotifications();
|
|
|
|
+
|
|
mockedRankUtils = Mockito.mockStatic(RankUtils.class);
|
|
mockedRankUtils = Mockito.mockStatic(RankUtils.class);
|
|
|
|
|
|
// wire server
|
|
// wire server
|
|
@@ -132,11 +147,15 @@ public abstract class MMOTestEnvironmentBasic {
|
|
// wire plugin manager
|
|
// wire plugin manager
|
|
this.pluginManager = mock(PluginManager.class);
|
|
this.pluginManager = mock(PluginManager.class);
|
|
when(mockedServer.getPluginManager()).thenReturn(pluginManager);
|
|
when(mockedServer.getPluginManager()).thenReturn(pluginManager);
|
|
|
|
+ // Process level up events in our self listener
|
|
Mockito.doAnswer(invocation -> {
|
|
Mockito.doAnswer(invocation -> {
|
|
selfListener.onPlayerLevelUp(invocation.getArgument(0));
|
|
selfListener.onPlayerLevelUp(invocation.getArgument(0));
|
|
return null;
|
|
return null;
|
|
}).when(pluginManager).callEvent(any(McMMOPlayerLevelUpEvent.class));
|
|
}).when(pluginManager).callEvent(any(McMMOPlayerLevelUpEvent.class));
|
|
|
|
|
|
|
|
+ // Don't process pre-gain events
|
|
|
|
+ Mockito.doAnswer((ignored) -> null).when(pluginManager).callEvent(any(McMMOPlayerPreXpGainEvent.class));
|
|
|
|
+
|
|
// wire world
|
|
// wire world
|
|
this.world = mock(World.class);
|
|
this.world = mock(World.class);
|
|
|
|
|
|
@@ -177,9 +196,12 @@ public abstract class MMOTestEnvironmentBasic {
|
|
private void mockPermissions() {
|
|
private void mockPermissions() {
|
|
mockedPermissions = Mockito.mockStatic(Permissions.class);
|
|
mockedPermissions = Mockito.mockStatic(Permissions.class);
|
|
when(Permissions.isSubSkillEnabled(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
when(Permissions.isSubSkillEnabled(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
- // Mockito.when(Permissions.canUseSubSkill(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
|
|
when(Permissions.isSubSkillEnabled(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
when(Permissions.isSubSkillEnabled(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
- // Mockito.when(Permissions.canUseSubSkill(any(Player.class), any(SubSkillType.class))).thenReturn(true);
|
|
|
|
|
|
+ when(Permissions.skillEnabled(any(Player.class), any(PrimarySkillType.class))).thenReturn(true);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void mockNotifications() {
|
|
|
|
+ mockedNotificationManager = Mockito.mockStatic(NotificationManager.class);
|
|
}
|
|
}
|
|
|
|
|
|
private void mockRankConfig() {
|
|
private void mockRankConfig() {
|
|
@@ -203,6 +225,10 @@ public abstract class MMOTestEnvironmentBasic {
|
|
generalConfig = mock(GeneralConfig.class);
|
|
generalConfig = mock(GeneralConfig.class);
|
|
when(generalConfig.getLocale()).thenReturn("en_US");
|
|
when(generalConfig.getLocale()).thenReturn("en_US");
|
|
when(mcMMO.p.getGeneralConfig()).thenReturn(generalConfig);
|
|
when(mcMMO.p.getGeneralConfig()).thenReturn(generalConfig);
|
|
|
|
+
|
|
|
|
+ // Experience related
|
|
|
|
+ when(generalConfig.getLevelCap(any(PrimarySkillType.class))).thenReturn(Integer.MAX_VALUE);
|
|
|
|
+ when(generalConfig.getPowerLevelCap()).thenReturn(Integer.MAX_VALUE);
|
|
}
|
|
}
|
|
|
|
|
|
private void mockExperienceConfig() {
|
|
private void mockExperienceConfig() {
|
|
@@ -212,6 +238,12 @@ public abstract class MMOTestEnvironmentBasic {
|
|
|
|
|
|
// Combat
|
|
// Combat
|
|
when(ExperienceConfig.getInstance().getCombatXP(EntityType.COW)).thenReturn(1D);
|
|
when(ExperienceConfig.getInstance().getCombatXP(EntityType.COW)).thenReturn(1D);
|
|
|
|
+ when(ExperienceConfig.getInstance().getFormulaType()).thenReturn(FormulaType.LINEAR);
|
|
|
|
+ when(ExperienceConfig.getInstance().getBase(FormulaType.LINEAR)).thenReturn(1020);
|
|
|
|
+ when(ExperienceConfig.getInstance().getMultiplier(FormulaType.LINEAR)).thenReturn(20D);
|
|
|
|
+ when(ExperienceConfig.getInstance().getFormulaSkillModifier(any(PrimarySkillType.class))).thenReturn(1D);
|
|
|
|
+ when(ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()).thenReturn(1D);
|
|
|
|
+ when(ExperienceConfig.getInstance().getExpModifier()).thenReturn(1D);
|
|
}
|
|
}
|
|
|
|
|
|
protected void cleanupBaseEnvironment() {
|
|
protected void cleanupBaseEnvironment() {
|
|
@@ -243,5 +275,8 @@ public abstract class MMOTestEnvironmentBasic {
|
|
if (mockedEventUtils != null) {
|
|
if (mockedEventUtils != null) {
|
|
mockedEventUtils.close();
|
|
mockedEventUtils.close();
|
|
}
|
|
}
|
|
|
|
+ if (mockedNotificationManager != null) {
|
|
|
|
+ mockedNotificationManager.close();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|