mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-06-11 20:13:55 +00:00
First attempt at integrating Piston as the only command system
This commit is contained in:
@ -19,15 +19,17 @@
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.brigadier.Command;
|
||||
import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import com.mojang.brigadier.tree.LiteralCommandNode;
|
||||
import com.sk89q.worldedit.util.command.CommandMapping;
|
||||
import com.sk89q.worldedit.command.util.PermissionCondition;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static net.minecraft.command.Commands.literal;
|
||||
|
||||
@ -35,11 +37,14 @@ public final class CommandWrapper {
|
||||
private CommandWrapper() {
|
||||
}
|
||||
|
||||
public static void register(CommandDispatcher<CommandSource> dispatcher, CommandMapping command) {
|
||||
for (String alias : command.getAllAliases()) {
|
||||
public static void register(CommandDispatcher<CommandSource> dispatcher, org.enginehub.piston.Command command) {
|
||||
ImmutableList.Builder<String> aliases = ImmutableList.builder();
|
||||
aliases.add(command.getName()).addAll(command.getAliases());
|
||||
for (String alias : aliases.build()) {
|
||||
LiteralArgumentBuilder<CommandSource> base = literal(alias)
|
||||
.executes(FAKE_COMMAND);
|
||||
if (command.getDescription().getPermissions().size() > 0) {
|
||||
if (command.getCondition().as(PermissionCondition.class)
|
||||
.filter(p -> p.getPermissions().size() > 0).isPresent()) {
|
||||
base.requires(requirementsFor(command));
|
||||
}
|
||||
dispatcher.register(base);
|
||||
@ -54,11 +59,14 @@ public final class CommandWrapper {
|
||||
return 1;
|
||||
};
|
||||
|
||||
private static Predicate<CommandSource> requirementsFor(CommandMapping mapping) {
|
||||
private static Predicate<CommandSource> requirementsFor(org.enginehub.piston.Command mapping) {
|
||||
return ctx -> {
|
||||
ForgePermissionsProvider permsProvider = ForgeWorldEdit.inst.getPermissionsProvider();
|
||||
return ctx.getEntity() instanceof EntityPlayerMP &&
|
||||
mapping.getDescription().getPermissions().stream()
|
||||
mapping.getCondition().as(PermissionCondition.class)
|
||||
.map(PermissionCondition::getPermissions)
|
||||
.map(Set::stream)
|
||||
.orElseGet(Stream::empty)
|
||||
.allMatch(perm -> permsProvider.hasPermission(
|
||||
(EntityPlayerMP) ctx.getEntity(), perm
|
||||
));
|
||||
|
@ -19,14 +19,13 @@
|
||||
|
||||
package com.sk89q.worldedit.forge;
|
||||
|
||||
import com.sk89q.worldedit.command.util.PermissionCondition;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.platform.AbstractPlatform;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extension.platform.Capability;
|
||||
import com.sk89q.worldedit.extension.platform.MultiUserPlatform;
|
||||
import com.sk89q.worldedit.extension.platform.Preference;
|
||||
import com.sk89q.worldedit.util.command.CommandMapping;
|
||||
import com.sk89q.worldedit.util.command.Dispatcher;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldedit.world.registry.Registries;
|
||||
import net.minecraft.command.Commands;
|
||||
@ -36,13 +35,19 @@ import net.minecraft.server.management.PlayerList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.fml.server.ServerLifecycleHooks;
|
||||
import org.enginehub.piston.Command;
|
||||
import org.enginehub.piston.CommandManager;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
|
||||
|
||||
@ -117,16 +122,17 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCommands(Dispatcher dispatcher) {
|
||||
public void registerCommands(CommandManager manager) {
|
||||
if (server == null) return;
|
||||
Commands mcMan = server.getCommandManager();
|
||||
|
||||
for (final CommandMapping command : dispatcher.getCommands()) {
|
||||
for (Command command : manager.getAllCommands().collect(toList())) {
|
||||
CommandWrapper.register(mcMan.getDispatcher(), command);
|
||||
if (command.getDescription().getPermissions().size() > 0) {
|
||||
for (int i = 1; i < command.getDescription().getPermissions().size(); i++) {
|
||||
ForgeWorldEdit.inst.getPermissionsProvider().registerPermission(command.getDescription().getPermissions().get(i));
|
||||
}
|
||||
Set<String> perms = command.getCondition().as(PermissionCondition.class)
|
||||
.map(PermissionCondition::getPermissions)
|
||||
.orElseGet(Collections::emptySet);
|
||||
if (perms.size() > 0) {
|
||||
perms.forEach(ForgeWorldEdit.inst.getPermissionsProvider()::registerPermission);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user