diff --git a/pom.xml b/pom.xml
index fd7376b..f8ec1b8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,10 +6,11 @@
com.user404_
TNTChat
- 1.0-SNAPSHOT
+ 1.0.0
jar
TNTChat
+ Ein Plugin, das Nachrichten sendet, wenn TNT platziert wird
21
diff --git a/src/main/java/com/user404_/tntchat/TNTChat.java b/src/main/java/com/user404_/tntchat/TNTChat.java
index b33297b..e718e58 100644
--- a/src/main/java/com/user404_/tntchat/TNTChat.java
+++ b/src/main/java/com/user404_/tntchat/TNTChat.java
@@ -1,17 +1,221 @@
-package com.user404_.tNTChat;
+package com.user404_.tntchat;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandSender;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.event.entity.EntityPlaceEvent;
import org.bukkit.plugin.java.JavaPlugin;
-public final class TNTChat extends JavaPlugin {
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.logging.FileHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+
+public final class TNTChat extends JavaPlugin implements Listener {
+
+ private FileConfiguration textsConfig;
+ private File textsFile;
+ private Logger logLogger;
+ private FileHandler logFileHandler;
@Override
public void onEnable() {
- // Plugin startup logic
+ // Lade oder erstelle die texts.yml
+ setupTextsConfig();
+ // Setup Logging
+ setupLogging();
+
+ // Registriere Event-Handler
+ getServer().getPluginManager().registerEvents(this, this);
+
+ // Registriere Command
+ getCommand("tntinfo").setExecutor(this);
+
+ // Logge, dass das Plugin aktiviert wurde
+ getLogger().info(getText("plugin-enabled"));
}
@Override
public void onDisable() {
- // Plugin shutdown logic
+ // Schließe den Log-Handler
+ if (logFileHandler != null) {
+ logFileHandler.close();
+ }
+
+ // Logge, dass das Plugin deaktiviert wurde
+ getLogger().info(getText("plugin-disabled"));
}
-}
+
+ private void setupTextsConfig() {
+ textsFile = new File(getDataFolder(), "texts.yml");
+
+ // Erstelle das Plugin-Verzeichnis, falls es nicht existiert
+ if (!textsFile.exists()) {
+ getDataFolder().mkdirs();
+ try (InputStream in = getResource("texts.yml")) {
+ Files.copy(in, textsFile.toPath());
+ } catch (IOException e) {
+ getLogger().severe("Could not create texts.yml file: " + e.getMessage());
+ }
+ }
+
+ textsConfig = YamlConfiguration.loadConfiguration(textsFile);
+ }
+
+ private void setupLogging() {
+ try {
+ // Erstelle den Log-Ordner, falls nicht vorhanden
+ File logFolder = new File(getDataFolder(), "logs");
+ if (!logFolder.exists()) {
+ logFolder.mkdirs();
+ }
+
+ // Erstelle einen separaten Logger für TNT-Ereignisse
+ logLogger = Logger.getLogger("TntChatLogger");
+ logLogger.setUseParentHandlers(false); // Deaktiviere Konsolenausgabe
+
+ // Erstelle einen Dateihandler mit täglicher Rotation
+ String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+ logFileHandler = new FileHandler(new File(logFolder, "tnt-events-" + date + ".log").getPath(), true);
+ logFileHandler.setFormatter(new SimpleFormatter());
+
+ // Füge den Handler zum Logger hinzu
+ logLogger.addHandler(logFileHandler);
+ } catch (IOException e) {
+ getLogger().log(Level.SEVERE, "Could not create log file", e);
+ }
+ }
+
+ private String getText(String key) {
+ // Hole den Text aus der Konfiguration oder gib einen Standardwert zurück
+ return textsConfig.getString(key, "Text not found: " + key);
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ if (command.getName().equalsIgnoreCase("tntinfo")) {
+ // Überprüfe Berechtigungen
+ if (!sender.hasPermission("tntchat.info") &&
+ !sender.isOp()) {
+ sender.sendMessage(ChatColor.RED + getText("no-permission"));
+ return true;
+ }
+
+ // Zeige TNT-Info der letzten 24 Stunden
+ showTntInfo(sender);
+ return true;
+ }
+ return false;
+ }
+
+ private void showTntInfo(CommandSender sender) {
+ File logFolder = new File(getDataFolder(), "logs");
+ if (!logFolder.exists() || logFolder.listFiles() == null) {
+ sender.sendMessage(ChatColor.YELLOW + getText("no-logs-found"));
+ return;
+ }
+
+ // Finde die Log-Datei für heute
+ String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+ File todayLog = new File(logFolder, "tnt-events-" + today + ".log");
+
+ if (!todayLog.exists()) {
+ sender.sendMessage(ChatColor.YELLOW + getText("no-logs-today"));
+ return;
+ }
+
+ // Lese die Log-Datei und zeige die Einträge an
+ try {
+ String content = new String(Files.readAllBytes(todayLog.toPath()));
+ String[] lines = content.split("\n");
+
+ sender.sendMessage(ChatColor.GOLD + "=== TNT Aktivitäten der letzten 24 Stunden ===");
+ for (String line : lines) {
+ if (!line.trim().isEmpty()) {
+ sender.sendMessage(ChatColor.WHITE + line);
+ }
+ }
+ sender.sendMessage(ChatColor.GOLD + "============================================");
+
+ } catch (IOException e) {
+ sender.sendMessage(ChatColor.RED + getText("error-reading-logs"));
+ getLogger().log(Level.SEVERE, "Error reading log file", e);
+ }
+ }
+
+ @EventHandler
+ public void onBlockPlace(BlockPlaceEvent event) {
+ Block block = event.getBlock();
+ Player player = event.getPlayer();
+
+ // Prüfe, ob der platzierte Block TNT ist
+ if (block.getType() == Material.TNT) {
+ sendTntMessage(player, block.getLocation(), getText("tnt-block"));
+ }
+ }
+
+ @EventHandler
+ public void onEntityPlace(EntityPlaceEvent event) {
+ Entity entity = event.getEntity();
+ Player player = event.getPlayer();
+
+ // Prüfe, ob das platzierte Entity ein TNT-Minecart ist
+ if (entity.getType() == EntityType.TNT_MINECART) {
+ sendTntMessage(player, entity.getLocation(), getText("tnt-minecart"));
+ }
+ }
+
+ /**
+ * Sendet eine Nachricht über TNT-Platzierung an alle Spieler und in die Konsole
+ * @param player Der Spieler, der das TNT platziert hat
+ * @param location Die Location, an der das TNT platziert wurde
+ * @param tntType Die Art des TNT (z.B. "TNT-Block" oder "TNT-Minecart")
+ */
+ private void sendTntMessage(Player player, Location location, String tntType) {
+ String coordinates = String.format(getText("coordinates-format"),
+ location.getBlockX(), location.getBlockY(), location.getBlockZ());
+
+ // Formatierte Nachricht erstellen
+ String message = ChatColor.translateAlternateColorCodes('&',
+ getText("chat-message")
+ .replace("%player%", player.getName())
+ .replace("%tnt_type%", tntType)
+ .replace("%coordinates%", coordinates));
+
+ // Nachricht an alle Spieler senden
+ Bukkit.broadcastMessage(message);
+
+ // Nachricht in die Konsole loggen
+ String logMessage = getText("log-message")
+ .replace("%player%", player.getName())
+ .replace("%tnt_type%", tntType)
+ .replace("%coordinates%", coordinates);
+
+ getLogger().info(logMessage);
+
+ // In die Log-Datei schreiben
+ if (logLogger != null) {
+ String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
+ logLogger.info("[" + timestamp + "] " + logMessage);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 7abe81d..f47b05c 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,4 +1,19 @@
-name: TNTChat
-version: '1.0-SNAPSHOT'
-main: com.user404_.tNTChat.TNTChat
+name: TntChat
+version: 1.0.0
+main: com.user404_.tntchat.TNTChat
api-version: '1.21'
+authors: [deutschich aka User404]
+description: Sends a message when TNT or TNT minecarts are placed with logging and admin commands
+
+commands:
+ tntinfo:
+ description: Shows TNT activities of the last 24 hours
+ usage: /tntinfo
+
+permissions:
+ tntchat.use:
+ description: Allows using the TntChat plugin
+ default: true
+ tntchat.info:
+ description: Allows using the /tntinfo command
+ default: op
\ No newline at end of file
diff --git a/src/main/resources/texts.yml b/src/main/resources/texts.yml
index e69de29..dbc4e36 100644
--- a/src/main/resources/texts.yml
+++ b/src/main/resources/texts.yml
@@ -0,0 +1,21 @@
+# TntChat Plugin Translations
+# You can customize these messages as needed
+
+# Plugin status messages
+plugin-enabled: "TntChat plugin has been enabled!"
+plugin-disabled: "TntChat plugin has been disabled!"
+
+# TNT types
+tnt-block: "TNT Block"
+tnt-minecart: "TNT Minecart"
+
+# Message formats
+coordinates-format: "X: %d, Y: %d, Z: %d"
+chat-message: "&e%player% has placed a %tnt_type%! Coordinates: &c%coordinates%"
+log-message: "[TNT] %player% has placed a %tnt_type%! Coordinates: %coordinates%"
+
+# Command messages
+no-permission: "You don't have permission to use this command!"
+no-logs-found: "No TNT logs found."
+no-logs-today: "No TNT activities logged today."
+error-reading-logs: "Error reading log files."
\ No newline at end of file