aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/los/numeros/HidersAndDiggers/Main.java
blob: 461a6407306c223badb804d6f1062ddce7cc003c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package los.numeros.HidersAndDiggers;

import java.util.Random;
import java.util.UUID;
import java.util.Collection;
import java.util.Date;
import java.util.function.BooleanSupplier;

import los.numeros.GameEngine.Engine;
import los.numeros.GameEngine.Module;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.minecraft.network.MessageType;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import los.numeros.HidersAndDiggers.modules.*;

public class Main implements Engine {
  BooleanSupplier running = () -> { return true; };
  Module modules[] = new Module[10];

  public Main(ServerCommandSource source, int numDiggers) {
    int i;
    MinecraftServer server = source.getMinecraftServer();
    ServerPlayerEntity[] players, diggers, hiders;
    Random r = new Random(new Date().getTime());

    /* get all the players on the server */
    Collection<ServerPlayerEntity> playerCollection = PlayerLookup.all(server);
    players = playerCollection.toArray(new ServerPlayerEntity[playerCollection.size()]);

    /* create the hiders and diggers array of appropriate sizes */
    diggers = new ServerPlayerEntity[numDiggers];
    hiders = new ServerPlayerEntity[players.length - numDiggers];

    /* too few players to start the game */
    if (players.length <= 2) {
      /* send a message letting everyone know there aren't enough players to start the game */
      server.getPlayerManager().broadcastChatMessage(
        new LiteralText("Not enough players to start the game"),
        MessageType.SYSTEM,
        new UUID(0, 0)
      );
      return;
    }

    /* creates an array of diggers */
    for (i = 0; numDiggers > 0; numDiggers--, i++) {
      /* TODO: make sure the same person isn't picked to be all of the diggers */
      diggers[i] = players[r.nextInt(players.length)];
    }

    /* creates an array of hiders */
    i = 0;
    for (ServerPlayerEntity p : players) {
      /* add all players who arent diggers to the hiders array */
      if (!hasPlayer(diggers, p)) {
        hiders[i++] = p;
      }
    }

    /* populate the modules */
    modules[0] = new MainModule(diggers, hiders, players, source);
    modules[1] = new GameClockModule(diggers, hiders, players, server);

    /* start the game */
    Engine.StartEngine(running, modules);
  }

  private boolean hasPlayer(ServerPlayerEntity[] array, ServerPlayerEntity player)
  {
    for (ServerPlayerEntity p : array) {
      if (p == player)
        return true;
    }
    return false;
  }
}