Files
ParchmentMC/patches/server/0006-Add-UnsafeValues-canPlaceItemOn.patch
lexikiq 9b316cd4b3 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@c2e2281 Initial 1.18 update
PaperMC/Paper@12efc3f Fixes
PaperMC/Paper@60af9b0 moar fixes
PaperMC/Paper@19f9520 1.18.2 compiles successfuly now
PaperMC/Paper@f4eb08a Readd 'Fix entity type tags suggestions in selectors'
PaperMC/Paper@706c98a Update Datafixer
PaperMC/Paper@02e2402 Update README
PaperMC/Paper@c984991 Fix mc dev fix by removing it
PaperMC/Paper@490517d fixed flat bedrock patch
PaperMC/Paper@9da236f re-add config for stronghold seed patch
PaperMC/Paper@9a73213 Adventure 4.10.0
PaperMC/Paper@37436ac Move comment up
PaperMC/Paper@c6fc144 Fix unload stall
PaperMC/Paper@fbe43d6 clean up patch changes
PaperMC/Paper@3526f22 move patch relying on TraceUtil to after its creation
PaperMC/Paper@fd74326 update reobf-mappings-patch.tiny
PaperMC/Paper@5071d50 clean up view distance api diff
PaperMC/Paper@cc45a35 move decompile fixes to start of git history
PaperMC/Paper@146ac7b address failing mob goals test
PaperMC/Paper@b9037a5 fix issue resulting from kenny's apatch addiction
PaperMC/Paper@126ca73 Add TODO for leaf
PaperMC/Paper@ab8a139 Configure javadoc overview and doc-files copying
PaperMC/Paper@0859f59 1_18_R2
PaperMC/Paper@14add2b Updated Upstream (CraftBukkit)
PaperMC/Paper@178802a Fix various 1.18.2 update issues (#7523)
PaperMC/Paper@b1afebb Force close world loading screen on join (#7529)
PaperMC/Paper@d3caeeb Fix early registry access in xray patch
PaperMC/Paper@c6ea84c Drop unneeded desync patch
PaperMC/Paper@12d89fe Revert chunk postprocessing back to 1.18.1 logic
PaperMC/Paper@90788a5 clean up prepareTickingChunk diff
PaperMC/Paper@d33cdcf Updated Upstream (Bukkit/CraftBukkit)
PaperMC/Paper@753bf2c Update paperweight to 1.3.5
PaperMC/Paper@15b6b3d Add StructuresLocateEvent as replacement for StructureLocateEvent (#7524)
PaperMC/Paper@c09365a Fix deadlock on watchdog crash (#7535)
PaperMC/Paper@719daa8 Updated Upstream (CraftBukkit)
PaperMC/Paper@b9f26bb Add printPaperVersion task
PaperMC/Paper@63aa4d3 Clarify exception messages for invalid view distances (#7510)
PaperMC/Paper@0ee6dda Add javadoc linking for adventure-text-minimessage (#7538)
PaperMC/Paper@b6616c8 Fix falling block spawn methods
PaperMC/Paper@6d47843 replace bungeecord-chat dependency with deprecated version (#7539)
PaperMC/Paper@42a9c37 Move Adventure patch up
2022-03-04 18:40:31 -05:00

67 lines
3.7 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: lexikiq <noellekiq@gmail.com>
Date: Fri, 18 Jun 2021 03:18:47 -0400
Subject: [PATCH] Add UnsafeValues#canPlaceItemOn
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
index 41e7ca100073052b99c82fa6a82f8168e0135499..30a4ceccf2ac0244f91b64cc4864e186211c9042 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
@@ -601,6 +601,55 @@ public final class CraftMagicNumbers implements UnsafeValues {
}
// Paper end
+ // Parchment start
+ @Override
+ public java.util.concurrent.CompletableFuture<Boolean> canPlaceItemOn(ItemStack item, gg.projecteden.parchment.OptionalHumanEntity player, org.bukkit.block.Block block, org.bukkit.block.BlockFace face) {
+ org.apache.commons.lang3.Validate.notNull(item, "item");
+ org.apache.commons.lang3.Validate.notNull(block, "block");
+ org.apache.commons.lang3.Validate.notNull(face, "face");
+ org.bukkit.entity.HumanEntity human = player == null ? null : player.getPlayer();
+ java.util.concurrent.CompletableFuture<Boolean> future = new java.util.concurrent.CompletableFuture<>();
+ if (block.getType().isEmpty() || block.isLiquid() || (block.getType() == Material.LIGHT && item.getType() != Material.LIGHT)) {
+ future.complete(false);
+ return future;
+ } else if (!face.isCartesian()) {
+ throw new IllegalArgumentException("face must be cartesian");
+ }
+
+
+ net.minecraft.world.entity.player.Player nmsPlayer = human == null ? null : ((org.bukkit.craftbukkit.entity.CraftHumanEntity) human).getHandle();
+ org.bukkit.craftbukkit.block.CraftBlock cBlock = (org.bukkit.craftbukkit.block.CraftBlock) block;
+ org.bukkit.craftbukkit.block.CraftBlock relativeBlock = (org.bukkit.craftbukkit.block.CraftBlock) block.getRelative(face);
+ if (!relativeBlock.isReplaceable()) {
+ future.complete(false);
+ return future;
+ }
+
+ org.bukkit.Location playerLoc = human != null ? human.getLocation() : relativeBlock.getLocation();
+ net.minecraft.core.Direction dir = net.minecraft.core.Direction.valueOf(face.name());
+ net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(item);
+ Item nmsItem = nmsStack.getItem();
+ if (!(nmsItem instanceof net.minecraft.world.item.BlockItem blockItem)) {
+ future.complete(false);
+ return future;
+ }
+
+ net.minecraft.world.item.context.BlockPlaceContext context = new net.minecraft.world.item.context.BlockPlaceContext(new net.minecraft.world.item.context.UseOnContext(cBlock.getCraftWorld().getHandle(), nmsPlayer, net.minecraft.world.InteractionHand.MAIN_HAND, nmsStack, new net.minecraft.world.phys.BlockHitResult(CraftVector.toNMS(playerLoc.toVector()), dir, cBlock.getPosition(), false)));
+ context = blockItem.updatePlacementContext(context);
+ if (context == null) {
+ future.complete(false);
+ return future;
+ }
+ BlockState blockState = blockItem.getBlock().getStateForPlacement(context);
+ if (blockState == null) {
+ future.complete(false);
+ return future;
+ }
+ final net.minecraft.world.item.context.BlockPlaceContext ctx = context;
+ return future.completeAsync(() -> blockItem.canPlace(ctx, blockState), net.minecraft.server.MCUtil.MAIN_EXECUTOR);
+ }
+ // Parchment end
+
/**
* This helper class represents the different NBT Tags.
* <p>