geforkt von Mirrors/FastAsyncWorldEdit
Implement getNameUnsafe method to allow an unloaded world's name to be accessed (#1712)
* Implement getNameUnsafe method to allow an unloaded world's name to be accessed - Fixes #1671 and #504 * Add javadoc since tag Co-authored-by: Alexander Brandes <mc.cache@web.de> Co-authored-by: Alexander Brandes <mc.cache@web.de>
Dieser Commit ist enthalten in:
Ursprung
c1b5f8c84a
Commit
210ee9f2ef
@ -15,4 +15,11 @@ public class WorldUnloadedException extends WorldEditException {
|
||||
super(Caption.of("worldedit.error.world-unloaded"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*/
|
||||
public WorldUnloadedException(String name) {
|
||||
super(Caption.of("worldedit.error.named-world-unloaded", name));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -193,19 +193,34 @@ public class BukkitWorld extends AbstractWorld {
|
||||
* @return the world
|
||||
*/
|
||||
protected World getWorldChecked() throws WorldEditException {
|
||||
World world = worldRef.get();
|
||||
if (world == null) {
|
||||
throw new WorldUnloadedException();
|
||||
World tmp = worldRef.get();
|
||||
if (tmp == null) {
|
||||
tmp = Bukkit.getWorld(worldNameRef);
|
||||
if (tmp != null) {
|
||||
worldRef = new WeakReference<>(tmp);
|
||||
}
|
||||
return world;
|
||||
}
|
||||
if (tmp == null) {
|
||||
throw new WorldUnloadedException(worldNameRef);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return getWorld().getName();
|
||||
//FAWE start - Throw WorldUnloadedException rather than NPE when world unloaded and attempted to be accessed
|
||||
return getWorldChecked().getName();
|
||||
//FAWE end
|
||||
}
|
||||
|
||||
//FAWE start - allow history to read an unloaded world's name
|
||||
@Override
|
||||
public String getNameUnsafe() {
|
||||
return worldNameRef;
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return getWorld().getName().replace(" ", "_").toLowerCase(Locale.ROOT);
|
||||
|
@ -76,6 +76,13 @@ public class ClipboardWorld extends AbstractWorld implements Clipboard, CLIWorld
|
||||
return this.name;
|
||||
}
|
||||
|
||||
//FAWE start - allow history to read an unloaded world's name
|
||||
@Override
|
||||
public String getNameUnsafe() {
|
||||
return this.name;
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return getName().replace(" ", "_").toLowerCase(Locale.ROOT);
|
||||
|
@ -198,6 +198,13 @@ public class WorldWrapper extends AbstractWorld {
|
||||
return parent.getName();
|
||||
}
|
||||
|
||||
//FAWE start - allow history to read an unloaded world's name
|
||||
@Override
|
||||
public String getNameUnsafe() {
|
||||
return parent.getNameUnsafe();
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
@Override
|
||||
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B block, boolean notifyAndLight) throws
|
||||
WorldEditException {
|
||||
|
@ -306,7 +306,8 @@ public class LocalSession implements TextureHolder {
|
||||
}
|
||||
File file = MainUtil.getFile(
|
||||
Fawe.platform().getDirectory(),
|
||||
Settings.settings().PATHS.HISTORY + File.separator + world.getName() + File.separator + uuid + File.separator + "index"
|
||||
// Use "unsafe" method here as world does not need to be loaded to save this information.
|
||||
Settings.settings().PATHS.HISTORY + File.separator + world.getNameUnsafe() + File.separator + uuid + File.separator + "index"
|
||||
);
|
||||
if (getHistoryNegativeIndex() != 0) {
|
||||
try {
|
||||
|
@ -69,6 +69,13 @@ public class NullWorld extends AbstractWorld {
|
||||
return "null";
|
||||
}
|
||||
|
||||
//FAWE start - allow history to read an unloaded world's name
|
||||
@Override
|
||||
public String getNameUnsafe() {
|
||||
return "null";
|
||||
}
|
||||
//FAWE end
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return "null";
|
||||
|
@ -63,12 +63,23 @@ public interface World extends Extent, Keyed, IChunkCache<IChunkGet> {
|
||||
//FAWE end
|
||||
|
||||
/**
|
||||
* Get the name of the world.
|
||||
* Get the name of the world. This will error if world has been unloaded by the server.
|
||||
*
|
||||
* @return a name for the world
|
||||
*/
|
||||
String getName();
|
||||
|
||||
//FAWE start - allow history to read an unloaded world's name
|
||||
/**
|
||||
* Get the name of the world. If the world referenced has been unloaded, this will still return the name.
|
||||
*
|
||||
* @return a name for the world
|
||||
* @since TODO
|
||||
*/
|
||||
String getNameUnsafe();
|
||||
//FAWE end
|
||||
|
||||
|
||||
/**
|
||||
* Get the folder in which this world is stored. May return null if unknown
|
||||
* or if this world is not serialized to disk.
|
||||
|
@ -248,6 +248,7 @@
|
||||
"worldedit.tool.error.cannot-bind": "Can't bind tool to {0}: {1}",
|
||||
"worldedit.error.file-aborted": "File selection aborted.",
|
||||
"worldedit.error.world-unloaded": "The world was unloaded already.",
|
||||
"worldedit.error.named-world-unloaded": "The world '{0}' was unloaded already.",
|
||||
"worldedit.error.blocks-cant-be-used": "Blocks can't be used",
|
||||
"worldedit.error.unknown-tag": "Tag name '{0}' was not recognized.",
|
||||
"worldedit.error.empty-tag": "Tag name '{0}' has no contents.",
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren