Skip to content

Commit e0b73cb

Browse files
committed
Add more tests for share handling
1 parent f136dcc commit e0b73cb

6 files changed

Lines changed: 252 additions & 54 deletions

File tree

src/main/java/org/mvplugins/multiverse/inventories/handleshare/GameModeShareHandler.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ private boolean isPlayerBypassingChange() {
8282
private void addProfiles() {
8383
Shares handledShares = Sharables.noneOf();
8484
worldGroups.forEach(worldGroup -> addProfilesForWorldGroup(handledShares,worldGroup));
85-
Shares unhandledShares = Sharables.enabledOf().setSharing(handledShares, false);
85+
Shares unhandledShares = (worldGroups.isEmpty() && !inventoriesConfig.getUseOptionalsForUngroupedWorlds())
86+
? Sharables.standardOf() : Sharables.enabledOf();
87+
unhandledShares.removeAll(handledShares);
8688
if (!unhandledShares.isEmpty()) {
8789
affectedProfiles.addReadProfile(worldProfileContainerStore.getContainer(world).getProfileKey(toType, player), unhandledShares);
8890
}

src/main/java/org/mvplugins/multiverse/inventories/share/Sharables.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,22 +74,15 @@ public final class Sharables implements Shares {
7474
* @param inventories the instance of Inventories.
7575
*/
7676
public static void init(MultiverseInventories inventories) {
77-
if (Sharables.inventories == null) {
78-
Sharables.inventories = inventories;
79-
}
80-
if (Sharables.economist == null) {
81-
Sharables.economist = inventories.getServiceLocator().getService(MVEconomist.class);
82-
}
83-
if (Sharables.safetyTeleporter == null) {
84-
Sharables.safetyTeleporter = inventories.getServiceLocator().getService(AsyncSafetyTeleporter.class);
85-
}
86-
if (Sharables.inventoriesConfig == null) {
87-
Sharables.inventoriesConfig = inventories.getServiceLocator().getService(InventoriesConfig.class);
88-
}
89-
if (Sharables.worldGroupManager == null) {
90-
Sharables.worldGroupManager = inventories.getServiceLocator().getService(WorldGroupManager.class);
91-
}
77+
Sharables.inventories = inventories;
78+
Sharables.economist = inventories.getServiceLocator().getService(MVEconomist.class);
79+
Sharables.safetyTeleporter = inventories.getServiceLocator().getService(AsyncSafetyTeleporter.class);
80+
Sharables.inventoriesConfig = inventories.getServiceLocator().getService(InventoriesConfig.class);
81+
Sharables.worldGroupManager = inventories.getServiceLocator().getService(WorldGroupManager.class);
82+
initMaxHealthAttr();
83+
}
9284

85+
private static void initMaxHealthAttr() {
9386
Sharables.maxHealthAttr = Registry.ATTRIBUTE.get(NamespacedKey.minecraft("max_health"));
9487
if (Sharables.maxHealthAttr == null) {
9588
// Old key for older minecraft version (<1.21)

src/test/java/org/mvplugins/multiverse/inventories/TestWithMockBukkit.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.mvplugins.multiverse.inventories
22

3+
import com.dumptruckman.minecraft.util.Logging
34
import org.bukkit.Location
45
import org.bukkit.configuration.MemorySection
56
import org.bukkit.configuration.file.YamlConfiguration
67
import org.bukkit.configuration.serialization.ConfigurationSerialization
8+
import org.bukkit.inventory.ItemStack
79
import org.mockbukkit.mockbukkit.MockBukkit
810
import org.mockbukkit.mockbukkit.inventory.ItemStackMock
911
import org.mvplugins.multiverse.core.MultiverseCore
@@ -16,6 +18,7 @@ import kotlin.io.path.absolutePathString
1618
import kotlin.test.AfterTest
1719
import kotlin.test.BeforeTest
1820
import kotlin.test.assertEquals
21+
import kotlin.test.assertNotEquals
1922
import kotlin.test.assertNotNull
2023
import kotlin.test.assertNull
2124

@@ -46,6 +49,7 @@ abstract class TestWithMockBukkit {
4649
server.pluginManager.disablePlugin(multiverseInventories)
4750
server.pluginManager.disablePlugin(multiverseCore)
4851
MockBukkit.unmock()
52+
Logging.warning("Unmocked")
4953
}
5054

5155
fun getResourceAsText(path: String): String? = object {}.javaClass.getResource(path)?.readText()
@@ -98,4 +102,13 @@ abstract class TestWithMockBukkit {
98102
assertEquals(expected?.yaw, actual?.yaw, "Yaw values don't match for location comparison ($expected, $actual)")
99103
assertEquals(expected?.pitch, actual?.pitch, "Pitch values don't match for location comparison ($expected, $actual)")
100104
}
105+
106+
fun assertInventoryEquals(expected: Array<ItemStack?>, actual: Array<ItemStack?>) {
107+
for (i in expected.indices) {
108+
if (expected[i]?.isEmpty ?: true && expected[i]?.isEmpty ?: true) {
109+
continue
110+
}
111+
assertEquals(expected[i], actual[i])
112+
}
113+
}
101114
}
Lines changed: 129 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,162 @@
11
package org.mvplugins.multiverse.inventories.handleshare
22

3+
import org.bukkit.Bukkit
4+
import org.bukkit.Location
35
import org.bukkit.Material
46
import org.bukkit.inventory.ItemStack
5-
import org.junit.jupiter.api.Assertions.assertEquals
67
import org.mvplugins.multiverse.core.world.WorldManager
78
import org.mvplugins.multiverse.core.world.options.CreateWorldOptions
89
import org.mvplugins.multiverse.inventories.TestWithMockBukkit
910
import org.mvplugins.multiverse.inventories.config.InventoriesConfig
11+
import org.mvplugins.multiverse.inventories.share.Sharables
12+
import org.mvplugins.multiverse.inventories.util.PlayerStats
13+
import kotlin.arrayOfNulls
1014
import kotlin.test.BeforeTest
1115
import kotlin.test.Test
12-
import kotlin.test.assertNotEquals
16+
import kotlin.test.assertEquals
1317
import kotlin.test.assertTrue
1418

1519
class GameModeChangeTest : TestWithMockBukkit() {
1620

21+
private lateinit var inventoriesConfig: InventoriesConfig
22+
private var survivalItems = arrayOfNulls<ItemStack>(PlayerStats.INVENTORY_SIZE)
23+
private var creativeItems = arrayOfNulls<ItemStack>(PlayerStats.INVENTORY_SIZE)
24+
1725
@BeforeTest
1826
fun setUp() {
27+
inventoriesConfig = serviceLocator.getActiveService(InventoriesConfig::class.java).takeIf { it != null } ?: run {
28+
throw IllegalStateException("InventoriesConfig is not available as a service")
29+
}
1930
val worldManager = serviceLocator.getActiveService(WorldManager::class.java).takeIf { it != null } ?: run {
2031
throw IllegalStateException("WorldManager is not available as a service")
2132
}
22-
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world")).isSuccess)
23-
val inventoriesConfig = serviceLocator.getActiveService(InventoriesConfig::class.java).takeIf { it != null } ?: run {
24-
throw IllegalStateException("InventoriesConfig is not available as a service")
25-
}
33+
2634
writeResourceToConfigFile("/gameplay/gamemode_change_groups.yml", "groups.yml")
2735
multiverseInventories.reloadConfig()
28-
inventoriesConfig.setEnableGamemodeShareHandling(true)
36+
inventoriesConfig.enableGamemodeShareHandling = true
37+
38+
survivalItems[0] = ItemStack.of(Material.STONE_BRICKS, 64)
39+
survivalItems[1] = ItemStack.of(Material.SAND, 64)
40+
41+
creativeItems[0] = ItemStack.of(Material.HOPPER, 64)
42+
creativeItems[1] = ItemStack.of(Material.CAMPFIRE, 64)
43+
44+
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("world")).isSuccess)
45+
assertTrue(worldManager.createWorld(CreateWorldOptions.worldName("ungrouped")).isSuccess)
46+
}
47+
48+
@Test
49+
fun `Test change game mode for grouped worlds with total_xp disabled share`() {
50+
val player = server.addPlayer("Benji_0224")
51+
assertTrue(player.teleport(Bukkit.getWorld("world")!!.spawnLocation))
52+
53+
player.inventory.contents = survivalItems.clone()
54+
player.totalExperience = 123
55+
56+
player.gameMode = org.bukkit.GameMode.CREATIVE
57+
Thread.sleep(5)
58+
assertInventoryEquals(arrayOfNulls(PlayerStats.INVENTORY_SIZE), player.inventory.contents)
59+
assertEquals(123, player.totalExperience)
60+
61+
player.inventory.contents = creativeItems.clone()
62+
player.totalExperience = 321
63+
64+
player.gameMode = org.bukkit.GameMode.SURVIVAL
65+
Thread.sleep(5)
66+
assertInventoryEquals(survivalItems, player.inventory.contents)
67+
assertEquals(321, player.totalExperience)
68+
69+
player.gameMode = org.bukkit.GameMode.CREATIVE
70+
Thread.sleep(5)
71+
assertInventoryEquals(creativeItems, player.inventory.contents)
72+
assertEquals(321, player.totalExperience)
2973
}
3074

3175
@Test
32-
fun `Test change game mode`() {
76+
fun `Test change game mode for ungrouped worlds`() {
3377
val player = server.addPlayer("Benji_0224")
34-
val survivalItems = arrayOf(
35-
ItemStack.of(Material.STONE_BRICKS, 64),
36-
ItemStack.of(Material.SAND, 64),
37-
)
38-
player.inventory.contents = survivalItems
78+
assertTrue(player.teleport(Bukkit.getWorld("ungrouped")!!.spawnLocation))
79+
80+
player.inventory.contents = survivalItems.clone()
81+
player.totalExperience = 123
3982

4083
player.gameMode = org.bukkit.GameMode.CREATIVE
41-
Thread.sleep(10)
42-
assertNotEquals(survivalItems[0], player.inventory.getItem(0))
43-
assertNotEquals(survivalItems[1], player.inventory.getItem(1))
44-
val creativeItems = arrayOf(
45-
ItemStack.of(Material.OBSIDIAN, 64),
46-
ItemStack.of(Material.HOPPER, 64),
47-
)
48-
player.inventory.contents = creativeItems
84+
Thread.sleep(5)
85+
assertInventoryEquals(arrayOfNulls(PlayerStats.INVENTORY_SIZE), player.inventory.contents)
86+
assertEquals(0, player.totalExperience)
87+
88+
player.inventory.contents = creativeItems.clone()
89+
player.totalExperience = 321
90+
91+
player.gameMode = org.bukkit.GameMode.SURVIVAL
92+
Thread.sleep(5)
93+
assertInventoryEquals(survivalItems, player.inventory.contents)
94+
assertEquals(123, player.totalExperience)
95+
96+
player.gameMode = org.bukkit.GameMode.CREATIVE
97+
Thread.sleep(5)
98+
assertInventoryEquals(creativeItems, player.inventory.contents)
99+
assertEquals(321, player.totalExperience)
100+
}
101+
102+
@Test
103+
fun `Test change game mode for ungrouped worlds with last_location`() {
104+
inventoriesConfig.defaultUngroupedWorlds = false
105+
inventoriesConfig.useOptionalsForUngroupedWorlds = true
106+
inventoriesConfig.activeOptionalShares = Sharables.fromSharables(Sharables.LAST_LOCATION)
107+
108+
val survivalLocation = Location(Bukkit.getWorld("ungrouped")!!, 1.0, 2.0, 3.0)
109+
val creativeLocation = Location(Bukkit.getWorld("ungrouped")!!, 4.0, 5.0, 6.0)
110+
111+
val player = server.addPlayer("Benji_0224")
112+
assertTrue(player.teleport(survivalLocation.clone()))
113+
player.inventory.contents = survivalItems.clone()
114+
115+
player.gameMode = org.bukkit.GameMode.CREATIVE
116+
assertInventoryEquals(arrayOfNulls(PlayerStats.INVENTORY_SIZE), player.inventory.contents)
117+
assertLocationEquals(survivalLocation, player.location)
118+
119+
assertTrue(player.teleport(creativeLocation.clone()))
120+
player.inventory.contents = creativeItems.clone()
121+
122+
player.gameMode = org.bukkit.GameMode.SURVIVAL
123+
assertInventoryEquals(survivalItems, player.inventory.contents)
124+
assertLocationEquals(survivalLocation, player.location)
125+
126+
player.gameMode = org.bukkit.GameMode.CREATIVE
127+
assertInventoryEquals(creativeItems, player.inventory.contents)
128+
assertLocationEquals(creativeLocation, player.location)
129+
}
130+
131+
@Test
132+
fun `Test change game mode for ungrouped worlds with useOptionalsForUngroupedWorlds disabled`() {
133+
inventoriesConfig.defaultUngroupedWorlds = false
134+
inventoriesConfig.useOptionalsForUngroupedWorlds = false
135+
inventoriesConfig.activeOptionalShares = Sharables.fromSharables(Sharables.LAST_LOCATION)
136+
137+
val survivalLocation = Location(Bukkit.getWorld("ungrouped")!!, 1.0, 2.0, 3.0)
138+
val creativeLocation = Location(Bukkit.getWorld("ungrouped")!!, 4.0, 5.0, 6.0)
139+
140+
val player = server.addPlayer("Benji_0224")
141+
assertTrue(player.teleport(survivalLocation.clone()))
142+
player.inventory.contents = survivalItems.clone()
143+
144+
player.gameMode = org.bukkit.GameMode.CREATIVE
145+
Thread.sleep(5)
146+
assertInventoryEquals(arrayOfNulls(PlayerStats.INVENTORY_SIZE), player.inventory.contents)
147+
assertLocationEquals(survivalLocation, player.location)
148+
149+
assertTrue(player.teleport(creativeLocation.clone()))
150+
player.inventory.contents = creativeItems.clone()
49151

50152
player.gameMode = org.bukkit.GameMode.SURVIVAL
51-
Thread.sleep(10)
52-
assertEquals(survivalItems[0], player.inventory.getItem(0))
53-
assertEquals(survivalItems[1], player.inventory.getItem(1))
54-
assertNotEquals(creativeItems[0], player.inventory.getItem(0))
55-
assertNotEquals(creativeItems[1], player.inventory.getItem(1))
153+
Thread.sleep(5)
154+
assertInventoryEquals(survivalItems, player.inventory.contents)
155+
assertLocationEquals(creativeLocation, player.location)
56156

57157
player.gameMode = org.bukkit.GameMode.CREATIVE
58-
Thread.sleep(10)
59-
assertEquals(creativeItems[0], player.inventory.getItem(0))
60-
assertEquals(creativeItems[1], player.inventory.getItem(1))
61-
assertNotEquals(survivalItems[0], player.inventory.getItem(0))
62-
assertNotEquals(survivalItems[1], player.inventory.getItem(1))
158+
Thread.sleep(5)
159+
assertInventoryEquals(creativeItems, player.inventory.contents)
160+
assertLocationEquals(creativeLocation, player.location)
63161
}
64162
}

0 commit comments

Comments
 (0)