Skip to content

RTUStudio/FieldZone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

16 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

FieldZone

๋‹ค๊ฐํ˜• ๊ธฐ๋ฐ˜ ์ง€์—ญ ๊ด€๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ. ์ž์œ  ํ˜•ํƒœ์˜ ๋‹ค๊ฐํ˜•, ์‚ฌ๊ฐํ˜•, ๋ ˆ์ด์บ์ŠคํŠธ ๋ชจ๋“œ๋กœ ์ง€์—ญ์„ ์ƒ์„ฑํ•˜๊ณ , ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ฒฝ๊ณ„ ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ ๋“ฑ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜์กด์„ฑ: RSFramework


์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ

๋ช…๋ น์–ด

๊ธฐ๋ณธ ๋ช…๋ น์–ด: /fieldzone (๋ณ„์นญ: /์ง€์—ญ)

๋ช…๋ น์–ด ์„ค๋ช…
/fieldzone wand ์ง€์—ญ ์„ ํƒ ๋„๊ตฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค
/fieldzone create <์ด๋ฆ„> ์„ ํƒํ•œ ์ ๋“ค๋กœ ์ง€์—ญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
/fieldzone remove <์ง€์—ญ> ์ง€์—ญ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค
/fieldzone teleport <์ง€์—ญ> ์ง€์—ญ์˜ ์ค‘์‹ฌ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค
/fieldzone list ๋ชจ๋“  ์ง€์—ญ ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
/fieldzone info <์ง€์—ญ> ์ง€์—ญ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (๋ฉด์ , ๋‘˜๋ ˆ, ์ค‘์‹ฌ, ํ”Œ๋ž˜๊ทธ ๋“ฑ)
/fieldzone clear ์„ ํƒํ•œ ๋ชจ๋“  ์ ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค
/fieldzone particle ํŒŒํ‹ฐํด ํ‘œ์‹œ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋•๋‹ˆ๋‹ค
/fieldzone flag set <์ง€์—ญ> <ํ”Œ๋ž˜๊ทธ> [true|false] ์ง€์—ญ์— ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ: true)
/fieldzone flag clear <์ง€์—ญ> <ํ”Œ๋ž˜๊ทธ> ์ง€์—ญ์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค (NONE ์ƒํƒœ๋กœ ๋ณต๊ท€)
/fieldzone flag list <์ง€์—ญ> ์ง€์—ญ์˜ ํ”Œ๋ž˜๊ทธ ๋ชฉ๋ก์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค
/fieldzone reload ์„ค์ •์„ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค

์„ ํƒ ๋ชจ๋“œ

๋„๊ตฌ๋ฅผ ๋“ค๊ณ  **์šฐํด๋ฆญ(Shift)**์œผ๋กœ ๋ชจ๋“œ๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“œ ์„ค๋ช…
์ž์œ  (FREE) ํด๋ฆญํ•œ ์œ„์น˜๋งˆ๋‹ค ์ ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กœ์šด ๋‹ค๊ฐํ˜• ์ƒ์„ฑ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ๊ฐํ˜• (SQUARE) ๋‘ ์ง€์ ์„ ์„ ํƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ๊ฐํ˜• ์˜์—ญ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๋ ˆ์ด์บ์ŠคํŠธ (RAYCAST) ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์˜ ๋ธ”๋ก์— ์ ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (์ตœ๋Œ€ ๊ฑฐ๋ฆฌ: ์„ค์ • ๊ฐ€๋Šฅ)

๋„๊ตฌ ์กฐ์ž‘:

  • ์ขŒํด๋ฆญ: ์  ์ถ”๊ฐ€ (์ž์œ /๋ ˆ์ด์บ์ŠคํŠธ ๋ชจ๋“œ) ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ/๋‘ ๋ฒˆ์งธ ์ง€์  ์„ ํƒ (์‚ฌ๊ฐํ˜• ๋ชจ๋“œ)
  • ์šฐํด๋ฆญ: ๋งˆ์ง€๋ง‰ ์  ์ œ๊ฑฐ
  • Shift + ์šฐํด๋ฆญ: ์„ ํƒ ๋ชจ๋“œ ์ „ํ™˜

ํ”Œ๋ž˜๊ทธ

