개인 자료란 (JE)

  서버 커뮤니티

Profile 플러러 대표칭호 없음
Profile

질문하기 플러그인

혹시 마크에서 플러그인 잘 만지는분 계신가요?

2024.12.19 조회 수 184 추천 수 0
이해도 입문자 
게임버전 (JE) 1.21.3 
게임버전 (BE) 관련없음 

package com.example.bossfight;


import org.bukkit.Bukkit;

import org.bukkit.ChatColor;

import org.bukkit.Location;

import org.bukkit.Material;

import org.bukkit.attribute.Attribute;

import org.bukkit.entity.*;

import org.bukkit.event.EventHandler;

import org.bukkit.event.Listener;

import org.bukkit.event.entity.EntityDamageEvent;

import org.bukkit.event.entity.EntityDeathEvent;

import org.bukkit.inventory.ItemStack;

import org.bukkit.potion.PotionEffect;

import org.bukkit.potion.PotionEffectType;

import org.bukkit.plugin.java.JavaPlugin;

import org.bukkit.boss.BossBar;

import org.bukkit.boss.BossBarColor;

import org.bukkit.boss.BossBarStyle;

import net.md_5.bungee.api.chat.TextComponent;


import java.util.ArrayList;

import java.util.List;


public class BossFightPlugin extends JavaPlugin implements Listener {


    private LivingEntity boss;

    private boolean phaseTwoActive = false;

    private final List<LivingEntity> clones = new ArrayList<>();

    private BossBar bossBar;

    private final List<BossBar> cloneBars = new ArrayList<>();


    @Override

    public void onEnable() {

        Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Boss Fight Plugin enabled!");

        getServer().getPluginManager().registerEvents(this, this);


        

        getCommand("spawnboss").setExecutor((sender, command, label, args) -> {

            if (sender instanceof Player) {

                Player player = (Player) sender;

                spawnBoss(player.getLocation());

                return true;

            }

            return false;

        });

    }


    @Override

    public void onDisable() {

        Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Boss Fight Plugin disabled!");

    }


