mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 03:48:01 +01:00
da9d110d5b
This patch does not appear to be doing anything useful, and may hide errors. Currently, the save logic does not run through this path either so it did not do anything. Additionally, properly implement support for handling RegionFileSizeException in Moonrise.
61 lines
3.3 KiB
Diff
61 lines
3.3 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
|
|
|
|
== AT ==
|
|
public net.minecraft.server.level.ServerLevel findLightningRod(Lnet/minecraft/core/BlockPos;)Ljava/util/Optional;
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
index 57b82b90ab55922e57ccf79c57296d1d2e34d6a2..50d4bd6223eb92c640a61ee61af862e794fbb519 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
|
@@ -740,6 +740,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
}
|
|
|
|
protected BlockPos findLightningTargetAround(BlockPos pos) {
|
|
+ // Paper start - Add methods to find targets for lightning strikes
|
|
+ return this.findLightningTargetAround(pos, false);
|
|
+ }
|
|
+ public BlockPos findLightningTargetAround(BlockPos pos, boolean returnNullWhenNoTarget) {
|
|
+ // Paper end - Add methods to find targets for lightning strikes
|
|
BlockPos blockposition1 = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos);
|
|
Optional<BlockPos> optional = this.findLightningRod(blockposition1);
|
|
|
|
@@ -754,6 +759,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
|
if (!list.isEmpty()) {
|
|
return ((LivingEntity) list.get(this.random.nextInt(list.size()))).blockPosition();
|
|
} else {
|
|
+ if (returnNullWhenNoTarget) return null; // Paper - Add methods to find targets for lightning strikes
|
|
if (blockposition1.getY() == this.getMinY() - 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 6596af8332ca6abbcaa68cae60ba994c39767938..1812dcd6e21d6de834ce6c39b5b69cee31a5fa06 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -675,6 +675,23 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
return (LightningStrike) lightning.getBukkitEntity();
|
|
}
|
|
|
|
+ // Paper start - Add methods to find targets for lightning strikes
|
|
+ @Override
|
|
+ public Location findLightningRod(Location location) {
|
|
+ return this.world.findLightningRod(io.papermc.paper.util.MCUtil.toBlockPosition(location))
|
|
+ .map(blockPos -> io.papermc.paper.util.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(io.papermc.paper.util.MCUtil.toBlockPosition(location), true);
|
|
+ return pos == null ? null : io.papermc.paper.util.MCUtil.toLocation(this.world, pos);
|
|
+ }
|
|
+ // Paper end - Add methods to find targets for lightning strikes
|
|
+
|
|
@Override
|
|
public boolean generateTree(Location loc, TreeType type) {
|
|
return this.generateTree(loc, CraftWorld.rand, type);
|