89 lines
3.6 KiB
Go
89 lines
3.6 KiB
Go
package legacypacket
|
|
|
|
import (
|
|
"github.com/akmalfairuz/legacy-version/legacyver/proto"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol"
|
|
"github.com/sandertv/gophertunnel/minecraft/protocol/packet"
|
|
)
|
|
|
|
const (
|
|
CommandBlockImpulse = iota
|
|
CommandBlockRepeating
|
|
CommandBlockChain
|
|
)
|
|
|
|
// CommandBlockUpdate is sent by the client to update a command block at a specific position. The command
|
|
// block may be either a physical block or an entity.
|
|
type CommandBlockUpdate struct {
|
|
// Block specifies if the command block updated was an actual physical block. If false, the command block
|
|
// is in a minecart and has an entity runtime ID instead.
|
|
Block bool
|
|
|
|
// Position is the position of the command block updated. It is only set if Block is set to true. Nothing
|
|
// happens if no command block is set at this position.
|
|
Position protocol.BlockPos
|
|
// Mode is the mode of the command block. It is either CommandBlockImpulse, CommandBlockChain or
|
|
// CommandBlockRepeat. It is only set if Block is set to true.
|
|
Mode uint32
|
|
// NeedsRedstone specifies if the command block needs to be powered by redstone to be activated. If false,
|
|
// the command block is always active. The field is only set if Block is set to true.
|
|
NeedsRedstone bool
|
|
// Conditional specifies the behaviour of the command block if the command block before it (the opposite
|
|
// side of the direction the arrow if facing) fails to execute. If set to false, it will activate at all
|
|
// times, whereas if set to true, it will activate only if the previous command block executed
|
|
// successfully. The field is only set if Block is set to true.
|
|
Conditional bool
|
|
|
|
// MinecartEntityRuntimeID is the runtime ID of the minecart entity carrying the command block that is
|
|
// updated. It is set only if Block is set to false.
|
|
MinecartEntityRuntimeID uint64
|
|
|
|
// Command is the command currently entered in the command block. This is the command that is executed
|
|
// when the command block is activated.
|
|
Command string
|
|
// LastOutput is the output of the last command executed by the command block. It may be left empty to
|
|
// show simply no output at all, in combination with setting ShouldTrackOutput to false.
|
|
LastOutput string
|
|
// Name is the name of the command block updated. If not empty, it will show this name hovering above the
|
|
// command block when hovering over the block with the cursor.
|
|
Name string
|
|
// FilteredName is a filtered version of Name with all the profanity removed. The client will use this
|
|
// over Name if this field is not empty and they have the "Filter Profanity" setting enabled.
|
|
FilteredName string
|
|
// ShouldTrackOutput specifies if the command block tracks output. If set to false, the output box won't
|
|
// be shown within the command block.
|
|
ShouldTrackOutput bool
|
|
// TickDelay is the delay in ticks between executions of a command block, if it is a repeating command
|
|
// block.
|
|
TickDelay int32
|
|
// ExecuteOnFirstTick specifies if the command block should execute on the first tick, AKA as soon as the
|
|
// command block is enabled.
|
|
ExecuteOnFirstTick bool
|
|
}
|
|
|
|
// ID ...
|
|
func (*CommandBlockUpdate) ID() uint32 {
|
|
return packet.IDCommandBlockUpdate
|
|
}
|
|
|
|
func (pk *CommandBlockUpdate) Marshal(io protocol.IO) {
|
|
io.Bool(&pk.Block)
|
|
if pk.Block {
|
|
io.UBlockPos(&pk.Position)
|
|
io.Varuint32(&pk.Mode)
|
|
io.Bool(&pk.NeedsRedstone)
|
|
io.Bool(&pk.Conditional)
|
|
} else {
|
|
io.Varuint64(&pk.MinecartEntityRuntimeID)
|
|
}
|
|
io.String(&pk.Command)
|
|
io.String(&pk.LastOutput)
|
|
io.String(&pk.Name)
|
|
if proto.IsProtoGTE(io, proto.ID776) {
|
|
io.String(&pk.FilteredName)
|
|
}
|
|
io.Bool(&pk.ShouldTrackOutput)
|
|
io.Int32(&pk.TickDelay)
|
|
io.Bool(&pk.ExecuteOnFirstTick)
|
|
}
|