From 56fb510d96d57db4990d86ef203ebd099c45797f Mon Sep 17 00:00:00 2001 From: dfsek Date: Thu, 22 Apr 2021 10:31:56 -0700 Subject: [PATCH] fabric scheduler impl --- .../com/dfsek/terra/fabric/FabricUtil.java | 23 +++++++++++++++++++ .../dfsek/terra/fabric/TerraFabricPlugin.java | 17 ++------------ .../fabric/task/FabricTaskScheduler.java | 17 +++++++++----- 3 files changed, 36 insertions(+), 21 deletions(-) create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricUtil.java diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricUtil.java new file mode 100644 index 000000000..b3f4939d3 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricUtil.java @@ -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); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 0b584ea16..08fe4a6da 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -40,11 +40,7 @@ import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.fabric.inventory.FabricItemHandle; import com.dfsek.terra.fabric.mixin.GeneratorTypeAccessor; import com.dfsek.terra.fabric.task.FabricTaskScheduler; -import com.dfsek.terra.fabric.world.FabricAdapter; -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.*; import com.dfsek.terra.fabric.world.features.PopulatorFeature; import com.dfsek.terra.fabric.world.generator.FabricChunkGenerator; 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.BiomeEffects; import net.minecraft.world.biome.GenerationSettings; -import net.minecraft.world.biome.SpawnSettings; import net.minecraft.world.gen.GenerationStep; import net.minecraft.world.gen.chunk.ChunkGenerator; 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.feature.ConfiguredFeature; 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.FeatureConfig; import net.minecraft.world.gen.surfacebuilder.SurfaceBuilder; @@ -88,12 +82,7 @@ import org.apache.logging.log4j.LogManager; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.literal; @@ -403,7 +392,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @Author("Terra") @Version("1.0.0") private static final class FabricAddon extends TerraAddon implements EventListener { - private final TerraPlugin main; private FabricAddon(TerraPlugin main) { @@ -440,7 +428,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { injectTree(treeRegistry, "WARPED_FUNGUS", ConfiguredFeatures.WARPED_FUNGI); } - private void injectTree(CheckedRegistry registry, String id, ConfiguredFeature tree) { try { registry.add(id, new FabricTree(tree)); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/task/FabricTaskScheduler.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/task/FabricTaskScheduler.java index ae1ea5839..9f0537ecb 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/task/FabricTaskScheduler.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/task/FabricTaskScheduler.java @@ -1,20 +1,25 @@ package com.dfsek.terra.fabric.task; import com.dfsek.terra.api.task.TaskScheduler; +import com.dfsek.terra.fabric.FabricUtil; import net.minecraft.server.MinecraftServer; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import net.minecraft.server.ServerTask; +import net.minecraft.util.Util; public class FabricTaskScheduler implements TaskScheduler { - private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()-1); @Override 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 public void runTask(Runnable task, long ticks) { - // TODO implementation + MinecraftServer server = FabricUtil.getServer(); + server.send(new ServerTask(server.getTicks() + (int) ticks, task)); } }