| 이해도 | 입문자 |
|---|---|
| 게임버전 (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);
}
}
}
이택스트?를 플러그인으로 만들어 주실분이 계신가요 친구들과 재밌는 게임을 하려고 쳇지피티로 플러그인 을 짰는데 만드는데서 막혔습니다 누가 저좀 구원해주세요..ㅜㅜ

노을넴
2024.12.19게시판 미스. https://www.koreaminecraft.net/qna. https://www.koreaminecraft.net/review/3669278
플러러
2024.12.20앗 감사합니다