From d22b6dec8094eb571ce7ac25e20f5d297f4e1fee Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 22 Jul 2018 00:26:22 +0200 Subject: [PATCH 1/2] Only sending join/leave events to custom chats Also sending server start/stop messages still #57 I need to look over this freshly --- .../discordplugin/ChromaBot.java | 12 +++++++++- .../discordplugin/DiscordPlugin.java | 8 +++---- .../listeners/MCChatListener.java | 22 ++++++++++++++----- .../discordplugin/listeners/MCListener.java | 10 +++++++-- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/ChromaBot.java b/src/main/java/buttondevteam/discordplugin/ChromaBot.java index e597095..2db1a17 100755 --- a/src/main/java/buttondevteam/discordplugin/ChromaBot.java +++ b/src/main/java/buttondevteam/discordplugin/ChromaBot.java @@ -47,7 +47,7 @@ public class ChromaBot { /** * Send a message to the chat channels and private chats. - * + * * @param message * The message to send, duh * @param embed @@ -57,6 +57,16 @@ public class ChromaBot { MCChatListener.forAllMCChat(ch -> DiscordPlugin.sendMessageToChannel(ch, message, embed)); } + /** + * Send a message to the chat channels, private chats and custom chats. + * + * @param message The message to send, duh + * @param embed Custom fancy stuff, use {@link EmbedBuilder} to create one + */ + public void sendMessageCustomAsWell(String message, EmbedObject embed) { + MCChatListener.forCustomAndAllMCChat(ch -> DiscordPlugin.sendMessageToChannel(ch, message, embed)); + } + /** * Send a message to an arbitrary channel. This will not send it to the private chats. * diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 34669c4..d126523 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -158,17 +158,17 @@ public class DiscordPlugin extends JavaPlugin implements IListener { DiscordCommandBase.registerCommands(); if (ResetMCCommand.resetting) - ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.CYAN) + ChromaBot.getInstance().sendMessageCustomAsWell("", new EmbedBuilder().withColor(Color.CYAN) .withTitle("Discord plugin restarted - chat connected.").build()); //Really important to note the chat, hmm else if (getConfig().getBoolean("serverup", false)) { - ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.YELLOW) + ChromaBot.getInstance().sendMessageCustomAsWell("", new EmbedBuilder().withColor(Color.YELLOW) .withTitle("Server recovered from a crash - chat connected.").build()); val thr = new Throwable( "The server shut down unexpectedly. See the log of the previous run for more details."); thr.setStackTrace(new StackTraceElement[0]); TBMCCoreAPI.SendException("The server crashed!", thr); } else - ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.GREEN) + ChromaBot.getInstance().sendMessageCustomAsWell("", new EmbedBuilder().withColor(Color.GREEN) .withTitle("Server started - chat connected.").build()); ResetMCCommand.resetting = false; //This is the last event handling this flag @@ -261,7 +261,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener { } saveConfig(); - MCChatListener.forAllMCChat(ch -> { + MCChatListener.forCustomAndAllMCChat(ch -> { try { if (ResetMCCommand.resetting) DiscordPlugin.sendMessageToChannelWait(ch, "", diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 49bcf63..89f02be 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -2,10 +2,7 @@ package buttondevteam.discordplugin.listeners; import buttondevteam.discordplugin.*; import buttondevteam.discordplugin.playerfaker.VanillaCommandListener; -import buttondevteam.lib.TBMCChatEvent; -import buttondevteam.lib.TBMCChatPreprocessEvent; -import buttondevteam.lib.TBMCCoreAPI; -import buttondevteam.lib.TBMCSystemChatEvent; +import buttondevteam.lib.*; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.ChatMessage; import buttondevteam.lib.chat.ChatRoom; @@ -17,6 +14,7 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.val; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -255,8 +253,7 @@ public class MCChatListener implements Listener, IListener // The maps may not contain the senders for UnconnectedSenders public static boolean isMinecraftChatEnabled(DiscordPlayer dp) { - return lastmsgPerUser.stream().anyMatch( - lmd -> ((IPrivateChannel) lmd.channel).getRecipient().getStringID().equals(dp.getDiscordID())); + return isMinecraftChatEnabled(dp.getDiscordID()); } public static boolean isMinecraftChatEnabled(String did) { // Don't load the player data just for this @@ -330,9 +327,22 @@ public class MCChatListener implements Listener, IListener action.accept(DiscordPlugin.chatchannel); for (LastMsgData data : lastmsgPerUser) action.accept(data.channel); + // lastmsgCustom.forEach(cc -> action.accept(cc.channel)); - Only send relevant messages to custom chat + } + + public static void forCustomAndAllMCChat(Consumer action) { + forAllMCChat(action); lastmsgCustom.forEach(cc -> action.accept(cc.channel)); } + public static void forAllowedCustomMCChat(Consumer action, CommandSender sender) { + lastmsgCustom.stream().filter(clmd -> { + //new TBMCChannelConnectFakeEvent(sender, clmd.mcchannel).shouldSendTo(clmd.dcp) - Thought it was this simple hehe - Wait, it *should* be this simple + val e = new TBMCChannelConnectFakeEvent(sender, clmd.mcchannel); + return clmd.groupID.equals(e.getGroupID(sender)); + }).forEach(cc -> action.accept(cc.channel)); //TODO: Use getScore and getGroupID in fake event constructor - This should also send error messages on channel connect + } + private static void forAllowedMCChat(Consumer action, TBMCSystemChatEvent event) { if (Channel.GlobalChat.ID.equals(event.getChannel().ID)) action.accept(DiscordPlugin.chatchannel); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 74ee6a2..2a86220 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -62,8 +62,10 @@ public class MCListener implements Listener { + " do /discord accept"); p.sendMessage("§bIf it wasn't you, do /discord decline"); } + final String message = e.GetPlayer().PlayerName().get() + " joined the game"; if (!DiscordPlugin.hooked) - MCChatListener.sendSystemMessageToChat(e.GetPlayer().PlayerName().get() + " joined the game"); + MCChatListener.sendSystemMessageToChat(message); + MCChatListener.forAllowedCustomMCChat(ch -> DiscordPlugin.sendMessageToChannel(ch, message), e.getPlayer()); MCChatListener.ListC = 0; ChromaBot.getInstance().updatePlayerList(); }); @@ -81,6 +83,10 @@ public class MCListener implements Listener { .ifPresent(dcp -> callEventExcludingSome(new PlayerJoinEvent(dcp, "")))); Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, ChromaBot.getInstance()::updatePlayerList, 5); + final String message = e.GetPlayer().PlayerName().get() + " left the game"; + if (!DiscordPlugin.hooked) + MCChatListener.sendSystemMessageToChat(message); //TODO: Probably double sends if kicked and unhooked + MCChatListener.forAllowedCustomMCChat(ch -> DiscordPlugin.sendMessageToChannel(ch, message), e.getPlayer()); } @EventHandler(priority = EventPriority.HIGHEST) @@ -111,7 +117,7 @@ public class MCListener implements Listener { } @EventHandler - public void onPlayerAFK(AfkStatusChangeEvent e) { + public void onPlayerAFK(AfkStatusChangeEvent e) { //TODO: Add AFK to custom chats? if (e.isCancelled() || !e.getAffected().getBase().isOnline()) return; MCChatListener.sendSystemMessageToChat(DPUtils.sanitizeString(e.getAffected().getBase().getDisplayName()) From 4507cf38a9377a578ca6b2baf4d754c69f90099e Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 22 Jul 2018 13:11:24 +0200 Subject: [PATCH 2/2] Fixed channelcon echo The senders are now stored per-channel #56 This one took a bit to track down --- lombok.config | 1 + .../discordplugin/DiscordPlugin.java | 3 +- .../listeners/MCChatListener.java | 55 +- .../discordplugin/listeners/MCListener.java | 12 +- .../mccommands/AcceptMCCommand.java | 2 +- .../playerfaker/DiscordFakePlayer.java | 1079 +++++++++-------- 6 files changed, 593 insertions(+), 559 deletions(-) create mode 100644 lombok.config diff --git a/lombok.config b/lombok.config new file mode 100644 index 0000000..4f55f03 --- /dev/null +++ b/lombok.config @@ -0,0 +1 @@ +lombok.var.flagUsage = ALLOW \ No newline at end of file diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index d126523..1b91494 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -242,7 +242,8 @@ public class DiscordPlugin extends JavaPlugin implements IListener { public void onDisable() { stop = true; for (val entry : MCChatListener.ConnectedSenders.entrySet()) - MCListener.callEventExcludingSome(new PlayerQuitEvent(entry.getValue(), "")); + for (val valueEntry : entry.getValue().entrySet()) + MCListener.callEventExcludingSome(new PlayerQuitEvent(valueEntry.getValue(), "")); MCChatListener.ConnectedSenders.clear(); getConfig().set("lastannouncementtime", lastannouncementtime); getConfig().set("lastseentime", lastseentime); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 89f02be..393221a 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -12,6 +12,7 @@ import com.vdurmont.emoji.EmojiParser; import io.netty.util.collection.LongObjectHashMap; import lombok.NonNull; import lombok.RequiredArgsConstructor; +import lombok.experimental.var; import lombok.val; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -225,11 +226,11 @@ public class MCChatListener implements Listener, IListener val op = Bukkit.getOfflinePlayer(mcp.getUUID()); if (start) { val sender = new DiscordConnectedPlayer(user, channel, mcp.getUUID(), op.getName()); - ConnectedSenders.put(user.getStringID(), sender); + addSender(ConnectedSenders, user, sender); if (p == null)// Player is offline - If the player is online, that takes precedence MCListener.callEventExcludingSome(new PlayerJoinEvent(sender, "")); } else { - val sender = ConnectedSenders.remove(user.getStringID()); + val sender = removeSender(ConnectedSenders, channel, user); if (p == null)// Player is offline - If the player is online, that takes precedence MCListener.callEventExcludingSome(new PlayerQuitEvent(sender, "")); } @@ -241,6 +242,37 @@ public class MCChatListener implements Listener, IListener : lastmsgPerUser.removeIf(lmd -> lmd.channel.getLongID() == channel.getLongID()); } + public static T addSender(HashMap> senders, + IUser user, T sender) { + return addSender(senders, user.getStringID(), sender); + } + + public static T addSender(HashMap> senders, + String did, T sender) { + var map = senders.get(did); + if (map == null) + map = new HashMap<>(); + map.put(sender.getChannel(), sender); + senders.put(did, map); + return sender; + } + + public static T getSender(HashMap> senders, + IChannel channel, IUser user) { + var map = senders.get(user.getStringID()); + if (map != null) + return map.get(channel); + return null; + } + + public static T removeSender(HashMap> senders, + IChannel channel, IUser user) { + var map = senders.get(user.getStringID()); + if (map != null) + return map.remove(channel); + return null; + } + // ......................DiscordSender....DiscordConnectedPlayer.DiscordPlayerSender // Offline public chat......x............................................ // Online public chat.......x...........................................x @@ -286,12 +318,12 @@ public class MCChatListener implements Listener, IListener /** * May contain P<DiscordID> as key for public chat */ - public static final HashMap UnconnectedSenders = new HashMap<>(); - public static final HashMap ConnectedSenders = new HashMap<>(); + public static final HashMap> UnconnectedSenders = new HashMap<>(); + public static final HashMap> ConnectedSenders = new HashMap<>(); /** * May contain P<DiscordID> as key for public chat */ - public static final HashMap OnlineSenders = new HashMap<>(); + public static final HashMap> OnlineSenders = new HashMap<>(); public static short ListC = 0; public static void resetLastMessage() { @@ -606,14 +638,13 @@ public class MCChatListener implements Listener, IListener * This method will find the best sender to use: if the player is online, use that, if not but connected then use that etc. */ private static DiscordSenderBase getSender(IChannel channel, final IUser author) { - val key = (channel.isPrivate() ? "" : "P") + author.getStringID(); + val key = author.getStringID(); return Stream.>>of( // https://stackoverflow.com/a/28833677/2703239 - () -> Optional.ofNullable(OnlineSenders.get(key)), // Find first non-null - () -> Optional.ofNullable(ConnectedSenders.get(key)), // This doesn't support the public chat, but it'll always return null for it - () -> Optional.ofNullable(UnconnectedSenders.get(key)), () -> { - val dsender = new DiscordSender(author, channel); - UnconnectedSenders.put(key, dsender); - return Optional.of(dsender); + () -> Optional.ofNullable(getSender(OnlineSenders, channel, author)), // Find first non-null + () -> Optional.ofNullable(getSender(ConnectedSenders, channel, author)), // This doesn't support the public chat, but it'll always return null for it + () -> Optional.ofNullable(getSender(OnlineSenders, channel, author)), () -> { + return Optional.of(addSender(UnconnectedSenders, author, + new DiscordSender(author, channel))); }).map(Supplier::get).filter(Optional::isPresent).map(Optional::get).findFirst().get(); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 2a86220..8eab392 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -36,7 +36,7 @@ public class MCListener implements Listener { public void onPlayerLogin(PlayerLoginEvent e) { if (e.getResult() != Result.ALLOWED) return; - MCChatListener.ConnectedSenders.values().stream() + MCChatListener.ConnectedSenders.values().stream().flatMap(v -> v.values().stream()) //Only private mcchat should be in ConnectedSenders .filter(s -> s.getUniqueId().equals(e.getPlayer().getUniqueId())).findAny() .ifPresent(dcp -> callEventExcludingSome(new PlayerQuitEvent(dcp, ""))); } @@ -50,10 +50,10 @@ public class MCListener implements Listener { DiscordPlayer dp = e.GetPlayer().getAs(DiscordPlayer.class); if (dp != null) { val user = DiscordPlugin.dc.getUserByID(Long.parseLong(dp.getDiscordID())); - MCChatListener.OnlineSenders.put(dp.getDiscordID(), + MCChatListener.addSender(MCChatListener.OnlineSenders, dp.getDiscordID(), new DiscordPlayerSender(user, user.getOrCreatePMChannel(), p)); - MCChatListener.OnlineSenders.put("P" + dp.getDiscordID(), - new DiscordPlayerSender(user, DiscordPlugin.chatchannel, p)); + MCChatListener.addSender(MCChatListener.OnlineSenders, dp.getDiscordID(), + new DiscordPlayerSender(user, DiscordPlugin.chatchannel, p)); //Stored per-channel } if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().PlayerName().get())) { IUser user = DiscordPlugin.dc @@ -76,9 +76,9 @@ public class MCListener implements Listener { if (e.getPlayer() instanceof DiscordConnectedPlayer) return; // Only care about real users MCChatListener.OnlineSenders.entrySet() - .removeIf(entry -> entry.getValue().getUniqueId().equals(e.getPlayer().getUniqueId())); + .removeIf(entry -> entry.getValue().entrySet().stream().anyMatch(p -> p.getValue().getUniqueId().equals(e.getPlayer().getUniqueId()))); Bukkit.getScheduler().runTask(DiscordPlugin.plugin, - () -> MCChatListener.ConnectedSenders.values().stream() + () -> MCChatListener.ConnectedSenders.values().stream().flatMap(v -> v.values().stream()) .filter(s -> s.getUniqueId().equals(e.getPlayer().getUniqueId())).findAny() .ifPresent(dcp -> callEventExcludingSome(new PlayerJoinEvent(dcp, "")))); Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java b/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java index 13b3095..f695dba 100755 --- a/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java +++ b/src/main/java/buttondevteam/discordplugin/mccommands/AcceptMCCommand.java @@ -35,7 +35,7 @@ public class AcceptMCCommand extends DiscordMCCommandBase { dp.save(); mcp.save(); ConnectCommand.WaitingToConnect.remove(player.getName()); - MCChatListener.UnconnectedSenders.remove(did); + MCChatListener.UnconnectedSenders.remove(did); //Remove all unconnected, will be recreated where needed player.sendMessage("§bAccounts connected."); return true; } diff --git a/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordFakePlayer.java b/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordFakePlayer.java index c5b2c5c..a2b4a13 100755 --- a/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordFakePlayer.java +++ b/src/main/java/buttondevteam/discordplugin/playerfaker/DiscordFakePlayer.java @@ -22,695 +22,696 @@ import sx.blah.discord.handle.obj.IUser; import java.net.InetSocketAddress; import java.util.*; +@SuppressWarnings("deprecation") public class DiscordFakePlayer extends DiscordHumanEntity implements Player { - protected DiscordFakePlayer(IUser user, IChannel channel, int entityId, UUID uuid, String mcname) { - super(user, channel, entityId, uuid); - perm = new PermissibleBase(Bukkit.getOfflinePlayer(uuid)); - name = mcname; - } - - @Delegate - private PermissibleBase perm; - - private @Getter String name; - - @Override - public EntityType getType() { - return EntityType.PLAYER; - } - - @Override - public String getCustomName() { - return user.getName(); - } - - @Override - public void setCustomName(String name) { - } - - @Override - public boolean isConversing() { - - return false; - } - - @Override - public void acceptConversationInput(String input) { - } - - @Override - public boolean beginConversation(Conversation conversation) { - return false; - } - - @Override - public void abandonConversation(Conversation conversation) { - } - - @Override - public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) { - } - - @Override - public boolean isOnline() { - return true;// Let's pretend - } - - @Override - public boolean isBanned() { - return false; - } - - @Override - public boolean isWhitelisted() { - return true; - } - - @Override - public void setWhitelisted(boolean value) { - } - - @Override - public Player getPlayer() { - return this; - } - - @Override - public long getFirstPlayed() { - return 0; - } - - @Override - public long getLastPlayed() { - return 0; - } - - @Override - public boolean hasPlayedBefore() { - return false; - } - - @Override - public Map serialize() { - return new HashMap<>(); - } - - @Override - public void sendPluginMessage(Plugin source, String channel, byte[] message) { - } - - @Override - public Set getListeningPluginChannels() { - return Collections.emptySet(); - } - - @Override - public String getDisplayName() { - return user.getDisplayName(DiscordPlugin.mainServer); - } - - @Override - public void setDisplayName(String name) { - } - - @Override - public String getPlayerListName() { - return getName(); - } - - @Override - public void setPlayerListName(String name) { - } - - @Override - public void setCompassTarget(Location loc) { - } - - @Override - public Location getCompassTarget() { - return new Location(Bukkit.getWorlds().get(0), 0, 0, 0); - } - - @Override - public InetSocketAddress getAddress() { - return null; - } - - @Override - public void sendRawMessage(String message) { - sendMessage(message); - } - - @Override - public void kickPlayer(String message) { - } - - @Override - public void chat(String msg) { - Bukkit.getPluginManager() - .callEvent(new AsyncPlayerChatEvent(true, this, msg, new HashSet<>(Bukkit.getOnlinePlayers()))); - } - - @Override - public boolean performCommand(String command) { - return Bukkit.getServer().dispatchCommand(this, command); - } - - @Override - public boolean isSneaking() { - return false; - } - - @Override - public void setSneaking(boolean sneak) { - } - - @Override - public boolean isSprinting() { - return false; - } - - @Override - public void setSprinting(boolean sprinting) { - } - - @Override - public void saveData() { - } - - @Override - public void loadData() { - } - - @Override - public void setSleepingIgnored(boolean isSleeping) { - } - - @Override - public boolean isSleepingIgnored() { - return false; - } - - @Override - public void playNote(Location loc, byte instrument, byte note) { - } - - @Override - public void playNote(Location loc, Instrument instrument, Note note) { - } - - @Override - public void playSound(Location location, Sound sound, float volume, float pitch) { - } + protected DiscordFakePlayer(IUser user, IChannel channel, int entityId, UUID uuid, String mcname) { + super(user, channel, entityId, uuid); + perm = new PermissibleBase(Bukkit.getOfflinePlayer(uuid)); + name = mcname; + } + + @Delegate + private PermissibleBase perm; + + private @Getter String name; + + @Override + public EntityType getType() { + return EntityType.PLAYER; + } + + @Override + public String getCustomName() { + return user.getName(); + } + + @Override + public void setCustomName(String name) { + } + + @Override + public boolean isConversing() { + + return false; + } + + @Override + public void acceptConversationInput(String input) { + } + + @Override + public boolean beginConversation(Conversation conversation) { + return false; + } + + @Override + public void abandonConversation(Conversation conversation) { + } + + @Override + public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) { + } + + @Override + public boolean isOnline() { + return true;// Let's pretend + } + + @Override + public boolean isBanned() { + return false; + } + + @Override + public boolean isWhitelisted() { + return true; + } + + @Override + public void setWhitelisted(boolean value) { + } + + @Override + public Player getPlayer() { + return this; + } + + @Override + public long getFirstPlayed() { + return 0; + } + + @Override + public long getLastPlayed() { + return 0; + } + + @Override + public boolean hasPlayedBefore() { + return false; + } + + @Override + public Map serialize() { + return new HashMap<>(); + } + + @Override + public void sendPluginMessage(Plugin source, String channel, byte[] message) { + } + + @Override + public Set getListeningPluginChannels() { + return Collections.emptySet(); + } + + @Override + public String getDisplayName() { + return user.getDisplayName(DiscordPlugin.mainServer); + } + + @Override + public void setDisplayName(String name) { + } + + @Override + public String getPlayerListName() { + return getName(); + } + + @Override + public void setPlayerListName(String name) { + } + + @Override + public void setCompassTarget(Location loc) { + } + + @Override + public Location getCompassTarget() { + return new Location(Bukkit.getWorlds().get(0), 0, 0, 0); + } + + @Override + public InetSocketAddress getAddress() { + return null; + } + + @Override + public void sendRawMessage(String message) { + sendMessage(message); + } + + @Override + public void kickPlayer(String message) { + } + + @Override + public void chat(String msg) { + Bukkit.getPluginManager() + .callEvent(new AsyncPlayerChatEvent(true, this, msg, new HashSet<>(Bukkit.getOnlinePlayers()))); + } + + @Override + public boolean performCommand(String command) { + return Bukkit.getServer().dispatchCommand(this, command); + } + + @Override + public boolean isSneaking() { + return false; + } + + @Override + public void setSneaking(boolean sneak) { + } + + @Override + public boolean isSprinting() { + return false; + } + + @Override + public void setSprinting(boolean sprinting) { + } + + @Override + public void saveData() { + } + + @Override + public void loadData() { + } + + @Override + public void setSleepingIgnored(boolean isSleeping) { + } + + @Override + public boolean isSleepingIgnored() { + return false; + } + + @Override + public void playNote(Location loc, byte instrument, byte note) { + } + + @Override + public void playNote(Location loc, Instrument instrument, Note note) { + } + + @Override + public void playSound(Location location, Sound sound, float volume, float pitch) { + } - @Override - public void playSound(Location location, String sound, float volume, float pitch) { - } + @Override + public void playSound(Location location, String sound, float volume, float pitch) { + } - @Override - public void playSound(Location location, Sound sound, SoundCategory category, float volume, float pitch) { - } + @Override + public void playSound(Location location, Sound sound, SoundCategory category, float volume, float pitch) { + } - @Override - public void playSound(Location location, String sound, SoundCategory category, float volume, float pitch) { - } + @Override + public void playSound(Location location, String sound, SoundCategory category, float volume, float pitch) { + } - @Override - public void stopSound(Sound sound) { - } + @Override + public void stopSound(Sound sound) { + } - @Override - public void stopSound(String sound) { - } + @Override + public void stopSound(String sound) { + } - @Override - public void stopSound(Sound sound, SoundCategory category) { - } + @Override + public void stopSound(Sound sound, SoundCategory category) { + } - @Override - public void stopSound(String sound, SoundCategory category) { - } + @Override + public void stopSound(String sound, SoundCategory category) { + } - @Override - public void playEffect(Location loc, Effect effect, int data) { - } + @Override + public void playEffect(Location loc, Effect effect, int data) { + } - @Override - public void playEffect(Location loc, Effect effect, T data) { - } + @Override + public void playEffect(Location loc, Effect effect, T data) { + } - @Override - public void sendBlockChange(Location loc, Material material, byte data) { - } + @Override + public void sendBlockChange(Location loc, Material material, byte data) { + } - @Override - public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) { - return false; - } + @Override + public boolean sendChunkChange(Location loc, int sx, int sy, int sz, byte[] data) { + return false; + } - @Override - public void sendBlockChange(Location loc, int material, byte data) { - } + @Override + public void sendBlockChange(Location loc, int material, byte data) { + } - @Override - public void sendSignChange(Location loc, String[] lines) throws IllegalArgumentException { - } + @Override + public void sendSignChange(Location loc, String[] lines) throws IllegalArgumentException { + } - @Override - public void sendMap(MapView map) { - } + @Override + public void sendMap(MapView map) { + } - @Override - public void updateInventory() { - } + @Override + public void updateInventory() { + } - @Override - public void awardAchievement(@SuppressWarnings("deprecation") Achievement achievement) { - } + @Override + public void awardAchievement(@SuppressWarnings("deprecation") Achievement achievement) { + } - @Override - public void removeAchievement(@SuppressWarnings("deprecation") Achievement achievement) { - } + @Override + public void removeAchievement(@SuppressWarnings("deprecation") Achievement achievement) { + } - @Override - public boolean hasAchievement(@SuppressWarnings("deprecation") Achievement achievement) { - return false; - } + @Override + public boolean hasAchievement(@SuppressWarnings("deprecation") Achievement achievement) { + return false; + } - @Override - public void incrementStatistic(Statistic statistic) throws IllegalArgumentException { - } + @Override + public void incrementStatistic(Statistic statistic) throws IllegalArgumentException { + } - @Override - public void decrementStatistic(Statistic statistic) throws IllegalArgumentException { - } + @Override + public void decrementStatistic(Statistic statistic) throws IllegalArgumentException { + } - @Override - public void incrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException { + @Override + public void incrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException { - } + } - @Override - public void decrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException { + @Override + public void decrementStatistic(Statistic statistic, int amount) throws IllegalArgumentException { - } + } - @Override - public void setStatistic(Statistic statistic, int newValue) throws IllegalArgumentException { + @Override + public void setStatistic(Statistic statistic, int newValue) throws IllegalArgumentException { - } + } - @Override - public int getStatistic(Statistic statistic) throws IllegalArgumentException { + @Override + public int getStatistic(Statistic statistic) throws IllegalArgumentException { - return 0; - } + return 0; + } - @Override - public void incrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException { + @Override + public void incrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException { - } + } - @Override - public void decrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException { + @Override + public void decrementStatistic(Statistic statistic, Material material) throws IllegalArgumentException { - } + } - @Override - public int getStatistic(Statistic statistic, Material material) throws IllegalArgumentException { + @Override + public int getStatistic(Statistic statistic, Material material) throws IllegalArgumentException { - return 0; - } + return 0; + } - @Override - public void incrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException { + @Override + public void incrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException { - } + } - @Override - public void decrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException { + @Override + public void decrementStatistic(Statistic statistic, Material material, int amount) throws IllegalArgumentException { - } + } - @Override - public void setStatistic(Statistic statistic, Material material, int newValue) throws IllegalArgumentException { + @Override + public void setStatistic(Statistic statistic, Material material, int newValue) throws IllegalArgumentException { - } + } - @Override - public void incrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { + @Override + public void incrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { - } + } - @Override - public void decrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { + @Override + public void decrementStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { - } + } - @Override - public int getStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { + @Override + public int getStatistic(Statistic statistic, EntityType entityType) throws IllegalArgumentException { - return 0; - } + return 0; + } - @Override - public void incrementStatistic(Statistic statistic, EntityType entityType, int amount) - throws IllegalArgumentException { + @Override + public void incrementStatistic(Statistic statistic, EntityType entityType, int amount) + throws IllegalArgumentException { - } + } - @Override - public void decrementStatistic(Statistic statistic, EntityType entityType, int amount) { + @Override + public void decrementStatistic(Statistic statistic, EntityType entityType, int amount) { - } + } - @Override - public void setStatistic(Statistic statistic, EntityType entityType, int newValue) { + @Override + public void setStatistic(Statistic statistic, EntityType entityType, int newValue) { - } + } - @Override - public void setPlayerTime(long time, boolean relative) { + @Override + public void setPlayerTime(long time, boolean relative) { - } + } - @Override - public long getPlayerTime() { + @Override + public long getPlayerTime() { - return 0; - } + return 0; + } - @Override - public long getPlayerTimeOffset() { + @Override + public long getPlayerTimeOffset() { - return 0; - } + return 0; + } - @Override - public boolean isPlayerTimeRelative() { + @Override + public boolean isPlayerTimeRelative() { - return false; - } + return false; + } - @Override - public void resetPlayerTime() { + @Override + public void resetPlayerTime() { - } + } - @Override - public void setPlayerWeather(WeatherType type) { + @Override + public void setPlayerWeather(WeatherType type) { - } + } - @Override - public WeatherType getPlayerWeather() { + @Override + public WeatherType getPlayerWeather() { - return null; - } + return null; + } - @Override - public void resetPlayerWeather() { + @Override + public void resetPlayerWeather() { - } + } - @Override - public void giveExp(int amount) { + @Override + public void giveExp(int amount) { - } + } - @Override - public void giveExpLevels(int amount) { + @Override + public void giveExpLevels(int amount) { - } + } - @Override - public float getExp() { + @Override + public float getExp() { - return 0; - } + return 0; + } - @Override - public void setExp(float exp) { + @Override + public void setExp(float exp) { - } + } - @Override - public int getLevel() { + @Override + public int getLevel() { - return 0; - } + return 0; + } - @Override - public void setLevel(int level) { + @Override + public void setLevel(int level) { - } + } - @Override - public int getTotalExperience() { + @Override + public int getTotalExperience() { - return 0; - } + return 0; + } - @Override - public void setTotalExperience(int exp) { + @Override + public void setTotalExperience(int exp) { - } + } - @Override - public float getExhaustion() { + @Override + public float getExhaustion() { - return 0; - } + return 0; + } - @Override - public void setExhaustion(float value) { + @Override + public void setExhaustion(float value) { - } + } - @Override - public float getSaturation() { + @Override + public float getSaturation() { - return 0; - } + return 0; + } - @Override - public void setSaturation(float value) { + @Override + public void setSaturation(float value) { - } + } - @Override - public int getFoodLevel() { + @Override + public int getFoodLevel() { - return 0; - } + return 0; + } - @Override - public void setFoodLevel(int value) { + @Override + public void setFoodLevel(int value) { - } + } - @Override - public Location getBedSpawnLocation() { - return null; - } + @Override + public Location getBedSpawnLocation() { + return null; + } - @Override - public void setBedSpawnLocation(Location location) { - } + @Override + public void setBedSpawnLocation(Location location) { + } - @Override - public void setBedSpawnLocation(Location location, boolean force) { - } + @Override + public void setBedSpawnLocation(Location location, boolean force) { + } - @Override - public boolean getAllowFlight() { - return false; - } + @Override + public boolean getAllowFlight() { + return false; + } - @Override - public void setAllowFlight(boolean flight) { - } + @Override + public void setAllowFlight(boolean flight) { + } - @Override - public void hidePlayer(Player player) { - } + @Override + public void hidePlayer(Player player) { + } - @Override - public void showPlayer(Player player) { - } + @Override + public void showPlayer(Player player) { + } - @Override - public boolean canSee(Player player) { // Nobody can see them - return false; - } + @Override + public boolean canSee(Player player) { // Nobody can see them + return false; + } - @Override - public boolean isFlying() { - return false; - } + @Override + public boolean isFlying() { + return false; + } - @Override - public void setFlying(boolean value) { - } + @Override + public void setFlying(boolean value) { + } - @Override - public void setFlySpeed(float value) throws IllegalArgumentException { - } + @Override + public void setFlySpeed(float value) throws IllegalArgumentException { + } - @Override - public void setWalkSpeed(float value) throws IllegalArgumentException { - } + @Override + public void setWalkSpeed(float value) throws IllegalArgumentException { + } - @Override - public float getFlySpeed() { - return 0; - } + @Override + public float getFlySpeed() { + return 0; + } - @Override - public float getWalkSpeed() { - return 0; - } + @Override + public float getWalkSpeed() { + return 0; + } - @Override - public void setTexturePack(String url) { - } + @Override + public void setTexturePack(String url) { + } - @Override - public void setResourcePack(String url) { - } + @Override + public void setResourcePack(String url) { + } - @Override - public void setResourcePack(String url, byte[] hash) { - } + @Override + public void setResourcePack(String url, byte[] hash) { + } - @Override - public Scoreboard getScoreboard() { - return null; - } + @Override + public Scoreboard getScoreboard() { + return null; + } - @Override - public void setScoreboard(Scoreboard scoreboard) throws IllegalArgumentException, IllegalStateException { - } + @Override + public void setScoreboard(Scoreboard scoreboard) throws IllegalArgumentException, IllegalStateException { + } - @Override - public boolean isHealthScaled() { - return false; - } + @Override + public boolean isHealthScaled() { + return false; + } - @Override - public void setHealthScaled(boolean scale) { - } + @Override + public void setHealthScaled(boolean scale) { + } - @Override - public void setHealthScale(double scale) throws IllegalArgumentException { - } + @Override + public void setHealthScale(double scale) throws IllegalArgumentException { + } - @Override - public double getHealthScale() { - return 1; - } + @Override + public double getHealthScale() { + return 1; + } - @Override - public Entity getSpectatorTarget() { - return null; - } + @Override + public Entity getSpectatorTarget() { + return null; + } - @Override - public void setSpectatorTarget(Entity entity) { - } + @Override + public void setSpectatorTarget(Entity entity) { + } - @Override - public void sendTitle(String title, String subtitle) { - } + @Override + public void sendTitle(String title, String subtitle) { + } - @Override - public void sendTitle(String title, String subtitle, int fadeIn, int stay, int fadeOut) { - } + @Override + public void sendTitle(String title, String subtitle, int fadeIn, int stay, int fadeOut) { + } - @Override - public void resetTitle() { - } + @Override + public void resetTitle() { + } - @Override - public void spawnParticle(Particle particle, Location location, int count) { - } + @Override + public void spawnParticle(Particle particle, Location location, int count) { + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count) { - } + } - @Override - public void spawnParticle(Particle particle, Location location, int count, T data) { + @Override + public void spawnParticle(Particle particle, Location location, int count, T data) { - } + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, T data) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count, T data) { - } + } - @Override - public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, - double offsetZ) { + @Override + public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, + double offsetZ) { - } + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, - double offsetY, double offsetZ) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, + double offsetY, double offsetZ) { - } + } - @Override - public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, - double offsetZ, T data) { + @Override + public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, + double offsetZ, T data) { - } + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, - double offsetY, double offsetZ, T data) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, + double offsetY, double offsetZ, T data) { - } + } - @Override - public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, - double offsetZ, double extra) { + @Override + public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, + double offsetZ, double extra) { - } + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, - double offsetY, double offsetZ, double extra) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, + double offsetY, double offsetZ, double extra) { - } + } - @Override - public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, - double offsetZ, double extra, T data) { + @Override + public void spawnParticle(Particle particle, Location location, int count, double offsetX, double offsetY, + double offsetZ, double extra, T data) { - } + } - @Override - public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, - double offsetY, double offsetZ, double extra, T data) { + @Override + public void spawnParticle(Particle particle, double x, double y, double z, int count, double offsetX, + double offsetY, double offsetZ, double extra, T data) { - } + } - @Override - public AdvancementProgress getAdvancementProgress(Advancement advancement) { // TODO: Test - return null; - } + @Override + public AdvancementProgress getAdvancementProgress(Advancement advancement) { // TODO: Test + return null; + } - @Override - public String getLocale() { + @Override + public String getLocale() { - return null; - } + return null; + } - @Override - public Player.Spigot spigot() { - return new Player.Spigot(); - } + @Override + public Player.Spigot spigot() { + return new Player.Spigot(); + } }