package com.laytonsmith.abstraction.bukkit; import com.laytonsmith.abstraction.AbstractionObject; import com.laytonsmith.abstraction.MCCommandSender; import com.laytonsmith.abstraction.MCServer; import com.laytonsmith.core.Static; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissionAttachmentInfo; import java.util.ArrayList; import java.util.List; /** * * */ public class BukkitMCCommandSender implements MCCommandSender { CommandSender c; public BukkitMCCommandSender(CommandSender c){ this.c = c; } public BukkitMCCommandSender(AbstractionObject a){ this((CommandSender)null); if(a instanceof MCCommandSender){ this.c = ((CommandSender)a.getHandle()); } else { throw new ClassCastException(); } } @Override public Object getHandle(){ return c; } @Override public void sendMessage(String string) { c.sendMessage(string); } @Override public MCServer getServer() { return new BukkitMCServer(); } @Override public String getName() { return c.getName(); } @Override public boolean isOp() { return c.isOp(); } public CommandSender _CommandSender() { return c; } public boolean instanceofPlayer() { return c instanceof Player; } public boolean instanceofMCConsoleCommandSender() { return c instanceof ConsoleCommandSender; } @Override public String toString() { return c.toString(); } @Override public boolean equals(Object obj) { return (obj instanceof BukkitMCCommandSender?c.equals(((BukkitMCCommandSender)obj).c):false); } @Override public int hashCode() { return c.hashCode(); } @Override public boolean hasPermission(String perm) { return c.hasPermission(perm); } @Override public boolean isPermissionSet(String perm) { return c.isPermissionSet(perm); } @Override public List<String> getGroups() { // As in https://github.com/sk89q/WorldEdit/blob/master/ // worldedit-bukkit/src/main/java/com/sk89q/wepif/DinnerPermsResolver.java#L112-L126 List<String> groupNames = new ArrayList<String>(); for (PermissionAttachmentInfo permAttach : c.getEffectivePermissions()) { String perm = permAttach.getPermission(); if (!(perm.startsWith(Static.groupPrefix) && permAttach.getValue())) { continue; } groupNames.add(perm.substring(Static.groupPrefix.length(), perm.length())); } return groupNames; } @Override public boolean inGroup(String groupName) { return getGroups().contains(groupName); } }