diff options
author | Logan Fick <logaldeveloper@protonmail.com> | 2019-01-21 20:49:22 -0500 |
---|---|---|
committer | Logan Fick <logaldeveloper@protonmail.com> | 2019-01-21 20:49:22 -0500 |
commit | 958bca9a5b70e0fe1443d2264f91649d9b7d0ebf (patch) | |
tree | b446b811929adbad562d0dbdb167ac6c9f546e8b | |
parent | 02beb2ddeb99618b4b938afe040f49f030b6a413 (diff) | |
parent | 71ae1b37793110e6210cd7a50333f22be38385d6 (diff) |
Merged pull request #42.
-rw-r--r-- | build.gradle | 5 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/chat/Chat.cmd | 10 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/chat/Chat.java | 76 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/chatalias/Chatalias.java | 4 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/mail/Mail.java | 20 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/mail/Msg.java | 51 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/mentio/Mentio.java | 71 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/misc/Misc.java | 75 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/survival/Survival.cmd | 0 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/survival/Survival.java | 111 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/survival/module.info | 3 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/teleport/Teleport.java | 29 |
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); } |