diff --git a/build.gradle b/build.gradle
index 16b8dcf23..daeb82f57 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,8 +19,8 @@ plugins {
 def ENV = System.getenv()
 
 class Globals {
-	static def baseVersion = "0.31.0"
-	static def mcVersion = "21w07a"
+	static def baseVersion = "0.31.1"
+	static def mcVersion = "21w08a"
 	static def yarnVersion = "+build.1"
 	static def loaderVersion = "0.10.5+build.213"
 	static def preRelease = true
diff --git a/fabric-events-interaction-v0/build.gradle b/fabric-events-interaction-v0/build.gradle
index 16de36abd..e6acf4752 100644
--- a/fabric-events-interaction-v0/build.gradle
+++ b/fabric-events-interaction-v0/build.gradle
@@ -1,5 +1,5 @@
 archivesBaseName = "fabric-events-interaction-v0"
-version = getSubprojectVersion(project, "0.4.4")
+version = getSubprojectVersion(project, "0.4.5")
 
 moduleDependencies(project, [
 		'fabric-api-base'
diff --git a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java b/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java
index a35359d16..b92d9a45c 100644
--- a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java
+++ b/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java
@@ -119,7 +119,7 @@ public class MixinClientPlayerInteractionManager {
 
 		if (result != ActionResult.PASS) {
 			if (result == ActionResult.SUCCESS) {
-				this.networkHandler.sendPacket(new PlayerInteractEntityC2SPacket(entity, player.isSneaking()));
+				this.networkHandler.sendPacket(PlayerInteractEntityC2SPacket.method_34206(entity, player.isSneaking()));
 			}
 
 			info.cancel();
@@ -133,7 +133,7 @@ public class MixinClientPlayerInteractionManager {
 		if (result != ActionResult.PASS) {
 			if (result == ActionResult.SUCCESS) {
 				Vec3d hitVec = hitResult.getPos().subtract(entity.getX(), entity.getY(), entity.getZ());
-				this.networkHandler.sendPacket(new PlayerInteractEntityC2SPacket(entity, hand, hitVec, player.isSneaking()));
+				this.networkHandler.sendPacket(PlayerInteractEntityC2SPacket.method_34208(entity, player.isSneaking(), hand, hitVec));
 			}
 
 			info.setReturnValue(result);
diff --git a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinServerPlayNetworkHandler.java b/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinServerPlayNetworkHandler.java
index ce1bdc5d3..840e2ef5f 100644
--- a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinServerPlayNetworkHandler.java
+++ b/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinServerPlayNetworkHandler.java
@@ -23,34 +23,35 @@ import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
 import net.minecraft.entity.Entity;
-import net.minecraft.server.network.ServerPlayNetworkHandler;
-import net.minecraft.server.network.ServerPlayerEntity;
-import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
+import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.ActionResult;
+import net.minecraft.util.Hand;
 import net.minecraft.util.hit.EntityHitResult;
+import net.minecraft.util.math.Vec3d;
+import net.minecraft.server.network.ServerPlayNetworkHandler;
+import net.minecraft.network.packet.c2s.play.PlayerInteractEntityC2SPacket;
 import net.minecraft.world.World;
-import net.minecraft.server.world.ServerWorld;
 
 import net.fabricmc.fabric.api.event.player.UseEntityCallback;
 
-@Mixin(ServerPlayNetworkHandler.class)
-public class MixinServerPlayNetworkHandler {
-	@Shadow
-	public ServerPlayerEntity player;
+@Mixin(targets = "net/minecraft/server/network/ServerPlayNetworkHandler$1")
+public abstract class MixinServerPlayNetworkHandler implements PlayerInteractEntityC2SPacket.class_5908 {
+	@Shadow(aliases = {"field_28963"})
+	public ServerPlayNetworkHandler serverPlayNetworkHandler;
 
-	@Inject(method = "onPlayerInteractEntity", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;interactAt(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/Hand;)Lnet/minecraft/util/ActionResult;"), cancellable = true)
-	public void onPlayerInteractEntity(PlayerInteractEntityC2SPacket packet, CallbackInfo info) {
+	@Shadow(aliases = {"field_28962"})
+	public Entity entity;
+
+	@Inject(method = "method_34220", at = @At(value = "HEAD"), cancellable = true)
+	public void onPlayerInteractEntity(Hand hand, Vec3d hitPosition, CallbackInfo info) {
+		PlayerEntity player = serverPlayNetworkHandler.player;
 		World world = player.getEntityWorld();
-		Entity entity = packet.getEntity((ServerWorld) world);
 
-		if (entity != null) {
-			EntityHitResult hitResult = new EntityHitResult(entity, packet.getHitPosition().add(entity.getX(), entity.getY(), entity.getZ()));
+		EntityHitResult hitResult = new EntityHitResult(entity, hitPosition.add(entity.getX(), entity.getY(), entity.getZ()));
+		ActionResult result = UseEntityCallback.EVENT.invoker().interact(player, world, hand, entity, hitResult);
 
-			ActionResult result = UseEntityCallback.EVENT.invoker().interact(player, world, packet.getHand(), entity, hitResult);
-
-			if (result != ActionResult.PASS) {
-				info.cancel();
-			}
+		if (result != ActionResult.PASS) {
+			info.cancel();
 		}
 	}
 }
diff --git a/fabric-networking-api-v1/build.gradle b/fabric-networking-api-v1/build.gradle
index 7ab2412b5..2fdd98904 100644
--- a/fabric-networking-api-v1/build.gradle
+++ b/fabric-networking-api-v1/build.gradle
@@ -1,5 +1,5 @@
 archivesBaseName = "fabric-networking-api-v1"
-version = getSubprojectVersion(project, "1.0.4")
+version = getSubprojectVersion(project, "1.0.5")
 
 moduleDependencies(project, [
 		'fabric-api-base'
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/server/ServerLoginNetworkAddon.java b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/server/ServerLoginNetworkAddon.java
index 7ab0df371..fdcf5457c 100644
--- a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/server/ServerLoginNetworkAddon.java
+++ b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/server/ServerLoginNetworkAddon.java
@@ -162,7 +162,14 @@ public final class ServerLoginNetworkAddon extends AbstractNetworkAddon<ServerLo
 	@Override
 	public Packet<?> createPacket(Identifier channelName, PacketByteBuf buf) {
 		int queryId = this.queryIdFactory.nextId();
-		LoginQueryRequestS2CPacket ret = new LoginQueryRequestS2CPacket();
+
+		// Create the packet with a dummy packet buffer and then overwrite the contents after, a bit of a hack but should be ok.
+		PacketByteBuf dummy = PacketByteBufs.create();
+		dummy.writeVarInt(-1);
+		dummy.writeIdentifier(new Identifier("fabric", "temp"));
+		dummy.writeByte(1);
+
+		LoginQueryRequestS2CPacket ret = new LoginQueryRequestS2CPacket(dummy);
 		// The constructor for creating a non-empty response was removed by proguard
 		LoginQueryRequestS2CPacketAccessor access = (LoginQueryRequestS2CPacketAccessor) ret;
 		access.setQueryId(queryId);
diff --git a/fabric-structure-api-v1/build.gradle b/fabric-structure-api-v1/build.gradle
index b10244fbd..a1a39f2a9 100644
--- a/fabric-structure-api-v1/build.gradle
+++ b/fabric-structure-api-v1/build.gradle
@@ -1,2 +1,2 @@
 archivesBaseName = "fabric-structure-api-v1"
-version = getSubprojectVersion(project, "1.1.5")
+version = getSubprojectVersion(project, "1.1.6")
diff --git a/fabric-structure-api-v1/src/testmod/java/net/fabricmc/fabric/test/structure/StructureTest.java b/fabric-structure-api-v1/src/testmod/java/net/fabricmc/fabric/test/structure/StructureTest.java
index a6f8eea79..7b5993b02 100644
--- a/fabric-structure-api-v1/src/testmod/java/net/fabricmc/fabric/test/structure/StructureTest.java
+++ b/fabric-structure-api-v1/src/testmod/java/net/fabricmc/fabric/test/structure/StructureTest.java
@@ -76,14 +76,14 @@ public class StructureTest {
 		}
 
 		public static class Start extends StructureStart<DefaultFeatureConfig> {
-			public Start(StructureFeature<DefaultFeatureConfig> feature, int chunkX, int chunkZ, BlockBox box, int references, long seed) {
-				super(feature, chunkX, chunkZ, box, references, seed);
+			public Start(StructureFeature<DefaultFeatureConfig> feature, ChunkPos chunkPos, BlockBox blockBox, int i, long l) {
+				super(feature, chunkPos, blockBox, i, l);
 			}
 
 			@Override
-			public void init(DynamicRegistryManager registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, DefaultFeatureConfig config, HeightLimitView heightLimitView) {
-				int blockX = chunkX * 16;
-				int blockZ = chunkZ * 16;
+			public void init(DynamicRegistryManager registryManager, ChunkGenerator chunkGenerator, StructureManager manager, ChunkPos chunkPos, Biome biome, DefaultFeatureConfig featureConfig, HeightLimitView heightLimitView) {
+				int blockX = chunkPos.getStartX();
+				int blockZ = chunkPos.getStartZ();
 				int blockY = chunkGenerator.getHeight(blockX, blockZ, Heightmap.Type.WORLD_SURFACE_WG, heightLimitView);
 
 				TestStructureGenerator generator = new TestStructureGenerator(random, blockX, blockY, blockZ);