feat: see portal info with /portal info (name)

This commit is contained in:
Sekwah 2024-09-10 14:11:25 +01:00
parent 0044008105
commit e7b0d5e4ca
18 changed files with 120 additions and 23 deletions

View File

@ -164,6 +164,8 @@ public class AdvancedPortalsCore {
new ListPortalsSubCommand());
this.portalCommand.registerSubCommand("show",
new ShowPortalSubCommand());
this.portalCommand.registerSubCommand("info",
new InfoPortalSubCommand());
commandRegister.registerCommand("portal", this.portalCommand);
}

View File

@ -194,19 +194,4 @@ public abstract class CreateTaggedSubCommand implements SubCommand {
return o1.NAME.compareTo(o2.NAME);
});
}
protected void printTags(CommandSenderContainer sender,
List<DataTag> dataTags) {
for (DataTag tag : dataTags) {
if (tag.VALUES.length == 1) {
sender.sendMessage(" \u00A7a" + tag.NAME + "\u00A77:\u00A7e"
+ tag.VALUES[0]);
} else {
for (int i = 0; i < tag.VALUES.length; i++) {
sender.sendMessage(" \u00A7a" + tag.NAME + "\u00A77[" + i
+ "]:\u00A7e" + tag.VALUES[i]);
}
}
}
}
}

View File

