Skip to content

Commit

Permalink
part 2 - required roles
Browse files Browse the repository at this point in the history
  • Loading branch information
MeiNanziiii committed Nov 19, 2024
1 parent 4398a1a commit 0be4a07
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.authlib.GameProfile;
import dev.kord.core.entity.Member;
import net.minecraft.network.ClientConnection;
import net.minecraft.network.packet.c2s.login.LoginHelloC2SPacket;
import net.minecraft.network.packet.c2s.login.LoginKeyC2SPacket;
import net.minecraft.server.MinecraftServer;
Expand All @@ -17,6 +18,7 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import ua.mei.minekord.cache.IPCache;
import ua.mei.minekord.config.MinekordConfig;
import ua.mei.minekord.utils.AuthUtils;

Expand All @@ -43,9 +45,21 @@ public abstract class ServerLoginNetworkHandlerMixin {
@Shadow
ServerLoginNetworkHandler.State state;

@Shadow
@Final
ClientConnection connection;

@Shadow
public abstract void disconnect(Text text);

@Inject(method = "onHello", at = @At("HEAD"), cancellable = true)
public void minekord$checkIp(LoginHelloC2SPacket loginHelloC2SPacket, CallbackInfo ci) {
if (MinekordConfig.Auth.INSTANCE.getIpBasedLogin() && IPCache.INSTANCE.isBlocked(this.connection.getAddress())) {
this.disconnect(Text.translatable("multiplayer.disconnect.ip_banned"));
ci.cancel();
}
}

@Inject(method = "onHello", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;isOnlineMode()Z"), cancellable = true)
public void minekord$replaceUuid(LoginHelloC2SPacket loginHelloC2SPacket, CallbackInfo ci) {
if (MinekordConfig.Auth.INSTANCE.getSnowflakeBasedUuid() && !server.isOnlineMode()) {
Expand Down
6 changes: 6 additions & 0 deletions src/main/kotlin/ua/mei/minekord/cache/IPCache.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package ua.mei.minekord.cache
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.google.gson.reflect.TypeToken
import io.ktor.util.network.address
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents
import net.fabricmc.loader.api.FabricLoader
import net.minecraft.server.MinecraftServer
import java.io.FileReader
import java.io.FileWriter
import java.net.SocketAddress
import java.nio.file.Files
import java.nio.file.Path

Expand Down Expand Up @@ -37,4 +39,8 @@ object IPCache : ServerLifecycleEvents.ServerStarting, ServerLifecycleEvents.Ser
writer.write(gson.toJson(ipCache))
}
}

fun isBlocked(socketAddress: SocketAddress): Boolean {
return blockedIps.contains(socketAddress.address)
}
}
3 changes: 2 additions & 1 deletion src/main/kotlin/ua/mei/minekord/utils/AuthUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ import dev.kord.core.entity.Member
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.runBlocking
import ua.mei.minekord.bot.MinekordBot
import ua.mei.minekord.config.MinekordConfig
import java.util.UUID

object AuthUtils {
fun findMember(name: String): Member? {
return runBlocking {
MinekordBot.guild.members.firstOrNull { it.effectiveName == name }
MinekordBot.guild.members.firstOrNull { it.effectiveName == name && it.roleIds.map { it.value }.containsAll(MinekordConfig.Auth.requiredRoles) }
}
}

Expand Down

0 comments on commit 0be4a07

Please sign in to comment.