Skip to content

Commit fa0baaa

Browse files
committed
Add additional Packet Enrichment config options for each packet
1 parent ed0f738 commit fa0baaa

2 files changed

Lines changed: 205 additions & 72 deletions

File tree

api/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentModule.java

Lines changed: 121 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525

2626
import com.lunarclient.apollo.module.ApolloModule;
2727
import com.lunarclient.apollo.module.ModuleDefinition;
28+
import com.lunarclient.apollo.option.Option;
29+
import com.lunarclient.apollo.option.SimpleOption;
30+
import io.leangen.geantyref.TypeToken;
2831
import org.jetbrains.annotations.ApiStatus;
2932

3033
/**
@@ -36,8 +39,125 @@
3639
@ModuleDefinition(id = "packet_enrichment", name = "PacketEnrichment")
3740
public abstract class PacketEnrichmentModule extends ApolloModule {
3841

42+
/**
43+
* Controls whether the client sends an additional player attack packet to the server.
44+
*
45+
* @since 1.2.2
46+
*/
47+
public static final SimpleOption<Boolean> PLAYER_ATTACK_PACKET = Option.<Boolean>builder()
48+
.comment("Set to 'true' to have the client send an additional player attack packet to the server, otherwise 'false'.")
49+
.node("player-attack", "send-packet").type(TypeToken.get(Boolean.class))
50+
.defaultValue(false).notifyClient().build();
51+
52+
/**
53+
* Controls whether Apollo fires {@link com.lunarclient.apollo.event.packetenrichment.melee.ApolloPlayerAttackEvent}
54+
* when the packet is received.
55+
*
56+
* @since 1.2.2
57+
*/
58+
public static final SimpleOption<Boolean> PLAYER_ATTACK_EVENT = Option.<Boolean>builder()
59+
.comment("If 'true', Apollo fires the player attack event on the main thread. Disable this and handle the packet yourself if you require asynchronous or off-thread processing.")
60+
.node("player-attack", "fire-apollo-event").type(TypeToken.get(Boolean.class))
61+
.defaultValue(false).build();
62+
63+
/**
64+
* Controls whether the client sends an additional player chat open packet to the server.
65+
*
66+
* @since 1.2.2
67+
*/
68+
public static final SimpleOption<Boolean> PLAYER_CHAT_OPEN_PACKET = Option.<Boolean>builder()
69+
.comment("Set to 'true' to have the client send an additional player chat open packet to the server, otherwise 'false'.")
70+
.node("player-chat-open", "send-packet").type(TypeToken.get(Boolean.class))
71+
.defaultValue(false).notifyClient().build();
72+
73+
/**
74+
* Controls whether Apollo fires {@link com.lunarclient.apollo.event.packetenrichment.chat.ApolloPlayerChatOpenEvent}
75+
* when the packet is received.
76+
*
77+
* @since 1.2.2
78+
*/
79+
public static final SimpleOption<Boolean> PLAYER_CHAT_OPEN_EVENT = Option.<Boolean>builder()
80+
.comment("If 'true', Apollo fires the player chat open event on the main thread. Disable this and handle the packet yourself if you require asynchronous or off-thread processing.")
81+
.node("player-chat-open", "fire-apollo-event").type(TypeToken.get(Boolean.class))
82+
.defaultValue(false).build();
83+
84+
/**
85+
* Controls whether the client sends an additional player chat close packet to the server.
86+
*
87+
* @since 1.2.2
88+
*/
89+
public static final SimpleOption<Boolean> PLAYER_CHAT_CLOSE_PACKET = Option.<Boolean>builder()
90+
.comment("Set to 'true' to have the client send an additional player chat close packet to the server, otherwise 'false'.")
91+
.node("player-chat-close", "send-packet").type(TypeToken.get(Boolean.class))
92+
.defaultValue(false).notifyClient().build();
93+
94+
/**
95+
* Controls whether Apollo fires {@link com.lunarclient.apollo.event.packetenrichment.chat.ApolloPlayerChatCloseEvent}
96+
* when the packet is received.
97+
*
98+
* @since 1.2.2
99+
*/
100+
public static final SimpleOption<Boolean> PLAYER_CHAT_CLOSE_EVENT = Option.<Boolean>builder()
101+
.comment("If 'true', Apollo fires the player chat close event on the main thread. Disable this and handle the packet yourself if you require asynchronous or off-thread processing.")
102+
.node("player-chat-close", "fire-apollo-event").type(TypeToken.get(Boolean.class))
103+
.defaultValue(false).build();
104+
105+
/**
106+
* Controls whether the client sends an additional player use item packet to the server.
107+
*
108+
* @since 1.2.2
109+
*/
110+
public static final SimpleOption<Boolean> PLAYER_USE_ITEM_PACKET = Option.<Boolean>builder()
111+
.comment("Set to 'true' to have the client send an additional player use item packet to the server, otherwise 'false'.")
112+
.node("player-use-item", "send-packet").type(TypeToken.get(Boolean.class))
113+
.defaultValue(false).notifyClient().build();
114+
115+
/**
116+
* Controls whether Apollo fires {@link com.lunarclient.apollo.event.packetenrichment.world.ApolloPlayerUseItemEvent}
117+
* when the packet is received.
118+
*
119+
* @since 1.2.2
120+
*/
121+
public static final SimpleOption<Boolean> PLAYER_USE_ITEM_EVENT = Option.<Boolean>builder()
122+
.comment("If 'true', Apollo fires the player use item event on the main thread. Disable this and handle the packet yourself if you require asynchronous or off-thread processing.")
123+
.node("player-use-item", "fire-apollo-event").type(TypeToken.get(Boolean.class))
124+
.defaultValue(false).build();
125+
126+
/**
127+
* Controls whether the client sends an additional player use item bucket packet to the server.
128+
*
129+
* @since 1.2.2
130+
*/
131+
public static final SimpleOption<Boolean> PLAYER_USE_ITEM_BUCKET_PACKET = Option.<Boolean>builder()
132+
.comment("Set to 'true' to have the client send an additional player use item bucket packet to the server, otherwise 'false'.")
133+
.node("player-use-item-bucket", "send-packet").type(TypeToken.get(Boolean.class))
134+
.defaultValue(false).notifyClient().build();
135+
136+
/**
137+
* Controls whether Apollo fires {@link com.lunarclient.apollo.event.packetenrichment.world.ApolloPlayerUseItemBucketEvent}
138+
* when the packet is received.
139+
*
140+
* @since 1.2.2
141+
*/
142+
public static final SimpleOption<Boolean> PLAYER_USE_ITEM_BUCKET_EVENT = Option.<Boolean>builder()
143+
.comment("If 'true', Apollo fires the player use item bucket event on the main thread. Disable this and handle the packet yourself if you require asynchronous or off-thread processing.")
144+
.node("player-use-item-bucket", "fire-apollo-event").type(TypeToken.get(Boolean.class))
145+
.defaultValue(false).build();
146+
39147
protected PacketEnrichmentModule() {
40-
this.registerOptions(ApolloModule.ENABLE_OPTION_OFF);
148+
this.registerOptions(
149+
ApolloModule.ENABLE_OPTION_OFF,
150+
PacketEnrichmentModule.PLAYER_ATTACK_PACKET,
151+
PacketEnrichmentModule.PLAYER_ATTACK_EVENT,
152+
PacketEnrichmentModule.PLAYER_CHAT_OPEN_PACKET,
153+
PacketEnrichmentModule.PLAYER_CHAT_OPEN_EVENT,
154+
PacketEnrichmentModule.PLAYER_CHAT_CLOSE_PACKET,
155+
PacketEnrichmentModule.PLAYER_CHAT_CLOSE_EVENT,
156+
PacketEnrichmentModule.PLAYER_USE_ITEM_PACKET,
157+
PacketEnrichmentModule.PLAYER_USE_ITEM_EVENT,
158+
PacketEnrichmentModule.PLAYER_USE_ITEM_BUCKET_PACKET,
159+
PacketEnrichmentModule.PLAYER_USE_ITEM_BUCKET_EVENT
160+
);
41161
}
42162

