geforkt von Mirrors/Paper
a284e40c70
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9b45fa2f #667: Allow setting BrewEvent results 8c776ddc SPIGOT-6762: ChatPaginator.wordWrap only transfers one modifier da372966 SPIGOT-4590, SPIGOT-6769: Clarify DamageCause documentation CraftBukkit Changes: cef1fda3 #947: Add missing spawn eggs for SpawnEggMeta eb9a0f34 #945: Allow setting BrewEvent results
59 Zeilen
2.9 KiB
Diff
59 Zeilen
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jakub Zacek <dawon@dawon.eu>
|
|
Date: Mon, 4 Oct 2021 10:16:44 +0200
|
|
Subject: [PATCH] Add methods to find targets for lightning strikes
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
index 08c6ea9f19fa9218af089ed3bd2dcda1e83591ed..710a1064cec9c7ec93e1258b0786e74ab9af0c12 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
@@ -956,6 +956,11 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
|
}
|
|
|
|
protected BlockPos findLightningTargetAround(BlockPos pos) {
|
|
+ // Paper start
|
|
+ return this.findLightningTargetAround(pos, false);
|
|
+ }
|
|
+ public BlockPos findLightningTargetAround(BlockPos pos, boolean returnNullWhenNoTarget) {
|
|
+ // Paper end
|
|
BlockPos blockposition1 = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos);
|
|
Optional<BlockPos> optional = this.findLightningRod(blockposition1);
|
|
|
|
@@ -970,6 +975,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
|
if (!list.isEmpty()) {
|
|
return ((LivingEntity) list.get(this.random.nextInt(list.size()))).blockPosition();
|
|
} else {
|
|
+ if (returnNullWhenNoTarget) return null; // Paper
|
|
if (blockposition1.getY() == this.getMinBuildHeight() - 1) {
|
|
blockposition1 = blockposition1.above(2);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index 8c238a445b327e24d8152b36ebc2b1b57e73d0e1..00d8b61c04ac91770b0ff3b846d3ff70bef2e8e7 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -700,6 +700,23 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
return (LightningStrike) lightning.getBukkitEntity();
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public Location findLightningRod(Location location) {
|
|
+ return this.world.findLightningRod(net.minecraft.server.MCUtil.toBlockPosition(location))
|
|
+ .map(blockPos -> net.minecraft.server.MCUtil.toLocation(this.world, blockPos)
|
|
+ // get the actual rod pos
|
|
+ .subtract(0, 1, 0))
|
|
+ .orElse(null);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public Location findLightningTarget(Location location) {
|
|
+ final BlockPos pos = this.world.findLightningTargetAround(net.minecraft.server.MCUtil.toBlockPosition(location), true);
|
|
+ return pos == null ? null : net.minecraft.server.MCUtil.toLocation(this.world, pos);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public boolean generateTree(Location loc, TreeType type) {
|
|
return generateTree(loc, CraftWorld.rand, type);
|