mirror of
https://github.com/nkomarn/harbor.git
synced 2024-12-18 22:37:36 +01:00
Some more work.. alpha stages I guess?
This commit is contained in:
parent
7283fa8000
commit
f7e1f0473e
@ -27,6 +27,8 @@ features:
|
||||
skip: true
|
||||
# Clear weather when skipping night
|
||||
weather: true
|
||||
# Toggle the spawning of phantoms
|
||||
phantoms: false
|
||||
# Toggle exclusion of operators/players with permission "harbor.bypass" from sleep count
|
||||
bypass: false
|
||||
# Toggle exclusion of players in creative and spectator mode
|
||||
|
@ -25,12 +25,8 @@ public class Command implements CommandExecutor {
|
||||
}
|
||||
|
||||
// Command arguments
|
||||
if (args[0].equalsIgnoreCase("reload")) {
|
||||
return true;
|
||||
}
|
||||
else if (args[0].equalsIgnoreCase("update")) {
|
||||
return true;
|
||||
}
|
||||
if (args[0].equalsIgnoreCase("reload")) return true;
|
||||
else if (args[0].equalsIgnoreCase("update")) return true;
|
||||
|
||||
// Unrecognized message if nothing else worked
|
||||
|
||||
|
@ -3,6 +3,7 @@ package mykyta.Harbor.Commands;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.Command;
|
||||
@ -10,26 +11,24 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryHolder;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import mykyta.Harbor.Config;
|
||||
import mykyta.Harbor.EncodingUtils;
|
||||
import mykyta.Harbor.GUI;
|
||||
import mykyta.Harbor.Util;
|
||||
|
||||
public class Sleeping implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String args, String[] label) {
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (sender instanceof Player) {
|
||||
Player player = (Player) sender;
|
||||
World world = player.getWorld();
|
||||
Config config = new Config();
|
||||
String title = config.getString("gui.sleeping") + " " + EncodingUtils.encodeString("{'GUIType': 'SLEEPING'}");
|
||||
Inventory gui = Bukkit.createInventory(player, 9, title);
|
||||
|
||||
ArrayList<Player> sleeping = Util.sleeping.get(world);
|
||||
int slots = (((sleeping.size()) % 9)) * 9; //FIXME bad brok bad
|
||||
System.out.println(slots);
|
||||
Inventory gui = Bukkit.createInventory(player, slots, config.getString("gui.sleeping"));
|
||||
if (sleeping.size() > 0) sleeping.forEach(p -> {
|
||||
ItemStack item = new ItemStack(Material.LEGACY_SKULL_ITEM, 1, (short) 3); //FIXME deprecated
|
||||
SkullMeta skull = (SkullMeta) item.getItemMeta();
|
||||
@ -46,11 +45,29 @@ public class Sleeping implements CommandExecutor {
|
||||
player.openInventory(gui);
|
||||
}
|
||||
else {
|
||||
//TODO console stuff
|
||||
Config config = new Config();
|
||||
if (args.length < 1) {
|
||||
ArrayList<String> list = new ArrayList<String>();
|
||||
Bukkit.getServer().getWorlds().forEach(w -> {list.add("&o" + w.getName());});
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix") + "Specify a world name. Possible worlds are " + String.join("&r, ", list) + "&r."));
|
||||
}
|
||||
else {
|
||||
World w = Bukkit.getServer().getWorld(args[0]);
|
||||
if (w == null) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix") + "The specified world doesn't exist."));
|
||||
else {
|
||||
ArrayList<String> list = new ArrayList<String>();
|
||||
Util.sleeping.get(Bukkit.getServer().getWorld(args[0])).forEach(p -> {list.add("&o" + p.getName());});
|
||||
if (list.size() > 0 && list.size() != 1) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix") + "In &o" + args[0] + "&r, the currently sleeping players are " + String.join("&r, ", list) + "&r."));
|
||||
else if (list.size() == 1) Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix") + "In &o" + args[0] + "&r, " + list.get(0) + "&r is the only player sleeping."));
|
||||
else Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix") + "There aren't any currently sleeping players in &o" + args[0] + "&r."));
|
||||
}
|
||||
}
|
||||
/*
|
||||
StringBuilder sb = new StringBuilder();
|
||||
ArrayList<Player> sleeping = Util.sleeping.get(w);
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.miscellaneous.prefix")));
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
@ -20,24 +20,24 @@ public class BedEnter implements Listener {
|
||||
public void onPlayerBedEnter(PlayerBedEnterEvent event) {
|
||||
Util util = new Util();
|
||||
Config config = new Config();
|
||||
|
||||
//Prevent bed entry if "block" is enabled in the config
|
||||
if (config.getBoolean("features.block")) {
|
||||
if (config.getString("messages.chat.blocked").length() > 0) event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.blocked")));
|
||||
util.sendActionbar(event.getPlayer(), config.getString("messages.actionbar.blocked"));
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
// Block bed entry if enabled
|
||||
if (config.getBoolean("features.block")) {
|
||||
if (config.getString("messages.chat.blocked").length() > 0) event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.blocked")));
|
||||
util.sendActionbar(event.getPlayer(), config.getString("messages.actionbar.blocked"));
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getBedEnterResult() == BedEnterResult.OK) {
|
||||
World w = event.getPlayer().getWorld();
|
||||
ArrayList<Player> included = util.getIncluded(w);
|
||||
int excluded = w.getPlayers().size() - included.size();
|
||||
|
||||
// Increment the sleeping count TODO bypass stuff
|
||||
if (included.contains(event.getPlayer())) {
|
||||
util.add(w, event.getPlayer());
|
||||
|
||||
// Send a chat message when a player is sleeping
|
||||
// Chat messages
|
||||
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(util.getSleeping(w))))
|
||||
@ -45,11 +45,11 @@ public class BedEnter implements Listener {
|
||||
.replace("[player]", event.getPlayer().getName())
|
||||
.replace("[needed]", String.valueOf(util.getNeeded(w) - excluded)));
|
||||
}
|
||||
|
||||
// Skip night if possible
|
||||
util.skip(w, excluded, util.getNeeded(w));
|
||||
}
|
||||
else if (config.getString("messages.chat.bypass").length() != 0) event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.bypass")));
|
||||
|
||||
// Skip night if possible
|
||||
util.skip(w, excluded, util.getNeeded(w));
|
||||
}
|
||||
}
|
||||
}
|
@ -19,23 +19,23 @@ public class BedLeave implements Listener {
|
||||
public void onPlayerBedLeave(PlayerBedLeaveEvent event) {
|
||||
Util util = new Util();
|
||||
Config config = new Config();
|
||||
World world = event.getPlayer().getWorld();
|
||||
World w = event.getPlayer().getWorld();
|
||||
|
||||
ArrayList<Player> included = util.getIncluded(world);
|
||||
int excluded = world.getPlayers().size() - included.size();
|
||||
ArrayList<Player> included = util.getIncluded(w);
|
||||
int excluded = w.getPlayers().size() - included.size();
|
||||
|
||||
// Decrement the sleeping count if player isn't excluded
|
||||
if (included.contains(event.getPlayer())) {
|
||||
util.remove(world, event.getPlayer());
|
||||
util.remove(w, event.getPlayer());
|
||||
}
|
||||
|
||||
// Send a chat message when player gets out of bed (if it's not day)
|
||||
if (config.getBoolean("messages.chat.chat") && (config.getString("messages.chat.sleeping").length() != 0) && Bukkit.getServer().getWorld(world.getName()).getTime() < 1000L) {
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.sleeping")
|
||||
.replace("[sleeping]", String.valueOf(util.getSleeping(world))))
|
||||
if (config.getBoolean("messages.chat.chat") && (config.getString("messages.chat.left").length() != 0) && !(w.getTime() > 0 && w.getTime() < 12300) && included.contains(event.getPlayer())) {
|
||||
Bukkit.getServer().broadcastMessage(ChatColor.translateAlternateColorCodes('&', config.getString("messages.chat.left")
|
||||
.replace("[sleeping]", String.valueOf(util.getSleeping(w))))
|
||||
.replace("[online]", String.valueOf(included.size()))
|
||||
.replace("[player]", event.getPlayer().getName())
|
||||
.replace("[needed]", String.valueOf(util.getNeeded(world) - excluded)));
|
||||
.replace("[needed]", String.valueOf(util.getNeeded(w) - excluded)));
|
||||
}
|
||||
}
|
||||
}
|
@ -14,5 +14,6 @@ public class PlayerLeave implements Listener {
|
||||
World w = event.getPlayer().getWorld();
|
||||
int excluded = (w.getPlayers().size() - 1) - (util.getIncluded(w).size() - 1);
|
||||
util.skip(event.getPlayer().getWorld(), excluded, util.getNeededDecremented(w));
|
||||
Util.activity.remove(event.getPlayer());
|
||||
}
|
||||
}
|
16
src/main/java/mykyta/Harbor/Events/Spawn.java
Normal file
16
src/main/java/mykyta/Harbor/Events/Spawn.java
Normal file
@ -0,0 +1,16 @@
|
||||
package mykyta.Harbor.Events;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||
|
||||
import mykyta.Harbor.Config;
|
||||
|
||||
public class Spawn implements Listener {
|
||||
@EventHandler
|
||||
public void onSpawn(CreatureSpawnEvent event) {
|
||||
Config config = new Config();
|
||||
if (event.getEntityType().equals(EntityType.PHANTOM) && !config.getBoolean("features.phantoms")) event.setCancelled(true);
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ import mykyta.Harbor.Events.GUIDrag;
|
||||
import mykyta.Harbor.Events.Move;
|
||||
import mykyta.Harbor.Events.PlayerJoin;
|
||||
import mykyta.Harbor.Events.PlayerLeave;
|
||||
import mykyta.Harbor.Events.Spawn;
|
||||
|
||||
public class Harbor extends JavaPlugin {
|
||||
private Logger log = Bukkit.getLogger();
|
||||
@ -33,6 +34,7 @@ public class Harbor extends JavaPlugin {
|
||||
Bukkit.getPluginManager().registerEvents(new BedEnter(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new BedLeave(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new Move(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new Spawn(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new GUIClick(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new GUIDrag(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new PlayerJoin(), this);
|
||||
|
@ -1,11 +1,8 @@
|
||||
package mykyta.Harbor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class Task implements Runnable {
|
||||
@ -15,16 +12,22 @@ public class Task implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// Display a title if it's time to sleep
|
||||
for (World world : Bukkit.getWorlds()) {
|
||||
if (world.getTime() >= 12516l && world.getTime() <= 12547l) {
|
||||
System.out.println("sleepy time");
|
||||
Bukkit.getServer().getWorlds().forEach(w -> {
|
||||
// Display a title if it's time to sleep
|
||||
if (w.getTime() >= 12516 && w.getTime() <= 12547) w.getPlayers().forEach(p -> {
|
||||
util.sendTitle(p, config.getString("messages.title.evening.top"), config.getString("messages.title.evening.bottom"));
|
||||
});
|
||||
|
||||
Bukkit.getWorld(world.getUID()).getPlayers().stream().forEach(p -> {
|
||||
util.sendTitle(p, config.getString("messages.title.evening.top"), config.getString("messages.title.evening.bottom"));
|
||||
});
|
||||
// Fix time if players leave bed naturally
|
||||
if (w.getTime() >= 0 && w.getTime() <= 100) {
|
||||
ArrayList<Player> list = new ArrayList<Player>();
|
||||
Util.sleeping.put(w, list);
|
||||
}
|
||||
}
|
||||
|
||||
// Send actionbar if someone's sleeping
|
||||
if (util.getSleeping(w) > 0 && util.getSleeping(w) < w.getPlayers().size()) {w.getPlayers().forEach(p -> {util.sendActionbar(p, config.getString("messages.actionbar.sleeping"), w);});}
|
||||
else if (util.getSleeping(w) == w.getPlayers().size()) {w.getPlayers().forEach(p -> {util.sendActionbar(p, config.getString("messages.actionbar.everyone"), w);});}
|
||||
});
|
||||
|
||||
/*
|
||||
// TODO if player hasnt moved for x minutes then put in afk
|
||||
@ -38,21 +41,4 @@ public class Task implements Runnable {
|
||||
});
|
||||
});*/
|
||||
}
|
||||
|
||||
/* @Override
|
||||
public void run() {
|
||||
try {
|
||||
for (int i = 0; Main.worlds.size() > i; i++) {
|
||||
if (((Main.worlds.get(Bukkit.getServer().getWorlds().get(i))).intValue() > 0) && ((Main.worlds.get(Bukkit.getServer().getWorlds().get(i))).intValue() < (Bukkit.getServer().getWorlds().get(i)).getPlayers().size() - Main.bypassers.size())) {
|
||||
Main.sendActionbar("playersInBed", Bukkit.getServer().getWorlds().get(i));
|
||||
}
|
||||
else if (((Main.worlds.get(Bukkit.getServer().getWorlds().get(i))).intValue() == (Bukkit.getServer().getWorlds().get(i)).getPlayers().size() - Main.bypassers.size()) && ((Bukkit.getServer().getWorlds().get(i)).getPlayers().size() - Main.bypassers.size() > 1)) {
|
||||
Main.sendActionbar("everyoneSleeping", Bukkit.getServer().getWorlds().get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}*/
|
||||
}
|
@ -1,9 +1,6 @@
|
||||
package mykyta.Harbor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.Temporal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Logger;
|
||||
@ -93,19 +90,11 @@ public class Util {
|
||||
* @param world World to fetch count for
|
||||
*/
|
||||
public ArrayList<Player> getIncluded(World world) {
|
||||
//TODO convert to a foreach
|
||||
ArrayList<Player> players = new ArrayList<Player>();
|
||||
for (Player player : world.getPlayers()) {
|
||||
if (this.isIncluded(player)) players.add(player);
|
||||
}
|
||||
world.getPlayers().forEach(p -> {
|
||||
if (this.isIncluded(p)) players.add(p);
|
||||
});
|
||||
return players;
|
||||
|
||||
// FIXME 2 fancy 4 me to understand
|
||||
/*world.getPlayers().stream().filter(p -> this.isIncluded(world.getPlayers)).forEach(p -> {
|
||||
if (true) {
|
||||
players.add(p);
|
||||
}
|
||||
});*/
|
||||
}
|
||||
|
||||
|
||||
@ -113,19 +102,12 @@ public class Util {
|
||||
* Returns true if player should be included in count
|
||||
* @param player Target player
|
||||
*/
|
||||
public boolean isIncluded(Player player) {
|
||||
if (config.getBoolean("features.ignore")) {
|
||||
if (player.getGameMode() == GameMode.SURVIVAL) return true;
|
||||
else return false;
|
||||
}
|
||||
else if (config.getBoolean("features.bypass")) {
|
||||
if (player.hasPermission("harbor.bypass")) return false;
|
||||
else return true;
|
||||
}
|
||||
else if (TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - activity.get(player)) > config.getInteger("values.timeout")) {
|
||||
return false;
|
||||
}
|
||||
else return true;
|
||||
public boolean isIncluded(Player p) {
|
||||
boolean state = true;
|
||||
if (config.getBoolean("features.ignore")) if (p.getGameMode() == GameMode.SURVIVAL) state = true; else state = false;
|
||||
if (config.getBoolean("features.bypass")) if (p.hasPermission("harbor.bypass")) state = false; else state = true;
|
||||
if (TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - activity.get(p)) > config.getInteger("values.timeout")) state = false;
|
||||
return state;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -144,14 +126,14 @@ public class Util {
|
||||
* @param message Actionbar message with color codes
|
||||
* @param world World to fetch information for
|
||||
*/
|
||||
public void sendActionbar(Player player, String message, World world) {
|
||||
Config config = new Config();
|
||||
nms.sendActionbar(player, message
|
||||
.replace("[sleeping]", String.valueOf(sleeping.get(world)))
|
||||
//TODO add bypassers functionaliyt .replace("[online]", String.valueOf(world.getPlayers().size() - bypassers.size()))
|
||||
// .replace("[needed]", String.valueOf(Math.max(0, Math.round(world.getPlayers().size() * Float.parseFloat(plugin.getConfig().getString("values.percent")) - bypassers.size() - ((Integer)worlds.get(world)).intValue())))));
|
||||
.replace("[online]", String.valueOf(world.getPlayers().size()))
|
||||
.replace("[needed]", String.valueOf(Math.max(0, Math.round(world.getPlayers().size() * Float.parseFloat(config.getString("values.percent")) - sleeping.get(world).size())))));
|
||||
public void sendActionbar(Player p, String message, World w) {
|
||||
ArrayList<Player> included = this.getIncluded(w);
|
||||
int excluded = w.getPlayers().size() - included.size();
|
||||
|
||||
nms.sendActionbar(p, message
|
||||
.replace("[sleeping]", String.valueOf(this.getSleeping(w)))
|
||||
.replace("[online]", String.valueOf(included.size()))
|
||||
.replace("[needed]", String.valueOf(this.getNeeded(w) - excluded)));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -177,15 +159,10 @@ public class Util {
|
||||
* @param World to return value for
|
||||
*/
|
||||
public void skip(World w, int excluded, int needed) {
|
||||
System.out.println("needed: "+ needed);
|
||||
System.out.println("Exclkuded: " + excluded);
|
||||
System.out.println("difference: " + (needed - excluded));
|
||||
|
||||
if (config.getBoolean("features.skip") && (needed - excluded) == 0) {
|
||||
System.out.println("set time");
|
||||
w.setTime(1000L);
|
||||
|
||||
|
||||
// Set weather to clear
|
||||
if (config.getBoolean("features.weather")) {
|
||||
w.setStorm(false);
|
||||
|
Loading…
Reference in New Issue
Block a user