package de.Keyle.MyPet.util.hooks;
import de.Keyle.MyPet.MyPetApi;
import de.Keyle.MyPet.api.entity.MyPet;
import de.Keyle.MyPet.api.player.DonateCheck;
import de.Keyle.MyPet.api.player.MyPetPlayer;
import de.Keyle.MyPet.api.util.hooks.PluginHookName;
import de.Keyle.MyPet.util.PluginHook;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
@PluginHookName("PlaceholderAPI")
public class PlaceholderApiHook extends PluginHook {
Map<String, PlaceHolder> placeHolders = new HashMap<>();
@Override
public boolean onEnable() {
boolean loaded = registerParentPlaceHolder();
if (loaded) {
registerPlaceholder();
}
return loaded;
}
public void registerPlaceholder() {
placeHolders.put("name", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getPetName();
}
});
placeHolders.put("level", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return "" + pet.getExperience().getLevel();
}
});
placeHolders.put("exp", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return "" + pet.getExp();
}
});
placeHolders.put("type", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getPetType().name();
}
});
placeHolders.put("status", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getStatus().name();
}
});
placeHolders.put("health", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return "" + pet.getHealth();
}
});
placeHolders.put("health_max", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return "" + pet.getMaxHealth();
}
});
placeHolders.put("saturation", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return "" + pet.getSaturation();
}
});
placeHolders.put("uuid", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getUUID().toString();
}
});
placeHolders.put("skilltree_display", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getSkilltree() != null ? pet.getSkilltree().getDisplayName() : null;
}
});
placeHolders.put("skilltree_name", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getSkilltree() != null ? pet.getSkilltree().getName() : null;
}
});
placeHolders.put("world_group", new PlaceHolder<MyPet>(MyPet.class) {
@Override
public String getValue(MyPet pet) {
return pet.getWorldGroup();
}
});
placeHolders.put("player_is_premium", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.Premium ? "yes" : "no";
}
});
placeHolders.put("player_is_donator", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.Donator ? "yes" : "no";
}
});
placeHolders.put("player_is_creator", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.Creator ? "yes" : "no";
}
});
placeHolders.put("player_is_developer", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.Developer ? "yes" : "no";
}
});
placeHolders.put("player_is_translator", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.Translator ? "yes" : "no";
}
});
placeHolders.put("player_is_none", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank() == DonateCheck.DonationRank.None ? "yes" : "no";
}
});
placeHolders.put("player_particle_rank", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getDonationRank().name();
}
});
placeHolders.put("player_language", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getLanguage();
}
});
placeHolders.put("player_uuid_internal", new PlaceHolder<MyPetPlayer>(MyPetPlayer.class) {
@Override
public String getValue(MyPetPlayer player) {
return player.getInternalUUID().toString();
}
});
placeHolders.put("has_pet", new PlaceHolder<Player>(Player.class) {
@Override
public String getValue(Player player) {
return MyPetApi.getPlayerManager().isMyPetPlayer(player) && MyPetApi.getMyPetManager().hasActiveMyPet(player) ? "yes" : "no";
}
});
}
public boolean registerParentPlaceHolder() {
PlaceholderExpansion myPetExpansion = new PlaceholderExpansion() {
@Override
public boolean canRegister() {
return true;
}
@Override
public String getAuthor() {
return MyPetApi.getPlugin().getDescription().getAuthors().toString();
}
@Override
public String getIdentifier() {
return "mypet";
}
@Override
public String getPlugin() {
return "MyPet";
}
@Override
public String getVersion() {
return "1.0.0";
}
/**
* This is the method called when a placeholder with our identifier is found and needs a value
* We specify the value identifier in this method
*/
@Override
@SuppressWarnings("unchecked")
public String onPlaceholderRequest(Player p, String identifier) {
if (placeHolders.containsKey(identifier)) {
PlaceHolder placeHolder = placeHolders.get(identifier);
if (placeHolder.getHolderClass() == Player.class) {
return placeHolder.getValue(p);
}
if (placeHolder.getHolderClass() == MyPetPlayer.class) {
if (MyPetApi.getPlayerManager().isMyPetPlayer(p)) {
return placeHolder.getValue(MyPetApi.getPlayerManager().getMyPetPlayer(p));
}
}
if (placeHolder.getHolderClass() == MyPet.class) {
if (MyPetApi.getPlayerManager().isMyPetPlayer(p)) {
MyPetPlayer petPlayer = MyPetApi.getPlayerManager().getMyPetPlayer(p);
if (petPlayer.hasMyPet()) {
return placeHolder.getValue(petPlayer.getMyPet());
}
}
}
}
return null;
}
};
return myPetExpansion.register();
}
abstract class PlaceHolder<T> {
Class<T> clazz;
public PlaceHolder(Class<T> clazz) {
this.clazz = clazz;
}
public abstract String getValue(T holder);
public Class<T> getHolderClass() {
return clazz;
}
}
}