mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-30 11:49:24 +00:00
Send periodic notifications to the client for ongoing forges.
This commit is contained in:
parent
36e7e028f7
commit
e30516d698
@ -11,11 +11,9 @@ public class ActiveForgeData {
|
|||||||
|
|
||||||
private int startTime;
|
private int startTime;
|
||||||
private int forgeTime;
|
private int forgeTime;
|
||||||
// private int finishedCount;
|
|
||||||
// private int unfinishedCount;
|
|
||||||
// private int nextFinishTimestamp;
|
|
||||||
// private int totalFinishTimestamp;
|
|
||||||
|
|
||||||
|
private int lastUnfinishedCount;
|
||||||
|
private boolean changed;
|
||||||
|
|
||||||
public int getFinishedCount(int currentTime) {
|
public int getFinishedCount(int currentTime) {
|
||||||
int timeDelta = currentTime - this.startTime;
|
int timeDelta = currentTime - this.startTime;
|
||||||
@ -73,4 +71,22 @@ public class ActiveForgeData {
|
|||||||
public void setForgeTime(int value) {
|
public void setForgeTime(int value) {
|
||||||
this.forgeTime = value;
|
this.forgeTime = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isChanged() {
|
||||||
|
return this.changed;
|
||||||
|
}
|
||||||
|
public void setChanged(boolean value) {
|
||||||
|
this.changed = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean updateChanged(int currentTime) {
|
||||||
|
int currentUnfinished = this.getUnfinishedCount(currentTime);
|
||||||
|
|
||||||
|
if (currentUnfinished != this.lastUnfinishedCount) {
|
||||||
|
this.changed = true;
|
||||||
|
this.lastUnfinishedCount = currentUnfinished;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.changed;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.mongodb.QueryBuilder;
|
||||||
|
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
import emu.grasscutter.data.GameData;
|
import emu.grasscutter.data.GameData;
|
||||||
import emu.grasscutter.data.common.ItemParamData;
|
import emu.grasscutter.data.common.ItemParamData;
|
||||||
@ -289,4 +291,34 @@ public class ForgingManager {
|
|||||||
break; //Should never happen.
|
break; //Should never happen.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********
|
||||||
|
Periodic forging updates.
|
||||||
|
**********/
|
||||||
|
public void sendPlayerForgingUpdate() {
|
||||||
|
int currentTime = Utils.getCurrentSeconds();
|
||||||
|
|
||||||
|
// Determine if sending an update is necessary.
|
||||||
|
// We only send an update if there are forges in the forge queue
|
||||||
|
// that have changed since the last notification.
|
||||||
|
if (this.player.getActiveForges().size() <= 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasChanges = this.player.getActiveForges().stream()
|
||||||
|
.filter(forge -> forge.updateChanged(currentTime))
|
||||||
|
.findAny()
|
||||||
|
.isPresent();
|
||||||
|
|
||||||
|
if (!hasChanges) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send notification.
|
||||||
|
this.sendForgeQueueDataNotify();
|
||||||
|
|
||||||
|
// Reset changed flags.
|
||||||
|
this.player.getActiveForges().stream()
|
||||||
|
.forEach(forge -> forge.setChanged(false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1194,6 +1194,9 @@ public class Player {
|
|||||||
this.save();
|
this.save();
|
||||||
this.sendPacket(new PacketAvatarExpeditionDataNotify(this));
|
this.sendPacket(new PacketAvatarExpeditionDataNotify(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send updated forge queue data, if necessary.
|
||||||
|
this.getForgingManager().sendPlayerForgingUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user