ํ”Œ๋ž˜๊ทธ๋Š” namespace:key ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์žฅ ํ”Œ๋ž˜๊ทธ๋Š” fieldzone ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์™ธ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž์‹ ๋งŒ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ปค์Šคํ…€ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ ์„ค๋ช…
fieldzone:warning ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ง€์—ญ ๊ฒฝ๊ณ„์— ๊ฐ€๊นŒ์ด ๊ฐ€๋ฉด ๋นจ๊ฐ„์ƒ‰ ํŒŒํ‹ฐํด๋กœ ๊ฒฝ๊ณ„๋ฉด์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค

๋ช…๋ น์–ด์—์„œ fieldzone: ์ ‘๋‘์‚ฌ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: /fz flag set spawn warning)

์„ค์ • ํŒŒ์ผ

Global.yml โ€” ์ „์—ญ ์„ค์ •

ํ•ญ๋ชฉ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
clean-unregistered-flags false ์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋กœ๋“œ๋˜์—ˆ์ง€๋งŒ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ์ž๋™ ์‚ญ์ œํ• ์ง€ ์—ฌ๋ถ€
wand.item minecraft:blaze_rod ๋„๊ตฌ ์•„์ดํ…œ (CustomItems ํ˜•์‹)
wand.raycast-max-range 200 ๋ ˆ์ด์บ์ŠคํŠธ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ
wand.particle.interval 2 ํŒŒํ‹ฐํด ํ‘œ์‹œ ๊ฐ„๊ฒฉ (ํ‹ฑ)
wand.particle.density 0.05 ํŒŒํ‹ฐํด ๋ฐ€๋„ (๋‚ฎ์„์ˆ˜๋ก ์ด˜์ด˜)
wand.particle.wave-gap 10 ํŒŒ๋„ ๊ฐ„๊ฒฉ (๋ธ”๋ก)
wand.particle.wave-phase-step 0.1 ํŒŒ๋„ ์ƒ์Šน ๋‹จ๊ณ„
wand.particle.vertical-range 64 ์ˆ˜์ง ํ‘œ์‹œ ๋ฒ”์œ„ (ยฑ๋ธ”๋ก)

Flag.yml โ€” ๊ฒฝ๊ณ  ์‹œ์Šคํ…œ ์„ค์ •

ํ•ญ๋ชฉ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
warning.distance 2.75 ๊ฒฝ๊ณ  ๊ฐ์ง€ ๊ฑฐ๋ฆฌ (๋ธ”๋ก)
warning.particle.type OMINOUS_SPAWNING ๊ฒฝ๊ณ  ํŒŒํ‹ฐํด ์ข…๋ฅ˜
warning.particle.cooldown 29 ํŒŒํ‹ฐํด ์ฟจ๋‹ค์šด (ํ‹ฑ)
warning.particle.interval 0.25 ์ƒ˜ํ”Œ๋ง ๊ฐ„๊ฒฉ (๋ธ”๋ก)

PlaceholderAPI

Placeholder ์„ค๋ช…
%fieldzone_region% ํ˜„์žฌ ์œ„์น˜ํ•œ ์ง€์—ญ ์ด๋ฆ„ (์—†์œผ๋ฉด "๋นˆ ๊ณต๊ฐ„")
%fieldzone_count% ์ด ์ง€์—ญ ๊ฐœ์ˆ˜
%fieldzone_area_<์ด๋ฆ„>% ํŠน์ • ์ง€์—ญ์˜ ๋ฉด์ 
%fieldzone_points_<์ด๋ฆ„>% ํŠน์ • ์ง€์—ญ์˜ ์  ๊ฐœ์ˆ˜

๊ถŒํ•œ

๊ถŒํ•œ ๊ธฐ๋ณธ ์„ค๋ช…
fieldzone.wand OP ๋„๊ตฌ ๊ด€๋ จ ๋ช…๋ น์–ด ์‚ฌ์šฉ

๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ

์˜์กด์„ฑ ์ถ”๊ฐ€

repositories {
    maven {
        name = "RTUStudio"
        url = uri("https://repo.codemc.io/repository/rtustudio/")
    }
}

dependencies {
    compileOnly("kr.rtustudio:fieldzone:1.2.0")
}

