Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ index e4cbe8d6176c2174ed5fffb9ea28f69c12dc9f1e..70e9c7a649a7c5145ecdb679f5fe54f3
}
// Paper end - rewrite chunk system
diff --git a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
index dbea0449cebd448f5b165097aee8633e4d8bac67..9d73b706167d5d997b1af018c7ceaf0d200c7ff1 100644
index dbea0449cebd448f5b165097aee8633e4d8bac67..e9e98d45e10a740d72842b85b09fbfd923f79966 100644
--- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
+++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java
@@ -15,11 +15,13 @@ import net.minecraft.util.FileUtil;
Expand Down Expand Up @@ -176,7 +176,7 @@ index dbea0449cebd448f5b165097aee8633e4d8bac67..9d73b706167d5d997b1af018c7ceaf0d
+
+ // DivineMC start - Buffered Linear region format
+ public static org.bxteam.divinemc.region.IRegionFile createNew(RegionStorageInfo info, Path filePath, Path folder, boolean sync) throws IOException{
+ final org.bxteam.divinemc.region.EnumRegionFileExtension regionFormat = org.bxteam.divinemc.config.DivineConfig.MiscCategory.regionFileType;
+ final org.bxteam.divinemc.region.EnumRegionFileExtension regionFormat = org.bxteam.divinemc.config.DivineConfig.RegionSettingsCategory.regionFileType;
+ final String fullFileName = filePath.getFileName().toString();
+ final String[] fullNameSplit = fullFileName.split("\\.");
+ final String extensionName = fullNameSplit[fullNameSplit.length - 1];
Expand All @@ -190,7 +190,7 @@ index dbea0449cebd448f5b165097aee8633e4d8bac67..9d73b706167d5d997b1af018c7ceaf0d
+ }
+
+ public static String getExtensionName() {
+ return "." + org.bxteam.divinemc.config.DivineConfig.MiscCategory.regionFileType.getArgument();
+ return "." + org.bxteam.divinemc.config.DivineConfig.RegionSettingsCategory.regionFileType.getArgument();
}
+ // DivineMC end - Buffered Linear region format

Expand Down
625 changes: 305 additions & 320 deletions divinemc-server/paper-patches/features/0001-Rebrand.patch

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@
import org.bxteam.divinemc.async.pathfinding.AsyncPath;
import org.bxteam.divinemc.async.tracking.MultithreadedTracker;
import org.bxteam.divinemc.config.DivineConfig;
import org.bxteam.divinemc.region.EnumRegionFileExtension;
import org.bxteam.divinemc.region.type.BufferedRegionFile;
import org.bxteam.divinemc.region.Flusher;

import java.util.concurrent.TimeUnit;

