Both can start!

This commit is contained in:
samolego 2021-01-26 11:45:48 +01:00
parent ece685bfe4
commit 6e5257514e
11 changed files with 72 additions and 48 deletions

View File

@ -4,6 +4,10 @@ repositories {
} }
} }
loom {
accessWidener("src/main/resources/simpleauth.accesswidener")
}
dependencies { dependencies {
minecraft "com.mojang:minecraft:${rootProject.minecraft_version}" minecraft "com.mojang:minecraft:${rootProject.minecraft_version}"
mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2") mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2")

View File

@ -1,7 +1,6 @@
package org.samo_lego.simpleauth.mixin; package org.samo_lego.simpleauth.mixin;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResult;
import org.samo_lego.simpleauth.event.AuthEventHandler; import org.samo_lego.simpleauth.event.AuthEventHandler;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@ -16,7 +15,7 @@ public class MixinPlayerEntity {
// Player item dropping // Player item dropping
@Inject(method = "dropSelectedItem(Z)Z", at = @At("HEAD"), cancellable = true) @Inject(method = "dropSelectedItem(Z)Z", at = @At("HEAD"), cancellable = true)
private void dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable<Boolean> cir) { private void dropSelectedItem(boolean dropEntireStack, CallbackInfoReturnable<Boolean> cir) {
ServerPlayerEntity player = (ServerPlayerEntity) (Object) this; PlayerEntity player = (PlayerEntity) (Object) this;
ActionResult result = AuthEventHandler.onDropItem(player); ActionResult result = AuthEventHandler.onDropItem(player);
if (result == ActionResult.FAIL) { if (result == ActionResult.FAIL) {

View File

@ -27,31 +27,10 @@ public abstract class MixinServerLoginNetworkHandler {
@Shadow @Shadow
private GameProfile profile; private GameProfile profile;
@Shadow
private int loginTicks;
@Shadow protected abstract GameProfile toOfflineProfile(GameProfile profile); @Shadow protected abstract GameProfile toOfflineProfile(GameProfile profile);
/** @Shadow private ServerLoginNetworkHandler.State state;
* Fake state of current player.
*/
@Unique
private boolean acceptCrackedPlayer = false;
/**
* Mimicks the ticking if autologin is enabled.
* @param ci
*/
@Inject(method = "tick()V", at = @At("HEAD"), cancellable = true)
private void preTick(CallbackInfo ci) {
if (this.acceptCrackedPlayer && config.main.premiumAutologin) {
((ServerLoginNetworkHandler) (Object) this).acceptPlayer();
if (this.loginTicks++ == 600)
((ServerLoginNetworkHandler) (Object) this).disconnect(new TranslatableText("multiplayer.disconnect.slow_login"));
ci.cancel();
}
}
@Inject(method = "acceptPlayer()V", at = @At("HEAD")) @Inject(method = "acceptPlayer()V", at = @At("HEAD"))
private void acceptPlayer(CallbackInfo ci) { private void acceptPlayer(CallbackInfo ci) {
@ -84,7 +63,7 @@ public abstract class MixinServerLoginNetworkHandler {
Matcher matcher = pattern.matcher(playername); Matcher matcher = pattern.matcher(playername);
if(playerCacheMap.containsKey(PlayerEntity.getOfflinePlayerUuid(playername).toString()) || !matcher.matches() || config.main.forcedOfflinePlayers.contains(playername)) { if(playerCacheMap.containsKey(PlayerEntity.getOfflinePlayerUuid(playername).toString()) || !matcher.matches() || config.main.forcedOfflinePlayers.contains(playername)) {
// Player definitely doesn't have a mojang account // Player definitely doesn't have a mojang account
this.acceptCrackedPlayer = true; state = ServerLoginNetworkHandler.State.READY_TO_ACCEPT;
this.profile = packet.getProfile(); this.profile = packet.getProfile();
ci.cancel(); ci.cancel();
@ -109,7 +88,7 @@ public abstract class MixinServerLoginNetworkHandler {
else if(response == HttpURLConnection.HTTP_NO_CONTENT) { else if(response == HttpURLConnection.HTTP_NO_CONTENT) {
// Player doesn't have a Mojang account // Player doesn't have a Mojang account
httpsURLConnection.disconnect(); httpsURLConnection.disconnect();
this.acceptCrackedPlayer = true; state = ServerLoginNetworkHandler.State.READY_TO_ACCEPT;
this.profile = packet.getProfile(); this.profile = packet.getProfile();
ci.cancel(); ci.cancel();

View File

@ -2,8 +2,7 @@
"required": true, "required": true,
"package": "org.samo_lego.simpleauth.mixin", "package": "org.samo_lego.simpleauth.mixin",
"compatibilityLevel": "JAVA_8", "compatibilityLevel": "JAVA_8",
"mixins": [], "mixins": [
"server": [
"MixinPlayerAdvancementTracker", "MixinPlayerAdvancementTracker",
"MixinPlayerEntity", "MixinPlayerEntity",
"MixinPlayerManager", "MixinPlayerManager",

View File

@ -0,0 +1,3 @@
accessWidener v1 named
accessible class net/minecraft/server/network/ServerLoginNetworkHandler$State

View File

@ -25,8 +25,6 @@ dependencies {
mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2") mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2")
modImplementation("net.fabricmc:fabric-loader:${rootProject.loader_version}") modImplementation("net.fabricmc:fabric-loader:${rootProject.loader_version}")
modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_version}") modImplementation("net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_version}")
// Remove the next line if you don't want to depend on the API
modImplementation("me.shedaniel:architectury:${rootProject.architectury_version}:fabric")
compileOnly(project(path: ":common")) { compileOnly(project(path: ":common")) {
transitive = false transitive = false
@ -44,6 +42,31 @@ dependencies {
//modImplementation "carpet:fabric-carpet:${project.minecraft_version}-${project.carpet_core_version}" //modImplementation "carpet:fabric-carpet:${project.minecraft_version}-${project.carpet_core_version}"
// jitpack for quicker updating // jitpack for quicker updating
modImplementation "com.github.gnembon:fabric-carpet:${project.carpet_branch}-SNAPSHOT" modImplementation "com.github.gnembon:fabric-carpet:${project.carpet_branch}-SNAPSHOT"
// Password hashing
// Argon2
implementation "de.mkammerer:argon2-jvm:${argon2_version}"
include "de.mkammerer:argon2-jvm:${argon2_version}"
// BCrypt
implementation "at.favre.lib:bcrypt:${bcrypt_version}"
implementation "at.favre.lib:bytes:${bytes_version}"
include "at.favre.lib:bcrypt:${bcrypt_version}"
include "at.favre.lib:bytes:${bytes_version}"
// Storage
// LevelDB database
implementation 'org.iq80.leveldb:leveldb:0.12'
implementation 'org.iq80.leveldb:leveldb-api:0.12'
include 'org.iq80.leveldb:leveldb:0.12'
include 'org.iq80.leveldb:leveldb-api:0.12'
// MongoDB driver
implementation 'org.mongodb:mongodb-driver-sync:4.1.0'
include 'org.mongodb:mongodb-driver-sync:4.1.0'
// JNA lib
include 'net.java.dev.jna:jna:5.5.0'
} }
processResources { processResources {

View File

@ -1,6 +1,6 @@
package org.samo_lego.simpleauth; package org.samo_lego.simpleauth;
import net.fabricmc.api.DedicatedServerModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.event.player.*; import net.fabricmc.fabric.api.event.player.*;
@ -9,10 +9,10 @@ import net.minecraft.server.MinecraftServer;
import org.samo_lego.simpleauth.commands.*; import org.samo_lego.simpleauth.commands.*;
import org.samo_lego.simpleauth.event.AuthEventHandler; import org.samo_lego.simpleauth.event.AuthEventHandler;
public class SimpleAuthFabric implements DedicatedServerModInitializer { public class SimpleAuthFabric implements ModInitializer {
@Override @Override
public void onInitializeServer() { public void onInitialize() {
SimpleAuth.init(FabricLoader.getInstance().getGameDir()); SimpleAuth.init(FabricLoader.getInstance().getGameDir());
//FabricLoader.getInstance().isModLoaded("carpet"); //FabricLoader.getInstance().isModLoaded("carpet");

View File

@ -14,16 +14,12 @@
}, },
"license": "MIT", "license": "MIT",
"environment": "server", "environment": "*",
"entrypoints": { "entrypoints": {
"server": [ "main": [
"org.samo_lego.simpleauth.SimpleAuth" "org.samo_lego.simpleauth.SimpleAuthFabric"
] ]
}, },
"mixins": [
"mixins.simpleauth.json"
],
"depends": { "depends": {
"fabricloader": ">=0.8.8", "fabricloader": ">=0.8.8",
"fabric": "*" "fabric": "*"

View File

@ -21,7 +21,6 @@ dependencies {
minecraft("com.mojang:minecraft:${rootProject.minecraft_version}") minecraft("com.mojang:minecraft:${rootProject.minecraft_version}")
mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2") mappings("net.fabricmc:yarn:${rootProject.yarn_mappings}:v2")
forge("net.minecraftforge:forge:${rootProject.minecraft_version}-${rootProject.forge_version}") forge("net.minecraftforge:forge:${rootProject.minecraft_version}-${rootProject.forge_version}")
// Remove the next line if you don't want to depend on the API
modCompile("me.shedaniel:architectury:${rootProject.architectury_version}:forge") modCompile("me.shedaniel:architectury:${rootProject.architectury_version}:forge")
compileOnly(project(path: ":common")) { compileOnly(project(path: ":common")) {
@ -33,6 +32,31 @@ dependencies {
shadow(project(path: ":common", configuration: "transformProductionForge")) { shadow(project(path: ":common", configuration: "transformProductionForge")) {
transitive = false transitive = false
} }
// Password hashing
// Argon2
implementation "de.mkammerer:argon2-jvm:${argon2_version}"
include "de.mkammerer:argon2-jvm:${argon2_version}"
// BCrypt
implementation "at.favre.lib:bcrypt:${bcrypt_version}"
implementation "at.favre.lib:bytes:${bytes_version}"
include "at.favre.lib:bcrypt:${bcrypt_version}"
include "at.favre.lib:bytes:${bytes_version}"
// Storage
// LevelDB database
implementation 'org.iq80.leveldb:leveldb:0.12'
implementation 'org.iq80.leveldb:leveldb-api:0.12'
include 'org.iq80.leveldb:leveldb:0.12'
include 'org.iq80.leveldb:leveldb-api:0.12'
// MongoDB driver
implementation 'org.mongodb:mongodb-driver-sync:4.1.0'
include 'org.mongodb:mongodb-driver-sync:4.1.0'
// JNA lib
include 'net.java.dev.jna:jna:5.5.0'
} }
shadowJar { shadowJar {

View File

@ -19,7 +19,6 @@ public class SimpleAuthForge {
SimpleAuth.init(FMLPaths.GAMEDIR.get()); SimpleAuth.init(FMLPaths.GAMEDIR.get());
} }
// Registering the commands
@SubscribeEvent @SubscribeEvent
public void registerCommands(RegisterCommandsEvent event) { public void registerCommands(RegisterCommandsEvent event) {
CommandDispatcher<ServerCommandSource> dispatcher = event.getDispatcher(); CommandDispatcher<ServerCommandSource> dispatcher = event.getDispatcher();
@ -31,9 +30,7 @@ public class SimpleAuthForge {
AuthCommand.registerCommand(dispatcher); AuthCommand.registerCommand(dispatcher);
} }
/**
* Called on server stop.
*/
@SubscribeEvent @SubscribeEvent
public void onStopServer(FMLServerStoppedEvent event) { public void onStopServer(FMLServerStoppedEvent event) {
SimpleAuth.stop(); SimpleAuth.stop();

View File

@ -3,14 +3,14 @@ org.gradle.jvmargs=-Xmx1G
# Fabric properties # Fabric properties
minecraft_version=1.16.5 minecraft_version=1.16.5
yarn_mappings=1.16.5+build.1 yarn_mappings=1.16.5+build.3
loader_version=0.11.1 loader_version=0.11.1
#Fabric api #Fabric api
fabric_version=0.29.3+1.16 fabric_version=0.29.4+1.16
# Forge # Forge
forge_version=36.0.1 forge_version=36.0.4
# Mod Properties # Mod Properties