1.0.0-SNAPSHOT-U39

+ Started and completed the Taunt system for bosses which runs on intervals.
+ Updated NumberUtils to contain a squared int method
+ Added MessageUtils to make sendMessage easier for radius messages, and just simple messages
This commit is contained in:
AMinecraftDev 2018-11-04 21:36:33 +08:00
parent a8662dc2f3
commit 6a77346abb
15 changed files with 152 additions and 48 deletions

View File

@ -1,6 +1,5 @@
package com.songoda.epicbosses;
import com.songoda.epicbosses.targetting.TargetHandler;
import lombok.Getter;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.commands.BossCmd;
@ -44,6 +43,7 @@ public class CustomBosses extends JavaPlugin implements IReloadable {
@Getter private BossEntityManager bossEntityManager;
@Getter private BossTargetManager bossTargetManager;
@Getter private BossPanelManager bossPanelManager;
@Getter private BossTauntManager bossTauntManager;
@Getter private BossHookManager bossHookManager;
@Getter private VersionHandler versionHandler;
@Getter private DebugManager debugManager;
@ -64,6 +64,7 @@ public class CustomBosses extends JavaPlugin implements IReloadable {
this.debugManager = new DebugManager();
this.versionHandler = new VersionHandler();
this.bossTauntManager = new BossTauntManager(this);
this.bossTargetManager = new BossTargetManager(this);
this.bossEntityContainer = new BossEntityContainer();
this.bossMechanicManager = new BossMechanicManager(this);

View File

@ -2,7 +2,7 @@ package com.songoda.epicbosses.holder;
import lombok.Getter;
import lombok.Setter;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.exception.AlreadySetException;
import org.bukkit.Location;

View File

@ -9,6 +9,7 @@ import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.holder.DeadBossHolder;
import com.songoda.epicbosses.managers.BossEntityManager;
import com.songoda.epicbosses.utils.Debug;
import com.songoda.epicbosses.utils.MessageUtils;
import com.songoda.epicbosses.utils.NumberUtils;
import com.songoda.epicbosses.utils.ServerUtils;
import org.bukkit.Bukkit;
@ -124,17 +125,7 @@ public class BossDeathListener implements Listener {
}
}
if(messageRadius == -1) {
finalMessage.forEach(Bukkit::broadcastMessage);
} else {
Bukkit.getOnlinePlayers().forEach(onlinePlayer -> {
if(onlinePlayer.getWorld().getName().equals(location.getWorld().getName())) {
if(onlinePlayer.getLocation().distanceSquared(location) <= messageRadius) {
finalMessage.forEach(onlinePlayer::sendMessage);
}
}
});
}
MessageUtils.get().sendMessage(location, NumberUtils.get().getSquared(messageRadius), finalMessage);
}
});

View File

