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
67 lines
3.7 KiB
Diff
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>
|