Swallowed The Button Rebirth

ahhhh, the good old first project of mine. I can smell the bad code from
here
This commit is contained in:
alisolarflare 2016-11-05 07:18:53 -04:00
parent c802d8db9b
commit 48a30f8c7f
11 changed files with 900 additions and 2 deletions

View file

@ -4,7 +4,7 @@ version: 2.0.1
commands:
flairme:
description: Activates the Flair Me Command. Ask Ali, she was fucking tired when writing this description
description: Activates the Flair Me Command. Ask Ali, she was tired when writing this description
gpower:
description: Testing command for ghostie powers
powerup:

View file

@ -1,4 +1,4 @@
package alisolarflare.components.flairdoor.commands;
package graveyard.shulker;
import java.util.Arrays;
import java.util.List;

View file

@ -0,0 +1,70 @@
package graveyard.shulker.thebuttonrebirth;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.plugin.PluginDescriptionFile;
import org.bukkit.plugin.java.JavaPlugin;
import graveyard.shulker.thebuttonrebirth.admin.CreateShrine;
import graveyard.shulker.thebuttonrebirth.listeners.CyclicalDisplayListener;
import graveyard.shulker.thebuttonrebirth.listeners.MidnightListener;
import graveyard.shulker.thebuttonrebirth.listeners.StealChestListener;
public class ButtonRebirthPlugin extends JavaPlugin{
public PluginDescriptionFile pdfFile;
public Logger logger;
public List<Player> compactRequest = new ArrayList<Player>();
public List<Player> barsHidden = new ArrayList<Player>();
public CyclicalDisplayListener cyclicalDisplayListener;
public void onEnable(){
//Logs "Plugin Enabled:
pdfFile = getDescription();
logger = getLogger();
logger.info(pdfFile.getName() + " has been started (V." + pdfFile.getVersion()+ ").");
registerCommands();
registerEvents();
logger.info(pdfFile.getName() + " has been Enabled (V." + pdfFile.getVersion()+ ").");
}
public void onDisable(){
logger.info(pdfFile.getName() + " has been Disabled (V." + pdfFile.getVersion()+ ").");
}
private void registerCommands(){
//Button
getCommand("createShrine").setExecutor(new CreateShrine(this));
}
private void registerEvents(){
//INIT - Listeners
MidnightListener midnightListener = new MidnightListener(this);
cyclicalDisplayListener = new CyclicalDisplayListener(this);
StealChestListener stealChestListener = new StealChestListener(this);
//REGISTER - Listeners
getServer().getPluginManager().registerEvents(midnightListener, this);
getServer().getPluginManager().registerEvents(cyclicalDisplayListener,this);
getServer().getPluginManager().registerEvents(stealChestListener, this);
}
public void createShrine(){
int chestX = this.getConfig().getInt("chestX");
int chestY = this.getConfig().getInt("chestY");
int chestZ = this.getConfig().getInt("chestZ");
CreateShrine shrineCreator = new CreateShrine(this);
shrineCreator.createShrine(chestX, chestY, chestZ, 10, Material.BEDROCK);
}
}

View file

