mirror of
https://github.com/DerTyp7/mc-collect-random-items.git
synced 2025-10-29 12:42:08 +01:00
243 lines
8.6 KiB
Java
243 lines
8.6 KiB
Java
package de.tealfire.collectrandomitem;
|
|
|
|
import net.kyori.adventure.audience.Audience;
|
|
import net.kyori.adventure.text.Component;
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import org.bukkit.scheduler.BukkitScheduler;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.io.*;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.TimeZone;
|
|
|
|
public final class CollectRandomItem extends JavaPlugin implements Listener {
|
|
public MaterialManager materialManager;
|
|
public long timerTicks = 0L;
|
|
public boolean isRunning = false;
|
|
public boolean isPaused = false;
|
|
|
|
public void start() {
|
|
|
|
if (!isRunning) {
|
|
materialManager = new MaterialManager();
|
|
isRunning = true;
|
|
loadTimerFromFile();
|
|
getLogger().info("Started!");
|
|
}
|
|
}
|
|
|
|
public void restart() {
|
|
if (isRunning) {
|
|
stop();
|
|
start();
|
|
resume();
|
|
}
|
|
}
|
|
|
|
public void stop() {
|
|
if (isRunning) {
|
|
materialManager = null;
|
|
File skippedItemsFile = new File("plugins/skippedItems.txt");
|
|
File finishedItemsFile = new File("plugins/finishedItems.txt");
|
|
File timerFile = new File("plugins/timer.txt");
|
|
|
|
skippedItemsFile.delete();
|
|
finishedItemsFile.delete();
|
|
timerFile.delete();
|
|
|
|
isRunning = false;
|
|
getLogger().info("Stopped!");
|
|
}
|
|
|
|
}
|
|
|
|
public void pause() {
|
|
if (isRunning) {
|
|
isPaused = true;
|
|
getLogger().info("Paused!");
|
|
}
|
|
}
|
|
|
|
public void resume() {
|
|
if (isPaused) {
|
|
isPaused = false;
|
|
getLogger().info("Resumed!");
|
|
}
|
|
}
|
|
|
|
public String getTimerString() {
|
|
long seconds = (long) (timerTicks) / 20L;
|
|
SimpleDateFormat sdfDate = new SimpleDateFormat("HH:mm:ss");
|
|
sdfDate.setTimeZone(TimeZone.getTimeZone("UTC"));
|
|
Date timerDate = new Date(seconds * 1000);
|
|
return sdfDate.format(timerDate);
|
|
}
|
|
|
|
public void saveTimerToFile() {
|
|
System.out.println("Saving timer to file...");
|
|
try {
|
|
PrintWriter writer = new PrintWriter("plugins/timer.txt", "UTF-8");
|
|
writer.println(Long.toString(timerTicks));
|
|
writer.close();
|
|
} catch (IOException e) {
|
|
System.out.println(e.toString());
|
|
}
|
|
}
|
|
|
|
public void saveTimerStringToFile() {
|
|
try {
|
|
PrintWriter writer = new PrintWriter("plugins/timerString.txt", "UTF-8");
|
|
writer.println(getTimerString());
|
|
writer.close();
|
|
} catch (IOException e) {
|
|
System.out.println(e.toString());
|
|
}
|
|
}
|
|
|
|
public void loadTimerFromFile() {
|
|
System.out.println("Loading file plugins/timer.txt...");
|
|
try {
|
|
BufferedReader reader = new BufferedReader(new FileReader("plugins/timer.txt"));
|
|
timerTicks = Long.parseLong(reader.readLine());
|
|
reader.close();
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
timerTicks = 0L;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
BukkitScheduler scheduler = Bukkit.getScheduler();
|
|
getServer().getPluginManager().registerEvents(this, this);
|
|
|
|
File skippedItemsFile = new File("plugins/skippedItems.txt");
|
|
File finishedItemsFile = new File("plugins/finishedItems.txt");
|
|
if ((skippedItemsFile.exists() && !skippedItemsFile.isDirectory()) || (finishedItemsFile.exists() && !finishedItemsFile.isDirectory())) {
|
|
start();
|
|
pause();
|
|
}
|
|
|
|
long updateInterval = 3L;
|
|
|
|
scheduler.runTaskTimer(this, () -> {
|
|
if (isRunning) {
|
|
if (!isPaused) {
|
|
timerTicks += updateInterval;
|
|
saveTimerStringToFile();
|
|
for (Player player :
|
|
Bukkit.getOnlinePlayers()) {
|
|
if (player != null) {
|
|
if (materialManager.scanInventoryForItem(player.getInventory(), materialManager.wantedMaterial)) {
|
|
materialManager.finishWantedMaterial();
|
|
}
|
|
}
|
|
}
|
|
if (Bukkit.getOnlinePlayers().size() == 0) {
|
|
pause();
|
|
}
|
|
}
|
|
|
|
|
|
if (materialManager != null) {
|
|
String msg = "";
|
|
if (isPaused) {
|
|
msg = "" + ChatColor.BOLD + ChatColor.GRAY + "[PAUSED] " + "[" + Integer.toString(materialManager.countClosedMaterials()) + "/"
|
|
+ Integer.toString(materialManager.countMaxMaterials()) + "] " + ChatColor.GOLD + materialManager.wantedMaterial.toString().toLowerCase();
|
|
} else {
|
|
msg = "" + ChatColor.BOLD + ChatColor.GRAY + "[" + Integer.toString(materialManager.countClosedMaterials()) + "/"
|
|
+ Integer.toString(materialManager.countMaxMaterials()) + "] " + ChatColor.GOLD + materialManager.wantedMaterial.toString().toLowerCase();
|
|
}
|
|
|
|
for (Audience a : Bukkit.getServer().audiences()
|
|
) {
|
|
a.sendActionBar(Component.text(msg));
|
|
}
|
|
}
|
|
}
|
|
}, updateInterval /*<-- the initial delay */, updateInterval /*<-- the interval */);
|
|
|
|
Bukkit.getLogger().info("CollectRandomItems started!");
|
|
}
|
|
|
|
@Override
|
|
public void onDisable() {
|
|
if (materialManager != null) {
|
|
materialManager.saveToFile();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
|
|
|
if (command.getName().equalsIgnoreCase("skip")) {
|
|
if (isRunning) {
|
|
if (args.length > 0) {
|
|
for (int i = 0; i <= Integer.parseInt(args[0]); i++) {
|
|
materialManager.skipWantedMaterial();
|
|
}
|
|
} else {
|
|
materialManager.skipWantedMaterial();
|
|
}
|
|
}
|
|
|
|
} else if (command.getName().equalsIgnoreCase("unskip")) {
|
|
if (isRunning) {
|
|
if (args.length > 0) {
|
|
for (int i = 0; i <= Integer.parseInt(args[0]); i++) {
|
|
materialManager.unskipLast();
|
|
}
|
|
} else {
|
|
materialManager.unskipLast();
|
|
}
|
|
}
|
|
} else if (command.getName().equalsIgnoreCase("itemsstop")) {
|
|
stop();
|
|
} else if (command.getName().equalsIgnoreCase("pause")) {
|
|
pause();
|
|
} else if (command.getName().equalsIgnoreCase("resume")) {
|
|
resume();
|
|
} else if (command.getName().equalsIgnoreCase("itemsrestart")) {
|
|
restart();
|
|
} else if (command.getName().equalsIgnoreCase("itemsstart")) {
|
|
start();
|
|
} else if (command.getName().equalsIgnoreCase("reroll")) {
|
|
if (isRunning) {
|
|
materialManager.updateWantedMaterial();
|
|
}
|
|
} else if (command.getName().equalsIgnoreCase("finishedItems")) {
|
|
materialManager.showFinished();
|
|
} else if (command.getName().equalsIgnoreCase("skippedItems")) {
|
|
materialManager.showSkipped();
|
|
} else if (command.getName().equalsIgnoreCase("closedItems")) {
|
|
materialManager.showClosed();
|
|
} else if (command.getName().equalsIgnoreCase("remainingItems")) {
|
|
materialManager.showRemaining();
|
|
} else if (command.getName().equalsIgnoreCase("itemsSave")) {
|
|
saveTimerToFile();
|
|
materialManager.saveToFile();
|
|
} else if (command.getName().equalsIgnoreCase("timer")) {
|
|
sender.sendMessage("Timer -> " + ChatColor.BOLD + ChatColor.YELLOW + "[" + getTimerString() + "]");
|
|
} else if (command.getName().equalsIgnoreCase("timerReset")) {
|
|
timerTicks = 0L;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@EventHandler
|
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
|
if (isRunning) {
|
|
event.getPlayer().sendMessage("Current Item -> " + materialManager.wantedMaterial.toString());
|
|
}
|
|
}
|
|
}
|