From c6869aaaa2f0a8e7d6e4900997ba263f9e2699d1 Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Tue, 30 May 2023 13:56:06 -0400 Subject: [PATCH] HACK: Return the avatar which holds the weapon when the weapon is referred to by ID --- .../emu/grasscutter/game/world/Scene.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/emu/grasscutter/game/world/Scene.java b/src/main/java/emu/grasscutter/game/world/Scene.java index 49f8dd21b..d440d3890 100644 --- a/src/main/java/emu/grasscutter/game/world/Scene.java +++ b/src/main/java/emu/grasscutter/game/world/Scene.java @@ -41,14 +41,15 @@ import emu.grasscutter.server.event.player.PlayerTeleportEvent; import emu.grasscutter.server.packet.send.*; import emu.grasscutter.utils.objects.KahnsSort; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import lombok.Getter; +import lombok.Setter; +import lombok.val; + +import javax.annotation.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; -import javax.annotation.Nullable; -import lombok.Getter; -import lombok.Setter; -import lombok.val; public final class Scene { @Getter private final World world; @@ -124,6 +125,7 @@ public final class Scene { players.stream().filter(p -> p.getTeamManager().getEntity().getId() == id).findAny(); if (teamEntityPlayer.isPresent()) return teamEntityPlayer.get().getTeamManager().getEntity(); + // Check for an avatar. var entity = this.entities.get(id); if (entity == null && (id >> 24) == EntityType.Avatar.getValue()) { for (var player : this.getPlayers()) { @@ -133,6 +135,15 @@ public final class Scene { } } + // Check for a weapon. + if (entity == null && (id >> 24) == EntityIdType.WEAPON.getId()) { + for (var player : this.getPlayers()) { + for (var avatar : player.getTeamManager().getActiveTeam()) { + if (avatar.getWeaponEntityId() == id) return avatar; + } + } + } + return entity; }