diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index eb7723e8..1d04c622 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -472,6 +472,9 @@ public class CarpetSettings @Rule(desc = "Enables /player command to control/spawn players", category = COMMAND) public static String commandPlayer = "ops"; + @Rule(desc = "Spawn offline players in online mode if online-mode player with specified name does not exist", category = COMMAND) + public static boolean allowSpawningOfflinePlayers = true; + @Rule(desc = "Allows to track mobs AI via /track command", category = COMMAND) public static String commandTrackAI = "ops"; diff --git a/src/main/java/carpet/commands/PlayerCommand.java b/src/main/java/carpet/commands/PlayerCommand.java index ee52afe4..eacfe1bd 100644 --- a/src/main/java/carpet/commands/PlayerCommand.java +++ b/src/main/java/carpet/commands/PlayerCommand.java @@ -192,9 +192,14 @@ public class PlayerCommand GameProfile profile = server.getUserCache().findByName(playerName); if (profile == null) { - Messenger.m(context.getSource(), "r Player "+playerName+" is either banned by Mojang, or auth servers are down. " + - "Banned players can only be summoned in Singleplayer and in servers in off-line mode."); - return true; + if (!CarpetSettings.allowSpawningOfflinePlayers) + { + Messenger.m(context.getSource(), "r Player "+playerName+" is either banned by Mojang, or auth servers are down. " + + "Banned players can only be summoned in Singleplayer and in servers in off-line mode."); + return true; + } else { + profile = new GameProfile(PlayerEntity.getOfflinePlayerUuid(playerName), playerName); + } } if (manager.getUserBanList().contains(profile)) { diff --git a/src/main/java/carpet/patches/EntityPlayerMPFake.java b/src/main/java/carpet/patches/EntityPlayerMPFake.java index b0cf86f3..8d6ca7d2 100644 --- a/src/main/java/carpet/patches/EntityPlayerMPFake.java +++ b/src/main/java/carpet/patches/EntityPlayerMPFake.java @@ -1,5 +1,6 @@ package carpet.patches; +import carpet.CarpetSettings; import com.mojang.authlib.GameProfile; import net.minecraft.block.entity.SkullBlockEntity; import net.minecraft.entity.Entity; @@ -22,7 +23,6 @@ import net.minecraft.util.UserCache; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.GameMode; import net.minecraft.world.World; -import net.minecraft.world.dimension.DimensionType; import carpet.fakes.ServerPlayerEntityInterface; import carpet.utils.Messenger; @@ -45,7 +45,15 @@ public class EntityPlayerMPFake extends ServerPlayerEntity finally { UserCache.setUseRemote(server.isDedicated() && server.isOnlineMode()); } - if (gameprofile == null) return null; + if (gameprofile == null) + { + if (!CarpetSettings.allowSpawningOfflinePlayers) + { + return null; + } else { + gameprofile = new GameProfile(PlayerEntity.getOfflinePlayerUuid(username), username); + } + } if (gameprofile.getProperties().containsKey("textures")) { gameprofile = SkullBlockEntity.loadProperties(gameprofile);