67 private static array $members;
69 private static bool $initialized =
false;
71 private function __construct(){
81 private static function unsafeAssign(\Closure $closure,
Enchantment $memberValue) :
void{
87 $closure($memberValue);
94 private static function getInitAssigners() : array{
96 "AQUA_AFFINITY" => fn(
Enchantment $v) => self::$_mAQUA_AFFINITY = $v,
98 "EFFICIENCY" => fn(
Enchantment $v) => self::$_mEFFICIENCY = $v,
102 "FLAME" => fn(
Enchantment $v) => self::$_mFLAME = $v,
103 "FORTUNE" => fn(
Enchantment $v) => self::$_mFORTUNE = $v,
104 "FROST_WALKER" => fn(
Enchantment $v) => self::$_mFROST_WALKER = $v,
105 "INFINITY" => fn(
Enchantment $v) => self::$_mINFINITY = $v,
107 "MENDING" => fn(
Enchantment $v) => self::$_mMENDING = $v,
108 "POWER" => fn(
Enchantment $v) => self::$_mPOWER = $v,
111 "PUNCH" => fn(
Enchantment $v) => self::$_mPUNCH = $v,
112 "RESPIRATION" => fn(
Enchantment $v) => self::$_mRESPIRATION = $v,
114 "SILK_TOUCH" => fn(
Enchantment $v) => self::$_mSILK_TOUCH = $v,
115 "SWIFT_SNEAK" => fn(
Enchantment $v) => self::$_mSWIFT_SNEAK = $v,
116 "THORNS" => fn(
Enchantment $v) => self::$_mTHORNS = $v,
117 "UNBREAKING" => fn(
Enchantment $v) => self::$_mUNBREAKING = $v,
118 "VANISHING" => fn(
Enchantment $v) => self::$_mVANISHING = $v,
122 private static function init() :
void{
125 if(self::$initialized){
126 throw new \LogicException(
"Circular dependency detected - use RegistrySource->registerDelayed() if the circular dependency can't be avoided");
128 self::$initialized =
true;
129 $assigners = self::getInitAssigners();
132 foreach($source->getAllValues() as $name => $value){
133 $assigner = $assigners[$name] ??
throw new \LogicException(
"Unexpected source registry member \"$name\" (code probably needs regenerating)");
134 if(isset($assigned[$name])){
136 throw new \LogicException(
"Repeated registry source member \"$name\"");
138 self::$members[mb_strtoupper($name)] = $value;
139 $assigned[$name] =
true;
140 unset($assigners[$name]);
141 self::unsafeAssign($assigner, $value);
143 if(count($assigners) > 0){
144 throw new \LogicException(
"Missing values for registry members (code probably needs regenerating): " . implode(
", ", array_keys($assigners)));
153 if(!isset(self::$members)){ self::init(); }
154 return self::$members;
157 public static function AQUA_AFFINITY() :
Enchantment{
158 if(!isset(self::$_mAQUA_AFFINITY)){ self::init(); }
159 return self::$_mAQUA_AFFINITY;
162 public static function BLAST_PROTECTION() : ProtectionEnchantment{
163 if(!isset(self::$_mBLAST_PROTECTION)){ self::init(); }
164 return self::$_mBLAST_PROTECTION;
167 public static function EFFICIENCY() : Enchantment{
168 if(!isset(self::$_mEFFICIENCY)){ self::init(); }
169 return self::$_mEFFICIENCY;
172 public static function FEATHER_FALLING() : ProtectionEnchantment{
173 if(!isset(self::$_mFEATHER_FALLING)){ self::init(); }
174 return self::$_mFEATHER_FALLING;
177 public static function FIRE_ASPECT() : FireAspectEnchantment{
178 if(!isset(self::$_mFIRE_ASPECT)){ self::init(); }
179 return self::$_mFIRE_ASPECT;
182 public static function FIRE_PROTECTION() : ProtectionEnchantment{
183 if(!isset(self::$_mFIRE_PROTECTION)){ self::init(); }
184 return self::$_mFIRE_PROTECTION;
187 public static function FLAME() : Enchantment{
188 if(!isset(self::$_mFLAME)){ self::init(); }
189 return self::$_mFLAME;
192 public static function FORTUNE() : Enchantment{
193 if(!isset(self::$_mFORTUNE)){ self::init(); }
194 return self::$_mFORTUNE;
197 public static function FROST_WALKER() : Enchantment{
198 if(!isset(self::$_mFROST_WALKER)){ self::init(); }
199 return self::$_mFROST_WALKER;
202 public static function INFINITY() : Enchantment{
203 if(!isset(self::$_mINFINITY)){ self::init(); }
204 return self::$_mINFINITY;
207 public static function KNOCKBACK() : KnockbackEnchantment{
208 if(!isset(self::$_mKNOCKBACK)){ self::init(); }
209 return self::$_mKNOCKBACK;
212 public static function MENDING() : Enchantment{
213 if(!isset(self::$_mMENDING)){ self::init(); }
214 return self::$_mMENDING;
217 public static function POWER() : Enchantment{
218 if(!isset(self::$_mPOWER)){ self::init(); }
219 return self::$_mPOWER;
222 public static function PROJECTILE_PROTECTION() : ProtectionEnchantment{
223 if(!isset(self::$_mPROJECTILE_PROTECTION)){ self::init(); }
224 return self::$_mPROJECTILE_PROTECTION;
227 public static function PROTECTION() : ProtectionEnchantment{
228 if(!isset(self::$_mPROTECTION)){ self::init(); }
229 return self::$_mPROTECTION;
232 public static function PUNCH() : Enchantment{
233 if(!isset(self::$_mPUNCH)){ self::init(); }
234 return self::$_mPUNCH;
237 public static function RESPIRATION() : Enchantment{
238 if(!isset(self::$_mRESPIRATION)){ self::init(); }
239 return self::$_mRESPIRATION;
242 public static function SHARPNESS() : SharpnessEnchantment{
243 if(!isset(self::$_mSHARPNESS)){ self::init(); }
244 return self::$_mSHARPNESS;
247 public static function SILK_TOUCH() : Enchantment{
248 if(!isset(self::$_mSILK_TOUCH)){ self::init(); }
249 return self::$_mSILK_TOUCH;
252 public static function SWIFT_SNEAK() : Enchantment{
253 if(!isset(self::$_mSWIFT_SNEAK)){ self::init(); }
254 return self::$_mSWIFT_SNEAK;
257 public static function THORNS() : Enchantment{
258 if(!isset(self::$_mTHORNS)){ self::init(); }
259 return self::$_mTHORNS;
262 public static function UNBREAKING() : Enchantment{
263 if(!isset(self::$_mUNBREAKING)){ self::init(); }
264 return self::$_mUNBREAKING;
267 public static function VANISHING() : Enchantment{
268 if(!isset(self::$_mVANISHING)){ self::init(); }
269 return self::$_mVANISHING;