Skip to content
Open
Show file tree
Hide file tree
Changes from 5 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
6 changes: 6 additions & 0 deletions eternalcombat-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,12 @@ tasks {
downloadPlugins.modrinth("WorldGuard", Versions.WORLDGUARD)
downloadPlugins.modrinth("LuckPerms", "v${Versions.LUCKPERMS}-bukkit")
}

runPaper.folia.registerTask {
minecraftVersion("1.21.11")

downloadPlugins.modrinth("PacketEvents", "${Versions.PACKETEVENTS}+spigot")
}
}

tasks.shadowJar {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ public void onEnable() {
@Override
public void onDisable() {
EternalCombatProvider.deinitialize();
FoliaChecker.clearCache();

if (this.liteCommands != null) {
this.liteCommands.unregister();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,19 @@
import com.eternalcode.commons.bukkit.scheduler.BukkitSchedulerImpl;
import com.eternalcode.commons.bukkit.scheduler.MinecraftScheduler;
import com.eternalcode.commons.folia.scheduler.FoliaSchedulerImpl;
import java.util.logging.Logger;
import org.bukkit.plugin.Plugin;

public final class CombatSchedulerAdapter {

private static final String FOLIA_CLASS = "io.papermc.paper.threadedregions.RegionizedServer";

private CombatSchedulerAdapter() {
throw new UnsupportedOperationException("This is an utility class and cannot be instantiated");
}

public static MinecraftScheduler getAdaptiveScheduler(Plugin plugin) {
Logger logger = plugin.getLogger();

try {
Class.forName(FOLIA_CLASS);
logger.info("» Detected Folia environment. Using FoliaScheduler.");
if (FoliaChecker.isFolia(plugin)) {
return new FoliaSchedulerImpl(plugin);
}
catch (ClassNotFoundException exception) {
logger.info("» Detected Bukkit/Paper environment. Using BukkitScheduler.");
return new BukkitSchedulerImpl(plugin);
}

return new BukkitSchedulerImpl(plugin);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.eternalcode.combat;

import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;

public final class FoliaChecker {

private static final String FOLIA_CLASS = "io.papermc.paper.threadedregions.RegionizedServer";
private static Boolean isFoliaPresent = null;

private FoliaChecker() {
throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
}

public static boolean isFolia() {
return detectFoliaEnvironment(null);
}

public static boolean isFolia(Plugin plugin) {
return detectFoliaEnvironment(plugin);
}

private static synchronized boolean detectFoliaEnvironment(@Nullable Plugin plugin) {
if (isFoliaPresent != null) {
return isFoliaPresent;
}

try {
Class.forName(FOLIA_CLASS);
isFoliaPresent = true;
if (plugin != null) {
plugin.getLogger().info("» Detected Folia environment.");
}
}
catch (ClassNotFoundException exception) {
isFoliaPresent = false;
if (plugin != null) {
plugin.getLogger().info("» Detected Bukkit/Paper environment.");
}
}
return isFoliaPresent;
}

public static void clearCache() {
isFoliaPresent = null;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.eternalcode.combat.fight.controller;

import com.eternalcode.combat.FoliaChecker;
import com.eternalcode.combat.WhitelistBlacklistMode;
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.fight.FightManager;
Expand Down Expand Up @@ -55,6 +56,16 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
return;
}

UUID attackedUniqueId = attackedPlayerByPerson.getUniqueId();
UUID attackerUniqueId = attacker.getUniqueId();

if (
attackedUniqueId.equals(attackerUniqueId)
&& FoliaChecker.isFolia()
) {
return;
}

if (this.config.combat.disableFlying) {
if (attackedPlayerByPerson.isFlying()) {
attackedPlayerByPerson.setFlying(false);
Expand All @@ -68,8 +79,6 @@ void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
}

Duration combatTime = this.config.settings.combatTimerDuration;
UUID attackedUniqueId = attackedPlayerByPerson.getUniqueId();
UUID attackerUniqueId = attacker.getUniqueId();

this.fightManager.tag(attackedUniqueId, combatTime, CauseOfTag.PLAYER, attackerUniqueId);
this.fightManager.tag(attackerUniqueId, combatTime, CauseOfTag.PLAYER, attackedUniqueId);
Expand Down
Loading