package dev.encode42.myserver.mixin; import dev.encode42.myserver.accessors.MinecraftAccessor; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public class MinecraftMixin implements MinecraftAccessor { @Unique private boolean myserver$isSpecialServer = false; @ModifyVariable( method = "disconnectFromWorld", at = @At( value = "LOAD", ordinal = 1 ), name = "localServer" ) private boolean checkSpecialServer(boolean localServer) { return localServer || this.myserver$isSpecialServer; } @Inject( method = "disconnectFromWorld", at = @At( value = "TAIL" ) ) private void modifyDisconnectWorld(Component message, CallbackInfo ci) { this.myserver$isSpecialServer = false; } @Override public void myserver$setSpecialServer(boolean isSpecial) { this.myserver$isSpecialServer = isSpecial; } }