diff options
| author | syeyoung <cyong06@naver.com> | 2021-08-08 22:45:20 +0900 |
|---|---|---|
| committer | syeyoung <cyong06@naver.com> | 2021-08-08 22:45:20 +0900 |
| commit | db58612b03889d5911c99f5b3878b31f9b4f9e92 (patch) | |
| tree | dc11f6af1fa070baba7eb6351052d4f8d95e76ea /src/main/java | |
| parent | eaaac61857654f7f629fa9ada669f40301009e31 (diff) | |
| download | Skyblock-Dungeons-Guide-db58612b03889d5911c99f5b3878b31f9b4f9e92.tar.gz Skyblock-Dungeons-Guide-db58612b03889d5911c99f5b3878b31f9b4f9e92.tar.bz2 Skyblock-Dungeons-Guide-db58612b03889d5911c99f5b3878b31f9b4f9e92.zip | |
- Field Orders
Diffstat (limited to 'src/main/java')
46 files changed, 423 insertions, 78 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/RichPresenceManager.java b/src/main/java/kr/syeyoung/dungeonsguide/RichPresenceManager.java index abecd8a7..08d5a898 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/RichPresenceManager.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/RichPresenceManager.java @@ -18,15 +18,31 @@ package kr.syeyoung.dungeonsguide; +import com.sun.jna.Pointer; +import com.sun.jna.ptr.PointerByReference; import kr.syeyoung.dungeonsguide.dungeon.DungeonContext; import kr.syeyoung.dungeonsguide.events.SkyblockJoinedEvent; import kr.syeyoung.dungeonsguide.events.SkyblockLeftEvent; import kr.syeyoung.dungeonsguide.features.FeatureRegistry; +import kr.syeyoung.dungeonsguide.gamesdk.GameSDK; +import kr.syeyoung.dungeonsguide.gamesdk.jna.NativeGameSDK; +import kr.syeyoung.dungeonsguide.gamesdk.jna.datastruct.*; +import kr.syeyoung.dungeonsguide.gamesdk.jna.enumuration.EDiscordActivityActionType; +import kr.syeyoung.dungeonsguide.gamesdk.jna.enumuration.EDiscordLogLevel; +import kr.syeyoung.dungeonsguide.gamesdk.jna.enumuration.EDiscordResult; +import kr.syeyoung.dungeonsguide.gamesdk.jna.interfacestruct.IDiscordActivityEvents; +import kr.syeyoung.dungeonsguide.gamesdk.jna.interfacestruct.IDiscordActivityManager; +import kr.syeyoung.dungeonsguide.gamesdk.jna.interfacestruct.IDiscordCore; +import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordClientID; +import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordTimestamp; +import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordVersion; +import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.Int32; import kr.syeyoung.dungeonsguide.party.PartyInviteViewer; import kr.syeyoung.dungeonsguide.party.PartyJoinRequest; import kr.syeyoung.dungeonsguide.party.PartyManager; import kr.syeyoung.dungeonsguide.stomp.StompHeader; import kr.syeyoung.dungeonsguide.stomp.StompPayload; +import lombok.Getter; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import org.json.JSONObject; @@ -35,99 +51,135 @@ public class RichPresenceManager implements Runnable { public static RichPresenceManager INSTANCE = new RichPresenceManager(); private Thread t = new Thread(this); - public RichPresenceManager() { t.start(); -// Runtime.getRuntime().addShutdownHook(new Thread(DiscordRPC::discordShutdown)); } - public void setup() { -// DiscordRPC.discordInitialize("816298079732498473", new DiscordEventHandlers.Builder() -// .setReadyEventHandler(new ReadyCallback() { -// @Override -// public void apply(DiscordUser user) { -// updatePresence(); -// } -// }).setJoinRequestEventHandler(request -> { -// PartyJoinRequest partyJoinRequest = new PartyJoinRequest(); -// partyJoinRequest.setDiscordUser(request); -// partyJoinRequest.setExpire(System.currentTimeMillis() + 30000); -// -// PartyInviteViewer.INSTANCE.joinRequests.add(partyJoinRequest); -// }).setJoinGameEventHandler(joinSecret -> { -// DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().method(StompHeader.SEND) -// .header("destination", "/app/party.askedtojoin") -// .payload(new JSONObject().put("token", joinSecret).toString())); -// }).setErroredEventHandler((errorCode, message) -> { -// System.out.println("ERROR! "+errorCode+ " - "+message); -// t.interrupt(); -// (t = new Thread(this)).start(); -// }).setDisconnectedEventHandler((errorCode, message) -> { -// System.out.println("ERROR! "+errorCode+ " - "+message); -// t.interrupt(); -// (t = new Thread(this)).start(); -// }).build(), true); + @Getter + private NativeGameSDK nativeGameSDK; + @Getter + private IDiscordCore iDiscordCore; + private IDiscordActivityManager activityManager; + private IDiscordActivityEvents.ByReference callbacks; + + @Getter + private boolean setupSuccessful = false; + public boolean setup() { + nativeGameSDK = GameSDK.getNativeGameSDK(); + if (nativeGameSDK == null) return false; + DiscordCreateParams discordCreateParams = new DiscordCreateParams(); + discordCreateParams.client_id = new DiscordClientID(816298079732498473L); + + callbacks = new IDiscordActivityEvents.ByReference(); + callbacks.OnActivityInvite = (eventData, type, user, activity) -> { + + }; + callbacks.OnActivityJoin = (eventData, secret) -> DungeonsGuide.getDungeonsGuide().getStompConnection().send(new StompPayload().method(StompHeader.SEND) + .header("destination", "/app/party.askedtojoin") + .payload(new JSONObject().put("token", secret).toString())); + callbacks.OnActivityJoinRequest = (eventData, user) -> { + PartyJoinRequest partyJoinRequest = new PartyJoinRequest(); + partyJoinRequest.setDiscordUser(user); + partyJoinRequest.setExpire(System.currentTimeMillis() + 30000); + + PartyInviteViewer.INSTANCE.joinRequests.add(partyJoinRequest); + }; + callbacks.OnActivitySpectate = (eventData, secret) -> { + + }; + callbacks.write(); + discordCreateParams.activity_events = callbacks; + + PointerByReference pointerByReference = new PointerByReference(); + nativeGameSDK.DiscordCreate(new DiscordVersion(NativeGameSDK.DISCORD_VERSION), discordCreateParams, pointerByReference); + if (pointerByReference.getValue() == Pointer.NULL) return false; + iDiscordCore = new IDiscordCore(pointerByReference.getValue()); + + iDiscordCore.SetLogHook.setLogHook(iDiscordCore, EDiscordLogLevel.DiscordLogLevel_Debug, Pointer.NULL, new IDiscordCore.LogHook() { + @Override + public void hook(Pointer hookData, EDiscordLogLevel level, String message) { + System.out.println(message+" - "+level+" - "+hookData); + } + }); + + activityManager = iDiscordCore.GetActivityManager.getActivityManager(iDiscordCore); + latestDiscordActivity = new DiscordActivity(); + latestDiscordActivity.assets = new DiscordActivityAssets(); + GameSDK.writeString(latestDiscordActivity.assets.large_image, "mort"); + GameSDK.writeString(latestDiscordActivity.assets.large_text, "mort"); + return true; } private final SkyblockStatus skyblockStatus = DungeonsGuide.getDungeonsGuide().getSkyblockStatus(); + private DiscordActivity latestDiscordActivity; public void updatePresence() { -// if (!skyblockStatus.isOnHypixel() || !FeatureRegistry.ADVANCED_RICHPRESENCE.isEnabled() || (!skyblockStatus.isOnSkyblock() && FeatureRegistry.ADVANCED_RICHPRESENCE.<Boolean>getParameter("disablenotskyblock").getValue())) { -// DiscordRPC.discordClearPresence(); -// } else { -// String name = skyblockStatus.getDungeonName(); -// if (name.trim().equals("Your Island")) name = "Private Island"; -// DiscordRichPresence.Builder richPresenceBuilder = new DiscordRichPresence.Builder(name); -// richPresenceBuilder.setBigImage("mort", "mort") -// .setParty(PartyManager.INSTANCE.getPartyID(), PartyManager.INSTANCE.getMemberCount(), PartyManager.INSTANCE.getMaxParty()); -// -// if (skyblockStatus.getContext() != null) { -// DungeonContext dungeonContext = skyblockStatus.getContext(); -// long init = dungeonContext.getInit(); -// richPresenceBuilder.setStartTimestamps(init); -// -// if (dungeonContext.getBossfightProcessor() != null) { -// richPresenceBuilder.setDetails("Fighting "+dungeonContext.getBossfightProcessor().getBossName()+": "+dungeonContext.getBossfightProcessor().getCurrentPhase()); -// } else { -// richPresenceBuilder.setDetails("Clearing rooms"); -// } -// } -// if (PartyManager.INSTANCE.isAllowAskToJoin()) -// richPresenceBuilder.setSecrets(PartyManager.INSTANCE.getAskToJoinSecret(), null); -// richPresenceBuilder.setDetails("Dungeons Guide"); -// DiscordRPC.discordUpdatePresence(richPresenceBuilder.build()); -// } - } + if (!skyblockStatus.isOnHypixel() || !FeatureRegistry.ADVANCED_RICHPRESENCE.isEnabled() || (!skyblockStatus.isOnSkyblock() && FeatureRegistry.ADVANCED_RICHPRESENCE.<Boolean>getParameter("disablenotskyblock").getValue())) { + activityManager.ClearActivity.clearActivity(activityManager, Pointer.NULL, new NativeGameSDK.DiscordCallback() { + @Override + public void callback(Pointer callbackData, EDiscordResult result) { + System.out.println("Discord Returned "+result+" For Clearing RPC"); + } + }); + } else { + String name = skyblockStatus.getDungeonName(); + if (name.trim().equals("Your Island")) name = "Private Island"; + GameSDK.writeString(latestDiscordActivity.state, name); - @SubscribeEvent - public void joinSkyblock(SkyblockJoinedEvent skyblockJoinedEvent) { - updatePresence(); - } - @SubscribeEvent - public void leaveSkyblock(SkyblockLeftEvent skyblockLeftEvent) { - updatePresence(); - } - private String lastLoc = ""; + if (PartyManager.INSTANCE.getPartyID() != null) { + if (latestDiscordActivity.party == null) latestDiscordActivity.party = new DiscordActivityParty(); + GameSDK.writeString(latestDiscordActivity.party.id, PartyManager.INSTANCE.getPartyID()); + if (latestDiscordActivity.party.discordActivityParty == null) latestDiscordActivity.party.discordActivityParty = new DiscordPartySize(); + latestDiscordActivity.party.discordActivityParty.current_size = new Int32(PartyManager.INSTANCE.getMemberCount()); + latestDiscordActivity.party.discordActivityParty.max_size = new Int32(PartyManager.INSTANCE.getMaxParty()); + } else { + latestDiscordActivity.party = null; + } + GameSDK.writeString(latestDiscordActivity.state, name); + if (skyblockStatus.getContext() != null) { + DungeonContext dungeonContext = skyblockStatus.getContext(); + long init = dungeonContext.getInit(); + if (latestDiscordActivity.timestamps == null) + latestDiscordActivity.timestamps = new DiscordActivityTimestamps(); + latestDiscordActivity.timestamps.start = new DiscordTimestamp(init); - @SubscribeEvent - public void tick(TickEvent.ClientTickEvent clientTickEvent) { + if (dungeonContext.getBossfightProcessor() != null) { + GameSDK.writeString(latestDiscordActivity.details, "Fighting "+dungeonContext.getBossfightProcessor().getBossName()+": "+dungeonContext.getBossfightProcessor().getCurrentPhase()); + } else { + GameSDK.writeString(latestDiscordActivity.details, "Clearing Rooms"); + } + } else { + latestDiscordActivity.timestamps = null; + GameSDK.writeString(latestDiscordActivity.details, "Dungeons Guide"); + } + if (PartyManager.INSTANCE.isAllowAskToJoin()) { + if (latestDiscordActivity.secrets == null) + latestDiscordActivity.secrets = new DiscordActivitySecrets(); + GameSDK.writeString(latestDiscordActivity.secrets.join, PartyManager.INSTANCE.getAskToJoinSecret()); + } else { + latestDiscordActivity.secrets = null; + } + activityManager.UpdateActivity.updateActivity(activityManager, latestDiscordActivity, Pointer.NULL, new NativeGameSDK.DiscordCallback() { + @Override + public void callback(Pointer callbackData, EDiscordResult result) { + System.out.println("Discord Returned "+result+" For Setting new RPC"); + } + }); + } } + @Override public void run() { - -// try { -// Thread.sleep(300L); -// setup(); -// while(!Thread.interrupted()) { -// DiscordRPC.discordRunCallbacks(); -// if (skyblockStatus.isOnSkyblock() && !lastLoc.equalsIgnoreCase(skyblockStatus.getDungeonName())) { -// lastLoc = skyblockStatus.getDungeonName()+""; -// } -// updatePresence(); -// Thread.sleep(300L); -// } -// } catch (Exception e) {e.printStackTrace();} + setupSuccessful = setup(); + if (!setupSuccessful) return; + while(!Thread.interrupted()) { + iDiscordCore.RunCallbacks.runCallbacks(iDiscordCore); + updatePresence(); + try { + Thread.sleep(300L); + } catch (Exception e) {e.printStackTrace();} + } } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivity.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivity.java index 3b6951a2..d257b414 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivity.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivity.java @@ -23,6 +23,10 @@ import com.sun.jna.Structure; import kr.syeyoung.dungeonsguide.gamesdk.jna.enumuration.EDiscordActivityType; import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.Int64; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class DiscordActivity extends DiscordStruct { public EDiscordActivityType activityType = EDiscordActivityType.DiscordActivityType_Playing; @@ -39,4 +43,9 @@ public class DiscordActivity extends DiscordStruct { public static class ByReference extends DiscordActivity implements Structure.ByReference { public ByReference() {super();} public ByReference(Pointer pointer) {super(pointer);}} public static class ByValue extends DiscordActivity implements Structure.ByValue { public ByValue() {super();} public ByValue(Pointer pointer) {super(pointer);}} + + @Override + protected List getFieldOrder() { + return Arrays.asList("activityType", "applicationId", "name", "state", "details", "timestamps", "assets", "party", "secrets", "instance"); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityAssets.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityAssets.java index 5908fb1d..03b64f46 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityAssets.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityAssets.java @@ -21,6 +21,9 @@ package kr.syeyoung.dungeonsguide.gamesdk.jna.datastruct; import com.sun.jna.Pointer; import com.sun.jna.Structure; +import java.util.Arrays; +import java.util.List; + public class DiscordActivityAssets extends DiscordStruct{ public byte[] large_image = new byte[128]; @@ -31,4 +34,9 @@ public class DiscordActivityAssets extends DiscordStruct{ public static class ByReference extends DiscordActivityAssets implements Structure.ByReference { public ByReference() {super();} public ByReference(Pointer pointer) {super(pointer);}} public static class ByValue extends DiscordActivityAssets implements Structure.ByValue { public ByValue() {super();} public ByValue(Pointer pointer) {super(pointer);}} + + @Override + protected List getFieldOrder() { + return Arrays.asList("large_image", "large_text", "small_image", "small_text"); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityParty.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityParty.java index 697cb6b8..b9a20db3 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityParty.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityParty.java @@ -21,6 +21,9 @@ package kr.syeyoung.dungeonsguide.gamesdk.jna.datastruct; import com.sun.jna.Pointer; import com.sun.jna.Structure; +import java.util.Arrays; +import java.util.List; + public class DiscordActivityParty extends DiscordStruct { public byte[] id = new byte[128]; @@ -29,4 +32,9 @@ public class DiscordActivityParty extends DiscordStruct { public static class ByReference extends DiscordActivityParty implements Structure.ByReference { public ByReference() {super();} public ByReference(Pointer pointer) {super(pointer);}} public static class ByValue extends DiscordActivityParty implements Structure.ByValue { public ByValue() {super();} public ByValue(Pointer pointer) {super(pointer);}} + + @Override + protected List getFieldOrder() { + return Arrays.asList("id", "discordActivityParty"); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivitySecrets.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivitySecrets.java index db8f42e9..2975f97f 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivitySecrets.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivitySecrets.java @@ -21,6 +21,9 @@ package kr.syeyoung.dungeonsguide.gamesdk.jna.datastruct; import com.sun.jna.Pointer; import com.sun.jna.Structure; +import java.util.Arrays; +import java.util.List; + public class DiscordActivitySecrets extends DiscordStruct { public byte[] match = new byte[128]; @@ -30,4 +33,9 @@ public class DiscordActivitySecrets extends DiscordStruct { public static class ByReference extends DiscordActivitySecrets implements Structure.ByReference { public ByReference() {super();} public ByReference(Pointer pointer) {super(pointer);}} public static class ByValue extends DiscordActivitySecrets implements Structure.ByValue { public ByValue() {super();} public ByValue(Pointer pointer) {super(pointer);}} + + @Override + protected List getFieldOrder() { + return Arrays.asList("match", "join", "spectate"); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityTimestamps.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityTimestamps.java index 6f0c5f04..4765ffb9 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityTimestamps.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordActivityTimestamps.java @@ -22,6 +22,9 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordTimestamp; +import java.util.Arrays; +import java.util.List; + public class DiscordActivityTimestamps extends DiscordStruct { public DiscordTimestamp start = new DiscordTimestamp(); public DiscordTimestamp end = new DiscordTimestamp(); @@ -29,4 +32,9 @@ public class DiscordActivityTimestamps extends DiscordStruct { public static class ByReference extends DiscordActivityTimestamps implements Structure.ByReference { public ByReference() {super();} public ByReference(Pointer pointer) {super(pointer);}} public static class ByValue extends DiscordActivityTimestamps implements Structure.ByValue { public ByValue() {super();} public ByValue(Pointer pointer) {super(pointer);}} + + @Override + protected List getFieldOrder() { + return Arrays.asList("start", "end"); + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordCreateParams.java b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordCreateParams.java index edb29844..8e230b73 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordCreateParams.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/gamesdk/jna/datastruct/DiscordCreateParams.java @@ -25,6 +25,9 @@ import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordClientID; import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.DiscordVersion; import kr.syeyoung.dungeonsguide.gamesdk.jna.typedef.UInt64; +import java.util.Arrays; +import java.util.List; + public class DiscordCreateParams extends DiscordStruct { public DiscordCreateParams() {super();} public DiscordCreateParams(Pointer pointer) {super(pointer);} public DiscordClientID client_id = new DiscordClientID(); public UInt64 flags = new UInt64(); @@ -57,4 +60,12 @@ public class DiscordCreateParams extends DiscordStruct { public DiscordCreatePar public static class ByReference extends DiscordCreateParams implements Structure.ByReference { public ByReference() {super();} public B |
