Compare commits

..
87 Commits
Author SHA1 Message Date
Jeremy Wood 464eb8510a Version 4.1.1-1.8.8-SNAPSHOT! 2019-08-25 00:14:43 -04:00
Jeremy Wood 81145fb96a Bumped version to 4.1.1-SNAPSHOT for continued development.
(cherry picked from commit 1ba693ffd5)
2019-08-25 00:09:58 -04:00
Jeremy Wood 7a64f0613b Release version 4.1.0.
(cherry picked from commit 6ee0d8a05e)
2019-08-25 00:09:09 -04:00
Jeremy Wood 02e4833b1a World cloning should work once again! Resolves #1978.
(cherry picked from commit d3ff2922fd)
2019-08-25 00:09:03 -04:00
Jeremy Wood 78b32d3e53 Prevent importing worlds without .dat file. Fixes #1917.
(cherry picked from commit 5e2824abeb)
2019-08-25 00:08:55 -04:00
Jeremy Wood ec9a13aa45 Removed super dated toString in plugin main class.
(cherry picked from commit 926e23bf19)
2019-08-25 00:08:45 -04:00
Jeremy Wood 8610063307 Added --include-plugin-list to mv version command.
(cherry picked from commit 841598232c)
2019-08-25 00:08:36 -04:00
Jeremy Wood 464209f972 Now using CommandHandler 11!
(cherry picked from commit 540b6abcab)
2019-08-25 00:08:14 -04:00
Jeremy Wood f33bd16d44 Added debug mode change event.
(cherry picked from commit 38d5917915)
2019-08-25 00:08:05 -04:00
Jeremy Wood d21569e376 Bumped version to 4.1.0-SNAPSHOT for incoming features.
(cherry picked from commit da6bd20b42)
2019-08-25 00:07:42 -04:00
Jeremy Wood 8ed67c5fb1 Bumped core protocol to 24.
(cherry picked from commit 8859fa78fd)
2019-08-25 00:07:34 -04:00
Jeremy Wood e5d7f33512 Bumped version to 4.0.2-SNAPSHOT for continued development.
(cherry picked from commit 4de6b9ce47)
2019-08-25 00:07:26 -04:00
Jeremy Wood a690516474 Release version 4.0.1.
(cherry picked from commit f595f4cdb9)
2019-08-25 00:07:21 -04:00
Jeremy Wood 1790bb0f77 Make TravelAgent warning message a debug message.
(cherry picked from commit 1581e1e009)
2019-08-25 00:07:17 -04:00
Jeremy Wood 8f68d7fbcf Bump version to 4.0.1 for continued development.
(cherry picked from commit 32e72bb355)
2019-08-25 00:07:10 -04:00
Jeremy Wood d974ac15bb Release version 4.0.0.
(cherry picked from commit 950402a144)
2019-08-25 00:07:06 -04:00
Jeremy Wood bd1caf4c09 Bump protocol version to 23.
(cherry picked from commit 20a1fcb9f5)
2019-08-25 00:01:16 -04:00
Jeremy Wood 4d4a9c101f Wrap the travel agent in an adapter.
(cherry picked from commit 253ede1c9a)
2019-08-25 00:01:08 -04:00
Jeremy Wood 3c1c54ae3d Bumped version to 4.0.0-SNAPSHOT for 1.14 updates.
(cherry picked from commit d4454703e4)
2019-08-25 00:00:57 -04:00
Jeremy Wood 24c47ab3d5 Bump version to 3.0.0 for release.
(cherry picked from commit 9737b62813)
2019-08-25 00:00:53 -04:00
Brokkonaut 4eda237b1b Fix javadocs: it is now setCurrency(Material) instead of setCurrency(int)
(cherry picked from commit 06bd1a838f)
2019-08-25 00:00:48 -04:00
BaronyCraft 6aac64254c allow coord arguments to setspawn command (#1975)
* allow coord arguments to setspawn command

* Implement PR changes as requested

(cherry picked from commit 4343167240)
2019-08-24 23:54:19 -04:00
Jeremy Wood 806b6e92ea Removed commons-io as compile dependency to fix weird pom issues.
(cherry picked from commit 7762aca019)
2019-08-24 23:54:13 -04:00
Jeremy Wood d34649a93e Removed unnecessary json dependency.
(cherry picked from commit 6ebc1188e8)
2019-08-24 23:54:07 -04:00
Jeremy Wood 7b63c0a2b5 Don't send mvv url response to console twice when run from console.
(cherry picked from commit 8b358b0955)
2019-08-24 23:51:44 -04:00
Jeremy Wood 2e78b744f8 Added a theoretically working Hastebin option for mvv output.
(cherry picked from commit b201b09719)
2019-08-24 23:51:36 -04:00
Jeremy Wood 8e3d942863 Disabled github paste service.
(cherry picked from commit 4c9d108f08)
2019-08-24 23:51:29 -04:00
Jeremy Wood 34e1d9b911 Removed pastie paste service.
(cherry picked from commit 564a7d3684)
2019-08-24 23:51:23 -04:00
Jeremy Wood d5df299969 Cleaned up the pom a bit and fixed some dependency shading issues.
(cherry picked from commit aa574b6236)
2019-08-24 23:51:15 -04:00
Jeremy Wood bec76364aa Fix another NPE in MaterialConverter.
(cherry picked from commit d7894eb847)
2019-08-24 23:39:57 -04:00
Jeremy Wood a7ba33fb3e Fixes NPE in MaterialConverter.
(cherry picked from commit 5e067fa72d)
2019-08-24 23:39:51 -04:00
Jeremy Wood fa3b99b5a3 Wtf... why was this still here.
(cherry picked from commit b1bf68a0ad)
2019-08-24 23:39:45 -04:00
Jeremy Wood f20db72dfd Welcome to fully semantic versioning with 3.0.0-SNAPSHOT.
(cherry picked from commit 89a8f24b14)
2019-08-24 23:38:57 -04:00
Jeremy Wood 41be717b2c Add null type annotations to MaterialConverter.
(cherry picked from commit 43ecdc913a)
2019-08-24 23:37:01 -04:00
Jeremy Wood 82457e5b79 Updated logging library to 1.1.1.
(cherry picked from commit 9b88d1d491)
2019-08-24 23:36:35 -04:00
Jeremy Wood b341a6dd3a Added MaterialConverter util class for type id conversions.
(cherry picked from commit 606a3fa3ce)
2019-08-24 23:30:51 -04:00
Jeremy Wood 8b241f15dc Fixed potential NPE.
(cherry picked from commit a7cace0fdc)
2019-08-24 23:25:15 -04:00
Jeremy Wood ab9783047f Removed deprecated MVConfigProperty and MVActiveConfigProperty.
(cherry picked from commit ae314108a3)
2019-08-24 23:25:07 -04:00
Brokkonaut fb3fe9c235 Option to disable the automatic purge of entities (#1933)
(cherry picked from commit d0180f05d5)
2019-08-24 23:24:58 -04:00
Jeremy Wood 4fa3a34752 Shade in id converter.
(cherry picked from commit 4552f70f7e)
2019-08-24 23:18:53 -04:00
Jeremy Wood 5f1a13f6c4 Updated testing dependencies and maven plugins.
(cherry picked from commit 4bdeacfd05)
2019-08-24 23:18:45 -04:00
Jeremy Wood 459c37b77c Updated Multiverse-Core for Bukkit 1.13.2. (But not actually)
(cherry picked from commit 01f549f408)
2019-08-24 23:17:42 -04:00
Jeremy Wood 1cca9580b8 Bumped protocol to 22.
(cherry picked from commit f7bbb5029b)
2019-08-24 22:45:15 -04:00
Jeremy Wood 77df9488ed Bumped version to 2.7.0-SNAPSHOT.
(cherry picked from commit 658b5219c3)
2019-08-24 22:45:07 -04:00
Jeremy Wood e97c4fb238 Bumped version to 2.6.1-SNAPSHOT for continued development.
(cherry picked from commit fb505ab161)
2019-08-24 22:45:03 -04:00
Jeremy Wood 5ba41d50d8 Version 2.6.0 release.
(cherry picked from commit 284b3179ad)
2019-08-24 22:44:59 -04:00
Jeremy Wood 478960945f Added relativity options to ExactDestination. Implements #1892.
(cherry picked from commit 532ffacf5a)
2019-08-24 22:44:53 -04:00
Jeremy Wood 4023b42938 Removed unnecessary for #1836.
(cherry picked from commit 2b4d386eb2)
2019-08-24 22:44:43 -04:00
Jeremy Wood 4a7244b544 Hotfix for #1836.
(cherry picked from commit bc20ecbe60)
2019-08-24 22:42:25 -04:00
Jeremy Wood b09460502a Bumped protocol version to 21 for upcoming addition of Kotlin lib.
(cherry picked from commit 4878395460)
2019-08-24 22:42:20 -04:00
Jeremy Wood 65e0fe237d Bump version to 2.6.0-SNAPSHOT for significant incoming changes.
(cherry picked from commit 467ec809b5)
2019-08-24 22:42:11 -04:00
Jeremy Wood e3e548faec Bump version to 2.5.1.
(cherry picked from commit ceb6850670)
2019-08-24 22:42:07 -04:00
Jeremy Wood fdee9c7e9a Config travis and circle for Java 8. Resolves #1834
(cherry picked from commit 63abf33414)
2019-08-24 22:42:03 -04:00
Jeremy Wood 2792001453 Build for Java 8. Might fix Travis and Circle...
(cherry picked from commit bcd7fcaee7)
2019-08-24 22:41:59 -04:00
Jeremy Wood 537ddff634 Exclude old Bukkit from SerializationConfig.
(cherry picked from commit d18581828d)
2019-08-24 22:38:19 -04:00
Jeremy Wood 3882164074 Testing new webhook
(cherry picked from commit 54209e1535)
2019-08-24 22:38:14 -04:00
Jeremy Wood e79a49f7de Updated to Buscript 2.0.
This reduces the size of the plugin jar by over ONE MEGABYTE!!

(cherry picked from commit 2ed59a866f)
2019-08-24 22:38:01 -04:00
Jeremy Wood 1105aa12c8 Bumped version to 2.5.1-SNAPSHOT for continued development.
(cherry picked from commit 42adfa8175)
2019-08-24 22:35:59 -04:00
Jeremy Wood 51f582c3b5 Updated to 2.5.0 for release.
(cherry picked from commit 12bcf71028)
2019-08-24 22:35:44 -04:00
RezzedUp 67a104193a Remove relative paths from potentially imported worlds.
Before, relative paths that left the server's root directory were
accepted. Now, the world name has all relative-path components trimmed
off.

(cherry picked from commit da6a62b984)
2019-08-24 22:34:43 -04:00
Jeremy Wood d512e82a13 Updated plugin.yml. Can't believe I haven't done this sooner.
(cherry picked from commit 806c5909c4)
2019-08-24 22:34:31 -04:00
Eric Stokes 058ce5b29c If we're gonna use TravisCI it should at least use JDK7 now.
(cherry picked from commit c00847f173)
2019-08-24 22:34:24 -04:00
Eric Stokes 07e831f458 Added the autogenerated dependency-reduced-pom.xml to the .gitignore
(cherry picked from commit 626e5d3e4b)
2019-08-24 22:34:20 -04:00
Eric Stokes 900af0e497 Fixed deprecated assertTrue call in TestInstanceCreator
(cherry picked from commit f5e8a9c2e8)
2019-08-24 22:31:17 -04:00
Eric Stokes 727a064a3b Fixed deprecated use (since it's going away in 1.11)
* MultiverseCore constructor shouldn't be deprecated, it just needed a fix.
* Removed TestPluginLoader, it should have been mocked anyway.
* New constructor takes a JavaPluginLoader instad of a PluginLoader, so
  we'll have to mock.

You can't win, Java. If you make it `final`, I shall become more powerful
than you can possibly imagine.

(cherry picked from commit 3364709e53)
2019-08-24 22:28:46 -04:00
rlf 43309dc841 Fixed failing tests (thanks @rlf)
* This is the test fixing portion of PR#1746
* This fixes using a HashMap and relying on the order of the values.

(cherry picked from commit 8fdc0ad3da)
2019-08-24 22:28:31 -04:00
Eric Stokes ff1448fb5f Removed redundantThrows checkstyle rule, it's gone in 6.2+
See: checkstyle/checkstyle#473

(cherry picked from commit 67d172fd08)
2019-08-24 22:26:42 -04:00
Eric Stokes 3116fe3c21 Added additional properties to the test checks for world properties
(cherry picked from commit f3a420d85c)
2019-08-24 22:26:36 -04:00
rlf 92b6a9a6fc Misc documentation fixes from @rlf
(cherry picked from commit aba1f05c5b)
2019-08-24 22:26:28 -04:00
Eric Stokes 04e71d4377 Move to Java 7 (Maybe java 8 soon...)
* Also bump CH to v10, which uses Java 7
* Probably don't use this build, I have to test it first...

(cherry picked from commit 3db57ee1d9)
2019-08-24 22:16:42 -04:00
httpdop 7bbd9348c2 Update dependencies and versions
(cherry picked from commit b3841adcc1)
2019-08-24 22:15:35 -04:00
Liam c5185c58be Updated Vault repo
New vault repo is here: http://nexus.hc.to/content/repositories/pub_releases

(cherry picked from commit 0b0b3c0088)
2019-08-24 22:14:06 -04:00
Jeremy Wood c553062c14 Perhaps the id was important?
(cherry picked from commit a64a8d9605)
2019-08-24 22:13:58 -04:00
Jeremy Wood 38c650c19a Added snapshot repo to distro management.
(cherry picked from commit 0a0d3ba527)
2019-08-24 22:13:54 -04:00
Jeremy Wood 1be9974982 Moving to new version numbers - 2.5.0-SNAPSHOT
(cherry picked from commit a351fbb345)
2019-08-24 22:13:43 -04:00
Eric Stokes 478da03d48 Fixes #1678 anchor list doesn't obey enforceaccess
(cherry picked from commit 46359cfbfe)
2019-08-24 22:13:37 -04:00
Eric Stokes c85c68f816 Removed deprecated use of scheduleAsyncDelayedTask
(cherry picked from commit f52004cb76)
2019-08-24 22:08:23 -04:00
Eric Stokes f8c2221fcd Added support for version command to upload to gist.github.com
(cherry picked from commit 0e3848874a)
2019-08-24 21:59:21 -04:00
Eric Stokes 3e58995fc8 Fixed spacing of spigotmc repo in POM
(cherry picked from commit 71ba31a0f4)
2019-08-24 21:59:09 -04:00
Eric Stokes 233fe409ec Removed deprecated use of loadConfiguration
The new method properly uses the Reader class and resolves the reason
for deprecation, the lack of encoding support.

(cherry picked from commit 7b1e77340b)
2019-08-24 21:58:41 -04:00
Eric Stokes fa34bbfc61 Fixed shortened links pointing to wiki pages that didn't exist anymore
(cherry picked from commit bebd4742b9)
2019-08-24 21:56:16 -04:00
Eric Stokes 174fcdb1f7 #1672 Fixed typo that made animal lists behave like monster lists
(cherry picked from commit b933027523)
2019-08-24 21:54:31 -04:00
Eric Stokes 58a489191d #1671 Fixed lists changing not forcing validation of the elements
(cherry picked from commit bd1d852393)
2019-08-24 21:54:19 -04:00
Eric Stokes 7cfb90759e #1671 Fixed incorrect WorldPropertyValidator type
(cherry picked from commit 648365f336)
2019-08-24 21:54:07 -04:00
Jeremy Wood 5905b3132d Deny import of "plugins" and "logs" folder as a world. Should fix #1655
(cherry picked from commit d2d243caec)
2019-08-24 21:52:32 -04:00
Jeremy Wood 0992584943 Don't accept null worlds from the server. Addresses #1649.
(cherry picked from commit 865434d1b1)
2019-08-24 21:51:42 -04:00
Jeremy Wood 0eac36a65e Use bukkit and not spigot api. 2019-08-24 21:47:22 -04:00
21 changed files with 422 additions and 243 deletions

No files matched your search

+5 -5
View File
@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.onarandombox.multiversecore</groupId>
<artifactId>Multiverse-Core</artifactId>
<version>3.0.0-SNAPSHOT</version>
<version>4.1.1-1.8.8-SNAPSHOT</version>
<name>Multiverse-Core</name>
<description>World Management Plugin</description>
<properties>
@@ -247,7 +247,7 @@
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.13.2-R0.1-SNAPSHOT</version>
<version>1.8.8-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- SerializationConfig Dependency -->
@@ -267,7 +267,7 @@
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.7</version>
<version>1.5</version>
<scope>provided</scope>
</dependency>
<!-- End of Economy Dependency -->
@@ -275,7 +275,7 @@
<dependency>
<groupId>com.pneumaticraft.commandhandler</groupId>
<artifactId>CommandHandler</artifactId>
<version>10</version>
<version>11</version>
</dependency>
<dependency>
<groupId>com.dumptruckman.minecraft</groupId>
@@ -285,7 +285,7 @@
<dependency>
<groupId>org.mcstats.bukkit</groupId>
<artifactId>metrics</artifactId>
<version>R8-SNAPSHOT</version>
<version>R6</version>
<exclusions>
<exclusion>
<groupId>org.bukkit</groupId>
@@ -7,6 +7,23 @@
package com.onarandombox.MultiverseCore;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import buscript.Buscript;
import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.MVWorld.NullLocation;
@@ -61,6 +78,7 @@ import com.onarandombox.MultiverseCore.destination.DestinationFactory;
import com.onarandombox.MultiverseCore.destination.ExactDestination;
import com.onarandombox.MultiverseCore.destination.PlayerDestination;
import com.onarandombox.MultiverseCore.destination.WorldDestination;
import com.onarandombox.MultiverseCore.event.MVDebugModeEvent;
import com.onarandombox.MultiverseCore.event.MVVersionEvent;
import com.onarandombox.MultiverseCore.listeners.MVAsyncPlayerChatListener;
import com.onarandombox.MultiverseCore.listeners.MVChatListener;
@@ -106,23 +124,11 @@ import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.plugin.java.JavaPluginLoader;
import org.mcstats.Metrics;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
/**
* The implementation of the Multiverse-{@link Core}.
*/
public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
private static final int PROTOCOL = 22;
private static final int PROTOCOL = 24;
// TODO: Investigate if this one is really needed to be static.
// Doubt it. -- FernFerret
private static Map<String, String> teleportQueue = new HashMap<String, String>();
@@ -171,11 +177,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
teleportQueue.put(teleportee, teleporter);
}
@Override
public String toString() {
return "The Multiverse-Core Plugin";
}
/**
* {@inheritDoc}
* @deprecated This is now deprecated, nobody needs it any longer.
@@ -304,7 +305,6 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
// Setup & Load our Configuration files.
loadConfigs();
if (this.multiverseConfig != null) {
Logging.setDebugLevel(getMVConfig().getGlobalDebug());
Logging.setShowingConfig(!getMVConfig().getSilentStart());
this.worldManager.loadDefaultWorlds();
this.worldManager.loadWorlds(true);
@@ -339,6 +339,9 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
// Output a little snippet to show it's enabled.
Logging.config("Version %s (API v%s) Enabled - By %s", this.getDescription().getVersion(), PROTOCOL, getAuthors());
getLogger().info("Help dumptruckman keep this project alive. Become a patron! https://www.patreon.com/dumptruckman");
getLogger().info("One time donations are also appreciated: https://www.paypal.me/dumptruckman");
}
/**
@@ -407,18 +410,17 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
try {
Metrics m = new Metrics(this);
Metrics.Graph envGraph = m.createGraph("Worlds by environment");
Metrics.Graph envGraph = m.createGraph("worlds_by_env");
for (Environment env : Environment.values())
envGraph.addPlotter(new EnvironmentPlotter(this, env));
Metrics.Graph loadedWorldsGraph = m.createGraph("Worlds by environment");
loadedWorldsGraph.addPlotter(new Metrics.Plotter("Loaded worlds") {
m.addCustomData(new Metrics.Plotter("Loaded worlds") {
@Override
public int getValue() {
return getMVWorldManager().getMVWorlds().size();
}
});
loadedWorldsGraph.addPlotter(new Metrics.Plotter("Total number of worlds") {
m.addCustomData(new Metrics.Plotter("Total number of worlds") {
@Override
public int getValue() {
return getMVWorldManager().getMVWorlds().size()
@@ -431,13 +433,13 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
gens.add(w.getGenerator());
gens.remove(null);
gens.remove("null");
Metrics.Graph genGraph = m.createGraph("Custom Generators");
Metrics.Graph genGraph = m.createGraph("custom_gens");
for (String gen : gens)
genGraph.addPlotter(new GeneratorPlotter(this, gen));
m.start();
log(Level.FINE, "Metrics have run!");
} catch (Exception e) {
} catch (IOException e) {
log(Level.WARNING, "There was an issue while enabling metrics: " + e.getMessage());
}
}
@@ -509,6 +511,12 @@ public class MultiverseCore extends JavaPlugin implements MVPlugin, Core {
// Old Config Format
this.migrate22Values();
this.saveMVConfigs();
int level = Logging.getDebugLevel();
Logging.setDebugLevel(getMVConfig().getGlobalDebug());
if (level != Logging.getDebugLevel()) {
getServer().getPluginManager().callEvent(new MVDebugModeEvent(level));
}
}
/**
@@ -2,7 +2,9 @@ package com.onarandombox.MultiverseCore;
import com.dumptruckman.minecraft.util.*;
import com.onarandombox.MultiverseCore.api.*;
import com.onarandombox.MultiverseCore.event.MVDebugModeEvent;
import me.main__.util.SerializationConfig.*;
import org.bukkit.Bukkit;
import java.util.*;
@@ -229,6 +231,7 @@ public class MultiverseCoreConfiguration extends SerializationConfig implements
public void setGlobalDebug(int globalDebug) {
this.globaldebug = globalDebug;
Logging.setDebugLevel(globalDebug);
Bukkit.getPluginManager().callEvent(new MVDebugModeEvent(globalDebug));
}
/**
@@ -475,7 +475,7 @@ public interface MultiverseWorld {
/**
* Sets the price for entry to this world.
* You can think of this like an amount.
* The type can be set with {@link #setCurrency(int)}
* The type can be set with {@link #setCurrency(Material)}
*
* @param price The Amount of money/item to enter the world.
*/
@@ -33,9 +33,13 @@ public class DeleteCommand extends MultiverseCommand {
@Override
public void runCommand(CommandSender sender, List<String> args) {
String worldName = args.get(0);
Class<?>[] paramTypes = {String.class};
List<Object> objectArgs = new ArrayList<Object>(args);
this.plugin.getCommandHandler().queueCommand(sender, "mvdelete", "deleteWorld", objectArgs,
paramTypes, ChatColor.GREEN + "World Deleted!", ChatColor.RED + "World could NOT be deleted!");
this.plugin.getCommandHandler()
.queueCommand(sender, "mvdelete", "deleteWorld", objectArgs,
paramTypes, ChatColor.GREEN + "World '" + worldName + "' Deleted!",
ChatColor.RED + "World '" + worldName + "' could NOT be deleted!");
}
}
@@ -57,7 +57,7 @@ public class ImportCommand extends MultiverseCommand {
File[] files = worldFolder.listFiles(new FilenameFilter() {
@Override
public boolean accept(File file, String name) {
return name.equalsIgnoreCase("level.dat");
return name.toLowerCase().endsWith(".dat");
}
});
if (files != null && files.length > 0) {
@@ -147,21 +147,25 @@ public class ImportCommand extends MultiverseCommand {
return;
}
if (worldFile.exists() && env != null) {
Command.broadcastCommandMessage(sender, String.format("Starting import of world '%s'...", worldName));
if (this.worldManager.addWorld(worldName, environment, null, null, null, generator, useSpawnAdjust))
Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Complete!");
else
Command.broadcastCommandMessage(sender, ChatColor.RED + "Failed!");
if (!worldFile.exists()) {
sender.sendMessage(ChatColor.RED + "FAILED.");
String worldList = this.getPotentialWorlds();
sender.sendMessage("That world folder does not exist. These look like worlds to me:");
sender.sendMessage(worldList);
} else if (!checkIfIsWorld(worldFile)) {
sender.sendMessage(ChatColor.RED + "FAILED.");
sender.sendMessage(String.format("'%s' does not appear to be a world. It is lacking a .dat file.",
worldName));
} else if (env == null) {
sender.sendMessage(ChatColor.RED + "FAILED.");
sender.sendMessage("That world environment did not exist.");
sender.sendMessage("For a list of available world types, type: " + ChatColor.AQUA + "/mvenv");
} else {
sender.sendMessage(ChatColor.RED + "FAILED.");
String worldList = this.getPotentialWorlds();
sender.sendMessage("That world folder does not exist. These look like worlds to me:");
sender.sendMessage(worldList);
Command.broadcastCommandMessage(sender, String.format("Starting import of world '%s'...", worldName));
if (this.worldManager.addWorld(worldName, environment, null, null, null, generator, useSpawnAdjust))
Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Complete!");
else
Command.broadcastCommandMessage(sender, ChatColor.RED + "Failed!");
}
}
}
@@ -16,12 +16,15 @@ import com.onarandombox.MultiverseCore.utils.webpaste.PasteService;
import com.onarandombox.MultiverseCore.utils.webpaste.PasteServiceFactory;
import com.onarandombox.MultiverseCore.utils.webpaste.PasteServiceType;
import com.onarandombox.MultiverseCore.utils.webpaste.URLShortener;
import com.pneumaticraft.commandhandler.CommandHandler;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.StringUtil;
import java.io.*;
import java.util.HashMap;
@@ -37,8 +40,8 @@ public class VersionCommand extends MultiverseCommand {
public VersionCommand(MultiverseCore plugin) {
super(plugin);
this.setName("Multiverse Version");
this.setCommandUsage("/mv version " + ChatColor.GOLD + "-[bh]");
this.setArgRange(0, 1);
this.setCommandUsage("/mv version " + ChatColor.GOLD + "-[bh] [--include-plugin-list]");
this.setArgRange(0, 2);
this.addKey("mv version");
this.addKey("mvv");
this.addKey("mvversion");
@@ -149,22 +152,31 @@ public class VersionCommand extends MultiverseCommand {
final Map<String, String> files = this.getVersionFiles();
this.plugin.getServer().getPluginManager().callEvent(versionEvent);
String versionInfo = versionEvent.getVersionInfo();
if (CommandHandler.hasFlag("--include-plugin-list", args)) {
versionInfo = versionInfo + "\nPlugins: " + getPluginList();
}
final String data = versionInfo;
// log to console
final String data = versionEvent.getVersionInfo();
String[] lines = data.split("\n");
for (String line : lines) {
Logging.info(line);
if (!line.isEmpty()) {
Logging.info(line);
}
}
BukkitRunnable logPoster = new BukkitRunnable() {
@Override
public void run() {
if (args.size() == 1) {
if (args.size() > 0) {
String pasteUrl;
if (args.get(0).equalsIgnoreCase("-b")) {
if (CommandHandler.hasFlag("-b", args)) {
// private post to pastebin
pasteUrl = postToService(PasteServiceType.PASTEBIN, true, data, files);
} else if (args.get(0).equalsIgnoreCase("-h")) {
} else if (CommandHandler.hasFlag("-h", args)) {
// private post to pastebin
pasteUrl = postToService(PasteServiceType.HASTEBIN, true, data, files);
} else {
@@ -208,4 +220,8 @@ public class VersionCommand extends MultiverseCommand {
return "Error posting to service";
}
}
private String getPluginList() {
return StringUtils.join(plugin.getServer().getPluginManager().getPlugins(), ", ");
}
}
@@ -0,0 +1,43 @@
package com.onarandombox.MultiverseCore.event;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* Called when Core's debug level is changed.
*/
public class MVDebugModeEvent extends Event {
private static final HandlerList HANDLERS = new HandlerList();
private final int level;
public MVDebugModeEvent(int level) {
this.level = level;
}
/**
* {@inheritDoc}
*/
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
/**
* Gets the handler list. This is required by the event system.
* @return A list of HANDLERS.
*/
public static HandlerList getHandlerList() {
return HANDLERS;
}
/**
* Returns the current debug level of Core.
*
* @return the current debug level of Core.
*/
public int getLevel() {
return level;
}
}
@@ -29,7 +29,7 @@ public class MVMapListener implements Listener {
public void mapInitialize(final MapInitializeEvent event) {
for (final Player player : Bukkit.getOnlinePlayers()) {
if ((player.getItemInHand().getType() == Material.MAP
|| player.getItemInHand().getType() == Material.FILLED_MAP)
|| player.getItemInHand().getType() == Material.EMPTY_MAP)
&& player.getItemInHand().getDurability() == event.getMap().getId()) {
final Location playerLoc = player.getLocation();
final MapView map = event.getMap();
@@ -7,6 +7,10 @@
package com.onarandombox.MultiverseCore.listeners;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import com.dumptruckman.minecraft.util.Logging;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager;
@@ -29,10 +33,6 @@ import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
/**
* Multiverse's {@link Listener} for players.
*/
@@ -252,7 +252,7 @@ public class MVPlayerListener implements Listener {
// REMEMBER! getTo MAY be NULL HERE!!!
// If the player was actually outside of the portal, adjust the from location
if (event.getFrom().getWorld().getBlockAt(event.getFrom()).getType() != Material.NETHER_PORTAL) {
if (event.getFrom().getWorld().getBlockAt(event.getFrom()).getType() != Material.PORTAL) {
Location newloc = this.plugin.getSafeTTeleporter().findPortalBlockNextTo(event.getFrom());
// TODO: Fix this. Currently, we only check for PORTAL blocks. I'll have to figure out what
// TODO: we want to do here.
@@ -304,8 +304,16 @@ public class MVPlayerListener implements Listener {
+ "' was allowed to go to '" + event.getTo().getWorld().getName()
+ "' because enforceaccess is off.");
}
if (!plugin.getMVConfig().isUsingDefaultPortalSearch() && event.getPortalTravelAgent() != null) {
event.getPortalTravelAgent().setSearchRadius(plugin.getMVConfig().getPortalSearchRadius());
if (!plugin.getMVConfig().isUsingDefaultPortalSearch()) {
try {
Class.forName("org.bukkit.TravelAgent");
if (event.getPortalTravelAgent() != null) {
event.getPortalTravelAgent().setSearchRadius(plugin.getMVConfig().getPortalSearchRadius());
}
} catch (ClassNotFoundException ignore) {
plugin.log(Level.FINE, "TravelAgent not available for PlayerPortalEvent for " + event.getPlayer().getName());
}
}
}
@@ -71,10 +71,10 @@ public class MVPortalListener implements Listener {
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
return;
}
if (event.getClickedBlock().getType() != Material.END_PORTAL_FRAME) {
if (event.getClickedBlock().getType() != Material.ENDER_PORTAL_FRAME) {
return;
}
if (event.getItem() == null || event.getItem().getType() != Material.ENDER_EYE) {
if (event.getItem() == null || event.getItem().getType() != Material.EYE_OF_ENDER) {
return;
}
MultiverseWorld world = this.plugin.getMVWorldManager().getMVWorld(event.getPlayer().getWorld());
@@ -0,0 +1,110 @@
package com.onarandombox.MultiverseCore.utils;
import java.util.logging.Level;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.destination.CannonDestination;
import org.bukkit.Location;
import org.bukkit.TravelAgent;
import org.bukkit.event.player.PlayerPortalEvent;
public class BukkitTravelAgent implements TravelAgent {
private final MVTravelAgent agent;
public BukkitTravelAgent(MVTravelAgent agent) {
this.agent = agent;
}
/**
* {@inheritDoc}
*/
@Override
public BukkitTravelAgent setSearchRadius(int radius) {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public int getSearchRadius() {
return 0;
}
/**
* {@inheritDoc}
*/
@Override
public BukkitTravelAgent setCreationRadius(int radius) {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public int getCreationRadius() {
return 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean getCanCreatePortal() {
return false;
}
/**
* {@inheritDoc}
*/
@Override
public void setCanCreatePortal(boolean create) {
}
/**
* {@inheritDoc}
*/
@Override
public Location findOrCreate(Location location) {
return this.getSafeLocation();
}
/**
* {@inheritDoc}
*/
@Override
public Location findPortal(Location location) {
return this.getSafeLocation();
}
/**
* {@inheritDoc}
*/
@Override
public boolean createPortal(Location location) {
return false;
}
private Location getSafeLocation() {
// At this time, these can never use the velocity.
if (agent.destination instanceof CannonDestination) {
agent.core.log(Level.FINE, "Using Stock TP method. This cannon will have 0 velocity");
}
SafeTTeleporter teleporter = agent.core.getSafeTTeleporter();
Location newLoc = agent.destination.getLocation(agent.player);
if (agent.destination.useSafeTeleporter()) {
newLoc = teleporter.getSafeLocation(agent.player, agent.destination);
}
if (newLoc == null) {
return agent.player.getLocation();
}
return newLoc;
}
public void setPortalEventTravelAgent(PlayerPortalEvent event) {
event.setPortalTravelAgent(this);
event.useTravelAgent(true);
}
}
@@ -7,16 +7,22 @@
package com.onarandombox.MultiverseCore.utils;
import com.dumptruckman.minecraft.util.Logging;
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Stream;
import com.dumptruckman.minecraft.util.Logging;
/**
* File-utilities.
*/
@@ -69,20 +75,42 @@ public class FileUtils {
* @return if it had success
*/
public static boolean copyFolder(File source, File target, Logger log) {
Path sourcePath = source.toPath();
Path destPath = target.toPath();
try (Stream<Path> files = Files.walk(source.toPath())) {
files.forEachOrdered(src -> {
try {
Files.copy(src, sourcePath.resolve(destPath.relativize(src)));
} catch (IOException e) {
log.warning(e.getMessage());
}
});
Path sourceDir = source.toPath();
Path targetDir = target.toPath();
try {
Files.walkFileTree(sourceDir, new CopyDirFileVisitor(sourceDir, targetDir));
return true;
} catch (IOException e) {
log.warning(e.getMessage());
log.log(Level.WARNING, "Unable to copy directory", e);
return false;
}
}
private static class CopyDirFileVisitor extends SimpleFileVisitor<Path> {
private final Path sourceDir;
private final Path targetDir;
private CopyDirFileVisitor(Path sourceDir, Path targetDir) {
this.sourceDir = sourceDir;
this.targetDir = targetDir;
}
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Path newDir = targetDir.resolve(sourceDir.relativize(dir));
if (!Files.isDirectory(newDir)) {
Files.createDirectory(newDir);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path targetFile = targetDir.resolve(sourceDir.relativize(file));
Files.copy(file, targetFile, COPY_ATTRIBUTES);
return FileVisitResult.CONTINUE;
}
}
}
@@ -9,114 +9,19 @@ package com.onarandombox.MultiverseCore.utils;
import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVDestination;
import com.onarandombox.MultiverseCore.api.SafeTTeleporter;
import com.onarandombox.MultiverseCore.destination.CannonDestination;
import org.bukkit.Location;
import org.bukkit.TravelAgent;
import org.bukkit.entity.Player;
import java.util.logging.Level;
/**
* The Multiverse-{@link TravelAgent}.
* The Multiverse TravelAgent.
*/
public class MVTravelAgent implements TravelAgent {
private MVDestination destination;
private MultiverseCore core;
private Player player;
public class MVTravelAgent {
protected MVDestination destination;
protected MultiverseCore core;
protected Player player;
public MVTravelAgent(MultiverseCore multiverseCore, MVDestination d, Player p) {
this.destination = d;
this.core = multiverseCore;
this.player = p;
}
/**
* {@inheritDoc}
*/
@Override
public TravelAgent setSearchRadius(int radius) {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public int getSearchRadius() {
return 0;
}
/**
* {@inheritDoc}
*/
@Override
public TravelAgent setCreationRadius(int radius) {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public int getCreationRadius() {
return 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean getCanCreatePortal() {
return false;
}
/**
* {@inheritDoc}
*/
@Override
public void setCanCreatePortal(boolean create) {
}
/**
* {@inheritDoc}
*/
@Override
public Location findOrCreate(Location location) {
return this.getSafeLocation();
}
/**
* {@inheritDoc}
*/
@Override
public Location findPortal(Location location) {
return this.getSafeLocation();
}
/**
* {@inheritDoc}
*/
@Override
public boolean createPortal(Location location) {
return false;
}
private Location getSafeLocation() {
// At this time, these can never use the velocity.
if (this.destination instanceof CannonDestination) {
this.core.log(Level.FINE, "Using Stock TP method. This cannon will have 0 velocity");
}
SafeTTeleporter teleporter = this.core.getSafeTTeleporter();
Location newLoc = this.destination.getLocation(this.player);
if (this.destination.useSafeTeleporter()) {
newLoc = teleporter.getSafeLocation(this.player, this.destination);
}
if (newLoc == null) {
return this.player.getLocation();
}
return newLoc;
}
}
@@ -14,10 +14,9 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Bed;
import org.bukkit.entity.Minecart;
import org.bukkit.entity.Vehicle;
import org.bukkit.material.Bed;
import java.util.EnumSet;
import java.util.Iterator;
@@ -152,13 +151,12 @@ public class SimpleBlockSafety implements BlockSafety {
* @return The location of the other bed piece, or null if it was a jacked up bed.
*/
private Location findOtherBedPiece(Location checkLoc) {
BlockData data = checkLoc.getBlock().getBlockData();
if (!(data instanceof Bed)) {
if (checkLoc.getBlock().getType() != Material.BED_BLOCK) {
return null;
}
Bed b = (Bed) data;
if (b.getPart() == Bed.Part.HEAD) {
// Construct a bed object at this location
final Bed b = new Bed(Material.BED_BLOCK, checkLoc.getBlock().getData());
if (b.isHeadOfBed()) {
return checkLoc.getBlock().getRelative(b.getFacing().getOppositeFace()).getLocation();
}
// We shouldn't ever be looking at the foot, but here's the code for it.
@@ -211,10 +209,7 @@ public class SimpleBlockSafety implements BlockSafety {
@Override
public boolean isEntitiyOnTrack(Location l) {
Material currentBlock = l.getBlock().getType();
return (currentBlock == Material.POWERED_RAIL
|| currentBlock == Material.DETECTOR_RAIL
|| currentBlock == Material.RAIL
|| currentBlock == Material.ACTIVATOR_RAIL);
return (currentBlock == Material.POWERED_RAIL || currentBlock == Material.DETECTOR_RAIL || currentBlock == Material.RAILS);
}
/**
@@ -292,19 +292,19 @@ public class SimpleSafeTTeleporter implements SafeTTeleporter {
public Location findPortalBlockNextTo(Location l) {
Block b = l.getWorld().getBlockAt(l);
Location foundLocation = null;
if (b.getType() == Material.NETHER_PORTAL) {
if (b.getType() == Material.PORTAL) {
return l;
}
if (b.getRelative(BlockFace.NORTH).getType() == Material.NETHER_PORTAL) {
if (b.getRelative(BlockFace.NORTH).getType() == Material.PORTAL) {
foundLocation = getCloserBlock(l, b.getRelative(BlockFace.NORTH).getLocation(), foundLocation);
}
if (b.getRelative(BlockFace.SOUTH).getType() == Material.NETHER_PORTAL) {
if (b.getRelative(BlockFace.SOUTH).getType() == Material.PORTAL) {
foundLocation = getCloserBlock(l, b.getRelative(BlockFace.SOUTH).getLocation(), foundLocation);
}
if (b.getRelative(BlockFace.EAST).getType() == Material.NETHER_PORTAL) {
if (b.getRelative(BlockFace.EAST).getType() == Material.PORTAL) {
foundLocation = getCloserBlock(l, b.getRelative(BlockFace.EAST).getLocation(), foundLocation);
}
if (b.getRelative(BlockFace.WEST).getType() == Material.NETHER_PORTAL) {
if (b.getRelative(BlockFace.WEST).getType() == Material.PORTAL) {
foundLocation = getCloserBlock(l, b.getRelative(BlockFace.WEST).getLocation(), foundLocation);
}
return foundLocation;
+1 -2
View File
@@ -2,7 +2,6 @@ name: Multiverse-Core
main: com.onarandombox.MultiverseCore.MultiverseCore
authors: ['Rigby', 'fernferret', 'lithium3141', 'main--', 'dumptruckman']
website: 'https://dev.bukkit.org/projects/multiverse-core'
api-version: 1.13
version: maven-version-number
commands:
mv:
@@ -233,4 +232,4 @@ commands:
mvrules:
description: Lists the gamerules.
usage: |
/<command> [WORLD]
/<command> [WORLD]
@@ -11,6 +11,7 @@ import com.onarandombox.MultiverseCore.api.MVWorldManager;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.configuration.SpawnLocation;
import com.onarandombox.MultiverseCore.listeners.MVAsyncPlayerChatListener;
import com.onarandombox.MultiverseCore.utils.MockWorldFactory;
import com.onarandombox.MultiverseCore.utils.TestInstanceCreator;
import com.onarandombox.MultiverseCore.utils.WorldManager;
import org.bukkit.Bukkit;
@@ -90,6 +91,8 @@ public class TestWorldProperties {
assertTrue(creator.setUp());
core = creator.getCore();
mockCommandSender = creator.getCommandSender();
MockWorldFactory.createWorldDirectory("world");
MockWorldFactory.createWorldDirectory("world_nether");
}
@After
@@ -9,6 +9,7 @@ package com.onarandombox.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MultiverseWorld;
import com.onarandombox.MultiverseCore.exceptions.PropertyDoesNotExistException;
import com.onarandombox.MultiverseCore.utils.MockWorldFactory;
import com.onarandombox.MultiverseCore.utils.TestInstanceCreator;
import com.onarandombox.MultiverseCore.utils.WorldCreatorMatcher;
import com.onarandombox.MultiverseCore.utils.WorldManager;
@@ -99,6 +100,10 @@ public class TestWorldStuff {
@Test
public void testWorldImport() {
MockWorldFactory.createWorldDirectory("world");
MockWorldFactory.createWorldDirectory("world_nether");
MockWorldFactory.createWorldDirectory("world_the_end");
// Pull a core instance from the server.
Plugin plugin = mockServer.getPluginManager().getPlugin("Multiverse-Core");
@@ -282,6 +287,9 @@ public class TestWorldStuff {
}
private void createInitialWorlds(Plugin plugin, Command command) {
MockWorldFactory.createWorldDirectory("world");
MockWorldFactory.createWorldDirectory("world_nether");
MockWorldFactory.createWorldDirectory("world_the_end");
plugin.onCommand(mockCommandSender, command, "", new String[]{ "import", "world", "normal" });
plugin.onCommand(mockCommandSender, command, "", new String[]{ "import", "world_nether", "nether" });
plugin.onCommand(mockCommandSender, command, "", new String[]{ "import", "world_the_end", "end" });
@@ -1,54 +1,48 @@
package com.onarandombox.MultiverseCore.utils;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import com.dumptruckman.minecraft.util.Logging;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import static org.junit.Assert.*;
public class FileUtilsTest {
private File parentDir;
private File parentDirFile;
private File childDir;
private File childDirFile;
private File dest;
private Path tempDir;
private Path parentDir;
private Path parentDirFile;
private Path childDir;
private Path childDirFile;
@Before
public void setUp() throws Exception {
parentDir = Files.createTempDirectory("parentDir").toFile();
parentDirFile = new File(parentDir, "parentDirFile.txt");
parentDirFile.createNewFile();
childDir = Files.createTempDirectory(parentDir.toPath(), "childDir").toFile();
childDirFile = new File(childDir, "childDirFile.txt");
childDirFile.createNewFile();
dest = Files.createTempDirectory("dest").toFile();
tempDir = Files.createTempDirectory("testingTempDir");
assertTrue(parentDir.exists());
assertTrue(parentDirFile.exists());
assertTrue(childDir.exists());
assertTrue(childDirFile.exists());
assertTrue(dest.exists());
parentDir = Files.createDirectory(tempDir.resolve("parentDir"));
parentDirFile = Files.createFile(parentDir.resolve("parentDirFile.txt"));
childDir = Files.createDirectory(parentDir.resolve("childDir"));
childDirFile = Files.createFile(childDir.resolve("childDirFile.txt"));
assertTrue(Files.isDirectory(parentDir));
assertTrue(Files.isRegularFile(parentDirFile));
assertTrue(Files.isDirectory(childDir));
assertTrue(Files.isRegularFile(childDirFile));
}
@After
public void tearDown() throws Exception {
try {
org.apache.commons.io.FileUtils.deleteDirectory(parentDir);
org.apache.commons.io.FileUtils.deleteDirectory(tempDir.toFile());
} catch (IOException e) {
if (parentDir.exists()) {
throw e;
}
}
try {
org.apache.commons.io.FileUtils.deleteDirectory(dest);
} catch (IOException e) {
if (parentDir.exists()) {
if (Files.exists(tempDir)) {
throw e;
}
}
@@ -56,30 +50,70 @@ public class FileUtilsTest {
@Test
public void deleteFolder() {
FileUtils.deleteFolder(parentDir);
assertFalse(parentDir.exists());
assertFalse(parentDirFile.exists());
assertFalse(childDir.exists());
assertFalse(childDirFile.exists());
FileUtils.deleteFolder(parentDir.toFile());
assertFalse(Files.isDirectory(parentDir));
assertFalse(Files.isRegularFile(parentDirFile));
assertFalse(Files.isDirectory(childDir));
assertFalse(Files.isRegularFile(childDirFile));
}
@Test
public void deleteFolderContents() {
FileUtils.deleteFolderContents(parentDir);
assertTrue(parentDir.exists());
assertFalse(parentDirFile.exists());
assertFalse(childDir.exists());
assertFalse(childDirFile.exists());
FileUtils.deleteFolderContents(parentDir.toFile());
assertTrue(Files.isDirectory(parentDir));
assertFalse(Files.isRegularFile(parentDirFile));
assertFalse(Files.isDirectory(childDir));
assertFalse(Files.isRegularFile(childDirFile));
}
@Test
public void copyFolder() {
File destFile = new File(dest, "parentDirFile.txt");
File destChildDir = new File(dest, "childDir");
File destChildDirFile = new File(destChildDir, "childDirFile.txt");
assertFalse(destFile.exists());
assertFalse(destChildDir.exists());
assertFalse(destChildDirFile.exists());
FileUtils.copyFolder(parentDir, dest, Logging.getLogger());
public void copyFolder() throws Exception {
Path targetDir = tempDir.resolve("target");
Path targetFile = targetDir.resolve("parentDirFile.txt");
Path targetChildDir = targetDir.resolve("childDir");
Path targetChildDirFile = targetChildDir.resolve("childDirFile.txt");
assertFalse(Files.isDirectory(targetDir));
assertFalse(Files.isRegularFile(targetFile));
assertFalse(Files.isDirectory(targetChildDir));
assertFalse(Files.isRegularFile(targetChildDirFile));
assertTrue(FileUtils.copyFolder(parentDir.toFile(), targetDir.toFile(), Logging.getLogger()));
assertTrue(Files.isDirectory(targetDir));
assertTrue(Files.isRegularFile(targetFile));
assertTrue(Files.isDirectory(targetChildDir));
assertTrue(Files.isRegularFile(targetChildDirFile));
}
}
@Test
public void copyFolder_intoExistingFolder() throws Exception {
Path targetDir = Files.createDirectory(tempDir.resolve("target"));
Path targetFile = targetDir.resolve("parentDirFile.txt");
Path targetChildDir = targetDir.resolve("childDir");
Path targetChildDirFile = targetChildDir.resolve("childDirFile.txt");
assertTrue(Files.isDirectory(targetDir));
assertFalse(Files.isRegularFile(targetFile));
assertFalse(Files.isDirectory(targetChildDir));
assertFalse(Files.isRegularFile(targetChildDirFile));
assertTrue(FileUtils.copyFolder(parentDir.toFile(), targetDir.toFile(), Logging.getLogger()));
assertTrue(Files.isDirectory(targetDir));
assertTrue(Files.isRegularFile(targetFile));
assertTrue(Files.isDirectory(targetChildDir));
assertTrue(Files.isRegularFile(targetChildDirFile));
}
@Test()
public void copyFolder_intoExistingFolder_whereFileExists() throws Exception {
Path targetDir = Files.createDirectory(tempDir.resolve("target"));
Path targetFile = Files.createFile(targetDir.resolve("parentDirFile.txt"));
assertTrue(Files.isDirectory(targetDir));
assertTrue(Files.isRegularFile(targetFile));
assertFalse(FileUtils.copyFolder(parentDir.toFile(), targetDir.toFile(), Logging.getLogger()));
}
}
@@ -18,6 +18,7 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -43,7 +44,17 @@ public class MockWorldFactory {
private static void registerWorld(World world) {
createdWorlds.put(world.getName(), world);
worldUIDS.put(world.getUID(), world);
new File(TestInstanceCreator.worldsDirectory, world.getName()).mkdir();
createWorldDirectory(world.getName());
}
public static void createWorldDirectory(String worldName) {
File worldFolder = new File(TestInstanceCreator.worldsDirectory, worldName);
worldFolder.mkdir();
try {
new File(worldFolder, "level.dat").createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static World basics(String world, World.Environment env, WorldType type) {