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,60 @@
|
||||
package world
|
||||
|
||||
import (
|
||||
"github.com/df-mc/dragonfly/server/block/cube"
|
||||
"github.com/df-mc/dragonfly/server/world/chunk"
|
||||
"github.com/df-mc/goleveldb/leveldb"
|
||||
"github.com/google/uuid"
|
||||
"io"
|
||||
)
|
||||
|
||||
// Provider represents a value that may provide world data to a World value. It usually does the reading and
|
||||
// writing of the world data so that the World may use it.
|
||||
type Provider interface {
|
||||
io.Closer
|
||||
// Settings loads the settings for a World and returns them.
|
||||
Settings() *Settings
|
||||
// SaveSettings saves the settings of a World.
|
||||
SaveSettings(*Settings)
|
||||
|
||||
// LoadPlayerSpawnPosition loads the player spawn point if found, otherwise an error will be returned.
|
||||
LoadPlayerSpawnPosition(uuid uuid.UUID) (pos cube.Pos, exists bool, err error)
|
||||
// SavePlayerSpawnPosition saves the player spawn point. In vanilla, this can be done with beds in the overworld
|
||||
// or respawn anchors in the nether.
|
||||
SavePlayerSpawnPosition(uuid uuid.UUID, pos cube.Pos) error
|
||||
// LoadColumn reads a world.Column from the DB at a position and dimension
|
||||
// in the DB. If no column at that position exists, errors.Is(err,
|
||||
// leveldb.ErrNotFound) equals true.
|
||||
LoadColumn(pos ChunkPos, dim Dimension) (*chunk.Column, error)
|
||||
// StoreColumn stores a world.Column at a position and dimension in the DB.
|
||||
// An error is returned if storing was unsuccessful.
|
||||
StoreColumn(pos ChunkPos, dim Dimension, col *chunk.Column) error
|
||||
}
|
||||
|
||||
// Compile time check to make sure NopProvider implements Provider.
|
||||
var _ Provider = (*NopProvider)(nil)
|
||||
|
||||
// NopProvider implements a Provider that does not perform any disk I/O. It generates values on the run and
|
||||
// dynamically, instead of reading and writing data, and otherwise returns empty values. A Settings struct can be passed
|
||||
// to initialise a world with specific settings. Since Settings is a pointer, using the same NopProvider for multiple
|
||||
// worlds means those worlds will share the same settings.
|
||||
type NopProvider struct {
|
||||
Set *Settings
|
||||
}
|
||||
|
||||
func (n NopProvider) Settings() *Settings {
|
||||
if n.Set == nil {
|
||||
return defaultSettings()
|
||||
}
|
||||
return n.Set
|
||||
}
|
||||
func (NopProvider) SaveSettings(*Settings) {}
|
||||
func (NopProvider) LoadColumn(ChunkPos, Dimension) (*chunk.Column, error) {
|
||||
return nil, leveldb.ErrNotFound
|
||||
}
|
||||
func (NopProvider) StoreColumn(ChunkPos, Dimension, *chunk.Column) error { return nil }
|
||||
func (NopProvider) LoadPlayerSpawnPosition(uuid.UUID) (cube.Pos, bool, error) {
|
||||
return cube.Pos{}, false, nil
|
||||
}
|
||||
func (NopProvider) SavePlayerSpawnPosition(uuid.UUID, cube.Pos) error { return nil }
|
||||
func (NopProvider) Close() error { return nil }
|
||||
Reference in New Issue
Block a user