Add item DataComponent implements (part 4)

This commit is contained in:
Tnze
2024-07-29 00:32:00 +08:00
parent 76ff3a8d41
commit a5fbf35088
17 changed files with 519 additions and 422 deletions

View File

@ -1,29 +1,29 @@
package component package component
import ( import (
"io" "io"
"github.com/Tnze/go-mc/nbt/dynbt" "github.com/Tnze/go-mc/nbt/dynbt"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*BlockEntityData)(nil) var _ DataComponent = (*BlockEntityData)(nil)
type BlockEntityData struct { type BlockEntityData struct {
dynbt.Value dynbt.Value
} }
// ID implements DataComponent. // ID implements DataComponent.
func (BlockEntityData) ID() string { func (BlockEntityData) ID() string {
return "minecraft:block_entity_data" return "minecraft:block_entity_data"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (b *BlockEntityData) ReadFrom(r io.Reader) (n int64, err error) { func (b *BlockEntityData) ReadFrom(r io.Reader) (n int64, err error) {
return pk.NBT(&b.Value).ReadFrom(r) return pk.NBT(&b.Value).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (b *BlockEntityData) WriteTo(w io.Writer) (n int64, err error) { func (b *BlockEntityData) WriteTo(w io.Writer) (n int64, err error) {
return pk.NBT(&b.Value).WriteTo(w) return pk.NBT(&b.Value).WriteTo(w)
} }

View File

@ -1,29 +1,29 @@
package component package component
import ( import (
"io" "io"
"github.com/Tnze/go-mc/nbt/dynbt" "github.com/Tnze/go-mc/nbt/dynbt"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*BucketEntityData)(nil) var _ DataComponent = (*BucketEntityData)(nil)
type BucketEntityData struct { type BucketEntityData struct {
dynbt.Value dynbt.Value
} }
// ID implements DataComponent. // ID implements DataComponent.
func (BucketEntityData) ID() string { func (BucketEntityData) ID() string {
return "minecraft:bucket_entity_data" return "minecraft:bucket_entity_data"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (b *BucketEntityData) ReadFrom(r io.Reader) (n int64, err error) { func (b *BucketEntityData) ReadFrom(r io.Reader) (n int64, err error) {
return pk.NBT(&b.Value).ReadFrom(r) return pk.NBT(&b.Value).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (b *BucketEntityData) WriteTo(w io.Writer) (n int64, err error) { func (b *BucketEntityData) WriteTo(w io.Writer) (n int64, err error) {
return pk.NBT(&b.Value).WriteTo(w) return pk.NBT(&b.Value).WriteTo(w)
} }

View File

@ -1,24 +1,24 @@
package component package component
import "io" import "io"
var _ DataComponent = (*BundleContents)(nil) var _ DataComponent = (*BundleContents)(nil)
type BundleContents struct { type BundleContents struct {
// TODO // TODO
} }
// ID implements DataComponent. // ID implements DataComponent.
func (BundleContents) ID() string { func (BundleContents) ID() string {
return "minecraft:bundle_contents" return "minecraft:bundle_contents"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (b *BundleContents) ReadFrom(r io.Reader) (n int64, err error) { func (b *BundleContents) ReadFrom(r io.Reader) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (b *BundleContents) WriteTo(w io.Writer) (n int64, err error) { func (b *BundleContents) WriteTo(w io.Writer) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }

View File

@ -1,24 +1,24 @@
package component package component
import "io" import "io"
var _ DataComponent = (*ChargedProjectiles)(nil) var _ DataComponent = (*ChargedProjectiles)(nil)
type ChargedProjectiles struct { type ChargedProjectiles struct {
// TODO // TODO
} }
// ID implements DataComponent. // ID implements DataComponent.
func (ChargedProjectiles) ID() string { func (ChargedProjectiles) ID() string {
return "minecraft:charged_projectiles" return "minecraft:charged_projectiles"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (c *ChargedProjectiles) ReadFrom(r io.Reader) (n int64, err error) { func (c *ChargedProjectiles) ReadFrom(r io.Reader) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (c *ChargedProjectiles) WriteTo(w io.Writer) (n int64, err error) { func (c *ChargedProjectiles) WriteTo(w io.Writer) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }

View File

@ -66,23 +66,38 @@ func NewComponent(id int32) DataComponent {
case 27: case 27:
return new(MapDecorations) return new(MapDecorations)
case 28: case 28:
return new(MapPostProcessing)
case 29: case 29:
return new(ChargedProjectiles)
case 30: case 30:
return new(BundleContents)
case 31: case 31:
return new(PotionContents)
case 32: case 32:
return new(SuspiciousStewEffects)
case 33: case 33:
return new(WritableBookContent)
case 34: case 34:
case 35: case 35:
return new(Trim)
case 36: case 36:
return new(DebugStickState)
case 37: case 37:
return new(EntityData)
case 38: case 38:
return new(BucketEntityData)
case 39: case 39:
return new(BlockEntityData)
case 40: case 40:
return new(Instrument)
case 41: case 41:
return new(OminousBottleAmplifier)
case 42: case 42:
return new(JukeboxPlayable)
case 43: case 43:
return new(Recipes) return new(Recipes)
case 44: case 44:
return new(LodestoneTracker)
case 45: case 45:
case 46: case 46:
case 47: case 47:

View File

@ -1,29 +1,29 @@
package component package component
import ( import (
"io" "io"
"github.com/Tnze/go-mc/level/block" "github.com/Tnze/go-mc/level/block"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*DebugStickState)(nil) var _ DataComponent = (*DebugStickState)(nil)
type DebugStickState struct { type DebugStickState struct {
Data block.State Data block.State
} }
// ID implements DataComponent. // ID implements DataComponent.
func (DebugStickState) ID() string { func (DebugStickState) ID() string {
return "minecraft:debug_stick_state" return "minecraft:debug_stick_state"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (d *DebugStickState) ReadFrom(r io.Reader) (n int64, err error) { func (d *DebugStickState) ReadFrom(r io.Reader) (n int64, err error) {
return pk.NBT(&d.Data).ReadFrom(r) return pk.NBT(&d.Data).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (d *DebugStickState) WriteTo(w io.Writer) (n int64, err error) { func (d *DebugStickState) WriteTo(w io.Writer) (n int64, err error) {
return pk.NBT(&d.Data).WriteTo(w) return pk.NBT(&d.Data).WriteTo(w)
} }

View File

@ -1,29 +1,29 @@
package component package component
import ( import (
"io" "io"
"github.com/Tnze/go-mc/nbt/dynbt" "github.com/Tnze/go-mc/nbt/dynbt"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*EntityData)(nil) var _ DataComponent = (*EntityData)(nil)
type EntityData struct { type EntityData struct {
dynbt.Value dynbt.Value
} }
// ID implements DataComponent. // ID implements DataComponent.
func (EntityData) ID() string { func (EntityData) ID() string {
return "minecraft:entity_data" return "minecraft:entity_data"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (e *EntityData) ReadFrom(r io.Reader) (n int64, err error) { func (e *EntityData) ReadFrom(r io.Reader) (n int64, err error) {
return pk.NBT(&e.Value).ReadFrom(r) return pk.NBT(&e.Value).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (e *EntityData) WriteTo(w io.Writer) (n int64, err error) { func (e *EntityData) WriteTo(w io.Writer) (n int64, err error) {
return pk.NBT(&e.Value).WriteTo(w) return pk.NBT(&e.Value).WriteTo(w)
} }

View File

@ -1,85 +1,85 @@
package component package component
import ( import (
"io" "io"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*Instrument)(nil) var _ DataComponent = (*Instrument)(nil)
// TODO // TODO
type Instrument struct { type Instrument struct {
Type pk.VarInt Type pk.VarInt
SoundEvent SoundEvent SoundEvent SoundEvent
UseDuration pk.Float UseDuration pk.Float
Range pk.Float Range pk.Float
} }
// ID implements DataComponent. // ID implements DataComponent.
func (Instrument) ID() string { func (Instrument) ID() string {
return "minecraft:instrument" return "minecraft:instrument"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (i *Instrument) ReadFrom(r io.Reader) (n int64, err error) { func (i *Instrument) ReadFrom(r io.Reader) (n int64, err error) {
return pk.Tuple{ return pk.Tuple{
&i.Type, &i.Type,
pk.Opt{ pk.Opt{
Has: func() bool { return i.Type == 0 }, Has: func() bool { return i.Type == 0 },
Field: pk.Tuple{ Field: pk.Tuple{
&i.SoundEvent, &i.SoundEvent,
&i.UseDuration, &i.UseDuration,
&i.Range, &i.Range,
}, },
}, },
}.ReadFrom(r) }.ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (i *Instrument) WriteTo(w io.Writer) (n int64, err error) { func (i *Instrument) WriteTo(w io.Writer) (n int64, err error) {
return pk.Tuple{ return pk.Tuple{
&i.Type, &i.Type,
pk.Opt{ pk.Opt{
Has: func() bool { return i.Type == 0 }, Has: func() bool { return i.Type == 0 },
Field: pk.Tuple{ Field: pk.Tuple{
&i.SoundEvent, &i.SoundEvent,
&i.UseDuration, &i.UseDuration,
&i.Range, &i.Range,
}, },
}, },
}.WriteTo(w) }.WriteTo(w)
} }
// TODO // TODO
type SoundEvent struct { type SoundEvent struct {
Type pk.VarInt Type pk.VarInt
SoundName pk.Identifier SoundName pk.Identifier
FixedRange pk.Option[pk.Float, *pk.Float] FixedRange pk.Option[pk.Float, *pk.Float]
} }
func (s *SoundEvent) ReadFrom(r io.Reader) (int64, error) { func (s *SoundEvent) ReadFrom(r io.Reader) (int64, error) {
return pk.Tuple{ return pk.Tuple{
&s.Type, &s.Type,
pk.Opt{ pk.Opt{
Has: func() bool { return s.Type == 0 }, Has: func() bool { return s.Type == 0 },
Field: pk.Tuple{ Field: pk.Tuple{
&s.SoundName, &s.SoundName,
&s.FixedRange, &s.FixedRange,
}, },
}, },
}.ReadFrom(r) }.ReadFrom(r)
} }
func (s SoundEvent) WriteTo(w io.Writer) (int64, error) { func (s SoundEvent) WriteTo(w io.Writer) (int64, error) {
return pk.Tuple{ return pk.Tuple{
&s.Type, &s.Type,
pk.Opt{ pk.Opt{
Has: func() bool { return s.Type == 0 }, Has: func() bool { return s.Type == 0 },
Field: pk.Tuple{ Field: pk.Tuple{
&s.SoundName, &s.SoundName,
&s.FixedRange, &s.FixedRange,
}, },
}, },
}.WriteTo(w) }.WriteTo(w)
} }

View File

@ -0,0 +1,26 @@
package component
import (
"io"
)
var _ DataComponent = (*JukeboxPlayable)(nil)
type JukeboxPlayable struct {
// TODO
}
// ID implements DataComponent.
func (JukeboxPlayable) ID() string {
return "minecraft:jukebox_playable"
}
// ReadFrom implements DataComponent.
func (j *JukeboxPlayable) ReadFrom(r io.Reader) (n int64, err error) {
panic("unimplemented")
}
// WriteTo implements DataComponent.
func (j *JukeboxPlayable) WriteTo(w io.Writer) (n int64, err error) {
panic("unimplemented")
}

View File

@ -0,0 +1,41 @@
package component
import (
"io"
pk "github.com/Tnze/go-mc/net/packet"
)
var _ DataComponent = (*LodestoneTracker)(nil)
type LodestoneTracker struct {
HasGlobalPosition pk.Boolean
Dimension pk.Identifier
Position pk.Position
Tracked pk.Boolean
}
// ID implements DataComponent.
func (LodestoneTracker) ID() string {
return "minecraft:lodestone_tracker"
}
// ReadFrom implements DataComponent.
func (l *LodestoneTracker) ReadFrom(r io.Reader) (n int64, err error) {
return pk.Tuple{
&l.HasGlobalPosition,
&l.Dimension,
&l.Position,
&l.Tracked,
}.ReadFrom(r)
}
// WriteTo implements DataComponent.
func (l *LodestoneTracker) WriteTo(w io.Writer) (n int64, err error) {
return pk.Tuple{
&l.HasGlobalPosition,
&l.Dimension,
&l.Position,
&l.Tracked,
}.WriteTo(w)
}

View File

@ -1,29 +1,29 @@
package component package component
import ( import (
"io" "io"
"github.com/Tnze/go-mc/nbt/dynbt" "github.com/Tnze/go-mc/nbt/dynbt"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*MapDecorations)(nil) var _ DataComponent = (*MapDecorations)(nil)
type MapDecorations struct { type MapDecorations struct {
dynbt.Value dynbt.Value
} }
// ID implements DataComponent. // ID implements DataComponent.
func (MapDecorations) ID() string { func (MapDecorations) ID() string {
return "minecraft:map_decorations" return "minecraft:map_decorations"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (m *MapDecorations) ReadFrom(r io.Reader) (n int64, err error) { func (m *MapDecorations) ReadFrom(r io.Reader) (n int64, err error) {
return pk.NBT(&m.Value).ReadFrom(r) return pk.NBT(&m.Value).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (m *MapDecorations) WriteTo(w io.Writer) (n int64, err error) { func (m *MapDecorations) WriteTo(w io.Writer) (n int64, err error) {
return pk.NBT(&m.Value).WriteTo(w) return pk.NBT(&m.Value).WriteTo(w)
} }

View File

@ -1,31 +1,31 @@
package component package component
import ( import (
"io" "io"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*MapPostProcessing)(nil) var _ DataComponent = (*MapPostProcessing)(nil)
type MapPostProcessing int32 type MapPostProcessing int32
const ( const (
Lock MapPostProcessing = iota Lock MapPostProcessing = iota
Scale Scale
) )
// ID implements DataComponent. // ID implements DataComponent.
func (MapPostProcessing) ID() string { func (MapPostProcessing) ID() string {
return "minecraft:map_post_processing" return "minecraft:map_post_processing"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (m *MapPostProcessing) ReadFrom(r io.Reader) (n int64, err error) { func (m *MapPostProcessing) ReadFrom(r io.Reader) (n int64, err error) {
return (*pk.VarInt)(m).ReadFrom(r) return (*pk.VarInt)(m).ReadFrom(r)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (m *MapPostProcessing) WriteTo(w io.Writer) (n int64, err error) { func (m *MapPostProcessing) WriteTo(w io.Writer) (n int64, err error) {
return (*pk.VarInt)(m).WriteTo(w) return (*pk.VarInt)(m).WriteTo(w)
} }

View File

@ -0,0 +1,16 @@
package component
import (
pk "github.com/Tnze/go-mc/net/packet"
)
var _ DataComponent = (*OminousBottleAmplifier)(nil)
type OminousBottleAmplifier struct {
pk.VarInt
}
// ID implements DataComponent.
func (OminousBottleAmplifier) ID() string {
return "minecraft:ominous_bottle_amplifier"
}

View File

@ -1,30 +1,30 @@
package component package component
import ( import (
"io" "io"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*PotionContents)(nil) var _ DataComponent = (*PotionContents)(nil)
type PotionContents struct { type PotionContents struct {
PotionID pk.Option[pk.VarInt, *pk.VarInt] PotionID pk.Option[pk.VarInt, *pk.VarInt]
CustomColor pk.Option[pk.Int, *pk.Int] CustomColor pk.Option[pk.Int, *pk.Int]
PotionEffects []any PotionEffects []any
} }
// ID implements DataComponent. // ID implements DataComponent.
func (PotionContents) ID() string { func (PotionContents) ID() string {
return "minecraft:potion_contents" return "minecraft:potion_contents"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (p *PotionContents) ReadFrom(r io.Reader) (n int64, err error) { func (p *PotionContents) ReadFrom(r io.Reader) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (p *PotionContents) WriteTo(w io.Writer) (n int64, err error) { func (p *PotionContents) WriteTo(w io.Writer) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }

View File

@ -1,26 +1,26 @@
package component package component
import ( import (
"io" "io"
) )
var _ DataComponent = (*SuspiciousStewEffects)(nil) var _ DataComponent = (*SuspiciousStewEffects)(nil)
type SuspiciousStewEffects struct { type SuspiciousStewEffects struct {
Effects []any Effects []any
} }
// ID implements DataComponent. // ID implements DataComponent.
func (SuspiciousStewEffects) ID() string { func (SuspiciousStewEffects) ID() string {
return "minecraft:suspicious_stew_effects" return "minecraft:suspicious_stew_effects"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (s *SuspiciousStewEffects) ReadFrom(r io.Reader) (n int64, err error) { func (s *SuspiciousStewEffects) ReadFrom(r io.Reader) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (s *SuspiciousStewEffects) WriteTo(w io.Writer) (n int64, err error) { func (s *SuspiciousStewEffects) WriteTo(w io.Writer) (n int64, err error) {
panic("unimplemented") panic("unimplemented")
} }

View File

@ -1,24 +1,23 @@
package component package component
import "io" import "io"
var _ DataComponent = (*Trim)(nil) var _ DataComponent = (*Trim)(nil)
type Trim struct { type Trim struct {
}
}
// ID implements DataComponent.
// ID implements DataComponent. func (Trim) ID() string {
func (Trim) ID() string { return "minecraft:trim"
return "minecraft:trim" }
}
// ReadFrom implements DataComponent.
// ReadFrom implements DataComponent. func (t *Trim) ReadFrom(r io.Reader) (n int64, err error) {
func (t *Trim) ReadFrom(r io.Reader) (n int64, err error) { panic("unimplemented")
panic("unimplemented") }
}
// WriteTo implements DataComponent.
// WriteTo implements DataComponent. func (t *Trim) WriteTo(w io.Writer) (n int64, err error) {
func (t *Trim) WriteTo(w io.Writer) (n int64, err error) { panic("unimplemented")
panic("unimplemented") }
}

View File

@ -1,33 +1,33 @@
package component package component
import ( import (
"io" "io"
pk "github.com/Tnze/go-mc/net/packet" pk "github.com/Tnze/go-mc/net/packet"
) )
var _ DataComponent = (*WritableBookContent)(nil) var _ DataComponent = (*WritableBookContent)(nil)
type WritableBookContent struct { type WritableBookContent struct {
Pages []Page Pages []Page
} }
// ID implements DataComponent. // ID implements DataComponent.
func (w *WritableBookContent) ID() string { func (w *WritableBookContent) ID() string {
return "minecraft:writable_book_content" return "minecraft:writable_book_content"
} }
// ReadFrom implements DataComponent. // ReadFrom implements DataComponent.
func (w *WritableBookContent) ReadFrom(reader io.Reader) (n int64, err error) { func (w *WritableBookContent) ReadFrom(reader io.Reader) (n int64, err error) {
return pk.Array(&w.Pages).ReadFrom(reader) return pk.Array(&w.Pages).ReadFrom(reader)
} }
// WriteTo implements DataComponent. // WriteTo implements DataComponent.
func (w *WritableBookContent) WriteTo(writer io.Writer) (n int64, err error) { func (w *WritableBookContent) WriteTo(writer io.Writer) (n int64, err error) {
return pk.Array(&w.Pages).WriteTo(writer) return pk.Array(&w.Pages).WriteTo(writer)
} }
type Page struct { type Page struct {
Raw pk.String Raw pk.String
Filtered pk.Option[pk.String, *pk.String] Filtered pk.Option[pk.String, *pk.String]
} }