mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-16 13:51:41 +00:00
work on fabric commands
This commit is contained in:
@@ -49,4 +49,8 @@ public interface TerraPlugin extends LoaderRegistrar {
|
|||||||
DebugLogger getDebugLogger();
|
DebugLogger getDebugLogger();
|
||||||
|
|
||||||
EventManager getEventManager();
|
EventManager getEventManager();
|
||||||
|
|
||||||
|
default String getVersion() {
|
||||||
|
return "@VERSION@";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,11 @@ public class TerraCommandManager implements CommandManager {
|
|||||||
pluginInjector.inject(argumentParser);
|
pluginInjector.inject(argumentParser);
|
||||||
|
|
||||||
field.setAccessible(true);
|
field.setAccessible(true);
|
||||||
field.set(template, argumentParser.parse(state.getSender(), state.getArgument(argument)));
|
String value = state.getArgument(argument);
|
||||||
|
|
||||||
|
if(value == null) value = holder.argumentMap.get(argumentTarget.value()).defaultValue();
|
||||||
|
|
||||||
|
field.set(template, argumentParser.parse(state.getSender(), value));
|
||||||
}
|
}
|
||||||
if(field.isAnnotationPresent(SwitchTarget.class)) {
|
if(field.isAnnotationPresent(SwitchTarget.class)) {
|
||||||
SwitchTarget switchTarget = field.getAnnotation(SwitchTarget.class);
|
SwitchTarget switchTarget = field.getAnnotation(SwitchTarget.class);
|
||||||
@@ -200,7 +204,7 @@ public class TerraCommandManager implements CommandManager {
|
|||||||
|
|
||||||
private int getMaxArgumentDepth(CommandHolder holder) {
|
private int getMaxArgumentDepth(CommandHolder holder) {
|
||||||
int max = 0;
|
int max = 0;
|
||||||
max = FastMath.max(holder.arguments.size(), max);
|
max = FastMath.max(holder.arguments.size() + holder.switchList.size(), max);
|
||||||
for(CommandHolder value : holder.subcommands.values()) {
|
for(CommandHolder value : holder.subcommands.values()) {
|
||||||
max = FastMath.max(max, getMaxArgumentDepth(value) + 1);
|
max = FastMath.max(max, getMaxArgumentDepth(value) + 1);
|
||||||
}
|
}
|
||||||
@@ -240,6 +244,7 @@ public class TerraCommandManager implements CommandManager {
|
|||||||
private final Map<String, CommandHolder> subcommands = new HashMap<>();
|
private final Map<String, CommandHolder> subcommands = new HashMap<>();
|
||||||
private final Map<String, String> switches = new HashMap<>();
|
private final Map<String, String> switches = new HashMap<>();
|
||||||
private final List<Argument> arguments;
|
private final List<Argument> arguments;
|
||||||
|
private final List<Switch> switchList;
|
||||||
private final Map<String, Argument> argumentMap = new HashMap<>();
|
private final Map<String, Argument> argumentMap = new HashMap<>();
|
||||||
|
|
||||||
private CommandHolder(Class<? extends CommandTemplate> clazz) throws MalformedCommandException {
|
private CommandHolder(Class<? extends CommandTemplate> clazz) throws MalformedCommandException {
|
||||||
@@ -267,7 +272,11 @@ public class TerraCommandManager implements CommandManager {
|
|||||||
argumentMap.put(argument.value(), argument);
|
argumentMap.put(argument.value(), argument);
|
||||||
}
|
}
|
||||||
arguments = Arrays.asList(command.arguments());
|
arguments = Arrays.asList(command.arguments());
|
||||||
} else arguments = Collections.emptyList();
|
switchList = Arrays.asList(command.switches());
|
||||||
|
} else {
|
||||||
|
arguments = Collections.emptyList();
|
||||||
|
switchList = Collections.emptyList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,6 @@ public @interface Argument {
|
|||||||
Class<? extends TabCompleter> tabCompleter() default NothingCompleter.class;
|
Class<? extends TabCompleter> tabCompleter() default NothingCompleter.class;
|
||||||
|
|
||||||
Class<? extends ArgumentParser<?>> argumentParser() default StringArgumentParser.class;
|
Class<? extends ArgumentParser<?>> argumentParser() default StringArgumentParser.class;
|
||||||
|
|
||||||
|
String defaultValue() default "";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ public final class CommandUtil {
|
|||||||
manager.register("profile", ProfileCommand.class);
|
manager.register("profile", ProfileCommand.class);
|
||||||
manager.register("reload", ReloadCommand.class);
|
manager.register("reload", ReloadCommand.class);
|
||||||
manager.register("addons", AddonsCommand.class);
|
manager.register("addons", AddonsCommand.class);
|
||||||
|
manager.register("version", VersionCommand.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.command.CommandTemplate;
|
|||||||
import com.dfsek.terra.api.command.annotation.Command;
|
import com.dfsek.terra.api.command.annotation.Command;
|
||||||
import com.dfsek.terra.api.command.annotation.Subcommand;
|
import com.dfsek.terra.api.command.annotation.Subcommand;
|
||||||
import com.dfsek.terra.api.platform.CommandSender;
|
import com.dfsek.terra.api.platform.CommandSender;
|
||||||
|
import com.dfsek.terra.commands.structure.SpawnCommand;
|
||||||
import com.dfsek.terra.commands.structure.StructureExportCommand;
|
import com.dfsek.terra.commands.structure.StructureExportCommand;
|
||||||
import com.dfsek.terra.commands.structure.StructureLoadCommand;
|
import com.dfsek.terra.commands.structure.StructureLoadCommand;
|
||||||
|
|
||||||
@@ -18,6 +19,11 @@ import com.dfsek.terra.commands.structure.StructureLoadCommand;
|
|||||||
clazz = StructureLoadCommand.class,
|
clazz = StructureLoadCommand.class,
|
||||||
value = "load",
|
value = "load",
|
||||||
aliases = "ld"
|
aliases = "ld"
|
||||||
|
),
|
||||||
|
@Subcommand(
|
||||||
|
clazz = SpawnCommand.class,
|
||||||
|
value = "spawn",
|
||||||
|
aliases = "s"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.dfsek.terra.commands;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
|
import com.dfsek.terra.api.command.annotation.Command;
|
||||||
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.platform.CommandSender;
|
||||||
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
|
|
||||||
|
@Command
|
||||||
|
public class VersionCommand implements CommandTemplate {
|
||||||
|
@Inject
|
||||||
|
private TerraPlugin main;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender sender) {
|
||||||
|
String terraVersion = main.getVersion();
|
||||||
|
LangUtil.send("command.version", sender, terraVersion, main.platformName());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.dfsek.terra.commands.structure;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
|
import com.dfsek.terra.api.command.CommandTemplate;
|
||||||
|
import com.dfsek.terra.api.command.annotation.Command;
|
||||||
|
import com.dfsek.terra.api.command.annotation.type.DebugCommand;
|
||||||
|
import com.dfsek.terra.api.command.annotation.type.PlayerCommand;
|
||||||
|
import com.dfsek.terra.api.command.annotation.type.WorldCommand;
|
||||||
|
import com.dfsek.terra.api.injection.annotations.Inject;
|
||||||
|
import com.dfsek.terra.api.math.vector.Location;
|
||||||
|
import com.dfsek.terra.api.platform.CommandSender;
|
||||||
|
import com.dfsek.terra.api.platform.entity.Player;
|
||||||
|
import com.dfsek.terra.api.structures.parser.lang.constants.NumericConstant;
|
||||||
|
import com.dfsek.terra.api.structures.script.TerraImplementationArguments;
|
||||||
|
import com.dfsek.terra.api.structures.script.functions.CheckFunction;
|
||||||
|
import com.dfsek.terra.api.structures.structure.Rotation;
|
||||||
|
import com.dfsek.terra.api.structures.structure.buffer.StructureBuffer;
|
||||||
|
import com.dfsek.terra.api.structures.tokenizer.Position;
|
||||||
|
import com.dfsek.terra.api.util.FastRandom;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
@DebugCommand
|
||||||
|
@PlayerCommand
|
||||||
|
@WorldCommand
|
||||||
|
@Command
|
||||||
|
public class SpawnCommand implements CommandTemplate {
|
||||||
|
@Inject
|
||||||
|
private TerraPlugin main;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(CommandSender sender) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
Location p = player.getLocation();
|
||||||
|
int x = p.getBlockX();
|
||||||
|
int y = p.getBlockY();
|
||||||
|
int z = p.getBlockZ();
|
||||||
|
Position dummy = new Position(0, 0);
|
||||||
|
|
||||||
|
String check = new CheckFunction(main, new NumericConstant(0, dummy), new NumericConstant(0, dummy), new NumericConstant(0, dummy), dummy).apply(new TerraImplementationArguments(new StructureBuffer(
|
||||||
|
new com.dfsek.terra.api.math.vector.Location(player.getWorld(), x, y, z)
|
||||||
|
), Rotation.NONE, new FastRandom(), 0), new HashMap<>());
|
||||||
|
|
||||||
|
sender.sendMessage("Found: " + check);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,9 @@ import com.dfsek.terra.api.platform.entity.Player;
|
|||||||
import com.dfsek.terra.api.structures.script.StructureScript;
|
import com.dfsek.terra.api.structures.script.StructureScript;
|
||||||
import com.dfsek.terra.api.structures.structure.Rotation;
|
import com.dfsek.terra.api.structures.structure.Rotation;
|
||||||
import com.dfsek.terra.api.util.FastRandom;
|
import com.dfsek.terra.api.util.FastRandom;
|
||||||
|
import com.dfsek.terra.commands.structure.argument.ScriptArgumentParser;
|
||||||
|
import com.dfsek.terra.commands.structure.completer.RotationCompleter;
|
||||||
|
import com.dfsek.terra.commands.structure.completer.ScriptCompleter;
|
||||||
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
@@ -34,7 +37,8 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||||||
value = "rotation",
|
value = "rotation",
|
||||||
required = false,
|
required = false,
|
||||||
tabCompleter = RotationCompleter.class,
|
tabCompleter = RotationCompleter.class,
|
||||||
argumentParser = IntegerArgumentParser.class
|
argumentParser = IntegerArgumentParser.class,
|
||||||
|
defaultValue = "0"
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
switches = {
|
switches = {
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.structure;
|
package com.dfsek.terra.commands.structure.argument;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.arg.ArgumentParser;
|
import com.dfsek.terra.api.command.arg.ArgumentParser;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.structure;
|
package com.dfsek.terra.commands.structure.completer;
|
||||||
|
|
||||||
import com.dfsek.terra.api.command.tab.TabCompleter;
|
import com.dfsek.terra.api.command.tab.TabCompleter;
|
||||||
import com.dfsek.terra.api.platform.CommandSender;
|
import com.dfsek.terra.api.platform.CommandSender;
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.commands.structure;
|
package com.dfsek.terra.commands.structure.completer;
|
||||||
|
|
||||||
import com.dfsek.terra.api.TerraPlugin;
|
import com.dfsek.terra.api.TerraPlugin;
|
||||||
import com.dfsek.terra.api.command.tab.TabCompleter;
|
import com.dfsek.terra.api.command.tab.TabCompleter;
|
||||||
+3
-3
@@ -1,19 +1,19 @@
|
|||||||
package com.dfsek.terra.config.loaders.config.biome.templates.provider;
|
package com.dfsek.terra.config.loaders.config.biome.templates.provider;
|
||||||
|
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.terra.api.world.biome.TerraBiome;
|
|
||||||
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.BiomeProvider;
|
||||||
import com.dfsek.terra.api.world.biome.provider.SingleBiomeProvider;
|
import com.dfsek.terra.api.world.biome.provider.SingleBiomeProvider;
|
||||||
|
import com.dfsek.terra.config.builder.BiomeBuilder;
|
||||||
|
|
||||||
public class SingleBiomeProviderTemplate extends BiomeProviderTemplate {
|
public class SingleBiomeProviderTemplate extends BiomeProviderTemplate {
|
||||||
@Value("biome")
|
@Value("biome")
|
||||||
private TerraBiome biome;
|
private BiomeBuilder biome;
|
||||||
|
|
||||||
public SingleBiomeProviderTemplate() {
|
public SingleBiomeProviderTemplate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BiomeProvider build(long seed) {
|
public BiomeProvider build(long seed) {
|
||||||
return new SingleBiomeProvider(biome);
|
return new SingleBiomeProvider(biome.apply(seed));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
package com.dfsek.terra.bukkit.command.command;
|
|
||||||
|
|
||||||
import com.dfsek.terra.bukkit.BukkitCommandSender;
|
|
||||||
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
|
|
||||||
import com.dfsek.terra.bukkit.command.Command;
|
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class VersionCommand extends Command {
|
|
||||||
public VersionCommand(Command parent) {
|
|
||||||
super(parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return "version";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Command> getSubCommands() {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean execute(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
|
||||||
String terraVersion = ((TerraBukkitPlugin) getMain()).getDescription().getVersion();
|
|
||||||
LangUtil.send("command.version", new BukkitCommandSender(sender), terraVersion, getMain().platformName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int arguments() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompletions(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user