mirror of
https://github.com/nkomarn/harbor.git
synced 2025-02-01 04:11:25 +01:00
🌈 Starting from the ground up
This commit is contained in:
parent
2f713ccdc6
commit
39fd8223c7
15
.gitignore
vendored
15
.gitignore
vendored
@ -1,7 +1,8 @@
|
||||
.vscode/
|
||||
.settings/
|
||||
.idea/
|
||||
target/
|
||||
jars/
|
||||
.classpath
|
||||
.idea/
|
||||
/bin
|
||||
/.classpath
|
||||
/.project
|
||||
/.settings
|
||||
/.idea
|
||||
*.iml
|
||||
/target
|
||||
dependency-reduced-pom.xml
|
@ -1,4 +1,4 @@
|
||||
[discord-invite]: https://discord.gg/UACRzwe
|
||||
# ⚓ Harbor [![CodeFactor](https://www.codefactor.io/repository/github/nkomarn/harbor/badge)](https://www.codefactor.io/repository/github/nkomarn/harbor) [![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/nkomarn/Harbor/blob/master/LICENSE) [![Discord](https://discordapp.com/api/guilds/285623631042707457/widget.png)][discord-invite]
|
||||
Harbor is a plugin that redefines sleep within your Spigot server! Undergoing optimizations!
|
||||
Harbor is a plugin that redefines sleep within your Spigot server!
|
||||
https://www.spigotmc.org/resources/harbor-a-sleep-enhancement-plugin.60088/
|
2
build.sh
2
build.sh
@ -1,2 +1,2 @@
|
||||
mvn package
|
||||
yes | cp -rf target/*-*-shaded.jar ../Spigot/1.13.2/plugins
|
||||
yes | cp -rf target/*.jar ../../Documents/Spigot/1.14.4/plugins
|
144
pom.xml
144
pom.xml
@ -3,115 +3,27 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>xyz.nkomarn</groupId>
|
||||
<artifactId>Harbor</artifactId>
|
||||
<version>1.5.3</version>
|
||||
|
||||
<version>1.5.4</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<jars>${project.basedir}/jars</jars>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>spigotmc-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>2.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.14.1</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.14.1.jar</systemPath>
|
||||
<version>1.14.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.14</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.14.jar</systemPath>
|
||||
<version>1.14</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.13.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.13.2.jar</systemPath>
|
||||
<version>1.13.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.13</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.13.jar</systemPath>
|
||||
<version>1.13</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.12.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.12.2.jar</systemPath>
|
||||
<version>1.12.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.11.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.11.2.jar</systemPath>
|
||||
<version>1.11.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.10.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.10.2.jar</systemPath>
|
||||
<version>1.10.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.9.4</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.9.4.jar</systemPath>
|
||||
<version>1.9.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.9.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.9.2.jar</systemPath>
|
||||
<version>1.9.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.8.8</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.8.8.jar</systemPath>
|
||||
<version>1.8.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.8.3</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.8.3.jar</systemPath>
|
||||
<version>1.8.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.8</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.8.jar</systemPath>
|
||||
<version>1.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>spigotmc.org</groupId>
|
||||
<artifactId>spigot-1.7.2</artifactId>
|
||||
<scope>system</scope>
|
||||
<systemPath>${jars}/1.7.2.jar</systemPath>
|
||||
<version>1.7.2</version>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
<version>1.14.4-R0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
@ -124,41 +36,9 @@
|
||||
<includes>
|
||||
<include>plugin.yml</include>
|
||||
<include>config.yml</include>
|
||||
<include>application.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<configuration>
|
||||
<shadedArtifactAttached>true</shadedArtifactAttached>
|
||||
<shadedClassifierName></shadedClassifierName>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>org.bstats</pattern>
|
||||
<shadedPattern>xyz.nkomarn.SeedDonor.SeedDonor</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
<artifactSet>
|
||||
<excludes>
|
||||
<exclude>spigotmc.org:*</exclude>
|
||||
<exclude>net.milkbowl.vault*</exclude>
|
||||
</excludes>
|
||||
</artifactSet>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
|
@ -1,72 +1,26 @@
|
||||
package xyz.nkomarn.Harbor;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import xyz.nkomarn.Harbor.command.HarborCommand;
|
||||
import xyz.nkomarn.Harbor.command.SleepingCommand;
|
||||
import xyz.nkomarn.Harbor.event.GUIEvent;
|
||||
import xyz.nkomarn.Harbor.event.PlayerEvent;
|
||||
import xyz.nkomarn.Harbor.event.SpawnEvent;
|
||||
import xyz.nkomarn.Harbor.nms.NMSUtils;
|
||||
import xyz.nkomarn.Harbor.task.Timer;
|
||||
import xyz.nkomarn.Harbor.task.Checker;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
import xyz.nkomarn.Harbor.util.Updater;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class Harbor extends JavaPlugin {
|
||||
public static Harbor instance;
|
||||
public static String version = "1.5.3";
|
||||
public static boolean debug = false;
|
||||
public static boolean enabled = false;
|
||||
public static boolean prerelease = false;
|
||||
|
||||
private Config config = new Config();
|
||||
private NMSUtils nms = new NMSUtils();
|
||||
public static Harbor instance;
|
||||
public static boolean debug = false;
|
||||
|
||||
public void onEnable() {
|
||||
saveDefaultConfig();
|
||||
instance = this;
|
||||
nms.setNMS();
|
||||
Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this,
|
||||
new Checker(), 0L, Config.getInteger("values.check") * 20);
|
||||
|
||||
final PluginManager pm = Bukkit.getPluginManager();
|
||||
Stream.of(
|
||||
new PlayerEvent(), new SpawnEvent(), new GUIEvent()
|
||||
).forEach(l -> pm.registerEvents(l, this));
|
||||
getCommand("harbor").setExecutor(new HarborCommand());
|
||||
getCommand("sleeping").setExecutor(new SleepingCommand());
|
||||
|
||||
Bukkit.getServer().getWorlds().forEach(w -> {
|
||||
ArrayList<Player> s = new ArrayList<>();
|
||||
Counters.sleeping.put(w, s);
|
||||
w.getPlayers().forEach(p -> {
|
||||
p.setPlayerListName(p.getName());
|
||||
Counters.activity.put(p, System.currentTimeMillis());
|
||||
});
|
||||
});
|
||||
|
||||
int interval = config.getInteger("values.clock");
|
||||
if (enabled) Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this,
|
||||
new Timer(), 0L, interval * 20);
|
||||
if (getConfig().getBoolean("debug")) debug = true;
|
||||
if (enabled && this.getConfig().getBoolean("features.notifier")) {
|
||||
if (debug) Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
getConfig().getString("messages.miscellaneous.prefix")) + "Checking for new updates...");
|
||||
if (!prerelease) {
|
||||
Updater updater = new Updater();
|
||||
updater.check();
|
||||
}
|
||||
}
|
||||
if (prerelease) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', getConfig().getString("messages.miscellaneous.prefix") + "&cThis Harbor version is a prerelease. Not everything is guaranteed to work correctly, but the plugin should at least be stable. "
|
||||
+ "If you encounter an issue, please create an issue on GitHub: &c&ohttps://github.com/nkomarn/Harbor/issues&c. You can download newer builds when they're available at &c&ohttps://harbor.nkomarn.xyz&c."));
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
// Nothing lol
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,58 +1,35 @@
|
||||
package xyz.nkomarn.Harbor.command;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Updater;
|
||||
|
||||
public class HarborCommand implements CommandExecutor {
|
||||
private Config c = new Config();
|
||||
|
||||
int changeTimeTask = 0;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender s, Command x, String l, String[] a) {
|
||||
if (a.length < 1) {
|
||||
s.sendMessage(ChatColor.translateAlternateColorCodes('&', c
|
||||
.getString("messages.miscellaneous.prefix") + "&7Version " + Harbor.version
|
||||
+ " by TechToolbox (@nkomarn)."));
|
||||
return true;
|
||||
}
|
||||
if (!s.hasPermission("harbor.admin")) {
|
||||
s.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
c.getString("messages.miscellaneous.prefix")
|
||||
+ c.getString("messages.miscellaneous.permission")));
|
||||
return true;
|
||||
}
|
||||
if (a[0].equalsIgnoreCase("reload")) {
|
||||
try {
|
||||
Harbor h = Harbor.instance;
|
||||
h.reloadConfig();
|
||||
Bukkit.getPluginManager().disablePlugin(h);
|
||||
Bukkit.getPluginManager().enablePlugin(h);
|
||||
s.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
c.getString("messages.miscellaneous.prefix")
|
||||
+ c.getString("messages.miscellaneous.reloaded")));
|
||||
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
|
||||
Player player = (Player) commandSender;
|
||||
World world = player.getWorld();
|
||||
|
||||
changeTimeTask = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(Harbor.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!(world.getTime() >= 450 && world.getTime() <= 1000)) {
|
||||
world.setTime(world.getTime() + 60);
|
||||
}
|
||||
else {
|
||||
Bukkit.getScheduler().cancelTask(changeTimeTask);
|
||||
System.out.println("Stopped time change");
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
s.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
c.getString("messages.miscellaneous.prefix")
|
||||
+ c.getString("messages.miscellaneous.reloaderror")));
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (a[0].equalsIgnoreCase("update")) {
|
||||
Updater u = new Updater();
|
||||
int result = u.upgrade();
|
||||
if (result == 0) s.sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "&7Harbor was successfully updated to version " + Updater.latest + " and will be enabled after a server restart/reload."));
|
||||
else if (result == 1) s.sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "&7An error occured while updating Harbor to version " + Updater.latest + ". Check the server console for more details."));
|
||||
else if (result == 2) s.sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "&7This server is already running the latest version of Harbor. Great work!"));
|
||||
return true;
|
||||
}
|
||||
s.sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + c.getString("messages.miscellaneous.unrecognized")));
|
||||
}, 0L, 1L);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1,47 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.command;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.nkomarn.Harbor.gui.SleepingGUI;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SleepingCommand implements CommandExecutor {
|
||||
private Config c = new Config();
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender s, Command x, String l, String[] a) {
|
||||
if (s instanceof Player) {
|
||||
Player p = (Player) s;
|
||||
new SleepingGUI(p, 1);
|
||||
}
|
||||
else {
|
||||
if (a.length < 1) {
|
||||
ArrayList<String> list = new ArrayList<>();
|
||||
Bukkit.getServer().getWorlds().forEach(w -> {list.add("&o" + w.getName());});
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
c.getString("messages.miscellaneous.prefix")
|
||||
+ "Specify a world name. Possible worlds are " + String.join("&r, ", list) + "&r."));
|
||||
}
|
||||
else {
|
||||
World w = Bukkit.getServer().getWorld(a[0]);
|
||||
if (w == null) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "The specified world doesn't exist."));
|
||||
else {
|
||||
ArrayList<String> list = new ArrayList<String>();
|
||||
Counters.sleeping.get(Bukkit.getServer().getWorld(a[0])).forEach(p -> {list.add("&o" + p.getName());});
|
||||
if (list.size() > 0 && list.size() != 1) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "In &o" + a[0] + "&r, the currently sleeping players are " + String.join("&r, ", list) + "&r."));
|
||||
else if (list.size() == 1) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "In &o" + a[0] + "&r, " + list.get(0) + "&r is the only player sleeping."));
|
||||
else Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "There aren't any currently sleeping players in &o" + a[0] + "&r."));
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.event;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import xyz.nkomarn.Harbor.gui.GUIHolder;
|
||||
import xyz.nkomarn.Harbor.gui.GUIType;
|
||||
import xyz.nkomarn.Harbor.gui.SleepingGUI;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
|
||||
public class GUIEvent implements Listener {
|
||||
private Counters n = new Counters();
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent e) {
|
||||
n.updateActivity((Player) e.getWhoClicked());
|
||||
Inventory i = e.getInventory();
|
||||
if (i.getHolder() != null && i.getHolder() instanceof GUIHolder) {
|
||||
GUIType t = ((GUIHolder) i.getHolder()).getType();
|
||||
final Player p = (Player) e.getWhoClicked();
|
||||
e.setCancelled(true);
|
||||
|
||||
if (t.equals(GUIType.SLEEPING)) {
|
||||
int page = ((GUIHolder) i.getHolder()).getPage();
|
||||
if (e.getSlot() == 39) {
|
||||
if (page <= 1) {e.getWhoClicked().closeInventory();}
|
||||
else new SleepingGUI(p, Math.max(1, --page));
|
||||
}
|
||||
else if (e.getSlot() == 41) {
|
||||
new SleepingGUI(p, Math.max(1, ++page));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,107 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.event;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
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.*;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.nms.NMSUtils;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
import xyz.nkomarn.Harbor.util.Updater;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class PlayerEvent implements Listener {
|
||||
private Config config = new Config();
|
||||
private NMSUtils nms = new NMSUtils();
|
||||
private Counters counters = new Counters();
|
||||
private Updater updater = new Updater();
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
String json = "[{\"text\":\"[prefix]§7Hey there, Harbor [version] was released! \"},{\"text\":\"§7§oClick §7§ome §7§oto §7§oupdate!\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/harbor update\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"§a§l↑ §7Update Harbor.\"}}]";
|
||||
if (p.isOp() && updater.check() && config.getBoolean("features.notifier")) nms.sendJSONMessage(p, json.replace("[version]", updater.getLatest()).replace("[prefix]", config.getString("messages.miscellaneous.prefix")).replace("&", "§"));
|
||||
Counters.activity.put(p, System.currentTimeMillis());
|
||||
if (p.isOp() && Harbor.prerelease) p.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("messages.miscellaneous.prefix") + "&cThis Harbor version is a prerelease. Not everything is guaranteed to work correctly, but the plugin should at least be stable. "
|
||||
+ "If you encounter an issue, please create an issue on GitHub: &c&ohttps://github.com/nkomarn/Harbor/issues&c."));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onBedEnter(PlayerBedEnterEvent e) {
|
||||
if (config.getBoolean("features.block")) {
|
||||
if (config.getString("messages.chat.blocked").length() > 0) e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("messages.chat.blocked")));
|
||||
nms.sendActionbar(e.getPlayer(), config.getString("messages.actionbar.blocked"));
|
||||
e.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
boolean success = false;
|
||||
try {if (e.getBedEnterResult() == PlayerBedEnterEvent.BedEnterResult.OK) success = true;}
|
||||
catch (NoSuchMethodError nme) {success = true;}
|
||||
|
||||
if (success) {
|
||||
Player p = e.getPlayer();
|
||||
World w = p.getWorld();
|
||||
ArrayList<Player> ex = counters.getExcluded(w);
|
||||
|
||||
if (!ex.contains(p)) {
|
||||
counters.add(w, p);
|
||||
if (config.getBoolean("messages.chat.chat") && (config.getString("messages.chat.sleeping").length() != 0)) {
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("messages.chat.sleeping")
|
||||
.replace("[sleeping]", String.valueOf(counters.getSleeping(w))))
|
||||
.replace("[online]", String.valueOf(counters.getOnline(w)))
|
||||
.replace("[player]", p.getName())
|
||||
.replace("[needed]", String.valueOf(counters.getNeeded(w))));
|
||||
}
|
||||
if (config.getBoolean("messages.title.title")) {
|
||||
nms.sendTitle(p, config.getString("messages.title.sleeping.top"),
|
||||
config.getString("messages.title.sleeping.bottom"));
|
||||
}
|
||||
counters.skip(w);
|
||||
}
|
||||
else if (config.getString("messages.chat.bypass").length() != 0)
|
||||
p.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.bypass")));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onBedLeave(PlayerBedLeaveEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
World w = p.getWorld();
|
||||
|
||||
ArrayList<Player> ex = counters.getExcluded(w);
|
||||
if (!ex.contains(p)) counters.remove(w, p);
|
||||
if (config.getBoolean("messages.chat.chat") && (config.getString("messages.chat.left").length() != 0)
|
||||
&& !(w.getTime() > 0 && w.getTime() < 12300) && !ex.contains(p)) {
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.left")
|
||||
.replace("[sleeping]", String.valueOf(counters.getSleeping(w))))
|
||||
.replace("[online]", String.valueOf(counters.getOnline(w)))
|
||||
.replace("[player]", p.getName())
|
||||
.replace("[needed]", String.valueOf(counters.getNeeded(w))));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChat(AsyncPlayerChatEvent e) {
|
||||
counters.updateActivity(e.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onCommand(PlayerCommandPreprocessEvent e) {
|
||||
counters.updateActivity(e.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onMove(PlayerMoveEvent e) {
|
||||
counters.updateActivity(e.getPlayer());
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.event;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
|
||||
public class SpawnEvent implements Listener {
|
||||
private Config c = new Config();
|
||||
|
||||
@EventHandler
|
||||
public void onSpawn(EntitySpawnEvent e) {
|
||||
Config config = new Config();
|
||||
try {if (e.getEntityType().equals(EntityType.PHANTOM)
|
||||
&& !config.getBoolean("features.phantoms")) e.setCancelled(true);}
|
||||
catch (NoSuchFieldError nsf) {
|
||||
// Do nothing, Phantom only exists in 1.13+
|
||||
}
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.gui;
|
||||
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
|
||||
public class GUIHolder implements InventoryHolder {
|
||||
private Inventory inv;
|
||||
private GUIType type;
|
||||
private int page;
|
||||
|
||||
public GUIHolder(GUIType type, int page) {
|
||||
this.type = type;
|
||||
this.page = page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Inventory getInventory() {
|
||||
return inv;
|
||||
}
|
||||
|
||||
public GUIType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getPage() {
|
||||
return this.page;
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.gui;
|
||||
|
||||
public enum GUIType {
|
||||
SLEEPING
|
||||
}
|
@ -1,62 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.gui;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import xyz.nkomarn.Harbor.gui.GUIHolder;
|
||||
import xyz.nkomarn.Harbor.gui.GUIType;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class SleepingGUI {
|
||||
|
||||
private Inventory i;
|
||||
Config c = new Config();
|
||||
|
||||
public SleepingGUI(Player p, int page) {
|
||||
ArrayList<Player> s = Counters.sleeping.get(p.getWorld());
|
||||
i = Bukkit.createInventory(new GUIHolder(GUIType.SLEEPING, page),
|
||||
45, c.getString("gui.sleeping").replace("[page]", String.valueOf(page)));
|
||||
|
||||
ItemStack glass = new ItemStack(Material.WHITE_STAINED_GLASS_PANE, 1);
|
||||
ItemMeta glassMeta = glass.getItemMeta();
|
||||
glassMeta.setDisplayName(" ");
|
||||
glass.setItemMeta(glassMeta);
|
||||
int[] slots = {36, 37, 38, 40, 42, 43, 44};
|
||||
for (int x = 0; x < slots.length; x++) {i.setItem(slots[x], glass);}
|
||||
|
||||
ItemStack bb = new ItemStack(Material.OAK_BUTTON, 1);
|
||||
ItemMeta bbm = bb.getItemMeta();
|
||||
bbm.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lPrevious"));
|
||||
bb.setItemMeta(bbm);
|
||||
i.setItem(39, bb);
|
||||
|
||||
ItemStack nb = new ItemStack(Material.OAK_BUTTON, 1);
|
||||
ItemMeta nbm = nb.getItemMeta();
|
||||
nbm.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&6&lNext"));
|
||||
nb.setItemMeta(nbm);
|
||||
i.setItem(41, nb);
|
||||
|
||||
int f = (((page - 1) * 35) + (page + 1) - 1) - 1;
|
||||
int l = Math.min(s.size(), (f + 36));
|
||||
|
||||
int t = 0;
|
||||
for (int c = f; c < l; c++) {
|
||||
ItemStack item = new ItemStack(Material.PLAYER_HEAD, 1);
|
||||
SkullMeta sm = (SkullMeta) item.getItemMeta();
|
||||
sm.setDisplayName(ChatColor.GRAY + s.get(c).getName());
|
||||
sm.setOwningPlayer(p);
|
||||
item.setItemMeta(sm);
|
||||
i.setItem(s.indexOf(s.get(c)), item);
|
||||
t++;
|
||||
}
|
||||
p.openInventory(i);
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public interface NMS {
|
||||
void sendActionbar(Player p, String m);
|
||||
void sendJSONMessage(Player p, String j);
|
||||
void sendTitle(Player p, String t, String n);
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
|
||||
public class NMSUtils {
|
||||
|
||||
static Counters n = new Counters();
|
||||
static Config c = new Config();
|
||||
static NMS nms;
|
||||
|
||||
public void setNMS() {
|
||||
String v = "";
|
||||
try {v = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];}
|
||||
catch (ArrayIndexOutOfBoundsException e) {
|
||||
Bukkit.getServer().getConsoleSender().sendMessage(c.getString("messages.miscellaneous.prefix") + "Could not get server version. The plugin may not function correctly as a result.");
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
Bukkit.getPluginManager().disablePlugin(Harbor.instance);
|
||||
Harbor.enabled = false;
|
||||
}
|
||||
if (Harbor.debug) Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + c.getString("messages.miscellaneous.running").replace("[version]", v)));
|
||||
if (v.equals("v1_8_R1")) {nms = new NMS_1_8_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_8_R2")) {nms = new NMS_1_8_R2(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_8_R3")) {nms = new NMS_1_8_R3(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_9_R1")) {nms = new NMS_1_9_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_9_R2")) {nms = new NMS_1_9_R2(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_10_R1")) {nms = new NMS_1_10_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_11_R1")) {nms = new NMS_1_11_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_12_R1")) {nms = new NMS_1_12_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_13_R1")) {nms = new NMS_1_13_R1(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_13_R2")) {nms = new NMS_1_13_R2(); Harbor.enabled = true;}
|
||||
else if (v.equals("v1_14_R1")) {nms = new NMS_1_14_R1(); Harbor.enabled = true;}
|
||||
else {
|
||||
Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.prefix") + "This version of Harbor is incompatible with your server version. As such, Harbor will be disabled."));
|
||||
Bukkit.getPluginManager().disablePlugin(Harbor.instance);
|
||||
Harbor.enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void sendActionbar(Player player, String message) {
|
||||
if (c.getBoolean("messages.actionbar.actionbar")) nms.sendActionbar(player, message);
|
||||
}
|
||||
public void sendActionbar(Player p, String message, World w) {
|
||||
if (c.getBoolean("messages.actionbar.actionbar")) nms.sendActionbar(p, message
|
||||
.replace("[sleeping]", String.valueOf(n.getSleeping(w)))
|
||||
.replace("[online]", String.valueOf(n.getOnline(w)))
|
||||
.replace("[needed]", String.valueOf(n.getNeeded(w))));
|
||||
}
|
||||
public void sendJSONMessage(Player p, String j) {
|
||||
nms.sendJSONMessage(p, j);
|
||||
}
|
||||
public void sendTitle(Player p, String t, String b) {
|
||||
nms.sendTitle(p, t, b);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_10_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_10_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_10_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_10_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_10_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_10_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_10_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutChat titlePacket = new PacketPlayOutChat(titleComponent, (byte)2);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_11_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_11_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_11_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_11_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_11_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_11_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, titleComponent);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_12_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_12_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_12_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_12_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_12_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_12_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, titleComponent);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_13_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_13_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_13_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_13_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_13_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_13_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_13_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, titleComponent);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutBed;
|
||||
import net.minecraft.server.v1_13_R2.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_13_R2.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_13_R2.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_13_R2 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, titleComponent);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_14_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_14_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_14_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_14_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_14_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
|
||||
class NMS_1_14_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction.ACTIONBAR, titleComponent);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_8_R1.ChatSerializer;
|
||||
import net.minecraft.server.v1_8_R1.EnumTitleAction;
|
||||
import net.minecraft.server.v1_8_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_8_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_8_R1.PacketPlayOutTitle;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
|
||||
class NMS_1_8_R1 implements NMS {
|
||||
public void sendActionbar(Player p, String m) {
|
||||
IChatBaseComponent tc = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', m) + "\"}");
|
||||
PacketPlayOutChat tp = new PacketPlayOutChat(tc, (byte) 2);
|
||||
((CraftPlayer) p).getHandle().playerConnection.sendPacket(tp);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player p, String j) {
|
||||
IChatBaseComponent c = ChatSerializer.a(j);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(c);
|
||||
((CraftPlayer) p).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player p, String t, String b) {
|
||||
IChatBaseComponent tt = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', t) + "\"}");
|
||||
IChatBaseComponent tm = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', b) + "\"}");
|
||||
PacketPlayOutTitle x = new PacketPlayOutTitle(EnumTitleAction.TITLE, tt);
|
||||
PacketPlayOutTitle y = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, tm);
|
||||
((CraftPlayer) p).getHandle().playerConnection.sendPacket(x);
|
||||
((CraftPlayer) p).getHandle().playerConnection.sendPacket(y);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_8_R2.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_8_R2.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_8_R2.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_8_R2.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_8_R2.PacketPlayOutTitle.EnumTitleAction;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
|
||||
class NMS_1_8_R2 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutChat titlePacket = new PacketPlayOutChat(titleComponent, (byte) 2);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleTop = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleBottom = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_8_R3.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
|
||||
class NMS_1_8_R3 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutChat titlePacket = new PacketPlayOutChat(titleComponent, (byte)2);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleTop = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleBottom = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_9_R1.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_9_R1.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_9_R1.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_9_R1.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_9_R1.PacketPlayOutTitle.EnumTitleAction;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
|
||||
class NMS_1_9_R1 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutChat titlePacket = new PacketPlayOutChat(titleComponent, (byte)2);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.nms;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import net.minecraft.server.v1_9_R2.IChatBaseComponent;
|
||||
import net.minecraft.server.v1_9_R2.PacketPlayOutChat;
|
||||
import net.minecraft.server.v1_9_R2.PacketPlayOutTitle;
|
||||
import net.minecraft.server.v1_9_R2.IChatBaseComponent.ChatSerializer;
|
||||
import net.minecraft.server.v1_9_R2.PacketPlayOutTitle.EnumTitleAction;
|
||||
import xyz.nkomarn.Harbor.nms.NMS;
|
||||
|
||||
class NMS_1_9_R2 implements NMS {
|
||||
public void sendActionbar(Player player, String message) {
|
||||
IChatBaseComponent titleComponent = ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', message) + "\"}");
|
||||
PacketPlayOutChat titlePacket = new PacketPlayOutChat(titleComponent, (byte)2);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(titlePacket);
|
||||
}
|
||||
|
||||
public void sendJSONMessage(Player player, String json) {
|
||||
IChatBaseComponent component = ChatSerializer.a(json);
|
||||
PacketPlayOutChat packet = new PacketPlayOutChat(component);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
|
||||
public void sendTitle(Player player, String top, String bottom) {
|
||||
IChatBaseComponent titleComponentTop = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', top) + "\"}");
|
||||
IChatBaseComponent titleComponentBottom = IChatBaseComponent.ChatSerializer.a("{\"text\": \"" + ChatColor.translateAlternateColorCodes('&', bottom) + "\"}");
|
||||
PacketPlayOutTitle title = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleComponentTop);
|
||||
PacketPlayOutTitle subtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, titleComponentBottom);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(title);
|
||||
((CraftPlayer) player).getHandle().playerConnection.sendPacket(subtitle);
|
||||
}
|
||||
}
|
96
src/main/java/xyz/nkomarn/Harbor/task/Checker.java
Normal file
96
src/main/java/xyz/nkomarn/Harbor/task/Checker.java
Normal file
@ -0,0 +1,96 @@
|
||||
package xyz.nkomarn.Harbor.task;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Checker implements Runnable {
|
||||
|
||||
private static List<World> skippingWorlds = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
for (World world : Bukkit.getWorlds()) {
|
||||
|
||||
// Check for blacklisted worlds
|
||||
if (Config.getList("blacklist").contains(world.getName())) return;
|
||||
|
||||
// Check if the night is already being skipped
|
||||
System.out.println("Contains world? " + skippingWorlds.contains(world));
|
||||
if (skippingWorlds.contains(world)) return;
|
||||
|
||||
// Check if world is applicable for skipping
|
||||
if (getNeeded(world) == 0 && getSleeping(world).size() > 0) {
|
||||
|
||||
// Rapidly accelerate time until it's day
|
||||
skippingWorlds.add(world);
|
||||
accelerateNight(world);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Player> getSleeping(World world) {
|
||||
List<Player> sleeping = new ArrayList<>();
|
||||
for (Player player : world.getPlayers()) {
|
||||
if (player.isSleeping()) sleeping.add(player);
|
||||
}
|
||||
return sleeping;
|
||||
}
|
||||
|
||||
private int getNeeded(World world) {
|
||||
try {
|
||||
return Math.max(0, (int) Math.ceil((world.getPlayers().size()
|
||||
- getExcluded(world).size()) * (Config.getDouble("values.percent") / 100)
|
||||
- getSleeping(world).size()));}
|
||||
catch (NullPointerException e) {
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Player> getExcluded(World w) {
|
||||
ArrayList<Player> a = new ArrayList<>();
|
||||
w.getPlayers().forEach(p -> {
|
||||
if (isExcluded(p)) a.add(p);
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
private boolean isExcluded(Player p) {
|
||||
boolean s = false;
|
||||
if (Config.getBoolean("features.ignore")) if (p.getGameMode() == GameMode.SURVIVAL) s = false; else s = true;
|
||||
if (Config.getBoolean("features.bypass")) if (p.hasPermission("harbor.bypass")) s = true; else s = false;
|
||||
// TODO AFK DETECTION if (afk.contains(p)) s = true;
|
||||
return s;
|
||||
}
|
||||
|
||||
private void accelerateNight(World world) {
|
||||
Bukkit.broadcastMessage("Accelerating time.");
|
||||
|
||||
new BukkitRunnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
long time = world.getTime();
|
||||
if (!(time >= 450 && time <= 1000)) {
|
||||
world.setTime(time + 60);
|
||||
}
|
||||
else {
|
||||
System.out.println("Stopped time change " + time);
|
||||
skippingWorlds.remove(world);
|
||||
this.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
}.runTaskTimer(Harbor.instance, 20, 1);
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.task;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.nms.NMSUtils;
|
||||
import xyz.nkomarn.Harbor.util.Config;
|
||||
import xyz.nkomarn.Harbor.util.Counters;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class Timer implements Runnable {
|
||||
Config c = new Config();
|
||||
Counters n = new Counters();
|
||||
NMSUtils nms = new NMSUtils();
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Bukkit.getServer().getWorlds().forEach(w -> {
|
||||
if (n.getSleeping(w) > 0 && n.getNeeded(w) != 0) {
|
||||
w.getPlayers().forEach(p -> nms.sendActionbar(p, c.getString("messages.actionbar.sleeping"), w));
|
||||
}
|
||||
else if (n.getSleeping(w) > 0 && n.getNeeded(w) == 0) {
|
||||
w.getPlayers().forEach(p -> nms.sendActionbar(p, c.getString("messages.actionbar.everyone"), w));
|
||||
}
|
||||
|
||||
// Title for when you are able to sleep
|
||||
if (w.getTime() >= 12516 && w.getTime() <= 12535 && c.getBoolean("messages.title.title"))
|
||||
w.getPlayers().forEach(p -> nms.sendTitle(p, c.getString("messages.title.evening.top"), c.getString("messages.title.evening.bottom")));
|
||||
|
||||
// Skip night
|
||||
if (n.getSleeping(w) > 1 && n.getNeeded(w) == 0) {
|
||||
n.skip(w);
|
||||
}
|
||||
|
||||
if (c.getBoolean("features.afk")) w.getPlayers().forEach(p -> {
|
||||
if (TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - Counters.activity.get(p)) >= c.getInteger("values.timeout")) {
|
||||
if (Counters.sleeping.get(w).contains(p)) {
|
||||
Counters.activity.put(p, System.currentTimeMillis());
|
||||
return;
|
||||
}
|
||||
if (!Counters.afk.contains(p)) {
|
||||
Counters.afk.add(p);
|
||||
p.setPlayerListName(ChatColor.translateAlternateColorCodes('&', c.getString("messages.miscellaneous.afkprefix")
|
||||
+ p.getDisplayName()));
|
||||
if (c.getString("messages.chat.afk").length() > 0)
|
||||
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&', c.getString("messages.chat.afk")
|
||||
.replace("[player]", p.getName())));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (Exception e) {
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +1,16 @@
|
||||
package xyz.nkomarn.Harbor.util;
|
||||
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
|
||||
public class Config {
|
||||
private ConsoleCommandSender c = Bukkit.getServer().getConsoleSender();
|
||||
|
||||
/**
|
||||
* Report an error in reading the configuration
|
||||
* @param e Exception generated from reading configuration
|
||||
*/
|
||||
private void error(Exception e) {
|
||||
c.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
"An error occurred while trying to read the configuration. Harbor may not function correctly as a result."));
|
||||
private static void error(Exception e) {
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
}
|
||||
|
||||
@ -25,7 +18,7 @@ public class Config {
|
||||
* Fetches a boolean from the configuration
|
||||
* @param location Configuration location of the boolean
|
||||
*/
|
||||
public boolean getBoolean(String location) {
|
||||
public static boolean getBoolean(String location) {
|
||||
try {return Harbor.instance.getConfig().getBoolean(location);}
|
||||
catch (Exception e) {error(e); return false;}
|
||||
}
|
||||
@ -34,7 +27,7 @@ public class Config {
|
||||
* Fetches a string from the configuration
|
||||
* @param location Configuration location of the string
|
||||
*/
|
||||
public String getString(String location) {
|
||||
public static String getString(String location) {
|
||||
try {return Harbor.instance.getConfig().getString(location);}
|
||||
catch (Exception e) {error(e); return "";}
|
||||
}
|
||||
@ -43,7 +36,7 @@ public class Config {
|
||||
* Fetches an integer from the configuration
|
||||
* @param location Configuration location of the integer
|
||||
*/
|
||||
public int getInteger(String location) {
|
||||
public static int getInteger(String location) {
|
||||
try {return Harbor.instance.getConfig().getInt(location);}
|
||||
catch (Exception e) {error(e); return 0;}
|
||||
}
|
||||
@ -52,7 +45,7 @@ public class Config {
|
||||
* Fetches a double from the configuration
|
||||
* @param location Configuration location of the double
|
||||
*/
|
||||
public double getDouble(String location) {
|
||||
public static double getDouble(String location) {
|
||||
try {return Double.parseDouble(Harbor.instance.getConfig().getString(location));}
|
||||
catch (Exception e) {error(e); return 0.0;}
|
||||
}
|
||||
@ -61,8 +54,8 @@ public class Config {
|
||||
* Fetches a double from the configuration
|
||||
* @param location Configuration location of the double
|
||||
*/
|
||||
public List<String> getList(String location) {
|
||||
public static List<String> getList(String location) {
|
||||
try {return Harbor.instance.getConfig().getStringList(location);}
|
||||
catch (Exception e) {error(e); return new ArrayList<String>();}
|
||||
catch (Exception e) {error(e); return new ArrayList<>();}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,114 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.util;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
import xyz.nkomarn.Harbor.nms.NMSUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class Counters {
|
||||
public static HashMap<World, ArrayList<Player>> sleeping = new HashMap<>();
|
||||
public static HashMap<Player, Long> activity = new HashMap<>();
|
||||
public static ArrayList<Player> afk = new ArrayList<>();
|
||||
|
||||
private Config c = new Config();
|
||||
private NMSUtils nms = new NMSUtils();
|
||||
|
||||
public void add(World w, Player p) {
|
||||
ArrayList<Player> a;
|
||||
try {
|
||||
a = sleeping.get(w);
|
||||
} catch (NullPointerException e) {
|
||||
a = new ArrayList<>();
|
||||
}
|
||||
a.add(p);
|
||||
sleeping.put(w, a);
|
||||
}
|
||||
|
||||
public void remove(World w, Player p) {
|
||||
ArrayList<Player> a = sleeping.get(w);
|
||||
a.remove(p);
|
||||
}
|
||||
|
||||
public int getSleeping(World w) {
|
||||
try {return Math.max(0, sleeping.get(w).size());}
|
||||
catch (NullPointerException e) {
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int getNeeded(World w) {
|
||||
try {return Math.max(0, (int) Math.ceil((w.getPlayers().size() - getExcluded(w).size()) * (c.getDouble("values.percent") / 100) - getSleeping(w)));}
|
||||
catch (NullPointerException e) {
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int getOnline(World w) {
|
||||
try {return Math.max(0, w.getPlayers().size() - getExcluded(w).size());}
|
||||
catch (NullPointerException e) {return 0;}
|
||||
}
|
||||
|
||||
public ArrayList<Player> getExcluded(World w) {
|
||||
ArrayList<Player> a = new ArrayList<>();
|
||||
w.getPlayers().forEach(p -> {
|
||||
if (isExcluded(p)) a.add(p);
|
||||
});
|
||||
return a;
|
||||
}
|
||||
|
||||
private boolean isExcluded(Player p) {
|
||||
boolean s = false;
|
||||
if (c.getBoolean("features.ignore")) if (p.getGameMode() == GameMode.SURVIVAL) s = false; else s = true;
|
||||
if (c.getBoolean("features.bypass")) if (p.hasPermission("harbor.bypass")) s = true; else s = false;
|
||||
if (afk.contains(p)) s = true;
|
||||
return s;
|
||||
}
|
||||
|
||||
public void skip(World w) {
|
||||
if (c.getBoolean("features.skip") && Math.max(0, this.getNeeded(w)) == 0) {
|
||||
w.setTime(1000L);
|
||||
|
||||
// Synchronously set weather to clear
|
||||
if (c.getBoolean("features.weather")) {
|
||||
Bukkit.getScheduler().runTask(Harbor.instance, () -> {
|
||||
w.setStorm(false);
|
||||
w.setThundering(false);
|
||||
});
|
||||
}
|
||||
|
||||
// Display messages
|
||||
if (c.getBoolean("messages.chat.chat") && (c.getString("messages.chat.skipped").length() != 0)) {
|
||||
List<String> m = c.getList("messages.chat.skipped");
|
||||
Random r = new Random();
|
||||
int n = r.nextInt(m.size());
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', m.get(n)));
|
||||
}
|
||||
if (c.getBoolean("messages.title.title")) {
|
||||
w.getPlayers().forEach(p -> {
|
||||
nms.sendTitle(p, c.getString("messages.title.morning.top"), c.getString("messages.title.morning.bottom"));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void updateActivity(Player p) {
|
||||
if (afk.contains(p)) {
|
||||
afk.remove(p);
|
||||
p.setPlayerListName(ChatColor.translateAlternateColorCodes('&', p.getDisplayName()));
|
||||
if (c.getString("messages.chat.unafk").length() > 0)
|
||||
Bukkit.broadcastMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
c.getString("messages.chat.unafk").replace("[player]", p.getName())));
|
||||
}
|
||||
activity.put(p, System.currentTimeMillis());
|
||||
}
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
package xyz.nkomarn.Harbor.util;
|
||||
|
||||
import com.mysql.jdbc.StringUtils;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import xyz.nkomarn.Harbor.Harbor;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
public class Updater {
|
||||
public static String latest = "";
|
||||
|
||||
/**
|
||||
* Checks for an update using the Spigot API
|
||||
*/
|
||||
public boolean check() {
|
||||
ConsoleCommandSender c = Bukkit.getServer().getConsoleSender();
|
||||
Config config = new Config();
|
||||
|
||||
try {
|
||||
URL url = new URL("https://api.spigotmc.org/legacy/update.php?resource=60088");
|
||||
URLConnection request = url.openConnection();
|
||||
request.addRequestProperty("User-Agent", "Harbor");
|
||||
request.connect();
|
||||
|
||||
StringWriter writer = new StringWriter();
|
||||
IOUtils.copy((InputStream) request.getContent(), writer, "UTF-8");
|
||||
latest = writer.toString();
|
||||
|
||||
if (Harbor.version.equals(latest)) {
|
||||
if (Harbor.debug) c.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix")) + "Currently running the latest version of Harbor.");
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
if (config.getBoolean("features.notifier")) c.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("messages.miscellaneous.prefix")) + "Currently running an outdated version of Harbor. The latest available release is version " + latest + ".");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (IOException e) {
|
||||
if (Harbor.debug) c.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix")) + "Failed to check for updated releases of Harbor.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Replace the current Harbor version with the latest available release
|
||||
*/
|
||||
public int upgrade() {
|
||||
ConsoleCommandSender c = Bukkit.getServer().getConsoleSender();
|
||||
Config config = new Config();
|
||||
|
||||
if (Harbor.version.equals(latest)) return 2;
|
||||
|
||||
c.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix")) + "Downloading Harbor version " + latest + ".");
|
||||
try {
|
||||
String jar = new File(Updater.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getName();
|
||||
new File("update").mkdir();
|
||||
URL url = new URL("http://aqua.api.spiget.org/v2/resources/60088/download");
|
||||
File f = new File("plugins" + File.separator + "update" + File.separator + jar);
|
||||
FileUtils.copyURLToFile(url, f);
|
||||
c.sendMessage(ChatColor.translateAlternateColorCodes('&',
|
||||
config.getString("messages.miscellaneous.prefix")) + "Harbor " + latest + " has been downloaded successfully and will be enabled after a server restart/reload.");
|
||||
return 0;
|
||||
}
|
||||
catch (Exception e) {
|
||||
c.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix")) + "Failed to update Harbor to version " + latest + ".");
|
||||
if (Harbor.debug) e.printStackTrace();
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the latest version number
|
||||
*/
|
||||
public String getLatest() {
|
||||
return latest;
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@
|
||||
values:
|
||||
# How often to run the clock task (used to detect sleep, AFK players, time actionbar, etc.)
|
||||
# Lower this value for relatively slow servers
|
||||
clock: 1
|
||||
check: 2
|
||||
# Percent of players that need to sleep to skip night (must be between 0 to 100)
|
||||
percent: 35
|
||||
# Time that it takes to be considered AFK (in minutes)
|
||||
@ -70,18 +70,6 @@ messages:
|
||||
everyone: "&eEveryone is sleeping. Sweet dreams!"
|
||||
# Shown when a player tries to sleep and sleeping is blocked
|
||||
blocked: "&cSleeping is disabled."
|
||||
title:
|
||||
# Enable/Disable title messages
|
||||
title: true
|
||||
morning:
|
||||
top: "&6Good morning!"
|
||||
bottom: "&7Ah, such wonderful weather."
|
||||
evening:
|
||||
top: "&cIt's getting a bit late."
|
||||
bottom: "&7Might want to hit the hay..."
|
||||
sleeping:
|
||||
top: "&8ZZZZZZ..."
|
||||
bottom: "&7Sweet dreams."
|
||||
miscellaneous:
|
||||
# Prefix for Harbor command/miscellaneous messages
|
||||
prefix: "&8&l(&6&lHarbor&8&l)&r "
|
||||
@ -99,6 +87,10 @@ messages:
|
||||
# Sent when command argument isn't recognized
|
||||
unrecognized: "&7Urecognized command."
|
||||
|
||||
blacklist:
|
||||
- "world_nether"
|
||||
- "world_the_end"
|
||||
|
||||
gui:
|
||||
# Title for menu that shows when a player executes /sleeping
|
||||
sleeping: "Sleeping Players | Page [page]"
|
||||
|
Loading…
Reference in New Issue
Block a user