Format code [skip actions]

This commit is contained in:
github-actions
2023-09-02 00:33:12 +00:00
parent 0db69882a3
commit 717a358636
584 changed files with 1252 additions and 1507 deletions

View File

@@ -11,34 +11,36 @@ import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.SceneType;
import emu.grasscutter.server.packet.send.*;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.FieldDefaults;
@Entity(value = "homes", useDiscriminator = false)
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@Builder(builderMethodName = "of")
public class GameHome {
public static final Set<Integer> HOME_SCENE_IDS = GameData.getSceneDataMap().values().stream()
.filter(sceneData -> sceneData.getSceneType() == SceneType.SCENE_HOME_WORLD || sceneData.getSceneType() == SceneType.SCENE_HOME_ROOM)
.map(SceneData::getId).collect(Collectors.toUnmodifiableSet());
public static final Set<Integer> HOME_SCENE_IDS =
GameData.getSceneDataMap().values().stream()
.filter(
sceneData ->
sceneData.getSceneType() == SceneType.SCENE_HOME_WORLD
|| sceneData.getSceneType() == SceneType.SCENE_HOME_ROOM)
.map(SceneData::getId)
.collect(Collectors.toUnmodifiableSet());
@Id
String id;
@Id String id;
@Indexed(options = @IndexOptions(unique = true))
long ownerUid;
@Transient
Player player;
@Transient Player player;
int level;
int exp;
@@ -65,11 +67,11 @@ public class GameHome {
public static GameHome create(Integer uid) {
return GameHome.of()
.ownerUid(uid)
.level(1)
.sceneMap(new ConcurrentHashMap<>())
.unlockedHomeBgmList(new HashSet<>())
.build();
.ownerUid(uid)
.level(1)
.sceneMap(new ConcurrentHashMap<>())
.unlockedHomeBgmList(new HashSet<>())
.build();
}
public void save() {
@@ -78,19 +80,19 @@ public class GameHome {
public HomeSceneItem getHomeSceneItem(int sceneId) {
return sceneMap.computeIfAbsent(
sceneId,
e -> {
var defaultItem = GameData.getHomeworldDefaultSaveData().get(sceneId);
if (defaultItem != null) {
Grasscutter.getLogger()
.info("Set player {} home {} to initial setting", ownerUid, sceneId);
return HomeSceneItem.parseFrom(defaultItem, sceneId);
} else {
// Realm res missing bricks account, use default realm data to allow main house
defaultItem = GameData.getHomeworldDefaultSaveData().get(2001);
return HomeSceneItem.parseFrom(defaultItem, sceneId);
}
});
sceneId,
e -> {
var defaultItem = GameData.getHomeworldDefaultSaveData().get(sceneId);
if (defaultItem != null) {
Grasscutter.getLogger()
.info("Set player {} home {} to initial setting", ownerUid, sceneId);
return HomeSceneItem.parseFrom(defaultItem, sceneId);
} else {
// Realm res missing bricks account, use default realm data to allow main house
defaultItem = GameData.getHomeworldDefaultSaveData().get(2001);
return HomeSceneItem.parseFrom(defaultItem, sceneId);
}
});
}
public void onOwnerLogin(Player player) {
@@ -107,16 +109,17 @@ public class GameHome {
public void onPlayerChangedAvatarCostume(Avatar avatar) {
var world = this.player.getServer().getHomeWorldOrCreate(this.player);
world.broadcastPacket(new PacketHomeAvatarCostumeChangeNotify(avatar.getAvatarId(), avatar.getCostume()));
world.broadcastPacket(
new PacketHomeAvatarCostumeChangeNotify(avatar.getAvatarId(), avatar.getCostume()));
this.sceneMap.values().stream()
.map(HomeSceneItem::getBlockItems)
.map(Map::values)
.flatMap(Collection::stream)
.map(HomeBlockItem::getDeployNPCList)
.flatMap(Collection::stream)
.filter(homeNPCItem -> homeNPCItem.getAvatarId() == avatar.getAvatarId())
.forEach(homeNPCItem -> homeNPCItem.setCostumeId(avatar.getCostume()));
.map(HomeSceneItem::getBlockItems)
.map(Map::values)
.flatMap(Collection::stream)
.map(HomeBlockItem::getDeployNPCList)
.flatMap(Collection::stream)
.filter(homeNPCItem -> homeNPCItem.getAvatarId() == avatar.getAvatarId())
.forEach(homeNPCItem -> homeNPCItem.setCostumeId(avatar.getCostume()));
this.save();
@@ -162,9 +165,9 @@ public class GameHome {
private Set<Integer> getDefaultUnlockedHomeBgmIds() {
return GameData.getHomeWorldBgmDataMap().int2ObjectEntrySet().stream()
.filter(e -> e.getValue().isDefaultUnlock())
.map(Int2ObjectMap.Entry::getIntKey)
.collect(Collectors.toUnmodifiableSet());
.filter(e -> e.getValue().isDefaultUnlock())
.map(Int2ObjectMap.Entry::getIntKey)
.collect(Collectors.toUnmodifiableSet());
}
// Same as Player.java addExpDirectly
@@ -203,7 +206,7 @@ public class GameHome {
// Ensure next update is at top of the hour
nextUpdateTime =
(int) ZonedDateTime.now().plusHours(1).truncatedTo(ChronoUnit.HOURS).toEpochSecond();
(int) ZonedDateTime.now().plusHours(1).truncatedTo(ChronoUnit.HOURS).toEpochSecond();
// Get resources
var hourlyResources = getComfortResources(player);
@@ -226,42 +229,42 @@ public class GameHome {
// Outdoors avatars
sceneMap
.get(player.getCurrentRealmId() + 2000)
.getBlockItems()
.forEach(
(i, e) -> {
e.getDeployNPCList()
.forEach(
id -> {
invitedAvatars.add(id.getAvatarId());
});
});
.get(player.getCurrentRealmId() + 2000)
.getBlockItems()
.forEach(
(i, e) -> {
e.getDeployNPCList()
.forEach(
id -> {
invitedAvatars.add(id.getAvatarId());
});
});
// Check as realm 5 inside is not in defaults and will be null
if (Objects.nonNull(sceneMap.get(player.getCurrentRealmId() + 2200))) {
// Indoors avatars
sceneMap
.get(player.getCurrentRealmId() + 2200)
.getBlockItems()
.forEach(
(i, e) -> {
e.getDeployNPCList()
.forEach(
id -> {
invitedAvatars.add(id.getAvatarId());
});
});
.get(player.getCurrentRealmId() + 2200)
.getBlockItems()
.forEach(
(i, e) -> {
e.getDeployNPCList()
.forEach(
id -> {
invitedAvatars.add(id.getAvatarId());
});
});
}
// Add exp to all avatars
invitedAvatars.forEach(
id -> {
var avatar = player.getAvatars().getAvatarById(id);
player
.getServer()
.getInventorySystem()
.upgradeAvatarFetterLevel(player, avatar, storedFetterExp);
});
id -> {
var avatar = player.getAvatars().getAvatarById(id);
player
.getServer()
.getInventorySystem()
.upgradeAvatarFetterLevel(player, avatar, storedFetterExp);
});
storedFetterExp = 0;
save();
@@ -285,7 +288,7 @@ public class GameHome {
storeResources(player, 0, 0);
lastUpdatedTime = clientTime;
nextUpdateTime =
(int) ZonedDateTime.now().plusHours(1).truncatedTo(ChronoUnit.HOURS).toEpochSecond();
(int) ZonedDateTime.now().plusHours(1).truncatedTo(ChronoUnit.HOURS).toEpochSecond();
save();
// Send packet

View File

@@ -3,11 +3,10 @@ package emu.grasscutter.game.home;
import dev.morphia.annotations.*;
import emu.grasscutter.data.binout.HomeworldDefaultSaveData;
import emu.grasscutter.net.proto.HomeBlockArrangementInfoOuterClass.HomeBlockArrangementInfo;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.*;
import java.util.stream.Stream;
import lombok.*;
import lombok.experimental.FieldDefaults;
@Entity
@Data
@@ -90,7 +89,9 @@ public class HomeBlockItem {
public List<? extends HomeMarkPointProtoFactory> getMarkPointProtoFactories() {
this.reassignIfNull();
return Stream.of(this.deployFurnitureList, this.persistentFurnitureList, this.deployNPCList).flatMap(Collection::stream).toList();
return Stream.of(this.deployFurnitureList, this.persistentFurnitureList, this.deployNPCList)
.flatMap(Collection::stream)
.toList();
}
public void reassignIfNull() {

View File

@@ -6,13 +6,12 @@ import emu.grasscutter.data.binout.HomeworldDefaultSaveData;
import emu.grasscutter.data.excels.ItemData;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.net.proto.*;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.*;
import lombok.experimental.FieldDefaults;
import org.jetbrains.annotations.Nullable;
import java.util.Set;
import java.util.stream.Collectors;
@Entity
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
@@ -20,11 +19,11 @@ import java.util.stream.Collectors;
public class HomeFurnitureItem implements HomeMarkPointProtoFactory {
public static final int PAIMON_FURNITURE_ID = 368134;
public static final int TELEPORT_FURNITURE_ID = 373501;
public static final Set<Integer> APARTMENT_FURNITURE_ID_SET = GameData.getItemDataMap().values()
.stream()
.filter(itemData -> itemData.getSpecialFurnitureType() == SpecialFurnitureType.Apartment)
.map(ItemData::getId)
.collect(Collectors.toUnmodifiableSet());
public static final Set<Integer> APARTMENT_FURNITURE_ID_SET =
GameData.getItemDataMap().values().stream()
.filter(itemData -> itemData.getSpecialFurnitureType() == SpecialFurnitureType.Apartment)
.map(ItemData::getId)
.collect(Collectors.toUnmodifiableSet());
int furnitureId;
int guid;
@@ -78,8 +77,7 @@ public class HomeFurnitureItem implements HomeMarkPointProtoFactory {
return item.getComfort();
}
@Nullable
@Override
@Nullable @Override
public HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData toMarkPointProto() {
var type = this.adjustByFurnitureId();
if (type == SpecialFurnitureType.NOT_SPECIAL) {
@@ -87,11 +85,11 @@ public class HomeFurnitureItem implements HomeMarkPointProtoFactory {
}
return HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData.newBuilder()
.setFurnitureId(this.furnitureId)
.setFurnitureType(type.getValue())
.setPos(this.spawnPos.toProto())
.setGuid(this.guid)
.build();
.setFurnitureId(this.furnitureId)
.setFurnitureType(type.getValue())
.setPos(this.spawnPos.toProto())
.setGuid(this.guid)
.build();
}
@Override
@@ -99,7 +97,9 @@ public class HomeFurnitureItem implements HomeMarkPointProtoFactory {
return switch (this.furnitureId) {
case PAIMON_FURNITURE_ID -> SpecialFurnitureType.Paimon;
case TELEPORT_FURNITURE_ID -> SpecialFurnitureType.TeleportPoint;
default -> APARTMENT_FURNITURE_ID_SET.contains(this.furnitureId) ? SpecialFurnitureType.Apartment : SpecialFurnitureType.NOT_SPECIAL;
default -> APARTMENT_FURNITURE_ID_SET.contains(this.furnitureId)
? SpecialFurnitureType.Apartment
: SpecialFurnitureType.NOT_SPECIAL;
};
}
}

View File

@@ -4,8 +4,7 @@ import emu.grasscutter.net.proto.HomeMarkPointFurnitureDataOuterClass;
import org.jetbrains.annotations.Nullable;
public interface HomeMarkPointProtoFactory {
@Nullable
HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData toMarkPointProto();
@Nullable HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData toMarkPointProto();
default SpecialFurnitureType adjustByFurnitureId() {
return this.getType();

View File

@@ -25,19 +25,19 @@ public class HomeNPCItem implements HomeMarkPointProtoFactory {
public static HomeNPCItem parseFrom(HomeNpcDataOuterClass.HomeNpcData homeNpcData) {
return HomeNPCItem.of()
.avatarId(homeNpcData.getAvatarId())
.spawnPos(new Position(homeNpcData.getSpawnPos()))
.spawnRot(new Position(homeNpcData.getSpawnRot()))
.build();
.avatarId(homeNpcData.getAvatarId())
.spawnPos(new Position(homeNpcData.getSpawnPos()))
.spawnRot(new Position(homeNpcData.getSpawnRot()))
.build();
}
public HomeNpcDataOuterClass.HomeNpcData toProto() {
return HomeNpcDataOuterClass.HomeNpcData.newBuilder()
.setAvatarId(avatarId)
.setSpawnPos(spawnPos.toProto())
.setSpawnRot(spawnRot.toProto())
.setCostumeId(costumeId)
.build();
.setAvatarId(avatarId)
.setSpawnPos(spawnPos.toProto())
.setSpawnRot(spawnRot.toProto())
.setCostumeId(costumeId)
.build();
}
public int getFurnitureId() {
@@ -49,18 +49,18 @@ public class HomeNPCItem implements HomeMarkPointProtoFactory {
return this.furnitureId;
}
@Nullable
@Override
@Nullable @Override
public HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData toMarkPointProto() {
return HomeMarkPointFurnitureDataOuterClass.HomeMarkPointFurnitureData.newBuilder()
.setFurnitureId(this.getFurnitureId())
.setFurnitureType(this.getType().getValue())
.setPos(this.spawnPos.toProto())
.setNpcData(HomeMarkPointNPCDataOuterClass.HomeMarkPointNPCData.newBuilder()
.setAvatarId(this.avatarId)
.setCostumeId(this.costumeId)
.build())
.build();
.setFurnitureId(this.getFurnitureId())
.setFurnitureType(this.getType().getValue())
.setPos(this.spawnPos.toProto())
.setNpcData(
HomeMarkPointNPCDataOuterClass.HomeMarkPointNPCData.newBuilder()
.setAvatarId(this.avatarId)
.setCostumeId(this.costumeId)
.build())
.build();
}
@Override

View File

@@ -5,11 +5,10 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.binout.HomeworldDefaultSaveData;
import emu.grasscutter.game.world.Position;
import emu.grasscutter.net.proto.HomeSceneArrangementInfoOuterClass.HomeSceneArrangementInfo;
import lombok.*;
import lombok.experimental.FieldDefaults;
import java.util.Map;
import java.util.stream.Collectors;
import lombok.*;
import lombok.experimental.FieldDefaults;
@Entity
@Data

View File

@@ -7,13 +7,11 @@ import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.proto.ChatInfoOuterClass;
import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.packet.send.*;
import java.util.List;
import lombok.Getter;
import java.util.List;
public class HomeWorld extends World {
@Getter
private final GameHome home;
@Getter private final GameHome home;
public HomeWorld(GameServer server, Player owner) {
super(server, owner);
@@ -51,21 +49,23 @@ public class HomeWorld extends World {
// Copy main team to multiplayer team
if (this.isMultiplayer()) {
player
.getTeamManager()
.getMpTeam()
.copyFrom(
player.getTeamManager().getCurrentSinglePlayerTeamInfo(),
player.getTeamManager().getMaxTeamSize());
.getTeamManager()
.getMpTeam()
.copyFrom(
player.getTeamManager().getCurrentSinglePlayerTeamInfo(),
player.getTeamManager().getMaxTeamSize());
player.getTeamManager().setCurrentCharacterIndex(0);
if (!player.equals(this.getHost())) {
this.broadcastPacket(
new PacketPlayerChatNotify(
player,
0,
ChatInfoOuterClass.ChatInfo.SystemHint.newBuilder()
.setType(ChatInfoOuterClass.ChatInfo.SystemHintType.SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD.getNumber())
.build()));
new PacketPlayerChatNotify(
player,
0,
ChatInfoOuterClass.ChatInfo.SystemHint.newBuilder()
.setType(
ChatInfoOuterClass.ChatInfo.SystemHintType.SYSTEM_HINT_TYPE_CHAT_ENTER_WORLD
.getNumber())
.build()));
}
}
@@ -83,15 +83,15 @@ public class HomeWorld extends World {
public synchronized void removePlayer(Player player) {
// Remove team entities
this.broadcastPacket(
new PacketDelTeamEntityNotify(
player.getSceneId(),
this.getPlayers().stream()
.map(
p ->
p.getTeamManager().getEntity() == null
? 0
: p.getTeamManager().getEntity().getId())
.toList()));
new PacketDelTeamEntityNotify(
player.getSceneId(),
this.getPlayers().stream()
.map(
p ->
p.getTeamManager().getEntity() == null
? 0
: p.getTeamManager().getEntity().getId())
.toList()));
// Deregister
this.getPlayers().remove(player);
@@ -107,12 +107,14 @@ public class HomeWorld extends World {
}
this.broadcastPacket(
new PacketPlayerChatNotify(
player,
0,
ChatInfoOuterClass.ChatInfo.SystemHint.newBuilder()
.setType(ChatInfoOuterClass.ChatInfo.SystemHintType.SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD.getNumber())
.build()));
new PacketPlayerChatNotify(
player,
0,
ChatInfoOuterClass.ChatInfo.SystemHint.newBuilder()
.setType(
ChatInfoOuterClass.ChatInfo.SystemHintType.SYSTEM_HINT_TYPE_CHAT_LEAVE_WORLD
.getNumber())
.build()));
}
@Override

View File

@@ -17,13 +17,25 @@ public class HomeWorldMPSystem extends BaseGameSystem {
public void sendEnterHomeRequest(Player requester, int ownerUid) {
var owner = getServer().getPlayerByUid(ownerUid);
if (owner == null) {
requester.sendPacket(new PacketPlayerApplyEnterHomeResultNotify(ownerUid, "", false, PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason.OPEN_STATE_NOT_OPEN));
requester.sendPacket(
new PacketPlayerApplyEnterHomeResultNotify(
ownerUid,
"",
false,
PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason
.OPEN_STATE_NOT_OPEN));
requester.sendPacket(new PacketTryEnterHomeRsp());
return;
}
if (owner.getRealmList() == null) {
requester.sendPacket(new PacketPlayerApplyEnterHomeResultNotify(ownerUid, "", false, PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason.OPEN_STATE_NOT_OPEN));
requester.sendPacket(
new PacketPlayerApplyEnterHomeResultNotify(
ownerUid,
"",
false,
PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason
.OPEN_STATE_NOT_OPEN));
requester.sendPacket(new PacketTryEnterHomeRsp());
return;
}
@@ -35,7 +47,13 @@ public class HomeWorldMPSystem extends BaseGameSystem {
}
if (owner.isInEditMode()) {
requester.sendPacket(new PacketPlayerApplyEnterHomeResultNotify(ownerUid, owner.getNickname(), false, PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason.HOST_IN_EDIT_MODE));
requester.sendPacket(
new PacketPlayerApplyEnterHomeResultNotify(
ownerUid,
owner.getNickname(),
false,
PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason
.HOST_IN_EDIT_MODE));
requester.sendPacket(new PacketTryEnterHomeRsp());
return;
}
@@ -56,12 +74,24 @@ public class HomeWorldMPSystem extends BaseGameSystem {
owner.getEnterHomeRequests().remove(requesterUid);
if (requester.getWorld().isMultiplayer()) {
requester.sendPacket(new PacketPlayerApplyEnterHomeResultNotify(owner.getUid(), owner.getNickname(), false, PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason.SYSTEM_JUDGE));
requester.sendPacket(
new PacketPlayerApplyEnterHomeResultNotify(
owner.getUid(),
owner.getNickname(),
false,
PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason
.SYSTEM_JUDGE));
requester.sendPacket(new PacketTryEnterHomeRsp());
return;
}
requester.sendPacket(new PacketPlayerApplyEnterHomeResultNotify(owner.getUid(), owner.getNickname(), isAgreed, PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason.PLAYER_JUDGE));
requester.sendPacket(
new PacketPlayerApplyEnterHomeResultNotify(
owner.getUid(),
owner.getNickname(),
isAgreed,
PlayerApplyEnterHomeResultNotifyOuterClass.PlayerApplyEnterHomeResultNotify.Reason
.PLAYER_JUDGE));
if (!isAgreed) {
requester.sendPacket(new PacketTryEnterHomeRsp());
@@ -78,7 +108,9 @@ public class HomeWorldMPSystem extends BaseGameSystem {
if (owner.getRealmList() == null) {
// should never happen
requester.sendPacket(new PacketTryEnterHomeRsp(RetcodeOuterClass.Retcode.RET_HOME_NOT_FOUND_IN_MEM_VALUE, owner.getUid()));
requester.sendPacket(
new PacketTryEnterHomeRsp(
RetcodeOuterClass.Retcode.RET_HOME_NOT_FOUND_IN_MEM_VALUE, owner.getUid()));
return;
}
@@ -88,12 +120,16 @@ public class HomeWorldMPSystem extends BaseGameSystem {
var event = new PlayerEnterHomeEvent(requester, owner, targetHome);
event.call();
if (event.isCanceled()) {
requester.sendPacket(new PacketTryEnterHomeRsp(RetcodeOuterClass.Retcode.RET_HOME_OWNER_REFUSE_TO_ENTER_HOME_VALUE, owner.getUid()));
requester.sendPacket(
new PacketTryEnterHomeRsp(
RetcodeOuterClass.Retcode.RET_HOME_OWNER_REFUSE_TO_ENTER_HOME_VALUE, owner.getUid()));
return;
}
if (owner.isInEditMode()) {
requester.sendPacket(new PacketTryEnterHomeRsp(RetcodeOuterClass.Retcode.RET_HOME_CANT_ENTER_BY_IN_EDIT_MODE_VALUE, owner.getUid()));
requester.sendPacket(
new PacketTryEnterHomeRsp(
RetcodeOuterClass.Retcode.RET_HOME_CANT_ENTER_BY_IN_EDIT_MODE_VALUE, owner.getUid()));
return;
}
@@ -109,13 +145,23 @@ public class HomeWorldMPSystem extends BaseGameSystem {
requester.setSceneId(realmId);
requester.getPosition().set(pos);
requester.sendPacket(new PacketPlayerEnterSceneNotify(requester, owner.getUid(), TeleportProperties.builder().sceneId(realmId).enterReason(EnterReason.EnterHome).teleportTo(pos).teleportType(PlayerTeleportEvent.TeleportType.INTERNAL).build(), !requester.equals(owner)));
requester.sendPacket(
new PacketPlayerEnterSceneNotify(
requester,
owner.getUid(),
TeleportProperties.builder()
.sceneId(realmId)
.enterReason(EnterReason.EnterHome)
.teleportTo(pos)
.teleportType(PlayerTeleportEvent.TeleportType.INTERNAL)
.build(),
!requester.equals(owner)));
requester.sendPacket(new PacketTryEnterHomeRsp(owner.getUid()));
requester.setHasSentInitPacketInHome(false);
world.getPlayers().stream()
.filter(player -> !player.equals(requester))
.forEach(player -> player.sendPacket(new PacketPlayerPreEnterMpNotify(requester)));
.filter(player -> !player.equals(requester))
.forEach(player -> player.sendPacket(new PacketPlayerPreEnterMpNotify(requester)));
}
public boolean leaveCoop(Player player, int prevScene) {
@@ -131,17 +177,32 @@ public class HomeWorldMPSystem extends BaseGameSystem {
}
// Event
var event = new PlayerLeaveHomeEvent(player, player.getCurHomeWorld().getHost(), player.getCurHomeWorld().getHome(), PlayerLeaveHomeEvent.Reason.PLAYER_LEAVE);
var event =
new PlayerLeaveHomeEvent(
player,
player.getCurHomeWorld().getHost(),
player.getCurHomeWorld().getHome(),
PlayerLeaveHomeEvent.Reason.PLAYER_LEAVE);
event.call();
player.getPosition().set(pos);
var world = new World(player);
world.addPlayer(player, prevScene);
player.getCurHomeWorld().sendPacketToHostIfOnline(new PacketOtherPlayerEnterOrLeaveHomeNotify(player, OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.LEAVE));
player
.getCurHomeWorld()
.sendPacketToHostIfOnline(
new PacketOtherPlayerEnterOrLeaveHomeNotify(
player,
OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.LEAVE));
player.setCurHomeWorld(this.server.getHomeWorldOrCreate(player));
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterTypeOuterClass.EnterType.ENTER_TYPE_BACK, EnterReason.TeamBack, prevScene, pos));
player.sendPacket(
new PacketPlayerEnterSceneNotify(
player,
EnterTypeOuterClass.EnterType.ENTER_TYPE_BACK,
EnterReason.TeamBack,
prevScene,
pos));
return true;
}
@@ -164,17 +225,30 @@ public class HomeWorldMPSystem extends BaseGameSystem {
}
// Event
var event = new PlayerLeaveHomeEvent(victim, owner, victim.getCurHomeWorld().getHome(), PlayerLeaveHomeEvent.Reason.KICKED);
var event =
new PlayerLeaveHomeEvent(
victim, owner, victim.getCurHomeWorld().getHome(), PlayerLeaveHomeEvent.Reason.KICKED);
event.call();
// Kick
victim.getPosition().set(victim.getPrevPosForHome());
var world = new World(victim);
world.addPlayer(victim, 3);
victim.getCurHomeWorld().sendPacketToHostIfOnline(new PacketOtherPlayerEnterOrLeaveHomeNotify(victim, OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.LEAVE));
victim
.getCurHomeWorld()
.sendPacketToHostIfOnline(
new PacketOtherPlayerEnterOrLeaveHomeNotify(
victim,
OtherPlayerEnterHomeNotifyOuterClass.OtherPlayerEnterHomeNotify.Reason.LEAVE));
victim.setCurHomeWorld(this.server.getHomeWorldOrCreate(victim));
victim.sendPacket(new PacketPlayerEnterSceneNotify(victim, EnterTypeOuterClass.EnterType.ENTER_TYPE_BACK, EnterReason.TeamKick, victim.getScene().getId(), victim.getPrevPosForHome()));
victim.sendPacket(
new PacketPlayerEnterSceneNotify(
victim,
EnterTypeOuterClass.EnterType.ENTER_TYPE_BACK,
EnterReason.TeamKick,
victim.getScene().getId(),
victim.getPrevPosForHome()));
return true;
}
}