Slight refactor to clean up resource loading from plugins

This commit is contained in:
Deukhoofd 2025-05-16 14:22:14 +02:00
parent fdfca99e71
commit a40d85fdae
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
19 changed files with 94 additions and 108216 deletions

View File

@ -77,17 +77,24 @@ public static class LibraryLoader
// ReSharper disable once SuspiciousTypeConversion.Global
var mutators = plugins.OfType<IPluginDataMutator>().ToList();
var typesLibrary = TypeDataLoader.LoadTypeLibrary(typesResult);
var naturesLibrary = NatureDataLoader.LoadNatureLibrary(naturesResult);
var movesLibrary = MoveDataLoader.LoadMoves(movesResult, typesLibrary,
using var typesStream = typesResult.Open();
var typesLibrary = TypeDataLoader.LoadTypeLibrary(typesStream);
using var naturesStream = naturesResult.Open();
var naturesLibrary = NatureDataLoader.LoadNatureLibrary(naturesStream);
using var movesStream = movesResult.Open();
var movesLibrary = MoveDataLoader.LoadMoves(movesStream, typesLibrary,
wrapper => mutators.ForEach(x => x.MutateMoveData(wrapper)));
var itemsLibrary = ItemDataLoader.LoadItems(itemsResult,
using var itemsStream = itemsResult.Open();
var itemsLibrary = ItemDataLoader.LoadItems(itemsStream,
items => mutators.ForEach(x => x.MutateItemData(items)));
var abilitiesLibrary = AbilityDataLoader.LoadAbilities(abilitiesResult,
using var abilitiesStream = abilitiesResult.Open();
var abilitiesLibrary = AbilityDataLoader.LoadAbilities(abilitiesStream,
abilities => mutators.ForEach(x => x.MutateAbilityData(abilities)));
var growthRatesLibrary = GrowthRateDataLoader.LoadGrowthRates(growthRatesResult,
using var growthRatesStream = growthRatesResult.Open();
var growthRatesLibrary = GrowthRateDataLoader.LoadGrowthRates(growthRatesStream,
growthRates => mutators.ForEach(x => x.MutateGrowthRateData(growthRates)));
var speciesLibrary = SpeciesDataLoader.LoadSpecies(speciesResult, typesLibrary,
using var speciesStream = speciesResult.Open();
var speciesLibrary = SpeciesDataLoader.LoadSpecies(speciesStream, typesLibrary,
map => mutators.ForEach(x => x.MutateSpeciesData(map)));
return new StaticLibraryImpl(settings, speciesLibrary, movesLibrary, abilitiesLibrary, typesLibrary,

View File

@ -1,3 +1,4 @@
using System.Reflection;
using PkmnLib.Static.Libraries;
namespace PkmnLib.Dynamic.ScriptHandling.Registry;
@ -13,9 +14,10 @@ public interface IResourceProvider
LibrarySettings? Settings { get; }
/// <summary>
/// Gets the resource for the given type. This is used to load resources from the plugin.
/// Gets the resource for the given type. This is used to load resources from the plugin. Returns null if the
/// plugin does not provide the resource.
/// </summary>
Stream? GetResource(ResourceFileType request);
IResourceResult? GetResource(ResourceFileType request);
}
/// <summary>
@ -63,3 +65,35 @@ public enum ResourceFileType
/// </summary>
Species,
}
/// <summary>
/// Interface for a resource result. This is used to load resources from the plugin.
/// </summary>
public interface IResourceResult
{
/// <summary>
/// Opens the resource and returns a stream. This is used to load the resource from the plugin.
/// </summary>
Stream Open();
}
/// <summary>
/// Class for a resource result that is loaded from an embedded resource in an assembly.
/// </summary>
public class AssemblyResourceResult : IResourceResult
{
private readonly string _resourceName;
private readonly Assembly _assembly;
/// <inheritdoc cref="AssemblyResourceResult" />
public AssemblyResourceResult(string resourceName, Assembly assembly)
{
_resourceName = resourceName;
_assembly = assembly;
}
/// <inheritdoc />
public Stream Open() => _assembly.GetManifestResourceStream(_resourceName) ??
throw new InvalidOperationException(
$"Resource '{_resourceName}' not found in assembly '{_assembly.FullName}'.");
}

View File

@ -1,327 +0,0 @@
{
"adaptability": {
"effect": "IncreasedStab"
},
"aerilate": {
"effect": "ChangeMoveType",
"parameters": {
"from": "normal",
"to": "flying"
}
},
"aftermath": {
"effect": "Aftermath"
},
"air_lock": {
"effect": "SuppressWeather"
},
"analytic": {
"effect": "Analytic"
},
"anger_point": {
"effect": "AngerPoint"
},
"anticipation": {
"effect": "Anticipation"
},
"arena_trap": {
"effect": "ArenaTrap"
},
"aroma_veil": {
"effect": "AromaVeil"
},
"aura_break": {
"effect": "AuraBreal"
},
"bad_dreams": {
"effect": "BadDreams"
},
"battery": {
"effect": "Battery"
},
"battle_armor": {
"effect": "PreventCritical"
},
"battle_bond": {
"effect": "BattleBond",
"flags": ["cant_be_changed"]
},
"beast_boost": {
"effect": "BeastBoost"
},
"berserk": {
"effect": "Berserk"
},
"big_pecks": {
"effect": "PreventDefLowering"
},
"blaze": {
"effect": "PowerUpType",
"parameters": {
"type": "fire"
}
},
"bulletproof": {
"effect": "Bulletproof"
},
"cheek_pouch": {
"effect": "CheekPouch"
},
"chlorophyll": {
"effect": "DoubleSpeedInWeather",
"parameters": {
"weather": "HarshSunlight"
}
},
"clear_body": {
"effect": "PreventStatLowering"
},
"cloud_nine": {
"effect": "SuppressWeather"
},
"color_change": {
"effect": "ColorChange"
},
"comatose": {
"flags": ["cant_be_changed"]
},
"competitive": {},
"compound_eyes": {},
"contrary": {},
"corrosion": {},
"cursed_body": {},
"cute_charm": {},
"damp": {},
"dancer": {},
"dark_aura": {},
"dazzling": {},
"defeatist": {},
"defiant": {},
"delta_stream": {},
"desolate_land": {},
"disguise": {
"flags": ["cant_be_changed", "cant_be_copied"]
},
"download": {},
"drizzle": {},
"drought": {},
"dry_skin": {},
"early_bird": {},
"effect_spore": {},
"electric_surge": {},
"emergency_exit": {},
"fairy_aura": {},
"filter": {},
"flame_body": {},
"flare_boost": {},
"flash_fire": {},
"flower_gift": {
"flags": ["cant_be_copied"]
},
"flower_veil": {},
"fluffy": {},
"forecast": {
"flags": ["cant_be_copied"]
},
"forewarn": {},
"friend_guard": {},
"frisk": {},
"full_metal_body": {},
"fur_coat": {},
"gale_wings": {},
"galvanize": {},
"gluttony": {},
"gooey": {},
"grass_pelt": {},
"grassy_surge": {},
"guts": {},
"harvest": {},
"healer": {},
"heatproof": {},
"heavy_metal": {},
"honey_gather": {},
"huge_power": {},
"hustle": {},
"hydration": {},
"hyper_cutter": {},
"ice_body": {},
"illuminate": {},
"illusion": {
"flags": ["cant_be_copied"]
},
"immunity": {},
"imposter": {
"flags": ["cant_be_copied"]
},
"infiltrator": {},
"innards_out": {},
"inner_focus": {},
"insomnia": {},
"intimidate": {},
"iron_barbs": {},
"iron_fist": {},
"justified": {},
"keen_eye": {},
"klutz": {},
"leaf_guard": {},
"levitate": {},
"light_metal": {},
"lightning_rod": {},
"limber": {},
"liquid_ooze": {},
"liquid_voice": {},
"long_reach": {},
"magic_bounce": {},
"magic_guard": {},
"magician": {},
"magma_armor": {},
"magnet_pull": {},
"marvel_scale": {},
"mega_launcher": {},
"merciless": {},
"minus": {},
"misty_surge": {},
"mold_breaker": {},
"moody": {},
"motor_drive": {},
"moxie": {},
"multiscale": {},
"multitype": {
"flags": ["cant_be_changed"]
},
"mummy": {},
"natural_cure": {},
"no_guard": {},
"normalize": {},
"oblivious": {},
"overcoat": {},
"overgrow": {},
"own_tempo": {},
"parental_bond": {},
"pickpocket": {},
"pickup": {},
"pixilate": {},
"plus": {},
"poison_heal": {},
"poison_point": {},
"poison_touch": {},
"power_construct": {
"flags": ["cant_be_changed", "cant_be_copied"]
},
"power_of_alchemy": {
"flags": ["cant_be_copied"]
},
"prankster": {},
"pressure": {},
"primordial_sea": {},
"prism_armor": {},
"protean": {},
"psychic_surge": {},
"pure_power": {},
"queenly_majesty": {},
"quick_feet": {},
"rain_dish": {},
"rattled": {},
"receiver": {
"flags": ["cant_be_copied"]
},
"reckless": {},
"refrigerate": {},
"regenerator": {},
"rivalry": {},
"rks_system": {
"flags": ["cant_be_changed"]
},
"rock_head": {},
"rough_skin": {},
"run_away": {},
"sand_force": {},
"sand_rush": {},
"sand_stream": {},
"sand_veil": {},
"sap_sipper": {},
"schooling": {
"flags": ["cant_be_changed"]
},
"scrappy": {},
"serene_grace": {},
"shadow_shield": {},
"shadow_tag": {},
"shed_skin": {},
"sheer_force": {},
"shell_armor": {},
"shield_dust": {},
"shields_down": {
"flags": ["cant_be_changed"]
},
"simple": {},
"skill_link": {},
"slow_start": {},
"slush_rush": {},
"sniper": {},
"snow_cloak": {},
"snow_warning": {},
"solar_power": {},
"solid_rock": {},
"soul_heart": {},
"soundproof": {},
"speed_boost": {},
"stakeout": {},
"stall": {},
"stamina": {},
"stance_change": {
"flags": ["cant_be_changed"]
},
"static": {},
"steadfast": {},
"steelworker": {},
"stench": {},
"sticky_hold": {},
"storm_drain": {},
"strong_jaw": {},
"sturdy": {},
"suction_cups": {},
"super_luck": {},
"surge_surfer": {},
"swarm": {},
"sweet_veil": {},
"swift_swim": {},
"symbiosis": {},
"synchronize": {},
"tangled_feet": {},
"tangling_hair": {},
"technician": {},
"telepathy": {},
"teravolt": {},
"thick_fat": {},
"tinted_lens": {},
"torrent": {},
"tough_claws": {},
"toxic_boost": {},
"trace": {
"flags": ["cant_be_copied"]
},
"triage": {},
"truant": {
"flags": ["cant_be_changed"]
},
"turboblaze": {},
"unaware": {},
"unburden": {},
"unnerve": {},
"victory_star": {},
"vital_spirit": {},
"volt_absorb": {},
"water_absorb": {},
"water_bubble": {},
"water_compaction": {},
"water_veil": {},
"weak_armor": {},
"white_smoke": {},
"wimp_out": {},
"wonder_guard": {},
"wonder_skin": {},
"zen_mode": {
"flags": ["cant_be_copied"]
}
}

View File

@ -1,614 +0,0 @@
{
"Erratic": [
0,
15,
52,
122,
237,
406,
637,
942,
1326,
1800,
2369,
3041,
3822,
4719,
5737,
6881,
8155,
9564,
11111,
12800,
14632,
16610,
18737,
21012,
23437,
26012,
28737,
31610,
34632,
37800,
41111,
44564,
48155,
51881,
55737,
59719,
63822,
68041,
72369,
76800,
81326,
85942,
90637,
95406,
100237,
105122,
110052,
115015,
120001,
125000,
131324,
137795,
144410,
151165,
158056,
165079,
172229,
179503,
186894,
194400,
202013,
209728,
217540,
225443,
233431,
241496,
249633,
257834,
267406,
276458,
286328,
296358,
305767,
316074,
326531,
336255,
346965,
357812,
367807,
378880,
390077,
400293,
411686,
423190,
433572,
445239,
457001,
467489,
479378,
491346,
501878,
513934,
526049,
536557,
548720,
560922,
571333,
583539,
591882,
600000
],
"Fast": [
0,
6,
21,
51,
100,
172,
274,
409,
583,
800,
1064,
1382,
1757,
2195,
2700,
3276,
3930,
4665,
5487,
6400,
7408,
8518,
9733,
11059,
12500,
14060,
15746,
17561,
19511,
21600,
23832,
26214,
28749,
31443,
34300,
37324,
40522,
43897,
47455,
51200,
55136,
59270,
63605,
68147,
72900,
77868,
83058,
88473,
94119,
100000,
106120,
112486,
119101,
125971,
133100,
140492,
148154,
156089,
164303,
172800,
181584,
190662,
200037,
209715,
219700,
229996,
240610,
251545,
262807,
274400,
286328,
298598,
311213,
324179,
337500,
351180,
365226,
379641,
394431,
409600,
425152,
441094,
457429,
474163,
491300,
508844,
526802,
545177,
563975,
583200,
602856,
622950,
643485,
664467,
685900,
707788,
730138,
752953,
776239,
800000
],
"MediumFast": [
0,
8,
27,
64,
125,
216,
343,
512,
729,
1000,
1331,
1728,
2197,
2744,
3375,
4096,
4913,
5832,
6859,
8000,
9261,
10648,
12167,
13824,
15625,
17576,
19683,
21952,
24389,
27000,
29791,
32768,
35937,
39304,
42875,
46656,
50653,
54872,
59319,
64000,
68921,
74088,
79507,
85184,
91125,
97336,
103823,
110592,
117649,
125000,
132651,
140608,
148877,
157464,
166375,
175616,
185193,
195112,
205379,
216000,
226981,
238328,
250047,
262144,
274625,
287496,
300763,
314432,
328509,
343000,
357911,
373248,
389017,
405224,
421875,
438976,
456533,
474552,
493039,
512000,
531441,
551368,
571787,
592704,
614125,
636056,
658503,
681472,
704969,
729000,
753571,
778688,
804357,
830584,
857375,
884736,
912673,
941192,
970299,
1000000
],
"MediumSlow": [
0,
9,
57,
96,
135,
179,
236,
314,
419,
560,
742,
973,
1261,
1612,
2035,
2535,
3120,
3798,
4575,
5460,
6458,
7577,
8825,
10208,
11735,
13411,
15244,
17242,
19411,
21760,
24294,
27021,
29949,
33084,
36435,
40007,
43808,
47846,
52127,
56660,
61450,
66505,
71833,
77440,
83335,
89523,
96012,
102810,
109923,
117360,
125126,
133229,
141677,
150476,
159635,
169159,
179056,
189334,
199999,
211060,
222522,
234393,
246681,
259392,
272535,
286115,
300140,
314618,
329555,
344960,
360838,
377197,
394045,
411388,
429235,
447591,
466464,
485862,
505791,
526260,
547274,
568841,
590969,
613664,
636935,
660787,
685228,
710266,
735907,
762160,
789030,
816525,
844653,
873420,
902835,
932903,
963632,
995030,
1027103,
1059860
],
"Slow": [
0,
10,
33,
80,
156,
270,
428,
640,
911,
1250,
1663,
2160,
2746,
3430,
4218,
5120,
6141,
7290,
8573,
10000,
11576,
13310,
15208,
17280,
19531,
21970,
24603,
27440,
30486,
33750,
37238,
40960,
44921,
49130,
53593,
58320,
63316,
68590,
74148,
80000,
86151,
92610,
99383,
106480,
113906,
121670,
129778,
138240,
147061,
156250,
165813,
175760,
186096,
196830,
207968,
219520,
231491,
243890,
256723,
270000,
283726,
297910,
312558,
327680,
343281,
359370,
375953,
393040,
410636,
428750,
447388,
466560,
486271,
506530,
527343,
548720,
570666,
593190,
616298,
640000,
664301,
689210,
714733,
740880,
767656,
795070,
823128,
851840,
881211,
911250,
941963,
973360,
1005446,
1038230,
1071718,
1105920,
1140841,
1176490,
1212873,
1250000
],
"Fluctuating": [
0,
4,
13,
32,
65,
112,
178,
276,
393,
540,
745,
967,
1230,
1591,
1957,
2457,
3046,
3732,
4526,
5440,
6482,
7666,
9003,
10506,
12187,
14060,
16140,
18439,
20974,
23760,
26811,
30146,
33780,
37731,
42017,
46656,
50653,
55969,
60505,
66560,
71677,
78533,
84277,
91998,
98415,
107069,
114205,
123863,
131766,
142500,
151222,
163105,
172697,
185807,
196322,
210739,
222231,
238036,
250562,
267840,
281456,
300293,
315059,
335544,
351520,
373744,
390991,
415050,
433631,
459620,
479600,
507617,
529063,
559209,
582187,
614566,
639146,
673863,
700115,
737280,
765275,
804997,
834809,
877201,
908905,
954084,
987754,
1035837,
1071552,
1122660,
1160499,
1214753,
1254796,
1312322,
1354652,
1415577,
1460276,
1524731,
1571884,
1640000
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
Name|Increased|Decreased
Hardy||
Lonely|Attack|Defense
Brave|Attack|Speed
Adamant|Attack|SpecialAttack
Naughty|Attack|SpecialDefense
Bold|Defense|Attack
Docile||
Relaxed|Defense|Speed
Impish|Defense|SpecialAttack
Lax|Defense|SpecialDefense
Timid|Speed|Attack
Hasty|Speed|Defense
Serious||
Jolly|Speed|SpecialAttack
Naive|Speed|SpecialDefense
Modest|SpecialAttack|Attack
Mild|SpecialAttack|Defense
Quiet|SpecialAttack|Speed
Bashful||
Rash|SpecialAttack|SpecialDefense
Calm|SpecialDefense|Attack
Gentle|SpecialDefense|Defense
Sassy|SpecialDefense|Speed
Careful|SpecialDefense|SpecialAttack
Quirky||
1 Name Increased Decreased
2 Hardy
3 Lonely Attack Defense
4 Brave Attack Speed
5 Adamant Attack SpecialAttack
6 Naughty Attack SpecialDefense
7 Bold Defense Attack
8 Docile
9 Relaxed Defense Speed
10 Impish Defense SpecialAttack
11 Lax Defense SpecialDefense
12 Timid Speed Attack
13 Hasty Speed Defense
14 Serious
15 Jolly Speed SpecialAttack
16 Naive Speed SpecialDefense
17 Modest SpecialAttack Attack
18 Mild SpecialAttack Defense
19 Quiet SpecialAttack Speed
20 Bashful
21 Rash SpecialAttack SpecialDefense
22 Calm SpecialDefense Attack
23 Gentle SpecialDefense Defense
24 Sassy SpecialDefense Speed
25 Careful SpecialDefense SpecialAttack
26 Quirky

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +0,0 @@
Types|Normal|Fighting|Flying|Poison|Ground|Rock|Bug|Ghost|Steel|Fire|Water|Grass|Electric|Psychic|Ice|Dragon|Dark|Fairy
Normal|1|1|1|1|1|0.5|1|0|0.5|1|1|1|1|1|1|1|1|1
Fighting|2|1|0.5|0.5|1|2|0.5|0|2|1|1|1|1|0.5|2|1|2|0.5
Flying|1|2|1|1|1|0.5|2|1|0.5|1|1|2|0.5|1|1|1|1|1
Poison|1|1|1|0.5|0.5|0.5|1|0.5|0|1|1|2|1|1|1|1|1|2
Ground|1|1|0|2|1|2|0.5|1|2|2|1|0.5|2|1|1|1|1|1
Rock|1|0.5|2|1|0.5|1|2|1|0.5|2|1|1|1|1|2|1|1|1
Bug|1|0.5|0.5|0.5|1|1|1|0.5|0.5|0.5|1|2|1|2|1|1|2|0.5
Ghost|0|1|1|1|1|1|1|2|1|1|1|1|1|2|1|1|0.5|1
Steel|1|1|1|1|1|2|1|1|0.5|0.5|0.5|1|0.5|1|2|1|1|2
Fire|1|1|1|1|1|0.5|2|1|2|0.5|0.5|2|1|1|2|0.5|1|1
Water|1|1|1|1|2|2|1|1|1|2|0.5|0.5|1|1|1|0.5|1|1
Grass|1|1|0.5|0.5|2|2|0.5|1|0.5|0.5|2|0.5|1|1|1|0.5|1|1
Electric|1|1|2|1|0|1|1|1|1|1|2|0.5|0.5|1|1|0.5|1|1
Psychic|1|2|1|2|1|1|1|1|0.5|1|1|1|1|0.5|1|1|0|1
Ice|1|1|2|1|2|1|1|1|0.5|0.5|0.5|2|1|1|0.5|2|1|1
Dragon|1|1|1|1|1|1|1|1|0.5|1|1|1|1|1|1|2|1|0
Dark|1|0.5|1|1|1|1|1|2|1|1|1|1|1|2|1|1|0.5|0.5
Fairy|1|2|1|0.5|1|1|1|1|0.5|0.5|1|1|1|1|1|2|2|1
1 Types Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Fire Water Grass Electric Psychic Ice Dragon Dark Fairy
2 Normal 1 1 1 1 1 0.5 1 0 0.5 1 1 1 1 1 1 1 1 1
3 Fighting 2 1 0.5 0.5 1 2 0.5 0 2 1 1 1 1 0.5 2 1 2 0.5
4 Flying 1 2 1 1 1 0.5 2 1 0.5 1 1 2 0.5 1 1 1 1 1
5 Poison 1 1 1 0.5 0.5 0.5 1 0.5 0 1 1 2 1 1 1 1 1 2
6 Ground 1 1 0 2 1 2 0.5 1 2 2 1 0.5 2 1 1 1 1 1
7 Rock 1 0.5 2 1 0.5 1 2 1 0.5 2 1 1 1 1 2 1 1 1
8 Bug 1 0.5 0.5 0.5 1 1 1 0.5 0.5 0.5 1 2 1 2 1 1 2 0.5
9 Ghost 0 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 0.5 1
10 Steel 1 1 1 1 1 2 1 1 0.5 0.5 0.5 1 0.5 1 2 1 1 2
11 Fire 1 1 1 1 1 0.5 2 1 2 0.5 0.5 2 1 1 2 0.5 1 1
12 Water 1 1 1 1 2 2 1 1 1 2 0.5 0.5 1 1 1 0.5 1 1
13 Grass 1 1 0.5 0.5 2 2 0.5 1 0.5 0.5 2 0.5 1 1 1 0.5 1 1
14 Electric 1 1 2 1 0 1 1 1 1 1 2 0.5 0.5 1 1 0.5 1 1
15 Psychic 1 2 1 2 1 1 1 1 0.5 1 1 1 1 0.5 1 1 0 1
16 Ice 1 1 2 1 2 1 1 1 0.5 0.5 0.5 2 1 1 0.5 2 1 1
17 Dragon 1 1 1 1 1 1 1 1 0.5 1 1 1 1 1 1 2 1 0
18 Dark 1 0.5 1 1 1 1 1 2 1 1 1 1 1 2 1 1 0.5 0.5
19 Fairy 1 2 1 0.5 1 1 1 1 0.5 0.5 1 1 1 1 1 2 2 1

View File

@ -40,7 +40,7 @@ public class MoveDataTests
catch (Exception e)
{
// Helper method to find the line number of the effect in the JSON file
var file = Path.GetFullPath("../../../../PkmnLib.Tests/Data/Moves.jsonc");
var file = Path.GetFullPath("../../../../Plugins/PkmnLib.Plugin.Gen7/Data/Moves.jsonc");
var json = await File.ReadAllLinesAsync(file);
var moveLineNumber = json.Select((line, index) => new { line, index })
.FirstOrDefault(x => x.line.Contains($"\"name\": \"{test.Move.Name}\""))?.index + 1;

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Tests.Dataloader;
@ -7,7 +8,9 @@ public class AbilityDataLoaderTests
[Test]
public async Task TestPrimaryAbilityFile()
{
await using var stream = File.OpenRead("Data/Abilities.json");
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Abilities)!;
await using var stream = result.Open();
var library = AbilityDataLoader.LoadAbilities(stream);
await Assert.That(library).IsNotNull();
}

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Tests.Dataloader;
@ -7,7 +8,9 @@ public class GrowthRateDataLoaderTests
[Test]
public async Task TestPrimaryGrowthRateFile()
{
await using var file = File.Open("Data/GrowthRates.json", FileMode.Open, FileAccess.Read, FileShare.Read);
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.GrowthRates)!;
await using var file = result.Open();
var library = GrowthRateDataLoader.LoadGrowthRates(file);
await Assert.That(library).IsNotNull();
}

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Tests.Dataloader;
@ -7,7 +8,9 @@ public class ItemDataLoaderTests
[Test]
public async Task TestPrimaryItemFile()
{
await using var stream = File.OpenRead("Data/Items.json");
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Items)!;
await using var stream = result.Open();
var library = ItemDataLoader.LoadItems(stream);
await Assert.That(library).IsNotNull();
}

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Libraries;
namespace PkmnLib.Tests.Dataloader;
@ -8,7 +9,9 @@ public class MoveDataLoaderTests
[Test]
public async Task TestPrimaryMoveFile()
{
await using var stream = File.OpenRead("Data/Moves.jsonc");
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Moves)!;
await using var stream = result.Open();
var typeLibrary = new TypeLibrary();
typeLibrary.RegisterType("Normal");
typeLibrary.RegisterType("Fire");

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Tests.Dataloader;
@ -7,7 +8,9 @@ public class NatureDataloaderTests
[Test]
public async Task TestPrimaryNatureFile()
{
await using var file = File.Open("Data/Natures.csv", FileMode.Open, FileAccess.Read, FileShare.Read);
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Natures)!;
await using var file = result.Open();
var library = NatureDataLoader.LoadNatureLibrary(file);
await Assert.That(library).IsNotNull();
}

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
using PkmnLib.Static.Libraries;
namespace PkmnLib.Tests.Dataloader;
@ -8,7 +9,9 @@ public class SpeciesDataloaderTests
[Test]
public async Task TestPrimarySpeciesFile()
{
await using var file = File.Open("Data/Pokemon.json", FileMode.Open, FileAccess.Read, FileShare.Read);
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Species)!;
await using var file = result.Open();
var typeLibrary = new TypeLibrary();
typeLibrary.RegisterType("Normal");
typeLibrary.RegisterType("Fire");

View File

@ -1,4 +1,5 @@
using PkmnLib.Dynamic.Libraries.DataLoaders;
using PkmnLib.Dynamic.ScriptHandling.Registry;
namespace PkmnLib.Tests.Dataloader;
@ -7,7 +8,9 @@ public class TypeDataloaderTests
[Test]
public async Task TestPrimaryTypesFile()
{
await using var file = File.Open("Data/Types.csv", FileMode.Open, FileAccess.Read, FileShare.Read);
IResourceProvider plugin = new Plugin.Gen7.Gen7Plugin();
var result = plugin.GetResource(ResourceFileType.Types)!;
await using var file = result.Open();
var library = TypeDataLoader.LoadTypeLibrary(file);
await Assert.That(library).IsNotNull();

View File

@ -33,10 +33,6 @@
<ProjectReference Include="..\Plugins\PkmnLib.Plugin.Gen7\PkmnLib.Plugin.Gen7.csproj"/>
</ItemGroup>
<ItemGroup>
<Folder Include="Data\"/>
</ItemGroup>
<ItemGroup>
<None Update="Data\*">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>

View File

@ -1,5 +1,4 @@
using System;
using System.IO;
using PkmnLib.Plugin.Gen7.Libraries.Battling;
using PkmnLib.Static.Libraries;
@ -49,24 +48,24 @@ public class Gen7Plugin : Dynamic.ScriptHandling.Registry.Plugin, IResourceProvi
};
/// <inheritdoc />
Stream? IResourceProvider.GetResource(ResourceFileType request)
IResourceResult IResourceProvider.GetResource(ResourceFileType request)
{
return request switch
{
ResourceFileType.Types => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Types.csv"),
ResourceFileType.Natures => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Natures.csv"),
ResourceFileType.Moves => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Moves.jsonc"),
ResourceFileType.Items => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Items.json"),
ResourceFileType.Abilities => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Abilities.json"),
ResourceFileType.GrowthRates => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.GrowthRates.json"),
ResourceFileType.Species => typeof(Gen7Plugin).Assembly.GetManifestResourceStream(
"PkmnLib.Plugin.Gen7.Data.Pokemon.json"),
ResourceFileType.Types => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Types.csv",
typeof(Gen7Plugin).Assembly),
ResourceFileType.Natures => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Natures.csv",
typeof(Gen7Plugin).Assembly),
ResourceFileType.Moves => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Moves.jsonc",
typeof(Gen7Plugin).Assembly),
ResourceFileType.Items => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Items.json",
typeof(Gen7Plugin).Assembly),
ResourceFileType.Abilities => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Abilities.json",
typeof(Gen7Plugin).Assembly),
ResourceFileType.GrowthRates => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.GrowthRates.json",
typeof(Gen7Plugin).Assembly),
ResourceFileType.Species => new AssemblyResourceResult("PkmnLib.Plugin.Gen7.Data.Pokemon.json",
typeof(Gen7Plugin).Assembly),
_ => throw new ArgumentOutOfRangeException(nameof(request), request, null),
};
}