getRelevantSettings()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
package de.pewpewproject.lasertag.lasertaggame.gamemode;
2
3
import de.pewpewproject.lasertag.block.entity.LaserTargetBlockEntity;
4
import de.pewpewproject.lasertag.damage.DamageSources;
5
import de.pewpewproject.lasertag.lasertaggame.settings.SettingDescription;
6
import net.minecraft.entity.damage.DamageSource;
7
import net.minecraft.server.MinecraftServer;
8
import net.minecraft.server.network.ServerPlayerEntity;
9
import net.minecraft.world.GameRules;
10
11
import java.util.List;
12
13
/**
14
 * Intermediate class implementing stuff common to all damage
15
 * based game modes.
16
 *
17
 * @author Étienne Muser
18
 */
19
public abstract class DamageBasedGameMode extends GameMode {
20
21
22
    public DamageBasedGameMode(String translatableName,
23
                               boolean infiniteTime,
24
                               boolean teamsActive) {
25
        super(translatableName, infiniteTime, teamsActive, true);
26
    }
27
28
    @Override
29
    public List<SettingDescription> getRelevantSettings() {
30
        var list = super.getRelevantSettings();
31
32
        list.add(SettingDescription.LASER_RAY_DAMAGE);
33
        list.add(SettingDescription.LASERTARGET_HEAL);
34
        list.add(SettingDescription.PLAYER_RESET_HEAL);
35
36
        return list;
37
    }
38
39
    @Override
40
    public void onPreGameStart(MinecraftServer server) {
41
        super.onPreGameStart(server);
42
43
        // Set players dont regen health
44
        var gameRules = server.getGameRules();
45
        gameRules.get(GameRules.NATURAL_REGENERATION).set(false, server);
46
    }
47
48
    @Override
49
    public void onPlayerHitLasertarget(MinecraftServer server,
50
                                       ServerPlayerEntity shooter,
51
                                       LaserTargetBlockEntity target) {
52
53
        // Get the managers
54
        var gameManager = server.getOverworld().getServerLasertagManager();
55
        var settingsManager = gameManager.getSettingsManager();
56
57
        long healAmount = settingsManager.get(SettingDescription.LASERTARGET_HEAL);
58
59
        // Regenerate health
60
        shooter.heal(healAmount);
61
62
        super.onPlayerHitLasertarget(server, shooter, target);
63
    }
64
65
    @Override
66
    public void onPlayerHitPlayer(MinecraftServer server, ServerPlayerEntity shooter, ServerPlayerEntity target) {
67
68
        // Get the managers
69
        var gameManager = server.getOverworld().getServerLasertagManager();
70
        var teamsManager = gameManager.getTeamsManager();
71
        var activationManager = gameManager.getActivationManager();
72
73
        // Get the teams of shooter and target
74
        var shooterTeam = teamsManager.getTeamOfPlayer(shooter.getUuid());
75
        var targetTeam = teamsManager.getTeamOfPlayer(target.getUuid());
76
77
        // Check that hit player is not in same team as firing player
78
        if (shooterTeam.equals(targetTeam)) {
79
            return;
80
        }
81
82
        // Check if player is deactivated
83
        if (activationManager.isDeactivated(target.getUuid())) {
84
            return;
85
        }
86
87
        // Get the damage amount
88
        long damageAmount = gameManager.getSettingsManager().get(SettingDescription.LASER_RAY_DAMAGE);
89
90
        // Damage the target
91
        target.damage(DamageSources.laser(shooter), damageAmount);
92
93
        super.onPlayerHitPlayer(server, shooter, target);
94
    }
95
96
    @Override
97
    public void onPlayerDeath(MinecraftServer server, ServerPlayerEntity player, DamageSource source) {
98
99
        // Get the managers
100
        var gameManager = server.getOverworld().getServerLasertagManager();
101
        var settingsManager = gameManager.getSettingsManager();
102
103
        // If the player got damaged by laser
104
        if (source.name.equals("laser")) {
105
106
            // Get the shooter
107
            var shooter = (ServerPlayerEntity)source.getAttacker();
108
109
            // Heal the shooter
110
            long healAmount = settingsManager.get(SettingDescription.PLAYER_RESET_HEAL);
111
            shooter.heal(healAmount);
112
        }
113
    }
114
115
    @Override
116
    public void onGameEnd(MinecraftServer server) {
117
        super.onGameEnd(server);
118
119
        // Set players regen health
120
        var gameRules = server.getGameRules();
121
        gameRules.get(GameRules.NATURAL_REGENERATION).set(true, server);
122
    }
123
}
124