Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
b01c652
I've added new options to Pearl and Trident that reset the timer when…
Pawelusze Dec 14, 2025
5eb70a8
I made the corrections that gemini noticed
Pawelusze Dec 14, 2025
47787cd
The improvements suggested by the team have been implemented
Pawelusze Dec 29, 2025
69ddbba
Implemented suggestions from the team
Pawelusze Dec 29, 2025
044eb15
Make tridents throw check work on all tridents, regardless of enchant…
Jakubk15 Dec 29, 2025
8149a3e
Implemented suggestions from the team and fixed `FightTridentControll…
Pawelusze Feb 2, 2026
c3f8e6f
Corrected comments and field names
Pawelusze Feb 3, 2026
7b4f296
Implemented CitralFlo suggestions
Pawelusze Feb 4, 2026
927e1ba
Implemented CitralFlo suggestions again
Pawelusze Feb 5, 2026
d98872d
Follow igoyek's review from 21.10.25
CitralFlo Feb 6, 2026
ba4866f
CR
Rollczi Feb 7, 2026
78c2ae9
Simplify naming - extract logic to service for Pearls
CitralFlo Feb 7, 2026
feaa13a
make it more logical
CitralFlo Feb 7, 2026
2da7ab5
Refactor trident-related classes and services for improved clarity an…
CitralFlo Feb 7, 2026
3b86772
Rename trident cooldown methods to improve clarity and update comment…
CitralFlo Feb 7, 2026
95f73ee
Fixes after tests - everything should be working now!
CitralFlo Feb 8, 2026
d920345
Remove commented line
CitralFlo Feb 8, 2026
dc81229
Add cooldown to enderpearl - hack by:https://www.spigotmc.org/threads…
CitralFlo Feb 8, 2026
b0704e3
Bump minecraft version in runServer task to 1.21.11
Jakubk15 Feb 8, 2026
0ab7088
Add combat restrictions for Riptide tridents and improve event handling
vLuckyyy Mar 5, 2026
32915fd
Update eternalcombat-plugin/src/main/java/com/eternalcode/combat/figh…
Jakubk15 Mar 7, 2026
b5a6e47
Apply suggestion from @Jakubk15
Jakubk15 Mar 7, 2026
edf0891
Migrate to commons delay
Jakubk15 Mar 7, 2026
543e39d
Resolve conflicts
Jakubk15 Mar 8, 2026
7d17873
CR
Rollczi Jun 7, 2026
631c30e
Merge branch 'master' into fork/Pawelusze/feature/add-reset-timer
Rollczi Jun 7, 2026
9d26fb5
resolve merge
Rollczi Jun 7, 2026
4b5bf63
resolve merge conflicts and update
Rollczi Jun 7, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.eternalcode.combat.fight.FightManager;
import com.eternalcode.combat.fight.drop.DropService;
import com.eternalcode.combat.fight.effect.FightEffectService;
import com.eternalcode.combat.fight.pearl.FightPearlService;
import com.eternalcode.combat.fight.pearl.PearlService;
import com.eternalcode.combat.region.RegionProvider;
import com.eternalcode.combat.fight.tagout.FightTagOutService;

Expand All @@ -14,7 +14,7 @@ public interface EternalCombatApi {

RegionProvider getRegionProvider();

FightPearlService getFightPearlService();
PearlService getFightPearlService();

FightTagOutService getFightTagOutService();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,17 @@ public enum CauseOfTag {
*/
CRYSTAL,

/**
* Trident usage extending combat tag.
*/
TRIDENT,

/**
* Ender pearl usage extending combat tag.
*/
ENDER_PEARL,


/**
* A custom cause, typically defined by external plugins or systems, applied the combat tag.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.eternalcode.combat.fight.pearl;

import java.time.Duration;
import java.time.Instant;
import java.util.UUID;
import org.bukkit.entity.Player;

public interface FightPearlService {
public interface PearlService {

Instant getDelay(UUID uuid);
boolean shouldCancelEvent(UUID playerId);

Duration getRemainingDelay(UUID uuid);

boolean hasDelay(UUID uuid);

void markDelay(UUID uuid);
void handleDelay(Player uuid);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.eternalcode.combat.fight.trident;

import java.time.Duration;
import java.util.UUID;

public interface TridentService {

/**
* returns remaining delay for the player to use trident again
* @param uuid unique id of the player
* @return remaining duration left to use trident again by the player or zero
*/
Duration getRemainingDelay(UUID uuid);

/**
* checks if player still has delay left to use trident
* @param uuid unique id of the player
* @return true if user still has cooldown left to use trident
*/
boolean hasDelay(UUID uuid);

/**
* marks start of the delay for the user
* @param uuid unique id of the player
*/
void markDelay(UUID uuid);


void removeDelay(UUID playerId);

}
4 changes: 2 additions & 2 deletions eternalcombat-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import net.minecrell.pluginyml.bukkit.BukkitPluginDescription

import net.minecrell.pluginyml.paper.PaperPluginDescription
import org.gradle.kotlin.dsl.shadowJar
import net.minecrell.pluginyml.bukkit.BukkitPluginDescription

plugins {
`eternalcombat-java`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package com.eternalcode.combat;

import com.eternalcode.combat.border.BorderTriggerController;
import com.eternalcode.combat.border.BorderService;
import com.eternalcode.combat.border.BorderServiceImpl;
import com.eternalcode.combat.border.BorderTriggerController;
import com.eternalcode.combat.border.animation.block.BorderBlockController;
import com.eternalcode.combat.border.animation.particle.ParticleController;
import com.eternalcode.combat.bridge.BridgeService;
import com.eternalcode.combat.crystalpvp.RespawnAnchorListener;
import com.eternalcode.combat.config.ConfigService;
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.crystalpvp.EndCrystalListener;
import com.eternalcode.combat.crystalpvp.RespawnAnchorListener;
import com.eternalcode.combat.event.EventManager;
import com.eternalcode.combat.fight.FightManager;
import com.eternalcode.combat.fight.FightManagerImpl;
import com.eternalcode.combat.fight.FightTagCommand;
import com.eternalcode.combat.fight.FightTask;
import com.eternalcode.combat.fight.blocker.CommandsBlocker;
import com.eternalcode.combat.fight.blocker.ElytraBlocker;
import com.eternalcode.combat.fight.blocker.ElytraEquipBlocker;
Expand All @@ -16,44 +23,40 @@
import com.eternalcode.combat.fight.controller.FightBypassCreativeController;
import com.eternalcode.combat.fight.controller.FightBypassPermissionController;
import com.eternalcode.combat.fight.blocker.InventoryContainersBlocker;
import com.eternalcode.combat.fight.controller.FightMessageController;
import com.eternalcode.combat.fight.controller.FightTagController;
import com.eternalcode.combat.fight.controller.FightUnTagController;
import com.eternalcode.combat.fight.death.DeathFlareController;
import com.eternalcode.combat.fight.death.DeathLightningController;
import com.eternalcode.combat.fight.drop.DropKeepInventoryService;
import com.eternalcode.combat.fight.FightManager;
import com.eternalcode.combat.fight.drop.DropService;
import com.eternalcode.combat.fight.effect.FightEffectService;
import com.eternalcode.combat.fight.firework.FireworkController;
import com.eternalcode.combat.fight.knockback.KnockbackService;
import com.eternalcode.combat.fight.tagout.FightTagOutService;
import com.eternalcode.combat.fight.pearl.FightPearlService;
import com.eternalcode.combat.handler.InvalidUsageHandlerImpl;
import com.eternalcode.combat.handler.MissingPermissionHandlerImpl;
import com.eternalcode.combat.config.ConfigService;
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.fight.drop.DropController;
import com.eternalcode.combat.fight.drop.DropKeepInventoryService;
import com.eternalcode.combat.fight.drop.DropKeepInventoryServiceImpl;
import com.eternalcode.combat.fight.drop.DropService;
import com.eternalcode.combat.fight.drop.DropServiceImpl;
import com.eternalcode.combat.fight.drop.impl.PercentDropModifier;
import com.eternalcode.combat.fight.drop.impl.PlayersHealthDropModifier;
import com.eternalcode.combat.fight.FightTagCommand;
import com.eternalcode.combat.fight.blocker.PlaceBlockBlocker;
import com.eternalcode.combat.fight.controller.FightMessageController;
import com.eternalcode.combat.fight.controller.FightTagController;
import com.eternalcode.combat.fight.controller.FightUnTagController;
import com.eternalcode.combat.fight.effect.FightEffectController;
import com.eternalcode.combat.event.EventManager;
import com.eternalcode.combat.fight.FightManagerImpl;
import com.eternalcode.combat.fight.FightTask;
import com.eternalcode.combat.fight.effect.FightEffectService;
import com.eternalcode.combat.fight.effect.FightEffectServiceImpl;
import com.eternalcode.combat.fight.firework.FireworkController;
import com.eternalcode.combat.fight.knockback.KnockbackRegionController;
import com.eternalcode.combat.fight.knockback.KnockbackService;
import com.eternalcode.combat.fight.logout.LogoutController;
import com.eternalcode.combat.fight.logout.LogoutService;
import com.eternalcode.combat.fight.pearl.FightPearlController;
import com.eternalcode.combat.fight.pearl.FightPearlServiceImpl;
import com.eternalcode.combat.fight.pearl.PearlController;
import com.eternalcode.combat.fight.pearl.PearlService;
import com.eternalcode.combat.fight.pearl.PearlServiceImpl;
import com.eternalcode.combat.fight.tagout.FightTagOutCommand;
import com.eternalcode.combat.fight.tagout.FightTagOutController;
import com.eternalcode.combat.fight.tagout.FightTagOutService;
import com.eternalcode.combat.fight.tagout.FightTagOutServiceImpl;
import com.eternalcode.combat.fight.tagout.FightTagOutCommand;
import com.eternalcode.combat.fight.trident.TridentController;
import com.eternalcode.combat.fight.trident.TridentService;
import com.eternalcode.combat.fight.trident.TridentServiceImpl;
import com.eternalcode.combat.handler.InvalidUsageHandlerImpl;
import com.eternalcode.combat.handler.MissingPermissionHandlerImpl;
import com.eternalcode.combat.notification.NoticeService;
import com.eternalcode.combat.fight.knockback.KnockbackRegionController;
import com.eternalcode.combat.region.RegionProvider;
import com.eternalcode.combat.updater.UpdaterNotificationController;
import com.eternalcode.combat.updater.UpdaterService;
Expand Down Expand Up @@ -85,7 +88,8 @@ public final class CombatPlugin extends JavaPlugin implements EternalCombatApi {
private static final int BSTATS_METRICS_ID = 17803;

private FightManager fightManager;
private FightPearlService fightPearlService;
private PearlService pearlService;
private TridentService tridentService;
private FightTagOutService fightTagOutService;
private FightEffectService fightEffectService;

Expand Down Expand Up @@ -113,7 +117,8 @@ public void onEnable() {
MinecraftScheduler scheduler = CombatSchedulerAdapter.getAdaptiveScheduler(this);

this.fightManager = new FightManagerImpl(eventManager);
this.fightPearlService = new FightPearlServiceImpl(pluginConfig.pearl);
this.pearlService = new PearlServiceImpl(this.fightManager, pluginConfig, scheduler);
this.tridentService = new TridentServiceImpl(pluginConfig);
this.fightTagOutService = new FightTagOutServiceImpl();
this.fightEffectService = new FightEffectServiceImpl();

Expand Down Expand Up @@ -183,7 +188,8 @@ public void onEnable() {
new FightBypassPermissionController(server, pluginConfig),
new FightBypassCreativeController(server, pluginConfig),
new PlaceBlockBlocker(this.fightManager, noticeService, pluginConfig),
new FightPearlController(pluginConfig.pearl, noticeService, this.fightManager, this.fightPearlService),
new PearlController(pluginConfig, this.pearlService, noticeService, fightManager),
new TridentController(pluginConfig, noticeService, this.fightManager, this.tridentService, server),
new DeathFlareController(pluginConfig, server, scheduler, this),
new DeathLightningController(pluginConfig, server),
new UpdaterNotificationController(updaterService, pluginConfig, miniMessage),
Expand Down Expand Up @@ -251,8 +257,8 @@ public RegionProvider getRegionProvider() {
}

@Override
public FightPearlService getFightPearlService() {
return this.fightPearlService;
public PearlService getFightPearlService() {
return this.pearlService;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import com.eternalcode.combat.fight.drop.DropSettings;
import com.eternalcode.combat.fight.effect.FightEffectSettings;
import com.eternalcode.combat.fight.knockback.KnockbackSettings;
import com.eternalcode.combat.fight.pearl.FightPearlSettings;
import com.eternalcode.combat.fight.pearl.PearlSettings;
import com.eternalcode.combat.fight.trident.TridentSettings;
import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.annotation.Comment;
import java.time.Duration;
Expand Down Expand Up @@ -34,7 +35,14 @@ public class PluginConfig extends OkaeriConfig {
"# Settings related to Ender Pearls.",
"# Configure cooldowns, restrictions, and other behaviors for Ender Pearls during combat."
})
public FightPearlSettings pearl = new FightPearlSettings();
public PearlSettings pearl = new PearlSettings();

@Comment({
" ",
"# Settings related to Trident",
"# Configure cooldowns, restrictions, and other behaviors for Trident during combat."
})
public TridentSettings trident = new TridentSettings();

@Comment({
" ",
Expand Down

This file was deleted.

Loading