pub async fn handle_connection(
self: &Arc<Self>,
mut stream: TcpStream,
addr: SocketAddr,
) -> Result<(), ProxyError> {
stream.set_nodelay(true)?;
let config = self.config();
let timeout_dur = Duration::from_secs(config.login_timeout_secs);
let hs_len = validated_packet_length(raw_read_varint(&mut stream).await?)?;
let mut hs_buf = vec![0u8; hs_len];
stream.read_exact(&mut hs_buf).await?;
let mut hs_off = 0;
skip_varint(&hs_buf, &mut hs_off);
let handshake = SHandShake::read(&hs_buf[hs_off..])?;
log::debug!(
"Handshake from {}: protocol={}, next_state={:?}",
addr,
handshake.protocol_version.0,
handshake.next_state
);
match handshake.next_state {
ConnectionState::Status => {
tokio::time::timeout(Duration::from_secs(5), self.handle_status(&mut stream))
.await
.map_err(|_| ProxyError::Other("status request timed out".into()))??;
}
ConnectionState::Login => {
let session = self.begin_session(stream, addr, timeout_dur).await?;
self.route(session).await?;
}
_ => return Err(ProxyError::UnexpectedState(handshake.next_state)),
}
Ok(())
}public class CombatManager {
private final SimpleFly plugin;
private final Map<UUID, BukkitTask> combatTags;
public CombatManager(SimpleFly plugin) {
this.plugin = plugin;
this.combatTags = new HashMap<>();
}
public void tagPlayer(Player player) {
if (!plugin.getSettingsManager().isDisableOnCombat()) return;
if (player.hasPermission("simplefly.bypass.combat")) return;
if (combatTags.containsKey(player.getUniqueId())) {
combatTags.get(player.getUniqueId()).cancel();
}
if (player.getAllowFlight()) {
player.setAllowFlight(false);
int duration = plugin.getSettingsManager().getCombatTagDuration();
player.sendMessage(Messages.getCombatDisabled(duration));
}
int duration = plugin.getSettingsManager().getCombatTagDuration();
BukkitTask task = plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
combatTags.remove(player.getUniqueId());
public class CombatManager {
private final SimpleFly plugin;
private final Map<UUID, BukkitTask> combatTags;
public CombatManager(SimpleFly plugin) {
this.plugin = plugin;
this.combatTags = new HashMap<>();
}
public void tagPlayer(Player player) {
if (!plugin.getSettingsManager().isDisableOnCombat()) return;
if (player.hasPermission("simplefly.bypass.combat")) return;
export interface CloudflareZone {
id: string;
name: string;
}
export interface CloudflareSrvData {
service: string;
proto: string;
name: string;
priority: number;
weight: number;
port: number;
target: string;
}
export interface CloudflareDnsRecord {
id: string;
record_type: string;
name: string;
content: string;
data: CloudflareSrvData | null;
}
export interface CreateSrvForm {
subdomain: string;
target: string;
export interface CloudflareZone {
id: string;
name: string;
}
export interface CloudflareSrvData {
service: string;
proto: string;
name: string;
priority: number;
weight: number;
port: number;
target: string;pub async fn handle_connection(
self: &Arc<Self>,
mut stream: TcpStream,
addr: SocketAddr,
) -> Result<(), ProxyError> {
stream.set_nodelay(true)?;
let config = self.config();
let timeout_dur = Duration::from_secs(config.login_timeout_secs);
let hs_len = validated_packet_length(raw_read_varint(&mut stream).await?)?;
let mut hs_buf = vec![0u8; hs_len];
stream.read_exact(&mut hs_buf).await?;
let mut hs_off = 0;
skip_varint(&hs_buf, &mut hs_off);
let handshake = SHandShake::read(&hs_buf[hs_off..])?;
log::debug!(
"Handshake from {}: protocol={}, next_state={:?}",
addr,
handshake.protocol_version.0,
handshake.next_state
);
match handshake.next_state {
ConnectionState::Status => {
tokio::time::timeout(Duration::from_secs(5), self.handle_status(&mut stream))
.await
.map_err(|_| ProxyError::Other("status request timed out".into()))??;
}
ConnectionState::Login => {
let session = self.begin_session(stream, addr, timeout_dur).await?;
self.route(session).await?;
}
_ => return Err(ProxyError::UnexpectedState(handshake.next_state)),
}
Ok(())
}public class CombatManager {
private final SimpleFly plugin;
private final Map<UUID, BukkitTask> combatTags;
public CombatManager(SimpleFly plugin) {
this.plugin = plugin;
this.combatTags = new HashMap<>();
}
public void tagPlayer(Player player) {
if (!plugin.getSettingsManager().isDisableOnCombat()) return;
if (player.hasPermission("simplefly.bypass.combat")) return;
if (combatTags.containsKey(player.getUniqueId())) {
combatTags.get(player.getUniqueId()).cancel();
}
if (player.getAllowFlight()) {
player.setAllowFlight(false);
int duration = plugin.getSettingsManager().getCombatTagDuration();
player.sendMessage(Messages.getCombatDisabled(duration));
}
int duration = plugin.getSettingsManager().getCombatTagDuration();
BukkitTask task = plugin.getServer().getScheduler().runTaskLater(plugin, () -> {
combatTags.remove(player.getUniqueId());
public class CombatManager {
private final SimpleFly plugin;
private final Map<UUID, BukkitTask> combatTags;
public CombatManager(SimpleFly plugin) {
this.plugin = plugin;
this.combatTags = new HashMap<>();
}
public void tagPlayer(Player player) {
if (!plugin.getSettingsManager().isDisableOnCombat()) return;
if (player.hasPermission("simplefly.bypass.combat")) return;
export interface CloudflareZone {
id: string;
name: string;
}
export interface CloudflareSrvData {
service: string;
proto: string;
name: string;
priority: number;
weight: number;
port: number;
target: string;
}
export interface CloudflareDnsRecord {
id: string;
record_type: string;
name: string;
content: string;
data: CloudflareSrvData | null;
}
export interface CreateSrvForm {
subdomain: string;
target: string;
export interface CloudflareZone {
id: string;
name: string;
}
export interface CloudflareSrvData {
service: string;
proto: string;
name: string;
priority: number;
weight: number;
port: number;
target: string;