Initial replay testing attempt

This commit is contained in:
themode 2022-02-18 14:14:38 +01:00
parent 77d1888cbc
commit fc9ded0afc
4 changed files with 84 additions and 0 deletions

View File

@ -45,6 +45,7 @@ dependencies {
// Junit Testing Framework
testImplementation(libs.junit.api)
testImplementation(libs.junit.params)
testImplementation("com.github.ReplayMod:ReplayStudio:70f59efaa3")
testRuntimeOnly(libs.junit.engine)
// Only here to ensure J9 module support for extensions and our classloaders
testCompileOnly(libs.mockito.core)

View File

@ -0,0 +1,14 @@
package net.minestom.server.extra.ac;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.net.URISyntaxException;
public class AntiCheatTest extends UtilsAC {
@Test
public void test() throws URISyntaxException, IOException {
retrieveReplay("replay_demo.mcpr");
}
}

View File

@ -0,0 +1,69 @@
package net.minestom.server.extra.ac;
import com.google.gson.JsonObject;
import com.replaymod.replaystudio.PacketData;
import com.replaymod.replaystudio.Studio;
import com.replaymod.replaystudio.filter.StreamFilter;
import com.replaymod.replaystudio.lib.viaversion.api.protocol.packet.State;
import com.replaymod.replaystudio.lib.viaversion.api.protocol.version.ProtocolVersion;
import com.replaymod.replaystudio.protocol.PacketTypeRegistry;
import com.replaymod.replaystudio.replay.ReplayFile;
import com.replaymod.replaystudio.replay.ZipReplayFile;
import com.replaymod.replaystudio.stream.PacketStream;
import com.replaymod.replaystudio.studio.ReplayStudio;
import net.minestom.server.MinecraftServer;
import java.io.File;
public class UtilsAC {
private static final ReplayStudio STUDIO = new ReplayStudio();
void retrieveReplay(String name) {
try {
final File dir = new File(ClassLoader.getSystemResource(name).toURI());
final ReplayFile replayFile = new ZipReplayFile(STUDIO, dir);
final PacketTypeRegistry registry = PacketTypeRegistry.get(ProtocolVersion.getProtocol(MinecraftServer.PROTOCOL_VERSION), State.PLAY);
PacketStream stream = replayFile.getPacketData(registry).asPacketStream();
stream.start();
stream.addFilter(new ProgressFilter()); // Required for some reason
int count = 0;
PacketData packetData;
while ((packetData = stream.next()) != null) {
// TODO how to retrieve server-bound packets?
System.out.println("packet " + packetData.getPacket().getType() + " - " + packetData.getTime());
if (count++ >= 10) break;
}
stream.end();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static final class ProgressFilter implements StreamFilter {
@Override
public String getName() {
return "progress";
}
@Override
public void init(Studio studio, JsonObject config) {
}
@Override
public void onStart(PacketStream stream) {
}
@Override
public boolean onPacket(PacketStream stream, PacketData data) {
return true;
}
@Override
public void onEnd(PacketStream stream, long timestamp) {
}
}
}

Binary file not shown.