Skip to content

Commit 48115eb

Browse files
committed
fix noslow with invalid drop item packets
1 parent 68f34f2 commit 48115eb

File tree

5 files changed

+10
-5
lines changed

5 files changed

+10
-5
lines changed

common/src/main/java/ac/grim/grimac/checks/Check.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
99
import com.github.retrooper.packetevents.protocol.packettype.PacketTypeCommon;
1010
import com.github.retrooper.packetevents.protocol.player.ClientVersion;
11+
import com.github.retrooper.packetevents.protocol.player.DiggingAction;
1112
import lombok.Getter;
1213
import lombok.Setter;
1314
import org.jetbrains.annotations.NotNull;
@@ -207,4 +208,10 @@ public boolean isTickPacketIncludingNonMovement(PacketTypeCommon packetType) {
207208
return isFlying(packetType);
208209
}
209210

211+
// prevent causing exploits with packet cancelling (ie noslow)
212+
public boolean canCancel(DiggingAction action) {
213+
return action != DiggingAction.RELEASE_USE_ITEM
214+
// we check client version here because 1.8- doesn't predict dropping items, so we can cancel them. (see CompensatedInventory)
215+
&& (action != DiggingAction.DROP_ITEM && action != DiggingAction.DROP_ITEM_STACK || player.getClientVersion().isOlderThanOrEquals(ClientVersion.V_1_8));
216+
}
210217
}

common/src/main/java/ac/grim/grimac/checks/impl/badpackets/BadPacketsL.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void onPacketReceive(PacketReceiveEvent event) {
4343
+ ", face=" + packet.getBlockFace()
4444
+ ", sequence=" + packet.getSequence()
4545
+ ", action=" + packet.getAction().toString().toLowerCase(Locale.ROOT)
46-
) && shouldModifyPackets() && packet.getAction() != DiggingAction.RELEASE_USE_ITEM) {
46+
) && shouldModifyPackets() && canCancel(packet.getAction())) {
4747
event.setCancelled(true);
4848
player.onPacketCancel();
4949
}

common/src/main/java/ac/grim/grimac/checks/impl/packetorder/PacketOrderF.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import ac.grim.grimac.utils.anticheat.update.PredictionComplete;
88
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
99
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
10-
import com.github.retrooper.packetevents.protocol.player.DiggingAction;
1110
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientClientStatus;
1211
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientPlayerDigging;
1312

@@ -42,7 +41,7 @@ && new WrapperPlayClientClientStatus(event).getAction() == WrapperPlayClientClie
4241
if (!player.canSkipTicks()) {
4342
if (flagAndAlert(verbose) && shouldModifyPackets()) {
4443
if (event.getPacketType() == PacketType.Play.Client.PLAYER_DIGGING
45-
&& new WrapperPlayClientPlayerDigging(event).getAction() == DiggingAction.RELEASE_USE_ITEM
44+
&& !canCancel(new WrapperPlayClientPlayerDigging(event).getAction())
4645
) return; // don't cause a noslow
4746

4847
event.setCancelled(true);

common/src/main/java/ac/grim/grimac/checks/impl/packetorder/PacketOrderG.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ && new WrapperPlayClientClientStatus(event).getAction() == WrapperPlayClientClie
4848
+ ", picking=" + player.packetOrderProcessor.isPicking()
4949
+ ", digging=" + player.packetOrderProcessor.isDigging();
5050
if (!player.canSkipTicks()) {
51-
if (flagAndAlert(verbose) && shouldModifyPackets()) {
51+
if (flagAndAlert(verbose) && shouldModifyPackets() && canCancel(action)) {
5252
event.setCancelled(true);
5353
player.onPacketCancel();
5454
}

common/src/main/java/ac/grim/grimac/events/packets/PacketPlayerDigging.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package ac.grim.grimac.events.packets;
22

33
import ac.grim.grimac.GrimAPI;
4-
import ac.grim.grimac.checks.impl.movement.NoSlow;
54
import ac.grim.grimac.player.GrimPlayer;
65
import ac.grim.grimac.utils.item.ItemBehaviour;
76
import ac.grim.grimac.utils.item.ItemBehaviourRegistry;

0 commit comments

Comments
 (0)