package pluginbase.sponge.minecraft;
import com.flowpowered.math.vector.Vector3d;
import org.jetbrains.annotations.NotNull;
import org.spongepowered.api.Game;
import org.spongepowered.api.Server;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.entity.living.player.Player;
import pluginbase.minecraft.BasePlayer;
import pluginbase.minecraft.location.Vector;
import java.util.Map;
import java.util.WeakHashMap;
/**
* Contains useful utility methods for operations related to Bukkit.
*/
public class SpongeTools {
private static Game GAME;
private static final Map<CommandSource, BasePlayer> BASE_PLAYER_MAP = new WeakHashMap<>();
private SpongeTools() {
throw new AssertionError();
}
public static void registerGameInstance(Game game) {
GAME = game;
}
public static Game getGame() {
return GAME;
}
public static Server getServer() {
return GAME.getServer();
}
/**
* Wraps a sponge Player object into a BasePlayer object for use throughout PluginBase.
*
* @param player the Player to wrap.
* @return the wrapped BasePlayer.
*/
@NotNull
public static BasePlayer wrapPlayer(@NotNull final Player player) {
BasePlayer basePlayer = BASE_PLAYER_MAP.get(player);
if (basePlayer == null) {
basePlayer = new SpongePlayer(player);
BASE_PLAYER_MAP.put(player, basePlayer);
}
return basePlayer;
}
/**
* Wraps a sponge CommandSource object into a BasePlayer object for use throughout PluginBase.
*
* @param sender the CommandSender to wrap.
* @return the wrapped BasePlayer.
*/
@NotNull
public static BasePlayer wrapSender(@NotNull final CommandSource sender) {
if (sender instanceof Player) {
return wrapPlayer((Player) sender);
}
BasePlayer basePlayer = BASE_PLAYER_MAP.get(sender);
if (basePlayer == null) {
basePlayer = new SpongeCommandSource(sender);
BASE_PLAYER_MAP.put(sender, basePlayer);
}
return basePlayer;
}
/**
* Converts {@link com.flowpowered.math.vector.Vector3d} objects to
* {@link pluginbase.minecraft.location.Vector} objects.
*
* @param v The Sponge vector.
* @return The PluginBase vector.
*/
@NotNull
public static Vector convertVector(@NotNull final Vector3d v) {
return new Vector(v.getX(), v.getY(), v.getZ());
}
/**
* Converts {@link pluginbase.minecraft.location.Vector} objects
* to {@link com.flowpowered.math.vector.Vector3d} objects.
*
* @param v The PluginBase vector.
* @return The Sponge vector.
*/
@NotNull
public static Vector3d convertVector(final Vector v) {
return new Vector3d(v.getX(), v.getY(), v.getZ());
}
}