Spawner/Killer replacements in onDeath messages/commands

This commit is contained in:
Esophose 2019-07-04 12:05:11 -06:00
parent 7f4a1ad4de
commit 5f80888524
9 changed files with 35 additions and 8 deletions

View File

@ -4,7 +4,7 @@ stages:
variables: variables:
name: "EpicBosses" name: "EpicBosses"
path: "/builds/$CI_PROJECT_PATH" path: "/builds/$CI_PROJECT_PATH"
version: "1.1.0" version: "1.1.1"
build: build:
stage: build stage: build

View File

@ -476,7 +476,7 @@ public class BossAPI {
String name = PLUGIN.getBossEntityContainer().getName(bossEntity); String name = PLUGIN.getBossEntityContainer().getName(bossEntity);
ActiveBossHolder activeBossHolder = PLUGIN.getBossEntityManager().createActiveBossHolder(bossEntity, location, name); ActiveBossHolder activeBossHolder = PLUGIN.getBossEntityManager().createActiveBossHolder(bossEntity, location, name, player);
if(activeBossHolder == null) { if(activeBossHolder == null) {
Debug.FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER.debug(); Debug.FAILED_TO_CREATE_ACTIVE_BOSS_HOLDER.debug();

View File

@ -3,6 +3,7 @@ package com.songoda.epicbosses.events;
import lombok.Getter; import lombok.Getter;
import com.songoda.epicbosses.holder.ActiveBossHolder; import com.songoda.epicbosses.holder.ActiveBossHolder;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@ -17,10 +18,12 @@ public class PreBossDeathEvent extends Event {
@Getter private ActiveBossHolder activeBossHolder; @Getter private ActiveBossHolder activeBossHolder;
@Getter private Location location; @Getter private Location location;
@Getter private Player killer;
public PreBossDeathEvent(ActiveBossHolder activeBossHolder, Location location) { public PreBossDeathEvent(ActiveBossHolder activeBossHolder, Location location, Player killer) {
this.activeBossHolder = activeBossHolder; this.activeBossHolder = activeBossHolder;
this.location = location; this.location = location;
this.killer = killer;
} }
@Override @Override

View File

@ -12,6 +12,7 @@ import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import java.util.*; import java.util.*;
@ -30,14 +31,19 @@ public class ActiveBossHolder implements IActiveHolder {
@Getter private Map<Integer, UUID> livingEntityMap = new HashMap<>(); @Getter private Map<Integer, UUID> livingEntityMap = new HashMap<>();
@Getter private List<IBossDeathHandler> postBossDeathHandlers = new ArrayList<>(); @Getter private List<IBossDeathHandler> postBossDeathHandlers = new ArrayList<>();
@Getter private Map<UUID, Double> mapOfDamagingUsers = new HashMap<>(); @Getter private Map<UUID, Double> mapOfDamagingUsers = new HashMap<>();
@Getter private String spawningPlayerName;
@Getter @Setter private TargetHandler<ActiveBossHolder> targetHandler = null; @Getter @Setter private TargetHandler<ActiveBossHolder> targetHandler = null;
@Getter @Setter private boolean isDead = false, customSpawnMessage = false; @Getter @Setter private boolean isDead = false, customSpawnMessage = false;
public ActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name) { public ActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name, Player spawningPlayer) {
this.location = spawnLocation; this.location = spawnLocation;
this.bossEntity = bossEntity; this.bossEntity = bossEntity;
this.name = name; this.name = name;
if (spawningPlayer != null) {
this.spawningPlayerName = spawningPlayer.getName();
}
} }
public void setLivingEntity(int position, LivingEntity livingEntity) { public void setLivingEntity(int position, LivingEntity livingEntity) {

View File

@ -16,6 +16,7 @@ import com.songoda.epicbosses.utils.ServerUtils;
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.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
@ -63,7 +64,7 @@ public class BossDeathListener implements Listener {
if(this.bossEntityManager.isAllEntitiesDead(activeBossHolder)) { if(this.bossEntityManager.isAllEntitiesDead(activeBossHolder)) {
PreBossDeathEvent preBossDeathEvent = new PreBossDeathEvent(activeBossHolder, location); PreBossDeathEvent preBossDeathEvent = new PreBossDeathEvent(activeBossHolder, location, event.getEntity().getKiller());
activeBossHolder.setDead(true); activeBossHolder.setDead(true);
activeBossHolder.killAllMinions(); activeBossHolder.killAllMinions();
@ -86,6 +87,8 @@ public class BossDeathListener implements Listener {
ServerUtils serverUtils = ServerUtils.get(); ServerUtils serverUtils = ServerUtils.get();
if(commands != null) { if(commands != null) {
if (activeBossHolder.getSpawningPlayerName() != null) commands.replaceAll(s -> s.replace("{spawner}", activeBossHolder.getSpawningPlayerName()));
if (event.getKiller() != null) commands.replaceAll(s -> s.replace("{killer}", event.getKiller().getName()));
commands.forEach(serverUtils::sendConsoleCommand); commands.forEach(serverUtils::sendConsoleCommand);
} }
@ -123,6 +126,8 @@ public class BossDeathListener implements Listener {
} }
if(activeBossHolder.getName() != null) messages.replaceAll(s -> s.replace("{boss}", activeBossHolder.getName())); if(activeBossHolder.getName() != null) messages.replaceAll(s -> s.replace("{boss}", activeBossHolder.getName()));
if (activeBossHolder.getSpawningPlayerName() != null) messages.replaceAll(s -> s.replace("{spawner}", activeBossHolder.getSpawningPlayerName()));
if (event.getKiller() != null) messages.replaceAll(s -> s.replace("{killer}", event.getKiller().getName()));
messages.replaceAll(s -> s.replace('&', '§')); messages.replaceAll(s -> s.replace('&', '§'));

View File

@ -87,7 +87,7 @@ public class BossSpawnListener implements Listener {
location.add(0,1,0); location.add(0,1,0);
} }
if(!this.bossLocationManager.canSpawnBoss(player, location)) { if(!this.bossLocationManager.canSpawnBoss(player, location.clone())) {
Message.General_CannotSpawn.msg(player); Message.General_CannotSpawn.msg(player);
event.setCancelled(true); event.setCancelled(true);
return; return;

View File

@ -29,6 +29,7 @@ import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Item; import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@ -269,8 +270,8 @@ public class BossEntityManager {
return newMap; return newMap;
} }
public ActiveBossHolder createActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name) { public ActiveBossHolder createActiveBossHolder(BossEntity bossEntity, Location spawnLocation, String name, Player spawningPlayer) {
ActiveBossHolder activeBossHolder = new ActiveBossHolder(bossEntity, spawnLocation, name); ActiveBossHolder activeBossHolder = new ActiveBossHolder(bossEntity, spawnLocation, name, spawningPlayer);
this.bossMechanicManager.handleMechanicApplication(bossEntity, activeBossHolder); this.bossMechanicManager.handleMechanicApplication(bossEntity, activeBossHolder);

View File

@ -5,6 +5,7 @@ import com.songoda.epicbosses.entity.elements.EntityStatsElement;
import com.songoda.epicbosses.entity.elements.MainStatsElement; import com.songoda.epicbosses.entity.elements.MainStatsElement;
import com.songoda.epicbosses.holder.ActiveBossHolder; import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.mechanics.IBossMechanic; import com.songoda.epicbosses.mechanics.IBossMechanic;
import com.songoda.epicbosses.utils.ServerUtils;
import com.songoda.epicbosses.utils.potion.PotionEffectConverter; import com.songoda.epicbosses.utils.potion.PotionEffectConverter;
import com.songoda.epicbosses.utils.potion.holder.PotionEffectHolder; import com.songoda.epicbosses.utils.potion.holder.PotionEffectHolder;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -39,6 +40,11 @@ public class PotionMechanic implements IBossMechanic {
if(potionElements != null && !potionElements.isEmpty()) { if(potionElements != null && !potionElements.isEmpty()) {
potionElements.forEach(potionElement -> { potionElements.forEach(potionElement -> {
PotionEffect potionEffect = this.potionEffectConverter.from(potionElement); PotionEffect potionEffect = this.potionEffectConverter.from(potionElement);
if (potionEffect == null) {
ServerUtils.get().logDebug("Failed to apply potion effect to boss: " +
"[type=" + potionElement.getType() + ",duration=" + potionElement.getDuration() + ",level=" + potionElement.getLevel() + "]");
return;
}
livingEntity.addPotionEffect(potionEffect); livingEntity.addPotionEffect(potionEffect);
}); });

View File

@ -1,6 +1,7 @@
package com.songoda.epicbosses.utils.itemstack; package com.songoda.epicbosses.utils.itemstack;
import com.songoda.epicbosses.utils.NumberUtils; import com.songoda.epicbosses.utils.NumberUtils;
import com.songoda.epicbosses.utils.ServerUtils;
import com.songoda.epicbosses.utils.StringUtils; import com.songoda.epicbosses.utils.StringUtils;
//import com.songoda.epicbosses.utils.factory.NbtFactory; //import com.songoda.epicbosses.utils.factory.NbtFactory;
import com.songoda.epicbosses.utils.itemstack.enchants.GlowEnchant; import com.songoda.epicbosses.utils.itemstack.enchants.GlowEnchant;
@ -117,6 +118,11 @@ public class ItemStackUtils {
for(String x : replacedMap.keySet()) { for(String x : replacedMap.keySet()) {
if(!y.contains(x)) continue; if(!y.contains(x)) continue;
if (!replacedMap.containsKey(x)) {
ServerUtils.get().logDebug("Failed to apply replaced lore: [y=" + y + "x=" + x + "]");
continue;
}
y = y.replace(x, replacedMap.get(x)); y = y.replace(x, replacedMap.get(x));
} }
} }