Remove gadgets from world when a player leaves

This commit is contained in:
Melledy
2022-04-17 23:43:47 -07:00
parent c919c9c9eb
commit ad57bb91df
3 changed files with 24 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ import emu.grasscutter.game.props.LifeState;
import emu.grasscutter.game.GenshinPlayer.SceneLoadState;
import emu.grasscutter.game.entity.EntityAvatar;
import emu.grasscutter.game.entity.EntityClientGadget;
import emu.grasscutter.game.entity.EntityGadget;
import emu.grasscutter.net.packet.GenshinPacket;
import emu.grasscutter.net.proto.AttackResultOuterClass.AttackResult;
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
@@ -197,6 +198,11 @@ public class World implements Iterable<GenshinPlayer> {
this.updatePlayerInfos(player);
}
// Remove player gadgets
for (EntityGadget gadget : player.getTeamManager().getGadgets()) {
this.removeEntity(gadget);
}
// Disband world if host leaves
if (getHost() == player) {
List<GenshinPlayer> kicked = new ArrayList<>(this.getPlayers());
@@ -377,7 +383,8 @@ public class World implements Iterable<GenshinPlayer> {
// Directly add
this.addEntityDirectly(gadget);
// Add to owner's gadget list TODO
// Add to owner's gadget list
gadget.getOwner().getTeamManager().getGadgets().add(gadget);
// Optimization
if (this.getPlayerCount() == 1 && this.getPlayers().get(0) == gadget.getOwner()) {
@@ -398,7 +405,8 @@ public class World implements Iterable<GenshinPlayer> {
EntityClientGadget gadget = (EntityClientGadget) entity;
this.removeEntityDirectly(gadget);
// Remove from owner's gadget list TODO
// Remove from owner's gadget list
gadget.getOwner().getTeamManager().getGadgets().remove(gadget);
// Optimization
if (this.getPlayerCount() == 1 && this.getPlayers().get(0) == gadget.getOwner()) {