Fix CommandRequest

This commit is contained in:
AkmalFairuz
2025-12-11 00:53:02 +07:00
parent 2cad76a2db
commit 1d40d3c7e9
2 changed files with 50 additions and 1 deletions

View File

@@ -31,7 +31,7 @@ func (*CommandRequest) ID() uint32 {
func (pk *CommandRequest) Marshal(io protocol.IO) { func (pk *CommandRequest) Marshal(io protocol.IO) {
io.String(&pk.CommandLine) io.String(&pk.CommandLine)
protocol.CommandOriginData(io, &pk.CommandOrigin) proto.CommandOriginData(io, &pk.CommandOrigin)
io.Bool(&pk.Internal) io.Bool(&pk.Internal)
if proto.IsProtoGTE(io, proto.ID898) { if proto.IsProtoGTE(io, proto.ID898) {
io.String(&pk.Version) io.String(&pk.Version)

View File

@@ -211,3 +211,52 @@ func (x *ChainedSubcommandValue) FromLatest(latest protocol.ChainedSubcommandVal
x.Value = latest.Value x.Value = latest.Value
return *x return *x
} }
var commandOrigins = []string{
protocol.CommandOriginPlayer,
protocol.CommandOriginBlock,
protocol.CommandOriginMinecartBlock,
protocol.CommandOriginDevConsole,
protocol.CommandOriginTest,
protocol.CommandOriginAutomationPlayer,
protocol.CommandOriginClientAutomation,
protocol.CommandOriginDedicatedServer,
protocol.CommandOriginEntity,
protocol.CommandOriginVirtual,
protocol.CommandOriginGameArgument,
protocol.CommandOriginEntityServer,
protocol.CommandOriginPrecompiled,
protocol.CommandOriginGameDirectorEntityServer,
protocol.CommandOriginScript,
protocol.CommandOriginExecutor,
}
func commandOriginFromLegacy(legacy uint32) string {
if int(legacy) < len(commandOrigins) {
return commandOrigins[legacy]
}
return protocol.CommandOriginPlayer
}
func commandOriginToLegacy(origin string) uint32 {
for k, v := range commandOrigins {
if v == origin {
return uint32(k)
}
}
return 0 // Default to player.
}
// CommandOriginData reads/writes a CommandOrigin x using IO r.
func CommandOriginData(r protocol.IO, x *protocol.CommandOrigin) {
if IsProtoGTE(r, ID898) {
r.String(&x.Origin)
} else {
v := commandOriginToLegacy(x.Origin)
r.Varuint32(&v)
x.Origin = commandOriginFromLegacy(v)
}
r.UUID(&x.UUID)
r.String(&x.RequestID)
r.Int64(&x.PlayerUniqueID)
}