Skip to content

Commit

Permalink
GH-835 Add permission-based access to warps (#856)
Browse files Browse the repository at this point in the history
* Add possibility to manage warp permissions

* Change warp permission feature

* Add config description

* Resolve CitralFlo suggestion

Co-authored-by: Michał Wojtas <[email protected]>

* Refactor and enhance warp permission handling

* Update eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eternalcore-core/src/main/java/com/eternalcode/core/translation/implementation/PLTranslation.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpServiceImpl.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/data/WarpDataDataRepositoryImpl.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/data/WarpDataDataRepositoryImpl.java

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Fix repository name, check if permission already exist.

* Follow mr. @Rollczi review.

* Follow mr. @Rollczi review. v2

* Fix synchronized

* Fix merge

* Fix events life cycle

* Fix gui permissions

* Fix cdn

* Fix cdn

* Fix cdn.

---------

Co-authored-by: Michał Wojtas <[email protected]>
Co-authored-by: Martin Sulikowski <[email protected]>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Rollczi <[email protected]>
  • Loading branch information
5 people authored Jan 12, 2025
1 parent 8439bf0 commit 015a8be
Show file tree
Hide file tree
Showing 26 changed files with 658 additions and 155 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,26 @@

import org.bukkit.Location;

import java.util.List;
import org.bukkit.permissions.Permissible;

public interface Warp {

Location getLocation();

String getName();

List<String> getPermissions();

default boolean hasPermissions(Permissible permissible) {
List<String> permissions = this.getPermissions();
if (permissions.isEmpty()) {
return true;
}

return permissions
.stream()
.anyMatch(permission -> permissible.hasPermission(permission));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,23 @@

import java.util.Collection;
import java.util.Optional;
import org.jetbrains.annotations.ApiStatus.Experimental;

public interface WarpService {

Warp createWarp(String name, Location location);

void removeWarp(String warp);

boolean warpExists(String name);
@Experimental
Warp addPermissions(String warp, String... permissions);

Optional<Warp> findWarp(String name);
@Experimental
Warp removePermissions(String warp, String... permissions);

boolean isExist(String name);

Collection<String> getNamesOfWarps();
Optional<Warp> findWarp(String name);

boolean hasWarps();
Collection<Warp> getWarps();
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package com.eternalcode.core.feature.warp.event;

import com.eternalcode.core.feature.warp.Warp;
import com.google.common.base.Preconditions;
import java.time.Duration;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.Nullable;

/**
* Called before teleportation to warp.
Expand All @@ -16,12 +20,15 @@ public class PreWarpTeleportEvent extends Event implements Cancellable {
private final Player player;
private Warp warp;
private boolean cancelled;
private Duration teleportTime;
private @Nullable Location destination;

public PreWarpTeleportEvent(Player player, Warp warp) {
public PreWarpTeleportEvent(Player player, Warp warp, Duration teleportTime) {
super(false);

this.player = player;
this.warp = warp;
this.teleportTime = teleportTime;
}

public Player getPlayer() {
Expand All @@ -33,9 +40,28 @@ public Warp getWarp() {
}

public void setWarp(Warp warp) {
Preconditions.checkNotNull(warp, "Warp cannot be null");
this.warp = warp;
}

public Duration getTeleportTime() {
return this.teleportTime;
}

public void setTeleportTime(Duration teleportTime) {
Preconditions.checkNotNull(teleportTime, "Teleport time cannot be null");
this.teleportTime = teleportTime;
}

public Location getDestination() {
return this.destination != null ? this.destination : this.warp.getLocation();
}

public void setDestination(Location destination) {
Preconditions.checkNotNull(destination, "Destination cannot be null");
this.destination = destination;
}

@Override
public boolean isCancelled() {
return this.cancelled;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.eternalcode.core.feature.warp.event;

import com.eternalcode.core.feature.warp.Warp;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

Expand All @@ -15,12 +15,14 @@ public class WarpTeleportEvent extends Event {

private final Player player;
private final Warp warp;
private final Location destination;

public WarpTeleportEvent(Player player, Warp warp) {
public WarpTeleportEvent(Player player, Warp warp, Location destination) {
super(false);

this.player = player;
this.warp = warp;
this.destination = destination;
}

public Player getPlayer() {
Expand All @@ -31,6 +33,10 @@ public Warp getWarp() {
return this.warp;
}

public Location getDestination() {
return this.destination;
}

@Override
public HandlerList getHandlers() {
return HANDLER_LIST;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.eternalcode.core.configuration.implementation;

import com.eternalcode.commons.bukkit.position.Position;
import com.eternalcode.core.configuration.ReloadableConfig;
import com.eternalcode.core.injector.annotations.component.ConfigurationFile;
import com.eternalcode.commons.bukkit.position.Position;
import net.dzikoysk.cdn.entity.Description;
import net.dzikoysk.cdn.entity.Exclude;
import net.dzikoysk.cdn.source.Resource;
Expand All @@ -21,7 +21,8 @@ public class LocationsConfiguration implements ReloadableConfig {
@Description("# This is spawn location, for your own safety, please don't touch it.")
public Position spawn = EMPTY_POSITION;

@Description("# These are warp locations, for your own safety, please don't touch it.")
@Description("# Warps now are stored in warps.yml. This is deprecated.")
@Deprecated
public Map<String, Position> warps = new HashMap<>();

@Description("# This is jail location, for your own safety, please don't touch it.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@
import com.eternalcode.core.feature.afk.AfkSettings;
import com.eternalcode.core.feature.automessage.AutoMessageSettings;
import com.eternalcode.core.feature.chat.ChatSettings;
import com.eternalcode.core.feature.jail.JailSettings;
import com.eternalcode.core.feature.helpop.HelpOpSettings;
import com.eternalcode.core.feature.jail.JailSettings;
import com.eternalcode.core.feature.randomteleport.RandomTeleportSettingsImpl;
import com.eternalcode.core.feature.spawn.SpawnSettings;
import com.eternalcode.core.injector.annotations.Bean;
import com.eternalcode.core.injector.annotations.component.ConfigurationFile;
import com.eternalcode.core.feature.teleportrequest.TeleportRequestSettings;
import java.util.LinkedHashMap;
import java.util.Set;
import net.dzikoysk.cdn.entity.Contextual;
import net.dzikoysk.cdn.entity.Description;
import net.dzikoysk.cdn.entity.Exclude;
Expand All @@ -24,7 +22,9 @@

import java.io.File;
import java.time.Duration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

@ConfigurationFile
public class PluginConfiguration implements ReloadableConfig {
Expand Down Expand Up @@ -352,7 +352,6 @@ public static class Warp {

@Description("# Texture of the item (only for PLAYER_HEAD material)")
public String itemTexture = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzk4ODVlODIzZmYxNTkyNjdjYmU4MDkwOTNlMzNhNDc2ZTI3NDliNjU5OGNhNGEyYTgxZWU2OTczODAzZmI2NiJ9fX0=";

}

@Description({ " ", "# Butcher" })
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@

import com.eternalcode.commons.bukkit.position.Position;
import com.eternalcode.commons.bukkit.position.PositionAdapter;
import java.util.ArrayList;
import org.bukkit.Location;

class WarpImpl implements Warp {
import java.util.Collections;
import java.util.List;

public class WarpImpl implements Warp {

private final String name;
private final Position position;
private final List<String> permissions;

WarpImpl(String name, Position position) {
public WarpImpl(String name, Position position, List<String> permissions) {
this.name = name;
this.position = position;
this.permissions = new ArrayList<>(permissions);
}

@Override
Expand All @@ -23,4 +29,10 @@ public String getName() {
public Location getLocation() {
return PositionAdapter.convert(this.position);
}

@Override
public List<String> getPermissions() {
return Collections.unmodifiableList(this.permissions);
}

}
Loading

0 comments on commit 015a8be

Please sign in to comment.