Skip to content

Commit

Permalink
Listen to heal events
Browse files Browse the repository at this point in the history
  • Loading branch information
games647 committed Jan 6, 2016
1 parent cf8ad7f commit 23c7680
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 35 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# HealhName
# HealthName

### Description

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.github.games647.healthname;

import com.github.games647.healthname.HealthName;
import java.util.Optional;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.scoreboard.Team;
import org.spongepowered.api.text.Text;

public class ConnectionListener {

private final HealthName plugin;

public ConnectionListener(HealthName plugin) {
this.plugin = plugin;
}

@Listener
public void onJoin(ClientConnectionEvent.Join joinEvent) {
Player player = joinEvent.getTargetEntity();
//everyone should have a global scoreboard to see the health from others
if (plugin.getConfig().isNametagHealth() || plugin.getConfig().isBelowNameHealth()) {
//don't override the old scoreboard if the feature isn't needed
player.setScoreboard(plugin.getGlobalScoreboard());
}
}

@Listener
public void onQuit(ClientConnectionEvent.Disconnect disconnectEvent) {
String playerName = disconnectEvent.getTargetEntity().getName();
//Clean up scoreboard in order to prevent to big ones
plugin.getGlobalScoreboard().removeScores(Text.of(playerName));
Optional<Team> optionalTeam = plugin.getGlobalScoreboard().getTeam(playerName);
if (optionalTeam.isPresent()) {
Team team = optionalTeam.get();
team.unregister();
}
}
}
59 changes: 25 additions & 34 deletions src/main/java/com/github/games647/healthname/DamageListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.entity.DamageEntityEvent;
import org.spongepowered.api.event.network.ClientConnectionEvent;
import org.spongepowered.api.event.entity.HealEntityEvent;
import org.spongepowered.api.scoreboard.Scoreboard;
import org.spongepowered.api.scoreboard.Team;
import org.spongepowered.api.scoreboard.displayslot.DisplaySlots;
Expand All @@ -28,24 +28,13 @@ public DamageListener(HealthName plugin) {
}

@Listener
public void onJoin(ClientConnectionEvent.Join joinEvent) {
Player player = joinEvent.getTargetEntity();
//everyone should have a global scoreboard to see the health from others
if (plugin.getConfig().isNametagHealth() || plugin.getConfig().isBelowNameHealth()) {
//don't override the old scoreboard if the feature isn't needed
player.setScoreboard(plugin.getGlobalScoreboard());
}
}

@Listener
public void onQuit(ClientConnectionEvent.Disconnect disconnectEvent) {
String playerName = disconnectEvent.getTargetEntity().getName();
//Clean up scoreboard in order to prevent to big ones
plugin.getGlobalScoreboard().removeScores(Text.of(playerName));
Optional<Team> optionalTeam = plugin.getGlobalScoreboard().getTeam(playerName);
if (optionalTeam.isPresent()) {
Team team = optionalTeam.get();
team.unregister();
public void onHeal(HealEntityEvent healEvent) {
Entity targetEntity = healEvent.getTargetEntity();
Optional<Double> optionalHealth = targetEntity.get(Keys.HEALTH);
Optional<Double> optionalMaxHealth = targetEntity.get(Keys.MAX_HEALTH);
if (optionalHealth.isPresent() && optionalMaxHealth.isPresent()) {
double newHealth = optionalHealth.get() + healEvent.getFinalHealAmount();
updateHealth(optionalMaxHealth.get(), newHealth, targetEntity);
}
}

Expand All @@ -55,25 +44,27 @@ public void onEntityDamage(DamageEntityEvent damageEntityEvent) {
Optional<Double> optionalHealth = targetEntity.get(Keys.HEALTH);
Optional<Double> optionalMaxHealth = targetEntity.get(Keys.MAX_HEALTH);
if (optionalHealth.isPresent() && optionalMaxHealth.isPresent()) {
double maxHealth = optionalMaxHealth.get();
double currentHealth = optionalHealth.get() - damageEntityEvent.getFinalDamage();
double newHealth = optionalHealth.get() - damageEntityEvent.getFinalDamage();
updateHealth(optionalMaxHealth.get(), newHealth, targetEntity);
}
}

Text healthMessage = generateHealthMessage(currentHealth, maxHealth);
if (targetEntity.getType() == EntityTypes.PLAYER) {
Player targetPlayer = (Player) targetEntity;
String playerName = targetPlayer.getName();
private void updateHealth(double maxHealth, double newHealth, Entity targetEntity) {
Text healthMessage = generateHealthMessage(newHealth, maxHealth);
if (targetEntity.getType() == EntityTypes.PLAYER) {
Player targetPlayer = (Player) targetEntity;
String playerName = targetPlayer.getName();

Scoreboard playerScoreboard = targetPlayer.getScoreboard();
if (plugin.getGlobalScoreboard().equals(playerScoreboard)) {
//does the player have still a global scoreboard -> we don't want to overrid eothers
setBelownameHealth(playerScoreboard, currentHealth, playerName);
Scoreboard playerScoreboard = targetPlayer.getScoreboard();
if (plugin.getGlobalScoreboard().equals(playerScoreboard)) {
//does the player have still a global scoreboard -> we don't want to overrid eothers
setBelownameHealth(playerScoreboard, newHealth, playerName);

setNametagHealth(playerScoreboard, playerName, healthMessage);
}
} else if (plugin.getConfig().isEnabledMob() && targetEntity.supports(Keys.DISPLAY_NAME)) {
//mobs have only support for this
targetEntity.offer(Keys.DISPLAY_NAME, healthMessage);
setNametagHealth(playerScoreboard, playerName, healthMessage);
}
} else if (plugin.getConfig().isEnabledMob() && targetEntity.supports(Keys.DISPLAY_NAME)) {
//mobs have only support for this
targetEntity.offer(Keys.DISPLAY_NAME, healthMessage);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public void onPreInit(GamePreInitializationEvent preInitEvent) {
public void onInit(GameInitializationEvent initEvent) {
//register events
game.getEventManager().registerListeners(this, new DamageListener(this));
game.getEventManager().registerListeners(this, new ConnectionListener(this));
}

@Listener
Expand Down

0 comments on commit 23c7680

Please sign in to comment.