Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {
}

group = 'com.springwater.easybot'
version = '2.1.3'
version = '2.1.4'

repositories {
mavenCentral()
Expand Down Expand Up @@ -68,11 +68,11 @@ dependencies {
compileOnly("me.clip:placeholderapi:2.11.6")
compileOnly("com.github.MilkBowl:VaultAPI:1.7")
compileOnly("net.kyori:adventure-api:4.17.0")
compileOnly("net.kyori:adventure-text-serializer-legacy:4.17.0")
compileOnly("org.geysermc.api:base-api:1.0.1")
compileOnly("org.geysermc.floodgate:api:2.1.1-SNAPSHOT")
compileOnly("org.eclipse.jetty.websocket:websocket-api:9.4.58.v20250814")

implementation("net.kyori:adventure-text-serializer-legacy:4.17.0")
implementation("net.kyori:adventure-text-serializer-plain:4.17.0")
implementation("org.glavo:rcon-java:2.0.2")

Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/springwater/easybot/Easybot.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.springwater.easybot;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.springwater.easybot.api.CommandApi;
import com.springwater.easybot.bridge.BridgeBehavior;
import com.springwater.easybot.bridge.BridgeClient;
Expand All @@ -23,6 +24,8 @@

import java.lang.reflect.Method;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public final class Easybot extends JavaPlugin implements Listener {
public static Easybot instance;
Expand All @@ -44,6 +47,13 @@ public static CommandApi getCommandApi() {
return commandApi;
}

public static final ExecutorService EXECUTOR = Executors.newCachedThreadPool(
new ThreadFactoryBuilder()
.setNameFormat("EasyBot Task Executor - %d")
.setDaemon(true)
.build()
);

@Override
public void onEnable() {
saveDefaultConfig();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static void syncMessage(AsyncPlayerChatEvent event){
if(FakePlayerUtils.isFake(event.getPlayer())) return;
if(!event.isCancelled()){
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getPlayer());
new Thread(() -> Easybot.getClient().syncMessage(playerInfo, event.getMessage(), false), "EasyBotThread-SyncMessage(BukkitSide)").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncMessage(playerInfo, event.getMessage(), false));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public static void syncMessage(AsyncChatEvent event){
if(!event.isCancelled()){
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getPlayer());
String message = PlainTextComponentSerializer.plainText().serialize(event.message());
new Thread(() -> Easybot.getClient().syncMessage(playerInfo,message , false), "EasyBotThread-SyncMessage(PaperSide)").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncMessage(playerInfo,message , false));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static void syncMessage(PlayerChannelChatEvent event){
if(FakePlayerUtils.isFake(event.getPlayer())) return;
if(!event.isCancelled()){
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getPlayer());
new Thread(() -> Easybot.getClient().syncMessage(playerInfo, event.getOriginalMessage(), false), "EasyBotThread-SyncMessage(PlayerChat)").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncMessage(playerInfo, event.getOriginalMessage(), false));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.springwater.easybot.bridge.packet.PlayerInfoWithRaw;
import com.springwater.easybot.utils.BridgeUtils;
import com.springwater.easybot.utils.FakePlayerUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.block.Block;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
Expand All @@ -16,42 +18,67 @@
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.PlayerDeathEvent;

import java.lang.reflect.Method;

public class PlayerDeathSyncEvents implements Listener {

private final boolean hasModernMessageApi;

public PlayerDeathSyncEvents(){
boolean modernMessageApi = false;
try {
PlayerDeathEvent.class.getMethod("deathMessage");
modernMessageApi = true;
} catch (NoSuchMethodException | NoClassDefFoundError ignored) {
}
this.hasModernMessageApi = modernMessageApi;
}

public String getKiller(Player player) {
EntityDamageEvent lastDamageCause = player.getLastDamageCause();
if (lastDamageCause instanceof EntityDamageByEntityEvent) {
Entity damager = ((EntityDamageByEntityEvent) lastDamageCause).getDamager();
if(damager instanceof Arrow){
if (damager instanceof Arrow) {
Arrow arrow = (Arrow) damager;
if(arrow.getShooter() instanceof Entity){
if (arrow.getShooter() instanceof Entity) {
return ((Entity) arrow.getShooter()).getName();
}
return "箭";
}
//noinspection ConstantValue
return damager != null ? damager.getName() : "一股神秘的力量";
} else if (lastDamageCause instanceof EntityDamageByBlockEvent) {
Block damager = ((EntityDamageByBlockEvent) lastDamageCause).getDamager();
return damager != null ? damager.getState().getData().getItemType().name() : "一股神秘的力量";
return damager != null ? damager.getState().getType().name() : "一股神秘的力量";
} else {
return "一股神秘的力量";
}
}

@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerDeath(PlayerDeathEvent event) {
if(Easybot.instance.getConfig().getBoolean("skip_options.skip_death")) return;
if(FakePlayerUtils.isFake(event.getPlayer())) return;
if (Easybot.instance.getConfig().getBoolean("skip_options.skip_death")) return;
if (FakePlayerUtils.isFake(event.getEntity())) return;
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getEntity());
String deathMessage = event.getDeathMessage();
if(deathMessage == null){
String deathMessage;

if(hasModernMessageApi) {
Component component = event.deathMessage();
deathMessage = LegacyComponentSerializer.legacySection().serializeOrNull(component);
}else{
//noinspection deprecation
deathMessage = event.getDeathMessage();
}

if (deathMessage == null) {
deathMessage = event.getEntity().getName() + " died";
}
final String message = deathMessage;
String killer = getKiller(event.getEntity());
new Thread(() -> {
Easybot.EXECUTOR.execute(() -> {
Easybot
.getClient()
.syncDeathMessage(playerInfo, message, killer);
}, "EasyBotThread-SyncPlayerDeath").start();
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ public void onPlayerJoin(PlayerJoinEvent event) {
if(Easybot.instance.getConfig().getBoolean("skip_options.skip_join")) return;
if(FakePlayerUtils.isFake(event.getPlayer())) return;
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getPlayer());
new Thread(() -> Easybot.getClient().syncEnterExit(playerInfo, true), "EasyBotThread-SyncPlayerJoinMessage").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncEnterExit(playerInfo, true));
}

@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerQuit(PlayerQuitEvent event) {
if(Easybot.instance.getConfig().getBoolean("skip_options.skip_quit")) return;
if(FakePlayerUtils.isFake(event.getPlayer())) return;
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(event.getPlayer());
new Thread(() -> Easybot.getClient().syncEnterExit(playerInfo, false), "EasyBotThread-SyncPlayerExitMessage").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncEnterExit(playerInfo, false));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static void syncMessage(AsyncRedisChatMessageEvent event){
if(FakePlayerUtils.isFake(player)) return;
PlayerInfoWithRaw playerInfo = BridgeUtils.buildPlayerInfoFull(player);
String message = PlainTextComponentSerializer.plainText().serialize(event.getContent());
new Thread(() -> Easybot.getClient().syncMessage(playerInfo, message, false), "EasyBotThread-SyncMessage(PlayerChat)").start();
Easybot.EXECUTOR.execute(() -> Easybot.getClient().syncMessage(playerInfo, message, false));
}
}
}
Expand Down
Loading