43163
}

common/src/main/java/com/lunarclient/apollo/module/packetenrichment/PacketEnrichmentImpl.java

Lines changed: 84 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.lunarclient.apollo.event.packetenrichment.world.ApolloPlayerUseItemBucketEvent;
3232
import com.lunarclient.apollo.event.packetenrichment.world.ApolloPlayerUseItemEvent;
3333
import com.lunarclient.apollo.network.NetworkTypes;
34+
import com.lunarclient.apollo.option.Options;
3435
import com.lunarclient.apollo.packetenrichment.v1.PlayerAttackMessage;
3536
import com.lunarclient.apollo.packetenrichment.v1.PlayerChatCloseMessage;
3637
import com.lunarclient.apollo.packetenrichment.v1.PlayerChatOpenMessage;
@@ -55,77 +56,89 @@ public PacketEnrichmentImpl() {
5556
}
5657

5758
private void onReceivePacket(ApolloReceivePacketEvent event) {
58-
event.unpack(PlayerAttackMessage.class).ifPresent(packet -> {
59-
ApolloPlayerAttackEvent playerAttackEvent = new ApolloPlayerAttackEvent(
60-
event.getPlayer(),
61-
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
62-
NetworkTypes.fromProtobuf(packet.getTargetInfo()),
63-
NetworkTypes.fromProtobuf(packet.getAttackerInfo()),
64-
packet.getDistance()
65-
);
66-
67-
EventBus.EventResult<ApolloPlayerAttackEvent> result = EventBus.getBus().post(playerAttackEvent);
68-
69-
for (Throwable throwable : result.getThrowing()) {
70-
throwable.printStackTrace();
71-
}
72-
});
73-
74-
event.unpack(PlayerChatOpenMessage.class).ifPresent(packet -> {
75-
ApolloPlayerChatOpenEvent playerChatOpenEvent = new ApolloPlayerChatOpenEvent(
76-
event.getPlayer(),
77-
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
78-
NetworkTypes.fromProtobuf(packet.getPlayerInfo()));
79-
80-
EventBus.EventResult<ApolloPlayerChatOpenEvent> result = EventBus.getBus().post(playerChatOpenEvent);
81-
82-
for (Throwable throwable : result.getThrowing()) {
83-
throwable.printStackTrace();
84-
}
85-
});
86-
87-
event.unpack(PlayerChatCloseMessage.class).ifPresent(packet -> {
88-
ApolloPlayerChatCloseEvent playerChatCloseEvent = new ApolloPlayerChatCloseEvent(
89-
event.getPlayer(),
90-
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
91-
NetworkTypes.fromProtobuf(packet.getPlayerInfo()));
92-
93-
EventBus.EventResult<ApolloPlayerChatCloseEvent> result = EventBus.getBus().post(playerChatCloseEvent);
94-
95-
for (Throwable throwable : result.getThrowing()) {
96-
throwable.printStackTrace();
97-
}
98-
});
99-
100-
event.unpack(PlayerUseItemMessage.class).ifPresent(packet -> {
101-
ApolloPlayerUseItemEvent playerUseItemEvent = new ApolloPlayerUseItemEvent(
102-
event.getPlayer(),
103-
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
104-
NetworkTypes.fromProtobuf(packet.getPlayerInfo()),
105-
packet.getMainHand()
106-
);
107-
108-
EventBus.EventResult<ApolloPlayerUseItemEvent> result = EventBus.getBus().post(playerUseItemEvent);
109-
110-
for (Throwable throwable : result.getThrowing()) {
111-
throwable.printStackTrace();
112-
}
113-
});
114-
115-
event.unpack(PlayerUseItemBucketMessage.class).ifPresent(packet -> {
116-
ApolloPlayerUseItemBucketEvent playerUseItemBucketEvent = new ApolloPlayerUseItemBucketEvent(
117-
event.getPlayer(),
118-
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
119-
NetworkTypes.fromProtobuf(packet.getPlayerInfo()),
120-
NetworkTypes.fromProtobuf(packet.getRayTraceResult())
121-
);
122-
123-
EventBus.EventResult<ApolloPlayerUseItemBucketEvent> result = EventBus.getBus().post(playerUseItemBucketEvent);
124-
125-
for (Throwable throwable : result.getThrowing()) {
126-
throwable.printStackTrace();
127-
}
128-
});
59+
Options options = this.getOptions();
60+
61+
if (options.get(PacketEnrichmentModule.PLAYER_CHAT_OPEN_EVENT)) {
62+
event.unpack(PlayerAttackMessage.class).ifPresent(packet -> {
63+
ApolloPlayerAttackEvent playerAttackEvent = new ApolloPlayerAttackEvent(
64+
event.getPlayer(),
65+
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
66+
NetworkTypes.fromProtobuf(packet.getTargetInfo()),
67+
NetworkTypes.fromProtobuf(packet.getAttackerInfo()),
68+
packet.getDistance()
69+
);
70+
71+
EventBus.EventResult<ApolloPlayerAttackEvent> result = EventBus.getBus().post(playerAttackEvent);
72+
73+
for (Throwable throwable : result.getThrowing()) {
74+
throwable.printStackTrace();
75+
}
76+
});
77+
}
78+
79+
if (options.get(PacketEnrichmentModule.PLAYER_CHAT_OPEN_EVENT)) {
80+
event.unpack(PlayerChatOpenMessage.class).ifPresent(packet -> {
81+
ApolloPlayerChatOpenEvent playerChatOpenEvent = new ApolloPlayerChatOpenEvent(
82+
event.getPlayer(),
83+
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
84+
NetworkTypes.fromProtobuf(packet.getPlayerInfo()));
85+
86+
EventBus.EventResult<ApolloPlayerChatOpenEvent> result = EventBus.getBus().post(playerChatOpenEvent);
87+
88+
for (Throwable throwable : result.getThrowing()) {
89+
throwable.printStackTrace();
90+
}
91+
});
92+
}
93+
94+
if (options.get(PacketEnrichmentModule.PLAYER_CHAT_CLOSE_EVENT)) {
95+
event.unpack(PlayerChatCloseMessage.class).ifPresent(packet -> {
96+
ApolloPlayerChatCloseEvent playerChatCloseEvent = new ApolloPlayerChatCloseEvent(
97+
event.getPlayer(),
98+
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
99+
NetworkTypes.fromProtobuf(packet.getPlayerInfo()));
100+
101+
EventBus.EventResult<ApolloPlayerChatCloseEvent> result = EventBus.getBus().post(playerChatCloseEvent);
102+
103+
for (Throwable throwable : result.getThrowing()) {
104+
throwable.printStackTrace();
105+
}
106+
});
107+
}
108+
109+
if (options.get(PacketEnrichmentModule.PLAYER_USE_ITEM_EVENT)) {
110+
event.unpack(PlayerUseItemMessage.class).ifPresent(packet -> {
111+
ApolloPlayerUseItemEvent playerUseItemEvent = new ApolloPlayerUseItemEvent(
112+
event.getPlayer(),
113+
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
114+
NetworkTypes.fromProtobuf(packet.getPlayerInfo()),
115+
packet.getMainHand()
116+
);
117+
118+
EventBus.EventResult<ApolloPlayerUseItemEvent> result = EventBus.getBus().post(playerUseItemEvent);
119+
120+
for (Throwable throwable : result.getThrowing()) {
121+
throwable.printStackTrace();
122+
}
123+
});
124+
}
125+
126+
if (options.get(PacketEnrichmentModule.PLAYER_USE_ITEM_BUCKET_EVENT)) {
127+
event.unpack(PlayerUseItemBucketMessage.class).ifPresent(packet -> {
128+
ApolloPlayerUseItemBucketEvent playerUseItemBucketEvent = new ApolloPlayerUseItemBucketEvent(
129+
event.getPlayer(),
130+
NetworkTypes.fromProtobuf(packet.getPacketInfo().getInstantiationTime()),
131+
NetworkTypes.fromProtobuf(packet.getPlayerInfo()),
132+
NetworkTypes.fromProtobuf(packet.getRayTraceResult())
133+
);
134+
135+
EventBus.EventResult<ApolloPlayerUseItemBucketEvent> result = EventBus.getBus().post(playerUseItemBucketEvent);
136+
137+
for (Throwable throwable : result.getThrowing()) {
138+
throwable.printStackTrace();
139+
}
140+
});
141+
}
129142
}
130143

131144
}

0 commit comments

Comments
 (0)