diff --git a/pom.xml b/pom.xml index 1808667..a8e7394 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ de.steev.bm BetterMinecraft - stable + 1.2.2 17 @@ -25,7 +25,7 @@ org.spigotmc spigot-api - 1.20.1-R0.1-SNAPSHOT + 1.21.1-R0.1-SNAPSHOT provided diff --git a/src/main/java/de/steev/bm/BetterMinecraft.java b/src/main/java/de/steev/bm/BetterMinecraft.java index 4d6af9e..e3e2232 100644 --- a/src/main/java/de/steev/bm/BetterMinecraft.java +++ b/src/main/java/de/steev/bm/BetterMinecraft.java @@ -5,90 +5,81 @@ import de.steev.bm.Listener.BedListener; import de.steev.bm.Listener.InteractListener; import de.steev.bm.Listener.KillListener; import de.steev.bm.Manager.GameManager; - +import de.steev.bm.utils.Config; +import de.steev.bm.utils.exceptions.ConfigEntryExceptions; import org.bukkit.ChatColor; import org.bukkit.World; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; 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 java.io.File; import java.io.IOException; +import java.util.Objects; import java.util.UUID; +import static de.steev.bm.utils.Constants.*; public class BetterMinecraft extends JavaPlugin implements Listener { // Global Variables that might come helpfull later public int playerInBed = 0; public World world; - String version = "1.2"; // Custom Playerdata File - private File playerdata; - private FileConfiguration playerDataConfig; - private final String playerdatafilename = "playerdata.yml"; - private static String prefix = ChatColor.GRAY + "[" + ChatColor.AQUA + "BetterMinecraft" + ChatColor.GRAY + "]"; - + private Config playerData = new Config(playerDataFilename, this); private GameManager gameManager; // Handles initialisation public void onEnable() { // Messaging - this.getLogger().info(prefix + ChatColor.WHITE + "Plugin Startet"); + this.getLogger().info(prefix + ChatColor.WHITE + "Plugin Startup"); this.getLogger().info(prefix + ChatColor.WHITE + "Initializing Gamemanager"); gameManager = new GameManager(this); this.saveDefaultConfig(); // Registers Events - this.getLogger().info(prefix + ChatColor.WHITE + "Lade Events"); + this.getLogger().info(prefix + ChatColor.WHITE + "Load Events"); this.getServer().getPluginManager().registerEvents(new BedListener(this.gameManager), this); this.getServer().getPluginManager().registerEvents(new KillListener(this.gameManager), this); this.getServer().getPluginManager().registerEvents(new InteractListener(this.gameManager), this); this.getServer().getPluginManager().registerEvents(this, this); - this.getCommand("back").setExecutor(new back(this.gameManager)); + Objects.requireNonNull(this.getCommand("back")).setExecutor(new back(this.gameManager)); // PlayerData - playerdata = new File(this.getDataFolder(), playerdatafilename); - playerDataConfig = YamlConfiguration.loadConfiguration(playerdata); - saveplayerdata(); + try { + this.playerData.saveConfig(playerDataFilename); + } catch (IOException e) { + throw new RuntimeException(e); + } - // More Messaging - this.getLogger().info(ChatColor.AQUA + "Ich bin Fertig :D"); + // More Messaging + this.getLogger().info(ChatColor.AQUA + "Startup complete :D"); } @EventHandler void onPlayerJoin(PlayerJoinEvent e) { Player p = (Player) e.getPlayer(); UUID uuid = p.getUniqueId(); - // prevent this allways resetting the job count - if (this.playerDataConfig.get(uuid + "." + version + ".read") == null) { - p.sendMessage("================= Better Minecraft " + version + " ================="); - p.sendMessage("Command: /back eingefügt"); - p.sendMessage("====================================================="); - this.playerDataConfig.set(uuid + ".name", p.getName()); - this.playerDataConfig.set(uuid + "." + version + ".read", "true"); - saveplayerdata(); - } - } - - void saveplayerdata() { try { - playerDataConfig.save(playerdata); - } catch (IOException e) { - this.getLogger().warning("Unable to save " + playerdatafilename); // shouldn't really happen, but save - // throws the exception + if (this.playerData.readBooleanFromConfig(uuid + "." + Version + ".read")) { + p.sendMessage("================= Better Minecraft " + Version + " ================="); + p.sendMessage("Amboss Kostengrenze entfernt"); + p.sendMessage("====================================================="); + + this.playerData.writeStringToConfig(uuid + ".name", p.getName()); + this.playerData.writeStringToConfig(uuid + "." + Version + ".read", "true"); + this.playerData.saveConfig(playerDataFilename); + } + } catch (ConfigEntryExceptions cee) { + this.getLogger().warning("reading config failed with error: " + cee.getMessage()); + } catch (IOException ioe) { + throw new RuntimeException(ioe); } } - public FileConfiguration getPlayerDataConfig(){ - return this.playerDataConfig; - } public static String LoggerPrefix(){ return prefix; } diff --git a/src/main/java/de/steev/bm/utils/Changelog.java b/src/main/java/de/steev/bm/utils/Changelog.java new file mode 100644 index 0000000..7f53939 --- /dev/null +++ b/src/main/java/de/steev/bm/utils/Changelog.java @@ -0,0 +1,60 @@ +package de.steev.bm.utils; + +import de.steev.bm.Manager.GameManager; +import org.bukkit.entity.Player; + +enum ChangelogType { + SystemChangeLog, + CustomChangelog +} + +public class Changelog { + private GameManager plugin; + + public Changelog(GameManager plugin) { + this.plugin = plugin; + } + + /** + * handles getting changelog and sending it to the player + * @param player the receiving player + */ + public void SendChangelog(Player player) { + //player.sendMessage(createChangelog()); + } + + /** + * handles checking the playerdata if a player already saw the changelog + * @param player the player to lookup + * @return boolean which tells whether a player has seen the changelog or not + */ + private boolean hasPlayerSeenChangelog(ChangelogType changelogType, Player player) { + // TODO: read from header what version the changelog is for + // TODO: read from playerdata.yml if the player has seen the changelog for that type + // TODO: return found result + return false; + } + + /*** + * reads the set changlog file + * @return the resulting changelog as string + */ + private String createChangelog(ChangelogType changelogType) { + // TODO: FETCH from + + /*switch (changelogType) { + case SystemChangeLog: + // TODO: get changelog url from config + // TODO: fetch version changelog from git + // TODO: proccess changelog + break; + case CustomChangelog: + // TODO: fetch changes from changes.txt found in plugin folder or from configured destination + // TODO: proccess changelog + break; + + }*/ + + return ""; + } +} diff --git a/src/main/java/de/steev/bm/utils/Config.java b/src/main/java/de/steev/bm/utils/Config.java new file mode 100644 index 0000000..e05a69a --- /dev/null +++ b/src/main/java/de/steev/bm/utils/Config.java @@ -0,0 +1,72 @@ +package de.steev.bm.utils; + +import de.steev.bm.BetterMinecraft; +import de.steev.bm.utils.exceptions.ConfigEntryExceptions; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; + +import static de.steev.bm.utils.Constants.playerDataFilename; + +public class Config { + private String name; + private File configFile; + private FileConfiguration fileConfiguration; + private BetterMinecraft plugin; + + public Config(String name, BetterMinecraft plugin) { + this.name = name; + this.plugin = plugin; + configFile = new File(this.plugin.getDataFolder(), playerDataFilename); + fileConfiguration = YamlConfiguration.loadConfiguration(configFile); + } + + public void saveConfig(String name) throws IOException { + try { + fileConfiguration.save(configFile); + } catch (IOException e) { + this.plugin.getLogger().warning("Unable to save " + playerDataFilename); // shouldn't really happen, but save + // throws the exception + throw e; + } + } + + public void writeStringToConfig(String path, String value) { + this.fileConfiguration.set(path, value); + } + + public String readStringFromConfig(String path) throws ConfigEntryExceptions { + + if (this.fileConfiguration.get(path) == null) { + throw new ConfigEntryExceptions("entry at: " + path + " found null"); + } + + return this.fileConfiguration.getString(path); + } + + public int readIntFromConfig(String path) throws ConfigEntryExceptions { + if (this.fileConfiguration.get(path) == null) { + throw new ConfigEntryExceptions("entry at: " + path + " found null"); + } + + return this.fileConfiguration.getInt(path); + } + + public boolean readBooleanFromConfig(String path) throws ConfigEntryExceptions { + if (this.fileConfiguration.get(path) == null) { + throw new ConfigEntryExceptions("entry at: " + path + " found null"); + } + + return this.fileConfiguration.getBoolean(path); + } + + public FileConfiguration getConfig() { + return this.fileConfiguration; + } + + public String getName() { + return this.name; + } +} diff --git a/src/main/java/de/steev/bm/utils/Constants.java b/src/main/java/de/steev/bm/utils/Constants.java new file mode 100644 index 0000000..c8ccc92 --- /dev/null +++ b/src/main/java/de/steev/bm/utils/Constants.java @@ -0,0 +1,9 @@ +package de.steev.bm.utils; + +import org.bukkit.ChatColor; + +public class Constants { + public static final String prefix = ChatColor.GRAY + "[" + ChatColor.AQUA + "BetterMinecraft" + ChatColor.GRAY + "]"; + public static final String playerDataFilename = "playerdata.yml"; + public static final String Version = "1.2.2"; +} diff --git a/src/main/java/de/steev/bm/utils/exceptions/ConfigEntryExceptions.java b/src/main/java/de/steev/bm/utils/exceptions/ConfigEntryExceptions.java new file mode 100644 index 0000000..928c12d --- /dev/null +++ b/src/main/java/de/steev/bm/utils/exceptions/ConfigEntryExceptions.java @@ -0,0 +1,9 @@ +package de.steev.bm.utils.exceptions; + +public class ConfigEntryExceptions extends Exception { + public ConfigEntryExceptions() {} + + public ConfigEntryExceptions(String message) { + super(message); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index cfe8aa3..896d463 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,5 +2,4 @@ improved_bed: true custom_drops: true custom_recipes: true replanting: true -back_command: true -no_anvill_cost_cap: true \ No newline at end of file +back_command: true \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3515651..73d8a97 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: BetterMinecraft main: de.steev.bm.BetterMinecraft -version: 1.0 -api-version: 1.17 +version: 1.2.2 +api-version: 1.21 commands: back: description: "teleports players back to their deathpoint" \ No newline at end of file