@ -0,0 +1,128 @@
package graveyard.shulker.thebuttonrebirth.admin;
import org.bukkit.Material;
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 graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
import net.md_5.bungee.api.ChatColor;
public class CreateShrine implements CommandExecutor{
private ButtonRebirthPlugin plugin;
private World world;
private int chestX;
private int chestY;
private int chestZ;
private int shrineRadius;
public CreateShrine(ButtonRebirthPlugin initPlugin){
plugin = initPlugin;
world = plugin.getServer().getWorld(plugin.getConfig().getString("world"));
chestX = plugin.getConfig().getInt("chestX");
chestY = plugin.getConfig().getInt("chestY");
chestZ = plugin.getConfig().getInt("chestZ");
shrineRadius = plugin.getConfig().getInt("shrineRadius");
}
private void createCube(int x, int y, int z, int radius, Material material){
//Creates a Cube under the Pyramid under the Chest
//---Parameters---
//Accepts x,y,z coordinates of the top center face, radius from center to edge, and BlockType
//Blocks placed by Radius does not include center block
//radius = 0 creates a single block
//radius = 1 creates a 9x9 cube
//Places down the cube
//---Variables---
//layer variable: layer being worked on, from the top
//layer[0] = top layer of cube
//layer[height] = bottom layer of cube
//row variable: relative value from center
//column variable:relative value from center
for (int layer = 0; layer <= radius; layer++){
for (int row = -radius; row <= radius; row++){
for (int column = -radius; column <= radius; column++){
world.getBlockAt(x+row,y-layer,z+column).setType(material);
}
}
}
}
private void createPyramid(int x, int y, int z, int height, Material material){
//creates a pyramid under the chest
//sets the Top Block
//Places down the rest of the layers
//layer variable: layer being worked on, from the top
//layer[0] = top block of pyramid
//row variable: relative value from center
//column variable:relative value from center
//SET - top block, rest of the blocks
world.getBlockAt(x,y,z).setType(material);
for (int layer = 1; layer < height; layer++){
int radius = layer;
for (int row = -radius; row <= radius; row++){
for (int column = -radius; column <= radius; column++){
world.getBlockAt(x+row,y-layer,z+column).setType(material);
}
}
}
}
public void createShrine(int x, int y, int z, int radius, Material material){
//Creates Chest
world.getBlockAt(x, y, z).setType(Material.CHEST);
createPyramid(x, y-1, z, radius, material);
createCube(x, y-radius-1, z, radius, material);
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player){
sender.sendMessage("You can't be a player to use this command");
return false;
}
try{
world = plugin.getServer().getWorld(plugin.getConfig().getString("world"));
}catch(Exception e){
//Sends Error message to the Player
sender.sendMessage("Error in CreateShrine Class: No world defined in config...");
sender.sendMessage("Defining world based on player location.");
/*
//Changes world variable in config file
if (sender instanceof Player){
Player player = (Player) sender;
plugin.getConfig().set("world", player.getWorld().getName());
plugin.saveConfig();
world = player.getWorld();
//Sends player the result of the change
sender.sendMessage("World variable set to " + player.getWorld().getName() + "in config file");
}
*/
}
/*
if (!(player.hasPermission("Moderator") || player.hasPermission("Admin"))){
player.sendMessage(ChatColor.RED + "You must be in the group Moderator or Admin to access this command!");
return false;
}
*/
chestX = plugin.getConfig().getInt("chestX");
chestY = plugin.getConfig().getInt("chestY");
chestZ = plugin.getConfig().getInt("chestZ");
shrineRadius = plugin.getConfig().getInt("shrineRadius");
createShrine(chestX,chestY,chestZ,shrineRadius, Material.BEDROCK);
sender.sendMessage(ChatColor.AQUA + "Everything worked!");
return false;
}
}

View file

@ -0,0 +1,30 @@
package graveyard.shulker.thebuttonrebirth.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
public class ShowBars implements CommandExecutor{
private ButtonRebirthPlugin plugin;
public ShowBars(ButtonRebirthPlugin initPlugin){
plugin = initPlugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!(sender instanceof Player)) {
sender.sendMessage("You must be a player to use this command");
return false;
}
Player player = (Player) sender;
plugin.barsHidden.remove(player);
return false;
}
}

View file

@ -0,0 +1,19 @@
package graveyard.shulker.thebuttonrebirth.listeners;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitTask;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
import graveyard.shulker.thebuttonrebirth.tasks.CyclicalDisplayTask;
public class CyclicalDisplayListener implements Listener{
private final ButtonRebirthPlugin plugin;
public CyclicalDisplayTask cyclicalDisplayTask;
public BukkitTask bukkitTask;
public CyclicalDisplayListener (ButtonRebirthPlugin initPlugin){
plugin = initPlugin;
cyclicalDisplayTask = new CyclicalDisplayTask (this.plugin);
bukkitTask = cyclicalDisplayTask.runTaskTimer(this.plugin, 20, 20);
}
}

View file

@ -0,0 +1,19 @@
package graveyard.shulker.thebuttonrebirth.listeners;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitTask;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
import graveyard.shulker.thebuttonrebirth.tasks.CheckChestTask;
public class MidnightListener implements Listener{
private final ButtonRebirthPlugin plugin;
public BukkitTask checkChestTask;
public MidnightListener(ButtonRebirthPlugin initPlugin){
plugin = initPlugin;
checkChestTask = new CheckChestTask(this.plugin).runTaskTimer(this.plugin, 20, 60);
}
}

View file

