mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-14 16:04:40 +01:00
Fix javadoc & suppress no comments warning Fix terminal interaction in IDEA Update lombok onMethod to JDK8 version Some code reformat
113 lines
4.9 KiB
Java
113 lines
4.9 KiB
Java
package emu.grasscutter.game.entity;
|
|
|
|
import emu.grasscutter.data.GameData;
|
|
import emu.grasscutter.data.binout.ConfigGadget;
|
|
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.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.Position;
|
|
import emu.grasscutter.utils.ProtoHelper;
|
|
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
|
|
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
|
import lombok.Getter;
|
|
import lombok.Setter;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
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 ConfigGadget 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(ConfigGadget 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();
|
|
}
|
|
}
|