commit 9c09db7025986fb85bc63b6095bde53c661edf84 Author: LAB4CODE <> Date: Fri Aug 22 08:44:53 2025 +0000 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa03912 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +out +target \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..09d8d50 --- /dev/null +++ b/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + net.lab4code + MC-WirelessHopper + 1.0-SNAPSHOT + jar + + MC-WirelessHopper + + + 21 + UTF-8 + + + + clean package + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + java.version + java.version + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.3 + + + package + + shade + + + + + + + + src/main/resources + true + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + sonatype + https://oss.sonatype.org/content/groups/public/ + + + + + + io.papermc.paper + paper-api + 1.21.3-R0.1-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.18.22 + provided + + + me.clip + placeholderapi + 2.10.10 + provided + + + com.zaxxer + HikariCP + 4.0.3 + compile + + + diff --git a/src/main/java/net/lab4code/main/Command_Executer.java b/src/main/java/net/lab4code/main/Command_Executer.java new file mode 100644 index 0000000..2544a29 --- /dev/null +++ b/src/main/java/net/lab4code/main/Command_Executer.java @@ -0,0 +1,25 @@ +package net.lab4code.main; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + +public class Command_Executer implements CommandExecutor, TabCompleter { + + @Override + public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, @NotNull String[] args) { + + return false; + } + + @Override + public List onTabComplete(CommandSender commandSender, Command command, String s, String[] args) { + List result = new ArrayList<>(); + + return result; + } +} diff --git a/src/main/java/net/lab4code/main/Config.java b/src/main/java/net/lab4code/main/Config.java new file mode 100644 index 0000000..dce025b --- /dev/null +++ b/src/main/java/net/lab4code/main/Config.java @@ -0,0 +1,32 @@ +package net.lab4code.main; + +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; + +public class Config { + private static final File config = new File(Main.instance.getDataFolder().getPath(), "config.yml"); + private static YamlConfiguration yamlConfiguration; + + public static void create() { + if (!config.exists()) { + Main.instance.saveResource("config.yml", false); + } + yamlConfiguration = YamlConfiguration.loadConfiguration(config); + loadConfig(); + + } + + public static void loadStorage() { + Database.setIp(yamlConfiguration.getString("Datastore.Ip")); + Database.setPort(yamlConfiguration.getInt("Datastore.Port")); + Database.setUser(yamlConfiguration.getString("Datastore.User")); + Database.setPassword(yamlConfiguration.getString("Datastore.Password")); + Database.setDatabase(yamlConfiguration.getString("Datastore.Database")); + } + + private static void loadConfig() { +// shopConfirmation = yamlConfiguration.getBoolean("Shop.Confirmbuy"); + } + +} diff --git a/src/main/java/net/lab4code/main/Database.java b/src/main/java/net/lab4code/main/Database.java new file mode 100644 index 0000000..0d24c9c --- /dev/null +++ b/src/main/java/net/lab4code/main/Database.java @@ -0,0 +1,244 @@ +package net.lab4code.main; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import lombok.Setter; +import org.bukkit.Bukkit; +import java.sql.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import net.lab4code.objects.Query; + +public class Database { + private static String url; + private static HikariConfig config = new HikariConfig(); + private static HikariDataSource ds; + @Setter + private static String ip; + @Setter + private static Integer port; + @Setter + private static String database; + @Setter + private static String user; + @Setter + private static String password; + + + protected static void main() { + url = "jdbc:mysql://" + ip + ":" + port + "/" + database + "?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Europe/Berlin"; + config.setJdbcUrl(url); + config.setUsername(user); + config.setPassword(password); + config.addDataSourceProperty( "cachePrepStmts" , "true" ); + config.addDataSourceProperty( "prepStmtCacheSize" , "250" ); + config.addDataSourceProperty( "prepStmtCacheSqlLimit" , "2048" ); + ds = new HikariDataSource( config ); + try (Connection con = ds.getConnection()) { + Statement stmt = con.createStatement(); + stmt.addBatch("CREATE TABLE IF NOT EXISTS `test` (" + + "`UUID` VARCHAR(50) NOT NULL," + + "`Name` VARCHAR(50) NOT NULL," + + "PRIMARY KEY (`UUID`) USING BTREE" + + ")"); + stmt.executeBatch(); + stmt.close(); + Bukkit.getConsoleSender().sendMessage(Messages.getMessage("Prefix", null) + " §2MySQL verbunden!"); + } catch (SQLException exc) { + Bukkit.getConsoleSender().sendMessage(exc.getMessage()); + Bukkit.getConsoleSender().sendMessage(Messages.getMessage("Prefix", null) + " §cMySQL nicht verbunden!"); + } + } + + public static void query(String query, String... args) { + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + stmt.execute(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + } + + public static void query(String query, List args) { + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.size(); i++){ + stmt.setObject(i+1, args.get(i)); + } + stmt.execute(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + } + + public static List> selectAll(String query, String... args) { + //long long_ = System.currentTimeMillis(); + List> Result = new ArrayList<>(); + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + ResultSet rs = stmt.executeQuery(); + int columns = rs.getMetaData().getColumnCount(); + while (rs.next()) { + List columnList = new ArrayList<>(); + for (int i = 1; i <= columns; i++) { + columnList.add(rs.getString(i)); + } + Result.add(columnList); + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Result; + } + + public static List> selectAll(String query, List args) { + //long long_ = System.currentTimeMillis(); + List> Result = new ArrayList<>(); + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.size(); i++){ + stmt.setObject(i+1, args.get(i)); + } + ResultSet rs = stmt.executeQuery(); + int columns = rs.getMetaData().getColumnCount(); + while (rs.next()) { + List columnList = new ArrayList<>(); + for (int i = 1; i <= columns; i++) { + columnList.add(rs.getString(i)); + } + Result.add(columnList); + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Result; + } + + public static List selectRow(String query, String... args) { + //long long_ = System.currentTimeMillis(); + List Result = new ArrayList<>(); + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + ResultSet rs = stmt.executeQuery(); + int columns = rs.getMetaData().getColumnCount(); + while (rs.next()) { + for (int i = 1; i <= columns; i++) { + Result.add(rs.getString(i)); + } + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Result; + } + + public static HashMap selectRowIncludeColumnName(String query, String... args) { + //long long_ = System.currentTimeMillis(); + HashMap Result = new HashMap<>(); + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + ResultSet rs = stmt.executeQuery(); + int columns = rs.getMetaData().getColumnCount(); + while (rs.next()) { + for (int i = 1; i <= columns; i++) { + Result.put(rs.getMetaData().getColumnName(i), rs.getString(i)); + } + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Result; + } + + public static List selectColum(String query, String... args) { + //long long_ = System.currentTimeMillis(); + List Result = new ArrayList<>(); + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + ResultSet rs = stmt.executeQuery(); + int columns = rs.getMetaData().getColumnCount(); + if(columns > 0) { + while (rs.next()) { + Result.add(rs.getString(1)); + } + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Result; + } + + protected static String select(String query, String... args) { + String Ausgabe = ""; + try (Connection con = ds.getConnection()) { + PreparedStatement stmt = con.prepareStatement(query); + for(int i = 0; i < args.length; i++){ + stmt.setObject(i+1, args[i]); + } + ResultSet rs = stmt.executeQuery(); + while (rs.next()) { + Ausgabe = String.valueOf(rs.getString(1)); + } + rs.close(); + stmt.close(); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + return Ausgabe; + } + + public static void query(List queryList) { + try (Connection con = ds.getConnection()) { + for (Query query : queryList) { + PreparedStatement stmt = con.prepareStatement(query.getQuery()); + for(int i = 0; i < query.getParameters().size(); i++){ + stmt.setObject(i+1, query.getParameters().get(i)); + } + stmt.execute(); + stmt.close(); + } + } catch (SQLException e) { + StringBuilder st = new StringBuilder(); + for(Query query : queryList){ + st.append(query.getQuery()); + } + System.err.println(e.getMessage()); + } + } + + public static void close() { + if(ds != null){ + ds.close(); + Bukkit.getConsoleSender().sendMessage(Messages.getMessage("Prefix", null) + " §2MySQL getrennt!"); + } + } +} + diff --git a/src/main/java/net/lab4code/main/Event_Handler.java b/src/main/java/net/lab4code/main/Event_Handler.java new file mode 100644 index 0000000..c4eb5bd --- /dev/null +++ b/src/main/java/net/lab4code/main/Event_Handler.java @@ -0,0 +1,13 @@ +package net.lab4code.main; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class Event_Handler implements Listener { + + @EventHandler + public void onJoin(PlayerJoinEvent e){ + + } +} diff --git a/src/main/java/net/lab4code/main/Greeting.java b/src/main/java/net/lab4code/main/Greeting.java new file mode 100644 index 0000000..d8d1715 --- /dev/null +++ b/src/main/java/net/lab4code/main/Greeting.java @@ -0,0 +1,23 @@ +package net.lab4code.main; + +import org.bukkit.Bukkit; + +public class Greeting { + + protected static void sendGreeting(){ + Bukkit.getConsoleSender().sendMessage("§3------------------------------------------------------------------"); + Bukkit.getConsoleSender().sendMessage("§3 "); +// Bukkit.getConsoleSender().sendMessage("§3 _ ___ _____ ______ _ "); +// Bukkit.getConsoleSender().sendMessage("§3 | | / / __ \\ | ___ \\ | | "); +// Bukkit.getConsoleSender().sendMessage("§3 | | / /| | / \\/ ______ | |_/ /__ _ __| | _____ "); +// Bukkit.getConsoleSender().sendMessage("§3 | | / /_| | | |______| | __/ _ \\ '__| |/ / __|"); +// Bukkit.getConsoleSender().sendMessage("§3 | |___\\___ | \\__/\\ | | | __/ | | <\\__ \\"); +// Bukkit.getConsoleSender().sendMessage("§3 \\_____/ |_/\\____/ \\_| \\___|_| |_|\\_\\___/"); + Bukkit.getConsoleSender().sendMessage("§3 "); + Bukkit.getConsoleSender().sendMessage("§3 Coded by Lab4Code"); + Bukkit.getConsoleSender().sendMessage("§3 Version: §6" + Main.instance.getDescription().getVersion()); + Bukkit.getConsoleSender().sendMessage("§3 "); + Bukkit.getConsoleSender().sendMessage("§3------------------------------------------------------------------"); + } + +} diff --git a/src/main/java/net/lab4code/main/Main.java b/src/main/java/net/lab4code/main/Main.java new file mode 100644 index 0000000..d11fc63 --- /dev/null +++ b/src/main/java/net/lab4code/main/Main.java @@ -0,0 +1,35 @@ +package net.lab4code.main; + +import lombok.Getter; +import org.bukkit.Bukkit; +import org.bukkit.plugin.java.JavaPlugin; + +public final class Main extends JavaPlugin { + + public static Main instance; + @Getter + private static Boolean placehodlerapi = false; + + @Override + public void onEnable() { + instance = this; + Greeting.sendGreeting(); + Messages.initMessages(); + Config.create(); + Config.loadStorage(); + getServer().getPluginManager().registerEvents(new Event_Handler(),this); + getCommand("${REPO_NAME}").setExecutor(new Command_Executer()); + if (getServer().getPluginManager().isPluginEnabled("PlaceholderAPI")) { + new PAPI().register(); + placehodlerapi = true; + Bukkit.getConsoleSender().sendMessage(Messages.getMessage("Prefix", null) + " §2PlaceholderAPI wurde geladen!"); + } else { + Bukkit.getConsoleSender().sendMessage(Messages.getMessage("Prefix", null) + " §6PlaceholderAPI konnte nicht geladen werden!"); + } + } + + @Override + public void onDisable() { + + } +} diff --git a/src/main/java/net/lab4code/main/Messages.java b/src/main/java/net/lab4code/main/Messages.java new file mode 100644 index 0000000..de3d18e --- /dev/null +++ b/src/main/java/net/lab4code/main/Messages.java @@ -0,0 +1,42 @@ +package net.lab4code.main; + +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; + +import java.io.File; + +public class Messages { + private static File message = new File(Main.instance.getDataFolder().getPath(), "messages.yml"); + private static YamlConfiguration yamlConfiguration; + + protected static String getPrefix() { + return Prefix; + } + + private static String Prefix; + public static void initMessages(){ + if(!message.exists()){ + Main.instance.saveResource("messages.yml", false); + } + yamlConfiguration = YamlConfiguration.loadConfiguration(message); + Prefix = yamlConfiguration.getString("Prefix").replace("&","§"); + } + + public static String getMessage(String path, Player player){ + String result = yamlConfiguration.getString(path); + if(result == null){ + return path; + }else { + return Util.replace(result, player); + } + } + + public static String getMessageRaw(String path) { + String result = yamlConfiguration.getString(path); + if(result == null){ + return path; + }else { + return result; + } + } +} diff --git a/src/main/java/net/lab4code/main/PAPI.java b/src/main/java/net/lab4code/main/PAPI.java new file mode 100644 index 0000000..a1e87e4 --- /dev/null +++ b/src/main/java/net/lab4code/main/PAPI.java @@ -0,0 +1,38 @@ +package net.lab4code.main; + +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; + +public class PAPI extends PlaceholderExpansion { + + @Override + public String getIdentifier() { + return "MC-WirelessHopper"; + } + + @Override + public String getAuthor() { + return "lab4Code"; + } + + @Override + public String getVersion() { + return Main.instance.getDescription().getVersion(); + } + + @Override + public boolean canRegister() { + return true; + } + + @Override + public boolean persist() { + return true; + } + + @Override + public String onPlaceholderRequest(Player p, String params) { + + return null; + } +} diff --git a/src/main/java/net/lab4code/main/Util.java b/src/main/java/net/lab4code/main/Util.java new file mode 100644 index 0000000..a351ed0 --- /dev/null +++ b/src/main/java/net/lab4code/main/Util.java @@ -0,0 +1,87 @@ +package net.lab4code.main; + +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public class Util { + + + public static String getUID() { + return "%%__USER__%%"; + } + + public static String getRID() { + return "%%__RESOURCE__%%"; + } + + public static String getDID() { + return "%%__NONCE__%%"; + } + + public static String replace(String string, Player player){ + if(string == null){ + return ""; + } + String result = string + .replace("&", "§") + .replace("%newline%", "\n") + .replace("%prefix%", Messages.getPrefix()); + + if (Main.getPlacehodlerapi()) { + return PlaceholderAPI.setPlaceholders(player, result); + }else { + return result; + } + } + + + public static String replace(String string, String price, Player player) { + return replace(string.replace("%price%", price), player); + } + + public static Player isPlayer(CommandSender sender){ + if(sender instanceof Player player){ + return player; + } + return null; + } + + public static List replace(List string, String price, Player player) { + List result = new ArrayList<>(); + for (String s : string) { + result.add(replace(s, price, player)); + } + return result; + } + + public static List replace(List string, Player player) { + return replace(string,"0", player); + } + + public static void sendMessage(Player player, String message){ + if(message.isEmpty()){ + return; + } +// if(Config.getMiniMessageSupport()) { +// MiniMessageUtils.sendPlayerMiniMessage(message, player); +// }else { + player.sendMessage(message); +// } + } + + public static void sendMessage(CommandSender player, String message){ + if(message.isEmpty()){ + return; + } +// if(Config.getMiniMessageSupport()) { +// MiniMessageUtils.sendSenderMiniMessage(message, player); +// }else { + player.sendMessage(message); +// } + } + +} diff --git a/src/main/java/net/lab4code/objects/Query.java b/src/main/java/net/lab4code/objects/Query.java new file mode 100644 index 0000000..edb77f3 --- /dev/null +++ b/src/main/java/net/lab4code/objects/Query.java @@ -0,0 +1,25 @@ +package net.lab4code.objects; + +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Getter +public class Query { + final private String query; + final private List parameters = new ArrayList<>(); + + public Query(String query) { + this.query = query; + } + public Query(String query, String... params) { + this.query = query; + parameters.addAll(Arrays.stream(params).toList()); + } + + public void addParam(String param){ + parameters.add(param); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..a696b8c --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,8 @@ +# Datastore Types: YML or MySQL +Datastore: + Type: 'YML' + Ip: 'localhost' + Port: 3306 + Database: 'MC-WirelessHopper' + User: 'root' + Password: 'Secret' \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml new file mode 100644 index 0000000..c554b62 --- /dev/null +++ b/src/main/resources/messages.yml @@ -0,0 +1 @@ +Prefix: '&8[&4MC-WirelessHopper&8]' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..e1e3ca1 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,8 @@ +name: MC-WirelessHopper +version: '1.0-SNAPSHOT' +main: net.lab4code.main.Main +api-version: '1.21' +authors: [ Lab4Code ] +website: https://lab4code.dev +commands: + MC-WirelessHopper: \ No newline at end of file