Jongyeol(비교)

r15 vs r16
... ...
295 295
플레이 할 떄 사용하고 있는 입력 오프셋을 전체, 맵별로 기록한다.
296 296
기록된 오프셋은 버튼을 눌러 바로 현재 오프셋으로 설정할 수 있다.
297 297
=== JALib ===
298
==== 개요 ====
299
Jongyeol Adofai Library에 약자로 얼불춤 모딩에 여러가지 편리한 기능을 제공하는 라이브러리형 모드다.
300
[[https://jalib.jongyeol.kr/modApplicator/JALib/betalatest|다운로드]][* 베타버전으로 정식버전은 아직 존재하지 않는다.]
301
JALib을 이용하여 모드를 만드려면 UMM모드 만들듯이 만들면 안되고 JALib을 사용한 모드들에 틀에 맞게 만들어야된다. [[https://github.com/Jongye0l/JALib/blob/main/Document/DevelopGuide.md|JALib 모드 개발 가이드]]
302
{{{#!syntax csharp
303
using JALib.Core;
304
305
namespace MyMod;
306
307
public class Main : JAMod {
308
protected override void OnSetup() {
309
Log("MyMod is Setuped.");
310
}
311
312
protected override void OnEnable() {
313
Log("MyMod is Enabled.");
314
}
315
316
protected override void OnDisable() {
317
Log("MyMod is Disabled.");
318
}
319
}
320
}}}
321
==== 기능 ====
322
라이브러리가 아직 배타버전이기 때문에 없어지거나 사용법이 바뀔 수 있다.
323
===== 모드 기본 기능 =====
324
* 자동 업데이트
325
* 업데이트 알림
326
* 모드 자동 적용
327
* 온라인 모드 정보 받아오기
328
* 모드 자동 다운로드
329
* 필요한 모드 자동 다운로드
330
===== 자동 예외 Catch =====
331
자동 예외 Catch는 Action, Task가 지원한다.
332
333
* Action 사용법
334
{{{#!syntax csharp
335
JAction action = new JAction(Main.Instance, () => {
336
throw new Exception("Action Catch");
337
});
338
action.Invoke();
339
}}}
340
* Task 사용법
341
{{{#!syntax csharp
342
JATask.Run(Main.Instance, () => {
343
throw new Exception("Task Catch");
344
});
345
}}}
346
===== 다양한 랜덤 =====
347
{{{#!syntax csharp
348
JARandom random = new JARandom();
349
random.NextInt();
350
random.NextLong();
351
}}}
352
===== 쉬운 TCP 통신 =====
353
{{{#!syntax csharp
354
JATcpClient client = new JATcpClient("localhost", 12345, new JAction(Main.Instance, () => {
355
client.ReadUTF();
356
});
357
}}}
358
SRV 사용하여 TCP연결
359
{{{#!syntax csharp
360
JATcpClient client = new JATcpClient("localhost", 12345, "MyService", false, new JAction(Main.Instance, () => {
361
client.ReadUTF();
362
});
363
}}}
364
===== 간단한 HTTP 통신 =====
365
{{{#!syntax csharp
366
HttpClient client = new HttpClient();
367
string result = await client.GetString("http://localhost:3000");
368
}}}
369
===== 간단한 리플렉션 =====
370
{{{#!syntax csharp
371
typeof(Main).Invoke("OnEnable", this);
372
this.Invoke("Log", "Hello World!");
373
}}}
374
===== 스트림 다양한 형식 읽기 =====
375
{{{#!syntax csharp
376
Stream stream;
377
stream.ReadInt();
378
stream.ReadLong();
379
stream.ReadUTF();
380
}}}
381
===== 메모리 형식에 파일 압축/압축해제 =====
382
{{{#!syntax csharp
383
byte[] data;
384
RawFile[] result = Zipper.Unzip(data);
385
}}}
386
===== 메인 스레드 =====
387
{{{#!syntax csharp
388
if(!MainThread.IsMainThread()) {
389
MainThread.Run(Main.Instance, () => {
390
Main.Instance.Log("Hello World!");
391
});
392
await MainThread.WaitForMainThread();
393
}
394
}}}
395
===== 언어별 글데이터 =====
396
언어별 글 데이터는 모드 폴더/localization/언어.json 에 넣은 데이터들을 불러옵니다.
397
{{{#!syntax csharp
398
string value = Main.Instance.Localization["Hi"];
399
}}}
400
===== 기능별 관리 =====
401
다음과 같이 기능을 생성할 수 있다.
402
{{{#!syntax csharp
403
public MyFeature : Feature {
404
public MyFeature() : base(Main.Instance, nameof(MyFeature)) {
405
}
406
407
protected override void OnEnable() {
408
Main.Instance.Log("MyFeature is Enabled");
409
}
410
411
protected override void OnDisable() {
412
Main.Instance.Log("MyFeature is Disabled");
413
}
414
}
415
}}}
416
기능 추가는 OnSetup 매서드에서 진행되며 다음과 같이 할 수 있다.
417
{{{#!syntax csharp
418
protected override void OnSetup() {
419
AddFeature(new MyFeature());
420
}
421
}}}
422
기능을 생성할 때 기능별 설정, 패치를 설정할 수 있다.
423
===== 패치 =====
424
JALib에선 기존 Harmony 기능보다 다양하게 패치를 진행할 수 있다.
425
일반 패치 매서드는 다음과 같이 만들 수 있다.
426
{{{#!syntax csharp
427
[JAPatch(typeof(Main), "OnEnable", PatchType.Prefix, false, TryingCatch = true)]
428
private static void OnEnablePrefix(Main __instance) {
429
__instance.Log("Enable Prefix");
430
}
431
}}}
432
PatchType에는 다음과 같은 종류가 있다.
433
* Prefix
434
* Postfix
435
* Transpiler
436
* Finalizer
437
* Replace
438
TryingCatch를 통해 이 패치 매서드에서 예외발생을 방지할 지 설정할 수 있다.
439
440
Reverse 패치 매서드는 다음과 같이 만들 수 있다.
441
{{{#!syntax csharp
442
[JAReversePatch(typeof(Main), "OnEnable", ReversePatchType.Original)]
443
private static void OnEnableReverse(Main __instance) => throw new NotImplementedException();
444
}}}
445
ReversePatchType은 Flag로 여러개를 한번에 선택할 수 있으며 다음과 같은 종류가 있다.
446
* Original = 0
447
* PrefixCombine = 1
448
* PostfixCombine = 2
449
* TranspilerCombine = 4
450
* FinalizerCombine = 8
451
* ReplaceCombine = 16
452
* OverrideCombine = 32
453
* AllCombine = PrefixCombine | PostfixCombine | TranspilerCombine | FinalizerCombine | ReplaceCombine | OverrideCombine
454
* DontUpdate = 0x40000000
455
456
Override 패치 매서드는 기본적으로 상속된 매서드에서 사용할 수 있다. Override 패치 매서드는 다음과 같이 만들 수 있다.
457
{{{#!syntax csharp
458
[JAOverridePatch]
459
public void OnEnable() {
460
Log("MyMod is Enabled but Patched!");
461
}
462
}}}
463
===== 설정 =====
464
다음과 같은 형식으로 설정을 만들 수 있다.
465
{{{#!syntax csharp
466
public MyModSetting : JASetting {
467
public string SettingField;
468
469
public MyModSetting(JAMod mod, JObject jsonObject) : base(mod, jsonObject) {
470
}
471
}
472
}}}
473
기본적으로 field를 이용해 저장한다.
474
475
다음과 같은 형식으로 field에 넣지않고 저장할수도 있다.
476
{{{#!syntax csharp
477
JASetting setting;
478
setting["MySetting"] = "This is my Setting";
479
}}}
480 480
==== JALib ModApplicator ====
481 481
=== JipperResourcePack ===
482 482
==== Jipper-Overlayer ====
... ...