Exemple #1
0
        public ReadResults ByName(out ObjectiveCriterion result)
        {
            int start = StringReader.GetCursor();

            while (!StringReader.AtEndOfArgument())
            {
                StringReader.Skip();
            }
            string criterion = StringReader.GetString()[start..StringReader.GetCursor()];
Exemple #2
0
        public static ReadResults TryRead(IStringReader stringReader, out ResourceLocation result)
        {
            int start = stringReader.GetCursor();

            while (stringReader.CanRead() && IsAllowedInResourceLocation(stringReader.Peek()))
            {
                stringReader.Skip();
            }
            string input = stringReader.GetString()[start..stringReader.GetCursor()];
        public ReadResults Parse(IStringReader reader, DispatcherResources resources, out StructureRotation result)
        {
            result = default;
            int start = reader.GetCursor();

            while (reader.CanRead() && IsUnquotedStringPart(reader.Peek()))
            {
                reader.Skip();
            }
            string structureRotation = reader.GetString()[start..reader.GetCursor()];
        public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Operation result)
        {
            result = default;
            int start = reader.GetCursor();

            while (!reader.AtEndOfArgument())
            {
                reader.Skip();
            }
            string operation = reader.GetString()[start..reader.GetCursor()];
Exemple #5
0
 public IEnumerable <Node> GetRelevantNodes(IStringReader reader)
 {
     if (Literals.Count > 0)
     {
         int start = reader.GetCursor();
         while (!reader.AtEndOfArgument())
         {
             reader.Skip();
         }
         string value = reader.GetString()[start..reader.GetCursor()];
Exemple #6
0
            public static DiffRange Parse(IStringReader reader)
            {
                var range = new DiffRange();

                reader.Skip("@@");
                reader.SkipWhitespace();
                reader.Skip('-');
                range.LeftFrom = reader.ReadInt();
                if (reader.Skip(','))
                {
                    range.LeftTo = range.LeftFrom + reader.ReadInt();
                }
                else
                {
                    range.LeftTo = range.LeftFrom;
                }
                reader.SkipWhitespace();
                reader.Skip('+');
                range.RightFrom = reader.ReadInt();
                if (reader.Skip(','))
                {
                    range.RightTo = range.RightFrom + reader.ReadInt();
                }
                else
                {
                    range.RightTo = range.RightFrom;
                }
                reader.SkipWhitespace();
                reader.Skip("@@");
                return(range);
            }
        public ReadResults Parse(out EntitySelector result)
        {
            result = default;
            ReadResults readResults;

            if (Reader.CanRead() && Reader.Peek() == '@')
            {
                Reader.Skip();
                readResults = ParseSelector();
            }
            else
            {
                readResults = ParseNameOrUuid();
            }

            if (readResults.Successful)
            {
                result = GetSelector();
            }

            return(readResults);
        }
Exemple #8
0
 private ReadResults ReadTag(out bool isTag)
 {
     isTag = false;
     if (StringReader.CanRead() && StringReader.Peek() == '#')
     {
         if (!ForTesting)
         {
             return(ReadResults.Failure(CommandError.ItemTagsNotAllowed().WithContext(StringReader)));
         }
         isTag = true;
         StringReader.Skip();
     }
     return(ReadResults.Success());
 }
Exemple #9
0
        private ReadResults ReadArrayTag(out INbtTag result)
        {
            result = default;
            ReadResults readResults = Reader.Expect('[');

            if (!readResults.Successful)
            {
                return(readResults);
            }
            int  start = Reader.GetCursor();
            char type  = Reader.Read();

            Reader.Skip();
            Reader.SkipWhitespace();
            if (!Reader.CanRead())
            {
                return(ReadResults.Failure(CommandError.ExpectedValue().WithContext(Reader)));
            }

            INbtCollectionTag list;

            switch (type)
            {
            case 'B':
                list = new ByteArrayNbtTag();
                break;

            case 'I':
                list = new IntegerArrayNbtTag();
                break;

            case 'L':
                list = new LongArrayNbtTag();
                break;

            default:
                Reader.SetCursor(start);
                return(ReadResults.Failure(CommandError.InvalidArrayType(type).WithContext(Reader)));
            }
            readResults = ReadListContents(ref list);
            if (readResults.Successful)
            {
                result = list;
            }
            return(readResults);
        }
        private static ReadResults SetExecutor(EntitySelectorParser parser, IStringReader reader, bool negated, string originalName, int previousStart, DispatcherResources resources, bool useBedrock)
        {
            if (parser.IsTypeLimited())
            {
                reader.SetCursor(previousStart);
                return(ReadResults.Failure(CommandError.InapplicableOption(originalName).WithContext(reader)));
            }

            int start = reader.GetCursor();

            bool isTag = false;

            if (reader.CanRead() && reader.Peek() == '#')
            {
                reader.Skip();
                isTag = true;
            }

            ReadResults readResults = ResourceLocation.TryRead(reader, out ResourceLocation entity);

            if (!readResults.Successful)
            {
                return(readResults);
            }

            if (ResourceLocation.PLAYER_ENTITY.Equals(entity) && !negated)
            {
                parser.SetIncludesEntities(false);
            }
            else if (useBedrock)
            {
                // Temporary
                return(ReadResults.Success());
            }
            else if (!isTag)
            {
                if (!resources.Entities.Contains(entity))
                {
                    reader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.InvalidEntityType(entity).WithContext(reader)));
                }
            }
            parser.AddArgument(new ParsedArgument <Entity>(new Entity(entity, isTag), false));
            return(ReadResults.Success());
        }
        public ReadResults ParseInteger(out ICoordinates result)
        {
            result = default;
            WorldCoordinateParser worldCoordinateParser = new WorldCoordinateParser(StringReader, UseBedrock);

            ReadResults readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate x);

            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate y);
            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate z);
            if (readResults.Successful)
            {
                result = new WorldCoordinates(x, y, z);
            }
            return(readResults);
        }
