Skip to content

Commit

Permalink
Ray trace sign clicks for edge cases where Paper provides invalid pos…
Browse files Browse the repository at this point in the history
…itions
  • Loading branch information
me4502 committed Jul 25, 2023
1 parent 07f4a00 commit 06c7142
Showing 1 changed file with 16 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package org.enginehub.craftbook.bukkit;

import org.bukkit.Bukkit;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
Expand All @@ -36,11 +37,12 @@
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.vehicle.VehicleEnterEvent;
import org.bukkit.event.vehicle.VehicleMoveEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;
import org.enginehub.craftbook.CraftBook;
import org.enginehub.craftbook.mechanics.minecart.blocks.CartMechanismBlocks;
import org.enginehub.craftbook.mechanics.minecart.events.CartBlockEnterEvent;
Expand Down Expand Up @@ -96,7 +98,19 @@ public void onPlayerInteract(final PlayerInteractEvent event) {
signClickTimer.put(event.getPlayer().getUniqueId(), System.currentTimeMillis());
}
}
SignClickEvent ev = new SignClickEvent(event.getPlayer(), action, event.getItem(), block, event.getBlockFace(), event.getHand(), event.getClickedPosition());
// Ignoring deprecation as we need this value to pass down.
@SuppressWarnings("deprecation")
Vector clickedPosition = event.getClickedPosition();
if (clickedPosition == null) {
RayTraceResult rayTraceResult = event.getPlayer().rayTraceBlocks(5.0, FluidCollisionMode.NEVER);
if (rayTraceResult != null) {
clickedPosition = rayTraceResult.getHitPosition();
} else {
clickedPosition = new Vector(0.5, 0.5, 0.5);
}
}

SignClickEvent ev = new SignClickEvent(event.getPlayer(), action, event.getItem(), block, event.getBlockFace(), event.getHand(), clickedPosition);
CraftBookPlugin.inst().getServer().getPluginManager().callEvent(ev);
if (ev.useInteractedBlock() == Event.Result.DENY) {
event.setUseInteractedBlock(Event.Result.DENY);
Expand Down

0 comments on commit 06c7142

Please sign in to comment.