    private void spawnBoss(Location location) {

        boss = (LivingEntity) location.getWorld().spawnEntity(location, EntityType.WITHER_SKELETON);

        boss.setCustomName(ChatColor.DARK_RED + "제 2대 검은침묵 EGO발현 롤랑");

        boss.setCustomNameVisible(true);


        

        boss.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(3000.0);

        boss.setHealth(3000.0);


        

        boss.getEquipment().setItemInMainHand(new ItemStack(Material.NETHERITE_SWORD));

        boss.getEquipment().setHelmet(new ItemStack(Material.NETHERITE_HELMET));


        

        boss.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, Integer.MAX_VALUE, 2, true, false));


        /

        bossBar = Bukkit.createBossBar(

            boss.getCustomName(),

            BossBarColor.RED,

            BossBarStyle.SOLID

        );

        bossBar.setProgress(1.0);

        bossBar.addPlayer(Bukkit.getOnlinePlayers().toArray(new Player[0]));  // 모든 플레이어에게 보스바 표시


        phaseTwoActive = false;

        clones.clear();


        // 보스 소환 시 시 내용 출력

        sendPoemMessage();

    }


    private void sendPoemMessage() {

        String[] poemLines = {

            "내게는 고통밖에 없습니다.",

            "그것말고는 아무것도 바라지 않습니다.",

            "고통은 내게 충실했고, 지금도 변함 없습니다.",

            "내 영혼이 심연의 바닥을 해맬 때에도",

            "고통은 늘 곁에 앉아 나를 지켜주었으니",

            "어떻게 고통을 원망하겠습니까.",

            "아 고통이여, 너는 결코 내게서 떠나지 않았기에",

            "나는 마침내 너를 존경하기에 이르렀다.",

            "나는 이제 너를 알겠다.",

            "너는 존재하는 것만으로도 아름답다는 것을.",

            "너는 가난한 내 마음의 화롯가를 결코 떠나지 않았던 사람과 닮았다.",

            "나의 고통이여, 너는 더없이 사랑하는 연인보다 다정하다.",

            "나는 알고 있나니 내가 죽음의 자리에 드는 날에도.",

            "너는 내 마음 속으로 깊이 들어와",

            "나와 함께 가지런히 누우리라."

        };


        

        for (String line : poemLines) {

            TextComponent message = new TextComponent(line);

            message.setColor(ChatColor.BLACK); // 텍스트 색상 검정색으로 설정

            Bukkit.getServer().broadcastMessage(message.toString());  // 서버의 모든 플레이어에게 메시지 전송

            try {

                Thread.sleep(1000);  // 1초 간격으로 메시지 출력

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

        }

    }


    @EventHandler

    public void onBossDamage(EntityDamageEvent event) {

        if (event.getEntity() == boss && !phaseTwoActive) {

            double currentHealth = boss.getHealth();

            double damage = event.getFinalDamage();

            double newHealth = currentHealth - damage;


            

            if (newHealth < 2000) {

                event.setDamage(currentHealth - 2000); // 피해량 조정

                newHealth = 2000;

            }


            

            if (newHealth <= 2000) {

                activatePhaseTwo(boss.getLocation());

                event.setCancelled(true); // 무적 상태

            }


            

            bossBar.setProgress(newHealth / 3000.0);

        }

    }


    private void activatePhaseTwo(Location location) {

        phaseTwoActive = true;

        boss.setInvulnerable(true); // 보스 무적

        spawnClones(location);

    }


    private void spawnClones(Location location) {

        String[] weapons = {"철퇴", "네더라이트검", "활", "급류삼지창"};

        Material[] weaponMaterials = {

            Material.IRON_AXE, Material.NETHERITE_SWORD, Material.BOW, Material.TRIDENT

        };


        for (int i = 0; i < 4; i++) {

            LivingEntity clone = (LivingEntity) location.getWorld().spawnEntity(location.add(i * 2, 0, i * 2), EntityType.ZOMBIE);

            clone.setCustomName(ChatColor.GOLD + "롤랑의 분신 - " + weapons[i]);

            clone.setCustomNameVisible(true);

            clone.getEquipment().setItemInMainHand(new ItemStack(weaponMaterials[i]));

            clone.getEquipment().setHelmet(new ItemStack(Material.LEATHER_HELMET));


            

            clone.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(300.0);

            clone.setHealth(300.0);


            

            BossBar cloneBar = Bukkit.createBossBar(

                clone.getCustomName(),

                BossBarColor.BLUE,

                BossBarStyle.SOLID

            );

            cloneBar.setProgress(1.0);

            cloneBar.addPlayer(Bukkit.getOnlinePlayers().toArray(new Player[0]));  

            cloneBars.add(cloneBar);


            clones.add(clone);

        }

    }

}

이택스트?를 플러그인으로 만들어 주실분이 계신가요 친구들과 재밌는 게임을 하려고 쳇지피티로 플러그인 을 짰는데 만드는데서 막혔습니다 누가 저좀 구원해주세요..ㅜㅜ




뉴스 및 창작물
/files/thumbnails/472/161/004/262x150.crop.jpg?20260208155607

나의 GPU ☠️💀 2

SHALDOPlus

2026-02-08

0

/files/thumbnails/602/157/004/262x150.crop.jpg?20260130141854

상품

《마인크래프트 대탈출 게임 만들기》 출간!

다코미

2026-01-30

0

/files/thumbnails/873/156/004/262x150.crop.jpg?20260128131439

상품

《마인크래프트 블록 완벽 가이드》 출간!

다코미

2026-01-28

0

/files/thumbnails/317/150/004/262x150.crop.jpg?20260110144415

건축

광화문 구 경기도청사(1988)

창공

2026-01-10

2

/files/thumbnails/144/149/004/262x150.crop.jpg?20260107110106

상품

《레고 마인크래프트 비주얼 딕셔너리》 출간!

다코미

2026-01-07

0