feat: support multiplayer mode in teapot (#2317)

This commit is contained in:
hamusuke
2023-08-30 10:12:21 +09:00
committed by GitHub
Unverified
parent 667008ecf1
commit 8563d4b574
51 changed files with 1740 additions and 844 deletions
@@ -6,6 +6,7 @@ import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeMarkPointNotifyOuterClass;
import emu.grasscutter.net.proto.HomeMarkPointSceneDataOuterClass;
import java.util.Collection;
public class PacketHomeMarkPointNotify extends BasePacket {
@@ -14,28 +15,32 @@ public class PacketHomeMarkPointNotify extends BasePacket {
super(PacketOpcodes.HomeMarkPointNotify);
var proto = HomeMarkPointNotifyOuterClass.HomeMarkPointNotify.newBuilder();
var owner = player.getCurHomeWorld().getHost();
var home = player.getCurHomeWorld().getHome();
if (player.getRealmList() == null) {
if (owner.getRealmList() == null) {
return;
}
for (var moduleId : player.getRealmList()) {
var homeScene = player.getHome().getHomeSceneItem(moduleId + 2000);
for (var moduleId : owner.getRealmList()) {
var homeScene = home.getHomeSceneItem(moduleId + 2000);
var markPointData =
HomeMarkPointSceneDataOuterClass.HomeMarkPointSceneData.newBuilder()
.setModuleId(moduleId)
.setSceneId(moduleId + 2000)
.setTeapotSpiritPos(homeScene.getDjinnPos().toProto());
HomeMarkPointSceneDataOuterClass.HomeMarkPointSceneData.newBuilder()
.setModuleId(moduleId)
.setSceneId(moduleId + 2000)
.setSafePointPos(homeScene.getBornPos().toProto())
.setTeapotSpiritPos(homeScene.getDjinnPos().toProto());
// Now it only supports the teleport point
// TODO add more types
var marks =
homeScene.getBlockItems().values().stream()
.map(HomeBlockItem::getDeployFurnitureList)
.flatMap(Collection::stream)
.filter(i -> i.getFurnitureId() == 373501)
.map(x -> x.toMarkPointProto(3))
.toList();
homeScene.getBlockItems().values().stream()
.map(HomeBlockItem::getDeployFurnitureList)
.flatMap(Collection::stream)
.filter(i -> i.getFurnitureId() == 373501)
.map(x -> x.toMarkPointProto(3))
.toList();
markPointData.addAllFurnitureList(marks);
proto.addMarkPointDataList(markPointData);