package com.laytonsmith.abstraction.bukkit; import com.laytonsmith.PureUtilities.Common.ReflectionUtils; import com.laytonsmith.abstraction.MCScoreboard; import com.laytonsmith.abstraction.MCTeam; import com.laytonsmith.abstraction.enums.MCNameTagVisibility; import com.laytonsmith.abstraction.enums.MCOption; import com.laytonsmith.abstraction.enums.MCOptionStatus; import com.laytonsmith.abstraction.enums.bukkit.BukkitMCNameTagVisibility; import com.laytonsmith.abstraction.enums.bukkit.BukkitMCOption; import com.laytonsmith.abstraction.enums.bukkit.BukkitMCOptionStatus; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.scoreboard.NameTagVisibility; import org.bukkit.scoreboard.Team; import org.bukkit.scoreboard.Team.OptionStatus; import java.util.HashSet; import java.util.Set; public class BukkitMCTeam implements MCTeam { Team t; public BukkitMCTeam(Team team) { t = team; } @Override public void addEntry(String entry) { try { t.addEntry(entry); } catch(NoSuchMethodError ex){ // Probably 1.8.5 or prior OfflinePlayer player = Bukkit.getOfflinePlayer(entry); ReflectionUtils.invokeMethod(t, "addPlayer", player); } } @Override public boolean allowFriendlyFire() { return t.allowFriendlyFire(); } @Override public boolean canSeeFriendlyInvisibles() { return t.canSeeFriendlyInvisibles(); } @Override public String getDisplayName() { return t.getDisplayName(); } @Override public String getName() { return t.getName(); } @Override public MCNameTagVisibility getNameTagVisibility() { NameTagVisibility ntv = t.getNameTagVisibility(); return BukkitMCNameTagVisibility.getConvertor().getAbstractedEnum(ntv); } @Override public MCOptionStatus getOption(MCOption option) { OptionStatus os = t.getOption(BukkitMCOption.getConvertor().getConcreteEnum(option)); return MCOptionStatus.valueOf(os.name()); } @Override public Set<String> getEntries() { Set<String> ret = new HashSet<String>(); try { for (String e : t.getEntries()) { ret.add(e); } } catch(NoSuchMethodError ex){ // Probably 1.8.5 or prior for (OfflinePlayer o : (Set<OfflinePlayer>) ReflectionUtils.invokeMethod(t, "getPlayers")) { ret.add(o.getName()); } } return ret; } @Override public String getPrefix() { return t.getPrefix(); } @Override public MCScoreboard getScoreboard() { return new BukkitMCScoreboard(t.getScoreboard()); } @Override public int getSize() { return t.getSize(); } @Override public String getSuffix() { return t.getSuffix(); } @Override public boolean hasEntry(String entry) { try { return t.hasEntry(entry); } catch(NoSuchMethodError ex){ // Probably 1.8.5 or prior OfflinePlayer player = Bukkit.getOfflinePlayer(entry); return (boolean) ReflectionUtils.invokeMethod(t, "hasPlayer", player); } } @Override public boolean removeEntry(String entry) { try { return t.removeEntry(entry); } catch(NoSuchMethodError ex){ // Probably 1.8.5 or prior OfflinePlayer player = Bukkit.getOfflinePlayer(entry); return (boolean) ReflectionUtils.invokeMethod(t, "removePlayer", player); } } @Override public void setAllowFriendlyFire(boolean enabled) { t.setAllowFriendlyFire(enabled); } @Override public void setCanSeeFriendlyInvisibles(boolean enabled) { t.setCanSeeFriendlyInvisibles(enabled); } @Override public void setDisplayName(String displayName) { t.setDisplayName(displayName); } @Override public void setNameTagVisibility(MCNameTagVisibility visibility) { t.setNameTagVisibility(BukkitMCNameTagVisibility.getConvertor().getConcreteEnum(visibility)); } @Override public void setOption(MCOption option, MCOptionStatus status) { t.setOption(BukkitMCOption.getConvertor().getConcreteEnum(option), BukkitMCOptionStatus.getConvertor().getConcreteEnum(status)); } @Override public void setPrefix(String prefix) { t.setPrefix(prefix); } @Override public void setSuffix(String suffix) { t.setSuffix(suffix); } @Override public void unregister() { t.unregister(); } }