Fix EntityWeapon

This commit is contained in:
KingRainbow44
2023-05-31 19:29:26 -04:00
parent 815ba3e3e3
commit 7db45a0a12

View File

@@ -1,34 +1,28 @@
package emu.grasscutter.game.entity; package emu.grasscutter.game.entity;
import javax.annotation.Nullable;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData; import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.AbilityData;
import emu.grasscutter.data.binout.config.ConfigEntityGadget; import emu.grasscutter.data.binout.config.ConfigEntityGadget;
import emu.grasscutter.data.binout.config.fields.ConfigAbilityData; import emu.grasscutter.data.binout.config.fields.ConfigAbilityData;
import emu.grasscutter.data.excels.GadgetData; import emu.grasscutter.data.excels.GadgetData;
import emu.grasscutter.game.entity.gadget.GadgetContent;
import emu.grasscutter.game.props.EntityIdType; import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.world.Scene; import emu.grasscutter.game.world.*;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo; import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.scripts.EntityControllerScriptManager; import emu.grasscutter.scripts.EntityControllerScriptManager;
import emu.grasscutter.utils.Position; import it.unimi.dsi.fastutil.ints.*;
import it.unimi.dsi.fastutil.ints.Int2FloatMap; import lombok.*;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
import lombok.Getter; import javax.annotation.Nullable;
import lombok.Setter;
import lombok.ToString;
@ToString(callSuper = true) @ToString(callSuper = true)
public class EntityWeapon extends EntityBaseGadget { public class EntityWeapon extends EntityBaseGadget {
@Getter private final GadgetData gadgetData; @Getter private final GadgetData gadgetData;
@Getter(onMethod = @__(@Override)) @Setter @Getter(onMethod_ = @Override) @Setter
private int gadgetId; private int gadgetId;
@Nullable @Getter @Nullable @Getter
private ConfigEntityGadget configGadget; private ConfigEntityGadget configGadget;
@Getter(onMethod = @__(@Override), lazy = true) @Getter(onMethod_ = @Override, lazy = true)
private final Int2FloatMap fightProperties = new Int2FloatOpenHashMap(); private final Int2FloatMap fightProperties = new Int2FloatOpenHashMap();
@Getter private final Position bornPos; @Getter private final Position bornPos;
@@ -38,42 +32,42 @@ public class EntityWeapon extends EntityBaseGadget {
super(scene); super(scene);
this.gadgetData = GameData.getGadgetDataMap().get(gadgetId); this.gadgetData = GameData.getGadgetDataMap().get(gadgetId);
if (gadgetData!=null && gadgetData.getJsonName()!=null) { if (gadgetData != null && gadgetData.getJsonName() != null) {
this.configGadget = GameData.getGadgetConfigData().get(gadgetData.getJsonName()); this.configGadget = GameData.getGadgetConfigData().get(gadgetData.getJsonName());
} }
this.gadgetId = gadgetId;
this.gadgetId = gadgetId; this.gadgetId = gadgetId;
this.bornPos = this.getPosition().clone(); this.bornPos = this.getPosition().clone();
this.bornRot = this.getRotation().clone(); this.bornRot = this.getRotation().clone();
fillFightProps(configGadget);
if(GameData.getGadgetMappingMap().containsKey(gadgetId)) { this.fillFightProps(configGadget);
String controllerName = GameData.getGadgetMappingMap().get(gadgetId).getServerController(); if (GameData.getGadgetMappingMap().containsKey(gadgetId)) {
setEntityController(EntityControllerScriptManager.getGadgetController(controllerName)); var controllerName = GameData.getGadgetMappingMap().get(gadgetId).getServerController();
if(getEntityController() == null) { this.setEntityController(EntityControllerScriptManager.getGadgetController(controllerName));
Grasscutter.getLogger().warn("Gadget controller {} not found", controllerName); if (getEntityController() == null) {
Grasscutter.getLogger().warn("Gadget controller {} not found.", controllerName);
} }
} }
this.id = scene.getWorld().getNextEntityId(EntityIdType.WEAPON); this.id = scene.getWorld().getNextEntityId(EntityIdType.WEAPON);
Grasscutter.getLogger().warn("New weapon entity id {} at scene {}", this.id, this.getScene().getId()); Grasscutter.getLogger().trace("New weapon entity {} in scene {}.",
this.id, this.getScene().getId());
initAbilities(); this.initAbilities();
} }
private void addConfigAbility(ConfigAbilityData abilityData){ private void addConfigAbility(ConfigAbilityData abilityData){
AbilityData data = GameData.getAbilityData(abilityData.getAbilityName()); var data = GameData.getAbilityData(abilityData.getAbilityName());
if(data != null) if (data != null) this.getWorld().getHost()
getScene().getWorld().getHost().getAbilityManager().addAbilityToEntity( .getAbilityManager().addAbilityToEntity(this, data);
this, data);
} }
@Override @Override
public void initAbilities() { public void initAbilities() {
//TODO: handle predynamic, static and dynamic here //TODO: handle pre-dynamic, static and dynamic here
if(this.configGadget != null && this.configGadget.getAbilities() != null) { if (this.configGadget != null && this.configGadget.getAbilities() != null) {
for (var ability : this.configGadget.getAbilities()) { for (var ability : this.configGadget.getAbilities()) {
addConfigAbility(ability); this.addConfigAbility(ability);
} }
} }
} }