Skip to content
Merged

5.1 #683

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ repositories {
name = 'enginehub'
url = uri('https://maven.enginehub.org/repo/')
}
maven {
name = 'benthecat'
url = uri('https://repo.c0ding.party/multiverse-beta')
}
}

configure(apiDependencies) {
Expand All @@ -21,7 +25,7 @@ configure(apiDependencies) {

dependencies {
// Multiverse
externalPlugin 'org.mvplugins.multiverse.core:multiverse-core:5.0.0-SNAPSHOT'
externalPlugin 'org.mvplugins.multiverse.core:multiverse-core:5.1.0-SNAPSHOT'

// WorldEdit
externalPlugin('com.sk89q.worldedit:worldedit-bukkit:7.2.9') {
Expand Down
401 changes: 145 additions & 256 deletions src/main/java/org/mvplugins/multiverse/portals/MVPortal.java

Large diffs are not rendered by default.

106 changes: 106 additions & 0 deletions src/main/java/org/mvplugins/multiverse/portals/MVPortalNodes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package org.mvplugins.multiverse.portals;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.mvplugins.multiverse.core.MultiverseCoreApi;
import org.mvplugins.multiverse.core.config.node.ConfigNode;
import org.mvplugins.multiverse.core.config.node.Node;
import org.mvplugins.multiverse.core.config.node.NodeGroup;
import org.mvplugins.multiverse.core.destination.DestinationInstance;
import org.mvplugins.multiverse.core.destination.DestinationsProvider;
import org.mvplugins.multiverse.core.exceptions.MultiverseException;
import org.mvplugins.multiverse.external.vavr.control.Try;
import org.mvplugins.multiverse.portals.utils.MultiverseRegion;

import java.util.Collections;
import java.util.List;

final class MVPortalNodes {

private final NodeGroup nodes = new NodeGroup();

private MultiversePortals plugin;
private MVPortal portal;
private DestinationsProvider destinationsProvider;

MVPortalNodes(MultiversePortals plugin, MVPortal portal) {
this.plugin = plugin;
this.portal = portal;
this.destinationsProvider = MultiverseCoreApi.get().getDestinationsProvider();
}

NodeGroup getNodes() {
return nodes;
}

private <N extends Node> N node(N node) {
nodes.add(node);
return node;
}

final ConfigNode<Material> currency = node(ConfigNode.builder("currency", Material.class)
.defaultValue(Material.AIR)
.aliases("curr")
.build());

final ConfigNode<Double> price = node(ConfigNode.builder("price", Double.class)
.defaultValue(0.0)
.build());

final ConfigNode<Boolean> safeTeleport = node(ConfigNode.builder("safe-teleport", Boolean.class)
.defaultValue(true)
.aliases("safe")
.build());

final ConfigNode<Boolean> teleportNonPlayers = node(ConfigNode.builder("teleport-non-players", Boolean.class)
.defaultValue(false)
.aliases("telenonplayers")
.build());

final ConfigNode<String> owner = node(ConfigNode.builder("owner", String.class)
.defaultValue("")
.build());

final ConfigNode<String> location = node(ConfigNode.builder("location", String.class)
.defaultValue("")
.aliases("loc")
.suggester((sender, input) -> {
if (sender instanceof Player player && plugin.getPortalSession(player).getSelectedRegion() != null) {
return List.of("@selected-region");
}
return Collections.emptyList();
})
.stringParser((sender, input, type) -> {
if (input.equals("@selected-region")) {
if (!(sender instanceof Player player)) {
return Try.failure(new MultiverseException("You can only use '@selected-region' as a player."));
}
MultiverseRegion region = plugin.getPortalSession(player).getSelectedRegion();
if (region == null) {
return Try.failure(new MultiverseException("You must select a region first. See `/mvp wand` for more info."));
}
return Try.success(region.toString());
}
PortalLocation portalLocation = PortalLocation.parseLocation(input);
if (!portalLocation.isValidLocation()) {
return Try.failure(new MultiverseException("Invalid location format. The portal location must be in the format `WORLD:X,Y,Z:X,Y,Z`."));
}
return Try.success(portalLocation.toString());
})
.onSetValue((oldValue, newValue) -> portal.setPortalLocationInternal(PortalLocation.parseLocation(newValue)))
.build());

final ConfigNode<String> destination = node(ConfigNode.builder("destination", String.class)
.defaultValue("")
.aliases("dest")
.suggester((sender, input) -> destinationsProvider.suggestDestinationStrings(sender, input))
.stringParser((sender, input, type) -> destinationsProvider.parseDestination(sender, input)
.map(DestinationInstance::toString)
.toTry())
.build());

final ConfigNode<Double> version = node(ConfigNode.builder("version", Double.class)
.defaultValue(0.0)
.hidden()
.build());
}
Loading
Loading