mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-17 22:31:52 +00:00
split most fabric and quilt code into common project
This commit is contained in:
@@ -14,9 +14,9 @@ configurations {
|
|||||||
dependencies {
|
dependencies {
|
||||||
shadedApi(project(":common:implementation:base"))
|
shadedApi(project(":common:implementation:base"))
|
||||||
|
|
||||||
"compileOnly"("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}")
|
compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}")
|
||||||
"annotationProcessor"("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}")
|
annotationProcessor("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}")
|
||||||
"annotationProcessor"("net.fabricmc:fabric-loom:${Versions.Fabric.loom}")
|
annotationProcessor("net.fabricmc:fabric-loom:${Versions.Fabric.loom}")
|
||||||
|
|
||||||
"common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false }
|
"common"(project(path = ":platforms:mixin-common", configuration = "namedElements")) { isTransitive = false }
|
||||||
shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionFabric")) { isTransitive = false }
|
shaded(project(path = ":platforms:mixin-common", configuration = "transformProductionFabric")) { isTransitive = false }
|
||||||
|
|||||||
@@ -21,41 +21,17 @@ import cloud.commandframework.execution.CommandExecutionCoordinator;
|
|||||||
import cloud.commandframework.fabric.FabricServerCommandManager;
|
import cloud.commandframework.fabric.FabricServerCommandManager;
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
||||||
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
|
||||||
import com.dfsek.terra.fabric.util.BiomeUtil;
|
|
||||||
import com.dfsek.terra.mod.CommonPlatform;
|
|
||||||
import com.dfsek.terra.mod.data.Codecs;
|
|
||||||
|
|
||||||
|
|
||||||
public class FabricEntryPoint implements ModInitializer {
|
public class FabricEntryPoint implements ModInitializer {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(FabricEntryPoint.class);
|
private static final Logger logger = LoggerFactory.getLogger(FabricEntryPoint.class);
|
||||||
|
|
||||||
private static final PlatformImpl TERRA_PLUGIN = new PlatformImpl();
|
private static final FabricPlatform TERRA_PLUGIN = new FabricPlatform();
|
||||||
|
|
||||||
|
|
||||||
public static PlatformImpl getPlatform() {
|
|
||||||
return TERRA_PLUGIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void register() { // register the things
|
|
||||||
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER);
|
|
||||||
Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void initialize() {
|
|
||||||
getPlatform().getEventManager().callEvent(
|
|
||||||
new PlatformInitializationEvent());
|
|
||||||
BiomeUtil.registerBiomes();
|
|
||||||
CommonPlatform.get().registerWorldTypes((id, preset) -> BuiltinRegistries.add(BuiltinRegistries.WORLD_PRESET, id, preset));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Terra.
|
||||||
|
*
|
||||||
|
* Terra is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Terra is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.dfsek.terra.fabric;
|
||||||
|
|
||||||
|
import ca.solostudios.strata.Versions;
|
||||||
|
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
||||||
|
import ca.solostudios.strata.version.Version;
|
||||||
|
|
||||||
|
import com.dfsek.terra.lifecycle.LifecyclePlatform;
|
||||||
|
|
||||||
|
import net.fabricmc.loader.api.FabricLoader;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
import com.dfsek.terra.api.util.generic.Lazy;
|
||||||
|
import com.dfsek.terra.mod.CommonPlatform;
|
||||||
|
|
||||||
|
|
||||||
|
public class FabricPlatform extends LifecyclePlatform {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(FabricPlatform.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Collection<BaseAddon> getPlatformMods() {
|
||||||
|
return FabricLoader.getInstance().getAllMods().stream().flatMap(mod -> {
|
||||||
|
String id = mod.getMetadata().getId();
|
||||||
|
if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return Stream.empty();
|
||||||
|
try {
|
||||||
|
Version version = Versions.parseVersion(mod.getMetadata().getVersion().getFriendlyString());
|
||||||
|
return Stream.<BaseAddon>of(new EphemeralAddon(version, "fabric:" + id));
|
||||||
|
} catch(ParseException e) {
|
||||||
|
LOGGER.warn(
|
||||||
|
"Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " +
|
||||||
|
"it.",
|
||||||
|
id, mod.getMetadata().getVersion().getFriendlyString());
|
||||||
|
}
|
||||||
|
return Stream.empty();
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public @NotNull String platformName() {
|
||||||
|
return "Fabric";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull File getDataFolder() {
|
||||||
|
return new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseAddon getPlatformAddon() {
|
||||||
|
return new FabricAddon(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.fabric;
|
|
||||||
|
|
||||||
import ca.solostudios.strata.Versions;
|
|
||||||
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
|
||||||
import ca.solostudios.strata.version.Version;
|
|
||||||
import net.fabricmc.loader.api.FabricLoader;
|
|
||||||
import net.minecraft.MinecraftVersion;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.dfsek.terra.addon.EphemeralAddon;
|
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
|
||||||
import com.dfsek.terra.api.handle.ItemHandle;
|
|
||||||
import com.dfsek.terra.api.handle.WorldHandle;
|
|
||||||
import com.dfsek.terra.api.util.generic.Lazy;
|
|
||||||
import com.dfsek.terra.fabric.util.BiomeUtil;
|
|
||||||
import com.dfsek.terra.mod.CommonPlatform;
|
|
||||||
import com.dfsek.terra.mod.ModPlatform;
|
|
||||||
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
|
|
||||||
import com.dfsek.terra.mod.handle.MinecraftItemHandle;
|
|
||||||
import com.dfsek.terra.mod.handle.MinecraftWorldHandle;
|
|
||||||
|
|
||||||
|
|
||||||
public class PlatformImpl extends ModPlatform {
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class);
|
|
||||||
private final ItemHandle itemHandle = new MinecraftItemHandle();
|
|
||||||
private final WorldHandle worldHandle = new MinecraftWorldHandle();
|
|
||||||
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File(FabricLoader.getInstance().getConfigDir().toFile(), "Terra"));
|
|
||||||
private MinecraftServer server;
|
|
||||||
|
|
||||||
public PlatformImpl() {
|
|
||||||
CommonPlatform.initialize(this);
|
|
||||||
load();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setServer(MinecraftServer server) {
|
|
||||||
this.server = server;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MinecraftServer getServer() {
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean reload() {
|
|
||||||
getTerraConfig().load(this);
|
|
||||||
getRawConfigRegistry().clear();
|
|
||||||
boolean succeed = getRawConfigRegistry().loadAll(this);
|
|
||||||
|
|
||||||
|
|
||||||
if(server != null) {
|
|
||||||
server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> {
|
|
||||||
LOGGER.warn("Failed to execute reload", throwable);
|
|
||||||
return null;
|
|
||||||
}).join();
|
|
||||||
BiomeUtil.registerBiomes();
|
|
||||||
server.getWorlds().forEach(world -> {
|
|
||||||
if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) {
|
|
||||||
getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
|
|
||||||
chunkGeneratorWrapper.setPack(pack);
|
|
||||||
LOGGER.info("Replaced pack in chunk generator for world {}", world);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return succeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Iterable<BaseAddon> platformAddon() {
|
|
||||||
List<BaseAddon> addons = new ArrayList<>();
|
|
||||||
|
|
||||||
super.platformAddon().forEach(addons::add);
|
|
||||||
|
|
||||||
String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget();
|
|
||||||
try {
|
|
||||||
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
|
|
||||||
} catch(ParseException e) {
|
|
||||||
try {
|
|
||||||
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
|
|
||||||
} catch(ParseException ex) {
|
|
||||||
LOGGER.warn("Failed to parse Minecraft version", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FabricLoader.getInstance().getAllMods().forEach(mod -> {
|
|
||||||
String id = mod.getMetadata().getId();
|
|
||||||
if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return;
|
|
||||||
try {
|
|
||||||
Version version = Versions.parseVersion(mod.getMetadata().getVersion().getFriendlyString());
|
|
||||||
addons.add(new EphemeralAddon(version, "fabric:" + id));
|
|
||||||
} catch(ParseException e) {
|
|
||||||
LOGGER.warn(
|
|
||||||
"Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " +
|
|
||||||
"it.",
|
|
||||||
id, mod.getMetadata().getVersion().getFriendlyString());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return addons;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull String platformName() {
|
|
||||||
return "Fabric";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull WorldHandle getWorldHandle() {
|
|
||||||
return worldHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull File getDataFolder() {
|
|
||||||
return dataFolder.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ItemHandle getItemHandle() {
|
|
||||||
return itemHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BaseAddon getPlatformAddon() {
|
|
||||||
return new FabricAddon(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-32
@@ -1,32 +0,0 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
|
||||||
|
|
||||||
import com.mojang.datafixers.DataFixer;
|
|
||||||
import net.minecraft.resource.ResourcePackManager;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.SaveLoader;
|
|
||||||
import net.minecraft.server.WorldGenerationProgressListenerFactory;
|
|
||||||
import net.minecraft.util.ApiServices;
|
|
||||||
import net.minecraft.world.level.storage.LevelStorage;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
import java.net.Proxy;
|
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
|
||||||
|
|
||||||
|
|
||||||
@Mixin(MinecraftServer.class)
|
|
||||||
public class MinecraftServerMixin {
|
|
||||||
@Inject(method = "<init>(Ljava/lang/Thread;Lnet/minecraft/world/level/storage/LevelStorage$Session;" +
|
|
||||||
"Lnet/minecraft/resource/ResourcePackManager;Lnet/minecraft/server/SaveLoader;Ljava/net/Proxy;" +
|
|
||||||
"Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/util/ApiServices;" +
|
|
||||||
"Lnet/minecraft/server/WorldGenerationProgressListenerFactory;)V",
|
|
||||||
at = @At("RETURN"))
|
|
||||||
private void injectConstructor(Thread serverThread, LevelStorage.Session session, ResourcePackManager dataPackManager,
|
|
||||||
SaveLoader saveLoader, Proxy proxy, DataFixer dataFixer, ApiServices apiServices,
|
|
||||||
WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) {
|
|
||||||
FabricEntryPoint.getPlatform().setServer((MinecraftServer) (Object) this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-31
@@ -1,31 +0,0 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
|
||||||
|
|
||||||
import net.minecraft.util.math.noise.DoublePerlinNoiseSampler;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
|
||||||
import net.minecraft.world.biome.source.util.MultiNoiseUtil.MultiNoiseSampler;
|
|
||||||
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
|
|
||||||
import net.minecraft.world.gen.noise.NoiseConfig;
|
|
||||||
import org.spongepowered.asm.mixin.Final;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
import com.dfsek.terra.mod.util.SeedHack;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hack to map noise sampler to seeds
|
|
||||||
*/
|
|
||||||
@Mixin(NoiseConfig.class)
|
|
||||||
public class NoiseConfigMixin {
|
|
||||||
@Shadow
|
|
||||||
@Final
|
|
||||||
private MultiNoiseSampler multiNoiseSampler;
|
|
||||||
|
|
||||||
@Inject(method = "<init>(Lnet/minecraft/world/gen/chunk/ChunkGeneratorSettings;Lnet/minecraft/util/registry/Registry;J)V", at = @At("TAIL"))
|
|
||||||
private void mapMultiNoise(ChunkGeneratorSettings chunkGeneratorSettings, Registry<DoublePerlinNoiseSampler.NoiseParameters> noiseRegistry, long seed, CallbackInfo ci) {
|
|
||||||
SeedHack.register(multiNoiseSampler, seed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-20
@@ -1,20 +0,0 @@
|
|||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
|
||||||
|
|
||||||
|
|
||||||
import net.minecraft.util.registry.Registry;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
|
||||||
|
|
||||||
|
|
||||||
// Register Terra things to the builtin registries.
|
|
||||||
@Mixin(Registry.class)
|
|
||||||
public class RegistryMixin {
|
|
||||||
@Inject(method = "<clinit>", at = @At("RETURN"))
|
|
||||||
private static void registerTerraGenerators(CallbackInfo ci) {
|
|
||||||
FabricEntryPoint.register();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mixins that inject behavior into the client/server lifecycle.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.fabric.mixin.lifecycle;
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
package com.dfsek.terra.fabric.util;
|
|
||||||
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
|
||||||
import net.minecraft.util.registry.RegistryKey;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import com.dfsek.terra.api.config.ConfigPack;
|
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
|
||||||
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
|
||||||
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
|
||||||
import com.dfsek.terra.mod.util.MinecraftUtil;
|
|
||||||
|
|
||||||
|
|
||||||
public final class BiomeUtil {
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(BiomeUtil.class);
|
|
||||||
|
|
||||||
private BiomeUtil() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void registerBiomes() {
|
|
||||||
logger.info("Registering biomes...");
|
|
||||||
FabricEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
|
||||||
pack.getCheckedRegistry(Biome.class)
|
|
||||||
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
|
||||||
});
|
|
||||||
MinecraftUtil.registerFlora(BuiltinRegistries.BIOME);
|
|
||||||
logger.info("Terra biomes registered.");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clones a Vanilla biome and injects Terra data to create a Terra-vanilla biome delegate.
|
|
||||||
*
|
|
||||||
* @param biome The Terra BiomeBuilder.
|
|
||||||
* @param pack The ConfigPack this biome belongs to.
|
|
||||||
*/
|
|
||||||
private static void registerBiome(Biome biome, ConfigPack pack,
|
|
||||||
com.dfsek.terra.api.registry.key.RegistryKey id) {
|
|
||||||
Registry<net.minecraft.world.biome.Biome> registry = BuiltinRegistries.BIOME;
|
|
||||||
RegistryKey<net.minecraft.world.biome.Biome> vanilla = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(registry);
|
|
||||||
|
|
||||||
|
|
||||||
if(pack.getContext().get(PreLoadCompatibilityOptions.class).useVanillaBiomes()) {
|
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(vanilla);
|
|
||||||
} else {
|
|
||||||
net.minecraft.world.biome.Biome minecraftBiome = MinecraftUtil.createBiome(biome, registry.get(vanilla));
|
|
||||||
|
|
||||||
Identifier identifier = new Identifier("terra", MinecraftUtil.createBiomeID(pack, id));
|
|
||||||
|
|
||||||
if(registry.containsId(identifier)) {
|
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(MinecraftUtil.getEntry(registry, identifier)
|
|
||||||
.orElseThrow()
|
|
||||||
.getKey()
|
|
||||||
.orElseThrow());
|
|
||||||
} else {
|
|
||||||
((ProtoPlatformBiome) biome.getPlatformBiome()).setDelegate(BuiltinRegistries.add(registry,
|
|
||||||
MinecraftUtil.registerKey(identifier).getValue(),
|
|
||||||
minecraftBiome).getKey().orElseThrow());
|
|
||||||
}
|
|
||||||
|
|
||||||
MinecraftUtil.TERRA_BIOME_MAP.computeIfAbsent(vanilla.getValue(), i -> new ArrayList<>()).add(identifier);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
},
|
},
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"terra.fabric.mixins.json",
|
"terra.fabric.mixins.json",
|
||||||
|
"terra.lifecycle.mixins.json",
|
||||||
"terra.common.mixins.json"
|
"terra.common.mixins.json"
|
||||||
],
|
],
|
||||||
"depends": {
|
"depends": {
|
||||||
|
|||||||
@@ -4,15 +4,10 @@
|
|||||||
"package": "com.dfsek.terra.fabric.mixin",
|
"package": "com.dfsek.terra.fabric.mixin",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"lifecycle.MinecraftServerMixin",
|
|
||||||
"lifecycle.NoiseConfigMixin",
|
|
||||||
"lifecycle.RegistryMixin"
|
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"lifecycle.client.MinecraftClientMixin"
|
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
"lifecycle.server.ServerMainMixin"
|
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|||||||
@@ -47,16 +47,16 @@ public class ForgeEntryPoint {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
AwfulForgeHacks.loadAllTerraClasses();
|
AwfulForgeHacks.loadAllTerraClasses();
|
||||||
TERRA_PLUGIN = new PlatformImpl();
|
TERRA_PLUGIN = new ForgePlatform();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String MODID = "terra";
|
public static final String MODID = "terra";
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ForgeEntryPoint.class);
|
private static final Logger logger = LoggerFactory.getLogger(ForgeEntryPoint.class);
|
||||||
|
|
||||||
private static final PlatformImpl TERRA_PLUGIN;
|
private static final ForgePlatform TERRA_PLUGIN;
|
||||||
|
|
||||||
public static PlatformImpl getPlatform() {
|
public static ForgePlatform getPlatform() {
|
||||||
return TERRA_PLUGIN;
|
return TERRA_PLUGIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-20
@@ -34,23 +34,17 @@ import java.util.List;
|
|||||||
|
|
||||||
import com.dfsek.terra.addon.EphemeralAddon;
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
import com.dfsek.terra.api.handle.ItemHandle;
|
|
||||||
import com.dfsek.terra.api.handle.WorldHandle;
|
|
||||||
import com.dfsek.terra.api.util.generic.Lazy;
|
import com.dfsek.terra.api.util.generic.Lazy;
|
||||||
import com.dfsek.terra.mod.CommonPlatform;
|
import com.dfsek.terra.mod.CommonPlatform;
|
||||||
import com.dfsek.terra.mod.ModPlatform;
|
import com.dfsek.terra.mod.ModPlatform;
|
||||||
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
|
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
|
||||||
import com.dfsek.terra.mod.handle.MinecraftItemHandle;
|
|
||||||
import com.dfsek.terra.mod.handle.MinecraftWorldHandle;
|
|
||||||
|
|
||||||
|
|
||||||
public class PlatformImpl extends ModPlatform {
|
public class ForgePlatform extends ModPlatform {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(ForgePlatform.class);
|
||||||
private final ItemHandle itemHandle = new MinecraftItemHandle();
|
|
||||||
private final WorldHandle worldHandle = new MinecraftWorldHandle();
|
|
||||||
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File("./config/Terra"));
|
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File("./config/Terra"));
|
||||||
|
|
||||||
public PlatformImpl() {
|
public ForgePlatform() {
|
||||||
CommonPlatform.initialize(this);
|
CommonPlatform.initialize(this);
|
||||||
load();
|
load();
|
||||||
}
|
}
|
||||||
@@ -118,22 +112,11 @@ public class PlatformImpl extends ModPlatform {
|
|||||||
return "Forge";
|
return "Forge";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull WorldHandle getWorldHandle() {
|
|
||||||
return worldHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull File getDataFolder() {
|
public @NotNull File getDataFolder() {
|
||||||
return dataFolder.value();
|
return dataFolder.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ItemHandle getItemHandle() {
|
|
||||||
return itemHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseAddon getPlatformAddon() {
|
public BaseAddon getPlatformAddon() {
|
||||||
return new ForgeAddon(this);
|
return new ForgeAddon(this);
|
||||||
@@ -15,6 +15,8 @@ loom {
|
|||||||
dependencies {
|
dependencies {
|
||||||
shadedApi(project(":common:implementation:base"))
|
shadedApi(project(":common:implementation:base"))
|
||||||
|
|
||||||
|
compileOnly("net.fabricmc:sponge-mixin:${Versions.Fabric.mixin}")
|
||||||
|
|
||||||
modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}")
|
modImplementation("net.fabricmc:fabric-loader:${Versions.Mod.fabricLoader}")
|
||||||
|
|
||||||
minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}")
|
minecraft("com.mojang:minecraft:${Versions.Mod.minecraft}")
|
||||||
|
|||||||
@@ -4,8 +4,14 @@ import com.dfsek.tectonic.api.TypeRegistry;
|
|||||||
import com.dfsek.tectonic.api.depth.DepthTracker;
|
import com.dfsek.tectonic.api.depth.DepthTracker;
|
||||||
import com.dfsek.tectonic.api.exception.LoadException;
|
import com.dfsek.tectonic.api.exception.LoadException;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.handle.ItemHandle;
|
||||||
|
import com.dfsek.terra.api.handle.WorldHandle;
|
||||||
import com.dfsek.terra.mod.config.SpawnSettingsTemplate;
|
import com.dfsek.terra.mod.config.SpawnSettingsTemplate;
|
||||||
|
|
||||||
|
import com.dfsek.terra.mod.handle.MinecraftItemHandle;
|
||||||
|
|
||||||
|
import com.dfsek.terra.mod.handle.MinecraftWorldHandle;
|
||||||
|
|
||||||
import net.minecraft.entity.EntityType;
|
import net.minecraft.entity.EntityType;
|
||||||
import net.minecraft.entity.SpawnGroup;
|
import net.minecraft.entity.SpawnGroup;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
@@ -43,10 +49,15 @@ import com.dfsek.terra.mod.config.SpawnGroupTemplate;
|
|||||||
import com.dfsek.terra.mod.config.SpawnTypeConfig;
|
import com.dfsek.terra.mod.config.SpawnTypeConfig;
|
||||||
import com.dfsek.terra.mod.util.PresetUtil;
|
import com.dfsek.terra.mod.util.PresetUtil;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
|
||||||
public abstract class ModPlatform extends AbstractPlatform {
|
public abstract class ModPlatform extends AbstractPlatform {
|
||||||
public abstract MinecraftServer getServer();
|
public abstract MinecraftServer getServer();
|
||||||
|
|
||||||
|
private final ItemHandle itemHandle = new MinecraftItemHandle();
|
||||||
|
private final WorldHandle worldHandle = new MinecraftWorldHandle();
|
||||||
|
|
||||||
public void registerWorldTypes(BiConsumer<Identifier, WorldPreset> registerFunction) {
|
public void registerWorldTypes(BiConsumer<Identifier, WorldPreset> registerFunction) {
|
||||||
getRawConfigRegistry()
|
getRawConfigRegistry()
|
||||||
.forEach(pack -> PresetUtil.createDefault(pack).apply(registerFunction));
|
.forEach(pack -> PresetUtil.createDefault(pack).apply(registerFunction));
|
||||||
@@ -93,4 +104,14 @@ public abstract class ModPlatform extends AbstractPlatform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract BaseAddon getPlatformAddon();
|
protected abstract BaseAddon getPlatformAddon();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull WorldHandle getWorldHandle() {
|
||||||
|
return worldHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull ItemHandle getItemHandle() {
|
||||||
|
return itemHandle;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
package com.dfsek.terra.lifecycle;
|
||||||
|
|
||||||
|
import ca.solostudios.strata.Versions;
|
||||||
|
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
||||||
|
import net.minecraft.MinecraftVersion;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
import com.dfsek.terra.lifecycle.util.BiomeUtil;
|
||||||
|
import com.dfsek.terra.mod.CommonPlatform;
|
||||||
|
import com.dfsek.terra.mod.ModPlatform;
|
||||||
|
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class LifecyclePlatform extends ModPlatform {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(LifecyclePlatform.class);
|
||||||
|
private static MinecraftServer server;
|
||||||
|
|
||||||
|
public LifecyclePlatform() {
|
||||||
|
CommonPlatform.initialize(this);
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setServer(MinecraftServer server) {
|
||||||
|
LifecyclePlatform.server = server;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MinecraftServer getServer() {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean reload() {
|
||||||
|
getTerraConfig().load(this);
|
||||||
|
getRawConfigRegistry().clear();
|
||||||
|
boolean succeed = getRawConfigRegistry().loadAll(this);
|
||||||
|
|
||||||
|
|
||||||
|
if(server != null) {
|
||||||
|
server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> {
|
||||||
|
LOGGER.warn("Failed to execute reload", throwable);
|
||||||
|
return null;
|
||||||
|
}).join();
|
||||||
|
BiomeUtil.registerBiomes();
|
||||||
|
server.getWorlds().forEach(world -> {
|
||||||
|
if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) {
|
||||||
|
getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
|
||||||
|
chunkGeneratorWrapper.setPack(pack);
|
||||||
|
LOGGER.info("Replaced pack in chunk generator for world {}", world);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return succeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Iterable<BaseAddon> platformAddon() {
|
||||||
|
List<BaseAddon> addons = new ArrayList<>();
|
||||||
|
|
||||||
|
super.platformAddon().forEach(addons::add);
|
||||||
|
|
||||||
|
String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget();
|
||||||
|
try {
|
||||||
|
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
|
||||||
|
} catch(ParseException e) {
|
||||||
|
try {
|
||||||
|
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
|
||||||
|
} catch(ParseException ex) {
|
||||||
|
LOGGER.warn("Failed to parse Minecraft version", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addons.addAll(getPlatformMods());
|
||||||
|
|
||||||
|
return addons;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Collection<BaseAddon> getPlatformMods();
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.quilt.mixin.lifecycle;
|
package com.dfsek.terra.lifecycle.mixin;
|
||||||
|
|
||||||
import net.minecraft.util.math.noise.DoublePerlinNoiseSampler;
|
import net.minecraft.util.math.noise.DoublePerlinNoiseSampler;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
+3
-4
@@ -1,7 +1,7 @@
|
|||||||
package com.dfsek.terra.quilt.mixin.lifecycle;
|
package com.dfsek.terra.lifecycle.mixin;
|
||||||
|
|
||||||
|
import com.dfsek.terra.lifecycle.util.RegistryUtil;
|
||||||
|
|
||||||
import com.dfsek.terra.quilt.QuiltEntryPoint;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -9,11 +9,10 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
|||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
|
||||||
// Register Terra things to the builtin registries.
|
|
||||||
@Mixin(Registry.class)
|
@Mixin(Registry.class)
|
||||||
public class RegistryMixin {
|
public class RegistryMixin {
|
||||||
@Inject(method = "<clinit>", at = @At("RETURN"))
|
@Inject(method = "<clinit>", at = @At("RETURN"))
|
||||||
private static void registerTerraGenerators(CallbackInfo ci) {
|
private static void registerTerraGenerators(CallbackInfo ci) {
|
||||||
QuiltEntryPoint.register();
|
RegistryUtil.register();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.quilt.mixin.lifecycle;
|
package com.dfsek.terra.lifecycle.mixin.lifecycle;
|
||||||
|
|
||||||
import com.mojang.datafixers.DataFixer;
|
import com.mojang.datafixers.DataFixer;
|
||||||
import net.minecraft.resource.ResourcePackManager;
|
import net.minecraft.resource.ResourcePackManager;
|
||||||
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
|
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
|
|
||||||
import com.dfsek.terra.quilt.QuiltEntryPoint;
|
import com.dfsek.terra.lifecycle.LifecyclePlatform;
|
||||||
|
|
||||||
|
|
||||||
@Mixin(MinecraftServer.class)
|
@Mixin(MinecraftServer.class)
|
||||||
@@ -27,6 +27,6 @@ public class MinecraftServerMixin {
|
|||||||
private void injectConstructor(Thread serverThread, LevelStorage.Session session, ResourcePackManager dataPackManager,
|
private void injectConstructor(Thread serverThread, LevelStorage.Session session, ResourcePackManager dataPackManager,
|
||||||
SaveLoader saveLoader, Proxy proxy, DataFixer dataFixer, ApiServices apiServices,
|
SaveLoader saveLoader, Proxy proxy, DataFixer dataFixer, ApiServices apiServices,
|
||||||
WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) {
|
WorldGenerationProgressListenerFactory worldGenerationProgressListenerFactory, CallbackInfo ci) {
|
||||||
QuiltEntryPoint.getPlatform().setServer((MinecraftServer) (Object) this);
|
LifecyclePlatform.setServer((MinecraftServer) (Object) this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -15,7 +15,7 @@
|
|||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.dfsek.terra.fabric.mixin.lifecycle.client;
|
package com.dfsek.terra.lifecycle.mixin.lifecycle.client;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.RunArgs;
|
import net.minecraft.client.RunArgs;
|
||||||
@@ -24,7 +24,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
import com.dfsek.terra.lifecycle.util.LifecycleUtil;
|
||||||
|
|
||||||
|
|
||||||
@Mixin(MinecraftClient.class)
|
@Mixin(MinecraftClient.class)
|
||||||
@@ -36,6 +36,6 @@ public class MinecraftClientMixin {
|
|||||||
// sorta arbitrary position, after mod init, before window opens
|
// sorta arbitrary position, after mod init, before window opens
|
||||||
shift = At.Shift.BEFORE))
|
shift = At.Shift.BEFORE))
|
||||||
public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) {
|
public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) {
|
||||||
FabricEntryPoint.initialize();
|
LifecycleUtil.initialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -15,7 +15,7 @@
|
|||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.dfsek.terra.fabric.mixin.lifecycle.server;
|
package com.dfsek.terra.lifecycle.mixin.lifecycle.server;
|
||||||
|
|
||||||
import net.minecraft.server.Main;
|
import net.minecraft.server.Main;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
@@ -23,7 +23,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
|||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import com.dfsek.terra.fabric.FabricEntryPoint;
|
import com.dfsek.terra.lifecycle.util.LifecycleUtil;
|
||||||
|
|
||||||
|
|
||||||
@Mixin(Main.class)
|
@Mixin(Main.class)
|
||||||
@@ -35,6 +35,6 @@ public class ServerMainMixin {
|
|||||||
// after registry manager creation
|
// after registry manager creation
|
||||||
)
|
)
|
||||||
private static void injectConstructor(String[] args, CallbackInfo ci) {
|
private static void injectConstructor(String[] args, CallbackInfo ci) {
|
||||||
FabricEntryPoint.initialize();
|
LifecycleUtil.initialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,6 +1,5 @@
|
|||||||
package com.dfsek.terra.quilt.util;
|
package com.dfsek.terra.lifecycle.util;
|
||||||
|
|
||||||
import com.dfsek.terra.quilt.QuiltEntryPoint;
|
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
@@ -12,6 +11,7 @@ import java.util.ArrayList;
|
|||||||
|
|
||||||
import com.dfsek.terra.api.config.ConfigPack;
|
import com.dfsek.terra.api.config.ConfigPack;
|
||||||
import com.dfsek.terra.api.world.biome.Biome;
|
import com.dfsek.terra.api.world.biome.Biome;
|
||||||
|
import com.dfsek.terra.mod.CommonPlatform;
|
||||||
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
import com.dfsek.terra.mod.config.PreLoadCompatibilityOptions;
|
||||||
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
import com.dfsek.terra.mod.config.ProtoPlatformBiome;
|
||||||
import com.dfsek.terra.mod.util.MinecraftUtil;
|
import com.dfsek.terra.mod.util.MinecraftUtil;
|
||||||
@@ -26,7 +26,7 @@ public final class BiomeUtil {
|
|||||||
|
|
||||||
public static void registerBiomes() {
|
public static void registerBiomes() {
|
||||||
logger.info("Registering biomes...");
|
logger.info("Registering biomes...");
|
||||||
QuiltEntryPoint.getPlatform().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
|
||||||
pack.getCheckedRegistry(Biome.class)
|
pack.getCheckedRegistry(Biome.class)
|
||||||
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
.forEach((id, biome) -> registerBiome(biome, pack, id));
|
||||||
});
|
});
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
package com.dfsek.terra.lifecycle.util;
|
||||||
|
|
||||||
|
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
||||||
|
import com.dfsek.terra.mod.CommonPlatform;
|
||||||
|
|
||||||
|
import net.minecraft.util.registry.BuiltinRegistries;
|
||||||
|
|
||||||
|
|
||||||
|
public final class LifecycleUtil {
|
||||||
|
private LifecycleUtil() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initialize() {
|
||||||
|
CommonPlatform.get().getEventManager().callEvent(new PlatformInitializationEvent());
|
||||||
|
BiomeUtil.registerBiomes();
|
||||||
|
CommonPlatform.get().registerWorldTypes((id, preset) -> BuiltinRegistries.add(BuiltinRegistries.WORLD_PRESET, id, preset));
|
||||||
|
}
|
||||||
|
}
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
package com.dfsek.terra.lifecycle.util;
|
||||||
|
|
||||||
|
import com.dfsek.terra.mod.data.Codecs;
|
||||||
|
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.registry.Registry;
|
||||||
|
|
||||||
|
|
||||||
|
public final class RegistryUtil {
|
||||||
|
private RegistryUtil() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER);
|
||||||
|
Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"required": true,
|
||||||
|
"minVersion": "0.8",
|
||||||
|
"package": "com.dfsek.terra.lifecycle.mixin",
|
||||||
|
"compatibilityLevel": "JAVA_17",
|
||||||
|
"mixins": [
|
||||||
|
"NoiseConfigMixin",
|
||||||
|
"RegistryMixin",
|
||||||
|
"lifecycle.MinecraftServerMixin"
|
||||||
|
],
|
||||||
|
"client": [
|
||||||
|
"lifecycle.client.MinecraftClientMixin"
|
||||||
|
],
|
||||||
|
"server": [
|
||||||
|
"lifecycle.server.ServerMainMixin"
|
||||||
|
],
|
||||||
|
"injectors": {
|
||||||
|
"defaultRequire": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.quilt;
|
|
||||||
|
|
||||||
import ca.solostudios.strata.Versions;
|
|
||||||
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
|
||||||
import ca.solostudios.strata.version.Version;
|
|
||||||
import net.minecraft.MinecraftVersion;
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.quiltmc.loader.api.QuiltLoader;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.dfsek.terra.addon.EphemeralAddon;
|
|
||||||
import com.dfsek.terra.api.addon.BaseAddon;
|
|
||||||
import com.dfsek.terra.api.handle.ItemHandle;
|
|
||||||
import com.dfsek.terra.api.handle.WorldHandle;
|
|
||||||
import com.dfsek.terra.api.util.generic.Lazy;
|
|
||||||
import com.dfsek.terra.mod.CommonPlatform;
|
|
||||||
import com.dfsek.terra.mod.ModPlatform;
|
|
||||||
import com.dfsek.terra.mod.generation.MinecraftChunkGeneratorWrapper;
|
|
||||||
import com.dfsek.terra.mod.handle.MinecraftItemHandle;
|
|
||||||
import com.dfsek.terra.mod.handle.MinecraftWorldHandle;
|
|
||||||
import com.dfsek.terra.quilt.util.BiomeUtil;
|
|
||||||
|
|
||||||
|
|
||||||
public class PlatformImpl extends ModPlatform {
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PlatformImpl.class);
|
|
||||||
private final ItemHandle itemHandle = new MinecraftItemHandle();
|
|
||||||
private final WorldHandle worldHandle = new MinecraftWorldHandle();
|
|
||||||
private final Lazy<File> dataFolder = Lazy.lazy(() -> new File(QuiltLoader.getConfigDir().toFile(), "Terra"));
|
|
||||||
private MinecraftServer server;
|
|
||||||
|
|
||||||
public PlatformImpl() {
|
|
||||||
CommonPlatform.initialize(this);
|
|
||||||
load();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setServer(MinecraftServer server) {
|
|
||||||
this.server = server;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MinecraftServer getServer() {
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean reload() {
|
|
||||||
getTerraConfig().load(this);
|
|
||||||
getRawConfigRegistry().clear();
|
|
||||||
boolean succeed = getRawConfigRegistry().loadAll(this);
|
|
||||||
|
|
||||||
|
|
||||||
if(server != null) {
|
|
||||||
server.reloadResources(server.getDataPackManager().getNames()).exceptionally(throwable -> {
|
|
||||||
LOGGER.warn("Failed to execute reload", throwable);
|
|
||||||
return null;
|
|
||||||
}).join();
|
|
||||||
BiomeUtil.registerBiomes();
|
|
||||||
server.getWorlds().forEach(world -> {
|
|
||||||
if(world.getChunkManager().getChunkGenerator() instanceof MinecraftChunkGeneratorWrapper chunkGeneratorWrapper) {
|
|
||||||
getConfigRegistry().get(chunkGeneratorWrapper.getPack().getRegistryKey()).ifPresent(pack -> {
|
|
||||||
chunkGeneratorWrapper.setPack(pack);
|
|
||||||
LOGGER.info("Replaced pack in chunk generator for world {}", world);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return succeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Iterable<BaseAddon> platformAddon() {
|
|
||||||
List<BaseAddon> addons = new ArrayList<>();
|
|
||||||
|
|
||||||
super.platformAddon().forEach(addons::add);
|
|
||||||
|
|
||||||
String mcVersion = MinecraftVersion.CURRENT.getReleaseTarget();
|
|
||||||
try {
|
|
||||||
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion), "minecraft"));
|
|
||||||
} catch(ParseException e) {
|
|
||||||
try {
|
|
||||||
addons.add(new EphemeralAddon(Versions.parseVersion(mcVersion + ".0"), "minecraft"));
|
|
||||||
} catch(ParseException ex) {
|
|
||||||
LOGGER.warn("Failed to parse Minecraft version", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QuiltLoader.getAllMods().forEach(mod -> {
|
|
||||||
String id = mod.metadata().id();
|
|
||||||
if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return;
|
|
||||||
try {
|
|
||||||
Version version = Versions.parseVersion(mod.metadata().version().raw());
|
|
||||||
addons.add(new EphemeralAddon(version, "quilt:" + id));
|
|
||||||
} catch(ParseException e) {
|
|
||||||
LOGGER.warn(
|
|
||||||
"Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " +
|
|
||||||
"it.",
|
|
||||||
id, mod.metadata().version().raw());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return addons;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull String platformName() {
|
|
||||||
return "Quilt";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull WorldHandle getWorldHandle() {
|
|
||||||
return worldHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull File getDataFolder() {
|
|
||||||
return dataFolder.value();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ItemHandle getItemHandle() {
|
|
||||||
return itemHandle;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BaseAddon getPlatformAddon() {
|
|
||||||
return new QuiltAddon(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,45 +19,20 @@ package com.dfsek.terra.quilt;
|
|||||||
|
|
||||||
import cloud.commandframework.execution.CommandExecutionCoordinator;
|
import cloud.commandframework.execution.CommandExecutionCoordinator;
|
||||||
import cloud.commandframework.fabric.FabricServerCommandManager;
|
import cloud.commandframework.fabric.FabricServerCommandManager;
|
||||||
|
import net.minecraft.server.command.ServerCommandSource;
|
||||||
import org.quiltmc.loader.api.ModContainer;
|
import org.quiltmc.loader.api.ModContainer;
|
||||||
import org.quiltmc.qsl.base.api.entrypoint.ModInitializer;
|
import org.quiltmc.qsl.base.api.entrypoint.ModInitializer;
|
||||||
import net.minecraft.server.command.ServerCommandSource;
|
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.registry.BuiltinRegistries;
|
|
||||||
import net.minecraft.util.registry.Registry;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import com.dfsek.terra.api.command.CommandSender;
|
import com.dfsek.terra.api.command.CommandSender;
|
||||||
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
import com.dfsek.terra.api.event.events.platform.CommandRegistrationEvent;
|
||||||
import com.dfsek.terra.api.event.events.platform.PlatformInitializationEvent;
|
|
||||||
import com.dfsek.terra.quilt.util.BiomeUtil;
|
|
||||||
import com.dfsek.terra.mod.CommonPlatform;
|
|
||||||
import com.dfsek.terra.mod.data.Codecs;
|
|
||||||
|
|
||||||
|
|
||||||
public class QuiltEntryPoint implements ModInitializer {
|
public class QuiltEntryPoint implements ModInitializer {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(QuiltEntryPoint.class);
|
private static final Logger logger = LoggerFactory.getLogger(QuiltEntryPoint.class);
|
||||||
|
|
||||||
private static final PlatformImpl TERRA_PLUGIN = new PlatformImpl();
|
private static final QuiltPlatform TERRA_PLUGIN = new QuiltPlatform();
|
||||||
|
|
||||||
|
|
||||||
public static PlatformImpl getPlatform() {
|
|
||||||
return TERRA_PLUGIN;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void register() { // register the things
|
|
||||||
Registry.register(Registry.CHUNK_GENERATOR, new Identifier("terra:terra"), Codecs.MINECRAFT_CHUNK_GENERATOR_WRAPPER);
|
|
||||||
Registry.register(Registry.BIOME_SOURCE, new Identifier("terra:terra"), Codecs.TERRA_BIOME_SOURCE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void initialize() {
|
|
||||||
getPlatform().getEventManager().callEvent(
|
|
||||||
new PlatformInitializationEvent());
|
|
||||||
BiomeUtil.registerBiomes();
|
|
||||||
CommonPlatform.get().registerWorldTypes((id, preset) -> BuiltinRegistries.add(BuiltinRegistries.WORLD_PRESET, id, preset));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize(ModContainer container) {
|
public void onInitialize(ModContainer container) {
|
||||||
logger.info("Initializing Terra Quilt mod...");
|
logger.info("Initializing Terra Quilt mod...");
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Terra.
|
||||||
|
*
|
||||||
|
* Terra is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Terra is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.dfsek.terra.quilt;
|
||||||
|
|
||||||
|
import ca.solostudios.strata.Versions;
|
||||||
|
import ca.solostudios.strata.parser.tokenizer.ParseException;
|
||||||
|
import ca.solostudios.strata.version.Version;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.quiltmc.loader.api.QuiltLoader;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import com.dfsek.terra.addon.EphemeralAddon;
|
||||||
|
import com.dfsek.terra.api.addon.BaseAddon;
|
||||||
|
import com.dfsek.terra.api.util.generic.Lazy;
|
||||||
|
import com.dfsek.terra.lifecycle.LifecyclePlatform;
|
||||||
|
|
||||||
|
|
||||||
|
public class QuiltPlatform extends LifecyclePlatform {
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(QuiltPlatform.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Collection<BaseAddon> getPlatformMods() {
|
||||||
|
return QuiltLoader.getAllMods().stream().flatMap(mod -> {
|
||||||
|
String id = mod.metadata().id();
|
||||||
|
if(id.equals("terra") || id.equals("minecraft") || id.equals("java")) return Stream.empty();
|
||||||
|
try {
|
||||||
|
Version version = Versions.parseVersion(mod.metadata().version().raw());
|
||||||
|
return Stream.of(new EphemeralAddon(version, "quilt:" + id));
|
||||||
|
} catch(ParseException e) {
|
||||||
|
LOGGER.warn(
|
||||||
|
"Mod {}, version {} does not follow semantic versioning specification, Terra addons will be unable to depend on " +
|
||||||
|
"it.",
|
||||||
|
id, mod.metadata().version().raw());
|
||||||
|
}
|
||||||
|
return Stream.empty();
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String platformName() {
|
||||||
|
return "Quilt";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull File getDataFolder() {
|
||||||
|
return new File(QuiltLoader.getConfigDir().toFile(), "Terra");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BaseAddon getPlatformAddon() {
|
||||||
|
return new QuiltAddon(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
-40
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.quilt.mixin.lifecycle.client;
|
|
||||||
|
|
||||||
import com.dfsek.terra.quilt.QuiltEntryPoint;
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.client.RunArgs;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
|
|
||||||
@Mixin(MinecraftClient.class)
|
|
||||||
public class MinecraftClientMixin {
|
|
||||||
@Inject(method = "<init>", at = @At(value = "INVOKE",
|
|
||||||
target = "Lnet/minecraft/client/util/WindowProvider;createWindow" +
|
|
||||||
"(Lnet/minecraft/client/WindowSettings;Ljava/lang/String;Ljava/lang/String;)" +
|
|
||||||
"Lnet/minecraft/client/util/Window;",
|
|
||||||
// sorta arbitrary position, after mod init, before window opens
|
|
||||||
shift = At.Shift.BEFORE))
|
|
||||||
public void injectConstructor(RunArgs args, CallbackInfo callbackInfo) {
|
|
||||||
QuiltEntryPoint.initialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mixins that inject behavior into the client/server lifecycle.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.quilt.mixin.lifecycle;
|
|
||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of Terra.
|
|
||||||
*
|
|
||||||
* Terra is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* Terra is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with Terra. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.dfsek.terra.quilt.mixin.lifecycle.server;
|
|
||||||
|
|
||||||
import com.dfsek.terra.quilt.QuiltEntryPoint;
|
|
||||||
import net.minecraft.server.Main;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
|
|
||||||
@Mixin(Main.class)
|
|
||||||
public class ServerMainMixin {
|
|
||||||
@Inject(method = "main([Ljava/lang/String;)V",
|
|
||||||
at = @At(value = "INVOKE",
|
|
||||||
target = "Lnet/minecraft/resource/ResourcePackManager;<init>(Lnet/minecraft/resource/ResourceType;" +
|
|
||||||
"[Lnet/minecraft/resource/ResourcePackProvider;)V")
|
|
||||||
// after registry manager creation
|
|
||||||
)
|
|
||||||
private static void injectConstructor(String[] args, CallbackInfo ci) {
|
|
||||||
QuiltEntryPoint.initialize();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
},
|
},
|
||||||
"mixin": [
|
"mixin": [
|
||||||
"terra.quilt.mixins.json",
|
"terra.quilt.mixins.json",
|
||||||
|
"terra.lifecycle.mixins.json",
|
||||||
"terra.common.mixins.json"
|
"terra.common.mixins.json"
|
||||||
],
|
],
|
||||||
"accessWidener": "terra.accesswidener"
|
"accessWidener": "terra.accesswidener"
|
||||||
|
|||||||
@@ -4,15 +4,10 @@
|
|||||||
"package": "com.dfsek.terra.quilt.mixin",
|
"package": "com.dfsek.terra.quilt.mixin",
|
||||||
"compatibilityLevel": "JAVA_17",
|
"compatibilityLevel": "JAVA_17",
|
||||||
"mixins": [
|
"mixins": [
|
||||||
"lifecycle.MinecraftServerMixin",
|
|
||||||
"lifecycle.NoiseConfigMixin",
|
|
||||||
"lifecycle.RegistryMixin"
|
|
||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"lifecycle.client.MinecraftClientMixin"
|
|
||||||
],
|
],
|
||||||
"server": [
|
"server": [
|
||||||
"lifecycle.server.ServerMainMixin"
|
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|||||||
Reference in New Issue
Block a user