aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/world/anhgelus/manhunt/Manhunt.java50
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) {