From ae496e92380887d87c35a56407bfb1b264b6f7b6 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Fri, 24 Mar 2023 20:45:53 +0100 Subject: [PATCH] save more entity data --- build.py | 1 + subcommands/resourcepack-d/resourcepack-d.go | Bin 5400 -> 5490 bytes subcommands/world/entity.go | 101 ++++++++++++++++++- subcommands/world/world.go | 6 +- ui/gui/pages/worlds/map.go | 23 ++--- utils/resourcepack.go | 8 +- 6 files changed, 116 insertions(+), 23 deletions(-) diff --git a/build.py b/build.py index 2ccb099..587df1a 100644 --- a/build.py +++ b/build.py @@ -23,6 +23,7 @@ if GITHUB_OUTPUT: with open("./subcommands/resourcepack-d/resourcepack-d.go", "rb") as f: PACK_SUPPORT = f.read(100).count(b"package ") > 0 print(f"Pack Support: {PACK_SUPPORT}") +print(flush=True) LDFLAGS = f"-s -w -X github.com/bedrock-tool/bedrocktool/utils.Version={TAG}" diff --git a/subcommands/resourcepack-d/resourcepack-d.go b/subcommands/resourcepack-d/resourcepack-d.go index ca60d6d68feea54ba0555f72ff82515ebd50f27f..5a0308244fb2de8639d9881407774a1ce2652119 100644 GIT binary patch literal 5490 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 C)Pw2( diff --git a/subcommands/world/entity.go b/subcommands/world/entity.go index a6fb800..0309890 100644 --- a/subcommands/world/entity.go +++ b/subcommands/world/entity.go @@ -2,6 +2,7 @@ package world import ( "github.com/bedrock-tool/bedrocktool/utils/behaviourpack" + "github.com/bedrock-tool/bedrocktool/utils/nbtconv" "github.com/df-mc/dragonfly/server/block/cube" "github.com/df-mc/dragonfly/server/world" "github.com/go-gl/mathgl/mgl32" @@ -19,7 +20,13 @@ type entityState struct { HeadYaw, BodyYaw float32 Velocity mgl32.Vec3 - Metadata protocol.EntityMetadata + Metadata protocol.EntityMetadata + Inventory map[byte]map[byte]protocol.ItemInstance + + Helmet *protocol.ItemInstance + Chestplate *protocol.ItemInstance + Leggings *protocol.ItemInstance + Boots *protocol.ItemInstance } type serverEntityType struct { @@ -84,6 +91,27 @@ func (w *WorldState) processAddActor(pk *packet.AddActor) { } } +var flagNames = map[uint8]string{ + protocol.EntityDataFlagSheared: "Sheared", + protocol.EntityDataFlagCaptain: "IsIllagerCaptain", + protocol.EntityDataFlagSitting: "Sitting", + protocol.EntityDataFlagBaby: "IsBaby", + protocol.EntityDataFlagTamed: "IsTamed", + protocol.EntityDataFlagTrusting: "IsTrusting", + protocol.EntityDataFlagOrphaned: "IsOrphaned", + protocol.EntityDataFlagAngry: "IsAngry", + protocol.EntityDataFlagOutOfControl: "IsOutOfControl", + protocol.EntityDataFlagSaddled: "Saddled", + protocol.EntityDataFlagChested: "Chested", + protocol.EntityDataFlagShowBottom: "ShowBottom", + protocol.EntityDataFlagGliding: "IsGliding", + protocol.EntityDataFlagSwimming: "IsSwimming", + protocol.EntityDataFlagEating: "IsEating", + protocol.EntityDataFlagScared: "IsScared", + protocol.EntityDataFlagStunned: "IsStunned", + protocol.EntityDataFlagRoaring: "IsRoaring", +} + func entityMetadataToNBT(metadata protocol.EntityMetadata, nbt map[string]any) { if variant, ok := metadata[protocol.EntityDataKeyVariant]; ok { nbt["Variant"] = variant @@ -108,6 +136,49 @@ func entityMetadataToNBT(metadata protocol.EntityMetadata, nbt map[string]any) { nbt["CustomNameVisible"] = false } } + + if metadata.Flag(protocol.EntityDataKeyFlags, protocol.EntityDataFlagNoAI) { + nbt["IsAutonomous"] = false + } + for k, v := range flagNames { + nbt[v] = metadata.Flag(protocol.EntityDataKeyFlags, k) + } + + AlwaysShowName := metadata.Flag(protocol.EntityDataKeyFlags, protocol.EntityDataFlagAlwaysShowName) + if AlwaysShowName { + nbt["CustomNameVisible"] = true + } + + type effect struct { + Id byte + Amplifier byte + Duration int32 + DurationEasy int32 + DurationNormal int32 + DurationHard int32 + Ambient bool + ShowParticles bool + DisplayOnScreenTextureAnimation bool + } + + activeEffects := []effect{} + addEffect := func(id int, showParticles bool) { + activeEffects = append(activeEffects, effect{ + Id: byte(id), + Amplifier: 1, + Duration: 10000000, + ShowParticles: false, + }) + } + + invisible := metadata.Flag(protocol.EntityDataKeyFlags, protocol.EntityDataFlagInvisible) + if invisible { + addEffect(packet.EffectInvisibility, false) + } + + if len(activeEffects) > 0 { + nbt["ActiveEffects"] = activeEffects + } } func vec3float32(x mgl32.Vec3) []float32 { @@ -127,6 +198,16 @@ func (s *entityState) ToServerEntity() serverEntity { }, } entityMetadataToNBT(s.Metadata, e.EntityType.NBT) + + if s.Helmet != nil || s.Chestplate != nil || s.Leggings != nil || s.Boots != nil { + armor := make([]map[string]any, 0, 4) + armor = append(armor, nbtconv.WriteItem(stackToItem(s.Helmet.Stack), true)) + armor = append(armor, nbtconv.WriteItem(stackToItem(s.Chestplate.Stack), true)) + armor = append(armor, nbtconv.WriteItem(stackToItem(s.Leggings.Stack), true)) + armor = append(armor, nbtconv.WriteItem(stackToItem(s.Boots.Stack), true)) + e.EntityType.NBT["Armor"] = armor + } + return e } @@ -176,6 +257,24 @@ func (w *WorldState) ProcessEntityPackets(pk packet.Packet) packet.Packet { e.Pitch = pk.Rotation.X() e.Yaw = pk.Rotation.Y() } + case *packet.MobEquipment: + e, ok := w.entities[pk.EntityRuntimeID] + if ok { + w, ok := e.Inventory[pk.WindowID] + if !ok { + w = make(map[byte]protocol.ItemInstance) + e.Inventory[pk.WindowID] = w + } + w[pk.HotBarSlot] = pk.NewItem + } + case *packet.MobArmourEquipment: + e, ok := w.entities[pk.EntityRuntimeID] + if ok { + e.Helmet = &pk.Helmet + e.Chestplate = &pk.Chestplate + e.Leggings = &pk.Chestplate + e.Boots = &pk.Boots + } } return pk } diff --git a/subcommands/world/world.go b/subcommands/world/world.go index 7e84932..2a7c9d8 100644 --- a/subcommands/world/world.go +++ b/subcommands/world/world.go @@ -482,6 +482,10 @@ func (w *WorldState) SaveAndReset() { } else { var rdeps []dep for k, p := range packs { + if p.Encrypted() && !p.CanDecrypt() { + logrus.Warnf("Cant add %s, it is encrypted", p.Name()) + continue + } logrus.Infof(locale.Loc("adding_pack", locale.Strmap{"Name": k})) packFolder := path.Join(folder, "resource_packs", p.Name()) os.MkdirAll(packFolder, 0o755) @@ -495,7 +499,7 @@ func (w *WorldState) SaveAndReset() { }) } if len(rdeps) > 0 { - addPacksJSON("world_resource_packs.json", rdeps) + //addPacksJSON("world_resource_packs.json", rdeps) } } } diff --git a/ui/gui/pages/worlds/map.go b/ui/gui/pages/worlds/map.go index b8a283b..4f25341 100644 --- a/ui/gui/pages/worlds/map.go +++ b/ui/gui/pages/worlds/map.go @@ -40,18 +40,15 @@ func (m *Map) HandlePointerEvent(e pointer.Event) { case pointer.Release: m.grabbed = false case pointer.Scroll: - m.HandleScrollEvent(e) + scaleFactor := float32(math.Pow(1.01, float64(e.Scroll.Y))) + m.transform = m.transform.Scale(e.Position.Sub(m.center), f32.Pt(scaleFactor, scaleFactor)) + m.scaleFactor *= scaleFactor } } -func (m *Map) HandleScrollEvent(e pointer.Event) { - scaleFactor := float32(math.Pow(1.01, float64(e.Scroll.Y))) - m.transform = m.transform.Scale(e.Position.Sub(m.center), f32.Pt(scaleFactor, scaleFactor)) - m.scaleFactor *= scaleFactor -} - func (m *Map) Layout(gtx layout.Context) layout.Dimensions { - // here we loop through all the events associated with this button. + m.center = f32.Pt(float32(gtx.Constraints.Max.X), float32(gtx.Constraints.Max.Y)).Div(2) + for _, e := range gtx.Events(m) { if e, ok := e.(pointer.Event); ok { m.HandlePointerEvent(e) @@ -64,17 +61,9 @@ func (m *Map) Layout(gtx layout.Context) layout.Dimensions { dy := float32(m.MapImage.Bounds().Dy()) size := f32.Pt(dx*m.scaleFactor, dy*m.scaleFactor) - m.center = f32.Pt( - float32(gtx.Constraints.Max.X), - float32(gtx.Constraints.Max.Y), - ).Div(2) - - // Calculate the offset required to center the image within the widget. - offset := m.center.Sub(size.Div(2)) - // Draw the image at the correct position and scale. defer clip.Rect{Max: gtx.Constraints.Max}.Push(gtx.Ops).Pop() - op.Affine(m.transform.Offset(offset)).Add(gtx.Ops) + op.Affine(m.transform.Offset(m.center.Sub(size.Div(2)))).Add(gtx.Ops) m.imageOp.Add(gtx.Ops) paint.PaintOp{}.Add(gtx.Ops) } diff --git a/utils/resourcepack.go b/utils/resourcepack.go index e1bb7d3..98f1101 100644 --- a/utils/resourcepack.go +++ b/utils/resourcepack.go @@ -60,8 +60,8 @@ var PackFromBase = func(pack *resource.Pack) Pack { return b } -func GetPacks(server *minecraft.Conn) (packs map[string]*resource.Pack, err error) { - packs = make(map[string]*resource.Pack) +func GetPacks(server *minecraft.Conn) (packs map[string]Pack, err error) { + packs = make(map[string]Pack) for _, pack := range server.ResourcePacks() { pack := PackFromBase(pack) if pack.Encrypted() && pack.CanDecrypt() { @@ -73,9 +73,9 @@ func GetPacks(server *minecraft.Conn) (packs map[string]*resource.Pack, err erro if err != nil { return nil, err } - packs[pack.Name()] = pack2 + packs[pack.Name()] = &Packb{pack2} } else { - packs[pack.Name()] = pack.Base() + packs[pack.Name()] = pack } } return