mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-21 02:39:49 +08:00
Limit the amount of vehicles that a player can spawn (#340)
This commit is contained in:
committed by
GitHub
Unverified
parent
cacba61b79
commit
69381f393d
@@ -8,10 +8,16 @@ import emu.grasscutter.game.entity.GameEntity;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
|
||||
import emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember;
|
||||
import emu.grasscutter.net.proto.VehicleSpawnRspOuterClass.VehicleSpawnRsp;
|
||||
|
||||
import emu.grasscutter.utils.Position;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
import static emu.grasscutter.net.proto.VehicleInteractTypeOuterClass.VehicleInteractType.VEHICLE_INTERACT_OUT;
|
||||
|
||||
public class PacketVehicleSpawnRsp extends BasePacket {
|
||||
|
||||
@@ -19,6 +25,23 @@ public class PacketVehicleSpawnRsp extends BasePacket {
|
||||
super(PacketOpcodes.VehicleSpawnRsp);
|
||||
VehicleSpawnRsp.Builder proto = VehicleSpawnRsp.newBuilder();
|
||||
|
||||
// Eject vehicle members and Kill previous vehicles if there are any
|
||||
List<GameEntity> previousVehicles = player.getScene().getEntities().values().stream()
|
||||
.filter(entity -> entity instanceof EntityVehicle
|
||||
&& ((EntityVehicle) entity).getGadgetId() == vehicleId
|
||||
&& ((EntityVehicle) entity).getOwner().equals(player))
|
||||
.toList();
|
||||
|
||||
previousVehicles.stream().forEach(entity -> {
|
||||
List<VehicleMember> vehicleMembers = ((EntityVehicle) entity).getVehicleMembers().stream().toList();
|
||||
|
||||
vehicleMembers.stream().forEach(vehicleMember -> {
|
||||
player.getScene().broadcastPacket(new PacketVehicleInteractRsp(((EntityVehicle) entity), vehicleMember, VEHICLE_INTERACT_OUT));
|
||||
});
|
||||
|
||||
player.getScene().killEntity(entity, 0);
|
||||
});
|
||||
|
||||
EntityVehicle vehicle = new EntityVehicle(player.getScene(), player, vehicleId, pointId, pos, rot);
|
||||
|
||||
switch (vehicleId) {
|
||||
|
||||
Reference in New Issue
Block a user