| 64 | } |
| 65 | |
| 66 | func (c *Commands) encodeNode(w encoding.Writer, node Node) error { |
| 67 | if err := w.Byte(node.Flags); err != nil { |
| 68 | return err |
| 69 | } |
| 70 | if err := w.VarInt(int32(len(node.Children))); err != nil { |
| 71 | return err |
| 72 | } |
| 73 | for _, child := range node.Children { |
| 74 | if err := w.VarInt(child); err != nil { |
| 75 | return err |
| 76 | } |
| 77 | } |
| 78 | if node.Flags&NodeRedirect != 0 { |
| 79 | if err := w.VarInt(node.RedirectNode); err != nil { |
| 80 | return err |
| 81 | } |
| 82 | } |
| 83 | if node.Flags&NodeType > 0 { |
| 84 | if err := w.String(node.Name); err != nil { |
| 85 | return err |
| 86 | } |
| 87 | } |
| 88 | if node.Flags&NodeArgument != 0 { |
| 89 | if err := w.VarInt(node.ParserId); err != nil { |
| 90 | return err |
| 91 | } |
| 92 | } |
| 93 | if node.Flags&NodeArgument != 0 { |
| 94 | for _, p := range node.Properties { |
| 95 | switch prop := p.(type) { |
| 96 | case float64: |
| 97 | if err := w.Double(prop); err != nil { |
| 98 | return err |
| 99 | } |
| 100 | case float32: |
| 101 | if err := w.Float(prop); err != nil { |
| 102 | return err |
| 103 | } |
| 104 | case int8: |
| 105 | if err := w.Byte(prop); err != nil { |
| 106 | return err |
| 107 | } |
| 108 | case int32: |
| 109 | if err := w.Int(prop); err != nil { |
| 110 | return err |
| 111 | } |
| 112 | case int64: |
| 113 | if err := w.Long(prop); err != nil { |
| 114 | return err |
| 115 | } |
| 116 | case string: |
| 117 | if err := w.Identifier(prop); err != nil { |
| 118 | return err |
| 119 | } |
| 120 | case int: |
| 121 | if err := w.VarInt(int32(prop)); err != nil { |
| 122 | return err |
| 123 | } |