diff --git a/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeCommand.java b/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeCommand.java index cd87e28ee..662033d8a 100644 --- a/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeCommand.java +++ b/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeCommand.java @@ -26,7 +26,7 @@ void executeSet(@Context Player player, @Arg("homeName") String homeName) { @Execute(name = "teleport") void executeTeleport(@Context Player player, @Arg("homeName") String homeName) { Location location = this.homeService.getHome(player.getUniqueId(), homeName) - .map(home -> home.getLocation()) + .map(home -> home.getPosition()) .orElse(null); if (location == null) { diff --git a/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeListener.java b/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeListener.java index 880629c5c..0b2905dcb 100644 --- a/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeListener.java +++ b/eternalcore-api-example/src/main/java/com/eternalcode/example/feature/home/ApiHomeListener.java @@ -27,7 +27,7 @@ public ApiHomeListener(Server server) { @EventHandler void onHomeOverride(HomeOverrideEvent event) { - Location location = event.getLocation(); + Location location = event.getPosition(); String name = event.getHomeName(); int blockX = location.getBlockX(); @@ -39,7 +39,7 @@ void onHomeOverride(HomeOverrideEvent event) { @EventHandler void onHomeCreate(HomeCreateEvent event) { - Location location = event.getLocation(); + Location location = event.getPosition(); String name = event.getHomeName(); int blockX = location.getBlockX(); @@ -59,7 +59,7 @@ void onHomeCreateTroll(HomeCreateEvent event) { } if (player.hasPotionEffect(PotionEffectType.BAD_OMEN)) { - event.setLocation(player.getWorld().getSpawnLocation()); + event.setPosition(player.getWorld().getSpawnLocation()); event.setHomeName("bimbimbambam"); System.out.println("Troll: Home location overridden to world spawn."); } diff --git a/eternalcore-api/build.gradle.kts b/eternalcore-api/build.gradle.kts index d174dbe4c..7951d15fb 100644 --- a/eternalcore-api/build.gradle.kts +++ b/eternalcore-api/build.gradle.kts @@ -6,5 +6,6 @@ plugins { dependencies { compileOnly("org.spigotmc:spigot-api:${Versions.SPIGOT_API}") + compileOnly("com.eternalcode:eternalcode-commons-bukkit:${Versions.ETERNALCODE_COMMONS}") api("org.jetbrains:annotations:${Versions.JETBRAINS_ANNOTATIONS}") } diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/Home.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/Home.java index 8b6b1cd23..a9c1cc9ff 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/Home.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/Home.java @@ -1,11 +1,12 @@ package com.eternalcode.core.feature.home; +import com.eternalcode.commons.bukkit.position.Position; + import java.util.UUID; -import org.bukkit.Location; public interface Home { - Location getLocation(); + Position getPosition(); String getName(); diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java index 911b5b6fa..25f4428d9 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/HomeService.java @@ -4,6 +4,8 @@ import java.util.Map; import java.util.Optional; import java.util.UUID; + +import com.eternalcode.commons.bukkit.position.Position; import org.bukkit.Location; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; @@ -23,7 +25,7 @@ public interface HomeService { void deleteHome(UUID playerUniqueId, String name); @Nullable - Home createHome(UUID playerUniqueId, String name, Location location); + Home createHome(UUID playerUniqueId, String name, Position position); int getHomeLimit(Player player); } diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeCreateEvent.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeCreateEvent.java index b9d2e426f..6bb29b8ef 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeCreateEvent.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeCreateEvent.java @@ -1,6 +1,8 @@ package com.eternalcode.core.feature.home.event; import java.util.UUID; + +import com.eternalcode.commons.bukkit.position.Position; import org.bukkit.Location; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; @@ -16,15 +18,16 @@ public class HomeCreateEvent extends Event implements Cancellable { private final UUID playerUniqueId; private final UUID homeUniqueId; private String homeName; - private Location location; + private Position position; private boolean cancelled; - public HomeCreateEvent(UUID playerUniqueId, String homeName, UUID homeUniqueId, Location location) { + public HomeCreateEvent(UUID playerUniqueId, String homeName, UUID homeUniqueId, Position position) { super(false); + this.playerUniqueId = playerUniqueId; this.homeName = homeName; this.homeUniqueId = homeUniqueId; - this.location = location; + this.position = position; } public UUID getHomeUniqueId() { @@ -43,12 +46,12 @@ public UUID getPlayerUniqueId() { return this.playerUniqueId; } - public Location getLocation() { - return this.location; + public Position getPosition() { + return this.position; } - public void setLocation(Location location) { - this.location = location; + public void setPosition(Position position) { + this.position = position; } @Override diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeOverrideEvent.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeOverrideEvent.java index 8fd427321..6e7220aea 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeOverrideEvent.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/HomeOverrideEvent.java @@ -1,6 +1,7 @@ package com.eternalcode.core.feature.home.event; -import com.eternalcode.core.feature.home.Home; +import com.eternalcode.commons.bukkit.position.Position; + import java.util.UUID; import org.bukkit.Location; import org.bukkit.event.Cancellable; @@ -17,16 +18,16 @@ public class HomeOverrideEvent extends Event implements Cancellable { private final UUID playerUniqueId; private final UUID homeUniqueId; private String homeName; - private Location location; + private Position position; private boolean cancelled; - public HomeOverrideEvent(UUID playerUniqueId, String homeName, UUID homeUniqueId, Location location) { + public HomeOverrideEvent(UUID playerUniqueId, String homeName, UUID homeUniqueId, Position position) { super(false); this.playerUniqueId = playerUniqueId; this.homeName = homeName; this.homeUniqueId = homeUniqueId; - this.location = location; + this.position = position; } public String getHomeName() { @@ -45,12 +46,12 @@ public UUID getPlayerUniqueId() { return this.playerUniqueId; } - public void setLocation(Location location) { - this.location = location; + public void setPosition(Position position) { + this.position = position; } - public Location getLocation() { - return this.location; + public Position getPosition() { + return this.position; } @Override diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/PreHomeTeleportEvent.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/PreHomeTeleportEvent.java index b0ecc3d08..96be3709b 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/PreHomeTeleportEvent.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/home/event/PreHomeTeleportEvent.java @@ -1,8 +1,8 @@ package com.eternalcode.core.feature.home.event; +import com.eternalcode.commons.bukkit.position.Position; import com.eternalcode.core.feature.home.Home; import java.util.UUID; -import org.bukkit.Location; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; @@ -16,7 +16,7 @@ public class PreHomeTeleportEvent extends Event implements Cancellable { private final UUID playerUniqueId; private final Home home; - private Location location; + private Position position; private boolean cancelled; public PreHomeTeleportEvent(UUID playerUniqueId, Home home) { @@ -24,19 +24,19 @@ public PreHomeTeleportEvent(UUID playerUniqueId, Home home) { this.playerUniqueId = playerUniqueId; this.home = home; - this.location = home.getLocation(); + this.position = home.getPosition(); } public Home getHome() { return this.home; } - public Location getLocation() { - return this.location; + public Position getPosition() { + return this.position; } - public void setLocation(Location location) { - this.location = location; + public void setPosition(Position position) { + this.position = position; } diff --git a/eternalcore-api/src/main/java/com/eternalcode/core/feature/jail/JailedPlayer.java b/eternalcore-api/src/main/java/com/eternalcode/core/feature/jail/JailedPlayer.java index 4a8d62a1b..e8a63c298 100644 --- a/eternalcore-api/src/main/java/com/eternalcode/core/feature/jail/JailedPlayer.java +++ b/eternalcore-api/src/main/java/com/eternalcode/core/feature/jail/JailedPlayer.java @@ -1,5 +1,7 @@ package com.eternalcode.core.feature.jail; +import com.eternalcode.commons.bukkit.position.Position; + import java.time.Duration; import java.time.Instant; import java.util.UUID; @@ -10,12 +12,14 @@ public class JailedPlayer { private final Instant detainedAt; private final Duration prisonTime; private final String detainedBy; + private final Position lastPosition; - public JailedPlayer(UUID player, Instant detainedAt, Duration prisonTime, String lockedUpBy) { + public JailedPlayer(UUID player, Instant detainedAt, Duration prisonTime, String detainedBy, Position lastPosition) { this.player = player; this.detainedAt = detainedAt; this.prisonTime = prisonTime; - this.detainedBy = lockedUpBy; + this.detainedBy = detainedBy; + this.lastPosition = lastPosition; } public UUID getPlayerUniqueId() { @@ -34,6 +38,10 @@ public Duration getPrisonTime() { return this.prisonTime; } + public Position getLastPosition() { + return this.lastPosition; + } + public boolean isPrisonExpired() { return this.detainedAt.plus(this.prisonTime).isBefore(Instant.now()); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0009_Rename_allowed_to_restricted_jail_commands.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0009_Rename_allowed_to_restricted_jail_commands.java new file mode 100644 index 000000000..7b9a28a21 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0009_Rename_allowed_to_restricted_jail_commands.java @@ -0,0 +1,13 @@ +package com.eternalcode.core.configuration.migrations; + +import static eu.okaeri.configs.migrate.ConfigMigrationDsl.move; +import eu.okaeri.configs.migrate.builtin.NamedMigration; + +class Migration_0009_Rename_allowed_to_restricted_jail_commands extends NamedMigration { + + Migration_0009_Rename_allowed_to_restricted_jail_commands() { + super("Rename allowed to restricted jail commands", + move("jail.allowedCommands", "jail.restrictedCommands") + ); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0010_Rename_jail_section.java b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0010_Rename_jail_section.java new file mode 100644 index 000000000..50f5e72ca --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/configuration/migrations/Migration_0010_Rename_jail_section.java @@ -0,0 +1,37 @@ +package com.eternalcode.core.configuration.migrations; + +import static eu.okaeri.configs.migrate.ConfigMigrationDsl.move; + +import eu.okaeri.configs.migrate.builtin.NamedMigration; + +public class Migration_0010_Rename_jail_section extends NamedMigration { + + Migration_0010_Rename_jail_section() { + super( + "Rename jail section", + + move("jailSection.jailLocationSet", "jail.locationSet"), + move("jailSection.jailLocationRemove", "jail.locationRemove"), + move("jailSection.jailLocationNotSet", "jail.locationNotSet"), + move("jailSection.jailLocationOverride", "jail.locationOverride"), + + move("jailSection.jailDetainBroadcast", "jail.detainBroadcast"), + move("jailSection.jailDetainPrivate", "jail.detained"), + move("jailSection.jailDetainCountdown", "jail.detainCountdown"), + move("jailSection.jailDetainOverride", "jail.detainOverride"), + move("jailSection.jailDetainAdmin", "jail.detainAdmin"), + + move("jailSection.jailReleaseBroadcast", "jail.releaseBroadcast"), + move("jailSection.jailReleasePrivate", "jail.released"), + move("jailSection.jailReleaseAll", "jail.releaseAll"), + move("jailSection.jailReleaseNoPlayers", "jail.releaseNoPlayers"), + move("jailSection.jailIsNotPrisoner", "jail.isNotPrisoner"), + + move("jailSection.jailListHeader", "jail.listHeader"), + move("jailSection.jailListEmpty", "jail.listEmpty"), + move("jailSection.jailListPlayerEntry", "jail.listPlayerEntry"), + + move("jailSection.jailCannotUseCommand", "jail.cannotUseCommand") + ); + } +} 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 fc15363ae..b0c61da90 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 @@ -10,7 +10,9 @@ public class Migrations { new Migration_0003_Move_tprp_to_dedicated_section(), new Migration_0006_Move_alert_to_broadcast_section(), new Migration_0007_Move_clear_to_dedicated_section(), - new Migration_0008_Move_repair_to_dedicated_section() + new Migration_0008_Move_repair_to_dedicated_section(), + new Migration_0009_Rename_allowed_to_restricted_jail_commands(), + new Migration_0010_Rename_jail_section() }; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/database/persister/PositionPersister.java b/eternalcore-core/src/main/java/com/eternalcode/core/database/persister/PositionPersister.java new file mode 100644 index 000000000..f9239cd8b --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/database/persister/PositionPersister.java @@ -0,0 +1,70 @@ +package com.eternalcode.core.database.persister; + +import com.eternalcode.commons.bukkit.position.Position; +import com.eternalcode.commons.bukkit.position.PositionAdapter; +import com.j256.ormlite.field.FieldType; +import com.j256.ormlite.field.SqlType; +import com.j256.ormlite.field.types.BaseDataType; +import com.j256.ormlite.support.DatabaseResults; + +import java.sql.SQLException; + +public class PositionPersister extends BaseDataType { + + private static final PositionPersister instance = new PositionPersister(); + + private PositionPersister() { + super(SqlType.LONG_STRING, new Class[] {Position.class}); + } + + @Override + public Object javaToSqlArg(FieldType fieldType, Object javaObject) { + if (javaObject == null) { + return null; + } + + if (!(javaObject instanceof Position position)) { + throw new IllegalArgumentException("Invalid object type: " + javaObject.getClass().getName()); + } + + return position.toString(); + } + + @Override + public Object resultToSqlArg(FieldType fieldType, DatabaseResults results, int columnPos) throws SQLException { + return results.getString(columnPos); + } + + @Override + public Object parseDefaultString(FieldType fieldType, String defaultStr) { + return String.valueOf(defaultStr); + } + + @Override + public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) { + String s = (String) sqlArg; + + if (s == null) { + return null; + } + + String[] params = s.split("/"); + + if (params.length != 6) { + throw new IllegalArgumentException("Invalid position format: " + s); + } + + return new Position( + Double.parseDouble(params[1]), + Double.parseDouble(params[2]), + Double.parseDouble(params[3]), + Float.parseFloat(params[4]), + Float.parseFloat(params[5]), + params[0] + ); + } + + public static PositionPersister getSingleton() { + return instance; + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeImpl.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeImpl.java index 4d46f93bb..c17eac5cc 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeImpl.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeImpl.java @@ -2,27 +2,28 @@ import java.util.Objects; import java.util.UUID; -import org.bukkit.Location; + +import com.eternalcode.commons.bukkit.position.Position; public class HomeImpl implements Home { private final UUID uuid; private final UUID owner; private final String name; - private final Location location; + private final Position position; - public HomeImpl(UUID uuid, UUID owner, String name, Location location) { + public HomeImpl(UUID uuid, UUID owner, String name, Position position) { this.uuid = uuid; this.owner = owner; this.name = name; - this.location = location; + this.position = position; } - public HomeImpl(UUID owner, String name, Location location) { + public HomeImpl(UUID owner, String name, Position position) { this.owner = owner; this.uuid = UUID.randomUUID(); this.name = name; - this.location = location; + this.position = position; } @Override @@ -41,8 +42,8 @@ public String getName() { } @Override - public Location getLocation() { - return this.location; + public Position getPosition() { + return this.position; } @Override diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java index 2909214dd..c033f2a88 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeManager.java @@ -1,5 +1,6 @@ package com.eternalcode.core.feature.home; +import com.eternalcode.commons.bukkit.position.Position; import com.eternalcode.core.event.EventCaller; import com.eternalcode.core.feature.home.database.HomeRepository; import com.eternalcode.core.feature.home.event.HomeCreateEvent; @@ -46,33 +47,33 @@ private HomeManager( } @Override - public Home createHome(UUID playerUniqueId, String name, Location location) { + public Home createHome(UUID playerUniqueId, String name, Position position) { Map homes = this.userHomes.computeIfAbsent(playerUniqueId, k -> new HashMap<>()); Home home = homes.get(name); if (home != null) { - HomeOverrideEvent event = this.eventCaller.callEvent(new HomeOverrideEvent(playerUniqueId, name, playerUniqueId, location)); + HomeOverrideEvent event = this.eventCaller.callEvent(new HomeOverrideEvent(playerUniqueId, name, playerUniqueId, position)); if (event.isCancelled()) { return home; } - Home homeInEvent = new HomeImpl(playerUniqueId, event.getHomeName(), event.getLocation()); + Home homeInEvent = new HomeImpl(playerUniqueId, event.getHomeName(), event.getPosition()); homes.put(event.getHomeName(), homeInEvent); this.repository.deleteHome(playerUniqueId, name).thenAccept(completable -> this.repository.saveHome(homeInEvent)); return homeInEvent; } - HomeCreateEvent event = new HomeCreateEvent(playerUniqueId, name, playerUniqueId, location); + HomeCreateEvent event = new HomeCreateEvent(playerUniqueId, name, playerUniqueId, position); this.eventCaller.callEvent(event); if (event.isCancelled()) { return null; } - Home homeInEvent = new HomeImpl(playerUniqueId, event.getHomeName(), event.getLocation()); + Home homeInEvent = new HomeImpl(playerUniqueId, event.getHomeName(), event.getPosition()); homes.put(event.getHomeName(), homeInEvent); this.repository.saveHome(homeInEvent); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java index f4d695763..46e0963f5 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomePlaceholderSetup.java @@ -32,7 +32,7 @@ void setUp(PlaceholderRegistry placeholderRegistry) { PlaceholderReplacer.of("homes_count", (text, targetPlayer) -> this.homesCount(targetPlayer)), PlaceholderReplacer.of("homes_limit", (text, targetPlayer) -> this.homesLimit(targetPlayer)), PlaceholderReplacer.of("homes_left", (text, targetPlayer) -> this.homesLeft(targetPlayer)) - ).forEach(placeholder -> placeholderRegistry.registerPlaceholder(placeholder)); + ).forEach(placeholderRegistry::registerPlaceholder); } private String homesLeft(Player targetPlayer) { diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeTeleportService.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeTeleportService.java index d8aed23b6..70d1b780c 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeTeleportService.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/HomeTeleportService.java @@ -52,13 +52,13 @@ public void teleport(Player player, Home home) { ? Duration.ZERO : this.homesSettings.teleportTimeToHomes(); - Position playerLocation = PositionAdapter.convert(player.getLocation()); - Position homeLocation = PositionAdapter.convert(pre.getLocation()); + Position playerPosition = PositionAdapter.convert(player.getLocation()); + Position homeLocation = pre.getPosition(); HomeTeleportEvent post = new HomeTeleportEvent(uniqueId, home); Teleport teleport = this.teleportTaskService.createTeleport( uniqueId, - playerLocation, + playerPosition, homeLocation, teleportTime ); diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/command/SetHomeCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/command/SetHomeCommand.java index 0ea499913..30f6ef14f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/command/SetHomeCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/command/SetHomeCommand.java @@ -1,6 +1,7 @@ package com.eternalcode.core.feature.home.command; import com.eternalcode.annotations.scan.command.DescriptionDocs; +import com.eternalcode.commons.bukkit.position.PositionAdapter; import com.eternalcode.core.event.EventCaller; import com.eternalcode.core.feature.home.HomeService; import com.eternalcode.core.feature.home.HomesSettings; @@ -54,7 +55,7 @@ private void setOrOverrideHome(User user, Player player, String homeName) { UUID uniqueId = user.getUniqueId(); if (this.homeService.hasHome(uniqueId, homeName)) { - this.homeService.createHome(uniqueId, homeName, player.getLocation()); + this.homeService.createHome(uniqueId, homeName, PositionAdapter.convert(player.getLocation())); this.noticeService.create() .user(user) @@ -84,7 +85,7 @@ private void setOrOverrideHome(User user, Player player, String homeName) { return; } - this.homeService.createHome(uniqueId, homeName, player.getLocation()); + this.homeService.createHome(uniqueId, homeName, PositionAdapter.convert(player.getLocation())); this.noticeService.create() .user(user) .notice(translation -> translation.home().create()) diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/database/HomeTable.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/database/HomeTable.java index fd8e913d0..48a6b936f 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/database/HomeTable.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/database/HomeTable.java @@ -1,12 +1,12 @@ package com.eternalcode.core.feature.home.database; -import com.eternalcode.core.database.persister.LocationPersister; +import com.eternalcode.commons.bukkit.position.Position; +import com.eternalcode.core.database.persister.PositionPersister; import com.eternalcode.core.feature.home.HomeImpl; import com.eternalcode.core.feature.home.Home; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; import java.util.UUID; -import org.bukkit.Location; @DatabaseTable(tableName = "eternal_core_homes") class HomeTable { @@ -20,24 +20,24 @@ class HomeTable { @DatabaseField(columnName = "name") private String name; - @DatabaseField(columnName = "location", persisterClass = LocationPersister.class) - private Location location; + @DatabaseField(columnName = "location", persisterClass = PositionPersister.class) + private Position position; HomeTable() {} - HomeTable(UUID uuid, UUID owner, String name, Location location) { + HomeTable(UUID uuid, UUID owner, String name, Position position) { this.uuid = uuid; this.owner = owner; this.name = name; - this.location = location; + this.position = position; } Home toHome() { - return new HomeImpl(this.uuid, this.owner, this.name, this.location); + return new HomeImpl(this.uuid, this.owner, this.name, this.position); } static HomeTable from(Home home) { - return new HomeTable(home.getUuid(), home.getOwner(), home.getName(), home.getLocation()); + return new HomeTable(home.getUuid(), home.getOwner(), home.getName(), home.getPosition()); } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/homeadmin/HomeAdminCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/homeadmin/HomeAdminCommand.java index c30950cd8..273ee684d 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/homeadmin/HomeAdminCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/home/homeadmin/HomeAdminCommand.java @@ -1,6 +1,8 @@ package com.eternalcode.core.feature.home.homeadmin; import com.eternalcode.annotations.scan.command.DescriptionDocs; +import com.eternalcode.commons.bukkit.position.Position; +import com.eternalcode.commons.bukkit.position.PositionAdapter; import com.eternalcode.core.configuration.implementation.PluginConfiguration; import com.eternalcode.core.feature.home.Home; import com.eternalcode.core.feature.home.HomeManager; @@ -40,9 +42,12 @@ public HomeAdminCommand( } @Execute(name = "sethome") - @DescriptionDocs(description = "Set home for user", arguments = " [location]") + @DescriptionDocs(description = "Set home for user", arguments = " [position]") void setHome(@Context Player sender, @Arg("player home") PlayerHomeEntry playerHomeEntry, @Arg Optional location) { Location optionalLocation = location.orElse(sender.getLocation()); + optionalLocation.setWorld(sender.getWorld()); + optionalLocation.setYaw(sender.getLocation().getYaw()); + optionalLocation.setPitch(sender.getLocation().getPitch()); Home home = playerHomeEntry.home(); Player player = playerHomeEntry.player(); @@ -51,8 +56,10 @@ void setHome(@Context Player sender, @Arg("player home") PlayerHomeEntry playerH boolean hasHome = this.homeManager.hasHome(uniqueId, home); String name = home.getName(); + Position position = PositionAdapter.convert(optionalLocation); + if (hasHome) { - this.homeManager.createHome(uniqueId, name, optionalLocation); + this.homeManager.createHome(uniqueId, name, position); this.noticeService.create() .notice(translate -> translate.home().overrideHomeLocationAsAdmin()) .placeholder("{HOME}", name) @@ -63,7 +70,7 @@ void setHome(@Context Player sender, @Arg("player home") PlayerHomeEntry playerH return; } - this.homeManager.createHome(uniqueId, name, optionalLocation); + this.homeManager.createHome(uniqueId, name, position); this.noticeService.create() .notice(translate -> translate.home().createAsAdmin()) .placeholder("{HOME}", name) @@ -122,7 +129,8 @@ void home(@Context Player player, @Arg("player home") PlayerHomeEntry playerHome return; } - PaperLib.teleportAsync(player, homeOption.get().getLocation()); + Location homeLocation = PositionAdapter.convert(homeOption.get().getPosition()); + PaperLib.teleportAsync(player, homeLocation); } @Execute(name = "list") @@ -140,7 +148,7 @@ void list(@Context Viewer viewer, @Arg User user) { private String formattedListUserHomes(UUID uniqueId) { return this.homeManager.getHomes(uniqueId).stream() - .map(home -> home.getName()) + .map(Home::getName) .collect(Collectors.joining(this.pluginConfiguration.format.separator)); } } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/jail/JailCommand.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/jail/JailCommand.java index 7e4358954..87069f1af 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/jail/JailCommand.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/jail/JailCommand.java @@ -1,7 +1,6 @@ package com.eternalcode.core.feature.jail; import com.eternalcode.annotations.scan.command.DescriptionDocs; -import com.eternalcode.annotations.scan.permission.PermissionDocs; import com.eternalcode.core.injector.annotations.Inject; import com.eternalcode.core.notice.NoticeService; import com.eternalcode.core.util.DurationUtil; @@ -11,21 +10,23 @@ import dev.rollczi.litecommands.annotations.context.Context; import dev.rollczi.litecommands.annotations.execute.Execute; import dev.rollczi.litecommands.annotations.permission.Permission; -import java.time.Duration; import org.bukkit.Location; import org.bukkit.Server; import org.bukkit.entity.Player; +import java.time.Duration; + +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_BYPASS_PERMISSION; +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_COMMAND_PERMISSION; +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_DETAIN_PERMISSION; +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_LIST_PERMISSION; +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_RELEASE_PERMISSION; +import static com.eternalcode.core.feature.jail.JailPermissionConstant.JAIL_SETUP_PERMISSION; + @Command(name = "jail") -@PermissionDocs( - name = "Jail Bypass", - permission = JailCommand.JAIL_BYPASS, - description = "Permission allows to bypass jail punishment" -) +@Permission(JAIL_COMMAND_PERMISSION) class JailCommand { - static final String JAIL_BYPASS = "eternalcore.jail.bypass"; - private final JailService jailService; private final NoticeService noticeService; private final JailSettings jailSettings; @@ -41,7 +42,7 @@ class JailCommand { @Async @Execute(name = "setup") - @Permission("eternalcore.jail.setup") + @Permission(JAIL_SETUP_PERMISSION) @DescriptionDocs(description = "Define jail spawn area") void executeJailSetup(@Context Player player) { Location location = player.getLocation(); @@ -51,15 +52,15 @@ void executeJailSetup(@Context Player player) { this.noticeService.create() .notice(translation -> (isLastJailSet - ? translation.jailSection().jailLocationOverride() - : translation.jailSection().jailLocationSet())) + ? translation.jail().locationOverride() + : translation.jail().locationSet())) .player(player.getUniqueId()) .send(); } @Async @Execute(name = "setup") - @Permission("eternalcore.jail.setup") + @Permission(JAIL_SETUP_PERMISSION) @DescriptionDocs(description = "Define jail spawn area", arguments = "") void executeJailSetup(@Context Player player, @Arg Location location) { boolean isLastJailSet = this.jailService.getJailAreaLocation().isPresent(); @@ -69,15 +70,15 @@ void executeJailSetup(@Context Player player, @Arg Location location) { this.noticeService.create() .notice(translation -> (isLastJailSet - ? translation.jailSection().jailLocationOverride() - : translation.jailSection().jailLocationSet())) + ? translation.jail().locationOverride() + : translation.jail().locationSet())) .player(player.getUniqueId()) .send(); } @Async @Execute(name = "remove") - @Permission("eternalcore.jail.setup") + @Permission(JAIL_SETUP_PERMISSION) @DescriptionDocs(description = "Remove jail spawn area") void executeJailRemove(@Context Player player) { if (this.isPrisonAvailable(player)) { @@ -87,36 +88,36 @@ void executeJailRemove(@Context Player player) { this.jailService.removeJailArea(); this.noticeService.create() - .notice(translation -> translation.jailSection().jailLocationRemove()) + .notice(translation -> translation.jail().locationRemoved()) .player(player.getUniqueId()) .send(); } @Execute(name = "detain") - @Permission("eternalcore.jail.detain") + @Permission(JAIL_DETAIN_PERMISSION) @DescriptionDocs(description = "Detain self") void executeJailDetainSelf(@Context Player player) { this.executeJailDetainForTime(player, player, this.jailSettings.defaultJailDuration()); } @Execute(name = "detain") - @Permission("eternalcore.jail.detain") + @Permission(JAIL_DETAIN_PERMISSION) @DescriptionDocs(description = "Detain a player", arguments = "") void executeJailDetain(@Context Player player, @Arg Player target) { this.executeJailDetainForTime(player, target, this.jailSettings.defaultJailDuration()); } @Execute(name = "detain") - @Permission("eternalcore.jail.detain") + @Permission(JAIL_DETAIN_PERMISSION) @DescriptionDocs(description = "Detain a player for some time", arguments = "