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

Complexity

Total Complexity 10

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 53
dl 0
loc 91
rs 10
c 0
b 0
f 0
wmc 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A setLastHitTime(BlockPos,long) 0 11 1
A deactivate(BlockPos) 0 13 1
A setDeactivated(BlockPos,boolean) 0 14 2
A LasertargetsManager(ILasertargetState,ISettingsManager,MinecraftServer) 0 4 1
A isAlreadyHitBy(BlockPos,UUID) 0 3 1
A isDeactivated(BlockPos) 0 3 1
A resetAlreadyHitBy() 0 5 1
A reset() 0 5 1
A setHitBy(BlockPos,UUID) 0 11 1
1
package de.pewpewproject.lasertag.lasertaggame.state.management.server.synced.implementation;
2
3
import de.pewpewproject.lasertag.common.util.ThreadUtil;
4
import de.pewpewproject.lasertag.lasertaggame.settings.SettingDescription;
5
import de.pewpewproject.lasertag.lasertaggame.state.management.server.synced.ILasertargetsManager;
6
import de.pewpewproject.lasertag.lasertaggame.state.management.server.synced.ISettingsManager;
7
import de.pewpewproject.lasertag.lasertaggame.state.synced.ILasertargetState;
8
import de.pewpewproject.lasertag.networking.NetworkingConstants;
9
import de.pewpewproject.lasertag.networking.server.ServerEventSending;
10
import io.netty.buffer.Unpooled;
11
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
12
import net.minecraft.network.PacketByteBuf;
13
import net.minecraft.server.MinecraftServer;
14
import net.minecraft.util.math.BlockPos;
15
16
import java.util.UUID;
17
import java.util.concurrent.TimeUnit;
18
19
/**
20
 * Implementation of ILasertargetsManager for the lasertag game
21
 *
22
 * @author Étienne Muser
23
 */
24
public class LasertargetsManager implements ILasertargetsManager {
25
26
    private final ILasertargetState lasertargetState;
27
    private final ISettingsManager settingsManager;
28
    private final MinecraftServer server;
29
30
    public LasertargetsManager(ILasertargetState lasertargetState, ISettingsManager settingsManager, MinecraftServer server) {
31
        this.lasertargetState = lasertargetState;
32
        this.settingsManager = settingsManager;
33
        this.server = server;
34
    }
35
36
    @Override
37
    public void setLastHitTime(BlockPos lasertargetPos, long hitTime) {
38
39
        lasertargetState.setLastHitTime(lasertargetPos, hitTime);
40
41
        var buf = new PacketByteBuf(Unpooled.buffer());
42
43
        buf.writeBlockPos(lasertargetPos);
44
        buf.writeLong(hitTime);
45
46
        ServerEventSending.sendToEveryone(server, NetworkingConstants.SET_LAST_HIT_TIME, buf);
47
    }
48
49
    @Override
50
    public void deactivate(BlockPos lasertargetPos) {
51
52
        setDeactivated(lasertargetPos, true);
53
54
        // Reactivate after configured amount of seconds
55
        var deactivationThread = ThreadUtil.createScheduledExecutor("server-lasertag-target-deactivation-thread-%d");
56
        deactivationThread.schedule(() -> {
57
58
            setDeactivated(lasertargetPos, false);
59
60
            deactivationThread.shutdownNow();
61
        }, settingsManager.<Long>get(SettingDescription.LASERTARGET_DEACTIVATE_TIME), TimeUnit.SECONDS);
62
    }
63
64
    @Override
65
    public boolean isDeactivated(BlockPos lasertargetPos) {
66
        return lasertargetState.isDeactivated(lasertargetPos);
67
    }
68
69
    @Override
70
    public void setHitBy(BlockPos lasertargetPos, UUID playerUuid) {
71
72
        lasertargetState.setHitBy(lasertargetPos, playerUuid);
73
74
        var buf = new PacketByteBuf(Unpooled.buffer());
75
76
        buf.writeBlockPos(lasertargetPos);
77
        buf.writeUuid(playerUuid);
78
79
        ServerEventSending.sendToEveryone(server, NetworkingConstants.SET_HIT_BY, buf);
80
    }
81
82
    @Override
83
    public boolean isAlreadyHitBy(BlockPos lasertargetPos, UUID playerUuid) {
84
        return lasertargetState.isAlreadyHitBy(lasertargetPos, playerUuid);
85
    }
86
87
    @Override
88
    public void reset() {
89
90
        lasertargetState.reset();
91
        ServerEventSending.sendToEveryone(server, NetworkingConstants.LASERTARGETS_RESET, PacketByteBufs.empty());
92
    }
93
94
    @Override
95
    public void resetAlreadyHitBy() {
96
97
        lasertargetState.resetAlreadyHitBy();
98
        ServerEventSending.sendToEveryone(server, NetworkingConstants.LASERTARGETS_ALREADY_HIT_BY_RESET, PacketByteBufs.empty());
99
    }
100
101
    private void setDeactivated(BlockPos lasertargetPos, boolean isDeactivated) {
102
103
        if (isDeactivated) {
104
            lasertargetState.setDeactivated(lasertargetPos);
105
        } else {
106
            lasertargetState.setActivated(lasertargetPos);
107
        }
108
109
        var buf = new PacketByteBuf(Unpooled.buffer());
110
111
        buf.writeBlockPos(lasertargetPos);
112
        buf.writeBoolean(isDeactivated);
113
114
        ServerEventSending.sendToEveryone(server, NetworkingConstants.SET_LASERTARGET_DEACTIVATED, buf);
115
    }
116
}
117