@ -62,7 +62,7 @@ public class CreateDestiSubCommand extends CreateTaggedSubCommand {
if (!destinationTags.isEmpty()) {
this.filterAndProcessTags(destinationTags);
this.printTags(sender, destinationTags);
TagReader.printArgs(sender, destinationTags);
}
sender.sendMessage("");
Destination destination = destinationServices.createDesti(

View File

@ -72,7 +72,7 @@ public class CreatePortalSubCommand extends CreateTaggedSubCommand {
if (!portalTags.isEmpty()) {
this.filterAndProcessTags(portalTags);
this.printTags(sender, portalTags);
TagReader.printArgs(sender, portalTags);
}
sender.sendMessage("");
@ -93,7 +93,7 @@ public class CreatePortalSubCommand extends CreateTaggedSubCommand {
sender.sendMessage(Lang.translate("messageprefix.positive")
+ Lang.translate("command.create.complete"));
sender.sendMessage(Lang.translate("command.create.tags"));
this.printTags(sender, portal.getArgs());
TagReader.printArgs(sender, portal.getArgs());
} else {
sender.sendMessage(Lang.translate("messageprefix.negative")
+ Lang.translate("command.create.error"));

View File

@ -0,0 +1,54 @@
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.services.PortalServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.util.TagReader;
import java.util.List;
public class InfoPortalSubCommand implements SubCommand {
@Inject
PortalServices portalServices;
@Override
public void onCommand(CommandSenderContainer sender, String[] args) {
if (args.length > 1) {
var portalName = args[1];
var portal = portalServices.getPortal(portalName);
if(portal == null) {
sender.sendMessage(Lang.translate("messageprefix.negative")
+ Lang.translateInsertVariables("command.portal.info.notfound", portalName));
return;
}
sender.sendMessage(Lang.translate("messageprefix.positive")
+ Lang.translateInsertVariables("command.portal.info.complete", portalName));
TagReader.printArgs(sender, portal.getArgs());
} else {
sender.sendMessage(Lang.translate("command.portal.info.noname"));
}
}
@Override
public boolean hasPermission(CommandSenderContainer sender) {
return true;
}
@Override
public List<String> onTabComplete(CommandSenderContainer sender,
String[] args) {
return portalServices.getPortalNames();
}
@Override
public String getBasicHelpText() {
return Lang.translate("command.portal.list.help");
}
@Override
public String getDetailedHelpText() {
return Lang.translate("command.portal.list.help");
}
}

View File

@ -0,0 +1,8 @@
package com.sekwah.advancedportals.core.connector.containers;
public enum GameMode {
SURVIVAL,
CREATIVE,
ADVENTURE,
SPECTATOR
}

View File

@ -40,4 +40,6 @@ public interface PlayerContainer extends EntityContainer {
void playSound(String sound, float volume, float pitch);
ServerContainer getServer();
GameMode getGameMode();
}

View File

@ -90,6 +90,10 @@ public class PortalServices {
return null;
}
public AdvancedPortal getPortal(String portalName) {
return portalCache.get(portalName);
}
public enum PortalActivationResult {
NOT_IN_PORTAL,
PORTAL_TELEPORTED,

View File

@ -7,6 +7,7 @@ import com.sekwah.advancedportals.core.repository.ConfigRepository;
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;
public class CommandTag implements Tag.Activation, Tag.Split, Tag.Creation {

View File

@ -11,8 +11,8 @@ import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.Random;
import javax.annotation.Nullable;
import java.util.Random;
public class CooldownTag implements Tag.Activation, Tag.Creation {
@Inject

View File

@ -10,8 +10,9 @@ import com.sekwah.advancedportals.core.services.DestinationServices;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.ActivationData;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.List;
import javax.annotation.Nullable;
import java.util.List;
public class DestiTag implements Tag.Activation, Tag.AutoComplete, Tag.Split {
public static String TAG_NAME = "destination";

View File

@ -4,8 +4,9 @@ import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.registry.TagTarget;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.List;
import javax.annotation.Nullable;
import java.util.List;
/**
* The name of the destination or portal.

View File

@ -8,6 +8,7 @@ import com.sekwah.advancedportals.core.util.InfoLogger;
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 javax.inject.Inject;
@ -25,7 +26,7 @@ public class PermissionTag implements Tag.Activation {
private final String[] aliases = new String[] {"perm"};
private final TagType[] tagTypes = new TagType[] {TagType.PORTAL};
private final TagType[] tagTypes = new TagType[] {TagType.PORTAL, TagType.DESTINATION};
@Override
public TagType[] getTagTypes() {

View File

@ -1,5 +1,6 @@
package com.sekwah.advancedportals.core.tags;
import com.sekwah.advancedportals.core.connector.containers.GameMode;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.registry.TagTarget;
import com.sekwah.advancedportals.core.repository.ConfigRepository;
@ -55,6 +56,9 @@ public class PortalEventTag implements Tag.Activation, Tag.AutoComplete, Tag.Den
@Override
public boolean preActivated(TagTarget target, PlayerContainer player,
ActivationData activeData, String[] argData) {
if(player.getGameMode() == GameMode.CREATIVE) {
return true;
}
return !Objects.equals(argData[0], "true") || activeData.getTriggerType() == TriggerType.PORTAL;
}

View File

@ -4,8 +4,9 @@ import com.google.inject.Inject;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.util.Lang;
import com.sekwah.advancedportals.core.warphandler.Tag;
import java.util.List;
import javax.annotation.Nullable;
import java.util.List;
public class TriggerBlockTag implements Tag.AutoComplete, Tag.Split {
@Inject

View File

@ -1,8 +1,10 @@
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;
public class TagReader {
public static boolean isClosedString(String[] args) {
@ -94,4 +96,21 @@ public class TagReader {
}
return null;
}
public static void printArgs(CommandSenderContainer sender,
List<DataTag> dataTags) {
for (DataTag tag : dataTags) {
if (tag.VALUES.length == 1) {
sender.sendMessage(" \u00A7a" + tag.NAME + "\u00A77:\u00A7e"
+ tag.VALUES[0]);
} else {
for (int i = 0; i < tag.VALUES.length; i++) {
sender.sendMessage(" \u00A7a" + tag.NAME + "\u00A77[" + i
+ "]:\u00A7e" + tag.VALUES[i]);
}
}
}
}
}

View File

@ -72,6 +72,10 @@ value needs spaces use the format tag:"value with spaces"
command.createdesti.complete= The destination has been successfully
created.
command.portal.info.complete= Portal information for &e%1$s&a:
command.portal.info.notfound= No portal by the name &e%1$s &cwas found.
command.create.tags=&aTags&7:
command.playeronly= Sorry but that command can only be run by a player.

View File

@ -2,6 +2,7 @@ package com.sekwah.advancedportals.spigot.connector.container;
import com.google.inject.Inject;
import com.sekwah.advancedportals.core.AdvancedPortalsCore;
import com.sekwah.advancedportals.core.connector.containers.GameMode;
import com.sekwah.advancedportals.core.connector.containers.PlayerContainer;
import com.sekwah.advancedportals.core.connector.containers.ServerContainer;
import com.sekwah.advancedportals.core.serializeddata.BlockLocation;
@ -105,6 +106,15 @@ public class SpigotPlayerContainer
return true;
}
@Override
public GameMode getGameMode() {
try {
return GameMode.valueOf(this.player.getGameMode().name());
} catch (IllegalArgumentException e) {
return GameMode.SURVIVAL;
}
}
public Player getPlayer() {
return this.player;
}