fabric scheduler impl

This commit is contained in:
dfsek committed 2021-04-22 10:31:56 -07:00
1 parent 5821302eb8
commit 56fb510d96
3 files changed
+36 -21

No files matched your search

@@ -0,0 +1,23 @@
package com.dfsek.terra.fabric;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.dedicated.MinecraftDedicatedServer;
public class FabricUtil {
@SuppressWarnings("deprecation")
public static MinecraftServer getServer() {
Object game = FabricLoader.getInstance().getGameInstance();
if(game instanceof MinecraftDedicatedServer) {
return (MinecraftDedicatedServer) game;
} else if(game instanceof MinecraftClient) {
MinecraftClient client = (MinecraftClient) game;
if(!client.isIntegratedServerRunning()) {
throw new IllegalStateException("Client is not running integrated server: " + client);
}
return client.getServer();
}
throw new IllegalStateException("No MinecraftServer initialized: " + game);
}
}
@@ -40,11 +40,7 @@ import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.fabric.inventory.FabricItemHandle; import com.dfsek.terra.fabric.inventory.FabricItemHandle;
import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor;
import com.dfsek.terra.fabric.task.FabricTaskScheduler; import com.dfsek.terra.fabric.task.FabricTaskScheduler;
import com.dfsek.terra.fabric.world.FabricAdapter; import com.dfsek.terra.fabric.world.*;
import com.dfsek.terra.fabric.world.FabricBiome;
import com.dfsek.terra.fabric.world.FabricTree;
import com.dfsek.terra.fabric.world.FabricWorldHandle;
import com.dfsek.terra.fabric.world.TerraBiomeSource;
import com.dfsek.terra.fabric.world.features.PopulatorFeature; import com.dfsek.terra.fabric.world.features.PopulatorFeature;
import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator;
import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper; import com.dfsek.terra.fabric.world.generator.FabricChunkGeneratorWrapper;
@@ -69,7 +65,6 @@ import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeEffects; import net.minecraft.world.biome.BiomeEffects;
import net.minecraft.world.biome.GenerationSettings; import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.biome.SpawnSettings;
import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.chunk.ChunkGenerator; import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.chunk.ChunkGeneratorSettings; import net.minecraft.world.gen.chunk.ChunkGeneratorSettings;
@@ -77,7 +72,6 @@ import net.minecraft.world.gen.decorator.Decorator;
import net.minecraft.world.gen.decorator.NopeDecoratorConfig; import net.minecraft.world.gen.decorator.NopeDecoratorConfig;
import net.minecraft.world.gen.feature.ConfiguredFeature; import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.ConfiguredFeatures; import net.minecraft.world.gen.feature.ConfiguredFeatures;
import net.minecraft.world.gen.feature.DefaultBiomeFeatures;
import net.minecraft.world.gen.feature.DefaultFeatureConfig; import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.FeatureConfig; import net.minecraft.world.gen.feature.FeatureConfig;
import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder;
@@ -88,12 +82,7 @@ import org.apache.logging.log4j.LogManager;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.argument;
import static net.minecraft.server.command.CommandManager.literal; import static net.minecraft.server.command.CommandManager.literal;
@@ -403,7 +392,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@Author("Terra") @Author("Terra")
@Version("1.0.0") @Version("1.0.0")
private static final class FabricAddon extends TerraAddon implements EventListener { private static final class FabricAddon extends TerraAddon implements EventListener {
private final TerraPlugin main; private final TerraPlugin main;
private FabricAddon(TerraPlugin main) { private FabricAddon(TerraPlugin main) {
@@ -440,7 +428,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
injectTree(treeRegistry, "WARPED_FUNGUS", ConfiguredFeatures.WARPED_FUNGI); injectTree(treeRegistry, "WARPED_FUNGUS", ConfiguredFeatures.WARPED_FUNGI);
} }
private void injectTree(CheckedRegistry<Tree> registry, String id, ConfiguredFeature<?, ?> tree) { private void injectTree(CheckedRegistry<Tree> registry, String id, ConfiguredFeature<?, ?> tree) {
try { try {
registry.add(id, new FabricTree(tree)); registry.add(id, new FabricTree(tree));
@@ -1,20 +1,25 @@
package com.dfsek.terra.fabric.task; package com.dfsek.terra.fabric.task;
import com.dfsek.terra.api.task.TaskScheduler; import com.dfsek.terra.api.task.TaskScheduler;
import com.dfsek.terra.fabric.FabricUtil;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerTask;
import java.util.concurrent.ExecutorService; import net.minecraft.util.Util;
import java.util.concurrent.Executors;
public class FabricTaskScheduler implements TaskScheduler { public class FabricTaskScheduler implements TaskScheduler {
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()-1);
@Override @Override
public void runTaskAsynchronously(Runnable task, long ticks) { public void runTaskAsynchronously(Runnable task, long ticks) {
runTask(() -> executorService.execute(task), ticks); runTask(() -> Util.getMainWorkerExecutor().execute(task), ticks);
}
@Override
public void runTaskAsynchronously(Runnable task) {
Util.getMainWorkerExecutor().execute(task);
} }
@Override @Override
public void runTask(Runnable task, long ticks) { public void runTask(Runnable task, long ticks) {
// TODO implementation MinecraftServer server = FabricUtil.getServer();
server.send(new ServerTask(server.getTicks() + (int) ticks, task));
} }
} }