plugin.yml์— ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

depend:
  - FieldZone

API ์‚ฌ์šฉ๋ฒ•

๋ชจ๋“  API๋Š” FieldZoneAPI ํด๋ž˜์Šค์˜ static ๋ฉ”์†Œ๋“œ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ง€์—ญ ์กฐํšŒ

// Location์œผ๋กœ ์ง€์—ญ ์กฐํšŒ
Region region = FieldZoneAPI.getRegion(player.getLocation());

// ์ด๋ฆ„์œผ๋กœ ์ง€์—ญ ์กฐํšŒ
Region region = FieldZoneAPI.getRegion("spawn");

// ๋ชจ๋“  ์ง€์—ญ ๋ชฉ๋ก
List<Region> regions = FieldZoneAPI.getRegions();

// ์ด ์ง€์—ญ ๊ฐœ์ˆ˜
int count = FieldZoneAPI.getRegionCount();

์œ„์น˜ ํŒ์ •

// ํ•ด๋‹น ์œ„์น˜๊ฐ€ ์ง€์—ญ ๋‚ด๋ถ€์ธ์ง€ ํ™•์ธ
boolean inside = FieldZoneAPI.isInRegion(player.getLocation());

// ํ•ด๋‹น ์œ„์น˜์— ํŠน์ • ํ”Œ๋ž˜๊ทธ์˜ ์ƒํƒœ ํ™•์ธ (TRUE / FALSE / NONE)
FlagState state = FieldZoneAPI.hasFlag(player.getLocation(), RegionFlag.WARNING);
boolean active = state.toBoolean();  // NONE๊ณผ FALSE๋Š” false

์ง€์—ญ ์ •๋ณด

// ๋ฉด์  (ใŽก)
double area = FieldZoneAPI.getArea("spawn");

// ๋‘˜๋ ˆ (๋ธ”๋ก)
double perimeter = FieldZoneAPI.getPerimeter("spawn");

// ์ค‘์‹ฌ์ 
Point center = FieldZoneAPI.getCenter("spawn");

Region ๊ฐ์ฒด

Region์€ record ํƒ€์ž…์ด๋ฉฐ ๋‹ค์Œ ํ•„๋“œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค:

ํ•„๋“œ ํƒ€์ž… ์„ค๋ช…
uuid() UUID ๊ณ ์œ  ์‹๋ณ„์ž
name() String ์ง€์—ญ ์ด๋ฆ„
pos() PolygonPos ๋‹ค๊ฐํ˜• ์œ„์น˜ ๋ฐ์ดํ„ฐ (์  ๋ชฉ๋ก, ์›”๋“œ, ๋ฉด์ , ๋‘˜๋ ˆ, ์ค‘์‹ฌ)
flags() Map<RegionFlag, Boolean> ์„ค์ •๋œ ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ’
Region region = FieldZoneAPI.getRegion("spawn");
if (region != null) {
    String name = region.name();
    String world = region.pos().world();
    double area = region.pos().area();

    // hasFlag()๋Š” FlagState๋ฅผ ๋ฐ˜ํ™˜ (TRUE / FALSE / NONE)
    FlagState state = region.hasFlag(RegionFlag.WARNING);
    if (state.toBoolean()) {
        // ๊ฒฝ๊ณ  ํ™œ์„ฑํ™”๋จ
    }
}

์ปค์Šคํ…€ ํ”Œ๋ž˜๊ทธ ์‹œ์Šคํ…œ

FieldZone์€ ์™ธ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ž์ฒด ํ”Œ๋ž˜๊ทธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”Œ๋ž˜๊ทธ ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. WorldGuard์ฒ˜๋Ÿผ, ์™ธ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž์‹ ๋งŒ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RegionFlag ๊ตฌ์กฐ

RegionFlag๋Š” namespace(์†Œ์œ ์ž)์™€ key(์ด๋ฆ„)๋กœ ๊ตฌ์„ฑ๋œ ๋ ˆ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค:

// FieldZone ๋‚ด์žฅ ํ”Œ๋ž˜๊ทธ
RegionFlag.WARNING           // โ†’ "fieldzone:warning"

