summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLogan Fick <logaldeveloper@protonmail.com>2019-01-21 20:49:22 -0500
committerLogan Fick <logaldeveloper@protonmail.com>2019-01-21 20:49:22 -0500
commit958bca9a5b70e0fe1443d2264f91649d9b7d0ebf (patch)
treeb446b811929adbad562d0dbdb167ac6c9f546e8b
parent02beb2ddeb99618b4b938afe040f49f030b6a413 (diff)
parent71ae1b37793110e6210cd7a50333f22be38385d6 (diff)
Merged pull request #42.
-rw-r--r--build.gradle5
-rw-r--r--src/main/java/com/redstoner/modules/chat/Chat.cmd10
-rw-r--r--src/main/java/com/redstoner/modules/chat/Chat.java76
-rw-r--r--src/main/java/com/redstoner/modules/chatalias/Chatalias.java4
-rw-r--r--src/main/java/com/redstoner/modules/mail/Mail.java20
-rw-r--r--src/main/java/com/redstoner/modules/mail/Msg.java51
-rw-r--r--src/main/java/com/redstoner/modules/mentio/Mentio.java71
-rw-r--r--src/main/java/com/redstoner/modules/misc/Misc.java75
-rw-r--r--src/main/java/com/redstoner/modules/survival/Survival.cmd0
-rw-r--r--src/main/java/com/redstoner/modules/survival/Survival.java111
-rw-r--r--src/main/java/com/redstoner/modules/survival/module.info3
-rw-r--r--src/main/java/com/redstoner/modules/teleport/Teleport.java29
12 files changed, 321 insertions, 134 deletions
diff --git a/build.gradle b/build.gradle
index 7d53907..1227eac 100644
--- a/build.gradle
+++ b/build.gradle
@@ -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" }
diff --git a/src/main/java/com/redstoner/modules/chat/Chat.cmd b/src/main/java/com/redstoner/modules/chat/Chat.cmd
index 48d3983..fcd91fc 100644
--- a/src/main/java/com/redstoner/modules/chat/Chat.cmd
+++ b/src/main/java/com/redstoner/modules/chat/Chat.cmd
@@ -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;
+ }
+}
diff --git a/src/main/java/com/redstoner/modules/chat/Chat.java b/src/main/java/com/redstoner/modules/chat/Chat.java
index ebe2d07..7472ced 100644
--- a/src/main/java/com/redstoner/modules/chat/Chat.java
+++ b/src/main/java/com/redstoner/modules/chat/Chat.java
@@ -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) {
-
- 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"));
+ 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)));
- 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;
diff --git a/src/main/java/com/redstoner/modules/chatalias/Chatalias.java b/src/main/java/com/redstoner/modules/chatalias/Chatalias.java
index df7e8e1..ce9ec07 100644
--- a/src/main/java/com/redstoner/modules/chatalias/Chatalias.java
+++ b/src/main/java/com/redstoner/modules/chatalias/Chatalias.java
@@ -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];
diff --git a/src/main/java/com/redstoner/modules/mail/Mail.java b/src/main/java/com/redstoner/modules/mail/Mail.java
index ee26842..339b381 100644
--- a/src/main/java/com/redstoner/modules/mail/Mail.java
+++ b/src/main/java/com/redstoner/modules/mail/Mail.java
@@ -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;
}
diff --git a/src/main/java/com/redstoner/modules/mail/Msg.java b/src/main/java/com/redstoner/modules/mail/Msg.java
index 8bb666f..bdab5af 100644
--- a/src/main/java/com/redstoner/modules/mail/Msg.java
+++ b/src/main/java/com/redstoner/modules/mail/Msg.java
@@ -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)
{
diff --git a/src/main/java/com/redstoner/modules/mentio/Mentio.java b/src/main/java/com/redstoner/modules/mentio/Mentio.java
index 0f2169e..bca0d3c 100644
--- a/src/main/java/com/redstoner/modules/mentio/Mentio.java
+++ b/src/main/java/com/redstoner/modules/mentio/Mentio.java
@@ -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()
diff --git a/src/main/java/com/redstoner/modules/misc/Misc.java b/src/main/java/com/redstoner/modules/misc/Misc.java
index c773e6b..6436191 100644
--- a/src/main/java/com/redstoner/modules/misc/Misc.java
+++ b/src/main/java/com/redstoner/modules/misc/Misc.java
@@ -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();
-
- switch (m) {
- case AIR:
- case WATER:
- case LAVA:
- return;
- default: {
- event.setCancelled(true);
- }
+ 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;
+
+ 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;
}
-} \ No newline at end of file
+}
diff --git a/src/main/java/com/redstoner/modules/survival/Survival.cmd b/src/main/java/com/redstoner/modules/survival/Survival.cmd
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/survival/Survival.cmd
diff --git a/src/main/java/com/redstoner/modules/survival/Survival.java b/src/main/java/com/redstoner/modules/survival/Survival.java
new file mode 100644
index 0000000..54d05fd
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/survival/Survival.java
@@ -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);
+ }
+}
diff --git a/src/main/java/com/redstoner/modules/survival/module.info b/src/main/java/com/redstoner/modules/survival/module.info
new file mode 100644
index 0000000..c8a5a00
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/survival/module.info
@@ -0,0 +1,3 @@
+displayName: Survival
+category: Other
+description: A module to contain features related to the survival worlds \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/teleport/Teleport.java b/src/main/java/com/redstoner/modules/teleport/Teleport.java
index b43d820..73f03bd 100644
--- a/src/main/java/com/redstoner/modules/teleport/Teleport.java
+++ b/src/main/java/com/redstoner/modules/teleport/Teleport.java
@@ -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);
}