BukkitViewer.java
package it.fulminazzo.yagl.viewers;
import it.fulminazzo.yagl.WrappersAdapter;
import it.fulminazzo.yagl.wrappers.Sound;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
import java.util.UUID;
/**
* An implementation of {@link Viewer} for the Bukkit platform.
*/
class BukkitViewer extends Viewer {
/**
* Instantiates a new Viewer.
*
* @param uniqueId the unique id
* @param name the name
*/
BukkitViewer(final @NotNull UUID uniqueId, final @NotNull String name) {
super(uniqueId, name);
}
@Override
public void playSound(@NotNull Sound sound) {
Player player = getPlayer().orElseThrow(() -> new PlayerOfflineException(this.name));
WrappersAdapter.playCustomSound(player, sound);
}
@Override
public void sendMessage(@NotNull String message) {
Player player = getPlayer().orElseThrow(() -> new PlayerOfflineException(this.name));
player.sendMessage(message);
}
@Override
public void executeCommand(final @NotNull String command) {
Player player = getPlayer().orElseThrow(() -> new PlayerOfflineException(this.name));
Bukkit.dispatchCommand(player, command);
}
@Override
public boolean hasPermission(@NotNull String permission) {
return getPlayer().filter(p -> p.hasPermission(permission)).isPresent();
}
@Override
public void closeGUI() {
getPlayer().ifPresent(HumanEntity::closeInventory);
}
/**
* Gets player.
*
* @return the player
*/
public Optional<Player> getPlayer() {
Player player = Bukkit.getPlayer(this.uniqueId);
return Optional.ofNullable(player).filter(OfflinePlayer::isOnline);
}
/**
* Gets an instance of {@link Viewer} from the given {@link Player}.
*
* @param player the player
* @return the viewer
*/
public static Viewer newViewer(final @NotNull HumanEntity player) {
return new BukkitViewer(player.getUniqueId(), player.getName());
}
}