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