9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2026-01-06 15:41:35 +00:00

feature: add prevention commands for region requirements

This commit is contained in:
SamB440
2022-01-17 20:35:42 +00:00
parent aa71290381
commit 19d8028dc7
4 changed files with 63 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
package net.islandearth.rpgregions.api.integrations;
import me.clip.placeholderapi.PlaceholderAPI;
import net.islandearth.rpgregions.api.IRPGRegionsAPI;
import net.islandearth.rpgregions.api.RPGRegionsAPI;
import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount;
@@ -8,6 +9,7 @@ import net.islandearth.rpgregions.requirements.DependencyRequirement;
import net.islandearth.rpgregions.requirements.RegionRequirement;
import net.islandearth.rpgregions.translation.Translations;
import net.islandearth.rpgregions.utils.MessageUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
@@ -82,6 +84,11 @@ public interface IntegrationManager {
if (flag) {
requirement.getPreventType().prevent(event);
if (requirement.getPreventMessage() != null) {
for (String preventCommand : requirement.getPreventCommands()) {
final String converted = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI") ? PlaceholderAPI.setPlaceholders(player, preventCommand) : preventCommand;
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), converted.replace("[player]", player.getName()));
}
String requirementMessage = MessageUtils.setPapi(player, requirement.getPreventMessage());
player.sendMessage(ChatColor.translateAlternateColorCodes('&', requirementMessage));
} else Translations.CANNOT_ENTER.send(player, requirement.getText(player));

View File

@@ -10,15 +10,22 @@ import org.apache.commons.lang.StringUtils;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedback {
private final transient IRPGRegionsAPI api;
@GuiEditable(value = "Prevent Type", type = GuiEditable.GuiEditableType.CHAT)
private PreventType preventType;
@GuiEditable(value = "Prevention Entry Message", type = GuiEditable.GuiEditableType.CHAT)
private String preventMessage;
@GuiEditable(value = "Prevention Commands", type = GuiEditable.GuiEditableType.CHAT)
private List<String> preventCommands;
public RegionRequirement(IRPGRegionsAPI api) {
this(api, PreventType.TELEPORT);
}
@@ -26,6 +33,7 @@ public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedb
public RegionRequirement(IRPGRegionsAPI api, PreventType preventType) {
this.api = api;
this.preventType = preventType;
this.preventCommands = new ArrayList<>();
}
public IRPGRegionsAPI getApi() {
@@ -58,6 +66,14 @@ public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedb
this.preventMessage = preventMessage;
}
public List<String> getPreventCommands() {
return preventCommands;
}
public void setPreventCommands(List<String> preventCommand) {
this.preventCommands = preventCommand;
}
@Override
public boolean feedback(Player player, String input) {
Optional<?> value = Enums.getIfPresent(PreventType.class, input.toUpperCase());

View File

@@ -0,0 +1,38 @@
package net.islandearth.rpgregions.gui.element;
import net.islandearth.rpgregions.gui.IGuiEditable;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
public class ListGuiFieldElement implements IGuiFieldElement {
@Override
public CompletableFuture<Void> set(Player player, IGuiEditable guiEditable, Field field, Object value) {
try {
Object object = field.get(guiEditable);
if (object == null) object = new ArrayList<>();
if (object instanceof ArrayList list) {
list.add(String.valueOf(value));
field.set(guiEditable, object);
}
} catch (ReflectiveOperationException e) {
e.printStackTrace();
}
return CompletableFuture.completedFuture(null);
}
@Override
public List<Class<?>> getType() {
return List.of(List.class, ArrayList.class, AbstractList.class);
}
@Override
public boolean needsValue() {
return true;
}
}

View File

@@ -17,6 +17,7 @@ import net.islandearth.rpgregions.gui.element.GuiFieldElementRegistry;
import net.islandearth.rpgregions.gui.element.IGuiFieldElementRegistry;
import net.islandearth.rpgregions.gui.element.IntegerGuiFieldElement;
import net.islandearth.rpgregions.gui.element.ItemStackGuiFieldElement;
import net.islandearth.rpgregions.gui.element.ListGuiFieldElement;
import net.islandearth.rpgregions.gui.element.LocationGuiFieldElement;
import net.islandearth.rpgregions.gui.element.PotionEffectGuiFieldElement;
import net.islandearth.rpgregions.managers.data.IRPGRegionsCache;
@@ -172,6 +173,7 @@ public class RPGRegionsManagers implements IRPGRegionsManagers {
guiFieldElementRegistry.register(new LocationGuiFieldElement());
guiFieldElementRegistry.register(new PotionEffectGuiFieldElement());
guiFieldElementRegistry.register(new CompareTypeGuiFieldElement());
guiFieldElementRegistry.register(new ListGuiFieldElement());
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") != null && Bukkit.getBukkitVersion().contains("1.17")) {
plugin.getLogger().info("Detected ProtcolLib, enabling fog support!");