/
HealthName.java
82 lines (71 loc) · 3.53 KB
/
HealthName.java
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
package com.github.games647.healthname;
import com.github.games647.healthname.config.Settings;
import com.google.inject.Inject;
import com.google.inject.Injector;
import java.util.Optional;
import org.slf4j.Logger;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.game.state.GameInitializationEvent;
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.event.game.state.GameStartedServerEvent;
import org.spongepowered.api.event.game.state.GameStoppingServerEvent;
import org.spongepowered.api.plugin.Plugin;
import org.spongepowered.api.scoreboard.Scoreboard;
import org.spongepowered.api.scoreboard.critieria.Criteria;
import org.spongepowered.api.scoreboard.displayslot.DisplaySlots;
import org.spongepowered.api.scoreboard.objective.Objective;
import org.spongepowered.api.scoreboard.objective.displaymode.ObjectiveDisplayModes;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;
@Plugin(id = PomData.ARTIFACT_ID, name = PomData.NAME, version = PomData.VERSION,
url = PomData.URL, description = PomData.DESCRIPTION)
public class HealthName {
private final Logger logger;
private final Injector injector;
private final Settings configuration;
@Inject
public HealthName(Logger logger, Injector injector, Settings settings) {
this.logger = logger;
this.injector = injector;
this.configuration = settings;
}
@Listener //During this state, the plugin gets ready for initialization. Logger and config
public void onPreInit(GamePreInitializationEvent preInitEvent) {
configuration.load();
}
@Listener
//During this state, the plugin should finish any work needed in order to be functional. Commands register + events
public void onInit(GameInitializationEvent initEvent) {
//register events
Sponge.getEventManager().registerListeners(this, injector.getInstance(DamageListener.class));
Sponge.getEventManager().registerListeners(this, injector.getInstance(ConnectionListener.class));
}
@Listener
//Scoreboards are loaded when the world is loaded so load it here
public void onGameStarted(GameStartedServerEvent gameStartedServerEvent) {
Optional<Scoreboard> serverScoreboard = Sponge.getServer().getServerScoreboard();
if (serverScoreboard.isPresent()) {
Scoreboard globalScoreboard = serverScoreboard.get();
if (configuration.getConfig().isNametagHealth()) {
globalScoreboard.getObjective(PomData.ARTIFACT_ID).ifPresent(globalScoreboard::removeObjective);
Objective objective = Objective.builder()
.name(PomData.ARTIFACT_ID)
.displayName(Text.of(TextColors.DARK_RED, "Health"))
.criterion(Criteria.DUMMY)
.objectiveDisplayMode(ObjectiveDisplayModes.INTEGER)
.build();
globalScoreboard.addObjective(objective);
globalScoreboard.updateDisplaySlot(objective, DisplaySlots.BELOW_NAME);
}
} else {
logger.warn("Global scoreboard couldn't be loaded");
}
}
@Listener
public void onGameStarted(GameStoppingServerEvent gameStoppingServerEvent) {
Sponge.getServer().getServerScoreboard()
.ifPresent(scoreboard -> scoreboard.getObjective(PomData.ARTIFACT_ID)
.ifPresent(scoreboard::removeObjective));
}
}