From 74e9ccd687efe63da04b0a861cfef8579f08ba3e Mon Sep 17 00:00:00 2001 From: Liyan Zhao Date: Wed, 5 Feb 2025 22:18:26 +0800 Subject: [PATCH] feat: offlineFakePlayers --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- .../carpetslsaddition/SLSCarpetSettings.java | 3 +++ .../mixin/carpet/MixinPlayerCommand.java | 27 +++++++++++++++++++ .../assets/slsaddition/lang/en_us.json | 1 + .../assets/slsaddition/lang/zh_cn.json | 1 + src/main/resources/slsaddition.mixins.json | 1 + 7 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/github/zly2006/carpetslsaddition/mixin/carpet/MixinPlayerCommand.java diff --git a/build.gradle b/build.gradle index e3cebcd..38ca92e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.7-SNAPSHOT' + id 'fabric-loom' version '1.9.2' id 'maven-publish' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19cfad9..e48eca5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java index 34597d4..3274ec5 100644 --- a/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java +++ b/src/main/java/com/github/zly2006/carpetslsaddition/SLSCarpetSettings.java @@ -60,6 +60,9 @@ public class SLSCarpetSettings { @Rule(categories = {SLSA, RuleCategory.FEATURE}) public static boolean armadilloImmediateDespawns = false; + @Rule(categories = {SLSA, RuleCategory.FEATURE}) + public static boolean offlineFakePlayers = false; + @Rule(categories = {SLSA, RuleCategory.FEATURE}) public static int netherPortalSize = 21; } diff --git a/src/main/java/com/github/zly2006/carpetslsaddition/mixin/carpet/MixinPlayerCommand.java b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/carpet/MixinPlayerCommand.java new file mode 100644 index 0000000..394ac0d --- /dev/null +++ b/src/main/java/com/github/zly2006/carpetslsaddition/mixin/carpet/MixinPlayerCommand.java @@ -0,0 +1,27 @@ +package com.github.zly2006.carpetslsaddition.mixin.carpet; + +import carpet.commands.PlayerCommand; +import com.github.zly2006.carpetslsaddition.SLSCarpetSettings; +import com.mojang.authlib.GameProfile; +import net.minecraft.util.UserCache; +import net.minecraft.util.Uuids; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; +import java.util.Optional; + +@Mixin(PlayerCommand.class) +public abstract class MixinPlayerCommand { + + @Redirect( + method = "cantSpawn", + at = @At(value = "INVOKE", target = "Lnet/minecraft/util/UserCache;findByName(Ljava/lang/String;)Ljava/util/Optional;") + ) + private static Optional redirectFindByName(UserCache instance, String playerName) { + if (SLSCarpetSettings.offlineFakePlayers) { + return Optional.of(Uuids.getOfflinePlayerProfile(playerName)); + } else { + return instance.findByName(playerName); + } + } +} diff --git a/src/main/resources/assets/slsaddition/lang/en_us.json b/src/main/resources/assets/slsaddition/lang/en_us.json index f52d04f..e11368c 100644 --- a/src/main/resources/assets/slsaddition/lang/en_us.json +++ b/src/main/resources/assets/slsaddition/lang/en_us.json @@ -48,6 +48,7 @@ "carpet.rule.elytraCraftable.desc": "Make elytra craftable for Minecraft 1.20.6+ (eltra wont disappear when crafting)", "carpet.rule.botMaxOnlineTime.desc": "Set the maximum living time of the bot which create by carpet sls addition.", "carpet.rule.spectatorCannotUseLeash.desc": "If a player is a spectator, they cannot use the leash.", + "carpet.rule.offlineFakePlayers.desc": "假人强制离线uuid", "carpet.rule.armadilloImmediateDespawns.desc": "Armadillos will despawn immediately if they are 128 blocks away from the player.", "carpet.rule.skipTicksForJoblessVillager.extra.0": "Set to 0 to maintain the vanilla behavior", diff --git a/src/main/resources/assets/slsaddition/lang/zh_cn.json b/src/main/resources/assets/slsaddition/lang/zh_cn.json index 3199058..bcfdaa2 100644 --- a/src/main/resources/assets/slsaddition/lang/zh_cn.json +++ b/src/main/resources/assets/slsaddition/lang/zh_cn.json @@ -48,6 +48,7 @@ "carpet.rule.printStackTraceOnVillagerSpawn.desc": "当有村民生成时,将会生成一份包含调用栈的报告,显示在控制端中", "carpet.rule.elytraCraftable.desc": "使鞘翅在 1.20.6+ 可合成 (合成时不会消失)", "carpet.rule.botMaxOnlineTime.desc": "设置由Carpet SLS Addition生成的Bot的最大存活时间", + "carpet.rule.offlineFakePlayers.desc": "假人强制离线uuid", "carpet.rule.spectatorCannotUseLeash.desc": "若启用,则观察者模式的玩家不再能使用拴绳,已经拴住动物的拴绳也会自动失效", "carpet.rule.skipTicksForJoblessVillager.extra.0": "设置为0则保持原版行为", diff --git a/src/main/resources/slsaddition.mixins.json b/src/main/resources/slsaddition.mixins.json index a80a538..5183c54 100644 --- a/src/main/resources/slsaddition.mixins.json +++ b/src/main/resources/slsaddition.mixins.json @@ -10,6 +10,7 @@ "block.MixinNetherPortal", "block.MixinRedstoneWireBlock", "carpet.MixinEntityPlayerMPFake", + "carpet.MixinPlayerCommand", "datapack.MixinVanillaResourcePackProvider", "elytra.MixinElytraItem", "elytra.MixinItem",