de.pewpewproject.lasertag.lasertaggame.state.management.server.implementation.MusicManager   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 50
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A playOutro(ArenaType) 0 2 1
A tick(ArenaType,boolean) 0 12 3
A MusicManager(MinecraftServer) 0 2 1
A playIntro(ArenaType) 0 2 1
A reset() 0 2 1
A stopMusic() 0 12 1
1
package de.pewpewproject.lasertag.lasertaggame.state.management.server.implementation;
2
3
import de.pewpewproject.lasertag.lasertaggame.state.management.server.IMusicManager;
4
import de.pewpewproject.lasertag.worldgen.chunkgen.type.ArenaType;
5
import net.minecraft.network.packet.s2c.play.StopSoundS2CPacket;
6
import net.minecraft.server.MinecraftServer;
7
import net.minecraft.sound.SoundCategory;
8
import net.minecraft.util.math.BlockPos;
9
10
/**
11
 * Implementation of IMusicManager for the server lasertag game
12
 *
13
 * @author Étienne Muser
14
 */
15
public class MusicManager implements IMusicManager {
16
17
    private static final float SOUND_VOLUME = 0.3f;
18
19
    private final MinecraftServer server;
20
21
    private boolean playingThisMinute = false;
22
23
    public MusicManager(MinecraftServer server) {
24
        this.server = server;
25
    }
26
27
    public void playIntro(ArenaType arenaType) {
28
        server.getOverworld().playSound(null, BlockPos.ORIGIN, arenaType.introMusic, SoundCategory.MUSIC, SOUND_VOLUME, 1.0f);
29
    }
30
31
    public void tick(ArenaType arenaType, boolean isLastMinute) {
32
33
        // Do not play music in the last minute
34
        if (isLastMinute) {
35
            return;
36
        }
37
38
        if (this.playingThisMinute) {
39
            server.getOverworld().playSound(null, BlockPos.ORIGIN, arenaType.music, SoundCategory.MUSIC, SOUND_VOLUME, 1.0f);
40
        }
41
42
        this.playingThisMinute = !this.playingThisMinute;
43
    }
44
45
    public void playOutro(ArenaType arenaType) {
46
        server.getOverworld().playSound(null, BlockPos.ORIGIN, arenaType.outroMusic, SoundCategory.MUSIC, SOUND_VOLUME, 1.0f);
47
    }
48
49
    @Override
50
    public void stopMusic() {
51
52
        // Get all players from the server
53
        var players = server.getPlayerManager().getPlayerList();
54
55
        // Create the stop sound packet
56
        // null, null to stop all sounds
57
        var stopSoundPacket = new StopSoundS2CPacket(null, null);
58
59
        // Send stop sound packet to every player
60
        players.forEach(p -> p.networkHandler.sendPacket(stopSoundPacket));
61
    }
62
63
    public void reset() {
64
        this.playingThisMinute = false;
65
    }
66
}
67