Esempio n. 1
0
 /// <summary>
 /// Creates a function tag minecraft:tick, and adds the specified function id to it.
 /// </summary>
 /// <remarks>
 /// The specified function will run every tick.
 /// </remarks>
 /// <param name="function">The function's ResourceLocation to run every tick</param>
 public void CreateTickTag(ResourceLocation function)
 {
     if (TickTag == null)
     {
         EnsureMCNamespace();
         TickTag = new FunctionTag(new ResourceLocation(MinecraftNamespace, "tick"));
     }
     TickTag.Add(function);
 }
Esempio n. 2
0
        public FunctionTag AddFunctionTag(string id, params ResourceLocation[] values)
        {
            FunctionTag tag = new FunctionTag(new ResourceLocation(this, id));

            foreach (ResourceLocation rl in values)
            {
                tag.Add(rl);
            }
            return(tag);
        }
Esempio n. 3
0
 /// <summary>
 /// Creates a function tag minecraft:load, and adds the specified function id to it.
 /// </summary>
 /// <param name="function">The function's ResourceLocation to run on reload</param>
 public void CreateLoadTag(ResourceLocation function)
 {
     if (function.Namespace.LoadFunction == null)
     {
         if (LoadTag == null)
         {
             EnsureMCNamespace();
             LoadTag = new FunctionTag(new ResourceLocation(MinecraftNamespace, "load"));
         }
         LoadTag.Add(function);
     }
 }
Esempio n. 4
0
        /// <summary>Executes the command.</summary>
        /// <param name="queue">The command queue involved.</param>
        /// <param name="entry">Entry to be executed.</param>
        public static void Execute(CommandQueue queue, CommandEntry entry)
        {
            TemplateObject obj      = entry.GetArgumentObject(queue, 0);
            FunctionTag    function = FunctionTag.CreateFor(obj, queue.GetTagData());

            if (function == null)
            {
                queue.HandleError(entry, "Cannot call function '" + TextStyle.Separate + obj.ToString() + TextStyle.Base + "': it does not exist!");
                return;
            }
            CommandScript script = function.Internal;

            if (entry.ShouldShowGood(queue))
            {
                entry.GoodOutput(queue, "Calling '" + function.GetDebugString() + TextStyle.Base + "'...");
            }
            CompiledCommandRunnable runnable = script.Compiled.ReferenceCompiledRunnable.Duplicate();

            if (runnable.Entry.Entries.Length > 0)
            {
                Dictionary <string, SingleCILVariable> varlookup = runnable.Entry.Entries[0].VarLookup;
                foreach (string var in entry.NamedArguments.Keys)
                {
                    if (!var.StartsWithNull())
                    {
                        if (varlookup.TryGetValue(var, out SingleCILVariable varx))
                        {
                            // TODO: Type verification!
                            runnable.Entry.GetSetter(varx.Index).Invoke(runnable, entry.GetNamedArgumentObject(queue, var));
                        }
                    }
                }
            }
            if (entry.NamedArguments.ContainsKey(CommandEntry.SAVE_NAME_ARG_ID))
            {
                bool   sgood = entry.ShouldShowGood(queue);
                string vname = entry.NamedArguments[CommandEntry.SAVE_NAME_ARG_ID].ToString();
                if (sgood)
                {
                    entry.GoodOutput(queue, "Noticing variable track for " + vname + ".");
                }
                CompiledCommandRunnable curRunnable = queue.CurrentRunnable;
                if (!entry.VarLookup.TryGetValue(vname, out SingleCILVariable locVar))
                {
                    queue.HandleError(entry, "Invalid save-to variable: " + vname + "!");
                    return;
                }
                runnable.Callback = () =>
                {
                    // TODO: Fix!

                    /*if (runnable.Entry.Entries.Length > 0)
                     * {
                     *  MapTag mt = new MapTag();
                     *  Dictionary<string, SingleCILVariable> varlookup = runnable.Entry.Entries[0].VarLookup;
                     *  foreach (SingleCILVariable vara in varlookup.Values)
                     *  {
                     *      if (runnable.LocalVariables[vara.Index].Internal != null)
                     *      {
                     *          mt.Internal.Add(vara.Name, runnable.LocalVariables[vara.Index].Internal);
                     *      }
                     *  }
                     *  curRunnable.LocalVariables[locVar.Index].Internal = mt;
                     * }*/
                    if (sgood)
                    {
                        entry.GoodOutput(queue, "Call complete.");
                    }
                };
            }
            queue.RunningStack.Push(runnable);
        }
Esempio n. 5
0
 /// <summary>Handles the base input for a tag.</summary>
 /// <param name="data">The tag data.</param>
 /// <returns>The correct object.</returns>
 public static FunctionTag HandleOne(TagData data)
 {
     return(FunctionTag.CreateFor(data.GetModifierObjectCurrent(), data));
 }