Implement the usage of Scoreboards, make the language configurable.
Closes #15
This commit is contained in:
parent
6ce05dbe7d
commit
ec1e91cda2
@ -8,6 +8,7 @@ Beta 2 Changes
|
|||||||
===
|
===
|
||||||
*Changes since Beta 1*
|
*Changes since Beta 1*
|
||||||
* Fix the default Jail Stick not being loaded correctly, [#21](https://github.com/graywolf336/Jail/issues/21)
|
* Fix the default Jail Stick not being loaded correctly, [#21](https://github.com/graywolf336/Jail/issues/21)
|
||||||
|
* Implement Scoreboards, with title and time configurable. ([#15](https://github.com/graywolf336/Jail/issues/15))
|
||||||
|
|
||||||
Beta 1 Changes
|
Beta 1 Changes
|
||||||
===
|
===
|
||||||
|
@ -6,6 +6,7 @@ import org.bukkit.plugin.PluginManager;
|
|||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
import com.graywolf336.jail.beans.Jail;
|
import com.graywolf336.jail.beans.Jail;
|
||||||
|
import com.graywolf336.jail.beans.Prisoner;
|
||||||
import com.graywolf336.jail.command.CommandHandler;
|
import com.graywolf336.jail.command.CommandHandler;
|
||||||
import com.graywolf336.jail.command.JailHandler;
|
import com.graywolf336.jail.command.JailHandler;
|
||||||
import com.graywolf336.jail.enums.Settings;
|
import com.graywolf336.jail.enums.Settings;
|
||||||
@ -33,6 +34,7 @@ public class JailMain extends JavaPlugin {
|
|||||||
private JailStickManager jsm;
|
private JailStickManager jsm;
|
||||||
private JailTimer jt;
|
private JailTimer jt;
|
||||||
private PrisonerManager pm;
|
private PrisonerManager pm;
|
||||||
|
private ScoreBoardManager sbm;
|
||||||
private boolean debug = false;
|
private boolean debug = false;
|
||||||
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
@ -79,6 +81,7 @@ public class JailMain extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jt = new JailTimer(this);
|
jt = new JailTimer(this);
|
||||||
|
sbm = new ScoreBoardManager(this);
|
||||||
|
|
||||||
getLogger().info("Completed enablement.");
|
getLogger().info("Completed enablement.");
|
||||||
}
|
}
|
||||||
@ -96,6 +99,7 @@ public class JailMain extends JavaPlugin {
|
|||||||
io.closeConnection();
|
io.closeConnection();
|
||||||
|
|
||||||
jt = null;
|
jt = null;
|
||||||
|
sbm = null;
|
||||||
cmdHand = null;
|
cmdHand = null;
|
||||||
pm = null;
|
pm = null;
|
||||||
jm = null;
|
jm = null;
|
||||||
@ -140,6 +144,23 @@ public class JailMain extends JavaPlugin {
|
|||||||
return true;//Always return true here, that way we can handle the help and command usage ourself.
|
return true;//Always return true here, that way we can handle the help and command usage ourself.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Reloads the scoreboard manager class, useful when something is changed int he config about it. */
|
||||||
|
public void reloadScoreBoardManager() {
|
||||||
|
this.sbm.removeAllScoreboards();
|
||||||
|
this.sbm = null;
|
||||||
|
this.sbm = new ScoreBoardManager(this);
|
||||||
|
|
||||||
|
if(getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
for(Jail j : jm.getJails()) {
|
||||||
|
for(Prisoner p : j.getAllPrisoners()) {
|
||||||
|
if(getServer().getPlayerExact(p.getName()) != null) {
|
||||||
|
this.sbm.addScoreBoard(getServer().getPlayerExact(p.getName()), p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Gets the {@link HandCuffManager} instance. */
|
/** Gets the {@link HandCuffManager} instance. */
|
||||||
public HandCuffManager getHandCuffManager() {
|
public HandCuffManager getHandCuffManager() {
|
||||||
return this.hcm;
|
return this.hcm;
|
||||||
@ -165,6 +186,11 @@ public class JailMain extends JavaPlugin {
|
|||||||
return this.jsm;
|
return this.jsm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the {@link ScoreBoardManager} instance. */
|
||||||
|
public ScoreBoardManager getScoreBoardManager() {
|
||||||
|
return this.sbm;
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns if the plugin is in debug state or not. */
|
/** Returns if the plugin is in debug state or not. */
|
||||||
public boolean inDebug() {
|
public boolean inDebug() {
|
||||||
return this.debug;
|
return this.debug;
|
||||||
|
@ -267,6 +267,11 @@ public class PrisonerManager {
|
|||||||
pl.getServer().dispatchCommand(pl.getServer().getConsoleSender(), command);
|
pl.getServer().dispatchCommand(pl.getServer().getConsoleSender(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Add the scoreboard to them if it is enabled
|
||||||
|
if(pl.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
pl.getScoreBoardManager().addScoreBoard(player, prisoner);
|
||||||
|
}
|
||||||
|
|
||||||
//Call our custom event for when a prisoner is actually jailed.
|
//Call our custom event for when a prisoner is actually jailed.
|
||||||
PrisonerJailedEvent event = new PrisonerJailedEvent(jail, cell, prisoner, player);
|
PrisonerJailedEvent event = new PrisonerJailedEvent(jail, cell, prisoner, player);
|
||||||
pl.getServer().getPluginManager().callEvent(event);
|
pl.getServer().getPluginManager().callEvent(event);
|
||||||
@ -399,6 +404,11 @@ public class PrisonerManager {
|
|||||||
pl.getServer().dispatchCommand(pl.getServer().getConsoleSender(), command);
|
pl.getServer().dispatchCommand(pl.getServer().getConsoleSender(), command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Remove the scoreboard to them if it is enabled
|
||||||
|
if(pl.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
pl.getScoreBoardManager().removeScoreBoard(player);
|
||||||
|
}
|
||||||
|
|
||||||
//Call the prisoner released event as we have released them.
|
//Call the prisoner released event as we have released them.
|
||||||
PrisonerReleasedEvent event = new PrisonerReleasedEvent(jail, cell, prisoner, player);
|
PrisonerReleasedEvent event = new PrisonerReleasedEvent(jail, cell, prisoner, player);
|
||||||
pl.getServer().getPluginManager().callEvent(event);
|
pl.getServer().getPluginManager().callEvent(event);
|
||||||
|
101
src/main/java/com/graywolf336/jail/ScoreBoardManager.java
Normal file
101
src/main/java/com/graywolf336/jail/ScoreBoardManager.java
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
package com.graywolf336.jail;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.scoreboard.DisplaySlot;
|
||||||
|
import org.bukkit.scoreboard.Objective;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.ScoreboardManager;
|
||||||
|
|
||||||
|
import com.graywolf336.jail.beans.Jail;
|
||||||
|
import com.graywolf336.jail.beans.Prisoner;
|
||||||
|
import com.graywolf336.jail.enums.Settings;
|
||||||
|
|
||||||
|
public class ScoreBoardManager {
|
||||||
|
private JailMain pl;
|
||||||
|
private ScoreboardManager man;
|
||||||
|
private HashMap<String, Scoreboard> boards;
|
||||||
|
private OfflinePlayer time;
|
||||||
|
|
||||||
|
public ScoreBoardManager(JailMain plugin) {
|
||||||
|
this.pl = plugin;
|
||||||
|
this.man = plugin.getServer().getScoreboardManager();
|
||||||
|
this.boards = new HashMap<String, Scoreboard>();
|
||||||
|
this.time = plugin.getServer().getOfflinePlayer(Util.getColorfulMessage(pl.getConfig().getString(Settings.SCOREBOARDTIME.getPath())));
|
||||||
|
|
||||||
|
//Start the task if it is enabled
|
||||||
|
if(plugin.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
updatePrisonersTime();
|
||||||
|
}
|
||||||
|
}, 200L, 100L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the jailing score board to the player if they don't have one, otherwise it just updates it.
|
||||||
|
*
|
||||||
|
* @param player of whom to add the scoreboard to.
|
||||||
|
* @param pris data for the provided prisoner
|
||||||
|
*/
|
||||||
|
public void addScoreBoard(Player player, Prisoner pris) {
|
||||||
|
if(!boards.containsKey(player.getName())) {
|
||||||
|
boards.put(player.getName(), man.getNewScoreboard());
|
||||||
|
Objective o = boards.get(player.getName()).registerNewObjective("test", "dummy");
|
||||||
|
o.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||||
|
o.setDisplayName(Util.getColorfulMessage(pl.getConfig().getString(Settings.SCOREBOARDTITLE.getPath())));
|
||||||
|
o.getScore(time).setScore(pris.getRemainingTimeInMinutesInt());
|
||||||
|
player.setScoreboard(boards.get(player.getName()));
|
||||||
|
}else {
|
||||||
|
updatePrisonersBoard(player, pris);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a player's jail scoreboard for their jail time and sets it to the main one.
|
||||||
|
*
|
||||||
|
* @param player of whom to remove the scoreboard for.
|
||||||
|
*/
|
||||||
|
public void removeScoreBoard(Player player) {
|
||||||
|
boards.remove(player.getName());
|
||||||
|
//TODO: See if this works or if we need to set it to a new one
|
||||||
|
player.setScoreboard(man.getMainScoreboard());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAllScoreboards() {
|
||||||
|
HashMap<String, Scoreboard> temp = new HashMap<String, Scoreboard>(boards);
|
||||||
|
|
||||||
|
for(String s : temp.keySet()) {
|
||||||
|
Player p = pl.getServer().getPlayerExact(s);
|
||||||
|
|
||||||
|
if(p != null) {
|
||||||
|
p.setScoreboard(man.getMainScoreboard());
|
||||||
|
}
|
||||||
|
|
||||||
|
boards.remove(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updatePrisonersTime() {
|
||||||
|
for(Jail j : pl.getJailManager().getJails()) {
|
||||||
|
for(Prisoner p : j.getAllPrisoners()) {
|
||||||
|
if(pl.getServer().getPlayerExact(p.getName()) != null) {
|
||||||
|
addScoreBoard(pl.getServer().getPlayerExact(p.getName()), p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a player's time in the scoreboard.
|
||||||
|
*
|
||||||
|
* @param player of whom to update the scoreboard for.
|
||||||
|
* @param pris data for the player
|
||||||
|
*/
|
||||||
|
private void updatePrisonersBoard(Player player, Prisoner pris) {
|
||||||
|
boards.get(player.getName()).getObjective("test").getScore(time).setScore(pris.getRemainingTimeInMinutesInt());
|
||||||
|
}
|
||||||
|
}
|
@ -90,6 +90,11 @@ public class Prisoner {
|
|||||||
return TimeUnit.MINUTES.convert(time, TimeUnit.MILLISECONDS);
|
return TimeUnit.MINUTES.convert(time, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets the remaining time the prison has in minutes except only in int format. */
|
||||||
|
public int getRemainingTimeInMinutesInt() {
|
||||||
|
return (int) this.getRemainingTimeInMinutes();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the remaining time the prisoner has left.
|
* Sets the remaining time the prisoner has left.
|
||||||
*
|
*
|
||||||
|
@ -20,6 +20,7 @@ public class JailReloadCommand implements Command {
|
|||||||
jm.getPlugin().reloadConfig();
|
jm.getPlugin().reloadConfig();
|
||||||
jm.getPlugin().getJailIO().loadLanguage();
|
jm.getPlugin().getJailIO().loadLanguage();
|
||||||
jm.getPlugin().getJailIO().loadJails();
|
jm.getPlugin().getJailIO().loadJails();
|
||||||
|
jm.getPlugin().reloadScoreBoardManager();
|
||||||
|
|
||||||
sender.sendMessage(jm.getPlugin().getJailIO().getLanguageString(LangString.PLUGINRELOADED));
|
sender.sendMessage(jm.getPlugin().getJailIO().getLanguageString(LangString.PLUGINRELOADED));
|
||||||
return true;
|
return true;
|
||||||
|
@ -41,6 +41,9 @@ public enum Settings {
|
|||||||
RECIEVEMESSAGES("jailing.during.recieveMessages"),
|
RECIEVEMESSAGES("jailing.during.recieveMessages"),
|
||||||
RELEASETOPREVIOUSPOSITION("jailing.release.backToPreviousPosition"),
|
RELEASETOPREVIOUSPOSITION("jailing.release.backToPreviousPosition"),
|
||||||
RESTOREPREVIOUSGAMEMODE("jailing.release.restorePreviousGameMode"),
|
RESTOREPREVIOUSGAMEMODE("jailing.release.restorePreviousGameMode"),
|
||||||
|
SCOREBOARDENABLED("jailing.during.scoreboard.enabled"),
|
||||||
|
SCOREBOARDTITLE("jailing.during.scoreboard.title"),
|
||||||
|
SCOREBOARDTIME("jailing.during.scoreboard.time"),
|
||||||
TELEPORTONRELEASE("jailing.release.teleport"),
|
TELEPORTONRELEASE("jailing.release.teleport"),
|
||||||
UPDATENOTIFICATIONS("system.updateNotifications"),
|
UPDATENOTIFICATIONS("system.updateNotifications"),
|
||||||
USEBUKKITTIMER("system.useBukkitTimer");
|
USEBUKKITTIMER("system.useBukkitTimer");
|
||||||
|
@ -15,6 +15,8 @@ import org.bukkit.event.entity.FoodLevelChangeEvent;
|
|||||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerKickEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
|
|
||||||
import com.graywolf336.jail.JailMain;
|
import com.graywolf336.jail.JailMain;
|
||||||
@ -120,6 +122,11 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Add the scoreboard to them if it is enabled
|
||||||
|
if(pl.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
pl.getScoreBoardManager().addScoreBoard(event.getPlayer(), p);
|
||||||
|
}
|
||||||
|
|
||||||
//if we are ignoring a prisoner's sleeping state, then let's set that
|
//if we are ignoring a prisoner's sleeping state, then let's set that
|
||||||
if(pl.getConfig().getBoolean(Settings.IGNORESLEEPINGSTATE.getPath())) {
|
if(pl.getConfig().getBoolean(Settings.IGNORESLEEPINGSTATE.getPath())) {
|
||||||
event.getPlayer().setSleepingIgnored(true);
|
event.getPlayer().setSleepingIgnored(true);
|
||||||
@ -127,6 +134,26 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void handleGoingOffline(PlayerQuitEvent event) {
|
||||||
|
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getName())) {
|
||||||
|
//Remove the scoreboard to them if it is enabled
|
||||||
|
if(pl.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
pl.getScoreBoardManager().removeScoreBoard(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(ignoreCancelled=true)
|
||||||
|
public void handleGettingKicked(PlayerKickEvent event) {
|
||||||
|
if(pl.getJailManager().isPlayerJailed(event.getPlayer().getName())) {
|
||||||
|
//Remove the scoreboard to them if it is enabled
|
||||||
|
if(pl.getConfig().getBoolean(Settings.SCOREBOARDENABLED.getPath())) {
|
||||||
|
pl.getScoreBoardManager().removeScoreBoard(event.getPlayer());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
public void foodControl(FoodLevelChangeEvent event) {
|
public void foodControl(FoodLevelChangeEvent event) {
|
||||||
if(pl.getConfig().getBoolean(Settings.FOODCONTROL.getPath())) {
|
if(pl.getConfig().getBoolean(Settings.FOODCONTROL.getPath())) {
|
||||||
|
@ -40,6 +40,10 @@ jailing:
|
|||||||
preventInteractionItems: []
|
preventInteractionItems: []
|
||||||
preventInteractionItemsPenalty: 5m
|
preventInteractionItemsPenalty: 5m
|
||||||
recieveMessages: true
|
recieveMessages: true
|
||||||
|
scoreboard:
|
||||||
|
enabled: true
|
||||||
|
title: 'Jail Info'
|
||||||
|
time: '&aTime:'
|
||||||
jail:
|
jail:
|
||||||
automaticMute: true
|
automaticMute: true
|
||||||
broadcastJailing: false
|
broadcastJailing: false
|
||||||
|
Loading…
Reference in New Issue
Block a user