forked from NLthijs48/AreaShop
-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
19 changed files
with
498 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
124 changes: 124 additions & 0 deletions
124
AreaShop/src/main/java/me/wiefferink/areashop/commands/TogglehomeControlCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
package me.wiefferink.areashop.commands; | ||
|
||
import com.google.inject.Inject; | ||
import com.google.inject.Singleton; | ||
import me.wiefferink.areashop.MessageBridge; | ||
import me.wiefferink.areashop.features.homeaccess.HomeAccessFeature; | ||
import me.wiefferink.areashop.features.homeaccess.HomeAccessType; | ||
import me.wiefferink.areashop.managers.IFileManager; | ||
import me.wiefferink.areashop.regions.GeneralRegion; | ||
import me.wiefferink.areashop.tools.Utils; | ||
import org.bukkit.command.CommandSender; | ||
import org.bukkit.entity.Player; | ||
|
||
import javax.annotation.Nonnull; | ||
import java.util.Collections; | ||
import java.util.Comparator; | ||
import java.util.List; | ||
import java.util.Locale; | ||
import java.util.stream.Stream; | ||
|
||
@Singleton | ||
public final class TogglehomeControlCommand extends CommandAreaShop { | ||
|
||
private final IFileManager fileManager; | ||
private final MessageBridge messageBridge; | ||
|
||
@Inject | ||
public TogglehomeControlCommand(@Nonnull IFileManager fileManager, @Nonnull MessageBridge messageBridge) { | ||
this.fileManager = fileManager; | ||
this.messageBridge = messageBridge; | ||
} | ||
|
||
@Override | ||
public String getCommandStart() { | ||
return "areashop togglehome"; | ||
} | ||
|
||
|
||
@Override | ||
public String getHelp(CommandSender target) { | ||
if (!target.hasPermission("sethomecontrol.control")) { | ||
return null; | ||
} | ||
return "help-togglehome"; | ||
} | ||
|
||
@Override | ||
public void execute(CommandSender sender, String[] args) { | ||
if (!sender.hasPermission("sethomecontrol.control")) { | ||
this.messageBridge.message(sender, "togglehome-noPermission"); | ||
return; | ||
} | ||
if (args.length < 1) { | ||
this.messageBridge.message(sender, "togglehome-help"); | ||
return; | ||
} | ||
|
||
final String rawAccessType = args[0]; | ||
final HomeAccessType accessType; | ||
try { | ||
accessType = HomeAccessType.valueOf(rawAccessType.toUpperCase(Locale.ENGLISH)); | ||
} catch (IllegalArgumentException ex) { | ||
this.messageBridge.message(sender, "togglehome-unknownAccessType"); | ||
return; | ||
} | ||
final GeneralRegion region; | ||
if (args.length >= 2) { | ||
final String regionName = args[1]; | ||
region = this.fileManager.getRegion(regionName); | ||
if (region == null) { | ||
this.messageBridge.message(sender, "cmd-noRegion", regionName); | ||
return; | ||
} | ||
} else if (sender instanceof Player player) { | ||
List<GeneralRegion> regions = Utils.getImportantRegions(player.getLocation()); | ||
if (regions.isEmpty()) { | ||
this.messageBridge.message(sender, "cmd-noRegionsAtLocation"); | ||
return; | ||
} else if (regions.size() != 1) { | ||
this.messageBridge.message(sender, "cmd-moreRegionsAtLocation"); | ||
return; | ||
} | ||
region = regions.get(0); | ||
} else { | ||
this.messageBridge.message(sender, "cmd-automaticRegionOnlyByPlayer"); | ||
return; | ||
} | ||
|
||
if (!(sender instanceof Player) && !sender.hasPermission("sethome.control.other")) { | ||
return; | ||
} | ||
if (sender instanceof Player player && !region.isOwner(player)) { | ||
this.messageBridge.message(sender, "togglehome-noPermission"); | ||
} | ||
region.getOrCreateFeature(HomeAccessFeature.class).homeAccessType(accessType); | ||
this.messageBridge.message(sender, "togglehome-success", accessType.name()); | ||
} | ||
|
||
@Override | ||
public List<String> getTabCompleteList(int toComplete, String[] start, CommandSender sender) { | ||
if (!sender.hasPermission("sethome.control")) { | ||
return Collections.emptyList(); | ||
} | ||
if (start.length == 1) { | ||
Stream<GeneralRegion> stream = this.fileManager.getRegions().stream(); | ||
if (!sender.hasPermission("sethome.control.other") && sender instanceof Player player) { | ||
stream = stream.filter(region -> region.isOwner(player.getUniqueId())); | ||
} | ||
return stream.map(GeneralRegion::getName) | ||
.filter(name -> name.startsWith(start[0])) | ||
.sorted(Comparator.reverseOrder()) | ||
.toList(); | ||
} | ||
if (start.length == 2 && sender instanceof Player player) { | ||
return this.fileManager.getRegions().stream() | ||
.filter(region -> region.isOwner(player.getUniqueId())) | ||
.map(GeneralRegion::getName) | ||
.filter(name -> name.startsWith(start[0])) | ||
.sorted(Comparator.reverseOrder()) | ||
.toList(); | ||
} | ||
return Collections.emptyList(); | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
AreaShop/src/main/java/me/wiefferink/areashop/extensions/AreashopExtension.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package me.wiefferink.areashop.extensions; | ||
|
||
import com.google.inject.Injector; | ||
import me.wiefferink.areashop.AreaShop; | ||
|
||
public interface AreashopExtension { | ||
|
||
void init(AreaShop plugin, Injector injector); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
...Shop/src/main/java/me/wiefferink/areashop/features/homeaccess/AccessControlValidator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
package me.wiefferink.areashop.features.homeaccess; | ||
|
||
import me.wiefferink.areashop.regions.GeneralRegion; | ||
import org.checkerframework.checker.nullness.qual.NonNull; | ||
|
||
import java.util.UUID; | ||
|
||
@FunctionalInterface | ||
public interface AccessControlValidator { | ||
|
||
/** | ||
* Whether a player can access a given {@link GeneralRegion} via a home | ||
* | ||
* @param player The uuid of the player attempting to access the region via a home | ||
* @param region The region | ||
* @param accessType The type of access permission the player holds | ||
* @return true if a player is permitted to set a home, false otherwise. | ||
*/ | ||
boolean canAccess( | ||
@NonNull final UUID player, | ||
@NonNull final GeneralRegion region, | ||
@NonNull final HomeAccessType accessType | ||
); | ||
|
||
default AccessControlValidator and(@NonNull final AccessControlValidator other) { | ||
return (player, region, accessType) -> this.canAccess(player, region, accessType) | ||
&& other.canAccess(player, region, accessType); | ||
} | ||
|
||
default AccessControlValidator or(@NonNull final AccessControlValidator other) { | ||
return (player, region, accessType) -> this.canAccess(player, region, accessType) | ||
|| other.canAccess(player, region, accessType); | ||
} | ||
|
||
} |
54 changes: 54 additions & 0 deletions
54
AreaShop/src/main/java/me/wiefferink/areashop/features/homeaccess/HomeAccessFeature.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
package me.wiefferink.areashop.features.homeaccess; | ||
|
||
import com.google.inject.assistedinject.Assisted; | ||
import com.google.inject.assistedinject.AssistedInject; | ||
import me.wiefferink.areashop.AreaShop; | ||
import me.wiefferink.areashop.features.RegionFeature; | ||
import me.wiefferink.areashop.regions.GeneralRegion; | ||
|
||
import javax.annotation.Nonnull; | ||
import java.util.Locale; | ||
import java.util.logging.Logger; | ||
|
||
public final class HomeAccessFeature extends RegionFeature { | ||
private HomeAccessType homeAccessType; | ||
|
||
@AssistedInject | ||
public HomeAccessFeature( | ||
@Assisted final GeneralRegion region, | ||
@Nonnull final AreaShop plugin | ||
) { | ||
super(plugin); | ||
setRegion(region); | ||
this.homeAccessType = parseAccessType(); | ||
} | ||
|
||
private @Nonnull HomeAccessType parseAccessType() { | ||
String rawAccessType = getRegion().getConfig() | ||
.getString("sethomecontrol.homeaccesstype", HomeAccessType.ANY.name()); | ||
try { | ||
return HomeAccessType.valueOf(rawAccessType.toUpperCase(Locale.ENGLISH)); | ||
} catch (IllegalArgumentException ex) { | ||
AreaShop.error("Invalid HomeAccessType: " + rawAccessType + " in region: " + getRegion().getName()); | ||
return HomeAccessType.ANY; | ||
} | ||
} | ||
|
||
private void saveAccessType(@Nonnull final HomeAccessType homeAccessType) { | ||
getRegion().getConfig().set("sethomecontrol.homeaccesstype", homeAccessType.name()); | ||
getRegion().saveRequired(); | ||
} | ||
|
||
public @Nonnull HomeAccessType homeAccessType() { | ||
return this.homeAccessType; | ||
} | ||
|
||
public void homeAccessType(@Nonnull final HomeAccessType homeAccessType) { | ||
if (this.homeAccessType != homeAccessType) { | ||
this.homeAccessType = homeAccessType; | ||
saveAccessType(homeAccessType); | ||
} | ||
} | ||
|
||
|
||
} |
9 changes: 9 additions & 0 deletions
9
AreaShop/src/main/java/me/wiefferink/areashop/features/homeaccess/HomeAccessType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package me.wiefferink.areashop.features.homeaccess; | ||
|
||
public enum HomeAccessType { | ||
|
||
ANY, | ||
MEMBERS, | ||
NONE | ||
|
||
} |
Oops, something went wrong.