1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package kz.ilotterytea.maxon;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.utils.Disposable;
import com.badlogic.gdx.utils.Timer;
import de.jcm.discordgamesdk.Core;
import de.jcm.discordgamesdk.CreateParams;
import de.jcm.discordgamesdk.LogLevel;
import de.jcm.discordgamesdk.activity.Activity;
import kz.ilotterytea.maxon.player.Savegame;
import kz.ilotterytea.maxon.screens.SlotsMinigameScreen;
import kz.ilotterytea.maxon.screens.game.GameScreen;
import kz.ilotterytea.maxon.utils.OsUtils;
import kz.ilotterytea.maxon.utils.formatters.NumberFormatter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.Instant;
public class DiscordActivityClient implements Disposable {
private final Logger logger = LoggerFactory.getLogger(DiscordActivityClient.class.getName());
private Core core;
private Instant startTime;
private Timer.Task task;
public DiscordActivityClient() {
if (!OsUtils.isPC) {
logger.info("Discord Game SDK is only supported for PC devices");
return;
}
startTime = Instant.now();
init();
task = new Timer.Task() {
@Override
public void run() {
if (core == null) {
super.cancel();
return;
}
updateActivity();
core.runCallbacks();
}
};
}
private void init() {
try (CreateParams params = new CreateParams()) {
params.setClientID(MaxonConstants.DISCORD_APPLICATION_ID);
params.setFlags(CreateParams.Flags.DEFAULT);
this.core = new Core(params);
core.setLogHook(LogLevel.ERROR, (level, message) -> System.out.printf("[DISCORD %s] %s\n", level, message));
logger.info("Initialized the Discord RPC");
} catch (Exception e) {
logger.error("Failed to initialize the Discord RPC: {}", e.toString());
}
}
private void updateActivity() {
if (core == null || !core.isDiscordRunning()) return;
try (Activity activity = new Activity()) {
MaxonGame game = MaxonGame.getInstance();
activity.timestamps().setStart(startTime);
Screen screen = game.getScreen();
Savegame savegame = Savegame.getInstance();
String savegameInfo = String.format(
"%s💵 | %sⅹ | %s 🐱",
NumberFormatter.format((long) savegame.getMoney()),
NumberFormatter.format((long) savegame.getMultiplier()),
NumberFormatter.format(savegame.getAllPetAmount())
);
String details, largeImage;
String smallImage = null, smallText = null, largeText = null;
if (screen instanceof GameScreen) {
details = "Petting Maxon";
largeImage = "maxon";
largeText = savegameInfo;
} else if (screen instanceof SlotsMinigameScreen) {
details = "Spinning the slots";
largeImage = "slots";
largeText = String.format("Total spins: %s | Total wins: %s", savegame.getSlotsTotalSpins(), savegame.getSlotsWins());
smallImage = "maxon";
smallText = savegameInfo;
} else {
details = "Sitting in Main Menu";
largeImage = "maxon";
}
activity.setDetails(details);
activity.assets().setLargeImage(largeImage);
if (smallImage != null) activity.assets().setSmallImage(smallImage);
if (smallText != null) activity.assets().setSmallText(smallText);
if (largeText != null) activity.assets().setLargeText(largeText);
core.activityManager().updateActivity(activity);
} catch (Exception e) {
logger.error("Failed to set the activity: {}", e.toString());
}
}
public void runThread() {
if (task != null && !task.isScheduled()) Timer.schedule(task, 0.25f, 0.25f);
}
@Override
public void dispose() {
if (task != null) task.cancel();
if (core != null) core.close();
}
}
|