feat: re-implement and clean up permissions (#453)

BREAKING CHANGE: Permissions have been reworked, if you use a permissions manager you may need to change a few of the permissions
This commit is contained in:
Sekwah 2024-11-18 04:55:59 +00:00
parent 57e27a87a1
commit 9030ff5363
75 changed files with 547 additions and 195 deletions

View File

@ -9,6 +9,7 @@ import com.sekwah.advancedportals.core.commands.subcommands.portal.*;
import com.sekwah.advancedportals.core.connector.commands.CommandRegister;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.module.AdvancedPortalsModule;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.registry.TagRegistry;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
@ -19,11 +20,11 @@ import com.sekwah.advancedportals.core.tags.*;
import com.sekwah.advancedportals.core.util.GameScheduler;
import com.sekwah.advancedportals.core.util.InfoLogger;
import com.sekwah.advancedportals.core.util.Lang;
import java.io.File;
import java.util.Arrays;
public class AdvancedPortalsCore {
public static final String version = "1.0.0";
private final InfoLogger infoLogger;
private final DataStorage dataStorage;
@ -73,7 +74,7 @@ public class AdvancedPortalsCore {
this.infoLogger = infoLogger;
int[] mcVersionTemp;
infoLogger.info("Loading Advanced Portals Core v" + version
infoLogger.info("Loading Advanced Portals Core v" + BuildConstants.VERSION
+ " for MC: " + mcVersion);
try {
mcVersionTemp = Arrays.stream(mcVersion.split("\\."))
@ -147,7 +148,7 @@ public class AdvancedPortalsCore {
}
private void registerPortalCommand(CommandRegister commandRegister) {
this.portalCommand = new CommandWithSubCommands(this);
this.portalCommand = new CommandWithSubCommands(this, Permissions.PORTAL);
this.portalCommand.registerSubCommand("version",
new VersionSubCommand());
@ -180,7 +181,7 @@ public class AdvancedPortalsCore {
}
private void registerDestinationCommand(CommandRegister commandRegister) {
this.destiCommand = new CommandWithSubCommands(this);
this.destiCommand = new CommandWithSubCommands(this, Permissions.DESTI);
this.destiCommand.registerSubCommand("create",
new CreateDestiSubCommand());
this.destiCommand.registerSubCommand("remove",

View File

@ -8,7 +8,7 @@ import com.sekwah.advancedportals.core.connector.containers.WorldContainer;
import com.sekwah.advancedportals.core.data.BlockAxis;
import com.sekwah.advancedportals.core.data.Direction;
import com.sekwah.advancedportals.core.network.ServerDestiPacket;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import com.sekwah.advancedportals.core.serializeddata.PlayerLocation;
@ -104,7 +104,7 @@ public class CoreListeners {
if (player == null) {
return !portalServices.inPortalRegionProtected(blockPos);
}
if (!(PortalPermissions.BUILD.hasPermission(player)
if (!(Permissions.BUILD.hasPermission(player)
|| !portalServices.inPortalRegionProtected(blockPos))) {
player.sendMessage(Lang.getNegativePrefix()
+ Lang.translate("portal.nobuild"));
@ -122,7 +122,7 @@ public class CoreListeners {
public boolean blockPlace(PlayerContainer player, BlockLocation blockPos,
String blockMaterial, String itemInHandMaterial,
String itemInHandName) {
if (player != null && PortalPermissions.BUILD.hasPermission(player)) {
if (player != null && Permissions.BUILD.hasPermission(player)) {
WorldContainer world = player.getWorld();
if (itemInHandName.equals("\u00A75Portal Block Placer")) {
world.setBlock(blockPos, "NETHER_PORTAL");
@ -180,8 +180,7 @@ public class CoreListeners {
BlockLocation blockLoc,
boolean leftClick) {
if (itemName != null
&& (player.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(player))
&& Permissions.CREATE_PORTAL.hasPermission(player)
&& itemMaterialName.equalsIgnoreCase(
this.configRepository.getSelectorMaterial())
&& (!this.configRepository.getUseOnlySpecialAxe()
@ -192,7 +191,7 @@ public class CoreListeners {
} else if (itemName != null && leftClick
&& Objects.equals(itemMaterialName, "PURPLE_WOOL")
&& itemName.equals("\u00A75Portal Block Placer")
&& PortalPermissions.BUILD.hasPermission(player)) {
&& Permissions.BUILD.hasPermission(player)) {
if (!Objects.equals(blockMaterialname, "NETHER_PORTAL")) {
return false;
}

View File

@ -1,6 +1,7 @@
package com.sekwah.advancedportals.core.commands;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import java.util.List;
/**

View File

@ -2,8 +2,10 @@ package com.sekwah.advancedportals.core.commands;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PermissionBuilder;
import com.sekwah.advancedportals.core.registry.SubCommandRegistry;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -12,12 +14,14 @@ import java.util.stream.Collectors;
public class CommandWithSubCommands implements CommandTemplate {
private final SubCommandRegistry subCommandRegistry;
private final int subCommandsPerPage = 7;
private final int subCommandsPerPage = 6;
private final AdvancedPortalsCore pluginCore;
private final PermissionBuilder permission;
public CommandWithSubCommands(AdvancedPortalsCore advancedPortalsCore) {
public CommandWithSubCommands(AdvancedPortalsCore advancedPortalsCore, PermissionBuilder permission) {
this.subCommandRegistry = new SubCommandRegistry();
this.pluginCore = advancedPortalsCore;
this.permission = permission;
}
public boolean registerSubCommand(String arg, SubCommand subCommand,
@ -53,6 +57,10 @@ public class CommandWithSubCommands implements CommandTemplate {
@Override
public void onCommand(CommandSenderContainer sender, String commandExecuted,
String[] args) {
if(!permission.hasPermission(sender)) {
sender.sendMessage(Lang.getNegativePrefix() + Lang.translate("command.nopermission"));
return;
}
if (args.length > 0) {
if (args[0].equalsIgnoreCase("help")) {
int helpPage = 1;

View File

@ -1,6 +1,7 @@
package com.sekwah.advancedportals.core.commands;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import java.util.List;
public interface SubCommand {

View File

@ -5,6 +5,7 @@ import com.sekwah.advancedportals.core.connector.containers.CommandSenderContain
import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.util.TagReader;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

View File

@ -5,13 +5,14 @@ import com.sekwah.advancedportals.core.commands.subcommands.common.CreateTaggedS
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.destination.Destination;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.registry.TagRegistry;
import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.util.TagReader;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -85,7 +86,7 @@ public class CreateDestiSubCommand extends CreateTaggedSubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp() || PortalPermissions.DESTI.hasPermission(sender);
return Permissions.CREATE_DESTI.hasPermission(sender);
}
@Override

View File

@ -3,8 +3,10 @@ package com.sekwah.advancedportals.core.commands.subcommands.desti;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
import java.util.stream.Collectors;
@ -23,7 +25,7 @@ public class ListDestiSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.LIST_DESTI.hasPermission(sender);
}
@Override

View File

@ -3,9 +3,10 @@ package com.sekwah.advancedportals.core.commands.subcommands.desti;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.Collections;
import java.util.List;
@ -33,7 +34,7 @@ public class RemoveDestiSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp() || PortalPermissions.DESTI.hasPermission(sender);
return Permissions.REMOVE_DESTI.hasPermission(sender);
}
@Override

View File

@ -7,12 +7,14 @@ import com.sekwah.advancedportals.core.connector.containers.CommandSenderContain
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.destination.Destination;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.services.PlayerDataServices;
import com.sekwah.advancedportals.core.util.Debug;
import com.sekwah.advancedportals.core.util.GameScheduler;
import com.sekwah.advancedportals.core.util.Lang;
import java.awt.*;
import java.util.List;
import java.util.Objects;
@ -66,7 +68,7 @@ public class ShowDestiSubCommand
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.SHOW_DESTI.hasPermission(sender);
}
@Override

View File

@ -3,9 +3,10 @@ package com.sekwah.advancedportals.core.commands.subcommands.desti;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.Collections;
import java.util.List;
@ -35,7 +36,7 @@ public class TeleportDestiSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp() || PortalPermissions.DESTI.hasPermission(sender);
return Permissions.TELEPORT_DESTI.hasPermission(sender);
}
@Override

View File

@ -4,7 +4,7 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.subcommands.common.CreateTaggedSubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.registry.TagRegistry;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
@ -12,10 +12,10 @@ import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.tags.NameTag;
import com.sekwah.advancedportals.core.tags.TriggerBlockTag;
import com.sekwah.advancedportals.core.util.InfoLogger;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.util.TagReader;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -27,9 +27,6 @@ public class CreatePortalSubCommand extends CreateTaggedSubCommand {
@Inject
TagRegistry tagRegistry;
@Inject
InfoLogger infoLogger;
@Inject
ConfigRepository config;
@ -106,8 +103,7 @@ public class CreatePortalSubCommand extends CreateTaggedSubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.CREATE_PORTAL.hasPermission(sender);
}
@Override

View File

@ -3,9 +3,9 @@ package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.util.TagReader;
import java.util.List;
@ -34,7 +34,7 @@ public class DisableBeaconSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.DISABLE_BEACON.hasPermission(sender);
}
@Override

View File

@ -5,8 +5,9 @@ import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class EndGatewayBlockSubCommand implements SubCommand {
@ -31,8 +32,7 @@ public class EndGatewayBlockSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.CREATE_PORTAL.hasPermission(sender);
}
@Override

View File

@ -5,8 +5,9 @@ import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class EndPortalBlockSubCommand implements SubCommand {
@ -31,8 +32,7 @@ public class EndPortalBlockSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.CREATE_PORTAL.hasPermission(sender);
}
@Override

View File

@ -3,6 +3,7 @@ package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.util.TagReader;
@ -34,7 +35,7 @@ public class InfoPortalSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.PORTAL_INFO.hasPermission(sender);
}
@Override

View File

@ -4,9 +4,10 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.util.Lang;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@ -82,8 +83,7 @@ public class LangUpdateSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.LANG_UPDATE.hasPermission(sender);
return Permissions.LANG_UPDATE.hasPermission(sender);
}
@Override

View File

@ -3,8 +3,10 @@ package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
import java.util.stream.Collectors;
@ -23,7 +25,7 @@ public class ListPortalsSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.LIST_PORTAL.hasPermission(sender);
}
@Override

View File

@ -5,8 +5,9 @@ import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class PortalBlockSubCommand implements SubCommand {
@ -34,8 +35,7 @@ public class PortalBlockSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.CREATE_PORTAL.hasPermission(sender);
}
@Override

View File

@ -4,11 +4,12 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class ReloadPortalSubCommand implements SubCommand {
@ -36,7 +37,7 @@ public class ReloadPortalSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp() || PortalPermissions.RELOAD.hasPermission(sender);
return Permissions.RELOAD.hasPermission(sender);
}
@Override

View File

@ -3,9 +3,10 @@ package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class RemovePortalSubCommand implements SubCommand {
@ -32,8 +33,7 @@ public class RemovePortalSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.REMOVE_PORTAL.hasPermission(sender);
}
@Override

View File

@ -5,9 +5,10 @@ import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.permissions.PortalPermissions;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class SelectorSubCommand implements SubCommand {
@ -42,8 +43,7 @@ public class SelectorSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return sender.isOp()
|| PortalPermissions.CREATE_PORTAL.hasPermission(sender);
return Permissions.SELECTOR.hasPermission(sender);
}
@Override

View File

@ -6,6 +6,7 @@ import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
@ -15,6 +16,7 @@ import com.sekwah.advancedportals.core.tags.NameTag;
import com.sekwah.advancedportals.core.util.Debug;
import com.sekwah.advancedportals.core.util.GameScheduler;
import com.sekwah.advancedportals.core.util.Lang;
import java.awt.*;
import java.util.List;
import java.util.Objects;
@ -82,7 +84,7 @@ public class ShowPortalSubCommand
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.SHOW_PORTAL.hasPermission(sender);
}
@Override

View File

@ -1,9 +1,10 @@
package com.sekwah.advancedportals.core.commands.subcommands.portal;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.BuildConstants;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.util.Lang;
import java.util.List;
public class VersionSubCommand implements SubCommand {
@ -11,7 +12,7 @@ public class VersionSubCommand implements SubCommand {
public void onCommand(CommandSenderContainer sender, String[] args) {
sender.sendMessage(Lang.getPositivePrefix()
+ " Advanced Portals v"
+ AdvancedPortalsCore.version);
+ BuildConstants.VERSION);
}
@Override

View File

@ -1,14 +1,10 @@
package com.sekwah.advancedportals.core.connector.containers;
public interface CommandSenderContainer {
public interface CommandSenderContainer extends HasPermission {
void sendMessage(String message);
boolean isOp();
/**
* @return null if there isnt a player e.g. the console
* @return null if there isn't a player e.g. the console
*/
PlayerContainer getPlayerContainer();
boolean hasPermission(String permission);
}

View File

@ -0,0 +1,6 @@
package com.sekwah.advancedportals.core.connector.containers;
public interface HasPermission {
boolean isOp();
boolean hasPermission(String permission);
}

View File

@ -8,17 +8,13 @@ import java.util.UUID;
* Just a temporary container for whenever advanced portals needs to get data
* from a player
*/
public interface PlayerContainer extends EntityContainer {
public interface PlayerContainer extends EntityContainer, HasPermission {
UUID getUUID();
void sendMessage(String message);
void sendActionBar(String message);
boolean isOp();
boolean hasPermission(String permission);
/**
* @param blockPos
* @param material

View File

@ -1,6 +1,7 @@
package com.sekwah.advancedportals.core.connector.containers;
import com.sekwah.advancedportals.core.tags.CommandTag;
import java.util.List;
import java.util.UUID;

View File

@ -1,6 +1,9 @@
package com.sekwah.advancedportals.core.module;
import com.google.inject.*;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Scopes;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.registry.TagRegistry;
@ -17,9 +20,10 @@ import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import com.sekwah.advancedportals.core.serializeddata.config.Config;
import com.sekwah.advancedportals.core.serializeddata.config.ConfigProvider;
import com.sekwah.advancedportals.core.util.InfoLogger;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
public class AdvancedPortalsModule extends AbstractModule {
private Injector injector;

View File

@ -0,0 +1,122 @@
package com.sekwah.advancedportals.core.permissions;
import com.google.common.collect.ImmutableList;
import com.sekwah.advancedportals.core.connector.containers.HasPermission;
import java.util.ArrayList;
import java.util.List;
/**
* this will not currently build the permissions for the files, but maybe at
* some point. It'll just make it easier though.
*/
public class PermissionBuilder {
private final String permissionTag;
private final PermissionDefault permissionDefault;
private final PermissionBuilder parent;
private final List<PermissionBuilder> children = new ArrayList<>();
private final List<PermissionBuilder> grantChildren = new ArrayList<>();
private String description;
private boolean doNotExport = false;
PermissionBuilder(String permissionTag) {
this.permissionTag = permissionTag;
this.parent = null;
this.permissionDefault = PermissionDefault.FALSE;
}
PermissionBuilder(String permissionTag, PermissionBuilder parent) {
this.permissionTag = permissionTag;
this.parent = parent;
this.permissionDefault = parent.permissionDefault;
}
PermissionBuilder(String permissionTag, PermissionBuilder parent, PermissionDefault permissionDefault) {
this.permissionTag = permissionTag;
this.parent = parent;
this.permissionDefault = permissionDefault;
}
PermissionBuilder(String permissionTag, PermissionDefault permissionDefault) {
this.permissionTag = permissionTag;
this.parent = null;
this.permissionDefault = permissionDefault;
}
public PermissionDefault getPermissionDefault() {
return permissionDefault;
}
public PermissionBuilder createChild(String permissionTag) {
var child = new PermissionBuilder(permissionTag, this);
children.add(child);
return child;
}
public PermissionBuilder createChild(String permissionTag, PermissionDefault permissionDefault) {
var child = new PermissionBuilder(permissionTag, this, permissionDefault);
children.add(child);
return child;
}
public PermissionBuilder addGrantChild(PermissionBuilder child) {
grantChildren.add(child);
return this;
}
public PermissionBuilder doNotExport() {
this.doNotExport = true;
return this;
}
@Override
public String toString() {
if (parent != null) {
return parent + "." + permissionTag;
} else {
return permissionTag;
}
}
public boolean hasPermission(HasPermission sender) {
if (Permissions.hasPermissionManager) {
return sender.hasPermission(this.toString());
}
return switch (permissionDefault) {
case TRUE -> true;
case FALSE -> false;
case OP -> sender.isOp();
case NOT_OP -> !sender.isOp();
};
}
public List<PermissionBuilder> getChildren() {
return ImmutableList.copyOf(children);
}
public List<PermissionBuilder> getGrantChildren() {
return ImmutableList.copyOf(grantChildren);
}
public String getDescription() {
return description;
}
public boolean isDoNotExport() {
return doNotExport;
}
public PermissionBuilder description(String description) {
this.description = description;
return this;
}
public enum PermissionDefault {
TRUE,
FALSE,
OP,
NOT_OP
}
}

View File

@ -0,0 +1,108 @@
package com.sekwah.advancedportals.core.permissions;
public class Permissions {
/**
* If true then a permission manager is being used and don't check for op
* for platforms like spigot this will always be true.
* <p>
* This is to allow for negative permissions where a value may be defaulted to true.
*/
public static boolean hasPermissionManager = false;
public static final PermissionBuilder ROOT =
new PermissionBuilder("advancedportals").doNotExport();
public static final PermissionBuilder BUILD =
ROOT.createChild("build", PermissionBuilder.PermissionDefault.OP).description("Allows you to build in the portal regions");
public static final PermissionBuilder DESTI =
ROOT.createChild("desti", PermissionBuilder.PermissionDefault.TRUE).description("Allows you to use the destination command");
public static final PermissionBuilder CREATE_DESTI =
DESTI.createChild("create", PermissionBuilder.PermissionDefault.OP).description("Allows you to create destinations");
public static final PermissionBuilder TELEPORT_DESTI =
DESTI.createChild("teleport", PermissionBuilder.PermissionDefault.OP).description("Allows you to teleport to destinations");
public static final PermissionBuilder REMOVE_DESTI =
DESTI.createChild("remove", PermissionBuilder.PermissionDefault.OP).description("Allows you to remove destinations");
public static final PermissionBuilder LIST_DESTI =
DESTI.createChild("list", PermissionBuilder.PermissionDefault.OP).description("Allows you to list all destinations");
public static final PermissionBuilder SHOW_DESTI =
DESTI.createChild("show", PermissionBuilder.PermissionDefault.OP).description("Allows you to visualise the destination locations");
public static final PermissionBuilder PORTAL =
ROOT.createChild("portal", PermissionBuilder.PermissionDefault.TRUE).description("Allows you to use the portal command");
public static final PermissionBuilder CREATE_PORTAL =
PORTAL.createChild("create", PermissionBuilder.PermissionDefault.OP).description("Allows you to create portals");
public static final PermissionBuilder SELECTOR =
PORTAL.createChild("selector", PermissionBuilder.PermissionDefault.OP).description("Allows you to give yourself a portal selector");
public static final PermissionBuilder REMOVE_PORTAL =
PORTAL.createChild("remove", PermissionBuilder.PermissionDefault.OP).description("Allows you to remove portals");
public static final PermissionBuilder LIST_PORTAL =
PORTAL.createChild("list", PermissionBuilder.PermissionDefault.OP).description("Allows you to list all portals");
public static final PermissionBuilder LANG_UPDATE =
PORTAL.createChild("lang_update", PermissionBuilder.PermissionDefault.OP);
public static final PermissionBuilder RELOAD =
PORTAL.createChild("reload", PermissionBuilder.PermissionDefault.OP);
public static final PermissionBuilder DISABLE_BEACON =
PORTAL.createChild("disable_beacon", PermissionBuilder.PermissionDefault.OP);
public static final PermissionBuilder IMPORT =
PORTAL.createChild("import", PermissionBuilder.PermissionDefault.OP);
public static final PermissionBuilder SHOW_PORTAL =
PORTAL.createChild("show", PermissionBuilder.PermissionDefault.OP).description("Allows you to view the portal regions");
private static final PermissionBuilder CREATE_COMMAND_LEVEL =
CREATE_PORTAL.createChild("command_level").doNotExport();
public static final PermissionBuilder CREATE_COMMAND_OP =
CREATE_COMMAND_LEVEL.createChild("op").description("Allows you to increase the users level temporarily to op");
public static final PermissionBuilder CREATE_COMMAND_CONSOLE =
CREATE_COMMAND_LEVEL.createChild("console").description("Allows you to create portals which execute console commands");
public static final PermissionBuilder CREATE_COMMAND_PERMS =
CREATE_COMMAND_LEVEL.createChild("perms_wildcard").description("Allows you to increase the users level temporarily to have all perms");
public static final PermissionBuilder PORTAL_INFO =
PORTAL.createChild("info", PermissionBuilder.PermissionDefault.OP).description("Allows you to view portal information");
static {
// These are to add children which will not be used directly e.g. advancedportals.*
ROOT.createChild("*", PermissionBuilder.PermissionDefault.OP).description("Gives access to all portal commands")
.addGrantChild(CREATE_PORTAL)
.addGrantChild(CREATE_DESTI)
.addGrantChild(DESTI)
.addGrantChild(PORTAL)
.addGrantChild(TELEPORT_DESTI)
.addGrantChild(REMOVE_DESTI)
.addGrantChild(LIST_DESTI)
.addGrantChild(SHOW_DESTI)
.addGrantChild(SELECTOR)
.addGrantChild(REMOVE_PORTAL)
.addGrantChild(LIST_PORTAL)
.addGrantChild(LANG_UPDATE)
.addGrantChild(RELOAD)
.addGrantChild(DISABLE_BEACON)
.addGrantChild(IMPORT)
.addGrantChild(SHOW_PORTAL)
.addGrantChild(PORTAL_INFO)
.addGrantChild(BUILD);
CREATE_COMMAND_LEVEL.createChild("*", PermissionBuilder.PermissionDefault.OP).description("Gives access to all command level raisers")
.addGrantChild(CREATE_COMMAND_OP)
.addGrantChild(CREATE_COMMAND_CONSOLE)
.addGrantChild(CREATE_COMMAND_PERMS);
}
}

View File

@ -1,64 +0,0 @@
package com.sekwah.advancedportals.core.permissions;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import java.util.List;
public class PortalPermissions {
private static final PermissionBuilder PERMISSIONS =
new PermissionBuilder("advancedportals");
public static final PermissionBuilder BUILD =
PERMISSIONS.createChild("build");
public static final PermissionBuilder DESTI =
PERMISSIONS.createChild("desti");
public static final PermissionBuilder CREATE_PORTAL =
PERMISSIONS.createChild("createportal");
public static final PermissionBuilder LANG_UPDATE =
PERMISSIONS.createChild("langupdate");
public static final PermissionBuilder RELOAD =
PERMISSIONS.createChild("reload");
/**
* this will not currently build the permissions for the files, but maybe at
* some point. It'll just make it easier though.
*/
public static class PermissionBuilder {
private final String permissionTag;
private final PermissionBuilder parent;
private List<PermissionBuilder>[] children;
PermissionBuilder(String permissionTag) {
this.permissionTag = permissionTag;
this.parent = null;
}
PermissionBuilder(String permissionTag, PermissionBuilder parent) {
this.permissionTag = permissionTag;
this.parent = parent;
}
PermissionBuilder createChild(String permissionTag) {
return new PermissionBuilder(permissionTag, this);
}
@Override
public String toString() {
if (parent != null) {
return parent + "." + permissionTag;
} else {
return permissionTag;
}
}
public boolean hasPermission(CommandSenderContainer player) {
return player.hasPermission(this.toString());
}
public boolean hasPermission(PlayerContainer player) {
return player.hasPermission(this.toString());
}
}
}

View File

@ -3,6 +3,7 @@ package com.sekwah.advancedportals.core.registry;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

View File

@ -3,6 +3,7 @@ package com.sekwah.advancedportals.core.registry;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.*;
/**

View File

@ -4,6 +4,7 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.effect.WarpEffect;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.util.HashMap;
import java.util.Map;

View File

@ -5,6 +5,7 @@ import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import com.sekwah.advancedportals.core.serializeddata.config.CommandPortalConfig;
import com.sekwah.advancedportals.core.serializeddata.config.Config;
import java.util.HashMap;
@Singleton

View File

@ -5,9 +5,10 @@ import com.sekwah.advancedportals.core.destination.Destination;
import com.sekwah.advancedportals.core.repository.IDestinationRepository;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import com.sekwah.advancedportals.core.tags.NameTag;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Singleton;
@Singleton
public class DestinationRepositoryImpl implements IDestinationRepository {

View File

@ -4,6 +4,7 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.repository.IPlayerDataRepository;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import com.sekwah.advancedportals.core.serializeddata.PlayerData;
import java.util.List;
public class PlayerDataRepositoryImpl implements IPlayerDataRepository {

View File

@ -7,7 +7,9 @@ import com.sekwah.advancedportals.core.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.repository.IPortalRepository;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import com.sekwah.advancedportals.core.tags.NameTag;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
@Singleton
public class PortalRepositoryImpl implements IPortalRepository {

View File

@ -3,17 +3,18 @@ package com.sekwah.advancedportals.core.serializeddata;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.util.InfoLogger;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.inspector.TagInspector;
import org.yaml.snakeyaml.nodes.Tag;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.inspector.TagInspector;
import org.yaml.snakeyaml.nodes.Tag;
public class DataStorage {
private final File dataFolder;

View File

@ -1,16 +1,19 @@
package com.sekwah.advancedportals.core.serializeddata;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.lang.reflect.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.yaml.snakeyaml.LoaderOptions;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.nodes.*;
import sun.misc.Unsafe;
import javax.inject.Inject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ReflectiveConstructor<T> extends Constructor {
private static final Unsafe unsafe = getUnsafe();
private final Class<T> clazz;

View File

@ -12,11 +12,12 @@ import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.serializeddata.PlayerLocation;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.Tag;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Singleton;
@Singleton
public class DestinationServices {

View File

@ -7,10 +7,11 @@ import com.sekwah.advancedportals.core.repository.IPlayerDataRepository;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import com.sekwah.advancedportals.core.serializeddata.PlayerData;
import com.sekwah.advancedportals.core.util.Lang;
import javax.inject.Singleton;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import javax.inject.Singleton;
@Singleton
public final class PlayerDataServices {

View File

@ -2,7 +2,6 @@ package com.sekwah.advancedportals.core.services;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.portal.ActivationResult;
import com.sekwah.advancedportals.core.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.registry.TagRegistry;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
@ -17,8 +16,8 @@ import com.sekwah.advancedportals.core.util.PlayerUtils;
import com.sekwah.advancedportals.core.warphandler.Tag;
import com.sekwah.advancedportals.core.warphandler.TriggerType;
import java.util.*;
import javax.inject.Singleton;
import java.util.*;
@Singleton
public class PortalServices {

View File

@ -4,7 +4,7 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.ProxyMessages;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.network.ProxyCommandPacket;
import com.sekwah.advancedportals.core.network.ProxyTransferPacket;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.registry.TagTarget;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
import com.sekwah.advancedportals.core.util.Lang;
@ -168,7 +168,7 @@ public class CommandTag implements Tag.Activation, Tag.Split, Tag.Creation {
+ Lang.translate("tag.command.op.disabled"));
yield false;
}
if (!player.hasPermission("advancedportals.createportal.commandlevel.op")) {
if (!Permissions.CREATE_COMMAND_OP.hasPermission(player)) {
player.sendMessage(Lang.getNegativePrefix()
+ Lang.translateInsertVariables("tag.command.nopermission", "OP"));
yield false;
@ -181,7 +181,7 @@ public class CommandTag implements Tag.Activation, Tag.Split, Tag.Creation {
+ Lang.translate("tag.command.console.disabled"));
yield false;
}
if (!player.hasPermission("advancedportals.createportal.commandlevel.console")) {
if (!Permissions.CREATE_COMMAND_CONSOLE.hasPermission(player)) {
player.sendMessage(Lang.getNegativePrefix()
+ Lang.translateInsertVariables("tag.command.nopermission","Console"));
yield false;
@ -194,7 +194,7 @@ public class CommandTag implements Tag.Activation, Tag.Split, Tag.Creation {
+ Lang.translate("tag.command.permswildcard.disabled"));
yield false;
}
if (!player.hasPermission("advancedportals.createportal.commandlevel.permswild")) {
if (!Permissions.CREATE_COMMAND_PERMS.hasPermission(player)) {
player.sendMessage(Lang.getNegativePrefix()
+ Lang.translateInsertVariables("tag.command.nopermission", "*"));
yield false;

View File

@ -13,8 +13,6 @@ import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
@ -84,7 +82,7 @@ public class DestiTag implements Tag.Activation, Tag.AutoComplete, Tag.Split {
Tag.Activation activationHandler =
tagRegistry.getActivationHandler(destiTag.NAME, Tag.TagType.DESTINATION);
if (activationHandler != null
&& !activationHandler.preActivated(target, player, activeData, argData)) {
&& !activationHandler.preActivated(target, player, activeData, destiTag.VALUES)) {
return false;
}
}

View File

@ -8,8 +8,6 @@ import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Random;
public class MessageTag implements Tag.Activation {

View File

@ -5,7 +5,6 @@ import com.sekwah.advancedportals.core.registry.TagTarget;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.Tag;
import javax.annotation.Nullable;
import java.util.List;
/**

View File

@ -52,8 +52,17 @@ public class PermissionTag implements Tag.Activation {
@Override
public boolean preActivated(TagTarget target, PlayerContainer player,
ActivationData activeData, String[] argData) {
if (!player.hasPermission(argData[1])) {
player.sendMessage(Lang.translate("portal.error.nopermission"));
var permission = argData[0];
if(permission.startsWith("!")) {
permission = permission.substring(1);
if(player.hasPermission(permission)) {
player.sendMessage(Lang.getNegativePrefix() + Lang.translate("portal.error.nopermission"));
return false;
}
return true;
}
else if (!player.hasPermission(argData[0])) {
player.sendMessage(Lang.getNegativePrefix() + Lang.translate("portal.error.nopermission"));
return false;
}
return true;

View File

@ -1,7 +1,5 @@
package com.sekwah.advancedportals.core.tags;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.ProxyMessages;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
@ -13,7 +11,6 @@ import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
import javax.annotation.Nullable;
import java.util.Random;
public class ProxyTag implements Tag.Activation, Tag.OrderPriority, Tag.Split {

View File

@ -2,6 +2,7 @@ package com.sekwah.advancedportals.core.util;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import java.awt.*;
public class Debug {

View File

@ -4,6 +4,7 @@ import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.handler.codec.EncoderException;
import java.nio.charset.StandardCharsets;
/**

View File

@ -1,8 +1,8 @@
package com.sekwah.advancedportals.core.util;
import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.Iterator;
import javax.inject.Singleton;
/**
* For all delayed and repeating tasks.

View File

@ -2,6 +2,7 @@ package com.sekwah.advancedportals.core.util;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.serializeddata.DataStorage;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

View File

@ -2,6 +2,7 @@ package com.sekwah.advancedportals.core.util;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.serializeddata.DataTag;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

View File

@ -2,8 +2,9 @@ package com.sekwah.advancedportals.core.warphandler;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.registry.TagTarget;
import java.util.List;
import javax.annotation.Nullable;
import java.util.List;
/**
* If a tag can be used for any of them then either make it cast the target or

View File

@ -1,14 +1,14 @@
import com.google.gson.Gson
import org.apache.commons.codec.Charsets
import org.apache.http.HttpResponse
import org.apache.http.client.HttpClient
import org.apache.http.client.config.CookieSpecs
import org.apache.http.client.config.RequestConfig
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.ContentType
import org.apache.http.entity.mime.MultipartEntityBuilder
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.client.methods.HttpGet
import com.google.gson.Gson
buildscript {
repositories {

View File

@ -146,7 +146,7 @@ portal.error.takenname= The name given for the portal is already taken.
portal.error.selection.differentworlds= Both the selected points need to be in the same world.
portal.error.selection.missing= You need to select both points for the portal.
portal.error.save= There was a problem saving the portal.
portal.error.nopermission=You don't have permission to use that portal.
portal.error.nopermission= You don't have permission to use that portal.
portal.nobuild= You don't have permission to build here!
@ -176,6 +176,7 @@ command.lang.help=Update the translation file
command.version.help=Returns the current version of the plugin
command.subcommand.nopermission= Sorry but you don't have permission for that, please use &e/%1$s help &cif you would like a list of possible sub commands.
command.nopermission= Sorry but you don't have permission for that.
items.selector.name=Portal Region Selector
items.selector.pos=Select pos %1$s

View File

@ -31,3 +31,81 @@ jar {
it.isDirectory() ? it : zipTree(it)
}
}
// Code for generating extra data in plugins.yml
// This may be able to be simplified drastically, though the goal is to get this working for now
// as it has gone through a few iterations.
sourceSets {
permissionsGen {
java {
srcDirs = ['src/main/java']
}
}
}
configurations {
permissionsGenCompileClasspath.extendsFrom compileClasspath
}
def compilePermissionsGen = tasks.register('compilePermissionsGen', JavaCompile) {
source = sourceSets.permissionsGen.allJava
classpath = configurations.permissionsGenCompileClasspath
destinationDirectory = file("$buildDir/classes/permissionsGen")
}
def templateSource = file('src/main/templates')
def templateDest = layout.buildDirectory.dir('generated/resources/templates')
def generatePermissionsYaml = tasks.register('generatePermissionsYaml') {
dependsOn compilePermissionsGen
doLast {
println "Generating permissions.yml file"
def classFiles = []
classFiles.addAll(files("$buildDir/classes/permissionsGen", sourceSets.permissionsGen.runtimeClasspath)
.collect { it.toURI().toURL() })
classFiles.addAll(project(':core').sourceSets.main.output.classesDirs
.collect { it.toURI().toURL() })
def urls = classFiles.toArray(new URL[0])
def parentClassLoader = Thread.currentThread().contextClassLoader
def classLoader = new URLClassLoader(urls, parentClassLoader)
def permissionsGeneratorClass = classLoader.loadClass('com.sekwah.advancedportals.spigot.PermissionsGeneratorSpigot')
def getPermissionsMethod = permissionsGeneratorClass.getMethod('getPermissions')
def permissionsYaml = getPermissionsMethod.invoke(null)
def permissionsFile = file("$buildDir/generated/resources/permissions.yml")
permissionsFile.parentFile.mkdirs()
permissionsFile.text = permissionsYaml
println "Permissions YAML generated at: $permissionsFile"
}
}
def generateTemplates = tasks.register('generateTemplates', Copy) { task ->
dependsOn generatePermissionsYaml
def props = [
'permissions': { -> file("$buildDir/generated/resources/permissions.yml").text },
'pluginVersion': { -> project.version }
]
task.inputs.properties(props)
task.from(templateSource)
task.into(templateDest)
task.expand(props)
doFirst {
println "Running generateTemplates task"
}
}
generateTemplates.configure {
outputs.upToDateWhen { false }
}
sourceSets.main.resources.srcDir(generateTemplates.map { it.outputs })

View File

@ -11,7 +11,6 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.plugin.java.JavaPlugin;
public class AdvancedPortalsPlugin extends JavaPlugin {
private AdvancedPortalsCore portalsCore;

View File

@ -18,6 +18,8 @@ import org.bukkit.event.entity.*;
import org.bukkit.event.player.*;
import org.bukkit.event.world.ChunkLoadEvent;
import java.util.List;
/**
* Some of these will be passed to the core listener to handle the events,
* others it's easier to just check directly.

View File

@ -0,0 +1,42 @@
package com.sekwah.advancedportals.spigot;
import com.sekwah.advancedportals.core.permissions.PermissionBuilder;
import com.sekwah.advancedportals.core.permissions.Permissions;
public class PermissionsGeneratorSpigot {
private PermissionsGeneratorSpigot() {
}
public static String getPermissions() {
return toPermBlock(Permissions.ROOT);
}
public static String toPermBlock(PermissionBuilder permission) {
StringBuilder builder = new StringBuilder();
String indent = " ";
if(!permission.isDoNotExport()) {
builder.append(indent).append(permission).append(":\n");
builder.append(indent).append(indent).append("default: ");
builder.append(permission.getPermissionDefault().toString().toLowerCase());
builder.append("\n");
if(permission.getDescription() != null) {
builder.append(indent).append(indent).append("description: ");
builder.append(permission.getDescription()).append("\n");
}
var children = permission.getGrantChildren();
if(!children.isEmpty()) {
builder.append(indent).append(indent).append("children:\n");
for(PermissionBuilder child : children) {
builder.append(indent).append(indent).append(indent);
builder.append(child.toString()).append(": true").append("\n");
}
}
}
for(PermissionBuilder child : permission.getChildren()) {
builder.append(toPermBlock(child));
}
return builder.toString();
}
}

View File

@ -1,6 +1,7 @@
package com.sekwah.advancedportals.spigot;
import com.sekwah.advancedportals.core.util.InfoLogger;
import java.util.logging.Level;
public class SpigotInfoLogger extends InfoLogger {

View File

@ -3,6 +3,7 @@ package com.sekwah.advancedportals.spigot.commands.subcommands.portal;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.commands.SubCommand;
import com.sekwah.advancedportals.core.connector.containers.CommandSenderContainer;
import com.sekwah.advancedportals.core.permissions.Permissions;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import com.sekwah.advancedportals.core.serializeddata.DataTag;
import com.sekwah.advancedportals.core.serializeddata.PlayerLocation;
@ -11,10 +12,11 @@ import com.sekwah.advancedportals.core.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.spigot.AdvancedPortalsPlugin;
import com.sekwah.advancedportals.spigot.commands.subcommands.portal.importer.ConfigAccessor;
import org.bukkit.configuration.ConfigurationSection;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.bukkit.configuration.ConfigurationSection;
public class ImportPortalSubCommand implements SubCommand {
@ -185,7 +187,7 @@ public class ImportPortalSubCommand implements SubCommand {
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
return Permissions.IMPORT.hasPermission(sender);
}
@Override

View File

@ -1,11 +1,12 @@
package com.sekwah.advancedportals.spigot.commands.subcommands.portal.importer;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
public class ConfigAccessor {
private final String fileName;

View File

@ -2,12 +2,13 @@ package com.sekwah.advancedportals.spigot.connector.command;
import com.sekwah.advancedportals.core.commands.CommandTemplate;
import com.sekwah.advancedportals.spigot.connector.container.SpigotCommandSenderContainer;
import java.util.List;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import java.util.List;
public class SpigotCommandHandler implements CommandExecutor, TabCompleter {
private final CommandTemplate commandExecutor;

View File

@ -9,9 +9,6 @@ import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
import com.sekwah.advancedportals.core.serializeddata.PlayerLocation;
import com.sekwah.advancedportals.spigot.AdvancedPortalsPlugin;
import com.sekwah.advancedportals.spigot.reflection.MinecraftCustomPayload;
import java.util.Arrays;
import java.util.UUID;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
@ -21,6 +18,9 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;
import java.util.UUID;
/**
* Just a temporary container for whenever advanced portals needs to get data
* from a player

View File

@ -6,16 +6,15 @@ import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.connector.containers.WorldContainer;
import com.sekwah.advancedportals.core.tags.CommandTag;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import com.sekwah.advancedportals.spigot.AdvancedPortalsPlugin;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.plugin.messaging.PluginMessageListener;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
public class SpigotServerContainer implements ServerContainer {
@Inject

View File

@ -3,6 +3,14 @@ package com.sekwah.advancedportals.spigot.metrics;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.ServicePriority;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@ -12,13 +20,6 @@ import java.util.*;
import java.util.concurrent.Callable;
import java.util.logging.Level;
import java.util.zip.GZIPOutputStream;
import javax.net.ssl.HttpsURLConnection;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.ServicePriority;
/**
* bStats collects some data for plugin authors.

View File

@ -1,8 +1,9 @@
package com.sekwah.advancedportals.spigot.reflection;
import org.bukkit.entity.Player;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.bukkit.entity.Player;
/**
* Just a util class to force spigot to allow us to have fun with the

View File

@ -2,8 +2,6 @@ package com.sekwah.advancedportals.spigot.warpeffects;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.effect.WarpEffect;
import com.sekwah.advancedportals.core.portal.AdvancedPortal;
import com.sekwah.advancedportals.core.serializeddata.WorldLocation;
import com.sekwah.advancedportals.spigot.connector.container.SpigotPlayerContainer;
import org.bukkit.Effect;

View File

@ -1,6 +1,7 @@
package com.sekwah.advancedportals.spigot.warpeffects;
import com.sekwah.advancedportals.core.registry.WarpEffectRegistry;
import javax.inject.Inject;
public class SpigotWarpEffects {

View File

@ -0,0 +1,17 @@
main: com.sekwah.advancedportals.spigot.AdvancedPortalsPlugin
name: AdvancedPortals
version: ${pluginVersion}
author: sekwah41
description: An advanced portals plugin for bukkit.
api-version: 1.13
commands:
portal:
description: The main command for the advanced portals
aliases: [portals, aportals, advancedportals]
usage: /<command>
destination:
description: Can be used to access portal destinations.
aliases: [desti]
usage: /<command>
permissions:
${permissions}

View File

@ -12,11 +12,11 @@ import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.connection.PluginMessageEvent;
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.ServerConnection;
import org.slf4j.Logger;
import com.velocitypowered.api.proxy.messages.LegacyChannelIdentifier;
import org.slf4j.Logger;
@Plugin(authors = {"sekwah41"} ,id = "advancedportals", name = "Advanced Portals",
url = "https://www.spigotmc.org/resources/advanced-portals.14356/",

View File

@ -3,7 +3,6 @@ package com.sekwah.advancedportals.velocity.connector.container;
import com.sekwah.advancedportals.proxycore.connector.container.ProxyPlayerContainer;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.messages.LegacyChannelIdentifier;
import net.kyori.adventure.text.Component;
public class VelocityProxyPlayerContainer implements ProxyPlayerContainer {