Exemple #12
0
        public ReadResults Parse(IStringReader reader, DispatcherResources resources, out Function result)
        {
            result = default;
            bool isTag = false;

            if (reader.CanRead() && reader.Peek() == '#')
            {
                reader.Skip();
                isTag = true;
            }

            ReadResults readResults = ResourceLocation.TryRead(reader, out ResourceLocation function);

            if (readResults.Successful)
            {
                result = new Function(function, isTag);
            }
            return(readResults);
        }
        public ReadResults Parse(IStringReader reader, DispatcherResources resources, out ScoreHolder result)
        {
            result = default;

            if (reader.CanRead() && reader.Peek() == '@')
            {
                EntitySelectorParser entitySelectorParser = new EntitySelectorParser(reader, resources, UseBedrock);
                ReadResults          readResults          = entitySelectorParser.Parse(out EntitySelector entitySelector);
                if (!readResults.Successful)
                {
                    return(readResults);
                }
                if (!Multiple && entitySelector.MaxResults > 1)
                {
                    return(ReadResults.Failure(CommandError.SelectorTooManyEntities()));
                }
                result = new ScoreHolder(null, entitySelector);
                return(ReadResults.Success());
            }

            if (UseBedrock)
            {
                ReadResults readResults = reader.ReadString(out string name);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                result = new ScoreHolder(name, null);
                return(ReadResults.Success());
            }
            else
            {
                int start = reader.GetCursor();
                while (!reader.AtEndOfArgument())
                {
                    reader.Skip();
                }
                string name = reader.GetString()[start..reader.GetCursor()];
Exemple #14
0
 public static DiffRange Parse(IStringReader reader)
 {
     var range = new DiffRange();
     reader.Skip("@@");
     reader.SkipWhitespace();
     reader.Skip('-');
     range.LeftFrom = reader.ReadInt();
     if (reader.Skip(','))
     {
         range.LeftTo = range.LeftFrom + reader.ReadInt();
     }
     else
     {
         range.LeftTo = range.LeftFrom;
     }
     reader.SkipWhitespace();
     reader.Skip('+');
     range.RightFrom = reader.ReadInt();
     if (reader.Skip(','))
     {
         range.RightTo = range.RightFrom + reader.ReadInt();
     }
     else
     {
         range.RightTo = range.RightFrom;
     }
     reader.SkipWhitespace();
     reader.Skip("@@");
     return range;
 }
        private static ReadResults ReadAdvancements(EntitySelectorParser parser, IStringReader reader)
        {
            ReadResults readResults = reader.Expect('{');

            if (!readResults.Successful)
            {
                return(readResults);
            }

            reader.SkipWhitespace();
            while (reader.CanRead() && reader.Peek() != '}')
            {
                reader.SkipWhitespace();
                readResults = ResourceLocation.TryRead(reader, out ResourceLocation advancement);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                readResults = reader.Expect('=');
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                if (reader.CanRead() && reader.Peek() == '{')
                {
                    reader.Skip();
                    reader.SkipWhitespace();
                    while (reader.CanRead() && reader.Peek() != '}')
                    {
                        reader.SkipWhitespace();
                        readResults = reader.ReadUnquotedString(out _);
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        readResults = reader.Expect('=');
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        readResults = reader.ReadBoolean(out _);
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        if (reader.CanRead())
                        {
                            char c = reader.Read();
                            if (c == ',')
                            {
                                continue;
                            }
                            if (c == '}')
                            {
                                break;
                            }
                        }
                    }
                }
                else
                {
                    readResults = reader.ReadBoolean(out _);
                    if (!readResults.Successful)
                    {
                        return(readResults);
                    }
                }

                parser.AddArgument(new ParsedArgument <Advancement>(new Advancement(advancement), false));
                reader.SkipWhitespace();
                if (reader.CanRead())
                {
                    char c = reader.Read();
                    if (c == ',')
                    {
                        continue;
                    }
                    if (c == '}')
                    {
                        return(ReadResults.Success());
                    }
                }
                return(ReadResults.Failure(CommandError.ExpectedCharacter('}').WithContext(reader)));
            }

            reader.SkipWhitespace();
            return(reader.Expect('}'));
        }