split NMS away from core bukkit code

This commit is contained in:
dfsek 2022-05-31 22:31:40 -07:00
parent 8e933a1bb4
commit 839013d89a
52 changed files with 135 additions and 80 deletions

View File

@ -39,7 +39,7 @@ allprojects {
}
afterEvaluate {
forSubProjects(":platforms") {
forImmediateSubProjects(":platforms") {
configureDistribution()
}
forSubProjects(":common:addons") {

View File

@ -29,6 +29,12 @@ fun Project.forSubProjects(project: String, action: Action<Project>) {
}
}
fun Project.forImmediateSubProjects(project: String, action: Action<Project>) {
project(project).childProjects.forEach {
action.execute(it.value)
}
}
fun preRelease(preRelease: Boolean) {
isPrerelease = preRelease
}

View File

@ -14,22 +14,8 @@ val paperURL = "https://papermc.io/api/v2/projects/paper/versions/%version%/buil
val purpurURL = "https://api.purpurmc.org/v2/purpur/%version%/latest/download"
dependencies {
shadedApi(project(":common:implementation:base"))
api("org.slf4j:slf4j-api:1.8.0-beta4") {
because("Minecraft 1.17+ includes slf4j 1.8.0-beta4, so we need to shade it for other versions.")
}
implementation("org.apache.logging.log4j", "log4j-slf4j18-impl", Versions.Libraries.log4j_slf4j_impl) {
because("Minecraft 1.17+ includes slf4j 1.8.0-beta4, so we need to shade it for other versions.")
}
compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-20220519.005047-123")
compileOnly(group = "org.spigotmc", name = "spigot", version = "1.18.2-R0.1-SNAPSHOT")
shadedApi("io.papermc", "paperlib", Versions.Bukkit.paperLib)
shadedApi("com.google.guava:guava:30.0-jre")
shadedApi("cloud.commandframework", "cloud-paper", Versions.Libraries.cloud)
shaded(project(":platforms:bukkit:common"))
shaded(project(":platforms:bukkit:nms:v1_18_R2"))
}
val throttleCoreCount = 0

View File

@ -0,0 +1,18 @@
repositories {
}
dependencies {
shadedApi(project(":common:implementation:base"))
api("org.slf4j:slf4j-api:1.8.0-beta4") {
because("Minecraft 1.17+ includes slf4j 1.8.0-beta4, so we need to shade it for other versions.")
}
compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-SNAPSHOT")
shadedApi("io.papermc", "paperlib", Versions.Bukkit.paperLib)
shadedApi("com.google.guava:guava:30.0-jre")
shadedApi("cloud.commandframework", "cloud-paper", Versions.Libraries.cloud)
}

View File

@ -21,10 +21,6 @@ import cloud.commandframework.brigadier.CloudBrigadierManager;
import cloud.commandframework.bukkit.CloudBukkitCapabilities;
import cloud.commandframework.execution.CommandExecutionCoordinator;
import cloud.commandframework.paper.PaperCommandManager;
import com.dfsek.terra.bukkit.nms.NMSBiomeInjector;
import com.dfsek.terra.bukkit.nms.NMSInjectListener;
import org.bukkit.Bukkit;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.java.JavaPlugin;
@ -42,6 +38,7 @@ import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
import com.dfsek.terra.bukkit.generator.BukkitChunkGeneratorWrapper;
import com.dfsek.terra.bukkit.listeners.CommonListener;
import com.dfsek.terra.bukkit.nms.Initializer;
import com.dfsek.terra.bukkit.util.PaperUtil;
import com.dfsek.terra.bukkit.util.VersionUtil;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
@ -60,7 +57,6 @@ public class TerraBukkitPlugin extends JavaPlugin {
}
platform.getEventManager().callEvent(new PlatformInitializationEvent());
NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry());
try {
@ -94,8 +90,13 @@ public class TerraBukkitPlugin extends JavaPlugin {
}
Bukkit.getPluginManager().registerEvents(new CommonListener(), this); // Register master event listener
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), this); // Register master event listener
PaperUtil.checkPaper(this);
Initializer.init(platform);
}
public PlatformImpl getPlatform() {
return platform;
}
@SuppressWarnings({ "deprecation", "AccessOfSystemProperties" })

View File

