diff --git a/sources/pom.xml b/sources/pom.xml
index ccc5702d1..f933fcee7 100644
--- a/sources/pom.xml
+++ b/sources/pom.xml
@@ -126,7 +126,7 @@
io.akarin
legacylauncher
- 1.20
+ 1.22
org.spongepowered
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBan.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBan.java
index 2dc0c011a..ef3dc7d00 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBan.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBan.java
@@ -20,7 +20,7 @@ import net.minecraft.server.ICommandListener;
import net.minecraft.server.MinecraftServer;
@Mixin(value = CommandBan.class, remap = false)
-public class MixinCommandBan {
+public abstract class MixinCommandBan {
@Overwrite
public void execute(MinecraftServer server, ICommandListener sender, String[] args) throws CommandException {
if (args.length >= 1 && args[0].length() > 1) {
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBanIp.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBanIp.java
index deda36ad0..68f8fa6ad 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBanIp.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandBanIp.java
@@ -18,7 +18,7 @@ import net.minecraft.server.IpBanEntry;
import net.minecraft.server.MinecraftServer;
@Mixin(value = CommandBanIp.class, remap = false)
-public class MixinCommandBanIp {
+public abstract class MixinCommandBanIp {
@Overwrite // PAIL: banIp
protected void a(MinecraftServer server, ICommandListener sender, String args, @Nullable String banReason) {
// Akarin start - modify message
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandKick.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandKick.java
index 710f05ce4..05c55a096 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandKick.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinCommandKick.java
@@ -14,7 +14,7 @@ import net.minecraft.server.ICommandListener;
import net.minecraft.server.MinecraftServer;
@Mixin(value = CommandKick.class, remap = false)
-public class MixinCommandKick {
+public abstract class MixinCommandKick {
@Overwrite
public void execute(MinecraftServer server, ICommandListener sender, String[] args) throws CommandException {
if (args.length > 0 && args[0].length() > 1) {
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinCraftServer.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinCraftServer.java
index b086614ba..7b2b10706 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinCraftServer.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinCraftServer.java
@@ -12,7 +12,7 @@ import me.nallar.whocalled.WhoCalled;
import net.minecraft.server.MinecraftServer;
@Mixin(value = CraftServer.class, remap = false)
-public class MixinCraftServer {
+public abstract class MixinCraftServer {
@Shadow @Final @Mutable private String serverName;
@Shadow @Final protected MinecraftServer console;
private boolean needApplyServerName = true;
diff --git a/sources/src/main/java/io/akarin/server/mixin/core/MixinMCUtil.java b/sources/src/main/java/io/akarin/server/mixin/core/MixinMCUtil.java
index 5f7c17327..cfbf66066 100644
--- a/sources/src/main/java/io/akarin/server/mixin/core/MixinMCUtil.java
+++ b/sources/src/main/java/io/akarin/server/mixin/core/MixinMCUtil.java
@@ -8,7 +8,7 @@ import org.spongepowered.asm.mixin.Overwrite;
import net.minecraft.server.MCUtil;
@Mixin(value = MCUtil.class, remap = false)
-public class MixinMCUtil {
+public abstract class MixinMCUtil {
@Overwrite
public static T ensureMain(String reason, Supplier run) {
return run.get();
diff --git a/sources/src/main/java/io/akarin/server/mixin/optimization/WeakBigTree.java b/sources/src/main/java/io/akarin/server/mixin/optimization/WeakBigTree.java
index b869526ef..707baecc6 100644
--- a/sources/src/main/java/io/akarin/server/mixin/optimization/WeakBigTree.java
+++ b/sources/src/main/java/io/akarin/server/mixin/optimization/WeakBigTree.java
@@ -16,7 +16,7 @@ import net.minecraft.server.WorldGenBigTree;
* Fixes MC-128547(https://bugs.mojang.com/browse/MC-128547)
*/
@Mixin(value = WorldGenBigTree.class, remap = false)
-public class WeakBigTree {
+public abstract class WeakBigTree {
@Shadow(aliases = "l") private World worldReference;
@Inject(method = "generate", at = @At("RETURN"))
diff --git a/sources/src/main/resources/mixins.akarin.core.json b/sources/src/main/resources/mixins.akarin.core.json
index f30e2ce50..00cc391eb 100644
--- a/sources/src/main/resources/mixins.akarin.core.json
+++ b/sources/src/main/resources/mixins.akarin.core.json
@@ -25,37 +25,14 @@
"core.MixinMinecraftServer",
"core.MixinChunkIOExecutor",
- "cps.MixinChunk",
"cps.MixinCraftWorld",
"cps.MixinChunkProviderServer",
"nsc.OptimisticNetworkManager",
"nsc.NonblockingServerConnection",
- "lighting.MixinChunk",
- "lighting.MixinWorld",
- "lighting.MixinWorldServer",
- "lighting.MixinChunkProviderServer",
-
- "realtime.MixinWorld",
- "realtime.MixinEntity",
- "realtime.MixinEntityItem",
- "realtime.MixinWorldServer",
- "realtime.MixinEntityHuman",
- "realtime.MixinEntityPlayer",
- "realtime.MixinEntityAgeable",
- "realtime.MixinMinecraftServer",
- "realtime.MixinEntityInsentient",
- "realtime.MixinPlayerConnection",
- "realtime.MixinTileEntityFurnace",
- "realtime.MixinEntityExperienceOrb",
- "realtime.MixinEntityZombieVillager",
- "realtime.MixinPlayerInteractManager",
- "realtime.MixinTileEntityBrewingStand",
-
"optimization.WeakBigTree",
"optimization.MixinPlayerChunk",
- "optimization.PandaRedstoneWire",
"optimization.WeakEnchantmentManager",
"optimization.MixinEntityHorseAbstract",
"optimization.MixinEntityTameableAnimal",
diff --git a/sources/src/main/resources/mixins.akarin.optimization.lighting.json b/sources/src/main/resources/mixins.akarin.optimization.lighting.json
new file mode 100644
index 000000000..db72947a7
--- /dev/null
+++ b/sources/src/main/resources/mixins.akarin.optimization.lighting.json
@@ -0,0 +1,15 @@
+{
+ "required": true,
+ "minVersion": "0.7.8",
+ "package": "io.akarin.server.mixin",
+ "target": "@env(DEFAULT)",
+ "compatibilityLevel": "JAVA_8",
+ "server": [
+ "cps.MixinChunk",
+
+ "lighting.MixinChunk",
+ "lighting.MixinWorld",
+ "lighting.MixinWorldServer",
+ "lighting.MixinChunkProviderServer",
+ ]
+}
\ No newline at end of file
diff --git a/sources/src/main/resources/mixins.akarin.optimization.pandawire.json b/sources/src/main/resources/mixins.akarin.optimization.pandawire.json
new file mode 100644
index 000000000..e1e1415ae
--- /dev/null
+++ b/sources/src/main/resources/mixins.akarin.optimization.pandawire.json
@@ -0,0 +1,10 @@
+{
+ "required": true,
+ "minVersion": "0.7.8",
+ "package": "io.akarin.server.mixin",
+ "target": "@env(DEFAULT)",
+ "compatibilityLevel": "JAVA_8",
+ "server": [
+ "optimization.PandaRedstoneWire",
+ ]
+}
\ No newline at end of file
diff --git a/sources/src/main/resources/mixins.akarin.optimization.realtime.json b/sources/src/main/resources/mixins.akarin.optimization.realtime.json
new file mode 100644
index 000000000..c8458ae9a
--- /dev/null
+++ b/sources/src/main/resources/mixins.akarin.optimization.realtime.json
@@ -0,0 +1,24 @@
+{
+ "required": true,
+ "minVersion": "0.7.8",
+ "package": "io.akarin.server.mixin",
+ "target": "@env(DEFAULT)",
+ "compatibilityLevel": "JAVA_8",
+ "server": [
+ "realtime.MixinWorld",
+ "realtime.MixinEntity",
+ "realtime.MixinEntityItem",
+ "realtime.MixinWorldServer",
+ "realtime.MixinEntityHuman",
+ "realtime.MixinEntityPlayer",
+ "realtime.MixinEntityAgeable",
+ "realtime.MixinMinecraftServer",
+ "realtime.MixinEntityInsentient",
+ "realtime.MixinPlayerConnection",
+ "realtime.MixinTileEntityFurnace",
+ "realtime.MixinEntityExperienceOrb",
+ "realtime.MixinEntityZombieVillager",
+ "realtime.MixinPlayerInteractManager",
+ "realtime.MixinTileEntityBrewingStand",
+ ]
+}
\ No newline at end of file