// ์ปค์Šคํ…€ ํ”Œ๋ž˜๊ทธ ์ƒ์„ฑ (RegionFlag.create ์‚ฌ์šฉ ๊ถŒ์žฅ)
RegionFlag.create(this, "no_lightning")  // โ†’ "myplugin:no_lightning"
RegionFlag.create(this, "safe_zone")     // โ†’ "myplugin:safe_zone"

FlagState (3-์ƒํƒœ)

hasFlag()๋Š” boolean์ด ์•„๋‹Œ FlagState enum์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค:

์ƒํƒœ ์˜๋ฏธ toBoolean()
TRUE ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ true๋กœ ์„ค์ •๋จ true
FALSE ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ false๋กœ ์„ค์ •๋จ false
NONE ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์Œ (๋ฐ์ดํ„ฐ์— ์ €์žฅ๋˜์ง€ ์•Š์Œ) false

ํ”Œ๋ž˜๊ทธ ๋“ฑ๋ก ๋ฐ ํ•ด์ œ

// onEnable()์—์„œ ๋“ฑ๋ก
RegionFlag myFlag = RegionFlag.create(this, "no_lightning");
FieldZoneAPI.registerFlag(myFlag);

// onDisable()์—์„œ ํ•ด์ œ
FieldZoneAPI.unregisterFlag(myFlag);

๋“ฑ๋ก๋œ ํ”Œ๋ž˜๊ทธ๋Š” ์ž๋™์œผ๋กœ /fieldzone flag set ๋ช…๋ น์–ด์˜ ํƒญ ์ž๋™์™„์„ฑ์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ ํ™œ์šฉ

// ํŠน์ • ์œ„์น˜์— ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
FlagState state = FieldZoneAPI.hasFlag(location, myFlag);
if (state.toBoolean()) {
    // ํ”Œ๋ž˜๊ทธ๊ฐ€ true๋กœ ์„ค์ •๋œ ์ง€์—ญ ๋‚ด๋ถ€
}

// 3-์ƒํƒœ๋ฅผ ํ™œ์šฉํ•œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด
FlagState state = FieldZoneAPI.hasFlag(location, myFlag);
switch (state) {
    case TRUE  -> // ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋จ
    case FALSE -> // ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋จ
    case NONE  -> // ์„ค์ • ์—†์Œ, ๊ธฐ๋ณธ ๋™์ž‘ ์ ์šฉ
}

๋ฏธ๋“ฑ๋ก ํ”Œ๋ž˜๊ทธ ๋ณด์กด ์ •์ฑ…

clean-unregistered-flags ์„ค์ •์— ๋”ฐ๋ผ ๋ฏธ๋“ฑ๋ก ํ”Œ๋ž˜๊ทธ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค:

์ƒํ™ฉ false (๊ธฐ๋ณธ) true
์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฏธ๋กœ๋“œ ๋ณด์กด โœ… ๋ณด์กด โœ…
์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ๋จ + ํ”Œ๋ž˜๊ทธ ๋ฏธ๋“ฑ๋ก ๋ณด์กด โœ… ์‚ญ์ œ ๐Ÿ—‘๏ธ
์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ๋จ + ํ”Œ๋ž˜๊ทธ ๋“ฑ๋ก๋จ ์ •์ƒ ์‚ฌ์šฉ ์ •์ƒ ์‚ฌ์šฉ

์ด๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์—…๋ฐ์ดํŠธ๋กœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ™œ์„ฑ ์ƒํƒœ์ž„์—๋„ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


ํ™œ์šฉ ์˜ˆ์‹œ: ๋ฒˆ๊ฐœ ๋ฐฉ์ง€ ํ”Œ๋ž˜๊ทธ

๋‹ค์Œ์€ ๋ฒˆ๊ฐœ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ด FieldZone์˜ ํ”Œ๋ž˜๊ทธ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์ง€์—ญ์—์„œ ๋ฒˆ๊ฐœ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ์™„์ „ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค:

package kr.example.lightning;

import kr.rtustudio.fieldzone.FieldZoneAPI;
import kr.rtustudio.fieldzone.region.FlagState;
import kr.rtustudio.fieldzone.region.RegionFlag;
import org.bukkit.Location;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.weather.LightningStrikeEvent;
import org.bukkit.plugin.java.JavaPlugin;

