Skip to content

Instantly share code, notes, and snippets.

@alexisvisco
Created August 17, 2016 20:27
Show Gist options
  • Save alexisvisco/e46ae58a29826a844d1b4a639fa37752 to your computer and use it in GitHub Desktop.
Save alexisvisco/e46ae58a29826a844d1b4a639fa37752 to your computer and use it in GitHub Desktop.
ITeam
package fr.kwizzy.deathdash.util.team;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.util.Set;
import java.util.UUID;
/**
* Par Alexis le 14/08/2016.
*/
public interface ITeam
{
boolean containPlayer(Player player);
Set<UUID> getMembers();
void addMember(Player player);
void removeMember(Player player);
boolean isFriendlyFire();
void setFriendlyFire(boolean friendlyFire);
ChatColor getPrefix();
void setPrefix(ChatColor prefix);
String getName();
int size();
public String getColoredName();
Player getPlayer(UUID uuid);
}
package fr.kwizzy.deathdash.util.team;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import com.nametagedit.plugin.NametagEdit;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
/**
* Par Alexis le 14/08/2016.
*/
class Team implements ITeam{
private String name;
private boolean friendlyFire;
private ChatColor prefix;
private Set<UUID> players = new HashSet<>();
public Team(String name) {
this.name = name;
}
public boolean containPlayer(Player player) {
return players.contains(player.getUniqueId());
}
public Set<UUID> getMembers() {
return players;
}
public void addMember(Player player) {
players.add(player.getUniqueId());
applyPrefix(player);
}
public void removeMember(Player player) {
if (players.contains(player.getUniqueId())) {
players.remove(player.getUniqueId());
removePrefix(player);
}
}
@Override @Deprecated
public Player getPlayer(UUID uuid)
{
return Bukkit.getPlayer(uuid);
}
@Override
public int size()
{
return players.size();
}
public boolean isFriendlyFire()
{
return friendlyFire;
}
public void setFriendlyFire(boolean friendlyFire)
{
this.friendlyFire = friendlyFire;
}
public ChatColor getPrefix()
{
return prefix;
}
public void setPrefix(ChatColor prefix)
{
this.prefix = prefix;
for (UUID uuid : getMembers()) {
Player p = Bukkit.getPlayer(uuid);
applyPrefix(p);
}
}
public String getName()
{
return name;
}
public String getColoredName(){
return prefix + name;
}
private void applyPrefix(Player p){
NametagEdit.getApi().setPrefix(p, prefix.toString());
}
private void removePrefix(Player p){
NametagEdit.getApi().setPrefix(p, "");
}
public void destroy(){
for (UUID uuid : getMembers()) {
removeMember(Bukkit.getPlayer(uuid));
}
name = "";
}
}
package fr.kwizzy.deathdash.util.team;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
/**
* Par Alexis le 14/08/2016.
*/
public class TeamEvent implements Listener
{
@EventHandler
public void damage(EntityDamageByEntityEvent e){
if(e.getDamager() instanceof Player && e.getEntity() instanceof Player){
Player vic = (Player) e.getEntity();
Player att = (Player) e.getDamager();
if(TeamFactory.getInstance().hasTeam(vic) && TeamFactory.getInstance().hasTeam(att)){
if(TeamFactory.getInstance().sameTeams(vic, att) && !TeamFactory.getInstance().getPlayerTeam(vic).isFriendlyFire()){
e.setCancelled(true);
att.sendMessage("§aTu ne peux pas attaquer un coéquipier.");
}
}
}
}
}
package fr.kwizzy.deathdash.util.team;
import org.apache.commons.lang.Validate;
import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
/**
* Par Alexis le 14/08/2016.
*/
public class TeamFactory
{
private static TeamFactory instance = new TeamFactory();
public static TeamFactory getInstance()
{
return instance;
}
private Set<Team> teams = new HashSet<>();
public Team registerTeam(String name){
Validate.isTrue(getTeam(name) == null, "Team already exist !");
Team team = new Team(name);
teams.add(team);
return team;
}
public void deleteTeam(String name){
Team t = getTeam(name);
Validate.isTrue(t != null, "Team doesn't exist");
if(t!= null) {
teams.remove(t);
t.destroy();
}
}
public Team getTeam(String name){
for (Team team : teams) {
if(name.equalsIgnoreCase(team.getName()))
return team;
}
return null;
}
public Set<Team> getTeams()
{
return teams;
}
public boolean hasTeam(Player p){
for (Team team : teams) {
if(team.containPlayer(p))
return true;
}
return false;
}
public Team getPlayerTeam(Player p){
Validate.isTrue(hasTeam(p), "Player doesn't have a team");
for (Team team : teams) {
if(team.containPlayer(p))
return team;
}
return null;
}
public boolean sameTeams(Player p1, Player p2){
if(hasTeam(p1) && hasTeam(p2)){
if(getPlayerTeam(p1).equals(getPlayerTeam(p2)))
return true;
}
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment