Skip to content

Commit 7078908

Browse files
Merge branch 'minekube:master' into master
2 parents 4de824f + 4cfc98e commit 7078908

10 files changed

Lines changed: 222 additions & 103 deletions

File tree

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ require (
3232
github.com/urfave/cli/v2 v2.27.6
3333
github.com/zyedidia/generic v1.2.1
3434
go.minekube.com/brigodier v0.0.1
35-
go.minekube.com/common v0.0.6
35+
go.minekube.com/common v0.1.0
3636
go.minekube.com/connect v0.6.2
3737
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0
3838
go.opentelemetry.io/otel v1.35.0

go.sum

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,14 @@ github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An
216216
github.com/spf13/viper v1.20.1 h1:ZMi+z/lvLyPSCoNtFCpqjy0S4kPbirhpTMwl8BkW9X4=
217217
github.com/spf13/viper v1.20.1/go.mod h1:P9Mdzt1zoHIG8m2eZQinpiBjo6kCmZSKBClNNqjJvu4=
218218
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
219+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
220+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
221+
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
219222
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
220-
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
221223
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
224+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
225+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
226+
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
222227
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
223228
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
224229
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
@@ -242,8 +247,8 @@ github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XD
242247
github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis=
243248
go.minekube.com/brigodier v0.0.1 h1:v5x+fZNefM24JIi+fYQjQcjZ8rwJbfRSpnnpw4b/x6k=
244249
go.minekube.com/brigodier v0.0.1/go.mod h1:WJf/lyJVTId/phiY6phPW6++qkTjCQ72rbOWqo4XIqc=
245-
go.minekube.com/common v0.0.6 h1:XA4mcgDG13hQEBcY2JdmK0Ca2mx2jOZ9M8pflZ85dkE=
246-
go.minekube.com/common v0.0.6/go.mod h1:RTT2cwrMS+hwGAjJOt06bWtbKx04MuiF0tScyvGeAZo=
250+
go.minekube.com/common v0.1.0 h1:5pjKxBXVvsrZ7s4ORLA1RHqZ1jEcSW5U7W9/pA9DdN4=
251+
go.minekube.com/common v0.1.0/go.mod h1:CKCUOhcDjVWRfn77u3Tp/ECV6l1OQ5WUW5M159pu38M=
247252
go.minekube.com/connect v0.6.2 h1:RajPc7YgqygcOviV2g4xetL3J0Wzi8b/lsYXUzIltxE=
248253
go.minekube.com/connect v0.6.2/go.mod h1:28k11I4RyzUfAL3AkOXt3atzjeOFAC8eqbCMwsYKAb0=
249254
go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=

pkg/command/command.go

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,17 +124,44 @@ func (m *Manager) CompletionSuggestions(parse *ParseResults) (*brigodier.Suggest
124124

125125
// OfferSuggestions returns completion suggestions.
126126
func (m *Manager) OfferSuggestions(ctx context.Context, source Source, cmdline string) ([]string, error) {
127-
suggestions, err := m.CompletionSuggestions(m.Parse(ctx, source, cmdline))
127+
suggestions, err := m.OfferBrigodierSuggestions(ctx, source, cmdline)
128128
if err != nil {
129129
return nil, err
130130
}
131-
s := make([]string, 0, len(suggestions.Suggestions))
132-
for _, suggestion := range suggestions.Suggestions {
133-
s = append(s, suggestion.Text)
131+
result := make([]string, len(suggestions.Suggestions))
132+
for i, s := range suggestions.Suggestions {
133+
result[i] = s.Text
134134
}
135-
return s, nil
135+
return result, nil
136+
}
137+
138+
// OfferBrigodierSuggestions returns brigodier Suggestions for the given command line.
139+
func (m *Manager) OfferBrigodierSuggestions(ctx context.Context, source Source, cmdline string) (*brigodier.Suggestions, error) {
140+
cmdLine := normalizeInput(cmdline, false)
141+
suggestions, err := m.CompletionSuggestions(m.Parse(ctx, source, cmdLine))
142+
if err != nil {
143+
return nil, err
144+
}
145+
return suggestions, nil
136146
}
137147

138148
type sourceCtx struct{}
139149

140150
var sourceCtxKey = &sourceCtx{}
151+
152+
// normalizeInput normalizes the given command input.
153+
// input: the raw command input, without the leading slash ('/')
154+
// trim: whether to remove leading and trailing whitespace from the input
155+
// returns the normalized command input
156+
func normalizeInput(input string, trim bool) string {
157+
command := input
158+
if trim {
159+
command = strings.TrimSpace(input)
160+
}
161+
firstSep := strings.IndexRune(command, brigodier.ArgumentSeparator)
162+
if firstSep != -1 {
163+
// Aliases are case-insensitive, arguments are not
164+
return strings.ToLower(command[:firstSep]) + command[firstSep:]
165+
}
166+
return strings.ToLower(command)
167+
}

pkg/edition/java/proto/packet/available_commands.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package packet
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67
"io"
@@ -22,10 +23,14 @@ const (
2223
FlagExecutable byte = 0x04
2324
FlagIsRedirect byte = 0x08
2425
FlagHasSuggestions byte = 0x10
26+
FlagIsRestricted byte = 0x20
2527
)
2628

2729
var PlaceholderCommand = brigodier.CommandFunc(func(c *brigodier.CommandContext) error { return nil })
2830

31+
// placeholderRequirement is a placeholder requirement function for restricted commands
32+
var placeholderRequirement = brigodier.RequireFn(func(context.Context) bool { return true })
33+
2934
type AvailableCommands struct {
3035
RootNode *brigodier.RootCommandNode
3136
}
@@ -75,6 +80,9 @@ func encodeNode(wr io.Writer, protocol proto.Protocol, node brigodier.CommandNod
7580
if node.Command() != nil {
7681
flags |= FlagExecutable
7782
}
83+
if node.Requirement() != nil {
84+
flags |= FlagIsRestricted
85+
}
7886

7987
switch n := node.(type) {
8088
case *brigodier.LiteralCommandNode:
@@ -298,6 +306,13 @@ func (w *WireNode) toNodes(wireNodes []*WireNode) (bool, error) {
298306
w.Args.Executes(PlaceholderCommand)
299307
}
300308

309+
// If restricted, handle the restriction flag
310+
// Note: The Go brigodier library may not have a requirement system,
311+
// so this is a placeholder for future implementation
312+
if w.Flags&FlagIsRestricted != 0 {
313+
w.Args.Requires(placeholderRequirement)
314+
}
315+
301316
w.Built = w.Args.Build()
302317
}
303318
}

pkg/edition/java/proto/packet/brigadier/registry.go

Lines changed: 42 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -192,48 +192,51 @@ func init() {
192192
empty(id("minecraft:item_stack", mapSet(Minecraft_1_19, 14)))
193193
empty(id("minecraft:item_predicate", mapSet(Minecraft_1_19, 15)))
194194
empty(id("minecraft:color", mapSet(Minecraft_1_19, 16)))
195-
empty(id("minecraft:component", mapSet(Minecraft_1_19, 17)))
196-
empty(id("minecraft:style", mapSet(Minecraft_1_20_3, 18)))
197-
empty(id("minecraft:message", mapSet(Minecraft_1_20_3, 19), mapSet(Minecraft_1_19, 18)))
198-
empty(id("minecraft:nbt_compound_tag", mapSet(Minecraft_1_20_3, 20), mapSet(Minecraft_1_19, 19)))
199-
empty(id("minecraft:nbt_tag", mapSet(Minecraft_1_20_3, 21), mapSet(Minecraft_1_19, 20)))
200-
empty(id("minecraft:nbt_path", mapSet(Minecraft_1_20_3, 22), mapSet(Minecraft_1_19, 21)))
201-
empty(id("minecraft:objective", mapSet(Minecraft_1_20_3, 23), mapSet(Minecraft_1_19, 22)))
202-
empty(id("minecraft:objective_criteria", mapSet(Minecraft_1_20_3, 24), mapSet(Minecraft_1_19, 23)))
203-
empty(id("minecraft:operation", mapSet(Minecraft_1_20_3, 25), mapSet(Minecraft_1_19, 24)))
204-
empty(id("minecraft:particle", mapSet(Minecraft_1_20_3, 26), mapSet(Minecraft_1_19, 25)))
205-
empty(id("minecraft:angle", mapSet(Minecraft_1_20_3, 27), mapSet(Minecraft_1_19, 26)))
206-
empty(id("minecraft:rotation", mapSet(Minecraft_1_20_3, 28), mapSet(Minecraft_1_19, 27)))
207-
empty(id("minecraft:scoreboard_slot", mapSet(Minecraft_1_20_3, 29), mapSet(Minecraft_1_19, 28)))
208-
emptyWithCodec(id("minecraft:score_holder", mapSet(Minecraft_1_20_3, 30), mapSet(Minecraft_1_19, 29)), ByteArgumentPropertyCodec)
209-
empty(id("minecraft:swizzle", mapSet(Minecraft_1_20_3, 31), mapSet(Minecraft_1_19, 30)))
210-
empty(id("minecraft:team", mapSet(Minecraft_1_20_3, 32), mapSet(Minecraft_1_19, 31)))
211-
empty(id("minecraft:item_slot", mapSet(Minecraft_1_20_3, 33), mapSet(Minecraft_1_19, 32)))
212-
empty(id("minecraft:item_slots", mapSet(Minecraft_1_20_5, 34))) // added in 1.20.5
213-
empty(id("minecraft:resource_location", mapSet(Minecraft_1_20_5, 35), mapSet(Minecraft_1_20_3, 34), mapSet(Minecraft_1_19, 33)))
195+
empty(id("minecraft:hex_color", mapSet(Minecraft_1_21_6, 17))) // added in 1.21.6
196+
empty(id("minecraft:component", mapSet(Minecraft_1_21_6, 18), mapSet(Minecraft_1_19, 17)))
197+
empty(id("minecraft:style", mapSet(Minecraft_1_21_6, 19), mapSet(Minecraft_1_20_3, 18)))
198+
empty(id("minecraft:message", mapSet(Minecraft_1_21_6, 20), mapSet(Minecraft_1_20_3, 19), mapSet(Minecraft_1_19, 18)))
199+
empty(id("minecraft:nbt_compound_tag", mapSet(Minecraft_1_21_6, 21), mapSet(Minecraft_1_20_3, 20), mapSet(Minecraft_1_19, 19)))
200+
empty(id("minecraft:nbt_tag", mapSet(Minecraft_1_21_6, 22), mapSet(Minecraft_1_20_3, 21), mapSet(Minecraft_1_19, 20)))
201+
empty(id("minecraft:nbt_path", mapSet(Minecraft_1_21_6, 23), mapSet(Minecraft_1_20_3, 22), mapSet(Minecraft_1_19, 21)))
202+
empty(id("minecraft:objective", mapSet(Minecraft_1_21_6, 24), mapSet(Minecraft_1_20_3, 23), mapSet(Minecraft_1_19, 22)))
203+
empty(id("minecraft:objective_criteria", mapSet(Minecraft_1_21_6, 25), mapSet(Minecraft_1_20_3, 24), mapSet(Minecraft_1_19, 23)))
204+
empty(id("minecraft:operation", mapSet(Minecraft_1_21_6, 26), mapSet(Minecraft_1_20_3, 25), mapSet(Minecraft_1_19, 24)))
205+
empty(id("minecraft:particle", mapSet(Minecraft_1_21_6, 27), mapSet(Minecraft_1_20_3, 26), mapSet(Minecraft_1_19, 25)))
206+
empty(id("minecraft:angle", mapSet(Minecraft_1_21_6, 28), mapSet(Minecraft_1_20_3, 27), mapSet(Minecraft_1_19, 26)))
207+
empty(id("minecraft:rotation", mapSet(Minecraft_1_21_6, 29), mapSet(Minecraft_1_20_3, 28), mapSet(Minecraft_1_19, 27)))
208+
empty(id("minecraft:scoreboard_slot", mapSet(Minecraft_1_21_6, 30), mapSet(Minecraft_1_20_3, 29), mapSet(Minecraft_1_19, 28)))
209+
emptyWithCodec(id("minecraft:score_holder", mapSet(Minecraft_1_21_6, 31), mapSet(Minecraft_1_20_3, 30), mapSet(Minecraft_1_19, 29)), ByteArgumentPropertyCodec)
210+
empty(id("minecraft:swizzle", mapSet(Minecraft_1_21_6, 32), mapSet(Minecraft_1_20_3, 31), mapSet(Minecraft_1_19, 30)))
211+
empty(id("minecraft:team", mapSet(Minecraft_1_21_6, 33), mapSet(Minecraft_1_20_3, 32), mapSet(Minecraft_1_19, 31)))
212+
empty(id("minecraft:item_slot", mapSet(Minecraft_1_21_6, 34), mapSet(Minecraft_1_20_3, 33), mapSet(Minecraft_1_19, 32)))
213+
empty(id("minecraft:item_slots", mapSet(Minecraft_1_21_6, 35), mapSet(Minecraft_1_20_5, 34))) // added in 1.20.5
214+
empty(id("minecraft:resource_location", mapSet(Minecraft_1_21_6, 36), mapSet(Minecraft_1_20_5, 35), mapSet(Minecraft_1_20_3, 34), mapSet(Minecraft_1_19, 33)))
214215
empty(id("minecraft:mob_effect", mapSet(Minecraft_1_19_3, -1), mapSet(Minecraft_1_19, 34)))
215-
empty(id("minecraft:function", mapSet(Minecraft_1_20_5, 36), mapSet(Minecraft_1_20_3, 35), mapSet(Minecraft_1_19_3, 34), mapSet(Minecraft_1_19, 35)))
216-
empty(id("minecraft:entity_anchor", mapSet(Minecraft_1_20_5, 37), mapSet(Minecraft_1_20_3, 36), mapSet(Minecraft_1_19_3, 35), mapSet(Minecraft_1_19, 36)))
217-
empty(id("minecraft:int_range", mapSet(Minecraft_1_20_5, 38), mapSet(Minecraft_1_20_3, 37), mapSet(Minecraft_1_19_3, 36), mapSet(Minecraft_1_19, 37)))
218-
empty(id("minecraft:float_range", mapSet(Minecraft_1_20_5, 39), mapSet(Minecraft_1_20_3, 38), mapSet(Minecraft_1_19_3, 37), mapSet(Minecraft_1_19, 38)))
216+
empty(id("minecraft:function", mapSet(Minecraft_1_21_6, 37), mapSet(Minecraft_1_20_5, 36), mapSet(Minecraft_1_20_3, 35), mapSet(Minecraft_1_19_3, 34), mapSet(Minecraft_1_19, 35)))
217+
empty(id("minecraft:entity_anchor", mapSet(Minecraft_1_21_6, 38), mapSet(Minecraft_1_20_5, 37), mapSet(Minecraft_1_20_3, 36), mapSet(Minecraft_1_19_3, 35), mapSet(Minecraft_1_19, 36)))
218+
empty(id("minecraft:int_range", mapSet(Minecraft_1_21_6, 39), mapSet(Minecraft_1_20_5, 38), mapSet(Minecraft_1_20_3, 37), mapSet(Minecraft_1_19_3, 36), mapSet(Minecraft_1_19, 37)))
219+
empty(id("minecraft:float_range", mapSet(Minecraft_1_21_6, 40), mapSet(Minecraft_1_20_5, 39), mapSet(Minecraft_1_20_3, 38), mapSet(Minecraft_1_19_3, 37), mapSet(Minecraft_1_19, 38)))
219220
empty(id("minecraft:item_enchantment", mapSet(Minecraft_1_19_3, -1), mapSet(Minecraft_1_19, 39)))
220221
empty(id("minecraft:entity_summon", mapSet(Minecraft_1_19_3, -1), mapSet(Minecraft_1_19, 40)))
221-
empty(id("minecraft:dimension", mapSet(Minecraft_1_20_5, 40), mapSet(Minecraft_1_20_3, 39), mapSet(Minecraft_1_19_3, 38), mapSet(Minecraft_1_19, 41)))
222-
empty(id("minecraft:gamemode", mapSet(Minecraft_1_20_5, 41), mapSet(Minecraft_1_20_3, 40), mapSet(Minecraft_1_19_3, 39)))
223-
emptyWithCodec(id("minecraft:time", mapSet(Minecraft_1_20_5, 42), mapSet(Minecraft_1_20_3, 41), mapSet(Minecraft_1_19_3, 40), mapSet(Minecraft_1_19, 42)), TimeArgumentPropertyCodec)
224-
register(id("minecraft:resource_or_tag", mapSet(Minecraft_1_20_5, 43), mapSet(Minecraft_1_20_3, 42), mapSet(Minecraft_1_19_3, 41), mapSet(Minecraft_1_19, 43)), RegistryKeyArgument, RegistryKeyArgumentPropertyCodec)
225-
register(id("minecraft:resource_or_tag_key", mapSet(Minecraft_1_20_5, 44), mapSet(Minecraft_1_20_3, 43), mapSet(Minecraft_1_19_3, 42)), ResourceOrTagKeyArgument, ResourceOrTagKeyArgumentPropertyCodec)
226-
register(id("minecraft:resource", mapSet(Minecraft_1_20_5, 45), mapSet(Minecraft_1_20_3, 44), mapSet(Minecraft_1_19_3, 43), mapSet(Minecraft_1_19, 44)), RegistryKeyArgument, RegistryKeyArgumentPropertyCodec)
227-
register(id("minecraft:resource_key", mapSet(Minecraft_1_20_5, 46), mapSet(Minecraft_1_20_3, 45), mapSet(Minecraft_1_19_3, 44)), ResourceKeyArgument, ResourceKeyArgumentPropertyCodec)
228-
register(id("minecraft:resource_selector", mapSet(Minecraft_1_21_5, 47)), ResourceSelectorArgument, ResourceSelectorArgumentPropertyCodec)
229-
empty(id("minecraft:template_mirror", mapSet(Minecraft_1_21_5, 48), mapSet(Minecraft_1_20_5, 47), mapSet(Minecraft_1_20_3, 46), mapSet(Minecraft_1_19, 45)))
230-
empty(id("minecraft:template_rotation", mapSet(Minecraft_1_21_5, 49), mapSet(Minecraft_1_20_5, 48), mapSet(Minecraft_1_20_3, 47), mapSet(Minecraft_1_19, 46)))
231-
empty(id("minecraft:heightmap", mapSet(Minecraft_1_21_5, 50), mapSet(Minecraft_1_20_5, 49), mapSet(Minecraft_1_20_3, 49), mapSet(Minecraft_1_19_4, 47)))
232-
empty(id("minecraft:uuid", mapSet(Minecraft_1_21_5, 54), mapSet(Minecraft_1_20_5, 53), mapSet(Minecraft_1_20_3, 48), mapSet(Minecraft_1_19_4, 48), mapSet(Minecraft_1_19, 47)))
233-
234-
empty(id("minecraft:loot_table", mapSet(Minecraft_1_21_5, 51), mapSet(Minecraft_1_20_5, 50)))
235-
empty(id("minecraft:loot_predicate", mapSet(Minecraft_1_21_5, 52), mapSet(Minecraft_1_20_5, 51)))
236-
empty(id("minecraft:loot_modifier", mapSet(Minecraft_1_21_5, 53), mapSet(Minecraft_1_20_5, 52)))
222+
empty(id("minecraft:dimension", mapSet(Minecraft_1_21_6, 41), mapSet(Minecraft_1_20_5, 40), mapSet(Minecraft_1_20_3, 39), mapSet(Minecraft_1_19_3, 38), mapSet(Minecraft_1_19, 41)))
223+
empty(id("minecraft:gamemode", mapSet(Minecraft_1_21_6, 42), mapSet(Minecraft_1_20_5, 41), mapSet(Minecraft_1_20_3, 40), mapSet(Minecraft_1_19_3, 39)))
224+
emptyWithCodec(id("minecraft:time", mapSet(Minecraft_1_21_6, 43), mapSet(Minecraft_1_20_5, 42), mapSet(Minecraft_1_20_3, 41), mapSet(Minecraft_1_19_3, 40), mapSet(Minecraft_1_19, 42)), TimeArgumentPropertyCodec)
225+
register(id("minecraft:resource_or_tag", mapSet(Minecraft_1_21_6, 44), mapSet(Minecraft_1_20_5, 43), mapSet(Minecraft_1_20_3, 42), mapSet(Minecraft_1_19_3, 41), mapSet(Minecraft_1_19, 43)), RegistryKeyArgument, RegistryKeyArgumentPropertyCodec)
226+
register(id("minecraft:resource_or_tag_key", mapSet(Minecraft_1_21_6, 45), mapSet(Minecraft_1_20_5, 44), mapSet(Minecraft_1_20_3, 43), mapSet(Minecraft_1_19_3, 42)), ResourceOrTagKeyArgument, ResourceOrTagKeyArgumentPropertyCodec)
227+
register(id("minecraft:resource", mapSet(Minecraft_1_21_6, 46), mapSet(Minecraft_1_20_5, 45), mapSet(Minecraft_1_20_3, 44), mapSet(Minecraft_1_19_3, 43), mapSet(Minecraft_1_19, 44)), RegistryKeyArgument, RegistryKeyArgumentPropertyCodec)
228+
register(id("minecraft:resource_key", mapSet(Minecraft_1_21_6, 47), mapSet(Minecraft_1_20_5, 46), mapSet(Minecraft_1_20_3, 45), mapSet(Minecraft_1_19_3, 44)), ResourceKeyArgument, ResourceKeyArgumentPropertyCodec)
229+
register(id("minecraft:resource_selector", mapSet(Minecraft_1_21_6, 48), mapSet(Minecraft_1_21_5, 47)), ResourceSelectorArgument, ResourceSelectorArgumentPropertyCodec)
230+
empty(id("minecraft:template_mirror", mapSet(Minecraft_1_21_6, 49), mapSet(Minecraft_1_21_5, 48), mapSet(Minecraft_1_20_5, 47), mapSet(Minecraft_1_20_3, 46), mapSet(Minecraft_1_19, 45)))
231+
empty(id("minecraft:template_rotation", mapSet(Minecraft_1_21_6, 50), mapSet(Minecraft_1_21_5, 49), mapSet(Minecraft_1_20_5, 48), mapSet(Minecraft_1_20_3, 47), mapSet(Minecraft_1_19, 46)))
232+
empty(id("minecraft:heightmap", mapSet(Minecraft_1_21_6, 51), mapSet(Minecraft_1_21_5, 50), mapSet(Minecraft_1_20_5, 49), mapSet(Minecraft_1_20_3, 49), mapSet(Minecraft_1_19_4, 47)))
233+
empty(id("minecraft:uuid", mapSet(Minecraft_1_21_6, 56), mapSet(Minecraft_1_21_5, 54), mapSet(Minecraft_1_20_5, 53), mapSet(Minecraft_1_20_3, 48), mapSet(Minecraft_1_19_4, 48), mapSet(Minecraft_1_19, 47)))
234+
235+
empty(id("minecraft:loot_table", mapSet(Minecraft_1_21_6, 52), mapSet(Minecraft_1_21_5, 51), mapSet(Minecraft_1_20_5, 50)))
236+
empty(id("minecraft:loot_predicate", mapSet(Minecraft_1_21_6, 53), mapSet(Minecraft_1_21_5, 52), mapSet(Minecraft_1_20_5, 51)))
237+
empty(id("minecraft:loot_modifier", mapSet(Minecraft_1_21_6, 54), mapSet(Minecraft_1_21_5, 53), mapSet(Minecraft_1_20_5, 52)))
238+
239+
empty(id("minecraft:dialog", mapSet(Minecraft_1_21_6, 55))) // added in 1.21.6
237240

238241
// Crossstitch support
239242
register(id("crossstitch:mod_argument", mapSet(Minecraft_1_19, -256)), &ModArgumentProperty{}, ModArgumentPropertyCodec)

pkg/edition/java/proto/packet/config/KnownPacks.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (p *KnownPacks) Decode(c *proto.PacketContext, rd io.Reader) error {
2222
if err != nil {
2323
return err
2424
}
25-
if packCount > MaxLengthPacks {
25+
if c.Direction == proto.ServerBound && packCount > MaxLengthPacks {
2626
return fmt.Errorf("%w: %d", ErrTooManyPacks, packCount)
2727
}
2828
packs := make([]KnownPack, packCount)

pkg/edition/java/proto/state/register.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ func init() {
173173
m(0x15, version.Minecraft_1_20_3),
174174
m(0x18, version.Minecraft_1_20_5),
175175
m(0x1A, version.Minecraft_1_21_2),
176+
m(0x1B, version.Minecraft_1_21_6),
176177
)
177178
Play.ServerBound.Register(&plugin.Message{},
178179
m(0x17, version.Minecraft_1_7_2),
@@ -190,6 +191,7 @@ func init() {
190191
m(0x10, version.Minecraft_1_20_3),
191192
m(0x12, version.Minecraft_1_20_5),
192193
m(0x14, version.Minecraft_1_21_2),
194+
m(0x15, version.Minecraft_1_21_6),
193195
)
194196
Play.ServerBound.Register(&p.ClientSettings{},
195197
m(0x15, version.Minecraft_1_7_2),
@@ -204,6 +206,7 @@ func init() {
204206
m(0x09, version.Minecraft_1_20_2),
205207
m(0x0A, version.Minecraft_1_20_5),
206208
m(0x0C, version.Minecraft_1_21_2),
209+
m(0x0D, version.Minecraft_1_21_6),
207210
)
208211
Play.ServerBound.Register(&chat.LegacyChat{},
209212
m(0x01, version.Minecraft_1_7_2),
@@ -215,6 +218,7 @@ func init() {
215218
Play.ServerBound.Register(&chat.ChatAcknowledgement{},
216219
m(0x03, version.Minecraft_1_19_3),
217220
m(0x04, version.Minecraft_1_21_2),
221+
m(0x05, version.Minecraft_1_21_6),
218222
)
219223
Play.ServerBound.Register(&chat.KeyedPlayerCommand{},
220224
m(0x03, version.Minecraft_1_19),
@@ -228,15 +232,18 @@ func init() {
228232
m(0x04, version.Minecraft_1_19_3),
229233
m(0x05, version.Minecraft_1_20_5),
230234
m(0x06, version.Minecraft_1_21_2),
235+
m(0x07, version.Minecraft_1_21_6),
231236
)
232237
Play.ServerBound.Register(&chat.UnsignedPlayerCommand{},
233238
m(0x04, version.Minecraft_1_20_5),
234239
m(0x05, version.Minecraft_1_21_2),
240+
m(0x06, version.Minecraft_1_21_6),
235241
)
236242
Play.ServerBound.Register(&chat.SessionPlayerChat{},
237243
m(0x05, version.Minecraft_1_19_3),
238244
m(0x06, version.Minecraft_1_20_5),
239245
m(0x07, version.Minecraft_1_21_2),
246+
m(0x08, version.Minecraft_1_21_6),
240247
)
241248
Play.ServerBound.Register(&p.TabCompleteRequest{},
242249
m(0x14, version.Minecraft_1_7_2),
@@ -252,6 +259,7 @@ func init() {
252259
m(0x0A, version.Minecraft_1_20_2),
253260
m(0x0B, version.Minecraft_1_20_5),
254261
m(0x0D, version.Minecraft_1_21_2),
262+
m(0x0E, version.Minecraft_1_21_6),
255263
)
256264
Play.ServerBound.Register(&p.ResourcePackResponse{},
257265
m(0x19, version.Minecraft_1_8),
@@ -268,15 +276,18 @@ func init() {
268276
m(0x2B, version.Minecraft_1_20_5),
269277
m(0x2D, version.Minecraft_1_21_2),
270278
m(0x2F, version.Minecraft_1_21_4),
279+
m(0x30, version.Minecraft_1_21_6),
271280
)
272281
Play.ServerBound.Register(&config.FinishedUpdate{},
273282
m(0x0B, version.Minecraft_1_20_2),
274283
m(0x0C, version.Minecraft_1_20_5),
275284
m(0x0E, version.Minecraft_1_21_2),
285+
m(0x0F, version.Minecraft_1_21_6),
276286
)
277287
Play.ServerBound.Register(&cookie.CookieResponse{},
278288
m(0x11, version.Minecraft_1_20_5),
279289
m(0x13, version.Minecraft_1_21_2),
290+
m(0x14, version.Minecraft_1_21_6),
280291
)
281292

282293
Play.ClientBound.Register(&p.KeepAlive{},

0 commit comments

Comments
 (0)