diff --git a/TotalFreedomMod.iml b/TotalFreedomMod.iml index 93d12628..94a3e6af 100644 --- a/TotalFreedomMod.iml +++ b/TotalFreedomMod.iml @@ -12,8 +12,9 @@ + - + @@ -62,7 +63,9 @@ - + + + diff --git a/pom.xml b/pom.xml index 7dbde0fa..977b2e59 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ org.spigotmc spigot - 1.13.1-R0.1-SNAPSHOT + 1.13.2-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java index 73054738..357823da 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java @@ -128,7 +128,7 @@ public class EntityWiper extends FreedomService { int removed = 0; - boolean wipeExpl = ConfigEntry.ALLOW_EXPLOSIONS.getBoolean(); + boolean wipeExpl = !ConfigEntry.ALLOW_EXPLOSIONS.getBoolean(); Iterator entities = world.getEntities().iterator(); // Organise the entities in the world diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index 2530bbb6..7ac363b1 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -188,6 +188,16 @@ public class LoginProcess extends FreedomService final Player player = event.getPlayer(); final FPlayer fPlayer = plugin.pl.getPlayer(player); + if (!ConfigEntry.SERVER_TABLIST_HEADER.getString().isEmpty()) + { + player.setPlayerListHeader(FUtil.colorize(ConfigEntry.SERVER_TABLIST_HEADER.getString()).replace("\\n", "\n")); + } + + if (!ConfigEntry.SERVER_TABLIST_FOOTER.getString().isEmpty()) + { + player.setPlayerListFooter(FUtil.colorize(ConfigEntry.SERVER_TABLIST_FOOTER.getString()).replace("\\n", "\n")); + } + for (Player p : Command_vanish.VANISHED) { if (!plugin.al.isAdmin(player)) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java index ff28c11f..4dc3c983 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java @@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod; import java.io.File; import java.io.InputStream; import java.util.Properties; +import me.totalfreedom.totalfreedommod.admin.ActivityLog; import me.totalfreedom.totalfreedommod.admin.AdminList; import me.totalfreedom.totalfreedommod.amp.AMP; import me.totalfreedom.totalfreedommod.banning.BanManager; @@ -27,6 +28,7 @@ import me.totalfreedom.totalfreedommod.command.CommandLoader; import me.totalfreedom.totalfreedommod.config.MainConfig; import me.totalfreedom.totalfreedommod.discord.Discord; import me.totalfreedom.totalfreedommod.freeze.Freezer; +import me.totalfreedom.totalfreedommod.fun.CurseListener; import me.totalfreedom.totalfreedommod.fun.ItemFun; import me.totalfreedom.totalfreedommod.fun.Jumppads; import me.totalfreedom.totalfreedommod.fun.Landminer; @@ -75,6 +77,7 @@ public class TotalFreedomMod extends AeroPlugin public WorldManager wm; public LogViewer lv; public AdminList al; + public ActivityLog acl; public RankManager rm; public CommandLoader cl; public CommandBlocker cb; @@ -111,6 +114,7 @@ public class TotalFreedomMod extends AeroPlugin public EntityWiper ew; public FrontDoor fd; public ServerPing sp; + public CurseListener cul; public ItemFun it; public Landminer lm; public MobStacker ms; @@ -182,6 +186,7 @@ public class TotalFreedomMod extends AeroPlugin wm = services.registerService(WorldManager.class); lv = services.registerService(LogViewer.class); al = services.registerService(AdminList.class); + acl = services.registerService(ActivityLog.class); rm = services.registerService(RankManager.class); cl = services.registerService(CommandLoader.class); cb = services.registerService(CommandBlocker.class); @@ -229,6 +234,7 @@ public class TotalFreedomMod extends AeroPlugin pv = services.registerService(PlayerVerification.class); // Fun + cul = services.registerService(CurseListener.class); it = services.registerService(ItemFun.class); lm = services.registerService(Landminer.class); ms = services.registerService(MobStacker.class); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java index 5be4d336..9ee8d200 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java @@ -1,7 +1,9 @@ package me.totalfreedom.totalfreedommod.banning; import com.google.common.collect.Lists; +import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.Instant; import java.util.Arrays; import java.util.Date; import java.util.HashSet; @@ -36,6 +38,9 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable private String by = null; @Getter @Setter + private Date at = null; + @Getter + @Setter private String reason = null; // Unformatted, &[0-9,a-f] instead of ChatColor @Getter @Setter @@ -45,7 +50,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable { } - public Ban(String username, String ip, String by, Date expire, String reason) + public Ban(String username, String ip, String by, Date at, Date expire, String reason) { this(username, new String[] @@ -53,11 +58,12 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable ip }, by, + at, expire, reason); } - public Ban(String username, String[] ips, String by, Date expire, String reason) + public Ban(String username, String[] ips, String by, Date at, Date expire, String reason) { this.username = username; if (ips != null) @@ -66,6 +72,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable } dedupeIps(); this.by = by; + this.at = at; this.expiryUnix = FUtil.getUnixTime(expire); this.reason = reason; } @@ -82,12 +89,12 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return new Ban(null, new String[] { Ips.getIp(player) - }, by.getName(), expiry, reason); + }, by.getName(), Date.from(Instant.now()), expiry, reason); } public static Ban forPlayerIp(String ip, CommandSender by, Date expiry, String reason) { - return new Ban(null, ip, by.getName(), expiry, reason); + return new Ban(null, ip, by.getName(), Date.from(Instant.now()), expiry, reason); } // @@ -102,6 +109,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return new Ban(player, (String[])null, by.getName(), + Date.from(Instant.now()), expiry, reason); } @@ -118,6 +126,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return new Ban(player.getName(), Ips.getIp(player), by.getName(), + Date.from(Instant.now()), expiry, reason); } @@ -127,6 +136,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return new Ban(player.getName(), FUtil.getFuzzyIp(Ips.getIp(player)), by.getName(), + Date.from(Instant.now()), expiry, reason); } @@ -181,6 +191,12 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable .append(by); } + if (at != null) + { + message.append("\n").append(ChatColor.RED).append("Issued: ").append(ChatColor.GOLD) + .append(DATE_FORMAT.format(at)); + } + if (getExpiryUnix() != 0) { message.append("\n").append(ChatColor.RED).append("Expires: ").append(ChatColor.GOLD) @@ -234,6 +250,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable this.ips.clear(); this.ips.addAll(cs.getStringList("ips")); this.by = cs.getString("by", null); + this.at = FUtil.stringToDate(cs.getString("at", null)); this.reason = cs.getString("reason", null); this.expiryUnix = cs.getLong("expiry_unix", 0); dedupeIps(); @@ -246,6 +263,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable cs.set("username", username); cs.set("ips", ips.isEmpty() ? null : ips); cs.set("by", by); + cs.set("at", FUtil.dateToString(at)); cs.set("reason", reason); cs.set("expiry_unix", expiryUnix > 0 ? expiryUnix : null); } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java index 22f11f76..39576af8 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java @@ -8,7 +8,6 @@ import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.Groups; import org.bukkit.ChatColor; import org.bukkit.Material; -import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java index 60a0bafa..3efdf873 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java @@ -3,7 +3,9 @@ package me.totalfreedom.totalfreedommod.blocking; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.config.ConfigEntry; +import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.Groups; +import org.bukkit.Material; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.block.ShulkerBox; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java index 028623fd..2adf299e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/InteractBlocker.java @@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod.blocking; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.config.ConfigEntry; +import me.totalfreedom.totalfreedommod.util.FLog; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -54,6 +55,12 @@ public class InteractBlocker extends FreedomService { final Player player = event.getPlayer(); + if (event.getClickedBlock() != null && event.getClickedBlock().getType().equals(Material.STRUCTURE_BLOCK)) + { + event.setCancelled(true); + event.getPlayer().closeInventory(); + } + switch (event.getMaterial()) { case WATER_BUCKET: diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cuck.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cuck.java new file mode 100644 index 00000000..b1011c8f --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cuck.java @@ -0,0 +1,58 @@ +package me.totalfreedom.totalfreedommod.command; + +import java.util.Collections; +import java.util.List; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.ChatColor; + +@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Cuck someone", usage = "/ ") +public class Command_cuck extends FreedomCommand +{ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + if (!FUtil.isExecutive(sender.getName())) + { + return noPerms(); + } + + if (args.length == 0) + { + return false; + } + + final Player player = getPlayer(args[0]); + + if (player == null) + { + msg(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + player.remove(); + + msg("Cucked " + player.getName()); + + player.sendTitle(ChatColor.DARK_RED + "HAHA CUCKED", ChatColor.RED + "relog if u want to be uncucked loser", 20, 200, 60); + + + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (args.length == 1 && plugin.al.isAdmin(sender) && FUtil.isExecutive(sender.getName())) + { + return FUtil.getPlayerList(); + } + return Collections.emptyList(); + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_curse.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_curse.java new file mode 100644 index 00000000..8cd6730f --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_curse.java @@ -0,0 +1,66 @@ +package me.totalfreedom.totalfreedommod.command; + +import java.util.Collections; +import java.util.List; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.ChatColor; + +@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Curse someone", usage = "/ ") +public class Command_curse extends FreedomCommand +{ + + /* The only problem with this is someone can prevent themself from being cursed by declining to download the + resource pack. However, if they hit yes, then you can curse them whenever you want and they can't stop it unless + they go into their server settings. and set server resource packs to prompt or disabled */ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + if (!FUtil.isExecutive(sender.getName())) + { + return noPerms(); + } + + if (args.length == 0) + { + return false; + } + + final Player player = getPlayer(args[0]); + + if (player == null) + { + msg(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + if (plugin.cul.cursedPlayers.containsKey(player)) + { + msg("Already attempting to cruse!", ChatColor.RED); + return true; + } + + player.setResourcePack("http://play.totalfreedom.me/cursed.zip"); + msg("Attempting to curse " + player.getName(), ChatColor.GREEN); + plugin.cul.cursedPlayers.put(player, playerSender); + + + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (args.length == 1 && plugin.al.isAdmin(sender) && FUtil.isExecutive(sender.getName())) + { + return FUtil.getPlayerList(); + } + return Collections.emptyList(); + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explosivearrows.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explosivearrows.java new file mode 100644 index 00000000..62aa0f8d --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explosivearrows.java @@ -0,0 +1,31 @@ +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.rank.Rank; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Make arrows explode", usage = "/", aliases = "ea") +public class Command_explosivearrows extends FreedomCommand +{ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + boolean onList = plugin.it.explosivePlayers.contains(playerSender); + if (onList) + { + plugin.it.explosivePlayers.remove(playerSender); + msg("You no longer have explosive arrows", ChatColor.RED); + } + else + { + plugin.it.explosivePlayers.add(playerSender); + msg("You now have explosive arrows", ChatColor.GREEN); + } + + return true; + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_moblimiter.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_moblimiter.java index 2118b089..4f48f03b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_moblimiter.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_moblimiter.java @@ -7,7 +7,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.ONLY_CONSOLE) +@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH) @CommandParameters(description = "Control mob rezzing parameters.", usage = "/ |dragon|giant|ghast|slime>") public class Command_moblimiter extends FreedomCommand { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java index 28022b1e..20a9d420 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java @@ -153,7 +153,7 @@ public class Command_tag extends FreedomCommand int tagLimit = (plugin.al.isAdmin(sender) ? 30 : 20); - final String rawTag = ChatColor.stripColor(strippedTag).toLowerCase(); + final String rawTag = ChatColor.stripColor(outputTag).toLowerCase(); if (rawTag.length() > tagLimit) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java index eb8966f6..82e1c4be 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java @@ -45,6 +45,8 @@ public enum ConfigEntry SERVER_MASTER_BUILDER_MANAGEMENT(List.class, "server.master_builder_management"), SERVER_BAN_URL(String.class, "server.ban_url"), SERVER_PERMBAN_URL(String.class, "server.permban_url"), + SERVER_TABLIST_HEADER(String.class, "server.tablist_header"), + SERVER_TABLIST_FOOTER(String.class, "server.tablist_footer"), // DISCORD_TOKEN(String.class, "discord.token"), DISCORD_REPORT_CHANNEL_ID(String.class, "discord.report_channel_id"), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/MessageListener.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/MessageListener.java index fa9b06e9..59e529ab 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/MessageListener.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/MessageListener.java @@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.discord; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.admin.Admin; -import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.playerverification.VPlayer; import net.dv8tion.jda.core.events.message.priv.PrivateMessageReceivedEvent; import net.dv8tion.jda.core.hooks.ListenerAdapter; @@ -30,6 +29,7 @@ public class MessageListener extends ListenerAdapter { VPlayer player = Discord.PLAYER_LINK_CODES.get(code); player.setDiscordId(event.getMessage().getAuthor().getId()); + player.setEnabled(true); TotalFreedomMod.plugin().pv.saveVerificationData(player); Discord.PLAYER_LINK_CODES.remove(code); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/CurseListener.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/CurseListener.java new file mode 100644 index 00000000..0f219a52 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/CurseListener.java @@ -0,0 +1,61 @@ +package me.totalfreedom.totalfreedommod.fun; + +import java.util.HashMap; +import me.totalfreedom.totalfreedommod.FreedomService; +import me.totalfreedom.totalfreedommod.TotalFreedomMod; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerResourcePackStatusEvent; + +import static org.bukkit.event.player.PlayerResourcePackStatusEvent.Status; + +public class CurseListener extends FreedomService +{ + + public HashMap cursedPlayers = new HashMap(); + + public CurseListener(TotalFreedomMod plugin) + { + super(plugin); + } + + @Override + protected void onStart() + { + } + + @Override + protected void onStop() + { + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onResourcePackStatus(PlayerResourcePackStatusEvent event) + { + Player player = event.getPlayer(); + PlayerResourcePackStatusEvent.Status cursed = event.getStatus(); + Player cursedBy = cursedPlayers.get(player); + if (cursed.equals(Status.ACCEPTED)) + { + cursedBy.sendMessage(ChatColor.GREEN + "Casting curse on " + player.getName() + "..."); + } + else if (cursed.equals(Status.DECLINED)) + { + cursedBy.sendMessage(ChatColor.RED + "Failed to start cast on " + player.getName() + "!"); + cursedPlayers.remove(player); + } + else if (cursed.equals(Status.SUCCESSFULLY_LOADED)) + { + cursedBy.sendMessage(ChatColor.GREEN + "Successfully cursed + " + player.getName() + "!"); + cursedPlayers.remove(player); + } + else if (cursed.equals(Status.FAILED_DOWNLOAD)) + { + cursedBy.sendMessage(ChatColor.RED + "Failed to cast curse on " + player.getName() + "!"); + cursedPlayers.remove(player); + } + } + +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java index 7c943f96..8ddf740b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java @@ -9,6 +9,9 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.util.DepreciationAggregator; import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; @@ -25,6 +28,8 @@ import org.bukkit.util.Vector; public class ItemFun extends FreedomService { + public List explosivePlayers = new ArrayList(); + private final Random random = new Random(); public ItemFun(TotalFreedomMod plugin) @@ -271,6 +276,25 @@ public class ItemFun extends FreedomService } } + @EventHandler + public void onProjectileHit(ProjectileHitEvent event) + { + Entity entity = event.getEntity(); + Arrow arrow = null; + if (entity instanceof Arrow) + { + arrow = (Arrow)entity; + } + if (arrow != null && (arrow.getShooter() instanceof Player)) + { + if (explosivePlayers.contains((Player)arrow.getShooter())) + { + arrow.getLocation().getWorld().createExplosion(arrow.getLocation().getX(), arrow.getLocation().getY(), arrow.getLocation().getZ(), ConfigEntry.EXPLOSIVE_RADIUS.getDouble().floatValue(), false, ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()); + arrow.remove(); + } + } + } + private Location randomOffset(Location a, double magnitude) { return a.clone().add(randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude, randomDoubleRange(-1.0, 1.0) * magnitude); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java index f0367a13..165a5120 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java @@ -12,6 +12,7 @@ import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD.Response; import me.totalfreedom.totalfreedommod.httpd.module.HTTPDModule; +import me.totalfreedom.totalfreedommod.httpd.module.Module_activitylog; import me.totalfreedom.totalfreedommod.httpd.module.Module_admins; import me.totalfreedom.totalfreedommod.httpd.module.Module_bans; import me.totalfreedom.totalfreedommod.httpd.module.Module_dump; @@ -58,6 +59,7 @@ public class HTTPDaemon extends FreedomService // Modules modules.clear(); + module("activitylog", Module_activitylog.class, true); module("admins", Module_admins.class, true); module("bans", Module_bans.class, true); module("dump", Module_dump.class, true); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_activitylog.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_activitylog.java new file mode 100644 index 00000000..a0a088d0 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_activitylog.java @@ -0,0 +1,31 @@ +package me.totalfreedom.totalfreedommod.httpd.module; + +import java.io.File; +import me.totalfreedom.totalfreedommod.TotalFreedomMod; +import me.totalfreedom.totalfreedommod.admin.ActivityLog; +import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon; +import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD; + +public class Module_activitylog extends HTTPDModule +{ + + public Module_activitylog(TotalFreedomMod plugin, NanoHTTPD.HTTPSession session) + { + super(plugin, session); + } + + @Override + public NanoHTTPD.Response getResponse() + { + File activityLogFile = new File(plugin.getDataFolder(), ActivityLog.FILENAME); + if (activityLogFile.exists()) + { + return HTTPDaemon.serveFileBasic(new File(plugin.getDataFolder(), ActivityLog.FILENAME)); + } + else + { + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, + "Error 404: Not Found - The requested resource was not found on this server."); + } + } +} diff --git a/src/main/resources/activitylog.yml b/src/main/resources/activitylog.yml new file mode 100644 index 00000000..152b15e6 --- /dev/null +++ b/src/main/resources/activitylog.yml @@ -0,0 +1,3 @@ +# +# TotalFreedomMod 5.2 Activity Log +# diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4b16fc65..4762c712 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -33,6 +33,12 @@ server: # URL players should appeal for permanent bans at permban_url: http://bit.ly/TF_PermBan + # What to display at the top of the tab list + tablist_header: '' + + # What to display at the bottom of the tab list + tablist_footer: '' + # Discord discord: # If you do not have a token, make a bot account and get one at https://discordapp.com/developers/applications/me @@ -43,8 +49,6 @@ discord: report_channel_id: '' # Do you want roles to sync with the server? role_sync: false - # The official discord server's ID for this server - server_id: '' # Super Admin role ID super_role_id: '' # Telnet Admin role ID