Async saving persistent collection
This commit is contained in:
@@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||||||
|
|
||||||
import io.akarin.api.internal.Akari;
|
import io.akarin.api.internal.Akari;
|
||||||
import io.akarin.server.core.AkarinGlobalConfig;
|
import io.akarin.server.core.AkarinGlobalConfig;
|
||||||
|
import net.minecraft.server.PersistentCollection;
|
||||||
|
|
||||||
@Mixin(value = AsyncCatcher.class, remap = false)
|
@Mixin(value = AsyncCatcher.class, remap = false)
|
||||||
public abstract class MixinAsyncCatcher {
|
public abstract class MixinAsyncCatcher {
|
||||||
@@ -22,6 +23,7 @@ public abstract class MixinAsyncCatcher {
|
|||||||
} else {
|
} else {
|
||||||
Akari.logger.warn("Asynchronous " + reason + "!");
|
Akari.logger.warn("Asynchronous " + reason + "!");
|
||||||
Thread.dumpStack();
|
Thread.dumpStack();
|
||||||
|
PersistentCollection.class.getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
package io.akarin.server.mixin.optimization;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Overwrite;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
|
||||||
|
import com.destroystokyo.paper.exception.ServerInternalException;
|
||||||
|
|
||||||
|
import net.minecraft.server.IDataManager;
|
||||||
|
import net.minecraft.server.MCUtil;
|
||||||
|
import net.minecraft.server.NBTCompressedStreamTools;
|
||||||
|
import net.minecraft.server.NBTTagCompound;
|
||||||
|
import net.minecraft.server.PersistentBase;
|
||||||
|
import net.minecraft.server.PersistentCollection;
|
||||||
|
|
||||||
|
@Mixin(value = PersistentCollection.class, remap = false)
|
||||||
|
public abstract class MixinPersistentCollection {
|
||||||
|
@Shadow(aliases = "b") @Final private IDataManager dataManager;
|
||||||
|
|
||||||
|
@Overwrite
|
||||||
|
private void a(PersistentBase persistentbase) {
|
||||||
|
if (this.dataManager == null) return;
|
||||||
|
|
||||||
|
File file = this.dataManager.getDataFile(persistentbase.id);
|
||||||
|
if (file == null) return;
|
||||||
|
|
||||||
|
NBTTagCompound nbttagcompound = new NBTTagCompound();
|
||||||
|
nbttagcompound.set("data", persistentbase.b(new NBTTagCompound()));
|
||||||
|
|
||||||
|
// Akarin start
|
||||||
|
MCUtil.scheduleAsyncTask(() -> {
|
||||||
|
try {
|
||||||
|
FileOutputStream fileoutputstream = new FileOutputStream(file);
|
||||||
|
|
||||||
|
NBTCompressedStreamTools.a(nbttagcompound, fileoutputstream);
|
||||||
|
fileoutputstream.close();
|
||||||
|
} catch (Exception exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
ServerInternalException.reportInternalException(exception); // Paper
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Akarin end
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@
|
|||||||
"optimization.WeakEnchantmentManager",
|
"optimization.WeakEnchantmentManager",
|
||||||
"optimization.MixinEntityHorseAbstract",
|
"optimization.MixinEntityHorseAbstract",
|
||||||
"optimization.MixinEntityTameableAnimal",
|
"optimization.MixinEntityTameableAnimal",
|
||||||
|
"optimization.MixinPersistentCollection",
|
||||||
"optimization.MixinTileEntityEnchantTable"
|
"optimization.MixinTileEntityEnchantTable"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user