aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches-Unmapped/0649-Add-StructureLocateEvent.patch
blob: 3e68e76756beca0c290c967165d4ce0069ae29b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: dfsek <dfsek@protonmail.com>
Date: Wed, 16 Sep 2020 01:12:29 -0700
Subject: [PATCH] Add StructureLocateEvent


diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
index b1f2c424ef358f79c7fced88a61560d3ce32a2b6..f2621f61cb372ec436fe81e7a93f1aef7d360f3f 100644
--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
+++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java
@@ -2,6 +2,7 @@ package net.minecraft.world.level.chunk;
 
 import com.google.common.collect.Lists;
 import com.mojang.serialization.Codec;
+import io.papermc.paper.event.world.StructureLocateEvent; // Paper - Add import due to naming conflict.
 import java.util.BitSet;
 import java.util.Iterator;
 import java.util.List;
@@ -160,6 +161,22 @@ public abstract class ChunkGenerator {
 
     @Nullable
     public BlockPosition findNearestMapFeature(WorldServer worldserver, StructureGenerator<?> structuregenerator, BlockPosition blockposition, int i, boolean flag) {
+        // Paper start
+        org.bukkit.World world = worldserver.getWorld();
+        org.bukkit.Location originLocation = new org.bukkit.Location(world, blockposition.getX(), blockposition.getY(), blockposition.getZ());
+        StructureLocateEvent event = new StructureLocateEvent(world, originLocation, org.bukkit.StructureType.getStructureTypes().get(structuregenerator.i()), i, flag);
+        if(!event.callEvent()) return null;
+        // If event call set a final location, skip structure finding and just return set result.
+        if(event.getResult() != null) return new BlockPosition(event.getResult().getBlockX(), event.getResult().getBlockY(), event.getResult().getBlockZ());
+        // Get origin location (re)defined by event call.
+        blockposition = new BlockPosition(event.getOrigin().getBlockX(), event.getOrigin().getBlockY(), event.getOrigin().getBlockZ());
+        // Get world (re)defined by event call.
+        worldserver = ((org.bukkit.craftbukkit.CraftWorld) event.getOrigin().getWorld()).getHandle();
+        // Get radius and whether to find unexplored structures (re)defined by event call.
+        i = event.getRadius();
+        flag = event.shouldFindUnexplored();
+        structuregenerator = StructureGenerator.a.get(event.getType().getName());
+        // Paper end
         if (!this.b.a(structuregenerator)) {
             return null;
         } else if (structuregenerator == StructureGenerator.STRONGHOLD) {