mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-30 16:19:03 +01:00
Allow LEFT_CLICK_AIR in 3.0->4.5 range of entity (#9211)
This commit is contained in:
parent
a31e288c20
commit
a4dac24ba0
4 changed files with 52 additions and 30 deletions
|
@ -9,7 +9,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||||
}
|
} // Paper end
|
||||||
|
|
||||||
// Arm swing animation
|
// Arm swing animation
|
||||||
- PlayerAnimationEvent event = new PlayerAnimationEvent(this.getCraftPlayer(), (packet.getHand() == InteractionHand.MAIN_HAND) ? PlayerAnimationType.ARM_SWING : PlayerAnimationType.OFF_ARM_SWING);
|
- PlayerAnimationEvent event = new PlayerAnimationEvent(this.getCraftPlayer(), (packet.getHand() == InteractionHand.MAIN_HAND) ? PlayerAnimationType.ARM_SWING : PlayerAnimationType.OFF_ARM_SWING);
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: TheMolkaPL <themolkapl@gmail.com>
|
|
||||||
Date: Sun, 21 Jun 2020 17:21:46 +0200
|
|
||||||
Subject: [PATCH] Fix interact event not being called in adventure
|
|
||||||
|
|
||||||
Call PlayerInteractEvent when left-clicking on a block in adventure mode
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
|
||||||
MutableComponent ichatmutablecomponent = Component.translatable("build.tooHigh", i - 1).withStyle(ChatFormatting.RED);
|
|
||||||
|
|
||||||
this.player.sendSystemMessage(ichatmutablecomponent, true);
|
|
||||||
- } else if (enuminteractionresult.shouldSwing()) {
|
|
||||||
+ } else if (enuminteractionresult.shouldSwing() && !this.player.gameMode.interactResult) { // Paper
|
|
||||||
this.player.swing(enumhand, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
|
||||||
// SPIGOT-5607: Only call interact event if no block or entity is being clicked. Use bukkit ray trace method, because it handles blocks and entities at the same time
|
|
||||||
org.bukkit.util.RayTraceResult result = this.player.level().getWorld().rayTrace(origin, origin.getDirection(), d3, org.bukkit.FluidCollisionMode.NEVER, false, 0.1, entity -> entity != this.player.getBukkitEntity() && this.player.getBukkitEntity().canSee(entity));
|
|
||||||
|
|
||||||
- if (result == null) {
|
|
||||||
+ if (result == null || this.player.gameMode.getGameModeForPlayer() == GameType.ADVENTURE) { // Paper - call PlayerInteractEvent when left-clicking on a block in adventure mode
|
|
||||||
CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_AIR, this.player.getInventory().getSelected(), InteractionHand.MAIN_HAND);
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: TheMolkaPL <themolkapl@gmail.com>
|
||||||
|
Date: Sun, 21 Jun 2020 17:21:46 +0200
|
||||||
|
Subject: [PATCH] Fix interact event not being called sometimes
|
||||||
|
|
||||||
|
* Call PlayerInteractEvent when left-clicking on a block in adventure
|
||||||
|
mode.
|
||||||
|
* Call PlayerInteractEvent when left-clicking an Entity that is out of
|
||||||
|
range in adventure/survival (entity reach is 3.0).
|
||||||
|
|
||||||
|
Co-authored-by: Moulberry <james.jenour@protonmail.com>
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||||
|
MutableComponent ichatmutablecomponent = Component.translatable("build.tooHigh", i - 1).withStyle(ChatFormatting.RED);
|
||||||
|
|
||||||
|
this.player.sendSystemMessage(ichatmutablecomponent, true);
|
||||||
|
- } else if (enuminteractionresult.shouldSwing()) {
|
||||||
|
+ } else if (enuminteractionresult.shouldSwing() && !this.player.gameMode.interactResult) { // Paper
|
||||||
|
this.player.swing(enumhand, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
||||||
|
|
||||||
|
double d3 = player.gameMode.getGameModeForPlayer() == GameType.CREATIVE ? 5.0D : 4.5D;
|
||||||
|
// SPIGOT-5607: Only call interact event if no block or entity is being clicked. Use bukkit ray trace method, because it handles blocks and entities at the same time
|
||||||
|
- org.bukkit.util.RayTraceResult result = this.player.level().getWorld().rayTrace(origin, origin.getDirection(), d3, org.bukkit.FluidCollisionMode.NEVER, false, 0.1, entity -> entity != this.player.getBukkitEntity() && this.player.getBukkitEntity().canSee(entity));
|
||||||
|
+ org.bukkit.util.RayTraceResult result = this.player.level().getWorld().rayTrace(origin, origin.getDirection(), d3, org.bukkit.FluidCollisionMode.NEVER, false, 0.0, entity -> entity != this.player.getBukkitEntity() && this.player.getBukkitEntity().canSee(entity)); // Paper - change raySize from 0.1 to 0.0
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_AIR, this.player.getInventory().getSelected(), InteractionHand.MAIN_HAND);
|
||||||
|
- }
|
||||||
|
+ } else { // Paper start - Fix interact event not being called sometimes
|
||||||
|
+ GameType gameType = this.player.gameMode.getGameModeForPlayer();
|
||||||
|
+ if (gameType == GameType.ADVENTURE && result.getHitBlock() != null) {
|
||||||
|
+ CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_BLOCK, io.papermc.paper.util.MCUtil.toBlockPosition(result.getHitPosition()), org.bukkit.craftbukkit.block.CraftBlock.blockFaceToNotch(result.getHitBlockFace()), this.player.getInventory().getSelected(), InteractionHand.MAIN_HAND);
|
||||||
|
+ } else if (gameType != GameType.CREATIVE && result.getHitEntity() != null && origin.toVector().distanceSquared(result.getHitPosition()) > 3.0D * 3.0D) {
|
||||||
|
+ CraftEventFactory.callPlayerInteractEvent(this.player, Action.LEFT_CLICK_AIR, this.player.getInventory().getSelected(), InteractionHand.MAIN_HAND);
|
||||||
|
+ }
|
||||||
|
+ } // Paper end
|
||||||
|
|
||||||
|
// Arm swing animation
|
||||||
|
PlayerAnimationEvent event = new PlayerAnimationEvent(this.getCraftPlayer(), (packet.getHand() == InteractionHand.MAIN_HAND) ? PlayerAnimationType.ARM_SWING : PlayerAnimationType.OFF_ARM_SWING);
|
|
@ -3503,6 +3503,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+import org.bukkit.block.BlockFace;
|
+import org.bukkit.block.BlockFace;
|
||||||
+import org.bukkit.craftbukkit.CraftWorld;
|
+import org.bukkit.craftbukkit.CraftWorld;
|
||||||
+import org.bukkit.craftbukkit.util.Waitable;
|
+import org.bukkit.craftbukkit.util.Waitable;
|
||||||
|
+import org.bukkit.util.Vector;
|
||||||
+import org.spigotmc.AsyncCatcher;
|
+import org.spigotmc.AsyncCatcher;
|
||||||
+
|
+
|
||||||
+import javax.annotation.Nonnull;
|
+import javax.annotation.Nonnull;
|
||||||
|
@ -3955,6 +3956,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||||
+ return new BlockPos(pos.blockX(), pos.blockY(), pos.blockZ());
|
+ return new BlockPos(pos.blockX(), pos.blockY(), pos.blockZ());
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ public static BlockPos toBlockPosition(Vector vec) {
|
||||||
|
+ return new BlockPos(vec.getBlockX(), vec.getBlockY(), vec.getBlockZ());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ public static boolean isEdgeOfChunk(BlockPos pos) {
|
+ public static boolean isEdgeOfChunk(BlockPos pos) {
|
||||||
+ final int modX = pos.getX() & 15;
|
+ final int modX = pos.getX() & 15;
|
||||||
+ final int modZ = pos.getZ() & 15;
|
+ final int modZ = pos.getZ() & 15;
|
||||||
|
|
Loading…
Reference in a new issue