@ -0,0 +1,18 @@
package graveyard.shulker.thebuttonrebirth.listeners;
import org.bukkit.event.Listener;
import org.bukkit.scheduler.BukkitTask;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
import graveyard.shulker.thebuttonrebirth.tasks.StealChestTask;
public class StealChestListener implements Listener{
private final ButtonRebirthPlugin plugin;
public BukkitTask stealChestTask;
public StealChestListener(ButtonRebirthPlugin initPlugin){
plugin = initPlugin;
stealChestTask = new StealChestTask(this.plugin).runTaskTimer(this.plugin, 20, 20);
}
}

View file

@ -0,0 +1,169 @@
package graveyard.shulker.thebuttonrebirth.tasks;
import java.time.Clock;
import java.time.LocalDateTime;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.inventory.Inventory;
import org.bukkit.scheduler.BukkitRunnable;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
import graveyard.shulker.thebuttonrebirth.admin.CreateShrine;
public class CheckChestTask extends BukkitRunnable{
//Plugin
private final ButtonRebirthPlugin BRplugin;
private World world;
//Chest
private int chestX;
private int chestY;
private int chestZ;
private Block chestBlock;
private Chest shrineChest;
private Inventory shrineInventory;
//Time
private LocalDateTime currentTime;
private LocalDateTime configTime;
private int minimumDiamondBlocks;
private int diamondsInserted;
public CheckChestTask(ButtonRebirthPlugin initBRplugin){
//INIT - plugin
this.BRplugin = initBRplugin;
//INIT - chestX, chestY, chestZ
chestX = BRplugin.getConfig().getInt("chestX");
chestY = BRplugin.getConfig().getInt("chestY");
chestZ = BRplugin.getConfig().getInt("chestZ");
//INIT - World
world = BRplugin.getServer().getWorld(BRplugin.getConfig().getString("world"));
}
@Override
public void run(){
//run() activates every 20 server ticks.
//CHECK - Plugin is Enabled
if (BRplugin.isEnabled() == false){
this.cancel();
}
//CHECK - World Exists
if (!(BRplugin.getServer().getWorlds().contains(BRplugin.getServer().getWorld(BRplugin.getConfig().getString("world"))))) {
BRplugin.logger.info("Error: Config world does not exist in Server.");
BRplugin.logger.info("Server Worlds: " + BRplugin.getServer().getWorlds().toString());
BRplugin.logger.info("Config World: " + BRplugin.getConfig().getString("world"));
BRplugin.logger.info("Turning off Display...");
this.cancel();
return;
}
//INIT - currentTime, configTime
currentTime = LocalDateTime.now(Clock.systemUTC());
configTime = LocalDateTime.parse(BRplugin.getConfig().getString("lastCheckChestTime"));
//TIME - Current Time after Config Time
if (currentTime.isAfter(configTime)){
//SANITIZE "world"
if (BRplugin.getConfig().getString("world") == null) BRplugin.getServer().broadcastMessage("Error: No world defined in config file.");
if (BRplugin.getServer().getWorlds() == null) BRplugin.getServer().broadcastMessage("Error: plugin.getServer().getWorlds() returns null");
//INIT - world, chestBlock
chestBlock = world.getBlockAt(chestX, chestY, chestZ);
//SANITIZE - chestBlock
if (!(chestBlock.getType() == Material.CHEST)){
damageShrine();
reconstructShrine();
return;
}
//INIT - shrineChest, shrineInventory
shrineChest = (Chest) chestBlock.getState();
shrineInventory = shrineChest.getInventory();
//UPDATE - configTime
BRplugin.getConfig().set("lastCheckChestTime", currentTime.plusMinutes(BRplugin.getConfig().getInt("barDuration")).toString());
BRplugin.saveConfig();
//INIT - minimumDiamondBlocks, diamondsInserted
minimumDiamondBlocks = BRplugin.getConfig().getInt("minimumDiamondBlocks");
diamondsInserted = BRplugin.getConfig().getInt("diamondsInserted");
//CHECK - chest for diamonds
if(diamondsInserted > minimumDiamondBlocks || shrineInventory.contains(Material.DIAMOND_BLOCK, (minimumDiamondBlocks - diamondsInserted))){
//INVENTORY SUCCESS
//CHECK - First Time
if (minimumDiamondBlocks == 0){
broadcastExperimentHasBegun();
}else{
broadcastButtonRefuled();
}
//UPDATE minimumDiamondBlocks
minimumDiamondBlocks++;
BRplugin.getConfig().set("minimumDiamondBlocks", minimumDiamondBlocks);
BRplugin.getConfig().set("diamondsInserted", 0);
BRplugin.saveConfig();
}else{
//INVENTORY FAILURE
damageShrine();
}
//RESET - shrine, shrineInventory
reconstructShrine();
shrineInventory.clear();
BRplugin.getConfig().set("diamondsInserted",0);
}else{
//currentTime is before config time.
//therefore wait.
}
}
private void damageShrine(){
//UPDATE - buttonHealth
int buttonHealth = BRplugin.getConfig().getInt("buttonHealth");
buttonHealth--;
BRplugin.getConfig().set("buttonHealth", buttonHealth);
//DISPLAY AND MAKE SOUND
BRplugin.getServer().broadcastMessage(ChatColor.DARK_RED + "--------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.DARK_RED + "----- BUTTON DAMAGED -----");
BRplugin.getServer().broadcastMessage(ChatColor.DARK_RED + "--------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.RED + " " + buttonHealth + "s of Health left");
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_ENDERDRAGON_DEATH,50,1);
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_LIGHTNING_THUNDER,50,1);
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_GENERIC_EXPLODE,50,50);
}
private void reconstructShrine(){
CreateShrine shrineConstructor= new CreateShrine(BRplugin);
shrineConstructor.createShrine(chestX, chestY, chestZ, 10, Material.BEDROCK);
}
private void broadcastExperimentHasBegun(){
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "------------------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "----- THE EXPERIMENT HAS BEGUN -----");
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "------------------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.BLUE + " " + minimumDiamondBlocks + " Blocks required");
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_WITHER_SPAWN,50,10);
}
private void broadcastButtonRefuled(){
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "--------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "----- BUTTON REFULED -----");
BRplugin.getServer().broadcastMessage(ChatColor.AQUA + "--------------------------");
BRplugin.getServer().broadcastMessage(ChatColor.BLUE + " " + minimumDiamondBlocks + " Blocks required");
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_WITHER_SPAWN,50,10);
}
}

