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..4c4c242 100644
--- a/src/main/java/de/steev/bm/BetterMinecraft.java
+++ b/src/main/java/de/steev/bm/BetterMinecraft.java
@@ -5,90 +5,82 @@ 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;
}
@@ -97,4 +89,8 @@ public class BetterMinecraft extends JavaPlugin implements Listener {
// Even more Messaging
this.getLogger().info(ChatColor.AQUA + "Ich geh dann mal :c");
}
+
+ public FileConfiguration getPlayerDataConfig() {
+ return this.playerData.getConfig();
+ }
}
\ No newline at end of file
diff --git a/src/main/java/de/steev/bm/Interaction/AnvilCalculator.java b/src/main/java/de/steev/bm/Interaction/AnvilCalculator.java
new file mode 100644
index 0000000..a617d0b
--- /dev/null
+++ b/src/main/java/de/steev/bm/Interaction/AnvilCalculator.java
@@ -0,0 +1,29 @@
+package de.steev.bm.Interaction;
+
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.Repairable;
+
+public class AnvilCalculator {
+ public static int getRepairCost(ItemStack item) {
+ if (item == null || item.getType().isAir()) return 0;
+ ItemMeta meta = item.getItemMeta();
+ if (meta instanceof Repairable) {
+ Repairable r = (Repairable) meta;
+ return r.getRepairCost(); // default 0 wenn nicht gesetzt
+ }
+ return 0;
+ }
+
+ public static ItemStack setRepairCost(ItemStack item, int cost) {
+ if (item == null || item.getType().isAir()) return item;
+ ItemMeta meta = item.getItemMeta();
+ if (meta instanceof Repairable) {
+ Repairable r = (Repairable) meta;
+ r.setRepairCost(cost);
+ item.setItemMeta(meta);
+ }
+ return item;
+ }
+}
diff --git a/src/main/java/de/steev/bm/Listener/PrepareAnvilListener.java b/src/main/java/de/steev/bm/Listener/PrepareAnvilListener.java
new file mode 100644
index 0000000..efaea84
--- /dev/null
+++ b/src/main/java/de/steev/bm/Listener/PrepareAnvilListener.java
@@ -0,0 +1,21 @@
+package de.steev.bm.Listener;
+
+import de.steev.bm.BetterMinecraft;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.inventory.PrepareAnvilEvent;
+import org.bukkit.inventory.AnvilInventory;
+
+public class PrepareAnvilListener {
+
+ private BetterMinecraft plugin;
+
+ public PrepareAnvilListener(BetterMinecraft plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onPrepare(PrepareAnvilEvent event) {
+ AnvilInventory inv = event.getInventory();
+ inv.setMaximumRepairCost(Integer.MAX_VALUE);
+ }
+}
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/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