diff --git a/build.gradle b/build.gradle index 399b3f4c..0cb8cc8d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,11 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id 'java-library' id 'maven-publish' id 'checkstyle' id 'com.gradleup.shadow' version '8.3.5' + id "org.jetbrains.kotlin.jvm" version "2.0.21" } version = System.getenv('GITHUB_VERSION') ?: 'local' @@ -14,11 +17,23 @@ compileJava { targetCompatibility = JavaVersion.VERSION_17 } -// todo: Enable test when convert them to use mockbukkit like mv-core -compileTestJava { +compileKotlin { + // We're not using Kotlin in the plugin itself, just tests! enabled = false } +compileTestJava { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} + +compileTestKotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + javaParameters.set(true) + } +} + repositories { mavenLocal() mavenCentral() @@ -55,7 +70,7 @@ repositories { dependencies { // Spigot - implementation('org.spigotmc:spigot-api:1.21.4-R0.1-SNAPSHOT') { + compileOnly('org.spigotmc:spigot-api:1.21.3-R0.1-SNAPSHOT') { exclude group: 'junit', module: 'junit' } @@ -63,6 +78,7 @@ dependencies { // TODO update to correct version once we have it published implementation 'org.mvplugins.multiverse.core:multiverse-core:5.0.0-SNAPSHOT' + // Config api 'com.dumptruckman.minecraft:JsonConfiguration:1.2-SNAPSHOT' api 'net.minidev:json-smart:2.5.1' @@ -82,9 +98,18 @@ dependencies { } // Tests - testImplementation 'com.github.MilkBowl:VaultAPI:1.7.1' - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:3.11.2' + testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21' + testImplementation 'org.mockbukkit.mockbukkit:mockbukkit-v1.21:4.24.1' + testImplementation 'org.jetbrains.kotlin:kotlin-test' + testImplementation 'com.natpryce:hamkrest:1.8.0.1' + testImplementation 'org.mockito.kotlin:mockito-kotlin:4.1.0' + + // hk2 for annotation processing only + compileOnly('org.glassfish.hk2:hk2-api:3.0.3') { + exclude group: '*', module: '*' + } + annotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3' + testAnnotationProcessor 'org.glassfish.hk2:hk2-metadata-generator:3.0.3' } @@ -97,11 +122,16 @@ tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' } +tasks.withType(JavaCompile) { + configure(options) { + options.compilerArgs << '-Aorg.glassfish.hk2.metadata.location=META-INF/hk2-locator/Multiverse-Inventories' + } +} + tasks.withType(Javadoc).configureEach { options.encoding = 'UTF-8' } - configurations { [apiElements, runtimeElements].each { it.outgoing.artifacts.removeIf { it.buildDependencies.getDependencies(null).contains(jar) } @@ -109,25 +139,10 @@ configurations { } } -publishing { - publications { - maven(MavenPublication) { - from components.java - } - } - repositories { - maven { - name = "GitHubPackages" - url = "https://maven.pkg.github.com/Multiverse/Multiverse-Inventories" - credentials { - username = System.getenv("GITHUB_ACTOR") - password = System.getenv("GITHUB_TOKEN") - } - } - } +configurations.findAll { !it.name.startsWith('test') }.each { + it.exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8' } - processResources { def props = [version: "${project.version}"] inputs.properties props @@ -141,20 +156,17 @@ processResources { outputs.upToDateWhen { false } } - checkstyle { toolVersion = '6.1.1' configFile file('config/mv_checks.xml') ignoreFailures = true } - javadoc { source = sourceSets.main.allJava classpath = configurations.compileClasspath } - project.configurations.api.canBeResolved = true shadowJar { @@ -162,23 +174,42 @@ shadowJar { relocate 'com.dumptruckman.minecraft.util.DebugLog', 'org.mvplugins.multiverse.inventories.utils.DebugFileLogger' relocate 'com.dumptruckman.bukkit.configuration', 'org.mvplugins.multiverse.inventories.utils.configuration' relocate 'io.papermc.lib', 'org.mvplugins.multiverse.inventories.utils.paperlib' - relocate 'net.minidev.json', 'org.mvplugins.multiverse.inventories.utils.json' + relocate 'net.minidev', 'org.mvplugins.multiverse.inventories.utils.minidev' configurations = [project.configurations.api] archiveClassifier.set('') + + dependencies { + exclude(dependency { + it.moduleGroup == 'org.jetbrains.kotlin' + }) + exclude(dependency { + it.moduleGroup == 'org.jetbrains' + }) + exclude(dependency { + it.moduleGroup == 'org.ow2.asm' + }) + } } build.dependsOn shadowJar jar.enabled = false -tasks.register('runHabitatGenerator', JavaExec) { - classpath = configurations["compileClasspath"] - mainClass.set('org.mvplugins.multiverse.external.jvnet.hk2.generator.HabitatGenerator') - - args = [ - '--file', "build/libs/multiverse-inventories-$version" + ".jar", - '--locator', 'Multiverse-Inventories', - ] +publishing { + publications { + maven(MavenPublication) { + from components.java + } + } + repositories { + maven { + name = "GitHubPackages" + url = "https://maven.pkg.github.com/Multiverse/Multiverse-Inventories" + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } } -tasks.named("build") { finalizedBy("runHabitatGenerator") } diff --git a/src/main/java/org/mvplugins/multiverse/inventories/InventoriesListener.java b/src/main/java/org/mvplugins/multiverse/inventories/InventoriesListener.java index b43672cb..0368614a 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/InventoriesListener.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/InventoriesListener.java @@ -1,6 +1,7 @@ package org.mvplugins.multiverse.inventories; import com.dumptruckman.minecraft.util.Logging; +import org.jvnet.hk2.annotations.Service; import org.mvplugins.multiverse.core.api.event.MVConfigReloadEvent; import org.mvplugins.multiverse.core.api.event.MVDebugModeEvent; import org.mvplugins.multiverse.core.api.event.MVDumpsDebugInfoEvent; @@ -36,7 +37,6 @@ import org.bukkit.inventory.InventoryHolder; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; import uk.co.tggl.pluckerpluck.multiinv.MultiInv; import java.io.File; diff --git a/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventories.java b/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventories.java index 5cb5d99b..78901866 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventories.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventories.java @@ -32,7 +32,7 @@ import org.mvplugins.multiverse.core.inject.PluginServiceLocator; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jakarta.inject.Provider; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; import org.mvplugins.multiverse.external.vavr.control.Try; import uk.co.tggl.pluckerpluck.multiinv.MultiInv; diff --git a/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventoriesPluginBinder.java b/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventoriesPluginBinder.java index 9f00d4e1..69dfbed1 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventoriesPluginBinder.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/MultiverseInventoriesPluginBinder.java @@ -1,5 +1,6 @@ package org.mvplugins.multiverse.inventories; +import org.bukkit.plugin.Plugin; import org.mvplugins.multiverse.core.inject.binder.JavaPluginBinder; import org.mvplugins.multiverse.core.submodules.MVPlugin; import org.mvplugins.multiverse.external.glassfish.hk2.utilities.binding.ScopedBindingBuilder; @@ -14,6 +15,6 @@ protected MultiverseInventoriesPluginBinder(@NotNull MultiverseInventories plugi @Override protected ScopedBindingBuilder bindPluginClass (ScopedBindingBuilder bindingBuilder) { - return super.bindPluginClass(bindingBuilder).to(MVPlugin.class).to(MultiverseInventories.class); + return super.bindPluginClass(bindingBuilder).to(Plugin.class).to(MVPlugin.class).to(MultiverseInventories.class); } } diff --git a/src/main/java/org/mvplugins/multiverse/inventories/commands/GroupCommand.java b/src/main/java/org/mvplugins/multiverse/inventories/commands/GroupCommand.java index bfc587a1..e3eb632a 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/commands/GroupCommand.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/commands/GroupCommand.java @@ -14,7 +14,7 @@ import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; @Service @CommandAlias("mvinv") diff --git a/src/main/java/org/mvplugins/multiverse/inventories/commands/InfoCommand.java b/src/main/java/org/mvplugins/multiverse/inventories/commands/InfoCommand.java index b2945e23..8d548a38 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/commands/InfoCommand.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/commands/InfoCommand.java @@ -18,7 +18,7 @@ import org.mvplugins.multiverse.external.acf.commands.annotation.Syntax; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; import java.util.List; import java.util.Set; diff --git a/src/main/java/org/mvplugins/multiverse/inventories/commands/ListCommand.java b/src/main/java/org/mvplugins/multiverse/inventories/commands/ListCommand.java index 0cb68940..3c7a5b47 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/commands/ListCommand.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/commands/ListCommand.java @@ -11,7 +11,7 @@ import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; import java.util.Collection; diff --git a/src/main/java/org/mvplugins/multiverse/inventories/commands/ReloadCommand.java b/src/main/java/org/mvplugins/multiverse/inventories/commands/ReloadCommand.java index f60e8fae..0d6b6483 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/commands/ReloadCommand.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/commands/ReloadCommand.java @@ -10,7 +10,7 @@ import org.mvplugins.multiverse.external.acf.commands.annotation.Subcommand; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; @Service @CommandAlias("mvinv") diff --git a/src/main/java/org/mvplugins/multiverse/inventories/commands/ToggleCommand.java b/src/main/java/org/mvplugins/multiverse/inventories/commands/ToggleCommand.java index c83821ae..afd70136 100644 --- a/src/main/java/org/mvplugins/multiverse/inventories/commands/ToggleCommand.java +++ b/src/main/java/org/mvplugins/multiverse/inventories/commands/ToggleCommand.java @@ -16,7 +16,7 @@ import org.mvplugins.multiverse.external.acf.commands.annotation.Syntax; import org.mvplugins.multiverse.external.jakarta.inject.Inject; import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; -import org.mvplugins.multiverse.external.jvnet.hk2.annotations.Service; +import org.jvnet.hk2.annotations.Service; @Service @CommandAlias("mvinv") diff --git a/src/test/java/org/mvplugins/multiverse/inventories/FlatFileDataHelper.java b/src/old-test/java/org/mvplugins/multiverse/inventories/FlatFileDataHelper.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/FlatFileDataHelper.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/FlatFileDataHelper.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestCommands.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestCommands.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestCommands.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestCommands.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestCommentedYamlConfiguration.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestCommentedYamlConfiguration.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestCommentedYamlConfiguration.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestCommentedYamlConfiguration.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestPerformance.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestPerformance.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestPerformance.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestPerformance.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestPlayerNameChange.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestPlayerNameChange.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestPlayerNameChange.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestPlayerNameChange.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestResetWorld.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestResetWorld.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestResetWorld.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestResetWorld.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestWSharableAPI.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestWSharableAPI.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestWSharableAPI.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestWSharableAPI.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestWorldChanged.java b/src/old-test/java/org/mvplugins/multiverse/inventories/TestWorldChanged.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/TestWorldChanged.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/TestWorldChanged.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/MVTestLogFormatter.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/MVTestLogFormatter.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/MVTestLogFormatter.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/MVTestLogFormatter.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/MockItemMeta.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/MockItemMeta.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/MockItemMeta.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/MockItemMeta.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/MockPlayerFactory.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/MockPlayerFactory.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/MockPlayerFactory.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/MockPlayerFactory.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/MockPlayerInventory.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/MockPlayerInventory.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/MockPlayerInventory.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/MockPlayerInventory.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/MockWorldFactory.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/MockWorldFactory.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/MockWorldFactory.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/MockWorldFactory.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/TestInstanceCreator.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/TestInstanceCreator.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/TestInstanceCreator.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/TestInstanceCreator.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/Util.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/Util.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/Util.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/Util.java diff --git a/src/test/java/org/mvplugins/multiverse/inventories/util/WorldCreatorMatcher.java b/src/old-test/java/org/mvplugins/multiverse/inventories/util/WorldCreatorMatcher.java similarity index 100% rename from src/test/java/org/mvplugins/multiverse/inventories/util/WorldCreatorMatcher.java rename to src/old-test/java/org/mvplugins/multiverse/inventories/util/WorldCreatorMatcher.java diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/old-test/resources/mockito-extensions/org.mockito.plugins.MockMaker similarity index 100% rename from src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker rename to src/old-test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/src/test/java/org/mvplugins/multiverse/inventories/MockBukkitTest.kt b/src/test/java/org/mvplugins/multiverse/inventories/MockBukkitTest.kt new file mode 100644 index 00000000..b2bc5c84 --- /dev/null +++ b/src/test/java/org/mvplugins/multiverse/inventories/MockBukkitTest.kt @@ -0,0 +1,12 @@ +package org.mvplugins.multiverse.inventories + +import kotlin.test.Test +import kotlin.test.assertNotNull + +open class MockBukkitTest : TestWithMockBukkit() { + + @Test + fun `MockBukkit loads the plugin`() { + assertNotNull(multiverseInventories) + } +} diff --git a/src/test/java/org/mvplugins/multiverse/inventories/TestWithMockBukkit.kt b/src/test/java/org/mvplugins/multiverse/inventories/TestWithMockBukkit.kt new file mode 100644 index 00000000..329e60a9 --- /dev/null +++ b/src/test/java/org/mvplugins/multiverse/inventories/TestWithMockBukkit.kt @@ -0,0 +1,79 @@ +package org.mvplugins.multiverse.inventories + +import com.dumptruckman.minecraft.util.Logging +import org.bukkit.Location +import org.bukkit.configuration.MemorySection +import org.bukkit.configuration.file.YamlConfiguration +import org.mockbukkit.mockbukkit.MockBukkit +import org.mvplugins.multiverse.core.MultiverseCore +import org.mvplugins.multiverse.core.inject.PluginServiceLocator +import org.mvplugins.multiverse.core.utils.TestingMode +import org.mvplugins.multiverse.inventories.mock.MVServerMock +import kotlin.test.* + +/** + * Basic abstract test class that sets up MockBukkit and MultiverseCore. + */ +abstract class TestWithMockBukkit { + + protected lateinit var server: MVServerMock + protected lateinit var multiverseCore: MultiverseCore + protected lateinit var multiverseInventories: MultiverseInventories + protected lateinit var serviceLocator : PluginServiceLocator + + @BeforeTest + fun setUpMockBukkit() { + TestingMode.enable() + server = MockBukkit.mock(MVServerMock()) + multiverseCore = MockBukkit.load(MultiverseCore::class.java) + multiverseInventories = MockBukkit.load(MultiverseInventories::class.java) + Logging.setDebugLevel(3) + serviceLocator = multiverseInventories.serviceLocator + assertNotNull(server.commandMap) + } + + @AfterTest + fun tearDownMockBukkit() { + MockBukkit.unmock() + } + + fun getResourceAsText(path: String): String? = object {}.javaClass.getResource(path)?.readText() + + fun assertConfigEquals(expectedPath: String, actualPath: String) { + val actualString = multiverseInventories.dataFolder.toPath().resolve(actualPath).toFile().readText() + val expectedString = getResourceAsText(expectedPath) + assertNotNull(expectedString) + + val actualYaml = YamlConfiguration() + actualYaml.loadFromString(actualString) + val actualYamlKeys = HashSet(actualYaml.getKeys(true)) + + val expectedYaml = YamlConfiguration() + expectedYaml.loadFromString(expectedString) + val expectedYamlKeys = HashSet(expectedYaml.getKeys(true)) + + for (key in expectedYamlKeys) { + assertNotNull(actualYamlKeys.remove(key), "Key $key is missing in actual config") + val actualValue = actualYaml.get(key) + if (actualValue is MemorySection) { + continue + } + assertEquals(expectedYaml.get(key), actualYaml.get(key), "Value for $key is different.") + } + for (key in actualYamlKeys) { + assertNull(actualYaml.get(key), "Key $key is present in actual config when it should be empty.") + } + + assertEquals(0, actualYamlKeys.size, + "Actual config has more keys than expected config. The following keys are missing: $actualYamlKeys") + } + + fun assertLocationEquals(expected: Location?, actual: Location?) { + assertEquals(expected?.world, actual?.world, "Worlds don't match for location comparison ($expected, $actual)") + assertEquals(expected?.x, actual?.x, "X values don't match for location comparison ($expected, $actual)") + assertEquals(expected?.y, actual?.y, "Y values don't match for location comparison ($expected, $actual)") + assertEquals(expected?.z, actual?.z, "Z values don't match for location comparison ($expected, $actual)") + assertEquals(expected?.yaw, actual?.yaw, "Yaw values don't match for location comparison ($expected, $actual)") + assertEquals(expected?.pitch, actual?.pitch, "Pitch values don't match for location comparison ($expected, $actual)") + } +} diff --git a/src/test/java/org/mvplugins/multiverse/inventories/mock/MVServerMock.java b/src/test/java/org/mvplugins/multiverse/inventories/mock/MVServerMock.java new file mode 100644 index 00000000..de3c872f --- /dev/null +++ b/src/test/java/org/mvplugins/multiverse/inventories/mock/MVServerMock.java @@ -0,0 +1,53 @@ +package org.mvplugins.multiverse.inventories.mock; + +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.jetbrains.annotations.NotNull; +import org.mockbukkit.mockbukkit.ServerMock; +import org.mockbukkit.mockbukkit.command.CommandMapMock; +import org.mockbukkit.mockbukkit.world.WorldMock; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +public class MVServerMock extends ServerMock { + + private final File worldContainer; + + public MVServerMock() throws IOException { + super(); + this.worldContainer = Files.createTempDirectory("world-container").toFile(); + this.worldContainer.deleteOnExit(); + System.out.println("Created test world folder: " + this.worldContainer.getAbsolutePath()); + } + + // This is required for acf reflection to work + @Override + public @NotNull CommandMapMock getCommandMap() { + return super.getCommandMap(); + } + + @Override + public @NotNull File getWorldContainer() { + return this.worldContainer; + } + + @Override + public World createWorld(@NotNull WorldCreator creator) { + WorldMock world = new MVWorldMock(creator); + world.getWorldFolder().mkdirs(); + createFile(new File(world.getWorldFolder(), "uid.dat")); + createFile(new File(world.getWorldFolder(), "level.dat")); + addWorld(world); + return world; + } + + private void createFile(File file) { + try { + file.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/test/java/org/mvplugins/multiverse/inventories/mock/MVWorldMock.java b/src/test/java/org/mvplugins/multiverse/inventories/mock/MVWorldMock.java new file mode 100644 index 00000000..2082645e --- /dev/null +++ b/src/test/java/org/mvplugins/multiverse/inventories/mock/MVWorldMock.java @@ -0,0 +1,28 @@ +package org.mvplugins.multiverse.inventories.mock; + +import org.bukkit.WorldCreator; +import org.jetbrains.annotations.NotNull; +import org.mockbukkit.mockbukkit.MockBukkit; +import org.mockbukkit.mockbukkit.world.WorldMock; + +import java.io.File; + +public class MVWorldMock extends WorldMock { + + private final File worldFolder; + + public MVWorldMock(@NotNull WorldCreator creator) { + super(creator); + this.worldFolder = new File(MockBukkit.getMock().getWorldContainer(), getName()); + } + + @Override + public @NotNull File getWorldFolder() { + return this.worldFolder; + } + + @Override + public String toString() { + return "MVWorldMock{'name': '" + this.getName() + "'}"; + } +}