Files
CraterLib/Paper/src/main/java/com/hypherionmc/craterlib/common/PaperCompatHelper.java

103 lines
3.0 KiB
Java
Raw Normal View History

2024-11-11 10:55:21 +02:00
package com.hypherionmc.craterlib.common;
import com.hypherionmc.craterlib.core.platform.CompatUtils;
import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import com.hypherionmc.craterlib.utils.ChatUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import java.lang.reflect.Method;
public class PaperCompatHelper implements CompatUtils {
@Override
public boolean isPlayerActive(BridgedPlayer player) {
// Essentials Vanish
if (ModloaderEnvironment.INSTANCE.isModLoaded("Essentials")) {
return !isEssentialsVanished(player);
}
// PhantomAdmin Vanish
if (ModloaderEnvironment.INSTANCE.isModLoaded("PhantomAdmin"))
return !isPhantomVanished(player);
// Other vanish mods
try {
Player p = (Player) player.toMojangServerPlayer();
for (MetadataValue meta : p.getMetadata("vanished")) {
if (meta.asBoolean()) return true;
}
} catch (Exception ignored) {}
return true;
}
@Override
public String getSkinUUID(BridgedPlayer player) {
return player.getStringUUID();
}
private boolean isEssentialsVanished(BridgedPlayer player) {
try {
Plugin p = Bukkit.getPluginManager().getPlugin("Essentials");
if (p == null)
return false;
Method getUser = p.getClass().getMethod("getUser", String.class);
Object essentialsPlayer = getUser.invoke(p, ChatUtils.resolve(player.getName(), false));
if (essentialsPlayer != null) {
Method isVanished = essentialsPlayer.getClass().getMethod("isVanished");
return (boolean) isVanished.invoke(essentialsPlayer);
}
} catch (Exception ignored) {}
return false;
}
private boolean isPhantomVanished(BridgedPlayer player) {
try {
Plugin p = Bukkit.getPluginManager().getPlugin("PhantomAdmin");
if (p == null)
return false;
Method isInvisible = p.getClass().getDeclaredMethod("isInvisible", Player.class);
isInvisible.setAccessible(true);
return (boolean) isInvisible.invoke(p, (Player) player.toMojangServerPlayer());
} catch (Exception ignored) {
ignored.printStackTrace();
}
return false;
}
@Override
public boolean isPlayerBleeding(BridgedPlayer player) {
return false;
}
@Override
public boolean playerBledOut(BridgedPlayer player) {
return false;
}
@Override
public boolean playerRevived(BridgedPlayer player) {
return false;
}
@Override
public boolean isPrivateMessage(BridgedPlayer player) {
return false;
}
@Override
public Component getChannelPrefix(BridgedPlayer player) {
return Component.empty();
}
2024-11-11 10:55:21 +02:00
}