mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-23 07:10:46 +00:00
Introduce a simpler way to get the original owner of an EntityClientGadget
This commit is contained in:
parent
fa90e37da3
commit
de8b0be36e
@ -36,6 +36,8 @@ public class EntityClientGadget extends EntityBaseGadget {
|
||||
private int targetEntityId;
|
||||
private boolean asyncLoad;
|
||||
|
||||
private int originalOwnerEntityId;
|
||||
|
||||
public EntityClientGadget(Scene scene, Player player, EvtCreateGadgetNotify notify) {
|
||||
super(scene);
|
||||
this.owner = player;
|
||||
@ -48,6 +50,14 @@ public class EntityClientGadget extends EntityBaseGadget {
|
||||
this.ownerEntityId = notify.getPropOwnerEntityId();
|
||||
this.targetEntityId = notify.getTargetEntityId();
|
||||
this.asyncLoad = notify.getIsAsyncLoad();
|
||||
|
||||
GameEntity owner = scene.getEntityById(this.ownerEntityId);
|
||||
if (owner instanceof EntityClientGadget ownerGadget) {
|
||||
this.originalOwnerEntityId = ownerGadget.getOriginalOwnerEntityId();
|
||||
}
|
||||
else {
|
||||
this.originalOwnerEntityId = this.ownerEntityId;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -79,6 +89,10 @@ public class EntityClientGadget extends EntityBaseGadget {
|
||||
return this.asyncLoad;
|
||||
}
|
||||
|
||||
public int getOriginalOwnerEntityId() {
|
||||
return this.originalOwnerEntityId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeath(int killerId) {
|
||||
|
||||
|
@ -98,13 +98,10 @@ public class EnergyManager {
|
||||
if (!(entity instanceof EntityClientGadget)) {
|
||||
res = invokeEntityId;
|
||||
}
|
||||
// If the entity is a `EntityClientGadget`, we need to "walk up" the owner hierarchy,
|
||||
// until the owner is no longer a gadget. This should then be the ID of the casting avatar.
|
||||
// If the entity is a `EntityClientGadget`, we need to find the ID of the original
|
||||
// owner of that gadget.
|
||||
else {
|
||||
while (entity instanceof EntityClientGadget gadget) {
|
||||
res = gadget.getOwnerEntityId();
|
||||
entity = player.getScene().getEntityById(gadget.getOwnerEntityId());
|
||||
}
|
||||
res = ((EntityClientGadget)entity).getOriginalOwnerEntityId();
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -139,9 +136,9 @@ public class EnergyManager {
|
||||
.findFirst();
|
||||
|
||||
// Bug: invokes twice sometimes, Ayato, Keqing
|
||||
// Amber not getting element properly
|
||||
// ToDo: deal with press, hold difference. deal with charge(Beidou, Yunjin)
|
||||
if (avatarEntity.isPresent()) {
|
||||
Grasscutter.getLogger().info("Found entity: {}", avatarEntity.get());
|
||||
Avatar avatar = avatarEntity.get().getAvatar();
|
||||
|
||||
if (avatar != null) {
|
||||
|
Loading…
Reference in New Issue
Block a user