Skip to content

server.enchant

Constants #

const custom_enchantment_id_start = 256

Vanilla enchantment ids end below this; plugin enchantments allocate from here up.

const id_protection = 0
const id_fire_protection = 1
const id_feather_falling = 2
const id_blast_protection = 3
const id_projectile_protection = 4
const id_thorns = 5
const id_respiration = 6
const id_depth_strider = 7
const id_aqua_affinity = 8
const id_sharpness = 9
const id_smite = 10
const id_bane_of_arthropods = 11
const id_knockback = 12
const id_fire_aspect = 13
const id_looting = 14
const id_efficiency = 15
const id_silk_touch = 16
const id_unbreaking = 17
const id_fortune = 18
const id_power = 19
const id_punch = 20
const id_flame = 21
const id_infinity = 22
const id_luck_of_the_sea = 23
const id_lure = 24
const id_frost_walker = 25
const id_mending = 26
const id_curse_of_binding = 27
const id_curse_of_vanishing = 28
const id_impaling = 29
const id_riptide = 30
const id_loyalty = 31
const id_channeling = 32
const id_multishot = 33
const id_piercing = 34
const id_quick_charge = 35
const id_soul_speed = 36
const id_swift_sneak = 37

fn ench_nbt #

fn ench_nbt(entries []Applied) nbt.Tag

ench_nbt builds the Bedrock 'ench' list tag for an item stack: one compound per enchantment with short id and lvl fields.

fn new_registry #

fn new_registry() Registry

new_registry builds a Registry pre-populated with the vanilla enchantments.

fn register_defaults #

fn register_defaults(mut r Registry)

register_defaults registers the vanilla Bedrock enchantment set with their numeric ids and level caps.

interface Enchantment #

interface Enchantment {
	// id returns the numeric enchantment id used in item NBT.
	id() int
	// name returns the identifier without namespace, e.g. 'sharpness'.
	name() string
	// min_level is the lowest valid level.
	min_level() int
	// max_level is the highest valid level.
	max_level() int
	// can_enchant reports whether the enchantment applies to the item id.
	can_enchant(item_id string) bool
	// attack_bonus is extra melee damage granted at level, 0 for non-offense.
	attack_bonus(level int) f32
	// protection_factor is the damage reduction weight at level, 0 for
	// non-armor enchantments.
	protection_factor(level int) f32
}

Enchantment is the behaviour contract every enchantment implements. Vanilla enchantments and plugin ones share the same interface, so combat and armor code can query them uniformly.

struct Applied #

struct Applied {
pub:
	eid   int
	level int
}

Applied is one enchantment instance on an item stack.

struct Registry #

struct Registry {
mut:
	by_id       map[int]Enchantment
	by_name     map[string]Enchantment
	next_custom int = custom_enchantment_id_start
}

Registry maps enchantment ids and names to their classes. It boots with the vanilla set registered; plugins add theirs with ids from custom_enchantment_id_start up.

fn (Registry) register #

fn (mut r Registry) register(e Enchantment) bool

register adds an enchantment, returning false when its id or name is taken.

fn (Registry) next_custom_id #

fn (r &Registry) next_custom_id() int

next_custom_id returns the next free id in the custom range without claiming it.

fn (Registry) get #

fn (r &Registry) get(id int) ?Enchantment

fn (Registry) get_by_name #

fn (r &Registry) get_by_name(name string) ?Enchantment

fn (Registry) len #

fn (r &Registry) len() int

fn (Registry) names #

fn (r &Registry) names() []string

fn (Registry) attack_bonus #

fn (r &Registry) attack_bonus(applied []Applied) f32

attack_bonus sums the melee damage bonus of every applied enchantment.

fn (Registry) protection_factor #

fn (r &Registry) protection_factor(applied []Applied) f32

protection_factor sums the damage reduction weight of every applied enchantment.

struct SimpleEnchantment #

struct SimpleEnchantment {
pub:
	eid     int
	ident   string
	min_lvl int = 1
	max_lvl int = 1
	// item_match holds substrings an item id must contain, e.g. ['sword',
	// 'axe']. Empty matches every item.
	item_match           []string
	attack_per_level     f32
	protection_per_level f32
}

SimpleEnchantment is the base class for enchantments that carry flat per-level bonuses and match items by id substring.

fn (SimpleEnchantment) id #

fn (e SimpleEnchantment) id() int

fn (SimpleEnchantment) name #

fn (e SimpleEnchantment) name() string

fn (SimpleEnchantment) min_level #

fn (e SimpleEnchantment) min_level() int

fn (SimpleEnchantment) max_level #

fn (e SimpleEnchantment) max_level() int

fn (SimpleEnchantment) can_enchant #

fn (e SimpleEnchantment) can_enchant(item_id string) bool

fn (SimpleEnchantment) attack_bonus #

fn (e SimpleEnchantment) attack_bonus(level int) f32

fn (SimpleEnchantment) protection_factor #

fn (e SimpleEnchantment) protection_factor(level int) f32