From fff574c0dd3477556fff3e5543b41f0978012755 Mon Sep 17 00:00:00 2001
From: HexedHero <6012891+HexedHero@users.noreply.github.com>
Date: Sat, 26 Sep 2020 23:51:03 +0100
Subject: [PATCH] Load chunks async when regenning blocks closes #75
---
pom.xml | 37 ++++++++++++++++++-
.../mmocore/manager/CustomBlockManager.java | 11 ++++--
2 files changed, 43 insertions(+), 5 deletions(-)
diff --git a/pom.xml b/pom.xml
index 813046d6..969ad011 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,6 +51,27 @@
-ea -Dfile.encoding=UTF-8
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+
+ io.papermc.lib
+ net.indyuce.mmocore.shaded.paperlib
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
@@ -66,6 +87,10 @@
sk89q-repo
https://maven.enginehub.org/repo/
+
+ papermc
+ https://papermc.io/repo/repository/maven-public/
+
@@ -93,19 +118,27 @@
system
${basedir}/lib/spigot.jar
-
+
org.jetbrains
annotations
19.0.0
+ provided
mysql
mysql-connector-java
5.1.41
+ provided
-
+
+ io.papermc
+ paperlib
+ 1.0.5
+ compile
+
+
com.bekvon.bukkit
diff --git a/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java b/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java
index 8c394fec..4a6d4fae 100644
--- a/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java
+++ b/src/main/java/net/Indyuce/mmocore/manager/CustomBlockManager.java
@@ -16,6 +16,7 @@ import org.bukkit.block.Block;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Entity;
+import io.papermc.lib.PaperLib;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.block.BlockInfo;
import net.Indyuce.mmocore.api.block.BlockInfo.RegeneratingBlock;
@@ -91,9 +92,13 @@ public class CustomBlockManager extends MMOManager {
}
private void regen(RegeneratingBlock info, boolean shutdown) {
- info.getRegeneratingBlock().getBlock().place(info.getLocation(), info);
- info.getLocation().getBlock().getState().update();
- if(!shutdown) active.remove(info);
+ Location infoLocation = info.getLocation();
+ // Get the chunk and load it async if needed.
+ PaperLib.getChunkAtAsync(infoLocation).whenComplete((chunk, ex) -> {
+ info.getRegeneratingBlock().getBlock().place(infoLocation, info);
+ info.getLocation().getBlock().getState().update();
+ if(!shutdown) active.remove(info);
+ });
}
/*