Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -1,55 +1,45 @@
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.crystalpvp.EndCrystalListener;
import com.eternalcode.combat.fight.controller.FightBypassAdminController;
import com.eternalcode.combat.fight.controller.FightBypassCreativeController;
import com.eternalcode.combat.fight.controller.FightBypassPermissionController;
import com.eternalcode.combat.fight.controller.FightInventoryController;
import com.eternalcode.combat.fight.death.DeathEffectController;
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.DropKeepInventoryServiceImpl;
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.controller.FightActionBlockerController;
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.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.controller.*;
import com.eternalcode.combat.fight.death.DeathEffectController;
import com.eternalcode.combat.fight.drop.*;
import com.eternalcode.combat.fight.drop.impl.PercentDropModifier;
import com.eternalcode.combat.fight.drop.impl.PlayersHealthDropModifier;
import com.eternalcode.combat.fight.effect.FightEffectController;
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.FightPearlService;
import com.eternalcode.combat.fight.pearl.FightPearlServiceImpl;
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.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.time.DurationService;
import com.eternalcode.combat.updater.UpdaterNotificationController;
import com.eternalcode.combat.updater.UpdaterService;
import com.eternalcode.commons.adventure.AdventureLegacyColorPostProcessor;
Expand All @@ -61,7 +51,6 @@
import dev.rollczi.litecommands.bukkit.LiteBukkitFactory;
import dev.rollczi.litecommands.bukkit.LiteBukkitMessages;
import dev.rollczi.litecommands.folia.FoliaExtension;
import java.time.Duration;
import net.kyori.adventure.platform.AudienceProvider;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.kyori.adventure.text.minimessage.MiniMessage;
Expand All @@ -73,6 +62,7 @@
import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;

