Comment + EntityFinder WIP

This commit is contained in:
Felix Cravic 2020-07-11 14:16:36 +02:00
parent e8cd68bc3b
commit 87ab850945
13 changed files with 94 additions and 7 deletions

View File

@ -334,12 +334,13 @@ public class CommandManager {
private List<DeclareCommandsPacket.Node> toNodes(Argument argument, boolean executable) {
List<DeclareCommandsPacket.Node> nodes = new ArrayList<>();
/*DeclareCommandsPacket.Node testNode = simpleArgumentNode(nodes, argument, executable);
testNode.parser = "minecraft:range";
DeclareCommandsPacket.Node testNode = simpleArgumentNode(nodes, argument, executable);
testNode.parser = "minecraft:entity";
testNode.properties = packetWriter -> packetWriter.writeByte((byte) 0x0);
if (true) {
return nodes;
}*/
}
if (argument instanceof ArgumentBoolean) {
DeclareCommandsPacket.Node argumentNode = simpleArgumentNode(nodes, argument, executable);

View File

@ -3,6 +3,10 @@ package net.minestom.server.command.builder.arguments.minecraft;
import net.minestom.server.chat.ChatColor;
import net.minestom.server.command.builder.arguments.Argument;
/**
* Represent an argument which will give you a {@link ChatColor}
* Chat format: red, white, reset, etc...
*/
public class ArgumentColor extends Argument<ChatColor> {
public static final int UNDEFINED_COLOR = -2;

View File

@ -4,6 +4,11 @@ import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.entity.Entity;
// TODO
/**
* Represent the target selector argument
* https://minecraft.gamepedia.com/Commands#Target_selectors
*/
public class ArgumentEntity extends Argument<Entity> {
public ArgumentEntity(String id, boolean allowSpace) {

View File

@ -4,6 +4,10 @@ import net.minestom.server.utils.math.FloatRange;
import java.util.regex.Pattern;
/**
* Represent an argument which will give you a {@link FloatRange}
* Chat format: ..3, 3.., 5..10
*/
public class ArgumentFloatRange extends ArgumentRange<FloatRange> {
public ArgumentFloatRange(String id) {
@ -19,7 +23,7 @@ public class ArgumentFloatRange extends ArgumentRange<FloatRange> {
String[] split = value.split(Pattern.quote(".."));
if (split.length == 1) {
try {
Float.valueOf(split[0]); // min
Float.valueOf(split[0]);
return SUCCESS;
} catch (NumberFormatException e2) {
return FORMAT_ERROR;

View File

@ -4,6 +4,10 @@ import net.minestom.server.utils.math.IntRange;
import java.util.regex.Pattern;
/**
* Represent an argument which will give you a {@link IntRange}
* Chat format: ..3, 3.., 5..10
*/
public class ArgumentIntRange extends ArgumentRange<IntRange> {
public ArgumentIntRange(String id) {
@ -19,7 +23,7 @@ public class ArgumentIntRange extends ArgumentRange<IntRange> {
String[] split = value.split(Pattern.quote(".."));
if (split.length == 1) {
try {
Integer.valueOf(split[0]); // min
Integer.valueOf(split[0]);
return SUCCESS;
} catch (NumberFormatException e2) {
return FORMAT_ERROR;

View File

@ -7,6 +7,10 @@ import net.minestom.server.utils.time.UpdateOption;
import java.util.Arrays;
import java.util.List;
/**
* Represent an argument giving a time (day/second/tick)
* Chat format: 50d, 25s, 75t
*/
public class ArgumentTime extends Argument<UpdateOption> {
public static final int INVALID_TIME_FORMAT = -2;

View File

@ -3,6 +3,9 @@ package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.item.Enchantment;
import net.minestom.server.registry.Registries;
/**
* Represent an argument giving an item enchantment
*/
public class ArgumentEnchantment extends ArgumentRegistry<Enchantment> {
public ArgumentEnchantment(String id) {

View File

@ -3,6 +3,9 @@ package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.entity.EntityType;
import net.minestom.server.registry.Registries;
/**
* Represent an argument giving an entity type
*/
public class ArgumentEntityType extends ArgumentRegistry<EntityType> {
public ArgumentEntityType(String id) {

View File

@ -3,6 +3,9 @@ package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.particle.Particle;
import net.minestom.server.registry.Registries;
/**
* Represent an argument giving a particle type
*/
public class ArgumentParticle extends ArgumentRegistry<Particle> {
public ArgumentParticle(String id) {

View File

@ -3,6 +3,9 @@ package net.minestom.server.command.builder.arguments.minecraft.registry;
import net.minestom.server.potion.PotionType;
import net.minestom.server.registry.Registries;
/**
* Represent an argument giving a potion type
*/
public class ArgumentPotion extends ArgumentRegistry<PotionType> {
public ArgumentPotion(String id) {

View File

@ -18,9 +18,12 @@ import net.minestom.server.instance.*;
import net.minestom.server.instance.block.CustomBlock;
import net.minestom.server.network.packet.PacketWriter;
import net.minestom.server.network.packet.server.play.*;
import net.minestom.server.utils.ArrayUtils;
import net.minestom.server.utils.BlockPosition;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.Vector;
import net.minestom.server.utils.*;
import net.minestom.server.utils.chunk.ChunkUtils;
import net.minestom.server.utils.entity.EntityUtils;
import net.minestom.server.utils.player.PlayerUtils;
import net.minestom.server.utils.time.TimeUnit;
import net.minestom.server.utils.validate.Check;

View File

@ -0,0 +1,48 @@
package net.minestom.server.utils.entity;
import net.minestom.server.entity.EntityType;
import net.minestom.server.utils.math.IntRange;
/**
* Represent a query which can be call to find one or multiple entities
* It is based on the target selectors used in commands
*/
public class EntityFinder {
// Commands option
private boolean onlySingleEntity;
private boolean onlyPlayers;
// Simple float
private float x, y, z;
private float dx, dy, dz;
// Range
private IntRange distance;
private IntRange level;
// By traits
private int limit;
private EntitySort entitySort;
private EntityType entityType;
public boolean isOnlySingleEntity() {
return onlySingleEntity;
}
public void setOnlySingleEntity(boolean onlySingleEntity) {
this.onlySingleEntity = onlySingleEntity;
}
public boolean isOnlyPlayers() {
return onlyPlayers;
}
public void setOnlyPlayers(boolean onlyPlayers) {
this.onlyPlayers = onlyPlayers;
}
public enum EntitySort {
ARBITRARY, FURTHEST, NEAREST, RANDOM
}
}

View File

@ -1,10 +1,12 @@
package net.minestom.server.utils;
package net.minestom.server.utils.entity;
import net.minestom.server.MinecraftServer;
import net.minestom.server.entity.Entity;
import net.minestom.server.instance.Chunk;
import net.minestom.server.instance.Instance;
import net.minestom.server.instance.block.Block;
import net.minestom.server.utils.BlockPosition;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.chunk.ChunkUtils;
public class EntityUtils {