@ -10,10 +10,8 @@ import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossEntityManager;
import com.songoda.epicbosses.managers.BossLocationManager;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.utils.Debug;
import com.songoda.epicbosses.utils.Message;
import com.songoda.epicbosses.utils.ServerUtils;
import com.songoda.epicbosses.utils.StringUtils;
import com.songoda.epicbosses.managers.BossTauntManager;
import com.songoda.epicbosses.utils.*;
import com.songoda.epicbosses.utils.itemstack.ItemStackUtils;
import com.songoda.epicbosses.utils.version.VersionHandler;
import org.bukkit.Bukkit;
@ -41,10 +39,12 @@ public class BossSpawnListener implements Listener {
private BossLocationManager bossLocationManager;
private BossTargetManager bossTargetManager;
private BossEntityManager bossEntityManager;
private BossTauntManager bossTauntManager;
private VersionHandler versionHandler;
public BossSpawnListener(CustomBosses customBosses) {
this.versionHandler = customBosses.getVersionHandler();
this.bossTauntManager = customBosses.getBossTauntManager();
this.bossEntityManager = customBosses.getBossEntityManager();
this.bossTargetManager = customBosses.getBossTargetManager();
this.bossLocationManager = customBosses.getBossLocationManager();
@ -122,7 +122,7 @@ public class BossSpawnListener implements Listener {
List<String> commands = this.bossEntityManager.getOnSpawnCommands(bossEntity);
List<String> messages = this.bossEntityManager.getOnSpawnMessage(bossEntity);
int messagesRadius = this.bossEntityManager.getOnSpawnMessageRadius(bossEntity);
int messageRadius = this.bossEntityManager.getOnSpawnMessageRadius(bossEntity);
if(commands != null) {
commands.forEach(command -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command));
@ -130,23 +130,12 @@ public class BossSpawnListener implements Listener {
if(messages != null) {
if(activeBossHolder.getName() != null) messages.replaceAll(s -> s.replace("{boss}", activeBossHolder.getName()));
messages.replaceAll(s -> s.replace("{location}", StringUtils.get().translateLocation(location)));
messages.replaceAll(s -> s.replace('&', '§'));
if(messagesRadius == -1) {
messages.forEach(Bukkit::broadcastMessage);
} else {
Bukkit.getOnlinePlayers().forEach(onlinePlayer -> {
if(onlinePlayer.getWorld().getName().equals(location.getWorld().getName())) {
if(onlinePlayer.getLocation().distanceSquared(location) <= messagesRadius) {
messages.forEach(onlinePlayer::sendMessage);
}
}
});
}
MessageUtils.get().sendMessage(location, NumberUtils.get().getSquared(messageRadius), messages);
}
activeBossHolder.getTargetHandler().runTargetCycle();
//TODO: Handle Taunts
this.bossTauntManager.handleTauntSystem(activeBossHolder);
BossSpawnEvent bossSpawnEvent = new BossSpawnEvent(activeBossHolder);

View File

@ -3,11 +3,11 @@ package com.songoda.epicbosses.managers;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targetting.types.ClosestTargetHandler;
import com.songoda.epicbosses.targetting.types.NotDamagedNearbyTargetHandler;
import com.songoda.epicbosses.targetting.types.RandomNearbyTargetHandler;
import com.songoda.epicbosses.targetting.types.TopDamagerTargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import com.songoda.epicbosses.targeting.types.ClosestTargetHandler;
import com.songoda.epicbosses.targeting.types.NotDamagedNearbyTargetHandler;
import com.songoda.epicbosses.targeting.types.RandomNearbyTargetHandler;
import com.songoda.epicbosses.targeting.types.TopDamagerTargetHandler;
import lombok.Getter;
/**

View File

@ -0,0 +1,69 @@
package com.songoda.epicbosses.managers;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.api.BossAPI;
import com.songoda.epicbosses.entity.BossEntity;
import com.songoda.epicbosses.entity.elements.TauntElement;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.utils.MessageUtils;
import com.songoda.epicbosses.utils.NumberUtils;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 04-Nov-18
*/
public class BossTauntManager {
private CustomBosses plugin;
public BossTauntManager(CustomBosses plugin) {
this.plugin = plugin;
}
public void handleTauntSystem(ActiveBossHolder activeBossHolder) {
BossEntity bossEntity = activeBossHolder.getBossEntity();
if(bossEntity.getMessages() == null) return;
if(bossEntity.getMessages().getTaunts() == null) return;
TauntElement tauntElement = bossEntity.getMessages().getTaunts();
Integer delay = tauntElement.getDelay();
Integer radius = tauntElement.getRadius();
List<String> taunts = tauntElement.getTaunts();
if(delay == null) delay = 60;
if(radius == null) radius = 100;
if(taunts != null) {
if(taunts.isEmpty()) return;
createRunnable(taunts, activeBossHolder, NumberUtils.get().getSquared(radius), delay);
}
}
private void createRunnable(List<String> taunts, ActiveBossHolder activeBossHolder, int radius, int delay) {
new BukkitRunnable() {
Queue<String> queue = new LinkedList<>(taunts);
@Override
public void run() {
if(activeBossHolder.isDead()) {
cancel();
return;
}
if(this.queue.isEmpty()) this.queue = new LinkedList<>(taunts);
List<String> messages = BossAPI.getStoredMessages(this.queue.poll());
MessageUtils.get().sendMessage(activeBossHolder.getLocation(), radius, messages);
}
}.runTaskTimer(this.plugin, delay*20, delay*20);
}
}

View File

@ -1,4 +1,4 @@
package com.songoda.epicbosses.targetting;
package com.songoda.epicbosses.targeting;
import org.bukkit.entity.LivingEntity;

View File

@ -1,6 +1,5 @@
package com.songoda.epicbosses.targetting;
package com.songoda.epicbosses.targeting;
import com.songoda.epicbosses.CustomBosses;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.utils.ServerUtils;

View File

@ -1,8 +1,8 @@
package com.songoda.epicbosses.targetting.types;
package com.songoda.epicbosses.targeting.types;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import org.bukkit.entity.LivingEntity;
import java.util.List;

View File

@ -1,8 +1,8 @@
package com.songoda.epicbosses.targetting.types;
package com.songoda.epicbosses.targeting.types;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import org.bukkit.entity.LivingEntity;
import java.util.List;

View File

@ -1,8 +1,8 @@
package com.songoda.epicbosses.targetting.types;
package com.songoda.epicbosses.targeting.types;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import org.bukkit.entity.LivingEntity;
import java.util.Collections;

View File

@ -1,8 +1,8 @@
package com.songoda.epicbosses.targetting.types;
package com.songoda.epicbosses.targeting.types;
import com.songoda.epicbosses.holder.ActiveBossHolder;
import com.songoda.epicbosses.managers.BossTargetManager;
import com.songoda.epicbosses.targetting.TargetHandler;
import com.songoda.epicbosses.targeting.TargetHandler;
import com.songoda.epicbosses.utils.MapUtils;
import org.bukkit.entity.LivingEntity;

View File

@ -0,0 +1,51 @@
package com.songoda.epicbosses.utils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
/**
* @author Charles Cullen
* @version 1.0.0
* @since 04-Nov-18
*/
public class MessageUtils {
private static MessageUtils INSTANCE = new MessageUtils();
public void sendMessage(Player player, String... messages) {
sendMessage(player, Arrays.asList(messages));
}
public void sendMessage(Player player, List<String> messages) {
for(String s : messages) {
player.sendMessage(StringUtils.get().translateColor(s));
}
}
public void sendMessage(Location center, int radius, String... messages) {
sendMessage(center, radius, Arrays.asList(messages));
}
public void sendMessage(Location center, int radius, List<String> messages) {
messages.replaceAll(s -> s.replace('&', '§'));
if(radius == -1) {
Bukkit.getOnlinePlayers().forEach(player -> messages.forEach(player::sendMessage));
} else {
Bukkit.getOnlinePlayers().forEach(player -> {
if((player.getWorld().equals(center.getWorld())) && (player.getLocation().distanceSquared(center) <= radius)) {
messages.forEach(player::sendMessage);
}
});
}
}
public static MessageUtils get() {
return INSTANCE;
}
}

View File

@ -27,6 +27,10 @@ public class NumberUtils {
return Integer.valueOf(input);
}
public int getSquared(int original) {
return original * original;
}
public boolean isDouble(String string) {
try {
Double.valueOf(string);

View File

@ -19,7 +19,7 @@
</modules>
<properties>
<plugin.version>1.0.0-SNAPSHOT-U38</plugin.version>
<plugin.version>1.0.0-SNAPSHOT-U39</plugin.version>
<plugin.name>EpicBosses</plugin.name>
<plugin.main>com.songoda.epicbosses.CustomBosses</plugin.main>
<plugin.author>AMinecraftDev</plugin.author>