up3
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
package playerdb
|
||||
|
||||
import (
|
||||
"github.com/df-mc/dragonfly/server/block/cube"
|
||||
"github.com/df-mc/dragonfly/server/item"
|
||||
"github.com/df-mc/dragonfly/server/item/inventory"
|
||||
"github.com/df-mc/dragonfly/server/player"
|
||||
"github.com/df-mc/dragonfly/server/world"
|
||||
"github.com/go-gl/mathgl/mgl64"
|
||||
"github.com/google/uuid"
|
||||
"time"
|
||||
)
|
||||
|
||||
func (p *Provider) fromJson(d jsonData, lookupWorld func(world.Dimension) *world.World) (player.Config, *world.World) {
|
||||
dim, _ := world.DimensionByID(int(d.Dimension))
|
||||
mode, _ := world.GameModeByID(int(d.GameMode))
|
||||
conf := player.Config{
|
||||
UUID: uuid.MustParse(d.UUID),
|
||||
XUID: d.XUID,
|
||||
Name: d.Username,
|
||||
Position: d.Position,
|
||||
Rotation: cube.Rotation{d.Yaw, d.Pitch},
|
||||
Velocity: d.Velocity,
|
||||
Health: d.Health,
|
||||
MaxHealth: d.MaxHealth,
|
||||
Food: d.Hunger,
|
||||
FoodTick: d.FoodTick,
|
||||
Exhaustion: d.ExhaustionLevel,
|
||||
Saturation: d.SaturationLevel,
|
||||
Experience: d.Experience,
|
||||
AirSupply: d.AirSupply,
|
||||
MaxAirSupply: d.MaxAirSupply,
|
||||
EnchantmentSeed: d.EnchantmentSeed,
|
||||
GameMode: mode,
|
||||
Effects: dataToEffects(d.Effects),
|
||||
FireTicks: d.FireTicks,
|
||||
FallDistance: d.FallDistance,
|
||||
Inventory: inventory.New(36, nil),
|
||||
EnderChestInventory: inventory.New(27, nil),
|
||||
OffHand: inventory.New(1, nil),
|
||||
Armour: inventory.NewArmour(nil),
|
||||
}
|
||||
echest := make([]item.Stack, 27)
|
||||
decodeItems(d.EnderChestInventory, echest)
|
||||
invData := dataToInv(d.Inventory)
|
||||
|
||||
for slot, stack := range invData.Items {
|
||||
_ = conf.Inventory.SetItem(slot, stack)
|
||||
}
|
||||
_ = conf.OffHand.SetItem(0, invData.OffHand)
|
||||
conf.Armour.Set(invData.Helmet, invData.Chestplate, invData.Leggings, invData.Boots)
|
||||
conf.HeldSlot = int(invData.MainHandSlot)
|
||||
|
||||
for slot, stack := range echest {
|
||||
_ = conf.EnderChestInventory.SetItem(slot, stack)
|
||||
}
|
||||
return conf, lookupWorld(dim)
|
||||
}
|
||||
|
||||
func (p *Provider) toJson(d player.Config, w *world.World) jsonData {
|
||||
dim, _ := world.DimensionID(w.Dimension())
|
||||
mode, _ := world.GameModeID(d.GameMode)
|
||||
offHand, _ := d.OffHand.Item(0)
|
||||
return jsonData{
|
||||
UUID: d.UUID.String(),
|
||||
Username: d.Name,
|
||||
Position: d.Position,
|
||||
Velocity: d.Velocity,
|
||||
Yaw: d.Rotation.Yaw(),
|
||||
Pitch: d.Rotation.Pitch(),
|
||||
Health: d.Health,
|
||||
MaxHealth: d.MaxHealth,
|
||||
Hunger: d.Food,
|
||||
FoodTick: d.FoodTick,
|
||||
ExhaustionLevel: d.Exhaustion,
|
||||
SaturationLevel: d.Saturation,
|
||||
Experience: d.Experience,
|
||||
AirSupply: d.AirSupply,
|
||||
MaxAirSupply: d.MaxAirSupply,
|
||||
EnchantmentSeed: d.EnchantmentSeed,
|
||||
GameMode: uint8(mode),
|
||||
Effects: effectsToData(d.Effects),
|
||||
FireTicks: d.FireTicks,
|
||||
FallDistance: d.FallDistance,
|
||||
Inventory: invToData(InventoryData{
|
||||
Items: d.Inventory.Slots(),
|
||||
Boots: d.Armour.Boots(),
|
||||
Leggings: d.Armour.Leggings(),
|
||||
Chestplate: d.Armour.Chestplate(),
|
||||
Helmet: d.Armour.Helmet(),
|
||||
OffHand: offHand,
|
||||
MainHandSlot: uint32(d.HeldSlot),
|
||||
}),
|
||||
EnderChestInventory: encodeItems(d.EnderChestInventory.Slots()),
|
||||
Dimension: uint8(dim),
|
||||
}
|
||||
}
|
||||
|
||||
type jsonData struct {
|
||||
UUID string
|
||||
XUID string
|
||||
Username string
|
||||
Position, Velocity mgl64.Vec3
|
||||
Yaw, Pitch float64
|
||||
Health, MaxHealth float64
|
||||
Hunger int
|
||||
FoodTick int
|
||||
ExhaustionLevel, SaturationLevel float64
|
||||
EnchantmentSeed int64
|
||||
Experience int
|
||||
AirSupply, MaxAirSupply int
|
||||
GameMode uint8
|
||||
Inventory jsonInventoryData
|
||||
EnderChestInventory []jsonSlot
|
||||
Effects []jsonEffect
|
||||
FireTicks int64
|
||||
FallDistance float64
|
||||
Dimension uint8
|
||||
}
|
||||
|
||||
type jsonInventoryData struct {
|
||||
Items []jsonSlot
|
||||
Boots []byte
|
||||
Leggings []byte
|
||||
Chestplate []byte
|
||||
Helmet []byte
|
||||
OffHand []byte
|
||||
MainHandSlot uint32
|
||||
}
|
||||
|
||||
type jsonSlot struct {
|
||||
Item []byte
|
||||
Slot int
|
||||
}
|
||||
|
||||
type jsonEffect struct {
|
||||
ID int
|
||||
Level int
|
||||
Duration time.Duration
|
||||
Ambient bool
|
||||
ParticlesHidden bool
|
||||
Infinite bool
|
||||
}
|
||||
Reference in New Issue
Block a user