@ -0,0 +1,33 @@
package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.bukkit.PlatformImpl;
import com.dfsek.terra.bukkit.TerraBukkitPlugin;
import org.bukkit.Bukkit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.InvocationTargetException;
public interface Initializer {
String NMS = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
String TERRA_PACKAGE = Initializer.class.getPackageName();
void initialize(PlatformImpl plugin);
static void init(PlatformImpl platform) {
Logger logger = LoggerFactory.getLogger(Initializer.class);
try {
Class<?> initializerClass = Class.forName(TERRA_PACKAGE + "." + NMS + ".NMSInitializer");
try {
Initializer initializer = (Initializer) initializerClass.getConstructor().newInstance();
initializer.initialize(platform);
} catch(ReflectiveOperationException e) {
throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e);
}
} catch(ClassNotFoundException e) {
logger.warn("NMS bindings for version {} do not exist. Support for this version is limited.", NMS);
}
}
}

View File

@ -1,5 +1,7 @@
package com.dfsek.terra.bukkit.util;
import ca.solostudios.strata.Versions;
import ca.solostudios.strata.version.Version;
import io.papermc.lib.PaperLib;
import org.bukkit.Bukkit;
import org.slf4j.Logger;

View File

@ -17,31 +17,26 @@
package com.dfsek.terra.bukkit.world;
import com.dfsek.terra.api.properties.Context;
import com.dfsek.terra.api.properties.PropertyHolder;
import com.dfsek.terra.api.world.biome.PlatformBiome;
import net.minecraft.core.Holder;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.BiomeBase;
public class BukkitPlatformBiome implements PlatformBiome {
public class BukkitPlatformBiome implements PlatformBiome, PropertyHolder {
private final org.bukkit.block.Biome biome;
private ResourceKey<BiomeBase> resourceKey;
private final Context context = new Context();
public BukkitPlatformBiome(org.bukkit.block.Biome biome) {
this.biome = biome;
}
public void setResourceKey(ResourceKey<BiomeBase> resourceKey) {
this.resourceKey = resourceKey;
}
public ResourceKey<BiomeBase> getResourceKey() {
return resourceKey;
}
@Override
public org.bukkit.block.Biome getHandle() {
return biome;
}
@Override
public Context getContext() {
return context;
}
}

View File

@ -0,0 +1,6 @@
dependencies {
api(project(":platforms:bukkit:common"))
compileOnly("io.papermc.paper:paper-api:1.18.2-R0.1-20220519.005047-123")
compileOnly(group = "org.spigotmc", name = "spigot", version = "1.18.2-R0.1-SNAPSHOT")
}

View File

@ -0,0 +1,10 @@
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import com.dfsek.terra.api.properties.Properties;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.BiomeBase;
public record NMSBiomeInfo(ResourceKey<BiomeBase> biomeKey) implements Properties {
}

View File

@ -1,4 +1,4 @@
package com.dfsek.terra.bukkit.nms;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import com.google.common.collect.ImmutableMap;
import com.mojang.serialization.Lifecycle;
@ -9,16 +9,13 @@ import net.minecraft.core.RegistryMaterials;
import net.minecraft.data.RegistryGeneration;
import net.minecraft.resources.MinecraftKey;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.tags.TagKey;
import net.minecraft.world.level.biome.BiomeBase;
import net.minecraft.world.level.biome.BiomeFog;
import net.minecraft.world.level.biome.BiomeFog.GrassColor;
import net.minecraft.world.level.biome.BiomeSettingsGeneration;
import net.minecraft.world.level.biome.BiomeSettingsMobs;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -65,7 +62,7 @@ public class NMSBiomeInjector {
RegistryGeneration.a(RegistryGeneration.i, delegateKey, platform);
biomeRegistry.a(delegateKey, platform, Lifecycle.stable());
platformBiome.setResourceKey(delegateKey);
platformBiome.getContext().put(new NMSBiomeInfo(delegateKey));
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.a());

View File

@ -1,9 +1,4 @@
package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import com.mojang.serialization.Codec;
import net.minecraft.core.Holder;
@ -14,7 +9,10 @@ import net.minecraft.world.level.biome.Climate.Sampler;
import net.minecraft.world.level.biome.WorldChunkManager;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock;
import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.bukkit.world.BukkitPlatformBiome;
public class NMSBiomeProvider extends WorldChunkManager {
@ -28,7 +26,7 @@ public class NMSBiomeProvider extends WorldChunkManager {
});
public NMSBiomeProvider(BiomeProvider delegate, WorldChunkManager vanilla, long seed) {
super(delegate.stream().map(biome -> biomeRegistry.value().g(((BukkitPlatformBiome) biome.getPlatformBiome()).getResourceKey())));
super(delegate.stream().map(biome -> biomeRegistry.value().g(((BukkitPlatformBiome) biome.getPlatformBiome()).getContext().get(NMSBiomeInfo.class).biomeKey())));
this.delegate = delegate;
this.vanilla = vanilla;
this.seed = seed;
@ -51,6 +49,6 @@ public class NMSBiomeProvider extends WorldChunkManager {
@Override
public Holder<BiomeBase> getNoiseBiome(int x, int y, int z, Sampler sampler) {
//return CraftBlock.biomeToBiomeBase(biomeRegistry.value(), ((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getHandle());
return biomeRegistry.value().g(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getResourceKey());
return biomeRegistry.value().g(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getContext().get(NMSBiomeInfo.class).biomeKey());
}
}

View File

@ -1,14 +1,17 @@
package com.dfsek.terra.bukkit.nms;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.info.WorldProperties;
import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Codec;
import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
import net.minecraft.core.BlockPosition;
import net.minecraft.core.Holder;
import net.minecraft.core.IRegistry;
import net.minecraft.core.IRegistryCustom;
import net.minecraft.core.SectionPosition;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.level.RegionLimitedWorldAccess;
import net.minecraft.world.level.BlockColumn;
import net.minecraft.world.level.ChunkCoordIntPair;
@ -29,29 +32,16 @@ import net.minecraft.world.level.levelgen.structure.StructureSet;
import net.minecraft.world.level.levelgen.structure.placement.ConcentricRingsStructurePlacement;
import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
import net.minecraft.world.level.levelgen.structure.templatesystem.DefinedStructureManager;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Random;
import java.util.Set;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.util.generic.Lazy;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.info.WorldProperties;
public class NMSChunkGeneratorDelegate extends ChunkGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(NMSChunkGeneratorDelegate.class);

View File

@ -0,0 +1,15 @@
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import org.bukkit.Bukkit;
import com.dfsek.terra.bukkit.PlatformImpl;
import com.dfsek.terra.bukkit.nms.Initializer;
public class NMSInitializer implements Initializer {
@Override
public void initialize(PlatformImpl platform) {
NMSBiomeInjector.registerBiomes(platform.getRawConfigRegistry());
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
}
}

View File

@ -1,6 +1,4 @@
package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.api.util.generic.Construct;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import net.minecraft.server.level.WorldServer;
import net.minecraft.world.level.chunk.ChunkGenerator;
@ -9,15 +7,11 @@ import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.world.WorldInitEvent;
import org.bukkit.event.world.WorldLoadEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReentrantLock;
import com.dfsek.terra.api.config.ConfigPack;

View File

@ -1,9 +1,9 @@
package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.api.world.info.WorldProperties;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import net.minecraft.world.level.LevelHeightAccessor;
import com.dfsek.terra.api.world.info.WorldProperties;
public class NMSWorldProperties implements WorldProperties {
private final long seed;

View File

@ -1,7 +1,6 @@
package com.dfsek.terra.bukkit.nms;
package com.dfsek.terra.bukkit.nms.v1_18_R2;
import net.minecraft.core.IRegistry;
import net.minecraft.core.IRegistryWritable;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.world.level.biome.BiomeBase;

View File

@ -48,6 +48,7 @@ tasks.getByName<ShadowJar>("shadowJar") {
}
val remapped = tasks.register<RemapJarTask>("remapShadedJar") {
dependsOn("installAddons")
group = "fabric"
val shadowJar = tasks.getByName<ShadowJar>("shadowJar")
dependsOn(shadowJar)

View File

@ -18,6 +18,10 @@ includeImmediateChildren(file("common/addons"), "addon")
includeImmediateChildren(file("platforms"), "platform")
includeImmediateChildren(file("platforms/bukkit/nms"), "Bukkit NMS")
include(":platforms:bukkit:common")
pluginManagement {
repositories {
maven(url = "https://maven.fabricmc.net") {