init commit

This commit is contained in:
sebivh
2025-10-14 13:24:20 +02:00
parent 7d953fdc5a
commit b0c613daf3
12 changed files with 805 additions and 0 deletions

View File

@@ -0,0 +1,187 @@
package de.sebastianvonhelmersen;
import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
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.EntityDamageEvent;
import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
public class fetmcplugin extends JavaPlugin implements Listener {
private Database db;
private Map<UUID, AuthInfos> allInfos = HashMap.newHashMap(0);
@Override
public void onEnable() {
// Make sure the plugin's data folder exists
File dataFolder = this.getDataFolder();
if (!dataFolder.exists()) {
dataFolder.mkdirs();
}
// Define the actual SQLite database file
File dbFile = new File(dataFolder, "auth.db");
Bukkit.getPluginManager().registerEvents(this, this);
this.db = new Database(dbFile);
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
AuthInfos authInfos = new AuthInfos(db, uuid);
getLogger().log(Level.INFO,"Detected new Player with Auth State " + authInfos.getState().toString());
if( authInfos.getState() == AuthState.AUTHENTICATED ) {
return;
}
allInfos.put(uuid, authInfos);
String greeting = "Hallo, " + event.getPlayer().getName() +"! Willkommen auf dem MC Server der FET!\nBitte registriere dich mit deinen Anmeldedaten um zu beginnen!";
// Set timings: fadeIn = 0, stay = very long, fadeOut = 0
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.TIMES,
net.kyori.adventure.title.Title.Times.times(
java.time.Duration.ZERO,
java.time.Duration.ofSeconds(9999), // basically "forever"
java.time.Duration.ZERO
)
);
// Send the title text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.TITLE,
Component.text("§cBenutzername"));
// Send the subtitle text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.SUBTITLE,
Component.text("§eBitte gib den Benutzernamen deines FET Accounts ein!"));
event.getPlayer().sendMessage(greeting);
event.getPlayer().setGameMode(GameMode.ADVENTURE);
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
event.getPlayer().setAllowFlight(true);
if ( allInfos.containsKey(uuid) ) {
event.setCancelled(true);
return;
}
}
@EventHandler
public void onPlayerDamage(EntityDamageEvent event) {
if ( event.getEntity() instanceof Player) {
UUID uuid = event.getEntity().getUniqueId();
if ( allInfos.containsKey(uuid) ) {
event.setCancelled(true);
return;
}
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
if ( allInfos.containsKey(uuid) ) {
event.setCancelled(true);
return;
}
}
@EventHandler
public void onEntityTarget(EntityTargetLivingEntityEvent event) {
if (event.getTarget() instanceof Player) {
UUID uuid = event.getTarget().getUniqueId();
if ( allInfos.containsKey(uuid) ) {
event.setCancelled(true);
return;
}
}
}
@EventHandler
public void onChat(AsyncPlayerChatEvent event) {
UUID uuid = event.getPlayer().getUniqueId();
if (!allInfos.containsKey(uuid)) {
return;
}
AuthInfos info = allInfos.get(uuid);
String message = event.getMessage();
switch ( info.getState() ) {
case AUTHENTICATED, AUTH_FAILED:
break;
case AUTH_WAITING_USERNAME:
getLogger().log(Level.INFO, "Auth Waiting for Player " + event.getPlayer().getName());
allInfos.get(uuid).setUsername(message.trim());
getLogger().log(Level.INFO, "Got Username '" + message.trim() + "'");
event.setCancelled(true);
event.getRecipients().clear();
// Send the title text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.TITLE,
Component.text("§cPasswort"));
// Send the subtitle text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.SUBTITLE,
Component.text("§eBitte gib das Password deines FET Accounts ein!"));
break;
case AUTH_WAITING_PASSWORD:
LdapUser user = checkLdap(info.getUsername(), message.trim());
event.setCancelled(true);
event.getRecipients().clear();
if(user != null) {
allInfos.remove(uuid);
this.db.addPlayer(uuid.toString(), event.getPlayer().getName(), user);
Bukkit.getScheduler().runTask(this, () -> {
event.getPlayer().sendMessage(
"Der Account " + event.getPlayer().getName() + " wurde erfolgreich mit dem FET Account " + user.ldapName + " verbunden!\r\n" +
"Danke " + user.firstName + " " + user.lastName + " das du dich für den FET Server angemeldet hast! Ab jetzt kannst du so spielen wie du es gewohnt bist!");
event.getPlayer().setGameMode(GameMode.SURVIVAL);
event.getPlayer().setHealth(20);
event.getPlayer().setFoodLevel(20);
event.getPlayer().setAllowFlight(false);
event.getPlayer().resetTitle();
});
} else {
event.getPlayer().sendMessage("That did not work, please try again!\nPlease enter your Username");
// Send the title text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.TITLE,
Component.text("§cBenutzername"));
// Send the subtitle text
event.getPlayer().sendTitlePart(net.kyori.adventure.title.TitlePart.SUBTITLE,
Component.text("§eBitte gib den Benutzernamen deines FET Accounts ein!"));
allInfos.get(uuid).reset();
}
break;
}
return;
}
private LdapUser checkLdap(String username, String password) {
getLogger().log(Level.INFO, "Checking LDAP for user " + username);
return Ldap.authenticate(username, password);
//return true;
}
}