mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2026-05-28 10:19:49 +08:00
feat: implement teapot suite (#2344)
* feat: implement teapot suite * fix: home animals, check respawn, etc * fix: NPE and cancel summon events * fix: forgot to send eventId also
This commit is contained in:
committed by
GitHub
Unverified
parent
83602f78ae
commit
fc42f665a7
@@ -8,33 +8,57 @@ import emu.grasscutter.game.world.World;
|
||||
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 emu.grasscutter.server.packet.send.PacketDelTeamEntityNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketPlayerChatNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketPlayerGameTimeNotify;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class HomeWorld extends World {
|
||||
@Getter private final GameHome home;
|
||||
@Getter private HomeModuleManager moduleManager;
|
||||
|
||||
public HomeWorld(GameServer server, Player owner) {
|
||||
super(server, owner);
|
||||
|
||||
this.home = owner.isOnline() ? owner.getHome() : GameHome.getByUid(owner.getUid());
|
||||
server.registerHomeWorld(this);
|
||||
this.refreshModuleManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerScene(Scene scene) {
|
||||
this.addAnimalsToScene((HomeScene) scene);
|
||||
super.registerScene(scene);
|
||||
public boolean onTick() {
|
||||
this.moduleManager.tick();
|
||||
|
||||
if (this.getTickCount() % 10 == 0) {
|
||||
this.getPlayers().forEach(p -> p.sendPacket(new PacketPlayerGameTimeNotify(p)));
|
||||
}
|
||||
|
||||
if (this.isInHome(this.getHost()) && this.getTickCount() % 60 == 0) {
|
||||
this.getHost().updatePlayerGameTime(this.getCurrentWorldTime());
|
||||
}
|
||||
|
||||
this.tickCount++;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deregisterScene(Scene scene) {
|
||||
super.deregisterScene(scene);
|
||||
public void refreshModuleManager() {
|
||||
if (this.moduleManager != null) {
|
||||
this.moduleManager.onRemovedModule();
|
||||
}
|
||||
|
||||
this.moduleManager = new HomeModuleManager(this);
|
||||
this.moduleManager.onSetModule();
|
||||
}
|
||||
|
||||
private void addAnimalsToScene(HomeScene scene) {
|
||||
scene.getSceneItem().getAnimals(scene).forEach(scene::addEntity);
|
||||
public int getActiveOutdoorSceneId() {
|
||||
return this.getHost().getCurrentRealmId() + 2000;
|
||||
}
|
||||
|
||||
public int getActiveIndoorSceneId() {
|
||||
return this.getSceneById(this.getActiveOutdoorSceneId()).getSceneItem().getRoomSceneId();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -188,6 +212,12 @@ public class HomeWorld extends World {
|
||||
return this.getPlayers().contains(player);
|
||||
}
|
||||
|
||||
public void ifHost(Player hostOrGuest, Consumer<Player> ifHost) {
|
||||
if (this.getHost().equals(hostOrGuest)) {
|
||||
ifHost.accept(hostOrGuest);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPacketToHostIfOnline(BasePacket basePacket) {
|
||||
if (this.getHost().isOnline()) {
|
||||
this.getHost().sendPacket(basePacket);
|
||||
|
||||
Reference in New Issue
Block a user