248 lines
4.0 KiB
Go
248 lines
4.0 KiB
Go
package particle
|
|
|
|
import (
|
|
"io"
|
|
|
|
pk "git.konjactw.dev/falloutBot/go-mc/net/packet"
|
|
|
|
"git.konjactw.dev/patyhank/minego/pkg/protocol/slot"
|
|
)
|
|
|
|
// BasicParticle for Particle Type Other
|
|
type BasicParticle struct {
|
|
ID int32
|
|
}
|
|
|
|
func (b *BasicParticle) ReadFrom(r io.Reader) (int64, error) {
|
|
return (*pk.VarInt)(&b.ID).ReadFrom(r)
|
|
}
|
|
|
|
func (b BasicParticle) WriteTo(w io.Writer) (int64, error) {
|
|
return (*pk.VarInt)(&b.ID).WriteTo(w)
|
|
}
|
|
|
|
func (b BasicParticle) ParticleID() int32 {
|
|
return b.ID
|
|
}
|
|
|
|
// Block for Particle Type 1
|
|
//
|
|
//codec:gen
|
|
type Block struct {
|
|
BlockState int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (b Block) ParticleID() int32 {
|
|
return 1
|
|
}
|
|
|
|
// BlockMarker for Particle Type 2
|
|
//
|
|
//codec:gen
|
|
type BlockMarker struct {
|
|
BlockState int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (b BlockMarker) ParticleID() int32 {
|
|
return 2
|
|
}
|
|
|
|
// Dust for Particle Type 13
|
|
//
|
|
//codec:gen
|
|
type Dust struct {
|
|
Color int32
|
|
Scale float32
|
|
}
|
|
|
|
func (d Dust) ParticleID() int32 {
|
|
return 13
|
|
}
|
|
|
|
// DustColorTransition for Particle Type 14
|
|
//
|
|
//codec:gen
|
|
type DustColorTransition struct {
|
|
FromColor int32
|
|
ToColor int32
|
|
Scale float32
|
|
}
|
|
|
|
func (d DustColorTransition) ParticleID() int32 {
|
|
return 14
|
|
}
|
|
|
|
// EntityEffect for Particle Type 20
|
|
//
|
|
//codec:gen
|
|
type EntityEffect struct {
|
|
Color int32
|
|
}
|
|
|
|
func (e EntityEffect) ParticleID() int32 {
|
|
return 20
|
|
}
|
|
|
|
// FallingDust for Particle Type 28
|
|
//
|
|
//codec:gen
|
|
type FallingDust struct {
|
|
BlockState int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (f FallingDust) ParticleID() int32 {
|
|
return 28
|
|
}
|
|
|
|
// TintedLeaves for Particle Type 35
|
|
//
|
|
//codec:gen
|
|
type TintedLeaves struct {
|
|
Color int32
|
|
}
|
|
|
|
func (t TintedLeaves) ParticleID() int32 {
|
|
return 35
|
|
}
|
|
|
|
// SculkCharge for Particle Type 37
|
|
//
|
|
//codec:gen
|
|
type SculkCharge struct {
|
|
Roll float32
|
|
}
|
|
|
|
func (s SculkCharge) ParticleID() int32 {
|
|
return 37
|
|
}
|
|
|
|
// Item for Particle Type 46
|
|
//
|
|
//codec:gen
|
|
type Item struct {
|
|
Item slot.Slot
|
|
}
|
|
|
|
func (i Item) ParticleID() int32 {
|
|
return 46
|
|
}
|
|
|
|
// Vibration for Particle Type 47
|
|
type Vibration struct {
|
|
Type int32 `mc:"VarInt"`
|
|
//if Type eq 0
|
|
BlockPosition pk.Position
|
|
//elif Type eq 1
|
|
EntityID int32
|
|
EntityEyeHeight float32
|
|
//end
|
|
Ticks int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (v Vibration) WriteTo(w io.Writer) (n int64, err error) {
|
|
(*pk.VarInt)(&v.Type).WriteTo(w)
|
|
n += 4
|
|
switch v.Type {
|
|
case 0:
|
|
n1, err := v.BlockPosition.WriteTo(w)
|
|
if err != nil {
|
|
return n + n1, err
|
|
}
|
|
case 1:
|
|
n1, err := (*pk.VarInt)(&v.EntityID).WriteTo(w)
|
|
if err != nil {
|
|
return n + n1, err
|
|
}
|
|
n2, err := (*pk.Float)(&v.EntityEyeHeight).WriteTo(w)
|
|
if err != nil {
|
|
return n + n1 + n2, err
|
|
}
|
|
n += n1 + n2
|
|
}
|
|
n2, err := (*pk.VarInt)(&v.Ticks).WriteTo(w)
|
|
if err != nil {
|
|
return n + n2, err
|
|
}
|
|
return n + n2, err
|
|
}
|
|
|
|
func (v *Vibration) ReadFrom(r io.Reader) (int64, error) {
|
|
n, err := (*pk.VarInt)(&v.Type).ReadFrom(r)
|
|
if err != nil {
|
|
return n, err
|
|
}
|
|
switch v.Type {
|
|
case 0:
|
|
n1, err := v.BlockPosition.ReadFrom(r)
|
|
if err != nil {
|
|
return n + n1, err
|
|
}
|
|
return n + n1, err
|
|
case 1:
|
|
n1, err := (*pk.VarInt)(&v.EntityID).ReadFrom(r)
|
|
if err != nil {
|
|
return n + n1, err
|
|
}
|
|
n2, err := (*pk.Float)(&v.EntityEyeHeight).ReadFrom(r)
|
|
if err != nil {
|
|
return n + n1 + n2, err
|
|
}
|
|
return n + n1 + n2, err
|
|
}
|
|
n2, err := (*pk.VarInt)(&v.Ticks).ReadFrom(r)
|
|
if err != nil {
|
|
return n + n2, err
|
|
}
|
|
return n + n2, err
|
|
}
|
|
|
|
func (v Vibration) ParticleID() int32 {
|
|
return 47
|
|
}
|
|
|
|
// Trail for Particle Type 48
|
|
//
|
|
//codec:gen
|
|
type Trail struct {
|
|
X, Y, Z float64
|
|
Color int32
|
|
Duration int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (t Trail) ParticleID() int32 {
|
|
return 48
|
|
}
|
|
|
|
// Shriek for Particle Type 102
|
|
//
|
|
//codec:gen
|
|
type Shriek struct {
|
|
Delay int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (s Shriek) ParticleID() int32 {
|
|
return 102
|
|
}
|
|
|
|
// DustPillar for Particle Type 108
|
|
//
|
|
//codec:gen
|
|
type DustPillar struct {
|
|
BlockState int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (d DustPillar) ParticleID() int32 {
|
|
return 108
|
|
}
|
|
|
|
// BlockCrumble for Particle Type 112
|
|
//
|
|
//codec:gen
|
|
type BlockCrumble struct {
|
|
BlockState int32 `mc:"VarInt"`
|
|
}
|
|
|
|
func (b BlockCrumble) ParticleID() int32 {
|
|
return 112
|
|
}
|