    001/*
    002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    003 *
    004 *  Permission is hereby granted, free of charge, to any person obtaining
    005 *  a copy of this software and associated documentation files (the
    006 *  "Software"), to deal in the Software without restriction, including
    007 *  without limitation the rights to use, copy, modify, merge, publish,
    008 *  distribute, sublicense, and/or sell copies of the Software, and to
    009 *  permit persons to whom the Software is furnished to do so, subject to
    010 *  the following conditions:
    011 *
    012 *  The above copyright notice and this permission notice shall be
    013 *  included in all copies or substantial portions of the Software.
    014 *
    015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    022 */
    023
    024package co.aikar.commands;
    025
    026import java.nio.charset.StandardCharsets;
    027import java.util.Objects;
    028import java.util.UUID;
    029
    030import org.jetbrains.annotations.NotNull;
    031
    032import com.velocitypowered.api.command.CommandSource;
    033import com.velocitypowered.api.proxy.Player;
    034
    035public class VelocityCommandIssuer implements CommandIssuer {
    036    private final VelocityCommandManager manager;
    037    private final CommandSource source;
    038
    039    VelocityCommandIssuer(VelocityCommandManager manager, CommandSource source) {
    040        this.manager = manager;
    041        this.source = source;
    042    }
    043
    044
    045    @Override
    046    public CommandSource getIssuer() {
    047        return source;
    048    }
    049
    050    public Player getPlayer() {
    051        return isPlayer() ? (Player) source : null;
    052    }
    053
    054    @Override
    055    public CommandManager getManager() {
    056        return manager;
    057    }
    058
    059    @Override
    060    public boolean isPlayer() {
    061        return source instanceof Player;
    062    }
    063
    064    @Override
    065    public @NotNull UUID getUniqueId() {
    066        if (isPlayer()) {
    067            return ((Player) source).getUniqueId();
    068        }
    069
    070        // TODO: Find a better solution for this
    071        //generate a unique id based of the name (like for the console command sender)
    072        return UUID.randomUUID();
    073    }
    074
    075    @Override
    076    public void sendMessageInternal(String message) {
    077        source.sendMessage(ACFVelocityUtil.color(message));
    078    }
    079
    080    @Override
    081    public boolean hasPermission(String name) {
    082        return source.hasPermission(name);
    083    }
    084
    085
    086    @Override
    087    public boolean equals(Object o) {
    088        if (this == o) return true;
    089        if (o == null || getClass() != o.getClass()) return false;
    090        VelocityCommandIssuer that = (VelocityCommandIssuer) o;
    091        return Objects.equals(source, that.source);
    092    }
    093
    094    @Override
    095    public int hashCode() {
    096        return Objects.hash(source);
    097    }
    098}