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>
This commit is contained in:
Jordan
2022-05-05 20:39:45 +01:00
committed by GitHub
parent c1b5f8c84a
commit 210ee9f2ef
8 changed files with 63 additions and 7 deletions

View File

@ -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 {

View File

@ -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 {

View File

@ -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";

View File

@ -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.

View File

@ -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.",