API for pasting schematics seems to be laggy
JHarris12345 opened this issue ยท 7 comments
WorldEdit Version
7.2.6+4b2d1e7
Platform Version
Paper 1.17.1
Confirmations
- I am using the most recent Minecraft release.
- I am using a version of WorldEdit compatible with my Minecraft version.
- I am using the latest or recommended version of my platform software.
- I am NOT using a hybrid server, e.g. a server that combines Bukkit and Forge. Examples include Arclight, Mohist, and Cardboard.
- I am NOT using a fork of WorldEdit, such as FastAsyncWorldEdit (FAWE) or AsyncWorldEdit (AWE)
Bug Description
Hey I am just curious to understand why TPS drops for about 20 seconds when a plugin of mine pastes a worldedit schematic. From the looks of it, it is the bukkit adapter getting the actual chunk that is being edited which is causing lag and this is for a schematic that is only 3 blocks big (used a very small one to just test). So I am unsure why so much lag is being caused for this.
I have 2 sparks:
Idle spark where the schematic was not being pasted (no lag): https://spark.lucko.me/wWJUYo2Ugf
The lag during the schematic being pasted: https://spark.lucko.me/QfB3EhAwJv
My code to paste the schematic is:
` @OverRide
public void paste(File file, Location location, Island island) {
try {
ClipboardFormat format = ClipboardFormats.findByFile(file);
ClipboardReader reader = format.getReader(new FileInputStream(file));
Clipboard clipboard = reader.read();
World world = IridiumSkyblock.getInstance().adaptedWorld;
if (location.getWorld().getName().equalsIgnoreCase("skyblock_nether")) world = IridiumSkyblock.getInstance().adaptedNether;
if (location.getWorld().getName().equalsIgnoreCase("skyblock_world")) world = IridiumSkyblock.getInstance().adaptedWorld;
try (EditSession editSession = com.sk89q.worldedit.WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1)) {
editSession.setFastMode(true);
Operation operation = new ClipboardHolder(clipboard)
.createPaste(editSession)
.to(BlockVector3.at(location.getX(), location.getY(), location.getZ()))
.ignoreAirBlocks(true)
.build();
Operations.complete(operation);
}
} catch (Exception e) {
IridiumSkyblock.getInstance().getLogger().warning("Failed to paste schematic using worldedit");
IridiumSkyblock.getInstance().getSchematic().paste(file, location, island);
}
}`
Thanks for your help in advance
Expected Behavior
Hopefully no lag ahah
Reproduction Steps
- Use the code I have to paste a schematic
Anything Else?
No response
You should try preparing the schematic in advance, rather than blocking the main thread while loading it. It is safe to load a schematic async, or you could just do it at start up if you know what they are then. I/O is extremely expensive and may be responsible for a slight slow-down. Though it appears from your sparks that WorldEdit is far from the most demanding plugin on your server, even while pasting.
Additionally, please use the discord for support in the future, as this is not an actual bug.
I got banned from the discord like 2 years ago for asking about an update. So if you want to unban me that would be generous thanks. Discord is JHarris#0482
@octylFractal But if I cannot be unbanned, do you mind giving me some support here on how I would go about loading the schem on startup? Because it seems the actual lag is coming from parsing the chunks where it is going to get pasted. I even adapt the world on startup which didnt help either