Merged pull request #42.
This commit is contained in:
@@ -1,5 +1,10 @@
|
||||
apply plugin: "java"
|
||||
|
||||
configurations.all {
|
||||
// Check for updates every build
|
||||
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
maven { url "https://jitpack.io" }
|
||||
|
||||
@@ -84,7 +84,15 @@ command chatonly {
|
||||
perm utilschat.chatonly;
|
||||
[empty] {
|
||||
run chatonly;
|
||||
help Shows that you're only able to chat, nothing else.;
|
||||
help Shows that you're onlu able to chat, nothing else.;
|
||||
type player;
|
||||
}
|
||||
}
|
||||
|
||||
command resetchatformatting {
|
||||
[empty] {
|
||||
run reset_formatting;
|
||||
help Resets the formatting to defaults.;
|
||||
type console;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.redstoner.modules.chat;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
@@ -7,6 +8,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -29,24 +31,23 @@ import com.redstoner.modules.datamanager.DataManager;
|
||||
import com.redstoner.modules.ignore.Ignore;
|
||||
|
||||
import net.nemez.chatapi.ChatAPI;
|
||||
import net.nemez.chatapi.click.Message;
|
||||
|
||||
@Commands(CommandHolderType.File)
|
||||
@AutoRegisterListener
|
||||
@Version(major = 5, minor = 0, revision = 0, compatible = 4)
|
||||
@Version(major = 5, minor = 1, revision = 1, compatible = 4)
|
||||
public class Chat implements Module, Listener {
|
||||
private final Map<String, String> defaults = new HashMap<>();
|
||||
private Set<UUID> chatonly = new HashSet<>();
|
||||
|
||||
public Chat() {
|
||||
defaults.put("chat", " %n %c§7→§r %m");
|
||||
defaults.put("chat", " %n %c%w→§r %m");
|
||||
defaults.put("me", " §7- %n %c§7⇦ %m");
|
||||
defaults.put("action", " §7- %n %c§7⇦ %m");
|
||||
defaults.put("say", " §7[§9%n§7]%c§7:§r %m");
|
||||
defaults.put("shrug", " %n %c§7→§r %m ¯\\_(ツ)_/¯");
|
||||
defaults.put("say", " §7[§9%n§7]%c%w:§r %m");
|
||||
defaults.put("shrug", " %n %c%w→§r %m ¯\\_(ツ)_/¯");
|
||||
defaults.put("print", "%m");
|
||||
defaults.put("%c", "§c*");
|
||||
defaults.put("%c-hover", "§cChat Only");
|
||||
defaults.put("%w-default", "§7");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,9 +59,15 @@ public class Chat implements Module, Listener {
|
||||
DataManager.setConfig("shrug", defaults.get("shrug"));
|
||||
DataManager.setConfig("print", defaults.get("print"));
|
||||
DataManager.setConfig("%c", defaults.get("%c"));
|
||||
DataManager.setConfig("%c-hover", defaults.get("%c-hover"));
|
||||
DataManager.setConfig("%w-default", defaults.get("§7"));
|
||||
}
|
||||
|
||||
@Command(hook = "reset_formatting")
|
||||
public void resetFormatting(CommandSender sender) {
|
||||
firstLoad();
|
||||
sender.sendMessage("Chat Formats have been reset to defaults.");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||
public void onPlayerChat(AsyncPlayerChatEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
@@ -203,28 +210,51 @@ public class Chat implements Module, Listener {
|
||||
}
|
||||
|
||||
String raw = (String) DataManager.getConfigOrDefault(format, defaults.get(format));
|
||||
String formatted = raw.replace("%n", name).replace("%m", message);
|
||||
String formatted = raw.replace("%n", name);
|
||||
BroadcastFilter filter = wrap(ModuleLoader.exists("Ignore") ? Ignore.getIgnoredBy(sender) : null, event);
|
||||
|
||||
if (isChatOnly) {
|
||||
formatted = !isChatOnly? formatted.replaceAll("%c", "") : formatted.replace("%c", (String) DataManager.getConfigOrDefault("%c", defaults.get("%c")));
|
||||
|
||||
|
||||
if (sender instanceof Player)
|
||||
formatted = formatted.replace("%w", (String) DataManager.getConfigOrDefault(((Player)sender).getWorld().getName() + ".%w",
|
||||
(String) DataManager.getConfigOrDefault("%w-default", defaults.get("%w-default"))));
|
||||
else
|
||||
formatted = formatted.replace("%w", "");
|
||||
|
||||
if (ModuleLoader.exists("Mentio")) {
|
||||
for (Player player : Bukkit.getOnlinePlayers())
|
||||
if (filter.sendTo(player)) {
|
||||
ChatAPI.createMessage(player, sender).appendText(getMentioMessage(sender, player, formatted, message)).send();
|
||||
}
|
||||
Bukkit.getConsoleSender().sendMessage(ChatAPI.colorify(sender, formatted.replace("%m", message)));
|
||||
|
||||
String part1 = formatted.substring(0, formatted.indexOf("%c"));
|
||||
String part2 = formatted.substring(formatted.indexOf("%c") + 2);
|
||||
String indicatior = (String) DataManager.getConfigOrDefault("%c", defaults.get("%c"));
|
||||
String indicatiorHover = (String) DataManager.getConfigOrDefault("%c-hover", defaults.get("%c-hover"));
|
||||
|
||||
Message msg = ChatAPI.createMessage(null)
|
||||
.appendText(part1)
|
||||
.appendTextHover(indicatior, indicatiorHover)
|
||||
.appendText(part2);
|
||||
Utils.broadcast("", msg, filter);
|
||||
return true;
|
||||
}
|
||||
|
||||
Utils.broadcast("", ChatAPI.colorify(sender, formatted.replace("%c", "")), filter);
|
||||
|
||||
else
|
||||
Utils.broadcast("", ChatAPI.colorify(sender, formatted.replace("%m", message)), filter);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private String getMentioMessage(CommandSender sender, Player player, String format, String message) {
|
||||
try {
|
||||
Module mod = ModuleLoader.getModule("Mentio");
|
||||
Method m = mod.getClass().getDeclaredMethod("modifyMessageWithMentio", CommandSender.class, Player.class, String.class);
|
||||
m.setAccessible(true);
|
||||
|
||||
String msg = (String) m.invoke(mod, sender, player, message);
|
||||
|
||||
if (msg != null) {
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1);
|
||||
return format.replace("%m", msg);
|
||||
}
|
||||
else
|
||||
return format.replace("%m", message);
|
||||
|
||||
} catch (Exception e) {
|
||||
return format.replace("%m", message);
|
||||
}
|
||||
}
|
||||
|
||||
public BroadcastFilter wrap(BroadcastFilter filter, AsyncPlayerChatEvent event) {
|
||||
if (event == null) return filter;
|
||||
|
||||
@@ -88,10 +88,6 @@ public class Chatalias implements Module, Listener {
|
||||
keyword = keyword.replace("RND;", "");
|
||||
String[] results = replacement.split(" \\|\\| ");
|
||||
|
||||
for (String str : results) {
|
||||
System.out.println(str);
|
||||
}
|
||||
|
||||
int rand = ThreadLocalRandom.current().nextInt(0, results.length);
|
||||
|
||||
replacement = results[rand];
|
||||
|
||||
@@ -37,7 +37,7 @@ import net.nemez.chatapi.ChatAPI;
|
||||
|
||||
@AutoRegisterListener
|
||||
@Commands(CommandHolderType.File)
|
||||
@Version(major = 5, minor = 0, revision = 0, compatible = 4)
|
||||
@Version(major = 5, minor = 0, revision = 4, compatible = 4)
|
||||
public class Mail implements Module, Listener
|
||||
{
|
||||
|
||||
@@ -226,7 +226,7 @@ public class Mail implements Module, Listener
|
||||
if (!op.hasPlayedBefore())
|
||||
getLogger().message(sender, true, "&e" + player + "&7 has never joined the server.");
|
||||
else
|
||||
sendMessage(sender, op.getPlayer().getUniqueId().toString(), message, null);
|
||||
sendMessage(sender, op.getUniqueId().toString(), message, null);
|
||||
}
|
||||
|
||||
@Command(hook = "reply")
|
||||
@@ -247,13 +247,13 @@ public class Mail implements Module, Listener
|
||||
|
||||
public void sendMessage(CommandSender sender, String r_uuid, String message, String chain) {
|
||||
|
||||
Player r = Bukkit.getOfflinePlayer(UUID.fromString(r_uuid)).getPlayer();
|
||||
OfflinePlayer r = Bukkit.getOfflinePlayer(UUID.fromString(r_uuid));
|
||||
|
||||
if (ModuleLoader.exists("Ignore") ? !Ignore.getIgnoredBy(sender).sendTo(r) : false)
|
||||
{
|
||||
getLogger().message(sender, true, Utils.getName(r) + " has ignored you. Your message was not sent.");
|
||||
return;
|
||||
}
|
||||
//if (ModuleLoader.exists("Ignore") ? !Ignore.getIgnoredBy(sender).sendTo(r) : false)
|
||||
//{
|
||||
// getLogger().message(sender, true, Utils.getName(r) + " has ignored you. Your message was not sent.");
|
||||
// return;
|
||||
//}
|
||||
|
||||
String s_uuid = ((Player)sender).getUniqueId().toString();
|
||||
|
||||
@@ -283,7 +283,7 @@ public class Mail implements Module, Listener
|
||||
|
||||
if (r.isOnline()) {
|
||||
int num = playerToMsg.get(r_uuid).size();
|
||||
ChatAPI.createMessage(r)
|
||||
ChatAPI.createMessage((Player)r)
|
||||
.appendText(getLogger().getPrefix() + "&7You got &e" + num + "&7 message" + (num == 1? "" : "s") + "! Do ")
|
||||
.appendSendChatHover("&e/mail", "/mail", "Click to read your messages")
|
||||
.appendText("&7 to read them.")
|
||||
@@ -400,7 +400,7 @@ public class Mail implements Module, Listener
|
||||
String uuid = ((Player)sender).getUniqueId().toString();
|
||||
Map<Integer,Msg> list = archives.get(uuid);
|
||||
|
||||
if (id < 0 || id >= list.size()) {
|
||||
if (id < 0 || list == null || !list.containsKey(id)) {
|
||||
getLogger().message(sender, true, "You have no archived messages with that ID.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.redstoner.modules.mail;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.json.simple.JSONObject;
|
||||
@@ -56,9 +57,9 @@ public class Msg {
|
||||
}
|
||||
|
||||
public String getChain() {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
|
||||
String line = getPrefix(p) + p.getName() + "&7:&f " + message;
|
||||
String line = "&9" + p.getName() + "&7:&f " + message;
|
||||
|
||||
if (chain == null)
|
||||
return line;
|
||||
@@ -67,17 +68,14 @@ public class Msg {
|
||||
}
|
||||
|
||||
public void showMinimal(CommandSender viewer, Theme theme, boolean showDisplayName) {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
String name = getPrefix(p) + p.getName();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
String name = "&9" + p.getName();
|
||||
|
||||
Message msg = ChatAPI.createMessage(viewer)
|
||||
.appendText(theme.getBracketColor() + "[")
|
||||
.appendTextHover(theme.getInfoColor() + "I", "&9Time Sent:\n&7" + timeSent + "\nID: " + id)
|
||||
.appendText(theme.getBracketColor() + "] ");
|
||||
if (showDisplayName)
|
||||
msg.appendTextHover(p.getDisplayName(), name);
|
||||
else
|
||||
msg.appendText(name);
|
||||
msg.appendText(name);
|
||||
msg.appendText(theme.getColonColor() + ": ");
|
||||
if (chain == null)
|
||||
msg.appendText(message).send();
|
||||
@@ -86,8 +84,8 @@ public class Msg {
|
||||
}
|
||||
|
||||
public void showSimple(CommandSender viewer, Theme theme, boolean showDisplayName) {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
String name = getPrefix(p) + p.getName();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
String name = "&9" + p.getName();
|
||||
|
||||
Message msg = ChatAPI.createMessage(viewer)
|
||||
.appendText(theme.getBracketColor() + "[")
|
||||
@@ -95,10 +93,7 @@ public class Msg {
|
||||
.appendText(theme.getBracketColor() + "][")
|
||||
.appendTextHover(theme.getInfoColor() + "I", "&9Time Sent:\n&7" + timeSent + "\nID: " + id)
|
||||
.appendText(theme.getBracketColor() + "] ");
|
||||
if (showDisplayName)
|
||||
msg.appendTextHover(p.getDisplayName(), name);
|
||||
else
|
||||
msg.appendText(name);
|
||||
msg.appendText(name);
|
||||
msg.appendText(theme.getColonColor() + ": ");
|
||||
if (chain == null)
|
||||
msg.appendText(message).send();
|
||||
@@ -107,8 +102,8 @@ public class Msg {
|
||||
}
|
||||
|
||||
public void showNormal(CommandSender viewer, Theme theme, boolean showDisplayName) {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
String name = getPrefix(p) + p.getName();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
String name = "&9" + p.getName();
|
||||
|
||||
Message msg = ChatAPI.createMessage(viewer)
|
||||
.appendText(theme.getBracketColor() + "[")
|
||||
@@ -118,10 +113,7 @@ public class Msg {
|
||||
.appendText(theme.getBracketColor() + "][")
|
||||
.appendSuggestHover(theme.getReplyColor() + "Reply", "/mail reply " + id + " ", "&7Reply")
|
||||
.appendText(theme.getBracketColor() + "] ");
|
||||
if (showDisplayName)
|
||||
msg.appendTextHover(p.getDisplayName(), name);
|
||||
else
|
||||
msg.appendText(name);
|
||||
msg.appendText(name);
|
||||
msg.appendText(theme.getColonColor() + ": ");
|
||||
if (chain == null)
|
||||
msg.appendText(message).send();
|
||||
@@ -130,8 +122,8 @@ public class Msg {
|
||||
}
|
||||
|
||||
public void showFull(CommandSender viewer, Theme theme, boolean showDisplayName) {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
String name = getPrefix(p) + p.getName();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
String name = "&9" + p.getName();
|
||||
|
||||
Message msg = ChatAPI.createMessage(viewer)
|
||||
.appendText(theme.getBracketColor() + "[")
|
||||
@@ -143,10 +135,7 @@ public class Msg {
|
||||
.appendText(theme.getBracketColor() + "][")
|
||||
.appendSendChatHover(theme.getArchiveColor() + "Archive", "/mail archive " + id + " ", "&6Archive")
|
||||
.appendText(theme.getBracketColor() + "] ");
|
||||
if (showDisplayName)
|
||||
msg.appendTextHover(p.getDisplayName(), name);
|
||||
else
|
||||
msg.appendText(name);
|
||||
msg.appendText(name);
|
||||
msg.appendText(theme.getColonColor() + ": ");
|
||||
if (chain == null)
|
||||
msg.appendText(message).send();
|
||||
@@ -155,8 +144,8 @@ public class Msg {
|
||||
}
|
||||
|
||||
public void showArchived(CommandSender viewer, Theme theme, boolean showDisplayName) {
|
||||
Player p = Bukkit.getOfflinePlayer(UUID.fromString(sender)).getPlayer();
|
||||
String name = getPrefix(p) + p.getName();
|
||||
OfflinePlayer p = Bukkit.getOfflinePlayer(UUID.fromString(sender));
|
||||
String name = "&9" + p.getName();
|
||||
|
||||
Message msg = ChatAPI.createMessage(viewer)
|
||||
.appendText(theme.getBracketColor() + "[")
|
||||
@@ -164,16 +153,14 @@ public class Msg {
|
||||
.appendText(theme.getBracketColor() + "][")
|
||||
.appendTextHover(theme.getInfoColor() + "I", "&9Time Sent:\n&7" + timeSent + "\nID: " + id)
|
||||
.appendText(theme.getBracketColor() + "] ");
|
||||
if (showDisplayName)
|
||||
msg.appendTextHover(p.getDisplayName(), name);
|
||||
else
|
||||
msg.appendText(name);
|
||||
msg.appendText(name);
|
||||
msg.appendText(theme.getColonColor() + ": ");
|
||||
if (chain == null)
|
||||
msg.appendText(message).send();
|
||||
else
|
||||
msg.appendTextHover(message, chain).send();
|
||||
}
|
||||
|
||||
|
||||
private String getPrefix(Player player)
|
||||
{
|
||||
|
||||
@@ -3,15 +3,10 @@ package com.redstoner.modules.mentio;
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -19,26 +14,26 @@ import com.nemez.cmdmgr.Command;
|
||||
import com.redstoner.annotations.AutoRegisterListener;
|
||||
import com.redstoner.annotations.Commands;
|
||||
import com.redstoner.annotations.Version;
|
||||
import com.redstoner.coremods.moduleLoader.ModuleLoader;
|
||||
import com.redstoner.misc.CommandHolderType;
|
||||
import com.redstoner.misc.JsonManager;
|
||||
import com.redstoner.misc.Main;
|
||||
import com.redstoner.modules.Module;
|
||||
import com.redstoner.modules.ignore.Ignore;
|
||||
|
||||
import net.nemez.chatapi.click.Message;
|
||||
import net.nemez.chatapi.ChatAPI;
|
||||
|
||||
@Commands(CommandHolderType.File)
|
||||
@AutoRegisterListener
|
||||
@Version(major = 5, minor = 0, revision = 0, compatible = 4)
|
||||
@Version(major = 5, minor = 1, revision = 0, compatible = 4)
|
||||
public class Mentio implements Module, Listener
|
||||
{
|
||||
private File mentioLocation = new File(Main.plugin.getDataFolder(), "mentio.json");
|
||||
private JSONObject mentios;
|
||||
public static Mentio instance;
|
||||
|
||||
@Override
|
||||
public boolean onEnable()
|
||||
{
|
||||
instance = this;
|
||||
loadMentios();
|
||||
return true;
|
||||
}
|
||||
@@ -119,43 +114,37 @@ public class Mentio implements Module, Listener
|
||||
return mentios;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onPlayerChat(AsyncPlayerChatEvent event)
|
||||
public String modifyMessageWithMentio(CommandSender permholder, Player player, String message)
|
||||
{
|
||||
if (event.isCancelled())
|
||||
return;
|
||||
for (Player player : event.getRecipients())
|
||||
UUID uuid = player.getUniqueId();
|
||||
JSONArray playerMentios = (JSONArray) mentios.get(uuid.toString());
|
||||
playerMentios = defaultMentio(playerMentios, player);
|
||||
|
||||
for (Object raw : playerMentios)
|
||||
{
|
||||
if (ModuleLoader.exists("Ignore") ? !Ignore.getIgnoredBy(event.getPlayer()).sendTo(player) : false)
|
||||
return;
|
||||
UUID uuid = player.getUniqueId();
|
||||
JSONArray playerMentios = (JSONArray) mentios.get(uuid.toString());
|
||||
playerMentios = defaultMentio(playerMentios, player);
|
||||
for (Object raw : playerMentios)
|
||||
{
|
||||
String mentio = (String) raw;
|
||||
if (event.getMessage().toLowerCase().contains(mentio.toLowerCase()))
|
||||
{
|
||||
event.getRecipients().remove(player);
|
||||
String temp = event.getMessage().replaceAll("(?i)" + Pattern.quote(mentio) + ".*", "");
|
||||
String lastColorCodes = "§r";
|
||||
char lastChar = ' ';
|
||||
for (char c : temp.toCharArray())
|
||||
{
|
||||
if (lastChar == '§')
|
||||
lastColorCodes += "§" + c;
|
||||
lastChar = c;
|
||||
}
|
||||
Message m = new Message(player, event.getPlayer());
|
||||
m.appendText(event.getFormat().replace("%1$s", event.getPlayer().getDisplayName()).replace("%2$s",
|
||||
event.getMessage().replaceFirst("(?i)(" + Pattern.quote(mentio) + ")([^ ]*)",
|
||||
"§a§o$1$2" + lastColorCodes)));
|
||||
m.send();
|
||||
player.playSound(player.getLocation(), Sound.ENTITY_CHICKEN_EGG, 1, 1);
|
||||
return;
|
||||
String mentio = (String) raw;
|
||||
|
||||
String messageLC = message.toLowerCase();
|
||||
String mentioLC = mentio.toLowerCase();
|
||||
if (messageLC.contains(mentioLC))
|
||||
{
|
||||
char color = 'r';
|
||||
int index = messageLC.indexOf(mentioLC);
|
||||
for (int i = index; i > 0; i--) {
|
||||
char next = messageLC.charAt(i-1);
|
||||
char cur = messageLC.charAt(i);
|
||||
if((next == '§' || next == '&') && ("" + cur).matches("[a-f0-9r]")) {
|
||||
color = cur;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ChatAPI.colorify(permholder, message.substring(0, index)
|
||||
+ "§a§o" + message.substring(index, index + mentio.length()) + "§r" + (permholder.hasPermission(ChatAPI.PERMISSION_CHAT_COLOR)? "&" + color : ""))
|
||||
+ message.substring(index + mentio.length());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
private void loadMentios()
|
||||
|
||||
@@ -13,6 +13,9 @@ import net.nemez.chatapi.click.Message;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.Waterlogged;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -21,6 +24,7 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockFromToEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||
import org.bukkit.potion.PotionEffect;
|
||||
@@ -30,7 +34,7 @@ import java.util.UUID;
|
||||
|
||||
@Commands (CommandHolderType.File)
|
||||
@AutoRegisterListener
|
||||
@Version (major = 5, minor = 0, revision = 0, compatible = 4)
|
||||
@Version (major = 5, minor = 2, revision = 0, compatible = 4)
|
||||
public class Misc implements Module, Listener {
|
||||
private static final String[] SUDO_BLACKLIST = new String[] {
|
||||
"(.*:)?e?sudo",
|
||||
@@ -72,6 +76,13 @@ public class Misc implements Module, Listener {
|
||||
|
||||
player.teleport(player.getWorld().getSpawnLocation());
|
||||
}
|
||||
|
||||
event.setJoinMessage(null);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
event.setQuitMessage(null);
|
||||
}
|
||||
|
||||
// Disables spectator teleportation
|
||||
@@ -86,20 +97,60 @@ public class Misc implements Module, Listener {
|
||||
}
|
||||
}
|
||||
|
||||
private static final Material[] LIQUID_FLOW_EXCEPTIONS = {
|
||||
Material.AIR,
|
||||
Material.CAVE_AIR,
|
||||
Material.VOID_AIR,
|
||||
Material.WATER,
|
||||
Material.LAVA
|
||||
};
|
||||
|
||||
private static final Material[] PROTECTED_REDSTONE_BLOCKS = {
|
||||
Material.REDSTONE_WIRE, Material.REDSTONE_TORCH, Material.REDSTONE_WALL_TORCH,
|
||||
Material.COMPARATOR, Material.REPEATER, Material.RAIL, Material.ACTIVATOR_RAIL,
|
||||
Material.DETECTOR_RAIL, Material.TRIPWIRE, Material.TRIPWIRE_HOOK,
|
||||
Material.ACACIA_BUTTON,Material.BIRCH_BUTTON, Material.DARK_OAK_BUTTON,
|
||||
Material.JUNGLE_BUTTON, Material.OAK_BUTTON, Material.SPRUCE_BUTTON,
|
||||
Material.STONE_BUTTON, Material.LEVER, Material.ACACIA_PRESSURE_PLATE,
|
||||
Material.BIRCH_PRESSURE_PLATE, Material.DARK_OAK_PRESSURE_PLATE,
|
||||
Material.HEAVY_WEIGHTED_PRESSURE_PLATE, Material.JUNGLE_PRESSURE_PLATE,
|
||||
Material.LIGHT_WEIGHTED_PRESSURE_PLATE, Material.OAK_PRESSURE_PLATE,
|
||||
Material.SPRUCE_PRESSURE_PLATE, Material.STONE_PRESSURE_PLATE
|
||||
};
|
||||
|
||||
// Disables water and lava breaking stuff
|
||||
@EventHandler
|
||||
public void onLiquidFlow(BlockFromToEvent event) {
|
||||
Material m = event.getToBlock().getType();
|
||||
Block toBlock = event.getToBlock();
|
||||
Material m = toBlock.getType();
|
||||
String world = toBlock.getWorld().getName();
|
||||
String protectionLevel = (String) DataManager.getConfigOrDefault(world, "rs-only");
|
||||
|
||||
for (Material exception : LIQUID_FLOW_EXCEPTIONS)
|
||||
if (m == exception) return;
|
||||
|
||||
switch (m) {
|
||||
case AIR:
|
||||
case WATER:
|
||||
case LAVA:
|
||||
return;
|
||||
default: {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
if (protectionLevel.equals("rs-only")) {
|
||||
for (Material rs : PROTECTED_REDSTONE_BLOCKS)
|
||||
if (m == rs) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (!protectionLevel.equals("all")){
|
||||
DataManager.setConfig(world, "rs-only");
|
||||
getLogger().warn("Invalid config option for Water in the world, &e" + world + "&7. Setting to default.");
|
||||
onLiquidFlow(event);
|
||||
}
|
||||
|
||||
|
||||
BlockData data = toBlock.getBlockData();
|
||||
|
||||
if (!(data instanceof Waterlogged)) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Command (hook = "tempadddef")
|
||||
@@ -334,4 +385,4 @@ public class Misc implements Module, Listener {
|
||||
|
||||
return typeE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
111
src/main/java/com/redstoner/modules/survival/Survival.java
Normal file
111
src/main/java/com/redstoner/modules/survival/Survival.java
Normal file
@@ -0,0 +1,111 @@
|
||||
package com.redstoner.modules.survival;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerGameModeChangeEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
import com.redstoner.annotations.AutoRegisterListener;
|
||||
import com.redstoner.annotations.Commands;
|
||||
import com.redstoner.annotations.Version;
|
||||
import com.redstoner.misc.CommandHolderType;
|
||||
import com.redstoner.misc.Main;
|
||||
import com.redstoner.modules.Module;
|
||||
import com.redstoner.modules.datamanager.DataManager;
|
||||
|
||||
import net.nemez.chatapi.ChatAPI;
|
||||
|
||||
@Commands(CommandHolderType.File)
|
||||
@AutoRegisterListener
|
||||
@Version(major = 5, minor = 0, revision = 5, compatible = 4)
|
||||
public class Survival implements Module, Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerTeleport(PlayerTeleportEvent e) {
|
||||
if (e.getPlayer().getGameMode() != GameMode.SURVIVAL)
|
||||
return;
|
||||
World w1 = e.getFrom().getWorld();
|
||||
World w2 = e.getTo().getWorld();
|
||||
|
||||
checkSleep(w1);
|
||||
if (!w1.getName().equals(w2.getName()))
|
||||
checkSleep(w2);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onLeave(PlayerQuitEvent e) {
|
||||
if (e.getPlayer().getGameMode() == GameMode.SURVIVAL)
|
||||
checkSleep(e.getPlayer().getWorld());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onGamemodeChange(PlayerGameModeChangeEvent e) {
|
||||
if (e.getNewGameMode() == GameMode.SURVIVAL || e.getPlayer().getGameMode() == GameMode.SURVIVAL)
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> checkSleep(e.getPlayer().getWorld()), 20);
|
||||
}
|
||||
|
||||
boolean suspendEvents = false;
|
||||
|
||||
private int lastPer = 0;
|
||||
|
||||
public void checkSleep(World world) {
|
||||
if (suspendEvents || !canSleep(world.getTime(), world.isThundering()) || world.getPlayers().size() == 0)
|
||||
return;
|
||||
|
||||
if (!((String)DataManager.getConfigOrDefault(world.getName() + ".enabled", "false")).equals("true"))
|
||||
return;
|
||||
|
||||
int sleepingPlayers = 0;
|
||||
int totalPlayers = 0;
|
||||
|
||||
for (Player p : world.getPlayers())
|
||||
if (p.isSleeping() && p.getGameMode() == GameMode.SURVIVAL)
|
||||
sleepingPlayers++;
|
||||
|
||||
for (Player p : world.getPlayers())
|
||||
if (p.getGameMode() == GameMode.SURVIVAL)
|
||||
totalPlayers++;
|
||||
|
||||
if (totalPlayers == 0)
|
||||
return;
|
||||
|
||||
int perSleeping = 100 * sleepingPlayers / totalPlayers;
|
||||
int perNeeded =Integer.parseInt((String) DataManager.getConfigOrDefault(world.getName() + ".perNeededToSleep", "51"));
|
||||
|
||||
if (perSleeping == lastPer)
|
||||
return;
|
||||
if (perSleeping >= perNeeded) {
|
||||
notifyPlayers(world.getPlayers(), "&e" + perSleeping + "%&f were sleeping. The &6sun&f is rising!");
|
||||
world.setTime(23450);
|
||||
world.setStorm(false);
|
||||
world.setThundering(false);
|
||||
suspendEvents = true;
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.plugin, () -> resumeEvents(), 20);
|
||||
}
|
||||
else
|
||||
notifyPlayers(world.getPlayers(), "&e" + perSleeping + "%&f are sleeping. &e" + perNeeded + "%&f needed");
|
||||
lastPer = perSleeping;
|
||||
}
|
||||
|
||||
public boolean resumeEvents() {
|
||||
suspendEvents = false;
|
||||
lastPer = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean canSleep(long time, boolean thundering) {
|
||||
return !(time < 12300 || time > 23850) || thundering;
|
||||
}
|
||||
|
||||
public void notifyPlayers(List<Player> players, String msg) {
|
||||
for (Player p : players)
|
||||
ChatAPI.sendActionBar(p, "&0[&2Sleep&0] " + msg);
|
||||
}
|
||||
}
|
||||
3
src/main/java/com/redstoner/modules/survival/module.info
Normal file
3
src/main/java/com/redstoner/modules/survival/module.info
Normal file
@@ -0,0 +1,3 @@
|
||||
displayName: Survival
|
||||
category: Other
|
||||
description: A module to contain features related to the survival worlds
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.redstoner.modules.teleport;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Stack;
|
||||
|
||||
@@ -25,7 +26,7 @@ import net.nemez.chatapi.ChatAPI;
|
||||
|
||||
@Commands(CommandHolderType.File)
|
||||
@AutoRegisterListener
|
||||
@Version(major = 5, minor = 0, revision = 0, compatible = 4)
|
||||
@Version(major = 5, minor = 0, revision = 2, compatible = 4)
|
||||
public class Teleport implements Module, Listener
|
||||
{
|
||||
public static final String PERMISSION_TELEPORT = "utils.teleport.tp";
|
||||
@@ -49,8 +50,6 @@ public class Teleport implements Module, Listener
|
||||
|
||||
if (p == null)
|
||||
playerDoesNotExistError(sender, player);
|
||||
else if (sender.getName().equals(p.getName()))
|
||||
cannotTpToYourself(sender);
|
||||
else {
|
||||
p.teleport(new Location(p.getWorld(), x, y, z), TeleportCause.COMMAND);
|
||||
getLogger().message(sender, "Teleported &e" + p.getDisplayName() +
|
||||
@@ -88,14 +87,14 @@ public class Teleport implements Module, Listener
|
||||
}
|
||||
|
||||
Player p1 = Bukkit.getPlayer(player);
|
||||
Player p2 = Bukkit.getPlayer(player);
|
||||
Player p2 = Bukkit.getPlayer(player2);
|
||||
|
||||
if (p1 == null)
|
||||
playerDoesNotExistError(sender, player);
|
||||
else if (p2 == null)
|
||||
playerDoesNotExistError(sender, player2);
|
||||
else if (p1.getName().equals(p2.getName()))
|
||||
cannotTpToYourself(sender);
|
||||
getLogger().message(sender, true, "You can't teleport a player to themselves.");
|
||||
else {
|
||||
p1.teleport(p2, TeleportCause.COMMAND);
|
||||
getLogger().message(sender, "&e" +p1.getDisplayName() + "&7 has been teleported to &e" +
|
||||
@@ -461,27 +460,35 @@ public class Teleport implements Module, Listener
|
||||
last_request.remove(p);
|
||||
last_request_got.remove(p);
|
||||
|
||||
for (Player fl : pending_requests.keySet()) {
|
||||
Iterator<Player> pr_iterator = pending_requests.keySet().iterator();
|
||||
while (pr_iterator.hasNext()) {
|
||||
Player fl = pr_iterator.next();
|
||||
Map<Player, TPAType> m = pending_requests.get(fl);
|
||||
m.remove(p);
|
||||
if (m.isEmpty())
|
||||
pending_requests.remove(fl);
|
||||
pr_iterator.remove();
|
||||
else
|
||||
pending_requests.put(fl, m);
|
||||
}
|
||||
for (Player fl : last_request.keySet()) {
|
||||
|
||||
Iterator<Player> lr_iterator = last_request.keySet().iterator();
|
||||
while (lr_iterator.hasNext()) {
|
||||
Player fl = lr_iterator.next();
|
||||
Stack<Player> s = last_request.get(fl);
|
||||
s.remove(p);
|
||||
if (s.isEmpty())
|
||||
last_request.remove(fl);
|
||||
lr_iterator.remove();
|
||||
else
|
||||
last_request.put(fl, s);
|
||||
}
|
||||
for (Player fl : last_request_got.keySet()) {
|
||||
|
||||
Iterator<Player> lrg_iterator = last_request_got.keySet().iterator();
|
||||
while (lrg_iterator.hasNext()) {
|
||||
Player fl = lrg_iterator.next();
|
||||
Stack<Player> s = last_request_got.get(fl);
|
||||
s.remove(p);
|
||||
if (s.isEmpty())
|
||||
last_request_got.remove(fl);
|
||||
lrg_iterator.remove();
|
||||
else
|
||||
last_request_got.put(fl, s);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user