Expand All @@ -16,14 +15,6 @@ public class ExecutorShutdown {
public static final Logger LOGGER = LogManager.getLogger(ExecutorShutdown.class.getSimpleName());

public static void shutdown(MinecraftServer server) {
if (BufferedRegionFile.flusherInitialized && DivineConfig.MiscCategory.regionFileType == EnumRegionFileExtension.B_LINEAR) {
LOGGER.info("Shutting down buffered region executors...");

try {
BufferedRegionFile.shutdown();
} catch (InterruptedException ignored) { }
}

if (server.mobSpawnExecutor != null && server.mobSpawnExecutor.thread.isAlive()) {
LOGGER.info("Shutting down mob spawn executor...");

Expand Down Expand Up @@ -58,5 +49,11 @@ public static void shutdown(MinecraftServer server) {
AsyncPath.EXECUTOR.awaitTermination(10L, TimeUnit.SECONDS);
} catch (InterruptedException ignored) { }
}

final Flusher<?> flusher = DivineConfig.RegionSettingsCategory.flusher;
if (flusher != null) {
LOGGER.info("Shutting down region flusher executor...");
flusher.shutdown();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ public enum ConfigCategory {
PERFORMANCE("performance"),
FIXES("fixes"),
NETWORK("network"),
MISC("misc");
MISC("misc"),
REGION("region-settings");

private final String name;

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@

import net.minecraft.world.level.chunk.storage.RegionFile;
import org.bxteam.divinemc.config.DivineConfig;
import org.bxteam.divinemc.region.type.BufferedRegionFile;
import org.bxteam.divinemc.region.type.LinearRegionFile;
import org.bxteam.divinemc.region.buffered.BufferedRegionFile;
import org.bxteam.divinemc.region.buffered.BufferedRegionFileFlusher;
import org.bxteam.divinemc.region.linear.LinearRegionFile;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;

public enum EnumRegionFileExtension {
MCA("mca", "mca", (info) -> new RegionFile(info.info(), info.filePath(), info.folder(), info.sync())),
LINEAR("linear", "linear", (info) -> new LinearRegionFile(info.info(), info.filePath(), info.folder(), info.sync(), DivineConfig.MiscCategory.linearCompressionLevel)),
B_LINEAR("b_linear", "b_linear", (info) -> new BufferedRegionFile(info.filePath(), DivineConfig.MiscCategory.linearCompressionLevel));
LINEAR("linear", "linear", (info) -> new LinearRegionFile(info.filePath(), DivineConfig.RegionSettingsCategory.compressionLevel, DivineConfig.RegionSettingsCategory.linearImplementation)),
B_LINEAR("b_linear", "b_linear", (info) -> new BufferedRegionFile(info.filePath(), DivineConfig.RegionSettingsCategory.compressionLevel, (BufferedRegionFileFlusher) DivineConfig.RegionSettingsCategory.flusher));

private final String name;
private final String argument;
Expand All @@ -23,13 +25,7 @@ public enum EnumRegionFileExtension {

@Nullable
public static EnumRegionFileExtension fromString(String string) {
for (EnumRegionFileExtension format : values()) {
if (format.name.equalsIgnoreCase(string)) {
return format;
}
}

return null;
return Arrays.stream(values()).filter(format -> format.name.equalsIgnoreCase(string)).findFirst().orElse(null);
}

public IRegionCreateFunction getCreator() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.bxteam.divinemc.region;

import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.logging.LogUtils;
import org.slf4j.Logger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public abstract class Flusher<T> implements Runnable {
public static final Logger logger = LogUtils.getLogger();
public final ScheduledExecutorService scheduler;
public final ExecutorService executor;
public final long flushOfWriteTimeoutMs;

public Flusher(int maxThreadCount, long checkIntervalMs, long flushOfWriteTimeoutMs) {
this.flushOfWriteTimeoutMs = flushOfWriteTimeoutMs;
scheduler = Executors.newSingleThreadScheduledExecutor(
new ThreadFactoryBuilder()
.setNameFormat("region-flush-scheduler")
.build()
);

scheduler.scheduleAtFixedRate(this, 0L, checkIntervalMs, TimeUnit.MILLISECONDS);

ThreadFactoryBuilder factory = new ThreadFactoryBuilder()
.setNameFormat("region-flusher-%d");

executor = Executors.newFixedThreadPool(
maxThreadCount,
factory.build()
);
}

public abstract void shutdown();

public abstract void addFile(T t);

public abstract void removeFile(T t);

public final void shutdownExecutor(ExecutorService executor) {
executor.shutdown();
try {
if (!executor.awaitTermination(10, TimeUnit.MINUTES)) {
executor.shutdownNow();
}
} catch (InterruptedException e) {
executor.shutdownNow();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,23 @@ public interface IRegionFile extends ChunkSystemRegionFile, AutoCloseable {

void write(ChunkPos pos, ByteBuffer buf) throws IOException;

CompoundTag getOversizedData(int x, int z) throws IOException;
default CompoundTag getOversizedData(int x, int z) throws IOException {
return null;
}

boolean isOversized(int x, int z);
default boolean isOversized(int x, int z) {
return false;
}

boolean recalculateHeader() throws IOException;
default boolean recalculateHeader() throws IOException {
return false;
}

void setOversized(int x, int z, boolean oversized) throws IOException;
default void setOversized(int x, int z, boolean oversized) throws IOException {

int getRecalculateCount();
}

default int getRecalculateCount() {
return 0;
};
}
Loading
Loading