11package org .skriptlang .skript .bukkit .spawners ;
22
3- import ch .njol .skript .Skript ;
43import ch .njol .skript .bukkitutil .EntityUtils ;
54import ch .njol .skript .classes .*;
65import ch .njol .skript .entity .EntityData ;
2019import org .bukkit .event .entity .TrialSpawnerSpawnEvent ;
2120import org .bukkit .inventory .EquipmentSlot ;
2221import org .bukkit .loot .LootTable ;
23- import org .jetbrains .annotations .NotNull ;
2422import org .skriptlang .skript .addon .AddonModule ;
2523import org .skriptlang .skript .addon .SkriptAddon ;
2624import org .skriptlang .skript .bukkit .spawners .util .SkriptSpawnerEntry ;
3129import org .skriptlang .skript .bukkit .spawners .util .spawnerdata .SkriptMobSpawnerData ;
3230import org .skriptlang .skript .bukkit .spawners .util .spawnerdata .SkriptSpawnerData ;
3331import org .skriptlang .skript .bukkit .spawners .util .spawnerdata .SkriptTrialSpawnerData ;
34- import org .skriptlang .skript .lang .converter .Converter ;
35- import org .skriptlang .skript .lang .converter .Converters ;
3632
37- import java .io .IOException ;
3833import java .io .StreamCorruptedException ;
3934import java .util .HashMap ;
4035import java .util .Map ;
@@ -50,7 +45,6 @@ public void init(SkriptAddon addon) {
5045 .name ("Spawner Data" )
5146 .description ("todo" )
5247 .since ("INSERT VERSION" )
53- .serializer (new YggdrasilSerializer <>())
5448 );
5549
5650 Classes .registerClass (new ClassInfo <>(SkriptMobSpawnerData .class , "mobspawnerdata" )
@@ -159,10 +153,8 @@ protected SkriptSpawnerEntry deserialize(Fields fields) throws StreamCorruptedEx
159153
160154 Map <EquipmentSlot , Float > dropChances = new HashMap <>();
161155 int count = 0 ;
162- while (true ) {
156+ while (fields . contains ( "equipment_slot_" + count ) ) {
163157 EquipmentSlot slot = fields .getObject ("equipment_slot_" + count , EquipmentSlot .class );
164- if (slot == null )
165- break ;
166158 float chance = fields .getPrimitive ("chance_" + count , float .class );
167159 dropChances .put (slot , chance );
168160 count ++;
@@ -257,6 +249,16 @@ protected boolean canBeInstantiated() {
257249 EventValues .registerEventValue (MobSpawnerDataEvent .class , SkriptMobSpawnerData .class , MobSpawnerDataEvent ::getSpawnerData );
258250 EventValues .registerEventValue (SpawnerEntryEvent .class , SkriptSpawnerEntry .class , SpawnerEntryEvent ::getSpawnerEntry );
259251 EventValues .registerEventValue (SpawnRuleEvent .class , SpawnRule .class , SpawnRuleEvent ::getSpawnRule );
252+
253+ EventValues .registerEventValue (SpawnerSpawnEvent .class , Location .class , SpawnerSpawnEvent ::getLocation );
254+ EventValues .registerEventValue (SpawnerSpawnEvent .class , Entity .class , SpawnerSpawnEvent ::getEntity );
255+
256+ EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Block .class , event -> event .getTrialSpawner ().getBlock ());
257+ EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Location .class , TrialSpawnerSpawnEvent ::getLocation );
258+ EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Entity .class , TrialSpawnerSpawnEvent ::getEntity );
259+
260+ EventValues .registerEventValue (PreSpawnerSpawnEvent .class , EntityData .class ,
261+ event -> EntityUtils .toSkriptEntityData (event .getType ()));
260262 }
261263
262264 @ Override
@@ -365,66 +367,6 @@ public String toVariableNameString(SpawnerEntry entry) {
365367 })
366368 );
367369
368- Classes .registerClass (new ClassInfo <>(SpawnerEntryEquipment .class , "spawnerentryequipment" )
369- .user ("spawner ?entry ?equipments?" )
370- .name ("Spawner Entry Equipment" )
371- .description (
372- "Represents a spawner entry equipment. Spawner entry equipments are used to specify the equipment "
373- + "that an entity will spawn with. This includes the equipment loot table and the drop chances for each "
374- + "equipment slot. You can find more information about this in the Minecraft wiki for "
375- + "<a href='https://minecraft.wiki/w/Monster_Spawner'>spawners</a>" )
376- .since ("INSERT VERSION" )
377- .requiredPlugins ("MC 1.21+" )
378- .parser (new Parser <>() {
379- @ Override
380- public boolean canParse (ParseContext context ) {
381- return false ;
382- }
383-
384- @ Override
385- public String toString (SpawnerEntryEquipment equipment , int flags ) {
386- return "spawner entry equipment with "
387- + Classes .toString (equipment .getLootTable ())
388- + " and "
389- + Classes .toString (equipment .getDropChances ().toArray (), true );
390- }
391-
392- @ Override
393- public String toVariableNameString (SpawnerEntryEquipment equipment ) {
394- return "spawner entry equipment:" + equipment .hashCode ();
395- }
396- })
397- );
398-
399- Classes .registerClass (new ClassInfo <>(DropChance .class , "equipmentdropchance" )
400- .user ("(spawner entry ?)?equipment ?drop ?chances?" )
401- .name ("Spawner Entry Equipment Drop Chance" )
402- .description ("Represents a spawner entry's equipment drop chance. This is used to specify the drop chance "
403- + "for an equipment slot. You can find more information about this in the Minecraft wiki for "
404- + "<a href='https://minecraft.wiki/w/Monster_Spawner'>spawners</a>" )
405- .since ("INSERT VERSION" )
406- .requiredPlugins ("MC 1.21+" )
407- .parser (new Parser <>() {
408- @ Override
409- public boolean canParse (ParseContext context ) {
410- return false ;
411- }
412-
413- @ Override
414- public String toString (DropChance equipment , int flags ) {
415- return "equipment drop with chance "
416- + equipment .getDropChance ()
417- + " for "
418- + Classes .toString (equipment .getEquipmentSlot ());
419- }
420-
421- @ Override
422- public String toVariableNameString (DropChance equipment ) {
423- return "equipment drop:" + equipment .getEquipmentSlot () + ',' + equipment .getDropChance ();
424- }
425- })
426- );
427-
428370 Classes .registerClass (new ClassInfo <>(SpawnRule .class , "spawnrule" )
429371 .user ("spawn ?rules?" )
430372 .name ("Spawn Rule" )
@@ -496,70 +438,6 @@ protected boolean canBeInstantiated() {
496438 }
497439 })
498440 );
499-
500- Classes .registerClass (new AnyInfo <>(AnySpawnerWeighted .class , "spawnerweighted" )
501- .user ("spawner ?weighteds?" )
502- .name ("Any Spawner Weighted Thing" )
503- .description ("Something related to spawners that has a weight." )
504- .usage ("" )
505- .examples ("the weight of {_spawner entry}" , "the weight of {_weighted loot table}" )
506- .since ("INSERT VERSION" )
507- .defaultExpression (new EventValueExpression <>(AnySpawnerWeighted .class ))
508- );
509-
510- //todo: remove after merge of equippable pr
511- Classes .registerClass (new EnumClassInfo <>(EquipmentSlot .class , "equipmentslot" , "equipment slots" )
512- .user ("equipment slot" )
513- .name ("Equipment Slot" )
514- .description ("Represents an equipment slot." )
515- .since ("INSERT VERSION" )
516- );
517-
518- ADDON = addon ;
519- SYNTAX_REGISTRY = addon .syntaxRegistry ();
520- try {
521- Skript .getAddonInstance ().loadClasses (
522- "me.burb.skriptspawner.spawner" ,
523- "elements" );
524- } catch (IOException e ) {
525- throw new RuntimeException (e );
526- }
527-
528- Converters .registerConverter (SpawnerEntry .class , AnySpawnerWeighted .class ,
529- entry -> new AnySpawnerWeighted () {
530- @ Override
531- public @ NotNull Integer spawnerWeight () {
532- return entry .getSpawnWeight ();
533- }
534-
535- @ Override
536- public boolean supportsSpawnerWeightChange () {
537- return true ;
538- }
539-
540- @ Override
541- public void setSpawnerWeight (Integer weight ) throws UnsupportedOperationException {
542- if (weight > 0 )
543- entry .setSpawnWeight (weight );
544- }
545- }, Converter .NO_RIGHT_CHAINING );
546-
547- EventValues .registerEventValue (SpawnerSpawnEvent .class , Block .class , event -> {
548- if (event .getSpawner () != null )
549- return event .getSpawner ().getBlock ();
550- return null ;
551- });
552- EventValues .registerEventValue (SpawnerSpawnEvent .class , Location .class , SpawnerSpawnEvent ::getLocation );
553- EventValues .registerEventValue (SpawnerSpawnEvent .class , Entity .class , SpawnerSpawnEvent ::getEntity );
554-
555- EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Block .class , event -> event .getTrialSpawner ().getBlock ());
556- EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Location .class , TrialSpawnerSpawnEvent ::getLocation );
557- EventValues .registerEventValue (TrialSpawnerSpawnEvent .class , Entity .class , TrialSpawnerSpawnEvent ::getEntity );
558-
559- if (Skript .classExists ("com.destroystokyo.paper.event.entity.PreSpawnerSpawnEvent" )) {
560- EventValues .registerEventValue (PreSpawnerSpawnEvent .class , EntityData .class ,
561- event -> EntityUtils .toSkriptEntityData (event .getType ()));
562- }
563441 }
564442
565443}
0 commit comments