Fix CombatManager not keeping track of attackers
This commit is contained in:
parent
d418bb276e
commit
9a24cbb377
@ -546,7 +546,7 @@ public enum GameKit
|
|||||||
"Every cake needs some frosting.",
|
"Every cake needs some frosting.",
|
||||||
C.blankLine,
|
C.blankLine,
|
||||||
receiveItem("Snowball", 1, 6, 3),
|
receiveItem("Snowball", 1, 6, 3),
|
||||||
C.cGray + "Your " + C.cGreen + "Snowballs" + C.cGray + " slow enemies for " + C.cGreen + "3 seconds"
|
C.cGray + "Your " + C.cGreen + "Snowballs" + C.cGray + " slow enemies for " + C.cGreen + "2.5 seconds"
|
||||||
},
|
},
|
||||||
new KitEntityData<>
|
new KitEntityData<>
|
||||||
(
|
(
|
||||||
|
@ -268,7 +268,7 @@ public class MissionManager extends MiniDbClientPlugin<MissionClient>
|
|||||||
|
|
||||||
client.getMissions().forEach(mission ->
|
client.getMissions().forEach(mission ->
|
||||||
{
|
{
|
||||||
if (mission.getTrackerType() != trackerType || !mission.canProgress(game) || !mission.validateData(data) || !mission.validateY(y))
|
if (mission.getTrackerType() != trackerType || mission.hasRewarded() || !mission.canProgress(game) || !mission.validateData(data) || !mission.validateY(y))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -297,8 +297,8 @@ public class MissionManager extends MiniDbClientPlugin<MissionClient>
|
|||||||
MissionClient client = Get(player);
|
MissionClient client = Get(player);
|
||||||
int started = 0;
|
int started = 0;
|
||||||
|
|
||||||
started += selectNewMissions(player, client, MissionLength.DAY, 5);
|
started += selectNewMissions(player, client, MissionLength.DAY, MAX_DAILY);
|
||||||
started += selectNewMissions(player, client, MissionLength.WEEK, 3);
|
started += selectNewMissions(player, client, MissionLength.WEEK, MAX_WEEKLY);
|
||||||
|
|
||||||
for (MissionContext<?> context : getSelectableMissions(true))
|
for (MissionContext<?> context : getSelectableMissions(true))
|
||||||
{
|
{
|
||||||
|
@ -493,12 +493,12 @@ public class MissionPopulator
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
MissionContext.<String>newBuilder(manager, 601)
|
MissionContext.<String>newBuilder(manager, 601)
|
||||||
.name("Golden Warrior")
|
.name("Does This Have Rocks In It?")
|
||||||
.description("Kill %s players with a Snowball")
|
.description("Kill %s players with a Snowball")
|
||||||
.games(CakeWars4, CakeWarsDuos)
|
.games(CakeWars4, CakeWarsDuos)
|
||||||
.xRange(1, 10)
|
.xRange(1, 10)
|
||||||
.tracker(GAME_KILL)
|
.tracker(GAME_KILL)
|
||||||
.trackerData("Snowball")
|
.trackerData("Frosting")
|
||||||
.rewards(
|
.rewards(
|
||||||
new LevelExperienceReward(200),
|
new LevelExperienceReward(200),
|
||||||
new LevelCurrencyReward(GlobalCurrency.GEM, 100),
|
new LevelCurrencyReward(GlobalCurrency.GEM, 100),
|
||||||
|
@ -69,7 +69,7 @@ public class CombatComponent
|
|||||||
public LinkedList<CombatDamage> GetDamage()
|
public LinkedList<CombatDamage> GetDamage()
|
||||||
{
|
{
|
||||||
if (_damage == null)
|
if (_damage == null)
|
||||||
_damage = new LinkedList<CombatDamage>();
|
_damage = new LinkedList<>();
|
||||||
|
|
||||||
return _damage;
|
return _damage;
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,9 @@ import mineplex.minecraft.game.core.damage.DamageChange;
|
|||||||
|
|
||||||
public class CombatLog
|
public class CombatLog
|
||||||
{
|
{
|
||||||
private LinkedList<CombatComponent> _damager = new LinkedList<CombatComponent>();
|
private final LinkedList<CombatComponent> _damager = new LinkedList<>();
|
||||||
private CombatComponent _player;
|
private final CombatComponent _player;
|
||||||
private long _expireTime;
|
private final long _expireTime;
|
||||||
|
|
||||||
private long _deathTime = 0;
|
private long _deathTime = 0;
|
||||||
private CombatComponent _killer;
|
private CombatComponent _killer;
|
||||||
@ -48,13 +48,11 @@ public class CombatLog
|
|||||||
return _player;
|
return _player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Attacked(String damagerName, double damage,
|
public void Attacked(String damagerName, double damage, LivingEntity damagerEnt, String attackName, List<DamageChange> mod)
|
||||||
LivingEntity damagerEnt, String attackName, List<DamageChange> mod)
|
|
||||||
{
|
{
|
||||||
this.Attacked(damagerName, damage, damagerEnt, attackName, mod, new HashMap<>());
|
Attacked(damagerName, damage, damagerEnt, attackName, mod, new HashMap<>());
|
||||||
}
|
}
|
||||||
public void Attacked(String damagerName, double damage,
|
public void Attacked(String damagerName, double damage, LivingEntity damagerEnt, String attackName, List<DamageChange> mod, Map<String, Object> metadata)
|
||||||
LivingEntity damagerEnt, String attackName, List<DamageChange> mod, Map<String, Object> metadata)
|
|
||||||
{
|
{
|
||||||
// Add Attacked
|
// Add Attacked
|
||||||
CombatComponent comp = GetEnemy(damagerName, damagerEnt);
|
CombatComponent comp = GetEnemy(damagerName, damagerEnt);
|
||||||
@ -64,7 +62,6 @@ public class CombatLog
|
|||||||
// Set Last
|
// Set Last
|
||||||
LastDamager = comp;
|
LastDamager = comp;
|
||||||
_lastDamaged = System.currentTimeMillis();
|
_lastDamaged = System.currentTimeMillis();
|
||||||
// _lastCombat = System.currentTimeMillis();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CombatComponent GetEnemy(String name, LivingEntity ent)
|
public CombatComponent GetEnemy(String name, LivingEntity ent)
|
||||||
@ -72,10 +69,13 @@ public class CombatLog
|
|||||||
ExpireOld();
|
ExpireOld();
|
||||||
|
|
||||||
CombatComponent component = null;
|
CombatComponent component = null;
|
||||||
|
|
||||||
for (CombatComponent cur : _damager)
|
for (CombatComponent cur : _damager)
|
||||||
{
|
{
|
||||||
if (cur.GetName().equals(name))
|
if (cur.GetName().equals(name))
|
||||||
|
{
|
||||||
component = cur;
|
component = cur;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Player has attacked in past
|
// Player has attacked in past
|
||||||
@ -83,16 +83,19 @@ public class CombatLog
|
|||||||
{
|
{
|
||||||
_damager.remove(component);
|
_damager.remove(component);
|
||||||
_damager.addFirst(component);
|
_damager.addFirst(component);
|
||||||
return _damager.getFirst();
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
_damager.addFirst(new CombatComponent(name, ent));
|
component = new CombatComponent(name, ent);
|
||||||
return _damager.getFirst();
|
_damager.addFirst(component);
|
||||||
|
|
||||||
|
return component;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ExpireOld()
|
public void ExpireOld()
|
||||||
{
|
{
|
||||||
int expireFrom = -1;
|
int expireFrom = -1;
|
||||||
|
|
||||||
for (int i = 0; i < _damager.size(); i++)
|
for (int i = 0; i < _damager.size(); i++)
|
||||||
{
|
{
|
||||||
if (UtilTime.elapsed(_damager.get(i).GetLastDamage(), _expireTime))
|
if (UtilTime.elapsed(_damager.get(i).GetLastDamage(), _expireTime))
|
||||||
@ -103,13 +106,17 @@ public class CombatLog
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (expireFrom != -1)
|
if (expireFrom != -1)
|
||||||
|
{
|
||||||
while (_damager.size() > expireFrom)
|
while (_damager.size() > expireFrom)
|
||||||
|
{
|
||||||
_damager.remove(expireFrom);
|
_damager.remove(expireFrom);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinkedList<String> Display()
|
public LinkedList<String> Display()
|
||||||
{
|
{
|
||||||
LinkedList<String> out = new LinkedList<String>();
|
LinkedList<String> out = new LinkedList<>();
|
||||||
|
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
@ -122,7 +129,7 @@ public class CombatLog
|
|||||||
|
|
||||||
public LinkedList<String> DisplayAbsolute()
|
public LinkedList<String> DisplayAbsolute()
|
||||||
{
|
{
|
||||||
HashMap<Long, String> components = new HashMap<Long, String>();
|
Map<Long, String> components = new HashMap<>();
|
||||||
|
|
||||||
for (CombatComponent cur : _damager)
|
for (CombatComponent cur : _damager)
|
||||||
{
|
{
|
||||||
@ -133,7 +140,7 @@ public class CombatLog
|
|||||||
}
|
}
|
||||||
|
|
||||||
int id = components.size();
|
int id = components.size();
|
||||||
LinkedList<String> out = new LinkedList<String>();
|
LinkedList<String> out = new LinkedList<>();
|
||||||
|
|
||||||
while (!components.isEmpty())
|
while (!components.isEmpty())
|
||||||
{
|
{
|
||||||
|
@ -32,7 +32,6 @@ import mineplex.core.common.util.UtilEnt;
|
|||||||
import mineplex.core.common.util.UtilEvent;
|
import mineplex.core.common.util.UtilEvent;
|
||||||
import mineplex.core.common.util.UtilPlayer;
|
import mineplex.core.common.util.UtilPlayer;
|
||||||
import mineplex.core.common.util.UtilServer;
|
import mineplex.core.common.util.UtilServer;
|
||||||
import mineplex.core.common.util.UtilTime;
|
|
||||||
import mineplex.core.itemstack.ItemStackFactory;
|
import mineplex.core.itemstack.ItemStackFactory;
|
||||||
import mineplex.core.updater.UpdateType;
|
import mineplex.core.updater.UpdateType;
|
||||||
import mineplex.core.updater.event.UpdateEvent;
|
import mineplex.core.updater.event.UpdateEvent;
|
||||||
@ -356,6 +355,7 @@ public class CombatManager extends MiniPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.SetDeathTime(System.currentTimeMillis());
|
log.SetDeathTime(System.currentTimeMillis());
|
||||||
|
log.ExpireOld();
|
||||||
|
|
||||||
// Save Death
|
// Save Death
|
||||||
Get(event.getEntity().getUniqueId()).GetDeaths().addFirst(log);
|
Get(event.getEntity().getUniqueId()).GetDeaths().addFirst(log);
|
||||||
@ -366,7 +366,7 @@ public class CombatManager extends MiniPlugin
|
|||||||
{
|
{
|
||||||
CombatComponent attacker = log.GetAttackers().get(i);
|
CombatComponent attacker = log.GetAttackers().get(i);
|
||||||
|
|
||||||
if (!attacker.IsPlayer() || UtilTime.elapsed(attacker.GetLastDamage(), ExpireTime))
|
if (!attacker.IsPlayer())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -489,7 +489,6 @@ public class CombatManager extends MiniPlugin
|
|||||||
{
|
{
|
||||||
UtilPlayer.message(event.getEntity(), F.main(getName(), "You have died." + combatEvent.getSuffix()));
|
UtilPlayer.message(event.getEntity(), F.main(getName(), "You have died." + combatEvent.getSuffix()));
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UtilPlayer.message(event.getEntity(), F.main(getName(), "You were " + combatEvent.getKilledWord() + " by " + F.name(log.GetAttackers().getFirst().GetName())) + C.mBody + "." + combatEvent.getSuffix());
|
UtilPlayer.message(event.getEntity(), F.main(getName(), "You were " + combatEvent.getKilledWord() + " by " + F.name(log.GetAttackers().getFirst().GetName())) + C.mBody + "." + combatEvent.getSuffix());
|
||||||
@ -498,26 +497,9 @@ public class CombatManager extends MiniPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void ExpireOld(UpdateEvent event)
|
|
||||||
{
|
|
||||||
if (event.getType() != UpdateType.FAST)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (CombatLog log : _active.values())
|
|
||||||
log.ExpireOld();
|
|
||||||
}
|
|
||||||
|
|
||||||
public CombatLog Add(Player player)
|
|
||||||
{
|
|
||||||
CombatLog log = new CombatLog(player, ExpireTime);
|
|
||||||
_active.put(player.getUniqueId(), log);
|
|
||||||
return log;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CombatLog Get(Player player)
|
public CombatLog Get(Player player)
|
||||||
{
|
{
|
||||||
return _active.getOrDefault(player.getUniqueId(), Add(player));
|
return _active.computeIfAbsent(player.getUniqueId(), k -> new CombatLog(player, ExpireTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
@ -537,7 +537,7 @@ public class ArcadeManager extends MiniPlugin implements IRelation
|
|||||||
}
|
}
|
||||||
else if (_gameCreationManager.getVotingManager().isVoteInProgress())
|
else if (_gameCreationManager.getVotingManager().isVoteInProgress())
|
||||||
{
|
{
|
||||||
scoreboard.setSidebarName(C.cGreenB + "Voting ends in " + _gameCreationManager.getVotingManager().getCurrentVote().getTimer());
|
scoreboard.setSidebarName(C.cGreenB + "Vote ends in " + _gameCreationManager.getVotingManager().getCurrentVote().getTimer());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -55,13 +55,14 @@ import nautilus.game.arcade.game.Game.GameState;
|
|||||||
import nautilus.game.arcade.game.GameTeam;
|
import nautilus.game.arcade.game.GameTeam;
|
||||||
import nautilus.game.arcade.kit.Kit;
|
import nautilus.game.arcade.kit.Kit;
|
||||||
import nautilus.game.arcade.managers.LobbyEnt;
|
import nautilus.game.arcade.managers.LobbyEnt;
|
||||||
|
import nautilus.game.arcade.managers.voting.Vote;
|
||||||
|
|
||||||
public abstract class LobbyManager implements Listener
|
public abstract class LobbyManager implements Listener
|
||||||
{
|
{
|
||||||
|
|
||||||
protected static final World WORLD = Bukkit.getWorld("world");
|
protected static final World WORLD = Bukkit.getWorld("world");
|
||||||
|
|
||||||
protected final ArcadeManager _manager;
|
protected final ArcadeManager _manager;
|
||||||
protected final String _serverGroup;
|
|
||||||
|
|
||||||
private final Map<GameTeam, Location> _teamLocations;
|
private final Map<GameTeam, Location> _teamLocations;
|
||||||
private final Map<Entity, LobbyEnt> _teams;
|
private final Map<Entity, LobbyEnt> _teams;
|
||||||
@ -105,8 +106,6 @@ public abstract class LobbyManager implements Listener
|
|||||||
_teamBlocks = Maps.newHashMap();
|
_teamBlocks = Maps.newHashMap();
|
||||||
_kitBlocks = Maps.newHashMap();
|
_kitBlocks = Maps.newHashMap();
|
||||||
|
|
||||||
_serverGroup = _manager.GetServerConfig().ServerGroup;
|
|
||||||
|
|
||||||
_generatePodiums = new File("world/GENPODIUMS.dat").exists() || manager.GetHost() != null;
|
_generatePodiums = new File("world/GENPODIUMS.dat").exists() || manager.GetHost() != null;
|
||||||
|
|
||||||
if (_generatePodiums)
|
if (_generatePodiums)
|
||||||
@ -432,9 +431,17 @@ public abstract class LobbyManager implements Listener
|
|||||||
writeGameLine("waiting for players", 3, 159, (byte) 13);
|
writeGameLine("waiting for players", 3, 159, (byte) 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void displayVoting()
|
public void displayVoting(Vote vote)
|
||||||
{
|
{
|
||||||
writeGameLine("voting", 3, Material.STAINED_CLAY.getId(), (byte) 13);
|
writeGameLine("Voting for the next", 0, Material.STAINED_CLAY.getId(), (byte) 14);
|
||||||
|
writeGameLine(vote.getName(), 1, Material.STAINED_CLAY.getId(), (byte) 4);
|
||||||
|
|
||||||
|
displayVotingTime(vote);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void displayVotingTime(Vote vote)
|
||||||
|
{
|
||||||
|
writeGameLine("Vote ends in " + vote.getTimer(), 3, Material.STAINED_CLAY.getId(), (byte) 13);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ScoreboardDisplay(UpdateEvent event)
|
public void ScoreboardDisplay(UpdateEvent event)
|
||||||
|
@ -97,6 +97,7 @@ public abstract class Vote<T extends Voteable>
|
|||||||
public void removeVote(Player player)
|
public void removeVote(Player player)
|
||||||
{
|
{
|
||||||
vote(player, null);
|
vote(player, null);
|
||||||
|
player.closeInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public T getWinner()
|
public T getWinner()
|
||||||
|
@ -73,7 +73,7 @@ public class VotingManager extends ListenerComponent implements Lifetimed
|
|||||||
player.getInventory().setItem(0, _currentVote.getItemStack());
|
player.getInventory().setItem(0, _currentVote.getItemStack());
|
||||||
}
|
}
|
||||||
|
|
||||||
_manager.GetLobby().displayVoting();
|
_manager.GetLobby().displayVoting(vote);
|
||||||
|
|
||||||
activate();
|
activate();
|
||||||
_lifetime.start();
|
_lifetime.start();
|
||||||
@ -190,6 +190,8 @@ public class VotingManager extends ListenerComponent implements Lifetimed
|
|||||||
{
|
{
|
||||||
_finishedVote = _currentVote;
|
_finishedVote = _currentVote;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_manager.GetLobby().displayVotingTime(_currentVote);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,21 +25,50 @@ public class KillMissionTracker extends GameMissionTracker<Game>
|
|||||||
public void playerDeath(CombatDeathEvent event)
|
public void playerDeath(CombatDeathEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.GetEvent().getEntity();
|
Player player = event.GetEvent().getEntity();
|
||||||
|
Player killerPlayer;
|
||||||
|
String source = null;
|
||||||
CombatComponent killer = event.GetLog().GetKiller();
|
CombatComponent killer = event.GetLog().GetKiller();
|
||||||
|
|
||||||
if (killer == null || !killer.IsPlayer())
|
if (killer != null)
|
||||||
{
|
{
|
||||||
|
killerPlayer = UtilPlayer.searchExact(killer.getUniqueIdOfEntity());
|
||||||
|
source = killer.GetLastDamageSource();
|
||||||
|
Bukkit.broadcastMessage("Set killer " + killer.GetName() + " " + source);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Bukkit.broadcastMessage("Killer was not player");
|
||||||
|
killerPlayer = player.getKiller();
|
||||||
|
|
||||||
|
if (killerPlayer == null)
|
||||||
|
{
|
||||||
|
Bukkit.broadcastMessage("Null Killer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (CombatComponent attacker : event.GetLog().GetAttackers())
|
||||||
|
{
|
||||||
|
Bukkit.broadcastMessage("Attacker " + attacker.GetName());
|
||||||
|
|
||||||
|
if (attacker.IsPlayer() && attacker.getUniqueIdOfEntity().equals(killerPlayer.getUniqueId()))
|
||||||
|
{
|
||||||
|
killerPlayer = UtilPlayer.searchExact(attacker.getUniqueIdOfEntity());
|
||||||
|
source = attacker.GetLastDamageSource();
|
||||||
|
Bukkit.broadcastMessage("Set killer " + killerPlayer.getName() + " " + source);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (killerPlayer == null || source == null || player.equals(killerPlayer))
|
||||||
|
{
|
||||||
|
Bukkit.broadcastMessage("Null Killer - END");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player killerPlayer = UtilPlayer.searchExact(killer.getUniqueIdOfEntity());
|
Bukkit.broadcastMessage("increment " + ChatColor.stripColor(source));
|
||||||
|
_manager.incrementProgress(killerPlayer, 1, _trackerType, getGameType(), ChatColor.stripColor(source));
|
||||||
if (killerPlayer == null || player.equals(killerPlayer))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bukkit.broadcastMessage(killer.GetLastDamageSource());
|
|
||||||
_manager.incrementProgress(killerPlayer, 1, _trackerType, getGameType(), ChatColor.stripColor(killer.GetLastDamageSource()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user