mirror of
https://github.com/songoda/EpicBosses.git
synced 2024-11-05 01:30:07 +01:00
1.0.0-SNAPSHOT-U59
+ Finalised the Skill system
This commit is contained in:
parent
11baa56327
commit
861705f717
@ -1,6 +1,8 @@
|
|||||||
package com.songoda.epicbosses.events;
|
package com.songoda.epicbosses.events;
|
||||||
|
|
||||||
import com.songoda.epicbosses.holder.ActiveBossHolder;
|
import com.songoda.epicbosses.holder.ActiveBossHolder;
|
||||||
|
import com.songoda.epicbosses.skills.ISkillHandler;
|
||||||
|
import com.songoda.epicbosses.skills.Skill;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
@ -15,9 +17,21 @@ public class BossSkillEvent extends Event {
|
|||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
|
||||||
@Getter private ActiveBossHolder activeBossHolder;
|
@Getter private ActiveBossHolder activeBossHolder;
|
||||||
|
@Getter private ISkillHandler skillHandler;
|
||||||
|
@Getter private Skill skill;
|
||||||
|
|
||||||
|
public BossSkillEvent(ActiveBossHolder activeBossHolder, ISkillHandler skillHandler, Skill skill) {
|
||||||
|
this.activeBossHolder = activeBossHolder;
|
||||||
|
this.skillHandler = skillHandler;
|
||||||
|
this.skill = skill;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return null;
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,17 +3,20 @@ package com.songoda.epicbosses.listeners.during;
|
|||||||
import com.songoda.epicbosses.CustomBosses;
|
import com.songoda.epicbosses.CustomBosses;
|
||||||
import com.songoda.epicbosses.api.BossAPI;
|
import com.songoda.epicbosses.api.BossAPI;
|
||||||
import com.songoda.epicbosses.entity.BossEntity;
|
import com.songoda.epicbosses.entity.BossEntity;
|
||||||
|
import com.songoda.epicbosses.events.BossSkillEvent;
|
||||||
import com.songoda.epicbosses.events.PreBossSkillEvent;
|
import com.songoda.epicbosses.events.PreBossSkillEvent;
|
||||||
import com.songoda.epicbosses.holder.ActiveBossHolder;
|
import com.songoda.epicbosses.holder.ActiveBossHolder;
|
||||||
import com.songoda.epicbosses.managers.BossEntityManager;
|
import com.songoda.epicbosses.managers.BossEntityManager;
|
||||||
import com.songoda.epicbosses.managers.BossSkillManager;
|
import com.songoda.epicbosses.managers.BossSkillManager;
|
||||||
import com.songoda.epicbosses.managers.files.SkillsFileManager;
|
import com.songoda.epicbosses.managers.files.SkillsFileManager;
|
||||||
|
import com.songoda.epicbosses.skills.ISkillHandler;
|
||||||
import com.songoda.epicbosses.skills.Skill;
|
import com.songoda.epicbosses.skills.Skill;
|
||||||
import com.songoda.epicbosses.skills.types.CommandSkillElement;
|
import com.songoda.epicbosses.skills.types.CommandSkillElement;
|
||||||
import com.songoda.epicbosses.skills.types.CustomSkillElement;
|
import com.songoda.epicbosses.skills.types.CustomSkillElement;
|
||||||
import com.songoda.epicbosses.skills.types.GroupSkillElement;
|
import com.songoda.epicbosses.skills.types.GroupSkillElement;
|
||||||
import com.songoda.epicbosses.skills.types.PotionSkillElement;
|
import com.songoda.epicbosses.skills.types.PotionSkillElement;
|
||||||
import com.songoda.epicbosses.utils.Debug;
|
import com.songoda.epicbosses.utils.Debug;
|
||||||
|
import com.songoda.epicbosses.utils.MessageUtils;
|
||||||
import com.songoda.epicbosses.utils.RandomUtils;
|
import com.songoda.epicbosses.utils.RandomUtils;
|
||||||
import com.songoda.epicbosses.utils.ServerUtils;
|
import com.songoda.epicbosses.utils.ServerUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -26,10 +29,7 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Charles Cullen
|
* @author Charles Cullen
|
||||||
@ -65,11 +65,11 @@ public class BossSkillListener implements Listener {
|
|||||||
|
|
||||||
if(bossEntity.getSkills() == null || bossEntity.getSkills().getOverallChance() == null) return;
|
if(bossEntity.getSkills() == null || bossEntity.getSkills().getOverallChance() == null) return;
|
||||||
|
|
||||||
// if(RandomUtils.get().canPreformAction(bossEntity.getSkills().getOverallChance())) {
|
if(RandomUtils.get().canPreformAction(bossEntity.getSkills().getOverallChance())) {
|
||||||
PreBossSkillEvent preBossSkillEvent = new PreBossSkillEvent(activeBossHolder, livingEntity, (LivingEntity) entityDamaging);
|
PreBossSkillEvent preBossSkillEvent = new PreBossSkillEvent(activeBossHolder, livingEntity, (LivingEntity) entityDamaging);
|
||||||
|
|
||||||
ServerUtils.get().callEvent(preBossSkillEvent);
|
ServerUtils.get().callEvent(preBossSkillEvent);
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -95,56 +95,39 @@ public class BossSkillListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<LivingEntity> targettedEntities = getTargetedEntities(activeBossHolder, skill, activeBossHolder.getLivingEntity().getLocation(), damagingEntity);
|
List<LivingEntity> targettedEntities = this.bossSkillManager.getTargetedEntities(activeBossHolder, skill, activeBossHolder.getLivingEntity().getLocation(), damagingEntity);
|
||||||
|
String bossDisplayName = activeBossHolder.getName();
|
||||||
|
String skillDisplayName = skill.getDisplayName();
|
||||||
|
ISkillHandler<?> skillHandler;
|
||||||
|
|
||||||
if(skill.getType().equalsIgnoreCase("POTION")) {
|
if(skill.getType().equalsIgnoreCase("POTION")) {
|
||||||
PotionSkillElement potionSkillElement = this.bossSkillManager.getPotionSkillElement(skill);
|
PotionSkillElement potionSkillElement = this.bossSkillManager.getPotionSkillElement(skill);
|
||||||
|
|
||||||
potionSkillElement.castSkill(skill, potionSkillElement, activeBossHolder, targettedEntities);
|
potionSkillElement.castSkill(skill, potionSkillElement, activeBossHolder, targettedEntities);
|
||||||
System.out.println("#1");
|
skillHandler = potionSkillElement;
|
||||||
} else if(skill.getType().equalsIgnoreCase("COMMAND")) {
|
} else if(skill.getType().equalsIgnoreCase("COMMAND")) {
|
||||||
CommandSkillElement commandSkillElement = this.bossSkillManager.getCommandSkillElement(skill);
|
CommandSkillElement commandSkillElement = this.bossSkillManager.getCommandSkillElement(skill);
|
||||||
|
|
||||||
commandSkillElement.castSkill(skill, commandSkillElement, activeBossHolder, targettedEntities);
|
commandSkillElement.castSkill(skill, commandSkillElement, activeBossHolder, targettedEntities);
|
||||||
System.out.println("#2");
|
skillHandler = commandSkillElement;
|
||||||
} else if(skill.getType().equalsIgnoreCase("GROUP")) {
|
} else if(skill.getType().equalsIgnoreCase("GROUP")) {
|
||||||
GroupSkillElement groupSkillElement = this.bossSkillManager.getGroupSkillElement(skill);
|
GroupSkillElement groupSkillElement = this.bossSkillManager.getGroupSkillElement(skill);
|
||||||
|
|
||||||
groupSkillElement.castSkill(skill, groupSkillElement, activeBossHolder, targettedEntities);
|
groupSkillElement.castSkill(skill, groupSkillElement, activeBossHolder, targettedEntities);
|
||||||
System.out.println("#3");
|
skillHandler = groupSkillElement;
|
||||||
} else if(skill.getType().equalsIgnoreCase("CUSTOM")) {
|
} else if(skill.getType().equalsIgnoreCase("CUSTOM")) {
|
||||||
CustomSkillElement customSkillElement = this.bossSkillManager.getCustomSkillElement(skill);
|
CustomSkillElement customSkillElement = this.bossSkillManager.getCustomSkillElement(skill);
|
||||||
|
|
||||||
this.bossSkillManager.handleCustomSkillCasting(skill, customSkillElement, activeBossHolder, targettedEntities);
|
skillHandler = this.bossSkillManager.handleCustomSkillCasting(skill, customSkillElement, activeBossHolder, targettedEntities);
|
||||||
System.out.println("#4");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<LivingEntity> getTargetedEntities(ActiveBossHolder activeBossHolder, Skill skill, Location center, LivingEntity damager) {
|
|
||||||
double radiusSqr = skill.getRadius() * skill.getRadius();
|
|
||||||
List<LivingEntity> targetedList = new ArrayList<>();
|
|
||||||
String mode = skill.getMode();
|
|
||||||
|
|
||||||
if(mode.equalsIgnoreCase("ONE")) {
|
|
||||||
return Arrays.asList(damager);
|
|
||||||
} else if(mode.equalsIgnoreCase("BOSS")) {
|
|
||||||
targetedList.addAll(activeBossHolder.getLivingEntityMap().values());
|
|
||||||
} else {
|
} else {
|
||||||
for(Player player : Bukkit.getOnlinePlayers()) {
|
return;
|
||||||
if(!player.getWorld().equals(center.getWorld())) continue;
|
|
||||||
if(center.distanceSquared(player.getLocation()) > radiusSqr) continue;
|
|
||||||
|
|
||||||
if(mode.equalsIgnoreCase("ALL")) {
|
|
||||||
targetedList.add(player);
|
|
||||||
} else if(mode.equalsIgnoreCase("RANDOM")) {
|
|
||||||
if(RandomUtils.get().preformRandomAction()) {
|
|
||||||
targetedList.add(player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return targetedList;
|
masterMessage.replaceAll(s -> s.replace("{boss}", bossDisplayName).replace("{skill}", skillDisplayName));
|
||||||
|
targettedEntities.forEach(livingEntity -> MessageUtils.get().sendMessage(livingEntity, masterMessage));
|
||||||
|
|
||||||
|
BossSkillEvent bossSkillEvent = new BossSkillEvent(activeBossHolder, skillHandler, skill);
|
||||||
|
ServerUtils.get().callEvent(bossSkillEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,13 @@ import com.songoda.epicbosses.skills.types.PotionSkillElement;
|
|||||||
import com.songoda.epicbosses.utils.BossesGson;
|
import com.songoda.epicbosses.utils.BossesGson;
|
||||||
import com.songoda.epicbosses.utils.Debug;
|
import com.songoda.epicbosses.utils.Debug;
|
||||||
import com.songoda.epicbosses.utils.ILoadable;
|
import com.songoda.epicbosses.utils.ILoadable;
|
||||||
|
import com.songoda.epicbosses.utils.RandomUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.LivingEntity;
|
import org.bukkit.entity.LivingEntity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Charles Cullen
|
* @author Charles Cullen
|
||||||
@ -40,16 +42,17 @@ public class BossSkillManager implements ILoadable {
|
|||||||
registerCustomSkill(new Warp());
|
registerCustomSkill(new Warp());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleCustomSkillCasting(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
|
public CustomSkillHandler handleCustomSkillCasting(Skill skill, CustomSkillElement customSkillElement, ActiveBossHolder activeBossHolder, List<LivingEntity> nearbyEntities) {
|
||||||
String type = customSkillElement.getCustom().getType();
|
String type = customSkillElement.getCustom().getType();
|
||||||
CustomSkillHandler customSkillHandler = getCustomSkillHandler(type);
|
CustomSkillHandler customSkillHandler = getCustomSkillHandler(type);
|
||||||
|
|
||||||
if(customSkillHandler == null) {
|
if(customSkillHandler == null) {
|
||||||
Debug.FAILED_TO_OBTAIN_THE_SKILL_HANDLER.debug(type);
|
Debug.FAILED_TO_OBTAIN_THE_SKILL_HANDLER.debug(type);
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
customSkillHandler.castSkill(skill, customSkillElement, activeBossHolder, nearbyEntities);
|
customSkillHandler.castSkill(skill, customSkillElement, activeBossHolder, nearbyEntities);
|
||||||
|
return customSkillHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PotionSkillElement getPotionSkillElement(Skill skill) {
|
public PotionSkillElement getPotionSkillElement(Skill skill) {
|
||||||
@ -97,7 +100,34 @@ public class BossSkillManager implements ILoadable {
|
|||||||
SKILLS.remove(customSkillHandler);
|
SKILLS.remove(customSkillHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CustomSkillHandler getCustomSkillHandler(String name) {
|
public List<LivingEntity> getTargetedEntities(ActiveBossHolder activeBossHolder, Skill skill, Location center, LivingEntity damager) {
|
||||||
|
double radiusSqr = skill.getRadius() * skill.getRadius();
|
||||||
|
List<LivingEntity> targetedList = new ArrayList<>();
|
||||||
|
String mode = skill.getMode();
|
||||||
|
|
||||||
|
if(mode.equalsIgnoreCase("ONE")) {
|
||||||
|
return Arrays.asList(damager);
|
||||||
|
} else if(mode.equalsIgnoreCase("BOSS")) {
|
||||||
|
targetedList.addAll(activeBossHolder.getLivingEntityMap().values());
|
||||||
|
} else {
|
||||||
|
for(Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
if(!player.getWorld().equals(center.getWorld())) continue;
|
||||||
|
if(center.distanceSquared(player.getLocation()) > radiusSqr) continue;
|
||||||
|
|
||||||
|
if(mode.equalsIgnoreCase("ALL")) {
|
||||||
|
targetedList.add(player);
|
||||||
|
} else if(mode.equalsIgnoreCase("RANDOM")) {
|
||||||
|
if(RandomUtils.get().preformRandomAction()) {
|
||||||
|
targetedList.add(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return targetedList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CustomSkillHandler getCustomSkillHandler(String name) {
|
||||||
for(CustomSkillHandler customSkillHandler : new HashSet<>(SKILLS)) {
|
for(CustomSkillHandler customSkillHandler : new HashSet<>(SKILLS)) {
|
||||||
String skillName = customSkillHandler.getClass().getSimpleName();
|
String skillName = customSkillHandler.getClass().getSimpleName();
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ package com.songoda.epicbosses.utils;
|
|||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.LivingEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -16,11 +17,11 @@ public class MessageUtils {
|
|||||||
|
|
||||||
private static MessageUtils INSTANCE = new MessageUtils();
|
private static MessageUtils INSTANCE = new MessageUtils();
|
||||||
|
|
||||||
public void sendMessage(Player player, String... messages) {
|
public void sendMessage(LivingEntity player, String... messages) {
|
||||||
sendMessage(player, Arrays.asList(messages));
|
sendMessage(player, Arrays.asList(messages));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendMessage(Player player, List<String> messages) {
|
public void sendMessage(LivingEntity player, List<String> messages) {
|
||||||
for(String s : messages) {
|
for(String s : messages) {
|
||||||
player.sendMessage(StringUtils.get().translateColor(s));
|
player.sendMessage(StringUtils.get().translateColor(s));
|
||||||
}
|
}
|
||||||
|
2
pom.xml
2
pom.xml
@ -19,7 +19,7 @@
|
|||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<plugin.version>1.0.0-SNAPSHOT-U58</plugin.version>
|
<plugin.version>1.0.0-SNAPSHOT-U59</plugin.version>
|
||||||
<plugin.name>EpicBosses</plugin.name>
|
<plugin.name>EpicBosses</plugin.name>
|
||||||
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
|
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
|
||||||
<plugin.author>AMinecraftDev</plugin.author>
|
<plugin.author>AMinecraftDev</plugin.author>
|
||||||
|
Loading…
Reference in New Issue
Block a user