Skip to content
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;
Comment on lines 17 to +26
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cofnijmy te importy

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()))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ja już tu zmieniamy to przydało by się wywalić remaining_millis i remaining_seconds bo w tym kontekście te placeholdery wdają się być bez sensu

.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,37 @@
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",
"# %ms{singular|plural} - milliseconds",
"# Example:",
"# %d{day|days} %h{hour|hours} %m{minute|minutes} %s{second|seconds} %ms{millisecond|milliseconds}"
})
public String pattern = "%d {day|days} %h {hour|hours} %m {minute|minutes} %s {second|seconds} %ms {millisecond|milliseconds}";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nie możemy tego rozłożyć może na filedy typu:

days: "{x} day|{x} days"
etc etc a spacje można dać samemu tak jak tu ^
to jest troszkę lepsze bo uwzględnia lepiej jakieś dziwne cases gdzie ktoś chce mieć inne separatory albo inne głupoty

w ogóle w językach typu Polski jest problem z
1 godzina, 2 godziny, 5 godzin :/ no ale trudno będą musieli używać godz.


@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