View file

@ -0,0 +1,245 @@
package graveyard.shulker.thebuttonrebirth.tasks;
import java.time.Clock;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
public class CyclicalDisplayTask extends BukkitRunnable{
//Pointers
private ButtonRebirthPlugin plugin;
private Server server;
private World world;
//Config Variables
public int buttonHealth;
public int minimumDiamondBlocks;
public String lastCheckChestTime;
//Boss bars
private BossBar buttonBar;
private BossBar diamondBar;
private BossBar timeBar;
//Time
private LocalDateTime currentTime;
private LocalDateTime configTime;
private Duration timeDifference;
//Chest
private int chestX;
private int chestY;
private int chestZ;
private Block chestBlock;
private Chest shrineChest;
private Inventory shrineInventory;
private ItemStack[] chestContents;
private int diamondsInserted;
//Players
private List<Player> playerList;
public List<Player> healthBlocked;
public List<Player> diamondBlocked;
public List<Player> timeBlocked;
private int totalDiamonds;
private int currentBar;
private int barCycleDuration = 20;
public CyclicalDisplayTask(ButtonRebirthPlugin initPlugin){
//INIT - plugin,server
plugin = initPlugin;
server = plugin.getServer();
//INIT - buttonBar,diamondBar,timeBar
buttonBar = server.createBossBar("INIT Easter Egg!", BarColor.PURPLE, BarStyle.SEGMENTED_20);
diamondBar = server.createBossBar("INIT Easter Egg!", BarColor.BLUE, BarStyle.SOLID);
timeBar = server.createBossBar("INIT Easter Egg!", BarColor.RED, BarStyle.SOLID);
//INIT - chestX, chestY, chestZ, diamondsInserted
chestX = plugin.getConfig().getInt("chestX");
chestY = plugin.getConfig().getInt("chestY");
chestZ = plugin.getConfig().getInt("chestZ");
diamondsInserted = plugin.getConfig().getInt("diamondsInserted");
currentBar = 0;
}
@Override
public void run() {
//CHECK - Plugin is Enabled
if (plugin.isEnabled() == false){
this.cancel();
}
//CHECK - World Exists
if (!(plugin.getServer().getWorlds().contains(plugin.getServer().getWorld(plugin.getConfig().getString("world"))))) {
plugin.logger.info("Error: Config world does not exist in Server.");
plugin.logger.info("Server Worlds: " + plugin.getServer().getWorlds().toString());
plugin.logger.info("Config World: " + plugin.getConfig().getString("world"));
plugin.logger.info("Turning off Display...");
this.cancel();
return;
}
//INIT - world,buttonHealth,minimumDiamondBlocks, diamondsInserted
world = plugin.getServer().getWorld(plugin.getConfig().getString("world"));
buttonHealth = plugin.getConfig().getInt("buttonHealth");
minimumDiamondBlocks = plugin.getConfig().getInt("minimumDiamondBlocks");
diamondsInserted = plugin.getConfig().getInt("diamondsInserted");
//INIT - currentTime, configTime, timeDifference
currentTime = LocalDateTime.now(Clock.systemUTC());
configTime = LocalDateTime.parse(plugin.getConfig().getString("lastCheckChestTime"));
timeDifference = Duration.of(currentTime.until(configTime, ChronoUnit.NANOS), ChronoUnit.NANOS);
setBarTitles();
setButtonBarProgress();
setDiamondBarProgress();
setTimeBarProgress();
//INIT - playerList,buttonPlayers,diamondPlayers,timePlayers
playerList = world.getPlayers();
//Bar Switching
currentBar++;
if (currentBar < barCycleDuration){
//Health Case
diamondBar.removeAll();
timeBar.removeAll();
for(Player player: playerList) buttonBar.addPlayer(player);
} else if (currentBar < barCycleDuration*2){
//Diamond Case
buttonBar.removeAll();
timeBar.removeAll();
for(Player player: playerList) diamondBar.addPlayer(player);
} else if (currentBar < barCycleDuration*3){
//Time Case
buttonBar.removeAll();
diamondBar.removeAll();
for(Player player: playerList) timeBar.addPlayer(player);
} else {
buttonBar.removeAll();
diamondBar.removeAll();
for(Player player: playerList) timeBar.addPlayer(player);
currentBar = 0;
}
}
public void setBarTitles(){
//SET TITLE - buttonBar,diamondBar,timeBar
if (buttonHealth >= 50){ buttonBar.setColor(BarColor.PURPLE);}
else if (buttonHealth >= 40) {buttonBar.setColor(BarColor.BLUE); }
else if (buttonHealth >= 30) {buttonBar.setColor(BarColor.GREEN); }
else if (buttonHealth >= 20) {buttonBar.setColor(BarColor.YELLOW); }
else if (buttonHealth >= 10) {buttonBar.setColor(BarColor.WHITE); }
else if (buttonHealth >= 00) {buttonBar.setColor(BarColor.RED); }
else{
buttonBar.setColor(BarColor.WHITE);
}
buttonBar.setTitle("Button Health: "+ buttonHealth + "HP");
diamondBar.setTitle("Diamonds Needed At ("+chestX+","+chestY+","+chestZ+ "): " + (diamondsInserted) + "/" + minimumDiamondBlocks);
timeBar.setTitle("Button Damage in: " + timeDifference.toHours()+":"+ timeDifference.toMinutes()%60 +":"+ (int)Math.floor(timeDifference.toMillis()%60000/1000));
}
public void setButtonBarProgress(){
//SET PROGRESS - buttonBar
if (buttonHealth < 0){
buttonBar.setProgress(0.0);
}else if (buttonHealth > 60){
buttonBar.setProgress(1.0);
}else{
buttonBar.setProgress((double)buttonHealth/60.0);
}
}
public void setDiamondBarProgress(){
//SET PROGRESS - diamomndBar
if (minimumDiamondBlocks < 1 || diamondsInserted > minimumDiamondBlocks){
diamondBar.setProgress(1.0);
}else if(diamondsInserted < 0){
diamondBar.setProgress(0.0);
}else{
//GET - chestBlock
chestBlock = world.getBlockAt(chestX, chestY, chestZ);
//SANITIZE - chestBlock
if (!(chestBlock.getType() == Material.CHEST)) return;
//INIT - shrineChest, shrineInventory
shrineChest = (Chest) chestBlock.getState();
shrineInventory = shrineChest.getInventory();
//SET PROGRESS - diamondBar
if(shrineInventory.contains(Material.DIAMOND_BLOCK, (minimumDiamondBlocks - diamondsInserted))){
diamondBar.setProgress(1.0);
}else{
//INIT - chestContents,totalDiamonds
chestContents = shrineInventory.getContents();
totalDiamonds = 0;
//CALCULATE - totalDiamonds
for (ItemStack stack: chestContents){
try{
if (stack.getType() == Material.DIAMOND_BLOCK){
totalDiamonds += stack.getAmount();
}
}catch(Exception e){/*stack isn't a diamond block*/}
}
diamondBar.setProgress((diamondsInserted+totalDiamonds)/(double)minimumDiamondBlocks);
}
}
}
public void setTimeBarProgress(){
//Time Progress Setting
Duration barMinutes = Duration.of(plugin.getConfig().getInt("barDuration"),ChronoUnit.MINUTES);
long timeDifferenceMillis = timeDifference.toMillis();
long barMinutesMilis = barMinutes.toMillis();
double durationRatio = (double)timeDifferenceMillis /(double)barMinutesMilis;
//SET PROGRESS - timeBar
if (durationRatio > 1){
timeBar.setProgress(1.0);
}else if(durationRatio < 0){
timeBar.setProgress(0.0);
}else{
timeBar.setProgress(durationRatio);
}
}
public void setBar(int bar){
if (bar < 0){
return;
}
currentBar = barCycleDuration * (bar);
}
}

