diff options
| author | anhgelus <anhgelus.morhtuuzh@proton.me> | 2024-07-25 20:38:42 +0000 |
|---|---|---|
| committer | anhgelus <anhgelus.morhtuuzh@proton.me> | 2024-07-25 20:38:42 +0000 |
| commit | 5214504e588a30c5d595be5f6e76b6952d9a7982 (patch) | |
| tree | 8473ab1a2295c47b3c40cd8f23fc2e36959e7573 /src/main/java/world | |
| parent | f002350e946a823faf8722718576a8e3d77ccff0 (diff) | |
feat(): if all speedrunners dead, end game
Diffstat (limited to 'src/main/java/world')
| -rw-r--r-- | src/main/java/world/anhgelus/manhunt/Manhunt.java | 50 |
1 files changed, 31 insertions, 19 deletions
diff --git a/src/main/java/world/anhgelus/manhunt/Manhunt.java b/src/main/java/world/anhgelus/manhunt/Manhunt.java index 58958c1..6499f5a 100644 --- a/src/main/java/world/anhgelus/manhunt/Manhunt.java +++ b/src/main/java/world/anhgelus/manhunt/Manhunt.java @@ -5,32 +5,29 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.RequiredArgumentBuilder; import com.mojang.serialization.DataResult; import net.fabricmc.api.ModInitializer; - import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; +import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; import net.minecraft.command.EntitySelector; import net.minecraft.command.arguments.EntityArgumentType; import net.minecraft.datafixer.NbtOps; -import net.minecraft.entity.effect.StatusEffect; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.*; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtHelper; import net.minecraft.nbt.Tag; -import net.minecraft.server.MinecraftServer; +import net.minecraft.server.PlayerManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; -import net.minecraft.util.registry.Registry; -import net.minecraft.util.registry.RegistryKey; +import net.minecraft.world.GameMode; import net.minecraft.world.World; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; +import java.util.UUID; import static com.mojang.brigadier.builder.LiteralArgumentBuilder.literal; @@ -41,8 +38,8 @@ public class Manhunt implements ModInitializer { public static final Logger LOGGER = LogManager.getLogger("manhunt"); public static final String MOD_ID = "manhunt"; - private final Set<ServerPlayerEntity> hunters = new HashSet<>(); - private final Set<ServerPlayerEntity> speedrunners = new HashSet<>(); + private final Set<UUID> hunters = new HashSet<>(); + private final Set<UUID> speedrunners = new HashSet<>(); @Override public void onInitialize() { @@ -64,25 +61,27 @@ public class Manhunt implements ModInitializer { final RequiredArgumentBuilder<ServerCommandSource, EntitySelector> teamP = RequiredArgumentBuilder.argument("player", EntityArgumentType.player()); teamP.then(LiteralArgumentBuilder.<ServerCommandSource>literal("hunter").executes(context -> { final ServerPlayerEntity p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player"); - speedrunners.remove(p); - hunters.add(p); + speedrunners.remove(p.getUuid()); + hunters.add(p.getUuid()); return Command.SINGLE_SUCCESS; })) .then(LiteralArgumentBuilder.<ServerCommandSource>literal("speedrunner").executes(context -> { final ServerPlayerEntity p = (ServerPlayerEntity) EntityArgumentType.getEntity(context, "player"); - hunters.remove(p); - speedrunners.add(p); + hunters.remove(p.getUuid()); + speedrunners.add(p.getUuid()); return Command.SINGLE_SUCCESS; })); team.then(teamP); final LiteralArgumentBuilder<ServerCommandSource> start = literal("start"); start.executes(context -> { - for (final ServerPlayerEntity hunter : hunters) { - hunter.giveItemStack(new ItemStack(Items.COMPASS)); + final PlayerManager pm = context.getSource().getMinecraftServer().getPlayerManager(); + for (final UUID uuid : hunters) { + final ServerPlayerEntity hunter = pm.getPlayer(uuid); + assert hunter != null; + hunter.giveItemStack(new ItemStack(Items.COMPASS)); hunter.addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 30, 255)); } - final MinecraftServer server = context.getSource().getMinecraftServer(); - for (final ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) { + for (final ServerPlayerEntity player : pm.getPlayerList()) { player.kill(); } return Command.SINGLE_SUCCESS; @@ -93,6 +92,19 @@ public class Manhunt implements ModInitializer { command.then(start); CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> dispatcher.register(command)); + + ServerPlayerEvents.AFTER_RESPAWN.register((oldPlayer, newPlayer, alive) -> { + if (alive) return; + final UUID uuid = oldPlayer.getUuid(); + if (!speedrunners.contains(uuid)) return; + speedrunners.remove(uuid); + if (!speedrunners.isEmpty()) return; + for (final ServerPlayerEntity player : newPlayer.server.getPlayerManager().getPlayerList()) { + player.setGameMode(GameMode.SPECTATOR); + hunters.remove(player.getUuid()); + speedrunners.remove(player.getUuid()); + } + }); } private void updateCompass(ServerPlayerEntity player, ServerPlayerEntity tracked) { |