Expand Down Expand Up @@ -109,6 +99,8 @@ public void onEnable() {

MinecraftScheduler scheduler = CombatSchedulerAdapter.getAdaptiveScheduler(this);

DurationService durationService = DurationService.ofConfig(pluginConfig.durationFormat);

this.fightManager = new FightManagerImpl(eventManager);
this.fightPearlService = new FightPearlServiceImpl(pluginConfig.pearl);
this.fightTagOutService = new FightTagOutServiceImpl();
Expand All @@ -134,6 +126,7 @@ public void onEnable() {
server.getPluginManager(),
this.getLogger(),
this,
durationService,
this.fightManager
);
bridgeService.init(server);
Expand All @@ -151,7 +144,7 @@ public void onEnable() {

.commands(
new FightTagCommand(this.fightManager, noticeService, pluginConfig),
new FightTagOutCommand(this.fightTagOutService, noticeService, pluginConfig),
new FightTagOutCommand(this.fightTagOutService, noticeService, durationService, pluginConfig),
new EternalCombatReloadCommand(configService, noticeService)
)

Expand All @@ -164,7 +157,7 @@ public void onEnable() {

.build();

FightTask fightTask = new FightTask(server, pluginConfig, this.fightManager, noticeService);
FightTask fightTask = new FightTask(server, pluginConfig, durationService, this.fightManager, noticeService);
scheduler.timer(fightTask, Duration.ofSeconds(1), Duration.ofSeconds(1));

new Metrics(this, BSTATS_METRICS_ID);
Expand All @@ -181,7 +174,7 @@ public void onEnable() {
new FightBypassPermissionController(server, pluginConfig),
new FightBypassCreativeController(server, pluginConfig),
new FightActionBlockerController(this.fightManager, noticeService, pluginConfig, server),
new FightPearlController(pluginConfig.pearl, noticeService, this.fightManager, this.fightPearlService),
new FightPearlController(pluginConfig.pearl, noticeService, durationService, this.fightManager, this.fightPearlService),
new DeathEffectController(pluginConfig),
new UpdaterNotificationController(updaterService, pluginConfig, this.audienceProvider, miniMessage),
new KnockbackRegionController(noticeService, this.regionProvider, this.fightManager, knockbackService, server),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,30 @@
package com.eternalcode.combat.bridge;

import com.eternalcode.combat.region.lands.LandsRegionProvider;
import com.eternalcode.combat.bridge.placeholder.FightTagPlaceholder;
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.fight.FightManager;
import com.eternalcode.combat.region.CompositeRegionProvider;
import com.eternalcode.combat.region.bukkit.DefaultRegionProvider;
import com.eternalcode.combat.region.RegionProvider;
import com.eternalcode.combat.region.bukkit.DefaultRegionProvider;
import com.eternalcode.combat.region.lands.LandsRegionProvider;
import com.eternalcode.combat.region.worldguard.WorldGuardRegionProvider;
import com.eternalcode.combat.time.DurationService;
import org.bukkit.Server;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import org.bukkit.Server;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;

public class BridgeService {

private final PluginConfig config;
private final PluginManager pluginManager;
private final Logger logger;
private final Plugin plugin;
private final DurationService durationService;
private final FightManager fightManager;

private RegionProvider regionProvider;
Expand All @@ -31,12 +34,14 @@ public BridgeService(
PluginManager pluginManager,
Logger logger,
Plugin plugin,
DurationService durationService,
FightManager fightManager
) {
this.config = config;
this.pluginManager = pluginManager;
this.logger = logger;
this.plugin = plugin;
this.durationService = durationService;
this.fightManager = fightManager;
}

Expand Down Expand Up @@ -69,7 +74,7 @@ public void init(Server server) {

initialize(
"PlaceholderAPI",
() -> new FightTagPlaceholder(this.config, this.fightManager, server, this.plugin).register(),
() -> new FightTagPlaceholder(this.config, durationService, this.fightManager, server, this.plugin).register(),
() -> this.logger.warning("PlaceholderAPI not found; skipping placeholders.")
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,30 @@
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.fight.FightManager;
import com.eternalcode.combat.fight.FightTag;
import com.eternalcode.combat.util.DurationUtil;
import com.eternalcode.combat.time.DurationService;
import com.eternalcode.commons.time.DurationParser;
import java.util.Optional;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;

import java.util.Optional;

public class FightTagPlaceholder extends PlaceholderExpansion {

private static final String IDENTIFIER = "eternalcombat";

private final PlaceholderSettings placeholderSettings;
private final DurationService durationService;
private final FightManager fightManager;
private final Server server;
private final Plugin plugin;

public FightTagPlaceholder(PluginConfig pluginConfig, FightManager fightManager, Server server, Plugin plugin) {
public FightTagPlaceholder(PluginConfig pluginConfig, DurationService durationService, FightManager fightManager, Server server, Plugin plugin) {
this.placeholderSettings = pluginConfig.placeholders;
this.durationService = durationService;
this.fightManager = fightManager;
this.server = server;
this.plugin = plugin;
Expand All @@ -51,7 +54,7 @@ private String handleRemainingMillis(OfflinePlayer player) {

private String handleRemainingSeconds(OfflinePlayer player) {
return this.getFightTag(player)
.map(tag -> DurationUtil.format(tag.getRemainingDuration()))
.map(tag -> durationService.format(tag.getRemainingDuration()))
.orElse("");
}

Expand Down Expand Up @@ -110,7 +113,7 @@ public boolean canRegister() {

@Override
public @NotNull String getAuthor() {
return this.plugin.getDescription().getAuthors().get(0);
return this.plugin.getDescription().getAuthors().getFirst();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ public class CrystalPvpSettings extends OkaeriConfig {
@Comment({"# Should player be tagged when damaged from crystal explosion set by other player"})
public boolean tagFromCrystals = true;


@Comment({"#Should player be tagged when damaged from respawn anchor explosion set by other player"})
@Comment({"# Should player be tagged when damaged from respawn anchor explosion set by other player"})
public boolean tagFromRespawnAnchor = true;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.eternalcode.combat.config.implementation;

import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.annotation.Comment;

public class DurationFormatSettings extends OkaeriConfig {

@Comment({
"# Pattern used to format durations.",
"# Placeholders:",
"# %d{singular|plural} - days",
"# %h{singular|plural} - hours",
"# %m{singular|plural} - minutes",
"# %s{singular|plural} - seconds",
"# Example:",
"# %d{day|days} %h{hour|hours} %m{minute|minutes} %s{second|seconds}"
})
public String pattern = "%d{day|days} %h{hour|hours} %m{minute|minutes} %s{second|seconds}";

@Comment({
"# Separator used between duration parts.",
"# Example result:",
"# 1 hour, 2 minutes, 5 seconds"
})
public String separator = ", ";

@Comment({
"# Separator used before the last duration part.",
"# Example result:",
"# 1 hour, 2 minutes and 5 seconds"
})
public String lastSeparator = " and ";

@Comment({"# Text displayed when duration is zero or negative."})
public String zero = "<1 second";
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,6 @@ public class MessagesSettings extends OkaeriConfig {
.actionBar("Combat ends in: <red>{TIME}</red>")
.build();

@Comment({
"# Would you like to display milliseconds instead of seconds in combat notification "
})
public boolean withoutMillis = true;

@Comment({
"# Message displayed when a player lacks permission to execute a command.",
"# The {PERMISSION} placeholder is replaced with the required permission."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

public class PlaceholderSettings extends OkaeriConfig {

@Comment("Text returned by %eternalcombat_isInCombat_formatted% placeholder when the player is in combat")
@Comment("# Text returned by %eternalcombat_isInCombat_formatted% placeholder when the player is in combat")
public String isInCombatFormattedTrue = "In Combat";

@Comment("Text returned by %eternalcombat_isInCombat_formatted% placeholder when the player is out of combat")
@Comment("# Text returned by %eternalcombat_isInCombat_formatted% placeholder when the player is out of combat")
public String isInCombatFormattedFalse = "Not In Combat";

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.eternalcode.combat.fight.pearl.FightPearlSettings;
import eu.okaeri.configs.OkaeriConfig;
import eu.okaeri.configs.annotation.Comment;

import java.time.Duration;
import java.util.List;

Expand All @@ -29,6 +30,13 @@ public class PluginConfig extends OkaeriConfig {
})
public Settings settings = new Settings();

@Comment({
" ",
"# Duration formatting settings.",
"# Controls how time values (e.g. cooldowns, timers) are displayed."
})
public DurationFormatSettings durationFormat = new DurationFormatSettings();

@Comment({
" ",
"# Settings related to Ender Pearls.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.eternalcode.combat.config.implementation.PluginConfig;
import com.eternalcode.combat.fight.event.CauseOfUnTag;
import com.eternalcode.combat.notification.NoticeService;
import com.eternalcode.combat.util.DurationUtil;
import com.eternalcode.combat.time.DurationService;
import org.bukkit.Server;
import org.bukkit.entity.Player;

Expand All @@ -14,12 +14,14 @@ public class FightTask implements Runnable {

private final Server server;
private final PluginConfig config;
private final DurationService durationService;
private final FightManager fightManager;
private final NoticeService noticeService;

public FightTask(Server server, PluginConfig config, FightManager fightManager, NoticeService noticeService) {
public FightTask(Server server, PluginConfig config, DurationService durationService, FightManager fightManager, NoticeService noticeService) {
this.server = server;
this.config = config;
this.durationService = durationService;
this.fightManager = fightManager;
this.noticeService = noticeService;
}
Expand All @@ -45,7 +47,7 @@ public void run() {
this.noticeService.create()
.player(player.getUniqueId())
.notice(this.config.messagesSettings.combatNotification)
.placeholder("{TIME}", DurationUtil.format(remaining, this.config.messagesSettings.withoutMillis))
.placeholder("{TIME}", durationService.format(remaining))
.send();

}
Expand Down
Loading