View file

@ -0,0 +1,200 @@
package graveyard.shulker.thebuttonrebirth.tasks;
import java.time.Clock;
import java.time.LocalDateTime;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.Chest;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import graveyard.shulker.thebuttonrebirth.ButtonRebirthPlugin;
public class StealChestTask extends BukkitRunnable{
private ButtonRebirthPlugin plugin;
private World world;
private int diamondsInserted;
private int chestX;
private int chestY;
private int chestZ;
private Block chestBlock;
private Inventory shrineInventory;
private LocalDateTime currentTime;
private LocalDateTime configTime;
private LocalDateTime messageAllowedTime;
private int noRefuelMessagePeriod = 1;//minutes
private Player presserPlayer;
private String presserName;
public StealChestTask(ButtonRebirthPlugin initPlugin){
//INIT - plugin,server,world
plugin = initPlugin;
diamondsInserted = plugin.getConfig().getInt("diamondsInserted");
//INIT - chestX, chestY, chestZ
chestX = plugin.getConfig().getInt("chestX");
chestY = plugin.getConfig().getInt("chestY");
chestZ = plugin.getConfig().getInt("chestZ");
world = plugin.getServer().getWorld(plugin.getConfig().getString("world"));
}
@Override
public void run() {
//CHECK - Plugin is Enabled
if (plugin.isEnabled() == false){
this.cancel();
}
//CHECK - World Exists
if (!(plugin.getServer().getWorlds().contains(plugin.getServer().getWorld(plugin.getConfig().getString("world"))))) {
plugin.logger.info("Error: Config world does not exist in Server.");
plugin.logger.info("Server Worlds: " + plugin.getServer().getWorlds().toString());
plugin.logger.info("Config World: " + plugin.getConfig().getString("world"));
plugin.logger.info("Turning off StealChest Task...");
this.cancel();
return;
}
//INIT - diamondsInserted
diamondsInserted = plugin.getConfig().getInt("diamondsInserted");
//SANITIZE - world
if (plugin.getConfig().getString("world") == null) {
plugin.logger.info("Error: No world defined in config file.");
return;
}
if (plugin.getServer().getWorlds() == null) {
plugin.logger.info("plugin.getServer().getWorlds() returns null");
return;
}
//INIT - chestBlock
chestBlock = world.getBlockAt(chestX, chestY, chestZ);
//SANITIZE - chestBlock
if (!(chestBlock.getType() == Material.CHEST)){
return;
}
//INIT - shrineInventory, minimumDiamondBlocks
shrineInventory = ((Chest) chestBlock.getState()).getInventory();
//STEAL - from shrine chest, put into button health
int totalDiamonds = 0;
ItemStack[] chestContents = shrineInventory.getContents();
//CALCULATE - totalDiamonds
for (ItemStack stack: chestContents){
try{
if (stack.getType() == Material.DIAMOND_BLOCK){
totalDiamonds += (stack.getAmount() *9);
}else if (stack.getType() == Material.DIAMOND){
totalDiamonds += (stack.getAmount() *1);
}else if (stack.getType() == Material.DIAMOND_ORE){
totalDiamonds += (stack.getAmount() *1);
}else if (stack.getType() == Material.DIAMOND_SWORD){
totalDiamonds += (stack.getAmount() *2);
}else if(stack.getType() == Material.DIAMOND_PICKAXE){
totalDiamonds += (stack.getAmount() *3);
}else if (stack.getType() == Material.DIAMOND_HELMET){
totalDiamonds += (stack.getAmount() *5);
}else if (stack.getType() == Material.DIAMOND_CHESTPLATE){
totalDiamonds += (stack.getAmount() *8);
}else if (stack.getType() == Material.DIAMOND_LEGGINGS){
totalDiamonds += (stack.getAmount() *7);
}else if(stack.getType() == Material.DIAMOND_BOOTS){
totalDiamonds += (stack.getAmount() *4);
}else if(stack.getType() == Material.DIAMOND_AXE){
totalDiamonds += (stack.getAmount() *3);
}else if(stack.getType() == Material.DIAMOND_HOE){
totalDiamonds += (stack.getAmount() *2);
}else if(stack.getType() == Material.DIAMOND_SPADE){
totalDiamonds += (stack.getAmount() *1);
}else if(stack.getType() == Material.DIAMOND_BARDING){
totalDiamonds += (stack.getAmount() *1);
}
}catch(Exception e){/*stack is empty*/}
}
shrineInventory.clear();
diamondsInserted += totalDiamonds;
plugin.getConfig().set("diamondsInserted", diamondsInserted);
plugin.saveConfig();
//RESET TIMER CHECK
if (plugin.getConfig().getInt("diamondsInserted") >= plugin.getConfig().getInt("minimumDiamondBlocks")){
plugin.getConfig().set("diamondsInserted", 0);
plugin.saveConfig();
currentTime = LocalDateTime.now(Clock.systemUTC());
configTime = LocalDateTime.parse(plugin.getConfig().getString("lastCheckChestTime"));
plugin.getConfig().set("lastCheckChestTime", currentTime.plusMinutes(plugin.getConfig().getInt("barDuration")).toString());
plugin.saveConfig();
messageAllowedTime = configTime.minusMinutes(plugin.getConfig().getInt("barDuration")).plusMinutes(noRefuelMessagePeriod);
if(currentTime.isAfter(messageAllowedTime)){
try {presserPlayer = getNearestPresser();} catch(Exception noPlayers) {return;}
presserName = presserPlayer.getDisplayName();
plugin.getServer().broadcastMessage(ChatColor.AQUA + "--------------------------");
plugin.getServer().broadcastMessage(ChatColor.AQUA + "SHRINE REFULED BY " + presserName);
plugin.getServer().broadcastMessage(ChatColor.AQUA + "--------------------------");
for (Player player: plugin.getServer().getOnlinePlayers()){
Location tempLocation = player.getLocation();
world.playSound(tempLocation, Sound.ENTITY_WITHER_SPAWN,30,10);
}
}else{
try {presserPlayer = getNearestPresser();} catch(Exception noPlayers) {return;}
presserPlayer.sendMessage(ChatColor.AQUA + "---------------");
presserPlayer.sendMessage(ChatColor.AQUA + "SHRINE REFUELED");
presserPlayer.sendMessage(ChatColor.AQUA + "---------------");
}
world.playSound(new Location(world,chestX,chestY,chestZ), Sound.ENTITY_WITHER_SPAWN,50,10);
((CyclicalDisplayTask) plugin.cyclicalDisplayListener.cyclicalDisplayTask).setBar(2);
}
}
private Player getNearestPresser() throws Exception{
if (plugin.getServer().getOnlinePlayers().isEmpty()) throw new Exception();
Player closestPlayer = null;
int closestDistance = 0;
for (Player player: plugin.getServer().getOnlinePlayers()){
int distance = (int) player.getLocation().distance(new Location(world, chestX,chestY,chestZ));
if (closestPlayer == null){
closestPlayer = player;
closestDistance = distance;
}else if(distance < closestDistance){
closestPlayer = player;
closestDistance = distance;
}
}
return closestPlayer;
}
}