001/* 002 * Copyright 2021 Siroshun09 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.github.siroshun09.mccommand.bungee.sender; 018 019import com.github.siroshun09.mccommand.common.sender.ConsoleSender; 020import com.github.siroshun09.mccommand.common.sender.Sender; 021import net.kyori.adventure.audience.Audience; 022import net.kyori.adventure.platform.bungeecord.BungeeAudiences; 023import net.md_5.bungee.api.CommandSender; 024import net.md_5.bungee.api.ProxyServer; 025import net.md_5.bungee.api.connection.ProxiedPlayer; 026import org.jetbrains.annotations.NotNull; 027 028import java.util.Objects; 029import java.util.UUID; 030 031/** 032 * A class that wraps {@link CommandSender}. 033 */ 034public class BungeeSender implements Sender { 035 036 private final Audience audience; 037 private final CommandSender sender; 038 039 /** 040 * Create {@link Sender} to use in the library with a {@link CommandSender}. 041 * 042 * @param audiences the {@link BungeeAudiences} to get {@link Audience} 043 * @param sender {@link CommandSender} to wrap 044 */ 045 public BungeeSender(@NotNull BungeeAudiences audiences, @NotNull CommandSender sender) { 046 this.audience = audiences.sender(sender); 047 this.sender = sender; 048 } 049 050 @NotNull 051 @Override 052 public Audience getAudience() { 053 return audience; 054 } 055 056 /** 057 * {@inheritDoc} 058 */ 059 @Override 060 @NotNull 061 public UUID getUUID() { 062 if (sender instanceof ProxiedPlayer) { 063 return ((ProxiedPlayer) sender).getUniqueId(); 064 } else { 065 return ConsoleSender.CONSOLE_UUID; 066 } 067 } 068 069 /** 070 * {@inheritDoc} 071 */ 072 @Override 073 @NotNull 074 public String getName() { 075 return sender.getName(); 076 } 077 078 /** 079 * {@inheritDoc} 080 */ 081 @Override 082 public boolean hasPermission(@NotNull String perm) { 083 return sender.hasPermission(perm); 084 } 085 086 /** 087 * {@inheritDoc} 088 */ 089 @Override 090 public boolean isOnline() { 091 if (sender instanceof ProxiedPlayer) { 092 return ((ProxiedPlayer) sender).isConnected(); 093 } else { 094 return true; 095 } 096 } 097 098 /** 099 * {@inheritDoc} 100 */ 101 @Override 102 public boolean isConsole() { 103 return sender.equals(ProxyServer.getInstance().getConsole()); 104 } 105 106 /** 107 * {@inheritDoc} 108 */ 109 @Override 110 public @NotNull Object getOriginalSender() { 111 return sender; 112 } 113 114 /** 115 * Gets {@link CommandSender}. 116 * 117 * @return the wrapped {@link CommandSender} 118 */ 119 public @NotNull CommandSender getCommandSender() { 120 return sender; 121 } 122 123 @Override 124 public int hashCode() { 125 return Objects.hash(sender); 126 } 127 128 @Override 129 public boolean equals(Object o) { 130 if (this == o) { 131 return true; 132 } 133 134 if (o instanceof BungeeSender) { 135 BungeeSender that = (BungeeSender) o; 136 return sender.equals(that.sender); 137 } else { 138 return false; 139 } 140 } 141}