/**
 * ๋ฒˆ๊ฐœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์˜ˆ์‹œ.
 * FieldZone์— 'no_lightning' ํ”Œ๋ž˜๊ทธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ ,
 * ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๊ฐ€ true๋กœ ์„ค์ •๋œ ์ง€์—ญ์—์„œ๋Š” ๋ฒˆ๊ฐœ๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
 */
public class LightningPlugin extends JavaPlugin implements Listener {

    // ํ”Œ๋ž˜๊ทธ๋ฅผ ํ•„๋“œ๋กœ ์„ ์–ธ
    private RegionFlag noLightning;

    @Override
    public void onEnable() {
        // RegionFlag.create(this, key) โ€” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„์ด ์ž๋™์œผ๋กœ namespace๊ฐ€ ๋จ
        noLightning = RegionFlag.create(this, "no_lightning");

        // FieldZone ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ปค์Šคํ…€ ํ”Œ๋ž˜๊ทธ ๋“ฑ๋ก
        // โ†’ /fz flag set <์ง€์—ญ> LightningPlugin:no_lightning ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
        // โ†’ /fz flag set <์ง€์—ญ> LightningPlugin:no_lightning false ๋กœ ๋ช…์‹œ์  ๋น„ํ™œ์„ฑํ™”๋„ ๊ฐ€๋Šฅ
        FieldZoneAPI.registerFlag(noLightning);

        getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("LightningPlugin enabled โ€” registered 'lightning:no_lightning' flag");
    }

    @Override
    public void onDisable() {
        // ํ”Œ๋Ÿฌ๊ทธ์ธ ์ข…๋ฃŒ ์‹œ ํ”Œ๋ž˜๊ทธ ํ•ด์ œ
        FieldZoneAPI.unregisterFlag(noLightning);
    }

    @EventHandler
    private void onLightningStrike(LightningStrikeEvent event) {
        Location location = event.getLightning().getLocation();

        // FlagState๋ฅผ ํ†ตํ•œ 3-์ƒํƒœ ํ™•์ธ
        FlagState state = FieldZoneAPI.hasFlag(location, noLightning);

        // toBoolean()์œผ๋กœ ๊ฐ„๋‹จํžˆ ํ™•์ธ (TRUE๋งŒ true, FALSE์™€ NONE์€ false)
        if (state.toBoolean()) {
            event.setCancelled(true);
        }
    }
}

์‚ฌ์šฉ ํ๋ฆ„:

  1. ์„œ๋ฒ„์— FieldZone๊ณผ LightningPlugin์ด ํ•จ๊ป˜ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  2. LightningPlugin์ด ํ™œ์„ฑํ™”๋˜๋ฉด lightning:no_lightning ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ž๋™ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.
  3. ๊ด€๋ฆฌ์ž๊ฐ€ /fz flag set spawn LightningPlugin:no_lightning ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค โ†’ TRUE ์„ค์ •.
  4. ์ด์ œ spawn ์ง€์—ญ์—์„œ๋Š” ๋ฒˆ๊ฐœ๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.
  5. /fz flag set spawn LightningPlugin:no_lightning false โ†’ ๋ช…์‹œ์ ์œผ๋กœ FALSE ์„ค์ • (์ฐจ๋‹จ ํ•ด์ œ).
  6. /fz flag clear spawn LightningPlugin:no_lightning โ†’ NONE ์ƒํƒœ๋กœ ๋ณต๊ท€ (๋ฐ์ดํ„ฐ์—์„œ ์‚ญ์ œ).
  7. LightningPlugin์„ ์ œ๊ฑฐํ•˜๋ฉด:
    • clean-unregistered-flags: false โ†’ ํ”Œ๋ž˜๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜์–ด, ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ฉด ๋ฐ”๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
    • clean-unregistered-flags: true โ†’ ์†Œ์œ ์ž ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์—†์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค. (์†Œ์œ ์ž๊ฐ€ ๋กœ๋“œ๋˜์—ˆ๋Š”๋ฐ ๋“ฑ๋ก์„ ์•ˆ ํ–ˆ์„ ๋•Œ๋งŒ ์‚ญ์ œ)

About

2D Polygonal Region Plugin

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages