extras/src/main/java/pw/kaboom/extras/modules/player/PlayerConnection.java
2020-04-17 06:17:59 +03:00

149 lines
4.5 KiB
Java

package pw.kaboom.extras.modules.player;
import java.util.HashSet;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.GameRule;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerStatisticIncrementEvent;
import org.bukkit.plugin.java.JavaPlugin;
import com.destroystokyo.paper.event.profile.PreLookupProfileEvent;
import com.destroystokyo.paper.profile.ProfileProperty;
import com.google.common.base.Charsets;
import pw.kaboom.extras.Main;
public final class PlayerConnection implements Listener {
@EventHandler
void onAsyncPlayerPreLogin(final AsyncPlayerPreLoginEvent event) {
if (event.getName().length() > 16) {
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "Your username can't be longer than 16 characters");
} else {
for (Player player : Bukkit.getOnlinePlayers()) {
if (event.getName().equals(player.getName())) {
event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "A player with that username is already logged in");
}
}
/*try {
final PlayerProfile profile = event.getPlayerProfile();
UUID offlineUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + event.getName()).getBytes(Charsets.UTF_8));
profile.setId(offlineUUID);
SkinDownloader skinDownloader = new SkinDownloader();
skinDownloader.fillJoinProfile(profile, event.getName(), event.getUniqueId());
} catch (Exception ignored) {
}*/
}
}
@EventHandler
void onPlayerJoin(final PlayerJoinEvent event) {
final Player player = event.getPlayer();
final String title = JavaPlugin.getPlugin(Main.class).getConfig().getString("playerJoinTitle");
final String subtitle = JavaPlugin.getPlugin(Main.class).getConfig().getString("playerJoinSubtitle");
final int fadeIn = 10;
final int stay = 160;
final int fadeOut = 5;
if (title != null
|| subtitle != null) {
player.sendTitle(
title,
subtitle,
fadeIn,
stay,
fadeOut
);
}
}
@EventHandler
void onPlayerKick(final PlayerKickEvent event) {
if (!JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("enableKick")) {
event.setCancelled(true);
}
}
@EventHandler
void onPlayerLogin(final PlayerLoginEvent event) {
if (event.getHostname().startsWith("play.flame.ga")
&& event.getHostname().endsWith(":25565")) {
event.disallow(Result.KICK_OTHER, "You connected to the server using an outdated server address/IP.\nPlease use the following address/IP:\n\nkaboom.pw");
return;
}
if (!JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("enableJoinRestrictions")) {
event.allow();
}
if (Result.KICK_FULL.equals(event.getResult())
&& JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("allowJoinOnFullServer")) {
event.allow();
}
final Player player = event.getPlayer();
if (JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("opOnJoin")
&& !player.isOp()) {
player.setOp(true);
}
/*try {
player.setPlayerProfile(SkinDownloader.getProfile(player.getUniqueId()));
SkinDownloader.removeProfile(player.getUniqueId());
} catch (Exception ignored) {
}*/
}
@EventHandler
void onPlayerQuit(final PlayerQuitEvent event) {
PlayerCommand.getCommandMillisList().remove(event.getPlayer().getUniqueId());
//PlayerInteract.interactMillisList.remove(event.getPlayer().getUniqueId());
}
@EventHandler
void onPlayerStatisticIncrement(final PlayerStatisticIncrementEvent event) {
final World world = event.getPlayer().getWorld();
final Integer randomTickSpeed = world.getGameRuleValue(GameRule.RANDOM_TICK_SPEED);
if (randomTickSpeed > 6) {
world.setGameRule(GameRule.RANDOM_TICK_SPEED, 6);
}
final Integer spawnRadius = world.getGameRuleValue(GameRule.SPAWN_RADIUS);
if (spawnRadius > 100) {
world.setGameRule(GameRule.SPAWN_RADIUS, 100);
}
if (!world.isAutoSave()) {
world.setAutoSave(true);
}
event.setCancelled(true);
}
@EventHandler
void onPreLookupProfile(final PreLookupProfileEvent event) {
// Disable Mojang API calls, we don't need them
UUID offlineUUID = UUID.nameUUIDFromBytes(("OfflinePlayer:" + event.getName()).getBytes(Charsets.UTF_8));
event.setUUID(offlineUUID);
event.setProfileProperties(new HashSet<ProfileProperty>());
}
}