Archived
0

Merged pull request #42.

This commit is contained in:
Logan Fick
2019-01-21 20:49:22 -05:00
12 changed files with 320 additions and 133 deletions

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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];

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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()

View File

@@ -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;
}
}
}

View 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);
}
}

View File

@@ -0,0 +1,3 @@
displayName: Survival
category: Other
description: A module to contain features related to the survival worlds

View File

@@ -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);
}