diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java index 3dd6c217b..5c06ca8d1 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/implementation/PluginConfiguration.java @@ -7,6 +7,8 @@ import com.eternalcode.core.feature.afk.AfkSettings; import com.eternalcode.core.feature.automessage.AutoMessageConfig; import com.eternalcode.core.feature.automessage.AutoMessageSettings; +import com.eternalcode.core.feature.back.BackConfig; +import com.eternalcode.core.feature.back.BackSettings; import com.eternalcode.core.feature.broadcast.BroadcastConfig; import com.eternalcode.core.feature.broadcast.BroadcastSettings; import com.eternalcode.core.feature.butcher.ButcherConfig; @@ -50,8 +52,6 @@ import eu.okaeri.configs.OkaeriConfig; import eu.okaeri.configs.annotation.Comment; import eu.okaeri.configs.annotation.Header; -import org.bukkit.Sound; - import java.io.File; @Header({ @@ -213,6 +213,12 @@ public static class Format extends OkaeriConfig { @Comment("# Settings responsible for player vanish functionality") VanishConfig vanish = new VanishConfig(); + @Bean(proxied = BackSettings.class) + @Comment("") + @Comment("# Back Configuration") + @Comment("# Settings for the /back command functionality") + BackConfig back = new BackConfig(); + @Override public File getConfigFile(File dataFolder) { return new File(dataFolder, "config.yml"); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0030_Move_back_to_dedicated_section.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0030_Move_back_to_dedicated_section.java new file mode 100644 index 000000000..2f4a70c62 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0030_Move_back_to_dedicated_section.java @@ -0,0 +1,17 @@ +package com.eternalcode.core.configuration.migrations; + +import static eu.okaeri.configs.migrate.ConfigMigrationDsl.move; + +import eu.okaeri.configs.migrate.builtin.NamedMigration; + +public class Migration_0030_Move_back_to_dedicated_section extends NamedMigration { + Migration_0030_Move_back_to_dedicated_section() { + super( + "Move back to dedicated section", + move("teleport.teleportedToLastLocation", "back.teleportedToLastTeleportLocation"), + move("teleport.teleportedSpecifiedPlayerLastLocation", "back.teleportedTargetPlayerToLastTeleportLocation"), + move("teleport.lastLocationNoExist", "back.lastLocationNotFound") + ); + } +} + diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migrations.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migrations.java index bb1e22b1d..d38c56ca9 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migrations.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migrations.java @@ -18,6 +18,7 @@ public class Migrations { new Migration_0013_Move_enchant_messages_to_dedicated_section(), new Migration_0014_Move_butcher_messages_to_dedicated_section(), new Migration_0015_Move_ignore_messages_to_dedicated_section(), + new Migration_0030_Move_back_to_dedicated_section(), new Migration_0031_Move_death_messages_to_dedicated_section(), new Migration_0032_Move_join_quit_messages_to_dedicated_section(), }; diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackCommand.java new file mode 100644 index 000000000..989e6bac0 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackCommand.java @@ -0,0 +1,105 @@ +package com.eternalcode.core.feature.back; + +import com.eternalcode.annotations.scan.command.DescriptionDocs; +import com.eternalcode.commons.bukkit.position.Position; +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.notice.NoticeService; +import com.eternalcode.core.viewer.Viewer; +import dev.rollczi.litecommands.annotations.argument.Arg; +import dev.rollczi.litecommands.annotations.command.Command; +import dev.rollczi.litecommands.annotations.context.Sender; +import dev.rollczi.litecommands.annotations.execute.Execute; +import dev.rollczi.litecommands.annotations.permission.Permission; +import java.util.Optional; +import org.bukkit.entity.Player; + +@Command(name = "back") +class BackCommand { + + private final BackService backService; + private final NoticeService noticeService; + + @Inject + public BackCommand(BackService backService, NoticeService noticeService) { + this.backService = backService; + this.noticeService = noticeService; + } + + + @Execute + @Permission("eternalcore.back") + @DescriptionDocs(description = "Teleport to your last teleport/death location, depending which one is most recent") + public void executeBack(@Sender Player player) { + Optional latestPositionOptional = this.backService.getLatestLocation(player.getUniqueId()); + if (latestPositionOptional.isEmpty()) { + this.noticeService.player(player.getUniqueId(), translation -> translation.back().lastLocationNotFound()); + return; + } + Position latestPosition = latestPositionOptional.get(); + Position deathPosition = this.backService.getDeathLocation(player.getUniqueId()).orElse(null); + + if (latestPosition.equals(deathPosition)) { + this.executeBackDeath(player); + return; + } + this.executeBackTeleport(player); + } + + + @Execute(name = "teleport") + @Permission("eternalcore.back.teleport") + @DescriptionDocs(description = "Teleport to your last teleport location") + public void executeBackTeleport(@Sender Player player) { + if (this.backService.teleportBack(player)) { + this.noticeService.player(player.getUniqueId(), translation -> translation.back().teleportedToLastTeleportLocation()); + return; + } + this.noticeService.player(player.getUniqueId(), translation -> translation.back().lastLocationNotFound()); + } + + @Execute(name = "death") + @Permission("eternalcore.back.death") + @DescriptionDocs(description = "Teleport to your last death location") + public void executeBackDeath(@Sender Player player) { + if (this.backService.teleportBackDeath(player)) { + this.noticeService.player(player.getUniqueId(), translation -> translation.back().teleportedToLastDeathLocation()); + return; + } + this.noticeService.player(player.getUniqueId(), translation -> translation.back().lastLocationNotFound()); + } + + @Execute(name = "teleport") + @Permission("eternalcore.back.teleport.other") + @DescriptionDocs(description = "Teleport specified player to their last teleport location", arguments = "") + public void executeBackTeleportOther(@Sender Viewer viewer, @Arg Player target) { + if (!this.backService.teleportBack(target)) { + this.noticeService.player(viewer.getUniqueId(), translation -> translation.back().lastLocationNotFound()); + return; + } + + this.noticeService.player(target.getUniqueId(), translation -> translation.back().teleportedToLastTeleportLocationByAdmin()); + this.noticeService.create() + .viewer(viewer) + .notice(translation -> translation.back().teleportedTargetPlayerToLastTeleportLocation()) + .placeholder("{PLAYER}", target.getName()) + .send(); + } + + @Execute(name = "death") + @Permission("eternalcore.back.death.other") + @DescriptionDocs(description = "Teleport specified player to their last death location", arguments = "") + public void executeBackDeathOther(@Sender Viewer viewer, @Arg Player target) { + if (!this.backService.teleportBackDeath(target)) { + this.noticeService.player(viewer.getUniqueId(), translation -> translation.back().lastLocationNotFound()); + return; + } + + this.noticeService.player(target.getUniqueId(), translation -> translation.back().teleportedToLastDeathLocationByAdmin()); + this.noticeService.create() + .viewer(viewer) + .notice(translation -> translation.back().teleportedTargetPlayerToLastDeathLocation()) + .placeholder("{PLAYER}", target.getName()) + .send(); + + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackConfig.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackConfig.java new file mode 100644 index 000000000..73c5a6d95 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackConfig.java @@ -0,0 +1,18 @@ +package com.eternalcode.core.feature.back; + +import eu.okaeri.configs.OkaeriConfig; +import eu.okaeri.configs.annotation.Comment; +import java.time.Duration; +import lombok.Getter; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +public class BackConfig extends OkaeriConfig implements BackSettings { + + @Comment("# Time of teleportation time in /back command.") + public Duration backTeleportTimer = Duration.ofSeconds(5); + + @Comment("# Duration of caching last locations for /back command.") + public Duration backLocationCacheDuration = Duration.ofHours(1); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackController.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackController.java new file mode 100644 index 000000000..7180efef4 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackController.java @@ -0,0 +1,38 @@ +package com.eternalcode.core.feature.back; + +import com.eternalcode.commons.bukkit.position.PositionAdapter; +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.injector.annotations.component.Controller; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerTeleportEvent; + +@Controller +class BackController implements Listener { + + private final BackService backService; + + @Inject + BackController(BackService backService) { + this.backService = backService; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerDeath(PlayerDeathEvent event) { + Player entity = event.getEntity(); + + this.backService.markDeathLocation(entity.getUniqueId(), PositionAdapter.convert(entity.getLocation())); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerTeleport(PlayerTeleportEvent event) { + if (event.getCause() == PlayerTeleportEvent.TeleportCause.PLUGIN) { + return; + } + + this.backService.markTeleportLocation(event.getPlayer().getUniqueId(), PositionAdapter.convert(event.getFrom())); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackService.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackService.java new file mode 100644 index 000000000..51054829d --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackService.java @@ -0,0 +1,106 @@ +package com.eternalcode.core.feature.back; + +import com.eternalcode.commons.bukkit.position.Position; +import com.eternalcode.commons.bukkit.position.PositionAdapter; +import com.eternalcode.core.feature.teleport.TeleportService; +import com.eternalcode.core.feature.teleport.TeleportTaskService; +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.injector.annotations.component.Service; +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import java.util.Optional; +import java.util.UUID; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +@Service +class BackService { + + private static final String BYPASS_PERMISSION = "eternalcore.teleport.bypass"; + + private final TeleportService teleportService; + private final TeleportTaskService teleportTaskService; + private final BackSettings settings; + + private final Cache deathLocations; + private final Cache teleportLocations; + private final Cache latestLocations; + + @Inject + BackService( + TeleportService teleportService, + TeleportTaskService teleportTaskService, + BackSettings settings + ) { + this.teleportService = teleportService; + this.teleportTaskService = teleportTaskService; + this.settings = settings; + + this.deathLocations = Caffeine.newBuilder() + .expireAfterWrite(settings.backLocationCacheDuration()) + .build(); + this.teleportLocations = Caffeine.newBuilder() + .expireAfterWrite(settings.backLocationCacheDuration()) + .build(); + this.latestLocations = Caffeine.newBuilder() + .expireAfterWrite(settings.backLocationCacheDuration()) + .build(); + } + + public Optional getDeathLocation(UUID playerId) { + return Optional.ofNullable(deathLocations.getIfPresent(playerId)); + } + + public Optional getTeleportLocation(UUID playerId) { + return Optional.ofNullable(teleportLocations.getIfPresent(playerId)); + } + + public Optional getLatestLocation(UUID playerId) { + return Optional.ofNullable(latestLocations.getIfPresent(playerId)); + } + + public void markDeathLocation(UUID player, Position position) { + this.deathLocations.put(player, position); + this.latestLocations.put(player, position); + } + + public void markTeleportLocation(UUID player, Position position) { + this.teleportLocations.put(player, position); + this.latestLocations.put(player, position); + } + + public boolean teleportBack(Player target) { + Optional teleportLocation = this.getTeleportLocation(target.getUniqueId()); + + if (teleportLocation.isPresent()) { + this.teleportBack(target, PositionAdapter.convert(teleportLocation.get())); + + return true; + } + return false; + } + + public boolean teleportBackDeath(Player target) { + Optional deathLocation = this.getDeathLocation(target.getUniqueId()); + + if (deathLocation.isPresent()) { + this.teleportBack(target, PositionAdapter.convert(deathLocation.get())); + + return true; + } + return false; + } + + private void teleportBack(Player player, Location location) { + if (player.hasPermission(BYPASS_PERMISSION)) { + teleportService.teleport(player, location); + return; + } + teleportTaskService.createTeleport( + player.getUniqueId(), + PositionAdapter.convert(player.getLocation()), + PositionAdapter.convert(location), + settings.backTeleportTimer() + ); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackSettings.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackSettings.java new file mode 100644 index 000000000..91dad028a --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/BackSettings.java @@ -0,0 +1,10 @@ +package com.eternalcode.core.feature.back; + +import java.time.Duration; + +public interface BackSettings { + + Duration backTeleportTimer(); + + Duration backLocationCacheDuration(); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/BackMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/BackMessages.java new file mode 100644 index 000000000..be08f097c --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/BackMessages.java @@ -0,0 +1,17 @@ +package com.eternalcode.core.feature.back.messages; + +import com.eternalcode.multification.notice.Notice; + +public interface BackMessages { + + Notice lastLocationNotFound(); + + Notice teleportedToLastTeleportLocation(); + Notice teleportedTargetPlayerToLastTeleportLocation(); + Notice teleportedToLastTeleportLocationByAdmin(); + + Notice teleportedToLastDeathLocation(); + Notice teleportedTargetPlayerToLastDeathLocation(); + Notice teleportedToLastDeathLocationByAdmin(); + +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/ENBackMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/ENBackMessages.java new file mode 100644 index 000000000..d774d3dce --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/ENBackMessages.java @@ -0,0 +1,28 @@ +package com.eternalcode.core.feature.back.messages; + +import com.eternalcode.multification.notice.Notice; +import eu.okaeri.configs.OkaeriConfig; +import lombok.Getter; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +public class ENBackMessages extends OkaeriConfig implements BackMessages { + + public Notice lastLocationNotFound = Notice.chat( + "You don't have any last location to teleport to!"); + + public Notice teleportedToLastTeleportLocation = Notice.chat( + "You have been teleported to your last location!"); + public Notice teleportedTargetPlayerToLastTeleportLocation = Notice.chat( + "Player {PLAYER} has been teleported to their last location!"); + public Notice teleportedToLastTeleportLocationByAdmin = Notice.chat( + "You have been teleported to your last location by an administrator!"); + + public Notice teleportedToLastDeathLocation = Notice.chat( + "You have been teleported to your last death location!"); + public Notice teleportedTargetPlayerToLastDeathLocation = Notice.chat( + "Player {PLAYER} has been teleported to their last death location!"); + public Notice teleportedToLastDeathLocationByAdmin = Notice.chat( + "You have been teleported to your last death location by an administrator!"); +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/PLBackMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/PLBackMessages.java new file mode 100644 index 000000000..7db9bc8f8 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/back/messages/PLBackMessages.java @@ -0,0 +1,29 @@ +package com.eternalcode.core.feature.back.messages; + +import com.eternalcode.multification.notice.Notice; +import eu.okaeri.configs.OkaeriConfig; +import lombok.Getter; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +public class PLBackMessages extends OkaeriConfig implements BackMessages { + + public Notice lastLocationNotFound = Notice.chat( + "Nie masz żadnej ostatniej lokalizacji, do której można się teleportować!"); + + public Notice teleportedToLastTeleportLocation = Notice.chat( + "Zostałeś przeteleportowany do ostatniej lokalizacji!"); + public Notice teleportedTargetPlayerToLastTeleportLocation = Notice.chat( + "Gracz {PLAYER} został przeteleportowany do swojej ostatniej lokalizacji!"); + public Notice teleportedToLastTeleportLocationByAdmin = Notice.chat( + "Zostałeś przeteleportowany do ostatniej lokalizacji przez administratora!"); + + public Notice teleportedToLastDeathLocation = Notice.chat( + "Zostałeś przeteleportowany do ostatniej lokalizacji śmierci!"); + public Notice teleportedTargetPlayerToLastDeathLocation = Notice.chat( + "Gracz {PLAYER} został przeteleportowany do swojej ostatniej lokalizacji śmierci!"); + public Notice teleportedToLastDeathLocationByAdmin = Notice.chat( + "Zostałeś przeteleportowany do ostatniej lokalizacji śmierci przez administratora!"); + +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/command/TeleportBackCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/command/TeleportBackCommand.java deleted file mode 100644 index 078bb8bc4..000000000 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleport/command/TeleportBackCommand.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.eternalcode.core.feature.teleport.command; - -import com.eternalcode.annotations.scan.command.DescriptionDocs; -import com.eternalcode.commons.bukkit.position.PositionAdapter; -import com.eternalcode.core.feature.teleport.TeleportService; -import com.eternalcode.core.feature.teleport.TeleportTaskService; -import com.eternalcode.core.feature.teleportrequest.TeleportRequestSettings; -import com.eternalcode.core.injector.annotations.Inject; -import com.eternalcode.core.notice.NoticeService; -import com.eternalcode.core.viewer.Viewer; -import dev.rollczi.litecommands.annotations.argument.Arg; -import dev.rollczi.litecommands.annotations.command.Command; -import dev.rollczi.litecommands.annotations.context.Sender; -import dev.rollczi.litecommands.annotations.execute.Execute; -import dev.rollczi.litecommands.annotations.permission.Permission; -import java.util.Optional; -import org.bukkit.Location; -import org.bukkit.entity.Player; - -@Command(name = "back") -class TeleportBackCommand { - - private final TeleportService teleportService; - private final TeleportTaskService teleportTaskService; - private final TeleportRequestSettings settings; - private final NoticeService noticeService; - - @Inject - TeleportBackCommand(TeleportService teleportService, TeleportTaskService teleportTaskService, TeleportRequestSettings settings, NoticeService noticeService) { - this.teleportService = teleportService; - this.teleportTaskService = teleportTaskService; - this.settings = settings; - this.noticeService = noticeService; - } - - @Execute - @Permission("eternalcore.back") - @DescriptionDocs(description = "Teleport to last location") - void execute(@Sender Player player) { - Optional location = this.teleportService.getLastLocation(player.getUniqueId()); - - if (location.isEmpty()) { - this.noticeService.player(player.getUniqueId(), translation -> translation.teleport().lastLocationNoExist()); - - return; - } - - if (player.hasPermission("eternalcore.teleport.bypass")) { - this.teleportService.teleport(player, location.get()); - } else { - this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), PositionAdapter.convert(location.get()), this.settings.tpaTimer()); - } - - this.noticeService.player(player.getUniqueId(), translation -> translation.teleport().teleportedToLastLocation()); - } - - @Execute - @Permission("eternalcore.back.other") - @DescriptionDocs(description = "Teleport specified player to last location", arguments = "") - void execute(@Sender Viewer viewer, @Arg Player player) { - Optional location = this.teleportService.getLastLocation(player.getUniqueId()); - - if (location.isEmpty()) { - this.noticeService.viewer(viewer, translation -> translation.teleport().lastLocationNoExist()); - - return; - } - - if (player.hasPermission("eternalcore.teleport.bypass")){ - this.teleportService.teleport(player, location.get()); - } else { - this.teleportTaskService.createTeleport(player.getUniqueId(), PositionAdapter.convert(player.getLocation()), PositionAdapter.convert(location.get()), this.settings.tpaTimer()); - } - - this.noticeService.player(player.getUniqueId(), translation -> translation.teleport().teleportedToLastLocation()); - - this.noticeService.create() - .viewer(viewer) - .notice(translation -> translation.teleport().teleportedSpecifiedPlayerLastLocation()) - .placeholder("{PLAYER}", player.getName()) - .send(); - } - -} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleportrequest/TeleportRequestConfig.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleportrequest/TeleportRequestConfig.java index 2c2c27684..344340cc0 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleportrequest/TeleportRequestConfig.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/teleportrequest/TeleportRequestConfig.java @@ -12,6 +12,6 @@ public class TeleportRequestConfig extends OkaeriConfig implements TeleportReque @Comment("# Time of tpa requests expire") public Duration tpaRequestExpire = Duration.ofSeconds(80); - @Comment("# Time of teleportation time in /tpa commands") + @Comment("# Time of teleportation time in /tpa commands.") public Duration tpaTimer = Duration.ofSeconds(10); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java index c9c4682b5..e205e88f5 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/Translation.java @@ -1,5 +1,12 @@ package com.eternalcode.core.translation; +import com.eternalcode.core.feature.back.messages.BackMessages; +import com.eternalcode.core.feature.freeze.messages.FreezeMessages; +import com.eternalcode.core.feature.playtime.messages.PlaytimeMessages; +import com.eternalcode.core.feature.clear.messages.ClearMessages; +import com.eternalcode.core.feature.container.messages.ContainerMessages; +import com.eternalcode.core.feature.repair.messages.RepairMessages; +import com.eternalcode.core.litecommand.argument.messages.ArgumentMessages; import com.eternalcode.core.feature.adminchat.messages.AdminChatMessages; import com.eternalcode.core.feature.afk.messages.AfkMessages; import com.eternalcode.core.feature.automessage.messages.AutoMessageMessages; @@ -67,11 +74,6 @@ interface TeleportSection { // Coordinates XYZ Notice teleportedToCoordinates(); Notice teleportedSpecifiedPlayerToCoordinates(); - - // Back - Notice teleportedToLastLocation(); - Notice teleportedSpecifiedPlayerLastLocation(); - Notice lastLocationNoExist(); } interface ChatSection { @@ -192,6 +194,7 @@ interface ItemSection { SudoMessages sudo(); // Teleport Section TeleportSection teleport(); + BackMessages back(); // teleport to random player section. TeleportToRandomPlayerMessages teleportToRandomPlayer(); // Random Teleport Section diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java index 1701c89a3..669e633d5 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/ENTranslation.java @@ -3,6 +3,7 @@ import com.eternalcode.core.feature.adminchat.messages.ENAdminChatMessages; import com.eternalcode.core.feature.afk.messages.ENAfkMessages; import com.eternalcode.core.feature.automessage.messages.ENAutoMessageMessages; +import com.eternalcode.core.feature.back.messages.ENBackMessages; import com.eternalcode.core.feature.broadcast.messages.ENBroadcastMessages; import com.eternalcode.core.feature.burn.messages.ENBurnMessages; import com.eternalcode.core.feature.butcher.messages.ENButcherMessages; @@ -235,6 +236,12 @@ public static class ENTeleportSection extends OkaeriConfig implements TeleportSe public Notice lastLocationNoExist = Notice.chat("Last location is not exist!"); } + @Comment({ + " ", + "# This section is responsible for the messages of the /back command", + }) + public ENBackMessages back = new ENBackMessages(); + @Comment({ " ", "# This section is responsible for the messages of the /tprp command", diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java index 1bae96122..0ac50cbaf 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java @@ -1,5 +1,14 @@ package com.eternalcode.core.translation.implementation; +import com.eternalcode.core.feature.back.messages.PLBackMessages; +import com.eternalcode.core.feature.freeze.messages.PLFreezeMessages; +import com.eternalcode.core.feature.near.messages.PLNearMessages; +import com.eternalcode.core.feature.playtime.messages.PLPlaytimeMessages; +import com.eternalcode.core.feature.clear.messages.PLClearMessages; +import com.eternalcode.core.feature.container.messages.PLContainerMessages; +import com.eternalcode.core.feature.repair.messages.PLRepairMessages; +import com.eternalcode.core.litecommand.argument.messages.PLArgumentMessages; +import com.eternalcode.core.configuration.contextual.ConfigItem; import com.eternalcode.core.feature.adminchat.messages.PLAdminChatMessages; import com.eternalcode.core.feature.afk.messages.PLAfkMessages; import com.eternalcode.core.feature.automessage.messages.PLAutoMessageMessages; @@ -245,6 +254,12 @@ public static class PLTeleportSection extends OkaeriConfig implements TeleportSe public Notice lastLocationNoExist = Notice.chat("Nie ma zapisanej ostatniej lokalizacji!"); } + @Comment({ + " ", + "# Ta sekcja odpowiada za wiadomości komendy /back" + }) + public PLBackMessages back = new PLBackMessages(); + @Comment({ " ", "# Ta sekcja odpowiada za wiadomości komendy /tprp"