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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
package los.numeros.HidersAndDiggers.modules;
import java.util.UUID;
import los.numeros.GameEngine.Module;
import los.numeros.utils.MinecraftTick;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.network.MessageType;
import net.minecraft.network.packet.s2c.play.TitleS2CPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.TextColor;
public class GameClockModule implements Module {
private ServerPlayerEntity[] diggers, hiders;
private MinecraftServer server;
private MinecraftTick minecraftTick = new MinecraftTick();
private int i, j;
private LiteralText diggersString;
private long tickCounter;
private boolean hidersVisible = false;
public GameClockModule(ServerPlayerEntity diggers[], ServerPlayerEntity hiders[], MinecraftServer server) {
this.diggers = diggers;
this.hiders = hiders;
this.server = server;
}
private void preGameClock() {
server.getPlayerManager().broadcastChatMessage(
new LiteralText("20s"),
MessageType.SYSTEM,
new UUID(0, 0)
);
minecraftTick.delayCallback(MinecraftTick.secondToTick(10), (tickDelay) -> {
server.getPlayerManager().broadcastChatMessage(
new LiteralText("10s"),
MessageType.SYSTEM,
new UUID(0, 0)
);
});
/* countdown 5 -> 1 */
for (i = 15, j = 5; j > 0; i++, j--) {
minecraftTick.delayCallback(MinecraftTick.secondToTick(i), (tickDelay) -> {
server.getPlayerManager().broadcastChatMessage(
new LiteralText(String.valueOf(Math.abs(MinecraftTick.tickToSecond(tickDelay) - 20)) + "s"),
MessageType.SYSTEM,
new UUID(0, 0)
);
});
}
/* wait 20 seconds */
minecraftTick.delayCallback(MinecraftTick.secondToTick(20), (tickDelay) -> {
/* make title screen adhere to gammar */
if (diggers.length > 1) {
diggersString = new LiteralText("The Diggers are Digging");
} else {
diggersString = new LiteralText("The Digger is Digging");
}
/* style text */
diggersString.setStyle(Style.EMPTY.withColor(TextColor.parse("red")));
/* send chat message */
server.getPlayerManager().broadcastChatMessage(
diggersString,
MessageType.SYSTEM,
new UUID(0, 0)
);
/* set title screen */
server.getPlayerManager().sendToAll(
new TitleS2CPacket(TitleS2CPacket.Action.TITLE, diggersString)
);
});
}
@Override
public int init() {
preGameClock();
/* TEST: this may keep on running after the game has ended :( */
ServerTickEvents.END_SERVER_TICK.register(event -> {
if (this.tickCounter == MinecraftTick.secondToTick(120) && !this.hidersVisible) {
this.hidersVisible = true;
this.tickCounter = 0L;
for (ServerPlayerEntity p : this.hiders) {
p.addStatusEffect(new StatusEffectInstance(StatusEffects.GLOWING, 200000000, 10, false, false));
}
server.getPlayerManager().broadcastChatMessage(
new LiteralText("Hiders are visible"),
MessageType.SYSTEM,
new UUID(0, 0)
);
} else if (this.tickCounter == MinecraftTick.secondToTick(10) && this.hidersVisible) {
this.hidersVisible = false;
for (ServerPlayerEntity p : this.hiders) {
p.clearStatusEffects();
}
server.getPlayerManager().broadcastChatMessage(
new LiteralText("Hiders are invisible"),
MessageType.SYSTEM,
new UUID(0, 0)
);
}
tickCounter++;
});
return 0;
}
@Override
public int end() {
return 0;
}
}
|