mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-20 19:04:40 +01:00
* Apply fix `21dec2fe` * Apply fix `89d01d5f` * Apply fix `d900f154` this one was already implemented; updated to use call from previous commit * Ability changing commit TODO: change info to debug * Remove use of deprecated methods/fields * Temp commit v2 (Adding LoseHP and some fixes) * Oopsie * Probably fix monster battle * Fix issue with reflecting into fields * Fix some things * Fix ability names for 3.6 resources * Improve logging --------- Co-authored-by: StartForKiller <jesussanz2003@gmail.com>
132 lines
5.7 KiB
Java
132 lines
5.7 KiB
Java
package emu.grasscutter.game.entity;
|
|
|
|
import emu.grasscutter.data.GameData;
|
|
import emu.grasscutter.data.binout.config.ConfigEntityGadget;
|
|
import emu.grasscutter.data.excels.GadgetData;
|
|
import emu.grasscutter.game.player.Player;
|
|
import emu.grasscutter.game.props.EntityIdType;
|
|
import emu.grasscutter.game.props.FightProperty;
|
|
import emu.grasscutter.game.props.PlayerProperty;
|
|
import emu.grasscutter.game.world.Position;
|
|
import emu.grasscutter.game.world.Scene;
|
|
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
|
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
|
|
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
|
|
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
|
|
import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo;
|
|
import emu.grasscutter.net.proto.PropPairOuterClass.PropPair;
|
|
import emu.grasscutter.net.proto.ProtEntityTypeOuterClass.ProtEntityType;
|
|
import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
|
|
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
|
|
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
|
|
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
|
|
import emu.grasscutter.net.proto.VehicleInfoOuterClass.VehicleInfo;
|
|
import emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember;
|
|
import emu.grasscutter.utils.helpers.ProtoHelper;
|
|
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
|
|
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import javax.annotation.Nullable;
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
public class EntityVehicle extends EntityBaseGadget {
|
|
|
|
@Getter private final Player owner;
|
|
|
|
@Getter(onMethod_ = @Override)
|
|
private final Int2FloatMap fightProperties;
|
|
|
|
@Getter private final int pointId;
|
|
@Getter private final int gadgetId;
|
|
|
|
@Getter @Setter private float curStamina;
|
|
@Getter private List<VehicleMember> vehicleMembers;
|
|
@Nullable @Getter private ConfigEntityGadget configGadget;
|
|
|
|
public EntityVehicle(
|
|
Scene scene, Player player, int gadgetId, int pointId, Position pos, Position rot) {
|
|
super(scene, pos, rot);
|
|
this.owner = player;
|
|
this.id = getScene().getWorld().getNextEntityId(EntityIdType.GADGET);
|
|
this.fightProperties = new Int2FloatOpenHashMap();
|
|
this.gadgetId = gadgetId;
|
|
this.pointId = pointId;
|
|
this.curStamina = 240; // might be in configGadget.GCALKECLLLP.JBAKBEFIMBN.ANBMPHPOALP
|
|
this.vehicleMembers = new ArrayList<>();
|
|
GadgetData data = GameData.getGadgetDataMap().get(gadgetId);
|
|
if (data != null && data.getJsonName() != null) {
|
|
this.configGadget = GameData.getGadgetConfigData().get(data.getJsonName());
|
|
}
|
|
|
|
fillFightProps(configGadget);
|
|
}
|
|
|
|
@Override
|
|
protected void fillFightProps(ConfigEntityGadget configGadget) {
|
|
super.fillFightProps(configGadget);
|
|
this.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0);
|
|
this.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0);
|
|
}
|
|
|
|
@Override
|
|
public SceneEntityInfo toProto() {
|
|
|
|
VehicleInfo vehicle =
|
|
VehicleInfo.newBuilder()
|
|
.setOwnerUid(this.owner.getUid())
|
|
.setCurStamina(getCurStamina())
|
|
.build();
|
|
|
|
EntityAuthorityInfo authority =
|
|
EntityAuthorityInfo.newBuilder()
|
|
.setAbilityInfo(AbilitySyncStateInfo.newBuilder())
|
|
.setRendererChangedInfo(EntityRendererChangedInfo.newBuilder())
|
|
.setAiInfo(
|
|
SceneEntityAiInfo.newBuilder()
|
|
.setIsAiOpen(true)
|
|
.setBornPos(getPosition().toProto()))
|
|
.setBornPos(getPosition().toProto())
|
|
.build();
|
|
|
|
SceneGadgetInfo.Builder gadgetInfo =
|
|
SceneGadgetInfo.newBuilder()
|
|
.setGadgetId(this.getGadgetId())
|
|
.setAuthorityPeerId(this.getOwner().getPeerId())
|
|
.setIsEnableInteract(true)
|
|
.setVehicleInfo(vehicle);
|
|
|
|
SceneEntityInfo.Builder entityInfo =
|
|
SceneEntityInfo.newBuilder()
|
|
.setEntityId(getId())
|
|
.setEntityType(ProtEntityType.PROT_ENTITY_TYPE_GADGET)
|
|
.setMotionInfo(
|
|
MotionInfo.newBuilder()
|
|
.setPos(getPosition().toProto())
|
|
.setRot(getRotation().toProto())
|
|
.setSpeed(Vector.newBuilder()))
|
|
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
|
.setGadget(gadgetInfo)
|
|
.setEntityAuthorityInfo(authority)
|
|
.setLifeState(1);
|
|
|
|
PropPair pair =
|
|
PropPair.newBuilder()
|
|
.setType(PlayerProperty.PROP_LEVEL.getId())
|
|
.setPropValue(ProtoHelper.newPropValue(PlayerProperty.PROP_LEVEL, 47))
|
|
.build();
|
|
|
|
this.addAllFightPropsToEntityInfo(entityInfo);
|
|
entityInfo.addPropList(pair);
|
|
|
|
return entityInfo.build();
|
|
}
|
|
|
|
@Override
|
|
public void initAbilities() {
|
|
// TODO Auto-generated method stub
|
|
throw new UnsupportedOperationException("Unimplemented method 'initAbilities'");
|
|
}
|
|
}
|