init commit
This commit is contained in:
187
src/main/java/de/sebastianvonhelmersen/fetmcplugin.java
Normal file
187
src/main/java/de/sebastianvonhelmersen/fetmcplugin.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user