mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 05:33:00 +00:00 
			
		
		
		
	Make the list of API factories per-ComputerContext
The registry is still a singleton inside the Minecraft code, but this makes the core a little cleaner.
This commit is contained in:
		| @@ -19,7 +19,6 @@ import dan200.computercraft.api.pocket.PocketUpgradeSerialiser; | ||||
| import dan200.computercraft.api.redstone.BundledRedstoneProvider; | ||||
| import dan200.computercraft.api.turtle.TurtleRefuelHandler; | ||||
| import dan200.computercraft.api.turtle.TurtleUpgradeSerialiser; | ||||
| import dan200.computercraft.core.apis.ApiFactories; | ||||
| import dan200.computercraft.core.asm.GenericMethod; | ||||
| import dan200.computercraft.core.filesystem.WritableFileMount; | ||||
| import dan200.computercraft.impl.detail.DetailRegistryImpl; | ||||
|   | ||||
| @@ -0,0 +1,29 @@ | ||||
| // SPDX-FileCopyrightText: 2018 The CC: Tweaked Developers | ||||
| // | ||||
| // SPDX-License-Identifier: MPL-2.0 | ||||
| 
 | ||||
| package dan200.computercraft.impl; | ||||
| 
 | ||||
| import dan200.computercraft.api.lua.ILuaAPIFactory; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.Objects; | ||||
| 
 | ||||
| public final class ApiFactories { | ||||
|     private ApiFactories() { | ||||
|     } | ||||
| 
 | ||||
|     private static final Collection<ILuaAPIFactory> factories = new LinkedHashSet<>(); | ||||
|     private static final Collection<ILuaAPIFactory> factoriesView = Collections.unmodifiableCollection(factories); | ||||
| 
 | ||||
|     public static synchronized void register(ILuaAPIFactory factory) { | ||||
|         Objects.requireNonNull(factory, "provider cannot be null"); | ||||
|         factories.add(factory); | ||||
|     } | ||||
| 
 | ||||
|     public static Collection<ILuaAPIFactory> getAll() { | ||||
|         return factoriesView; | ||||
|     } | ||||
| } | ||||
| @@ -15,6 +15,7 @@ import dan200.computercraft.core.computer.mainthread.MainThreadConfig; | ||||
| import dan200.computercraft.core.lua.CobaltLuaMachine; | ||||
| import dan200.computercraft.core.lua.ILuaMachine; | ||||
| import dan200.computercraft.impl.AbstractComputerCraftAPI; | ||||
| import dan200.computercraft.impl.ApiFactories; | ||||
| import dan200.computercraft.shared.CommonHooks; | ||||
| import dan200.computercraft.shared.computer.metrics.GlobalMetrics; | ||||
| import dan200.computercraft.shared.config.ConfigSpec; | ||||
| @@ -70,6 +71,7 @@ public final class ServerContext { | ||||
|             .computerThreads(ConfigSpec.computerThreads.get()) | ||||
|             .mainThreadScheduler(mainThread) | ||||
|             .luaFactory(luaMachine) | ||||
|             .apiFactories(ApiFactories.getAll()) | ||||
|             .build(); | ||||
|         idAssigner = new IDAssigner(storageDir.resolve("ids.json")); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates