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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
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.sound.SoundEvents;
import net.minecraft.text.LiteralText;
import net.minecraft.text.Style;
import net.minecraft.text.TextColor;
public class GameClockModule implements Module {
private ServerPlayerEntity[] diggers, hiders, players;
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[], ServerPlayerEntity[] players, MinecraftServer server) {
this.diggers = diggers;
this.hiders = hiders;
this.players = players;
this.server = server;
}
private void playCountdownClick() {
for (ServerPlayerEntity p : players) {
p.playSound(SoundEvents.BLOCK_NOTE_BLOCK_HAT, 0.75f, 0.1f);
}
}
private void preGameClock() {
server.getPlayerManager().broadcastChatMessage(
new LiteralText("20s").setStyle(Style.EMPTY.withColor(TextColor.parse("light_green"))),
MessageType.SYSTEM,
new UUID(0, 0)
);
playCountdownClick();
minecraftTick.delayCallback(MinecraftTick.secondToTick(10), (tickDelay) -> {
server.getPlayerManager().broadcastChatMessage(
new LiteralText("10s").setStyle(Style.EMPTY.withColor(TextColor.parse("light_green"))),
MessageType.SYSTEM,
new UUID(0, 0)
);
playCountdownClick();
});
/* countdown 5 -> 1 */
for (i = 15, j = 5; j > 0; i++, j--) {
minecraftTick.delayCallback(MinecraftTick.secondToTick(i), (tickDelay) -> {
final int countdown = Math.abs(MinecraftTick.tickToSecond(tickDelay) - 20);
final String color = countdown <= 3 ? "red" : "yellow";
playCountdownClick();
server.getPlayerManager().broadcastChatMessage(
new LiteralText(String.valueOf(countdown + "s"))
.setStyle(Style.EMPTY.withColor(TextColor.parse(color))),
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)
);
for (ServerPlayerEntity p : players) {
p.playSound(SoundEvents.BLOCK_NOTE_BLOCK_BASEDRUM, 1f, 0.5f);
}
});
}
@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;
}
}
|