--- a/net/minecraft/world/InteractionResult.java
+++ b/net/minecraft/world/InteractionResult.java
@@ -30,18 +_,34 @@
     public record Pass() implements InteractionResult {
     }
 
-    public record Success(InteractionResult.SwingSource swingSource, InteractionResult.ItemContext itemContext) implements InteractionResult {
+    // Paper start - track more context in interaction result
+    public record PaperSuccessContext(net.minecraft.core.@org.jspecify.annotations.Nullable BlockPos placedBlockPosition) {
+        static PaperSuccessContext DEFAULT = new PaperSuccessContext(null);
+
+        public PaperSuccessContext placedBlockAt(final net.minecraft.core.BlockPos blockPos) {
+            return new PaperSuccessContext(blockPos);
+        }
+    }
+    public record Success(InteractionResult.SwingSource swingSource, InteractionResult.ItemContext itemContext, PaperSuccessContext paperSuccessContext) implements InteractionResult {
+        public InteractionResult.Success configurePaper(final java.util.function.UnaryOperator<PaperSuccessContext> edit) {
+            return new InteractionResult.Success(this.swingSource, this.itemContext, edit.apply(this.paperSuccessContext));
+        }
+
+        public Success(final net.minecraft.world.InteractionResult.SwingSource swingSource, final net.minecraft.world.InteractionResult.ItemContext itemContext) {
+            this(swingSource, itemContext, PaperSuccessContext.DEFAULT);
+        }
+    // Paper end - track more context in interaction result
         @Override
         public boolean consumesAction() {
             return true;
         }
 
         public InteractionResult.Success heldItemTransformedTo(ItemStack stack) {
-            return new InteractionResult.Success(this.swingSource, new InteractionResult.ItemContext(true, stack));
+            return new InteractionResult.Success(this.swingSource, new InteractionResult.ItemContext(true, stack), this.paperSuccessContext); // Paper - track more context in interaction result
         }
 
         public InteractionResult.Success withoutItem() {
-            return new InteractionResult.Success(this.swingSource, InteractionResult.ItemContext.NONE);
+            return new InteractionResult.Success(this.swingSource, InteractionResult.ItemContext.NONE, this.paperSuccessContext); // Paper - track more context in interaction result
         }
 
         public boolean wasItemInteraction() {